summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.readthedocs.yaml4
-rw-r--r--BlogCard.svg2
-rw-r--r--Live2dHistoire/live2d/js/message.js199
-rw-r--r--README.md2
-rw-r--r--_data/ai-cache.json8
-rw-r--r--_data/links.csv15
-rw-r--r--_data/other_repo_list.csv722
-rw-r--r--_data/proxylist.yml16
-rw-r--r--_layouts/default.html26
-rw-r--r--_layouts/post.html17
-rw-r--r--_layouts/xslt_container.html5
-rw-r--r--_posts/2025-12-01-linux.md2
-rw-r--r--_posts/2026-04-14-ai-agent.md32
-rw-r--r--_posts/2026-05-01-virtual-net.md76
-rw-r--r--_posts/2026-06-01-dedupe.md210
-rw-r--r--_posts/2026-07-01-vibe-coding.md60
-rw-r--r--_posts/2026-08-01-terminal.md31
-rw-r--r--_posts/2026-09-01-vibe-coding2.md63
-rw-r--r--_posts/2026-10-01-quine.md1352
-rw-r--r--_tools/ai-summary.js6
-rw-r--r--_tools/blogquine.py714
-rw-r--r--_tools/envs_post-receive6
-rw-r--r--_tools/serv00_post-receive5
-rw-r--r--_tools/stormkit-env_install1
-rw-r--r--assets/css/gitalk.css2
-rw-r--r--assets/css/style.scss14
-rw-r--r--assets/js/blog-console.js1147
-rw-r--r--assets/js/gitalk.min.js3
-rw-r--r--assets/js/jquery.min.js10
-rw-r--r--assets/js/jquery.pjax.min.js6
-rw-r--r--assets/js/main.js85
-rw-r--r--assets/js/main_new.js87
-rw-r--r--assets/js/pjax.js153
-rw-r--r--bo-ke-verify-24f0040157c07cc424b28b7b52ea734d.txt1
-rw-r--r--deploy.sh4
-rw-r--r--games.md10
-rw-r--r--humans.txt17
-rw-r--r--index.html19
-rw-r--r--links.md3
-rw-r--r--llms.txt14
-rw-r--r--nilaila-verify.txt1
-rw-r--r--other_repo_list.md1
-rw-r--r--proxylist.md11
-rw-r--r--search.html19
44 files changed, 4356 insertions, 825 deletions
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
index 5124702..1505147 100644
--- a/.readthedocs.yaml
+++ b/.readthedocs.yaml
@@ -12,5 +12,5 @@ build:
- mkdir Mabbs
- curl -L -o Mabbs/README.md https://github.com/Mabbs/Mabbs/raw/main/README.md
- bundle exec jekyll build --destination $READTHEDOCS_OUTPUT/html
- - tar czvf MayxBlog.tgz -C $READTHEDOCS_OUTPUT html
- - mv MayxBlog.tgz $READTHEDOCS_OUTPUT/html \ No newline at end of file
+ - python3 _tools/blogquine.py --src-dir blog --quine-dir blog $READTHEDOCS_OUTPUT/html MayxBlog.7z
+ - mv MayxBlog.7z $READTHEDOCS_OUTPUT/html \ No newline at end of file
diff --git a/BlogCard.svg b/BlogCard.svg
index c8d6ae0..515fa20 100644
--- a/BlogCard.svg
+++ b/BlogCard.svg
@@ -77,7 +77,7 @@
y="0"
class="header"
data-testid="header"
- >Mayx's Blog Article</text>
+ >Mayx's Blog Posts</text>
</g>
</g>
diff --git a/Live2dHistoire/live2d/js/message.js b/Live2dHistoire/live2d/js/message.js
index 08d1675..d1ee819 100644
--- a/Live2dHistoire/live2d/js/message.js
+++ b/Live2dHistoire/live2d/js/message.js
@@ -22,6 +22,8 @@ if (!norunFlag) {
var sleepTimer_ = null;
var AITalkFlag = false;
var talkNum = 0;
+ // 暴露到全局,供 pjax.js 在页面切换后重新调用
+ window._live2d = { initTips: null, showMessage: null, showHitokoto: null };
(function () {
function renderTip(template, context) {
var tokenReg = /(\\)?\{([^\{\}\\]+)(\\)?\}/g;
@@ -33,11 +35,11 @@ if (!norunFlag) {
var currentObject = context;
var i, length, variable;
for (i = 0, length = variables.length; i < length; ++i) {
- variable = variables[i];
- currentObject = currentObject[variable];
- if (currentObject === undefined || currentObject === null) return '';
+ variable = currentObject[variables[i]];
+ if (variable === undefined || variable === null) return '';
+ currentObject = variable;
}
- return currentObject;
+ return String(currentObject);
});
}
@@ -56,14 +58,20 @@ if (!norunFlag) {
showMessage('你都复制了些什么呀,转载要记得加上出处哦~~', 5000);
});
+ // 缓存 message.json 数据,供 PJAX 重绑定使用
+ var tipsData = null;
+
function initTips() {
$.ajax({
cache: true,
url: message_Path + 'message.json',
dataType: "json",
success: function (result) {
+ tipsData = result;
+ // 解绑旧事件(用命名空间避免影响其他绑定)
$.each(result.mouseover, function (index, tips) {
- $(tips.selector).mouseover(function () {
+ $(tips.selector).off('mouseover._live2d_tips mouseout._live2d_tips');
+ $(tips.selector).on('mouseover._live2d_tips', function () {
var text = tips.text;
if (Array.isArray(tips.text)) text = tips.text[Math.floor(Math.random() * tips.text.length + 1) - 1];
text = text.renderTip({ text: $(this).text() });
@@ -72,7 +80,7 @@ if (!norunFlag) {
clearInterval(liveTlakTimer);
liveTlakTimer = null;
});
- $(tips.selector).mouseout(function () {
+ $(tips.selector).on('mouseout._live2d_tips', function () {
showHitokoto();
if (liveTlakTimer == null) {
liveTlakTimer = window.setInterval(function () {
@@ -82,7 +90,8 @@ if (!norunFlag) {
});
});
$.each(result.click, function (index, tips) {
- $(tips.selector).click(function () {
+ $(tips.selector).off('click._live2d_tips');
+ $(tips.selector).on('click._live2d_tips', function () {
if (hitFlag) {
return false
}
@@ -106,46 +115,22 @@ if (!norunFlag) {
}
});
}
+ window._live2d.initTips = initTips;
initTips();
var text;
if (document.referrer !== '' && document.referrer.split('/')[2] !== window.location.host) {
var referrer = document.createElement('a');
referrer.href = document.referrer;
- text = '嗨!来自 <span style="color:#0099cc;">' + referrer.hostname + '</span> 的朋友!';
var domain = referrer.hostname.split('.')[1];
- if (domain == 'baidu') {
- text = '嗨! 来自 百度搜索 的朋友!<br>欢迎访问<span style="color:#0099cc;">「 ' + document.title.split(' | ')[0] + ' 」</span>';
- } else if (domain == 'so') {
- text = '嗨! 来自 360搜索 的朋友!<br>欢迎访问<span style="color:#0099cc;">「 ' + document.title.split(' | ')[0] + ' 」</span>';
- } else if (domain == 'google') {
- text = '嗨! 来自 谷歌搜索 的朋友!<br>欢迎访问<span style="color:#0099cc;">「 ' + document.title.split(' | ')[0] + ' 」</span>';
- }
- } else {
- if (window.location.pathname == "/") { //主页URL判断,需要斜杠结尾
- var now = (new Date()).getHours();
- if (now > 23 || now <= 5) {
- text = '你是夜猫子呀?这么晚还不睡觉,明天起的来嘛?';
- } else if (now > 5 && now <= 7) {
- text = '早上好!一日之计在于晨,美好的一天就要开始了!';
- } else if (now > 7 && now <= 11) {
- text = '上午好!工作顺利嘛,不要久坐,多起来走动走动哦!';
- } else if (now > 11 && now <= 14) {
- text = '中午了,工作了一个上午,现在是午餐时间!';
- } else if (now > 14 && now <= 17) {
- text = '午后很容易犯困呢,今天的运动目标完成了吗?';
- } else if (now > 17 && now <= 19) {
- text = '傍晚了!窗外夕阳的景色很美丽呢,最美不过夕阳红~~';
- } else if (now > 19 && now <= 21) {
- text = '晚上好,今天过得怎么样?';
- } else if (now > 21 && now <= 23) {
- text = '已经这么晚了呀,早点休息吧,晚安~~';
- } else {
- text = '嗨~ 快来逗我玩吧!';
- }
+ if (domain == 'baidu' || domain == 'so' || domain == 'google') {
+ var source = domain == 'baidu' ? '百度搜索' : domain == 'so' ? '360搜索' : '谷歌搜索';
+ text = '嗨! 来自 ' + source + ' 的朋友!<br>欢迎访问<span style="color:#0099cc;">「 ' + document.title.split(' | ')[0] + ' 」</span>';
} else {
- text = '欢迎阅读<span style="color:#0099cc;">「 ' + document.title.split(' | ')[0] + ' 」</span>';
+ text = '嗨!来自 <span style="color:#0099cc;">' + referrer.hostname + '</span> 的朋友!';
}
+ } else {
+ text = getWelcomeText();
}
showMessage(text, 12000);
})();
@@ -172,6 +157,7 @@ if (!norunFlag) {
console.log(sleepTimer_);
}
}
+ window._live2d.showHitokoto = showHitokoto;
function checkSleep() {
var sleepStatu = sessionStorage.getItem("Sleepy");
@@ -213,6 +199,7 @@ if (!norunFlag) {
//if (timeout === null) timeout = 5000;
//hideMessage(timeout);
}
+ window._live2d.showMessage = showMessage;
function talkValTimer() {
$('#live_talk').val('1');
}
@@ -384,74 +371,100 @@ if (!norunFlag) {
};
};
//获取音乐信息初始化
- var bgmListInfo = $('input[name=live2dBGM]');
- if (bgmListInfo.length == 0) {
- $('#musicButton').hide();
- } else {
- var bgmPlayNow = parseInt($('#live2d_bgm').attr('data-bgm'));
- var bgmPlayTime = 0;
- var live2dBGM_Num = sessionStorage.getItem("live2dBGM_Num");
- var live2dBGM_PlayTime = sessionStorage.getItem("live2dBGM_PlayTime");
- if (live2dBGM_Num) {
- if (live2dBGM_Num <= $('input[name=live2dBGM]').length - 1) {
- bgmPlayNow = parseInt(live2dBGM_Num);
- }
- }
- if (live2dBGM_PlayTime) {
- bgmPlayTime = parseInt(live2dBGM_PlayTime);
- }
- var live2dBGMSrc = bgmListInfo.eq(bgmPlayNow).val();
- $('#live2d_bgm').attr('data-bgm', bgmPlayNow);
- $('#live2d_bgm').attr('src', live2dBGMSrc);
- $('#live2d_bgm')[0].currentTime = bgmPlayTime;
- $('#live2d_bgm')[0].volume = 0.5;
- var live2dBGM_IsPlay = sessionStorage.getItem("live2dBGM_IsPlay");
- var live2dBGM_WindowClose = sessionStorage.getItem("live2dBGM_WindowClose");
- if (live2dBGM_IsPlay == '0' && live2dBGM_WindowClose == '0') {
- $('#live2d_bgm')[0].play();
+ var $bgm = $('#live2d_bgm');
+
+ // 音乐按钮点击事件(幂等,使用命名空间避免重复绑定)
+ $('#musicButton').off('click._bgm').on('click._bgm', function () {
+ if ($('#musicButton').hasClass('play')) {
+ $bgm[0].pause();
+ $('#musicButton').removeClass('play');
+ sessionStorage.setItem("live2dBGM_IsPlay", '1');
+ } else {
+ $bgm[0].play();
$('#musicButton').addClass('play');
+ sessionStorage.setItem("live2dBGM_IsPlay", '0');
}
- sessionStorage.setItem("live2dBGM_WindowClose", '1');
- $('#musicButton').on('click', function () {
- if ($('#musicButton').hasClass('play')) {
- $('#live2d_bgm')[0].pause();
- $('#musicButton').removeClass('play');
- sessionStorage.setItem("live2dBGM_IsPlay", '1');
- } else {
- $('#live2d_bgm')[0].play();
- $('#musicButton').addClass('play');
- sessionStorage.setItem("live2dBGM_IsPlay", '0');
- }
- });
- window.onbeforeunload = function () {
- sessionStorage.setItem("live2dBGM_WindowClose", '0');
- if ($('#musicButton').hasClass('play')) {
- sessionStorage.setItem("live2dBGM_IsPlay", '0');
- }
- }
- document.getElementById('live2d_bgm').addEventListener("timeupdate", function () {
- var live2dBgmPlayTimeNow = document.getElementById('live2d_bgm').currentTime;
- sessionStorage.setItem("live2dBGM_PlayTime", live2dBgmPlayTimeNow);
+ });
+
+ // BGM 事件监听(仅绑定一次,使用标志位避免重复)
+ if (!window._live2d._bgmEventsBound) {
+ $bgm[0].addEventListener("timeupdate", function () {
+ sessionStorage.setItem("live2dBGM_PlayTime", $bgm[0].currentTime);
});
- document.getElementById('live2d_bgm').addEventListener("ended", function () {
- var listNow = parseInt($('#live2d_bgm').attr('data-bgm'));
+ $bgm[0].addEventListener("ended", function () {
+ var listNow = parseInt($bgm.attr('data-bgm'));
listNow++;
- if (listNow > $('input[name=live2dBGM]').length - 1) {
+ var inputs = $('input[name=live2dBGM]');
+ if (inputs.length === 0) return;
+ if (listNow > inputs.length - 1) {
listNow = 0;
}
- var listNewSrc = $('input[name=live2dBGM]').eq(listNow).val();
+ var listNewSrc = inputs.eq(listNow).val();
+ if (!listNewSrc) return;
sessionStorage.setItem("live2dBGM_Num", listNow);
- $('#live2d_bgm').attr('src', listNewSrc);
- $('#live2d_bgm')[0].play();
- $('#live2d_bgm').attr('data-bgm', listNow);
+ $bgm.attr('src', listNewSrc);
+ $bgm[0].play();
+ $bgm.attr('data-bgm', listNow);
});
- document.getElementById('live2d_bgm').addEventListener("error", function () {
- $('#live2d_bgm')[0].pause();
+ $bgm[0].addEventListener("error", function () {
+ $bgm[0].pause();
$('#musicButton').removeClass('play');
showMessage('音乐似乎加载不出来了呢!', 0);
});
+ window.onbeforeunload = function () {
+ sessionStorage.setItem("live2dBGM_WindowClose", '0');
+ if ($('#musicButton').hasClass('play')) {
+ sessionStorage.setItem("live2dBGM_IsPlay", '0');
+ }
+ };
+ window._live2d._bgmEventsBound = true;
+ }
+
+ // 初始化 BGM(根据当前页面是否有 BGM 输入)
+ if (typeof window._live2d.initBGM === 'function') {
+ window._live2d.initBGM();
}
}
+
+ // 暴露 BGM 初始化函数,供 PJAX 重初始化时调用
+ window._live2d.initBGM = function() {
+ var bgmListInfo = $('input[name=live2dBGM]');
+ var $bgm = $('#live2d_bgm');
+ if (bgmListInfo.length === 0) {
+ $('#musicButton').hide();
+ if ($bgm.length) $bgm[0].pause();
+ return;
+ }
+ var bgmPlayNow = parseInt($bgm.attr('data-bgm')) || 0;
+ var bgmPlayTime = 0;
+ var live2dBGM_Num = sessionStorage.getItem("live2dBGM_Num");
+ var live2dBGM_PlayTime = sessionStorage.getItem("live2dBGM_PlayTime");
+ if (live2dBGM_Num) {
+ if (parseInt(live2dBGM_Num) <= bgmListInfo.length - 1) {
+ bgmPlayNow = parseInt(live2dBGM_Num);
+ }
+ }
+ if (live2dBGM_PlayTime) {
+ bgmPlayTime = parseFloat(live2dBGM_PlayTime);
+ }
+ var newSrc = bgmListInfo.eq(bgmPlayNow).val();
+ $bgm.attr('data-bgm', bgmPlayNow);
+ if ($bgm.attr('src') !== newSrc) {
+ $bgm[0].pause();
+ $bgm.attr('src', newSrc);
+ $bgm[0].currentTime = bgmPlayTime;
+ }
+ $bgm[0].volume = 0.5;
+ var live2dBGM_IsPlay = sessionStorage.getItem("live2dBGM_IsPlay");
+ var live2dBGM_WindowClose = sessionStorage.getItem("live2dBGM_WindowClose");
+ if (live2dBGM_IsPlay == '0' && live2dBGM_WindowClose == '0') {
+ $bgm[0].play();
+ $('#musicButton').addClass('play');
+ }
+ sessionStorage.setItem("live2dBGM_WindowClose", '1');
+ $('#musicButton').show();
+ };
+
$(document).ready(function () {
var AIimgSrc = [
message_Path + "model/histoire/histoire.1024/texture_00.png",
diff --git a/README.md b/README.md
index e9ae303..cc1c214 100644
--- a/README.md
+++ b/README.md
@@ -50,4 +50,4 @@ Powered by [Jekyll](https://github.com/jekyll/jekyll)
本站转载的文章如无特别说明,均按原文章的协议执行
## 打赏/赞助 Mayx
-![QRCode](/images/QRCode.png)
+![QRCode](images/QRCode.png)
diff --git a/_data/ai-cache.json b/_data/ai-cache.json
index dfe6c2d..73f44c7 100644
--- a/_data/ai-cache.json
+++ b/_data/ai-cache.json
@@ -175,5 +175,11 @@
"/2025/12/01/linux.html": "这篇文章介绍了在浏览器中运行Linux的各种方法,从最初的纯JS虚拟机JSLinux,到后来的WASM虚拟机如v86、WebVM、WebCM,再到容器化方案container2wasm,以及直接将Linux内核编译为WASM的方案。作者详细对比了这些方案的优缺点,包括性能、兼容性、功能和开发难度。文章还提到了模仿Linux环境的WebContainers和JupyterLite,并最终认为虚拟机方案更靠谱,但对WASM的未来充满期待。作者最后表示,博客上添加类似功能的计划还在考虑中,目前主要分享了各种方法的探索过程。",
"/2026/01/01/summary.html": "这篇文章介绍了作者对2025年的年终总结,主要表达了对自身状态的担忧和对未来的不确定感。作者认为自己在记忆和思考能力方面有所下滑,稳定性较低,且未能抓住资产保值的机会。同时,文章也记录了AI技术的飞速发展,以及自己博客内容与时代脱节的现象。尽管对未来感到迷茫,作者仍然抱有一丝希望,期望在2026年做出正确的选择,避免陷入危险。",
"/2026/02/08/xslt.html": "这篇文章讲述了Google计划弃用XSLT技术,以及作者对这一决定的调查和应对方案。Google基于XSLT用户占比低、库存在漏洞等原因,建议将其从Web标准中删除。作者发现许多用户依赖XSLT进行博客订阅美化,甚至将其作为博客框架。为了对抗这一趋势,有人创建了网站https://xslt.rip,并开发了Polyfill库,通过WASM方式保持XSLT功能。虽然Polyfill库需要额外引用JS代码,但作者已将其提交至CDNJS。随后,作者探讨了替代方案,包括使用纯CSS美化订阅源(由AI生成feed.css),以及混合XHTML的方式,通过添加XHTML命名空间来实现链接等功能,但这种方法会产生“不纯粹”的警告。文章最后总结,技术可能会消失,但总有其他技术可以解决问题,并强调了适应浏览器厂商决策的重要性。",
- "/2026/03/01/llm3.html": "这篇文章介绍了作者近期在LLM部署和应用方面的经历,主要包括以下几个方面:\n\n首先,作者升级硬件,从单张RTX4090 48GiB升级到双路RTX4090 48GiB,并购买了TRX40+TR 3960X的主板套装,用于运行GPT-OSS模型。随后,作者尝试使用vLLM框架替换Ollama,并成功配置了GPT-OSS模型,达到了接近190Tps的性能。\n\n其次,作者体验了DeepSeek 1M上下文模型,发现其在处理长上下文任务时表现出色,能够展现摘要无法捕捉的细节,并成功生成简历、分析人格等。\n\n此外,作者还尝试使用DeepSeek重构Mabbs,并发现DeepSeek能够识别作者的博客信息,这表明训练样本中包含了作者的信息。\n\n最后,作者在8GiB内存的MacBook Pro上运行了LFM2.5-1.2B-Thinking模型,并使用了Apollo软件,体验了其快速的推理速度和良好的思考能力。作者总结认为,AI的发展令人惊叹,软件优化使其在有限硬件环境下也能运行。"
+ "/2026/03/01/llm3.html": "这篇文章介绍了作者近期在LLM部署和应用方面的经历,主要包括以下几个方面:\n\n首先,作者升级硬件,从单张RTX4090 48GiB升级到双路RTX4090 48GiB,并购买了TRX40+TR 3960X的主板套装,用于运行GPT-OSS模型。随后,作者尝试使用vLLM框架替换Ollama,并成功配置了GPT-OSS模型,达到了接近190Tps的性能。\n\n其次,作者体验了DeepSeek 1M上下文模型,发现其在处理长上下文任务时表现出色,能够展现摘要无法捕捉的细节,并成功生成简历、分析人格等。\n\n此外,作者还尝试使用DeepSeek重构Mabbs,并发现DeepSeek能够识别作者的博客信息,这表明训练样本中包含了作者的信息。\n\n最后,作者在8GiB内存的MacBook Pro上运行了LFM2.5-1.2B-Thinking模型,并使用了Apollo软件,体验了其快速的推理速度和良好的思考能力。作者总结认为,AI的发展令人惊叹,软件优化使其在有限硬件环境下也能运行。",
+ "/2026/04/14/ai-agent.html": "这篇文章介绍了“AI个人助理”Agent的发展现状和各种尝试。作者体验了OpenClaw、QClaw、WorkBuddy、Cline、LuckClaw和ApkClaw等不同的Agent项目,发现它们在功能、易用性和性能上各有优劣。OpenClaw安装和使用存在困难,国内大厂的QClaw和WorkBuddy则更易于上手,但免费额度有限。作者认为,开发任务更适合在编辑器集成AI中进行,如GitHub Copilot。LuckClaw在微型开发板上运行表现出色,ApkClaw则利用手机的优势操作移动应用。尽管Agent技术仍存在诸多问题,但其应用场景不断拓展,有望吸引更多人参与其中,推动AI应用化进程。",
+ "/2026/05/01/virtual-net.html": "这篇文章介绍了作者在尝试异地组网搭建虚拟局域网时,对多种组网工具的探索和体验。作者首先尝试了n2n,但由于其项目停止更新且在NAT后的机器间存在掉线问题,最终选择了WireGuard作为主要方案。文章详细描述了WireGuard的配置过程,包括在Linux、OpenWrt和openEuler系统上的安装和配置,并遇到了各种各样的挑战,例如在红米AX3000路由器上找不到内核模块,以及在openEuler上缺少WireGuard相关包。此外,文章还提到了Netmaker和Headscale等WireGuard的控制平面,以及VNT和EasyTier等其他组网工具,并总结了最终选择WireGuard的原因:简单、够用、可靠性不错,且已经投入了大量配置。",
+ "/2026/06/01/dedupe.html": "这篇文章介绍了如何通过优化游戏资源文件来节约游戏占用的硬盘空间。作者由于Mac只有256GiB的硬盘存储空间,在下载了几十部游戏后空间不足,于是寻找解决方法。文章主要介绍了以下几点:\n\n1. 使用jdupes工具去除重复素材:作者发现许多游戏使用相同的引擎和素材,导致硬盘空间浪费。通过使用jdupes工具进行硬链接,可以有效去除重复文件,节约空间。\n\n2. 不同引擎的处理方式:\n - 对于RPG制作大师MV/MZ,作者使用RPG Maker Decrypter工具解密资源文件,并将图片转换为WebP格式以压缩空间。\n - 对于RPG制作大师XP/VX/VA,作者使用mkxp-z工具跨平台运行游戏,并通过RPG Maker Decrypter解包资源文件,与RTP素材合并后进行去重。\n - 对于Ren'Py游戏,作者使用unrpa工具解包rpa文件,但由于公共资源不多,仅在系列游戏情况下进行解包。\n\n3. 最终效果:通过以上优化,作者成功将游戏文件夹大小从47G降至33G,节约了大量硬盘空间。",
+ "/2026/07/01/vibe-coding.html": "这篇文章介绍了作者使用AI Agent进行Vibe Coding的体验。作者通过AI Agent生成代码,实现了博客的PJAX功能和一个立直麻将Wordle小游戏。在使用AI Agent的过程中,作者发现它能够理解整个项目的代码,并且能够根据需求进行修改和优化。然而,作者也遇到了一些问题,例如生成的代码质量不高,需要手动优化和调试。\n\n作者首先使用AI Agent为博客添加了PJAX功能,实现了无刷新加载页面。虽然生成的代码质量不高,但作者还是成功地实现了该功能。接着,作者使用AI Agent生成了一个立直麻将Wordle小游戏,并对其进行了优化和修改。作者还遇到了一些技术问题,例如字体兼容性和役种计算问题,但最终都通过AI Agent解决了。\n\n通过这次体验,作者认为Vibe Coding的体验相当不错,但也存在一些问题。完全由AI生成的代码可能会出现问题,需要手动优化和调试。然而,如果能够正确地使用AI Agent,也可以实现高质量的代码。作者还提到,有时候自己调查和研究比问AI更有效,可以避免浪费时间和精力。",
+ "/2026/08/01/terminal.html": "这篇文章介绍了作者利用AI助手制作终端版博客的经历。起初,作者想在博客上添加一个终端功能,允许用户在浏览器中使用真正的Linux访问博客。作者选择了基于WASM Linux的方案,并让AI助手开发了一个可以在浏览器中执行JS的设备文件,以实现与外界的通信。在此基础上,作者实现了列出文章、查看文章、打开文章和查看评论等功能。然而,该系统存在一些限制,如不能使用管道符和异步操作。作者还尝试了另一种方案,即基于JSNix的版本,虽然不是真正的Linux,但模拟得非常到位,且具有更好的兼容性和加载速度。最终,作者成功制作了两个版本的终端版博客,并表示对AI助手的强大功能感到满意。",
+ "/2026/09/01/vibe-coding2.html": "这篇文章介绍了作者使用AI进行Vibe Coding的体验。两个月前,作者首次体验了Vibe Coding,但当时对AI的能力持怀疑态度。然而,在使用AI进行终端版博客开发后,作者意识到AI的能力可能超过了自己的想象。作者开始使用国内的免费AI模型腾讯混元Hy3进行各种项目开发,并取得了令人惊讶的成果。\n\n作者使用AI开发了 REPL 终端、WebMCP 项目、博客 API,并将 WebMCP 应用于 AI,让 AI 调用函数。作者还使用 AI 重放了一个即将关服的游戏的离散快照,让游戏在浏览器中运行。AI 分析了游戏的 WebSocket+Protobuf 协议,并用 Python 和 JavaScript 实现了一个服务端,让游戏在浏览器中运行。\n\n此外,作者还使用 AI 制作了一个完整的麻将对局引擎,包括人机对战功能。作者让 AI 录制了几把实际对局的包,并理解了数据包的时序,最终 AI 成功地制作出了完整的对局引擎。\n\n作者还探索了其他功能,如挂载本地文件夹、基于 WebRTC 的局域网内组网和使用 VLESS 协议的网关。"
} \ No newline at end of file
diff --git a/_data/links.csv b/_data/links.csv
index 49c5f6c..915cf59 100644
--- a/_data/links.csv
+++ b/_data/links.csv
@@ -2,10 +2,9 @@ title,link,feed_url,description
花火学园,https://www.sayhanabi.net/,,和谐融洽的ACG交流以及资源聚集地
资源统筹局,https://gkdworld.com/,,统筹保管用户分享的资源
贫困的蚊子,https://mozz.ie/,https://mozz.ie/index.xml,
-极客兔兔,https://geektutu.com/,https://geektutu.com/atom.xml,致力于分享有趣的技术实践
+极客兔兔,https://geektutu.com/,https://geektutu.com/feed.xml,致力于分享有趣的技术实践
维基萌,https://www.wikimoe.com/,https://www.wikimoe.com/rss,萌即是正义!一名热爱acg的前端设计师的小站!
7gugu's blog,https://www.7gugu.com/,https://7gugu.com/index.php/feed/,"一个用来存放我爱好的地方,编程,摄影之类的空间"
-云游君,https://www.yunyoujun.cn/,https://www.yunyoujun.cn/atom.xml,希望能成为一个有趣的人。
Kingfish404,https://blog.kingfish404.cn/,https://blog.kingfish404.cn/index.xml,"Stay curious,stay naive. WUT. Jin Yu's Blog"
FKUN,https://blog.fkun.tech/,https://blog.fkun.tech/feed/,
Sinofine,https://sinofine.me/,https://sinofine.me/atom.xml,
@@ -16,9 +15,15 @@ Vullfin的博客,https://blog.vull.top/,https://blog.vull.top/atom.xml,Vullfin's
陈陈菌博客,https://blog.glumi.cn/,https://blog.glumi.cn/rss.xml,计算机业余爱好者。
彬红茶日记,https://note.redcha.cn/,https://note.redcha.cn/rss.xml,我的个人日记!
Lanke's blog,https://blog.blueke.top/,https://blog.blueke.top/rss.xml,请为一切不真实之物骄傲,因为我们高于这个世界!
-时光流·言,https://www.hansjack.com/,https://www.hansjack.com/feed/,个人博客,持续分享网站部署实战经验、精选书评解读和生活观察手记。 这里提供可复用的技术教程、深度阅读指南和真实生活洞察,与技术爱好者一起进步......
+寒士杰克,https://www.hansjack.com/,https://www.hansjack.com/feed/,喜欢捣鼓,不断进步!
Pinpe 的云端,https://pinpe.top/,https://pinpe.top/rss.xml,一个属于自己的云朵。
Chise Hachiroku,https://chise.hachiroku.com/zh/,https://chise.hachiroku.com/zh/feed/,向明日的辉迹,干杯!
-映屿,https://www.glowisle.me/,https://www.glowisle.me/atom.xml,关于互联网、书籍、生活琐事以及那些一闪而过的念头
+映屿,https://blog.verdant.ee/,https://blog.verdant.ee/atom.xml,关于互联网、书籍、生活琐事以及那些一闪而过的念头
Restent's Notebook,https://blog.gxres.net/,https://blog.gxres.net/atom.xml,不前沿技术分享
-Coseroom,https://coseroom.com,,
+RavelloH's Blog,https://ravelloh.com,https://ravelloh.com/feed.xml,Beginning of meditation.
+初然忆,https://www.imcry.vip,https://www.imcry.vip/index.xml,初心如初见,然忆似流年。
+姓王者,https://xingwangzhe.fun/,https://xingwangzhe.fun/rss.xml,探索、学习、进步、创造无限可能!
+EXYONE@BLOG:~$,https://exyon.ee,https://exyon.ee/feed.xml,一隅藏天地,流水遇知音。
+小景,https://jingyuan-zheng.github.io/zh/,https://jingyuan-zheng.github.io/zh/index.xml,随心分享有趣的技术、开源项目与生活记录。
+热汤茶馆,https://blog.hotsouprealm.top/,https://blog.hotsouprealm.top/atom.xml,茶凉了可以续,话断了可以接,这里是hahahotsoup的茶馆。
+FGHRSH 日记簿,https://www.fghrsh.net/,https://www.fghrsh.net/feed.php,把喜欢的东西都记下来···
diff --git a/_data/other_repo_list.csv b/_data/other_repo_list.csv
index 3485646..505db57 100644
--- a/_data/other_repo_list.csv
+++ b/_data/other_repo_list.csv
@@ -3,621 +3,209 @@ http://gdatura24gtdy23lxd7ht3xzx6mi7mdlkabpvuefhrjn4t5jduviw5ad.onion/Mayx/mayx
http://git.dkforestseeaaq2dqz2uflmlsybvnq2irzn4ygyvu53oazyorednviid.onion/mayx/blog
http://giteabolfdejtdzblkooalqei6jr67imiugmhtsh6ocw4hlj5a4q.b32.i2p/mayx/blog
https://gitlab.lain.la/mayx/mayx.pages.lain.la
+https://gitplac.si/mayx/mayx.gitpage.si
+https://git.32bit.cafe/mayx/blog
+https://gitnet.fr/mayx/blog
+https://opencommit.eu/mayx/blog
+https://forge.fedoraproject.org/mabbs/blog
https://tilde.club/~mayx/git/blog.git/
-https://tvoygit.ru/Mayx/mayx
https://git.envs.net/Mayx/mayx
https://tildegit.org/Mayx/mayx
https://git.tilde.town/mayx/blog
https://gitlab.haskell.org/mayx/mayx
+https://lavaforge.org/mayx/blog
https://repo2.serv00.com/git/pub/Mayx/mayx/
-https://git.pixie.town/mayx/mayx
+https://sij.ai/mayx/blog
+https://git.projectnightcrawler.dev/mayx/blog
+https://codefloe.com/mayx/blog
+https://git.pixie.town/mayx/blog
https://git.minetest.land/Mayx/blog
-https://gitea.stormyhome.net/mayx/blog
-http://47.120.60.153:10880/mayx/blog
http://1.6.141.109:3000/mayx/blog
-http://52.28.156.42/mayx/blog
-https://git.tux.pizza/mayx/blog
-https://code.dsconce.space/mayx/blog
-https://git.anibilag.ru/mayx/blog
-https://git.lolpro11.me/mayx/blog
-http://101.66.229.132:61088/mayx/blog
-https://git.bp-web.app/mayx/blog
-http://47.103.91.160:50903/mayx/blog
https://mygit.iexercice.com/mayx/blog
http://162.215.134.149:4000/mayx/blog
-http://durfee.mycrestron.com:3000/mayx/blog
-https://gitea.nongnghiepso.com/mayx/blog
-https://codes.tools.asitavsen.com/mayx/blog
-http://122.116.190.233:3001/mayx/blog
-http://50.19.111.193:3000/mayx/blog
-https://git.zeroplay.io/mayx/blog
-https://git.successkaoyan.com/mayx/blog
-http://139.129.25.251:3000/mayx/blog
http://45.33.87.87/mayx/blog
-http://168.126.28.36:3000/mayx/blog
-http://120.79.27.232:3000/mayx/blog
-http://wangbeibei.xyz:6002/mayx/blog
-https://git.duplanet.ovh/mayx/blog
-http://69.62.77.234:8888/mayx/blog
-http://112.219.147.186:7000/mayx/blog
-https://git.rootfinlay.co.uk/mayx/blog
-https://repo.beithing.com/mayx/blog
-https://git.yi-guanjia.com/mayx/blog
-https://gitea.belanjaparts.com/mayx/blog
http://185.208.225.190:3000/mayx/blog
-https://git.sudo-fhir.au/mayx/blog
-http://116.204.34.35:12000/mayx/blog
-https://git.echaeplay.com/mayx/blog
-https://git.bethelean.kr/mayx/blog
https://git.Apture.io/mayx/blog
-http://103.231.8.120/mayx/blog
-https://gitea.jasonstolle.com/mayx/blog
http://8.134.61.107:3000/mayx/blog
-http://47.107.88.161:3000/mayx/blog
-http://142.171.47.170:3000/mayx/blog
-http://111.231.146.230:8418/mayx/blog
-https://git.winscloud.net/mayx/blog
-https://git.pwaapp.cc/mayx/blog
-http://119.28.73.80:5000/mayx/blog
-https://git.sleepingforest.co.uk/mayx/blog
-https://an360.top/mayx/blog
-http://106.15.78.64:3000/mayx/blog
-http://hoenking.cn:3000/mayx/blog
-https://gitea.anessen.xyz/mayx/blog
-https://git.cjcrace.io/mayx/blog
-https://git.wisder.net/mayx/blog
-https://git2.ujin.tech/mayx/blog
-http://111.119.244.185:3000/mayx/blog
-http://110.41.179.36:13000/mayx/blog
-https://git.tomlab.dev/mayx/blog
-http://frktedu.ru:3000/mayx/blog
-https://git.influxfin.com/mayx/blog
http://219.157.255.213:25311/mayx/blog
-https://git.melvincarvalho.com/mayx/blog
-https://gitea.aerwen.net/mayx/blog
-https://git.vekus.ru/mayx/blog
-http://116.204.75.78:6180/mayx/blog
-http://109.228.48.121:8000/mayx/blog
-https://bk-house.synology.me:3081/mayx/blog
-https://git.sparrowcomm.com/mayx/blog
-https://git.hubhoo.com/mayx/blog
-https://git.ultra.pub/mayx/blog
-http://27.124.12.222:3000/mayx/blog
-https://git.sayndone.ru/mayx/blog
-https://gitea.hintsight.com/mayx/blog
-https://anzsco.co.nz/mayx/blog
-https://git.saintdoggie.org/mayx/blog
-http://blackobelisk.xyz:3000/mayx/blog
-https://git.dushes.keenetic.pro/mayx/blog
-http://47.129.22.53:22345/mayx/blog
-https://git.tech.troyrc.com/mayx/blog
-http://git.zkyspace.top/mayx/blog
-http://149.88.87.128:3000/mayx/blog
-http://124.70.167.140:3000/mayx/blog
-http://77.223.118.106:8081/mayx/blog
-https://git.the-kn.com/mayx/blog
-https://git.ism-dev.net/mayx/blog
-http://sinzero.xyz:3000/mayx/blog