<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Aqua</title><description>The French version of Fuwari</description><link>https://aquamarine-z.github.io/</link><language>zh_CN</language><item><title>MoeFlux：给国内开发者准备的模型 API 中转网关</title><link>https://aquamarine-z.github.io/posts/2026-06-16-moeflux/</link><guid isPermaLink="true">https://aquamarine-z.github.io/posts/2026-06-16-moeflux/</guid><description>介绍 MoeFlux 这个面向国内开发者的模型中转与 Codex 订阅服务：稳定链路、原生兼容、多套餐选择，以及如何接入 Codex CLI。</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;如果你经常在国内环境里使用大模型 API，应该对这几个问题并不陌生：线路不稳定、调用延迟波动、客户端配置麻烦、不同工具之间反复切换 Key。
这类问题不一定来自模型本身，更多时候是接入链路不够稳定。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://moeflux.com/&quot;&gt;MoeFlux&lt;/a&gt; 做的事情很直接：它把自己定位成一个面向国内开发者的模型 API 网关，提供更稳定、更低干扰、尽量保持原生兼容的模型中转服务。&lt;/p&gt;
&lt;h2&gt;它主要解决什么问题？&lt;/h2&gt;
&lt;p&gt;MoeFlux 首页的核心表达是“无界算力，满血直连”。从页面信息来看，它更强调下面几件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;多地区节点协同承接&lt;/strong&gt;：把请求分配到更合适的区域线路，减少单点波动带来的影响。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BGP / 专线优化&lt;/strong&gt;：重点不是只看一次请求的延迟数字，而是更关注长期调用时的稳定性、绕路和抖动控制。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;原生兼容现有工作流&lt;/strong&gt;：尽量保持主流 OpenAI SDK、Codex CLI、常见客户端的接入方式，不需要为了换网关大改代码。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;隐私边界更克制&lt;/strong&gt;：服务本身主打“低干扰”，减少不必要的调用链路暴露和额外处理。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;换句话说，它不是一个花哨的聊天网页，而是更偏开发者基础设施：你仍然使用原来的客户端、CLI 或 SDK，只是把请求入口切到 MoeFlux。&lt;/p&gt;
&lt;h2&gt;对 Codex 用户尤其友好&lt;/h2&gt;
&lt;p&gt;我看了一下它的说明文档，MoeFlux 对 Codex CLI 给出了比较完整的接入方式。核心配置是把 Codex 的模型供应商指向它的 API 地址：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;model_provider = &quot;cch&quot;
model = &quot;gpt-5.4&quot;
disable_response_storage = true
approval_policy = &quot;never&quot;
sandbox_mode = &quot;workspace-write&quot;
web_search = &quot;live&quot;

[model_providers.cch]
name = &quot;cch&quot;
base_url = &quot;https://api.moeflux.com/v1&quot;
wire_api = &quot;responses&quot;
requires_openai_auth = true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这意味着你不需要换掉 Codex 的使用习惯：终端里照常跑 &lt;code&gt;codex&lt;/code&gt;，VS Code 插件里也照常选择 API Key 登录，只需要把配置文件里的 provider 和 &lt;code&gt;base_url&lt;/code&gt; 改好即可。&lt;/p&gt;
&lt;p&gt;对于经常让 Codex 帮忙改项目、查 bug、跑构建、写文档的人来说，这种兼容性很关键。因为真正影响效率的不是“能不能调一次模型”，而是连续工作几个小时之后，链路是否还稳定、上下文是否能顺畅跑完、工具调用是否会频繁中断。&lt;/p&gt;
&lt;h2&gt;套餐选择比较细&lt;/h2&gt;
&lt;p&gt;MoeFlux 的套餐页目前能看到 Codex 订阅、Claude 订阅、Grok 等分类，其中 Codex 订阅提供了从试用到高额度的多个梯度。&lt;/p&gt;
&lt;p&gt;比如页面上展示的 Codex 相关套餐包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;试用临时套餐：7 天，适合先验证链路和体验。&lt;/li&gt;
&lt;li&gt;Codex Mini / Lite：偏轻量使用，适合偶尔开发或研究。&lt;/li&gt;
&lt;li&gt;Codex Lite Pro / SE / SE Max：更适合日常开发。&lt;/li&gt;
&lt;li&gt;Codex Plus / Plus Max / Super：面向更高频、更大额度的专业使用。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;页面还显示了每日限额、每周限额和并发数量。这个设计对开发者比较实用，因为你可以按自己的调用强度选套餐，而不是一上来就买很重的配置。&lt;/p&gt;
&lt;h2&gt;适合哪些人？&lt;/h2&gt;
&lt;p&gt;我觉得 MoeFlux 比较适合这几类用户：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;国内环境下高频使用 Codex CLI 的开发者&lt;/strong&gt;：尤其是需要长时间让 Codex 读项目、改代码、跑测试的人。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;希望保留原生 SDK 使用方式的人&lt;/strong&gt;：不想为了接入一个服务改掉现有 OpenAI SDK 或客户端结构。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;对稳定性比花哨功能更敏感的人&lt;/strong&gt;：比如写代码、批处理、文档生成、自动化任务，这类场景更怕中途断链。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;想先小额度试用的人&lt;/strong&gt;：套餐里有短周期试用和多个轻量档位，验证成本比较低。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;怎么开始？&lt;/h2&gt;
&lt;p&gt;最简单的路径是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开 &lt;a href=&quot;https://moeflux.com/&quot;&gt;MoeFlux&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;到“套餐订阅”里选择适合自己的套餐。&lt;/li&gt;
&lt;li&gt;在“说明文档”里按自己的系统选择 macOS、Windows 或 Linux。&lt;/li&gt;
&lt;li&gt;安装 Node.js 和 Codex CLI。&lt;/li&gt;
&lt;li&gt;把 &lt;code&gt;~/.codex/config.toml&lt;/code&gt; 里的 &lt;code&gt;base_url&lt;/code&gt; 配成 &lt;code&gt;https://api.moeflux.com/v1&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;使用 API Key 登录 Codex，然后照常使用。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果你只是想确认它是否适合自己，可以先从短周期试用或轻量套餐开始。真正跑几次项目级任务，比单纯看介绍更能判断链路质量。&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;MoeFlux 的卖点并不是重新发明一个 AI 客户端，而是把模型接入链路做成更适合国内开发者长期使用的形态：多节点、专线优化、原生兼容、套餐清晰，并且对 Codex 这类开发工具做了明确支持。&lt;/p&gt;
&lt;p&gt;如果你已经把 AI 当成日常开发工作流的一部分，而不是偶尔问几句话的玩具，那么稳定的 API 网关本身就是生产力基础设施。MoeFlux 值得放进你的备选方案里试一试。&lt;/p&gt;
</content:encoded></item><item><title>React + shadcn/ui + Zustand 技术栈展示</title><link>https://aquamarine-z.github.io/posts/tech-showcase/</link><guid isPermaLink="true">https://aquamarine-z.github.io/posts/tech-showcase/</guid><description>在 Astro 博客中集成 React、shadcn/ui、Tailwind CSS 和 Zustand 的完整演示</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import TechShowcase from &apos;../../../components/react/TechShowcase.tsx&apos;&lt;/p&gt;
&lt;h2&gt;🚀 技术栈介绍&lt;/h2&gt;
&lt;p&gt;本文展示了如何在 Astro (Fuwari) 博客中成功集成以下现代前端技术栈：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;技术&lt;/th&gt;
&lt;th&gt;版本&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;React&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;19.x&lt;/td&gt;
&lt;td&gt;UI 组件框架&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tailwind CSS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3.x&lt;/td&gt;
&lt;td&gt;实用优先的 CSS 框架&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;shadcn/ui&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;latest&lt;/td&gt;
&lt;td&gt;基于 Radix UI 的组件库&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zustand&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5.x&lt;/td&gt;
&lt;td&gt;轻量级状态管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Astro MDX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4.x&lt;/td&gt;
&lt;td&gt;在 Markdown 中使用 JSX 组件&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;✨ 实时组件演示&lt;/h2&gt;
&lt;p&gt;下面的所有组件都是 &lt;strong&gt;真实可交互&lt;/strong&gt; 的 React 组件，通过 MDX 直接嵌入到这篇博客帖子中：&lt;/p&gt;
&lt;p&gt;&amp;lt;TechShowcase client:only=&quot;react&quot; /&amp;gt;&lt;/p&gt;
&lt;h2&gt;🏗️ 技术架构&lt;/h2&gt;
&lt;h3&gt;MDX 集成&lt;/h3&gt;
&lt;p&gt;这篇文章本身就是一个 &lt;code&gt;.mdx&lt;/code&gt; 文件，它允许我们在 Markdown 中直接导入和使用 React 组件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 在 MDX 中导入 React 组件
import TechShowcase from &apos;../../../components/react/TechShowcase.tsx&apos;

// 使用 client:load 指令使其在客户端可交互
&amp;lt;TechShowcase client:only=&quot;react&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Zustand Store 示例&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;// src/stores/taskStore.ts
import { create } from &apos;zustand&apos;

const useTaskStore = create((set, get) =&amp;gt; ({
  tasks: [],
  addTask: (title, priority) =&amp;gt;
    set((state) =&amp;gt; ({
      tasks: [...state.tasks, { id: Date.now(), title, priority, completed: false }],
    })),
  toggleTask: (id) =&amp;gt;
    set((state) =&amp;gt; ({
      tasks: state.tasks.map((t) =&amp;gt; t.id === id ? { ...t, completed: !t.completed } : t),
    })),
  getStats: () =&amp;gt; {
    const { tasks } = get()
    return {
      total: tasks.length,
      completed: tasks.filter((t) =&amp;gt; t.completed).length,
    }
  },
}))
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;shadcn/ui 组件使用&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;import { Button } from &apos;@/components/ui/button&apos;
import { Card, CardContent, CardHeader, CardTitle } from &apos;@/components/ui/card&apos;
import { Badge } from &apos;@/components/ui/badge&apos;
import { Tabs, TabsContent, TabsList, TabsTrigger } from &apos;@/components/ui/tabs&apos;

// 按钮变体
&amp;lt;Button variant=&quot;default&quot; client:load&amp;gt;Default&amp;lt;/Button&amp;gt;
&amp;lt;Button variant=&quot;destructive&quot; client:load&amp;gt;Destructive&amp;lt;/Button&amp;gt;
&amp;lt;Button variant=&quot;outline&quot; client:load&amp;gt;Outline&amp;lt;/Button&amp;gt;
&amp;lt;Button variant=&quot;ghost&quot; client:load&amp;gt;Ghost&amp;lt;/Button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;📦 引入的依赖&lt;/h2&gt;
&lt;p&gt;本次集成新增了以下依赖包：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@astrojs/react&lt;/code&gt; — Astro 的 React 集成&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@astrojs/mdx&lt;/code&gt; — Astro 的 MDX 支持&lt;/li&gt;
&lt;li&gt;&lt;code&gt;react&lt;/code&gt; + &lt;code&gt;react-dom&lt;/code&gt; — React 核心库&lt;/li&gt;
&lt;li&gt;&lt;code&gt;zustand&lt;/code&gt; — 状态管理&lt;/li&gt;
&lt;li&gt;&lt;code&gt;class-variance-authority&lt;/code&gt; — 组件变体管理 (CVA)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;clsx&lt;/code&gt; + &lt;code&gt;tailwind-merge&lt;/code&gt; — 类名工具函数&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lucide-react&lt;/code&gt; — 图标库&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@radix-ui/*&lt;/code&gt; — 无障碍 UI 原语&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
shadcn/ui 的组件代码直接存在于项目中 (&lt;code&gt;src/components/ui/&lt;/code&gt;)，你可以自由定制样式和行为，无需等待上游更新。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;🎯 总结&lt;/h2&gt;
&lt;p&gt;通过这次集成，我们的 Astro 博客现在具备了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;✅ &lt;strong&gt;React 组件支持&lt;/strong&gt; — 可以在 Astro 页面和 MDX 文章中使用 React&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;MDX 写作&lt;/strong&gt; — 可以在 Markdown 中嵌入可交互的 React 组件&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;shadcn/ui 组件库&lt;/strong&gt; — Button、Card、Badge、Tabs、Switch、Progress、Accordion 等&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Zustand 状态管理&lt;/strong&gt; — 轻量级全局状态，无需 Provider&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Tailwind CSS 增强&lt;/strong&gt; — 配合 shadcn/ui 的设计 Token 系统&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>Rust实现简单链表</title><link>https://aquamarine-z.github.io/posts/2024-12-26-rust%E5%AE%9E%E7%8E%B0%E7%AE%80%E5%8D%95%E9%93%BE%E8%A1%A8/</link><guid isPermaLink="true">https://aquamarine-z.github.io/posts/2024-12-26-rust%E5%AE%9E%E7%8E%B0%E7%AE%80%E5%8D%95%E9%93%BE%E8%A1%A8/</guid><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;pre&gt;&lt;code&gt;use std::cell::RefCell;
use std::rc::Rc;
type NodeRef&amp;lt;T&amp;gt; = Rc&amp;lt;RefCell&amp;lt;Node&amp;lt;T&amp;gt;&amp;gt;&amp;gt;;
#[derive(Clone)]
struct Node&amp;lt;T: Clone&amp;gt; {
    data: Option&amp;lt;T&amp;gt;,
    next: Option&amp;lt;NodeRef&amp;lt;T&amp;gt;&amp;gt;,
    previous: Option&amp;lt;NodeRef&amp;lt;T&amp;gt;&amp;gt;,
}
struct LinkedList&amp;lt;T: Clone&amp;gt; {
    head: Option&amp;lt;NodeRef&amp;lt;T&amp;gt;&amp;gt;,
    tail: Option&amp;lt;NodeRef&amp;lt;T&amp;gt;&amp;gt;,
    pub size: usize,
}
impl&amp;lt;T: Clone&amp;gt; LinkedList&amp;lt;T&amp;gt; {
    fn get_ptr_at(&amp;amp;self, index: usize) -&amp;gt; NodeRef&amp;lt;T&amp;gt; {
        if index &amp;lt; (self.size / 2) as usize {
            let head = self.head.clone().unwrap().clone();
            let mut ptr = head;
            for i in 0..index+1 {
                let next = ptr.borrow().next.clone().unwrap();
                ptr = next;
            }
            ptr
        } else {
            let tail = self.tail.clone().unwrap().clone();
            let mut ptr = tail;
            for i in 0..self.size - index {
                let prev = ptr.borrow().previous.clone().unwrap();
                ptr = prev;
            }
            ptr
        }
    }
    pub fn is_empty(&amp;amp;self) -&amp;gt; bool {
        self.head
            .clone()
            .unwrap()
            .borrow()
            .next
            .clone()
            .unwrap()
            .borrow()
            .next
            .is_none()
            &amp;amp;&amp;amp; self
                .tail
                .clone()
                .unwrap()
                .borrow()
                .previous
                .clone()
                .unwrap()
                .borrow()
                .previous
                .is_none()
    }
    fn insert_first(&amp;amp;mut self, value: T) {
        let new_node = Rc::new(RefCell::new(Node {
            data: Some(value),
            next: None,
            previous: None,
        }));
        let new_head = self.head.clone().unwrap();
        let new_tail = self.tail.clone().unwrap();
        new_head.borrow_mut().next = Some(Rc::clone(&amp;amp;new_node));
        new_node.borrow_mut().previous = Some(Rc::clone(&amp;amp;new_head));
        new_tail.borrow_mut().previous = Some(Rc::clone(&amp;amp;new_node));
        new_node.borrow_mut().next = Some(Rc::clone(&amp;amp;new_tail));
        self.tail = Some(new_tail);
        self.head = Some(new_head);
    }
    pub fn new() -&amp;gt; Self {
        let head = Rc::new(RefCell::new(Node {
            data: None,
            next: None,
            previous: None,
        }));

        let tail = Rc::new(RefCell::new(Node {
            data: None,
            next: None,
            previous: Some(Rc::clone(&amp;amp;head)),
        }));

        head.borrow_mut().next = Some(Rc::clone(&amp;amp;tail));

        Self {
            head: Some(head),
            tail: Some(tail),
            size: 0,
        }
    }

    pub fn push_back(&amp;amp;mut self, value: T) {
        if !self.is_empty() {
            let new_node = Rc::new(RefCell::new(Node {
                data: Some(value),
                next: None,
                previous: None,
            }));
            let tail = &amp;amp;self.tail.clone().unwrap();
            let mut new_tail = tail.clone();
            let prev = new_tail.borrow().previous.clone().unwrap();
            prev.borrow_mut().next = Some(Rc::clone(&amp;amp;new_node));
            new_node.borrow_mut().previous = Some(prev);
            new_node.borrow_mut().next = Some(new_tail.clone());
            new_tail.borrow_mut().previous = Some(Rc::clone(&amp;amp;new_node));
            self.tail = Some(new_tail);
        } else {
            self.insert_first(value);
        }
        self.size += 1;
    }
    pub fn push_front(&amp;amp;mut self, value: T) {
        if !self.is_empty() {
            let new_node = Rc::new(RefCell::new(Node {
                data: Some(value),
                next: None,
                previous: None,
            }));
            let head = &amp;amp;self.head.clone().unwrap();
            let mut new_head = head.clone();
            let next = new_head.borrow().next.clone().unwrap();
            next.borrow_mut().next = Some(Rc::clone(&amp;amp;new_node));
            new_head.borrow_mut().next = Some(Rc::clone(&amp;amp;new_node));
            new_node.borrow_mut().next = Some(next);
            new_node.borrow_mut().previous = Some(new_head.clone());
            self.head = Some(new_head);
        } else {
            self.insert_first(value);
        }
        self.size += 1;
    }
    pub fn get(&amp;amp;self, index: usize) -&amp;gt; Result&amp;lt;Option&amp;lt;T&amp;gt;, String&amp;gt; {
        return if index &amp;gt;= self.size as usize || index &amp;lt; 0 {
            Err(&quot;&quot;.to_string())
        } else {
            let ptr = self.get_ptr_at(index);
            let value = ptr.borrow().clone().data;
            Ok(value)
        };
    }
    pub fn insert_at(&amp;amp;mut self,value:T,index:usize)-&amp;gt;Result&amp;lt;(),String&amp;gt;{
        if self.size==0{
            self.push_back(value);
            return Ok(())
        }
        if self.size == index{
            self.push_back(value);
            return Ok(())
        }
        if self.size == 0{
            self.push_front(value);
            return Ok(())
        }
        let ptr=self.get_ptr_at(index);
        let new_previous=ptr.borrow().previous.clone().unwrap();
        let new_node=Rc::new(RefCell::new(Node{
            data: Some(value),
            next: Some(ptr.clone()),
            previous: Some(new_previous.clone()),
        }));
        ptr.borrow_mut().previous=Some(Rc::clone(&amp;amp;new_node));
        new_previous.borrow_mut().next=Some(Rc::clone(&amp;amp;new_node));
        self.size+=1;
        Ok(())
    }
    pub fn remove_at(&amp;amp;mut self, index: usize) -&amp;gt; Result&amp;lt;Option&amp;lt;T&amp;gt;, String&amp;gt; {
        return if index &amp;gt;= self.size as usize || index &amp;lt; 0 {
            Err(&quot;&quot;.to_string())
        } else {
            let ptr = self.get_ptr_at(index);
            let new_previous = ptr.borrow().clone().previous.unwrap();
            let new_next = ptr.borrow().clone().next.unwrap();
            new_previous.borrow_mut().next = Some(new_next.clone());
            new_next.borrow_mut().previous = Some(new_previous.clone());
            ptr.borrow().previous.clone().unwrap().borrow_mut().next = Some(new_next.clone());
            ptr.borrow().next.clone().unwrap().borrow_mut().previous = Some(new_previous.clone());
            let value = ptr.borrow().clone().data;
            self.size -= 1;
            Ok(value)
        };
    }
}
fn main() {
    let mut list_i32: LinkedList&amp;lt;i32&amp;gt; = LinkedList::new();
    for i in 0..100 {
        list_i32.push_back(i);
    }
    list_i32.insert_at(-1, 1).expect(&quot;TODO: panic message&quot;);
    list_i32.insert_at(-1, 0).expect(&quot;TODO: panic message&quot;);
    list_i32.insert_at(-1, list_i32.size-1).expect(&quot;TODO: panic message&quot;);
    list_i32.insert_at(-1, list_i32.size).expect(&quot;TODO: panic message&quot;);
    list_i32.insert_at(-1, 50).expect(&quot;TODO: panic message&quot;);
    for i in 0..list_i32.size{
        if let Ok(Some(v))= list_i32.get(i){
            println!(&quot;{}&quot;,v);
        }
    }
    return;
}

&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Markdown Extended Features</title><link>https://aquamarine-z.github.io/posts/markdown-extended/</link><guid isPermaLink="true">https://aquamarine-z.github.io/posts/markdown-extended/</guid><description>Read more about Markdown features in Fuwari</description><pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;GitHub Repository Cards&lt;/h2&gt;
&lt;p&gt;You can add dynamic cards that link to GitHub repositories, on page load, the repository information is pulled from the GitHub API.&lt;/p&gt;
&lt;p&gt;::github{repo=&quot;Fabrizz/MMM-OnSpotify&quot;}&lt;/p&gt;
&lt;p&gt;Create a GitHub repository card with the code &lt;code&gt;::github{repo=&quot;&amp;lt;owner&amp;gt;/&amp;lt;repo&amp;gt;&quot;}&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::github{repo=&quot;saicaca/fuwari&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Admonitions&lt;/h2&gt;
&lt;p&gt;Following types of admonitions are supported: &lt;code&gt;note&lt;/code&gt; &lt;code&gt;tip&lt;/code&gt; &lt;code&gt;important&lt;/code&gt; &lt;code&gt;warning&lt;/code&gt; &lt;code&gt;caution&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;:::note
Highlights information that users should take into account, even when skimming.
:::&lt;/p&gt;
&lt;p&gt;:::tip
Optional information to help a user be more successful.
:::&lt;/p&gt;
&lt;p&gt;:::important
Crucial information necessary for users to succeed.
:::&lt;/p&gt;
&lt;p&gt;:::warning
Critical content demanding immediate user attention due to potential risks.
:::&lt;/p&gt;
&lt;p&gt;:::caution
Negative potential consequences of an action.
:::&lt;/p&gt;
&lt;h3&gt;Basic Syntax&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;:::note
Highlights information that users should take into account, even when skimming.
:::

:::tip
Optional information to help a user be more successful.
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Custom Titles&lt;/h3&gt;
&lt;p&gt;The title of the admonition can be customized.&lt;/p&gt;
&lt;p&gt;:::note[MY CUSTOM TITLE]
This is a note with a custom title.
:::&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:::note[MY CUSTOM TITLE]
This is a note with a custom title.
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;GitHub Syntax&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
&lt;a href=&quot;https://github.com/orgs/community/discussions/16925&quot;&gt;The GitHub syntax&lt;/a&gt; is also supported.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; [!NOTE]
&amp;gt; The GitHub syntax is also supported.

&amp;gt; [!TIP]
&amp;gt; The GitHub syntax is also supported.
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Spoiler&lt;/h3&gt;
&lt;p&gt;You can add spoilers to your text. The text also supports &lt;strong&gt;Markdown&lt;/strong&gt; syntax.&lt;/p&gt;
&lt;p&gt;The content :spoiler[is hidden &lt;strong&gt;ayyy&lt;/strong&gt;]!&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;The content :spoiler[is hidden **ayyy**]!

&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Expressive Code Example</title><link>https://aquamarine-z.github.io/posts/expressive-code/</link><guid isPermaLink="true">https://aquamarine-z.github.io/posts/expressive-code/</guid><description>How code blocks look in Markdown using Expressive Code.</description><pubDate>Wed, 10 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Here, we&apos;ll explore how code blocks look using &lt;a href=&quot;https://expressive-code.com/&quot;&gt;Expressive Code&lt;/a&gt;. The provided examples are based on the official documentation, which you can refer to for further details.&lt;/p&gt;
&lt;h2&gt;Expressive Code&lt;/h2&gt;
&lt;h3&gt;Syntax Highlighting&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/key-features/syntax-highlighting/&quot;&gt;Syntax Highlighting&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Regular syntax highlighting&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;console.log(&apos;This code is syntax highlighted!&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Rendering ANSI escape sequences&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;ANSI colors:
- Regular: [31mRed[0m [32mGreen[0m [33mYellow[0m [34mBlue[0m [35mMagenta[0m [36mCyan[0m
- Bold:    [1;31mRed[0m [1;32mGreen[0m [1;33mYellow[0m [1;34mBlue[0m [1;35mMagenta[0m [1;36mCyan[0m
- Dimmed:  [2;31mRed[0m [2;32mGreen[0m [2;33mYellow[0m [2;34mBlue[0m [2;35mMagenta[0m [2;36mCyan[0m

256 colors (showing colors 160-177):
[38;5;160m160 [38;5;161m161 [38;5;162m162 [38;5;163m163 [38;5;164m164 [38;5;165m165[0m
[38;5;166m166 [38;5;167m167 [38;5;168m168 [38;5;169m169 [38;5;170m170 [38;5;171m171[0m
[38;5;172m172 [38;5;173m173 [38;5;174m174 [38;5;175m175 [38;5;176m176 [38;5;177m177[0m

Full RGB colors:
[38;2;34;139;34mForestGreen - RGB(34, 139, 34)[0m

Text formatting: [1mBold[0m [2mDimmed[0m [3mItalic[0m [4mUnderline[0m
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Editor &amp;amp; Terminal Frames&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/key-features/frames/&quot;&gt;Editor &amp;amp; Terminal Frames&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Code editor frames&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;console.log(&apos;Title attribute example&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- src/content/index.html --&amp;gt;
&amp;lt;div&amp;gt;File name comment example&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Terminal frames&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;This terminal frame has no title&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;Write-Output &quot;This one has a title!&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Overriding frame types&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;Look ma, no frame!&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;# Without overriding, this would be a terminal frame
function Watch-Tail { Get-Content -Tail 20 -Wait $args }
New-Alias tail Watch-Tail
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Text &amp;amp; Line Markers&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/key-features/text-markers/&quot;&gt;Text &amp;amp; Line Markers&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Marking full lines &amp;amp; line ranges&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// Line 1 - targeted by line number
// Line 2
// Line 3
// Line 4 - targeted by line number
// Line 5
// Line 6
// Line 7 - targeted by range &quot;7-8&quot;
// Line 8 - targeted by range &quot;7-8&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Selecting line marker types (mark, ins, del)&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;function demo() {
  console.log(&apos;this line is marked as deleted&apos;)
  // This line and the next one are marked as inserted
  console.log(&apos;this is the second inserted line&apos;)

  return &apos;this line uses the neutral default marker type&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Adding labels to line markers&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// labeled-line-markers.jsx
&amp;lt;button
  role=&quot;button&quot;
  {...props}
  value={value}
  className={buttonClassName}
  disabled={disabled}
  active={active}
&amp;gt;
  {children &amp;amp;&amp;amp;
    !active &amp;amp;&amp;amp;
    (typeof children === &apos;string&apos; ? &amp;lt;span&amp;gt;{children}&amp;lt;/span&amp;gt; : children)}
&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Adding long labels on their own lines&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// labeled-line-markers.jsx
&amp;lt;button
  role=&quot;button&quot;
  {...props}

  value={value}
  className={buttonClassName}

  disabled={disabled}
  active={active}
&amp;gt;

  {children &amp;amp;&amp;amp;
    !active &amp;amp;&amp;amp;
    (typeof children === &apos;string&apos; ? &amp;lt;span&amp;gt;{children}&amp;lt;/span&amp;gt; : children)}
&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Using diff-like syntax&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;+this line will be marked as inserted
-this line will be marked as deleted
this is a regular line
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
+this is an actual diff file
-all contents will remain unmodified
 no whitespace will be removed either
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Combining syntax highlighting with diff-like syntax&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  function thisIsJavaScript() {
    // This entire block gets highlighted as JavaScript,
    // and we can still add diff markers to it!
-   console.log(&apos;Old code to be removed&apos;)
+   console.log(&apos;New and shiny code!&apos;)
  }
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Marking individual text inside lines&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;function demo() {
  // Mark any given text inside lines
  return &apos;Multiple matches of the given text are supported&apos;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Regular expressions&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;console.log(&apos;The words yes and yep will be marked.&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Escaping forward slashes&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;Test&quot; &amp;gt; /home/test.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Selecting inline marker types (mark, ins, del)&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;function demo() {
  console.log(&apos;These are inserted and deleted marker types&apos;);
  // The return statement uses the default marker type
  return true;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Word Wrap&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/key-features/word-wrap/&quot;&gt;Word Wrap&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Configuring word wrap per block&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// Example with wrap
function getLongString() {
  return &apos;This is a very long string that will most probably not fit into the available space unless the container is extremely wide&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;// Example with wrap=false
function getLongString() {
  return &apos;This is a very long string that will most probably not fit into the available space unless the container is extremely wide&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Configuring indentation of wrapped lines&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// Example with preserveIndent (enabled by default)
function getLongString() {
  return &apos;This is a very long string that will most probably not fit into the available space unless the container is extremely wide&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;// Example with preserveIndent=false
function getLongString() {
  return &apos;This is a very long string that will most probably not fit into the available space unless the container is extremely wide&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Collapsible Sections&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/plugins/collapsible-sections/&quot;&gt;Collapsible Sections&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// All this boilerplate setup code will be collapsed
import { someBoilerplateEngine } from &apos;@example/some-boilerplate&apos;
import { evenMoreBoilerplate } from &apos;@example/even-more-boilerplate&apos;

const engine = someBoilerplateEngine(evenMoreBoilerplate())

// This part of the code will be visible by default
engine.doSomething(1, 2, 3, calcFn)

function calcFn() {
  // You can have multiple collapsed sections
  const a = 1
  const b = 2
  const c = a + b

  // This will remain visible
  console.log(`Calculation result: ${a} + ${b} = ${c}`)
  return c
}

// All this code until the end of the block will be collapsed again
engine.closeConnection()
engine.freeMemory()
engine.shutdown({ reason: &apos;End of example boilerplate code&apos; })
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Line Numbers&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/plugins/line-numbers/&quot;&gt;Line Numbers&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Displaying line numbers per block&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;// This code block will show line numbers
console.log(&apos;Greetings from line 2!&apos;)
console.log(&apos;I am on line 3&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;// Line numbers are disabled for this block
console.log(&apos;Hello?&apos;)
console.log(&apos;Sorry, do you know what line I am on?&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Changing the starting line number&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;console.log(&apos;Greetings from line 5!&apos;)
console.log(&apos;I am on line 6&apos;)
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Simple Guides for Fuwari</title><link>https://aquamarine-z.github.io/posts/guide/</link><guid isPermaLink="true">https://aquamarine-z.github.io/posts/guide/</guid><description>How to use this blog template.</description><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Cover image source: &lt;a href=&quot;https://image.civitai.com/xG1nkqKTMzGDvpLrqFT7WA/208fc754-890d-4adb-9753-2c963332675d/width=2048/01651-1456859105-(colour_1.5),girl,_Blue,yellow,green,cyan,purple,red,pink,_best,8k,UHD,masterpiece,male%20focus,%201boy,gloves,%20ponytail,%20long%20hair,.jpeg&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This blog template is built with &lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt;. For the things that are not mentioned in this guide, you may find the answers in the &lt;a href=&quot;https://docs.astro.build/&quot;&gt;Astro Docs&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Front-matter of Posts&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;---
title: My First Blog Post
published: 2023-09-09
description: This is the first post of my new Astro blog.
image: ./cover.jpg
tags: [Foo, Bar]
category: Front-end
draft: false
---
&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The title of the post.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;published&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The date the post was published.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A short description of the post. Displayed on index page.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;image&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The cover image path of the post.&amp;lt;br/&amp;gt;1. Start with &lt;code&gt;http://&lt;/code&gt; or &lt;code&gt;https://&lt;/code&gt;: Use web image&amp;lt;br/&amp;gt;2. Start with &lt;code&gt;/&lt;/code&gt;: For image in &lt;code&gt;public&lt;/code&gt; dir&amp;lt;br/&amp;gt;3. With none of the prefixes: Relative to the markdown file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tags&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The tags of the post.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;category&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The category of the post.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;draft&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;If this post is still a draft, which won&apos;t be displayed.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Where to Place the Post Files&lt;/h2&gt;
&lt;p&gt;Your post files should be placed in &lt;code&gt;src/content/posts/&lt;/code&gt; directory. You can also create sub-directories to better organize your posts and assets.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;src/content/posts/
├── post-1.md
└── post-2/
    ├── cover.png
    └── index.md
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Markdown Example</title><link>https://aquamarine-z.github.io/posts/markdown/</link><guid isPermaLink="true">https://aquamarine-z.github.io/posts/markdown/</guid><description>A simple example of a Markdown blog post.</description><pubDate>Sun, 01 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;An h1 header&lt;/h1&gt;
&lt;p&gt;Paragraphs are separated by a blank line.&lt;/p&gt;
&lt;p&gt;2nd paragraph. &lt;em&gt;Italic&lt;/em&gt;, &lt;strong&gt;bold&lt;/strong&gt;, and &lt;code&gt;monospace&lt;/code&gt;. Itemized lists
look like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;this one&lt;/li&gt;
&lt;li&gt;that one&lt;/li&gt;
&lt;li&gt;the other one&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that --- not considering the asterisk --- the actual text
content starts at 4-columns in.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Block quotes are
written like so.&lt;/p&gt;
&lt;p&gt;They can span multiple paragraphs,
if you like.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Use 3 dashes for an em-dash. Use 2 dashes for ranges (ex., &quot;it&apos;s all
in chapters 12--14&quot;). Three dots ... will be converted to an ellipsis.
Unicode is supported. ☺&lt;/p&gt;
&lt;h2&gt;An h2 header&lt;/h2&gt;
&lt;p&gt;Here&apos;s a numbered list:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;first item&lt;/li&gt;
&lt;li&gt;second item&lt;/li&gt;
&lt;li&gt;third item&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Note again how the actual text starts at 4 columns in (4 characters
from the left side). Here&apos;s a code sample:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Let me re-iterate ...
for i in 1 .. 10 { do-something(i) }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you probably guessed, indented 4 spaces. By the way, instead of
indenting the block, you can use delimited blocks, if you like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define foobar() {
    print &quot;Welcome to flavor country!&quot;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(which makes copying &amp;amp; pasting easier). You can optionally mark the
delimited block for Pandoc to syntax highlight it:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import time
# Quick, count to ten!
for i in range(10):
    # (but not *too* quick)
    time.sleep(0.5)
    print i
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;An h3 header&lt;/h3&gt;
&lt;p&gt;Now a nested list:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;First, get these ingredients:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;carrots&lt;/li&gt;
&lt;li&gt;celery&lt;/li&gt;
&lt;li&gt;lentils&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Boil some water.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dump everything in the pot and follow
this algorithm:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; find wooden spoon
 uncover pot
 stir
 cover pot
 balance wooden spoon precariously on pot handle
 wait 10 minutes
 goto first step (or shut off burner when done)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Do not bump wooden spoon or it will fall.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Notice again how text always lines up on 4-space indents (including
that last line which continues item 3 above).&lt;/p&gt;
&lt;p&gt;Here&apos;s a link to &lt;a href=&quot;http://foo.bar&quot;&gt;a website&lt;/a&gt;, to a &lt;a href=&quot;local-doc.html&quot;&gt;local
doc&lt;/a&gt;, and to a &lt;a href=&quot;#an-h2-header&quot;&gt;section heading in the current
doc&lt;/a&gt;. Here&apos;s a footnote [^1].&lt;/p&gt;
&lt;p&gt;[^1]: Footnote text goes here.&lt;/p&gt;
&lt;p&gt;Tables can look like this:&lt;/p&gt;
&lt;p&gt;size material color&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;9 leather brown
10 hemp canvas natural
11 glass transparent&lt;/p&gt;
&lt;p&gt;Table: Shoes, their sizes, and what they&apos;re made of&lt;/p&gt;
&lt;p&gt;(The above is the caption for the table.) Pandoc also supports
multi-line tables:&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;keyword text&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;red Sunsets, apples, and
other red or reddish
things.&lt;/p&gt;
&lt;p&gt;green Leaves, grass, frogs
and other things it&apos;s
not easy being.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;A horizontal rule follows.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Here&apos;s a definition list:&lt;/p&gt;
&lt;p&gt;apples
: Good for making applesauce.
oranges
: Citrus!
tomatoes
: There&apos;s no &quot;e&quot; in tomatoe.&lt;/p&gt;
&lt;p&gt;Again, text is indented 4 spaces. (Put a blank line between each
term/definition pair to spread things out more.)&lt;/p&gt;
&lt;p&gt;Here&apos;s a &quot;line block&quot;:&lt;/p&gt;
&lt;p&gt;| Line one
| Line too
| Line tree&lt;/p&gt;
&lt;p&gt;and images can be specified like so:&lt;/p&gt;
&lt;p&gt;Inline math equations go in like so: $\omega = d\phi / dt$. Display
math should get its own line and be put in in double-dollarsigns:&lt;/p&gt;
&lt;p&gt;$$I = \int \rho R^{2} dV$$&lt;/p&gt;
&lt;p&gt;$$
\begin{equation*}
\pi
=3.1415926535
;8979323846;2643383279;5028841971;6939937510;5820974944
;5923078164;0628620899;8628034825;3421170679;\ldots
\end{equation*}
$$&lt;/p&gt;
&lt;p&gt;And note that you can backslash-escape any punctuation characters
which you wish to be displayed literally, ex.: `foo`, *bar*, etc.&lt;/p&gt;
</content:encoded></item><item><title>Include Video in the Posts</title><link>https://aquamarine-z.github.io/posts/video/</link><guid isPermaLink="true">https://aquamarine-z.github.io/posts/video/</guid><description>This post demonstrates how to include embedded video in a blog post.</description><pubDate>Tue, 01 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Just copy the embed code from YouTube or other platforms, and paste it in the markdown file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: Include Video in the Post
published: 2023-10-19
// ...
---

&amp;lt;iframe width=&quot;100%&quot; height=&quot;468&quot; src=&quot;https://www.youtube.com/embed/5gIf0_xpFPI?si=N1WTorLKL0uwLsU_&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;YouTube&lt;/h2&gt;
&lt;p&gt;&amp;lt;iframe width=&quot;100%&quot; height=&quot;468&quot; src=&quot;https://www.youtube.com/embed/5gIf0_xpFPI?si=N1WTorLKL0uwLsU_&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/p&gt;
&lt;h2&gt;Bilibili&lt;/h2&gt;
&lt;p&gt;&amp;lt;iframe width=&quot;100%&quot; height=&quot;468&quot; src=&quot;//player.bilibili.com/player.html?bvid=BV1fK4y1s7Qf&amp;amp;p=1&quot; scrolling=&quot;no&quot; border=&quot;0&quot; frameborder=&quot;no&quot; framespacing=&quot;0&quot; allowfullscreen=&quot;true&quot;&amp;gt; &amp;lt;/iframe&amp;gt;&lt;/p&gt;
</content:encoded></item></channel></rss>