3 Commits

Author SHA1 Message Date
mayx a4cc075205 Update 2 files
- /deploy.sh
- /.readthedocs.yaml
2026-10-01 15:06:06 +00:00
mayx 44d8461ab1 Update 3 files
- /_data/ai-cache.json
- /_data/proxylist.yml
- /deploy.sh
2026-10-01 14:49:18 +00:00
mayx 303f5df01c Update 5 files
- /_data/other_repo_list.csv
- /_data/links.csv
- /_posts/2026-10-01-quine.md
- /_tools/blogquine.py
- /assets/js/pjax.js
2026-09-30 16:01:13 +00:00
9 changed files with 1382 additions and 79 deletions
+4 -1
View File
@@ -13,4 +13,7 @@ build:
- curl -L -o Mabbs/README.md https://github.com/Mabbs/Mabbs/raw/main/README.md
- bundle exec jekyll build --destination $READTHEDOCS_OUTPUT/html
- python3 _tools/blogquine.py --src-dir blog --quine-dir blog $READTHEDOCS_OUTPUT/html MayxBlog.7z
- mv MayxBlog.7z $READTHEDOCS_OUTPUT/html
- curl -L -O https://github.com/ip7z/7zip/releases/download/26.03/7z2603-linux-x64.tar.xz
- tar xvf 7z2603-linux-x64.tar.xz
- ./7zzs a -mx9 -bd -bb0 MayxBlog-new.7z MayxBlog.7z
- mv MayxBlog-new.7z $READTHEDOCS_OUTPUT/html/MayxBlog.7z
+2 -1
View File
@@ -181,5 +181,6 @@
"/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 协议的网关。"
"/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 协议的网关。",
"/2026/10/01/quine.html": "这篇文章介绍了作者利用AI制作一个“完整”的博客压缩包的过程。起因是作者之前尝试使用ZIP Quine制作包含自身压缩包,但由于技术限制未能成功。作者此次使用AI尝试基于LZMA2算法制作7z格式的博客压缩包,最终成功生成代码并制作完成。文章中还讨论了作者对AI创新能力的看法,认为AI不仅可以重组现有信息,还可以完成人类以前认为具有挑战性的任务。"
}
+1
View File
@@ -26,3 +26,4 @@ RavelloH's Blog,https://ravelloh.com,https://ravelloh.com/feed.xml,Beginning of
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,把喜欢的东西都记下来···
1 title link feed_url description
26 EXYONE@BLOG:~$ https://exyon.ee https://exyon.ee/feed.xml 一隅藏天地,流水遇知音。
27 小景 https://jingyuan-zheng.github.io/zh/ https://jingyuan-zheng.github.io/zh/index.xml 随心分享有趣的技术、开源项目与生活记录。
28 热汤茶馆 https://blog.hotsouprealm.top/ https://blog.hotsouprealm.top/atom.xml 茶凉了可以续,话断了可以接,这里是hahahotsoup的茶馆。
29 FGHRSH 日记簿 https://www.fghrsh.net/ https://www.fghrsh.net/feed.php 把喜欢的东西都记下来···
+11 -28
View File
@@ -4,6 +4,7 @@ http://git.dkforestseeaaq2dqz2uflmlsybvnq2irzn4ygyvu53oazyorednviid.onion/mayx/b
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
@@ -31,16 +32,13 @@ http://116.236.50.103:8789/mayx/blog
https://repo.gusdya.net/mayx/blog
https://gitea.synapsetec.cn/mayx/blog
http://gitea.yunshanghub.com:8081/mayx/blog
http://113.177.27.200:2033/mayx/blog
http://152.69.204.151:3000/mayx/blog
http://187.216.152.151:9999/mayx/blog
http://116.63.173.179:8001/mayx/blog
https://git.furcom.org/mayx/blog
https://git.karma-riuk.com/mayx/blog
https://git.7o9o.net/mayx/blog
https://git.gupaoedu.cn/mayx/blog
https://git.7milch.com/mayx/blog
https://gitea.sciotech.cn/mayx/blog
https://gitea.micro-stack.org/mayx/blog
http://106.54.211.95:3000/mayx/blog
http://172.172.102.93:3000/mayx/blog
@@ -64,11 +62,9 @@ http://8.130.135.159:3000/mayx/blog
https://git.dshkabatur.ru/mayx/blog
http://47.103.78.70:3000/mayx/blog
http://194.5.152.156:3000/mayx/blog
http://58.65.162.118:3000/mayx/blog
https://git.arkon.solutions/mayx/blog
https://gitea.yimoyuyan.cn/mayx/blog
http://221.203.14.217:3000/mayx/blog
https://dev.kiramtech.com/mayx/blog
https://git.f4e.lol/mayx/blog
http://72.61.229.93:4000/mayx/blog
http://39.101.74.135:5000/mayx/blog_cn
@@ -80,20 +76,16 @@ http://45.55.138.82:3000/mayx/blog_cn
http://118.24.129.148:3000/mayx/blog_cn
http://120.48.141.82:3000/mayx/blog_cn
http://175.27.229.211:3000/mayx/blog_cn
https://git.yidaimingjvn.xyz/mayx/blog_cn
http://39.105.67.143:3000/mayx/blog_cn
http://82.156.89.21:3000/mayx/blog_cn
http://xujiesoft.vicp.net:3000/mayx/blog_cn
https://git.mingliqiye.com/mayx/blog_cn
http://58.213.60.6:19000/mayx/blog_cn
http://47.92.113.131:3000/mayx/blog
http://gyc.myds.me:4000/mayx/blog
https://git.graveyard.sh/mayx/blog
https://gitea.jnyuxia.com/mayx/blog
https://gitea.mynas-lechner.de/mayx/blog
https://gitlab.iplusus.com/mayx/blog
https://git.miasma-os.com/mayx/blog
https://git.zakum.cn/mayx/blog
http://47.109.103.110:9000/mayx/blog_cn
http://47.104.241.192:19999/mayx/blog_cn
http://47.98.148.146:1026/mayx/blog_cn
@@ -106,12 +98,9 @@ http://47.106.222.181:20511/mayx/blog_cn
http://118.24.161.24:3000/mayx/blog_cn
http://36.138.125.206:3000/mayx/blog_cn
https://git.crystalyx.net/mayx/blog
https://gitea.grxe.io/mayx/blog
https://gitea.accept.dev.dbf.nl/mayx/blog
https://barhoum-lab.fr/mayx/blog
http://gitea.snailtrack.cn/mayx/blog_cn
https://code.draussenfunker.de/mayx/blog_cn
https://git.dinsor.co.th/mayx/blog
http://www.bkandssp.cn:30/mayx/blog
http://gitea.ydxtool.com/mayx/blog
https://gitea.malxte.de/mayx/blog
@@ -129,7 +118,6 @@ https://git.libregaming.org/mayx/blog
https://git.kaki87.net/mayx/blog
https://forgejo.vanten-s.com/mayx/blog
http://124.71.169.183:3000/mayx/blog
https://git.msoucy.me/mayx/blog
http://140.120.108.238:49308/mayx/blog
http://git.chilidoginteractive.com:3000/mayx/blog_cn
https://git.panda-number.one/mayx/blog
@@ -138,7 +126,6 @@ https://gitea.keymantek.com:777/mayx/blog
https://git.tirtapakuan.co.id/mayx/blog
http://tian-you.top:7020/mayx/blog
http://34.17.182.140/mayx-gogs/blog
http://gitea.mikarsoft.com/mayx/blog
https://mcgit.place/mayx/blog
https://forgejo.rekallservices.com/mayx/blog
http://git.instal.org.cn/mayx/blog
@@ -149,7 +136,6 @@ https://git.netzbyte.com/mayx/blog
https://ataymakhzan.com/mayx/blog
https://repo.qruize.com/mayx/blog
https://git.xneon.org/mayx/blog
https://git.lamby.gay/mayx/blog
https://lab.dutt.ch/mayx/blog
https://gitea.dabit.synology.me/mayx/blog
https://git.joinplu.me/mayx/blog
@@ -170,12 +156,10 @@ https://devcraft-dot.tech/mayx/blog
https://a-t-g.ru/mayx/blog
http://wangbeibei.xyz:6002/mayx/blog
http://8.141.82.163:20000/mayx/blog_cn
http://81.70.30.91:3000/mayx/blog_cn
http://yidaima.cn:6008/mayx/blog_cn
http://8.148.31.14:3000/mayx/blog_cn
http://58.17.14.95:8001/mayx/blog_cn
http://39.99.175.172:8000/mayx/blog_cn
https://gitea.detr.top/mayx/blog_cn
http://175.178.193.35:3000/mayx/blog_cn
http://gitea.jb1000.com:88/mayx/blog_cn
http://www.22ai.vip/mayx/blog_cn
@@ -185,19 +169,12 @@ http://62.234.20.54:3000/mayx/blog_cn
https://gitea.4gunn.cn:52443/mayx/blog_cn
http://jdunlap.com/mayx/blog
https://git.silica.codes/mayx/blog
https://www.vitelgrid.app/mayx/blog
https://gitruhub.ru/mayx/blog
https://git.techworkshop42.ru/mayx/blog
http://speedyfox.app/mayx/blog
https://mjjtop.com/mayx/blog
https://forgejo.wanderingmonster.dev/mayx/blog
https://git.edavmig.ru/mayx/blog
https://gitea.ns5001k.sigma2.no/mayx/blog
https://git.hemangvyas.com/mayx/blog
https://gitav.ru/mayx/blog
https://git.sakuzyo.net/mayx/blog
http://www.365rise.top/mayx/blog
https://git.ifuntanhub.dev/mayx/blog
https://git.aptcloud.ru/mayx/blog
https://gitlab.dev.genai-team.ru/mayx/blog
https://git.umervtilte.lol/mayx/blog
@@ -212,17 +189,23 @@ http://81.69.57.215:3000/mayx/blog_cn
https://git.dglyoo.com/mayx/blog_cn
http://c8202.top:3000/mayx/blog_cn
http://nojava.fun/mayx/blog_cn
https://gitimn.com/mayx/blog
https://git.resacachile.cl/mayx/blog
https://git.vycsucre.gob.ve/mayx/blog
https://newtrafficworksgit.online/mayx/blog
https://git.uj-s.com/mayx/blog
https://git.albiobola.nl/mayx/blog
http://gitea.amm.ar/mayx/blog
https://git.83channel.net/mayx/blog
https://git.zeppone.com/mayx/blog
https://repo.paperless.rs/mayx/blog
https://urbal.dev/mayx/blog
https://git.pwarde.nl/mayx/blog
https://bolha.dev/mayx/blog
https://git.checkerwars.com/mayx/blog
https://git.broderlands.com/mayx/blog
https://gitea.schwegmann.tech/mayx/blog
https://veretium.com/mayx/blog
https://gitea.kcm-nixi.cn:32443/mayx/blog
https://git.riskreduction.net/mayx/blog
https://git.twitchmagic.pro/mayx/blog
https://gitea.ctmp.ir/mayx/blog
https://gitea.marcin00.pl/mayx/blog
https://git.imagitech.mx/mayx/blog
https://git.hidosi.ru/mayx/blog
1 repo_url
4 http://giteabolfdejtdzblkooalqei6jr67imiugmhtsh6ocw4hlj5a4q.b32.i2p/mayx/blog
5 https://gitlab.lain.la/mayx/mayx.pages.lain.la
6 https://gitplac.si/mayx/mayx.gitpage.si
7 https://git.32bit.cafe/mayx/blog
8 https://gitnet.fr/mayx/blog
9 https://opencommit.eu/mayx/blog
10 https://forge.fedoraproject.org/mabbs/blog
32 https://repo.gusdya.net/mayx/blog
33 https://gitea.synapsetec.cn/mayx/blog
34 http://gitea.yunshanghub.com:8081/mayx/blog
http://113.177.27.200:2033/mayx/blog
35 http://152.69.204.151:3000/mayx/blog
36 http://187.216.152.151:9999/mayx/blog
37 http://116.63.173.179:8001/mayx/blog
38 https://git.furcom.org/mayx/blog
39 https://git.karma-riuk.com/mayx/blog
https://git.7o9o.net/mayx/blog
40 https://git.gupaoedu.cn/mayx/blog
41 https://git.7milch.com/mayx/blog
https://gitea.sciotech.cn/mayx/blog
42 https://gitea.micro-stack.org/mayx/blog
43 http://106.54.211.95:3000/mayx/blog
44 http://172.172.102.93:3000/mayx/blog
62 https://git.dshkabatur.ru/mayx/blog
63 http://47.103.78.70:3000/mayx/blog
64 http://194.5.152.156:3000/mayx/blog
http://58.65.162.118:3000/mayx/blog
65 https://git.arkon.solutions/mayx/blog
66 https://gitea.yimoyuyan.cn/mayx/blog
67 http://221.203.14.217:3000/mayx/blog
https://dev.kiramtech.com/mayx/blog
68 https://git.f4e.lol/mayx/blog
69 http://72.61.229.93:4000/mayx/blog
70 http://39.101.74.135:5000/mayx/blog_cn
76 http://118.24.129.148:3000/mayx/blog_cn
77 http://120.48.141.82:3000/mayx/blog_cn
78 http://175.27.229.211:3000/mayx/blog_cn
https://git.yidaimingjvn.xyz/mayx/blog_cn
79 http://39.105.67.143:3000/mayx/blog_cn
80 http://82.156.89.21:3000/mayx/blog_cn
81 http://xujiesoft.vicp.net:3000/mayx/blog_cn
https://git.mingliqiye.com/mayx/blog_cn
82 http://58.213.60.6:19000/mayx/blog_cn
83 http://47.92.113.131:3000/mayx/blog
84 http://gyc.myds.me:4000/mayx/blog
85 https://git.graveyard.sh/mayx/blog
86 https://gitea.jnyuxia.com/mayx/blog
https://gitea.mynas-lechner.de/mayx/blog
87 https://gitlab.iplusus.com/mayx/blog
88 https://git.miasma-os.com/mayx/blog
https://git.zakum.cn/mayx/blog
89 http://47.109.103.110:9000/mayx/blog_cn
90 http://47.104.241.192:19999/mayx/blog_cn
91 http://47.98.148.146:1026/mayx/blog_cn
98 http://118.24.161.24:3000/mayx/blog_cn
99 http://36.138.125.206:3000/mayx/blog_cn
100 https://git.crystalyx.net/mayx/blog
https://gitea.grxe.io/mayx/blog
https://gitea.accept.dev.dbf.nl/mayx/blog
101 https://barhoum-lab.fr/mayx/blog
102 http://gitea.snailtrack.cn/mayx/blog_cn
103 https://code.draussenfunker.de/mayx/blog_cn
https://git.dinsor.co.th/mayx/blog
104 http://www.bkandssp.cn:30/mayx/blog
105 http://gitea.ydxtool.com/mayx/blog
106 https://gitea.malxte.de/mayx/blog
118 https://git.kaki87.net/mayx/blog
119 https://forgejo.vanten-s.com/mayx/blog
120 http://124.71.169.183:3000/mayx/blog
https://git.msoucy.me/mayx/blog
121 http://140.120.108.238:49308/mayx/blog
122 http://git.chilidoginteractive.com:3000/mayx/blog_cn
123 https://git.panda-number.one/mayx/blog
126 https://git.tirtapakuan.co.id/mayx/blog
127 http://tian-you.top:7020/mayx/blog
128 http://34.17.182.140/mayx-gogs/blog
http://gitea.mikarsoft.com/mayx/blog
129 https://mcgit.place/mayx/blog
130 https://forgejo.rekallservices.com/mayx/blog
131 http://git.instal.org.cn/mayx/blog
136 https://ataymakhzan.com/mayx/blog
137 https://repo.qruize.com/mayx/blog
138 https://git.xneon.org/mayx/blog
https://git.lamby.gay/mayx/blog
139 https://lab.dutt.ch/mayx/blog
140 https://gitea.dabit.synology.me/mayx/blog
141 https://git.joinplu.me/mayx/blog
156 https://a-t-g.ru/mayx/blog
157 http://wangbeibei.xyz:6002/mayx/blog
158 http://8.141.82.163:20000/mayx/blog_cn
http://81.70.30.91:3000/mayx/blog_cn
159 http://yidaima.cn:6008/mayx/blog_cn
160 http://8.148.31.14:3000/mayx/blog_cn
161 http://58.17.14.95:8001/mayx/blog_cn
162 http://39.99.175.172:8000/mayx/blog_cn
https://gitea.detr.top/mayx/blog_cn
163 http://175.178.193.35:3000/mayx/blog_cn
164 http://gitea.jb1000.com:88/mayx/blog_cn
165 http://www.22ai.vip/mayx/blog_cn
169 https://gitea.4gunn.cn:52443/mayx/blog_cn
170 http://jdunlap.com/mayx/blog
171 https://git.silica.codes/mayx/blog
https://www.vitelgrid.app/mayx/blog
172 https://gitruhub.ru/mayx/blog
https://git.techworkshop42.ru/mayx/blog
http://speedyfox.app/mayx/blog
173 https://mjjtop.com/mayx/blog
174 https://forgejo.wanderingmonster.dev/mayx/blog
https://git.edavmig.ru/mayx/blog
175 https://gitea.ns5001k.sigma2.no/mayx/blog
176 https://git.hemangvyas.com/mayx/blog
177 https://gitav.ru/mayx/blog
https://git.sakuzyo.net/mayx/blog
http://www.365rise.top/mayx/blog
https://git.ifuntanhub.dev/mayx/blog
178 https://git.aptcloud.ru/mayx/blog
179 https://gitlab.dev.genai-team.ru/mayx/blog
180 https://git.umervtilte.lol/mayx/blog
189 https://git.dglyoo.com/mayx/blog_cn
190 http://c8202.top:3000/mayx/blog_cn
191 http://nojava.fun/mayx/blog_cn
https://gitimn.com/mayx/blog
https://git.resacachile.cl/mayx/blog
192 https://git.vycsucre.gob.ve/mayx/blog
193 https://newtrafficworksgit.online/mayx/blog
194 https://git.uj-s.com/mayx/blog
195 https://git.albiobola.nl/mayx/blog
http://gitea.amm.ar/mayx/blog
196 https://git.83channel.net/mayx/blog
https://git.zeppone.com/mayx/blog
197 https://repo.paperless.rs/mayx/blog
198 https://urbal.dev/mayx/blog
199 https://git.pwarde.nl/mayx/blog
200 https://bolha.dev/mayx/blog
201 https://git.checkerwars.com/mayx/blog
202 https://git.broderlands.com/mayx/blog
203 https://gitea.schwegmann.tech/mayx/blog
204 https://veretium.com/mayx/blog
205 https://gitea.kcm-nixi.cn:32443/mayx/blog
206 https://git.riskreduction.net/mayx/blog
207 https://git.twitchmagic.pro/mayx/blog
208 https://gitea.ctmp.ir/mayx/blog
209 https://gitea.marcin00.pl/mayx/blog
210 https://git.imagitech.mx/mayx/blog
211 https://git.hidosi.ru/mayx/blog
-1
View File
@@ -19,7 +19,6 @@ mirrors:
- https://mayx.gitnet.page/
- https://mayx.stormkit.dev/
- https://mayx.grebedoc.dev/
- https://mabbs.kinsta.page/
- https://mayx.codeberg.page/
- https://mayx.tildepages.org/
- https://mayx.4everland.app/
File diff suppressed because it is too large Load Diff
+7 -46
View File
@@ -12,8 +12,8 @@ import time
# ============================================================
# Part 1: 最小 LZMA1 range coder(只做编码)
#
# 设计目标:只实现 quine 构造需要的 token:literal / match / rep0-match /
# end-marker,编码字节与历史内容无关(不维护输出历史),
# 设计目标:只实现 quine 构造需要的 token:match / rep0-match,
# 编码字节与历史内容无关(不维护输出历史),
# 这是"先算结构、后填数据"两阶段装配的基础。
# 参考:Igor Pavlov 的 LZMA SDK (LzmaEnc.c / LzmaDec.c)。
# ============================================================
@@ -126,27 +126,21 @@ def _pos_slot_and_bits(d):
class LzmaEncoder:
def __init__(self, lc=3, lp=0, pb=2):
def __init__(self, pb=2):
"""
不维护输出假历史:match 的编码字节只取决于 (dist,len,pos),与历史内容无关,
因此 quine 构造(先算结构、后填数据)不需要逐字节复制假历史。
"""
self.lc, self.lp, self.pb = lc, lp, pb
self.pb = pb
self.pos_mask = (1 << pb) - 1
self.lp_mask = (1 << lp) - 1
self.rc = RangeEncoder()
self.pos = 0 # 已输出字节数
self.state = 0
self.prev_byte = 0
self.reps = [0, 0, 0, 0] # rep0..rep3,存的是 0 基距离
self.out = bytearray()
# 概率模型
n = PROB_INIT
self.p_is_match = [n] * (kNumStates << kNumPosBitsMax)
self.p_is_rep = [n] * kNumStates
self.p_is_rep_g0 = [n] * kNumStates
self.p_is_rep_g1 = [n] * kNumStates
self.p_is_rep_g2 = [n] * kNumStates
self.p_rep0_long = [n] * (kNumStates << kNumPosBitsMax)
self.p_pos_slot = [n] * (kNumLenToPosStates << kNumPosSlotBits)
self.p_spec_pos = [n] * (kNumFullDistances - kEndPosModelIndex) # 114
@@ -159,7 +153,6 @@ class LzmaEncoder:
self.p_rep_len_low = [n] * (16 * kNumLowLenSymbols)
self.p_rep_len_mid = [n] * (16 * kNumMidLenSymbols)
self.p_rep_len_high = [n] * (1 << kNumHighLenBits)
self.p_lit = [n] * (0x300 << (lc + lp))
# ---------- 内部 ----------
@property
@@ -184,25 +177,6 @@ class LzmaEncoder:
self.rc.bittree_encode(high, 0, kNumHighLenBits, l - kNumMidLenSymbols)
# ---------- 对外 token ----------
def literal(self, b):
if self.state >= kNumLitStates:
raise NotImplementedError("matched-literal 未实现(quine 构造不需要)")
# 每个符号先编 isMatch 位:0 表示这是 literal
ps = self.pos_state
self.rc.encode_bit(self.p_is_match, (self.state << kNumPosBitsMax) + ps, 0)
lit_state = ((self.pos & self.lp_mask) << self.lc) + (self.prev_byte >> (8 - self.lc))
self.rc.bittree_encode(self.p_lit, lit_state * 0x300, 8, b)
self.out.append(b)
self.prev_byte = b
self.pos += 1
# UpdateState_Literal
if self.state <= 3:
self.state = 0
elif self.state <= 9:
self.state -= 3
else:
self.state -= 6
def _write_dist(self, dist, lts):
d = dist - 1
slot, n, low_bits = _pos_slot_and_bits(d)
@@ -217,7 +191,6 @@ class LzmaEncoder:
self.rc.encode_direct_bits(low_bits >> kNumAlignBits, n - kNumAlignBits)
self.rc.bittree_reverse_encode(self.p_align, 0, kNumAlignBits,
low_bits & ((1 << kNumAlignBits) - 1))
return d
def match(self, dist, length):
assert kMatchMinLen <= length <= 273, length
@@ -227,11 +200,9 @@ class LzmaEncoder:
lts = min(length - kMatchMinLen, kNumLenToPosStates - 1)
self._encode_len(self.p_len_choice,
self.p_len_low, self.p_len_mid, self.p_len_high, length)
d = self._write_dist(dist, lts)
# 状态与 rep 链更新
self._write_dist(dist, lts)
# 状态更新
self.state = 7 if self.state < kNumLitStates else 10
self.reps[3], self.reps[2], self.reps[1], self.reps[0] = \
self.reps[2], self.reps[1], self.reps[0], d
self.pos += length
def rep_match(self, length):
@@ -247,16 +218,6 @@ class LzmaEncoder:
self.state = 8 if self.state < kNumLitStates else 11
self.pos += length
def end(self):
"""LZMA 结束标记:编码一个 0 基距离为 0xFFFFFFFF 的 match。"""
ps = self.pos_state
self.rc.encode_bit(self.p_is_match, (self.state << kNumPosBitsMax) + ps, 1)
self.rc.encode_bit(self.p_is_rep, self.state, 0)
self._encode_len(self.p_len_choice,
self.p_len_low, self.p_len_mid, self.p_len_high, kMatchMinLen)
self._write_dist(0x100000000, 0)
self.state = 7 if self.state < kNumLitStates else 10
def finish(self):
return self.rc.finish()
@@ -374,7 +335,7 @@ class BlogQuine:
for dirpath, dirnames, filenames in os.walk(root):
dirnames.sort()
for dn in dirnames:
rel = os.path.relpath(os.path.join(dirpath, dn), root)
rel = os.path.relpath(os.path.join(dirpath, dn), root).replace(os.sep, "/")
self.walk_entries.append((self._prefixed(rel), True))
for fn in sorted(filenames):
p = os.path.join(dirpath, fn)
+1 -1
View File
@@ -116,7 +116,7 @@
// 排除列表:外链、锚点、静态资源、Live2D 目录
var exclude = ':not([target="_blank"]):not([href^="http"]):not([href^="//"])' +
':not([href^="mailto"]):not([href^="#"])' +
':not([href$=".xml"]):not([href$=".json"]):not([href$=".tgz"]):not([href$=".zip"])' +
':not([href$=".xml"]):not([href$=".json"]):not([href$=".7z"]):not([href$=".zip"])' +
':not([href^="/Live2dHistoire"])';
$(document).pjax('a' + exclude, PJAX_OPTS.container, PJAX_OPTS);
$(document).on('submit', 'form#search-input-all', function (e) {
+4 -1
View File
@@ -3,4 +3,7 @@ mkdir Mabbs
curl -L -o Mabbs/README.md https://github.com/Mabbs/Mabbs/raw/main/README.md
bundle exec jekyll build -d public
python3 _tools/blogquine.py --src-dir blog --quine-dir blog public MayxBlog.7z
mv MayxBlog.7z public/
curl -L -O https://github.com/ip7z/7zip/releases/download/26.03/7z2603-linux-x64.tar.xz
tar xvf 7z2603-linux-x64.tar.xz
./7zzs a -mx9 -bd -bb0 MayxBlog-new.7z MayxBlog.7z
mv MayxBlog-new.7z public/MayxBlog.7z