Hugo 连接远端内容

Hugo 连接远端内容 内容和框架分离,仓库更加简洁,也更容易进行迁移。使用[[Hugo]]连接远端内容,有至少三种实现方案。 三种方案 方案一:Hugo Modules(推荐:原生、优雅) Hugo 深度集成了一套基于 Go Modules 的系统,称为 Hugo Modules。它可以直接把一个远程的 GitHub 仓库“挂载”到你项目的 content 目录下。 实现逻辑: 在 hugo.toml 配置文件中声明远程仓库,Hugo 在构建时会自动把远程仓库的代码拉取到内存或临时目录中进行渲染。 优点: 最符合你的学习路径: 因为它本质上使用的是 Go 的模块管理逻辑,对于打算学习 Go 的你来说,这是提前熟悉 Go 生态的最佳方式。 配置最简单: 不需要写复杂的 CI 脚本,只需要几行配置文件。 Cloudflare 支持: Cloudflare Pages 完美支持 Hugo Modules,构建时会自动运行 go 环境下载依赖。 缺点: 本地预览时需要电脑安装有 Go 环境。 方案二:Git Submodule(经典、显式) 这是最传统的方式,将内容仓库作为主仓库的一个子模块。 实现逻辑: 运行 git submodule add <内容仓库URL> content。 优点: 兼容性最强,不依赖 Hugo 的特殊功能。 缺点: * 更新琐碎: 每次内容仓库更新后,你必须在主仓库运行 git submodule update --remote 并提交一次主仓库,Cloudflare 才会触发更新(除非写额外的 Action 自动化)。 ...

January 16, 2026

Hugo 搭建博客站

Hugo 搭建博客站 [[Hugo]] 是一个基于 Go 的流行开源静态网站生成器。用它可以快速的搭建静态网站,几行指令即可完成。 安装 Hugo 连接远端内容 brew update brew install hugo ... hugo version hugo v0.154.5+extended+withdeploy darwin/amd64 BuildDate=2026-01-11T20:53:23Z VendorInfo=Homebrew 创建新项目 hugo new site hugo-blog cd hugo-blog 安装主题 git init git submodule add https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod echo "theme = 'PaperMod'" >> hugo.toml 连接到 Github git remote add origin ... git commit -m '...' git push --set-upstream origin master 进行一些小修改,改变Title等元数据 vi hugo.toml baseURL = 'https://example.org/' languageCode = 'en-us' title = 'My New Hugo Site' theme = 'PaperMod'

January 16, 2026

GitHub Personal Access Token 申请

GitHub Personal Access Token 申请 获取 GitHub Personal Access Token (PAT) 是为了让程序(如你的 Python 脚本或 GitHub Actions)能够代表你安全地访问仓库。GitHub 目前提供两种类型的 Token:Fine-grained(细粒度) 和 Classic(经典)。 为了安全性,建议优先使用 Fine-grained 令牌。以下是具体的操作步骤: ## 第一步:进入开发者设置 登录 GitHub,点击右上角的个人头像。 在下拉菜单中选择 Settings(设置)。 在页面左侧菜单的最下方,找到并点击 Developer settings。 ## 第二步:生成 Fine-grained Token(推荐) 这种 Token 权限控制更精确,可以只授权给特定的仓库。 在左侧点击 Personal access tokens -> Fine-grained tokens。 点击右侧的 Generate new token。 配置基础信息: Token name:起一个容易识别的名字(如 Sync-Obsidian-to-Hugo)。 Expiration:设置过期时间(建议不要设为永久,90天左右比较安全)。 Repository access(仓库访问): 选择 Only select repositories。 在下拉列表中选择你的 Hugo 框架仓库(因为你需要向它推送代码)。 Permissions(权限设置): 点击 Repository permissions 展开。 找到 Contents,将其权限设置为 Read and write(这会自动勾选 Metadata 的只读权限)。 ...

January 16, 2026

Git Rebase 以及 Git 撤销

Git Rebase 以及 Git 撤销 git rebase Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。 Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。 交互式 rebase 指的是使用带参数 –interactive 的 rebase 命令, 简写为 -i git 撤销 [[git]] 撤销分为本地撤销和远程撤销。 git reset commid-id git revert commit-id

January 16, 2026

cloudflare serverless 和 telegram bot 的联动

cloudflare serverless 和 telegram bot 的联动 一个怎样的项目 [[Cloudflare]] [[Serverless]] 这边怎么做 [[Telegram bot]] 这边怎么做 中间有遇到什么问题 一个抓取汇率的项目,使用无服务边缘函数,需要的时候直接请求即可,初版不提供参数,代码写死,主要是为了验证方案本身的可行性。 大致逻辑 Cloudflare 创建项目,编写代码,包括如何处理 bot 的访问的相关代码 Telegram 申请 bot,获取 API Token,并配置在 Cloudflare 项目的环境参数内 通过请求 https://api.telegram.org/bot<你的TOKEN>/setWebhook?url=<你的WORKER网址>的方式,让 bot 明白该去怎样相应,大功告成 Cloudflare serverless 怎么做 在控制台的 Computer & AI 下的 WOkers& Pages 内创建一个Helloworld的项目,起名为 exchangerate 通过询问Gemini,选择了一个无需key即可请求的api,并书写最简单的代码 export default { async fetch(request) { // 目标:获取 1 欧元 (EUR) 兑换成 人民币 (CNY) 和 美元 (USD) 的汇率 const url = "https://api.frankfurter.app/latest?from=EUR&to=CNY,USD"; try { const response = await fetch(url); const data = await response.json(); const cnyRate = data.rates.CNY; const usdRate = data.rates.USD; const date = data.date; const message = `📅 日期: ${date}\n💶 1 EUR = ¥${cnyRate} CNY\n💶 1 EUR = $${usdRate} USD`; return new Response(message, { headers: { "content-type": "text/plain;charset=UTF-8" }, }); } catch (error) { return new Response("汇率获取失败: " + error.message, { status: 500 }); } } }; 上述代码可以直接Deploy,访问后的结果为 📅 日期: 2026-01-11 💶 1 EUR = ¥8.1288 CNY 💶 1 EUR = $1.1642 USD 修改代码,以人民币为基准,并增加反向汇率计算,更直观的理解 export default { async fetch(request) { // 目标:获取 1 人民币 (CNY) 兑换成 日元 (JPY) 和 美元 (USD) 的汇率 const url = "https://api.frankfurter.app/latest?from=CNY&to=JPY,USD"; try { const response = await fetch(url); const data = await response.json(); const jpyRate = data.rates.JPY; const usdRate = data.rates.USD; const date = data.date; // 计算,100目标货币对应多少人民币,方便出国后的汇率速算 const jpy100toCNY = 1 / jpyRate * 100 const usd100toCNY = 1 / usdRate * 100 // 格式化数字为小数点后两位 let formatter = new Intl.NumberFormat('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2, }); const message = `📅 日期: ${date}\n💶 1 CNY = ¥${jpyRate} JPY\n💶 1 CNY = $${usdRate} USD`; const message2 = `💶 100 JPY = ¥${formatter.format(jpy100toCNY)} CNY\n💶 100 USD = ¥${formatter.format(usd100toCNY)} CNY` const realMessage = message+"\n"+message2 return new Response(message+"\n"+message2, { headers: { "content-type": "text/plain;charset=UTF-8" }, }); } catch (error) { return new Response("汇率获取失败: " + error.message, { status: 500 }); } } }; Deploy 后可直接访问,该访问结果在未来会显示在tg bot上 📅 日期: 2026-01-09 💶 1 CNY = ¥22.577 JPY 💶 1 CNY = $0.14322 USD 💶 100 JPY = ¥4.43 CNY 💶 100 USD = ¥698.23 CNY Telegram bot 怎么做 在telegram中搜索 @botFather 后创建新的 bot,起个唯一的ID,获取其API Token,类似于 712345678:AAH_xxxx…. 在 cloudflare 的项目内修改代码,增加处理 bot 访问的数据返回,记得Deploy export default { async fetch(request) { // 这里建议在 Workers 的 Settings -> Variables 里添加名为 BOT_TOKEN 的变量 // 如果为了快速测试,也可以直接把 Token 字符串写在这里(不推荐长期使用) const BOT_TOKEN = "你的_TELEGRAM_BOT_TOKEN"; // 目标:获取 1 人民币 (CNY) 兑换成 日元 (JPY) 和 美元 (USD) 的汇率 const url = "https://api.frankfurter.app/latest?from=CNY&to=JPY,USD"; try { ... // 1. 如果是 Telegram 传来的消息 (POST 请求) if (request.method === "POST") { try { const payload = await request.json(); if (payload.message) { const chatId = payload.message.chat.id; // 调用 Telegram API 发送回信 await fetch(`https://api.telegram.org/bot${BOT_TOKEN}/sendMessage`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ chat_id: chatId, text: messageText, }), }); } } catch (e) { return new Response("Error parsing JSON", { status: 400 }); } return new Response("OK"); // 告诉 Telegram 我们收到了 } return new Response(message+"\n"+message2, { headers: { "content-type": "text/plain;charset=UTF-8" }, }); } catch (error) { return new Response("汇率获取失败: " + error.message, { status: 500 }); } } }; 绑定Webhook,让telegram bot知道该去请求什么,直接在浏览器中构造网址,访问https://api.telegram.org/bot<你的TOKEN>/setWebhook?url=<你的WORKER网址>,worker地址一般形似.workers.dev,是Cloudflare分配的 如果网页显示 {"ok":true,"result":true,"description":"Webhook was set"},说明联动成功 在telegram中搜索该bot的ID,然后开始使用,只要给它输入,它就会返回相关内容 排错 常见的错误为,telegram bot不给相应,此时可以以下方式排查: ...

January 16, 2026

AI加持下的行为模式

当下是2026年初,[[AI]]指的是基于[[LLM]]技术的生成式AI。它并不是严格意义上的AI,而是依赖概率生成。对于生活中绝大多数问题(怎么做、怎么解决、怎么处理),当下的AI可以给出一些不错的答案。换一个思路,我们寻求专家的意见,专家也是通过自己内化的知识以及见过的案例,以“概率”的方式给出意见。 AI加持下的行为模式 知识获取方式的变迁 但在AI大行其道的时候,我们却从“信息匮乏”进入到了“信息过载”,以往的行为模式都会因此而改变。 对于上世纪的知识分子来说,他们可能更注重书籍报纸上的知识,也会询问专家的意见,从而对一个议题给出自己的答案。 对于21世纪初、经历过互联网时代的人来说,知识的获取源自搜索引擎以及论坛,前者广,后者精。相比于20世纪,此时的知识已经开始膨胀,但是钥匙还握在自己的手上。 对于2012-2024年,经历了移动互联网时代的人来说,知识的获取方式再次有了变化,互联网资源越来越封闭,取而代之的则是私域,内容源自某个APP的推送。这个时候的知识获取方式有主动搜索APP内容,也有被动接受推送内容。抖音的模式吸引了人的注意力,这对于思考来说,并不是一件好事。但对于想要思考的人来说,可以遵循自己的模式去利用移动互联网。 2025年以来,人类社会进入到了一个新的时代,AI开始大范围地铺开,开始有了实用性。当前趋势下,AI代表了某个层面的进步。同一个议题,若想要得到答案,使用AI可以极大的减少耗时,这时候的AI更像是一个善于使用概率的专家。 随之而来的问题则是”信息过载“,信息太容易获得,人脑就会进入懒惰模式。我常常对着AI生成的方案发呆,无法理清头绪。或许是改变行为模式的时候了。 我想要从多个方面来探讨这个问题,下面是议题: AI能解决哪些事 AI不能解决哪些事 使用AI的情况下如何学习(某个专业技能) 使用AI的情况下如何构建记忆 AI能解决哪些事 以下内容由Gemini 3 思考模型给出。 prompt: 作为一个AI,我知道你能做很多事,但我想以总结归纳的形式,来了解你能做哪些事? 维度 典型任务 你的获益 理解 摘要、解析、翻译 节省阅读时间,跨越语言障碍 创造 写作、改写、策划 克服创作瓶颈,提升产出质量 工具 编程、数学、数据处理 自动化重复劳动,解决技术难题 咨询 建议、分析、模拟 获得客观视角,辅助决策判断 AI不能解决哪些事 以下内容由Gemini 3 思考模型给出。 prompt: 那么另一个问题,你不能做哪些事? 维度 我能做的 (Potential) 我不能做的 (Limitation) 感官 描述事物的性状 产生真实的嗅觉、味觉、触觉 执行 编写自动化脚本 亲自操作物理设备或签署合同 隐私 处理你提供的数据 窥探你的私生活或越权访问账户 真理性 总结已知知识 保证 100% 不出错(存在幻觉可能) 责任 提供建议与方案 为决策产生的后果承担法律责任 使用AI的情况下如何学习

January 16, 2026

飞牛OS安装以及初步使用

飞牛OS安装以及初步使用 飞牛OS是一个专注于[[NAS]]的Linux发行版本。特点是开箱即用,小白友好。 目前在黑群晖内通过[[VMM]]安装了[[虚拟机]],在虚拟机内安装了x86版本的飞牛OS。 tips:需要把CPU的兼容性打开。 安装完成后,进入web UI,生成用户和密码即可使用。通过smb挂载了群晖上的视频文件夹,授权给[[飞牛影视]],直接开始刮削,成功率非常高,海报墙快速生成。 飞牛OS内还有许多功能值得去探索。 但需要关注飞牛OS的[[网络安全]]问题,包括[[审查]]以及[[隐私]]泄露的问题。

January 16, 2026