<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Articles on Kevin&#39;s Blog</title>
    <link>https://bloglee.pages.dev/post/</link>
    <description>Recent content in Articles on Kevin&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>zh</language>
    <lastBuildDate>Fri, 24 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://bloglee.pages.dev/post/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>windows hello 介绍</title>
      <link>https://bloglee.pages.dev/post/windows-hello-into/</link>
      <pubDate>Fri, 24 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/windows-hello-into/</guid>
      <description>&lt;p&gt;Windows Hello 是 Windows 提供的一套身份验证机制。&lt;/p&gt;&#xA;&lt;p&gt;用户可以通过以下方式登录：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PIN&lt;/li&gt;&#xA;&lt;li&gt;指纹&lt;/li&gt;&#xA;&lt;li&gt;人脸识别&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;它看起来只是“刷脸登录”或“输入 PIN”，但底层并不是把 PIN、指纹或人脸发送给服务器。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dokploy 中升级 Plausible 的完整流程</title>
      <link>https://bloglee.pages.dev/post/plausible-upgrade/</link>
      <pubDate>Sun, 12 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/plausible-upgrade/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;本文记录一次在 Dokploy 中将 Plausible CE 从 &lt;code&gt;v2.1.5&lt;/code&gt; 升级到 &lt;code&gt;v3.2.1&lt;/code&gt; 的实际流程。&lt;br&gt;&#xA;环境：Ubuntu 24.04、Docker、Dokploy、Traefik、PostgreSQL 16、ClickHouse。&lt;/p&gt;</description>
    </item>
    <item>
      <title>集成 dodopayments订阅支付</title>
      <link>https://bloglee.pages.dev/post/integrate-dodopayments/</link>
      <pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/integrate-dodopayments/</guid>
      <description>&lt;h2 id=&#34;测试环境&#34;&gt;测试环境&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.dodopayments.com/miscellaneous/testing-process&#34;&gt;https://docs.dodopayments.com/miscellaneous/testing-process&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;配置步骤&#34;&gt;配置步骤&lt;/h2&gt;&#xA;&lt;h3 id=&#34;新建-brand&#34;&gt;新建 Brand&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;多品牌 &lt;a href=&#34;https://docs.dodopayments.com/features/multi-brands&#34;&gt;https://docs.dodopayments.com/features/multi-brands&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;给新brand-创建自己的产品&#34;&gt;给新Brand 创建自己的产品&lt;/h3&gt;&#xA;&lt;h3 id=&#34;配置自己的-webhook-endpoint&#34;&gt;配置自己的 Webhook Endpoint&lt;/h3&gt;&#xA;&lt;h3 id=&#34;配置-api-key&#34;&gt;配置 API key&lt;/h3&gt;</description>
    </item>
    <item>
      <title>集成 cloudflare 的 Turnstile </title>
      <link>https://bloglee.pages.dev/post/integrate-cloudflare-turnstile/</link>
      <pubDate>Fri, 27 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/integrate-cloudflare-turnstile/</guid>
      <description>&lt;h2 id=&#34;变量&#34;&gt;变量&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;NEXT_PUBLIC_TURNSTILE_SITE_KEY： 构建时变量，需要配置到 build time 中&lt;/li&gt;&#xA;&lt;li&gt;TURNSTILE_SECRET_KEY&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;步骤&#34;&gt;步骤&lt;/h2&gt;&#xA;&lt;h3 id=&#34;turnstile-widgets&#34;&gt;Turnstile widgets&lt;/h3&gt;&#xA;&lt;h3&gt;&lt;/h3&gt;</description>
    </item>
    <item>
      <title>AWS SES &#43; AWS SNS 配合</title>
      <link>https://bloglee.pages.dev/post/aws-sns-aws-ses/</link>
      <pubDate>Tue, 03 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/aws-sns-aws-ses/</guid>
      <description>&lt;p&gt;集成 AWS SES + AWS SNS&lt;/p&gt;&#xA;&lt;h2 id=&#34;配置-identities&#34;&gt;配置 Identities&lt;/h2&gt;&#xA;&lt;h3 id=&#34;通过-dkim-authentication-验证身份&#34;&gt;通过 DKIM authentication 验证身份&lt;/h3&gt;&#xA;&lt;h2 id=&#34;配置-sns-topic&#34;&gt;配置 SNS Topic&lt;/h2&gt;&#xA;&lt;h3 id=&#34;创建-sns-topic&#34;&gt;创建 SNS Topic&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;登录 AWS 控制台，打开服务：&lt;strong&gt;SNS（Simple Notification Service）&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;点击左侧导航栏的 &lt;strong&gt;“Topics” → [Create topic]&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clouflare Queue</title>
      <link>https://bloglee.pages.dev/post/cloudflare-queues/</link>
      <pubDate>Mon, 02 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/cloudflare-queues/</guid>
      <description>&lt;h2 id=&#34;是什么&#34;&gt;是什么&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;是 Cloudflare的消息队列&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;目的&#34;&gt;目的&lt;/h3&gt;&#xA;&lt;p&gt;解耦、削峰、异步化&lt;/p&gt;&#xA;&lt;h3 id=&#34;优势&#34;&gt;优势&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;至少一次（at-least-once）投递&lt;/li&gt;&#xA;&lt;li&gt;批处理/重试/延迟&lt;/li&gt;&#xA;&lt;li&gt;死信队列（DLQ）&lt;/li&gt;&#xA;&lt;li&gt;不收 egress 带宽费&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;解决了什么问题&#34;&gt;解决了什么问题&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;把重活从请求链路“挪走”：HTTP 请求先快速返回，把耗时任务（发邮件、写数据库、调用第三方 API、生成任务等）丢进队列慢慢处理，避免超时与抖动。&lt;/li&gt;&#xA;&lt;li&gt;削峰填谷：流量突刺时先入队，消费者按可控并发/批量处理，防止下游（DB / 第三方）被打爆。&lt;/li&gt;&#xA;&lt;li&gt;可靠性：失败自动重试，超过重试上限可进 DLQ 便于排查（否则达到上限会被删除）。&lt;/li&gt;&#xA;&lt;li&gt;Workers 之外也能消费：支持 pull consumer，外部服务用 HTTP 拉取并 ack（注意是短轮询）。&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>集成 Paypal 支付</title>
      <link>https://bloglee.pages.dev/post/integrate-paypal/</link>
      <pubDate>Sat, 24 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/integrate-paypal/</guid>
      <description>&lt;h2 id=&#34;配置项-最重要就是配置这几个&#34;&gt;配置项: 最重要就是配置这几个&lt;/h2&gt;&#xA;&lt;h3 id=&#34;api-credentials&#34;&gt;API Credentials&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Client ID:&lt;/li&gt;&#xA;&lt;li&gt;Secret&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;webhook-id&#34;&gt;Webhook ID&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Webhook ID&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;获取配置项&#34;&gt;获取配置项&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;登录开发者 后台 ，切换 Sandbox 账号，新增应用&lt;/li&gt;&#xA;&lt;li&gt;获取 Client ID, Secret， webhook Id&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;创建订阅计划&#34;&gt;创建订阅计划&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;查看所有订阅 &lt;a href=&#34;https://www.paypal.com/billing/overview&#34;&gt;https://www.paypal.com/billing/overview&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;获取Product ID&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;step-登录&#34;&gt;step: 登录&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.paypal.cn/&#34;&gt;https://www.paypal.cn/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>支付方式</title>
      <link>https://bloglee.pages.dev/post/payment-method/</link>
      <pubDate>Mon, 19 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/payment-method/</guid>
      <description>&lt;h2 id=&#34;paypal-cn&#34;&gt;Paypal CN&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.paypal.cn/portal/help/article/458&#34;&gt;PayPal中国个人卖家账户注册指南&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developer.paypal.com/studio/checkout/standard&#34;&gt;PayPal Standard Checkout&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.paypal.cn/portal/help/article/328&#34;&gt;【视频】如何填写PayPal跨境收款中的店铺链接&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Cloudflare Worker 介绍</title>
      <link>https://bloglee.pages.dev/post/cloudflare-worker/</link>
      <pubDate>Fri, 16 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/cloudflare-worker/</guid>
      <description>&lt;h2 id=&#34;environment-variables--环境变量&#34;&gt;Environment variables / 环境变量&lt;/h2&gt;&#xA;&lt;h3 id=&#34;运行时环境变量&#34;&gt;运行时环境变量&lt;/h3&gt;&#xA;&lt;h3 id=&#34;build-time环境变量&#34;&gt;build time环境变量&lt;/h3&gt;</description>
    </item>
    <item>
      <title>打造近乎免费的高端企业邮箱 (Cloudflare &#43; AWS SES &#43; Gmail)</title>
      <link>https://bloglee.pages.dev/post/cloudflare-aws-ses/</link>
      <pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/cloudflare-aws-ses/</guid>
      <description>&lt;p&gt;&lt;strong&gt;背景：&lt;/strong&gt;&#xA;为了给 &lt;code&gt;Example.com&lt;/code&gt; 配置 &lt;code&gt;support@&lt;/code&gt; 企业邮箱，不想买 Google Workspace（$6/月），于是采用了“拼接”方案。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;收信&lt;/strong&gt;：Cloudflare Email Routing（转发到 Gmail）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;发信&lt;/strong&gt;：AWS SES（SMTP 服务）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;客户端&lt;/strong&gt;：Gmail 网页版（统一收发）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-核心架构&#34;&gt;1. 核心架构&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;收件路径&lt;/strong&gt;：客户 -&amp;gt; &lt;code&gt;support@&lt;/code&gt; -&amp;gt; Cloudflare -&amp;gt; 转发至 Gmail。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;发件路径&lt;/strong&gt;：Gmail -&amp;gt; AWS SMTP 接口 -&amp;gt; AWS SES -&amp;gt; 客户。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-配置步骤-cheatsheet&#34;&gt;2. 配置步骤 (Cheatsheet)&lt;/h2&gt;&#xA;&lt;h3 id=&#34;第一步aws-ses-准备-发信引擎&#34;&gt;第一步：AWS SES 准备 (发信引擎)&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;验证域名&lt;/strong&gt;：在 AWS SES (Region: &lt;strong&gt;us-west-2&lt;/strong&gt;) 添加 &lt;code&gt;Example.com&lt;/code&gt;，获取 DKIM 的 3 个 CNAME 记录。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;移出沙盒&lt;/strong&gt;：刚注册是 Sandbox 模式，必须点击 &amp;ldquo;Request Production Access&amp;rdquo;，理由填真实业务用途（如 Transactional emails for users）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;获取凭证&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;入口：SES -&amp;gt; SMTP Settings -&amp;gt; Create SMTP credentials。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;注意&lt;/strong&gt;：下载 CSV 保存好，User/Pass 只显示一次。这不是 AWS 登录密码！&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;第二步dns-配置-cloudflare&#34;&gt;第二步：DNS 配置 (Cloudflare)&lt;/h3&gt;&#xA;&lt;p&gt;为了不进垃圾箱，必须配齐“安保三件套”：&lt;/p&gt;</description>
    </item>
    <item>
      <title>在 Cloudflare Workers 上完美使用 Next.js Image 组件</title>
      <link>https://bloglee.pages.dev/post/cloudflare-images/</link>
      <pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/cloudflare-images/</guid>
      <description>&lt;p&gt;在使用 &lt;code&gt;opennextjs-cloudflare&lt;/code&gt; 部署 Next.js 时，图片优化是一个大坑。&lt;/p&gt;&#xA;&lt;p&gt;最初我尝试了官方的 Binding 模式，但遇到了格式无法自动转换（一直是 JPEG）和缓存配置麻烦的问题。经过摸索，最终切换到了 &lt;strong&gt;Custom Loader&lt;/strong&gt; 模式。这个方案直接利用 Cloudflare 原生的图片转换服务（&lt;code&gt;/cdn-cgi/image/&lt;/code&gt;），不仅无需消耗 Worker 资源，还能强制输出 WebP/AVIF 格式，速度飞快。&lt;/p&gt;</description>
    </item>
    <item>
      <title>creem.io提现</title>
      <link>https://bloglee.pages.dev/post/withdraw-from-creem/</link>
      <pubDate>Tue, 06 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/withdraw-from-creem/</guid>
      <description>&lt;p&gt;本文将详细拆解 &lt;strong&gt;Creem -&amp;gt; Wise -&amp;gt; 支付宝/微信&lt;/strong&gt; 的全链路配置，并重点分享&lt;strong&gt;什么时候提现最省钱&lt;/strong&gt;以及&lt;strong&gt;如何防止 Wise 封号&lt;/strong&gt;的血泪经验。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;-核心资金链路&#34;&gt;💰 核心资金链路&lt;/h2&gt;&#xA;&lt;p&gt;我们的目标是建立一条&lt;strong&gt;损耗最低、合规性最高&lt;/strong&gt;的通道：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wise注册</title>
      <link>https://bloglee.pages.dev/post/register-wise/</link>
      <pubDate>Tue, 06 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/register-wise/</guid>
      <description>&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;63 【【25年3月更新】WISE开设账户(上) - 吃鸡蛋不吐壳 | 小红书 - 你的生活兴趣社区】 😆 6KlmtvuErFrt3hC 😆 &lt;a href=&#34;https://www.xiaohongshu.com/discovery/item/67cedd72000000000903ba7d?source=webshare&amp;amp;xhsshare=pc_web&amp;amp;xsec_token=ABl6rKJ9M8mwoCCVzHT6S9BzMLCVCXCQhnJRAhYkaq6EI=&amp;amp;xsec_source=pc_share&#34;&gt;https://www.xiaohongshu.com/discovery/item/67cedd72000000000903ba7d?source=webshare&amp;xhsshare=pc_web&amp;xsec_token=ABl6rKJ9M8mwoCCVzHT6S9BzMLCVCXCQhnJRAhYkaq6EI=&amp;xsec_source=pc_share&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Cloudflare R2介绍</title>
      <link>https://bloglee.pages.dev/post/cloudflare-r2/</link>
      <pubDate>Mon, 08 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/cloudflare-r2/</guid>
      <description>&lt;h2 id=&#34;r2-计费&#34;&gt;R2 计费&lt;/h2&gt;&#xA;&lt;p&gt;你可以简单记成：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;总共就三笔钱：&lt;strong&gt;存储 + 操作次数 +（如果用 IA）取回费&lt;/strong&gt;。&#xA;出网到互联网（Egress）是免费的。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;存储费用standard-storage&#34;&gt;存储费用（Standard storage）&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;单价：&lt;strong&gt;$0.015 / GB-month&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>国际化中对阿拉伯文的处理</title>
      <link>https://bloglee.pages.dev/post/i18n-of-arabic/</link>
      <pubDate>Sun, 23 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/i18n-of-arabic/</guid>
      <description>&lt;h2 id=&#34;注意&#34;&gt;注意&lt;/h2&gt;&#xA;&lt;p&gt;当你通过 CLI (npx shadcn@latest add &amp;hellip;) 添加组件后，使用编辑器的“全局搜索替换”功能，或者在具体组件文件中手动修改这些类名。&lt;/p&gt;&#xA;&lt;h2 id=&#34;设置阿拉伯文的字体&#34;&gt;设置阿拉伯文的字体&lt;/h2&gt;&#xA;&lt;h2 id=&#34;设置-html-dir-属性&#34;&gt;设置 HTML dir 属性&lt;/h2&gt;&#xA;&lt;h2 id=&#34;directionprovider&#34;&gt;DirectionProvider&lt;/h2&gt;&#xA;&lt;p&gt;是为整个应用提供全局的文本方向上下文（Text Direction Context），特别是指明应用处于 RTL（Right-to-Left，从右向左） 模式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ssl/tls</title>
      <link>https://bloglee.pages.dev/post/ssl-tls/</link>
      <pubDate>Mon, 10 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/ssl-tls/</guid>
      <description>&lt;h2 id=&#34;是什么&#34;&gt;是什么&lt;/h2&gt;&#xA;&lt;p&gt;是用于保障网络通信安全的加密协议&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TLS（Transport Layer Security，传输层安全协议）和&lt;/li&gt;&#xA;&lt;li&gt;SSL（Secure Sockets Layer，安全套接字层）。TLS 是 SSL 的后继版本，现代互联网中几乎所有“SSL”其实都是 &lt;strong&gt;TLS&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;tlsssl-的作用&#34;&gt;TLS/SSL 的作用&lt;/h2&gt;&#xA;&lt;p&gt;TLS/SSL 主要提供三种安全功能：&lt;/p&gt;</description>
    </item>
    <item>
      <title>数字证书</title>
      <link>https://bloglee.pages.dev/post/digital-certificate/</link>
      <pubDate>Mon, 10 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/digital-certificate/</guid>
      <description>&lt;h2 id=&#34;-什么是数字证书digital-certificate&#34;&gt;🪪 什么是数字证书（Digital Certificate）&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;数字证书&lt;/strong&gt;是一种由权威机构（CA, Certificate Authority）签发的电子身份证，&#xA;用来证明“某个公钥确实属于某个实体（网站、公司、个人或设备）”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker介绍</title>
      <link>https://bloglee.pages.dev/post/docker-intro/</link>
      <pubDate>Fri, 07 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/docker-intro/</guid>
      <description>&lt;h2 id=&#34;dokploydockervercel-分别是什么&#34;&gt;Dokploy、Docker、Vercel 分别是什么&lt;/h2&gt;&#xA;&lt;h3 id=&#34;31-docker&#34;&gt;3.1 Docker&lt;/h3&gt;&#xA;&lt;p&gt;Docker 负责把应用及其运行环境打包成容器。&lt;/p&gt;&#xA;&lt;p&gt;例如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&lt;/span&gt;&lt;span&gt;你的 Next.js 代码&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&lt;/span&gt;&lt;span&gt;+ Node.js&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&lt;/span&gt;&lt;span&gt;+ 系统依赖&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&lt;/span&gt;&lt;span&gt;+ 启动命令&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;5&lt;/span&gt;&lt;span&gt;= 一个可运行的 Docker 镜像&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Docker 解决的是：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dokploy介绍</title>
      <link>https://bloglee.pages.dev/post/dokploy-intro/</link>
      <pubDate>Fri, 07 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/dokploy-intro/</guid>
      <description>&lt;h2 id=&#34;3-dokploydockervercel-分别是什么&#34;&gt;3. Dokploy、Docker、Vercel 分别是什么&lt;/h2&gt;&#xA;&lt;h3 id=&#34;31-docker&#34;&gt;3.1 Docker&lt;/h3&gt;&#xA;&lt;p&gt;Docker 负责把应用及其运行环境打包成容器。&lt;/p&gt;&#xA;&lt;p&gt;例如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&lt;/span&gt;&lt;span&gt;你的 Next.js 代码&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&lt;/span&gt;&lt;span&gt;+ Node.js&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&lt;/span&gt;&lt;span&gt;+ 系统依赖&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&lt;/span&gt;&lt;span&gt;+ 启动命令&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;5&lt;/span&gt;&lt;span&gt;= 一个可运行的 Docker 镜像&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Docker 解决的是：&lt;/p&gt;</description>
    </item>
    <item>
      <title>hostinger vps</title>
      <link>https://bloglee.pages.dev/post/hostinger/</link>
      <pubDate>Fri, 07 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/hostinger/</guid>
      <description>&lt;h2 id=&#34;必做事项&#34;&gt;必做事项&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;购买完vps，记得打开防火墙&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>AWS SNS</title>
      <link>https://bloglee.pages.dev/post/aws-sns/</link>
      <pubDate>Sun, 02 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/aws-sns/</guid>
      <description>&lt;h2 id=&#34;什么是-aws-sns&#34;&gt;什么是 AWS SNS&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Amazon SNS&lt;/strong&gt;（Amazon Simple Notification Service）是 AWS 提供的一种 &lt;strong&gt;完全托管的发布/订阅（Pub/Sub）消息服务&lt;/strong&gt;。&#xA;它用于在系统之间传递消息，可以实现 &lt;strong&gt;异步通信、事件分发、通知推送&lt;/strong&gt; 等功能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>IMAP协议</title>
      <link>https://bloglee.pages.dev/post/imap/</link>
      <pubDate>Fri, 31 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/imap/</guid>
      <description>&lt;h2 id=&#34;什么是-imap&#34;&gt;什么是 IMAP&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;IMAP（Internet Message Access Protocol，互联网消息访问协议）&lt;/strong&gt;&#xA;是一种让用户可以&lt;strong&gt;从邮件服务器上访问和管理邮件&lt;/strong&gt;的协议。&lt;/p&gt;&#xA;&lt;p&gt;简单说：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;IMAP 是“收邮件”的协议，用来从服务器上读取邮件，而不是下载后删除。&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>smtp入门和配置</title>
      <link>https://bloglee.pages.dev/post/smtp/</link>
      <pubDate>Fri, 31 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/smtp/</guid>
      <description>&lt;h2 id=&#34;介绍&#34;&gt;介绍&lt;/h2&gt;&#xA;&lt;p&gt;SMTP（Simple Mail Transfer Protocol，简单邮件传输协议）是一种用于发送电子邮件的标准通信协议。&lt;/p&gt;&#xA;&lt;h2 id=&#34;smtp-的作用&#34;&gt;SMTP 的作用&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;任何邮件客户端（Gmail、Outlook、Thunderbird）要发邮件，都要连接一个 SMTP 服务器。&lt;/li&gt;&#xA;&lt;li&gt;如果你用 Gmail 自带的发信通道，它走的是 Google 的 smtp.gmail.com。&lt;/li&gt;&#xA;&lt;li&gt;如果你想发出的是 &lt;a href=&#34;mailto:support@yourdomain.com&#34;&gt;support@yourdomain.com&lt;/a&gt;，你就需要自己或第三方提供的 SMTP 服务器。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;SMTP 是电子邮件系统的**“邮递员”**。&#xA;它主要负责：&lt;/p&gt;</description>
    </item>
    <item>
      <title>常用code agent</title>
      <link>https://bloglee.pages.dev/post/coding-agent/</link>
      <pubDate>Mon, 20 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/coding-agent/</guid>
      <description>&lt;h2 id=&#34;ai-code-agent&#34;&gt;AI Code Agent&lt;/h2&gt;&#xA;&lt;h3 id=&#34;chatgpt-codex&#34;&gt;ChatGPT Codex&lt;/h3&gt;&#xA;&lt;h4 id=&#34;agentsmd&#34;&gt;AGENTS.md&lt;/h4&gt;&#xA;&lt;p&gt;是一个给“编码智能体（coding agents）看的 README”：用 Markdown 写清楚这个仓库怎么跑、怎么测、代码风格、约束与注意事项，让智能体少猜、少走弯路。它是一个开放格式，目标是能被多种 coding agents 识别使用。&#xA;Codex 在开始做任何工作前会读取 AGENTS.md，用来获得项目上下文与额外指令。&lt;/p&gt;</description>
    </item>
    <item>
      <title>家庭常用药</title>
      <link>https://bloglee.pages.dev/post/common-medicine/</link>
      <pubDate>Sun, 12 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/common-medicine/</guid>
      <description>&lt;h2 id=&#34;解热镇痛类&#34;&gt;解热镇痛类&lt;/h2&gt;&#xA;&lt;h3 id=&#34;对乙酰氨基酚--扑热息痛--泰诺&#34;&gt;对乙酰氨基酚 / 扑热息痛 / 泰诺&lt;/h3&gt;&#xA;&lt;h3 id=&#34;对乙酰氨基酚&#34;&gt;对乙酰氨基酚&lt;/h3&gt;&#xA;&lt;p&gt;退烧、轻中度疼痛&lt;/p&gt;&#xA;&lt;h4 id=&#34;扑热息痛&#34;&gt;扑热息痛&lt;/h4&gt;&#xA;&lt;p&gt;是“对乙酰氨基酚”的早期翻译名，在一些国产药包装上仍沿用。&lt;/p&gt;&#xA;&lt;h4 id=&#34;泰诺&#34;&gt;泰诺&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;泰诺是牌子。含有“对乙酰氨基酚”的复方感冒药，由强生公司生产。&lt;/li&gt;&#xA;&lt;li&gt;复方感冒药&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;布洛芬--美林--芬必得&#34;&gt;布洛芬 / 美林 / 芬必得&lt;/h3&gt;&#xA;&lt;h4 id=&#34;布洛芬&#34;&gt;布洛芬&lt;/h4&gt;&#xA;&lt;p&gt;布洛芬 是药的通用名（成分名）。解热、镇痛、抗炎。&lt;/p&gt;</description>
    </item>
    <item>
      <title>tcp协议</title>
      <link>https://bloglee.pages.dev/post/osi/</link>
      <pubDate>Sat, 11 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/osi/</guid>
      <description>&lt;h2 id=&#34;一句话总结-osi&#34;&gt;一句话总结 OSI&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;应用层（L7）&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;HTTP/HTTPS&lt;/strong&gt;：浏览器和服务器说“拿/传网页内容”的通用语言，HTTPS 再加一层加密与身份校验。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;DNS&lt;/strong&gt;：把好记的域名翻译成 IP 地址的“电话簿”。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;SMTP/IMAP/POP3&lt;/strong&gt;：负责“寄信/收信”的电子邮件三件套。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;FTP/SFTP&lt;/strong&gt;：点对点搬文件的“快递员”（SFTP 并加密）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;DHCP&lt;/strong&gt;：自动给设备分配 IP、网关、DNS 的“网络前台”。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;表示层（L6）&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>tcp协议</title>
      <link>https://bloglee.pages.dev/post/tcp/</link>
      <pubDate>Sat, 11 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/tcp/</guid>
      <description>&lt;h2 id=&#34;什么是-tcp&#34;&gt;什么是 TCP？&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;TCP（Transmission Control Protocol，传输控制协议）&lt;/strong&gt;&#xA;是互联网的核心协议之一，属于 &lt;strong&gt;传输层（Transport Layer）&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>加密（Encryption）</title>
      <link>https://bloglee.pages.dev/post/encryption/</link>
      <pubDate>Sat, 11 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/encryption/</guid>
      <description>&lt;hr&gt;&#xA;&lt;h2 id=&#34;-一什么是加密encryption&#34;&gt;🔐 一、什么是加密（Encryption）&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;加密&lt;/strong&gt;是一种把“可读的信息（明文）”转换为“不可读的密文”的技术，&#xA;目的是：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;即使数据被截获，也没人能看懂内容，除非拥有正确的密钥。&lt;/p&gt;</description>
    </item>
    <item>
      <title>iphone的功能介绍</title>
      <link>https://bloglee.pages.dev/post/iphone/</link>
      <pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/iphone/</guid>
      <description>&lt;p&gt;下面的是几个iphone常见的功能&lt;/p&gt;&#xA;&lt;h2 id=&#34;安全相关&#34;&gt;安全相关&lt;/h2&gt;&#xA;&lt;h3 id=&#34;查找&#34;&gt;查找&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;查询设备在的位置&lt;/li&gt;&#xA;&lt;li&gt;如果手机丢失，可以启用丢失模式&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;失窃设备保护&#34;&gt;失窃设备保护&lt;/h3&gt;&#xA;&lt;p&gt;打开之后，进行敏感操作，需要面容id或者安全延迟。&lt;/p&gt;</description>
    </item>
    <item>
      <title>对象存储</title>
      <link>https://bloglee.pages.dev/post/object-storage/</link>
      <pubDate>Thu, 18 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/object-storage/</guid>
      <description>&lt;h2 id=&#34;1-定义&#34;&gt;1. 定义&lt;/h2&gt;&#xA;&lt;p&gt;对象存储是一种 &lt;strong&gt;以“对象（Object）”为基本单位&lt;/strong&gt; 的存储架构。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;对象&lt;/strong&gt; = 数据本体（文件内容） + 元数据（描述信息） + 唯一标识（Key/ID）。&lt;/li&gt;&#xA;&lt;li&gt;数据以扁平化的方式存放，不依赖文件目录层级。&lt;/li&gt;&#xA;&lt;li&gt;通过 &lt;strong&gt;HTTP/HTTPS API&lt;/strong&gt;（REST/SDK）访问，而不是文件路径或块地址。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-为什么叫对象存储&#34;&gt;2. 为什么叫“对象存储”&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;存储单位是“对象”，而不是“文件”或“块”。&lt;/li&gt;&#xA;&lt;li&gt;每个对象自带完整的元数据，类似面向对象编程中的“自描述对象”。&lt;/li&gt;&#xA;&lt;li&gt;关注的是数据整体，而不是底层细节。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;类比：&lt;/p&gt;</description>
    </item>
    <item>
      <title>集成 Paddle 支付</title>
      <link>https://bloglee.pages.dev/post/integrate-paddle/</link>
      <pubDate>Mon, 08 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/integrate-paddle/</guid>
      <description>&lt;h2 id=&#34;常见链接&#34;&gt;常见链接&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developer.paddle.com/build/onboarding/overview&#34;&gt;Get started&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developer.paddle.com/build/tools/sandbox&#34;&gt;Sandbox accounts&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://sandbox-vendors.paddle.com/onboarding/get-started&#34;&gt;Sandbox 环境&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developer.paddle.com/api-reference/overview&#34;&gt;API reference&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developer.paddle.com/webhooks/overview&#34;&gt;Webhooks&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developer.paddle.com/api-reference/about/paddle-ids&#34;&gt;Paddle Ids&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;配置&#34;&gt;配置&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;去 Paddle Dashboard 检查你的 dunning 设置，如果是订阅相关，优先开启 Retain。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;test-cards&#34;&gt;Test Cards&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://developer.paddle.com/concepts/payment-methods/credit-debit-card#test-payment-method&#34;&gt;https://developer.paddle.com/concepts/payment-methods/credit-debit-card#test-payment-method&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can test cards using your Paddle sandbox account.&lt;/p&gt;&#xA;&lt;p&gt;Open a checkout, then use these card details to test payment by card:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Card type&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Card number&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;CVC&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Valid Visa debit card&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;4000 0566 5566 5556&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Valid card without 3DS&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;4242 4242 4242 4242&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Valid card with 3DS&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;4000 0038 0000 0446&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Declined card&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;4000 0000 0000 0002&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Successful initial transaction, subsequent declined transactions&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;4000 0027 6000 3184&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;步骤&#34;&gt;步骤&lt;/h2&gt;&#xA;&lt;h3 id=&#34;step-沙盒环境&#34;&gt;step 沙盒环境&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://sandbox-login.paddle.com/login&#34;&gt;https://sandbox-login.paddle.com/login&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bcrypt Hash(哈希)</title>
      <link>https://bloglee.pages.dev/post/into-to-bcrypt/</link>
      <pubDate>Sun, 31 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/into-to-bcrypt/</guid>
      <description>&lt;hr&gt;&#xA;&lt;h1 id=&#34;一注册流程register--sign-up&#34;&gt;一、注册流程（Register / Sign-up）&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;用户输入密码&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;用户在注册页面输入密码，例如 &lt;code&gt;&amp;quot;MyP@ssw0rd!&amp;quot;&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;后端生成哈希&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;后端接收到明文密码后，调用 bcrypt：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hash(哈希)介绍</title>
      <link>https://bloglee.pages.dev/post/into-to-hash/</link>
      <pubDate>Sun, 31 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/into-to-hash/</guid>
      <description>&lt;h2 id=&#34;什么是哈希&#34;&gt;什么是哈希&lt;/h2&gt;&#xA;&lt;p&gt;哈希（Hash） 就是把任意长度的输入数据（比如一段文字、一个文件）通过某种 算法，转换成一个 固定长度的字符串。可以理解成 “数据指纹”。&lt;/p&gt;&#xA;&lt;h2 id=&#34;主要目的&#34;&gt;主要目的&lt;/h2&gt;&#xA;&lt;p&gt;保证完整性（Integrity）：验证数据完整 → 数据有没有被改&lt;/p&gt;</description>
    </item>
    <item>
      <title>JWT介绍</title>
      <link>https://bloglee.pages.dev/post/intro-to-jwt/</link>
      <pubDate>Fri, 29 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/intro-to-jwt/</guid>
      <description>&lt;h2 id=&#34;工作流程简单版&#34;&gt;工作流程（简单版）&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;你登录网站 → 网站验证成功 → 生成一个 JWT → 返回给你。&lt;/li&gt;&#xA;&lt;li&gt;你的浏览器保存这个 JWT（通常放在 LocalStorage 或 Cookie）。&lt;/li&gt;&#xA;&lt;li&gt;以后你访问网站 → 把 JWT 一起带过去。&lt;/li&gt;&#xA;&lt;li&gt;网站看到 JWT → 验证合法 → 知道你是你 → 允许访问。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;jwt-的优点&#34;&gt;JWT 的优点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;无状态：服务器不需要保存你的登录信息，只要验证 JWT 就行。&lt;/li&gt;&#xA;&lt;li&gt;通用：移动端、网页、甚至不同系统之间都可以用。&lt;/li&gt;&#xA;&lt;li&gt;安全：别人即使看到 JWT 内容，也不能随便改，因为有签名保护。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;生成-jwt-逻辑&#34;&gt;生成 JWT 逻辑&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;验证用户身份&lt;/li&gt;&#xA;&lt;li&gt;生成 Payload（包含用户ID、过期时间等）&lt;/li&gt;&#xA;&lt;li&gt;用秘钥签名，得到 JWT&lt;/li&gt;&#xA;&lt;li&gt;返回给前端（响应体 or Cookie）&lt;/li&gt;&#xA;&lt;li&gt;前端保存 Token，后续请求时带上&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>AWS ses</title>
      <link>https://bloglee.pages.dev/post/aws-ses/</link>
      <pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/aws-ses/</guid>
      <description>&lt;h2 id=&#34;什么是-ses&#34;&gt;什么是 SES&lt;/h2&gt;&#xA;&lt;p&gt;是亚马逊提供的一个高可用、可扩展的云邮件发送服务，可以用于：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;发送事务性邮件（例如验证码、密码重置）；&lt;/li&gt;&#xA;&lt;li&gt;发送营销邮件（例如促销通知、活动邀请）；&lt;/li&gt;&#xA;&lt;li&gt;接收或转发邮件。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;沙盒&#34;&gt;沙盒&lt;/h2&gt;&#xA;&lt;p&gt;生产环境中，需要移除沙盒&lt;/p&gt;</description>
    </item>
    <item>
      <title>AWS ses</title>
      <link>https://bloglee.pages.dev/post/config-sentry/</link>
      <pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/config-sentry/</guid>
      <description>&lt;h2 id=&#34;手动配置&#34;&gt;手动配置&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/&#34;&gt;https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;配置dsn&#34;&gt;配置DSN&lt;/h3&gt;&#xA;&lt;h4 id=&#34;防止额度被盗刷重要防护&#34;&gt;防止额度被盗刷（重要防护）&lt;/h4&gt;&#xA;&lt;h3 id=&#34;配置采样率&#34;&gt;配置采样率&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 1&lt;/span&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 2&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// 1. 错误追踪：前期建议 100% 捕获，因为你是单兵作战，每个报错都很重要&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;sampleRate&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 4&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 5&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// 2. 性能追踪 (Transactions)：这是最费钱的&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 6&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// 建议设置极低，比如 0.1 (10%) 甚至 0.05 (5%)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 7&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// 你不需要监控每一个用户的页面加载速度，只需要一个统计趋势&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 8&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;tracesSampleRate&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0.1&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 9&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;10&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// 3. Session Replay (回放)：非常贵且耗流量&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;11&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// 正常会话不录屏，只有报错时才录屏 100%&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;12&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;replaysSessionSampleRate&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;13&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;replaysOnErrorSampleRate&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;14&lt;/span&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;过滤垃圾报错&#34;&gt;过滤垃圾报错&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Sentry&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;init&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 2&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// 简单粗暴的忽略列表&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;ignoreErrors&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 4&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ResizeObserver loop limit exceeded&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;// 经典良性错误，无视&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Non-Error promise rejection captured&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 6&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Network Error&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;// 用户断网，不用报给我&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 7&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Failed to fetch&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;// 同上&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 8&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Loading chunk&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;// 网络波动导致懒加载失败&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 9&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;10&lt;/span&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;11&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// 或者使用更高级的 beforeSend 过滤&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;12&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;beforeSend&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;event&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;hint&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;13&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;hint&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;originalException&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;14&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 过滤掉爬虫 (User Agent 判断)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;15&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;event&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;request&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt;.[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;User-Agent&amp;#39;&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;includes&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Googlebot&amp;#39;&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;16&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;17&lt;/span&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;18&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;event&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;19&lt;/span&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;20&lt;/span&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;上传-source-maps&#34;&gt;上传 Source Maps&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;获取 Sentry Auth Token (专用上传令牌): User Settings -&amp;gt; Developer Settings -&amp;gt; Personal Settings&lt;/li&gt;&#xA;&lt;li&gt;配置 Cloudflare 环境变量&lt;/li&gt;&#xA;&lt;li&gt;配置 next.config.mjs (SDK v8 语法)&lt;/li&gt;&#xA;&lt;li&gt;验证上传是否成功&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;关联用户身份-user-context&#34;&gt;关联用户身份 (User Context)&lt;/h3&gt;&#xA;&lt;h2 id=&#34;脚本配置&#34;&gt;脚本配置&lt;/h2&gt;&#xA;&lt;h3 id=&#34;第一步准备-sentry-项目&#34;&gt;第一步：准备 Sentry 项目&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;注册/登录 &lt;a href=&#34;https://sentry.io&#34;&gt;sentry.io&lt;/a&gt;。&lt;/li&gt;&#xA;&lt;li&gt;点击 &lt;strong&gt;Create Project&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;li&gt;选择平台：&lt;strong&gt;Next.js&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Alert Frequency&lt;/strong&gt;：建议选 &amp;ldquo;I&amp;rsquo;ll create my own alerts later&amp;rdquo;（避免初始邮件轰炸）。&lt;/li&gt;&#xA;&lt;li&gt;输入项目名称（例如 &lt;code&gt;my-saas-frontend&lt;/code&gt;），点击 Create Project。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;第二步使用官方向导自动安装-推荐&#34;&gt;第二步：使用官方向导自动安装 (推荐)&lt;/h3&gt;&#xA;&lt;p&gt;复制官方向导命令，打开你的 Next.js 项目终端，运行命令：&lt;/p&gt;</description>
    </item>
    <item>
      <title>next-auth 介绍</title>
      <link>https://bloglee.pages.dev/post/into-to-next-auth/</link>
      <pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/into-to-next-auth/</guid>
      <description>&lt;h2 id=&#34;oauth-授权&#34;&gt;OAuth 授权&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;用户在 Google 页面同意授权（选择账号、允许权限）&lt;/li&gt;&#xA;&lt;li&gt;Google 返回授权码（authorization code）到 NextAuth 配置的回调 URL（默认是 /api/auth/callback/google）。&lt;/li&gt;&#xA;&lt;li&gt;NextAuth 收到 Google 返回的授权码&lt;/li&gt;&#xA;&lt;li&gt;使用 Google 的 client_id 和 client_secret 去请求访问 token 和用户信息&lt;/li&gt;&#xA;&lt;li&gt;获取用户信息（如 email、name、avatar）&lt;/li&gt;&#xA;&lt;li&gt;在 authorize 或 callbacks.signIn 中，你可以：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在数据库查找或创建用户。&lt;/li&gt;&#xA;&lt;li&gt;设置用户的权限或角色信息。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;NextAuth 生成一个 JWT 或 session cookie（取决于配置 session.strategy）。&lt;/li&gt;&#xA;&lt;li&gt;用户的会话信息会存储在 cookie 中，并包含一些用户信息或权限.&lt;/li&gt;&#xA;&lt;li&gt;调用 signOut()。&#xA;&lt;ul&gt;&#xA;&lt;li&gt;NextAuth 清空 cookie，会话失效。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;credentials-provider&#34;&gt;Credentials Provider&lt;/h2&gt;&#xA;&lt;h2 id=&#34;email-provider&#34;&gt;Email Provider&lt;/h2&gt;&#xA;&lt;h2 id=&#34;问题&#34;&gt;问题&lt;/h2&gt;&#xA;&lt;p&gt;JWT vs token&lt;/p&gt;</description>
    </item>
    <item>
      <title>集成Fal.ai的大模型</title>
      <link>https://bloglee.pages.dev/post/integrate-fal.ai/</link>
      <pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/integrate-fal.ai/</guid>
      <description></description>
    </item>
    <item>
      <title>集成Creem.io订阅支付</title>
      <link>https://bloglee.pages.dev/post/integrate-creem.io/</link>
      <pubDate>Fri, 15 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/integrate-creem.io/</guid>
      <description>&lt;h2 id=&#34;creem&#34;&gt;Creem&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Creem 一个主账号下可以创建多个 Store，1 个网站建立一个 store&lt;/li&gt;&#xA;&lt;li&gt;Stripe 一个主账号下可以创建多个 Account&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;集成&#34;&gt;集成&lt;/h2&gt;&#xA;&lt;h3 id=&#34;需要-api-key&#34;&gt;需要 API Key&lt;/h3&gt;&#xA;&lt;p&gt;进入下面的路径，&lt;code&gt;home&lt;/code&gt; -&amp;gt; &lt;code&gt;Developers&lt;/code&gt; -&amp;gt; &lt;code&gt;API Keys&lt;/code&gt;, 复制并保存 &lt;code&gt;API Key&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>在fal.ai平台训练和使用LoRA</title>
      <link>https://bloglee.pages.dev/post/use-lora-in-fal-ai/</link>
      <pubDate>Sat, 09 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/use-lora-in-fal-ai/</guid>
      <description>&lt;h3 id=&#34;lora-知识体系总结&#34;&gt;LoRA 知识体系总结&lt;/h3&gt;&#xA;&lt;h3 id=&#34;1-核心概念lora-到底是什么&#34;&gt;1. 核心概念：LoRA 到底是什么？&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;官方名称&lt;/strong&gt;：LoRA (Low-Rank Adaptation) 是一种高效的AI模型微调技术。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;核心思想&lt;/strong&gt;：它不是从零开始训练一个巨大的新模型，而是在一个已经非常强大的&lt;strong&gt;基础模型&lt;/strong&gt;（如 FLUX.1 Krea）之上，创建一个小型的、像“&lt;strong&gt;插件&lt;/strong&gt;”或“&lt;strong&gt;补丁&lt;/strong&gt;”一样的文件（通常是 &lt;code&gt;.safetensors&lt;/code&gt; 格式）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;最佳比喻&lt;/strong&gt;：您可以将 LoRA 文件想象成一本**“私房菜谱”**。&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;基础模型&lt;/strong&gt;是一位全能的**“米其林大厨”**。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;LoRA 文件&lt;/strong&gt;是您教给大厨的、关于**“您家乡的特色菜”**的菜谱。&lt;/li&gt;&#xA;&lt;li&gt;大厨结合自己的高超厨艺和您的私房菜谱，就能做出独一无二的、带有您个人风格的菜肴。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;2-核心优势为什么要用-lora&#34;&gt;2. 核心优势：为什么要用 LoRA？&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;高度个性化&lt;/strong&gt;：能够让 AI 稳定地生成特定的&lt;strong&gt;人物&lt;/strong&gt;（数字分身）、&lt;strong&gt;物体&lt;/strong&gt;（产品）或&lt;strong&gt;艺术风格&lt;/strong&gt;（您的专属画风）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;高效且轻便&lt;/strong&gt;：LoRA 文件通常很小（几 MB 到几百 MB），训练速度快，易于分享和管理。相比之下，完整的基础模型可能有几十 GB 大。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;灵活性&lt;/strong&gt;：您可以将不同的 LoRA 组合使用，并通过调整权重（Scale）来控制每个 LoRA 的影响强度。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;3-两大核心角色lora-的生命周期&#34;&gt;3. 两大核心角色：LoRA 的生命周期&lt;/h3&gt;&#xA;&lt;p&gt;在 Fal.ai 等平台上，使用 LoRA 的整个流程被清晰地划分为两个不同角色的模型：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vercel常见问题</title>
      <link>https://bloglee.pages.dev/post/common-quesions-of-vercel/</link>
      <pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/common-quesions-of-vercel/</guid>
      <description>&lt;h2 id=&#34;fast-origin-transfer&#34;&gt;Fast Origin Transfer&lt;/h2&gt;&#xA;&lt;p&gt;是 Vercel 全球边缘网络（Edge Network）中的一项核心技术，旨在大幅降低动态内容从源服务器（Origin）传输到用户边缘节点的延迟。&lt;/p&gt;&#xA;&lt;h3 id=&#34;发生在以下场景中&#34;&gt;发生在以下场景中：&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;当用户请求的内容未被缓存（即缓存未命中，cache miss）时，Vercel 的边缘网络需要从源服务器（例如 Vercel 的 Serverless Functions、Middleware 或 Incremental Static Regeneration (ISR)）获取数据。&lt;/li&gt;&#xA;&lt;li&gt;这些数据从源服务器传输到边缘网络时，会产生 Fast Origin Transfer 的使用量。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;解决了什么问题&#34;&gt;解决了什么问题&lt;/h3&gt;&#xA;&lt;p&gt;即使你的静态资源（如图片、CSS）通过 CDN 全球分发很快，但动态生成的内容（如通过 Serverless Function 查询数据库返回的数据）仍然可能因为源服务器的地理位置而变慢。&lt;/p&gt;</description>
    </item>
    <item>
      <title>冥想</title>
      <link>https://bloglee.pages.dev/post/meditation/</link>
      <pubDate>Wed, 25 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/meditation/</guid>
      <description>&lt;h2 id=&#34;什么是冥想&#34;&gt;什么是冥想&lt;/h2&gt;&#xA;&lt;p&gt;冥想是一种锻炼心智的方法，核心在于将注意力集中于一点，从而让纷乱的思绪平静下来。 冥想并非要你“清空大脑”，而是学习有意识地、不加评判地观察自己的念头和情绪，并温和地将注意力带回到专注点上。&lt;/p&gt;</description>
    </item>
    <item>
      <title>翻墙的知识</title>
      <link>https://bloglee.pages.dev/post/%E7%BF%BB%E5%A2%99/</link>
      <pubDate>Tue, 17 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/%E7%BF%BB%E5%A2%99/</guid>
      <description>&lt;h2 id=&#34;翻墙的种类&#34;&gt;翻墙的种类&lt;/h2&gt;&#xA;&lt;h3 id=&#34;vpn&#34;&gt;VPN&lt;/h3&gt;&#xA;&lt;p&gt;本质不是用来翻墙的。&lt;/p&gt;&#xA;&lt;h3 id=&#34;shaowsocks-系列&#34;&gt;ShaowSocks 系列&lt;/h3&gt;&#xA;&lt;p&gt;本地加密 + 远程服务器加密。下面的协议，有的即是协议，又是客户端。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ShadowSocks&lt;/li&gt;&#xA;&lt;li&gt;ShadowSocksR&lt;/li&gt;&#xA;&lt;li&gt;V2ray&lt;/li&gt;&#xA;&lt;li&gt;VMess&lt;/li&gt;&#xA;&lt;li&gt;Trojan&lt;/li&gt;&#xA;&lt;li&gt;Clash&lt;/li&gt;&#xA;&lt;li&gt;Surge&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;硬件翻墙-路由器翻墙&#34;&gt;硬件翻墙 路由器翻墙&lt;/h3&gt;&#xA;&lt;p&gt;把翻墙软件部署在了路由器上了&lt;/p&gt;</description>
    </item>
    <item>
      <title>MCP基础知识</title>
      <link>https://bloglee.pages.dev/post/basics-of-mcp/</link>
      <pubDate>Thu, 05 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/basics-of-mcp/</guid>
      <description>&lt;p&gt;M&lt;/p&gt;</description>
    </item>
    <item>
      <title>windows 任务计划程序</title>
      <link>https://bloglee.pages.dev/post/winows-task-scheduler/</link>
      <pubDate>Thu, 05 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/winows-task-scheduler/</guid>
      <description>&lt;h3 id=&#34;什么是-windows-&#34;&gt;什么是 Windows ？&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;任务计划程序&lt;/strong&gt;（Task Scheduler）是 Windows 操作系统内置的一个工具，它可以让你的电脑在指定的时间或条件下自动执行某些任务。简单来说，它就像一个“智能闹钟”，可以帮你自动运行程序、脚本，或者完成一些重复性的工作，而不需要你手动去操作。&lt;/p&gt;</description>
    </item>
    <item>
      <title>科学上网</title>
      <link>https://bloglee.pages.dev/post/cross-the-wall/</link>
      <pubDate>Mon, 19 May 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/cross-the-wall/</guid>
      <description>&lt;h2 id=&#34;资料&#34;&gt;资料&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/233boy/v2ray/wiki/V2Ray%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85%E8%84%9A%E6%9C%AC&#34;&gt;V2Ray 一键安装脚本&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/aiboboxx/v2rayfree&#34;&gt;公益免费 v2ray 节点订阅 每日更新 &lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;步骤&#34;&gt;步骤&lt;/h2&gt;&#xA;&lt;h3 id=&#34;配置服务器实例&#34;&gt;配置服务器实例&lt;/h3&gt;&#xA;&lt;h4 id=&#34;登录-ec2&#34;&gt;登录 EC2&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://aws.amazon.com/cn/ec2/&#34;&gt;https://aws.amazon.com/cn/ec2/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;服务器脚本配置&#34;&gt;服务器脚本配置&lt;/h3&gt;&#xA;&lt;p&gt;运行下面的命令：&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;bash &amp;lt;(wget -qO- -o- https://git.io/v2ray.sh)&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;配置服务器安全组&#34;&gt;配置服务器安全组&lt;/h3&gt;&#xA;&lt;p&gt;开启相关的端口&lt;/p&gt;</description>
    </item>
    <item>
      <title>llms.txt配置</title>
      <link>https://bloglee.pages.dev/post/llms.txt/</link>
      <pubDate>Fri, 09 May 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/llms.txt/</guid>
      <description>&lt;h2 id=&#34;什么是llmstxt&#34;&gt;什么是llms.txt&lt;/h2&gt;&#xA;&lt;h2 id=&#34;配置-llmxtxt-增加流量&#34;&gt;配置 llmx.txt 增加流量&lt;/h2&gt;</description>
    </item>
    <item>
      <title>Cloudflare 企业邮箱</title>
      <link>https://bloglee.pages.dev/post/cloudflare-enterprise-email/</link>
      <pubDate>Tue, 29 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/cloudflare-enterprise-email/</guid>
      <description>&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://techins.xyz/effortless-business-email-setup-with-cloudflare-and-gmail&#34;&gt;https://techins.xyz/effortless-business-email-setup-with-cloudflare-and-gmail&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;发信&#34;&gt;发信&lt;/h2&gt;&#xA;&lt;h3 id=&#34;配置&#34;&gt;配置&lt;/h3&gt;&#xA;&lt;h4 id=&#34;路径&#34;&gt;路径&lt;/h4&gt;&#xA;&lt;p&gt;Settings -&amp;gt; Accounts and Import -&amp;gt; Send mail as -&amp;gt; Add another email address&lt;/p&gt;&#xA;&lt;h4 id=&#34;配置项&#34;&gt;配置项&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;名称：你希望用户看到的&lt;/li&gt;&#xA;&lt;li&gt;Email address：用来让收件人看到的地址&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;点击下一步，配置 smtp 弹框&lt;/p&gt;&#xA;&lt;h4 id=&#34;配置-smtp&#34;&gt;配置 smtp&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SMTP 服务器：smtp.gmail.com (选择使用 Gmail 的 SMTP（smtp.gmail.com）,这封信是从你的 Gmail 账户 发送的，&#xA;Gmail 只是帮你在邮件的「From（发件人）」字段里显示另一个邮箱地址。)&lt;/li&gt;&#xA;&lt;li&gt;用户名：您的 Gmail 邮箱地址，你用来代发的邮箱&lt;/li&gt;&#xA;&lt;li&gt;密码：您的 Gmail 应用专用密码（非常重要，普通密码不适用，下面会介绍如何获取这个密码，如果密码错误会有如下图所示的报错）&lt;/li&gt;&#xA;&lt;li&gt;勾选 TLS 选项：&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;开启两步验证&#34;&gt;开启两步验证&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://myaccount.google.com/security&#34;&gt;https://myaccount.google.com/security&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;2-Step Verification&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;创建应用密码&#34;&gt;创建应用密码&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;访问：https://myaccount.google.com/apppasswords&lt;/li&gt;&#xA;&lt;li&gt;输入名字，点击创建，保存生成的密码，&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Hugo基础知识</title>
      <link>https://bloglee.pages.dev/post/basics-of-hugo/</link>
      <pubDate>Sat, 05 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/basics-of-hugo/</guid>
      <description>&lt;h2 id=&#34;名词术语&#34;&gt;名词术语&lt;/h2&gt;&#xA;&lt;h3 id=&#34;front-matter&#34;&gt;Front matter&lt;/h3&gt;&#xA;&lt;p&gt;“Front matter” 中文通常翻译为 “前言” 或 “元数据区块”，在编程和内容管理系统中，它有一个特定的含义，尤其是在静态网站生成器（如 Hugo、Jekyll、Hexo 等）中非常常见。&#xA;Front matter 是在文件最开始，用来描述该文件的一些元信息（metadata）的内容块。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cloudflare Tunnel配置</title>
      <link>https://bloglee.pages.dev/post/cloudflare-tunnel/</link>
      <pubDate>Sun, 30 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/cloudflare-tunnel/</guid>
      <description>&lt;h2 id=&#34;cloudflare-tunnel-配置&#34;&gt;Cloudflare Tunnel 配置&lt;/h2&gt;</description>
    </item>
    <item>
      <title>集成谷歌登录</title>
      <link>https://bloglee.pages.dev/post/integrate-google-auth/</link>
      <pubDate>Sat, 29 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/integrate-google-auth/</guid>
      <description>&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/SoraWebui/SoraWebui/blob/login/help/Google-Auth.zh-CN.md&#34;&gt;https://github.com/SoraWebui/SoraWebui/blob/login/help/Google-Auth.zh-CN.md&lt;/a&gt;: 这个文档有点老旧，不符合现在最新的操作流程。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;申请&#34;&gt;申请&lt;/h2&gt;&#xA;&lt;p&gt;网址： &lt;a href=&#34;https://console.cloud.google.com&#34;&gt;https://console.cloud.google.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;step-新建-project&#34;&gt;Step: 新建 Project&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Project Name: 随便填写&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;step-选择这个项目&#34;&gt;Step: 选择这个项目&lt;/h2&gt;&#xA;&lt;p&gt;进入这个项目的控制面板页面&lt;/p&gt;&#xA;&lt;h2 id=&#34;step-进入-credentials-页面&#34;&gt;Step: 进入 Credentials 页面&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;路径：&lt;code&gt;APIs &amp;amp; Services&lt;/code&gt; -&amp;gt; &lt;code&gt;Credentials&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;点击 &lt;code&gt;Configure Consent Sreeen&lt;/code&gt;按钮，然后点击&lt;code&gt;Get Started&lt;/code&gt;按钮，进入 &lt;code&gt;Project configuration&lt;/code&gt; 页面&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;进入-project-configuration-页面&#34;&gt;进入 Project configuration 页面&lt;/h3&gt;&#xA;&lt;p&gt;开始填写下面的配置项:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cloudflare R2 配置</title>
      <link>https://bloglee.pages.dev/post/config-cloudflare-r2/</link>
      <pubDate>Thu, 27 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/config-cloudflare-r2/</guid>
      <description>&lt;p&gt;参考资料：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.cloudflare.com/r2/examples/aws/aws-sdk-js-v3/&#34;&gt;https://developers.cloudflare.com/r2/examples/aws/aws-sdk-js-v3/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;需要获得这几个-key&#34;&gt;需要获得这几个 key&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;R2_ACCOUNT_ID: 一个账号是一个 ID&lt;/li&gt;&#xA;&lt;li&gt;R2_ACCESS_KEY_ID:&lt;/li&gt;&#xA;&lt;li&gt;R2_SECRET_ACCESS_KEY&lt;/li&gt;&#xA;&lt;li&gt;R2_BUCKET_NAME: Bucket的name&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;步骤&#34;&gt;步骤&lt;/h2&gt;&#xA;&lt;h3 id=&#34;step-创建-bucket&#34;&gt;Step: 创建 Bucket&lt;/h3&gt;&#xA;&lt;h3 id=&#34;通过接口访问&#34;&gt;通过接口访问&lt;/h3&gt;&#xA;&lt;h4 id=&#34;step-生成-api-key&#34;&gt;Step: 生成 API Key&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;R2&lt;/code&gt; → &lt;code&gt;&amp;quot;Manage R2 API Tokens&amp;quot;&lt;/code&gt; → &lt;code&gt;Create API Token&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;选择 Edit 权限 → 选择对应的 Bucket&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;记录：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Access Key ID&lt;/li&gt;&#xA;&lt;li&gt;Secret Access Key&lt;/li&gt;&#xA;&lt;li&gt;Account ID（在 R2 页面右上角）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;step-配置域名来获得-public-access&#34;&gt;Step: 配置域名来获得 Public Access&lt;/h4&gt;&#xA;&lt;p&gt;设置自定义域名 &lt;code&gt;s.example.com&lt;/code&gt;来获得 public access&lt;/p&gt;</description>
    </item>
    <item>
      <title>集成 Lemon Squeezy支付</title>
      <link>https://bloglee.pages.dev/post/integrate-lemonsqueezy/</link>
      <pubDate>Thu, 27 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/integrate-lemonsqueezy/</guid>
      <description>&lt;h2 id=&#34;需要配置下面的配置项&#34;&gt;需要配置下面的配置项&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;API Key：配置API key，开发环境和生产环境不一样&lt;/li&gt;&#xA;&lt;li&gt;Store id: 同一个Store的下的所有的产品的store id都是一样的&lt;/li&gt;&#xA;&lt;li&gt;Webhook singing secret&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;step-在test-mode下面进行测试&#34;&gt;Step: 在test mode下面进行测试&lt;/h2&gt;&#xA;&lt;p&gt;进入Lemon Squeezy后台之后，左下角有一个&lt;code&gt;Test Mode&lt;/code&gt;的Switch，打开test mode.&lt;/p&gt;</description>
    </item>
    <item>
      <title>美食</title>
      <link>https://bloglee.pages.dev/post/delicious-food/</link>
      <pubDate>Wed, 26 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/delicious-food/</guid>
      <description>&lt;h2 id=&#34;食材&#34;&gt;食材&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;血糯米&lt;/li&gt;&#xA;&lt;li&gt;白糯米&lt;/li&gt;&#xA;&lt;li&gt;黄油：黄油通常通过搅拌奶油（从牛奶中分离出的脂肪部分）制成。&lt;/li&gt;&#xA;&lt;li&gt;芋泥：是一种以芋头为主要原料制成的食品，通常呈泥状或膏状，口感绵密、香甜，是许多甜品和菜肴中的常见成分。&lt;/li&gt;&#xA;&lt;li&gt;紫薯粉：是以紫薯（紫甘薯，学名 Ipomoea batatas）为原料，经过清洗、蒸煮、烘干、研磨等工艺制成的粉状食材。&lt;/li&gt;&#xA;&lt;li&gt;炼乳：（condensed milk）是一种经过浓缩处理的乳制品，通常由牛奶通过加热蒸发水分并添加糖制成。它味道甜腻、质地浓稠，是许多甜品和饮品的常见配料。&lt;/li&gt;&#xA;&lt;li&gt;淡奶油：（whipping cream 或 light cream）是一种从牛奶中分离出的乳脂肪制品，脂肪含量通常在 30%-38% 之间（比全脂牛奶高，但低于浓稠的重奶油）。它质地轻盈，适合打发成奶油或用于烹饪、烘焙。&lt;/li&gt;&#xA;&lt;li&gt;糯米粉：（sticky rice flour 或 glutinous rice flour）是以糯米为原料，经过浸泡、研磨、干燥等工艺制成的细腻粉末。&lt;/li&gt;&#xA;&lt;li&gt;水磨糯米粉：（Wet-milled Sticky Rice Flour）是一种用糯米经过水磨工艺制成的细腻粉末，是中式传统食材之一，尤其在制作点心和甜品中应用广泛。“水磨”是指将糯米浸泡后，用水和石磨（或现代研磨设备）磨成细腻的米浆，再经过过滤、沉淀、干燥等步骤制成粉末。&lt;/li&gt;&#xA;&lt;li&gt;杨枝甘露：是一款起源于香港的经典港式甜品，以其清爽的口感和丰富的层次感深受喜爱。常见组成：芒果、西米、柚子、椰奶或淡奶油、糖水或冰糖。&lt;/li&gt;&#xA;&lt;li&gt;肉松：（rousong 或 meat floss）是一种传统的中国肉制品，以其松软细腻的口感和浓郁的肉香而闻名。它是将肉类经过炖煮、撕碎、炒干并调味制成的干燥纤维状食品，常作为零食、配料或佐餐食用。&lt;/li&gt;&#xA;&lt;li&gt;小麦淀粉: 纯淀粉，蛋白质含量极低，主要用于增稠（如汤、酱料）或制作透明面皮（如水晶饺子、肠粉）。&lt;/li&gt;&#xA;&lt;li&gt;小麦粉：包含淀粉（约70-75%）、蛋白质（主要是面筋，8-15%）、少量脂肪、纤维和微量元素。广泛用于制作面食（如面包、面条、饺子皮），因面筋提供结构和弹性。&lt;/li&gt;&#xA;&lt;li&gt;草莓果酱： 用新鲜或冷冻草莓为主要原料，加入糖、柠檬汁等辅料，经过熬煮制成的果酱。&lt;/li&gt;&#xA;&lt;li&gt;咸蛋黄肉松：是一种结合了咸蛋黄和肉松两种食材的美食搭配，在亚洲尤其是中国和东南亚地区非常受欢迎。&lt;/li&gt;&#xA;&lt;li&gt;黄油薄脆： （Butter Crisps 或 Butter Crackers）是一种以黄油为主要风味特色的酥脆小点心，通常作为零食或下午茶的搭配食用。&lt;/li&gt;&#xA;&lt;li&gt;奥利奥碎：（Oreo Crumbs）是指将奥利奥饼干（Oreo）碾碎或打碎后得到的细小颗粒，通常用于甜点制作或装饰。&lt;/li&gt;&#xA;&lt;li&gt;水淀粉：（Water Starch）是一种由淀粉和水混合制成的液体，通常用于烹饪中作为勾芡或增稠的工具。它在中国菜中尤其常见，能让菜肴的汤汁更加浓稠、顺滑，提升口感和视觉效果。&lt;/li&gt;&#xA;&lt;li&gt;荔浦芋头：广西壮族自治区桂林市荔浦市的特产，被誉为“中国芋头之王”。它因个头大、口感粉糯、香味独特而深受喜爱，不仅是广西地方美食的重要食材，还出口到国内外市场。&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Cloudflare Pages 301 重定向</title>
      <link>https://bloglee.pages.dev/post/301-redirect-of-cloudflare-pages/</link>
      <pubDate>Tue, 25 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/301-redirect-of-cloudflare-pages/</guid>
      <description>&lt;p&gt;在 Cloudflare 的 Page Rules（页面规则）中，你可以通过以下步骤设置 301 重定向，将 &lt;code&gt;www.example.com&lt;/code&gt; 重定向到 &lt;code&gt;example.com&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;h3 id=&#34;步骤&#34;&gt;步骤：&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;登录 Cloudflare，进入你的 &lt;strong&gt;站点管理界面&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;li&gt;在左侧菜单中，点击 &lt;strong&gt;Rules&lt;/strong&gt;（规则），然后选择 &lt;strong&gt;Page Rules&lt;/strong&gt;（页面规则）。&lt;/li&gt;&#xA;&lt;li&gt;点击 &lt;strong&gt;Create Page Rule&lt;/strong&gt;（创建页面规则）。&lt;/li&gt;&#xA;&lt;li&gt;在 &lt;strong&gt;If the URL matches&lt;/strong&gt;（如果 URL 匹配）字段输入：&lt;code&gt;https://www.example.com/*&lt;/code&gt;&#xA;（注意 &lt;code&gt;*&lt;/code&gt; 号表示匹配 &lt;code&gt;www.example.com&lt;/code&gt; 下的所有路径）&lt;/li&gt;&#xA;&lt;li&gt;在 &lt;strong&gt;Then the settings are&lt;/strong&gt;（然后执行以下设置）中选择 &lt;strong&gt;Forwarding URL&lt;/strong&gt;（转发 URL）。&lt;/li&gt;&#xA;&lt;li&gt;在 &lt;strong&gt;Select status code&lt;/strong&gt;（选择状态码）下拉菜单中，选择 &lt;strong&gt;301 - Permanent Redirect&lt;/strong&gt;（301 - 永久重定向）。&lt;/li&gt;&#xA;&lt;li&gt;在 &lt;strong&gt;Enter destination URL&lt;/strong&gt;（输入目标 URL）中填入：&lt;code&gt;https://example.com/{$1}&lt;/code&gt;,（&lt;code&gt;$1&lt;/code&gt; 用于保留原始路径）&lt;/li&gt;&#xA;&lt;li&gt;勾选 &lt;code&gt;Preserve query string&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;点击 &lt;strong&gt;Save and Deploy&lt;/strong&gt;（保存并部署）。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;说明&#34;&gt;说明：&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;这样设置后，&lt;code&gt;www.example.com/abc&lt;/code&gt; 会自动 301 重定向到 &lt;code&gt;example.com/abc&lt;/code&gt;，确保所有子路径也正确跳转。&lt;/li&gt;&#xA;&lt;li&gt;301 重定向是永久性重定向，有利于 SEO，使搜索引擎知道 &lt;code&gt;example.com&lt;/code&gt; 是主站点。&lt;/li&gt;&#xA;&lt;li&gt;确保 &lt;code&gt;example.com&lt;/code&gt; 也在 Cloudflare 管理下，否则目标站点可能无法正确解析。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;如果你的站点使用 Cloudflare 的 &lt;strong&gt;Redirect Rules&lt;/strong&gt;（重定向规则），你也可以在 &lt;strong&gt;Rules &amp;gt; Redirect Rules&lt;/strong&gt; 里进行类似的配置，推荐使用 &lt;strong&gt;301 永久重定向&lt;/strong&gt; 以优化 SEO。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何寻找外链</title>
      <link>https://bloglee.pages.dev/post/find-backlinks-for-seo-purpose/</link>
      <pubDate>Thu, 20 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/find-backlinks-for-seo-purpose/</guid>
      <description>&lt;p&gt;发掘外链是一个非常难的事情，需要长期积累。&lt;/p&gt;&#xA;&lt;h2 id=&#34;使用谷歌高级搜索语法查找导航站&#34;&gt;使用谷歌高级搜索语法查找导航站&lt;/h2&gt;&#xA;&lt;h3 id=&#34;命令一&#34;&gt;命令一&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;inurl:(&amp;quot;submit&amp;quot; | &amp;quot;add&amp;quot;) intitle:(&amp;quot;submit&amp;quot; | &amp;quot;add&amp;quot;) intext:(&amp;quot;submit&amp;quot; | &amp;quot;add&amp;quot;) &amp;quot;AI&amp;quot; OR &amp;quot;tool&amp;quot;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;搜索 URL、标题、正文分别包含 &amp;ldquo;submit&amp;rdquo; 或 &amp;ldquo;add&amp;rdquo;，且页面中包含 &amp;ldquo;AI&amp;rdquo; 或 &amp;ldquo;tool&amp;rdquo; 的结果。&lt;/p&gt;</description>
    </item>
    <item>
      <title>LLM基础知识</title>
      <link>https://bloglee.pages.dev/post/llm-basics/</link>
      <pubDate>Wed, 19 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/llm-basics/</guid>
      <description>&lt;h2 id=&#34;名词解释&#34;&gt;名词解释&lt;/h2&gt;&#xA;&lt;h3 id=&#34;multimodal多模态&#34;&gt;Multimodal(多模态)&lt;/h3&gt;&#xA;&lt;p&gt;简单来说，多模态就是让 AI 能够理解和处理 多种类型的信息，比如 文字、图片、声音、视频 等，而不是只处理单一类型的数据（比如只有文字）。&lt;/p&gt;&#xA;&lt;p&gt;就像人类一样，我们不只是用“看”来理解世界，还会 听、说、触摸、闻，AI 也是这样，多模态让 AI 变得更聪明，能同时处理不同类型的信息。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google Adsense</title>
      <link>https://bloglee.pages.dev/post/google-adsense/</link>
      <pubDate>Mon, 17 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/google-adsense/</guid>
      <description>&lt;h2 id=&#34;什么是-google-adsense&#34;&gt;什么是 Google Adsense&lt;/h2&gt;&#xA;&lt;p&gt;Google 提供的一项在线广告服务，允许网站所有者通过展示广告来赚取收入。&lt;/p&gt;&#xA;&lt;h2 id=&#34;名词解释&#34;&gt;名词解释&lt;/h2&gt;&#xA;&lt;h3 id=&#34;rpmrevenue-per-mile--网页每千次展示收入&#34;&gt;RPM(Revenue Per Mile) / 网页每千次展示收入&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;计算方式：（总收入 ÷ 总展示次数）× 1000&lt;/li&gt;&#xA;&lt;li&gt;含义：每 1000 次广告展示所能带来的平均收入。不同类型的广告（展示广告、视频广告等）可能会有不同的 RPM 值。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;ecpmeffective-cost-per-mille--每千次有效展示收入&#34;&gt;eCPM(effective Cost Per Mille) / 每千次有效展示收入&lt;/h3&gt;&#xA;&lt;p&gt;在每 1,000 次广告展示中实际获得的平均收入。&#xA;广告展示层面的效率指标，衡量每千次广告展示所带来的收入。&#xA;国内网站的ECPM很有可能不到1美元，但是欧美等发达国家的ECPM可以达到3到6美元。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一些需要在GSC后台关注的报错信息</title>
      <link>https://bloglee.pages.dev/post/tips-to-notice-in-gsc/</link>
      <pubDate>Sun, 16 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/tips-to-notice-in-gsc/</guid>
      <description>&lt;h2 id=&#34;duplicate-without-user-selected-canonical&#34;&gt;Duplicate without user-selected canonical&lt;/h2&gt;&#xA;&lt;p&gt;简单来说，这个错误信息意味着：&lt;/p&gt;&#xA;&lt;p&gt;你的网站上有重复的内容： 就像复印件一样，你的网站上有两个或多个网页，它们的内容非常相似或完全相同。&#xA;你没有告诉谷歌哪个是“正版”： 当有重复内容时，你需要告诉谷歌哪个网页是“正版”（也就是“规范网页”），这样谷歌才会知道应该优先展示哪个网页。&#xA;谷歌自己做出了选择： 因为你没有告诉谷歌哪个是“正版”，所以谷歌自己选择了一个它认为最好的网页。&lt;/p&gt;</description>
    </item>
    <item>
      <title>SEO基础知识</title>
      <link>https://bloglee.pages.dev/post/seo-basics/</link>
      <pubDate>Sat, 15 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/seo-basics/</guid>
      <description>&lt;h2 id=&#34;seo-入门&#34;&gt;SEO 入门&lt;/h2&gt;&#xA;&lt;p&gt;SEO 入门，可以看下面的几篇入门文章。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ahrefs SEO 教程： &lt;a href=&#34;https://ahrefs.com/zh/seo&#34;&gt;SEO 初学者指南&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;谷歌 SEO 文档： &lt;a href=&#34;https://developers.google.com/search/docs?hl=zh-cn&#34;&gt;谷歌 SEO 文档&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;名词解释&#34;&gt;名词解释&lt;/h2&gt;&#xA;&lt;h3 id=&#34;seo&#34;&gt;SEO&lt;/h3&gt;&#xA;&lt;p&gt;搜搜引擎优化，目的让网页能够在搜索页面 rank 到前面。&lt;/p&gt;&#xA;&lt;h3 id=&#34;keyword关键词&#34;&gt;keyword/关键词&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;指用户在搜索引擎中输入的词语或短语。&lt;/li&gt;&#xA;&lt;li&gt;可能是 1 个词语，也可能是多个词语组成的。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;search-volume&#34;&gt;Search Volume&lt;/h4&gt;&#xA;&lt;p&gt;一般来讲，搜索引擎中，用户输入该关键词的平均每月搜索次数。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Next.js 基础知识</title>
      <link>https://bloglee.pages.dev/post/basics-of-nextjs/</link>
      <pubDate>Sun, 02 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/basics-of-nextjs/</guid>
      <description>&lt;h2 id=&#34;use-client-指令&#34;&gt;use client 指令&lt;/h2&gt;&#xA;&lt;p&gt;可以，简单总结就是：&lt;/p&gt;&#xA;&lt;h3 id=&#34;use-client-是什么&#34;&gt;&lt;code&gt;use client&lt;/code&gt; 是什么&lt;/h3&gt;&#xA;&lt;p&gt;它是 Next.js 里的一个标记，表示：&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;这个组件要在浏览器端运行。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;写了它之后，这个组件就变成 &lt;strong&gt;Client Component&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;加了之后会怎样&#34;&gt;加了之后会怎样&lt;/h3&gt;&#xA;&lt;h4 id=&#34;1-可以使用浏览器相关能力&#34;&gt;1. 可以使用浏览器相关能力&lt;/h4&gt;&#xA;&lt;p&gt;比如：&lt;/p&gt;</description>
    </item>
    <item>
      <title>React 基础知识</title>
      <link>https://bloglee.pages.dev/post/basics-of-react/</link>
      <pubDate>Sun, 02 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/basics-of-react/</guid>
      <description>&lt;h2 id=&#34;客户端渲染client-side-rendering&#34;&gt;客户端渲染（Client Side Rendering）&lt;/h2&gt;&#xA;&lt;h2 id=&#34;服务端渲染server-side-rendering&#34;&gt;服务端渲染（Server Side Rendering）&lt;/h2&gt;&#xA;&lt;h2 id=&#34;静态站点生成static-site-generation&#34;&gt;静态站点生成（Static Site Generation）&lt;/h2&gt;&#xA;&lt;h2 id=&#34;同构渲染isomorphic-rendering&#34;&gt;同构渲染（Isomorphic Rendering）&lt;/h2&gt;&#xA;&lt;h2 id=&#34;hydration&#34;&gt;hydration&lt;/h2&gt;&#xA;&lt;h2 id=&#34;react-server-component&#34;&gt;React Server Component&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;服务器组件可以在构建时在 CI 服务器上运行一次，&lt;/li&gt;&#xA;&lt;li&gt;也可以使用 Web 服务器为每个请求运行。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;可以不需要运行时服务器&#34;&gt;可以不需要运行时服务器&lt;/h3&gt;&#xA;&lt;p&gt;只需要构建的时候有，就可以&lt;/p&gt;</description>
    </item>
    <item>
      <title>React水合</title>
      <link>https://bloglee.pages.dev/post/react-hydration/</link>
      <pubDate>Sun, 02 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/react-hydration/</guid>
      <description>&lt;h2 id=&#34;什么是水合&#34;&gt;什么是水合&lt;/h2&gt;&#xA;&lt;p&gt;React 中的 &lt;strong&gt;Hydration（水合）&lt;/strong&gt; 是服务器端渲染（SSR, Server-Side Rendering）的关键步骤，它让静态的 HTML 内容在客户端“活起来”，变为可交互的动态应用。以下是详细解释：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Supabase 基础知识</title>
      <link>https://bloglee.pages.dev/post/basics-of-supbase/</link>
      <pubDate>Sun, 02 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/basics-of-supbase/</guid>
      <description>&lt;h2 id=&#34;supabase-anon-key&#34;&gt;Supabase Anon Key&lt;/h2&gt;&#xA;&lt;p&gt;Supabase 的匿名密钥（Anon Key）是用于访问 Supabase 数据库的密钥。它允许用户在不进行身份验证的情况下访问数据库，通常用于开发和测试环境。&lt;/p&gt;&#xA;&lt;h2 id=&#34;rls&#34;&gt;RLS&lt;/h2&gt;&#xA;&lt;p&gt;Supabase 的 安全核心是 RLS (Row Level Security)&lt;/p&gt;</description>
    </item>
    <item>
      <title>DNS配置</title>
      <link>https://bloglee.pages.dev/post/dns/</link>
      <pubDate>Thu, 27 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/dns/</guid>
      <description></description>
    </item>
    <item>
      <title>WSL2配置</title>
      <link>https://bloglee.pages.dev/post/wsl-config/</link>
      <pubDate>Thu, 27 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/wsl-config/</guid>
      <description>&lt;h2 id=&#34;如何打开-wsl&#34;&gt;如何打开 WSL&lt;/h2&gt;&#xA;&lt;p&gt;下面两种方法：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在 windows 搜索框里搜索 &lt;code&gt;Ubuntu&lt;/code&gt;，找到带有 WSL 后缀的 Ubuntu，点击打开&lt;/li&gt;&#xA;&lt;li&gt;使用 Windows Terminal 直接打开&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;在-wsl-中打开-cursor&#34;&gt;在 WSL 中打开 Cursor&lt;/h2&gt;&#xA;&lt;p&gt;在 WSL 的 &lt;code&gt;/usr/local/bin&lt;/code&gt; 目录下创建名为 code 的脚本文件：&lt;/p&gt;</description>
    </item>
    <item>
      <title>TailwindCSS 基础</title>
      <link>https://bloglee.pages.dev/post/tailwindcss-basics/</link>
      <pubDate>Sun, 23 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/tailwindcss-basics/</guid>
      <description>&lt;h6 id=&#34;directive-指令&#34;&gt;Directive 指令&lt;/h6&gt;&#xA;&lt;p&gt;在 Tailwind CSS 中，Directive 是一种特殊的代码，用来告诉 Tailwind 该做什么。你可以把它想象成一种“命令”，用来生成样式或者做一些额外的处理。&lt;/p&gt;</description>
    </item>
    <item>
      <title>PostgreSQL 基本知识</title>
      <link>https://bloglee.pages.dev/post/postgresql-basics/</link>
      <pubDate>Tue, 18 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/postgresql-basics/</guid>
      <description>&lt;h2 id=&#34;postgresql-数据类型&#34;&gt;PostgreSQL 数据类型&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;类别&lt;/th&gt;&#xA;          &lt;th&gt;类型名称&lt;/th&gt;&#xA;          &lt;th&gt;描述&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;数值类型&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;SMALLINT&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;2 字节小整数&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;INTEGER&lt;/code&gt; (或 &lt;code&gt;INT&lt;/code&gt;)&lt;/td&gt;&#xA;          &lt;td&gt;4 字节整数&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;BIGINT&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;8 字节大整数&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;SMALLSERIAL&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;2 字节自增整数&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;SERIAL&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;4 字节自增整数&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;BIGSERIAL&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;8 字节自增整数&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;REAL&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;4 字节单精度浮点数&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;DOUBLE PRECISION&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;8 字节双精度浮点数&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;NUMERIC&lt;/code&gt; (或 &lt;code&gt;DECIMAL&lt;/code&gt;)&lt;/td&gt;&#xA;          &lt;td&gt;精确小数&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;字符类型&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;CHAR(n)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;定长字符串&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;VARCHAR(n)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;变长字符串&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;TEXT&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;无长度限制字符串&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;日期/时间类型&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;DATE&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;日期&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;TIME&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;时间&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;TIMESTAMP&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;时间戳&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;INTERVAL&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;时间间隔&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;布尔类型&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;BOOLEAN&lt;/code&gt; (或 &lt;code&gt;BOOL&lt;/code&gt;)&lt;/td&gt;&#xA;          &lt;td&gt;布尔值（true/false）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;二进制类型&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;BYTEA&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;二进制数据&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;几何类型&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;POINT&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;点&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;LINE&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;线&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;LSEG&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;线段&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;BOX&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;矩形框&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;PATH&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;路径&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;POLYGON&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;多边形&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;CIRCLE&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;圆&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;网络地址类型&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;CIDR&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;网络地址（CIDR 格式）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;INET&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;IP 地址&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;MACADDR&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;MAC 地址&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;文本搜索类型&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;TSVECTOR&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;文本搜索向量&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;TSQUERY&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;文本搜索查询&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;UUID 类型&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;UUID&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;通用唯一标识符&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;JSON 类型&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;JSON&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;JSON 数据&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;JSONB&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;二进制格式的 JSON 数据&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;数组类型&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;数据类型[]&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;数组（如 &lt;code&gt;INTEGER[]&lt;/code&gt;, &lt;code&gt;TEXT[]&lt;/code&gt;）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;其他类型&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;XML&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;XML 数据&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;RANGE&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;范围类型&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;DOMAIN&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;自定义域类型&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;COMPOSITE&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;复合类型&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;postgresql-扩展&#34;&gt;PostgreSQL 扩展&lt;/h2&gt;&#xA;&lt;h3 id=&#34;什么是扩展&#34;&gt;什么是扩展？&lt;/h3&gt;&#xA;&lt;p&gt;在 PostgreSQL 中，&lt;strong&gt;扩展&lt;/strong&gt; 是一种可以添加到数据库中的额外功能模块。它们提供了一些额外的功能、函数或数据类型，帮助你更方便地完成某些任务。你可以把扩展理解为 PostgreSQL 的“插件”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>数据库基本知识</title>
      <link>https://bloglee.pages.dev/post/database-basics/</link>
      <pubDate>Tue, 18 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/database-basics/</guid>
      <description>&lt;h2 id=&#34;参数化查询&#34;&gt;参数化查询&lt;/h2&gt;&#xA;&lt;p&gt;参数化查询是 SQL 中一种安全且高效的查询方式，我用通俗易懂的方式来解释：&lt;/p&gt;&#xA;&lt;h3 id=&#34;什么是参数化查询&#34;&gt;什么是参数化查询？&lt;/h3&gt;&#xA;&lt;p&gt;想象你在餐厅点餐，有两种方式：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;直接告诉服务员&lt;/strong&gt;：&amp;ldquo;我要一份宫保鸡丁，不要花生&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;用菜单模板&lt;/strong&gt;：选择菜品类型（川菜），然后填写具体要求（宫保鸡丁，去花生）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;参数化查询就像第二种方式——先准备一个 SQL 模板，然后把具体的数据作为参数填入。&lt;/p&gt;</description>
    </item>
    <item>
      <title>非对称加密</title>
      <link>https://bloglee.pages.dev/post/public-key-and-private-key/</link>
      <pubDate>Fri, 07 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/public-key-and-private-key/</guid>
      <description>&lt;h2 id=&#34;什么是-公钥&#34;&gt;什么是 公钥&lt;/h2&gt;&#xA;&lt;p&gt;非对称加密（Asymmetric Cryptography），也被称为公钥加密（Public-Key Cryptography），是现代网络安全和互联网信任体系的基石。&lt;/p&gt;</description>
    </item>
    <item>
      <title>数据库函数</title>
      <link>https://bloglee.pages.dev/post/database-function/</link>
      <pubDate>Fri, 07 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/database-function/</guid>
      <description>&lt;p&gt;数据库函数是在数据库管理系统（DBMS）中预先定义好的，用于执行特定操作并返回结果的代码块。&lt;/p&gt;&#xA;&lt;p&gt;在 Supabase 中，数据库函数通常用 SQL 或 PL/pgSQL（PostgreSQL 的过程语言）编写，但你也可以使用其他语言（如 JavaScript）来编写函数。&lt;/p&gt;</description>
    </item>
    <item>
      <title>数字签名</title>
      <link>https://bloglee.pages.dev/post/digital-signature/</link>
      <pubDate>Fri, 07 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/digital-signature/</guid>
      <description>&lt;p&gt;数字签名是一种用于验证数字消息或文档真实性和完整性的技术。它类似于传统的手写签名，但使用密码学原理实现。&lt;/p&gt;&#xA;&lt;h2 id=&#34;数字签名可以提供以下保证&#34;&gt;数字签名可以提供以下保证：&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;身份验证： 确认消息或文档的发送者身份，防止他人冒充。&lt;/li&gt;&#xA;&lt;li&gt;完整性： 保证消息或文档在传输过程中没有被篡改。&lt;/li&gt;&#xA;&lt;li&gt;不可否认性： 发送者无法否认他们发送的消息或文档。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;使用数字签名包含步骤&#34;&gt;使用数字签名包含步骤：&lt;/h2&gt;&#xA;&lt;h3 id=&#34;生成数字签名&#34;&gt;生成数字签名&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;生成密钥对：&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;使用非对称加密算法（如 RSA）生成一对密钥：公钥和私钥。&#xA;私钥由签名者安全保管，公钥可以公开。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prompt List</title>
      <link>https://bloglee.pages.dev/post/prompt-list/</link>
      <pubDate>Fri, 18 Oct 2024 00:00:00 +0000</pubDate>
      <guid>https://bloglee.pages.dev/post/prompt-list/</guid>
      <description>&lt;h1 id=&#34;prompt-list&#34;&gt;Prompt List&lt;/h1&gt;&#xA;&lt;h2 id=&#34;prompt-design-a-landing-page&#34;&gt;Prompt: Design a landing page&lt;/h2&gt;&#xA;&lt;p&gt;I am developing a landing page for a SaaS software.&lt;/p&gt;&#xA;&lt;p&gt;The main function is to generate an image based on user input, with the core keyword being &amp;quot;&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;I hope you can create a landing page: the content should be SEO-friendly, include common sections of a landing page, have a total word count exceeding 650 words, and maintain an SEO keyword density of around 3% for the core keyword.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tech Stack List</title>
      <link>https://bloglee.pages.dev/post/tech-stack-list/</link>
      <pubDate>Mon, 01 Apr 2024 21:53:20 +0800</pubDate>
      <guid>https://bloglee.pages.dev/post/tech-stack-list/</guid>
      <description>&lt;h1 id=&#34;front-end&#34;&gt;Front End&lt;/h1&gt;&#xA;&lt;h2 id=&#34;reactjs&#34;&gt;React.js&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;@chakra-ui: UI library&lt;/li&gt;&#xA;&lt;li&gt;@shadcn/ui: UI library&lt;/li&gt;&#xA;&lt;li&gt;@radix-ui: UI library&lt;/li&gt;&#xA;&lt;li&gt;daisyUI: UI library: component library for Tailwind CSS&lt;/li&gt;&#xA;&lt;li&gt;canvas-confetti: confetti animation&lt;/li&gt;&#xA;&lt;li&gt;jotai: state management&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;nextjs&#34;&gt;Next.js&lt;/h2&gt;&#xA;&lt;h2 id=&#34;plasmo&#34;&gt;Plasmo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.plasmo.com/&#34;&gt;https://www.plasmo.com/&lt;/a&gt;&#xA;Help make browser extensions&lt;/p&gt;&#xA;&lt;h2 id=&#34;tailwindcss&#34;&gt;TailwindCSS&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;tailwindui: &lt;a href=&#34;https://tailwindui.com&#34;&gt;https://tailwindui.com&lt;/a&gt;: components and templates, built by the makers of Tailwind CSS.&lt;/li&gt;&#xA;&lt;li&gt;tailwindcomponents: Open source Tailwind UI components and templates&lt;/li&gt;&#xA;&lt;li&gt;tailspark： &lt;a href=&#34;https://tailspark.co/&#34;&gt;https://tailspark.co/&lt;/a&gt; ： Components &amp;amp; Templates built in Tailwind CSS&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;google-fonts&#34;&gt;Google Fonts&lt;/h2&gt;&#xA;&lt;h1 id=&#34;design&#34;&gt;Design&lt;/h1&gt;&#xA;&lt;h2 id=&#34;figma&#34;&gt;Figma&lt;/h2&gt;&#xA;&lt;h2 id=&#34;v0&#34;&gt;v0&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://v0.dev/&#34;&gt;https://v0.dev/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;service&#34;&gt;Service&lt;/h1&gt;&#xA;&lt;h2 id=&#34;vercel&#34;&gt;Vercel&lt;/h2&gt;&#xA;&lt;h2 id=&#34;cloudflare&#34;&gt;CloudFlare&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;domain name&lt;/li&gt;&#xA;&lt;li&gt;DNS&lt;/li&gt;&#xA;&lt;li&gt;CDN&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;supabase&#34;&gt;Supabase&lt;/h2&gt;&#xA;&lt;h1 id=&#34;payments--subscriptions&#34;&gt;Payments &amp;amp; Subscriptions&lt;/h1&gt;&#xA;&lt;h2 id=&#34;lemonsqueezy&#34;&gt;Lemonsqueezy&lt;/h2&gt;&#xA;&lt;h2 id=&#34;stripe&#34;&gt;Stripe&lt;/h2&gt;&#xA;&lt;h1 id=&#34;marketing&#34;&gt;Marketing&lt;/h1&gt;&#xA;&lt;h2 id=&#34;hacker-news&#34;&gt;Hacker News&lt;/h2&gt;&#xA;&lt;h2 id=&#34;reddit&#34;&gt;Reddit&lt;/h2&gt;&#xA;&lt;h2 id=&#34;producthunt&#34;&gt;ProductHunt&lt;/h2&gt;&#xA;&lt;p&gt;Launch and discover new tech products and ideas.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RPC</title>
      <link>https://bloglee.pages.dev/post/remote-procedure-call-in-supabase/</link>
      <pubDate>Mon, 01 Apr 2024 21:36:41 +0800</pubDate>
      <guid>https://bloglee.pages.dev/post/remote-procedure-call-in-supabase/</guid>
      <description>&lt;p&gt;在 Supabase 中，RPC（Remote Procedure Call，远程过程调用）是一种允许你直接调用 PostgreSQL 数据库中的函数的机制。通过 RPC，你可以在 Supabase 中执行自定义的数据库函数，并将结果返回给客户端。这对于执行复杂的数据库操作或封装业务逻辑非常有用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>RPC</title>
      <link>https://bloglee.pages.dev/post/remote-procedure-call/</link>
      <pubDate>Mon, 01 Apr 2024 21:36:41 +0800</pubDate>
      <guid>https://bloglee.pages.dev/post/remote-procedure-call/</guid>
      <description>&lt;p&gt;RPC（Remote Procedure Call，远程过程调用）是一种通信协议，允许一个程序在本地调用另一个地址空间（通常是远程服务器）上的函数或过程，就像调用本地函数一样。RPC 的目的是隐藏网络通信的复杂性，使得分布式系统中的远程调用对开发者透明。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
