<?xml version="1.0" encoding="UTF-8" ?>
  <rss
    version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>编码与禅</title>
        <link>https://elliot00.com</link>
        <description>Elliot's blog feed</description>
        <atom:link href="https://elliot00.com/rss.xml" rel="self" type="application/rss+xml" />
        <language>zh</language>
        <lastBuildDate>Sat, 11 Apr 2026 07:56:00 GMT</lastBuildDate>
        <follow_challenge>
            <feedId>67437090448621568</feedId>
            <userId>67386573774055424</userId>
        </follow_challenge>
        <item>
          <title>Forgejo Runner结合Rootless Podman使用</title>
          <link>https://elliot00.com/posts/forgejo-runner-with-podman</link>
          <description>本文补充了Forgejo Runner官方文档中缺少的Podman配置细节，包括启用linger、配置podman.socket和systemd服务文件等关键步骤。</description>
          <pubDate>Wed, 25 Mar 2026 05:37:17 GMT</pubDate>
          <guid>https://elliot00.com/posts/forgejo-runner-with-podman</guid>
        </item>
<item>
          <title>接雨水</title>
          <link>https://elliot00.com/posts/trapping-rain-water</link>
          <description>这篇文章介绍了三种计算接雨水问题的方法：单调栈解法通过寻找“凹”形区域并以水平切片方式计算水量，前后缀分解通过预先计算每个位置左右两侧的最大柱子高度来确定垂直切片的水量，而相向双指针法则在优化空间复杂度的同时，通过双指针相向遍历实时更新最大高度并累加水量。</description>
          <pubDate>Sun, 01 Mar 2026 08:06:41 GMT</pubDate>
          <guid>https://elliot00.com/posts/trapping-rain-water</guid>
        </item>
<item>
          <title>单调栈</title>
          <link>https://elliot00.com/posts/monotonic-stack</link>
          <description>单调栈通过维护温度值的单调性，将寻找“下一个更高温度”的时间复杂度从 O(n²) 优化至 O(n)，其核心在于避免了重复比较并确保每个元素只入栈出栈一次。</description>
          <pubDate>Sun, 28 Dec 2025 07:52:43 GMT</pubDate>
          <guid>https://elliot00.com/posts/monotonic-stack</guid>
        </item>
<item>
          <title>相向双指针（二）</title>
          <link>https://elliot00.com/posts/opposite-direction-two-points-2</link>
          <description>本文系统讲解了相向双指针算法的基本原理和实际应用。相向双指针通过在数组或字符串的两端设置指针，让它们向中间移动来解决问题，这种模式特别适合处理对称性、反转和双向遍历的场景。</description>
          <pubDate>Sat, 06 Dec 2025 11:35:10 GMT</pubDate>
          <guid>https://elliot00.com/posts/opposite-direction-two-points-2</guid>
        </item>
<item>
          <title>相向双指针（一）</title>
          <link>https://elliot00.com/posts/opposite-direction-two-points-1</link>
          <description>本文系统讲解了相向双指针算法的基本原理和实际应用。相向双指针通过在数组或字符串的两端设置指针，让它们向中间移动来解决问题，这种模式特别适合处理对称性、反转和双向遍历的场景。</description>
          <pubDate>Sun, 23 Nov 2025 10:51:13 GMT</pubDate>
          <guid>https://elliot00.com/posts/opposite-direction-two-points-1</guid>
        </item>
<item>
          <title>完全掌握不定長滑動窗口</title>
          <link>https://elliot00.com/posts/sliding-window</link>
          <description>本文通過多個LeetCode題目實例，系統講解了不定長滑動窗口算法的應用。文章詳細展示了如何在不同場景下使用滑動窗口的兩步走套路：右指針擴展窗口並更新狀態，當條件不滿足時移動左指針收縮窗口。涵蓋了最大無重複子數組、最長無重複字符子串、刪除元素後全1子數組、最小長度子數組和乘積小於K子數組等多種情況，並提供了Python和Scheme兩種語言的代碼實現，展示了狀態記錄和指針一步到位等優化技巧。</description>
          <pubDate>Sun, 09 Nov 2025 06:06:48 GMT</pubDate>
          <guid>https://elliot00.com/posts/sliding-window</guid>
        </item>
<item>
          <title>完全掌握定長滑動窗口</title>
          <link>https://elliot00.com/posts/fixed-size-sliding-window</link>
          <description>本文通过多个LeetCode题目实例，系统讲解了滑动窗口算法的应用。文章详细展示了如何在不同场景下使用滑动窗口的三步走套路：右指针进窗口、更新答案、左指针出窗口。涵盖了定长窗口、变长思想、循环数组处理等多种情况，并提供了完整的Scheme代码实现。</description>
          <pubDate>Sat, 01 Nov 2025 09:33:30 GMT</pubDate>
          <guid>https://elliot00.com/posts/fixed-size-sliding-window</guid>
        </item>
<item>
          <title>探索Emacs字體設定</title>
          <link>https://elliot00.com/posts/emacs-font-detail</link>
          <description>这篇文章分享了作者在 Emacs 中配置 Maple Mono NF CN 等宽字体时发现的误区与解决方案，详解了 set-face-attribute 的限制与 Fontset 的正确用法，旨在帮助读者实现更灵活、无卡顿的中英文字体配置。</description>
          <pubDate>Sun, 21 Sep 2025 10:06:23 GMT</pubDate>
          <guid>https://elliot00.com/posts/emacs-font-detail</guid>
        </item>
<item>
          <title>Emacs字體配置</title>
          <link>https://elliot00.com/posts/emacs-font-setup</link>
          <description>本文介紹了在 Emacs 中配置不同字體的多種方案，以滿足程序員和中文用戶的特定需求。</description>
          <pubDate>Sun, 24 Aug 2025 14:01:48 GMT</pubDate>
          <guid>https://elliot00.com/posts/emacs-font-setup</guid>
        </item>
<item>
          <title>解释器与CPS变换</title>
          <link>https://elliot00.com/posts/interpreter-with-cps</link>
          <description>本文从乘积计算的简单问题出发，深入探讨了Racket中call/cc的实现原理和应用，揭示了续体编程的强大能力与控制流本质。</description>
          <pubDate>Sat, 24 May 2025 13:58:03 GMT</pubDate>
          <guid>https://elliot00.com/posts/interpreter-with-cps</guid>
        </item>
<item>
          <title>实现简易Lisp解释器</title>
          <link>https://elliot00.com/posts/write-a-mini-lisp-interpreter</link>
          <description>用Racket实现简易Lisp解释器：从eval到递归阶乘计算。</description>
          <pubDate>Tue, 29 Apr 2025 07:16:23 GMT</pubDate>
          <guid>https://elliot00.com/posts/write-a-mini-lisp-interpreter</guid>
        </item>
<item>
          <title>TypeScript小技巧（二）</title>
          <link>https://elliot00.com/posts/typescript-using-and-satisfies</link>
          <description>本文介绍了TypeScript中引入的using关键字和satisfies操作符的使用：using简化了资源管理，自动调用[Symbol.dispose]方法释放资源，而satisfies则用于确保对象符合特定类型，同时限制对象属性的扩展。</description>
          <pubDate>Sun, 09 Mar 2025 08:29:50 GMT</pubDate>
          <guid>https://elliot00.com/posts/typescript-using-and-satisfies</guid>
        </item>
<item>
          <title>Android开发拾遗：回调转协程</title>
          <link>https://elliot00.com/posts/kotlin-callback-to-coroutine</link>
          <description>本文介绍了如何使用Kotlin的suspendCancellableCoroutine将基于回调的Java SDK接口转换为协程风格的同步代码写法，以解决多层依赖关系下的回调地狱问题。</description>
          <pubDate>Wed, 26 Feb 2025 08:59:44 GMT</pubDate>
          <guid>https://elliot00.com/posts/kotlin-callback-to-coroutine</guid>
        </item>
<item>
          <title>CPS变换浅析</title>
          <link>https://elliot00.com/posts/a-gentle-introduction-to-cps</link>
          <description>本文介绍了CPS（Continuation-passing style）的基本概念，通过具体的代码示例解释了什么是continuation以及如何进行CPS变换。文章使用阶乘和斐波那契数列的实现来展示CPS变换的过程，并探讨了CPS变换在控制程序执行流程方面的作用。</description>
          <pubDate>Sun, 23 Feb 2025 06:25:50 GMT</pubDate>
          <guid>https://elliot00.com/posts/a-gentle-introduction-to-cps</guid>
        </item>
<item>
          <title>反叛、客体与自我的迷思——《地下室手记》读后感</title>
          <link>https://elliot00.com/posts/notes-from-the-underground-reflections</link>
          <description>本文通过细致解构《地下室手记》中的多个主题，探讨了地下室人对自由意志、自我认知与他者凝视的复杂体验。文章首先质疑理性化社会中“一切皆可公式化”的现象，指出当理性凌驾于一切时，个体的主观能动性如何被剥夺；随后，通过对自我客体化、他者凝视及精神自虐等现象的剖析，展示了地下室人在不断被外界标签化的同时，内心反抗与自我救赎的矛盾冲突；而丽莎的出现，更激发了他对成为拯救者的弥赛亚梦的幻想，折射出一种在绝望中求生的悲剧情怀。</description>
          <pubDate>Sun, 09 Feb 2025 10:49:46 GMT</pubDate>
          <guid>https://elliot00.com/posts/notes-from-the-underground-reflections</guid>
        </item>
<item>
          <title>2024</title>
          <link>https://elliot00.com/posts/review-2024</link>
          <description>2024年度总结</description>
          <pubDate>Sun, 29 Dec 2024 07:14:22 GMT</pubDate>
          <guid>https://elliot00.com/posts/review-2024</guid>
        </item>
<item>
          <title>初中生也能懂的机器学习（一）</title>
          <link>https://elliot00.com/posts/ml-regression-note</link>
          <description>本文旨在为对机器学习感兴趣的初学者提供一份详细的线性回归入门教程。文章从基础概念入手，逐步深入，并结合实际案例进行讲解。通过阅读本文，读者可以了解线性回归的原理、实现步骤，并掌握基本的Python编程技巧。</description>
          <pubDate>Sun, 17 Nov 2024 08:54:22 GMT</pubDate>
          <guid>https://elliot00.com/posts/ml-regression-note</guid>
        </item>
<item>
          <title>尝试用Vim充当kitty的scrollback pager</title>
          <link>https://elliot00.com/posts/vim-as-kitty-pager</link>
          <description>这篇文章介绍了如何将kitty终端模拟器与Vim结合使用，以实现更强大的搜索、跳转和复制功能，并提供了解决相关问题的方法。</description>
          <pubDate>Wed, 09 Oct 2024 03:44:34 GMT</pubDate>
          <guid>https://elliot00.com/posts/vim-as-kitty-pager</guid>
        </item>
<item>
          <title>在NextJS14中集成twikoo评论系统</title>
          <link>https://elliot00.com/posts/next-with-twikoo</link>
          <description>本文介绍了在NextJS中集成Twikoo的方法。此外，提到NextJS在使用notFound API时可能存在的bug及解决方案。</description>
          <pubDate>Sun, 22 Sep 2024 07:05:50 GMT</pubDate>
          <guid>https://elliot00.com/posts/next-with-twikoo</guid>
        </item>
<item>
          <title>在NextJS中为rehype代码块添加复制按钮</title>
          <link>https://elliot00.com/posts/next-rehype-copy-button</link>
          <description>本文介绍了作者在博客中使用rehype-pretty-code和shiki来美化代码块时，如何通过React Server Components和自定义MDX组件，解决在NextJS中使用带复制按钮的代码块时遇到的问题，并在不同的格式（MDX和Org-mode）下实现了功能的具体方法。</description>
          <pubDate>Fri, 13 Sep 2024 05:57:48 GMT</pubDate>
          <guid>https://elliot00.com/posts/next-rehype-copy-button</guid>
        </item>
<item>
          <title>开发docube问题记录</title>
          <link>https://elliot00.com/posts/docube-dev-note</link>
          <description>本文介绍了作者将博客内容格式从MDX迁移到Org-mode的过程中，开发了一个名为Docube的JavaScript/TypeScript库，并在文中详细描述了库的设计理念、实现细节以及在发布npm包时遇到的问题和解决方法。</description>
          <pubDate>Sun, 01 Sep 2024 07:10:07 GMT</pubDate>
          <guid>https://elliot00.com/posts/docube-dev-note</guid>
        </item>
<item>
          <title>Android开发拾遗：DataStore与JSON结合</title>
          <link>https://elliot00.com/posts/android-json-data-store</link>
          <description>本文探讨了如何在Android应用中使用JSON格式的DataStore存储配置数据，并提供了详细的代码示例和步骤来实现这一点。</description>
          <pubDate>Mon, 15 Jul 2024 05:05:42 GMT</pubDate>
          <guid>https://elliot00.com/posts/android-json-data-store</guid>
        </item>
<item>
          <title>Android开发拾遗：如何使用Proto DataStore</title>
          <link>https://elliot00.com/posts/android-proto-data-store</link>
          <description>本文介绍了如何在Android中使用Proto DataStore来持久化复杂的用户数据，包括schema定义、Gradle配置和代码实现。</description>
          <pubDate>Tue, 09 Jul 2024 03:51:43 GMT</pubDate>
          <guid>https://elliot00.com/posts/android-proto-data-store</guid>
        </item>
<item>
          <title>Android开发拾遗：对onTerminate的误解</title>
          <link>https://elliot00.com/posts/android-on-terminate</link>
          <description>在Android应用中，通过继承Timber的Tree类实现日志记录功能，在Application的onCreate方法中启动日志记录，尽管onTerminate在真机上不会被调用，可以使用Activity的onSaveInstanceState方法保存和恢复临时数据。</description>
          <pubDate>Wed, 26 Jun 2024 03:12:01 GMT</pubDate>
          <guid>https://elliot00.com/posts/android-on-terminate</guid>
        </item>
<item>
          <title>Android开发拾遗：如何减少重组</title>
          <link>https://elliot00.com/posts/android-compose-stability</link>
          <description>在Android代码中，常见到一些数据类标有@Stable或@Immutable注解，这些注解与Jetpack Compose的性能优化相关，本文探讨了它们的作用和可能的解决方案。</description>
          <pubDate>Mon, 24 Jun 2024 08:15:25 GMT</pubDate>
          <guid>https://elliot00.com/posts/android-compose-stability</guid>
        </item>
<item>
          <title>Android开发拾遗：MVVM与MVI</title>
          <link>https://elliot00.com/posts/android-mvi</link>
          <description>本文介绍了复杂项目中代码拆分的重要性，以 ASP.NET 的 MVC 模式为例，探讨如何解耦 UI 和业务逻辑。重点讨论了 Android 开发中的 MVVM 和 MVI 模式，通过对比说明它们在状态管理和 UI 交互上的不同，阐明了各自的优缺点及适用场景。</description>
          <pubDate>Tue, 04 Jun 2024 07:23:12 GMT</pubDate>
          <guid>https://elliot00.com/posts/android-mvi</guid>
        </item>
<item>
          <title>Android开发拾遗：异步与协程</title>
          <link>https://elliot00.com/posts/kotlin-async</link>
          <description>这篇文章主要介绍了Kotlin协程的基本用法，包括语法、结构化并发、异步流、生命周期管理等方面。</description>
          <pubDate>Mon, 06 May 2024 07:14:27 GMT</pubDate>
          <guid>https://elliot00.com/posts/kotlin-async</guid>
        </item>
<item>
          <title>给tauri做条件编译实现真全平台</title>
          <link>https://elliot00.com/posts/tauri-conditional-compile</link>
          <description>本文讲述了作者使用 unplugin-preprocessor-directives 插件解决了 Tauri 应用在特定硬件上无法启动以及跨平台打包问题。</description>
          <pubDate>Mon, 15 Apr 2024 03:03:00 GMT</pubDate>
          <guid>https://elliot00.com/posts/tauri-conditional-compile</guid>
        </item>
<item>
          <title>软件开发之道——聊聊UNIX哲学</title>
          <link>https://elliot00.com/posts/talk-about-unix-philosophy</link>
          <description>本文从多个角度探讨了UNIX哲学在现代软件开发中的适用性。首先，文章分析了三条UNIX哲学的核心原则，并结合实例阐述了它们的具体应用。其次，文章探讨了在现代软件开发中，如何理解和应用这些原则。最后，文章分析了时代因素对UNIX哲学适用性的影响，并提出了一些建议。</description>
          <pubDate>Fri, 22 Mar 2024 14:05:55 GMT</pubDate>
          <guid>https://elliot00.com/posts/talk-about-unix-philosophy</guid>
        </item>
<item>
          <title>通过Org做公众号排版</title>
          <link>https://elliot00.com/posts/org-to-mp</link>
          <description>本文介绍了一个将Org格式文本转换为微信公众号富文本格式的工具。该工具可以帮助用户在编辑Org格式文本后，一键复制到公众号后台发布。</description>
          <pubDate>Fri, 08 Mar 2024 08:51:26 GMT</pubDate>
          <guid>https://elliot00.com/posts/org-to-mp</guid>
        </item>
<item>
          <title>使用Rust实现Wayland输入法协议</title>
          <link>https://elliot00.com/posts/rust-wayland-input-method</link>
          <description>本文介绍了如何使用Rust语言实现Wayland输入法协议，包括输入法基础、Wayland协议、Rust实现等内容。该示例可帮助开发者理解Wayland输入法机制并推动相关生态发展。</description>
          <pubDate>Sat, 02 Mar 2024 15:04:10 GMT</pubDate>
          <guid>https://elliot00.com/posts/rust-wayland-input-method</guid>
        </item>
<item>
          <title>全键盘工作流新利器——kitty</title>
          <link>https://elliot00.com/posts/terminal-emulator-kitty</link>
          <description>kitty是一个高度可定制的终端模拟器。它支持多字体显示不同语言,窗口水平/垂直分屏,标签页切换,SSH连接复用等功能。kitty最大的特点是其插件系统“kittens”,可以扩展更多功能,如显示图像、快速打开文件等。相比其他现代终端模拟器,kitty配置灵活,扩展性强。总体来说,这是一款强大且可定制的终端工具。</description>
          <pubDate>Mon, 26 Feb 2024 07:46:56 GMT</pubDate>
          <guid>https://elliot00.com/posts/terminal-emulator-kitty</guid>
        </item>
<item>
          <title>Emacs配置tree-sitter</title>
          <link>https://elliot00.com/posts/emacs-tree-sitter</link>
          <description>这篇文章介绍了如何使用 tree-sitter 为 Emacs 提供对多种编程语言的语法高亮和结构化编辑支持。tree-sitter 是一个解析器生成工具和增量解析库，它可以生成特定编程语言的解析器，并实时分析代码文件，构建一个详细的语法树。该文章提供了详细的配置步骤，包括添加语法库的源码仓库地址、修改语言模式映射等，并介绍了如何安装 grammar 动态库。</description>
          <pubDate>Sat, 23 Dec 2023 08:59:43 GMT</pubDate>
          <guid>https://elliot00.com/posts/emacs-tree-sitter</guid>
        </item>
<item>
          <title>自制输入法：拼音输入法与HMM</title>
          <link>https://elliot00.com/posts/input-method-hmm</link>
          <description>文章主要介绍了如何使用隐马尔可夫模型（HMM）来实现一个简单的中文拼音输入法。1. 首先需要收集汉字字库和中文语料库，并对语料库进行预处理，如将句子分割成单词、给每个字标注拼音等。2. 然后，使用语料库训练HMM模型，训练过程包括计算初始概率、转移概率和输出概率。3. 最后，在输入拼音序列时，使用HMM模型进行解码，输出最可能对应的汉字序列。文章还讨论了在实践中使用HMM模型时遇到的问题，如语料处理问题、真实世界的输入、与时俱进、计算问题等，并提出了解决这些问题的方案。</description>
          <pubDate>Thu, 13 Apr 2023 08:09:39 GMT</pubDate>
          <guid>https://elliot00.com/posts/input-method-hmm</guid>
        </item>
<item>
          <title>使用Nix Flake构建可重现系统</title>
          <link>https://elliot00.com/posts/reproducible-system-with-nix-flake</link>
          <description>这篇文章讨论了 NixOS 的可复现性问题。NixOS 虽然标榜自己是可复现的，但实际上却受到  nix channel  的影响，使得相同的配置在不同的环境下可能会产生不同的结果。为了解决这个问题，Nix 引入了 flakes 机制，允许用户显式声明依赖的版本，从而保证可复现性。文章还介绍了如何将 NixOS 配置转换为 flake 版本，以及如何在 flake 中定义多个系统配置。最后，文章还讨论了如何使用 flake 来创建可复现的开发环境。</description>
          <pubDate>Sat, 08 Apr 2023 12:24:49 GMT</pubDate>
          <guid>https://elliot00.com/posts/reproducible-system-with-nix-flake</guid>
        </item>
<item>
          <title>优雅地使用Git</title>
          <link>https://elliot00.com/posts/use-git-gracefully</link>
          <description>这篇文章内容与Git的使用相关，包括了提交信息的规范，如何保持清晰的提交历史和修复不规范的提交。文章还介绍了用于协助管理Git的工具和技术，如Git hooks、Git子命令、Git别名、EditorConfig等。最后，文章还提供了日志查询、跟踪空文件夹、处理大文件和克隆仓库等方面的技巧。</description>
          <pubDate>Sun, 11 Sep 2022 04:42:19 GMT</pubDate>
          <guid>https://elliot00.com/posts/use-git-gracefully</guid>
        </item>
<item>
          <title>关于TypeScript结合React开发的一些技巧</title>
          <link>https://elliot00.com/posts/typescript-react-tips</link>
          <description>这篇文章介绍了作者在前端项目中使用 TypeScript 与 React 的一些经验。文章首先推荐使用 TypeScript 的自动推断功能，这样可以减少一些类型标注的工作。然后介绍了一些 TypeScript 的工具类型，如 Omit 和 Pick，这些工具类型可以帮助我们重用类型定义，避免重复工作。接着，文章讨论了在 TypeScript 中引入不明确性的问题，并推荐使用 declare 全局声明和声明合并来解决这个问题。此外，文章还介绍了 useRef 的类型，以及如何使用类型收窄和条件渲染来实现更简洁的代码。最后，文章给出了如何解决项目中大量的条件渲染问题的一些建议，例如使用组件工厂或组合。</description>
          <pubDate>Sat, 19 Mar 2022 11:15:36 GMT</pubDate>
          <guid>https://elliot00.com/posts/typescript-react-tips</guid>
        </item>
<item>
          <title>Nix入坑笔记</title>
          <link>https://elliot00.com/posts/nix-note</link>
          <description>这篇文章介绍了一套解决软件包管理和环境配置问题的工具： Nix 。Nix是一系列工具的合集，通过一种纯函数式的方式来管理软件包。Nix提供了一个函数式语言来描述软件包，每一个软件包就是Nix语言中的一个表达式。Nix工具集中，`nix-env`命令用于安装、升级或删除包，它和其他Linux发行版的包管理工具或Mac上的homebrew作用类似。NixOS是一个基于Nix的Linux发行版，整个NixOS就是一个声明式的系统，只要备份好configuration，就可以随时恢复原样，拷贝配置文件就可以在新设备生成一个一样的系统。</description>
          <pubDate>Sun, 26 Dec 2021 04:23:01 GMT</pubDate>
          <guid>https://elliot00.com/posts/nix-note</guid>
        </item>
<item>
          <title>Django+React全栈开发：文章详情</title>
          <link>https://elliot00.com/posts/react-django-article-detail</link>
          <description>这篇文章讨论了构建一个博客应用时遇到的身份验证问题和组件交互的解决方案。它首先介绍了修改一个组件以从后端获取文章正文导致的身份验证问题，并提供了解决方法。接下来，文章介绍了 React Hooks 的概念，以及如何使用 Hooks 实现类似于类组件生命周期的功能。它还讨论了使用 Hooks 时的一些注意事项，例如 Hooks 只能出现在函数式组件或自定义 Hook 中，并且必须在最顶层。最后，文章给出了一个练习，让读者尝试在页面上呈现文章标题、创建日期等其他信息。</description>
          <pubDate>Sun, 31 Oct 2021 13:30:48 GMT</pubDate>
          <guid>https://elliot00.com/posts/react-django-article-detail</guid>
        </item>
<item>
          <title>百宝箱：数字人生</title>
          <link>https://elliot00.com/posts/digital-life</link>
          <description>本文探讨了一个数字化人生的框架，囊括了笔记记录、知识管理、时间管理等方面。作者使用 TiddlyWiki 搭建了个人公开 wiki，满足随时可用、多终端同步、方便地 Review 等需求。而 Logseq 作为私人笔记工具，实现了双向链接和知识图谱。在知识管理上，作者结合 OKR 和 PARA 两个方法，将长期目标与关键结果转化为具体项目，并通过 Logseq 的查询功能以及自定义 CSS 实现 GTD 四象限面板。时间管理方面，作者利用 Logseq 的 Schedule 和 Deadline 特性来安排每日待办事项。文章结尾强调了构建“第二大脑”需要“第一大脑”的帮助，回归思考与检索，将碎片知识转化为有用的信息。</description>
          <pubDate>Sun, 15 Aug 2021 07:46:19 GMT</pubDate>
          <guid>https://elliot00.com/posts/digital-life</guid>
        </item>
<item>
          <title>Django+React全栈开发：JWT</title>
          <link>https://elliot00.com/posts/react-django-jwt</link>
          <description>这篇教程为如何在 Django 后端实现 JWT 认证提供了一个示例。它讨论了 HTTP 无状态的含义以及 JWT 是什么。然后，它解释了如何创建新的 Django 应用程序并设置用于身份验证的视图。接下来，它描述了如何使用 python-jose 库来生成和验证 JWT 令牌。它还解释了如何将 JWTAuthentication 类用作自定义认证类，以便在需要认证的视图中使用它。最后，它展示了发送 HTTP 请求的示例，以使用有效的 JWT 令牌验证用户。总的来说，这篇教程提供了有关如何在 Django 后端中实现 JWT 认证的全面概述，包括所有必要的步骤和代码示例。</description>
          <pubDate>Mon, 05 Jul 2021 15:03:21 GMT</pubDate>
          <guid>https://elliot00.com/posts/react-django-jwt</guid>
        </item>
<item>
          <title>Dive into Rust: Object Oriented</title>
          <link>https://elliot00.com/posts/rust-object-oriented</link>
          <description>文章探讨了什么是面向对象编程，以及如何在Rust中实现面向对象编程。文章认为，面向对象编程不等于封装、继承、多态，继承和多态甚至不能算并列的概念。Rust没有继承，但可以通过trait来抽象共享行为，实现多态。文章还讨论了鸭子类型，以及如何以Rust的方式实现鸭子类型。文章最后总结了Rust中泛型与trait的详细用法，读者可以参考官方文档或其他资料。</description>
          <pubDate>Sun, 30 May 2021 12:47:27 GMT</pubDate>
          <guid>https://elliot00.com/posts/rust-object-oriented</guid>
        </item>
<item>
          <title>Dive into Rust: Ownership, Borrowing, Lifetime</title>
          <link>https://elliot00.com/posts/dive-into-rust-ownership-borrowing-lifetime</link>
          <description>文章介绍了内存安全问题，以及Rust通过所有权、借用和生存期三个机制来保证内存安全的做法。文章还从Python程序员的视角，对Rust的内存安全机制进行了分析和理解。文章认为，Rust的内存安全机制是一种独特的机制，对于熟悉Python这类语言的程序员初次接触会感到比较陌生。</description>
          <pubDate>Sun, 30 May 2021 12:46:00 GMT</pubDate>
          <guid>https://elliot00.com/posts/dive-into-rust-ownership-borrowing-lifetime</guid>
        </item>
<item>
          <title>TypeScript实现互斥参数</title>
          <link>https://elliot00.com/posts/typescript-mutex-param</link>
          <description>作者想通过 typeScript 的类型定义来限制一个函数的两个参数只能取其一。但是按照 TypeScript 的类型系统，直接将参数定义为两个 interface 的联合类型是没有用的，因为联合类型允许同时存在两个类型的值。而 never 类型可以表示一个只会抛出异常或者内部死循环的函数的返回值，并且任何其他类型的值都不能赋值给这个类型的变量，作者利用这个性质来限制了参数的取值范围，从而保证用户只会使用两个互斥属性中的一个。</description>
          <pubDate>Wed, 28 Apr 2021 13:59:47 GMT</pubDate>
          <guid>https://elliot00.com/posts/typescript-mutex-param</guid>
        </item>
<item>
          <title>探究Python类型注解</title>
          <link>https://elliot00.com/posts/python-type-hint</link>
          <description>这篇文章介绍了作者在 Python 中造轮子的经历，以及过程中遇到的问题和解决办法。作者尝试使用 Prisma 作为灵感，在 Python 中创建了一个 ORM 库。接着讨论了 Python 中的类型注解，以及使用 dataclass 和 TypedDict 来定义类型。最后，作者提到了一种尝试使用模式匹配来限定可变参数类型的方法，但由于该方法目前在 Python 中还没有实现，因此无法使用。</description>
          <pubDate>Fri, 23 Apr 2021 14:15:47 GMT</pubDate>
          <guid>https://elliot00.com/posts/python-type-hint</guid>
        </item>
<item>
          <title>Django+React全栈开发：关联用户</title>
          <link>https://elliot00.com/posts/react-django-user</link>
          <description>这篇文章介绍了如何在Django REST Framework中设置用户权限。首先，它解释了如何将用户与文章关联，并创建了一个自定义的权限类 IsAdminOrReadOnly ，该类允许管理员创建、删除和修改文章，而其他用户只能读取文章。然后，它展示了如何将该权限类添加到视图类中，并解释了如何使用 perform_create 方法和 read_only_fields 属性来确保只有管理员才能创建文章，并且作者字段是只读的。最后，它演示了如何使用HTTPie工具测试API的正确性。</description>
          <pubDate>Sun, 18 Apr 2021 07:39:42 GMT</pubDate>
          <guid>https://elliot00.com/posts/react-django-user</guid>
        </item>
<item>
          <title>Django+React全栈开发：自定义验证与授权</title>
          <link>https://elliot00.com/posts/react-django-custom-auth</link>
          <description>这篇文章主要讲了如何自定义 Django 的用户模型、序列化器、验证、权限和限流。1. 自定义用户模型：可以使用继承 AbstractUser 或 AbstractBaseUser 来扩展原生 User 模型，并添加额外的字段和方法。2. 序列化器：定义了如何将模型数据转换成可用于 API 请求和响应的格式。3. 验证：可以使用 TokenAuthentication 或 BasicAuthentication 进行验证，并设置 Token 过期时间。4. 权限：可以使用 AdministratorLevel 这样的自定义权限类来限制不同用户对 API 的访问。5. 限流：可以使用 UserRateThrottle 来限制用户请求的频率。</description>
          <pubDate>Sat, 17 Apr 2021 12:04:51 GMT</pubDate>
          <guid>https://elliot00.com/posts/react-django-custom-auth</guid>
        </item>
<item>
          <title>Django+React全栈开发：路由</title>
          <link>https://elliot00.com/posts/react-django-route</link>
          <description>这篇文章主要介绍了如何使用 react-router-dom 来搭建一个简单的单页应用（SPA）。首先介绍了 react-router-dom 的基本概念和用法，然后通过一个例子演示了如何使用 react-router-dom 来构建一个包含首页、详情页和关于页的SPA。最后还提供了一个练习题，让读者尝试重写文章详情组件以显示真正的文章详情。</description>
          <pubDate>Sat, 17 Apr 2021 06:42:43 GMT</pubDate>
          <guid>https://elliot00.com/posts/react-django-route</guid>
        </item>
<item>
          <title>Django+React全栈开发：界面优化</title>
          <link>https://elliot00.com/posts/react-django-ui-optimize</link>
          <description>这篇文章主要讲解了前端开发中的一些操作，包括时间处理、条件渲染、样式添加等内容。具体包括：使用dayjs库处理时间，实现显示文章创建时间和更新时间；使用条件渲染，在加载数据完成前显示“加载中”字样；使用CSS文件和内联样式为组件添加样式；使用原子化CSS和TailwindCSS框架来美化页面。这些操作对于前端开发人员来说是非常重要的，可以帮助他们快速构建出美观且实用的用户界面。</description>
          <pubDate>Sun, 11 Apr 2021 09:46:05 GMT</pubDate>
          <guid>https://elliot00.com/posts/react-django-ui-optimize</guid>
        </item>
<item>
          <title>Django+React全栈开发：视图</title>
          <link>https://elliot00.com/posts/react-django-view-layer</link>
          <description>这篇文章介绍了如何使用Django REST framework来构建一个API。文章首先介绍了基本视图的写法，然后介绍了API view和类视图的写法，最后介绍了viewsets的写法。文章还介绍了如何使用官方提供的路由系统routers与viewsets搭配使用。</description>
          <pubDate>Sat, 10 Apr 2021 10:16:09 GMT</pubDate>
          <guid>https://elliot00.com/posts/react-django-view-layer</guid>
        </item>
<item>
          <title>Django+React全栈开发：前置知识</title>
          <link>https://elliot00.com/posts/react-django-basis</link>
          <description>这篇文章介绍了在互联网时代中常见的程序类型，如C/S和B/S架构，以及Web服务器和Web框架的概念。还介绍了MVC模式，Django的MTV模式，以及前端与后端的概念。文章强调了学习时多造轮子的重要性，但在实际生产生活中则尽量应用成熟的已有的应用。</description>
          <pubDate>Sat, 10 Apr 2021 09:12:03 GMT</pubDate>
          <guid>https://elliot00.com/posts/react-django-basis</guid>
        </item>
<item>
          <title>Django+React全栈开发：序列化器</title>
          <link>https://elliot00.com/posts/react-django-serializer</link>
          <description>文章介绍了 REST framework 的使用方法，首先是安装 REST framework 并将其添加到 Django 项目的设置中。然后介绍了如何扩展模型，包括创建 Article 模型以及在其中定义字段。之后，文章介绍了如何创建序列化器来对模型进行序列化和反序列化，包括手动创建序列化器和使用 ModelSerializer。最后，文章介绍了如何在交互模式下使用序列化器。</description>
          <pubDate>Sat, 10 Apr 2021 08:58:38 GMT</pubDate>
          <guid>https://elliot00.com/posts/react-django-serializer</guid>
        </item>
<item>
          <title>Django+React全栈开发：MTV初试</title>
          <link>https://elliot00.com/posts/react-django-mtv</link>
          <description>这篇文章讲解了如何在 Django 中创建一个简单的博客应用程序。它首先介绍了环境配置，包括操作系统、Python 版本、Django 版本、Node 版本和编辑器。然后，它指导读者下载 Django 并创建项目和第一个 Django app。接着，它介绍了如何编写模型、视图和模板，并演示了如何使用 Django 的后台管理功能来管理文章。最后，它提供了练习建议，鼓励读者去官网跟着官方给的小教程敲一遍代码。</description>
          <pubDate>Sat, 10 Apr 2021 08:47:40 GMT</pubDate>
          <guid>https://elliot00.com/posts/react-django-mtv</guid>
        </item>
<item>
          <title>Django+React全栈开发：前言</title>
          <link>https://elliot00.com/posts/react-django-preface</link>
          <description>这篇文章主要介绍了如何使用Django和React进行开发。它首先列出了开发环境，包括后端的后端Django、DRF，前端的React、NextJS、TailwindCSS，以及操作系统Manjaro Linux。然后，它介绍了阅读本系列文章需要具备的前置基础，例如Python和JavaScript语法基础，以及一台可用的电脑。最后，它介绍了该系列文章的许可协议和问题交流方式。</description>
          <pubDate>Sat, 10 Apr 2021 05:37:31 GMT</pubDate>
          <guid>https://elliot00.com/posts/react-django-preface</guid>
        </item>
<item>
          <title>近期关于哲学的一些感想</title>
          <link>https://elliot00.com/posts/thinking-philosophy</link>
          <description>这篇文章探讨了哲学的本质及其与现实生活的关系。作者认为，哲学是对人生的系统性反思，并不是远离现实生活的空谈。哲学家对名、实关系、矛盾双方相互转化的思考，都反映了他们对现实世界的深刻洞察。虽然哲学本身并不创造任何东西，但它能给我们一种看待世界的新视角，帮助我们换一种角度思考，从而在现实生活中获得积极有用的启示。</description>
          <pubDate>Sat, 20 Mar 2021 08:58:06 GMT</pubDate>
          <guid>https://elliot00.com/posts/thinking-philosophy</guid>
        </item>
<item>
          <title>通过WebAssembly实现插件机制</title>
          <link>https://elliot00.com/posts/rust-plugin-with-webassembly</link>
          <description>这篇文章分为三个部分，分别介绍了插件、WebAssembly以及总结。在第一部分，作者介绍了插件的原理和实现方法，并讨论了在Rust中动态加载插件的可能性。在第二部分，作者介绍了WebAssembly的概念、原理和实现方法，并演示了如何在Rust中调用WebAssembly编写的函数。在第三部分，作者总结了WebAssembly的前景。</description>
          <pubDate>Mon, 22 Feb 2021 14:55:33 GMT</pubDate>
          <guid>https://elliot00.com/posts/rust-plugin-with-webassembly</guid>
        </item>
<item>
          <title>谈谈目的与手段</title>
          <link>https://elliot00.com/posts/purpose-and-means</link>
          <description>这篇文章探讨了人们在选择工具时容易陷入“工具至上”的误区，忘记了工具是用来辅助人完成工作的。作者以程序员圈子中对最佳语言、最佳编辑器的争论为例，指出人们往往把追求工具的目的（提高生产力、简洁性等）当成了目的本身。作者还提到，自己在下围棋时也曾陷入类似的误区，原本下棋只是为了享受计算中纯粹的乐趣，最后却常常因为输棋而陷入苦恼，想要提高棋力，又强迫自己下下去，最终却丢失了想要的乐趣。作者认为，我们需要多多思考，辨别手段与目的，避免在追求工具的路上迷失自己。</description>
          <pubDate>Fri, 12 Feb 2021 14:39:49 GMT</pubDate>
          <guid>https://elliot00.com/posts/purpose-and-means</guid>
        </item>
<item>
          <title>百宝箱：Vim进阶之路</title>
          <link>https://elliot00.com/posts/toolchain-vim</link>
          <description>这篇文章描述了作者学习 Vim 编辑器的经历，总结了三个阶段的使用经验。第一阶段，作者习惯了 Vim 的编辑方式，但仍然有鼠标思维，导致效率不高。第二阶段，作者开始记忆更多的快捷键和技巧，提高了对 Vim 的熟练程度，减少了鼠标思维。第三阶段，作者意识到高效使用 Vim 需要思维方式的转变，需要思考如何更少的按键。文章还举了一些例子来说明如何通过思考来提高编辑效率。最后，作者总结说，虽然 Vim 是一个强大的编辑器，但并不推荐编程新手使用，因为新手需要一个功能齐全的 IDE 来提高效率。</description>
          <pubDate>Mon, 18 Jan 2021 15:39:43 GMT</pubDate>
          <guid>https://elliot00.com/posts/toolchain-vim</guid>
        </item>
<item>
          <title>再见，2020</title>
          <link>https://elliot00.com/posts/review-2020</link>
          <description>文章记录了作者2020年的工作、学习和生活经历。在技术领域，作者学习了React、C#、TypeScript和Rust等编程语言，还参与了开源项目的贡献。在生活方面，作者去了郑州旅游，与对象见面。文章最后列出了2021年的目标，包括与爱的人一起度过2021、用ASP.NET core建一个问答论坛、深入了解Azure Function与Blazor、用Rust实现一个基于中间件的异步HTTP服务端框架、练听力，学好英语、看完两本厚书：CSAPP、SICP等。</description>
          <pubDate>Wed, 30 Dec 2020 13:14:10 GMT</pubDate>
          <guid>https://elliot00.com/posts/review-2020</guid>
        </item>
<item>
          <title>论博客的进化与前端发展史</title>
          <link>https://elliot00.com/posts/blog-evolution</link>
          <description>这篇文章描述了作者使用NextJS重新构建个人博客的技术栈变更历程。作者一开始使用Django和MySQL搭建了博客，但随着对前端技术的学习，他逐渐将博客的后端部分提取出来，使用RESTful风格的API和Docker来部署。为了解决SPA单页应用的SEO问题，作者使用了NextJS框架，它采用约定式路由和服务端渲染的方式来实现更好的搜索引擎优化。NextJS还提供了Link组件和Shallow Routing等功能，可以在不重新加载整个页面的时候更新部分内容，从而提高页面的切换速度。作者还使用了GraphQL和Serverless技术来进一步优化博客的性能和部署方式。最后，作者表达了对未来使用Blazor框架来构建SPA后台的计划。</description>
          <pubDate>Sat, 19 Dec 2020 05:54:07 GMT</pubDate>
          <guid>https://elliot00.com/posts/blog-evolution</guid>
        </item>
<item>
          <title>刷题笔记0x07：不同路径</title>
          <link>https://elliot00.com/posts/leetcode-different-ways</link>
          <description>这篇文章讨论了一个机器人从网格左上角移动到右下角的不同路径数问题。它首先介绍了问题的描述，然后提出了一个递归公式 `f(x, y) = f(x-1, y) + f(x, y-1)` 来计算从起点到坐标点 `(x, y)` 的路径数。接着，文章解释了如何使用二维数组来避免数组索引出现负数，并提供了代码实现。最后，文章还提到了可以用排列组合的方法来解决这个问题。</description>
          <pubDate>Sat, 19 Dec 2020 05:52:51 GMT</pubDate>
          <guid>https://elliot00.com/posts/leetcode-different-ways</guid>
        </item>
<item>
          <title>给个人博客添加后台管理友链与全站公告功能</title>
          <link>https://elliot00.com/posts/add-friendlink-notification</link>
          <description>这篇文章介绍了如何在个人博客网站上添加友情链接和全站公告通知功能。首先，作者创建了一个名为“extras”的 Django 应用，并添加了一个 FriendLink 模型来存储友情链接数据。然后，作者创建了一个 Django 模板标签，以便在需要显示友情链接的地方使用。接着，作者创建了另一个模型 SiteMessage 来存储全站公告数据，并同样创建了一个模板标签来显示全站公告。最后，作者还对网页结构进行了一些调整，使之更加协调。</description>
          <pubDate>Sat, 19 Dec 2020 05:52:33 GMT</pubDate>
          <guid>https://elliot00.com/posts/add-friendlink-notification</guid>
        </item>
<item>
          <title>刷题笔记0x06：双指针问题</title>
          <link>https://elliot00.com/posts/leetcode-double-pointer</link>
          <description>文章讨论了leetcode上双指针问题的解决方法和思路。对于三数之和问题，它首先介绍了暴力穷举和用哈希表换时间的方法，然后介绍了利用排序和双指针降低时间复杂度的方法以及一些需要注意的细节。接着，文章介绍了删除链表倒数第N个节点问题的解决方法，它首先介绍了两个指针跑的过程，然后介绍了注意链表长度为n，要求删除倒数第n的情况。最后，文章还提到了两个相似的题目：最接近的三数之和与四数之和。</description>
          <pubDate>Sat, 19 Dec 2020 05:52:03 GMT</pubDate>
          <guid>https://elliot00.com/posts/leetcode-double-pointer</guid>
        </item>
<item>
          <title>刷题笔记0x08:石子游戏</title>
          <link>https://elliot00.com/posts/leetcode-stone-game</link>
          <description>这篇文章给出了一个动态规划算法来求解游戏“Nim”的必胜策略，这个问题的条件是：有两堆石子，两人轮流任意取走一堆中任意数量的石子，最后不能取走石子的人输掉游戏。文章旨在回答谁能够赢下游戏，即谁能够让对手不能取走石子。该算法使用了一个三维数组 `dp[i][j][2]` 来存储游戏状态，其中 `i` 表示先手能取石子的位置的最小值，`j` 表示先手能取石子的位置的最大值，`2` 表示先手和后手两种情况。算法通过递推的方式来计算 `dp` 数组，最终得出先手能否赢下游戏的结论。</description>
          <pubDate>Sat, 19 Dec 2020 05:51:10 GMT</pubDate>
          <guid>https://elliot00.com/posts/leetcode-stone-game</guid>
        </item>
<item>
          <title>Django+React全栈开发：代码组织</title>
          <link>https://elliot00.com/posts/react-django-code-organization</link>
          <description>这篇文章讨论了在 JavaScript 中使用 ES6 模块组织代码的方法，包括导入和导出模块、模块的命名和别名、以及如何将代码组织成不同的模块。文章还介绍了在 React 中如何将组件拆分成不同的模块，以及如何使用默认导出的文件。</description>
          <pubDate>Sat, 19 Dec 2020 05:42:22 GMT</pubDate>
          <guid>https://elliot00.com/posts/react-django-code-organization</guid>
        </item>
<item>
          <title>Ant Design Pro页面内切换组件问题</title>
          <link>https://elliot00.com/posts/react-dynamic-import</link>
          <description>这篇文章主要讨论了在 Ant Design Pro 中使用 Tab 组件切换不同详情内容的实现方法。作者首先介绍了遇到的问题，然后提出了几种可能的解决方案，最终采用结合 React 的 Suspense 和 React.lazy 实现动态引入子组件的方法。文章还讨论了在工程实践中权衡项目进度与代码优化的重要性。</description>
          <pubDate>Sat, 19 Dec 2020 05:41:43 GMT</pubDate>
          <guid>https://elliot00.com/posts/react-dynamic-import</guid>
        </item>
<item>
          <title>Serverless学习笔记0x00</title>
          <link>https://elliot00.com/posts/aws-lambda</link>
          <description>本文介绍了 AWS Lambda、触发器、SAM、共享依赖、Fastapi 等内容。AWS Lambda 是一种无服务器计算服务，无需预置或管理服务器即可运行代码。触发器负责根据不同方式调用函数，如 API Gateway、CloudWatch Events 等。SAM（AWS Serverless Application Model）是一种脚手架工具，可以帮助快速构建所需的 Serverless 应用。共享依赖功能允许多个函数共享相同的第三方库或通用代码，无需在每个函数中重复上传依赖。Fastapi 是一个 Python Web 框架，可以用来构建 RESTful API。文章描述了如何将一个本地 Fastapi 项目快速迁移到 Serverless 架构中。最后，文章列出了一些需要进一步了解的问题，如基于 Lambda 的身份验证、Websocket API、持续集成等。</description>
          <pubDate>Sat, 19 Dec 2020 05:41:09 GMT</pubDate>
          <guid>https://elliot00.com/posts/aws-lambda</guid>
        </item>
<item>
          <title>简单探索Rust Web开发</title>
          <link>https://elliot00.com/posts/rust-web-framework</link>
          <description>这篇文章评测了  Rust  的 web 开发相关框架，并与微软的  Blazor  在  WebAssembly  部分做了简单的对比。作者对  Actix  和  Rocket  这两个  Rust  中最知名的 web 框架进行了介绍，并讲述了如何使用它们来构建简单 web 应用。然后，作者介绍了  Rust  中使用  serde  进行数据序列化的过程，并展示了如何使用  Actix  处理 JSON 请求和返回 JSON 响应。接着，作者简要介绍了  Rust  的  trait  机制，并展示了如何使用  trait  来实现自定义类型。最后，作者对  Yew  和  Blazor  这两个  Rust  和  dotNET  的前端框架进行了对比，并对  Rust  和  dotNET  在 Web 开发领域的未来发展进行了展望。</description>
          <pubDate>Sat, 19 Dec 2020 05:40:36 GMT</pubDate>
          <guid>https://elliot00.com/posts/rust-web-framework</guid>
        </item>
<item>
          <title>刷题笔记0x09：单词拆分</title>
          <link>https://elliot00.com/posts/leetcode-word-split</link>
          <description>这篇文章介绍了如何使用动态规划解决一个字符串分割问题，即判断一个给定的字符串能否被空格拆分为一个或多个在字典中出现的单词。文章从分析题意、设计状态转移方程到代码实现，最后还探讨了代码优化方案。文章思路清晰，代码简洁，是一篇优秀的算法题解。</description>
          <pubDate>Sat, 19 Dec 2020 05:36:32 GMT</pubDate>
          <guid>https://elliot00.com/posts/leetcode-word-split</guid>
        </item>
    </channel>
  </rss>