<?xml version="1.0" encoding="utf-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title>Guyskk的博客</title>
  <subtitle>Guyskk的博客 | 聊技术，谈生活，分享我的作品</subtitle>
  <link href="https://blog.guyskk.com/" rel="alternate"/>
  <link href="https://blog.guyskk.com/feed.xml" rel="self" type="application/atom+xml"/>
  <rights>Copyright ©
    2015-2026,
    guyskk</rights>
  <icon>https://blog.guyskk.com/assets/logo.png</icon>

  <author>
    <name>guyskk</name>
    <email>guyskk@qq.com</email>
    <uri>https://blog.guyskk.com/about</uri>
  </author>

  <updated>2026-05-09T21:16:21+08:00</updated>
  <id>/</id>
  <generator version="4.4.1">Jekyll</generator>

  

  
  
  

  <entry>
    <title type="html">AI Coding 验证系统的第一性原理</title>
    <id>/notes/verification-system-first-principles</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/verification-system-first-principles"/>
    <updated>2026-05-09T00:00:00+08:00</updated>
    <published>2026-05-09T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<blockquote>
  <p>写代码是便宜的，验证是贵的。但验证的本质是什么？</p>
</blockquote>

<h2 id="背景">背景</h2>

<p>上一篇笔记讲了 AI Coding Team 的管理方法——马斯克守底线、黄仁勋守质量、雷军守价值。但那篇更偏”怎么做”，这篇要深入”为什么”。</p>

<p>起因是读到孔某人的文章《大组织内的AI Coding过度推行是一种饮鸩止渴》，里面提到美团31万行代码AI重构的困境：AI Coding让代码产出速度暴增，但系统复杂度增长得更快，团队的维护能力跟不上。</p>

<p>这让我重新思考一个根本问题：<strong>验证系统的第一性原理到底是什么？</strong></p>

<h2 id="不确定性--认知与现实的差距">不确定性 = 认知与现实的差距</h2>

<p>先区分两个容易混淆的概念：</p>

<ul>
  <li><strong>认知</strong>：我认为现在是什么样。关于当前现实的判断，是心智模型。</li>
  <li><strong>预期</strong>：我认为未来会怎样。关于未来的判断，是意图投影。</li>
</ul>

<p>两者的关系：认知是预期的基础。如果认知本身就偏了，预期必然偏。</p>

<p>关键区别：<strong>验证只能观测当下，不能观测未来。</strong> 跑一个测试，你观测的是此刻代码的行为，跟此刻你对代码行为的认知之间的差距。用当下的观测去推断未来——那是推断，不是验证。</p>

<p>所以严格来说：</p>

<blockquote>
  <p><strong>不确定性 = 认知与现实的差距</strong></p>
</blockquote>

<p>预期是派生的。修正认知偏差是根本。</p>

<p>验证做的唯一一件事：拿现实来校准认知。校准完了，认知更接近现实了，不确定性就降低了。</p>

<h2 id="认知与现实的双向收敛">认知与现实的双向收敛</h2>

<p>减少不确定性，不是让认知去匹配现实，也不是让现实去匹配认知，而是<strong>两者共同收敛到一起，凝固下来</strong>。</p>

<ul>
  <li>方向A：认知 → 现实（学习、验证、测试）——”我原来以为是这样，观测后发现是那样，更新认知”</li>
  <li>方向B：现实 → 认知（建造、实现、创造）——”我想要这样，我造出一个东西来，让它变成这样”</li>
</ul>

<p>产品开发是两者的交替循环：认知→建造→观测→更新认知→再建造……直到两者凝固——认知稳定了，现实也稳定了。凝固不是永久的，下一轮迭代可以重新打回流体态。</p>

<h2 id="验证的强度公式">验证的强度公式</h2>

<p>验证的严格程度，应该正比于：</p>

<blockquote>
  <p><strong>验证强度 ∝ 不确定性 × 失败代价</strong></p>
</blockquote>

<ul>
  <li>芯片：后果极其严重（流片一次几百万美元），不确定性高 → 验证极度严格</li>
  <li>火箭：后果是物理毁灭，不确定性极高 → 验证极度严格</li>
  <li>Web应用：后果是可回滚的，不确定性中等 → 验证中等</li>
  <li>内部工具：后果低，不确定性低 → 验证轻量</li>
</ul>

<p>AI Coding改变了什么？它大幅增加了”不确定性”这一侧——因为AI写的代码你不完全理解，而且产出速度极快，不确定性在以指数级累积。但”后果严重性”没有变。</p>

<p>所以：如果验证强度不变，风险就在指数级增长。</p>

<h2 id="三层不确定性">三层不确定性</h2>

<p>不确定性在整个系统内是分层的：</p>

<p><strong>第1层：方向/意图不确定性（根源）</strong></p>

<p>“做出来的东西是不是我真正需要的？”</p>

<p>不确定性最大，影响最深远。美团的问题本质在这里——AI Coding让PM提出更多低质量需求，模糊的、实验性的需求都进了生产系统。代码写得再正确，方向错了也是浪费。</p>

<p><strong>第2层：设计不确定性（桥梁）</strong></p>

<p>“设计能不能支撑实现和未来扩展？”</p>

<p>AI写代码的特点是：每段局部都是合理的，但全局结构会逐渐腐化。因为AI没有”系统全局观”——它看的是当前上下文窗口里的内容，不是整个代码库的架构。</p>

<p><strong>第3层：实现不确定性（执行）</strong></p>

<p>“代码是不是按设计在运行？”</p>

<p>这是最直观的一层——单元测试、集成测试、CI/CD。AI Coding放大的主要是这一层的产出速度。</p>

<p><strong>关键洞察：AI Coding放大的是第3层的产出速度，但第1层和第2层的不确定性没有同步降低。</strong> 这就是美团困境的本质——代码写得快了，但设计质量没有跟上，需求质量没有把关。</p>

<h2 id="意图验证讨论是唯一通道">意图验证：讨论是唯一通道</h2>

<p>意图只存在于人的脑子里，是内部状态，外部世界观测不到。要把意图从一个脑袋传到另一个脑袋，唯一的通道是<strong>符号化表达</strong>——语言、文字、图示。</p>

<p>所以：<strong>意图传递的唯一通道是沟通。讨论（广义的）是唯一方法。</strong></p>

<p>但讨论有一个根本性缺陷：<strong>语言无法自我验证。</strong> 你说了一段话，对方说”我理解了”，你没有证据表明对方的理解和你的意图一致。</p>

<p>有效的方法：<strong>让对方把理解的东西具象化成可观测的产物，然后你验证这个产物。</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>你的意图（不可观测）
    ↓ 讨论传递
对方的理解（不可观测）
    ↓ 具象化
产物（可观测！）——复述、设计文档、原型
    ↓ 你验证
发现偏差 → 再讨论 → 再具象化 → 再验证 → ……
</code></pre></div></div>

<p>核心原则：<strong>永远不要问”你理解了吗？”——要问”你觉得这个需求是什么？说给我听。”</strong> 前者是噪声，后者是信号。</p>

<h3 id="未知未知的暴露">未知未知的暴露</h3>

<p>认知中存在”我不知道我不知道”的盲区。无法直接消除，但可以通过碰撞间接暴露：</p>

<p><strong>极端化推演</strong>：把需求推向极端，看哪里断裂。用极端场景作为探针，探测认知的边界。</p>

<p><strong>红队思维</strong>：故意攻击需求。问”为什么要做这个？不做会怎样？” 每一个”为什么”都在从不同角度照射意图，暴露隐含假设。</p>

<p><strong>多元视角</strong>：从用户视角、技术视角、商业视角分别审视。每个视角是一束光，照到认知中不同的暗区。</p>

<h2 id="认知分层注意力的经济学">认知分层：注意力的经济学</h2>

<p>你的全部认知可以分为两层：</p>

<p><strong>不稳定层</strong>：意图、方向、业务判断。随需求和场景变化，每个项目都不同，需要注意力持续投入。</p>

<p><strong>稳定层</strong>：设计审美、工程标准、架构原则。来自多年经验，跨项目基本不变，已经凝固。</p>

<p><strong>注意力是稀缺资源。</strong> 稳定层如果每次都靠人工审查，就是浪费注意力。应该把它固化成验证系统，让AI自动执行，注意力就解放出来，只关注不稳定层。</p>

<p>转化过程：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>凝固认知（主观）
    ↓ 表达成规则
客观规则（可形式化）
    ↓ 编码成工具/流程
验证系统（可自动执行）
</code></pre></div></div>

<h2 id="验证系统的四种组件">验证系统的四种组件</h2>

<p>验证系统不是规则的集合，是一个系统——有组件、有流程、有反馈、有边界。</p>

<p><strong>检查器（Checker）</strong>：自动执行的判断，不需要人参与。类型检查、lint、自动化测试、安全扫描。</p>

<p><strong>审查器（Reviewer）</strong>：需要判断力的审视，AI执行，人审查结论。AI交叉代码审查、架构审查、设计审查。</p>

<p><strong>流程（Process）</strong>：事情必须按什么顺序走，每个节点有准入和准出条件。设计评审流程、合并流程、发布流程。</p>

<p><strong>反馈环（Feedback Loop）</strong>：从结果中学习，更新系统本身。线上bug回溯→更新检查规则。</p>

<h3 id="分层结构">分层结构</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>L1 自动检查层（零人工成本）：类型检查、lint、测试、安全扫描
L2 AI审查层（低人工成本）：架构审查、设计审查、代码审查
L3 流程守护层（中人工成本）：设计评审、合并审批、发布流程
L4 人工层（高人工成本）：方向判断、意图确认、异常处理
</code></pre></div></div>

<p>越底层越频繁、越自动化、越不消耗人。越顶层越稀少、越需要判断力、越消耗人。</p>

<h2 id="五条核心原则">五条核心原则</h2>

<p><strong>原则1：从失败中生长，不是从蓝图中设计。</strong> 不要试图一次性设计完美的验证系统。让系统在实际运行中，从每一次失败里学到规则。问题→追溯→加检查→系统进化。</p>

<p><strong>原则2：检查器优先于审查器，审查器优先于人工。</strong> 能自动化的自动化，不能自动化但可重复的让AI执行，需要判断力的人来做。进化方向：把审查器不断降级为检查器。</p>

<p><strong>原则3：验证失败必须有反馈回路。</strong> 验证系统的价值不在于找到问题，在于让同类问题不再发生。修了→追溯根因→更新规则→同类问题永不再犯。</p>

<p><strong>原则4：SOP是验证系统的操作手册。</strong> 精确定义：谁触发→做什么→输入什么→输出什么→谁检查→不通过怎么办。</p>

<p><strong>原则5：系统的边界。</strong> 反复出现的问题、代价高昂的失败、AI容易犯的系统性错误——值得验证。一次性问题、代价极低的失败——不值得验证。</p>

<h2 id="工作流程">工作流程</h2>

<p>实际操作中，我把流程简化为两个阶段：</p>

<p><strong>阶段1：意图+规划</strong> — 我和一个AI直接讨论，讨论到认知凝固，产出意图文档和蓝图。</p>

<p><strong>阶段2：设计+实现</strong> — 分配给多个AI并行工作。各自做详细设计→互相review→实现代码→提PR→自动检查+交叉review→合并→部署测试环境→我体验验证。</p>

<p>关键设计：</p>

<ul>
  <li>AI做不下去时可以直接找我，不需要层层上报</li>
  <li>反馈回路在每个环节都有：设计review、代码review、集成测试、我体验测试</li>
  <li>逃逸到下游的问题，追溯到上游的验证缺失，补充验证</li>
</ul>

<h2 id="基于github的实现">基于GitHub的实现</h2>

<p>整个系统不需要自建基础设施，用GitHub原生工作流就够了：</p>

<ul>
  <li><strong>Git仓库</strong> = 共享工作空间 + 版本管理</li>
  <li><strong>PR</strong> = 提交 + Review + 反馈 + 合并</li>
  <li><strong>Issue</strong> = 任务分配 + 跟踪 + 升级</li>
  <li><strong>GitHub Actions</strong> = 自动化检查</li>
  <li><strong>CODEOWNERS</strong> = 自动分配reviewer</li>
</ul>

<p>仓库本身就是上下文。每个Agent clone仓库后，意图文档、蓝图、其他模块的设计文档都在里面。不需要额外的”上下文推送”机制。</p>

<h2 id="系统生长路径">系统生长路径</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>第1代：你直接和一个AI讨论+实现，验证靠你自己
    ↓
第2代：你讨论，分配给2-3个AI并行实现，简单PR review
    ↓
第3代：从问题中长出新机制
  - 接口对不上？→ 加接口契约检查
  - Review质量低？→ 加上下文自动推送
  - Agent卡住？→ 加阻塞自动上报
    ↓
第4代：大部分验证自动化，你只在意图层和异常时介入
</code></pre></div></div>

<h2 id="写在最后">写在最后</h2>

<p>验证系统的第一性原理可以归结为一句话：</p>

<blockquote>
  <p><strong>验证的本质是减少不确定性。不确定性 = 认知与现实的差距。</strong></p>
</blockquote>

<p>所有验证方法——测试、review、CI、讨论对齐、用户反馈——都是在做同一件事：用观测来缩小认知和现实之间的差距。</p>

<p>在这个AI Coding的时代，写代码越来越便宜，但认知和现实之间的差距不会自动缩小。<strong>你的价值从”能写代码”变成了”能定义正确的问题”和”能建验证系统来保证答案是对的”。</strong></p>

<p>黄仁勋说得对：写代码是便宜的，验证是贵的。但更准确的说法是——<strong>写代码是AI的事，验证是你的事。</strong></p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">AI Coding Team 管理笔记</title>
    <id>/notes/ai-coding-team-management</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/ai-coding-team-management"/>
    <updated>2026-05-02T00:00:00+08:00</updated>
    <published>2026-05-02T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<blockquote>
  <p>不审查代码，审查系统。不信任代码，信任验证。</p>
</blockquote>

<h2 id="背景">背景</h2>

<p>我写代码几乎 95% 以上是让 AI 写的。Python 后端我可以仔细 review，发现问题让 AI 改。但对于不熟悉的领域——比如 APP 开发、C++、Rust——我没法逐行审查。随着 AI 越来越强，多个 Agent 并行开发，代码量远超我能看的范围。</p>

<p>核心问题：<strong>注意力有限，如何保证交付质量？</strong></p>

<p>答案是：从”审查代码”转变为”验证行为”。</p>

<h2 id="马斯克守住底线">马斯克：守住底线</h2>

<p>马斯克管理 SpaceX 的方式——他不懂每个零件的制造细节，但他知道物理极限。</p>

<p>他的方法是第一性原理 + Failure Mode Analysis。不管方案多漂亮，他只问一个问题：</p>

<blockquote>
  <p><strong>最坏情况是什么？</strong></p>
</blockquote>

<p>他常说的话：</p>

<ul>
  <li>“给我解释最坏情况”（worst case explanation）</li>
  <li>“这个方案的物理极限在哪？”</li>
  <li>“如果这个东西失败，最可能因为什么？”</li>
</ul>

<p>映射到软件——你不需要 review AI 写的 Rust 代码，但你能判断方案在系统层面是否合理：</p>

<ul>
  <li>并发瓶颈在哪？锁的粒度对不对？</li>
  <li>分布式场景下会丢数据吗？</li>
  <li>依赖的第三方服务挂了，降级策略是什么？</li>
</ul>

<p>具体执行：让 AI 做 failure mode 分析，你 review 分析结果，不做取舍决策（速度 vs 质量 vs 成本）。</p>

<h2 id="黄仁勋守住质量">黄仁勋：守住质量</h2>

<p>黄仁勋最核心的一个数字：<strong>NVIDIA 验证工程师的数量是设计工程师的好几倍。</strong></p>

<p>他的哲学：写代码（设计）是便宜的，验证是贵的。不要试图理解每个细节，但要保证验证系统覆盖每个细节。</p>

<p>对应到 AI 团队管理——先建验证基础设施，再让 AI 干活：</p>

<ul>
  <li>单元测试框架（AI 写，CI 自动跑）</li>
  <li>集成测试（核心流程端到端验证）</li>
  <li>模糊测试（对 API 自动喂随机输入）</li>
  <li>性能基准（每次改动前后对比）</li>
  <li>安全扫描（dependency audit + SAST）</li>
  <li>lint / 类型检查（任何语言都有成熟工具）</li>
  <li>金丝雀部署（灰度发布，线上自动验证）</li>
</ul>

<p>每个任务的标准流程：</p>

<ol>
  <li>需求明确（你定义）</li>
  <li>AI 写实现</li>
  <li>AI 写测试</li>
  <li>另一个 AI 做 code review</li>
  <li>自动跑验证 pipeline</li>
  <li>全绿 → 合并，红灯 → 打回</li>
</ol>

<p>你只看两样东西：<strong>验证覆盖率 + 最终通过/失败报告</strong>。</p>

<p>核心理念：一个人检查所有人的代码不可扩展，但一套检查系统可以无限扩展。</p>

<h2 id="雷军守住价值">雷军：守住价值</h2>

<p>雷军跟黄仁勋完全不同的思路。黄仁勋建验证体系，雷军会说你搞得太工程师思维了。</p>

<p>雷军的哲学就七个字：<strong>专注、极致、口碑、快。</strong></p>

<p>他的做法是基本可用就发布，让用户告诉你哪里不对。MIUI 早期版本 bug 多到离谱，但每周发一版更新，用户疯狂反馈，团队跟着改。</p>

<ul>
  <li>“把砍掉的功能再做精简，还是太多了”</li>
  <li>“不要闭门造车，把东西扔出去”</li>
  <li>“口碑来自细节，细节来自亲身体验”</li>
</ul>

<p>具体执行：</p>

<ul>
  <li>不追求完美，追求够快。”能跑、核心功能对，就发布”</li>
  <li>每周花一小时，把自己当小白用户，走一遍核心流程</li>
  <li>砍功能：先做一个功能做到极致，上线拿到反馈，再决定下一步</li>
</ul>

<p>自动化测试验证不了的东西——体验、交互、需求真伪——只有真人能告诉你。</p>

<p>最好的 review 是用户的投诉。</p>

<h2 id="三位一体">三位一体</h2>

<p>三个人分别守住不同的维度：</p>

<table>
  <thead>
    <tr>
      <th> </th>
      <th>马斯克</th>
      <th>黄仁勋</th>
      <th>雷军</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>守住</strong></td>
      <td>底线</td>
      <td>质量</td>
      <td>价值</td>
    </tr>
    <tr>
      <td><strong>防止</strong></td>
      <td>出大事才知道</td>
      <td>bug 率失控</td>
      <td>做一堆没用的</td>
    </tr>
    <tr>
      <td><strong>核心动作</strong></td>
      <td>问最坏情况</td>
      <td>建验证体系</td>
      <td>问用户反馈</td>
    </tr>
    <tr>
      <td><strong>关键问题</strong></td>
      <td>会炸吗</td>
      <td>测到了吗</td>
      <td>有人用吗</td>
    </tr>
  </tbody>
</table>

<p>缺任何一个维度都不行：没有马斯克，系统出大事才知道；没有黄仁勋，bug 率控制不住；没有雷军，做了一堆没用的东西。</p>

<h2 id="架构设计怎么做">架构设计怎么做</h2>

<p>不是自己写文档，是跟 AI 讨论、拍板、让 AI 写。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>你脑子里有想法/方向
       ↓
跟 AI 讨论（可能多轮）
  "我觉得应该用事件驱动，你觉得呢？"
  "并发场景下消息顺序怎么保证？"
  AI 回复 → 你追问 → AI 补充 → 你再质疑
       ↓
你拍板："就这个方案，XX部分用A方案，YY部分用B方案"
       ↓
AI 写架构文档、接口定义、技术方案
       ↓
你 review 文档（确认 AI 有没有理解对你的决策）
       ↓
确认无误，文档就是开发契约
</code></pre></div></div>

<p>时间分配：</p>

<ul>
  <li>60% 跟 AI 讨论、质疑、头脑风暴</li>
  <li>20% 拍板决策（选 A 不选 B，这个优先级高那个先不做）</li>
  <li>20% review AI 写的文档和接口定义</li>
</ul>

<p>你的核心竞争力不是”写文档写得漂亮”，是<strong>讨论过程中暴露出来的判断力和决策力</strong>。就像 CEO 不会自己写 PPT——CEO 提供观点和判断，秘书（AI）负责整理成文档。</p>

<h2 id="ai-审-ai-的具体模式">AI 审 AI 的具体模式</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Agent A 写代码（sonnet 级别）
Agent B 写测试（sonnet 级别）
Agent C review 代码（opus 级别，不同 prompt）
Agent D review 测试覆盖度（opus 级别）
自动 CI pipeline 跑一遍
全绿 → 合并，红灯 → 信息回到 Agent A 重做
</code></pre></div></div>

<p>你只需要看最终的通过/失败报告 + review AI 输出的 review 结论摘要。</p>

<h2 id="日常工作分配">日常工作分配</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>25%  跟 AI 讨论架构和方案        ← 核心：讨论、质疑、拍板
15%  review AI 写的文档/接口定义 ← 确认 AI 理解对了你的决策
15%  跟 AI 对话质疑执行方案      ← 第一性原理问问题
15%  Review 验证结果和报告      ← 测试覆盖率、CI 状态、运行指标
10%  端到端手动验证           ← 把自己当用户走一遍
10%  看关键代码，保持直觉      ← 极少数情况
10%  业务决策、外部协调        ← 跟真人相关的事
</code></pre></div></div>

<h2 id="常见问题速查">常见问题速查</h2>

<table>
  <thead>
    <tr>
      <th>情况</th>
      <th>该怎么做</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>不熟悉 AI 用的语言</td>
      <td>只看测试结果和 CI 报告，不看代码</td>
    </tr>
    <tr>
      <td>多个 AI 并行开发</td>
      <td>先建好验证体系，再让他们开工</td>
    </tr>
    <tr>
      <td>不确定 AI 写的对不对</td>
      <td>问 AI “失败模式是什么”</td>
    </tr>
    <tr>
      <td>不知道功能该不该做</td>
      <td>先做最小版本给用户，用反馈决定</td>
    </tr>
    <tr>
      <td>代码量太大看不过来</td>
      <td>专注看架构图和数据流，不看实现</td>
    </tr>
    <tr>
      <td>AI 写的代码有性能问题</td>
      <td>看 profiling 结果，不看代码本身</td>
    </tr>
    <tr>
      <td>担心安全漏洞</td>
      <td>配好 SAST 扫描和 dependency audit</td>
    </tr>
    <tr>
      <td>不知道质量如何</td>
      <td>看测试覆盖率和线上监控指标</td>
    </tr>
  </tbody>
</table>

<h2 id="写在最后">写在最后</h2>

<p>你的角色不是不懂技术的 PM，是<strong>懂物理定律的系统架构师</strong>。</p>

<p>PM 只管”要做什么”，你管”怎么做才不会炸”。你不是在管理一群程序员，你是在建设一个质量保障体系，然后让 AI 在这个体系里自由发挥。</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">从文本补全到状态机循环：重定义 AI Agent 的操作系统架构</title>
    <id>/notes/ai-agent-state-machine</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/ai-agent-state-machine"/>
    <updated>2026-02-23T00:00:00+08:00</updated>
    <published>2026-02-23T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<h2 id="引言真正的瓶颈---上下文窗口容量">引言：真正的瓶颈 - 上下文窗口容量</h2>

<p>当 AI 大模型推理速度突破 5000 tokens/s，Agent 的 Re-Act 循环进入毫秒级时代，一个物理铁律浮出水面：有限的上下文窗口（200K~1M tokens）将在几十秒内被“思考”与“日志”填满。现有的“追加历史记录”模式瞬间失效，因为这无异于试图用容量极小的 L1 缓存去存储整个程序运行周期的所有数据流。</p>

<p>这一矛盾决定了 AI Agent 的技术终局：上下文窗口必须从“聊天记录堆”重构为“CPU 寄存器堆”。未来的 Agent 架构不再是简单的对话流，而是类似于操作系统的状态机循环——Context Window 只保留当前指令指针和核心状态寄存器，通过严格的“状态覆盖”替代无脑的“日志追加”，用信息熵减对抗数据洪流。</p>

<p>真正的瓶颈在于 LLM 的核心物理限制——<strong>上下文窗口容量</strong>。即便模型能力不断提升，上下文窗口从 200K 扩展到 1M，它依然是一个有限的物理容器。试图通过无限扩大窗口来承载 Agent 无限运行产生的日志，无异于试图用一杯水去接一条不断流淌的河。</p>

<p>我们必须从 Transformer 的本质出发，承认一个残酷的现实：<strong>Transformer 是无状态的，它通过重放历史来模拟状态。</strong> 如果 Agent 要像操作系统进程一样长久、稳定地运行，我们必须彻底重构它的运行模式。</p>

<p>本文将提出一种新的架构范式：<strong>将 AI Agent 从“文本补全机器”重构为“状态机循环”</strong>，并将其类比为汇编语言与 CPU 架构，以此解决上下文爆炸的根本问题。</p>

<hr />

<h2 id="一-核心矛盾日志驱动-vs-状态驱动">一、 核心矛盾：日志驱动 vs. 状态驱动</h2>

<p>目前的 AI Agent 大多基于 Re-Act 模式，其运行逻辑本质上是“日志驱动”的：</p>

<ul>
  <li><strong>输入</strong>：User Input + 全部历史对话+ 上一步工具返回。</li>
  <li><strong>过程</strong>：LLM 阅读所有历史，预测下一步动作。</li>
  <li><strong>输出</strong>：新的动作或回复。</li>
</ul>

<p>这种模式的问题在于，为了维持“状态”，模型必须保留所有“过程”。这就像 CPU 为了执行下一条指令，必须把过去执行过的所有指令记录都读一遍。随着时间推移，Context Window 必然溢出，或者因注意力机制的 $O(N^2)$ 复杂度导致计算崩溃。</p>

<p><strong>操作系统的启示</strong>：
在计算机体系结构中，CPU 执行指令只依赖两个东西：</p>
<ol>
  <li><strong>当前指令指针</strong>：告诉 CPU 下一步做什么。</li>
  <li><strong>寄存器状态</strong>：告诉 CPU 当前数据是什么。</li>
</ol>

<p>CPU 不关心上一毫秒执行了什么，只关心当前状态。Agent 也必须如此。</p>

<hr />

<h2 id="二-架构重构llm-即汇编指令">二、 架构重构：LLM 即汇编指令</h2>

<p>如果我们将 Agent Loop 视为一段汇编程序，那么大语言模型（LLM）本身不再是那个无所不知的“大脑”，而是一条<strong>极其复杂的“状态转移汇编指令”</strong>。</p>

<p>在这个模型下：</p>
<ul>
  <li><strong>LLM 推理</strong> = <strong>一条汇编指令执行</strong>（耗时 100ms）。</li>
  <li><strong>Context Window</strong> = <strong>寄存器堆</strong>。</li>
  <li><strong>磁盘/向量库</strong> = <strong>主存</strong>。</li>
  <li><strong>Prompt</strong> = <strong>指令操作数</strong>。</li>
</ul>

<p>Agent 的运行模式应当从“追加日志”转变为“寄存器操作”。每一次推理，都是一次 <strong>“状态读入 -&gt; 计算 -&gt; 状态写回”</strong> 的过程。</p>

<hr />

<h2 id="三-设计原理context-window-的槽位化">三、 设计原理：Context Window 的槽位化</h2>

<p>既然 Context Window 是昂贵且有限的“寄存器”，我们就不能像写流水账一样随意填充。必须像设计 CPU 寄存器一样，对其进行严格的分区和结构化设计。</p>

<p>我们将 Context Window 划分为固定的“槽位”，每个槽位承载特定的功能：</p>

<h3 id="1-text-段指令区只读">1. <code class="language-plaintext highlighter-rouge">.text</code> 段：指令区（只读）</h3>

<p>这是 Agent 的内核代码，定义了 Agent 的行为逻辑。</p>

<ul>
  <li><strong>R_System (Instruction Set)</strong>：
    <ul>
      <li>定义 Agent 的身份、能力边界、工具使用规范。这相当于 CPU 的指令集手册，告诉 LLM 这条指令能做什么。</li>
    </ul>
  </li>
  <li><strong>R_IP (Instruction Pointer)</strong>：
    <ul>
      <li><strong>本质</strong>：程序计数器 + 任务栈。</li>
      <li><strong>内容</strong>：当前执行的计划步骤。</li>
      <li><strong>示例</strong>：
        <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[Goal] Fix Bug #404
[Step 1/3] Read main.py (Done)
[Step 2/3] Locate error line -&gt; [Current IP]
[Step 3/3] Apply fix
</code></pre></div>        </div>
      </li>
      <li><strong>作用</strong>：LLM 只需看 <code class="language-plaintext highlighter-rouge">R_IP</code> 即可知晓“我在哪，要去哪”，无需回溯历史。</li>
    </ul>
  </li>
</ul>

<h3 id="2-data-段数据区读写">2. <code class="language-plaintext highlighter-rouge">.data</code> 段：数据区（读写）</h3>

<p>这是 Agent 的工作台，也是上下文工程的核心。</p>

<ul>
  <li><strong>R_State (Global State Register)</strong>：
    <ul>
      <li><strong>本质</strong>：全局状态寄存器。</li>
      <li><strong>约束</strong>：<strong>长度严格受限</strong>（如 4K tokens）。</li>
      <li><strong>形式</strong>：结构化文本（JSON/YAML），与向量等价，但人类可读可调。</li>
      <li><strong>内容示例</strong>：
        <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"task_status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"debugging"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"open_files"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"main.py"</span><span class="p">],</span><span class="w">
  </span><span class="nl">"error_line"</span><span class="p">:</span><span class="w"> </span><span class="mi">102</span><span class="p">,</span><span class="w">
  </span><span class="nl">"key_variables"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="nl">"user_id"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>        </div>
      </li>
      <li><strong>维护</strong>：<strong>不追加，只覆盖。</strong> 通过 Edit Tool 进行增量更新。</li>
    </ul>
  </li>
  <li><strong>R_Working (Scratchpad)</strong>：
    <ul>
      <li><strong>本质</strong>：通用寄存器（AX, BX）。</li>
      <li><strong>内容</strong>：当前步骤的临时数据、工具调用的原始返回结果。</li>
      <li><strong>生命周期</strong>：极短。任务步骤完成后立即清空，为下一轮腾出空间。</li>
    </ul>
  </li>
</ul>

<h3 id="3-stack-段调用栈">3. <code class="language-plaintext highlighter-rouge">.stack</code> 段：调用栈</h3>

<ul>
  <li><strong>R_CallStack</strong>：
    <ul>
      <li>当 Agent 执行子任务或调用子 Agent 时，将当前的 <code class="language-plaintext highlighter-rouge">R_State</code> 和 <code class="language-plaintext highlighter-rouge">R_IP</code> 压栈。任务结束后弹出恢复。</li>
    </ul>
  </li>
</ul>

<hr />

<h2 id="四-实现机制熵减循环">四、 实现机制：熵减循环</h2>

<p>基于上述架构，Agent 的 Re-Act Loop 变成了一个标准的 CPU 指令周期。这个过程的核心在于 <strong>“信息压缩”</strong>。</p>

<h3 id="cycle-1-fetch取指">Cycle 1: Fetch（取指）</h3>
<p>注意力机制聚焦于 <code class="language-plaintext highlighter-rouge">R_IP</code> 和 <code class="language-plaintext highlighter-rouge">R_State</code>。模型不需要知道“之前发生了什么”，只通过当前状态判断“现在该做什么”。</p>

<h3 id="cycle-2-decode译码">Cycle 2: Decode（译码）</h3>
<p>模型根据 <code class="language-plaintext highlighter-rouge">R_System</code> 的规则，分析当前状态是否需要调用工具，或者是否需要更新内部状态。</p>

<h3 id="cycle-3-execute执行">Cycle 3: Execute（执行）</h3>
<p>模型输出两部分内容：</p>
<ol>
  <li><strong>Tool Call</strong>：对外部世界的操作（如 <code class="language-plaintext highlighter-rouge">Read_File</code>）。</li>
  <li><strong>Delta_State</strong>：对内部寄存器的修改指令（如 <code class="language-plaintext highlighter-rouge">Update_State</code>）。</li>
</ol>

<h3 id="cycle-4-writeback写回">Cycle 4: Writeback（写回）</h3>
<p>这是解决上下文爆炸的关键步骤：</p>
<ul>
  <li><strong>外部数据</strong>：工具返回的大量数据（如 10,000 行日志）写入 <code class="language-plaintext highlighter-rouge">R_Working</code>。</li>
  <li><strong>状态压缩</strong>：LLM 分析 <code class="language-plaintext highlighter-rouge">R_Working</code>，提取关键信息（如“错误在第 500 行”），生成 <code class="language-plaintext highlighter-rouge">Delta_State</code> 更新 <code class="language-plaintext highlighter-rouge">R_State</code>。</li>
  <li><strong>清理</strong>：<strong>丢弃</strong> <code class="language-plaintext highlighter-rouge">R_Working</code> 中的原始数据。</li>
</ul>

<p><strong>结果</strong>：10,000 行的日志被压缩成了 <code class="language-plaintext highlighter-rouge">R_State</code> 中的一个字段 <code class="language-plaintext highlighter-rouge">"error_line": 500</code>。上下文占用仅增加几个 Token，但信息被完整保留。这就是“状态机”对抗“上下文爆炸”的武器。</p>

<hr />

<h2 id="五-新范式精心设计-context-window-的布局">五、 新范式：精心设计 Context Window 的布局</h2>

<p>在这种架构下，我们需要精心设计 Context Window 的布局，引导 LLM 遵守寄存器约束。</p>

<p><strong>Prompt 模板示例</strong>：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code># [R_System] Instruction Set
You are a State-Machine Agent. Maintain state strictly in JSON format.
Output format:
1. &lt;tool_call name="..."/&gt;
2. &lt;state_update key="..." value="..."/&gt;

# [R_IP] Current Instruction Pointer
Goal: Analyze Stock Trend
Step: 3/5 (Calculate Moving Average)

# [R_State] Global Registers (Max 4000 tokens)
{
  "ticker": "AAPL",
  "trend": "UP",
  "analysis_progress": "50%"
}

# [R_Working] Scratchpad (Last Tool Output)
[Tool: API] Returned 1000 data points... (Large Text)

# [Input]
Based on R_State and R_Working, generate Next Tool Call and State Update.
</code></pre></div></div>

<hr />

<h2 id="结语通往操作系统之路">结语：通往操作系统之路</h2>

<p>AI Agent 的未来，不是让模型拥有无限的记忆，而是让模型学会像操作系统一样高效地管理资源。</p>

<p>通过引入<strong>指令指针（R_IP）</strong>和<strong>状态寄存器（R_State）</strong>，我们将 Agent 的运行模式从线性的“文本流”转变为循环的“状态机”。在这个架构下，无论 Agent 运行一秒钟还是一百年，其 Context Window 的占用始终稳定在一个可控的范围内。</p>

<p>这才是 AI Agent 从“玩具”走向“工业级应用”的必经之路。我们不是在写对话，我们是在编写 AI 的汇编代码。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">分析 Claude Code 提示词的方法 - mitmproxy</title>
    <id>/notes/claude-code-prompt-mitmproxy</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/claude-code-prompt-mitmproxy"/>
    <updated>2026-01-19T00:00:00+08:00</updated>
    <published>2026-01-19T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>想了解 Claude Code 的提示词是怎么设计的，最直接的方式就是抓包分析。通过网络流量，可以看清它的 System Prompt、Messages、Tools 等核心信息。</p>

<h2 id="安装-mitmproxy">安装 mitmproxy</h2>

<p>官方文档: <a href="https://www.mitmproxy.org">https://www.mitmproxy.org</a></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>uv tool <span class="nb">install </span>mitmproxy
</code></pre></div></div>

<h2 id="反向代理模式">反向代理模式</h2>

<p>大多数教程用正向代理，需要配置系统代理和 CA 证书。更简单的方式是用反向代理：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mitmweb <span class="nt">--mode</span> reverse:https://open.bigmodel.cn <span class="nt">--listen-port</span> 8125
</code></pre></div></div>

<p>这个命令会：</p>
<ul>
  <li>反向代理到智谱AI 的 API</li>
  <li>在本地 8125 端口监听</li>
  <li>打开 Web 界面查看流量</li>
</ul>

<p>然后把 Claude Code 配置中的 API 地址改成代理地址，正常使用即可。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ANTHROPIC_BASE_URL: http://127.0.0.1:8125/api/anthropic
</code></pre></div></div>

<h2 id="查看流量">查看流量</h2>

<p>在 mitmweb 界面中可以看到所有请求和响应：</p>

<ul>
  <li>Request - 包含 system、messages、tools 等字段</li>
  <li>Response - LLM 的流式响应</li>
</ul>

<p>点击具体的请求，就能看到完整的提示词内容了。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">Claude Code 监督器：让 AI 主动把事情做好</title>
    <id>/notes/claude-code-supervisor</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/claude-code-supervisor"/>
    <updated>2026-01-11T00:00:00+08:00</updated>
    <published>2026-01-11T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>前段时间做了一次 AI 大模型技术分享，顺手 Vibe coding 了一个小工具 <a href="https://github.com/guyskk/claude-code-supervisor">claude-code-config-switcher</a>，用来在不同 Claude Code 提供商之间快速切换。</p>

<p>后来我给这个工具新增了一个 Supervisor 模式，用了一段时间之后感觉非常有价值，于是把项目改名为 <a href="https://github.com/guyskk/claude-code-supervisor">claude-code-supervisor</a>。</p>

<h2 id="什么是-supervisor-模式">什么是 Supervisor 模式</h2>

<p>用过 Claude Code 的朋友应该有这个体验：有时候 AI 声称”完成了”，但实际上还有一堆问题没解决。比如测试没跑、代码质量很差、功能不完整等等。这时候就需要你再跟 AI 说几轮，让它继续完善。</p>

<p>Supervisor 模式就是为了解决这个问题。它的原理很简单：</p>

<ol>
  <li>AI Agent 完成任务后，Supervisor（另一个 AI 实例）会自动审查工作质量</li>
  <li>如果没完成或质量不达标，Supervisor 给出反馈，让 Agent 继续</li>
  <li>重复这个过程，直到 Supervisor 确认工作真正完成</li>
</ol>

<p>这个机制利用了 Claude Code 的 Stop Hook，当 Agent 停止时自动触发审查。Supervisor 会 Fork 完整的会话上下文，评估实际的工作质量，而不是简单检测一些关键词或信号。</p>

<h2 id="为什么这很有用">为什么这很有用</h2>

<p>使用 Claude Code 最大的痛点，就是 AI 经常会把问题抛回给用户：</p>

<ul>
  <li>“是否需要运行测试？”</li>
  <li>“应该如何处理这个错误？”</li>
  <li>“你希望我用什么方式实现？”</li>
</ul>

<p>这些问题本该是 AI 自己解决的。有了 Supervisor 模式，Supervisor 会检查：</p>
<ul>
  <li>Agent 是否在等待用户确认？</li>
  <li>是否做了应该自己做的事？</li>
  <li>代码质量是否达标？</li>
  <li>用户需求是否全部满足？</li>
</ul>

<p>如果发现问题，Supervisor 会给出具体反馈让 Agent 继续。比如：”你声称完成了，但没有测试，请添加测试。”</p>

<h2 id="一个真实的例子">一个真实的例子</h2>

<p>最近我用 Supervisor 模式做了一个实验（使用GLM 4.7模型），只给 AI 一个很简单的提示词：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>用 JS 写一个在浏览器玩的双人坦克对战生存游戏，我和 AI 在有砖墙和钢墙的迷宫战场中驾驶坦克利用掩体进行战术射击对决，游戏要完整、精美、超高质量，AI 要有超强的战术水平。
</code></pre></div></div>

<p>结果让我很惊讶。在 Supervisor 的监督下，AI 完成了一个功能完整的坦克大战游戏：</p>

<ul>
  <li>精美的画面和流畅的动画</li>
  <li>智能的 AI 对手，会利用掩体、预判玩家位置</li>
  <li>迷宫地图生成，砖墙可破坏、钢墙不可破坏</li>
  <li>游戏控制（键盘 WASD + 方向键）</li>
  <li>完整的游戏循环（开始、对局、结束、重开）</li>
</ul>

<p>游戏地址：<a href="https://blog.guyskk.com/shows/tankbattle/">https://blog.guyskk.com/shows/tankbattle/</a></p>

<p>最关键的是，整个过程我只需要给出初始需求，剩下的全部由 AI 在 Supervisor 监督下自动完成。没有中间轮次，没有反复沟通，一次性交付高质量成果。</p>

<h2 id="与-ralph-的区别">与 Ralph 的区别</h2>

<p>可能有朋友知道 <a href="https://github.com/anthropics/ralph-claude-code">ralph-claude-code</a> 这个项目，它也能实现类似的监督功能。两者的主要区别在于：</p>

<table>
  <thead>
    <tr>
      <th>方面</th>
      <th>Ralph</th>
      <th>ccc</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>检测方式</td>
      <td>AI 输出结构化状态 + 规则解析</td>
      <td>Supervisor AI 直接审查</td>
    </tr>
    <tr>
      <td>评估方式</td>
      <td>基于信号和规则</td>
      <td>Fork 会话上下文评估实际质量</td>
    </tr>
    <tr>
      <td>灵活性</td>
      <td>需要更新规则代码</td>
      <td>更新 Prompt 即可</td>
    </tr>
  </tbody>
</table>

<p>ccc 采用的是 AI-First 的设计理念。规则检测的局限性在于需要预定义所有情况，难以覆盖边缘场景。而 AI 审查能理解上下文，处理边缘情况，随着模型能力提升自动改进。</p>

<h2 id="项目地址">项目地址</h2>

<p>claude-code-supervisor 已经开源，欢迎体验：<a href="https://github.com/guyskk/claude-code-supervisor">https://github.com/guyskk/claude-code-supervisor</a></p>

<p>主要功能：</p>

<ol>
  <li><strong>Supervisor 模式</strong>：自动任务审查，确保高质量可交付成果（新增核心功能）</li>
  <li><strong>提供商切换</strong>：一条命令在 Kimi、GLM、MiniMax 等提供商之间切换（原有功能）</li>
</ol>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">我的AI大模型技术分享2025</title>
    <id>/notes/ai-share-2025</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/ai-share-2025"/>
    <updated>2025-12-31T00:00:00+08:00</updated>
    <published>2025-12-31T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>前段时间做了一次AI大模型技术分享，本想早点把资料整理出来，一拖就到了2026年。趁着元旦假期，把分享材料整理好发出来，希望能对大家有帮助。</p>

<p>这次分享覆盖了AI大模型的方方面面，从底层原理到产品实践，包括：大模型是什么、Agent怎么工作、提示词工程、AI产品开发新范式等等。内容比较多，整理成了PDF，感兴趣的朋友可以直接查看：<a href="/static/2025-12-12/2025-ai-share.pdf"><strong>2025-AI大模型技术分享-PDF</strong></a></p>

<p>分享之后，又 Vibe coding 了一个小工具 <a href="https://github.com/guyskk/claude-code-config-switcher"><strong>claude-code-config-switcher</strong></a>（简称ccc），现已开源。这个工具解决的问题是：Claude Code虽然很好用，但想在不同提供商（Kimi、GLM、MiniMax等）之间切换，每次都要手动修改配置文件，很麻烦。用ccc的话，一条命令就能切换，欢迎体验：<a href="https://github.com/guyskk/claude-code-config-switcher">https://github.com/guyskk/claude-code-config-switcher</a></p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">三十而砺 - 反思我的创业</title>
    <id>/notes/age-30</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/age-30"/>
    <updated>2025-05-21T00:00:00+08:00</updated>
    <published>2025-05-21T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>转眼间到了而立之年，回首过去四年创业路，失败已成定局，但它教会了我什么是真正重要的。就像乔布斯在斯坦福演讲所说：”你无法预先把点滴串联起来，只有回头看时才会明白那些点是如何连成线的。”</p>

<h2 id="商业的规律">商业的规律</h2>

<p>四年探索，尝试了很多方向，做了很多产品，却没有真正赚钱。仔细思考最本质的原因：违背了商业第一性原理。</p>

<p><strong>简陋的产品=不好卖吗？</strong></p>

<p>不一定。只要用户需要，能满足其需求，照样可以卖的很好，赚的钱可以把产品做的更好，形成增长飞轮。用户需求的本质是解决方案，产品只要精准击中痛点，就能创造价值闭环。</p>

<p><strong>有需求=能变现？</strong></p>

<p>也不一定。用户可能不知道你的产品，你得想办法做好推广，找到目标用户。再好的产品，如果无法用正确方式出现在目标用户面前，等于不存在。</p>

<p><strong>有需求+找到用户=能赚钱？</strong></p>

<p>市面上有很多替代（免费）方案，产品得有（用户认为的）足够显著的差异化价值，才能让用户愿意为你的方案付费。</p>

<p>商业规律就是许多简单的常识，早点领悟这些，我能少走80%的弯路。真正符合商业规律的产品机会少之又少，如同沙里淘金。</p>

<p>创业是不断升级认知的修行，看的更远、更透彻，做更多符合商业规律的正确选择。</p>

<h2 id="创业的收获">创业的收获</h2>

<p>创业四年后悔吗？我的回答是，完全不后悔创业，唯一后悔的是成长速度还不够快。</p>

<p><strong>积累了经验，提升了认知和能力</strong></p>

<p>创业是最高效的实战学习。做的每个产品和功能就像是一次实验，运用自己的能力（原料），投入自己的想法（配方），期待发生神奇的反应，源源不断产生用户和收入。</p>

<p>最开始做的实验毫无章法，像小孩玩泥巴一样，瞎折腾一通。然后开始摸索总结经验，学会系统思考，看更多的书，向有结果的人学习，做更多实验去验证想法。大部分实验失败了，还有一些也不太成功，只产生了一些半成品。</p>

<p><strong>自由职业，有时间照顾家庭</strong></p>

<p>自由职业的状态让我有时间陪伴家人，工作间隙给小孩喂一下奶、陪她玩一会，放松眼睛和大脑，每天遛娃、散步正好锻炼身体。</p>

<p>有了小孩之后，合理高效安排自己的时间是个挑战，工作时长会不如以前，但并不是坏处，身体是革命的本钱，保持工作与生活的动态平衡，这才是可持续的发展模式。</p>

<h2 id="后续的打算">后续的打算</h2>

<p>标准化产品路线暂时搁置。后续我主要做定制项目/接单/远程兼职。定制开发网站、小程序、AI自动化工作流、浏览器插件、自媒体工具等。</p>

<p>这些都是我擅长的领域，技术能力完全满足，开发工期大致为1天～2周，最长不超过1个月，确保交付质量与效率。</p>

<p>我会继续不定期分享商业思考和技术经验，欢迎同行者交流碰撞。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #34 宝贝女儿出生，我当爸爸了</title>
    <id>/notes/onebiz-34</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-34"/>
    <updated>2024-11-30T00:00:00+08:00</updated>
    <published>2024-11-30T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>最近创业没太多进展，值得开心的是我的宝贝女儿出生了，我当爸爸了，开启新的人生体验！</p>

<p>产品和创业方面感觉没什么可写，推荐几本最近看的书：</p>
<ul>
  <li><a href="https://xiaobot.net/p/devgrowth?refer=aa616968-9262-473d-9ff6-ee09ae52260d">独立开发者营销获客手册</a></li>
  <li><a href="https://www.seozac.com/seobook/">SEO实战密码</a></li>
  <li><a href="https://book.douban.com/subject/36784327/">流量的逻辑</a></li>
  <li><a href="https://book.douban.com/subject/37070351/">真需求-梁宁</a></li>
</ul>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #33 继续聊聊自媒体AI副业工具</title>
    <id>/notes/onebiz-33</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-33"/>
    <updated>2024-10-21T00:00:00+08:00</updated>
    <published>2024-10-21T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>大家好，今天继续聊聊我最近做的项目—<a href="https://zmt.ezboti.com">艺爪AI自媒体副业工具</a>，最近更新了很多功能，持续快速迭代。</p>

<h3 id="1-字幕拼图功能">1. 字幕拼图功能</h3>

<p><a href="https://www.ezboti.com/docs/zmt/zmpt/">字幕拼接图片</a>非常适合做经典语录和读书分享图文。可以用它来制作那些带有深刻文字的图片，一键生成，直接上传到你的公众号或者小红书，吸引粉丝和流量。</p>

<h3 id="2-ai文案生成功能">2. AI文案生成功能</h3>

<p>内置的文案库和AI智能改写功能，让你可以快速生成高质量的文案。这不仅仅是节省时间，更是提高了内容的原创度和爆款概率。AI文案已经和字幕拼图、<a href="https://www.ezboti.com/docs/zmt/zytw/">治愈系图文（有图有字）</a> 功能深度融合。</p>

<p>如果你懒得自己写文案，AI文案生成功能非常好用，50万+的文案词库加上智能改写，批量制作图文内容效率极高。</p>

<h3 id="3-公众号图文排版">3. 公众号图文排版</h3>

<p>这个<a href="https://www.ezboti.com/docs/zmt/paiban/">免费图文排版</a>功能最近也更新升级了，可以实现非常丰富的公众号图文样式，支持多种图片布局，实时预览，一键导出，用来做公众号图文非常简单方便。</p>

<p>现在这款副业工具产品已经比较完善，但还没有解决流量问题，缺精准流量。</p>

<p><strong>欢迎有自媒体工具、副业项目相关流量的朋友联系我，可以推广🤝合作。</strong></p>

<p>艺爪AI自媒体副业工具，专注于自媒体图文创作。<br />
网址: https://zmt.ezboti.com<br />
公众号: 艺爪助手<br />
如果你对这个工具感兴趣，或者想要了解更多关于它的信息，欢迎随时联系。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #32 新产品-自媒体副业工具</title>
    <id>/notes/onebiz-32</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-32"/>
    <updated>2024-09-19T00:00:00+08:00</updated>
    <published>2024-09-19T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>上期文章发布之后，我综合考虑选择了自媒体工具方向。现在产品已上线一个多月，一直忙于产品迭代更新。这次分享一下最近2个月的进展。</p>

<h2 id="自媒体副业工具">自媒体副业工具</h2>

<p>艺爪AI自媒体副业工具，小白也能用的自媒体赚钱利器！<br />
网址: <a href="https://zmt.ezboti.com">https://zmt.ezboti.com</a><br />
教程&amp;案例: <a href="https://www.ezboti.com/docs/zmt/start/">https://www.ezboti.com/docs/zmt/start/</a></p>

<p>产品第一版提供姓氏头像工具，吸引了少部分用户使用，迭代更新把功能完善之后，最近更新上线了治愈图文工具，功能也比较完整了。<a href="https://mp.weixin.qq.com/s/HOEXXLBP72EBOmDaxOxLmA">艺爪AI副业工具 新功能「有图有字」上线了！</a></p>

<h3 id="这个方向对了吗">这个方向对了吗</h3>

<p>经过这2个月的摸索，我觉得大概是对的。和AI对话/AI写作相比，这个产品用户群体更加垂直，没有被大厂炮火覆盖，用户使用频率比较高（做自媒体账号每天都用），付费意愿也更强。从数据来看，付费人数比AI写作明显更高。</p>

<p>但是也存在问题，增长缓慢。做自媒体副业能赚钱吗？能赚钱，但只有少数人能赚到钱。賺钱这个事，需要的能力非常多，大多数人不具备。目前副业工具这个产品的用户基本是有自媒体经验、有思路、也有执行力的一小群人，这个工具能节省时间，提高效率，帮助他们赚更多钱。</p>

<p>对于更广泛的普通人，做自媒体还没有赚到过钱的人，从0到1是艰难的过程，需要长期坚持努力，也需要一点运气（坚持几个月创作内容，等某一天你的某个文章无意间就火了）。大部分人不具备这些要素，只是单纯的想赚钱。</p>

<p>我不想做割韭菜的事，忽悠赚快钱不可取。我想要实打实做副业赚钱的工具，实现 “小白也能用的自媒体赚钱利器” 这个大目标，任重道远。</p>

<h2 id="其他">其他</h2>

<p><a href="https://rss.anyant.com/">蚁阅RSS</a> 服务器最近快到期了，核算发现续费成本太高，严重入不敷出。花了半个月时间把服务迁移到云函数上（Serverless），优化配置降低成本。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #31 APP上架了，路在何方？</title>
    <id>/notes/onebiz-31</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-31"/>
    <updated>2024-07-24T00:00:00+08:00</updated>
    <published>2024-07-24T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>转眼一个月又过去了，<a href="https://www.ezboti.com/ai/">艺爪AI</a> APP上架了几家主流应用商店，但下载量惨淡，短视频推广效果也不好。我感觉得再调整方向，不然肯定赚不到钱。</p>

<h2 id="app端适配">APP端适配</h2>

<p>艺爪AI基于uniapp开发，可以跨小程序、网页、APP多端，适配APP端碰到几个难点，都解决了。</p>
<ol>
  <li>Markdown/Latex/二维码渲染在APP端报错，原因是APP端和小程序一样是逻辑层（JS）和视图层（Webview）分离，JS代码无法直接操作DOM。解决办法是用 <a href="https://uniapp.dcloud.net.cn/tutorial/renderjs.html">uniapp-renderjs</a> 技术，把DOM操作的代码放在视图层运行，就能直接操作DOM了。</li>
  <li>AI写作用到了富文本编辑，使用 <a href="https://github.com/slab/quill">Quill</a> 这个库实现的，其中的DOM操作非常复杂，使用 renderjs 也无法正常运行。最后选择用 webview 把网页版的AI写作页面嵌入APP中，绕过了这个问题。</li>
  <li>APP支付，基于艺爪付费实现，<a href="https://www.ezboti.com/docs/revenue/api-example-uniapp-android/">参考代码-Uniapp框架支付</a>。</li>
</ol>

<p>现在已经开发完成了安卓端。iOS端支付比较复杂，还没有时间做适配，后续再考虑加上。</p>

<h2 id="app上架了">APP上架了</h2>

<p>艺爪AI APP上架了国内的主流应用商店，其中小米、Vivo、OPPO、百度应用商店都比较顺利，腾讯应用宝审核了几轮最终通过了，华为应用商店要求非常严格，审核还没通过。</p>

<p>审核涉及的问题有这些：</p>
<ol>
  <li>应用内为用户提供合成生成内容服务前，未进行真实身份信息认证。（要求手机号登录，暂未完成）</li>
  <li>应用内含深度合成或生成式人工智能服务内容，未提供举报功能。（加上了举报功能）</li>
  <li>登录/注册页面无《用户协议》或《隐私协议》。（加上了，而且默认不能勾选）</li>
  <li>支付页面未展示会员服务协议。（加上了：购买会员代表已阅读并同意《会员服务协议》）</li>
  <li>首页显著提示：内容由AI生成，请勿用于从事违反相关法律法规的活动。</li>
  <li>《用户协议》和《隐私协议》内容缺少开发者信息。（加上了公司名称和联系方式）</li>
  <li>《用户协议》和《隐私协议》内容缺少更新/生效时间。（加上了更新日期）</li>
</ol>

<p>自己辛苦开发的APP上架了，应该是件开心的事情，但是上架了几天，APP下载寥寥无几。</p>

<p>这段时间短视频推广效果也很差，转化的用户没有几个。也发现同行、同类产品都是做付费广告推广，但这样成本打不住，可能还得亏更多。</p>

<p>从APP上架后的效果以及市场反馈来看，我感觉得再调整方向，不然肯定赚不到钱。</p>

<h2 id="路在何方">路在何方？</h2>

<p>方向不对、努力白费，我思考了很多创业方向的问题，做了一点调研，大致有三个可以考虑的方向。</p>

<h3 id="自媒体工具---帮助普通人做自媒体赚钱">自媒体工具 - 帮助普通人做自媒体赚钱</h3>

<ul>
  <li>各大自媒体平台上，大部分内容都是“营销号”创作的，大部分流量也是给了这群人，这个群体通过一些固定的模式创作出大量内容，吸引流量变现。其中创作内容和流量变现需要软件工具支撑。</li>
  <li>自媒体赚钱已经有成熟的模式，这个群体中有些人是【团长（师傅）】，他们开培训课程教学员做账号发内容（【项目】），积累粉丝和流量。项目对应着特定的受众群体/账号类型/类目，例如姓氏头像就是一个项目，按大类分的话属于头像壁纸类。赚钱项目非常多，少部分赚到钱的人会成为团长教别人赚钱，流量暴涨（赚大钱）是小概率事件，选对项目坚持做基本能赚到零花钱。</li>
  <li>从需求看：这些创作者属于业余兼职/失业/宝妈等人群，想通过互联网赚钱，会动手实操。自媒体平台需要大量的内容供用户消费。创作者需要每天生产原创/伪原创内容，持续发布内容，使用工具软件是必须的，只要能赚钱回本，付费意愿很高。</li>
  <li>从技术看：AI擅长创作内容，再结合软件自动化，是自媒体推广人群的最佳工具，绘画、写作都能很好满足需求。但是AI要和具体的推广项目结合，把人工操作的流程、套路模式做成简单的工具，方便普通人高效做赚钱项目。</li>
</ul>

<h3 id="国产版poe---聚合国产ai大模型api">国产版Poe - 聚合国产AI大模型API</h3>

<ul>
  <li>目前国内没有这类产品，大厂不会做这类产品，有市场需求（开发者、科技博主、研究人员？）。</li>
  <li>聚合API需要对接很多API，适合开源共建，开源能够增加聚合API的数量，同时减少每个开发者的工作量。</li>
  <li>艺爪AI本身用了多个大模型，作为开发者需要这样的聚合API服务，把聚合API标准化并开源，有长期价值。</li>
  <li>通过开源的方式提高知名度，获取持续的流量。用户可以自己部署开源版，也可以充值艺爪AI会员直接即用。</li>
</ul>

<h3 id="蚁阅rss升级---rss--ai结合更好用的阅读器">蚁阅RSS升级 - RSS + AI结合，更好用的阅读器</h3>

<ul>
  <li>传统的RSS阅读器基于订阅源链接获取信息，有了AI能力之后，可以实现根据用户的意图订阅内容，你想要什么，就让AI助理帮你从互联网各个地方收集这方面的信息，整理好之后给你，不再需要自己找RSS源。</li>
  <li>国内内容平台都比较封闭，开放的信息源不多，订阅源是绕不过去的难题，也许AI可以实现更智能的爬虫，不需要写代码就能获取你想要的信息。</li>
  <li>蚁阅RSS已经积累了非常多用户反馈，RSS阅读器需求持续存在，用户体验需要完善，有很多功能等待实现。</li>
  <li>国内做内容产品涉及很多内容审核合规问题，爬各大平台的内容也有合规风险。</li>
</ul>

<p><strong>你觉得这些方向靠谱（能赚钱）吗？</strong></p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #30 人机交互，打造AI写作神器</title>
    <id>/notes/onebiz-30</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-30"/>
    <updated>2024-06-15T00:00:00+08:00</updated>
    <published>2024-06-15T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>最近两个月，我开发上线了 <a href="https://www.ezboti.com/ai/">艺爪AI写作</a> 功能，这个功能既能提高写作效率，又能保证文章质量。</p>

<p>它最大的特点在于人机交互，用户可以通过与AI的交互，逐步引导并补充信息，从而生成更符合个人需求的文章。</p>

<p>我也在推广上做了一些尝试，希望让更多人了解并体验这个全新的AI写作工具。</p>

<h2 id="为什么开发ai写作功能">为什么开发AI写作功能？</h2>

<p>今年的市场环境与去年相比已发生巨大变化，简单的AI对话产品没有了竞争力，市面上充斥着众多竞品，大厂APP功能更强大且免费。因此，我迫切需要开发一个更具竞争力的东西出来。</p>

<p>我重新思考了产品方向，并调研AI市场的用户需求。一方面，我参考了风投投资的创业公司，收集大量AI方向创业公司的信息，例如YC的投资名单，从中整理出一些可行的产品方向。</p>

<p>另一方面，我尝试分析产品积累的用户对话数据（所有数据均为匿名，仅用于内部调研和产品改进，不涉及个人隐私问题）。因为数据量非常大，我用了一些分析方法，比如词频、词云、主题模型和关键词统计。结果发现，对话问答和写作这两方面的需求都很强，大约各占了1/3，其他需求则分布在不同的小领域里。</p>

<p><img src="/static/2024-06-14/ai-wordcloud.png" alt="AI需求词云" /></p>

<p>综合考虑，AI写作的需求很广泛也很重要，所以我决定先开发AI写作这个功能。</p>

<h2 id="ai写作应该做成什么样">AI写作应该做成什么样？</h2>

<p>请看AI的回答：</p>

<p><img src="/static/2024-06-14/ai-chat.png" alt="用户怎样与AI交互完成写作-AI的回答" /></p>

<p>我分析了市面上的AI写作产品，发现 Notion AI 和 WPS / Word AI 比较符合AI交互式写作的特点，其他大部分产品都是AI文章生成器，直接生成文章，不支持交互式写作。还有一些产品是针对特定写作领域的，比如论文写作和小说写作。</p>

<p>我认为，AI写作的最佳方式是人与AI的交互。用户可以逐步指导AI如何改写，从而生成更符合需求的文章。而那种直接生成文章的工具，往往很难写出用户满意的好文章。</p>

<h2 id="艺爪ai写作上线和推广">艺爪AI写作上线和推广</h2>

<p>经过一个多月的开发，艺爪AI写作在5月底完成上线了，第一版只适配了电脑端，随后开发适配了移动端界面。经过近一个月的迭代和优化，现在产品已经比较好用了。感兴趣的朋友可以通过下面链接访问：</p>

<ul>
  <li><a href="https://www.ezboti.com/ai/">艺爪AI官网 www.ezboti.com/ai</a></li>
  <li><a href="https://www.bilibili.com/video/BV1cz42187hP/">艺爪AI写作视频教程 - Bilibili</a></li>
</ul>

<p>产品上线后，接下来要考虑的就是推广问题了。要让更多人知道我们的产品，特别是那些真正需要它的人。</p>

<p>我本来的计划是，一方面找代理商合作推广，另一方面我自己也通过自媒体来宣传。但现在AI的热潮已经消退，市场回归理性，推广起来比以前难了，我们的产品竞争力也没有那么强，所以代理商不太愿意推广了，我们得自己想办法去做市场推广。</p>

<p>虽然渠道销售可以放大流量，但在产品标准化之前，我们还是得直接面对用户。参考 <a href="https://mp.weixin.qq.com/s/palwvEsH_nWRGScDePfgpA">初创公司的销售模式-奇绩创坛</a>。</p>

<h2 id="ai算法备案">AI算法备案</h2>

<p>还有一个好消息，艺爪AI成功通过了网信办算法备案。</p>

<p><img src="/static/2024-06-14/ai-beian.png" alt="艺爪AI算法备案" /></p>

<p>艺爪AI助手合规运营，安全、可靠，更加放心使用！</p>

<h2 id="后续计划">后续计划</h2>

<ol>
  <li>
    <p>利用同一套跨平台代码，上架艺爪AI助手的APP端、桌面客户端，为用户提供更好的使用体验。</p>
  </li>
  <li>
    <p>深入探索AI写作的市场需求，不断迭代产品，提升用户体验，让AI写作更加贴合用户的实际需求。</p>
  </li>
</ol>

<p>现在，想请教大家一个问题：你心目中理想的AI写作功能应该是怎样的？欢迎在评论区留下你的想法，期待与你共同探讨和进步！</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #29 经验分享: 让AI输出结构化JSON数据</title>
    <id>/notes/onebiz-29</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-29"/>
    <updated>2024-04-05T00:00:00+08:00</updated>
    <published>2024-04-05T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>最近一个多月我比较忙碌，开始投入工作和创业中，在此分享一下进展和我在AI方面的一点经验。</p>

<h2 id="本月进展">本月进展</h2>

<p><a href="https://rss.anyant.com/">蚁阅RSS</a> 收到用户赞助，新增发布订阅功能。发布订阅功能用于公开你的订阅，让网友可以在你的网站上阅读你的订阅内容。详见<a href="https://rss.anyant.com/changelog">蚁阅1.9.0更新日志</a>。</p>

<p>接单给一个AI小程序增加Markdown和Latex数学公式渲染功能，已完成交付上线。</p>

<p>接单给一个企业接入AI实现业务需求，正在开发中。</p>

<p>调研AI市场用户需求，计划开发新功能「AI写作」。</p>

<p>重构了自己AI产品的前端代码，修复一些遗留问题。</p>

<h2 id="如何让ai输出结构化json数据">如何让AI输出结构化JSON数据</h2>

<p>AI（LLM）的输入和输出都是基于自然语言的，然而编程语言只能理解结构化的数据，将AI集成到业务中时经常需要用到结构化的数据，这时可以借助<a href="https://github.com/microsoft/TypeChat">TypeChat</a>让AI生成结构化的JSON数据。</p>

<p>因为AI的训练数据包含了大量编程知识，其中包括TypeScript和JSON，所以可以借助TypeScript描述数据结构，让AI用JSON格式输出数据。通过实践验证AI也确实能够遵循指令输出JSON数据。</p>

<p>示例提问：</p>
<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code>You are a service that translates user requests into JSON object according to the following TypeScript definitions of type <span class="sb">`Result`</span>.
你是一个用户请求翻译器，根据用户请求和以下TypeScript定义准确翻译成符合 <span class="sb">`Result`</span> 类型的JSON对象。TypeScript定义如下：
<span class="p">```</span><span class="nl">
</span>// 判断用户需要什么样的咖啡
type Result {
    size: string,    // 大小：中杯、大杯、超大杯
    sugar: string,   // 糖分: 无糖、半糖、9分糖
}
<span class="p">```</span>
Please translate the user request into a JSON object directly, with 2 spaces of indentation, use <span class="sb">`null`</span> to represent values that cannot be translated. Please make sure response JSON text directly.
请将用户请求直接翻译成JSON数据，用2个空格缩进，无法翻译的值用null表示。请确保直接输出JSON数据，不要回复其他内容。

Please translate the following user request into JSON object（请翻译以下用户请求成JSON数据）:
我想要一杯咖啡，不要加糖，大杯，加牛奶
</code></pre></div></div>

<p>AI的回答：</p>
<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">```</span><span class="nl">json
</span><span class="p">{</span><span class="w">
  </span><span class="nl">"size"</span><span class="p">:</span><span class="w"> </span><span class="s2">"大杯"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"sugar"</span><span class="p">:</span><span class="w"> </span><span class="s2">"无糖"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"milk"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="p">}</span>
<span class="p">```</span>
</code></pre></div></div>

<p>但是使用过程中发现存在一些缺陷：</p>

<p><strong>AI可能不会直接输出JSON文本，而是用Markdown语法输出，也可能会输出多余的文字。</strong></p>

<p>解决方案：使用正则表达式提取代码块里面的JSON文本。有些模型支持 <a href="https://platform.openai.com/docs/guides/text-generation/json-mode">JSON mode</a> ，可以确保输出JSON格式数据。</p>

<p><strong>AI可能输出的JSON语法不对，多余的逗号，添加了注释，将 <code class="language-plaintext highlighter-rouge">null</code> 写成了 <code class="language-plaintext highlighter-rouge">undefined</code>。</strong></p>

<p>解决方案：使用 <a href="https://github.com/PiotrDabkowski/Js2Py">https://github.com/PiotrDabkowski/Js2Py</a> 这个库将JSON文本当作JavaScript解析，提取返回的对象。</p>

<p><strong>AI输出的JSON数据结构可能不对，会缺失字段或者多余字段。</strong></p>

<p>解决方案：对数据问题做容错处理，校验数据，校验失败时让AI重新回答。调整 <code class="language-plaintext highlighter-rouge">temperature</code> 和 <code class="language-plaintext highlighter-rouge">top_p</code> 参数，减少输出的随机性和多样性，使输出更加稳定、集中和确定。</p>

<p><strong>AI对字段的含义理解可能不对，返回了错误的数据。</strong></p>

<p>解决方案：在TypeScript文本中写注释，描述字段的含义，给AI提供指导，给AI举例子。</p>

<p>微软的TypeChat库提供了很好的思路，但处理各种特殊情况时不够灵活，最好的效果是直接自己拼接提示词。我写了一个 <a href="https://gist.github.com/guyskk/25eb1935fd4354e8363a9f856c3afae6">typechat.py</a> 已开源在GitHub Gist上，可以参考使用。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">2023自宅创业年终总结</title>
    <id>/notes/review-2023</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/review-2023"/>
    <updated>2024-02-22T00:00:00+08:00</updated>
    <published>2024-02-22T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>2023年经历了监管风波、产品调整、家庭变故等悲喜交加的事，博客也很久没有更新了，在此做一个总结，新的一年继续创业。</p>

<h2 id="2023年">2023年</h2>

<p>2月底，我的AI产品被监管约谈下线，为满足合规只能用国产AI大模型。当时国产AI大模型还未开放使用，到4月份我把产品改成了AI工具箱，但底层还是ChatGPT，为避免风险所以没有上线推广。</p>

<p>5月至7月我把AI产品的佣金推广功能迁移到了 <a href="https://www.ezboti.com/docs/revenue/">艺爪付费</a> 中，AI产品没有进展。这段时期我的精力也转移到了新房装修、谈婚论嫁这些个人事情上。</p>

<p>8月中旬，我母亲因交通事故意外去世，之后我基本在处理家里的事情。到年底我和女朋友订婚、结婚，家里的事情大部分处理好了，我开始恢复精力投入工作。</p>

<p>这一年发生了太多事情，悲喜交加，对未来有希望，同时也带着遗憾。</p>

<h2 id="创业已三年">创业已三年</h2>

<p>从2021年开始创业，一转眼已经3年了，真是岁月如梭！创业之路不算顺利，没有取得大的成果，只是有了很多和以前不一样的经历。</p>

<p>我现在生活在小城市，没有太大的经济压力，创业和工作相对自由，是一种舒适的生活状态。回想3年前选择离开大城市，我觉得这是正确的选择，让我有时间陪伴父母、照顾家庭，让我有经济条件持续创业。</p>

<p>新的一年我会继续创业，抓住AI大模型的机会，争取早日财务自由。</p>

<p>在此特别感谢所有关注、关心、帮助我的朋友们，感谢大家的支持！<br />
祝愿大家顺顺利利，一起财务自由！</p>

<h2 id="回顾2023年目标">回顾2023年目标</h2>

<p><strong>把 ChatGPT 做成稳定赚钱的产品</strong></p>

<p>基于ChatGPT和国产AI大模型做成了产品，有收入但没有稳定盈利。</p>

<p><strong>产品盈利 5 万元人民币</strong></p>

<p>目标已达成，主要原因是在风口上抓住了机会，前期收益高，目前收益很少，每月收入大约1000元。</p>

<p><strong>控制好作息，每周锻炼 1 次以上，保持高效率</strong></p>

<p>作息比去年更好一些，爬山、散步的次数比去年更多，争取今年做的更好。</p>

<h2 id="2024年目标">2024年目标</h2>

<p>[✔️] 保持AI大方向不变，做用户愿意付费的产品<br />
[✔️] 产品 <strong>月收入</strong> 1 万元人民币<br />
[✔️] 管理好时间：照顾家庭，锻炼身体，高效工作</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #28 我在ChatGPT风口的创业总结</title>
    <id>/notes/onebiz-28</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-28"/>
    <updated>2023-03-07T00:00:00+08:00</updated>
    <published>2023-03-07T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>过去的两个月可以说相当刺激，我在ChatGPT风口上经历了产品的大起大落，在此总结分享我看到和学到的东西。</p>

<h2 id="方向的重要性">方向的重要性</h2>

<p>在好的方向上努力，收获是100倍甚至1000倍，选好方向至关重要，方向不对努力白费。</p>

<p>变化是机会的重要来源，巨大的变化代表着巨大的机会，意外的成功和失败都蕴含着新机会。</p>

<p>用户和需求是产品的生命之源，从需求出发去思考产品，利用所有能用的技术去满足需求，方向基本就对了。</p>

<h2 id="会员分销模式">会员分销模式</h2>

<p>会员订阅付费是很好的盈利模式，用户愿意为好用的产品付费，按月、按年为产品付费后就能长期留住用户，同时获得非常好的现金流。只要产品不断迭代完善，产品价值越来越高，收入就会越来越多，形成正循环。</p>

<p>分销是很好的推广模式，有把用户规模放大的效果。能赚钱是分享传播的巨大推动力，通过收入分成让用户帮你推广，就有源源不断的精准流量。做一级分销即可，多级分销无法体现产品价值，而且有传销的嫌疑。</p>

<h2 id="合伙人原则">合伙人原则</h2>

<p>合伙创业需要确定好合作原则，把可能遇到的问题，坦诚相待提前约定好。下面是我们的原则：</p>

<ol>
  <li>原则：要么一起成功，要么一起失败，不可另立门户。</li>
  <li>退出机制：如果要退出，股份只能由合伙人回购，不允许卖给其他人。</li>
</ol>

<p>资金方面我每个月用 Beancount 记账，账本放在Git仓库共享给合伙人，做到清晰透明。</p>

<p>上周我的前端伙伴因为多方面的原因选择退出了，我们按照约定好聚好散，产品继续正常运转。</p>

<h2 id="看数据做决策">看数据做决策</h2>

<p>用户可能会提很多建议，自己和合伙人会有很多的想法，竞品和各种行业信息也会带来很多启发，从逻辑上、经验上很难判断哪些是更值得做的，很容易走弯路。</p>

<p>从产品数据能清晰的看到用户和需求，能指明最正确方向，答案都在数据里面，是最客观和准确的，做产品一定要认真看数据做决策。</p>

<h2 id="政府监管风险">政府监管风险</h2>

<p>在 2 月 21 日，我被网信办监管部门上门约谈，产品也按要求主动下线了。需要等安全评估通过才能上线，预计一个月之后会有整改意见。</p>

<p>根据多方了解到的信息，主要原因是 ChatGPT 涉及境外数据，这点非常敏感。从大环境来看，中美关系越走越远，互相防备，再加上国内内容审查一直就特别严格，在国内继续用 ChatGPT 的话风险非常大。</p>

<h2 id="小创业者的机会">小创业者的机会</h2>

<p>目前我可以确定 AI 这个方向有巨大的机会，变化、风险、机遇并存。</p>

<p>目前我的判断是两条路，可以都尝试：</p>
<ol>
  <li>用国产的和开源的AI技术，在国内继续做AI应用。</li>
  <li>用ChatGPT的API接口，在境外面向海外用户做AI应用。</li>
</ol>

<p>国内的AI技术比ChatGPT落后一年左右，只要在这个方向上坚持一年，可以抓住更长期的机会。</p>

<h2 id="推荐书籍">推荐书籍</h2>

<ul>
  <li><a href="https://book.douban.com/subject/35218126/">《合伙人原则》</a></li>
  <li><a href="https://book.douban.com/subject/36280996/">《网信部门常用法律法规》</a></li>
</ul>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">2022自宅创业总结，进入创业新阶段</title>
    <id>/notes/review-2022</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/review-2022"/>
    <updated>2023-01-24T00:00:00+08:00</updated>
    <published>2023-01-24T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>距离 <a href="/notes/review-2021">2021自宅创业总结</a> 已过去整整一年，刚好进入了创业新阶段。在这个忙碌的春节对 2022 做一个总结，回顾过去，规划未来。</p>

<h2 id="2022年创业情况">2022年创业情况</h2>

<p>在2022年我是远程兼职上班 + 业余时间创业的状态，做了2个新产品，其中艺爪付费做了8个月，ChatGPT小程序做了2个月，另外有2个月主要在考驾照、接外包项目。之前做的蚁阅RSS和果蔬时节只用了很少的时间维护。</p>

<h3 id="创业收入和支出">创业收入和支出</h3>

<p>收入比去年多一些，主要是外包接单和卖账号这类一次性收入增加了。</p>

<table>
  <thead>
    <tr>
      <th style="text-align: left">创业收入</th>
      <th style="text-align: right">金额（元）</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">ChatGPT卖账号</td>
      <td style="text-align: right">2711</td>
    </tr>
    <tr>
      <td style="text-align: left">ChatGPT广告</td>
      <td style="text-align: right">约 800</td>
    </tr>
    <tr>
      <td style="text-align: left">蚁阅会员</td>
      <td style="text-align: right">2505</td>
    </tr>
    <tr>
      <td style="text-align: left">艺爪付费</td>
      <td style="text-align: right">0</td>
    </tr>
    <tr>
      <td style="text-align: left">果蔬时节</td>
      <td style="text-align: right">0</td>
    </tr>
    <tr>
      <td style="text-align: left">文章打赏</td>
      <td style="text-align: right">507</td>
    </tr>
    <tr>
      <td style="text-align: left">外包接单</td>
      <td style="text-align: right">5100</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>收入合计</strong></td>
      <td style="text-align: right"><strong>11623</strong></td>
    </tr>
  </tbody>
</table>

<p><br />
支出和去年相当，没有大的变化。</p>

<table>
  <thead>
    <tr>
      <th style="text-align: left">创业支出</th>
      <th style="text-align: right">金额（元）</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">云计算（含买软件会员）</td>
      <td style="text-align: right">5190</td>
    </tr>
    <tr>
      <td style="text-align: left">产品运营</td>
      <td style="text-align: right">190</td>
    </tr>
    <tr>
      <td style="text-align: left">开办公司（软著、财税）</td>
      <td style="text-align: right">1404</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>支出合计</strong></td>
      <td style="text-align: right"><strong>6784</strong></td>
    </tr>
  </tbody>
</table>

<p>注：数据截止2022年12月31日，工资收入、生活支出等在此略过。
<br /></p>

<h3 id="创业产品总结">创业产品总结</h3>

<p>我投入了约8个月时间在艺爪付费上，做成了一个有价值的产品，但并没有获得直接的收入。艺爪付费目前有100+用户注册，有2个产品接入使用，另外我自己有2个产品接入。它给我最大的回报，是我做新产品时可以快速实现付费功能，降低新产品的开发和维护成本。</p>

<p>最近2个月我做了ChatGPT小程序（超级AI），这是一次意外的成功，也是第一次有了合伙人。ChatGPT小程序目前有5w+注册用户，我们年前刚刚上线了ChatGPT会员版，第一次体验到了赚钱的感觉。进入了创业新阶段，机会和风险并存，看到了希望但还需努力争取。</p>

<p>最重要的是，这一年的经历更新了我对创业的认知。</p>

<p><strong>1. 让自己接触更多机会：</strong>
认识更多的人，去更远的地方，经历更多事情，接触新事物，尝试新想法，给自己创造更多可能性。</p>

<p><strong>2. 从用户和需求出发：</strong>
用户和需求是产品的生命之源，产品只有满足用户需求才能存活，用户愿意付钱（或时间）产品才能赚钱。</p>

<p><strong>3. 掌握生产资料：</strong>
软件产品是信息时代的生产资料，并且可以完全通过自己的双手创造出来，掌握生产资料就等于解放了自己。</p>

<h2 id="回顾2022年目标">回顾2022年目标</h2>

<p><strong>做 3 款新产品，不耗在单个产品上</strong></p>

<p>只完成了2款新产品，有几个产品在想法阶段被自己否定了，直到机缘巧合遇到ChatGPT。我应当更加积极地寻找有用户需求且能赚钱的产品，而不是把过多时间投入在艺爪付费上。</p>

<p><strong>产品盈利 2 万元人民币</strong></p>

<p>远未达标，应当更深刻认识到方向的重要性，把时间投入到能赚钱的产品上。</p>

<p><strong>适当旅行，控制好作息，保持高效率</strong></p>

<p>基本达标，保持了睡眠充足，但锻炼太少了。长时间工作会颈椎和肩膀痛，需要严格落实间歇休息，多喝水，多活动颈椎肩膀。</p>

<h2 id="2023年创业目标">2023年创业目标</h2>

<p>[✔️] 把 ChatGPT 做成稳定赚钱的产品<br />
[✔️] 产品盈利 5 万元人民币<br />
[✔️] 控制好作息，每周锻炼 1 次以上，保持高效率</p>

<h2 id="推荐一些书籍">推荐一些书籍</h2>

<ul>
  <li><a href="https://book.douban.com/subject/4020863/">《创新与企业家精神》</a></li>
  <li><a href="https://github.com/weiyinfu/MaoZeDongAnthology">《矛盾论》和《实践论》</a></li>
  <li><a href="https://book.douban.com/subject/1248483/">《摩根信札》</a></li>
</ul>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #27 蹭热点的ChatGPT小程序</title>
    <id>/notes/onebiz-27</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-27"/>
    <updated>2022-12-15T00:00:00+08:00</updated>
    <published>2022-12-15T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>本期最大的收获是做ChatGPT小程序，上线当天用户量突破1000，我第一次做出这么火爆的产品。</p>

<h2 id="chatgpt小程序">ChatGPT小程序</h2>

<p>故事从12月4日开始，有个之前认识的网友联系我，得知ChatGPT账号非常好卖，<a href="https://openai.com/blog/chatgpt/">ChatGPT</a>是OpenAI最新发布的人工智能对话机器人，效果非常惊艳。</p>

<p>我写程序批量注册，他负责销售，收益分成。我很快写好了程序，注册了一批ChatGPT账号，赚了一点钱。然后发现市场上ChatGPT账号价格越来越低，也很难批量销售出去。</p>

<p>我们想到可以做一个小程序，把ChatGPT的功能做到小程序上，打开就能直接用。我在一个创业群里发了条消息寻求合作，很快找到一个做小程序的伙伴，一起合作开发。我负责后端，他负责小程序，不到3天小程序急速完成上线，上线当天用户量就突破1000，涨势非常好。</p>

<p>我们也做了一些推广，主要是营销的伙伴负责，带来很多的流量，我们还预想着日活过万，然后小程序就被举报封了，我们发布的两个小程序同时被封。举报人和我正好同在一个微信群里，虽然很难过，但还是接受了现实，大家都按丛林法则生存。</p>

<p><img src="/static/2022-12-15/superai-screen-1.jpeg" alt="小程序被封截图" />
<img src="/static/2022-12-15/superai-screen-2.png" alt="小程序举报信息" /></p>

<p>小程序被封之后，我们马上整改去掉违规的内容（群二维码），然后开始申诉。过了一天多，小程序终于恢复了，目前我们在继续迭代改进。附两个小程序码欢迎体验，只是名称不一样，内容完全一样。</p>

<p><img src="/static/2022-12-15/superai-mp-1.jpeg" alt="超级AI小程序" />
<img src="/static/2022-12-15/superai-mp-2.jpeg" alt="ChatGPT智能对话" /></p>

<p>如果你有流量擅长推广，非常欢迎合作！如果需要批量采购ChatGPT账号，也欢迎联系。</p>

<h2 id="艺爪付费">艺爪付费</h2>

<p>果蔬时节APP，在阿里云上申请的APP电子版软著，但还要等半个月才能拿到证书。</p>

<p>艺爪付费增加了支付宝APP支付方式，但还没时间更新文档，会继续完善。</p>

<h2 id="招聘">招聘</h2>

<p>我在BOSS直聘上，尝试了一下招聘一个前端工程师，月薪开的3～5K，岗位放上去一下午收到50+简历。基本都是应届生，面试了几个水平确实不太行，写简单的代码都磕磕绊绊。经验丰富的工资要求又高，我完全负担不起，所以就没有继续招聘了。</p>

<p>我也看到疫情之下，毕业生就业压力非常大，其中一个候选人和我说，工资只要够吃住就可以接受。</p>

<h2 id="看书">看书</h2>

<p>这段时间看了一点创业的书，主要是<a href="https://www.dedao.cn/ebook/detail?id=JblNOdGPBpZdjEgmN4JLq7yaRvKV206PQy31roMz6xYX5QDG8l9bnOeAkey1g25L">《心力》</a>、<a href="https://github.com/weiyinfu/MaoZeDongAnthology">《毛选1》</a>里面的矛盾论、实践论和唯物辩证法。</p>

<p>创业是和一群未知的人，去一个未知的地方，干一件未知的事情。面对充满不确定的未来，只具备解决已知问题的能力显然是不够的。认知深刻，心力强大，创业才能走的更远。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #26 开发果蔬时节APP</title>
    <id>/notes/onebiz-26</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-26"/>
    <updated>2022-11-13T00:00:00+08:00</updated>
    <published>2022-11-13T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<h2 id="果蔬时节app">果蔬时节APP</h2>

<p>果蔬时节是我去年开发的小程序，我打算做成一个APP来体验整个开发、上线的流程，也可以作为艺爪付费的参考案例。果蔬时节基于 <a href="https://zh.uniapp.dcloud.io/">uni-app</a> 开发，用的是跨平台框架，适配成APP比较容易，但第一次尝试也折腾了几天时间。</p>

<p>目前适配了 Android 端，正在尝试上架华为应用商店。有些应用商店上架需要软著，正准备申请。</p>

<p>适配APP遇到的主要问题（都已解决）：</p>
<ol>
  <li>确保样式、组件的兼容性，适配不同的平台。</li>
  <li>增加用户协议和隐私政策，上架必须提供，可以参考别人的改一改。</li>
  <li>打包成安装包，步骤很多以及各种配置比较复杂。</li>
</ol>

<p>下一期计划适配 iOS 端，申请软著以及上架。</p>

<h2 id="mbti性格类型">MBTI性格类型</h2>

<p>我最近半年关注了 MBTI（迈尔斯-布里格斯性格分类法），有时感觉很准有时又觉得不准。最近我特意读了 <a href="https://book.douban.com/subject/3004272/">《天资差异》</a> 这本书，书中第一部分对 MBTI 理论解释的很清晰透彻，后面几部分有些枯燥，如果你也对 MBTI 感兴趣的话，推荐阅读。</p>

<p>据我个人观察和判断，我觉得 MBTI 理论是基本准确的：</p>
<ol>
  <li>《军队院校招收学员体格检查标准》第四十四条 按照《中国MBTI－G人格类型》实施检测，检测判定为ENFP、INTJ、ISTP人格类型，且符合下列情形之一的……不合格。</li>
  <li>在职业偏好、行为习惯、学习成绩等划分的人群中，MBTI 类型有显著的倾向性，例如学霸中 ISTJ 占比很高，多才多艺的 ENFP 占比很高。</li>
</ol>

<p>但是 MBTI 不可偏信，适合作为参考：</p>
<ol>
  <li>性格是内在的特质，只有自己真正了解自己的内心，其他人只能看到表象。</li>
  <li>统计学上显著的倾向性仅仅是倾向性，不是绝对。每个人都是独一无二的，MBTI 只能描述最典型的特点，刻板印象带有较多偏见。</li>
</ol>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #25 驾照到手 &amp; 买车</title>
    <id>/notes/onebiz-25</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-25"/>
    <updated>2022-10-16T00:00:00+08:00</updated>
    <published>2022-10-16T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>本期进展较少，国庆假期也没有投入时间开发产品。主要成果是考到了驾照，然后买了车。</p>

<h2 id="艺爪付费">艺爪付费</h2>

<p>主要做了两个小功能（<a href="https://www.ezfuns.com/changelog/">更新日志</a>），写了一篇文档（<a href="https://www.ezfuns.com/docs/revenue/case-rssant/">案例 - 蚁阅会员付费的实现</a>）。</p>

<ul>
  <li>新增付费界面介绍文案配置。</li>
  <li>新增用户使用兑换码接口，兑换码功能可以单独使用了。</li>
</ul>

<p>下一期时间会更充裕，继续努力更新迭代。</p>

<h2 id="驾照买车">驾照&amp;买车</h2>

<p>国庆节前考完科目三、科目四，拿到了驾照。然后国庆假期看车、买车，前几天办好了所有手续和车牌。车子买的是吉利帝豪S，普通燃油车，落地价差不多10万。</p>

<p>考虑到偶尔会开车跑周边县城，以及逢年过节带家人出行。五菱宏光MiniEV续航不够且空间太小，身边亲人朋友都不建议买。其他长续航电动车、混动车价格偏贵。综合考虑买车+养车成本以及实用性，我选择了买燃油车更稳妥。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #24 继续独立开发艺爪付费</title>
    <id>/notes/onebiz-24</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-24"/>
    <updated>2022-09-18T00:00:00+08:00</updated>
    <published>2022-09-18T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<h2 id="艺爪付费">艺爪付费</h2>

<p>这一期艺爪付费做了一些更新，主要包括：</p>

<ol>
  <li>接入了支付宝标准支付渠道</li>
  <li>后台界面支持手动增减用户余额</li>
  <li>会员数据导入增加执行进度，支持大批量导入</li>
  <li>付费墙和权益增加别名字段，方便API集成</li>
  <li>其他界面和功能上的小改进</li>
</ol>

<p>我也把蚁阅的会员系统迁移到艺爪付费了，大约半天时间实现代码集成，然后花了一些时间测试和验证。后续我准备写一篇文章介绍迁移过程，蚁阅的代码也是开源的，方便用户作为实际案例参考。</p>

<p>上一期我申请了奇绩创坛投资，结果出来了，略有遗憾未能通过。投资人的反馈主要有
【现有替代手段多】、【项目推进速度不够快】。我觉得这个反馈非常准确，也很值得思考。</p>

<p><strong>现有替代手段多</strong></p>

<p>主要的替代手段，一个是自建会员系统、自己对接支付渠道，另一个是直接用APP应用商店SDK实现内购。</p>

<p>我尝试回答【为什么选择我】这个问题，这也是产品的迭代方向：</p>

<ol>
  <li>成本：降低开发成本，让开发者只需几个小时，就能实现完整的会员付费功能。产品要非常容易集成，对开发者友好，提供保姆级教程和开源案例。</li>
  <li>实用：全平台统一，处理好平台差异和各种边界情况。提供完善的后台管理、数据报表、团队协作功能。支持国内市场和海外市场，提供国际化和本地化方案。</li>
  <li>信任：数据安全，做到金融级安全保障。做好系统设计，保障长期稳定运行。持续改进，积累良好口碑。</li>
</ol>

<p><strong>项目推进速度不够快</strong></p>

<p>这几个月由于各种事情，我在艺爪付费上投入的时间确实不多。</p>

<p>原本计划今年开发3个新项目，但时间不太够用。我打算只做一个全平台的简单APP，体验一下开发APP上架应用商店，也可以作为艺爪付费的参考案例。</p>

<p>我感觉艺爪付费离盈利还有些远，但这个产品确实有价值，我会继续独立开发，有机会的话会考虑招募兼职小伙伴。</p>

<h2 id="其他">其他</h2>

<ol>
  <li>科目三挂了，可能是太紧张导致严重失误。</li>
  <li>中秋前几天本地疫情，封控10多天了，等解封后继续考科目三。</li>
  <li>外包项目完成，款项也收到了。</li>
</ol>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #23 考驾照、忙碌的一个月</title>
    <id>/notes/onebiz-23</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-23"/>
    <updated>2022-08-18T00:00:00+08:00</updated>
    <published>2022-08-18T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>这一期比较忙碌，花了很多时间在考驾照上，艺爪付费在继续完善。</p>

<h2 id="考驾照">考驾照</h2>

<p>这段时间经常天亮出发去练车，趁早晨比较凉快，练一个小时车。上周考过了科目二，顺利的话预计9月初拿驾驶证。</p>

<p>随手拍的日出，偶然发现的风景。</p>

<p><img src="/static/2022-08-18/sunrise.jpg" alt="乡间日出" /></p>

<h2 id="艺爪付费">艺爪付费</h2>

<p>艺爪付费主要修复了一些小问题，正在接入支付宝标准支付渠道，投入时间不多。</p>

<p>还有一件事情，有网友推荐我申请 <a href="https://www.miracleplus.com/">奇绩创坛</a> 天使投资。我看了一下申请方式，非常务实，只需要填写申请表（有很多值得思考的问题），不需要商业计划书和PPT。</p>

<p>因此我就试着申请了，预计8月底会有结果，无论通过与否对我来说都是好消息。如果很幸运通过了，那我可以组建小团队专注这个方向，创业旅程会更精彩。如果没有通过，说明方向不够好或者市场不够大，竞争会更小，继续独立开发更适合。</p>

<h2 id="接私活项目">接私活项目</h2>

<p>机缘巧合，一个蚁阅的老用户联系我，希望我帮他做个网站。对方是产品经理出身，对要做的东西想的比较清楚，我感觉项目不是很复杂，谈妥之后就签合同接下来了，每周花一天时间做。</p>

<p>虽然过程中需求/方案还是有些调整，但需求比较明确，有原型图和需求文档，不至于出大问题。主要的影响是我自己的时间不太够用了，这段时间都特别忙碌。</p>

<p>认识更多的人，让更多人认识自己，给他人提供价值，机会随之而来。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #22 艺爪付费迭代 &amp; 重回赣州</title>
    <id>/notes/onebiz-22</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-22"/>
    <updated>2022-07-10T00:00:00+08:00</updated>
    <published>2022-07-10T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<h2 id="艺爪付费"><a href="https://www.ezfuns.com/">艺爪付费</a></h2>

<p>这一期艺爪付费迭代更新了很多功能，并且有了一个成功案例 <a href="https://jimeiapp.zhangbingdev.com/">集美美图App</a>。集美美图的作者也是独立开发者，这个App做的非常漂亮，很有设计感，值得学习，推荐大家体验！</p>

<p><a href="https://jimeiapp.zhangbingdev.com/" target="_blank" style="border-bottom:none;"><img src="/static/2022-07-10/jimeiapp.png" alt="集美美图App" /></a></p>

<p>这段时间我认识了很多有趣的网友，有创业成功的前辈，有正在创业或独立开发的朋友，也有很多准备做独立开发的朋友。独立开发是比较孤独的，但一路上遇到很多同路人，互相交流，便不觉得孤独了。</p>

<p>接下来我会继续完善艺爪付费，主要包括：</p>

<ol>
  <li>适配更多支付渠道，优化支付体验</li>
  <li>支持配置界面内容文案，优化界面展示</li>
  <li>完善系统现有的功能，提高易用性和安全性</li>
  <li>研究增加礼品卡功能（发卡工具）</li>
  <li>研究无需账号系统、无需代码的集成方式</li>
</ol>

<p>继续努力吧！</p>

<h2 id="重回赣州">重回赣州</h2>

<p>在外面折腾几个月后，我在6月底重回老家赣州了。</p>

<h3 id="离开一线城市">离开一线城市</h3>

<p>决定离开一线城市之前，我和几个在一线定居的朋友聊了一下。</p>

<p>在一线城市定居，房子是最大的问题。按现在的房价，一套房大概要500万，首付120万，掏空6个钱包，背30年房贷，每年还贷30万。在一线城市周边定居的话，房子勉强买得起，但要么工作通勤时间极长，要么过候鸟生活。</p>

<p>以我目前的经济条件，压力巨大，在一线城市也没有归属感，所以彻底放弃在一线城市定居的想法了。</p>

<h3 id="赣州怎么样">赣州怎么样</h3>

<p>房子方面，赣州一套房不到100万，有几年一线工作的积蓄买房压力很小。我在2021年上半年买了一套，今年年底交房，房子问题算是已经解决了。</p>

<p>工作方面，赣州主要是加工制造业，软件相关的工作比较少，招聘网站上普遍工资8k-10k，够养家糊口。但互联网职业很适合远程，我可以给一线城市的企业远程工作，哪怕工资缩水一半，也不会低于10k。</p>

<p>经济上无压力，在家上班，有时间做自己喜欢的事情（比如独立开发），躺平很舒服。</p>

<h3 id="未来的打算">未来的打算</h3>

<p>首先是婚姻问题，有点感慨造化弄人，我也在相亲了，看缘分吧。之后打算是成家立业，结婚生子，过上平凡的生活。</p>

<p>工作上会保持一边远程兼职、一边独立开发的状态，可能会持续3～5年。等自己的产品赚钱了，再转成全职独立开发。</p>

<p>近期正在考驾照，刚报名了驾校，然后打算买个车子，可能会买五菱宏光MiniEV。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #21 新产品艺爪付费上线内测</title>
    <id>/notes/onebiz-21</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-21"/>
    <updated>2022-06-11T00:00:00+08:00</updated>
    <published>2022-06-11T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>这一期主要在做 <a href="https://www.ezfuns.com/">艺爪付费</a> (EZRevenue) 这个产品，终于上线内测了。</p>

<h2 id="艺爪付费">艺爪付费</h2>

<p>艺爪付费 <a href="https://www.ezfuns.com/">https://www.ezfuns.com/</a><br />
<strong>为网站App提供会员、订阅、内购付费功能</strong></p>

<p>这个服务适用于网站或App通过增值付费盈利的场景，适合于个人开发者、小团队、初创企业以及中小型企业，计划中支持中国+海外市场。</p>

<ol>
  <li>支持订阅制、买断制、积分道具等多种付费模式，支持兑换码，简单配置即可上线使用。</li>
  <li>支持微信支付、支付宝、收款码、比特币、PayPal等多种支付渠道，个人开发者也能收款。</li>
  <li>累计收款100万元内免费，超出后按1%收取服务费。</li>
</ol>

<p>欢迎感兴趣的朋友试用和反馈，也可以 <a href="https://www.ezfuns.com/contact/">联系我</a> 加入内测交流群。</p>

<h3 id="技术架构">技术架构</h3>

<ol>
  <li>数据存储：腾讯云的 MySQL 服务，对象存储</li>
  <li>后端API：基于 Python，用了 Falcon、SQLAlchemy 框架</li>
  <li>服务器：通过腾讯云的云函数容器镜像部署</li>
  <li>前端界面：基于 Vue，用了 Vuetify 框架</li>
  <li>主站和文档：使用 Docusaurus 生成静态网站</li>
  <li>静态资源：通过腾讯云的对象存储，API网关，CDN 部署</li>
</ol>

<p><strong>整个项目时间投入：</strong></p>

<ol>
  <li>调研、思考、业务建模、后端代码开发，大约2/3时间</li>
  <li>界面设计、前端代码开发，大约1/3时间</li>
</ol>

<p><strong>一些感想：</strong></p>

<ol>
  <li>完全使用云服务非常高效，省时间、很便宜、很稳定。</li>
  <li>用成熟稳定、有点老但有维护的框架，开发效率最高。</li>
  <li>代码只要设计上、方向上没有问题，就不要纠结细节，面向业务一把梭更有效率。</li>
</ol>

<h2 id="其他">其他</h2>

<p>这个月我跑到惠州来了，会在这边待几个月，深圳/惠州/广州附近的朋友，可以约面基呀。</p>

<p>对了，推荐一个有意思的UP主 <a href="https://space.bilibili.com/517346060/">轻徙鸟 - 自由职业者的租房旅行计划</a>，也是一个朋友推荐给我的。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #20 付费订阅后端完成 &amp; 商标注册</title>
    <id>/notes/onebiz-20</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-20"/>
    <updated>2022-05-07T00:00:00+08:00</updated>
    <published>2022-05-07T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>这一期继续在做付费订阅服务，后端基本完成，下一步是做前端界面，进度比预期慢了一些。顺便分享一下商标注册的事情。</p>

<h2 id="ezrevenue">EZRevenue</h2>

<p>接着上一期梳理完业务逻辑，然后是持续写代码。写了一半感觉业务模型还有点不对，我决定再做一轮调研。调研主要分析了 50+ 网站和 App 的充值页面，思考我的业务模型能不能满足这些场景。也看完了 <a href="https://www.priceintelligently.com/developing-your-saas-pricing-strategy">SaaS Pricing Strategy</a> 这本书，对理论和实践都很有帮助。</p>

<p>调研后调整了部分业务模型，业务模型是超前设计，大概能满足95%的场景，有些大企业的 SaaS 定价过于复杂，很难满足。实现上先做比较简单的场景，简化实现，满足独立开发者和初创企业的需求。</p>

<p>写代码的过程中，我感觉单元测试非常有用，一方面确保自己不会把好代码改坏，另一方面测试失败了能快速定位问题，用 Python 这种动态语言也不会「重构火葬场」。跑一遍测试全过，就可以专心做下一个任务了。</p>

<p>后端部分告一段落，接下来做前端界面，争取快点上线。</p>

<p><strong>关于产品名称</strong></p>

<p>产品的中文名称我还没确定，其中 <strong>EZ</strong> 等于 <strong>艺爪</strong>（商标），后面还需要一个词。</p>

<p>主题：为网站和App提供会员、订阅、付费功能的服务。</p>

<p>我想到的有这些名称：</p>

<ol>
  <li>艺爪付费：订阅付费，从消费者的角度可以叫做付费。</li>
  <li>艺爪收费：从开发者/商户的角度就是收费，开发者是我的直接用户。</li>
  <li>艺爪收款：同上，但这个名字感觉像聚合支付服务。</li>
  <li>艺爪小店：有点像一个软件商店，但不是应用商店平台，而是方便开发者在产品里卖会员和增值服务。</li>
</ol>

<p>我也比较纠结，不知道哪个比较好，<strong>有什么建议吗？</strong>投票也行。</p>

<p>或是从 SEO 的角度，<strong>假如你想找一个这样的服务，你会搜索哪些关键词？</strong>欢迎博客留言。</p>

<h2 id="商标注册">商标注册</h2>

<p>我在去年 10 月份提交的商标注册，前段时间刚注册成功，拿到了商标证书。</p>

<p><img src="/static/2022-05-07/trademark-regestion.jpg" alt="商标注册" /></p>

<p>共注册了 5 个商标，其中 4 个注册成功，1 个被部分驳回，目前还在公告期。流程时间线：</p>

<ul>
  <li>2021-10-13 腾讯云下单</li>
  <li>2021-10-14 提交给商标局，商标申报</li>
  <li>2021-11-05 通过形式审查，商标局下发受理通知</li>
  <li>2021-12-23 通过实质审查并进入公告期</li>
  <li>2022-04-14 通过商标审查，商标局下发注册证书（电子版PDF）</li>
</ul>

<p>各大云平台都有商标注册服务，我是在腾讯云申请的商标注册，选择快速注册即可。每个商标大类 320 元，大类里面可以选 10 个小类，超过 10 个要加钱。</p>

<h4 id="商标的用途">商标的用途</h4>

<p>简单来说，商标可以用于各种需要展示名称的场景，例如App名称，网站名称，公众号名称，店铺名称，广告标题等等。</p>

<p>用途1: 解决了产品起名问题，商标名可以放心使用，不用担心侵犯别人的商标。</p>

<p>用途2: 防止竞品用类似名称做推广/蹭流量，只要发现了就可以投诉让对方下架，严重的可以起诉。</p>

<p>用途3: 有些平台需要审核产品名称，商标注册证书可以作为依据，方便产品上架。</p>

<h4 id="商标名称检索">商标名称检索</h4>

<p>商标有很多个大类，在同一个大类里面，商标名称不能和已注册的商标近似，否则容易被驳回。</p>

<p>提交注册的时候，建议每个大类单独提交一个，不要混着提交，这样一个类别被驳回的不会影响其他类别，通过率更高。</p>

<ul>
  <li><a href="https://tm.aliyun.com/">阿里云商标查询 https://tm.aliyun.com/</a></li>
  <li><a href="https://tm.cloud.tencent.com/">腾讯云商标查询 https://tm.cloud.tencent.com/</a></li>
  <li><a href="http://wcjs.sbj.cnipa.gov.cn/">商标局官方查询 http://wcjs.sbj.cnipa.gov.cn/</a></li>
</ul>

<p>建议提交注册之前，在商标局官方查询检索一遍，这里的结果最准确。</p>

<h4 id="商标类别怎么选">商标类别怎么选</h4>

<p>和互联网密切相关的大类主要有：35类-广告贸易，9类-电子电脑，38类-通讯传媒，42类-技术服务。35类-广告贸易属于万能类型，商业行为基本都带广告属性，建议注册。9类-电子电脑可以保护软件产品，例如App，建议注册。</p>

<p>每个大类里面可以选 10 个小类，小类里面还有很多小项，建议防御性注册选择尽可能多的小类，小类里面的小项选一个即可。这样他人不能在这些小类上申请与该商标相同或近似的商标，实现一部分保护的目的。</p>

<p>具体操作上，可以查询别人商标的做法，例如可以查询：<code class="language-plaintext highlighter-rouge">拼夕夕</code>、<code class="language-plaintext highlighter-rouge">阿里爷爷</code>、<code class="language-plaintext highlighter-rouge">微信豆</code>，这些都是防御性注册的商标，可以参考他们选择的小类。</p>

<h4 id="商标被部分驳回">商标被部分驳回</h4>

<p>商标被部分驳回的情况，基本是和已注册的商标近似了，可以默认不处理，这样商标局会给通过的部分发注册证书。如果还是想要注册下来的话（并且不差钱），可以联系商标注册的公司或顾问试一试复审。</p>

<p>因为我也有一个商标被部分驳回了，就发现好几个商标注册的人打电话、加我微信，问我要不要申请商标复审。我没有申请复审，没有必要，还很贵。</p>

<p>另外推荐阅读 <a href="https://mp.weixin.qq.com/s/VM4Vl16ejyePz7zyycPn3Q">少年老陈 - 聊聊商标注册的那些坑</a>，防坑防骗防套路。</p>

<p>以上是我注册商标的经验总结，建议仅供参考，如有错误欢迎指正！</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #19 继续开发，为网站App提供付费订阅</title>
    <id>/notes/onebiz-19</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-19"/>
    <updated>2022-04-09T00:00:00+08:00</updated>
    <published>2022-04-09T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>这一期主要在做新产品开发，没有太多分享的内容。</p>

<h2 id="ezrevenue---开发中">EZRevenue - 开发中</h2>

<p>一个为网站和App提供会员、订阅、付费功能的服务。</p>

<p><strong>梳理业务逻辑</strong></p>

<p>为了理清应用内购(IAP)系统的逻辑，我研究了 Apple AppStore 后台系统，花了 99 美元注册 Apple 开发者会员（争取赚回来！）。同时也研究了华为应用商店的内购系统，发现和 Apple AppStore 基本一致。</p>

<p>调研期间发现一个专门研究定价的网站，上面有本电子书 <a href="https://www.priceintelligently.com/developing-your-saas-pricing-strategy">SaaS Pricing Strategy</a> 值得一读。</p>

<p><strong>代码开发</strong></p>

<p>主要做了数据建模，后端接口开发。</p>

<h2 id="ezauth---已完成">EZAuth - 已完成</h2>

<p>类似 Auth0 和 Authing 的用户鉴权服务，只做了最基本的功能（够用）。复用了很多蚁阅账号系统的代码，进展顺利，已完成上线。</p>

<h2 id="一些想法">一些想法</h2>

<p>充分的调研可以解决很多问题，少走很多弯路。</p>

<p>软件库升级是很消耗时间的工作，除非确实能显著提高开发效率，否则不要折腾。稍微旧一些，长期维护的项目更具有生产力。</p>

<p>软件产品定价有越来越贵的趋势，从永久买断模式变成订阅模式，再变成按席位订阅模式（按人头x时间付费）。价格定多少取决于给用户提供的价值有多少，产品价值会随着使用时长增加而增加，随着使用人数增加而增加，这样的定价模式就能给企业带来更多利润。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #18 开始新产品，为网站App提供付费订阅</title>
    <id>/notes/onebiz-18</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-18"/>
    <updated>2022-03-11T00:00:00+08:00</updated>
    <published>2022-03-11T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>春节已过去一个月，向着 2022 年目标，重新出发。</p>

<h2 id="开始新产品">开始新产品</h2>

<p>新产品是一个为网站和App提供会员、订阅、付费功能的服务，会集成多种支付渠道，只需几行代码就能让你的网站和App支持付费订阅。对标产品是国外的 <a href="https://www.revenuecat.com/">RevenueCat</a>。</p>

<p>这个产品的想法已经酝酿了一年多，考虑到面向开发者的产品太难赚钱，所以没有很快着手去做。在和很多开发者交流过程中，我感觉到大家需要这样的服务，所以应该有足够价值、值得做，能赚点零花钱也好。</p>

<p>目前我调研的情况是，国外有两个 RevenueCat 的竞品，但国内没有发现类似产品（欢迎提供线索）。有些关联但并不相同的是内容（知识）付费平台，例如：Patreon、面包多、爱发电等。</p>

<p>这个产品的前身是蚁阅的会员功能，我会把它做成支持多租户，功能相对完善，开箱即用的服务。</p>

<p>这一期主要做了：</p>
<ol>
  <li>集成微信支付渠道，把果蔬时节的支付代码迁移了过来。</li>
  <li>重构代码，部署方式改成腾讯云-云函数（内部项目: ezfaas）。</li>
  <li>统一的用户鉴权服务（SSO登录），正在开发（内部项目: ezauth）。</li>
</ol>

<p>新产品正在开发，可能还需要 2 - 3 个月上线，敬请期待。</p>

<h2 id="云函数部署">云函数部署</h2>

<p>我的所有新产品都会首先考虑云函数部署，按量付费、免运维、低成本、弹性扩容这些特点非常适合做创业项目，全是优点。以下是我整理的完整部署方式。</p>

<p>网站通常包含后端服务，数据库，前端静态文件。数据库直接买云厂商提供的。</p>

<h3 id="后端服务">后端服务</h3>

<p>后端服务通过「云函数」部署，采用容器镜像部署方式，不建议用内置的各类编程语言模板。</p>

<ol>
  <li>通过 Dockerfile 和 multi-stage build 制作很小的镜像，通常不超过 100M，推送到云厂商的镜像仓库。</li>
  <li>创建云函数，选择容器镜像部署，用环境变量做程序配置。</li>
  <li>写一个部署脚本，一键打包和更新部署镜像。</li>
</ol>

<h3 id="前端静态文件">前端静态文件</h3>

<p>前端静态文件通过「对象存储」部署。</p>

<ol>
  <li>对象存储创建空间（Bucket），开启静态网站服务。</li>
  <li>通过命令行工具，将打包好的静态文件上传到对象存储。</li>
  <li>写一个部署脚本，一键打包和上传文件。</li>
</ol>

<h3 id="网关和cdn">网关和CDN</h3>

<p>前后端部署之后，再通过「API网关」，将不同路径的请求转发到前端和后端。网关会有一个默认的 HTTPS 访问地址。</p>

<p>添加 CDN（全站加速/动静加速）域名，源站为 API 网关地址，配置 DNS CNAME 解析到 CDN 地址，此处配置好静态文件缓存规则。</p>

<p>再生成免费的HTTPS证书，云厂商都有提供，配置到 CDN 域名上，实现全站 HTTPS 访问。</p>

<h3 id="网站监控">网站监控</h3>

<p>最后可以部署 <a href="https://github.com/TwiN/gatus">Gatus</a> 服务（健康监控），配置每隔几分钟请求一次后端服务。这样可以使云函数保持活跃状态，减少冷启动时间，同时也可以监控异常情况。</p>

<h2 id="用户鉴权服务">用户鉴权服务</h2>

<p>用户鉴权服务类似 Auth0 和 Authing，我想把我所有产品的用户模块都统一起来，毕竟每个产品都写一套登录注册就太麻烦了。但这类核心服务我不想依赖第三方，需要自己完全可控，更放心也更省钱。也不能靠自己开发，时间成本太高。</p>

<p>所以我调研了一些开源的替代品，最后选择基于 <a href="https://github.com/jazzband/django-oauth-toolkit">Django OAuth Toolkit</a> 定制开发。</p>

<blockquote>
  <p>Django插件，最灵活<br />
https://github.com/jazzband/django-oauth-toolkit</p>

  <p>Django + 中文 LGPL<br />
https://github.com/longguikeji/arkid</p>

  <p>Java 老牌项目<br />
https://github.com/keycloak/keycloak</p>

  <p>golang<br />
https://github.com/tarent/loginsrv</p>

  <p>golang + 中文<br />
https://github.com/casdoor/casdoor</p>

  <p>golang 功能较多<br />
https://github.com/ory/kratos</p>
</blockquote>

<p>选择 Django 插件主要原因是我很熟悉 Python，使用最灵活，方便按需修改，其他选项供参考。</p>

<h2 id="我到了新城市">我到了新城市</h2>

<p>最近两周天气转暖，我来到了福建的一个小城市，租了一间小房子住。生活更简单，日常琐事更少了，最大的变化是大幅减少了吃饭时间。</p>

<p>我现在早餐吃包子鸡蛋，午饭和晚饭都吃 <a href="https://www.ruffood.com/index/powder.html">若饭</a>，用 Blender bottle 不锈钢摇摇杯，非常好清洗，5分钟吃完一顿饭，每天大约能节省 2 小时。</p>

<p>除了节省时间，调配好的代餐其实营养更均衡，没有辛辣油腻和过多糖分。但是和父母在一起时，没法这样吃，老一辈的观念接受不了。</p>

<p>升降桌和工学椅也配好了，生产力拉满。周边环境还不错，时常散散步，劳逸结合。</p>

<p><img alt="出租房" src="/static/2022-03-11/house.jpeg" width="35%" />
<img alt="工作台" src="/static/2022-03-11/desktop.jpeg" width="62%" /></p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">2021自宅创业10个月总结，我会再次挑战</title>
    <id>/notes/review-2021</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/review-2021"/>
    <updated>2022-01-28T00:00:00+08:00</updated>
    <published>2022-01-28T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>在 2021 年 04 月，我 <a href="./2021-04-09-onebiz-begin.md">开始了自宅创业</a>，转眼间春节将至，自宅创业已经 10 个月，是时候对 2021 做一个总结了。回顾一下我当初立的目标，做的产品，生活和收入情况，以及来年的打算。</p>

<h2 id="收入和支出情况">收入和支出情况</h2>

<p>统计时间范围：2021-04-09 至 2022-01-26</p>

<table>
  <thead>
    <tr>
      <th>被动收入</th>
      <th style="text-align: right">金额（元）</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>理财收益</td>
      <td style="text-align: right">4595</td>
    </tr>
    <tr>
      <td>蚁阅会员收入</td>
      <td style="text-align: right">1455</td>
    </tr>
    <tr>
      <td>果蔬时节收入</td>
      <td style="text-align: right">1612</td>
    </tr>
    <tr>
      <td>文章打赏</td>
      <td style="text-align: right">60</td>
    </tr>
    <tr>
      <td><strong>收入合计</strong></td>
      <td style="text-align: right"><strong>7722</strong></td>
    </tr>
  </tbody>
</table>

<p>注：兼职等其他收入不太方便公开，所以在此略过。
<br />
<br /></p>

<table>
  <thead>
    <tr>
      <th>主要支出</th>
      <th style="text-align: right">金额（元）</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>五险一金（约1400元/月）</td>
      <td style="text-align: right">13309</td>
    </tr>
    <tr>
      <td>设备（含置换Macbook Air）</td>
      <td style="text-align: right">8340</td>
    </tr>
    <tr>
      <td>买水果（含自吃和进货）</td>
      <td style="text-align: right">5316</td>
    </tr>
    <tr>
      <td>云计算（含3-5年预付费）</td>
      <td style="text-align: right">4690</td>
    </tr>
    <tr>
      <td>开办公司 (含商标注册1600元）</td>
      <td style="text-align: right">2846</td>
    </tr>
    <tr>
      <td>学习（买书，咨询等）</td>
      <td style="text-align: right">1339</td>
    </tr>
    <tr>
      <td>饮食</td>
      <td style="text-align: right">1109</td>
    </tr>
    <tr>
      <td>交通（打车）</td>
      <td style="text-align: right">675</td>
    </tr>
    <tr>
      <td>充话费</td>
      <td style="text-align: right">662</td>
    </tr>
    <tr>
      <td>衣服、理发</td>
      <td style="text-align: right">349</td>
    </tr>
    <tr>
      <td>产品运营（发红包等）</td>
      <td style="text-align: right">342</td>
    </tr>
    <tr>
      <td>医疗</td>
      <td style="text-align: right">265</td>
    </tr>
    <tr>
      <td>购物</td>
      <td style="text-align: right">260</td>
    </tr>
    <tr>
      <td>娱乐</td>
      <td style="text-align: right">76</td>
    </tr>
    <tr>
      <td><strong>支出合计</strong></td>
      <td style="text-align: right"><strong>39578</strong></td>
    </tr>
  </tbody>
</table>

<p>待在老家不需要房租和伙食费，但支出加起来还是超过了3万块，比我预期的多一些。</p>

<p>很低的生活成本，再加上有部分兼职收入，所以我的现金流是正的，不用担心钱用光了。</p>

<h2 id="回顾2021年目标">回顾2021年目标</h2>

<p><strong>做 2～3 款产品并盈利，年收入 3 万元人民币</strong></p>

<p>比较遗憾，2021年只做了「果蔬时节」这一款产品，再加上维护「蚁阅」。果蔬时节没有盈利（还亏了一些），蚁阅基本收支平衡。</p>

<p>如果只算被动收入的话，离目标还差很远，算上兼职收入则有 3 万元。</p>

<p><strong>学习，读书，听书，保持高效</strong></p>

<p>今年读书不多，只有两本，基本是听完的：</p>

<ul>
  <li>《采购与供应链管理》</li>
  <li>《三体1》</li>
</ul>

<p>还有很多书躺在书架上（电纸书），但没有时间看。</p>

<p>技术方面，不太关注新技术，主要用自己熟悉、“无趣”、稳定的框架和工具。用 Go 写了命令行工具，虽然写起来很生疏但还是很快实现了功能，以后跨平台的命令行工具会首先考虑用 Go 实现。</p>

<p>我也在完善自己的软件”基础设施”，把常用的工具用的更顺手，提高业务开发的效率。</p>

<p><strong>保持身体健康，体重增加到 110 斤</strong></p>

<p>夏天秋天偶尔会跑步+散步，稍微锻炼一下身体，天气变冷之后就没有再锻炼过。今年体重从 100 斤增加到了 122 斤，超额完成目标（主要是吃的好:），现在要适当控制饮食了。</p>

<p>有些时候很有激情，还是会写代码写的很晚，然后身体状况就会不太好，需要彻底停下来休息，没能做到劳逸结合。我的视力也下降了一些。</p>

<h2 id="继续独立开发">继续独立开发</h2>

<p>我喜欢这 10 个月的生活状态，时间相对比较自由，可以做自己喜欢的事情，可以睡到自然醒。老家环境很舒适，有蓝天白云、青山、绿树、虫鸣鸟叫，清新的空气。不过生活也不是完美的，这里夏天太热、冬天太冷，热天蚊虫特别多。</p>

<p>这 10 个月的经历，让我想清楚、看清楚了未来方向，明白了自己想要什么，知道自己要做什么，以及不做什么。我也认识了很多同路人，有和我一样正在艰难前行的，也有少数已经成功的，就像旗帜一样指引着方向。</p>

<p><strong>放弃丰厚的工资，做产品收入这么少，值得吗？</strong></p>

<p>能够产生被动收入的软件产品，可以理解为信息时代的「印钞机」，并且可以完全通过自己的双手创造出来，虽然创造的过程很艰难，也不一定每个人都能成功。如果把被动收入算作存款利息的话，被动收入相当于 20 倍的存款（假设5%利率）。</p>

<blockquote>
  <p>由于资本家垄断了生产资料，劳动者无法独立地进行生产，故只能出售自身劳动力，供资本家剥削。</p>
</blockquote>

<p>从资本论的角度理解，软件产品就是信息时代的生产资料，掌握生产资料就等于解放了自己。</p>

<p>所以我觉得，<strong>我会一辈子做独立开发，直到财富自由</strong>。</p>

<blockquote>
  <p>This is how I want to live the rest of my life.<br />
— <a href="https://mtlynch.io/solo-developer-year-1/#i-want-to-do-this-forever">Michael Lynch</a></p>
</blockquote>

<p>新的一年我应该会换个小城市生活，生活成本会更高但在承受范围内，也顺便旅行放松心情。</p>

<h2 id="2022年目标">2022年目标</h2>

<p>[✔️] 做 3 款新产品，不耗在单个产品上<br />
[✔️] 产品 <strong>盈利</strong> 2 万元人民币<br />
[✔️] 适当旅行，控制好作息，保持高效率</p>

<p>截止日期 2022 年除夕。</p>

<p>新产品已经有了大致想法，即将着手开发。对于盈利说实话我没有太大把握，我会专注于对用户有足够价值的方向，如果没什么人用（留存率太低），那就马上换方向。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #17 代码重构，以及蚁阅的更新</title>
    <id>/notes/onebiz-17</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-17"/>
    <updated>2022-01-13T00:00:00+08:00</updated>
    <published>2022-01-13T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>感觉时间过的飞快，先记录一下这个月的事情，年终总结要等过年前更新了。</p>

<h2 id="代码重构">代码重构</h2>

<p>这个月前期主要在做代码重构，提高项目的开发效率。</p>

<p>首先是开源了 <a href="https://github.com/guyskk/hami-vuex">Hami-Vuex</a> 这个库，我也将蚁阅和果蔬时节两个项目的前端状态管理换成了 Hami-Vuex。重构之后代码更加模块化了，代码提示也非常友好，可以参考 <a href="https://gitee.com/anyant/rssant-web/pulls/11/commits">PR#11</a>。</p>

<p>其实很早在蚁阅的前端代码中就有部分模块化的尝试，但写法算不上优雅，在果蔬时节中把这个尝试继续完善，最终抽象成了一个完整的库。</p>

<p>另一个重构是把果蔬时节的小程序端和后台管理界面代码拆分，原本是写在一起，类似这样：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>src/
    pages/
        admin/
            xxx.vue
        app/
            xxx.vue
    store/
        admin/
            xxx.js
        app/
            xxx.js
package.json
</code></pre></div></div>

<p>当初用了很取巧的办法（条件编译）在一套代码里运行不同的界面。为了方便修改和部署，决定拆分成两个独立的目录，可以分别打包部署：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>admin/
    src/
        pages/
        store/
    package.json

app/
    src/
        pages/
        store/
    package.json

shared/
    components/
    package.json
</code></pre></div></div>

<p>其中有部分代码需要复用，放在 <code class="language-plaintext highlighter-rouge">shared/</code> 目录中。为了复用代码，尝试了 Monorepo 的模式，例如 yarn workspace, pnpm workspace, npm link，踩了一堆坑。最后发现解决办法是修改一个不起眼的 <a href="https://github.com/dcloudio/uni-app/issues/2987#issuecomment-1008034418">Webpack配置</a>，这样文件软链接（符号链接）才能正常使用。</p>

<h2 id="蚁阅图片代理更新">蚁阅图片代理更新</h2>

<p>在12月底的一个下午，连续收到阿里云的几条告警短信，当时我被吓到了。</p>

<p><img src="/static/2022-01-13/rssant-cdn-alert.jpeg" alt="CDN告警短信" /></p>

<p>检查了一下违规URL发现都是色图，阿里云检测到之后主动屏蔽了。幸好只是屏蔽了几个URL，没有直接屏蔽我的主域名，收到短信我马上就去把蚁阅图片代理功能关闭了。</p>

<p>估计是有用户订阅了奇奇怪怪的网站，然后图片被缓存到了阿里云CDN上，被阿里云的鉴黄程序扫描到了。为了更彻底的解决这个问题，必须把图片代理功能和主站隔离，这样万一图片域名被屏蔽也不会影响蚁阅其他功能。</p>

<p>具体做法是把图片代理功能单独部署在阿里云-云函数上，用独立子域名，所有图片请求不经过CDN和缓存，另外图片代理链接设置30分钟有效期，避免被分享传播。目前蚁阅图片代理已经更新好了，功能也已经恢复了。</p>

<h2 id="蚁阅的经营情况">蚁阅的经营情况</h2>

<p>访问量统计，基于自建的 <a href="https://github.com/plausible/analytics">Plausible</a> 服务，每天大约是 200 个活跃用户。</p>

<p><img src="/static/2022-01-13/rssant-analytics.jpg" alt="蚁阅2021年访问量" /></p>

<p>收入统计，基于 <a href="https://github.com/beancount/beancount">Beancount</a>（<a href="https://byvoid.com/zhs/blog/beancount-bookkeeping-1/">介绍</a>），蚁阅 2021 全年收入是 1905 元，大致可以负担服务器开支。</p>

<p><img src="/static/2022-01-13/rssant-revenue.jpg" alt="蚁阅2021年收入" /></p>

<p>对于蚁阅这个产品，我希望保持小众，稳定运行下去，但不太会加新功能了。等其他产品赚到钱了，再考虑把蚁阅做大，目前蚁阅做的越大风险越大。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">Hami-Vuex开源了，哈密瓜味的Vuex！</title>
    <id>/notes/open-source-hami-vuex</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/open-source-hami-vuex"/>
    <updated>2021-12-18T00:00:00+08:00</updated>
    <published>2021-12-18T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>Hami-Vuex 是一个 Vue 状态管理的库，基于 Vuex 实现，提供了更「香甜」的使用方式，所以叫做哈密瓜味的 Vuex！</p>

<h3 id="主要特点">主要特点：</h3>

<ul>
  <li>基于 Vuex 构建，可与 Vuex 3 &amp; 4 兼容和混合使用</li>
  <li>兼容 Vue 2 和 Vue 3，低学习成本，无迁移压力</li>
  <li>易于编写模块化的业务代码，Store 文件不再臃肿</li>
  <li>完全的 TypeScript 支持，代码提示很友好</li>
  <li>类似 Pinia 的用法（可能还更简单）</li>
  <li>单元测试 Line Coverage: 100%</li>
</ul>

<h3 id="举个简单的例子体验一下">举个简单的例子，体验一下：</h3>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">counterStore</span> <span class="o">=</span> <span class="nx">hamiVuex</span><span class="p">.</span><span class="nf">store</span><span class="p">({</span>

    <span class="c1">// 设置一个唯一名称，方便调试程序和显示错误信息</span>
    <span class="na">$name</span><span class="p">:</span> <span class="dl">'</span><span class="s1">counter</span><span class="dl">'</span><span class="p">,</span>

    <span class="c1">// 定义状态</span>
    <span class="na">$state</span><span class="p">:</span> <span class="p">{</span>
        <span class="na">count</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
    <span class="p">},</span>

    <span class="c1">// 定义一个 getter，和 Vue computed 类似</span>
    <span class="kd">get</span> <span class="nf">double</span><span class="p">()</span> <span class="p">{</span>
        <span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">count</span> <span class="o">*</span> <span class="mi">2</span>
    <span class="p">},</span>

    <span class="c1">// 定义一个函数，等价于 Vuex action</span>
    <span class="nf">increment</span><span class="p">()</span> <span class="p">{</span>
        <span class="c1">// $patch 是内置的 Vuex mutation，用于更新状态</span>
        <span class="k">this</span><span class="p">.</span><span class="nf">$patch</span><span class="p">({</span>
            <span class="na">count</span><span class="p">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">count</span> <span class="o">+</span> <span class="mi">1</span>
        <span class="p">})</span>
    <span class="p">},</span>
<span class="p">})</span>

<span class="c1">// 在 Vue 组件中使用</span>
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="nx">counterStore</span><span class="p">.</span><span class="nx">count</span><span class="p">)</span>
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="nx">counterStore</span><span class="p">.</span><span class="nf">increment</span><span class="p">())</span>
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="nx">counterStore</span><span class="p">.</span><span class="nx">double</span><span class="p">)</span>
</code></pre></div></div>

<h3 id="开源地址">开源地址：</h3>

<p>GitHub：<a href="https://github.com/guyskk/hami-vuex">https://github.com/guyskk/hami-vuex</a></p>

<p><strong>详细文档及设计思路都在 GitHub 仓库中，欢迎品尝！</strong><br />
<strong>好用的话求 Star 哇！</strong></p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #16 半独立开发的第一个月</title>
    <id>/notes/onebiz-16</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-16"/>
    <updated>2021-12-12T00:00:00+08:00</updated>
    <published>2021-12-12T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>一个月时间又过去了，生活基本是平淡的，但也有些零零散散的，有意思的事情，就当流水账记录一下。</p>

<h2 id="远程兼职">远程兼职</h2>

<p>我现在每周大概 4 天做远程兼职，这个月主要在做前端项目，用了 Vue 3 和 Typescript。</p>

<p>Vue 3 生态目前不是很完善，重写了太多的库以及开发者工具，估计再过半年能稳定下来。Typescript 用上了很舒服，类型提示和代码补全可以提高开发效率，减少低级错误。</p>

<p>最近也开始做 Python 后端项目，和我的技术栈很匹配。半独立开发的状态感觉很好，压力小很多，写代码的效率也有所提高。</p>

<h2 id="果蔬时节小程序">果蔬时节小程序</h2>

<p>果蔬时节后台部分终于完成上线了，之后在做代码清理和重构，丢掉一些历史包袱，等清理完之后再继续开发小程序端。</p>

<p>重构过程中，顺便造了一个前端轮子 <a href="https://github.com/guyskk/hami-vuex">Hami-Vuex</a>，欢迎关注，过几天我单独写篇文章介绍一下。</p>

<h2 id="时间管理">时间管理</h2>

<p>这个月我用 <a href="https://toggl.com/">Toggl</a> 记录了时间花费，并不是远程兼职的要求，完全是为了自己分析和管理时间。因为是记录给自己看的，所以我可以完全忠实的记录时间，而不会有任何的顾虑。</p>

<p>我的一些占用时间偏多的地方：</p>

<p><strong>睡的太久了：</strong><br />
我通常是在0点之前睡觉，9点半左右醒来，差不多是自然醒。可能是天生比较能睡，这个就顺其自然了。</p>

<p><strong>吃饭太久了：</strong><br />
大约是洗漱+早饭：1 小时，热菜+午饭：1.5 小时，晚饭+洗漱+家人闲聊：2.5小时。一方面是我吃的比较慢，另一方面是磨蹭及一些杂事。如果独居 + <a href="https://www.ruffood.com/">若饭</a> 的话，可以节省大部分时间。</p>

<p><strong>业务之外的事情：</strong><br />
例如购物比价，逛网站论坛，听播客，阅读博客和资讯，零零散散也占用了不少时间。</p>

<h2 id="macbook-air-m1">Macbook Air M1</h2>

<p>11 月底我买了台 Macbook Air M1，用了半个月，感觉非常好，性能很强，程序秒开，续航十足，完全静音，键盘好用，价格很实惠。兼容性也非常好，iTerm2 设置使用 Rosetta 打开，可以完全兼容 x86 程序。使用 Docker 也没问题了，如果没有 ARM 镜像可以通过 <code class="language-plaintext highlighter-rouge">--platform=linux/amd64</code> 参数运行 x86 的镜像，性能也不会太差。</p>

<p>两个字总结：真香！</p>

<h2 id="税务开发票">税务开发票</h2>

<p>前几天跑了一趟税务大厅，把开发票的流程搞定了，在此记录一下。</p>

<p>从税务角度，公司分为「小规模纳税人」和「一般纳税人」，发票分为「普通发票」和「专用发票」，开票方式有「自开发票」和「税局代开」。</p>

<p>小规模纳税人的税率低，但不能用专用发票抵扣进项税，<code class="language-plaintext highlighter-rouge">增值税 = 销售额 x 税率</code>。一般纳税人税率高，可以用专用发票抵扣进项税，「进项」可理解为购进货物/原材料的成本，<code class="language-plaintext highlighter-rouge">增值税 = (销售额 - 进货成本) x 税率</code>。企业默认都是小规模纳税人。</p>

<p>普通发票和专用发票的区别，就是上面提到抵扣进项税的区别，一般来说开普通发票就可以了，除非付款方是一般纳税人并且要求开专票。</p>

<p>公司自开发票的话，可以到税务大厅免费申请，税务会核定你一个月能开多少张票，以及额度是多少，然后发一个 UKey（类似U盘）。拿到 UKey 之后，下载官方的税务开票软件，按说明操作就可以开电子发票了。</p>

<p>如果是个人需要开票，或者公司无法自己开票，可以到税务大厅申请代开票。个人代开需要预缴 20% 的个税，这部分税可以在年底汇算清缴时多退少补。企业代开通常是开专票，开普票的话税局会建议你申请 Ukey 自己开。</p>

<h2 id="滴滴出行见闻">滴滴出行见闻</h2>

<p>我至今没有考驾照，也没有打算买车。因为很早就算过一笔账，假设每周打4次车，每次50元，5年的花费大约是5万元，远低于买车和养车的成本，更何况我用车的次数远没有这么高。</p>

<p>在比较偏远的地方（比如我老家农村）也是很好打车的，只要打车的时候选最贵的一档（我这边是50-60元），10公里外的车也会调度过来，稍微多等几分钟就行了。</p>

<p>由于滴滴被下架近半年了，出于好奇，我打车的时候会随意问一下司机，最近单量怎么样，滴滴好不好做之类的。得到的答案都是正面的，滴滴单量很稳定，没什么影响，而且开滴滴比较自由，比工厂上班舒服多了。偶尔会有抱怨滴滴抽成太高了，以及导航不准确、绕路的问题。</p>

<p>对于其他的平台，都是没什么订单，赚不到钱。我自己也试过在高德地图上打车，发现很难打到车，而且价格还更贵。</p>

<p>可以说，滴滴构建了非常牢固的护城河，哪怕捆住其手脚，然后所有竞争对手一起上都打不过它。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #15 开始远程兼职</title>
    <id>/notes/onebiz-15</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-15"/>
    <updated>2021-11-14T00:00:00+08:00</updated>
    <published>2021-11-14T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>如题，我开始远程兼职了，从上周开始的，在预料之中，只是来的有点快。</p>

<h2 id="远程兼职">远程兼职</h2>

<p>找兼职的过程很顺利，偶然在一个群里看到个招聘消息，是认识多年但没有联系的网友。然后就聊了聊意向、技术栈、以及我后续时间规划，很快就谈好了。约定每周工作30小时，时薪不高但我也比较满意，主要是时间自由。网上签了合同，然后就开始参与项目了。</p>

<p>有一份兼职之后，经济方面就没什么担忧了。现在自己也还有不少空余时间，继续做自己的项目，自宅创业可以长期坚持下去。毕竟创业一次就成功的，十中无一。</p>

<h2 id="订单系统">订单系统</h2>

<p>这两周也在继续写订单系统，还剩一点点，差不多要完成了。接下来会继续把订单系统做完，然后继续做小程序端改版。</p>

<p>最近我加盟的一个水果代理商也换交易系统了，新系统比我预期的好。之前他们用的是 <a href="https://xd.cx/">易代理</a>，做的确实不咋地。我查了一下新系统是 <a href="http://jisudinghuo.com/">极速订货</a> 提供的，价格比有赞贵不少，但确实比有赞更合适，更符合水果分销的模式。</p>

<p>上一期我尝试回答了 “为什么不直接用开源的商城系统？”，现在我想，如果我当初买一套交易系统来用，结果会如何？我觉得，水果业务我会照样做不起来，因为供应链、获客渠道这两个条件我还是不具备，最后折腾一场什么也没留下。</p>

<p>选择自建或者开源+定制交易系统的话，我虽然失败了，但我有了属于自己的交易系统。我可以让业务继续维持而不用额外付出成本，也还有机会把交易系统卖出去，转做 to B 生意。</p>

<p>坚持「做有积累的事情」，这是我学到的经验。</p>

<h2 id="后续更新">后续更新</h2>

<p>考虑到创业时间减少，我打算后续博客 <strong>每月更新一次</strong>。可以通过 RSS 订阅博客，或是关注我的公众号「自宅创业」。创业路上，与君共勉！</p>

<h2 id="最后">最后</h2>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>

]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #14 写订单系统后台</title>
    <id>/notes/onebiz-14</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-14"/>
    <updated>2021-10-31T00:00:00+08:00</updated>
    <published>2021-10-31T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>这两周主要在写订单系统后台，快要写完了，比我预想的时间更长（包括部分上期完成的任务）。</p>

<p><img src="/static/2021-10-31/order-admin-tasks.png" alt="order-admin-tasks" width="50%" style="display:block;margin:0 auto;" /></p>

<h2 id="订单系统">订单系统</h2>

<p>订单系统最核心的是商品和订单。商品分为基础商品（SPU）和商品规格（SKU），一对多的关系。订单分为顾客单和发货单，也是一对多的关系。除此之外，还有品类、供应商和供货商品，关系多就麻烦。</p>

<p>在后端逻辑和数据存储上，要处理关联查询和交易快照，代码有点复杂，花了不少时间。在前端界面上，表单字段很多，不同表单之间还有关联字段，花了较多时间处理。</p>

<p>之后我想明白了，对目前的业务来说，品类、商品、供应商都不多，前端一次性全查出来就好了，需要用的地方直接下拉选择。很多父子孙组件之间，属性和事件传递绕来绕去，不如干脆放到Vuex全局管理，更省心。</p>

<p>此外，我还仔细研究了<a href="https://mms.pinduoduo.com/">拼多多商家后台</a>，还有拼多多商家版App，确实做的不错。</p>

<p><strong>为什么不直接用开源的商城系统？</strong></p>

<p>比如 <a href="https://github.com/macrozheng/mall">macrozheng/mall</a>, <a href="https://github.com/saleor/saleor">saleor</a> 和 <a href="https://github.com/django-oscar/django-oscar">django-oscar</a>，直接用不好吗？或者二次开发？</p>

<p>说实话，我当时也调研了几个 Python 的开源商城框架，但没有很仔细。开源的和我想要的差别有点大，而且定制也有点复杂，再加上程序员本能吧，就直接自己做了一个。</p>

<p>最近和一些朋友聊的时候也被问到这个问题，所以我又更仔细的调研了一下。</p>

<p>开源电商有这么几个问题：</p>

<ol>
  <li>前台系统主要是Web网站，支持小程序，APP的基本没有。</li>
  <li>后台管理系统功能不全，用起来也不方便，比如都没有批量发货，运费模板。</li>
  <li>基本没有适配中国境内的支付渠道，以及快递物流。</li>
</ol>

<p>需要定制的内容很多，但应该还是比完全自建更容易。如果只是想卖货，不如用现成的电商服务，比如微信小店、Shopify、有赞商城。如果想做交易平台，再考虑是开源+定制还是自建，如果重来一次，我会先试试开源+定制。</p>

<h2 id="后续计划">后续计划</h2>

<p>继续把订单系统做完，小程序迭代做完。也大致有了下一个产品的想法，但不着急去做。</p>

<h2 id="最后">最后</h2>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #13 创业半年回顾</title>
    <id>/notes/onebiz-13</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-13"/>
    <updated>2021-10-15T00:00:00+08:00</updated>
    <published>2021-10-15T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>从开始创业到现在，时间飞快的过了半年，业务还是没有做起来。折腾了很多东西，积累下来的，一是经验教训，二是产品代码。</p>

<h2 id="产品迭代">产品迭代</h2>

<p>第一次迭代：水果小程序支付下单功能，以及简陋的后台管理功能。持续1个月时间，完成上线。这一版功能基本可用，但还很不完善。</p>

<p>第二次迭代：重新设计业务模式，改进小程序，以及相对完善的后台系统。持续2个月时间，目前大概完成50%。</p>

<p>这一次持续时间很长，但还是严重延期了。一方面是开发效率不高，实际专注写代码的时间不够。另外也低估了电商系统的复杂度，按人天估算应该要30-40MD，也就是一个人实打实的写一个多月代码。</p>

<p>我的感觉是，产品迭代是不断积累价值的过程，只要方向没有错，产品就会越来越有用。良好的代码组织、组件库、框架可以显著提高开发效率。除了闷头生产业务代码，也要适时改进生产线，这样产品迭代会越来越轻松。</p>

<h2 id="水果业务">水果业务</h2>

<p>由于水果业务很难做起来，我也在考虑是不是值得继续投入。</p>

<p>我的判断是，水果行业用户群体广泛，盈利模式清晰，做起来之后能形成明显的壁垒，钱途可观。但是，需要资源积累才能做起来，主要包括：供应链、获客渠道、信息系统。</p>

<p>目前资源并不具备，短期内也不太可能具备，我的计划是：</p>

<ol>
  <li>先做好这一版小程序，以及后台管理系统，这是我的信息系统。</li>
  <li>搭建果蔬时节网站，做图文内容和SEO，业余时间慢慢运营，这是获客渠道。</li>
  <li>然后集中精力做新项目，水果业务进入放养状态。</li>
</ol>

<h2 id="反思自省">反思自省</h2>

<p><strong>做有积累的事情</strong></p>

<p>例如写代码、写文章、看书、认识各种各样的人，要么积累资源/资产，要么提高自己的知识和经验。反之如订单发货、发广告、营销带货、闲聊灌水、关注新闻八卦，做一遍和做一百遍没什么差别，几乎没有积累。</p>

<p><strong>保持专注和高效</strong></p>

<p>长时间做一件事的时候，时间越长越容易懈怠，正所谓一鼓作气，再而衰，三而竭。要沿着目标路线，专注地、坚持执行，越专注越高效。当然了，人不是机器做的，也要劳逸结合，该休息就停下来，不要去想别的事情。</p>

<h2 id="最后">最后</h2>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #12 专注和效率问题</title>
    <id>/notes/onebiz-12</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-12"/>
    <updated>2021-09-30T00:00:00+08:00</updated>
    <published>2021-09-30T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>最近的工作效率一直不行，产品迭代缓慢，需要反思一下。由于前几天在跑水果市场，这期博客也晚了几天。</p>

<p>我有写日记的习惯，每天睡前用App记录一下主要做的事情，否则过几天就忘记了，不知道时间怎么过的。我看了一下最近两周的日记，大致汇总看时间都去哪了。</p>

<table>
  <thead>
    <tr>
      <th>任务</th>
      <th>用时</th>
      <th>说明</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>写程序代码</td>
      <td>4天</td>
      <td>主要在写小程序后端接口。</td>
    </tr>
    <tr>
      <td>水果业务</td>
      <td>3天</td>
      <td>找货源，沟通，发货等。</td>
    </tr>
    <tr>
      <td>玩游戏</td>
      <td>2天</td>
      <td>有一段时间很不想写代码，所以玩了两天游戏，平时我不玩游戏的。</td>
    </tr>
    <tr>
      <td>玩抖音</td>
      <td>1天</td>
      <td>抖音通常是吃午饭看一会，刷着刷着就到晚饭了。</td>
    </tr>
    <tr>
      <td>休息</td>
      <td>2天</td>
      <td>中秋，做客。</td>
    </tr>
    <tr>
      <td>折腾抖音企业号</td>
      <td>1天</td>
      <td>白折腾，目前对我没用。</td>
    </tr>
    <tr>
      <td>换二手iPhone</td>
      <td>1天</td>
      <td>折腾了一天，花费时间偏多。</td>
    </tr>
    <tr>
      <td>抓老鼠</td>
      <td>1天</td>
      <td>家里放的水果经常被老鼠偷吃，折腾一天灭了一只老鼠，其实赶走就可以了，抓老鼠浪费时间。</td>
    </tr>
  </tbody>
</table>

<p><strong>真正干活的时间大概占一半，另一半时间在折腾各种事情。</strong>接下来要把精力聚焦在主要问题上，越专注越高效。可能会尝试用番茄工作法计时，度量更加准确。</p>

<blockquote>
  <p>你如果无法度量它，就无法管理它。
— 彼得·德鲁克</p>
</blockquote>

<blockquote>
  <p>量化管理是第一步，如果你不能量化它，你就不能理解它；如果你不能理解它，你就不能控制它；如果你不能控制它，你就不能改进它。
— H·詹姆斯·哈林顿</p>
</blockquote>

<h2 id="最后">最后</h2>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - 小程序迭代延期 + 卖猕猴桃</title>
    <id>/notes/onebiz-11</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-11"/>
    <updated>2021-09-14T00:00:00+08:00</updated>
    <published>2021-09-14T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>在一个月前，我重新设计了小程序的业务逻辑<a href="/notes/onebiz-9">（水果直销自营模式）</a>，并计划一个月完成。但是现在离完成还差很远，这次迭代延期了。</p>

<p>延期的主要原因是业务逻辑想的不够清楚，写代码建模的时候，写不下去了。当没有清晰的思路时，似乎就没了方向感，一直在想一直在改，但总是觉得不对，想不清楚然后就开始摸鱼了……</p>

<h2 id="问题和解决思路">问题和解决思路</h2>

<p>其中一个问题是，一款水果有很多种属性，比如酸甜度、口感、大小、外观，这些属性选项组合之后数量暴增，很多组合没有满足条件的商品。我花了很多时间思考怎么建模，研究怎么把属性标准化，比如酸度、甜度、硬度的量化，发现都解决不了问题。</p>

<p>之后我想到，<strong>业务逻辑的本质是满足顾客需求</strong>，让顾客选择合适的商品，也许可以做成决策流程图。</p>

<p>假设有三款商品，各有优势和劣势，顾客需要看商品详情、查看评价来判断哪款更合适。因为顾客对商品不了解，所以这个决策过程很难，商品越多，选择困难症越严重。</p>

<p>而我是比顾客更了解商品的人，我可以准备几个需求问题，帮助顾客决策，顾客回答需求问题就简单多了。思路参考 <a href="https://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html">如何选择开源许可证？</a></p>

<p><img src="/static/2021-09-14/open-source-license-diagram.png" alt="如何选择开源许可证" /></p>

<p>正好现在是猕猴桃成熟季节，我也找到了好几个产地货源，总共买了5箱猕猴桃，当饭吃…… 根据亲身体会，做成【2021猕猴桃选购指南】：
<img src="/static/2021-09-14/2021-kiwifruit-diagram.png" alt="2021猕猴桃选购指南" /></p>

<p>对比一下京东自营，非常多规格，不知道怎么选。（淘宝、拼多多也是类似的）</p>

<p><img src="/static/2021-09-14/kiwifruit-jd-screenshot.png" alt="猕猴桃京东自营" /></p>

<p><strong>你是否也有选择困难症呢？有没有3分钟内就下单付款的经历？欢迎留言。</strong></p>

<p>个人经历：印象中京东有个常购清单功能，里面是经常买的商品，下单很方便。买新东西会很纠结，明知时间宝贵，但还是要挑很久，怕买到不合适的。</p>

<h2 id="最后">最后</h2>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - The Mom Test</title>
    <id>/notes/onebiz-10</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-10"/>
    <updated>2021-08-30T00:00:00+08:00</updated>
    <published>2021-08-30T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>这段时间工作效率偏低，摸鱼时间都多于写代码时间了。这就是一鼓作气、再而衰、三而竭？
本期主要做了：水果味道口感建模、界面设计、阅读《供应链管理》。</p>

<p>下面给大家分享用户调研的一个经验。</p>

<h2 id="the-mom-test">The Mom Test</h2>

<p><a href="https://book.douban.com/subject/26320572/">《The Mom Test》</a>是做用户调研非常实用的一本书，副标题：How to talk to customers &amp; learn if your business is a good idea when everyone is lying to you.</p>

<p>之所以命名为 The Mom Test，是因为作者假设你今天向你的妈妈介绍创业想法，你妈妈会担心你难过，虽然听的云里雾里，但没有说出内心真实的想法。你的朋友也会考虑你的颜面或为了鼓励你，敷衍赞同你的主意。若你能把你妈妈内心深处的想法问出来，你才能通过 The Mom Test，从而判断正确的创业方向。（中国父母普遍厌恶风险，可能是全盘否决你的创业想法）</p>

<p>我在不同的时间、以不同的方式多次听到这个词，感受也愈发深刻。最早是在网上看了相关的文章，今年年初 Toby 推荐我听了本书作者 Rob Fitzpatrick 访谈播客 <a href="https://podcasts.apple.com/us/podcast/indie-hackers/id1206165808?i=1000468418258">#154 – The Right Way to Talk to People About Your Business with Rob Fitzpatrick, Author of The Mom Test</a>，最近在做产品过程中则不断实践和应用。</p>

<p>听完 Rob Fitzpatrick 访谈播客后（全英文，配合文字稿听的），我当时的总结如下：</p>

<ol>
  <li>尽早开始寻找目标用户，先了解对方，然后再抛出产品方案。</li>
  <li>通过聊生活，聊过往经历等事实，筛选目标用户。</li>
  <li>独立开发者尽量不要做需要太多市场推广的产品，最好是用户自己找上门。</li>
</ol>

<p>这期播客主要在讲做用户访谈，简言之怎么问潜在用户才能了解到真实需求和想法，从而判断生意有没有钱途。</p>

<p><strong>等你听完这期播客，欢迎留言说说你的想法！</strong></p>

<p><img src="/static/2021-08-30/toby-podcast.jpg" alt="toby-podcast" /></p>

<h2 id="我的实践经验">我的实践经验</h2>

<h4 id="问事实和经历">问事实和经历</h4>

<p>当我想挖掘网上买水果的需求时，我是这么问的（<a href="/notes/onebiz-3">原文</a>）：</p>

<blockquote>
  <p>你最近一次买水果是什么时候，感觉怎么样？你在网上买水果踩过坑吗？说说你踩过的坑，或是你觉得体验很好的地方？</p>
</blockquote>

<p>如果我直接问大家买水果有什么需求、痛点，很多重要的事实就会被忽略，听到的可能还是伪需求。挖掘需求是我们自己的工作，潜在用户只是提供线索。</p>

<h4 id="让用户掏钱体验">让用户掏钱体验</h4>

<p>产品还没做好，一样可以让用户参与体验，关键是：用户愿不愿意掏钱？</p>

<p>在我做小程序在线下单之前，就先用朋友圈和微信转账卖水果。如果有人掏钱了，对收到的水果也比较满意，那就可以继续做，否则在线下单就该放弃了。</p>

<h4 id="观察用户行为">观察用户行为</h4>

<p>用户行为就是最好的事实，用户需要什么、喜欢什么、不喜欢什么都能通过行为反映出来。</p>

<p>比如小程序里的水果考试助力功能，我发现大家考试失败了都不喜欢分享助力，就算分享也是分享给自己的小号。用户行为不会直接告诉我要怎么做，但告诉了我真实的想法。</p>

<h4 id="让长辈使用产品">让长辈使用产品</h4>

<p>让不熟悉互联网的长辈来使用你的产品（真 · Mom Test），可以检验产品是不是足够简单易用，对受众广泛的产品很有效。</p>

<p>前几天我设计了一个水果味道选择器，如下图：</p>

<p><img src="/static/2021-08-30/mom-test-design-1.png" alt="mon-test-design-1" /></p>

<p>初步实现了一下交互效果，让我妈使用，我在旁边观察。然后我发现我妈不知道怎么点，我就明白了，这个设计太复杂。长辈们日常使用的App，基本都没有滑块操作，短视频没有进度条，听音乐也不用进度条。</p>

<p><img src="/static/2021-08-30/mom-test-design-2.png" alt="mon-test-design-2" /></p>

<p>然后我重新设计，改成了方块按钮，这才足够简单易用。对互联网产品非常熟悉的人，往往高估了产品的简单易用性。</p>

<h2 id="最后">最后</h2>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - 水果直销自营模式</title>
    <id>/notes/onebiz-9</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-9"/>
    <updated>2021-08-16T00:00:00+08:00</updated>
    <published>2021-08-16T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<h3 id="本期概要">本期概要</h3>

<p>小程序下单支付上线之后，水果供应方面发现一些问题。由于水果的成熟期很短，采用评测方式选品太慢，等评测出来这款水果就差不多卖完了。再加上产地下雨等原因，单一的源头供应商无法长期稳定供货。</p>

<p>经过一番思考，我想出了「直销自营模式」，也分别和供应商、顾客朋友讨论，听取大家的想法和建议。这个模式会有一些风险，但还是值得去实践验证。</p>

<h3 id="直销自营模式">直销自营模式</h3>

<p><img src="/static/2021-08-16/selling-model.png" alt="直销自营模式" /></p>

<h4 id="业务流程">业务流程</h4>

<ol>
  <li>顾客在小程序选择需要的水果，以及大小、重量、表皮外观、软硬口感、酸甜味道等，系统自动估算成本和售价，顾客付款下单。</li>
  <li>平台匹配满足需求的供应商和商品，通知供应商发货，货款由平台和供应商结算，差价则为平台利润。</li>
  <li>顾客收到货，快递签收5天内，如果有售后问题，都可以获得赔偿。
    <ul>
      <li>对于坏果、烂果、蛀虫、缺斤少两等有客观标准的问题，拍照/拍视频作为证据。按个数或者重量赔偿，损坏超过一半则补发一箱。</li>
      <li>对于酸甜味道口感等偏主观的问题，可以提出与下单要求中的哪一些不符。由顾客决定赔付比例，超过50%则补发一箱。</li>
    </ul>
  </li>
  <li>赔偿由平台直接先赔付给顾客，然后平台再和供应商结算。
    <ul>
      <li>对于坏果、烂果等客观问题，平台会及时将证据提交给供应商，由供应商承担责任。</li>
      <li>对于味道口感等偏主观的问题，由平台承担责任。</li>
    </ul>
  </li>
</ol>

<h4 id="优势">优势</h4>

<ol>
  <li>对顾客来说，直接选水果需求，比看商品详情、看评价更简单省事。只要平台能保证满足需求，让我买到满意的水果，价格合适就可以下单。</li>
  <li>签收5天内都可以售后，比一般电商平台48小时内售后更友好。味道口感等问题也可以赔付，一般电商平台都不支持，味道口感又很重要，这种服务很友好。</li>
  <li>从顾客的需求出发，平台就可以找不同的供应商供货，只要保证满足顾客需求即可，供应链可以更灵活、供货会更稳定。</li>
</ol>

<h4 id="劣势">劣势</h4>

<p>提供5天的售后时长，平台就要承担更多的风险。对味道口感等偏主观问题做担保，会显著增加被薅羊毛的风险。</p>

<h4 id="后续的计划">后续的计划</h4>

<p>之前我对一些功能点想不清楚，例如：水果品类和水果商品的关系，对比评测的内容，如何展示大量的商品。换成新模式之后，这些都不需要了。快速迭代试错，让我可以少走很多的弯路。</p>

<p>接下来我计划用一个月时间，按「直销自营模式」设计和实现程序，争取早点上线！</p>

<h3 id="最后">最后</h3>

<p>从顾客的角度，你觉得这种模式怎么样呢？购买时可能还会有哪些顾虑？</p>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - 下单支付上线，找Bug送水果</title>
    <id>/notes/onebiz-8</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-8"/>
    <updated>2021-08-03T00:00:00+08:00</updated>
    <published>2021-08-03T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<h3 id="本期概要">本期概要</h3>

<p>这一期继续做下单支付功能，在7月最后一天上线了，然后忙了两天补充商品信息，完善后台管理功能。由于时间不够，商品评测功能没有做好，放到下一期了。</p>

<h3 id="找bug送水果">找Bug送水果</h3>

<p>支付下单功能做好后，我在用户群做了个找Bug送水果活动，邀请用户测试整个下单流程。活动效果还不错，大家对功能和交互提了一些建议，但有点意外的是竟然没有发现Bug :D</p>

<p>还有个意外惊喜是，活动结束后，我在凌晨 00:02 提交小程序审核，00:18 就审核通过了，微信小程序审核太给力了！因为担心下单支付不方便测试，所以我录了30秒的演示视频一起提交给审核，可能这个视频也很有帮助。</p>

<h3 id="后续的计划">后续的计划</h3>

<h4 id="小程序完善">小程序完善</h4>

<p>小程序还有不少功能需要补充完善，包括水果评测、发货/配送通知。界面交互设计也需要改进一下，再结合运营情况，逐步迭代完善。</p>

<h4 id="供应链管理">供应链管理</h4>

<p>最近在看一本书《采购与供应链管理：一个实践者的角度》，感觉非常实用，我打算边学边做，现学现用。无论做什么生意，稳定高效的供应链都至关重要，供应链管理值得学习一下。这本书作者的<a href="https://scm-blog.com/">博客</a>还提供<a href="https://scm-blog.com/atom.xml">RSS源</a>，非常不错。</p>

<p>水果供应链，按我现在的模式，可以做到京东自营的品质，并且价格还能更低一点。</p>

<p>因为水果人人皆可种植，供应渠道很多，在同一地区，用同样的方法，种同样的品种，结出的果子基本一样。再加上水果不耐储存的特点，普遍采用产地一件代发的模式，供货成本也是一样的。我自身的成本显然比大公司低很多，只要把差价定少一点，价格就有优势。</p>

<h4 id="拉新和裂变">拉新和裂变</h4>

<p>前一段时间主要在完善程序，用户数量基本没有增长。接下来要拉一些新用户体验产品，有反馈才能持续迭代改进。最近也和一些做产品运营的朋友交流，初步判断裂变是用户增长的核心，做好裂变可以把推广引流效果放大10倍以上。</p>

<p>在微信上做社交裂变有明显的优势，也有很多案例可以模仿，但是要注意微信的规则，避开「诱导分享」的地雷，但我预感还有很多坑等着我去踩。</p>

<h3 id="最后">最后</h3>

<p>如果你想体验一下这个小程序，可以<strong>微信搜索「果蔬时节」，找到Bug送水果哦！</strong> 目前小程序点购买会提示先添加客服微信再下单，可以放心添加，添加后会自动发送新客优惠给你，领取后就可以下单了。</p>

<p>商品都是明码实价，添加微信是为了方便售前售后沟通，接收顾客的反馈，提供更好的服务。如果你有什么想法、反馈和建议，一定要告诉我啊！</p>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - 小程序支付下单</title>
    <id>/notes/onebiz-7</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-7"/>
    <updated>2021-07-20T00:00:00+08:00</updated>
    <published>2021-07-20T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<h3 id="本期概要">本期概要</h3>

<p>这一期主要在做小程序支付下单功能，对接微信支付，写前端界面，后端接口，后台管理界面。</p>

<table>
  <thead>
    <tr>
      <th> </th>
      <th>模块</th>
      <th style="text-align: center">完成度</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>前端</strong></td>
      <td>商品详情</td>
      <td style="text-align: center">50%</td>
    </tr>
    <tr>
      <td> </td>
      <td>下单结算</td>
      <td style="text-align: center">95%</td>
    </tr>
    <tr>
      <td> </td>
      <td>商品评测</td>
      <td style="text-align: center">50%</td>
    </tr>
    <tr>
      <td> </td>
      <td>订单查询</td>
      <td style="text-align: center">50%</td>
    </tr>
    <tr>
      <td><strong>后端</strong></td>
      <td>商品接口</td>
      <td style="text-align: center">80%</td>
    </tr>
    <tr>
      <td> </td>
      <td>订单接口</td>
      <td style="text-align: center">95%</td>
    </tr>
    <tr>
      <td> </td>
      <td>对接微信支付</td>
      <td style="text-align: center">95%</td>
    </tr>
    <tr>
      <td> </td>
      <td>对接物流信息</td>
      <td style="text-align: center">10%</td>
    </tr>
    <tr>
      <td><strong>后台管理</strong></td>
      <td>商品管理</td>
      <td style="text-align: center">80%</td>
    </tr>
    <tr>
      <td> </td>
      <td>订单管理</td>
      <td style="text-align: center">0%</td>
    </tr>
    <tr>
      <td> </td>
      <td>微信支付配置</td>
      <td style="text-align: center">100%</td>
    </tr>
  </tbody>
</table>

<p>界面设计工作在上一期基本做好了，这些功能模块中，订单和支付是最复杂的，硬骨头先啃掉了。</p>

<h3 id="订单和支付">订单和支付</h3>

<p>由于之前做蚁阅时，对接过一个第三方支付系统，所以对订单状态机，主要流程和接口都比较熟悉了。这次对接的是微信支付，主要是接口内容和认证方式有些区别。</p>

<p>订单系统复杂的根源在于要和支付系统进行网络交互，同步支付状态。要保证在各种网络情况下都不出错，订单接口都需要做<strong>幂等设计</strong>，也就是同样的参数重复调用接口，效果和只调用一次一样。</p>

<p>在创建订单之前，一定要先生成订单号，不可以用数据库自增ID。大型系统的订单号可以参考大厂的开源方案，小系统用日期时间加随机数即可，可以将用户ID末几位放到订单号中，在遥远的将来做数据分片用。</p>

<p>我的方案是：<strong>日期 + 小时 + 用户ID末3位 + 随机数5位</strong>，生成之后再到数据库中检查一下是否存在，已存在就重新生成。</p>

<p>前端请求到订单号之后，就可以发起创建订单请求，如果请求失败可以用同样的订单号重试，后端也不会创建重复的订单，因为可以根据订单号识别重复请求，实现接口幂等性。</p>

<p>订单创建之后，请求支付系统获取支付信息，请求中同样携带订单号，支付系统会根据订单号识别重复请求，这样支付系统也不会创建重复订单。</p>

<p>支付信息会返回到前端，用于拉起支付App或者显示付款二维码。用户付款之后，再调用查单接口获取支付状态，支付完成。支付系统同时也会主动请求你的后端接口，通知支付状态，保证支付状态及时同步。</p>

<p>订单取消、退款等逆向操作，需要考虑优惠券退还和库存变更。</p>

<p>感兴趣的朋友可以学习极客时间<strong>《后端存储实战课 - 李玥》</strong>这个课程，很深入很实用。</p>

<h3 id="其他商品和订单功能">其他商品和订单功能</h3>

<p>如果按常规电商的做法，商品详情订单管理之类都很好做，不需要太多思考。但我倾向于做点差异化，把功能做的更简单实用，所以很多产品交互就需要思考，有时候想不清楚就很头大，也会花费不少时间。</p>

<p>争取下一期把剩余的功能模块全部搞定，上线内测。</p>

<h3 id="最后">最后</h3>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - 创业三个月了</title>
    <id>/notes/onebiz-6</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-6"/>
    <updated>2021-07-05T00:00:00+08:00</updated>
    <published>2021-07-05T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<h3 id="本期概要">本期概要</h3>

<ol>
  <li>税务和五险一金</li>
  <li>水果评测活动</li>
  <li>创业三个月回顾</li>
</ol>

<h3 id="税务和五险一金">税务和五险一金</h3>

<p>税务方面，使用了自记账一周多，感觉他们服务太不积极了，税务密码验证问题一直都没解决。然后我找了一下阿里云上的记账报税服务，发现一年只要360元，服务也比较积极，所以我改用 <strong>阿里云智能财税</strong> 记账报税了。拍照记账用起来都差不多，用脚投票莫怪我～</p>

<p>五险一金方面，跑腿花了两个半天时间，比较折腾。</p>

<p>第一天在社保中心办了五险中的工伤和失业险，开通了网上操作功能，但是给我的登录账号写错了，第二天又跑了一趟。</p>

<p>五险中的养老、医疗、生育划分到了医保范围，在医保中心办理，但要等这个月10号之后才能办理，材料可以先准备好。</p>

<p>公积金由于我已经在「我的社保」交了7月份的，要等8月份再办理公积金。材料都已备齐，等8月份再跑一趟交材料。</p>

<p>总的来说，新注册公司第一次办理这些，都要求到现场办理，网上办不了，很多材料都要打印盖章。<strong>跑腿之前，先打电话询问了解清楚</strong>，可以节省很多时间。</p>

<h3 id="水果评测活动">水果评测活动</h3>

<p>上期结束时提到，小程序上线了一个新功能。这个功能叫做「水果考试」，每种水果一张试卷，题目是关于这种水果的购买、吃法、储存等等知识，考试通过的用户购买相应水果可以享受优惠。</p>

<p>有句话叫「<strong>把产品卖给需要它的人</strong>」，这朴实无华的话，却是做生意的内功心法。真正需要你的产品的人，很乐意花钱购买，而不需要的人，真的是白送都不要。水果考试的一个作用，就是筛选真正需要买水果的人，另一个作用是普及知识，减少水果损坏和售后。</p>

<p>有一次，在蚁阅微信群里，大家主动聊起了我的新项目，一时兴起我决定送出5箱水果，通过抢红包形式，手气最佳的获奖。结果我发现，有人领到的水果是自己不喜欢吃的，还有人领了水果就失联了，问他好不好吃都不回复（目测是个小号）。</p>

<p>这一期我开始在水果群做水果评测活动，就要求相应的水果考试通过才能获奖，把水果送给真正需要的人。目前是每周五做活动送水果，第一次由于规则设计太复杂，效果不是很好（中间有些规则争论），但收到水果的伙伴都写了评测。第二次活动规则简化了，效果好很多，抽奖时也有一个没有做水果考试就想糊弄过去的，没让他得逞。</p>

<p>对水果感兴趣的朋友，也<a href="https://www.guoshuapp.com/">欢迎来体验</a>水果评测活动！</p>

<h3 id="创业三个月回顾">创业三个月回顾</h3>

<p>从离职创业到现在，正好三个月了，每期写博客都觉得，怎么又过了两周了！</p>

<p>这三个月来，我调整了几次方向，快速试错。虽然没赚到钱，但确实学到很多，体会到很多，有点累但乐在其中。</p>

<h4 id="最初的设想">最初的设想</h4>

<p>最初的设想是做查询当季水果的小程序，依靠广告和推广外卖优惠券盈利。不打算卖水果，因为卖水果业务太重了。目标是到618电商节，推广电商红包赚几千块钱。</p>

<p>实践之后，发现查询当季水果这个需求太弱了，很难汇集到目标用户，这条路走不通。</p>

<h4 id="淘宝客多多客">淘宝客/多多客</h4>

<p>第一次调整，是把小程序改成水果带货模式，从电商平台筛选货源，通过做淘宝客/多多客拿佣金。这样有买水果需求的用户，可以从小程序跳转到电商平台下单，我获得一点佣金。</p>

<p>实践之后，发现找稳定可靠的水果商家太难了，货源质量时好时坏，自己完全不可控。</p>

<h4 id="水果微商">水果微商</h4>

<p>第二次调整，是自己找货源，做自营水果。我开始尝试水果微商的模式，从成本/价值方面考虑，发现有一定的竞争优势。核心在于低成本获客，筛选可靠货源积累口碑，复购率高、转化率高。虽然很多水果品类不适合快递运输，但也有很多适合快递运输的。</p>

<p>目前正在朝这个方向努力，先逐渐积累可靠货源，把小程序做好，提高获客转化率、复购率。小程序还差下单购买功能，已经在开始做了，争取一个月内搞定！</p>

<h3 id="最后">最后</h3>

<blockquote>
  <p>合抱之木，生于毫末；九层之台，起于累土；千里之行，始于足下。</p>
</blockquote>

<p>与君共勉！</p>
]]>
    </content>
  </entry>

  

</feed>
