<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>AOPOD的涂鸦板</title>
    <description>aopod的涂鸦板
</description>
    <link>https://www.aopod.com/</link>
    <atom:link href="https://www.aopod.com/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Thu, 09 Jul 2026 22:41:19 +0800</pubDate>
    <lastBuildDate>Thu, 09 Jul 2026 22:41:19 +0800</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>Typin - 为 AI Coding 而生</title>
        <description>&lt;p&gt;&lt;img src=&quot;/assets/post/2026/03-25-typin-for-ai-coding.jpg&quot; alt=&quot;Typin for AI Coding&quot; /&gt;&lt;/p&gt;

&lt;p&gt;过去的 2025 年，AI 的发展真是让人惊叹。难以想象 Deepseek R1 是在 2025 的春节发布的。&lt;/p&gt;

&lt;p&gt;这一年里，我陆陆续续尝试了不少的 AI 编程工具，在 AI 的协助下写了一系列脚本、应用等，并在工作流中深度融入 AI。&lt;/p&gt;

&lt;p&gt;AI Coding，特别是 Vibe Coding，其所带来的实时反馈简直让人上瘾。我，以及一些网友都有通宵 AI Coding 的经历。&lt;/p&gt;

&lt;p&gt;在相对高强度的 AI Coding 过程中，我发现人类真是个糟糕的输出端，手+键盘的输入速度严重制约了 Coding 的速度，大大减弱了即时反馈，严重影响编码体验。&lt;/p&gt;

&lt;p&gt;语音输入则可以为我带来更快的输入速度。我尝试了 Mac OS 自带的语音输入，只可惜它输入体验简直令人罄竹难书——中文识别率一般，如果想要中英混杂在一起，则几乎无法正确识别，纠错成本甚至高于我们使用键盘输入。&lt;/p&gt;

&lt;p&gt;在使用某包过程中，发现它的语音识别正确率实在感人。相比于 Apple 聊胜于无的语音识别效果，它的效果可称得上惊艳。能够精准识别中文以及中英文混合的场景。&lt;/p&gt;

&lt;p&gt;这不就是我们想要的吗？把语音识别和天生 AI Native 的 Markdown 格式结合到一块。解决我们在 AI Coding 中最前置的痛点。&lt;/p&gt;

&lt;p&gt;于是有了 &lt;a href=&quot;https://app.aopod.com/Typin&quot;&gt;Typin&lt;/a&gt;。&lt;/p&gt;

</description>
        <pubDate>Wed, 25 Mar 2026 01:22:00 +0800</pubDate>
        <link>https://www.aopod.com/2026/03/25/typin-for-ai-coding/</link>
        <guid isPermaLink="true">https://www.aopod.com/2026/03/25/typin-for-ai-coding/</guid>
        
        <category>AI</category>
        
        <category>Creative</category>
        
        <category>App</category>
        
        <category>Coding</category>
        
        
        <category>AI</category>
        
      </item>
    
      <item>
        <title>EXTConcreteProtocol浅析</title>
        <description>&lt;p&gt;在Swift中，一个Protocol能够通过extension为特定的类型提供method, initializer, subscript, computed property的默认实现。这着实是一个很好的特性。那么在Objective-C中是否能够实现类似的效果？答案是肯定的。有若干个库都提供了自己的实现，因为大同小异，这边稍微讲一下&lt;a href=&quot;https://github.com/jspahrsummers/libextobjc&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libextobj&lt;/code&gt;&lt;/a&gt;库中的&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EXTConcreteProtocol&lt;/code&gt;的实现。&lt;/p&gt;

</description>
        <pubDate>Tue, 27 Aug 2019 22:36:00 +0800</pubDate>
        <link>https://www.aopod.com/2019/08/27/ext_concrete_protocol/</link>
        <guid isPermaLink="true">https://www.aopod.com/2019/08/27/ext_concrete_protocol/</guid>
        
        <category>Objective-C</category>
        
        <category>SourceCode</category>
        
        
        <category>iOS</category>
        
      </item>
    
      <item>
        <title>二零一八</title>
        <description>&lt;p&gt;&lt;img src=&quot;/assets/post/2018/12-31-2018.jpg&quot; alt=&quot;2018&quot; /&gt;&lt;/p&gt;

&lt;p&gt;不出意外的话，2018就要过去，迎来崭新的2019。即将过去的2018，虽然同2008仿佛只有一日之隔，相约98也依旧回荡在耳边，但它就是这么来了又要走了。&lt;/p&gt;

&lt;p&gt;这一年几乎是连轴转，经历了不少事也见识了很多社会的美好和黑暗。还好，在2018年的尾巴，有了个不错的收尾和开始。&lt;/p&gt;

</description>
        <pubDate>Mon, 31 Dec 2018 22:24:00 +0800</pubDate>
        <link>https://www.aopod.com/2018/12/31/2018/</link>
        <guid isPermaLink="true">https://www.aopod.com/2018/12/31/2018/</guid>
        
        <category>Beijing</category>
        
        
        <category>随笔</category>
        
      </item>
    
      <item>
        <title>一个iOS下的URL路由方案</title>
        <description>&lt;p&gt;所有项目在一定阶段都会遇到组件化的问题。特别是在代码量越来越大、模块越来越多的情况下，都需要一定的机制去简化页面间跳转的流程，并通过这个机制实现不同模块之间一定程度的解耦。在我看来，我需要一个有如下特点的方案：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;能够聚合为不同模块，以方便管理；&lt;/li&gt;
  &lt;li&gt;也能有灵活性允许分散至不同地方；&lt;/li&gt;
  &lt;li&gt;能够安全、方便地调用，不至于误写导致排查困难；&lt;/li&gt;
  &lt;li&gt;能够像方法一样定义、实现；&lt;/li&gt;
  &lt;li&gt;能够检测重复定义；&lt;/li&gt;
  &lt;li&gt;对编辑器友好，有代码补全、能使用注释；&lt;/li&gt;
  &lt;li&gt;特殊情况允许单独处理；&lt;/li&gt;
  &lt;li&gt;允许重定向；&lt;/li&gt;
  &lt;li&gt;增加起来直观；&lt;/li&gt;
  &lt;li&gt;私有和公共的简单权限控制；&lt;/li&gt;
  &lt;li&gt;缓存机制；&lt;/li&gt;
  &lt;li&gt;错误处理；&lt;/li&gt;
  &lt;li&gt;链式调用；&lt;/li&gt;
  &lt;li&gt;等等&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;要求还挺多……那还是自己造个轮子吧。于是催生了这个方案：&lt;em&gt;&lt;a href=&quot;https://github.com/aopod/AOPRouter&quot;&gt;AOPRouter&lt;/a&gt;&lt;/em&gt;。简单的说，它是一个基于URL形式的、利用了Objective-C Runtime特性的路由方案。&lt;/p&gt;

</description>
        <pubDate>Sun, 10 Dec 2017 22:30:00 +0800</pubDate>
        <link>https://www.aopod.com/2017/12/10/a-url-routing-solution/</link>
        <guid isPermaLink="true">https://www.aopod.com/2017/12/10/a-url-routing-solution/</guid>
        
        <category>Objective-C</category>
        
        <category>Open-Source</category>
        
        
        <category>iOS</category>
        
      </item>
    
      <item>
        <title>2017北京书市</title>
        <description>&lt;p&gt;&lt;img src=&quot;/assets/post/2017/04-23-beijing-bookfair.jpg&quot; alt=&quot;北京书市&quot; /&gt;&lt;/p&gt;

&lt;p&gt;原本是没有计划去北京书市的——一周前偶然在豆瓣上看到这个活动，被底下的评论拔了草。早上醒来阳光甚好，不想负了这明媚春光，琢磨着该去哪儿走走，突然就想起了这个活动。今天大概是今年这活动最后一天去的机会吧，那么就出去走走吧。写了几行代码，吃罢午饭便动身，目的地朝阳公园。&lt;/p&gt;

</description>
        <pubDate>Sun, 23 Apr 2017 22:00:00 +0800</pubDate>
        <link>https://www.aopod.com/2017/04/23/beijing-bookfair/</link>
        <guid isPermaLink="true">https://www.aopod.com/2017/04/23/beijing-bookfair/</guid>
        
        <category>Beijing</category>
        
        
        <category>随笔</category>
        
      </item>
    
      <item>
        <title>UITableView tableHeaderView自动隐藏</title>
        <description>&lt;p&gt;可以说UITableView是iOS开发中极为重要的一个View。其头部(Header)的展示也是非常重要。其中一种常见的需求就是Header跟随TableView滑动中间，需要根据情况将头部收起或者完全展示出来。当然常见的做法可以通过KVO监听contentOffset，或者通过UIScrollViewDelegate获取contentOffset的值后进行处理——直到我注意到UISearchBar竟然完美地实现了这个效果，于是就有了本文。&lt;/p&gt;

</description>
        <pubDate>Tue, 18 Apr 2017 22:22:22 +0800</pubDate>
        <link>https://www.aopod.com/2017/04/18/autohide-tableheaderview/</link>
        <guid isPermaLink="true">https://www.aopod.com/2017/04/18/autohide-tableheaderview/</guid>
        
        <category>Objective-C</category>
        
        <category>UITableView</category>
        
        <category>Open-Source</category>
        
        
        <category>iOS</category>
        
      </item>
    
      <item>
        <title>一个知乎Chrome扩展</title>
        <description>&lt;p&gt;知乎改版有一段时间了，新版褒贬不一。鉴于自己并不是知乎重度患者，所以对我来说虽有些瑕疵，自己动动手就好了。于是写了&lt;a href=&quot;https://github.com/aopod/aopod-zhihu-extension&quot;&gt;&lt;em&gt;一个Chrome扩展&lt;/em&gt;&lt;/a&gt;，慢慢完善。&lt;/p&gt;

</description>
        <pubDate>Sun, 05 Mar 2017 12:00:00 +0800</pubDate>
        <link>https://www.aopod.com/2017/03/05/zhihu-extension/</link>
        <guid isPermaLink="true">https://www.aopod.com/2017/03/05/zhihu-extension/</guid>
        
        <category>Javascript</category>
        
        <category>Chrome</category>
        
        <category>Extension</category>
        
        
        <category>Project</category>
        
      </item>
    
      <item>
        <title>类簇，从NSArray说起</title>
        <description>&lt;p&gt;在iOS开发中，广泛运用了类蔟(Class clusters)的设计模式。如NSNumber、NSString、NSArray等。类簇其实是对现实的一种抽象和封装，基于抽象工厂模式(Abstract Factory Pattern)。最近在读书过程中联想到一些东西，于是尝试更加深入地去了解它。&lt;/p&gt;

</description>
        <pubDate>Fri, 24 Feb 2017 00:00:00 +0800</pubDate>
        <link>https://www.aopod.com/2017/02/24/class-clusters/</link>
        <guid isPermaLink="true">https://www.aopod.com/2017/02/24/class-clusters/</guid>
        
        <category>Objective-C</category>
        
        <category>Assembly</category>
        
        <category>Low-Level</category>
        
        <category>Design-Pattern</category>
        
        
        <category>iOS</category>
        
      </item>
    
      <item>
        <title>为何调用block应先判空</title>
        <description>&lt;p&gt;得益于Objective-C的Runtime系统，对象的方法调用通过消息传递的机制进行，从而避免了很多情况下的判空操作。block也是Objective-C世界的对象，然而如果当它为空时，调用它却能导致崩溃。归根结底，其实是因为block的调用并不使用消息传递那套机制，而是通过跳转到特定的函数地址进行函数调用。我们可以先这么粗略的解释一下，然后再深入一点进行探讨。&lt;/p&gt;

</description>
        <pubDate>Wed, 16 Nov 2016 23:30:00 +0800</pubDate>
        <link>https://www.aopod.com/2016/11/16/block-empty-checking/</link>
        <guid isPermaLink="true">https://www.aopod.com/2016/11/16/block-empty-checking/</guid>
        
        <category>Objective-C</category>
        
        <category>Assembly</category>
        
        <category>Low-Level</category>
        
        
        <category>iOS</category>
        
      </item>
    
      <item>
        <title>字节序</title>
        <description>&lt;p&gt;在应用层面上，很多情况下计算机对于内存和存储器的操作都是高度抽象的，我们不必去关心其内部是如何工作的。但是总有那么些情况下，需要我们去了解其中的奥秘。在几年前开发&lt;a href=&quot;https://itunes.apple.com/cn/app/aofont-free-mian-fei-zi-ti/id910168407?mt=8&quot;&gt;aoFont&lt;/a&gt;的时候，就遇到了文件字节序(Endianness)问题，即大端序(Big endian)、小端序(Little endian)的问题。也就是需要读取的字体文件是以大端序存储的，但是iOS设备CPU使用的是小端序，这样以来直接读取出来的数据是错误的，需要对读取出来的数据进行处理。&lt;/p&gt;

</description>
        <pubDate>Sun, 25 Sep 2016 18:10:00 +0800</pubDate>
        <link>https://www.aopod.com/2016/09/25/endianness/</link>
        <guid isPermaLink="true">https://www.aopod.com/2016/09/25/endianness/</guid>
        
        <category>Low-level</category>
        
        <category>Fundamental</category>
        
        
        <category>Architecture</category>
        
      </item>
    
  </channel>
</rss>
