<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Gunbrad Blog</title><description>Fighting</description><link>https://gunbrad.xyz/</link><language>zh_CN</language><item><title>记录如何抓取微信群聊信息格式化写入共享文档</title><link>https://gunbrad.xyz/posts/%E8%AE%B0%E5%BD%95%E5%A6%82%E4%BD%95%E6%8A%93%E5%8F%96%E5%BE%AE%E4%BF%A1%E7%BE%A4%E8%81%8A%E4%BF%A1%E6%81%AF%E6%A0%BC%E5%BC%8F%E5%8C%96%E5%86%99%E5%85%A5%E5%85%B1%E4%BA%AB%E6%96%87%E6%A1%A3/</link><guid isPermaLink="true">https://gunbrad.xyz/posts/%E8%AE%B0%E5%BD%95%E5%A6%82%E4%BD%95%E6%8A%93%E5%8F%96%E5%BE%AE%E4%BF%A1%E7%BE%A4%E8%81%8A%E4%BF%A1%E6%81%AF%E6%A0%BC%E5%BC%8F%E5%8C%96%E5%86%99%E5%85%A5%E5%85%B1%E4%BA%AB%E6%96%87%E6%A1%A3/</guid><pubDate>Tue, 02 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;目前找家教的形式一般为接单老师加入家教中介的微信/QQ群,每天在群聊中翻阅家教中介转发的家教信息.但面对各种各样格式不同的家教信息,反复翻阅对比容易失去耐心.如果我能把群聊中的家教信息整合成到共享表格中,方便排序和筛选,既方便我找家教,还可以把家教信息以表格形式贩卖出去赚信息差价.于是我从微信入手,做了一个自动抓取群聊信息,交给大模型处理,再写入共享文档的小程序&lt;/p&gt;
&lt;p&gt;可点击&lt;a href=&quot;https://ai.feishu.cn/base/S2JrbIFNya9fEQsvXdvcu5gPnKd?from=from_copylink&quot;&gt;这里&lt;/a&gt; 预览我做的表格&lt;/p&gt;
&lt;h1&gt;一:思路&lt;/h1&gt;
&lt;p&gt;大致思路很简单:&lt;/p&gt;
&lt;p&gt;①从群聊抓取信息&lt;/p&gt;
&lt;p&gt;②交给大模型格式化信息&lt;/p&gt;
&lt;p&gt;③写入共享文档&lt;/p&gt;
&lt;h2&gt;①从群聊抓取信息&lt;/h2&gt;
&lt;p&gt;对于从群聊抓取信息,网上的其中一种方案是RPA:抓取界面元素.程序会打开微信界面,只要捕捉到了界面有发送信息后出现的聊天泡泡,就把这条信息的内容图片转文字识别出来.但这种方式太low了,且只能处理单个群聊,直接PASS掉了.&lt;/p&gt;
&lt;p&gt;我就想,微信接受信息时,肯定会收到请求,也肯定会有个函数接受信息,如果我能找到这个函数,捕捉它的参数,就可以解析出发送回来的信息了!如果微信还提供接受信息的接口的话,那么会更方便,可惜个人微信没有开发者平台,个人微信的接口并不暴露出来,这又难倒我了.&lt;/p&gt;
&lt;p&gt;我顺着这个思路在网上搜方案,发现github上确实有一个使用hook暴露微信接口的代码库:&lt;a href=&quot;https://github.com/ttttupup/wxhelper&quot;&gt;wxhelper&lt;/a&gt; 原理是逆向PC端微信客户端,定位其中相关功能发生时,程序中哪些事件发生,然后编写dll文件,在微信运行时注入到微信中,创建一个http服务端,往该服务端发送请求时,使得微信程序中指定的事件发生,以此来模拟暴露出微信接口的.这其中也自然包括了接受信息&lt;/p&gt;
&lt;p&gt;难点在于wxhelper只支持特定版本,但时至今日,微信已经发布了4.x版本,已经换框架了!当我尝试使用这些低版本登录微信时,会强制提示我微信版本过低不予登录.网上的方法是,修改注册表中微信的版本号,这样登录请求发到服务器时,服务器校验时会认定这是新版本,就不会触发微信的低版本拒绝登录了!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-12-05-23-49-59-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可我试了试,居然不行!我看了看,换了框架之后的4.x版本的注册表的位置跟3.x版本的注册表的位置不同了,我猜测微信服务器只校验4.x版本的注册表,而不会校验3.x版本的注册表.因此我无法再使用旧版本微信了.我天!&lt;/p&gt;
&lt;p&gt;但我还是不愿放弃wxhelper,因为我在b站还是可以看到有卖工具的成功登录上旧版本.然后我登录到微信官网,尝试在官网看看能不能下载到旧版本微信(我之前是通过github下载旧版本微信的),发现了一点:32位的微信的最新版本仍然是3.x.既然存在3.x版本,那么微信官方一定给3.x版本留了校验通道,于是下载32位微信,重复之前的改注册表步骤,嘻,成功力!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-12-06-00-06-36-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后就是根据wxhelper的步骤,在启动的微信中注入dll,使用postman测试接口,成功!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-12-06-00-09-32-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-12-06-00-12-47-f9816a70d002c6593f8b398a8abf060d.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;②交给大模型格式化信息&lt;/h2&gt;
&lt;p&gt;由于各个家教群的消息格式不统一,你可以看见:
SZXY2025
【地址】：XXXX
【年级】：XXXX
【基本情况】：XXXX...&lt;/p&gt;
&lt;p&gt;也可以看见:
12.5
新单
地点:XXXX
科目:XXXX
时间:XXXX...&lt;/p&gt;
&lt;p&gt;所以我不可能为每一种格式都编写代码处理,这不现实.因此把任务交给大模型处理会是好主意.我提前创建好共享文档,设置其中的表头,然后让大模型严格按照飞书多维表格的批量插入记录的参数格式化数据,这一步比较简单&lt;/p&gt;
&lt;h2&gt;③写入共享文档&lt;/h2&gt;
&lt;p&gt;我选择飞书多维表格,就是因为飞书给个人开发者提供接口,我在第二步接受大模型的响应后,对响应结果进行处理(json格式化,去markdown标记)等,直接调用飞书多维表格的批量插入接口即可&lt;/p&gt;
&lt;h1&gt;二:遇到的其他问题及粗糙处理&lt;/h1&gt;
&lt;h2&gt;1.过滤非家教信息&lt;/h2&gt;
&lt;p&gt;为了避免非家教信息污染表格以及浪费token,设置了一个过滤器进行粗糙处理,对hook到的50字符以下的信息不予处理,且50字符以上的也必须包含提前硬编码的关键词&lt;/p&gt;
&lt;h2&gt;2.设计表头&lt;/h2&gt;
&lt;p&gt;写入信息发布人的wxid和昵称,方便跟对应的中介联系.&lt;/p&gt;
&lt;p&gt;wxid区别于微信号,wxid是微信数据库中唯一标识某用户的ID,用户账户一创建就分配的,不可修改且无法通过此途径添加好友;微信号是用户自己设置的,可用于被其他用户查找到的ID,可修改且可通过搜索微信号添加好友.因为wxhelper不提供查询微信号的接口,只提供了查询好友列表的接口,在好友列表中才会有对应的微信号,因此我必须先添加中介为好友,才能获取到他的微信号,这一步仍需完善&lt;/p&gt;
&lt;p&gt;添加了原文字段,方便查询者查看家教信息的原文&lt;/p&gt;
&lt;p&gt;添加了UpdateTime,方便排序;添加了原文(不带标点),方便查重;这两个字段对用户隐藏&lt;/p&gt;
&lt;h2&gt;3.去重处理&lt;/h2&gt;
&lt;p&gt;由于我的数据是经过大模型处理后写入表格的,而大模型每次对话不是100%严格遵照你的格式输出的,即使是同样的输入,输出也可能不同,所以我很难设计一个主键&lt;/p&gt;
&lt;p&gt;而不进行去重的话,会造成token的浪费和表格数据的冗杂,所以我还是做了勉强的补救措施:我设计了原文(不带标点)字段,把原文字段的值去掉换行符,标点和空格,然后当大模型处理完之后,我先获取到响应结果中的原文的值,然后取第20-40个字符,去表中模糊匹配;如果匹配成功则说明重复,那么就查看日期,若日期不为今天,则更新日期和UpdateTime,然后跳过这条数据的处理;&lt;/p&gt;
&lt;p&gt;当然,这只针对于家教信息相同,格式相同的情况;但也有同一条家教信息,但格式不同的情况;遇到这种情况,只好额外进行另一次查询:精密查询地点+学段+科目,若这都能查到,才说明重复&lt;/p&gt;
</content:encoded></item><item><title>Transactional注解在悲观锁下的失效原因</title><link>https://gunbrad.xyz/posts/transactional%E6%B3%A8%E8%A7%A3%E5%9C%A8%E6%82%B2%E8%A7%82%E9%94%81%E4%B8%8B%E7%9A%84%E5%A4%B1%E6%95%88%E5%8E%9F%E5%9B%A0/</link><guid isPermaLink="true">https://gunbrad.xyz/posts/transactional%E6%B3%A8%E8%A7%A3%E5%9C%A8%E6%82%B2%E8%A7%82%E9%94%81%E4%B8%8B%E7%9A%84%E5%A4%B1%E6%95%88%E5%8E%9F%E5%9B%A0/</guid><pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;在学习Redis时，为确保多线程下的线程同步问题，我在工具函数中添加了synchronized锁，并在函数外添加了@Transactional注解，以便发生错误时回滚操作。&lt;/p&gt;
&lt;p&gt;以“一人一单”功能代码为例：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-09-22-21-39-48-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;但是！这样的写法仍然是线程不安全的！&lt;/strong&gt; 因为我是在函数内部加的锁，事务是在函数结束后才提交的。这意味着整个函数是先释放锁，再提交事务。而先释放锁，再提交事务，在这两个事件之间存在一段空窗期，其他线程可以在这个空窗期内重新获取锁，这意味着其他线程仍可以创建订单！&lt;/p&gt;
&lt;p&gt;于是我们把锁放在函数外部，在调用这个函数前加锁，这样不就能确保我先提交事务，再释放锁了吗：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-09-22-22-15-29-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;但是！这样的写法会导致@Transactional失效，函数将缺少事务回滚的功能。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因为@Transactionnal是Spring提供的注解，而Spring的事务是通过AOP动态代理实现的，&lt;code&gt;只有通过代理对象调用方法时，事务才会生效。&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;我是这样理解AOP动态代理机制的：以事务回滚为例，Spring在运行时会为这个接口实现类创建一个代理对象，在代理对象中，会为添加了@Transactionnal注解的函数的前后动态地插入事务逻辑相关的代码，但实际的代码中是没有事务逻辑相关的代码的。而此时，因为我的createVoucherOrder是定义在接口实现类中的一个（工具）函数，我调用createVoucherOrder时，实际生效的代码为this.createVoucherOrder，调用的是未插入事务逻辑代码前的函数，而不是插入事务逻辑代码后的函数，因此事务不会生效&lt;/p&gt;
&lt;p&gt;那么应该如何解决这个问题呢——只需要把这个函数添加到接口中，然后获取代理对象，使用代理对象来调用createVoucherOrder()即可，如果 Spring 用的是 JDK 动态代理，那么定义在接口实现类中的函数，Spring都无法作动态处理（即无法动态地插入对应的功能性代码），只有定义在接口中的函数才能被Spring识别到，进而动态插入对应的功能性代码&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-09-22-22-27-16-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;默认情况下 Spring 不会暴露代理对象。要想在运行时通过 AopContext.currentProxy() 获取代理，就必须显式启用，要在启动类上添加@EnableAspectJAutoProxy(exposeProxy = true)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-09-22-22-27-41-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>如何拥有一张0月费0年费visa卡</title><link>https://gunbrad.xyz/posts/%E5%A6%82%E4%BD%95%E6%8B%A5%E6%9C%89%E4%B8%80%E5%BC%A00%E6%9C%88%E8%B4%B90%E5%B9%B4%E8%B4%B9visa%E5%8D%A1/</link><guid isPermaLink="true">https://gunbrad.xyz/posts/%E5%A6%82%E4%BD%95%E6%8B%A5%E6%9C%89%E4%B8%80%E5%BC%A00%E6%9C%88%E8%B4%B90%E5%B9%B4%E8%B4%B9visa%E5%8D%A1/</guid><pubDate>Thu, 24 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;这两天在研究怎么薅羊毛，cursor,Gemini,perplexity不是都有学生优惠嘛，学生优惠不仅需要edu邮箱，还需要海外支付途径和海外网络环境，这样才能通过SheerID验证和完成支付，因此要想薅到羊毛，&lt;code&gt;得有一个国外的edu邮箱-&amp;gt;有一张国外信用卡-&amp;gt;获得纯净的海外网络环境-&amp;gt;拟造SheerID需要的文件&lt;/code&gt;。而一旦拥有了国外的信用卡后，就能白嫖半年&lt;a href=&quot;https://aws.amazon.com/&quot;&gt;AWS&lt;/a&gt;，在AWS上可以在海外部署Windows实例，借由远程桌面就能在海外网络环境上进行学生优惠验证了。&lt;/p&gt;
&lt;p&gt;现在记录一下我是怎么获取到国外的信用卡的：&lt;/p&gt;
&lt;h1&gt;一：Bybit Card&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;你需要准备：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;中国身份证&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;澳大利亚的地址证明（这一点不用担心）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在Bybit上存入1-2USDT&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;申请步骤&lt;/p&gt;
&lt;p&gt;A.完成身份认证&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;主流加密货币交易所  &lt;strong&gt;&lt;a href=&quot;https://www.bybit.com/invite?ref=WARNOK6&quot;&gt;Bybit&lt;/a&gt;&lt;/strong&gt; 上可以申请到VISA卡，首先注册Bybit，注册后首先要完成身份认证，有两个阶段，第一阶段要求上传身份证照片，第二阶段要求上传地址证明。地址证明选择澳大利亚，因为澳大利亚开卡方便。&lt;/p&gt;
&lt;p&gt;你也可以在谷歌商店下载Bybit应用，在手机上完成该操作&lt;/p&gt;
&lt;p&gt;地址证明可以是近三个月的水电费账单，纳税单啥的，你以为需要真的？其实不然，拟造一份就好。&lt;/p&gt;
&lt;p&gt;可以在这个网站：&lt;strong&gt;&lt;a href=&quot;https://app.freeinvoicebuilder.com/&quot;&gt;地址证明生成器&lt;/a&gt;&lt;/strong&gt; 上完成&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-07-24-10-32-48-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;B.充入一定量的虚拟货币&lt;/p&gt;
&lt;p&gt;我是在手机上操作的，点击充值，在里面选择要转入的货币即可（我用的是ETH)，转入1-2UDST就可以了，不用转那么多。&lt;/p&gt;
&lt;p&gt;你问我怎么转入？我是在币安上完成的，在币安上买虚拟货币（ETH/USDT)，然后转入币安的web3钱包，再从web3钱包转入bybit账户。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-07-24-10-54-24-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;C.开卡&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-07-24-10-46-47-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;进入Finance-&amp;gt;Card界面后，将地区切换到澳大利亚，再点击Get Your Card即可，如果迟迟不发卡，请在&lt;a href=&quot;https://www.bybit.com/en/help-center/s/webform&quot;&gt;Bybit Help Center&lt;/a&gt;中向官方反馈错误，客服会帮你解决的&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-07-24-10-48-10-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Bybit也支持实体卡申请，但是我们选择的地区是澳大利亚，所以实体卡只能寄到澳大利亚，可能要在闲鱼上购买转运服务，托人帮你转运回国&lt;/p&gt;
&lt;h1&gt;二：Dog Pay&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;你需要准备：&lt;/p&gt;
&lt;p&gt;A.你的身份证&lt;/p&gt;
&lt;p&gt;B.5美元开卡费&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;申请步骤&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;DogPay开卡很简单，只需要在google商店下载DogPay，完成实名认证后，从币安充入5美元，在开卡界面开卡即可&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-07-24-11-40-54-d649ca491c83bad1b61827241de33999.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>炒股炒币和买房，谁是赌狗？</title><link>https://gunbrad.xyz/posts/%E7%82%92%E8%82%A1%E7%82%92%E5%B8%81%E5%92%8C%E4%B9%B0%E6%88%BF%E8%B0%81%E6%98%AF%E8%B5%8C%E7%8B%97/</link><guid isPermaLink="true">https://gunbrad.xyz/posts/%E7%82%92%E8%82%A1%E7%82%92%E5%B8%81%E5%92%8C%E4%B9%B0%E6%88%BF%E8%B0%81%E6%98%AF%E8%B5%8C%E7%8B%97/</guid><pubDate>Wed, 11 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;记录一个关于买房的观点&lt;/p&gt;
&lt;h1&gt;一：前置知识&lt;/h1&gt;
&lt;p&gt;在开始前需要了解的概念：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;杠杆&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;杠杆交易就是利用小额的资金来进行数倍于原始金额的投资。&lt;/p&gt;
&lt;p&gt;以买股票为例，假如你有10万元本金，想买50万元的股票。正常情况下你买不起，但通过5倍杠杆，平台可以借给你40万元，这样你就能用50万元去炒股了。所以也可以说杠杆就是借钱/贷款嘛，借了多少倍的本金就加了多少倍杠杆&lt;/p&gt;
&lt;p&gt;假设股票涨了20%，那你就赚了10万元，除去借来的钱，你的资产增长到了20万；而如果你不使用杠杆，你只能赚2万，实际资产也才12万。&lt;/p&gt;
&lt;p&gt;而股票跌了20%，那你就亏了10万元，底裤赔光！本金全亏没了；而不使用杠杆，你只会亏2万元&lt;/p&gt;
&lt;p&gt;能够用少量资金撬动大资金投资，这就是杠杆&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;爆仓&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;什么是爆仓呢？爆仓就是，当你的保证金因行情变化而不够时，交易所为了避免亏本，就会强制卖掉你持有的金融产品&lt;/p&gt;
&lt;p&gt;保证金是什么？你一开始通过多少本金开的杠杆，你的保证金就是多少&lt;/p&gt;
&lt;p&gt;以买比特币为例，假设当前比特币价格为100万美元，你有100美元，现在你打算开100倍杠杆买比特币，那么当比特币下跌了1%，也就是99万美元时，你就爆仓了，会被强制卖掉你所持有的比特币&lt;/p&gt;
&lt;p&gt;为什么呢？因为实际上比特币下跌了1万元，这1万元里有你的保证金100，有你向交易所借来的9900。由于交易所不会干赔本买卖，因此在你亏掉你的保证金之后，交易所就会强制卖出你持有的比特币，将本属于交易所的资产收回。&lt;/p&gt;
&lt;p&gt;这里面有一个计算公式：&lt;code&gt;容错率=1/杠杆倍数&lt;/code&gt;，我开100倍杠杆，我的容错率就是1%，当股票/比特币下跌了1%我就爆仓了，如果我开10倍杠杆，我的容错率就是10%，只有下跌10%时我才会爆仓&lt;/p&gt;
&lt;p&gt;于是另一个很有趣的现象出现了：&lt;code&gt;为了避免爆仓，人们只好继续往交易所里投入更多本金。&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;假如你在临近爆仓前继续投入100美元的本金，那么此时你的本金就变成200美金了，原来的100倍杠杆就变成50倍杠杆了，你可以容忍行情下降到2%了！此时就避免了爆仓。&lt;/p&gt;
&lt;p&gt;但我们也知道，投机市场里也有少数孤注一掷，all in的人。如果一个把自己全部储蓄梭哈all in的人面临爆仓，那他会怎么办？继续借呗——只要不爆仓，我就有希望翻盘！只要我还持有币，我就还能赚回来！向银行借，向亲戚借，而做到这种地步最后却没拿到结果的，往往上天台了&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;租售比&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;租售比的定义是：&lt;strong&gt;房屋租金与房售价的比值&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;举个例子，我有一套700万的房，我月租金是1w，也就是说我的租售比为1:700
这也能反应一套房需要租多少个月才能收回原来买房的房款，以1:700来说，一共需要700个月，约58年才能收回房款&lt;/p&gt;
&lt;p&gt;国际标准通常为1:200 - 1:300，但根据统计，我国的租售比远低于国际标准。&lt;/p&gt;
&lt;p&gt;下图还有一张统计重点50城的租售比的图标，且该租售比是平均值，在城市较为核心的地段，租售比可达1:760&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-06-11-15-31-40-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-06-11-15-30-11-58a3b257abd263f65d4e9788e09ceb7.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;二：买房的人才是赌狗&lt;/h1&gt;
&lt;p&gt;从2024年开始，我们买房的首付已经降低到了15%，我们只需要花15%的钱，就能住上跟100%的钱等值的房子，剩余的85%贷款慢慢还呗，还20年30年，每个月从月薪中抽出还房贷的部分。这里面的杠杆倍数是多少，相当于6倍杠杆吧，我只有15%是我自己的能力，却有6倍以上是超过自己的能力，这不就是开了6倍杠杆吗？而根据我们的容错率计算公式，我开6倍杠杆的容错率为16.7%，也就是说，当房价下跌16.7%的时候，我就爆仓了&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-06-10-19-14-31-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;从这个角度解释买房，感觉很新奇吧？我们再从另一个角度看，在金融市场里，肯定也有人加杠杆炒股炒币，但一个正常人，没有疯掉的人，是不会把自己所有钱都投进去加杠杆的，一个正常人会怎么投资？&lt;/p&gt;
&lt;p&gt;比如说我有十万，我最多拿10%，也就是1万作为投资账户。这1万的投资账户，我只拿5%，也就是500来玩杠杆。这样即使我开的是100倍杠杆，那么对于整体的1万投资账户来说，我的杠杆倍数是100*5%=5倍，因为我不是用我整体的投资账户来承担风险，而是用5%的投资账户来承担杠杆的风险。而我的投资账户只是我总资产的10%，因此对于我的总资产来说，我的真实杠杆倍数才&lt;code&gt;0.5&lt;/code&gt;。再假设我活一辈子，我能积累下的全部资金为100万，把目光放眼我的整个人生来说，我现阶段积累的10万跟我整个人生能积累下的100万相比，我的杠杆倍数才&lt;code&gt;0.05&lt;/code&gt;，这风险相当小了吧？&lt;/p&gt;
&lt;p&gt;我们再反过来看买房。我们买房的本金是从只占总资产十分之一的投资账户里出的吗？还是说从占我总资产几分之几的买房账户里出？完全不是吧，买房的本金好像是基于掏空你一整个为核心的，基本上你一付首付，就必须把自己前半生大部分积蓄都花出去，你仔细想想，你在二三十岁这个年龄付首付的钱占你人生总资产的几分之几？对于一个普通人来说，如果他付首付的钱全是自己攒的，并且只占他当前资产的50%，那么已经很牛逼了好吧。这样说可能没什么概念，我们引入具体的数据，比如说广州一套100m²房，全款至少350万，首付52.5万，开6倍杠杆贷款30年还297.5万，按照我们的算法，你在二三十岁这个年龄攒下了105万，首付52.5万已经很牛逼了，而实际情况是大部分人几乎都是所有存款梭哈买房的。再假设你整个人生的总资产是你买房时的两倍，也就是210万，那么你买房的实际杠杆倍数是&lt;strong&gt;3倍&lt;/strong&gt;，这是什么概念？&lt;code&gt;这3倍的杠杆不是加在你的投资账户上的，是加在你的人生上的，如果房价下跌33.3%，那你的人生就爆仓了，不是你的投资账户爆仓，是你的整个人生爆仓了。&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这就很有意思了，我们可以对比一下正常人投资的杠杆和买房的杠杆，&lt;code&gt;投资的杠杆对于整个人生来说才0.05，而买房的杠杆对于整个人生来说居然是3，两者的赌性成分相差了60倍！&lt;/code&gt; 但是有一个很有意思的现象：&lt;strong&gt;我们平时在生活中接触到的各种信息，都在说炒股的人有赌性，混币圈的人更是赌狗，赌得上头了没救了，但从来没有人说买房的人是赌狗。从来没有过&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;炒股炒币和买房两种选择之间的赌性相差了60倍，但却是赌性更小的那一批人，被社会认为是普遍意义上的赌狗；而赌性更大的买房，却被认为是正常的，更是被认为是每个年轻人都必须要做的。&lt;/strong&gt; 如果这是正常的话，那人们就应该反过来觉得炒币的人把每个月的工资固定比例投进投资账户里是正常的，就不应该骂他们是赌狗，因为两者本质都是加杠杆。但实际上，炒币的人一般不会这样做，但买房的人却这样做，那么到底是谁在赌呢？&lt;/p&gt;
&lt;p&gt;如果你认同这个观点的话，那你再想想，大部分人的思维模式是不是普遍被塑造的？大部分人的判断标准也是被社会塑造的？&lt;strong&gt;我们的判断标准被塑造成认为什么是对什么是错，什么有价值什么没价值&lt;/strong&gt;。关于买房和炒股炒币，我们甚至认为炒股炒币赌性更小的人是赌狗，却认为买房这一赌性更大的事是极为正常且必须要做的事，这就很恐怖了。因为社会舆论是可以引导的，能被引导就能被控制，你的思维是可以被上层建筑灌输和塑造的。这个观点就不再延伸了。&lt;/p&gt;
&lt;p&gt;这里有一个前提是：&lt;strong&gt;房子是金融资产&lt;/strong&gt;。但凡房子是个金融资产，它就应该纳入金融资产的考虑范围内。为什么这么说？难道房子不是买来住的吗？它怎么能是金融资产呢？我们想想，房子的价值在哪？房子肯定有建筑成本吧，也肯定有使用价值吧，建筑成本加上使用价值衡量的是人们心中这套房子真实且合理的价值。如果光看它的使用价值，房子只是买来自己住的，那它的标价合理吗？&lt;strong&gt;普通人付个首付就得掏空一家人的钱包，并且未来二三十年基本存不下来什么钱，就说明了它的标价已经完完全全高到了不合理的地步&lt;/strong&gt;。那么既然房价明显地高出了它应有价值一大截，高出的这一大截在哪？高就高在房子具有金融资产的属性——资产本身是可以交易的，房子是能够将其使用价值租赁出去的，高出的这一大截都是炒起来的&lt;/p&gt;
&lt;p&gt;再举一个例子说明房价很贵。如果我买房是为房子的使用价值付费的话，那我租房不也是为它的使用价值付费？那有没有发现一个事实——&lt;strong&gt;按照我国房屋平均租售比1:600来说，我租一个房子租50年的租金总额，才刚好够买一套房，而这50年的租金仅仅只是我用于支付这套房的使用价值的&lt;/strong&gt;。我们可以想一想，一套房的使用价值真的跟50年的房租等价吗？如果我真有350万买一套广州平均水平的100m²的房并且将其使用价值租售出去的话，哪怕我把这350万存余额宝里，我一年都能拿到7万的利息，即使每个月付5000房租，我一年也能剩下1万。我们会发现，房子这个金融资产，它在今天所产生现金流的效益甚至比余额宝还低，这不是典型的房价高的信号吗&lt;/p&gt;
&lt;p&gt;即使你跟我说，你买房就是买来自己住，你不出租，所以你买的房不具有金融资产的属性。但房子的使用价值和它的金融属性都是它固有的，你不能分开付费，假设一套房的使用价值才50万，而它的金融属性有250万，但你在支付房款时，即使你一开始压根不打算租赁出去，&lt;strong&gt;但你仍不得不为除去使用价值外的金融属性支付额外的溢价&lt;/strong&gt;，你不能说你只为它的使用价值付费，拿买比特币做例子吧，目前比特币78.7万美元一个，但你仍然可以买0.00001个比特币。但你能买0.00001个房子吗？你能只为房子的使用价值付费，不为它的金融属性付费吗？不行啊，你买房子只能买一套，你钱不够多只能上杠杆买整套，你不得不为它的金融属性支付额外的溢价&lt;/p&gt;
&lt;p&gt;在我小学还是初中的时候，人们特别热衷于炒房，我作为学生，甚至在课外读物上看到了炒房风气之盛，以至于政府下场控制房价的资讯。当时的人们认为买房是一种致富手段，房价不跌，买了我可以等它涨高了，反手卖出去；也可以低价买入一直租赁出去。因此掀起了炒房热，此时人们更关注房子的金融属性。因为人们觉得房子未来可以存储更多价值，持有房子以后会让我赚钱，我愿意买它，我花了这个代价之后，这个东西能让我在未来赚到更多的钱，人们主要为它作为金融资产的属性付费。但现阶段买房致富的预期已经不太成立了，看下面的对比图，很多地方的房价已经跌了20%，甚至发达城市中环境好，地段好的房子的房价下跌了30%以上。在金融领域里，我看一只股票跌，那我就不应该继续大量买入，那么为什么仍然有人买呢？&lt;strong&gt;因为炒房的人和买房居住的人是两批人&lt;/strong&gt;，炒房热的时候，人们把房子的金融属性的价值炒得太高了，而买房居住的人年年都有——房子牵扯太多东西了：男性到了年龄就被要求必须有车有房，不然你就是相亲市场里的低质男性，找不到配偶；户口落户，孩子读书，医疗资源等等，你不买套房，你就没有这些资格，很多城市里应有的福利和权利都不属于你，这也是跟房子捆绑在一块的。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-06-11-16-46-51-339312b6d392e50377258a745496853.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;那么房子作为金融资产，为什么不会爆仓呢？按理来说，我上6倍杠杆，且这是人生级别的真实杠杆，波动16.7%就爆仓了，近年的房价更是跌了20%左右，可我们从没听过房市爆仓，国家为什么不会在房价下跌16.7%后把房子收走呢？是因为你买房签的协议里，就已经为未来二三十年做下决定了——你每个月可是要还房贷呢，按照之前的说法，差不多爆仓时，要怎么做才能暂时避免爆仓？继续投入更多本金呗，你每个月的工资拿来还房贷的部分，就是用来补齐你亏掉的本金，所以才不至于爆仓，把你的房子收回。&lt;/p&gt;
&lt;p&gt;这个观点我觉得确实很新颖很有价值，值得记录下来，它让我在未来七年内面临是否买房这一问题时，会从这个角度重新思考这个问题。并且分享我这个观点的人初步判断，&lt;strong&gt;在整个的经济结构和中国的主要生产力形势发生变化之前，他个人觉得房价还是会倾向于回归自己真实的建筑成本加使用价值&lt;/strong&gt;。等我过几年真正面临这个问题时，再回头看这句话，验证是否说对了。&lt;/p&gt;
</content:encoded></item><item><title>如何汉化魔兽地图</title><link>https://gunbrad.xyz/posts/%E5%A6%82%E4%BD%95%E6%B1%89%E5%8C%96%E9%AD%94%E5%85%BD%E5%9C%B0%E5%9B%BE/</link><guid isPermaLink="true">https://gunbrad.xyz/posts/%E5%A6%82%E4%BD%95%E6%B1%89%E5%8C%96%E9%AD%94%E5%85%BD%E5%9C%B0%E5%9B%BE/</guid><pubDate>Mon, 26 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;记录我汉化的一张魔兽地图&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;如何汉化一张魔兽地图&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;这张图以太空，异形，变种等等科幻元素为背景，满足了我童年对于世界的极大好奇。回忆给它镶上了金边，这张图放在今天也仍让我着迷，虽然平时没时间和心思玩游戏了，但出于对我心中那个小孩的尊重，我依然乐意投入时间和精力来汉化它&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;为什么要汉化这张图？起因是我的游戏好友逆逝混迹在discord上，跟原作者混熟后，居然成功让原作者批准我们汉化它了！由于kk对战平台上的作者一直不更新，于是我们决定亲手汉化新版本&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-26-02-10-12-7222e61ef8e0a1fa00a845aa0de502f.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;一：查找教程&lt;/h2&gt;
&lt;p&gt;魔兽争霸3作为一款2002年发布的游戏，相关的汉化教程在网上非常稀少。所幸我在B站发现了&lt;a href=&quot;https://www.bilibili.com/read/readlist/rl149421?spm_id_from=333.1369.opus.module_collection.click&quot;&gt;肥羊的汉化教程&lt;/a&gt;，这个教程详细且易懂。之后我加入了肥羊的粉丝群，在汉化过程中得到了肥羊本人和群友们的大力帮助。&lt;/p&gt;
&lt;h2&gt;二：汉化过程&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;提取源文本&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;根据肥羊的教程，我使用火龙和MPQ提取出了原地图的触发器文件和文本文件。由于是原作者提供的未加密版本，因此我只需要专注于触发器文件内的事件文本的汉化和文本文件的汉化即可&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;接入DeepL的API批量翻译&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;DeepL&lt;/code&gt;是一个翻译网站，提供优质的翻译服务。首先我上&lt;a href=&quot;https://www.deepl.com&quot;&gt;DeepL官网&lt;/a&gt;注册了账号，并申请了免费计划，这样我就能使用DeepL的API进行批量翻译了！&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;编程实现批量翻译&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;其实翻译很简单，只需要调用DeepL的api就好了，尤其是翻译结构化的文本文件，这并不是件难事。困难的是编写过滤器，从海量代码段中筛选出需要汉化的文本。由于大模型受限于上下文长度无法帮我总结过滤条件，因此我只好手动总结过滤条件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;函数及函数参数&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;变量名&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;文件路径和文件扩展名&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;颜色设置相关文本&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;总结过后喂给大模型（使用的是新出的Claude4，好用！），大模型自动帮你写好过滤器，就可以实现机翻了&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;校对和测试&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;不出意外的出意外了，大模型写的过滤器还是有问题。我最初的方案是对触发器文件每5000行都拷进游戏内进行测试，若崩溃则说明这个代码段有问题，但工作量实在太大了。&lt;/p&gt;
&lt;p&gt;不过肥羊推荐了编辑jass文本的工具&lt;code&gt;EverEdit&lt;/code&gt;,装上jass扩展后就能高亮显示出语法错误，很快就找到问题在哪了——对于原本存在双引号的语句，过滤时忽略了其转义字符，将一段文本转为多段文本导致有些中文字符出现在双引号外，真是个低级错误啊。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;地图加密和上传&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;完成汉化后，我使用&lt;code&gt;W3x Map Optimizer&lt;/code&gt;对地图进行了最高级别的加密，保护原作者的知识产权，避免了潜在的侵权问题。之后将机翻版本上传到kk对战平台。&lt;/p&gt;
&lt;p&gt;后期的精翻工作还在进行中....&lt;/p&gt;
&lt;p&gt;说实话，汉化完之后梳理一遍，其实不难（主要是肥羊写的教程非常轮椅，一学就会了），但我刚开始碰壁较多，浪费挺多时间的。不过无所谓，这就是热爱！&lt;/p&gt;
&lt;hr /&gt;
</content:encoded></item><item><title>通过520看两性关系</title><link>https://gunbrad.xyz/posts/%E9%80%9A%E8%BF%87520%E7%9C%8B%E4%B8%A4%E6%80%A7%E5%85%B3%E7%B3%BB/</link><guid isPermaLink="true">https://gunbrad.xyz/posts/%E9%80%9A%E8%BF%87520%E7%9C%8B%E4%B8%A4%E6%80%A7%E5%85%B3%E7%B3%BB/</guid><pubDate>Thu, 22 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;记录一下最近在前哨站听到的观点&lt;/p&gt;
&lt;h2&gt;一：女性被资本引导/塑造成更愿意花钱的形象&lt;/h2&gt;
&lt;p&gt;注意观察的人可以发现，今年520的氛围非常淡，朋友圈很少看见男女朋友秀恩爱的，往年美团甚至早早贴出了庆祝520的banner图，今年甚至都看不到。这是什么情况。&lt;/p&gt;
&lt;p&gt;我们来谈谈这个问题。五年前在中国经济繁荣发展的时候，整个互联网跟商业格局和商业认知挂钩的领域，都会提出一个不等式——&lt;code&gt;从消费力的角度来说：女性&amp;gt;孩子&amp;gt;狗&amp;gt;男性&lt;/code&gt;。大致意思是说，女生更愿意消费和花钱，因此做生意应该优先瞄准女性。当年的这个认知是给了女性一种优越感的，敢花钱爱花钱，成为了消费市场的中流砥柱&lt;/p&gt;
&lt;p&gt;这个不等式在当年的统计确实是客观事实，但它有一个条件——这个事情值得让人开心自豪和产生身份认同感，前提是经济形势大好，&lt;strong&gt;这件事只在每个人都能觉得自己能赚到钱，所有人都不觉得自己赚不到钱或者所有人都觉得有没有钱不是一个问题的时候才成立&lt;/strong&gt;。一个能赚钱更能花钱的人，实际上对于整个社会的经济的发展是起到促进作用的。大多数资本家一定希望通过普通民众做交易的方式来赚到钱的&lt;/p&gt;
&lt;p&gt;那么当我们之前的硬性前提发生了动摇之后，我们还怎么看待这个不等式？我们从负面的角度来理解它，假设这个不等式成立，那是不是说&lt;strong&gt;有人希望你花更多钱，那你就成为了花更多钱的人&lt;/strong&gt;？在现在这种情况下，我可不可以把这个不等式理解为洗脑难易程度的排序，消费力的不等式本质上也可以叫做洗脑难易程度的排序，可不可以这样理解？&lt;/p&gt;
&lt;p&gt;这个说法有点难以理解，为什么消费力的排序可以理解成洗脑难易程度的排序？难道不是我具有那么高的消费力才排在最前面吗，难道我是因为容易被洗脑，所以才被洗脑成更愿意消费花钱的样子吗？听起来太荒谬了！有点本末倒置的感觉。&lt;/p&gt;
&lt;p&gt;我们仔细想想。为资本付费肯定是资本家希望发生的事情，民众花钱了消费了付费了，受益的是通过交易赚差价的资本家，那么再结合这个不等式来看，有没有一种可能，是&lt;code&gt;资本发现女性更容易被引导成更愿意消费的样子，所以才使得女性变成了消费力最高样子？&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;再重复一遍，&lt;code&gt;有没有可能女性被引导着，被塑造成更愿意花钱的形象，所以女性这个群体的消费力才最高？&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;举个例子吧，以大城市的单身独立小姨回村的待遇的内容为例，我们很容易在网上看到这种视频的，拿b站，小红书一搜就可以。主要内容讲在上海工作的三十五六岁没有结婚的小姨回到农村，没有被催婚，没有被亲戚朋友的观念绑架，自己赚了很多钱，给父母亲戚都拿了很多钱，然后非常体面的回家，非常体面的离开。塑造了一个即使没有爱情也要对自己足够好的女性形象&lt;/p&gt;
&lt;p&gt;这也是互联网最简单的起号方式吧？单身独居女性的一天，单身精致女性的一天，做瑜伽啊美容啊健身啊巴拉巴拉非常精致的一天。这样的东西抛开了爱情的因素，对整个女性群体的价值观塑造产生了很大的影响的——恋爱是可以不谈的，但人一定要对自己好
那么问题来了，&lt;strong&gt;我们在互联网上看到过单身独居男性的一天吗，看到过单身精致男性的一天吗&lt;/strong&gt;？没看过吧，男生没看过女生也没看过，这说明了什么？这说明了互联网上引导女性的内容是比引导男性的内容要多的，我们很少可以看到有视频引导男性说独立啊精致啊对自己好啊之类的，我们顶多能看到男生不谈恋爱对自己好一点，买个显卡啥的，但是没见过男性每天的精致生活，vlog之类的。
这难道不就是说明有东西在背后刻意引导？不是某个人也不是某个群体在引导，而是&lt;strong&gt;资本&lt;/strong&gt;在背后刻意引导。女性这个群体客观来说，一直在经历着消费主义价值观的影响和塑造，但男性群体却不怎么会被消费主义价值观影响，&lt;code&gt;资本看不上他们，也不大想影响他们&lt;/code&gt;，毕竟洗脑难易程度摆在那了。&lt;/p&gt;
&lt;h2&gt;二：资本对男性的影响&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;资本通过性稀缺性调动男性消费&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;回到我们的不等式中：女性&amp;gt;孩子&amp;gt;狗&amp;gt;男性。资本在背后刻意引导女性成为了更愿意消费的样子，那男性呢？我只掏女性的腰包怎么够，我还要掏男性的腰包。&lt;code&gt;资本没有办法轻松调动起男性的消费欲，但可以通过性稀缺性这个社会现状，通过调动女性，用女性来调动男性的消费欲，这就是更深层次的资本策略。&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这是什么意思？一个很简单的方式嘛——你要谈恋爱，把爱情摆在你面前，为了获得爱情，你需要掏自己的兜为女生付出，那这样你的钱就得出来了。有很多女生认为大学生谈恋爱AA不合适。男生跟女生约会怎么能让女生掏一分钱，谁影响了这个观念？谁说就应该如此的，不是平等吗，平等到哪去了？男生请女生吃了500块的饭，让女生请他喝个奶茶，男生都要被认为是小气和抠门。整个社会风气塑造下来，男生不就是我们说的冤大头吗？女生还要回头去闺蜜群里炫耀，这是我的舔狗，该花这个钱，我还不能让他得吃，不然就钓不到了
我们客观来说，男生和女生真有一方是傻逼吗？男的就是那么傻，请女生吃了饭，让女生请喝杯奶茶也要被社会风气指责是自己的问题，最后我们不仅谈不上，女生还要跟闺蜜说我是你的舔狗，我就这么傻，傻到一直舔你？&lt;strong&gt;人们心中对爱情的向往可以抵消心中的一部分不满，但也不能那么傻&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;所以我们会发现，这样的舔狗经济盛行三五年后，越来越多男性意识到，当对方为了维持让我继续付出才必须找我的时候，我不干了，谁爱干谁干，说通俗点是舔狗经济崩盘了。你说我对你好，你念着我的好，最后咱们没成，这种情况还好说，我要是为了让我对你好，我对你好了，你还当我是傻逼，那我怎么可能一直傻逼下去呢？虽然这个例子是极端个例，但这样的极端个例是以一种趋势在演化的，已经影响很多人了。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;社会风气对男性的影响&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;刚才说了资本对女生的引导和塑造，没说资本对男生的引导和塑造，因为资本不需要盯着我们搞，它看不上男性，也不大想影响男性。不过真正对男性下手的不是传统意义上的消费品，我们男生被坑就被坑一波大的——房子车子结婚。&lt;code&gt;到了年龄，男生不得不面对这个问题：你要结婚，房子是不是该你出大头？车子是不是该你出大头？结婚是不是该你出大头？&lt;/code&gt;
这三点合在一块，就意味着但凡男生到了谈婚论嫁的年龄，身上就直接背了200万的负债要还，还不上你就一直卡这了，而一般男生因为社会世俗对这件事的理解不得不还，你还不上咋办？拉上父母，七大姑八大姨一起还。
因此，我们男性本质上早就被资本设计的另一个局套进去了。你买房谁赚钱？房地产赚钱国家赚钱；买车谁赚钱？汽车开发商赚钱国家赚钱；结婚谁赚钱？搞婚礼类一个产业链赚钱，以及国家求得一个稳定。你逃得脱吗？到了年龄被亲戚压力被同事压力，你受得住吗。&lt;/p&gt;
&lt;h2&gt;三：男性群体和女性群体都是弱势群体&lt;/h2&gt;
&lt;p&gt;现阶段，社会风气对男生的影响，资本做局在消费层面对女生的影响，男女都挺不容易的。&lt;code&gt;但男女都认为有一方容易有一方不容易，有一方上当了另一方没上当，有一方地位高有一方地位低，于是就开始打男权女权了。&lt;/code&gt;
比如说男生说不结婚是什么原因？我他妈是舔狗经济的一员，我要他妈付出还不落好，我肯定不结；女生不结婚的原因是什么？女生觉得一个人生活挺好，为什么要受男生的气，为什么要受花心大萝卜的影响搞得自己心态很崩，我一人赚钱一人花，把自己养的美美的，不也挺好？男女双方都觉得有一方赚有一方赔，都不想让对方占便宜和自己吃亏，男女就对立起来了，互联网上男权女权打得飞起。
但是现在的社会环境，&lt;code&gt;男方女方都是吃亏的一方，男性和女性都是弱势群体，不应该相互对立，而是应该一起联手对抗社会结构，对抗资本做局，相互理解嘛。&lt;/code&gt;女生觉得男生烦的时候就想想，男生一到该结婚的年龄就要背上他妈200万贷款，觉得对方挺不容易的，怎么还能觉得对方为我花钱是理所应当，把对方当舔狗看？男生也不要把女生想成眼里只有钱，要想想，女生被资本引导更愿意付费，不愿意消费，甚至不符合价值观，自己能留下钱就很难了，男生也应该体谅女生，让她的生活在已有的影响框架下变得轻松一点点。&lt;/p&gt;
&lt;p&gt;男生少看点男权，女生少看点女权，互联网上的骂战无止无休。天天打女权的那些人是在给女性争取平等吗？难道不是在谋特权？天天反女权的男的本质上是什么，重新给男性谋特权，两方都是傻逼。如果你想要特权你就明说，没必要打着平权的旗号。&lt;strong&gt;平权就是平的，有什么好说的。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;男女对立还有一个特点：&lt;code&gt;没有判断是非对错的标准，只有立场&lt;/code&gt;，跟政治正确类的话题差不多。没有对错标准，&lt;strong&gt;只谈立场。只谈立场就跟对错没关系了&lt;/strong&gt;——你跟我不是一个立场，那你就错了。你不站队LGBT，你就是反对自由，就是政治不正确，就罪该万死，该杀！在女权中可以这样说：抛开事实不谈，你的态度就真的没有问题吗？连事实都不谈了，这不典型的只谈立场不谈事实吗，我就只想说我想说的，只想争取我想争取的。男权中可以说我凭什么要承担家庭责任，因为你被大男子主义影响了，在家里面又想当家作主，又不承担责任，这不耍流氓吗？还不是既要又要，最后责任也不想承担。两边都没有好鸟。&lt;/p&gt;
&lt;p&gt;少看一点男女对立话题吧，只谈立场不谈事实，没有判断标准的事情是最没有意义的。&lt;strong&gt;无论男性群体还是女性群体，都是弱势的一方，没有必要互相攻击互相指责，我们真正的共同的那个敌人是社会结构，是资本，绝非我们彼此。&lt;/strong&gt;&lt;/p&gt;
</content:encoded></item><item><title>人类首次给人类自身最赖以为豪的智能定价</title><link>https://gunbrad.xyz/posts/%E4%BA%BA%E7%B1%BB%E9%A6%96%E6%AC%A1%E7%BB%99%E6%9C%80%E8%B5%96%E4%BB%A5%E4%B8%BA%E8%B1%AA%E7%9A%84%E6%99%BA%E8%83%BD%E5%AE%9A%E4%BB%B7/</link><guid isPermaLink="true">https://gunbrad.xyz/posts/%E4%BA%BA%E7%B1%BB%E9%A6%96%E6%AC%A1%E7%BB%99%E6%9C%80%E8%B5%96%E4%BB%A5%E4%B8%BA%E8%B1%AA%E7%9A%84%E6%99%BA%E8%83%BD%E5%AE%9A%E4%BB%B7/</guid><pubDate>Sun, 18 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;记录一下最近听到的一个特牛逼特震撼的观点&lt;/p&gt;
&lt;h2&gt;一：前置条件&lt;/h2&gt;
&lt;p&gt;这个观点有两个前置条件，我们先说第一个：&lt;/p&gt;
&lt;p&gt;Openai的o3模型在智商测试时测出的IQ为&lt;code&gt;136&lt;/code&gt; ，而人类平均智商为&lt;code&gt;90-110&lt;/code&gt;，高出人类平均智商2个标准级，这样的IQ在人群中属于天才，我们类比一下高中的天赋怪，无需多努力就能上清北，大概是这种水平&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/GoxzUxGbMAA_uKl?format=jpg&amp;amp;name=large&quot; alt=&quot;图像&quot; /&gt;&lt;/p&gt;
&lt;p&gt;第二个：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-18-11-47-05-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;卓克在科技参考4中估算了各大厂商大模型每百万token的成本（约为50-70万汉字），平均在5-10美元。也就是说，大模型每输入输出50-70万汉字，成本仅为70元人民币。上图为卓克的原文&lt;/p&gt;
&lt;h2&gt;二：人类首次给最赖以为豪的智能定价&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;人首次给最赖以为豪的智能定价&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;我们常说IQ越高的人越聪明，IQ就是过往人类社会衡量智能的一种方式，本质上衡量的是智能的高低；而即便大模型的训练成本很高（这是科技公司为了科技垄断所需要承担的成本），普通人使用大模型的成本居然才70块，70块的成本换取大模型的智能，这买卖还不合算？&lt;/p&gt;
&lt;p&gt;Think，Mark！想想我们能从上面两个条件推出什么结论？我们能推出一个很震撼的结论——&lt;code&gt;人类首次给人类最赖以为豪的智能定价&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;是的，再重复一遍，&lt;strong&gt;人类首次给我们人类自身最赖以为豪的智能定了价&lt;/strong&gt;，而这件事在人类历史上是从没发生过的，过去我们甚至都没有将智能提炼出来过，没有提炼出来自然也就没有为这个专项属性定价的资格，而今天，我们正在做从没有人做过的事&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;这引发了什么问题&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;那么随之而来出现的一个问题是：&lt;code&gt;与人类比肩的智能远远没有我们预想中那么值钱&lt;/code&gt;。一个天才的定价才70块？开玩笑呢吧。我们假设一个大学毕业生的薪资为7000一个月，这7000的工资里包含了智能部分和非智能部分。在信息时代，老板雇用员工完成脑力活动的工作，他真正想要的是你提供的智能价值，也就是老板主要是为你能提供的智能价值付费，你7000的工资大部分来源于智能的那一部分。但现在AI跳出来，声称智能部分只能定价70块，那剩下的6930是在为什么付费？这6930粗略上可以看为，是在为人的个体活在世上的刚性成本付费。怎么理解这句话？老板付这6930是为了让你正常的活着以便能来公司用AI的智能创造给他创造价值&lt;/p&gt;
&lt;p&gt;我们一直以来接受的教育并没有让我们的智能变得值钱，而是把我们包装得更好看。你读了大学读了研究生，你的智能的价值就能从70块翻倍成140块了？你的IQ就能从90变为180了？不见得吧。那为什么所有人读完书之后，都觉得自己应该拿更高的工资，985就应该拿比双非多1.5倍的工资，比二本多2倍的工资？这说明了一点，我们的教育其实就是让我们自洽的认为，&lt;strong&gt;除去真正意义上智能价值以外的，我们的包装才是真正有价值的东西&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;但在这个时代，我们每个人都不能否认，大模型是会越来越聪明的，一个人除去智能价值以外的那层包装的价值将迟早被越来越多人戳破，人们将会专注于真正的智能价值。&lt;/p&gt;
&lt;p&gt;哇，大模型那么聪明，普通人的智能是什么货色啊，我是老板的话，我有什么理由为了用这种货色支付30倍乃至100倍的成本？这不纯冤大头吗。&lt;/p&gt;
&lt;p&gt;那是不是意味着未来的老板不需要员工了？我觉得我们不应该这样看待，我们应该从另一个角度看——&lt;code&gt;员工不再需要老板了&lt;/code&gt; 。但凡你去工作，老板都要为你身为人类的那层外包装付额外的成本，这就是纯纯冤大头，那么谁又愿意当冤大头？未来的人戳破了人类的包装价值后，是没有人愿意为这层包装付额外的成本的，也没有人会愿意为别人存在于这个世界上应有的刚性成本支付任何溢价，而当你只为自己承担你自己存在于世上的刚性成本时，你不就成了自己的老板吗？因此，&lt;code&gt;并不是老板不需要员工了，而是员工不需要老板了&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;三：我们应该怎么看待&lt;/h2&gt;
&lt;p&gt;既然我们都公认，大模型只会变得越来越聪明，其智能将越来越超越人类，连我们最赖以为豪的智能都被大模型压了一头，那我们的价值存在哪里？&lt;/p&gt;
&lt;p&gt;有一个很简洁的公式说明了这一点：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;价值=智能价值+超越智能的价值&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;以前的人不清楚什么是智能价值，没有人给智能定过价，所以价值的计算公式往往是一笔糊涂账，压根算不明白，里面掺了很多水分&lt;/p&gt;
&lt;p&gt;什么是超越智能的价值？卓克的一篇文章探讨了大模型还取代不了的工作有哪些，他的观点也很新颖&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-18-14-31-38-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;他说的第一点是：&lt;code&gt;超过1M token长度上下文的工作&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;前面也提到过了，百万token的成本在35-70人民币之间，而一百万的token，内存上刚好是1M。也就是说，AI暂时还替代不了超过50-70万汉字长度的上下文的工作。而且更重要的一点是，其实很多大模型厂商都宣称自己的模型的有效上下文长度为1M，但实际上大多数都做不到，我们平时自己使用大模型的时候也有这种感觉——对话进行的越长，大模型越胡言乱语。而大部分大模型的有效上下文长度最多也只有0.3M。而为什么对话长度不能超过1M？这受限于大模型的底层逻辑，支持的上下文长度越高，所需要的算力成本是指数增加的，最后的成本是当前生产力水平难以承担的&lt;/p&gt;
&lt;p&gt;大模型还取代不了的工作是什么？那就是&lt;code&gt;利用互联网上没有的知识开展的工作&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;以GPT4来说，其训练数据为1PB(1024²GB)，这1PB还是清洗后的数据量，且包含各个知识领域。但是有很多信息是不在互联网上的，卓克举的例子很高大上，他以摩根大通这样的金融公司为例，一家公司就有150PB的数据，这是沉淀了几十年，各分析师精加工后仅在公司内部使用的宝贵数据。&lt;/p&gt;
&lt;p&gt;我们不谈大亨，只专注于普通人。&lt;code&gt;大模型无法使用脱离互联网之外的内容的，而如果我的工作是我使用AI，基于我个人内部长期沉淀的东西才能完成的，那么这份工作在世界上是独一份的，这就是人保留自身价值的核心基本盘&lt;/code&gt;&lt;/p&gt;
</content:encoded></item><item><title>新增留言功能</title><link>https://gunbrad.xyz/posts/%E6%96%B0%E5%A2%9E%E7%95%99%E8%A8%80%E5%8A%9F%E8%83%BD/</link><guid isPermaLink="true">https://gunbrad.xyz/posts/%E6%96%B0%E5%A2%9E%E7%95%99%E8%A8%80%E5%8A%9F%E8%83%BD/</guid><pubDate>Thu, 15 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;给博客增加了留言板功能，现在可以在博客留言了&lt;/p&gt;
&lt;h2&gt;一：问题背景&lt;/h2&gt;
&lt;p&gt;想给博客加一个留言功能，但是又不想部署数据库，问了大模型后发现&lt;code&gt;supabase&lt;/code&gt; 这一免费数据库可以满足懒人的需求，开始行动！&lt;/p&gt;
&lt;h2&gt;二：解决方案&lt;/h2&gt;
&lt;p&gt;使用&lt;code&gt;supabase&lt;/code&gt; 数据库存留言数据&lt;/p&gt;
&lt;h2&gt;三：实施步骤&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;注册&lt;code&gt;supabase&lt;/code&gt;并完成数据表的建立和配置&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;id，类型uuid，主键&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;created_at，默认创建，类型timestamptz&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;nickname，类型text，非空&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;qq_email,类型text&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;content，类型text，非空&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;background_color,类型text，非空&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;text_color，类型text，非空&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;border_style,类型text，非空&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ip_hash,类型text，非空&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;location，类型text&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;配置安全策略，设置匿名读写权限&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;完成前后端的开发，后端开发insert和select接口。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>使用Cloudflare Workers反向代理优化评论系统</title><link>https://gunbrad.xyz/posts/%E4%BD%BF%E7%94%A8cloudflare-workers%E4%BC%98%E5%8C%96%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F/</link><guid isPermaLink="true">https://gunbrad.xyz/posts/%E4%BD%BF%E7%94%A8cloudflare-workers%E4%BC%98%E5%8C%96%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F/</guid><pubDate>Wed, 14 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;一： 问题背景&lt;/h2&gt;
&lt;p&gt;我用Vercel + MongoDB Atlas + Twikoo 搭建了博客的评论系统，今天测试时发现，只有常挂梯子时才能正常加载出评论功能。这是因为Vercel服务在中国无法正常访问，导致评论系统无法加载。&lt;/p&gt;
&lt;h2&gt;二： 解决方案&lt;/h2&gt;
&lt;p&gt;使用Cloudflare的Workers功能搭建反向代理，实现智能分流。这样无论用户是否使用VPN，都能正常加载评论系统。（cloudflare真香）&lt;/p&gt;
&lt;h2&gt;三： 实施步骤&lt;/h2&gt;
&lt;h3&gt;3.1 创建Cloudflare Worker&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;注册/登录Cloudflare账号&lt;/li&gt;
&lt;li&gt;进入&lt;code&gt;Workers &amp;amp; Pages&lt;/code&gt;界面&lt;/li&gt;
&lt;li&gt;点击&lt;code&gt;创建&lt;/code&gt; → &lt;code&gt;从Hello World!开始&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;编写Worker代码：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;addEventListener(&apos;fetch&apos;, event =&amp;gt; {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  if (request.method === &apos;OPTIONS&apos;) {
    return handleOptions(request);
  }

  // 填写Twikoo API的Vercel地址
  const apiUrl = &apos;https://xxxx&apos;;

  try {
    const url = new URL(request.url);
    const targetUrl = new URL(url.pathname + url.search, apiUrl);

    console.log(`代理请求: ${request.method} ${targetUrl.toString()}`);
    const requestHeaders = new Headers(request.headers);
    requestHeaders.set(&apos;Origin&apos;, apiUrl);
    requestHeaders.set(&apos;Referer&apos;, apiUrl);

    const newRequest = new Request(targetUrl.toString(), {
      method: request.method,
      headers: requestHeaders,
      body: request.body,
      redirect: &apos;follow&apos;
    });

    const response = await fetch(newRequest);

    const responseHeaders = new Headers(response.headers);
    responseHeaders.set(&apos;Access-Control-Allow-Origin&apos;, &apos;*&apos;);
    responseHeaders.set(&apos;Access-Control-Allow-Methods&apos;, &apos;GET, POST, PUT, DELETE, OPTIONS&apos;);
    responseHeaders.set(&apos;Access-Control-Allow-Headers&apos;, &apos;Content-Type, Authorization, X-Requested-With&apos;);
    responseHeaders.set(&apos;Access-Control-Max-Age&apos;, &apos;86400&apos;);

    return new Response(response.body, {
      status: response.status,
      statusText: response.statusText,
      headers: responseHeaders
    });
  } catch (error) {
    console.error(`代理请求失败: ${error.message}`);
    return new Response(`代理请求失败: ${error.message}`, { status: 500 });
  }
}

function handleOptions(request) {
  const headers = new Headers({
    &apos;Access-Control-Allow-Origin&apos;: &apos;*&apos;,
    &apos;Access-Control-Allow-Methods&apos;: &apos;GET, POST, PUT, DELETE, OPTIONS&apos;,
    &apos;Access-Control-Allow-Headers&apos;: &apos;Content-Type, Authorization, X-Requested-With&apos;,
    &apos;Access-Control-Max-Age&apos;: &apos;86400&apos;
  });

  return new Response(null, {
    status: 204,
    headers
  });
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;保存并部署Worker&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;3.2 配置自定义域名&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在Cloudflare DNS管理中，添加子域名记录：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;类型: &lt;code&gt;CNAME&lt;/code&gt;，必填&lt;/li&gt;
&lt;li&gt;名称: &lt;code&gt;twikoo&lt;/code&gt;，随便填&lt;/li&gt;
&lt;li&gt;目标: &lt;code&gt;&amp;lt;your-worker-name&amp;gt;.&amp;lt;your-username&amp;gt;.workers.dev&lt;/code&gt;，最终会得到类似于这样结构的url&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在Worker设置的&lt;code&gt;域和路由&lt;/code&gt;选项卡中添加自定义域名和路由，以我的为例&lt;code&gt;twikoo.gunbrad.xyz&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;3.3 修改博客项目配置&lt;/h3&gt;
&lt;p&gt;把本地项目中原配置的vercel链接全换成刚才自定义的域名即可&lt;/p&gt;
&lt;h2&gt;&lt;/h2&gt;
</content:encoded></item><item><title>使用Cloudflare自定义邮箱白嫖cursor</title><link>https://gunbrad.xyz/posts/%E4%BD%BF%E7%94%A8cloudflare%E8%87%AA%E5%AE%9A%E4%B9%89%E9%82%AE%E7%AE%B1%E7%99%BD%E5%AB%96cursor/</link><guid isPermaLink="true">https://gunbrad.xyz/posts/%E4%BD%BF%E7%94%A8cloudflare%E8%87%AA%E5%AE%9A%E4%B9%89%E9%82%AE%E7%AE%B1%E7%99%BD%E5%AB%96cursor/</guid><pubDate>Tue, 13 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;&lt;/h1&gt;
&lt;h2&gt;&lt;strong&gt;一：下载cursor-free-vip&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;cursor的免费版可以发起50次对话，使用完50次之后在官网注销账号重新注册登录就能重获50次对话额度，但是重新注册3次后就不能通过该方式白嫖50次cursor了。第一是cursor官方会锁定你电脑上的机器码，免费版的同一个机器码最多发起150次对话。第二会关联你的邮箱，同一个邮箱只能反复注册3次。&lt;/p&gt;
&lt;p&gt;为了解决这个问题，我们需要一个工具&lt;a href=&quot;https:/github.com/yeongpin/cursor-free-vip&quot;&gt;cursor-free-vip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;找到&lt;code&gt;Releases&lt;/code&gt;，点击进入&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-13-12-54-29-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;下载与你操作系统适配的一项&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-13-12-55-06-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;安装后运行（需要管理员权限，点击确认即可），出现如下界面就说明成功了：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-13-12-58-47-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;二：注册域名并托管到cloudflare&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;首先你应该注册一个&lt;a href=&quot;https://www.cloudflare.com/zh-cn/&quot;&gt;Cloudflare&lt;/a&gt;账号，QQ邮箱和谷歌都可&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击左侧导航栏的&lt;code&gt;账户主页&lt;/code&gt;，选择&lt;code&gt;添加域&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-13-13-03-25-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;现在我们需要到&lt;a href=&quot;https://www.aliyun.com/&quot;&gt;阿里云&lt;/a&gt;购买一个域名（也可以使用免费域名，不过我没试过），输入你想要查询的域名，点击&lt;code&gt;立即查询&lt;/code&gt;。我使用的是.xyz域名，首年6块，非常实惠&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-13-13-06-36-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-13-13-08-03-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;首次注册域名需要实名认证，填写信息模板（信息模板的审核需要时间，耐心等待一会就好了）。之后按指引支付即可&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-13-13-09-57-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;回到cloudflare，填写刚才注册的域名，会给我们两个专属DNS服务器地址，我们需要到阿里云配置DNS服务器&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-13-13-58-00-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在阿里云的域名列表找到刚注册的域名，点击&lt;code&gt;管理&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-13-13-58-34-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;点击&lt;code&gt;修改DNS&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-13-14-30-48-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;点击&lt;code&gt;修改DNS服务器&lt;/code&gt;，修改完后点击&lt;code&gt;同步&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-13-14-00-14-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;三：配置电子邮件路由&lt;/h2&gt;
&lt;p&gt;完成修改DNS服务器后，需要一定时间生效(大概五六分钟？)，期间cloudflare中你的域名会显示为&lt;code&gt;名称服务器无效&lt;/code&gt;，这是正常的。当生效后会显示&lt;code&gt;活动&lt;/code&gt;。接下来可以自定义邮箱了&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在cloudflare中进入你自己注册的域名，在左侧导航栏选择&lt;code&gt;电子邮件&lt;/code&gt;-&amp;gt;&lt;code&gt;电子邮件路由&lt;/code&gt;，然后点击&lt;code&gt;目标地址&lt;/code&gt;，选择&lt;code&gt;添加目标地址&lt;/code&gt;，在其中填写你实际接受邮件的邮箱即可，这样只要向你的自定义邮箱发送邮件，邮件会自动转发到你填写的目标邮箱中。你会在目标邮箱收到一封验证邮件，验证成功后就完成了目标地址的创建&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-13-14-12-08-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;接下来选择&lt;code&gt;路由规则&lt;/code&gt;，选择&lt;code&gt;创建地址&lt;/code&gt;，自定义地址填写你的自定义邮箱名，填单个数字也可以；目标位置填写你在上一步验证的目标地址&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-13-14-14-24-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;四：完成cursor注册&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;打开第一步下载的cursor-free-vip文件，输入3&lt;code&gt;关闭cursor应用&lt;/code&gt;（如果你打开着cursor就先输入3，否则不用管这一步），然后输入8&lt;code&gt;完全重置cursor&lt;/code&gt;，接着输入2&lt;code&gt;使用自定义邮箱注册cursor&lt;/code&gt;。把你刚创建的自定义邮箱填进去，该程序会自动打开Chrome完成 cursor的注册，非常方便&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-13-14-19-50-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;如果通过上一步不能完成cursor的注册，自动打开Chrome后什么也没有发生/程序卡住/程序卡在验证环节，那还是手动完成cursor的注册吧。我们打开&lt;a href=&quot;https://www.cursor.com/cn&quot;&gt;Cursor&lt;/a&gt;的官网，点击&lt;code&gt;登录&lt;/code&gt;，选择&lt;code&gt;Sign up&lt;/code&gt;，进入注册页面。信息随便填，也可以填写cursor-free-vip随机生成的姓名和密码，邮箱填写创建的自定义邮箱即可。（但是还是要先完全重置cursor再手动注册）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;好的，学到这，你已经是合格的嫖客了，开始爽用cursor吧&lt;/p&gt;
</content:encoded></item><item><title>我是如何基于Fuwari框架搭建个人博客的</title><link>https://gunbrad.xyz/posts/%E6%88%91%E6%98%AF%E5%A6%82%E4%BD%95%E5%9F%BA%E4%BA%8Efuwari%E6%A1%86%E6%9E%B6%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2%E7%9A%84/</link><guid isPermaLink="true">https://gunbrad.xyz/posts/%E6%88%91%E6%98%AF%E5%A6%82%E4%BD%95%E5%9F%BA%E4%BA%8Efuwari%E6%A1%86%E6%9E%B6%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2%E7%9A%84/</guid><pubDate>Mon, 12 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;&lt;/h1&gt;
&lt;p&gt;记录一下我是如何搭建我的个人博客的&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/2025-05-12-21-43-17-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%89%8D%E7%BD%AE%E5%87%86%E5%A4%87&quot;&gt;前置准备&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%8E%B7%E5%8F%96Fuwari%E6%A1%86%E6%9E%B6%E5%B9%B6%E5%AE%8C%E6%88%90%E9%85%8D%E7%BD%AE&quot;&gt;一：获取Fuwari框架并完成配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BA%8C%E6%96%87%E7%AB%A0%E7%BC%96%E5%86%99&quot;&gt;二：文章编写&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%89%E9%83%A8%E7%BD%B2%E5%88%B0github&quot;&gt;三：部署到GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%9B%9B%E9%85%8D%E7%BD%AEcloudflare-pages&quot;&gt;四：配置Cloudflare Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BA%94%E8%AE%BE%E7%BD%AE%E8%87%AA%E5%AE%9A%E4%B9%89%E5%9F%9F%E5%90%8D&quot;&gt;五：设置自定义域名&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;前置准备&lt;/h2&gt;
&lt;p&gt;开始搭建博客前，需要做好如下准备，安装将不再赘述：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;开发环境&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://nodejs.org/&quot;&gt;Node.js&lt;/a&gt; &amp;gt;18.x ,&amp;lt;= 22&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://git-scm.com/&quot;&gt;Git&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;账号&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/&quot;&gt;GitHub&lt;/a&gt; 账号（用于代码托管）&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cloudflare.com/&quot;&gt;Cloudflare&lt;/a&gt; 账号（用于网站托管和域名管理）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;可选&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自己的域名（如果使用自定义域名）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;一：获取Fuwari框架并完成配置&lt;/h2&gt;
&lt;h3&gt;1.1 获取Fuwari框架&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Fork仓库&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;访问 &lt;a href=&quot;https://github.com/saicaca/fuwari&quot;&gt;Fuwari GitHub仓库&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击右上角的&quot;Fork&quot;按钮&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/2025-05-12-21-46-54-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;设置仓库名称，然后点击&quot;Create fork&quot;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/2025-05-12-22-16-33-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;1.2 将仓库克隆到本地&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;新建文件夹，在标识处输入cmd&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/2025-05-12-22-20-02-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开终端（命令行），执行以下命令：&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;git clone https://github.com/YOUR_USERNAME/REPO_NAME.git&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;替换 YOUR_USERNAME 为自己的GitHub用户名，REPO_NAME 为仓库名称&lt;/p&gt;
&lt;h3&gt;1.3 安装依赖&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在项目根目录安装pnpm：&lt;code&gt;npm install -g pnpm&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;然后安装项目依赖：&lt;code&gt;pnpm install&lt;/code&gt;和&lt;code&gt;pnpm add sharp&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;1.4 基础配置修改&lt;/h3&gt;
&lt;p&gt;打开&lt;code&gt;src/config.ts&lt;/code&gt;文件，这个文件博客相关的配置：&lt;/p&gt;
&lt;p&gt;网站配置：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export const siteConfig: SiteConfig = {
    title: &quot;Gunbrad Blog&quot;, // 博客名称
    subtitle: &quot;&quot;,
    lang: &quot;zh_CN&quot;, // 博客语言，选择zh_CN即为中文
    themeColor: {
        hue: 280, // 博客的颜色主题
        fixed: true, // 设为true游客不能自主调整博客颜色主题
    },
    banner: {
        enable: false, // 是否开启banner图
        src: &quot;assets/images/banner5.jpg&quot;, // banner的路径，放在assets/images目录下
        position: &quot;bottom&quot;, // Equivalent to object-position, only supports &apos;top&apos;, &apos;center&apos;, &apos;bottom&apos;. &apos;center&apos; by default
        credit: {
            enable: false, // Display the credit text of the banner image
            text: &quot;&quot;, // Credit text to be displayed
            url: &quot;&quot;, // (Optional) URL link to the original artwork or artist&apos;s page
        },
    },
    toc: {
        enable: true, // Display the table of contents on the right side of the post
        depth: 2, // Maximum heading depth to show in the table, from 1 to 3
    },
    favicon: [
        // Leave this array empty to use the default favicon
        // {
        //   src: &apos;/favicon/icon.png&apos;,    // Path of the favicon, relative to the /public directory
        //   theme: &apos;light&apos;,              // (Optional) Either &apos;light&apos; or &apos;dark&apos;, set only if you have different favicons for light and dark mode
        //   sizes: &apos;32x32&apos;,              // (Optional) Size of the favicon, set only if you have favicons of different sizes
        // }
    ],
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;个人资料配置：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export const profileConfig: ProfileConfig = {
  avatar: &quot;assets/images/avatar.jpg&quot;, // 头像路径，建议放在src/assets/images目录下
  name: &quot;你的名字&quot;, // 你的名字
  bio: &quot;个人简介&quot;, // 你的个人简介
  links: [
        {
            name: &quot;QQ&quot;,
            icon: &quot;fa6-brands:qq&quot;, // 在icons.js这个网站寻找对应的图标，fa6-brands系列的图标就足够了
            url: &quot;https://qm.qq.com/q/iejWCmdg2c&quot;, // 手机QQ的“我的二维码”界面的分享功能可以复制链接，粘贴在此处即可
        },
         {
            name: &quot;Wechat&quot;,
            icon: &quot;fa6-brands:weixin&quot;, // 我在前端编写了代码，悬停时可显示出微信的二维码
            url: &quot;&quot;,
        },
        {
            name: &quot;GitHub&quot;,
            icon: &quot;fa6-brands:github&quot;,
            url: &quot;https://github.com/Gunbrad&quot;, // url表示目标链接，点击即跳转
        },
    ],

};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;顶部导航栏配置：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export const navBarConfig: NavBarConfig = {
    links: [
        LinkPreset.Home,
        LinkPreset.Archive,
        LinkPreset.About,
        {
            name: &quot;GitHub&quot;,
            url: &quot;https://github.com/saicaca/fuwari&quot;, 
            external: true, 
        },
    ],
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;二：文章编写&lt;/h2&gt;
&lt;p&gt;经过以上的步骤，你已经完成了博客的配置，现在开始编写文章吧&lt;/p&gt;
&lt;h3&gt;2.1 启动开发服务器&lt;/h3&gt;
&lt;p&gt;在项目根目录的cmd界面输入这个命令启动本地开发服务器：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;现在我们可以在浏览器中访问&lt;code&gt;http://localhost:4321&lt;/code&gt;查看博客了。&lt;/p&gt;
&lt;h3&gt;2.2 创建新文章&lt;/h3&gt;
&lt;p&gt;在项目根目录的cmd界面使用内置命令创建新文章：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm new-post 文章标题
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这将在&lt;code&gt;src/content/posts/&lt;/code&gt;目录下创建一个新的md文件，编写文章就是在这个md文件中进行的&lt;/p&gt;
&lt;h3&gt;2.3 编辑文章&lt;/h3&gt;
&lt;p&gt;打开新创建的md文件，会有如下的配置信息：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: My First Blog Post // 文章标题
published: 2025-05-12 // 文章创建时间
description: This is the first post of my new Astro blog. // 文章描述，会显示在文章标题下面
image: ./assets/images/cover.jpg // 文章封面，填写相对路径
tags: [Foo, Bar] // 文章的标签
category: Front-end  // 文章分类
draft: false // 是否为草稿
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在配置信息下方就是我们编写博客内容的地方&lt;/p&gt;
&lt;h3&gt;2.4 本地预览&lt;/h3&gt;
&lt;p&gt;完成编写并保存md文件后，本地服务器会动态更新，我们可以在本地开发服务器中实时预览到刚编写的博客。&lt;/p&gt;
&lt;h3&gt;2.5 md编辑器推荐&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;教我做博客的大佬推荐了一款md编辑器——&lt;code&gt;MarkText&lt;/code&gt;,使用该编辑器可以直接Ctrl+C/V完成图片的粘贴&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;依次点击：MarkText软件的左上角的三条杠 -&amp;gt; File -&amp;gt; Perferences -&amp;gt; 左侧的Image分类 -&amp;gt; 如图设置 -&amp;gt; 注意更改第一个选项为Copy开头的选项，该选项允许我们置入图片时，会往选定的文件夹复制一份。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将Perfer开关打开，然后上下两个文本框一个填写绝对路径一个填写相对路径。绝对路径和相对路径都填写我们博客中assets/images的目录&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-12-23-02-18-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;三：部署到GitHub&lt;/h2&gt;
&lt;p&gt;我们已经完成了博客的编写，接下来就应该部署到github上了&lt;/p&gt;
&lt;h3&gt;3.1 配置git信息&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;首先，在根目录的cmd界面运行以下配置指令：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;git config --global user.name &quot;你的Github用户名&quot;
git config --global user.email &quot;你的Github邮箱@example.com&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;该配置指令让git知道你是谁&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;然后在windows的终端配置SSH公钥&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;// 输入这串指令生成SSH公钥，填写自己的邮箱，之后一路回车即可
ssh-keygen -t ed25519 -C &quot;your_email@example.com&quot;
// 输入这串指令查看SSH公钥，~填写.ssh之前的路径，然后复制生成的密钥
cat ~/.ssh/id_ed25519.pub
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;接着在添加公钥到 GitHub&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;登录 GitHub，点击右上角头像 → &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;SSH and GPG Keys&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击 &lt;strong&gt;New SSH Key&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;填写：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Title&lt;/strong&gt;: 自定义名称，随便填写。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Key Type&lt;/strong&gt;: 保持默认 &lt;code&gt;Authentication Key&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Key&lt;/strong&gt;: 粘贴复制的公钥内容（以 &lt;code&gt;ssh-ed25519&lt;/code&gt; 开头）。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;现在我们配置好了SSH公钥，就需要在项目根目录下运行cmd，将远程仓库更改为ssh*&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;git remote set-url origin git@github.com:xxx/xxx // 替换为下图地址
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-12-23-13-11-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;将更改推送到GitHub仓库：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;git push
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;四：配置Cloudflare Pages&lt;/h2&gt;
&lt;p&gt;根据以上的步骤，我们已经将项目上传到了github上，现在就需要让Cloudflare连接上Github，使用Pages服务展示我们的博客了&lt;/p&gt;
&lt;h3&gt;4.1 设置pnpm-lock.yaml与package.json同步&lt;/h3&gt;
&lt;p&gt;我在构建时遇到了依赖问题，为了避免该问题，要确保&lt;code&gt;pnpm-lock.yaml&lt;/code&gt;与&lt;code&gt;package.json&lt;/code&gt;同步。在项目根目录创建或修改&lt;code&gt;.npmrc&lt;/code&gt;文件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;manage-package-manager-versions = true
frozen-lockfile = false
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.2 创建Cloudflare Pages配置文件&lt;/h3&gt;
&lt;p&gt;在项目根目录创建以下文件，以配置Cloudflare Pages的构建和路由：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. 创建&lt;code&gt;public/_redirects&lt;/code&gt;文件&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 这个文件是为了让Cloudflare Pages识别这是一个静态网站项目
/* /index.html 200
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;2. 创建&lt;code&gt;public/_headers&lt;/code&gt;文件&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/*
  X-Frame-Options: DENY
  X-Content-Type-Options: nosniff
  X-XSS-Protection: 1; mode=block

# 静态资源缓存
/assets/*
  Cache-Control: public, max-age=31536000, immutable
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;3. 创建&lt;code&gt;.cloudflare/pages-config.json&lt;/code&gt;文件&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;build&quot;: {
    &quot;command&quot;: &quot;pnpm install --no-frozen-lockfile &amp;amp;&amp;amp; pnpm run build&quot;,
    &quot;output_directory&quot;: &quot;dist&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.3 在Cloudflare Pages中创建项目&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;登录&lt;a href=&quot;https://dash.cloudflare.com/&quot;&gt;Cloudflare Dashboard&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在左侧菜单中选择&lt;code&gt;&quot;Workers 和 Pages&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-12-23-23-55-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击&lt;code&gt;&quot;创建&quot;&lt;/code&gt;后点击&lt;code&gt;&quot;Pages&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;code&gt;&quot;导入现有git存储库&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-12-23-24-49-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择GitHub作为Git提供商&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;授权Cloudflare访问我们的的博客仓库，然后点击&lt;code&gt;“开始设置”&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-12-23-25-41-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在基本配置中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;项目名称：自定义项目名称，填你的博客名即可&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;生产分支：&lt;code&gt;main&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;构建设置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;构建命令：&lt;code&gt;pnpm build&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;构建输出目录：&lt;code&gt;dist&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-12-23-26-18-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击&quot;保存并部署&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Cloudflare将开始构建和部署我们的博客。部署完成后，我们会获得一个&lt;code&gt;*.pages.dev&lt;/code&gt;的网址。&lt;/p&gt;
&lt;h2&gt;五：设置自定义域名（如果你有自己的域名）&lt;/h2&gt;
&lt;h3&gt;5.1 添加自定义域名&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在左侧菜单中，&lt;code&gt;&quot;Workers 和 Pages&quot;&lt;/code&gt;，点击我们刚创建的pages&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-12-23-28-48-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击&lt;code&gt;&quot;自定义域&quot;&lt;/code&gt;，然后选择&lt;code&gt;“设置自定义域”&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/images/2025-05-12-23-29-17-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;输入你有的域名&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择DNS记录类型（通常为CNAME）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击&quot;继续&quot;&lt;/p&gt;
&lt;p&gt;之后我们就能访问自定义域名来访问我们的博客了！&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item></channel></rss>