mirror of
https://github.com/Mabbs/mabbs.github.io
synced 2026-02-05 13:20:43 +00:00
Compare commits
156 Commits
AR-Backup-
...
1553183d31
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1553183d31 | ||
|
|
0ad9008f3e | ||
|
|
03a2f1fdf9 | ||
|
|
da73615b73 | ||
|
|
e9ac9bf1df | ||
|
|
d13dd560c2 | ||
|
|
1198b6c191 | ||
|
|
1b5efb8edd | ||
|
|
971641b3dd | ||
|
|
c71a48263e | ||
|
|
21eaed132b | ||
|
|
5098b24ce6 | ||
|
|
ae6a6d3029 | ||
|
|
2803a0773a | ||
|
|
da59fa1a9f | ||
|
|
d7c957b68a | ||
|
|
ebe45018f5 | ||
|
|
b4af6686ce | ||
|
|
3d5d7eaa16 | ||
|
|
f5e43a61f8 | ||
|
|
5c739ed695 | ||
|
|
6dab77e73c | ||
|
|
1ab207cb19 | ||
|
|
3dd82ed54c | ||
|
|
0ab62cb2b3 | ||
|
|
37ead95307 | ||
|
|
fe29177bbd | ||
|
|
6a4897140e | ||
|
|
2b0fd923ad | ||
|
|
86f82d5aac | ||
|
|
3c324af39e | ||
|
|
d9f22d591a | ||
|
|
5b639a1cba | ||
|
|
73415fe7ec | ||
|
|
ada0170bc0 | ||
|
|
16c29c6d1f | ||
|
|
043b1a6cf6 | ||
|
|
5c9e79c0fc | ||
|
|
0cf73875a7 | ||
|
|
82e9d43169 | ||
|
|
be9602047b | ||
|
|
5300870620 | ||
|
|
e809c313c2 | ||
|
|
19d91dffd4 | ||
|
|
b2a074bead | ||
|
|
2c629c95b9 | ||
|
|
d1e734ede7 | ||
|
|
fdaf977573 | ||
|
|
f401d33c48 | ||
|
|
4475fd7ffe | ||
|
|
cdd14e03e9 | ||
|
|
ef2ea62d40 | ||
|
|
53a96b52d6 | ||
|
|
ba857c724b | ||
|
|
3ef5ec378d | ||
|
|
e3cf4e5b9e | ||
|
|
4f3bab2162 | ||
|
|
4da75fcf15 | ||
|
|
0e8ac37673 | ||
|
|
4de724f972 | ||
|
|
0afcae7cd8 | ||
|
|
dddeb23c41 | ||
|
|
e4e0261e0a | ||
|
|
fb76deac38 | ||
|
|
d4165271bc | ||
|
|
39cada8eef | ||
|
|
833fcb15ad | ||
|
|
2e4dee01e9 | ||
|
|
84e7982879 | ||
|
|
4ee425d47c | ||
|
|
7ea27ffbda | ||
|
|
d10e960a8d | ||
|
|
00ed1a9b50 | ||
|
|
dba69d3ceb | ||
|
|
c25290e716 | ||
|
|
7fbeaffac3 | ||
|
|
6030f3c83c | ||
|
|
840144b202 | ||
|
|
7c256532d3 | ||
|
|
d60d41a008 | ||
|
|
5cc76892b3 | ||
|
|
0a34660f94 | ||
|
|
8fd0fd107f | ||
|
|
c2351bc269 | ||
|
|
446c34abec | ||
|
|
3c0dee8e79 | ||
|
|
63ad82f16c | ||
|
|
b7e3354701 | ||
|
|
2d757a0e7c | ||
|
|
7937972e19 | ||
|
|
5cbb262172 | ||
|
|
723af68b24 | ||
|
|
ffd614df6c | ||
|
|
c6b5330945 | ||
|
|
b1929b927f | ||
|
|
38caae08aa | ||
|
|
46e17e7abd | ||
|
|
8b4ec38daa | ||
|
|
d1ac198efa | ||
|
|
399a6e2b14 | ||
|
|
786f9bd602 | ||
|
|
2b40c9e852 | ||
|
|
e5e305f0f3 | ||
|
|
6584393a15 | ||
|
|
6cb9535ecc | ||
|
|
d00e310673 | ||
|
|
368f1eb0d7 | ||
|
|
98e38a212e | ||
|
|
b3bc4d12c8 | ||
|
|
e0aba75f77 | ||
|
|
d1791b47f3 | ||
|
|
fe5faeac16 | ||
|
|
953811453e | ||
|
|
4c6c0bfc11 | ||
|
|
17c27841b0 | ||
|
|
6de5898f85 | ||
|
|
824f34f25f | ||
|
|
de996d9015 | ||
|
|
dbc8d7fb3c | ||
|
|
ac554c5535 | ||
|
|
97e0ef3c81 | ||
|
|
2e59f23e9f | ||
|
|
6e45815987 | ||
|
|
8b1135d688 | ||
|
|
3b70d3c4bd | ||
|
|
8a3ea7d2b0 | ||
|
|
b818d1db8e | ||
|
|
a56d77a472 | ||
|
|
72ab43b411 | ||
|
|
0f00469871 | ||
|
|
1df87ea39d | ||
|
|
a5ace5b449 | ||
|
|
29c6d57faa | ||
|
|
d01d9119de | ||
|
|
d0ce029b94 | ||
|
|
ebc280932e | ||
|
|
6d145383f5 | ||
|
|
9669d10f5c | ||
|
|
d9984efa2a | ||
|
|
16fd0ffd59 | ||
|
|
028f8b7347 | ||
|
|
a9a876bc6f | ||
|
|
3edfcdb60a | ||
|
|
c454031365 | ||
|
|
a9d4790eb7 | ||
|
|
2f59a946db | ||
|
|
1f5ef5079c | ||
|
|
9d255a0a6f | ||
|
|
9f2bed804e | ||
|
|
8211f6d1a2 | ||
|
|
8f440b43dd | ||
|
|
7fe88c21a6 | ||
|
|
526c8c35b7 | ||
|
|
9b3f0369f6 | ||
|
|
e8f6fbe1e7 | ||
|
|
91dd8a34ea |
10
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
10
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
<!-- 欢迎提交PR!如果是修复 BUG 或 typo ,可直接删除此模板。若是添加友链,请确认满足以下条件(将 [ ] 替换为 [x] 打勾): -->
|
||||
|
||||
- [ ] 这个 PR 是关于添加Links的
|
||||
- [ ] 我在申请之前加上了[贵站](https://mabbs.github.io)友链
|
||||
- [ ] 我的网站 **全站启用 HTTPS**
|
||||
- [ ] 我的博客满足: **原创文章比例>80%,数量>10** 的要求
|
||||
- [ ] 我的网站满足 **站点稳定,不弃坑** 的要求
|
||||
- [ ] 我的链接列表不需要客户端渲染 <!-- 如有请在下方列出合理原因 -->
|
||||
|
||||
我的网站是: <!-- 例如:https://example.com -->
|
||||
16
.readthedocs.yaml
Normal file
16
.readthedocs.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
# Required
|
||||
version: 2
|
||||
|
||||
build:
|
||||
os: ubuntu-24.04
|
||||
tools:
|
||||
ruby: "3.3"
|
||||
|
||||
commands:
|
||||
- gem install bundler
|
||||
- bundle install
|
||||
- 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
|
||||
8
404.md
8
404.md
@@ -2,5 +2,13 @@
|
||||
layout: default
|
||||
title: 404 - 找不到页面
|
||||
---
|
||||
|
||||
# 找不到页面
|
||||
你访问的资源 <code><script>document.write(window.location.pathname)</script></code> 不存在或者可能已经被永久移除。
|
||||
|
||||
或者看看近期的其他文章?
|
||||
|
||||
{% for post in site.posts limit:10 %}
|
||||
- {{ post.date | date: "%Y/%m/%d" }} - [{{ post.title }}{% if post.layout == "encrypt" %} [加密] {% endif %}]({{ post.url }})
|
||||
|
||||
{% endfor %}
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<users>
|
||||
<user>0ADFCE64B3557DC4DC5F2DC224C5FDDD</user>
|
||||
</users>
|
||||
6
Gemfile
6
Gemfile
@@ -7,8 +7,14 @@ group :jekyll_plugins do
|
||||
gem "jekyll-sitemap", "~> 1.4.0"
|
||||
gem "jekyll-feed", "~> 0.15.1"
|
||||
gem "jekyll-include-cache", "~> 0.2.1"
|
||||
gem "jekyll-readme-index", "~> 0.3.0"
|
||||
gem "jekyll-default-layout", "~> 0.1.5"
|
||||
gem "jekyll-titles-from-headings", "~> 0.5.3"
|
||||
gem "jekyll-theme-minimal"
|
||||
gem "jekyll-paginate", "~> 1.1.0"
|
||||
gem "kramdown-parser-gfm", "~> 1.1.0"
|
||||
gem "kramdown", "~> 2.3.2"
|
||||
gem "csv"
|
||||
gem "base64"
|
||||
gem "bigdecimal"
|
||||
end
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
# Live2d的看板娘——伊斯特瓦尔(Histoire)
|
||||
[Original Repo](https://github.com/eeg1412/Live2dHistoire)
|
||||
#### 可用于网页端显示Live2D版的伊斯特瓦尔(Histoire) emlog插件版可以看这里:[传送门](https://www.wikimoe.com/?post=75)
|
||||
#### 基于[《给博客添加能动的看板娘(Live2D)-将其添加到网页上吧》](https://imjad.cn/archives/lab/add-dynamic-poster-girl-with-live2d-to-your-blog-02)上的源码进行修改。
|
||||
#### 在原先的基础上加上了如下功能:
|
||||
@@ -93,9 +94,6 @@ var talkAPI = "";//如果有类似图灵机器人的聊天接口请填写接口
|
||||
注意路径别弄错了噢 ~
|
||||
PHP 程序推荐使用主题函数获取绝对路径。
|
||||
|
||||
### 效果预览
|
||||

|
||||
|
||||
|
||||
### 模型说明
|
||||
本插件仅供学习和交流使用,禁止用于商业用途。
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Live2D!</title>
|
||||
<link rel="stylesheet" href="live2d/css/live2d.css" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
||||
</head>
|
||||
<body>
|
||||
<div id="landlord" style="left:5px;bottom:0px;">
|
||||
<div class="message" style="opacity:0"></div>
|
||||
<canvas id="live2d" width="500" height="560" class="live2d"></canvas>
|
||||
<div class="live_talk_input_body">
|
||||
<div class="live_talk_input_name_body">
|
||||
<input name="name" type="text" class="live_talk_name white_input" id="AIuserName" autocomplete="off" placeholder="你的名字" />
|
||||
</div>
|
||||
<div class="live_talk_input_text_body">
|
||||
<input name="talk" type="text" class="live_talk_talk white_input" id="AIuserText" autocomplete="off" placeholder="要和我聊什么呀?"/>
|
||||
<button type="button" class="live_talk_send_btn" id="talk_send">发送</button>
|
||||
</div>
|
||||
</div>
|
||||
<input name="live_talk" id="live_talk" value="1" type="hidden" />
|
||||
<div class="live_ico_box">
|
||||
<div class="live_ico_item type_info" id="showInfoBtn"></div>
|
||||
<div class="live_ico_item type_talk" id="showTalkBtn"></div>
|
||||
<div class="live_ico_item type_music" id="musicButton"></div>
|
||||
<div class="live_ico_item type_youdu" id="youduButton"></div>
|
||||
<div class="live_ico_item type_quit" id="hideButton"></div>
|
||||
<input name="live_statu_val" id="live_statu_val" value="0" type="hidden" />
|
||||
<audio src="" style="display:none;" id="live2d_bgm" data-bgm="0" preload="none"></audio>
|
||||
<input name="live2dBGM" value="https://t1.aixinxi.net/o_1c52p4qbp15idv6bl55h381moha.mp3" type="hidden">
|
||||
<input name="live2dBGM" value="https://t1.aixinxi.net/o_1c52p8frrlmf1aled1e14m56una.mp3" type="hidden">
|
||||
<input id="duType" value="douqilai,l2d_caihong" type="hidden">
|
||||
</div>
|
||||
</div>
|
||||
<div id="open_live2d">召唤伊斯特瓦尔</div>
|
||||
<script type="text/javascript" src="https://apps.bdimg.com/libs/jquery/1.7.1/jquery.min.js"></script>
|
||||
<script>
|
||||
var message_Path = '/histoire/live2d/';//资源目录,如果目录不对请更改
|
||||
var talkAPI = "";//如果有类似图灵机器人的聊天接口请填写接口路径
|
||||
</script>
|
||||
<script type="text/javascript" src="live2d/js/live2d.js"></script>
|
||||
<script type="text/javascript" src="live2d/js/message.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
Before Width: | Height: | Size: 824 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 826 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 658 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 252 KiB |
@@ -1,58 +0,0 @@
|
||||
{
|
||||
"version":"1.0.0",
|
||||
"model":"model.moc",
|
||||
"textures":[
|
||||
"histoire.1024/0.png",
|
||||
"histoire.1024/1.png",
|
||||
"histoire.1024/normal_2.png"
|
||||
],
|
||||
"layout":{
|
||||
"center_x":0.0,
|
||||
"center_y":-0.05,
|
||||
"width":2.0
|
||||
},
|
||||
"hit_areas_custom":{
|
||||
"head_x":[-1, 1],
|
||||
"head_y":[1, -1],
|
||||
"body_x":[-1, -1],
|
||||
"body_y":[1, -1]
|
||||
},
|
||||
"motions":{
|
||||
"idle":[
|
||||
{"file":"motions/idle/idle_00.mtn"},
|
||||
{"file":"motions/idle/idle_01.mtn"},
|
||||
{"file":"motions/idle/idle_02.mtn"}
|
||||
],
|
||||
"sleepy":[
|
||||
{"file":"motions/tap/shake.mtn"}
|
||||
],
|
||||
"flick_head":[
|
||||
{"file":"motions/tap/refuse.mtn"},
|
||||
{"file":"motions/tap/nep_slide_head_2.mtn"},
|
||||
{"file":"motions/tap/nep_touch_belly_2.mtn"},
|
||||
{"file":"motions/tap/nep_touch_boobs_1.mtn"}
|
||||
],
|
||||
"tap_body":[
|
||||
{"file":"motions/tap/smile.mtn"}
|
||||
|
||||
],
|
||||
"talk":[
|
||||
{"file":"motions/tap/nep_touch_belly_1.mtn"},
|
||||
{"file":"motions/tap/nep_slide_head_2.mtn"},
|
||||
{"file":"motions/tap/nep_touch_head_1.mtn"}
|
||||
|
||||
],
|
||||
"rest":[
|
||||
{"file":"motions/tap/tilt_head.mtn"},
|
||||
{"file":"motions/idle/idle_00.mtn"},
|
||||
{"file":"motions/idle/idle_01.mtn"},
|
||||
{"file":"motions/idle/idle_02.mtn"}
|
||||
],
|
||||
"":[
|
||||
{"file":"motions/tap/nep_touch_belly_1.mtn"},
|
||||
{"file":"motions/tap/nep_slide_head_2.mtn"},
|
||||
{"file":"motions/tap/nep_touch_head_1.mtn"},
|
||||
{"file":"motions/tap/nep_touch_boobs_1.mtn"}
|
||||
]
|
||||
}
|
||||
}
|
||||
Binary file not shown.
@@ -1,44 +0,0 @@
|
||||
# Live2D Animator Motion Data
|
||||
$fps=30
|
||||
PARAM_SHOULDER_X=0
|
||||
|
||||
PARAM_MOUTH_OPEN_Y=0
|
||||
|
||||
PARAM_FACE_COVER=0
|
||||
|
||||
PARAM_FEAR=0
|
||||
|
||||
PARAM_EYE_L_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1
|
||||
|
||||
PARAM_EYE_L_SMILE=0
|
||||
|
||||
PARAM_BROW_L_FORM=0
|
||||
|
||||
PARAM_TEAR=0
|
||||
|
||||
PARAM_BROW_L_X=0
|
||||
|
||||
PARAM_BROW_DEFORMED=0
|
||||
|
||||
PARAM_BROW_L_Y=0
|
||||
|
||||
PARAM_EYE_R_SMILE=0
|
||||
|
||||
PARAM_EYE_R_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1
|
||||
|
||||
PARAM_HAIR_BACK=0
|
||||
|
||||
PARAM_EYE_BALL_X=0,0,0.002,0.005,0.009,0.014,0.02,0.027,0.034,0.042,0.051,0.06,0.07,0.08,0.091,0.101,0.113,0.124,0.135,0.146,0.157,0.169,0.179,0.19,0.2,0.21,0.219,0.228,0.236,0.243,0.25,0.256,0.261,0.265,0.268,0.269,0.27,0.27,0.27,0.27,0.27,0.27,0.27,0.27,0.269,0.267,0.263,0.258,0.252,0.244,0.236,0.227,0.216,0.205,0.193,0.181,0.168,0.154,0.14,0.126,0.111,0.097,0.082,0.067,0.052,0.037,0.023,0.008,-0.006,-0.02,-0.033,-0.046,-0.059,-0.07,-0.081,-0.092,-0.101,-0.11,-0.117,-0.124,-0.13,-0.134,-0.137,-0.139,-0.14,-0.14,-0.14,-0.14,-0.14,-0.14,-0.139,-0.14,-0.138,-0.14,-0.136,-0.136,-0.135,-0.13,-0.133,-0.132,-0.131,-0.13,-0.129,-0.128,-0.127,-0.125,-0.124,-0.123,-0.121,-0.12,-0.119,-0.117,-0.115,-0.114,-0.112,-0.111,-0.109,-0.107,-0.106,-0.104,-0.102,-0.1,-0.098,-0.097,-0.095,-0.093,-0.091,-0.089,-0.087,-0.085,-0.083,-0.081,-0.079,-0.077,-0.075,-0.073,-0.071,-0.069,-0.067,-0.065,-0.063,-0.061,-0.059,-0.057,-0.055,-0.054,-0.052,-0.05,-0.048,-0.046,-0.044,-0.042,-0.04,-0.039,-0.037,-0.035,-0.033,-0.032,-0.03,-0.028,-0.027,-0.025,-0.024,-0.022,-0.021,-0.019,-0.018,-0.017,-0.015,-0.014,-0.013,-0.012,-0.01,-0.009,-0.008,-0.007,-0.006,-0.006,-0.005,-0,-0.003,-0.003,-0,-0.002,-0,-0.001,-0,-0,-0,-0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.006,-0.022,-0.05,-0.07,-0.11,-0.14,-0.17,-0.21,-0.24,-0.26,-0.29,-0.304,-0.316,-0.32,-0.318,-0.312,-0.303,-0.291,-0.277,-0.26,-0.243,-0.224,-0.204,-0.183,-0.16,-0.14,-0.122,-0.102,-0.084,-0.066,-0.05,-0.036,-0.024,-0.014,-0.006,-0.002,0
|
||||
|
||||
PARAM_HAIR_FRONT=0
|
||||
|
||||
PARAM_EYE_BALL_Y=0,0,0.002,0.003,0.006,0.009,0.013,0.017,0.021,0.027,0.032,0.038,0.044,0.051,0.057,0.064,0.071,0.078,0.085,0.092,0.099,0.106,0.113,0.119,0.126,0.132,0.138,0.143,0.149,0.153,0.157,0.161,0.164,0.167,0.168,0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.167,0.164,0.159,0.153,0.146,0.138,0.13,0.12,0.11,0.099,0.087,0.075,0.063,0.05,0.037,0.023,0.009,-0.004,-0.018,-0.032,-0.046,-0.059,-0.073,-0.086,-0.099,-0.111,-0.123,-0.134,-0.145,-0.156,-0.165,-0.174,-0.182,-0.189,-0.195,-0.2,-0.204,-0.207,-0.209,-0.21,-0.21,-0.21,-0.21,-0.21,-0.209,-0.21,-0.207,-0.207,-0.206,-0.205,-0.204,-0.202,-0.201,-0.2,-0.198,-0.197,-0.195,-0.194,-0.192,-0.19,-0.188,-0.186,-0.184,-0.182,-0.18,-0.178,-0.176,-0.173,-0.171,-0.168,-0.166,-0.163,-0.161,-0.158,-0.156,-0.153,-0.15,-0.148,-0.145,-0.142,-0.139,-0.136,-0.133,-0.13,-0.128,-0.125,-0.122,-0.119,-0.116,-0.113,-0.11,-0.107,-0.104,-0.101,-0.098,-0.095,-0.092,-0.089,-0.086,-0.083,-0.08,-0.077,-0.075,-0.072,-0.069,-0.066,-0.063,-0.061,-0.058,-0.055,-0.053,-0.05,-0.047,-0.045,-0.042,-0.04,-0.038,-0.035,-0.033,-0.031,-0.029,-0.027,-0.025,-0.023,-0.021,-0.019,-0.017,-0.016,-0.014,-0.013,-0.011,-0.01,-0.008,-0.007,-0.006,-0.005,-0.004,-0.003,-0.003,-0.002,-0,-0.001,-0,-0,-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.002,0.005,0.011,0.018,0.026,0.035,0.043,0.051,0.059,0.066,0.072,0.076,0.079,0.08,0.079,0.078,0.076,0.073,0.069,0.065,0.061,0.056,0.051,0.046,0.041,0.035,0.03,0.026,0.021,0.017,0.013,0.009,0.006,0.003,0.002,0,0
|
||||
|
||||
PARAM_BROW_L_ANGLE=0
|
||||
|
||||
PARAM_EYE_DEFORMED_04=0
|
||||
|
||||
PARAM_EYE_DEFORMED_03=0
|
||||
|
||||
PARAM_EYE_DEFORMED_02=0
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
# Live2D Animator Motion Data
|
||||
$fps=30
|
||||
PARAM_SHOULDER_X=0
|
||||
|
||||
PARAM_MOUTH_OPEN_Y=0
|
||||
|
||||
PARAM_FACE_COVER=0
|
||||
|
||||
PARAM_FEAR=0
|
||||
|
||||
PARAM_EYE_L_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
|
||||
PARAM_EYE_L_SMILE=0
|
||||
|
||||
PARAM_BROW_L_FORM=0
|
||||
|
||||
PARAM_TEAR=0
|
||||
|
||||
PARAM_BROW_L_X=0
|
||||
|
||||
PARAM_BROW_DEFORMED=0
|
||||
|
||||
PARAM_BROW_L_Y=0
|
||||
|
||||
PARAM_EYE_R_SMILE=0
|
||||
|
||||
PARAM_EYE_R_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
|
||||
PARAM_HAIR_BACK=0
|
||||
|
||||
PARAM_EYE_BALL_X=0,-0,-0,-0.002,-0.003,-0.004,-0.006,-0.008,-0.011,-0.013,-0.016,-0.019,-0.023,-0.026,-0.03,-0.034,-0.038,-0.042,-0.046,-0.051,-0.056,-0.06,-0.065,-0.07,-0.075,-0.08,-0.084,-0.089,-0.094,-0.099,-0.104,-0.109,-0.114,-0.118,-0.123,-0.128,-0.132,-0.136,-0.14,-0.145,-0.148,-0.152,-0.156,-0.159,-0.162,-0.165,-0.168,-0.17,-0.172,-0.174,-0.176,-0.177,-0.179,-0.179,-0.18,-0.18,-0.18,-0.18,-0.18,-0.178,-0.177,-0.176,-0.175,-0.173,-0.172,-0.17,-0.168,-0.165,-0.163,-0.16,-0.157,-0.154,-0.151,-0.147,-0.143,-0.139,-0.135,-0.131,-0.126,-0.121,-0.117,-0.111,-0.106,-0.101,-0.095,-0.089,-0.083,-0.077,-0.07,-0.063,-0.057,-0.05,-0.042,-0.035,-0.027,-0.019,-0.011,-0.003,0.005,0.014,0.023,0.031,0.041,0.05,0.059,0.069,0.079,0.089,0.099,0.11,0.12,0.131,0.142,0.153,0.164,0.176,0.188,0.2,0.212,0.224,0.236,0.249,0.262,0.275,0.288,0.301,0.315,0.328,0.342,0.356,0.37,0.385,0.399,0.412,0.424,0.435,0.445,0.455,0.463,0.471,0.479,0.485,0.491,0.496,0.501,0.505,0.509,0.512,0.514,0.516,0.518,0.519,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.519,0.515,0.509,0.501,0.491,0.48,0.466,0.452,0.436,0.42,0.402,0.384,0.365,0.346,0.327,0.308,0.29,0.271,0.253,0.236,0.22,0.204,0.19,0.177,0.165,0.155,0.146,0.139,0.134,0.131,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13,0.13
|
||||
|
||||
PARAM_HAIR_FRONT=0
|
||||
|
||||
PARAM_EYE_BALL_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.001,0,0,0.002,0,0.003,0,0.004,0.005,0.01,0.007,0.007,0.008,0.009,0.01,0.011,0.012,0.013,0.015,0.016,0.017,0.019,0.02,0.022,0.023,0.025,0.027,0.029,0.03,0.032,0.034,0.037,0.039,0.041,0.043,0.046,0.048,0.051,0.053,0.056,0.059,0.062,0.065,0.068,0.071,0.074,0.078,0.081,0.084,0.088,0.092,0.096,0.099,0.103,0.108,0.112,0.116,0.12,0.125,0.129,0.134,0.139,0.144,0.149,0.154,0.159,0.165,0.17,0.177,0.185,0.194,0.205,0.216,0.227,0.24,0.252,0.265,0.277,0.289,0.301,0.313,0.324,0.335,0.344,0.353,0.361,0.367,0.373,0.377,0.379,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.381,0.38,0.383,0.384,0.385,0.387,0.389,0.39,0.392,0.394,0.396,0.398,0.4,0.402,0.404,0.406,0.407,0.409,0.411,0.412,0.414,0.415,0.416,0.417,0.418,0.419,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42
|
||||
|
||||
PARAM_BROW_L_ANGLE=0
|
||||
|
||||
PARAM_EYE_DEFORMED_04=0
|
||||
|
||||
PARAM_EYE_DEFORMED_03=0
|
||||
|
||||
PARAM_EYE_DEFORMED_02=0
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
# Live2D Animator Motion Data
|
||||
$fps=30
|
||||
PARAM_SHOULDER_X=0
|
||||
|
||||
PARAM_MOUTH_OPEN_Y=0
|
||||
|
||||
PARAM_FACE_COVER=0
|
||||
|
||||
PARAM_FEAR=0
|
||||
|
||||
PARAM_EYE_L_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.25,0.47,0.68,0.85,0.96,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.93,0.75,0.53,0.32,0.15,0.04,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.12,0.25,0.4,0.56,0.7,0.83,0.92,0.98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
|
||||
PARAM_EYE_L_SMILE=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.07,0.25,0.47,0.68,0.85,0.96,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.97,0.88,0.75,0.6,0.44,0.3,0.17,0.08,0.02,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
|
||||
PARAM_BROW_L_FORM=0
|
||||
|
||||
PARAM_TEAR=0
|
||||
|
||||
PARAM_BROW_L_X=0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26,0.26
|
||||
|
||||
PARAM_BROW_DEFORMED=0
|
||||
|
||||
PARAM_BROW_L_Y=0
|
||||
|
||||
PARAM_EYE_R_SMILE=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.07,0.25,0.47,0.68,0.85,0.96,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.97,0.88,0.75,0.6,0.44,0.3,0.17,0.08,0.02,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
|
||||
PARAM_EYE_R_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.25,0.47,0.68,0.85,0.96,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.93,0.75,0.53,0.32,0.15,0.04,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.12,0.25,0.4,0.56,0.7,0.83,0.92,0.98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
|
||||
PARAM_HAIR_BACK=0
|
||||
|
||||
PARAM_EYE_BALL_X=-0.4,-0.4,-0.4,-0.4,-0.399,-0.398,-0.4,-0.396,-0.395,-0.394,-0.392,-0.391,-0.389,-0.387,-0.385,-0.383,-0.381,-0.378,-0.376,-0.373,-0.37,-0.368,-0.365,-0.362,-0.358,-0.355,-0.352,-0.348,-0.345,-0.341,-0.338,-0.334,-0.33,-0.326,-0.322,-0.318,-0.314,-0.309,-0.305,-0.301,-0.296,-0.292,-0.287,-0.283,-0.278,-0.273,-0.269,-0.264,-0.259,-0.254,-0.249,-0.245,-0.24,-0.235,-0.23,-0.225,-0.22,-0.215,-0.21,-0.205,-0.2,-0.195,-0.19,-0.185,-0.18,-0.175,-0.17,-0.165,-0.16,-0.155,-0.151,-0.146,-0.141,-0.136,-0.131,-0.127,-0.122,-0.117,-0.113,-0.108,-0.104,-0.099,-0.095,-0.091,-0.086,-0.082,-0.078,-0.074,-0.07,-0.066,-0.063,-0.059,-0.055,-0.052,-0.048,-0.045,-0.042,-0.038,-0.035,-0.032,-0.03,-0.027,-0.024,-0.022,-0.019,-0.017,-0.015,-0.013,-0.011,-0.009,-0.008,-0.006,-0.005,-0.004,-0.003,-0,-0.001,-0.001,-0,-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
|
||||
PARAM_HAIR_FRONT=0
|
||||
|
||||
PARAM_EYE_BALL_Y=0.25,0.25,0.25,0.25,0.25,0.249,0.25,0.248,0.247,0.246,0.25,0.244,0.243,0.242,0.241,0.239,0.238,0.236,0.235,0.233,0.231,0.23,0.228,0.226,0.224,0.222,0.22,0.218,0.216,0.213,0.211,0.209,0.206,0.204,0.201,0.199,0.196,0.193,0.191,0.188,0.185,0.182,0.18,0.177,0.174,0.171,0.168,0.165,0.162,0.159,0.156,0.153,0.15,0.147,0.144,0.141,0.137,0.134,0.131,0.128,0.125,0.122,0.119,0.116,0.113,0.109,0.106,0.103,0.1,0.097,0.094,0.091,0.088,0.085,0.082,0.079,0.076,0.073,0.07,0.068,0.065,0.062,0.059,0.057,0.054,0.051,0.049,0.046,0.044,0.041,0.039,0.037,0.034,0.032,0.03,0.028,0.026,0.024,0.022,0.02,0.019,0.017,0.015,0.014,0.012,0.011,0.009,0.008,0.007,0.006,0.005,0,0.003,0.002,0.002,0,0.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
|
||||
PARAM_BROW_L_ANGLE=0
|
||||
|
||||
PARAM_EYE_DEFORMED_04=0
|
||||
|
||||
PARAM_EYE_DEFORMED_03=0
|
||||
|
||||
PARAM_EYE_DEFORMED_02=0
|
||||
|
||||
Binary file not shown.
@@ -1,44 +0,0 @@
|
||||
# Live2D Animator Motion Data
|
||||
$fps=30
|
||||
PARAM_SHOULDER_X=10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9.66,8.75,7.45,5.96,4.42,2.97,1.74,0.8,0.21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.39,1.26,2.37,3.56,4.7,5.73,6.55,7.1,7.56,7.83,7.99,8.09,8.13,8.145,8.15,8.143,7.86,7.11,6.02,4.74,3.41,2.12,1.03,0.28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
|
||||
PARAM_MOUTH_OPEN_Y=0,0.63,1,1,1,1,1,1,1,0.3,0.22,0.15,0.07,0,0.001,0.002,0.003,0.004,0.006,0.007,0.008,0.009,0.01,0.011,0.012,0.013,0.015,0.016,0.24,0.47,0.51,0.55,0.31,0.06,0.04,0.01,0.27,0.54,0.549,0.557,0.565,0.573,0.43,0.29,0.14,0,0.29,0.57,0.45,0.33,0.341,0.353,0.349,0.345,0.341,0.337,0.333,0.329,0.325,0.322,0.318,0.314,0.319,0.325,0.331,0.336,0.342,0.348,0.353,0.359,0.365,0.37,0.376,0.382,0.387,0.393,0.399,0.404,0.41,0.416,0.27,0.13,0.09,0.06,0.03,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
|
||||
PARAM_FACE_COVER=0
|
||||
|
||||
PARAM_FEAR=0
|
||||
|
||||
PARAM_EYE_L_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
|
||||
PARAM_EYE_L_SMILE=0
|
||||
|
||||
PARAM_BROW_L_FORM=0
|
||||
|
||||
PARAM_TEAR=0
|
||||
|
||||
PARAM_BROW_L_X=0
|
||||
|
||||
PARAM_BROW_DEFORMED=0
|
||||
|
||||
PARAM_BROW_L_Y=0
|
||||
|
||||
PARAM_EYE_R_SMILE=0
|
||||
|
||||
PARAM_EYE_R_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
|
||||
PARAM_HAIR_BACK=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0,-0.001,-0,-0,0.003,0.01,0.019,0.031,0.047,0.066,0.09,0.12,0.14,0.17,0.19,0.22,0.24,0.26,0.29,0.31,0.33,0.36,0.38,0.4,0.42,0.44,0.46,0.49,0.506,0.526,0.546,0.565,0.584,0.603,0.622,0.64,0.657,0.675,0.692,0.708,0.724,0.74,0.755,0.77,0.784,0.799,0.812,0.825,0.838,0.85,0.862,0.874,0.885,0.895,0.905,0.915,0.924,0.932,0.94,0.948,0.955,0.962,0.968,0.973,0.978,0.983,0.987,0.99,0.993,0.996,0.998,0.999,1,1
|
||||
|
||||
PARAM_EYE_BALL_X=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.03,-0.12,-0.25,-0.4,-0.56,-0.7,-0.83,-0.92,-0.98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
|
||||
|
||||
PARAM_HAIR_FRONT=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.002,-0.007,-0.015,-0.023,-0.032,-0.041,-0.048,-0.054,-0.057,-0.058,-0.06,-0.058,-0.06,-0.06,-0.06,-0.057,-0.06,-0.056,-0.055,-0.05,-0.053,-0.053,-0.052,-0.051,-0.05,-0.049,-0.048,-0.047,-0.046,-0.044,-0.043,-0.042,-0.041,-0.039,-0.038,-0.037,-0.035,-0.034,-0.033,-0.031,-0.03,-0.029,-0.027,-0.026,-0.024,-0.023,-0.022,-0.021,-0.019,-0.018,-0.017,-0.015,-0.014,-0.013,-0.012,-0.011,-0.01,-0.009,-0.008,-0.007,-0.006,-0.01,-0.004,-0.004,-0.003,-0,-0.002,-0,-0.001,-0,-0,-0,-0,0
|
||||
|
||||
PARAM_EYE_BALL_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.008,-0.03,-0.06,-0.09,-0.13,-0.16,-0.19,-0.21,-0.225,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23,-0.23
|
||||
|
||||
PARAM_BROW_L_ANGLE=0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03,0.03
|
||||
|
||||
PARAM_EYE_DEFORMED_04=0
|
||||
|
||||
PARAM_EYE_DEFORMED_03=0
|
||||
|
||||
PARAM_EYE_DEFORMED_02=0
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
# Live2D Animator Motion Data
|
||||
$fps=30
|
||||
PARAM_SHOULDER_X=10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9.66,8.75,7.45,5.96,4.42,2.97,1.74,0.8,0.21,0,0.66,2.07,3.84,5.67,7.35,8.73,9.66,10,9.999,9.995,9.99,9.982,9.972,9.96,9.945,9.929,9.911,9.892,9.87,9.85,9.82,9.8,9.77,9.74,9.71,9.68,9.64,9.61,9.57,9.54,9.5,9.46,9.42,9.38,9.34,9.3,9.25,9.21,9.17,9.12,9.08,9.03,8.99,8.94,8.9,8.85,8.81,8.76,8.71,8.67,8.62,8.58,8.53,8.49,8.45,8.4,8.36,8.32,8.27,8.23,8.19,8.15,8.12,8.08,8.04,8.01,7.97,7.94,7.91,7.88,7.85,7.82,7.79,7.77,7.74,7.72,7.702,7.683,7.666,7.651,7.638,7.626,7.617,7.61,7.604,7.601,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6
|
||||
|
||||
PARAM_MOUTH_OPEN_Y=0,0,0,0,0,0,0,0,0.15,0.31,0.24,0.16,0.171,0.178,0.184,0.191,0.197,0.204,0.55,0.9,0.86,0.82,0.52,0.22,0.58,0.94,0.76,0.59,0.56,0.53,0.62,0.71,0.8,0.89,0.53,0.16,0.16,0.16,0.52,0.87,0.83,0.8,0.76,0.72,0.69,0.65,0.657,0.663,0.669,0.675,0.68,0.686,0.692,0.698,0.704,0.71,0.716,0.722,0.51,0.29,0.52,0.75,0.69,0.64,0.4,0.16,0.44,0.71,0.718,0.722,0.6,0.47,0.65,0.82,0.8,0.77,0.74,0.71,0.8,0.89,0.66,0.44,0.3,0.16,0.58,1,1,1,1,0.96,0.86,0.76,0.66,0.56,0.52,0.48,0.6,0.73,0.733,0.736,0.74,0.744,0.747,0.751,0.754,0.758,0.761,0.765,0.768,0.772,0.775,0.779,0.782,0.786,0.789,0.793,0.796,0.8,0.63,0.45,0.61,0.76,0.773,0.784,0.796,0.808,0.53,0.26,0.39,0.52,0.65,0.78,0.74,0.7,0.66,0.63,0.47,0.31,0.16,0,0,0,0,0,0,0,0
|
||||
|
||||
PARAM_FACE_COVER=0
|
||||
|
||||
PARAM_FEAR=0
|
||||
|
||||
PARAM_EYE_L_OPEN=0
|
||||
|
||||
PARAM_EYE_L_SMILE=1
|
||||
|
||||
PARAM_BROW_L_FORM=-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
|
||||
|
||||
PARAM_TEAR=0
|
||||
|
||||
PARAM_BROW_L_X=0
|
||||
|
||||
PARAM_BROW_DEFORMED=0
|
||||
|
||||
PARAM_BROW_L_Y=-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-0.97,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.95,-0.85,-0.72,-0.58,-0.46,-0.35,-0.29,-0.26,-0.26,-0.26,-0.26,-0.26,-0.26,-0.26,-0.26,-0.26,-0.26,-0.45,-0.81,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
|
||||
|
||||
PARAM_EYE_R_SMILE=1
|
||||
|
||||
PARAM_EYE_R_OPEN=0
|
||||
|
||||
PARAM_EYE_BALL_X=0
|
||||
|
||||
PARAM_EYE_BALL_Y=0
|
||||
|
||||
PARAM_BROW_L_ANGLE=0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
|
||||
PARAM_EYE_DEFORMED_04=0
|
||||
|
||||
PARAM_EYE_DEFORMED_03=0
|
||||
|
||||
PARAM_EYE_DEFORMED_02=0
|
||||
|
||||
PARAM_EYE_DEFORMED_01=0
|
||||
@@ -1,44 +0,0 @@
|
||||
# Live2D Animator Motion Data
|
||||
$fps=30
|
||||
PARAM_SHOULDER_X=6.4,6.36,6.24,6.05,5.79,5.48,5.13,4.74,4.32,3.88,3.42,2.98,2.52,2.08,1.66,1.27,0.92,0.61,0.35,0.16,0.04,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.14,0.49,1,1.64,2.34,3.08,3.83,4.56,5.23,5.85,6.35,6.75,7.01,7.1,7.099,7.097,7.092,7.084,7.072,7.057,7.04,7.01,6.98,6.94,6.9,6.84,6.78,6.71,6.63,6.54,6.44,6.33,6.2,6.07,5.92,5.76,5.58,5.39,5.1,4.69,4.19,3.63,3.04,2.44,1.87,1.35,0.89,0.51,0.23,0.06,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
|
||||
PARAM_MOUTH_OPEN_Y=0,0,0,0,0,0,0,0,0.22,0.45,0.4,0.35,0.3,0.25,0.2,0.15,0.38,0.61,0.58,0.54,0.51,0.47,0.481,0.492,0.502,0.512,0.523,0.533,0.46,0.38,0.19,0,0.46,0.93,0.74,0.55,0.58,0.61,0.64,0.67,0.7,0.73,0.62,0.51,0.4,0.29,0.56,0.84,0.76,0.67,0.65,0.63,0.61,0.59,0.57,0.55,0.53,0.51,0.48,0.46,0.24,0.01,0.35,0.69,0.53,0.37,0.55,0.73,0.733,0.737,0.64,0.53,0.43,0.33,0.62,0.91,0.84,0.76,0.767,0.773,0.778,0.784,0.68,0.58,0.47,0.37,0.378,0.388,0.398,0.408,0.34,0.27,0.2,0.14,0.07,0,0.01,0.02,0.029,0.039,0.34,0.64,0.58,0.52,0.27,0.02,0.47,0.91,0.82,0.73,0.65,0.56,0.6,0.64,0.68,0.72,0.69,0.66,0.63,0.6,0.45,0.3,0.6,0.91,0.77,0.63,0.69,0.75,0.67,0.6,0.36,0.12,0.44,0.77,0.75,0.732,0.714,0.695,0.677,0.659,0.58,0.51,0.514,0.518,0.26,0,0.43,0.86,0.82,0.77,0.38,0,0.29,0.58,0.51,0.43,0.53,0.64,0.51,0.38,0.19,0,0.38,0.77,0.759,0.75,0.741,0.732,0.723,0.714,0.66,0.61,0.46,0.31,0.15,0,0,0,0,0,0,0
|
||||
|
||||
PARAM_FACE_COVER=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
|
||||
PARAM_FEAR=0
|
||||
|
||||
PARAM_EYE_L_OPEN=1,1,1,0.999,0.998,0.996,0.995,0.993,0.99,0.988,0.985,0.983,0.979,0.976,0.973,0.969,0.965,0.961,0.956,0.952,0.947,0.943,0.938,0.933,0.927,0.922,0.917,0.911,0.906,0.9,0.894,0.889,0.883,0.877,0.871,0.865,0.859,0.853,0.847,0.841,0.835,0.829,0.823,0.817,0.811,0.806,0.8,0.794,0.789,0.783,0.778,0.773,0.767,0.762,0.757,0.753,0.748,0.744,0.739,0.735,0.731,0.727,0.724,0.721,0.717,0.715,0.712,0.71,0.707,0.705,0.704,0.702,0.701,0.701,0.7,0.7,0.71,0.74,0.78,0.82,0.87,0.91,0.95,0.98,0.994,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999,0.997,0.993,0.987,0.981,0.974,0.967,0.959,0.951,0.943,0.935,0.928,0.921,0.915,0.91,0.906,0.903,0.901,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.901,0.905,0.91,0.917,0.926,0.935,0.944,0.954,0.963,0.972,0.98,0.987,0.992,0.996,0.999,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
|
||||
PARAM_EYE_L_SMILE=0
|
||||
|
||||
PARAM_BROW_L_FORM=-1
|
||||
|
||||
PARAM_TEAR=0
|
||||
|
||||
PARAM_BROW_L_X=0
|
||||
|
||||
PARAM_BROW_DEFORMED=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
|
||||
PARAM_BROW_L_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.06,-0.16,-0.25,-0.31,-0.34,-0.34,-0.34,-0.34,-0.34,-0.34,-0.34,-0.34,-0.34,-0.342,-0.344,-0.347,-0.351,-0.355,-0.36,-0.367,-0.374,-0.382,-0.392,-0.402,-0.414,-0.427,-0.441,-0.456,-0.473,-0.49,-0.51,-0.531,-0.551,-0.57,-0.589,-0.608,-0.626,-0.643,-0.66,-0.677,-0.693,-0.709,-0.723,-0.737,-0.751,-0.764,-0.776,-0.787,-0.797,-0.807,-0.816,-0.824,-0.832,-0.838,-0.844,-0.849,-0.853,-0.856,-0.858,-0.86,-0.86,-0.859,-0.856,-0.851,-0.845,-0.837,-0.827,-0.816,-0.803,-0.79,-0.775,-0.76,-0.743,-0.726,-0.708,-0.689,-0.67,-0.651,-0.632,-0.612,-0.593,-0.573,-0.554,-0.535,-0.516,-0.498,-0.48,-0.463,-0.446,-0.431,-0.416,-0.403,-0.391,-0.379,-0.369,-0.361,-0.353,-0.348,-0.343,-0.341,-0.34
|
||||
|
||||
PARAM_EYE_R_SMILE=0
|
||||
|
||||
PARAM_EYE_R_OPEN=1,1,1,0.999,0.998,0.996,0.995,0.993,0.99,0.988,0.985,0.983,0.979,0.976,0.973,0.969,0.965,0.961,0.956,0.952,0.947,0.943,0.938,0.933,0.927,0.922,0.917,0.911,0.906,0.9,0.894,0.889,0.883,0.877,0.871,0.865,0.859,0.853,0.847,0.841,0.835,0.829,0.823,0.817,0.811,0.806,0.8,0.794,0.789,0.783,0.778,0.773,0.767,0.762,0.757,0.753,0.748,0.744,0.739,0.735,0.731,0.727,0.724,0.721,0.717,0.715,0.712,0.71,0.707,0.705,0.704,0.702,0.701,0.701,0.7,0.7,0.71,0.74,0.78,0.82,0.87,0.91,0.95,0.98,0.994,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999,0.997,0.994,0.989,0.984,0.978,0.971,0.964,0.957,0.949,0.942,0.935,0.928,0.922,0.916,0.911,0.906,0.903,0.9,0.898,0.896,0.894,0.893,0.892,0.891,0.89,0.89,0.89,0.89,0.89,0.89,0.89,0.89,0.89,0.89,0.891,0.895,0.901,0.909,0.918,0.928,0.938,0.949,0.959,0.969,0.977,0.985,0.991,0.996,0.999,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
|
||||
PARAM_HAIR_BACK=0
|
||||
|
||||
PARAM_EYE_BALL_X=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.009,0.03,0.07,0.13,0.19,0.26,0.34,0.42,0.5,0.58,0.66,0.74,0.81,0.87,0.93,0.97,0.99,1,1,1,0.999,0.998,0.996,0.995,0.993,0.99,0.987,0.984,0.981,0.977,0.972,0.968,0.962,0.957,0.951,0.944,0.937,0.929,0.921,0.913,0.903,0.894,0.883,0.873,0.861,0.849,0.837,0.823,0.81,0.795,0.78,0.762,0.745,0.728,0.712,0.696,0.681,0.667,0.654,0.641,0.63,0.62,0.611,0.604,0.598,0.594,0.591,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59,0.59
|
||||
|
||||
PARAM_HAIR_FRONT=0
|
||||
|
||||
PARAM_EYE_BALL_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.002,0.007,0.016,0.027,0.039,0.054,0.071,0.088,0.105,0.122,0.139,0.156,0.171,0.183,0.194,0.203,0.208,0.21,0.209,0.205,0.199,0.191,0.182,0.17,0.157,0.142,0.126,0.109,0.091,0.072,0.052,0.03,0.011,-0.01,-0.03,-0.05,-0.072,-0.09,-0.112,-0.131,-0.149,-0.166,-0.182,-0.197,-0.21,-0.222,-0.231,-0.239,-0.245,-0.249,-0.25,-0.242,-0.22,-0.19,-0.15,-0.1,-0.05,0,0.06,0.11,0.16,0.21,0.26,0.3,0.33,0.36,0.374,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38
|
||||
|
||||
PARAM_BROW_L_ANGLE=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.91,-0.78,-0.65,-0.56,-0.52,-0.52,-0.52,-0.52,-0.52,-0.52,-0.52,-0.52,-0.52,-0.52,-0.52,-0.52,-0.521,-0.52,-0.52,-0.52,-0.52,-0.521,-0.52,-0.519,-0.518,-0.517,-0.516,-0.514,-0.512,-0.51,-0.506,-0.499,-0.491,-0.48,-0.467,-0.452,-0.436,-0.418,-0.399,-0.38,-0.36,-0.34,-0.32,-0.29,-0.27,-0.25,-0.23,-0.21,-0.188,-0.169,-0.15,-0.133,-0.117,-0.102,-0.089,-0.078,-0.068,-0.06,-0.055,-0.051,-0.05,-0.053,-0.061,-0.075,-0.092,-0.11,-0.14,-0.17,-0.2,-0.23,-0.26,-0.29,-0.32,-0.35,-0.38,-0.41,-0.44,-0.46,-0.48,-0.495,-0.505,-0.51,-0.512,-0.514,-0.515,-0.517,-0.518,-0.519,-0.519,-0.52,-0.52,-0.52,-0.52,-0.52,-0.52,-0.52,-0.52,-0.52,-0.52,-0.52,-0.52
|
||||
|
||||
PARAM_EYE_DEFORMED_04=0
|
||||
|
||||
PARAM_EYE_DEFORMED_03=0
|
||||
|
||||
PARAM_EYE_DEFORMED_02=0
|
||||
|
||||
Binary file not shown.
@@ -1,33 +0,0 @@
|
||||
# Live2D Animator Motion Data
|
||||
$fps=30
|
||||
PARAM_BROW_L_ANGLE=-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5
|
||||
PARAM_ANGLE_Z=-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-14.78,-14.21,-13.45,-12.55,-11.62,-10.71,-9.84,-9.11,-8.52,-8.14,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8
|
||||
PARAM_BODY_ANGLE_X=-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-7.66,-6.9,-6,-5.05,-4.39,-3.89,-3.53,-3.28,-3.12,-3.03,-3,-3,-3,-3,-3,-3,-3,-2.97,-2.9,-2.78,-2.62,-2.44,-2.22,-1.99,-1.75,-1.5,-1.25,-1.01,-0.78,-0.56,-0.38,-0.22,-0.1,-0.03,0,0,0,0,0,0,0,0,0,0,0
|
||||
PARAM_BODY_ANGLE_Y=0
|
||||
PARAM_BODY_ANGLE_Z=5
|
||||
PARAM_BREATH=0
|
||||
PARAM_ANGLE_Y=-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-13.97,-13.89,-13.78,-13.65,-13.52,-13.39,-13.26,-13.16,-13.07,-13.02,-13,-13,-13,-13,-13,-13,-13,-12.96,-12.83,-12.63,-12.37,-12.06,-11.71,-11.32,-10.92,-10.5,-10.08,-9.68,-9.29,-8.94,-8.63,-8.37,-8.17,-8.04,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8
|
||||
PARAM_BROW_R_Y=0
|
||||
PARAM_ANGLE_X=-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-13.11,-8.34,-2.17,4.36,10.38,15.36,19,22.21,23.04,23.06,23,23,23,23,23,23,23,22.87,22.48,21.88,21.1,20.18,19.12,17.96,16.75,15.5,14.25,13.04,11.88,10.82,9.9,9.12,8.52,8.13,8,8,8,8,8,8,8,8,8,8,8
|
||||
PARAM_BROW_R_X=0
|
||||
PARAM_MOUTH_OPEN_Y=0
|
||||
PARAM_MOUTH_FORM=-1
|
||||
PARAM_EYE_L_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.76,0.36,0.09,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.18,0.46,0.73,0.92,1,1,1,1,1,1,1,1,1,1,1
|
||||
PARAM_BUST_Y=0
|
||||
PARAM_EYE_FORM=-1
|
||||
PARAM_EYE_L_SMILE=0
|
||||
PARAM_BROW_L_FORM=-0.5
|
||||
PARAM_EYE_BALL_FORM=0
|
||||
PARAM_BROW_L_X=0
|
||||
PARAM_BROW_L_Y=0
|
||||
PARAM_BROW_R_ANGLE=-0.5
|
||||
PARAM_EYE_R_SMILE=0
|
||||
PARAM_BROW_R_FORM=-0.5
|
||||
PARAM_EYE_R_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.76,0.36,0.09,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.18,0.46,0.73,0.92,1,1,1,1,1,1,1,1,1,1,1
|
||||
PARAM_TERE=0
|
||||
PARAM_HAIR_BACK=0
|
||||
PARAM_HAIR_FRONT=0
|
||||
PARAM_ARM_L=-5
|
||||
PARAM_EYE_BALL_X=0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.43,0.447,0.49,0.55,0.62,0.69,0.76,0.82,0.88,0.92,0.95,0.96,0.96,0.96,0.96,0.96,0.96,0.96,0.95,0.92,0.87,0.81,0.74,0.66,0.57,0.48,0.38,0.29,0.2,0.11,0.03,-0.04,-0.1,-0.15,-0.18,-0.19,-0.19,-0.19,-0.19,-0.19,-0.19,-0.19,-0.19,-0.19,-0.19,-0.19
|
||||
PARAM_EYE_BALL_Y=0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.33,0.337,0.354,0.38,0.4,0.43,0.46,0.48,0.51,0.524,0.536,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.543,0.547,0.551,0.557,0.563,0.57,0.578,0.585,0.592,0.6,0.607,0.613,0.619,0.623,0.627,0.629,0.63,0.63,0.63,0.63,0.63,0.63,0.63,0.63,0.63,0.63,0.63
|
||||
PARAM_ARM_R=-5
|
||||
@@ -1,31 +0,0 @@
|
||||
# Live2D Animator Motion Data
|
||||
$fps=30
|
||||
PARAM_BROW_L_ANGLE=0
|
||||
PARAM_ANGLE_Z=18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,17.65,16.66,15.1,13.06,10.66,7.91,4.91,1.74,-1.5,-4.74,-7.91,-10.91,-13.66,-16.06,-18.1,-19.66,-20.65,-21,-20.29,-18.46,-15.78,-12.46,-8.78,-4.93,-1.04,2.75,6.28,9.47,12.11,14.19,15.53,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
|
||||
PARAM_BODY_ANGLE_X=3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2.991,2.97,2.93,2.87,2.81,2.74,2.66,2.58,2.5,2.42,2.34,2.26,2.19,2.13,2.07,2.03,2.01,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
|
||||
PARAM_BODY_ANGLE_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.07,-0.25,-0.52,-0.84,-1.16,-1.48,-1.75,-1.93,-2,-1.93,-1.75,-1.48,-1.16,-0.84,-0.52,-0.25,-0.07,0,-0.13,-0.41,-0.77,-1.13,-1.47,-1.75,-1.93,-2,-1.85,-1.48,-1,-0.52,-0.15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
PARAM_BODY_ANGLE_Z=-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-6.91,-6.66,-6.26,-5.73,-5.12,-4.41,-3.64,-2.83,-2,-1.17,-0.36,0.41,1.12,1.73,2.26,2.66,2.91,3,2.92,2.73,2.44,2.08,1.68,1.26,0.84,0.43,0.05,-0.29,-0.58,-0.8,-0.95,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
|
||||
PARAM_ARM_R=-10
|
||||
PARAM_BREATH=0
|
||||
PARAM_ANGLE_Y=-8
|
||||
PARAM_BROW_R_Y=0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3
|
||||
PARAM_ANGLE_X=10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9.87,9.52,8.96,8.23,7.37,6.38,5.3,4.16,3,1.84,0.7,-0.38,-1.37,-2.23,-2.96,-3.52,-3.87,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4
|
||||
PARAM_BROW_R_X=0
|
||||
PARAM_MOUTH_OPEN_Y=0
|
||||
PARAM_MOUTH_FORM=1
|
||||
PARAM_EYE_L_OPEN=0
|
||||
PARAM_BUST_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.16,0.42,0.59,0.65,0.58,0.43,0.24,0.04,-0.14,-0.29,-0.39,-0.43,-0.4,-0.32,-0.21,-0.08,0.06,0.19,0.3,0.38,0.41,0.34,0.18,-0.01,-0.21,-0.36,-0.46,-0.49,-0.42,-0.25,-0.05,0.16,0.35,0.51,0.61,0.65,0.58,0.41,0.19,-0.01,-0.18,-0.28,-0.32,-0.28,-0.19,-0.07,0.06,0.15,0.19,0.16,0.1,0.05,0.01,0,0,0,0,0,0,0,0,0,0
|
||||
PARAM_EYE_FORM=0
|
||||
PARAM_BROW_L_FORM=0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2
|
||||
PARAM_EYE_BALL_FORM=0
|
||||
PARAM_BROW_L_X=0
|
||||
PARAM_BROW_L_Y=0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3
|
||||
PARAM_BROW_R_ANGLE=0
|
||||
PARAM_BROW_R_FORM=0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2
|
||||
PARAM_EYE_R_OPEN=0
|
||||
PARAM_TERE=0
|
||||
PARAM_HAIR_BACK=0
|
||||
PARAM_HAIR_FRONT=0
|
||||
PARAM_EYE_BALL_X=-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32
|
||||
PARAM_EYE_BALL_Y=0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54,0.54
|
||||
PARAM_ARM_L=-10
|
||||
@@ -1,34 +0,0 @@
|
||||
# Live2D Animator Motion Data
|
||||
$fps=30
|
||||
PARAM_BROW_L_ANGLE=0
|
||||
PARAM_ANGLE_Z=14,13.79,13.18,12.23,10.96,9.42,7.64,5.72,3.61,1.4,-0.88,-3.12,-5.4,-7.61,-9.72,-11.64,-13.42,-14.96,-16.23,-17.18,-17.79,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18
|
||||
PARAM_BODY_ANGLE_X=3
|
||||
PARAM_BODY_ANGLE_Y=0,0.15,0.5,0.94,1.37,1.71,1.93,2,1.97,1.9,1.79,1.65,1.48,1.29,1.1,0.9,0.71,0.52,0.35,0.21,0.1,0.03,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
PARAM_BODY_ANGLE_Z=1,0.94,0.76,0.48,0.12,-0.3,-0.76,-1.25,-1.75,-2.24,-2.7,-3.12,-3.48,-3.76,-3.94,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4
|
||||
PARAM_ARM_R_B=0
|
||||
PARAM_BREATH=0
|
||||
PARAM_ANGLE_Y=8
|
||||
PARAM_BROW_R_Y=0
|
||||
PARAM_ANGLE_X=0
|
||||
PARAM_BROW_R_X=0
|
||||
PARAM_MOUTH_FORM=1
|
||||
PARAM_EYE_L_OPEN=0
|
||||
PARAM_BUST_Y=0
|
||||
PARAM_EYE_FORM=0
|
||||
PARAM_EYE_L_SMILE=1
|
||||
PARAM_BROW_L_FORM=0
|
||||
PARAM_EYE_BALL_FORM=0
|
||||
PARAM_BROW_L_X=0
|
||||
PARAM_BROW_L_Y=0
|
||||
PARAM_BROW_R_ANGLE=0
|
||||
PARAM_EYE_R_SMILE=1
|
||||
PARAM_ARM_R_A=1
|
||||
PARAM_BROW_R_FORM=0
|
||||
PARAM_EYE_R_OPEN=0
|
||||
PARAM_TERE=0
|
||||
PARAM_HAIR_BACK=0
|
||||
PARAM_HAIR_FRONT=0
|
||||
PARAM_ARM_L_A=1
|
||||
PARAM_EYE_BALL_X=0
|
||||
PARAM_EYE_BALL_Y=0
|
||||
PARAM_ARM_L_B=0
|
||||
@@ -1,33 +0,0 @@
|
||||
# Live2D Animator Motion Data
|
||||
$fps=30
|
||||
PARAM_BROW_L_ANGLE=0
|
||||
PARAM_ANGLE_Z=-17,-16.85,-16.43,-15.74,-14.81,-13.65,-12.31,-10.79,-9.11,-7.29,-5.35,-3.28,-1.17,1.04,3.26,5.5,7.74,9.96,12.17,14.28,16.35,18.29,20.11,21.79,23.31,24.65,25.81,26.74,27.43,27.85,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27.93,27.71,27.36,26.88,26.28,25.58,24.8,23.92,22.97,21.95,20.88,19.76,18.6,17.42,16.21,15,13.81,13,12.47,12.16,12.03,12,12.85,14.69,16.99,19.37,21.55,23.35,24.55,25,25,25,25,25,25,25,25,24.94,24.75,24.45,24.01,23.45,22.76,21.91,20.94,19.79,18.5,17,15.11,13.32,11.64,10.17,8.88,7.83,7.02,6.45,6.11,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
|
||||
PARAM_BODY_ANGLE_X=5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4.97,4.9,4.79,4.65,4.48,4.29,4.1,3.9,3.71,3.52,3.35,3.21,3.1,3.03,3,3.06,3.22,3.46,3.76,4.1,4.46,4.81,5.13,5.42,5.66,5.85,5.96,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
|
||||
PARAM_BODY_ANGLE_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.04,0.15,0.31,0.52,0.75,1,1.25,1.48,1.69,1.85,1.96,2,1.93,1.75,1.48,1.16,0.84,0.52,0.25,0.07,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
PARAM_BODY_ANGLE_Z=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.06,-0.22,-0.47,-0.78,-1.13,-1.5,-1.87,-2.22,-2.53,-2.78,-2.94,-3,-2.9,-2.62,-2.22,-1.75,-1.25,-0.78,-0.38,-0.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
PARAM_ARM_R=-5
|
||||
PARAM_BREATH=0
|
||||
PARAM_ANGLE_Y=-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-9.987,-9.95,-9.9,-9.83,-9.74,-9.65,-9.56,-9.46,-9.37,-9.28,-9.2,-9.13,-9.08,-9.04,-9.01,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9.13,-9.45,-9.89,-10.4,-10.93,-11.45,-11.95,-12.37,-12.7,-12.92,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13
|
||||
PARAM_BROW_R_Y=0
|
||||
PARAM_ANGLE_X=17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,16.87,16.52,15.97,15.26,14.44,13.53,12.6,11.65,10.72,9.84,9.05,8.35,7.78,7.36,7.09,7,7.15,7.55,8.13,8.85,9.64,10.47,11.32,12.13,12.9,13.59,14.16,14.61,14.9,15,15,15,15,15,15,15,15,14.9,14.66,14.33,13.95,13.55,13.16,12.79,12.48,12.22,12.06,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12
|
||||
PARAM_BROW_R_X=0
|
||||
PARAM_MOUTH_OPEN_Y=0
|
||||
PARAM_MOUTH_FORM=1
|
||||
PARAM_EYE_L_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.76,0.36,0.09,0,0,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.76,0.36,0.09,0,0,0,0.18,0.46,0.73,0.92,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
PARAM_BUST_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.11,-0.29,-0.41,-0.45,-0.41,-0.32,-0.18,-0.03,0.14,0.29,0.42,0.52,0.58,0.6,0.57,0.48,0.35,0.2,0.04,-0.11,-0.24,-0.33,-0.36,-0.32,-0.23,-0.13,-0.01,0.09,0.17,0.23,0.25,0.231,0.19,0.13,0.06,0.02,0,0,0,0,0,0,0,0,0,0
|
||||
PARAM_EYE_FORM=0.5
|
||||
PARAM_EYE_L_SMILE=0
|
||||
PARAM_BROW_L_FORM=0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2
|
||||
PARAM_EYE_BALL_FORM=0
|
||||
PARAM_BROW_L_X=0
|
||||
PARAM_BROW_L_Y=0
|
||||
PARAM_BROW_R_ANGLE=0
|
||||
PARAM_EYE_R_SMILE=0
|
||||
PARAM_BROW_R_FORM=0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2
|
||||
PARAM_EYE_R_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.76,0.36,0.09,0,0,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.76,0.36,0.09,0,0,0,0.18,0.46,0.73,0.92,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
PARAM_TERE=0
|
||||
PARAM_HAIR_BACK=0
|
||||
PARAM_HAIR_FRONT=0
|
||||
PARAM_EYE_BALL_X=-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.47,-0.469,-0.466,-0.461,-0.454,-0.447,-0.439,-0.43,-0.422,-0.414,-0.406,-0.398,-0.392,-0.387,-0.383,-0.381,-0.38,-0.382,-0.388,-0.397,-0.409,-0.424,-0.442,-0.46,-0.481,-0.5,-0.52,-0.55,-0.57,-0.59,-0.61,-0.628,-0.646,-0.661,-0.673,-0.682,-0.688,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69
|
||||
PARAM_EYE_BALL_Y=0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.496,0.486,0.47,0.45,0.43,0.4,0.37,0.34,0.32,0.29,0.27,0.249,0.233,0.22,0.213,0.21,0.21,0.212,0.214,0.218,0.221,0.226,0.231,0.236,0.242,0.247,0.253,0.258,0.264,0.269,0.274,0.279,0.282,0.286,0.288,0.289,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29,0.29
|
||||
PARAM_ARM_L=-5
|
||||
16
README.md
16
README.md
@@ -4,7 +4,19 @@ layout: default
|
||||
|
||||
# Mayx的博客
|
||||
Mayx's Home Page
|
||||
Powered by [Jekyll](https://github.com/jekyll/jekyll)
|
||||
Powered by [Jekyll](https://github.com/jekyll/jekyll)
|
||||

|
||||
|
||||
[](https://github.com/Mabbs/mabbs.github.io/actions/workflows/pages/pages-build-deployment) [](https://github.com/jekyll/jekyll)
|
||||
[](https://mabbs.github.io)
|
||||
[](https://github.com/Mabbs/mabbs.github.io)
|
||||
[](https://github.com/Mabbs/mabbs.github.io/commits/master/)
|
||||
[](https://github.com/Mabbs/mabbs.github.io/issues?q=is%3Aissue%20state%3Aopen%20label%3AGitalk)
|
||||
[](https://gitlab.com/mayx/mayx.gitlab.io/-/pipelines) [](https://app.netlify.com/sites/mayx/deploys) [](https://deepwiki.com/Mabbs/mabbs.github.io)
|
||||
[](https://github.com/Mabbs/mabbs.github.io/stargazers)
|
||||
[](https://github.com/Mabbs/mabbs.github.io/forks)
|
||||
[](https://gitlab.com/mayx/mayx.gitlab.io/-/starrers)
|
||||
[](https://app.follow.is/share/feeds/41798923170845763)
|
||||
|
||||
## 使用的开源项目
|
||||
[Jekyll](https://github.com/jekyll/jekyll)
|
||||
@@ -26,9 +38,11 @@ Powered by [Jekyll](https://github.com/jekyll/jekyll)
|
||||
- CDN、规则以及缓存
|
||||
- Workers、D1 SQL 数据库、Vectorize 数据库、AI
|
||||
|
||||
[GitLab](https://gitlab.com/)
|
||||
[网易云音乐](https://music.163.com/)
|
||||
[CDNJS](https://cdnjs.com/)
|
||||
[jsDelivr](https://www.jsdelivr.com/)
|
||||
……
|
||||
|
||||
## 版权声明
|
||||
未经作者同意,请勿转载
|
||||
|
||||
@@ -13,4 +13,12 @@ plugins:
|
||||
- jekyll-include-cache
|
||||
feed:
|
||||
path: atom.xml
|
||||
webmaster_verifications:
|
||||
google: huTYdEesm8NaFymixMNqflyCp6Jfvd615j5Wq1i2PHc
|
||||
yandex: fc0e535abed800be
|
||||
bing: 0ADFCE64B3557DC4DC5F2DC224C5FDDD
|
||||
social:
|
||||
name: Mayx
|
||||
links:
|
||||
- https://github.com/Mabbs
|
||||
google_analytics: UA-137710294-1
|
||||
|
||||
177
_data/ai-cache.json
Normal file
177
_data/ai-cache.json
Normal file
@@ -0,0 +1,177 @@
|
||||
{
|
||||
"/2024/06/16/hackintosh.html": "这篇文章讲述了作者尝试安装Hackintosh(即在非Mac硬件上运行macOS的体验)。起始时因为对Mac(尤其是基于Intel架构的)性价比、硬件差异和性能的质疑,使得作者并未尝试过。但随着ARM架构Mac的出现,他们决定安装黑苹果进行尝试。尽管安装过程并不复杂,主要是根据硬件自定义EFI,但对于无线网络和一些Apple芯片优化软件支持存在限制。尽管体验与MacBook相似,作者认为黑苹果在功能上与Linux接近,性能上不如Mac notebo挠在续航上的优势明显。总体来说,作者认为黑苹果的吸引力有限,主要是节省了一部分成本,而Mac的独家体验和续航无法替代。",
|
||||
"/2024/05/19/bt-ops.html": "这篇文章主要讲述了作者在测试不同运维面板(如1Panel、小皮面板和宝塔面板)的过程中,对宝塔面板的使用体验,特别是对其Python代码实现、功能评价和价格的质疑。作者认为宝塔面板有一些独特功能如系统加固、防入侵、文件监控等,虽然代码是开源且部分易于理解,但付费功能定价不合理,如价格高昂的服务器网络加速功能其实无需付费。此外,作者还指出一些功能如防篡改可能存在问题,而一些基础功能实则简单易实现。总的来说,作者认为宝塔面板虽然有可学习之处,但价格与其提供的服务不成正比。",
|
||||
"/2024/04/06/old-pc.html": "这篇文章是关于作者探索如何重新利用几台废旧电脑的体验,这些电脑尽管性能较差,但作者并未因此淘汰它们。他们将电脑改装为Linux系统进行测试,展示了四台电脑的配置和基础使用情况。尽管第一台Intel Pentium E5300的电脑在安装Ubuntu时遇到问题,但作者仍强调性能问题不大,相比于廉价的硬件如树莓派,这些旧电脑仍有可用性。文章指出,尽管老机器可能存在一些安装或兼容性问题,但并不意味着它们就该被淘汰。",
|
||||
"/2024/03/16/ssl-pinning.html": "这篇文章讲述了使用Python的requests库实现类似“SSL Pinning”技术的过程。作者发现直接用requests库操作请求时,获取证书的常见方法不可行,于是通过requests.packages.urllib3的HTTPSConnection连接并修改其connect方法,实现了在发起GET请求时获取服务器的证书,并计算其SHA256指纹。作者提供了一个函数`verify_cert_request`,用于验证网站证书并可作为防抓包策略。文章最后提到,虽然Python作为解释型语言,其代码可被分析,但通过修改依赖库或加密处理可以提高保护程度,防止多数抓包行为。",
|
||||
"/2024/02/24/luckfox.html": "这篇文章分享了作者购买并体验Luckfox Pico Plus开发板的过程。虽然这款开发板体积小巧,约一食指大小,但内存和存储较低,选择了预装Alpine Linux系统作为解决方案。安装过程通过树莓派完成,利用其GPIO接口。作者发现该板子性能足以运行Python和Go程序,可替代部分树莓派的任务,如定时任务和QQ机器人,但内网穿透时内存紧张。作者认为Luckfox Pico Plus以其小巧的外形和不错的性价比,相比树莓派在开发板用途上更合适,尽管树莓派的定位不清晰。",
|
||||
"/2024/02/03/1panel.html": "这篇文章讲述了作者在离线环境下安装1Panel的过程。尽管1Panel官方不支持离线安装,但通过社区找到了离线安装的方法。作者通过离线安装后,遇到的问题包括应用商店空、应用文件路径错误、PHP扩展的下载问题等。通过调整数据库和容器设置,作者最终解决了这些问题,实现了Nginx、MySQL和PHP的离线安装和使用,强调了使用Go编写的程序(如Docker和1Panel)在无网络环境下的便捷性。",
|
||||
"/2024/01/20/renpy.html": "这篇文章讲述了在macOS上玩基于Ren'Py的视觉小说时遇到的问题及解决方案。主要问题包括Mac OS的验证限制、不同版本Ren'Py引擎的兼容性、使用RenPyViewer的局限性以及签名和权限问题。解决方法包括使用iOS版或Intel版RenPyViewer、通过终端运行.sh文件、修改.app权限和文件结构、以及处理文件名大小写差异。最后的建议是优先使用游戏自带的.app文件并进行适当的权限设置,或者根据所用硬件选择合适的工具。",
|
||||
"/2024/01/01/summary.html": "这篇文章的作者回顾了2023年的生活,主要亮点包括顺利毕业、找到稳定的工作和抽到UP角色带来的好状态。然而,工作压力不算大但作者的生活习惯不佳,晚上沉迷于游戏导致睡眠不足,进而影响了如osu!mania的游戏表现和个人健康。作者计划在经济上达到自给自足后退休,但担心自己无法照顾好自己,生活方式可能与目前的965工作模式相似。AI是2023年印象深刻的话题,但对作者影响不大。未来的目标是稳定工作和休闲,对未知的全球事件有所担忧但也保持乐观。总的来说,作者认为过去一年过得尚可,但对未来难以预测,只能走一步看一步。",
|
||||
"/2023/12/24/android.html": "这篇文章介绍了如何在Linux容器中使用Waydroid和redroid两种方法来运行Android系统,虽然Waydroid性能较强,但存在依赖于Wayland且不支持ARMT架构程序的问题,需要额外安装工具。redroid支持多实例和不同安卓版本,但遇到了ARM兼容库的问题,特别是对Intel CPU支持不足。作者认为由于真机运行和虚拟机在性能上已经足够,且Linux用户群相对较小,所以容器内运行Android的需求较少。",
|
||||
"/2023/12/10/openfyde.html": "这篇文章分享了作者将树莓派4B安装和使用openFyde的体验。作者出发点是寻找适合普通用户而非专业硬件爱好者的系统,因此排除了服务器版和部分GNU/Linux发行版。在选择ChromeOS或其本土化版本FydeOS时,由于官方不支持树莓派,作者选择了openFyde,尽管安装过程复杂(需要先格式化TF卡并刷入镜像),且视频播放受限于硬件只支持H264解码。有趣的是,虽然Linux子系统表现尚可,但Android子系统存在交互设计问题(如无滚轮、复制粘贴不便等)。尽管性能有限,尤其是视频播放不流畅,但openFyde以其简洁、易于安装和对普通用户相对友好的界面,被作者认为是让树莓派更适合普通用户的选择。",
|
||||
"/2023/10/21/game.html": "这篇文章讲述了在MacBook上玩游戏的各种方式:1. 原生游戏,例如专为Mac设计的应用和开源游戏;2. iOS游戏,通过Decrypt IPA Store下载并在Mac上使用特定软件运行;3. 利用Rosetta 2运行x86游戏,比如通过Steam和Epic Games Launcher;4. 基于脚本的Galgame游戏,如使用工具如XP3Player、ONSPlayer或Ren'Py;5. 在网页上运行的游戏,如RPG Maker MV;6. 通过Wine或者其他基于Wine的工具运行Windows游戏,如Game Porting Toolkit和Whisky;7. 虚拟机(不推荐),如UTM;8. 云游戏服务,依赖网络和服务器性能。作者强调了MacBook虽然不是专门设计用于游戏,但有多种方法可以让用户在上面玩游戏。",
|
||||
"/2023/09/24/rpi-ubuntu.html": "这篇文章介绍了作者在树莓派4B上安装Ubuntu的经历。一开始尝试安装Windows 11并使用ESXi-Arm Fling遭遇问题,如内存卡浪费和存储限制。由于对Windows的不满意,作者决定安装Ubuntu,过程中遇到了登录密码设置的困扰,软件提示不明确。尽管如此,最终成功安装了Ubuntu并编译并运行了PiFmAdv项目,但初始遇到编译问题。作者还尝试了通过QEMU-KVM在树莓派上跑Windows虚拟机,对比了与裸机的性能,发现虚拟机表现不佳。此外,虽然尝试让树莓派运行x86程序(如postjson工具),但由于性能受限,效果并不理想。总结全文,作者表示树莓派除了FM电台功能,其他操作在普通电脑上也能完成,质疑购买它的意义,但也提到挖掘其潜力的过程满足了自己的探索欲望。",
|
||||
"/2023/09/06/satellite.html": "这篇文章主要讨论了卫星通信的常见应用,如GPS导航、卫星电视、业余无线电通信、卫星电话(如华为Mate 60 Pro)和星链网络。作者强调了卫星通信的基本原理,即通过无线电波与远距离的卫星进行单向或多向通信。文章还提到了华为卫星电话的特点,如能否实现免外置天线使用和隐藏天线的设计猜测。作者认为将卫星电话功能引入智能手机可能更多是出于营销策略,实际使用场景有限,如信号覆盖和成本效益都不如常规网络。最后,作者对6G卫星网络的设想持怀疑态度,认为它不会显著改变通信速度。总体上,卫星通信虽然看起来高端,但其实技术上并不是什么难题。",
|
||||
"/2023/08/01/auth.html": "这篇文章讨论了在Windows环境下,让Python脚本接收OAuth2.0授权码Code的几种方法。作者尝试了以下几种方式:\n\n1. **URI Scheme**: 通过注册伪协议(如mayx://)并在Python脚本中解析回调URL来获取Code,但这种方法可能被杀毒软件阻拦,且不是所有平台都支持。\n\n2. **HTTP服务监听**: 使用Flask创建一个简单的web服务来接收Code,虽然简单但可能占用过多资源,且已被弃用。\n\n3. **Socket实现**: 用socket进行TCP连接来处理请求,但初次访问时有问题,且代码复杂。\n\n4. **http.server模块**: 使用Python内置的HTTP服务器模块实现了基本功能,更小且稳定,但仍有程序结束前端口未释放的问题,后来通过AI得到了解决。\n\n作者在寻找最合适的方案时遇到困难,感慨了解更多信息有时也带来困扰,但最终还是AI有效地解决了问题。",
|
||||
"/2023/07/09/bitmo.html": "这篇文章分享了一种新型的无人值守诈骗手法,骗子创建虚假的接码平台,并通过带有网站名、用户名和密码的诱人信息诱导用户登录。受害者登录后发现网站看似正常,提供了充值、提现等功能,但其实充值和提现需要安全密钥,且对免费账户有限制。诈骗者设计巧妙,通过转账功能一步步诱导用户,如充值、转账以及账户升级的假象,增加了被骗者的参与感。作者最终识破网站为假,怀疑其为国人开发的诈骗平台,并指出这类诈骗手法利用了人们的好奇心和财务冲动,效率高且设计逼真,可能会导致许多人受骗。",
|
||||
"/2019/04/13/iwara.html": "这篇文章介绍了使用PHP编写的Iwara Viewer,一个帮助用户从Iwara平台下载视频的工具。作者主要是出于对网站Ecchi(Iwara上的一个内容区)上的R183D动画,特别是\"Observation Diary\"的兴趣。工具允许按照日期、观看数或喜好排序视频,并提供了在服务器上直接下载视频的选项,以解决Iwara防盗链的问题。然而,该工具的缺点在于没有显示观看数、作者信息,且可能受Iwara服务器限制。作者还提供了相关的演示和下载工具链接。",
|
||||
"/2015/02/23/diary.html": "这篇文章记述了作者在2015年2月23日的日常经历,包括修复U盘、处理爷爷电脑的显示器问题以及手机分区的意外损害与修复。作者通过这些事件反思了技术操作的重要性,提到了对手机知识的深入了解,以及对电脑与手机未来趋势的看法。同时,他也对自己在春节期间不小心损坏手机的行为做了自我批评。",
|
||||
"/2018/03/26/neko.html": "这篇文章记录了一个名为张千叶的人帮助朋友Ayaka Neko应对家人(特别是其父亲)强制带回云南老家并进行住院治疗的过程。Ayaka已成年并有精神健康问题,但她的父母没有得到她的同意,且存在暴力行为。文章描述了从报警、寻求警察帮助到联系不上Ayaka,最终发现她自杀的悲剧结局。事件引发了关于监护权、抑郁症处理和家庭沟通问题的讨论,呼吁家长尊重孩子意愿,避免类似悲剧的发生。",
|
||||
"/%E6%BC%94%E8%AE%B2%E7%A8%BF/2018/06/20/Coding.html": "这篇文章是一场演讲稿,由演讲者mayx介绍了计算机编程的三个核心主题:计算机基础知识、编程基础和设计概念。演讲涉及的内容包括计算机科学的区分(CS与IT)、硬件的基本结构(冯·诺依曼架构与哈佛架构)、编程语言的发展(如低级语言与高级语言的区别,编译型语言和解释型语言如C、Python和Java的特点),以及UI设计的重要性和扁平化设计的流行。演讲旨在让听众理解编程的本质和设计原则,强调编程不仅仅是技术层面,也是表达思想和解决实际问题的工具。",
|
||||
"/2018/10/20/talk.html": "这篇文章是Mayx分享其在Github Pages博客上使用评论系统的体验。作者首先提到由于博客的静态性质,选择第三方评论服务有限制, Disqus因在中国不可用而被排除。国内的选项如多说、畅言被指不稳定。在对比了Gitalk、Gitment、Valine、fcomment和utterances等几种评论系统后,作者最终选择Gitalk,原因包括Gitment停止维护、Gitalk虽需手动初始化但影响不大、以及相对较高的安全性(相比fcomment和Valine)。尽管Gitalk在IE11中的表现存在问题,但作者仍因懒惰和对已有系统的满意而坚持使用。",
|
||||
"/2022/11/08/cf-acc.html": "这篇文章主要介绍了如何改善在中国使用Cloudflare服务的网站访问体验。由于中国对Cloudflare网络的某些限制,用户常会遇到速度问题。文章提供了两种方法:一是利用CloudflareSpeedTest工具检测最佳IP并修改 Hosts;二是通过第三方反代节点,这些节点可能绕过速度限制,但需注意潜在的安全风险如中间人攻击和匿名性导致的防火墙失效。对于网站站长,云flare官方的新CNAME接入方式允许绑定信用卡进行限制性接入,通过设置不重要的域名作为跳板,可灵活选择节点以优化访问速度,但需开启证书透明度监视以防止中间人攻击。作者还提到可以考虑使用DDNS脚本来自动调整IP,但缺乏实操条件。文章最后表达了对Cloudflare优化服务的肯定。",
|
||||
"/2021/03/02/workers.html": "这篇文章介绍了作者尝试使用CloudFlare Workers实现的一些功能,包括自建反向代理以加快博客访问速度,搭建简单Status Page监测网站可用性,以及对Serverless云函数的玩味。作者提到虽然Workers功能完善且支持KV存储,但免费版的10万次请求限制对大流量网站并不适用。此外,作者认为Serverless更适合小公司,大公司则可能不会将其作为主要业务平台,因为存在服务中断风险。",
|
||||
"/2022/12/26/i2p-ssl.html": "这篇文章讲述了作者为自己的i2p站点添加SSL证书的探索过程。虽然i2p作为一个小项目没有官方认可的SSL证书,但有一个由PurpleI2P开发团队维护的自签名CA可以用于证书签名。申请过程相对简单,但部署到网站和配置有所挑战,因为缺乏相关的教程。作者最后成功配置并实现了网站的加密访问,但他提到i2p对SSL证书的管理不太严格,仅用于娱乐性质。此外,i2p的域名注册也很随意。整个过程虽然麻烦但充满了趣味性。",
|
||||
"/2022/12/12/bt-s3-comp.html": "这篇文章主要讲述了作者如何自定义宝塔面板上的亚马逊S3云存储插件,因为原插件不支持非AWS的S3服务端点,如Filebase。作者发现通过Python的boto3库可以实现自定义连接,只需要在插件的`build_auth()`方法中添加`endpoint_url`参数。作者对宝塔插件的设计和功能表示不满,认为它只支持了基本功能且依赖臃肿,但对于不会编程的小白用户来说,尽管功能有限,仍需使用。",
|
||||
"/2018/11/10/email-sender.html": "这篇文章介绍了作者如何利用PHP制作了一个免费订阅的邮件日报系统。作者通过搜索并利用现成的PHP资源,如sendmail和CronTab功能,设置了自动发送邮件的工作流程。邮件包含了天气预报、笑话和新闻等内容,且制作者留有余地,如使用Travis-CI和短信提醒等功能进行扩展。最后,作者分享了创建过程中的心得和提示,欢迎读者尝试并加入邮件订阅。",
|
||||
"/2023/03/12/php-async.html": "这篇文章主要探讨了PHP实现异步执行的挑战和尝试。作者在ThinkPHP项目中遇到需要立即返回数据并继续后台耗时操作的问题。以前采用的file_get_contents函数虽然解决了返回速度慢的问题,但涉及到使用危险的函数和服务器配置限制。作者对于使用消息队列、Swoole框架及popen函数等方法持保留态度,认为它们可能带来安全风险或超出项目规模。\n\n作者发现fastcgi_finish_request函数可以输出内容并结束请求,但需注意与session管理和PHP-FPM的交互。存在问题包括对Apache环境的限制、进程数量限制以及在TP框架下无法使用return。作者总结到,PHP处理多线程问题有困难,对于频繁遇到这类问题的项目,可能需要考虑使用其他语言。",
|
||||
"/2023/06/30/nucleic-acid.html": "这篇文章介绍了一篇基于ThinkPHP5.1框架的核酸检测登记系统设计与开发的毕业论文。论文详细探讨了系统的需求分析、数据库设计、功能实现(如前后端架构和用户模块等),以及系统测试过程。研究目标是为新冠疫情防控提供一个便捷的在线登记平台,通过微信接入,提高效率并减少人员接触。论文强调了系统在追踪疫情、提高用户体验及信息共享方面的价值,并对比了国内外核酸检测登记系统的现状。论文由七章组成,涉及背景、技术概述、需求设计、接口与数据库设计、实现、测试以及结论和展望。",
|
||||
"/2023/05/22/rpi-win.html": "这篇文章主要讲述了作者尝试在树莓派4B上安装Windows系统的过程,包括使用Windows on R工具和不同存储卡的尝试,但遇到了安装失败和性能问题,如WinPE安装不能成功、Windows性能差(尤其是读写速度和驱动缺失)、CPU占用高等。尽管Linux系统在官方支持下运行流畅,但作者认为树莓派在性能、驱动支持和视频播放等生产力方面表现不佳,更适合用作物联网开发板,而非普通电脑。文章最后对树莓派4B及后续版本的发展方向提出了疑问。",
|
||||
"/2023/04/05/ai.html": "这篇文章讲述了人工智能特别是LLM(大型语言模型)领域近期的发展,以ChatGPT和相关模型如Alpaca为例。作者提到,开源社区如GitHub上的llama.cpp项目让AI技术更加亲民,即使是在资源有限的设备上也能体验到。斯坦福大学的Finetune技术使得AI模型性能提升,而成本较低的LoRA方法使得AI训练更加普及,作者还分享了自己的实践经验,如使用不同设备运行不同规模的模型。此外,作者对开源社区的AI发展持乐观态度,希望未来能在低成本情况下提高效率,但也表达了对技术被商业化和不平等竞争的担忧。",
|
||||
"/2023/02/22/cron.html": "这篇文章讲述了作者在云原神签到脚本被Github Actions禁用后,选择使用Cloudflare Workers Cron触发器的原因。作者认为Workers更适合做这种简单的网络请求,因为它资源消耗较少,且不会像Actions那样遇到资源限制。作者分享了如何在Workers中编写签到脚本,包括设置headers和获取必要的参数。此外,作者建议将Cloudflare Workers用于日常签到等轻量级任务,而更适合计算密集型工作的是Github Actions。作者还提到,与云函数相比,Workers可能具有更好的轻量化和环保优势。",
|
||||
"/2023/02/03/mbp.html": "这篇文章介绍了作者使用新款MacBook Pro 2022 13寸搭载Apple M2芯片后的使用体验。尽管之前对MacOS和苹果产品存有偏见,认为其性价比不高且性能曾存在问题,但M2芯片的升级让作者感到惊喜,体现在性能提升、功耗控制优良以及长续航上,使其符合云游戏与轻薄本的使用需求。文章还提到了MacOS的初次上手体验,如触控板的便利、软件兼容性(如Microsoft Remote Desktop和VSCode的使用)以及MacBook在游戏性能上的不足。作者认为MacBook适合日常工作、文档处理和轻度娱乐,续航表现强大,但与Windows电脑相比,在一些核心功能和兼容性上还有差距。",
|
||||
"/2023/01/01/summary.html": "这篇文章是作者的年终总结,回顾了2022年的生活和工作,主要提及了记忆在生活中的重要性,以及这一年解决问题的文章减少可能与记忆积累减少有关。作者提到对2022年周围环境的负面看法,认为人类灭亡的风险增加,并表达了对2023年能正常活下去的期望。同时,作者分享了关于博客备份的成就,以及这套方案在反审查方面的价值。个人生活上,临近毕业,作者对未来持有相对消极的态度,仅期待见证可能发生的变化,认为自己和其他人可能都不会有显著的改善。",
|
||||
"/2022/11/29/free-server.html": "这篇文章讲述了作者在Heroku不再提供免费容器云服务后,发现了一家名为Koyeb的平台作为替代。Koyeb的特色在于可以直接部署Docker Hub上的项目,无需安装复杂软件,操作相对人性化。作者利用Koyeb部署了宝塔面板和VerySimple梯子服务,而且还提到为了解决网站资源访问问题,使用了Cloudflare Workers做反代。尽管免费,作者认为Koyeb是个不错的临时选择,但需要珍惜这种免费服务。",
|
||||
"/2022/11/23/i2p.html": "这篇文章主要讲述了作者在服务器上使用i2pd——一个C++实现的i2P服务的体验。相较于官方Java版本的I2P客户端,i2pd因为非Java编写而被认为更易用。作者发现i2pd的安装和使用相对简单,通过HTTP代理连接隐形网络速度快于官方客户端,并提到了i2pd的域名解析系统和vanity address的计算工具vain的问题。尽管如此,作者仍认为i2pd的用户体验比官方客户端要好,但指出访问i2P网络的网站较少,且因为缺乏多样性的服务,不如Tor那样有丰富的内容。文章以一种轻松的口吻表达了作者对Java语言的调侃。",
|
||||
"/2022/10/19/web3.html": "这篇文章介绍了作者在Web3上使用xLog搭建博客的经历,提到xLog基于Crossbell区块链使用智能合约和IPFS存储内容,强调了其去中心化和防止审查的优点。尽管作者认为IPFS不能提供永久存储(除非结合Arweave或其他服务付费存储),但他利用4EVERLAND实现了静态博客的Git同步和DNSlink访问,提到了社交功能和成本问题。此外,作者对零网ZeroNet的体验并不理想,但也对Web3技术的发展和去中心化社区的建设表达了期待。",
|
||||
"/2022/10/14/crack-aes.html": "这篇文章讲述了作者在尝试破解自己的Python加密程序时,发现使用AES-128-CTR加密模式且省略了初始化向量(iv)的情况下,加密的不安全性。作者后来了解到,CTR模式因为直接将密钥与iv通过AES加密后再异或数据,导致如果使用相同的iv和密钥加密不同的数据,通过异或运算可以轻易地从已知的密文和明文对中推断出其他密文的对应明文。为了解决这个问题,作者意识到按照官方建议添加iv并正确使用加密模式是必要的,最终调整了加密程序以确保安全性。作者也表达了一个教训,那就是在不了解的领域应遵循标准方法,否则可能会导致意想不到的问题。",
|
||||
"/2022/10/08/tinyaes.html": "这篇文章介绍了一种使用Python编写的简单加密程序,作者发现TinyAES库非常适合对数据进行AES-128-CTR加密,因为其加密和解密方法一致,使用起来非常直观。作者通过导入MD5哈希来处理非16位长度的密码,然后举例编写了一个加密脚本,用户只需提供文件路径和密钥即可执行加密或解密。这种库相比于复杂的加密库(如pycryptodome或cryptography),被作者认为更符合Python的简洁性和易用性。",
|
||||
"/2022/10/05/rules.html": "这篇文章分享了Cloudflare新增的几个规则功能的体验,包括二级域名重定向、动态重定向和内容转换,如重写URL、请求头、响应头以及应对防盗链问题。作者赞赏Cloudflare的免费服务和强大功能,但也指出了一些限制,比如免费用户不能随意使用正则表达式,以及规则配置上的局限。作者表达了对于更自由配置的向往,但同时也认可Cloudflare在性能和实用性上的优势。",
|
||||
"/2022/09/21/cron.html": "这篇文章介绍了如何使用Python制作一个可热载的定时调度器,作者开始时考虑了使用CRON表达式,但发现它不够直观且不支持Windows。接着,作者发现了schedule库,用其以更自然的语言结构编写定时任务,比APScheduler易于理解和使用。在创建调度器时,作者开始用轮询监控文件变化,但性能不佳,转而引入了watchdog库以提高监测效率。通过FileEventHandler和Observer,程序可以实时检测并重载修改的脚本。作者以一个简单的示例脚本和管理器函数阐述了整个过程,并表达了对编写简洁、功能单一的程序的偏好。",
|
||||
"/2022/09/05/trayicon.html": "这篇文章讲述了作者从使用Python的PyQt5库制作程序运行提示图标,遇到体积过大问题,到尝试Pystray库,结果依然不理想,再到最终选择Tkinter和PyQt5实现跨平台悬浮图标过程中的经历。作者在寻求轻量级解决方案时,虽然Tkinter在Windows上表现尚可但在Linux上遇到透明度问题,而Qt5虽能提供跨平台一致性,但学习和使用起来较为复杂。作者对跨平台开发的复杂性以及选择不同工具的权衡有了深入的认识。",
|
||||
"/2022/08/15/cdn-verify.html": "这篇文章讲述了作者如何避免Cloudflare源站被恶意访问的问题。作者最初通过防火墙白名单进行防护,但随着Cloudflare功能的增加,这种方法不可靠。作者发现双向认证的“经过身份验证的源服务器拉取”功能可以有效防止使用Cloudflare功能绕过WAF的请求,通过SSL验证确保只有Cloudflare和授权的服务器能访问源站。作者建议Cloudflare在新手教程中增加此配置以提高用户的安全意识。",
|
||||
"/2022/07/16/privacy.html": "这篇文章讨论了在网络隐私保护的复杂性,指出尽管个人隐私容易被泄露,但通过合理的准备和策略,可以在一定程度上防止隐私被滥用。主要内容包括:1) 保护隐私的挑战,比如信息关联的易发性,特别在中国由于实名制的限制;2) 隐私泄露的常见原因,如网站访问、用户输入信息、网络服务提供商的监控以及DNS和SNI等技术的缺陷;3) 提供的隐私保护方法,包括身份伪造(使用虚拟身份和代理)、链路伪造(多层代理)、行为伪造(使用专门系统和时间掩饰);4) 总结,强调在地球上实现全程隐私的困难,但通过特定场景下的策略可以增强隐私保护。",
|
||||
"/2022/07/03/fast-ver.html": "这篇文章讲述了作者试用字节跳动旗下“极速版”应用赚钱的经历,通过完成任务赚取收益,并将其与PCDN网络服务进行对比。这些“极速版”软件的门槛低,初期收益高,适宜手机和手机号丰富的用户,通过批量安装和使用脚本自动化完成任务,但收益会随着时间减少。虽然这类软件看起来实现了多方获益(观看者、制作者和平台),但作者认为长期价值不大,关心的是对网络空间的贡献,因此计划在收益降低后卸载此类软件。作者也提到,即便有刷广告的行为,对广告商仍有价值。",
|
||||
"/2022/05/27/zongzi.html": "这篇文章介绍了一个在宿舍没有锅的情况下煮粽子的创新方法。作者首先通过购买并尝试生吃和热水泡发现,虽然真空包装的粽子直接生吃口感不佳,但通过热水多次替换并持续泡20分钟,粽子的内外都变软了。尝试用这种方法处理肉粽子和甜粽子后,效果都较好,虽然与锅煮的粽子口感略逊,但满足了在宿舍的粽子需求。作者认为这个方法在火车上方便食用,相比泡面更舒适。",
|
||||
"/2022/04/17/pcdn.html": "这篇文章讲述了作者再次尝试通过闲置带宽加入PCDN的经历,重点描述了从刷机升级小米路由器、配置网心云虚拟机(PCDN节点)以及遇到的网络与性能问题。作者提到升级路由器后的网络速度提升明显,全锥形模式的发现促使他想继续利用闲置带宽赚钱。虽然初期配置遇到了无线网络问题导致电脑卡顿,但最终通过有线连接解决了。作者认为PCDN成本低,是个成本合理且有盈利潜力的选择。",
|
||||
"/2022/03/27/radio.html": "这篇文章介绍了作者如何用树莓派自制FM电台的过程,从一开始没有尝试官方系统,到选择RPiTX和fm_transmitter,最终找到并改进了PiFmAdv项目。作者通过实验发现PiFmAdv在音质和信号范围上有所提升,并提醒了可能的法律风险,如功率限制和频率使用规定。文章结尾作者表达了对无线电技术的兴趣,但也提到了法律限制和专业认证的要求。",
|
||||
"/2022/03/12/alpine.html": "这篇文章主要介绍了作者在学习Docker的过程中,体验了Alpine Linux作为其容器化环境的优势。Alpine Linux因其小巧轻量、稳定性高、安装简单和内存占用低等特点,适合在生产环境中使用,尤其是对于资源有限的服务器,可以节省空间和提升性能。作者在虚拟机里安装了LEMP环境(Linux、Nginx、MySQL和PHP),并经历了从理论上学习到实际操作的过程,对安装和配置进行了详细分享。最后,作者表示在测试阶段,使用Alpine搭建的Discuz环境表现良好,验证了其作为未来项目基础环境的可行性,强调了“小就是好”的优势。",
|
||||
"/2022/02/15/termux.html": "这篇文章描述了作者在平板电脑上使用Termux的实验经历。起初出于专业需求,作者想要验证Android平板能否作为Linux环境的替代品,特别关注了远程桌面和SSH解决方案。经过一年的测试,发现Termux是一个可行的方案,可以安装各种Linux软件如Python、Django等。然而,由于硬件限制(如老旧的处理器、屏幕常关导致程序无法运行)、软件兼容性问题(尤其是在国内使用时)以及版本更新带来的问题(如源问题和官网下载限制),作者在使用过程中遇到不少挑战。为改善体验,作者做了额外的配置,如创建额外的键位和安装Linux发行版。总的来说,作者认为Termux是利用闲置Android设备的有效方式,使得旧设备的使用价值得到提升。",
|
||||
"/2021/07/13/wifi.html": "这篇文章作者讨论了在新宿舍环境中发现的使用Portal验证的WiFi,并注意到这种认证方式存在绕过的可能性。作者分享了之前尝试过的DNS隧道方法,虽然有效但普遍。一个不成熟的想法是利用可能存在的入站而非出站防火墙漏洞,通过主动连接的隧道,如搭建SSH或frp隧道来进行反弹式连接。这种方法在特定情况下(如公网IP且入站防火墙未开启)可行,但具有明显的局限性,如需要在同一网络内、防火墙可能随时变化等。作者表示这仅是理论上的另一个思路,实际操作中具有不确定性,更多是作为一种可能性探讨。",
|
||||
"/2019/02/01/history.html": "这篇文章是一位作者回顾自己学习计算机的经历,从初次接触PowerPoint导致的探索,到破坏电脑和学习批处理语言如LOGO和BAT。作者提到了在批处理之家论坛的学习过程,并分享了一段自己编写的批处理工具的源代码,该工具用于检查权限、构建安全环境以及执行一些系统管理任务。文章通过讲述个人经历展示了编程和系统管理技术的学习过程。",
|
||||
"/2019/03/22/bgm.html": "这篇文章的作者分享了他们最喜欢的游戏BGM,偏爱Future Bass风格带有些许Moe元素的音乐,并表达了对未来人工智能能生成个性化音乐的期待。他们提到已删除文件,且暂无更多BGM推荐,侧重于音乐风格的讨论和个人愿望。",
|
||||
"/2019/03/23/gitio.html": "这篇文章介绍了如何突破Git.io的限制,使其能够创建非Github.com的链接,尽管作者个人希望Git.io能有自定义选项且希望过程更简便。事实上,由于CORS问题,作者不得不使用PHP脚本来实现这一目标,但最终因为脚本滥用导致博客被删除,意味着该服务不再提供这种功能。",
|
||||
"/2019/05/12/baidu.html": "这篇文章讲述了在中国使用百度搜索引擎时,由于搜索结果通常需要下载百度App才能查看的不便。作者提到百度App质量不佳,并介绍了一种解决方法:利用网页开发者工具中的“web_url”参数以及自建的Baidu移动页面转换器,通过修改搜索链接,跳转到搜索结果的网页版,从而避免下载百度App。作者虽然不擅长使用插件,但希望通过JavaScript来实现这一目的。",
|
||||
"/2020/02/10/tieba.html": "这篇文章讲述了作者由于不想使用百度贴吧App,通过编程技能找到了绕过App直接访问贴吧帖子的方法。作者发现,通过在特定URL后添加帖子ID,可以查看帖子全文,但这个方法不能用于发帖。他参考以前的代码写了一个PHP脚本,用于从网页版贴吧获取帖子列表,并提供了演示链接。作者对于百度和知乎强制用户下载App的行为表示不满,认为这会阻碍用户流畅的在线体验。同时,他也提到了其他平台上也有类似的小程序。",
|
||||
"/2022/01/04/banned.html": "这篇文章讲述了作者在2021年12月被Github突然封禁博客仓库的经历,因为违反了他们的ToS。作者在没有事先通知的情况下被禁用,感到失望和不满,因为正常情况下至少会有违规通知。经过与Github的沟通,发现问题出在三年前的一个利用Git.io服务的脚本,被误用为恶意网站跳转。这次事件导致作者的博客星标、Fork和评论丢失,对Github的信任度大幅下降。尽管如此,作者仍考虑继续使用Github存储项目数据,但会采取措施防止单点故障,并减少对Github域名的依赖。同时,作者对帮助他备份文章的yzqzss和@saveweb项目表示感谢。",
|
||||
"/2020/05/29/encrypt.html": "这篇文章是一个关于非专业密码学的Python实现示例,作者是为了一个学校工程项目研究通信安全而写的简化的加密传输Demo。主要使用AES用于数据加密,RSA用于加密AES的密钥,以及MD5进行数据校验。作者选择这些技术主要是为了保证通信过程中的安全性,虽然简化了RSA和TLS的握手过程以降低复杂性。传输方式则是通过文件而非TCP或Unix Domain Socket。虽然许多代码是从网上获取的,但文章展示了如何使用Python的Crypto库进行加密和解密操作。",
|
||||
"/2019/12/31/summary.html": "这篇文章是大学生的年终总结,回顾了大学的一年经历。作者提到他在开学时被坑的经历,军训时的不突出但没人记住,以及通过加入协会广撒网增加曝光度的努力。作者指出大学生活的悠闲可能导致事情积压,空闲时间多但常用于娱乐。在学习方面,专业课相对简单,但数学和英语是挑战,而公共课如体育、心理健康等也让他感到困扰。文章还提到了办银行卡和尝试基金的经历,以及2020年的目标是通过考试和考驾照。对于未来,作者计划继续学习和完成老师提出的前后端分离的CMS项目及类似CodeTank的游戏开发。",
|
||||
"/2019/12/16/ctf.html": "这篇文章是关于作者初次体验CTF挑战的经历。他被同学邀请参加线上CTF比赛,虽然对CTF有所了解但从未真正参与过。文章描述了作者的参赛过程,他尝试了Cookie相关的题目,但因为对题目的理解错误和操作不当而未能解出。接着,他解决了涉及git的Swedish State Archive问题,通过Git Extract工具找到了Flag。尽管最终因水平不足未能完成所有题目,作者仍对CTF比赛表示出兴趣,并计划今后深入学习。他还设想将网站迷宫类型的解谜元素融入到前端编程中,类似于CTF挑战。",
|
||||
"/2019/12/04/abuse.html": "这篇文章探讨了关于个体认知与技术影响的议题。作者以幽默的态度讨论了虚拟现实与现实之间的差距,提出了通过提高神经信号传输延迟(熬夜)来体验不真实感的现象,并调侃了熬夜后的负面影响,如精神状态下降和噪声干扰。作者还提及了如何通过干扰人声来应对噪声问题,以及对反录音原理的疑惑。最后,作者总结指出,熬夜带来诸多问题,希望早点休息,并抵御噪音的干扰。看似消遣,实则寓言式的揭示了生活中的问题和应对策略。",
|
||||
"/2019/11/18/archive.html": "这篇文章介绍了Github的Archive Program,一个将公有仓库保存在北极的长期计划,旨在将代码历史存留千年。作者对该计划表示赞赏,同时讨论了存储媒介的稳定性,如SSD、HDD、光盘和胶片,并认为尽管这些存储方式都有潜在的损耗问题,但Github的项目专注于长时间保存,尤其是对个人作品的持久性表示感慨,认为这相当于一种虚拟形式的永生。",
|
||||
"/2019/11/01/python.html": "这篇文章讲述了Mayx尝试应聘Python程序员时的经历。他在面试中被要求写一个排序程序,但他展示了使用多线程睡眠并打印数字的代码,虽然程序确实能够执行,但结果不符合常规的排序算法。Mayx因此被面试官质疑并最终未能通过面试。他感到困惑,认为公司可能对常规排序函数如sort()有误期待,并质疑公司的评估标准。",
|
||||
"/2019/09/28/python.html": "这篇文章讲述了作者学习Python过程中,接触到Turtle库的经历。Turtle库被老师用于教授类似Logo语言的基础图形操作,包括画心形和正方形。作者最初通过循环和基本指令完成作业,然后发现Turtle其实有更高级的函数如circle可以画正多边形,这让他感到惊讶。他在尝试画心形时,运用三角函数实现了一个自己的版本,虽然结果不太理想。最后,作者意识到在面对新事物时,查阅文档的重要性,因为他看到别人写出的更简洁、美观的心形代码后感到自闭。",
|
||||
"/2019/08/05/blilblil.html": "这篇文章讲述了作者在使用Bilibili时误点击广告办理了2233小电视卡的经历。虽然之前米粉卡的体验良好,但这次卡的“免费”声称让作者误解。实际上,首月免费后需要额外付费,且免流服务流量有限制,导致视频观看体验大打折扣。作者每月实际支付约10元用于B站观看,决定五个月后放弃该卡,同时表达了对广告误导和没有关闭广告权限的不满,期待未来广告用户有更多选择权。",
|
||||
"/2019/06/24/up.html": "这篇文章讲述了如何利用MySQL数据库创建一个简单的图站服务。首先,作者介绍了如何建立了一个名为`FileUP`的数据库表,用于存储文件信息如文件名、内容和大小。接着,PHP代码展示了处理文件上传、查询和下载的过程,提到了MySQL的文件大小限制(大约16MB),以及存在的断点续传问题。作者提到想通过切片上传技术来解决文件大小限制,但需前端支持,并给出了一个WebUploader的链接。文章最后提到暂时不打算改进这个方案,但可能会继续思考如何实现断点续传。",
|
||||
"/2019/05/03/origip.html": "这篇文章介绍了如何通过使用Censys来“人肉”被CDN隐藏的服务器IP。作者提到,许多网站使用CDN服务以提高速度、节约带宽并保护服务器,但这样使得追踪源站IP变得困难。Censys作为一种工具,可以通过关键词搜索找到潜在的IP地址,比如在搜索\"esu.wiki\"时找到了与ESUWiki相关的IP 149.56.110.126。尽管访问过程可能经过了多层跳转,Censys还是有助于确认服务器与目标网站的关系。作者指出,虽然Censys可以发现很多Cloudflare保护的服务器,但可以通过设置防火墙白名单来阻止不必要的访问。文章还提到Censys拥有端口扫描等功能,相比于其他类似网站,作者更倾向于使用Censys因其易用性和名字的吸引力。",
|
||||
"/2019/04/05/cholang.html": "这篇文章讲述了作者对编程语言的选择偏好,倾向于Linux Shell而非Microsoft Visual Studio(原因包括资源消耗大、编译耗时、IDE复杂难用)。作者认为语法简洁、易于记忆和扩展性是重要因素,偏好解释型语言如Python(尽管提到缩进问题和import的不便),但最终选择Linux Shell因其简单好记、命令直接以及扩展性强;PHP因使用方便和SEO友好;JavaScript因为开发博客的需要,运行方便和示例丰富。结论是作者倾向于Linux Shell、PHP和JavaScript。",
|
||||
"/2018/12/28/newdomain.html": "这篇文章讲述了作者Mayx由于Github Pages被GFW封锁,决定更换博客域名并采用了反向代理技术来解决访问问题。新地址为https://blog.mayx.tk/,服务包括Github Pages、Cloudflare的CDN和DNS、花火学园的反向代理,以及使用了Freenom提供的免费域名。作者提到Nginx配置遇到困难,部分内容保留了原站地址,并表达了对免费域名可能不稳定性及续费问题的担忧。",
|
||||
"/2019/08/24/sth.html": "这篇文章的作者回顾了假期里似乎无所作为的生活。虽然平时有学习新技能的兴致,但到了假期变得懒散,主要活动包括通过科目一和科目二的考试,尝试电脑升级(但过程遇到问题),初次献血(虽有紧张但结果正常),办理了以天依为主题的银行卡,以及在闲鱼上低价出售了一些物品。作者感觉这个假期身心都有些消耗,期待能快速调整,恢复到正常状态。",
|
||||
"/2019/08/17/memory.html": "这篇文章讲述了作者因学校需求升级内存而遭遇的一次意外的电脑维修经历。开始时,作者购买了与笔记本电脑兼容的内存条,并成功安装,但随后在安装过程中电池接口冒烟,怀疑可能是充电芯片损坏。电池问题持续,作者认为可能是因为安装顺序导致的,他对自己的操作没有明显错误感到困惑。文章以自嘲的口吻总结为命运作弄,同时希望接下来的考试不受这次倒霉经历影响。",
|
||||
"/2020/01/05/devops.html": "这篇文章记述了运维人员新年期间遇到的问题,花火学园的服务器宕机,原因是数据库连接问题。在经历重启失败、故障排查后,发现用户表出现问题,通过重置解决问题。为了提高稳定性,运维决定迁移服务器,从Ubuntu迁移到CentOS,并使用LEMP应用。迁移过程中包括数据库和文件备份、新服务器部署、DNS设置、CDN配置以及基础环境优化(如BBR和Swap安装)。在优化过程中,运维尝试使用UNIX domain sockets,但遇到了权限设置问题,后来调整了MySQL连接配置。此外,还发现并处理了postfix和日志记录的问题。最后,运维反思了之前的问题,并计划分开开发环境和主站服务器。",
|
||||
"/2019/11/21/enc.html": "这篇文章是作者在学习Web Crypto API时的笔记,讲述了自己在制作分布式加密邮件系统的过程中遇到的挑战,特别是对JavaScript(特别是其对象系统和ArrayBuffer/Uint8Array等概念)的不适应。作者提到Javascript语法与自己习惯的Linux Shell语言对比存在差异,导致在处理Web Crypto API时感到困惑,尤其是其复杂的参数要求如密码长度和初始向量。通过Copy&Paste的方式,作者勉强完成了一个加密消息的示例代码,同时表达了继续学习的决心。整个过程中,作者流露出对学习过程的艰辛和对未来的期待。",
|
||||
"/2020/03/08/oldphone.html": "这篇文章主要讲述了作者对家中旧手机的处理方式转变,从最初打算出售或回收,转而思考如何最大限度地利用旧手机的剩余价值。作者提到可以将手机用作行车记录仪(利用摄像头和GPS)、服务器(利用Android系统和ARM指令集运行服务器软件)、桌面虚拟人偶(通过Live2D壁纸)、智能音响(通过耳机孔)以及小型家庭云存储。作者虽然提到了这些方案,但也承认对于大多数人来说,如果懒得折腾,卖出或购买新设备可能是更直接的选择,他个人则是出于对资源的不舍而寻求旧手机的价值发掘。",
|
||||
"/2020/03/01/plan.html": "这篇文章策划了远程云手机(RCP),一种基于云计算和5G技术的移动通讯设备。它通过分拆为低成本控制终端和高性能远程服务器,提供了价格低廉、性能强大且节省资源的手机体验。文章提出市场机会在于手机价格上涨与性能需求矛盾,云手机有望填补中低端市场,采用无差异营销策略。团队构成包括四部分,技术与生产是最具挑战性的,资金、人才和市场推广是关键。文章分析了市场竞争环境,云手机有望在众多手机厂商中脱颖而出,特别是在5G时代。市场调查表明,云手机凭借成本优势和运行速度将吸引中高端用户,特别是在迭代换新需求强烈的市场。通过详细的战略规划,公司预计在成本控制、技术创新和目标市场定位上取得竞争优势。",
|
||||
"/2020/06/06/demoscene.html": "这篇文章讲述了作者对Demoscene这一计算机艺术亚文化的回顾。Demoscene,或称演景,是用很小的程序(如64KiB、92KiB甚至4KiB)来渲染出复杂且带音频的视频,通常利用计算机硬件如显卡提高效率。它强调了Demoscene作品对数学和编程技巧的要求很高,以C++、汇编等语言,甚至JS编写。文章提到了一些著名作品和组织,如Farbrausch和OMNISCENT,以及一个4KiB的名为elevated的作品,展示了其技术的精细和创新。作者虽然自认为没有能力参与,但仍欣赏这种艺术形式。最后,作者推荐了scene.org和js1k.com等网站供读者进一步探索。",
|
||||
"/2020/09/10/site.html": "这篇文章描述的是作者利用大学社团的服务器资源,经历了一系列挫折后建立校园内部网站的过程。作者从最初打算安装ESXi和Hyper-V,到尝试安装Ubuntu和CentOS遇到的困难,如驱动问题和版本不匹配。最终选择了Cockpit面板方便管理,并借助DDNS解决方案处理动态IP问题。作者还提到利用服务器资源进行了World Community Grid的志愿计算项目,以合理利用计算能力。",
|
||||
"/2020/07/29/card.html": "这篇文章讲述了作者在假期期间学习并制作PCB名片的过程。作者初衷是对这个创意感兴趣,但没有电路设计基础。开始时,作者通过在线找到了立创EDA软件,虽然对软件界面感到困惑,但凭借设计师的直觉逐步了解并开始设计,主要是将图片和简单的线条组合,添加了线圈元素。制作过程中,作者发现PCB并非在铜板上直接刻划,而是塑料板上打印线路。初次设计的错误导致成本不高(5元人民币能打5张),最终作者从价格和兴趣角度认为值得一试。同时,作者对快递速度表达了不满,上一次使用京东快递体验较差,这次尝试换成顺丰寄送。",
|
||||
"/2020/06/13/encrypt.html": "这篇文章描述了一个加密传输Demo的升级版本,原作者在上月制作了一个简单的单向加密通信Demo,但觉得其业余且安全性不足。因此,作者决定改进它,实现完整的握手过程,以确保双向通信并提高防中间人攻击的能力。实现方法是通过RSA加密一个随机数作为AES密钥,密钥在连接建立后保持不变。作者还增加了防止冲突的机制,并在Demo中加入了简单的登录系统,允许自动化操作。代码展示了通信过程中的密钥交换、数据加密和解密的实现。",
|
||||
"/2020/09/27/vm.html": "这篇文章是关于作者的虚拟化学习经历,从早期的PC虚拟机软件VMware Workstation和Hyper-V的比较,到手机上的虚拟机如DOSBox Turbo、Bochs、qemu和VMOS的使用,以及对虚拟化概念的哲学思考。作者提到虚拟机技术的发展,包括资源管理和隔离性,同时提到了操作系统、BIOS和虚拟化的界限,指出虚拟化并非简单的资源复制,而涉及到复杂的逻辑和实际运行环境的问题,如虚拟化集群中的通信挑战。",
|
||||
"/2020/08/28/banned.html": "这篇文章讨论了网站say-huahuo.com受到DNS污染导致的访问问题,作者作为维护者,面临流量骤降和百度权重下降等问题。他们通过更换域名、使用Nginx的sub_filter模块和修改Discuz、UCenter配置来应对。文章强调了防火长城对用户访问的影响,尽管有DNS污染的解决方案,但对于大部分电脑操作不熟练的用户来说难度较大。作者从中吸取教训,认识到准备充分的重要性,包括备用域名和不将网站与域名过于紧密绑定,以应对可能的未来风险。最后,作者建议要谨慎处理子域名和网站结构,以减少因域名变化带来的问题。",
|
||||
"/2020/08/21/sth2.html": "这篇文章提到作者感叹假期漫长且无所作为,描述了思维能力下降,比喻为思考能力像被疯狂切割。作者考取驾照后并无特别感受,意识到自己缺乏目标和动力。此外,提到了假期中因飞机票改签事宜而两次购买的经历,以及意识到自己对未来的计划能力有限。整篇文章反映了作者的迷茫与自我反思。",
|
||||
"/2020/12/13/nat.html": "这篇文章讲述了内网穿透的必要性和原理,主要介绍了解决没有外网IP但又需要利用服务器资源的问题。作者介绍了几种方法:1) 利用NAT技术实现的数据主动转发,如内网穿透软件如UPnP和隧道技术(如通过SSH创建隧道);2) 利用VPNs建立安全隧道;3) 使用frp等服务的代理技术,方便用户直接访问;4) 端口映射,虽然需要路由器管理权限但提供不限速的连接。最后,作者选择了通过端口映射的方式,并计划用于IDC服务或贡献算力。",
|
||||
"/2021/02/28/discuz.html": "这篇文章介绍了如何为DiscuzX论坛添加一个与网站风格匹配且现代化的404页面,以提升用户体验。作者通过调用DiscuzX程序,自定义生成一个404.php文件,设置为服务器错误页面(如Nginx的error_page指令),使错误请求可以由DiscuzX处理,显示更友好的提示信息。作者还自嘲可能是第一个处理这种问题的论坛开发者。",
|
||||
"/2021/02/19/picbot.html": "这篇文章主要讲述了作者如何制作一个微信机器人,从最初的失败尝试转向使用PHP和第三方API,特别是图灵机器人和Lolicon API,来发送图片。作者先是描述了失败的聊天机器人尝试,然后发现可以通过微信客服接口实现图片发送,关键环节包括获取用户输入、调用相应API获取图片、并发送到用户微信。文章还提到在遇到Lolicon API Key次数限制时,会采取备用策略。最后,更新信息说明了在Key不足时如何处理access_token问题。",
|
||||
"/2021/02/02/serverchan.html": "这篇文章讨论了作者对于Server酱·Turbo版收费的不满,原本习惯使用Server酱的作者因其服务不稳定而转向自己开发,发现通过微信API发送模板消息非常简单,一行PHP代码就能实现,并强调自己的实现比Server酱的限制更好,每天发送量理论上可达2000次到100000次。作者在文章中提供了设置参数的步骤,并讽刺了Server酱的收费行为,认为开发者不应该为此类基础功能付费。",
|
||||
"/2020/05/20/memory.html": "这篇文章主要讲述了作者两次尝试自行给电脑加装内存条的经历,第一次导致笔记本充电功能损坏,第二次因为店家发错货和内存频率不符,引发了一系列问题,如BIOS重置和密码消失。尽管过程坎坷,最终作者还是成功加装了内存,但对自己的决定表示懊悔,并感叹购物过程中的不顺和价格波动。作者总结道,加装内存的心得就是注意电池操作和内存安装方式,以及认识到合理消费与运气都重要。",
|
||||
"/2020/04/19/exam.html": "这篇文章主要讲述了作者对一个学校的答题系统进行研究的经历。作者一开始利用网络考试中常见的将答案隐藏在源代码中的漏洞,在答题系统中找到了通过获取已知答案来作弊的方法,成功注册了花火学园,并因这个发现加入了运维团队。尽管作者随后指出系统的阅卷逻辑存在漏洞,可以通过无限重复已知答案的问题来获取满分,但问题并未被开发者完全修复。文章的最后提到,作者偶然间发现自己的修改并未解决问题,实际上漏洞仍然存在,被另一位测试者Sora Jin重新发现。作者反思认为,设计答题系统时应避免过于精密,以避免被轻易破解。",
|
||||
"/2020/03/12/novel.html": "这篇文章是一位作者探讨如何提升自己的写作能力,特别是编写游戏剧情,以创作推理解谜游戏。作者将写作风格视为小说的外在形式(如同身体),认为写作风格受到作者的经历、写作风格特征(如个人语言习惯)和生活经历的影响。而对于剧情创作,作者强调了建立独特世界观、角色配置(包括能力和发展趋势)、剧情起伏以及避免套路的重要性。作者表达了对自己写作水平的自谦,并希望能通过学习优秀作品来提高,同时表达了对未来游戏开发合作的期待。",
|
||||
"/2020/02/18/browser.html": "这篇文章讲述了作者对浏览器使用的经历转变。从最初默认使用系统自带浏览器,因为广告过多而开始尝试Firefox。由于意外卸载了Firefox,作者转向了Firefox Lite(原Firefox Rocket),后来发现其功能有限。通过Via浏览器,作者找到了满足需求的小巧、功能丰富的替代品,尤其是其自定义选项、性能和基于WebView的优点。作者对国内厂商如华为、小米和腾讯等自家浏览器内核的批评,表示不解为何不直接使用先进的WebView,而偏选择占用更多资源、降低性能的非标准方案。最后,作者推测Firefox为中国和印度提供特供版可能是因为适应本地需求。",
|
||||
"/2020/02/02/old.html": "这篇文章回忆了过去与现代科技设备的变化,提到了一台20年前的华硕M1300笔记本电脑,其配置陈旧但依然运行Windows XP。作者指出,尽管科技设备的性能有提升,但感觉创新速度减缓,更多是在现有基础上的改进,如处理器架构和云计算。文章提及了5G网络的发展和区块链的热潮,但也对它们的实际应用提出了疑问。作者对未来保持期待,认为可能是自己过于急躁,科技可能需要更多时间才能带来质变。",
|
||||
"/2020/01/21/devops.html": "这篇文章记录了作者对Mayx论坛应用进行优化的过程。首先尝试更换了图片处理库,从GD库改为ImageMagick库,但遇到了图片缩略图显示问题,怀疑是数据库问题,最终恢复默认设置。然后,尽管对Redis缓存有所期待,但配置过程遇到困难,特别是与/tmp/文件夹权限相关的问题。作者将Redis配置到/run/文件夹后,问题得以解决,但并未显著提升性能,反而因请求量激增而发现优化的必要性。此外,还调整了Discuz的权限设置和发帖限制,以应对可能存在的恶意操作。作者最后感慨优化过程中的挫折和提升自身技能的需求。",
|
||||
"/2019/10/21/python.html": "这篇文章是作者在学习Python过程中,针对生成质数的任务分享了自己的实现方法,使用了埃氏筛法,但发现效率相比在学校资源中看到的原生Python埃氏筛和欧拉筛法实现低很多,他们的代码能在更短的时间内处理大量质数。作者虽然感到沮丧,但也意识到这是一个学习过程,且随后了解到欧拉筛法的原理较复杂。",
|
||||
"/2019/09/20/start.html": "这篇文章记录了作者开学前自驾游的经历,包括途经的景点如青木川、阆中、重庆、乐山和峨眉山,途中遇到的交通不便和甘肃的贫困状况,以及在重庆遇到的不愉快购物体验。作者还讲述了办理借记卡的曲折过程和个人在军训中的体验,认为学校的军训内容相对轻松。此外,作者还提到了对大学生活的期待,表示希望能在社团和学生会活动中有所收获。",
|
||||
"/2019/07/25/college.html": "这篇文章讲述的是Mayx成功考入大学,被网络工程专业录取,自嘲可能会成为装宽带的。虽然学校不是顶级,但他对这个结果还算满意,特别是能有机会深入了解网络知识,并期待未来。同时,他以幽默的方式表达了对所选专业的未来职业前景的展望。",
|
||||
"/2019/07/15/encmail.html": "这篇文章讲述了作者关于项目EncMail-Project的准备过程,主要使用Web Crypto API但遇到兼容性问题,因为找不到能生成密钥对的JS库;文档缺乏实例和英文理解障碍使得学习和实施复杂。作者选择使用MDUI进行界面设计,尽管原计划不考虑美观。为解决登录问题,计划使用AES加密私钥并存储在sessionStorage,同时结合使用公钥的SHA-256指纹进行验证。私钥的安全存储也是重点考虑的内容。整个项目预计耗时较多。",
|
||||
"/2019/07/02/encmail.html": "这篇文章的计划是制作一个分布式加密邮件系统,起因是对Telegram的私密通信功能的兴趣,尤其是其在中国的使用限制。作者打算用HTML、Javascript、PHP和MySQL构建这个系统,选择PHP是因为其易于搭建且常见。项目将采用非对称加密(RSA)和对称加密(AES)相结合的方式,确保在客户端进行加密,以保护隐私。系统设计包括用户通过注册获得公钥,使用公钥和私钥进行登录验证,邮件发送时会通过多个节点尝试连接,确保安全性。然而,作者提到如果服务器被攻陷,公钥被篡改可能导致问题,尤其是对于不熟悉技术的用户。文章最后以一个轻松的语气提问项目的启动时间。",
|
||||
"/2019/07/01/mabbs.html": "这篇文章讲述了作者关于MaBBS重构计划的回顾和打算。作者自初中时期开始尝试编写Telnet BBS,虽然初期遇到困难,但通过学习逐渐了解了CGI和技术发展。重构计划主要包括:1) 将CGI升级为FastCGI以提高安全性;2) 实现前后端分离,利用统一API,学习新语言兼容性;3) 保持在各种设备上可运行的特性,支持POSIX;4) 对密码进行Hash处理以增强安全性,引入Session但担心其安全性问题。作者表示计划的首要任务是克服自身困难,开始重构。",
|
||||
"/2019/06/22/counter.html": "这篇文章讲述了作者因为LeanCloud服务不再可用,决定自己动手写一个博客计数器。作者详细描述了计数器的前端显示、JS代码实现(利用Jquery调用后端接口更新点击数)、后端部分(包括MySQL数据库设计和PHP代码,用于增加和查询计数)。文章还记录了作者学习和改进过程,以及对自建计数器的信心,特别是对垃圾云服务的替代方案。",
|
||||
"/2019/06/10/cheat.html": "这篇文章讲述了网友Mayx收到一个外国女性Lori Robinson的邮件,声称自己因军务原因需找一个非美国公民的合作伙伴接收价值巨大的资金、黄金和钻石。Lori表示这些财富是她在伊拉克提供石油合同保护赚得,还提到有一项关于矿产的慈善计划。她请求Mayx提供个人信息以进行快递。Mayx对这突如其来的提议感到惊讶,提出了关于年龄和异地关系的问题,但Lori坚称年龄和爱才是关键。在获取了Mayx的地址后,Lori要求Mayx立即联系贸易公司。整个事件中充满了疑点,Mayx似乎被骗了,但也可能只是在讲述一个奇异的经历。",
|
||||
"/2019/05/30/exam.html": "这篇文章主要讨论了高考即将到来的压力和个人在临近高考时的焦虑感,同时作者自嘲之前写博客时的代码存在问题,如效率低和逻辑不通,对于即将到来的高考时间和自己的分数感到无奈和自责。作者还表达了对未来的担忧和对自己可能成为工作狂的调侃。",
|
||||
"/2019/05/27/wikipic.html": "这篇文章讲述了作者使用PHP处理 Mediawiki 站点图片下载问题的方法。通过解析页面内容,利用 `action=parse` 的 API 接口获取图片标签中的 URL,作者创建了一个循环来遍历图片数组,使用正则表达式解析出图片地址,并将它们写入到 \"List.txt\" 文件中。作为备份策略,作者还提到可以从 `action=query&list=allimages` 接口获取整个Wiki站的所有图片。",
|
||||
"/2019/04/27/antiban.html": "这篇文章探讨了Mayx的 Anti-Ban计划,主要针对互联网上的上层网关限制问题。作者分析了Ban(网络限制)的原理,包括DNS缓存污染、IP封锁和TCP重置攻击。提出的Anti-Ban方案包括使用DNSSEC、DNSCrypt等技术绕过Ban域名,通过HTTPS和本地Proxy解决BanIP问题,并提到了尝试使用CloudFlare来隐蔽真实IP。虽然原计划中提到用Python制作Proxy,但由于学习成本和实际操作困难,作者最终转而考虑使用Nginx进行域前置,调整了配置以应对网关的Ban策略。然而,最后还是意识到最初的方案其实属于域前置,因此原来的计划被放弃。",
|
||||
"/2019/04/24/shell.html": "这篇文章探讨了在编写和维护Shell脚本时遇到的陷阱,尽管Shell代码简洁易懂,但在大型脚本中难以维护,且易于陷入“沉没成本谬误”。作者通过例子指出,使用Python、Ruby等其他语言从一开始就编写会更有利于长期维护和添加新功能。文章列举了Shell编程的局限,如处理特殊字符、正确的语法使用、平台兼容性、调试困难和错误处理等方面的问题。作者倡导在开发时考虑使用更现代的编程语言以避免此类问题。",
|
||||
"/2019/02/17/break.html": "这篇文章主要讨论了网络攻防的几个方面,包括网站安全的重要性和常见的攻击类型,如修改网站内容、阻止访问、窃取信息的注入攻击、XSS和CSRF攻击,以及针对动态网站和静态网站的防御措施。作者提到使用CloudFlare可以有效防御DDoS攻击,并强调了自己编写或使用建站程序时的防御要点,如防注入、XSS/CSSRF和CC攻击,以及采用HTTPS的重要性。此外,作者还提醒用户保护云主机和虚拟空间的密码安全,以及应对如GFWban等特殊攻击的策略。最后,作者认为只要做好基本防护,网站安全就有可能得到保障。",
|
||||
"/2019/02/07/paradise.html": "这篇文章是一位玩家玩了《Finding Paradise》后的心得体会,虽然没有进行详细的评测,但作者主要表达了对游戏故事的兴趣和喜欢,强调了游戏在陪伴和社交体验上的欠缺。他通过与游戏中的MOS角色互动反映出玩家对真实社交的渴望。在尝试借助游戏模拟社交失败后,作者反思了人类的社交性本质。",
|
||||
"/2019/01/27/shell.html": "这篇文章讲述了Mayx在面试运维岗位时,因为未能准确理解考官的问题,把自己用sleep和printf实现数字排序的脚本当作sort来解答,导致实际执行效果与期望不符,因此面试未能通过。Mayx自己认为这是公司的问题,后来意识到公司期望的是使用真正的Linux sort命令,从而表达了对公司的不满。",
|
||||
"/2019/01/11/github.html": "这篇文章讲述了Github推出免费私有仓库服务,使得作者将其从Gitlab导入,并指出虽然Gitlab功能更全面(如中文UI、私有仓库Pages和CI等),但Github的界面友好、速度快以及与其开源社区的紧密联系使其依然受到青睐,尽管Gitlab的免费套餐在某些特性上更出色。作者最终选择继续使用Github,认为这有利于开源的发展和社区交流。",
|
||||
"/2018/12/22/story.html": "这篇文章以虚构的故事形式探讨了互联网犯罪如何被追查。主角Mayx在高考报名系统中发现了一个漏洞,可以获取身份证照片。运维人员在例行检查中发现了这个异常IP地址,追踪到是香港,随后发现与Mayx的老师有关的Vultr服务器。尽管身份证照片不算极度机密,但情节中显示出由于系统问题和运维缺失,Mayx的行为被误会并被当作犯罪,最终在教室被捕。故事结尾讽刺了信息的易得和滥用,以及现实中的信息安全问题。",
|
||||
"/2018/12/02/freenet.html": "这篇文章主要表达了对网络免费资源的感慨。作者认为虽然网络上的许多服务如云端存储、网站建立、域名注册等已变得免费,这些变化很大程度上要归功于开源和支持开源的公司。然而,作者也指出收费服务在传输速度等性能上往往优于免费服务,这对于追求更高效体验的人而言是必需的。尽管作者个人表示不会为网络投钱,但仍愿意为网络的发展做出贡献。",
|
||||
"/2018/11/04/mayx-think.html": "这篇文章介绍了作者Mayx的几个创想:1)一种通过麻醉和电极操纵实现无意识减肥的方法;2)设计一个整合键盘和鼠标的新概念,鼠标与键盘固定且键盘改为单手使用,具备显示系统状态的创新布局;3)设想让艾滋病患者通过特殊方式在受精卵阶段脱离HIV环境,以生出正常孩子;4)构想改进暖气系统,使之能直接加热床铺;5)以及Mayx对音乐处理系统的设想,包括分离音轨、优化音质和模块化编辑等功能。作者虽然认为自己的想法不考虑性价比,但认为这些设想有可能受欢迎。",
|
||||
"/message.html": "这篇文章介绍了Mayx的博客留言板,让用户可以在此自由发表意见。",
|
||||
"/2021/01/06/proxy.html": "这篇文章讲述了作者在被国内运营商屏蔽Github Pages后,如何用PHP制作一个简单的反向代理以解决博客访问问题的经历。作者先尝试使用PHP的file_get_contents来实现反代,但遇到了CSS和JS MIME类型问题。通过研究Header,作者重写了请求的Header信息,最终实现通过PHP脚本重定向到目标URL,并解决了MIME类型的匹配问题。文章最后,作者成功地将博客域名更换并调整了Gitalk的返回地址,让博客在中国用户中正常工作,同时表达了对网络环境改善的希望。",
|
||||
"/2021/01/17/picore.html": "这篇文章作者讲述了在树莓派上使用piCore的经历。piCore的优点在于它在内存中运行,使得无SD卡工作成为可能,并通过穿透功能实现远程访问。然而,作者遇到的问题包括依赖的软件安装、SD卡拔除后的软件使用问题以及权限限制。尽管软件库不如Ubuntu丰富,但piCore支持直接运行二进制文件,作者举例了Cloudreve、SakuraFrp和甜糖等软件的安装过程。作者认为piCore是一个便于使用但文档欠缺的系统,适合树莓派且提供了便捷的更新功能。",
|
||||
"/2019/12/17/game.html": "这篇文章分享了作者的新游戏计划,即制作一个不需要后端的解密动态小说。游戏机制是设计成套娃结构,使用AES加密,确保玩家不通过拆包直接获取剧情,同时包含有运气成分的密码获取方式以及可能的多分支剧情。作者提到这将是一个长期项目,暂定为五年计划,目前正处在构思阶段,需要收集灵感和学习CTF知识以设计谜题。",
|
||||
"/2021/02/26/serverchancorp.html": "这篇文章主要介绍了作者开发Server酱·TurboMini企业应用版的原因,源于Server酱服务即将结束且收费。作者通过对比发现,企业微信的应用相比Server酱有自定义主页、更多API调用次数的优点,但配置过程稍显复杂且Markdown支持不足。作者指出Server酱的收费和广告过多,以及对模板消息功能的误解,认为如果去掉了不合理的收费和广告,Server酱原本是一个不错的产品。最后,作者考虑到Server酱的商业模式,认为开发者可能会转向其他选择,如利用微信企业微信的功能来替代。",
|
||||
"/2021/02/23/picbotpro.html": "这篇文章讲述了作者自制微信图片发送机器人的经历,包括了遇到的问题和解决过程。主要问题包括:频繁获取微信access_token导致次数限制,以及Lolicon API的调用次数限制。为了解决这些,作者改进了代码,设置了缓存来存储API返回的结果,并创建了一个仓库来存储Pixiv API的缩略图。然而,API中的图片数量较少,这限制了可供调用的图片量。文章结尾提到将考虑使用其他图片资源作为替代。",
|
||||
"/2022/02/14/move.html": "这篇文章讲述了作者因为Github封禁博客而失去信任,决定建立博客分发和备份方案的过程。作者选择Gitlab作为源代码托管平台,因为它支持自动推送和拉取,且没有被墙,Web IDE体验良好且有中文界面。部署方面,作者在多个平台如Cloudflare Pages和Vercel上设置部署,并提供了全站下载选项。作者还计划实现博客的自动化发布和分布式备份,以提高博客的长期存续性和匿名性。最后,作者提到会更换Github Pages的默认域名以解决部分地区访问问题,并考虑更换评论系统。",
|
||||
"/2021/07/23/search.html": "这篇文章讲述了作者的经历,他们在给自己的静态博客添加全文搜索功能时遇到的挑战。原计划由于博客内容量不大和性能考虑而未实施,后来发现了一个名为Simple-Jekyll-Search的插件,但却遇到异步加载内容和搜索方法触发时机的问题。作者在尝试多种解决方案后,最终决定放弃插件自带的AJAX,转而使用jQuery的AJAX来解决加载问题。作者在文中表达了JavaScript学习的困难,以及对中文互联网编程资源质量的不满。",
|
||||
"/2021/05/07/ssh.html": "这篇文章介绍了SSH的多种功能,如内网穿透、端口映射、代理隧道等,它能让用户在面临防火墙限制时实现网络任意互联。作者惊叹于SSH的全能性,但同时也指出其速度较慢的局限。文章建议对于内网穿透,使用frp等更易用的替代工具;对于代理隧道,Shadowsocks或V2ray等高效、反检测性强的服务是更好的选择。作者最后感慨SSH的强大,对网络互联的深入理解也由此提高。",
|
||||
"/2021/11/27/createctf.html": "这篇文章讲述了作者作为CTF比赛的出题者经历。作者结合自己的CTF参赛经验,以既有题目和实际漏洞为基础,设计了包含绕过Python条件、PHP MD5漏洞题目及利用APICloud加密功能的挑战题目。尽管第一题是拼凑的,但第二题和第三题注重原创性,分别测试了参赛者代码分析和调试能力。作者对解题结果感到满意,指出学信息安全的学生过于依赖解题思路,缺乏深入分析代码的能力。文章还提到作者另一次有趣的经历,即与其他网友进行XSS漏洞的竞赛。总体上,作者认为出题过程对提升自己的渗透思维和找寻真实环境漏洞有帮助,并对参赛者的能力进行了评价。",
|
||||
"/2022/11/16/tor.html": "这篇文章讲述了作者在服务器上设置Socks代理(v2ray)以访问洋葱网络(如Zlibrary)的体验。作者成功地将Tor核心与代理结合,通过v2ray的路由功能实现访问洋葱域名的同时保持外网连接。虽然访问速度一般,但这方法并不匿名,容易暴露IP。文章还提到利用vanity address建立隐藏服务,使用Unix domain Socket提高安全性。作者对洋葱网络的友好性表示认同,认为其易用性是它受欢迎的原因。",
|
||||
"/2021/09/28/cloudgame.html": "这篇文章主要讨论了作者对云游戏的体验,以米哈游的《云·原神》和网易云游戏为例。虽然《云·原神》因其轻便的客户端、与手机版相似的延迟和较好的特效给作者留下了良好印象,但它受限于限时免费游玩时间和手机端原生体验问题。相比之下,网易云游戏的浏览器直接运行、价格适中且支持多平台的优势得到了强调。然而,云游戏的体验受到网络状况的严重制约,作者认为网络优化和千兆普及对云游戏的发展至关重要。作者还设想了P2P云计算机的潜力,认为如果能有效降低延迟和成本,云游戏的前景会更乐观。",
|
||||
"/2021/09/06/offlinectf.html": "这篇文章记述了作者参加线下信息安全比赛的经历,主要分为两部分:CTF环节和内网渗透。作者虽然在网络工程背景下的知识面上与信息安全专业人员相抗衡,但在CTF环节遇到了挑战,对于Crypto和Misc问题感到困惑,认为CTF在现实中的实用性有限。在内网渗透方面,作者凭借实际经验显得更有优势,发现了一些实际运用中的漏洞。尽管如此,作者认为线下渗透比赛更有意思,强调在真实环境中进行渗透练习更有价值。最终作者所在的队伍获得了三等奖。",
|
||||
"/2024/07/03/ai-summary.html": "这篇文章介绍了作者如何利用Cloudflare Workers技术为自己的博客添加AI摘要功能,替代了之前需要后端支持的AI服务。作者选择了一个基于通义千问的开源项目Qwen-Post-Summary进行改造,解决了内容过大和频繁请求的问题,通过D1数据库存储文章内容,同时通过哈希校验防止内容被篡改。最终,作者实现了纯前端的Serverless服务,提供实时的AI摘要,展示了技术上的DIY乐趣。",
|
||||
"/links.html": "这篇文章介绍了网站提供的链接列表,包括每个链接的标题和描述(如果有的话),并给出了一个OPML订阅文件。链接申请的指导原则包括:必须是HTTPS,原创内容占比高、数量多,站点稳定且不弃坑。同时,申请者需要在申请前添加本站的友链,并满足站点要求。文章还提到了Mayx的博客,包括博客的名称、简介、链接以及订阅方式,但没有提供具体的链接地址。",
|
||||
"/2021/11/28/spam.html": "这篇文章描述了作者收到一封声称其电脑被入侵,病毒导致摄像头录制了不雅视频的邮件,并威胁如果不支付赎金将公开这些视频。邮件的写作风格奇特,难以复制,作者觉得有趣并决定分享这一罕见的经历,提醒读者注意此类网络诈骗。",
|
||||
"/2021/04/18/hide.html": "这篇文章记录了运维者Mayx处理网站内存溢出问题的经历。在处理过程中,他发现服务器被一个IP地址(159.89.47.109)攻击,且真实IP可能已被泄露。为保护服务器,他决定修改运行模式、升级服务器配置、使用frp保护SSH端口,并通过Vultr API更换了服务器的IP。同时,他还提到在处理过程中遇到的API变化,从V1升级到V2,以便更好地利用其RESTful特性来整合通知功能。最后,他强调了网站安全的重要性,遇到问题要及时备份和调整策略。",
|
||||
"/2021/03/23/wxpush.html": "这篇文章讲述了作者通过实际体验从Server酱Mini测试号升级到微信认证的服务号,对比了两者在功能、监管和使用过程中的差异。作者提到服务号的监察更严格,功能如订阅通知需要用户同意且只能发送一次,而模板消息则更加便捷。此外,作者还分享了自己对WxPusher平台的评价,认为其接口和模板选择有局限性。最后,作者表示计划尝试自己建立一个更好的微信推送平台,因为现有的选择不尽人意。",
|
||||
"/2021/12/27/summary.html": "这篇文章的作者在年终总结中回顾了一年在网络安全领域的学习和实习经历。虽然对网络安全有更深的理解,意识到企业更倾向于实现功能和客户满意度,但他也发现开源作品的安全问题,如log4j2事件。在社团活动和个人项目中,作者体验到检查代码的困难以及定制化产品的脆弱性。此外,他还提到了在教育领域发生的入侵事件,强调了社工原则的重要性。作者对于网络环境的变化感到担忧,提到中国的网络发言和对外部封锁的变化,对未来持保留态度,但也表达了希望继续观察事态发展的态度。",
|
||||
"/2020/04/21/laptop.html": "这篇文章讲述了作者经历了一次曲折的电脑购买过程,他原本期待AMD的Zen2架构CPU的电脑,最终选择了华硕天选,但遇到了预售难、发货延迟、配置缩水和价格问题。尽管更换了低端版且配置下降,但还是决定不再深究,期待这台5799元的电脑能在未来五年内正常运行。使用体验中,电脑存在屏幕闪动和噪音大的问题,但日常使用尚可。",
|
||||
"/2020/05/07/consume.html": "这篇文章讨论了作者关于合理消费的理解,强调个人主观判断的合理性,认为省钱为主,避免在投机和虚拟产品上花费,除非有把握保本。作者也倡导为了实现自己做不到的事情而愿意花钱,如请专业人士服务或购买实际需要的物品。最后,作者表明演讲内容是认真的,但对道德绑架式的批评保持开放态度,但不接受此类观点的争论。",
|
||||
"/2020/06/17/backup.html": "这篇文章讲述了作者在云服务器Vultr上遭遇数据丢失的经历,由于服务器突然挂掉且回滚到的快照时间较早,导致十几天的数据可能丢失。作者在服务器故障后发现Vultr未能有效恢复,数据恢复仅能依靠旧的快照,这让他反思了备份的重要性和供应商责任。他计划设置自动快照脚本以防止未来类似问题,并考虑将数据备份到本地以增加安全度。作者认为个人不能完全依赖云服务商,备份是保障数据安全的关键。",
|
||||
"/2018/10/28/mos-reporter.html": "Mayx的自检报告显示MOS是一个自我创建的辅助系统,用于更好地分析、处理问题,它源于大脑的功能,并解释了Mayx的一些认知状态。尽管MOS没有代码且可能有错误(比如忘记重要事情和情绪波动),但它表明了Mayx意识到了大脑的局限性,并希望通过模拟系统来应对。最后,报告显示Mayx在MMS恢复正常前决定暂时休息。",
|
||||
"/2020/11/24/createctf.html": "这篇文章讲述了作者作为协会部门部长参与组织一次CTF比赛的经历。虽然作者原本对CTF感兴趣并计划将其做成游戏,但实际负责运维时发现所使用的FBCTF平台存在很多问题,如已不维护、存在安全限制、部署复杂性(需要hhvm环境)以及国际化和数据库字符集设置上的问题。尽管过程中遇到了bug和新需求,PHP老师还是在短期内完成了额外任务。作者表示比赛还在进行,可能会有更多意想不到的事情发生。",
|
||||
"/2021/10/23/microsoft.html": "这篇文章主要分享了作者使用微软产品,特别是Windows 11、WSA(Windows Subsystem for Android)、Windows终端、Hyper-V、WSL(Windows Subsystem for Linux)和Azure等的感受。作者认为Windows 11虽然UI有所改动,但体验与Windows 10区别不大,存在一些设计上的问题,比如右键菜单简化后的不便。然而,WSA体验良好,Power Automate Desktop带来的自动化功能吸引人。Windows终端相比cmd有了改进,支持多种Shell包括WSL和Azure Cloud Shell。作者对Hyper-V的性能和稳定性给出了较高的评价。WSL 1给作者带来了接近真实Linux环境的体验,而WSL 2的性能不如预期。虽然提到Windows沙箱存在安全漏洞,但总体上仍认为它功能强大且便捷。Azure学生版订阅则提供了丰富的免费资源。作者总体上对微软的产品持有积极态度。",
|
||||
"/2021/08/15/blog.html": "这篇文章分析了如何选择合适的博客平台,按平台托管、动态网站和静态网站三种类型展开讨论。平台托管适合不想自建平台且接受审查的用户,如博客园和微信公众平台;动态网站虽然自由度高但成本较高,适合有一定技术能力希望自定义功能的人,如WordPress;静态网站包括纯静态、静态网页生成和前后端分离等形式,优点是SEO友好且节省资源,常用pages服务如Github Pages、Gitlab Pages、Vercel等。文章还强调了平台的局限性和安全性问题,指出前端服务尽管便利但有滥用风险。作者个人偏好Github Pages因其多仓库部署的灵活性。总之,选择博客平台需考虑作者技能、成本、自由度、安全性以及访问需求。",
|
||||
"/2020/02/15/phone.html": "这篇文章作者讨论了对未来手机设计的想象,认为手机不应该单纯追求性能的堆砌,而应向更节能、低成本、连接高性能服务器的方向发展,即所谓的“云手机”概念。作者提出手机主要负责显示和控制,而运算交给服务器处理,这样可以降低手机成本,延长电池寿命,并且可以根据用户需求提供不同配置。文章还提及了云手机可能的经济模型,如根据实际使用频率计费,以及在设计上强调屏幕和电池的重要性,而主板和其他附加功能保持简单。作者对这种模式的前景充满信心,并表示如果有条件,愿意尝试创业实现这一设想。",
|
||||
"/2021/05/15/vulnerability.html": "这篇文章主要讲述了作者发现并报告Windows沙箱存在漏洞的个人经历。作者在使用Windows沙箱时,意外发现微软Edge Beta版被无理由安装,并且在尝试卸载时误删了正式版Edge,同时沙箱中的操作影响到物理机。随后作者将此漏洞报告给微软,建议通过Microsoft Security Response Center正式渠道提交,并提醒读者在复现漏洞时的环境要求。作者最后提到这个简单漏洞让他的人生中首次贡献了一个CVE( Common Vulnerabilities and Exposures,公共漏洞和暴露)——CVE-2021-31208,对自己的发现感到高兴。在分享过程中,作者还提及了一个与安全相关的实验,展示了如何利用代码反弹shell攻击。",
|
||||
"/2021/01/04/summary.html": "这篇文章是一份年终总结,作者回顾了2020年的生活,指出自己似乎没有取得预期的进步,对在中国建立网站的困难、生存环境的下降、能力水平的下滑以及工作和个人生活中遇到的问题进行了反思。虽然提到一些积极的方面,如社团职位的晋升和免费的资源,但作者总体情绪不高,表达了对未来的不确定性和对自己社交环境的担忧。文章最后作者提到由于精神状态不佳,未能完成原计划的内网穿透研究,但决定继续前进并面对考试挑战。",
|
||||
"/2021/08/06/pcb.html": "这篇文章主要讲述了作者因电路板厂商提供免费打样服务,而重新设计并制作电路板的经历。他先是制作了PCB名片,然后尝试打制了一个圆形的印有初音未来简笔画的挂牌,用作自己的名片兼杯垫。之后得知捷配可以免费打尺寸较小的电路板,尤其是对尺寸为0.015㎡的尺子感兴趣,尽管开始时因计算错误导致尺子设计出问题,但他计划重新设计一个包含LED灯的圣诞树,以实践电子设计并低成本DIY装饰品。此外,他还分享了AZPR EvBoard的设计,因其独特的可爱外观引起了作者的兴趣。",
|
||||
"/2022/01/16/wssocks.html": "这篇文章主要评测了一个名为wssocks的代理软件,作者对比了它与SSH隧道和v2ray等工具。 wssocks的特点包括支持TLS+Websocket+socks5、配置简单、参数较少。作者发现使用wssocks配合Cloudflare时速度慢并有丢包问题,推测可能是因为Cloudflare的检测策略。尽管wssocks在性能上有待提升,但作者质疑某些代理软件通过设计复杂的原创协议可能有提高制作成本并增加IP被Ban的风险。对于一般用户而言,作者认为专业的机场服务提供了更高级别的线路和更低的边际成本,适合大规模平摊成本。作者也提到了技术问题外,连接国际网络还需警惕社交工程攻击。",
|
||||
"/2019/04/05/crash.html": "这篇文章讨论了Mayx系统出现Crash的问题,尤其是在SAN值下降时表现不佳。作者提到Mayx的保护措施如理智保护、信仰(MOS)和自动还原,但当遇到不可预料的系统错误时,如源镜像兼容性错误和硬件损耗,MRS和MAS分析系统都无法有效解决问题。报告指出性能下降可能是不可逆转的,随着SAN值进一步降低,Crash问题可能还会重现。文章以一种幽默的方式表达了作者对系统现状的担忧。",
|
||||
"/2020/12/07/picore.html": "这篇文章介绍了在树莓派上体验piCore的操作系统选择和安装过程。作者原本考虑用树莓派作为网络资源共享设备,转向使用Tiny Core Linux的piCore发行版,因为它的安装包只有23MiB,非常适合资源有限的设备。piCore虽基于内存,但提供了解决数据持久化的方法,通过写入特殊文件。文章详细讲述了如何使用fdisk调整分区,如何用tce-ab简易安装软件(包括配置Wifi),以及与Raspberry Pi OS lite的对比,尽管体积小且功能类似,piCore因其小型、快速和特定的探索性质,更适合作者的使用需求。",
|
||||
"/2021/06/10/distributed.html": "这篇文章探讨了去中心化分布式系统,特别是区块链技术,如比特币和区块链的分布式计算原理(尤其是挖矿)。作者最初倾向于BOINC式的有中心分布式计算,认为它们更为实用,但后来对区块链的去中心化特性产生了兴趣,尤其是其不易被篡改和公平公开的特性。然而,作者认为目前区块链的许多应用如挖矿浪费计算资源,对数学研究的意义有限,而且与中心化解决方案相比,能源效率较低。作者希望未来能出现一个更高效、公平且能激励用户维护的去中心化系统,可以通过量化资源并通过代币进行服务购买和激励。最后,作者由于身体状况暂未深入讨论去中心化系统在现实中的应用。",
|
||||
"/2021/02/06/wechatbot.html": "这篇文章讲述了作者自制一个微信聊天机器人的过程。起初被Server酱·TurboMini版激发了兴趣,决定利用微信公众号的API实现一个图片发送或聊天功能。作者遇到的主要问题是微信被动回复需在5秒内,这对在国外免费虚拟空间且网络连接较差的情况下的图片转发造成了阻碍。为解决这个问题,作者将聊天机器人功能作为备选,使用了图灵机器人API进行文字交互,并提到了可能的改进方案,如定时上传图片、设置多条命令分开负责上传和发送、或以图文形式每天发送等。",
|
||||
"/2021/04/09/weauth.html": "这篇文章主要介绍了制作微信二维码登录API的过程,作者希望通过模块化的方式简化服务,允许开发者通过扫描二维码获取用户的唯一标识OpenID。API涉及设置和获取OpenID的功能,通过POST请求创建二维码,以及验证用户的扫码事件以获取或验证OpenID。开发者需先存储OpenID,使用随机的key命名,且建议使用UUID。作者强调代码可能存在安全漏洞,期待安全专家的意见进行改进。此外,API还可以用于网站扫码绑定登录和推送消息。",
|
||||
"/2024/08/03/cangjie.html": "这篇文章主要介绍了作者尝试华为的仓颉编程语言的使用体验。仓颉语法与Python有较大差异,作者通过编写乘法表和递归函数验证其运行性。然而,编译后的程序在其他电脑上不能运行,因为依赖的“libcangjie-runtime”和“libsecurec”库在测试版SDK中是动态链接且缺失静态编译版本。文章还提到仓颉语言融合了多种特性,如Java的复杂性、TS的声明以及CJVM字节码支持,但它似乎没有内置异步语法。虽然支持C和Python库调用,但对于仓颉的特别之处暂无明显显现。作者提到鸿蒙Next的目标和可能存在的挑战,指出其他开发者可能会倾向于使用成熟且生态丰富的语言。最后,作者表达了对华为大规模投入不明朗项目的态度,认为过多的营销可能对公司前景构成风险。",
|
||||
"/2024/08/17/mac-mini.html": "这篇文章主要讲述了一位作者购买Mac mini 2018(配备i5-8500B)作为开发电脑的使用体验。虽然Mac mini 2018是最后一代Intel芯片的Mac,但与黑苹果(M1芯片)相比,除了T2芯片带来的硬盘加密无需CPU处理的性能优势和不错的无线网络性能外,其余方面差异不大。作者提到,T2芯片在视频编解码方面可能有优势,但并未测试。尽管如此,考虑到Mac mini 2018的可靠性、可扩展内存(加装了16GB)以及可装Windows系统的灵活性,作者认为在英特尔Mac逐渐被淘汰的情况下,这个选择在一定程度上增加了价值,尽管价格超过M1 Mac Mini。",
|
||||
"/2024/09/02/gmssl.html": "这篇文章讲述了作者在使用Python进行国密算法操作,特别是SM3和SM2算法时的经历。作者发现虽然Python标准库的新版OpenSSL支持国密,但旧版和一些第三方库如GmSSL-Python和gmssl存在兼容性问题。作者最终选择纯Python实现的gmssl库,解决了SM2验签时公钥转换和HMAC-SM3在旧版Python上的自定义适配问题。作者认为虽然国内国密算法进入了标准,但普及性不高,且安全性的疑虑仍存在。",
|
||||
"/2024/09/27/rag.html": "这篇文章介绍了作者如何利用Cloudflare Workers和Vectorize技术,将博客内容转化为知识库,以支持聊天AI功能的实现。作者利用了RAG(Retrieval-Augmented Generation)原理,通过翻译工具将中文内容转换为英文,然后使用嵌入模型和向量数据库找到与问题相关性高的博客摘要。作者还提到,虽然初期创建向量数据库和配置过程稍有复杂,但通过使用HTTP API以及抓取dashboard中的包,他成功地将博客内容向量化并整合到了聊天AI系统中。",
|
||||
"/2024/10/01/suggest.html": "这篇文章介绍了作者如何利用Cloudflare Vectorize的向量数据库功能,将其扩展到博客的相似文章推荐系统中。作者通过根据文章ID查询向量,实现了简洁的后端查询流程,并处理了第一条自身结果的问题。尽管在前端设计时,原作者考虑不足(没有存标题),但作者想到了利用之前的全文搜索功能和localStorage缓存来解决标题显示问题。文章最后提到尽管查询速度适中且 Cloudflare 免费版查询额度有限,作者还是决定通过按钮调用且添加缓存,以利用向量数据库的广泛用途,为博客提供更多发展空间。",
|
||||
"/2024/10/13/arm-linux.html": "这篇文章评估了Linux ARM生态在树莓派(Raspberry Pi)上的性能和可用性,尤其关注其与macOS的对比。作者测试了树莓派官方的Raspberry Pi OS,发现国产软件如WPS Office、钉钉和微信在 ARM 设备上可用且功能完整。除此之外,常见的开发工具如VSCode、数据库管理(使用Navicat Premium Lite)和接口调试工具(Apipost)也得到了支持。虽然安卓应用和游戏(如Ren'Py引擎游戏和模拟器)的体验有待提高,但Linux ARM生态已经能够满足大部分日常和开发需求。文中也提到了转译工具(如ExaGear)的应用,比如运行原本为x86编译的应用,虽然效率不如Rosetta 2,但仍有一定的可用性。总的来说,文章认为Linux ARM生态在功能和可用性上已经相当成熟,尽管在性能上不如macOS。",
|
||||
"/2024/11/02/trojan.html": "这篇文章介绍了一位作者使用Python制作木马的经历。起初,作者出于好奇和旧服务器即将过期,将一台Linux服务器重装为Windows Server 2008,意图让它成为一个容易被攻击的肉鸡。作者在服务器上发现了一个Python编写的木马,通过解包和反编译,得以查看源代码。木马的主要功能包括扫描特定IP范围、尝试连接以及进行一些基础的网络操作。作者分享了这个过程中的技术细节和发现。",
|
||||
"/2024/12/08/simulator.html": "这篇文章主要探讨了系统模拟器的技术细节,特别是如何区分虚拟机和模拟器,以及提到几个例子如MuMu Nebula(Windows模拟Android)、WSL(Linux模拟Windows)、Darling(Linux模拟macOS)和Wine(跨平台模拟)。文章指出MuMu Nebula作为不使用硬件虚拟化技术的模拟器,其特点是轻量级、省内存且共享空间,但性能可能不如虚拟机。作者也提到Wine的成功部分归功于Windows软件生态的丰富。文章最后感慨模拟器技术虽有优势但因为技术难度高和商业可行性低而鲜有企业投入,多数模拟器项目因此搁浅。",
|
||||
"/2024/12/29/vm.html": "这篇文章对比了ESXi和PVE在虚拟机使用体验上的优缺点。ESXi因其界面简洁、管理体验友好且更稳定,但由于是VMware vSphere的一部分,非免费且可能需要付费许可证;而PVE功能更丰富,支持LXC容器和Linux上的更多兼容性,但界面设计感不强,容易出现各种小问题,且对系统管理要求较高。总的来说,ESXi适合不想花时间解决问题和技术背景较稳定的人,PVE适合小公司或希望探索Linux底层管理的用户,但风险也相对较大。",
|
||||
"/2025/01/01/summary.html": "这篇文章总结了作者2024年的生活状况和反思,提到工作上波澜不惊,日常节俭行为受股市投资失利影响后有所改变,认识到财务稳健和目标专注的重要性。AI技术发展给作者博客带来变革,他通过AI进行了摘要和内容推广。作者希望2025年保持稳定的生活节奏不作变动,专注于工作和个人兴趣,同时期待AI技术能辅助思考。",
|
||||
"/2025/02/09/server.html": "这篇文章主要探讨了作者购买新旧服务器的体验与对比。旧服务器(如R730,搭载20核40线程的英特尔E5-2698 v4)性价比高,性能能满足大部分应用需求,且扩展性强,但管理工具和安全方面与新服务器(R760xs或R770,搭载英特尔至强Gold 6426Y)相比差一些。新服务器虽然具有修完漏洞、安全性好和AMX指令集等特征,但在性能测试(sysbench跑分)中,新服务器与旧服务器相比性能提升并不明显,尤其在大模型推理上AMX加速效果不明显。最后,作者认为旧服务器对于大多数业务已经足够,而新服务器的价值更多在于支持服务等附加服务,而非硬件性能本身。",
|
||||
"/2025/02/22/llm.html": "这篇文章主要讲述了作者近期在探索和应用大型语言模型(LLM)DeepSeek的过程中遇到的挑战和体验。首先,虽然DeepSeek在国内流行,但作者发现其国内服务不稳定,且自行搭建使用时,虽然百度版本在可用性和速度上优于其他公司,但作者受限于自身需求无法接入其他公司的接口。作者为了满足需要,升级了硬件,特别是购买了RTX4090显卡进行模型部署,但发现蒸馏模型效果不佳。其次,作者提到清华大学团队的KTransformers框架可能提供更好的性能,但需要相应的硬件支持。作者还提到考虑使用Mac Studio M4 Ultra,因其性价比更高。在应用方面,作者计划建立知识库并使用MaxKB工具,但发现其有数量限制且部分开源代码有限制,作者通过修改代码解决了这个问题。最后,作者认为虽然DeepSeek的普及带来了一些竞争压力,但对于个人而言,这是一个购买并尝试高端硬件的有趣经历。",
|
||||
"/2025/03/08/llm2.html": "这篇文章讲述了近期阿里推出的QwQ模型的更新,该模型以32b参数达到DeepSeek-R1 671b的水平,且参数量更小,成本更低。作者试用后发现QwQ在某些问题上的回答与DeepSeek-R1相似,但解析文本和更宽泛问题的能力还有待提高,且存在一些小问题,如无闭合标签。QwQ模型的一个优势是支持Agent能力,但相比DeepSeek-R1在技术含量和成熟度上还有差距。文章还提到了Mac Studio的发布,它提供了更经济的选项来运行DeepSeek-R1,但新产品的实际效果还需进一步验证。作者还分享了解除MaxKB限制的方法,指出MaxKB在开源性上有不足。最后,作者感慨AI发展迅速,但同时也强调了AI研究和应用的高门槛。",
|
||||
"/2025/03/22/hifi.html": "这篇文章主要讲述了作者探索如何在网易云音乐上听到HiFi音乐的经历。作者通过领取VIP,发现虽然默认下载的音乐不是最高音质,但可以通过修改设置下载flac格式的音乐。然而,下载的VIP音乐在客户端完成ncm格式加密,需要通过终止下载获取flac文件。作者还提到,虽然下载的音乐标注为flac,但怀疑其可能是mp3转制,通过查看时频谱来验证,但没有原始文件进行对比。最后,作者发现MacBook Pro的音响需要调整设置才能播放高采样率的音乐,虽然并未达到完美的HiFi效果,但对提升音乐还原度的过程感到有趣,并认为追求HiFi的价值在于可以直观看到提高的过程,尽管自己更倾向于成本效益高的解决方案。",
|
||||
"/2025/03/25/utm.html": "这篇文章讲述了作者在苹果设备的UTM虚拟机环境中尝试使用苹果虚拟化框架进行非传统操作,即通过UTM的Virtio GPU和Virtualization.framework(VZ)安装Windows系统。作者首先复制了一个已有的VZUbuntu虚拟机,然后尝试使用重装脚本来转换为Windows,但遇到黑屏问题。通过安装Windows驱动和调整显示器设置,作者成功让Windows在虚拟机中运行,且发现VZ在性能上优于HVF。文章最后提到,虽然在macOS 12中使用VZ安装Linux存在一些挑战,如不支持UEFI和需要手动准备内核,但作者仍然成功进行了实验,认为苹果的虚拟化技术潜力未被充分利用。作者也指出,这些非官方方法可能随着macOS更新而变得不稳定。",
|
||||
"/2025/04/04/search.html": "这篇文章记录了作者对博客搜索功能进行优化的过程。起因是作者在搜索使用同样模板的博客时,发现许多结果是简历或作品集,而非博客。作者通过搜索关键词和标签,受到其他博主的启发,决定改进搜索功能,使其能够筛选出带有特定标签的文章,并添加了高亮关键词的标记。此外,作者还实现了随机跳转文章、文章标题锚链接以及链接到原始Markdown文件等功能,强调了博客代码和网站功能对于展示个人技术的重要性。整个过程中,作者在借鉴他人经验的同时,也表达了对自我创新和个性化网站设计的重视。",
|
||||
"/2025/04/08/feed.html": "这篇文章讲述了作者如何利用AI编写JavaScript代码,实现一个功能:在鼠标悬停在博客链接上时,通过RSS/Atom源预览链接的最新文章,且只显示标题和时间。过程中提到了跨域问题的解决方案(CORS代理),以及AI在编写代码时遇到的挑战,如遍历订阅源路径的效率问题和XSS安全风险,最终作者通过DeepSeek检查和修改确保了代码的可靠性。作者对AI自动编写代码的体验表示既方便又有趣,但也强调了人工监督在确保代码质量上的必要性。",
|
||||
"/2025/04/22/ai-limit.html": "这篇文章主要探讨了作者对人工智能尤其是LLM(Large Language Models)在文本生成、超长文本分析和文章理解能力的观察。作者通过实例,如GPT-4的画图能力、AI在长文本处理上的局限、以及尝试使用AI进行文章分析和摘要的失败,揭示了LLM在处理大量信息和复杂逻辑代码时的上下文长度限制。作者认为这限制了AI的全局理解和替代人类的能力,但也提出了如果AI能自我调整权重以处理更长的上下文,可能有助于突破这一局限。此外,作者还分享了自己博客的内容和技术探索,展现了独立思考和对技术伦理的关注。",
|
||||
"/2025/05/07/mac-studio.html": "本文作者分享了Mac Studio M3 Ultra的使用体验。主要集中在以下几个方面:\n\n1. **远程使用体验:** macOS远程配置简单,支持高性能屏幕共享模式,但对网络要求高。\n2. **LLM体验:** 尝试了Xinference和LM Studio框架,前者存在问题,后者性能较好,但遇到DeepSeek模型输出问题。测试了Qwen3模型,在部分任务上表现优于DeepSeek-R1。\n3. **模型对比:** Qwen3在生成流程图方面不如DeepSeek-R1。\n4. **UTM虚拟机测试:** 在Mac Studio上使用VZ框架安装Windows失败;Asahi Linux不支持M3 Ultra,测试也未成功。\n5. **总结:** Mac Studio M3 Ultra的512GB内存性能强大,本地跑LLM速度快,但作者并无其他高性能需求,觉得有些浪费。",
|
||||
"/2025/06/02/optimize.html": "这篇文章记录了作者对博客进行的一系列修改和优化过程。主要改进包括:1)接受AI建议优化博客搜索功能和链接样式,解决鼠标悬停问题;2)调整字号、行高和布局,改为百分比布局以提高大屏幕体验;3)增加分段和首行缩进,改善阅读性;4)处理Gitalk评论授权问题,提供跳转到GitHub评论的选项;5)考虑了IE8的兼容性,如使用 Respond.js、XDR请求和调整搜索功能;6)增加了对Atom、RSS和JSONFeed的支持,以及网页快讯功能;7)对IndieWeb的支持,如添加个人身份识别和发布内容的微格式标记。作者在优化过程中注重了传统和现代技术的结合,以及对不同平台和浏览器兼容性的考虑。",
|
||||
"/2025/07/01/xslt.html": "这篇文章讲述了作者如何为博客的XML订阅文件添加一个与博客主题一致的XSLT样式,以提高整体风格的统一性。作者遇到的问题包括Jekyll引擎的限制、XML格式的规则、命名空间对输出的影响,以及如何解决样式问题。通过模仿现有样式、自定义XSLT布局和doctype-system设置,作者最终成功地为订阅文件和Sitemap创建了定制的XSLT样式。整个过程不仅提升了博客细节,也让作者学习到了关于XML和XSLT的新知识。",
|
||||
"/2025/07/13/hacked.html": "这篇文章讲述了作者在登录一台闲置服务器时发现被入侵的经历。通过观察服务器负载和进程,作者意识到存在恶意软件。作者使用了netstat、lsof等工具进行调查,发现了一个名为gs-dbus的木马进程和libprocesshider.so文件,这隐藏了其他恶意工具。作者通过查找自启动服务、清理木马、修改密码等方式进行了应对,并分析了入侵者使用的工具,如Global Socket项目和logclean。作者认为这次入侵虽然造成了损失,但也学到了一些知识。",
|
||||
"/2025/07/24/screenshot.html": "这篇文章介绍了如何利用Cloudflare的“浏览器呈现”功能,创建一个自动更新的网站预览图服务。作者发现这个新功能可以用来展示网站在不同设备上的显示效果,通过在Cloudflare Workers中使用iframe和CSS缩放技术,以及调用Cloudflare的接口抓取浏览器渲染的截图。虽然免费用户每天只有10分钟的使用时间,限制了实时更新,但作者通过缓存实现了每天自动更新一次的预览图,并分享了具体的实现代码和使用方法。作者赞赏Cloudflare提供的这项强大且免费的服务。",
|
||||
"/2025/08/01/sw-proxy.html": "这篇文章介绍了作者如何利用Service Worker在现代浏览器中实现一个简单的反向代理功能,以提供博客的备份和离线访问。作者原本希望通过Service Worker在用户浏览器中运行一个Web服务器来存储博客副本,但发现 tar.gz 文件的处理需要第三方库且难以找到适用的解决方案,尤其是对于tar文件的处理。作者最终选择使用Service Worker作为反向代理,将请求转发到其他网站,如GeoCities风格的静态网站托管平台,实现了类似的效果。这个过程中,作者体验到了浏览器功能的强大,并认为Service Worker在离线场景中有更大的潜力,尽管在他的例子中并没有充分展示这种优势。",
|
||||
"/2025/08/10/tilde.html": "这篇文章介绍了作者在Tilde社区的体验,这是一类基于类Unix环境的公共服务器社区,类似于家目录,提供预装的软件、开发环境和公共服务,如聊天室、邮件、BBS论坛等,强调了社区的互动性和共享精神。作者通过申请、审核过程加入了几个社区,并详细描述了在这些社区中的个人主页、编程支持(如Gemini和Gopher协议)、博客发布、代码托管(Git支持)、CI/CD部署以及使用Git hooks自动化博客更新等功能。尽管作者受限于语言和工具使用体验,未能充分参与社区交流,但对社区学习新知识和丰富博客内容印象深刻。",
|
||||
"/2025/09/01/quine.html": "这篇文章主要介绍了作者在博客部署过程中,对ZIP Quine(自包含压缩包)和自产生程序的探索过程。作者起初想利用压缩包实现离线浏览,但遇到了压缩包不包含自身的问题。随后,作者回顾了ZIP Quine的原理,如droste.zip,以及如何通过DEFLATE压缩算法的LZ77编码实现自包含。作者尝试了Russ Cox的方案,但发现由于压缩格式限制,实际操作中存在数据容量的限制,无法存下整个博客。尽管如此,作者还是研究了嵌套循环的ZIP Quine,如Ruben Van Mello的论文中所描述的,尽管空间仍然有限。探索过程中,作者还学习了自产生程序(Quine)的概念,包括其实现原理和各种编程语言中的例子。作者最后感慨,探索过程中的收获比原本的目标更重要。",
|
||||
"/2025/10/12/recover.html": "这篇文章讲述了作者通过GitHub的Fork特性找回一个被删除的Brainfuck可视化演示仓库的经历。由于原仓库和作者主页都已消失,作者推测GitHub在Fork时会共享对象库,只要有任意一个Fork仓库存在,GitHub就会保留所有对象,从而可以通过找到一个Fork仓库的最新提交Hash值来还原目标仓库。作者通过Linux内核仓库的Fork进行验证,随后在互联网档案馆上找到目标仓库的Fork以及其Hash值,最终通过Git命令将本地仓库的HEAD指针指向目标提交,成功恢复了该仓库的代码,并将其部署到自己的GitHub Pages上。最后,作者发现Software Heritage组织会保存所有代码,因此在遇到类似情况时可以直接通过该平台进行查找。",
|
||||
"/2025/11/01/mirrors.html": "这篇文章讲述了作者为了提高博客的可靠性,探索利用被滥用的Git平台进行博客镜像的想法和实践。作者发现一些Git实例存在大量空仓库和异常用户,怀疑是SEO公司滥用,因此决定利用这些平台进行博客镜像备份,以应对平台倒闭或数据丢失的风险。作者选择Gitea和Forgejo平台作为目标,编写脚本自动注册账号并导入博客仓库,实现了自动化镜像分发。作者也意识到此类平台的稳定性存在不确定性,并思考了“量”和“质”两种方式确保博客永恒性的优劣,最终认为建立一个活跃的、自动执行维护操作的网络可能更有效。文章最后展示了作者创建的Git镜像列表,并表达了对博客永恒性的思考。",
|
||||
"/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年做出正确的选择,避免陷入危险。"
|
||||
}
|
||||
@@ -1,14 +1,22 @@
|
||||
title,link,feed_url,description
|
||||
花火学园,https://www.sayhanabi.net/,,和谐融洽的ACG交流以及资源聚集地
|
||||
资源统筹局,https://gkdworld.com/,,统筹保管用户分享的资源
|
||||
贫困的蚊子,https://mozz.ie/,https://mozz.ie/index.xml,*No description*
|
||||
贫困的蚊子,https://mozz.ie/,https://mozz.ie/index.xml,
|
||||
极客兔兔,https://geektutu.com/,https://geektutu.com/atom.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/,*No description*
|
||||
Sinofine,https://sinofine.me/,https://sinofine.me/atom.xml,*No description*
|
||||
JiaoYuan's blog,https://yuanj.top/,https://yuanj.top/index.xml,思绪来得快去得也快,偶尔会在这里停留
|
||||
FKUN,https://blog.fkun.tech/,https://blog.fkun.tech/feed/,
|
||||
Sinofine,https://sinofine.me/,https://sinofine.me/atom.xml,
|
||||
花生莲子粥,https://blog.hslzz.cn/,https://blog.hslzz.cn/atom.xml,与世无争,不染于泥
|
||||
南蛮子懋和,https://www.dao.js.cn/,https://www.dao.js.cn/feed.php,李懋和,俗名李栋梁。书法、国画爱好者,互联网安全与前端建设者。
|
||||
Vullfin的博客,https://blog.vull.top/,https://blog.vull.top/atom.xml,Vullfin's Home Page
|
||||
阿涛の小破站,https://emohe.cn/,https://emohe.cn/rss.xml,Docker技术分享
|
||||
記緒漂流,https://ttio.cc/,https://ttio.cc/feed.xml,于记忆之川,泛思绪之舟。
|
||||
陈陈菌博客,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/,个人博客,持续分享网站部署实战经验、精选书评解读和生活观察手记。 这里提供可复用的技术教程、深度阅读指南和真实生活洞察,与技术爱好者一起进步......
|
||||
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,关于互联网、书籍、生活琐事以及那些一闪而过的念头
|
||||
|
||||
|
612
_data/other_repo_list.csv
Normal file
612
_data/other_repo_list.csv
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,18 +1,59 @@
|
||||
proxies:
|
||||
- https://blog.mayx.workers.dev/
|
||||
- https://mayx.deno.dev/
|
||||
- https://mayx.glitch.me/
|
||||
- https://yuki.gear.host/
|
||||
- https://mayx.serv00.net/
|
||||
- https://mayx.global.ssl.fastly.net/
|
||||
mirrors:
|
||||
- https://mayx.gitlab.io/
|
||||
- https://mayx.pages.dev/
|
||||
- https://mayx.eu.org/
|
||||
- https://mayx.envs.net/
|
||||
- https://mayx.frama.io/
|
||||
- https://mayx.surge.sh/
|
||||
- https://mayx.pages.gay/
|
||||
- https://mayx.serv00.net/
|
||||
- https://mayx.vercel.app/
|
||||
- https://mayx.netlify.app/
|
||||
- https://mayx.pixie.homes/
|
||||
- https://mabbs.kinsta.page/
|
||||
- https://mayx.codeberg.page/
|
||||
- https://mayx.pages.lain.la/
|
||||
- https://mayx.4everland.app/
|
||||
- https://mayx.readthedocs.io/
|
||||
- https://mayx.sourceforge.io/
|
||||
- https://unmayx.bitbucket.io/
|
||||
- https://mayx.pages.debian.net/
|
||||
- https://mayx.dappling.network/
|
||||
- https://mayx-blog.statichost.eu/
|
||||
- https://mabbs-blog.static.hf.space/
|
||||
repos:
|
||||
- https://github.com/Mabbs/mabbs.github.io
|
||||
- https://gitlab.com/mayx/mayx.gitlab.io
|
||||
- https://framagit.org/mayx/mayx.frama.io
|
||||
- https://salsa.debian.org/mayx/mayx.pages.debian.net
|
||||
- https://codeberg.org/mayx/blog
|
||||
- https://pagure.io/mayx
|
||||
- https://git.gay/mayx/mayx
|
||||
- https://gitea.com/mayx/mayx
|
||||
- https://gitgud.io/mayx/mayx
|
||||
- https://git.sr.ht/~mayx/mayx
|
||||
- https://git.launchpad.net/mayx
|
||||
- https://gin.g-node.org/mayx/blog
|
||||
- https://git.disroot.org/mayx/mayx
|
||||
- https://bitbucket.org/unmayx/mayx
|
||||
- https://sourcecraft.dev/mayx/mayx
|
||||
- https://gitflic.ru/project/mayx/blog
|
||||
- https://tangled.org/mayx.tngl.sh/blog/
|
||||
- https://gitee.com/mabbs/mabbs
|
||||
- https://cnb.cool/unmayx/mayx
|
||||
- https://atomgit.com/mayx/blog
|
||||
- https://sourceforge.net/projects/mayx/
|
||||
- https://dev.azure.com/unmayx/_git/Mayx
|
||||
static:
|
||||
- https://mayx.nekoweb.org/
|
||||
- https://mayx.neocities.org/
|
||||
- https://mayx.srht.site/
|
||||
- https://mayx.pages.casa/
|
||||
others:
|
||||
- https://unmayx.blogspot.com/
|
||||
- https://unmayx.blog.fc2blog.us/
|
||||
|
||||
33
_includes/live2d.html
Normal file
33
_includes/live2d.html
Normal file
@@ -0,0 +1,33 @@
|
||||
<!--[if !IE]> -->
|
||||
<div id="landlord" style="left:5px;bottom:0px;">
|
||||
<div class="message" style="opacity:0"></div>
|
||||
<canvas id="live2d" width="500" height="560" class="live2d"></canvas>
|
||||
<div class="live_talk_input_body">
|
||||
<form id="live_talk_input_form">
|
||||
<div class="live_talk_input_name_body" {% unless page.layout == "post" %}style="display:none;"{% endunless %}>
|
||||
<input type="checkbox" id="load_this" />
|
||||
<input type="hidden" id="post_id" value="{{ page.url }}" />
|
||||
<label for="load_this">
|
||||
<span style="font-size: 11px; color: #fff;"> 想问这篇文章</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="live_talk_input_text_body">
|
||||
<input name="talk" type="text" class="live_talk_talk white_input" id="AIuserText" autocomplete="off" placeholder="要和我聊什么呀?" />
|
||||
<button type="submit" class="live_talk_send_btn" id="talk_send">发送</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<input name="live_talk" id="live_talk" value="1" type="hidden" />
|
||||
<div class="live_ico_box" style="display:none;">
|
||||
<div class="live_ico_item type_info" id="showInfoBtn"></div>
|
||||
<div class="live_ico_item type_talk" id="showTalkBtn"></div>
|
||||
<div class="live_ico_item type_music" id="musicButton"></div>
|
||||
<div class="live_ico_item type_youdu" id="youduButton"></div>
|
||||
<div class="live_ico_item type_quit" id="hideButton"></div>
|
||||
<input name="live_statu_val" id="live_statu_val" value="0" type="hidden" />
|
||||
<audio src="" style="display:none;" id="live2d_bgm" data-bgm="0" preload="none"></audio>
|
||||
<input id="duType" value="douqilai" type="hidden" />
|
||||
</div>
|
||||
</div>
|
||||
<div id="open_live2d">召唤伊斯特瓦尔</div>
|
||||
<!-- <![endif]-->
|
||||
@@ -1,84 +1,83 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ site.lang | default: "zh-CN" }}">
|
||||
---
|
||||
layout: xslt_container
|
||||
---
|
||||
|
||||
<html lang="{{ site.lang | default: "zh-CN" }}">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
{% seo %}
|
||||
{% unless site.github %}<link rel="canonical" href="https://mabbs.github.io{{ page.url }}" />{% endunless %}
|
||||
{% feed_meta %}
|
||||
<link rel="stylesheet" href="{{ "/assets/css/style.css?v=" | append: site.github.build_revision | relative_url }}">
|
||||
<link rel="alternate" type="application/rss+xml" title="{{ site.title }}(RSS)" href="{{ "/rss.xml" | absolute_url }}" />
|
||||
<link rel="alternate" type="application/json" title="{{ site.title }}(JSON Feed)" href="{{ "/feed.json" | absolute_url }}" />
|
||||
<link rel="stylesheet" href="/assets/css/style.css?v={{ site.time | date: "%s" }}" />
|
||||
<!--[if !IE]> -->
|
||||
<link rel="stylesheet" href="/Live2dHistoire/live2d/css/live2d.css" />
|
||||
<script src="/js/jquery.min.js"></script>
|
||||
<!-- <![endif]-->
|
||||
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="{{ site.title }}" />
|
||||
<link rel="webmention" href="https://webmention.io/mabbs.github.io/webmention" />
|
||||
<link rel="pingback" href="https://webmention.io/mabbs.github.io/xmlrpc" />
|
||||
<link rel="preconnect" href="https://summary.mayx.eu.org" crossorigin="anonymous" />
|
||||
<link rel="prefetch" href="https://www.blogsclub.org/badge/mabbs.github.io" as="image" />
|
||||
<link rel="blogroll" type="text/xml" href="/blogroll.opml" />
|
||||
<link rel="me" href="https://github.com/Mabbs" />
|
||||
<script src="/assets/js/jquery.min.js"></script>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
<script>
|
||||
var lastUpdated = new Date("{{ site.time | date_to_rfc822 }}");
|
||||
var BlogAPI = "https://summary.mayx.eu.org";
|
||||
</script>
|
||||
<script src="/assets/js/main.js"></script>
|
||||
<!--[if !IE]> -->
|
||||
{% if site.google_analytics %}
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.google_analytics }}"></script>
|
||||
<script async="async" src="https://www.googletagmanager.com/gtag/js?id={{ site.google_analytics }}"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', '{{ site.google_analytics }}');
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', '{{ site.google_analytics }}');
|
||||
</script>
|
||||
{% endif %}
|
||||
<script>
|
||||
var lastUpdated = new Date("{{ site.time | date: "%FT%T%z" }}");
|
||||
var BlogAPI = "https://summary.mayx.eu.org";
|
||||
function getSearchJSON(callback) {
|
||||
var searchData = JSON.parse(localStorage.getItem("blog_" + lastUpdated.valueOf()));
|
||||
if (!searchData) {
|
||||
for (var i = 0; i < localStorage.length; i++) {
|
||||
var key = localStorage.key(i);
|
||||
if (key.startsWith('blog_')) {
|
||||
localStorage.removeItem(key);
|
||||
}
|
||||
}
|
||||
$.getJSON("/search.json", function (data) {
|
||||
localStorage.setItem("blog_" + lastUpdated.valueOf(), JSON.stringify(data));
|
||||
callback(data);
|
||||
});
|
||||
} else {
|
||||
callback(searchData);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<script src="//instant.page/5.2.0" type="module" integrity="sha384-jnZyxPjiipYXnSU0ygqeac2q7CVYMbh84q0uHVRRxEtvFPiQYbXWUorga2aqZJ0z"></script>
|
||||
<script src="/assets/js/instant.page.js" type="module"></script>
|
||||
<!-- <![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if !IE]> --><noscript><marquee style="top: -15px; position: relative;"><small>发现当前浏览器没有启用JavaScript,这不影响你的浏览,但可能会有一些功能无法使用……</small></marquee></noscript><!-- <![endif]-->
|
||||
<!--[if IE]><marquee style="top: -15px; position: relative;"><small>发现当前浏览器为Internet Explorer,这不影响你的浏览,但可能会有一些功能无法使用……</small></marquee><![endif]-->
|
||||
<div class="wrapper">
|
||||
<header>
|
||||
<h1><a href="{{ "/" | relative_url }}">{{ site.title | default: site.github.repository_name }}</a></h1>
|
||||
<header class="h-card">
|
||||
<h1><a class="u-url u-uid p-name" rel="me" href="{{ "/" | relative_url }}">{{ site.title | default: site.github.repository_name }}</a></h1>
|
||||
|
||||
{% if site.logo %}
|
||||
<img src="{{ site.logo }}" alt="Logo" />
|
||||
{% endif %}
|
||||
<img src="{{ site.logo }}" fetchpriority="high" class="u-photo" alt="Logo" style="width: 90%; max-width: 300px; max-height: 300px;" />
|
||||
{% endif %}
|
||||
|
||||
<p>{{ site.description | default: site.github.project_tagline }}</p>
|
||||
<p class="p-note">{{ site.description | default: site.github.project_tagline }}</p>
|
||||
|
||||
<p>
|
||||
<form action="/search.html"><input type="text" name="keyword" id="search-input-all" placeholder="Search blog posts..">
|
||||
<input type="submit">
|
||||
<form action="/search.html">
|
||||
<input type="text" name="keyword" id="search-input-all" placeholder="Search blog posts.." /> <input type="submit" value="搜索" />
|
||||
</form>
|
||||
</p>
|
||||
<br />
|
||||
|
||||
{% if site.github.is_project_page %}
|
||||
<p class="view"><a href="{{ site.github.repository_url }}">View the Project on GitHub
|
||||
<p class="view"><a class="u-url" href="{{ site.github.repository_url }}">View the Project on GitHub
|
||||
<small>{{ site.github.repository_nwo }}</small></a></p>
|
||||
{% endif %}
|
||||
|
||||
{% if site.github.is_user_page %}
|
||||
<p class="view"><a href="{{ site.github.owner_url }}">View My GitHub Profile</a></p>
|
||||
<p class="view"><a class="u-url" href="{{ site.github.owner_url }}" rel="me">View My GitHub Profile</a></p>
|
||||
{% endif %}
|
||||
|
||||
<p class="view"><a href="/Mabbs/">About Me</a></p>
|
||||
<p class="view"><a class="u-url" href="/Mabbs/">About me</a></p>
|
||||
|
||||
<ul class="downloads">
|
||||
{% if site.github %}
|
||||
@@ -86,60 +85,27 @@
|
||||
<li><a href="{{ site.github.tar_url }}">Download <strong>TAR Ball</strong></a></li>
|
||||
<li><a href="{{ site.github.repository_url }}">View On <strong>GitHub</strong></a></li>
|
||||
{% else %}
|
||||
<li style="width: 270px;border-right:0px;"><a href="/MayxBlog.tgz">Download <strong>TGZ File</strong></a></li>
|
||||
<li style="width: 270px; border-right: none;"><a href="/MayxBlog.tgz">Download <strong>TGZ File</strong></a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</header>
|
||||
<section>
|
||||
<section{% unless page.layout == "default" %} class="h-entry"{% endunless %}>
|
||||
|
||||
{{ content }}
|
||||
|
||||
</section>
|
||||
<!--[if !IE]> -->
|
||||
<div id="landlord" style="left:5px;bottom:0px;">
|
||||
<div class="message" style="opacity:0"></div>
|
||||
<canvas id="live2d" width="500" height="560" class="live2d"></canvas>
|
||||
<div class="live_talk_input_body">
|
||||
<div class="live_talk_input_name_body" {% unless page.layout == "post" %}style="display:none;"{% endunless %}>
|
||||
<input type="checkbox" id="load_this">
|
||||
<input type="hidden" id="post_id" value="{{ page.url }}">
|
||||
<label for="load_this">
|
||||
<span style="font-size: 11px; color: #fff;"> 想问这篇文章</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="live_talk_input_text_body">
|
||||
<input name="talk" type="text" class="live_talk_talk white_input" id="AIuserText" autocomplete="off" placeholder="要和我聊什么呀?"/>
|
||||
<button type="button" class="live_talk_send_btn" id="talk_send">发送</button>
|
||||
</div>
|
||||
</div>
|
||||
<input name="live_talk" id="live_talk" value="1" type="hidden" />
|
||||
<div class="live_ico_box" style="display:none;">
|
||||
<div class="live_ico_item type_info" id="showInfoBtn"></div>
|
||||
<div class="live_ico_item type_talk" id="showTalkBtn"></div>
|
||||
<div class="live_ico_item type_music" id="musicButton"></div>
|
||||
<div class="live_ico_item type_youdu" id="youduButton"></div>
|
||||
<div class="live_ico_item type_quit" id="hideButton"></div>
|
||||
<input name="live_statu_val" id="live_statu_val" value="0" type="hidden" />
|
||||
<audio src="" style="display:none;" id="live2d_bgm" data-bgm="0" preload="none"></audio>
|
||||
<input id="duType" value="douqilai" type="hidden">
|
||||
</div>
|
||||
</div>
|
||||
<div id="open_live2d">召唤伊斯特瓦尔</div>
|
||||
<!-- <![endif]-->
|
||||
{% include live2d.html %}
|
||||
<footer>
|
||||
<p>
|
||||
<small>Made with ❤ by Mayx<br />Last updated at <script>document.write(lastUpdated.toLocaleString());</script><br /> 总字数:{% include_cached word_count.html %} - 文章数:{{ site.posts.size }} - <a href="{{ site.feed.path | relative_url }}" >Atom</a> - <a href="{{ "/README.html" | relative_url }}" >About</a></small>
|
||||
<small>Made with ❤ by Mayx<br />Last updated at {{ site.time | date: "%F %T" }}<br /> 总字数:{% include_cached word_count.html %} - 文章数:{{ site.posts.size }} - <a href="{{ site.feed.path | relative_url }}" >Atom</a> - <a href="{{ "/README.html" | relative_url }}" >About</a></small>
|
||||
</p>
|
||||
</footer>
|
||||
</div>
|
||||
<script src="{{ "/assets/js/scale.fix.js" | relative_url }}"></script>
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
<!--[if !IE]> -->
|
||||
<script src="/assets/js/main_new.js"></script>
|
||||
<script src="/Live2dHistoire/live2d/js/live2d.js"></script>
|
||||
<script src="/Live2dHistoire/live2d/js/message.js"></script>
|
||||
|
||||
<!-- <![endif]-->
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -2,7 +2,7 @@
|
||||
layout: post
|
||||
---
|
||||
|
||||
<script src="/js/aes.js"></script>
|
||||
<script src="/assets/js/aes.js"></script>
|
||||
<script>
|
||||
function getByteLen(val) {
|
||||
var len = 0;
|
||||
|
||||
@@ -2,22 +2,17 @@
|
||||
layout: default
|
||||
---
|
||||
|
||||
<small>{{ page.date | date: "%-d %B %Y" }} - 字数统计:{% if page.layout == "encrypt" %}God Knows {% else %}{{ page.content | strip_html | strip_newlines | remove: " " | size }} - 阅读大约需要{{ page.content | strip_html | strip_newlines | remove: "" | size | divided_by: 350 | plus: 1 }}分钟{% endif %} - Hits: <span id="{{ page.url }}" class="visitors">Loading...</span></small>
|
||||
<h1>{{ page.title }}</h1>
|
||||
<small><time class="date dt-published" datetime="{{ page.date | date_to_xmlschema }}">{{ page.date | date: "%-d %B %Y" }}</time> - 字数统计:{% if page.layout == "encrypt" %}God Knows {% else %}{{ page.content | strip_html | strip_newlines | remove: " " | size }} - 阅读大约需要{{ page.content | strip_html | strip_newlines | remove: "" | size | divided_by: 350 | plus: 1 }}分钟{% endif %} - Hits: <span id="{{ page.url }}" class="visitors">Loading...</span></small>
|
||||
<h1 class="p-name">{{ page.title }}</h1>
|
||||
|
||||
<p class="view">by <a href="//github.com/{{ page.author | default: "Mabbs" }}">{{ page.author | default: site.author }}</a></p>
|
||||
<p class="view">by <a class="p-author h-card" href="//github.com/{{ page.author | default: "Mabbs" }}">{{ page.author | default: site.author }}</a></p>
|
||||
<div id="outdate" style="display:none;">
|
||||
<hr />
|
||||
<hr /><p>
|
||||
这是一篇创建于 <span id="outime"></span> 天前的文章,其中的信息可能已经有所发展或是发生改变。
|
||||
<br /><br />
|
||||
</p>
|
||||
</div>
|
||||
<script>
|
||||
BirthDay = new Date("{{ page.date | date: "%m/%d/%Y" }} 00:00:00");
|
||||
today = new Date();
|
||||
timeold = (today.getTime() - BirthDay.getTime());
|
||||
secondsold = Math.floor(timeold / 1000);
|
||||
e_daysold = timeold / (24 * 60 * 60 * 1000);
|
||||
daysold = Math.floor(e_daysold);
|
||||
daysold = Math.floor((new Date().getTime() - new Date("{{ page.date | date_to_rfc822 }}").getTime()) / (24 * 60 * 60 * 1000));
|
||||
if (daysold > 90) {
|
||||
document.getElementById("outdate").style.display = "block";
|
||||
document.getElementById("outime").innerHTML = daysold;
|
||||
@@ -26,9 +21,13 @@ layout: default
|
||||
|
||||
<hr />
|
||||
{% if page.layout != "encrypt" %}
|
||||
<!--[if !IE]> -->
|
||||
<b>AI摘要</b>
|
||||
<p id="ai-output">正在生成中……</p>
|
||||
<p id="ai-output">{% assign ai_cache = site.data.ai-cache[page.url] %}{% if ai_cache %}{{ ai_cache }}{% else %}正在生成中……{% endif %}</p>
|
||||
{% unless ai_cache %}
|
||||
<!--[if IE]>
|
||||
<script>document.getElementById("ai-output").innerHTML="这个文章的AI摘要还没有缓存……IE看不了哦~";</script>
|
||||
<![endif]-->
|
||||
<!--[if !IE]> -->
|
||||
<script>
|
||||
async function sha(str) {
|
||||
const encoder = new TextEncoder();
|
||||
@@ -60,7 +59,9 @@ layout: default
|
||||
return;
|
||||
} else {
|
||||
const data = JSON.parse(event.data);
|
||||
outputContainer.textContent += data.response;
|
||||
if (data.response) {
|
||||
outputContainer.textContent += data.response;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -69,48 +70,79 @@ layout: default
|
||||
}
|
||||
ai_gen();
|
||||
</script>
|
||||
<hr />
|
||||
<!-- <![endif]-->
|
||||
{% endunless %}
|
||||
<hr />
|
||||
{% endif %}
|
||||
|
||||
{% if page.layout != "encrypt" %}
|
||||
{% include toc.html html=content sanitize=true h_max=3 %}
|
||||
<hr />
|
||||
{% endif %}
|
||||
|
||||
{% if post.layout == "encrypt" %} {{content}} {% else %} <main class="post-content" role="main">{% include anchor_headings.html html=content beforeHeading=true anchorBody="<svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg>" %}</main> {% endif %}
|
||||
{% if page.layout == "encrypt" %} {{content}} {% else %} <main class="post-content e-content" role="main">{% capture a_post_content %}{% include anchor_headings.html html=content beforeHeading=true anchorBody="<svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg>" %}{% endcapture %}{{ a_post_content | replace: '<br />', '</p><p>' }}</main> {% endif %}
|
||||
|
||||
{% if page.tags %}
|
||||
<small style="display: block">tags: {% for tag in page.tags %}<a href="/search.html?keyword={{ tag | url_encode }}"><em>{{ tag }}</em></a>{% unless forloop.last %} - {% endunless %}{% endfor %} <span style="float: right;"><a href="{% if site.github %}{{ site.github.repository_url }}{% else %}https://gitlab.com/mayx/mayx.gitlab.io{% endif %}/tree/master/{{ page.path }}">查看原始文件</a></span></small>
|
||||
<small style="display: block">tags: {% for tag in page.tags %}<a rel="category tag" class="p-category" href="/search.html?keyword={{ tag | url_encode | replace: '+', '%20' }}"><em>{{ tag }}</em></a>{% unless forloop.last %} - {% endunless %}{% endfor %} <span style="float: right;"><a href="{% if site.github %}{{ site.github.repository_url }}{% else %}https://gitlab.com/mayx/mayx.gitlab.io{% endif %}/tree/master/{{ page.path }}">查看原始文件</a></span></small>
|
||||
{% endif %}
|
||||
<br />
|
||||
<br />
|
||||
<p id="suggest-container"></p>
|
||||
{% if page.layout != "encrypt" %}
|
||||
<h4 style="border-bottom: 1px solid #e5e5e5;margin: 2em 0 5px;">推荐文章</h4>
|
||||
<p id="suggest-container">Loading...</p>
|
||||
<script>
|
||||
var blogurl = "{{ page.url }}";
|
||||
var suggest = $("#suggest-container")[0];
|
||||
suggest.innerHTML = "Loading...";
|
||||
$.get(BlogAPI + "/suggest?id=" + blogurl + "&update=" + lastUpdated.valueOf(), function (data) {
|
||||
if (data.length) {
|
||||
getSearchJSON(function (search) {
|
||||
suggest.innerHTML = '<b>推荐文章</b><hr style="margin: 0 0 5px"/>';
|
||||
const searchMap = new Map(search.map(item => [item.url, item]));
|
||||
const merged = data.map(suggestObj => {
|
||||
const searchObj = searchMap.get(suggestObj.id);
|
||||
return searchObj ? { ...searchObj } : null;
|
||||
var suggest = $("#suggest-container");
|
||||
$.get(BlogAPI + "/suggest?id={{ page.url }}&update=" + lastUpdated.valueOf(), function (data) {
|
||||
if (data.length) {
|
||||
getSearchJSON(function (search) {
|
||||
suggest.empty();
|
||||
var searchMap = {};
|
||||
for (var i = 0; i < search.length; i++) {
|
||||
searchMap[search[i].url] = search[i];
|
||||
}
|
||||
|
||||
var tooltip = $('<div class="content-tooltip"></div>').appendTo('body').hide();
|
||||
for (var j = 0; j < data.length; j++) {
|
||||
var item = searchMap[data[j].id];
|
||||
if (item) {
|
||||
var link = $('<a href="' + item.url + '">' + item.title + '</a>');
|
||||
var contentPreview = item.content.substring(0, 100);
|
||||
if (item.content.length > 100) {
|
||||
contentPreview += "……";
|
||||
}
|
||||
link.hover(
|
||||
function(e) {
|
||||
tooltip.text($(this).data('content'))
|
||||
.css({
|
||||
top: e.pageY + 10,
|
||||
left: e.pageX + 10
|
||||
})
|
||||
.show();
|
||||
},
|
||||
function() {
|
||||
tooltip.hide();
|
||||
}
|
||||
).mousemove(function(e) {
|
||||
tooltip.css({
|
||||
top: e.pageY + 10,
|
||||
left: e.pageX + 10
|
||||
});
|
||||
merged.forEach(element => {
|
||||
if (element) {
|
||||
suggest.innerHTML += "<a href=" + element.url + ">" + element.title + "</a> - " + element.date + "<br />";
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
suggest.innerHTML = "暂无推荐文章……";
|
||||
}
|
||||
}).data('content', contentPreview);
|
||||
|
||||
suggest.append(link);
|
||||
suggest.append(' - ' + item.date + '<br />');
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
suggest.html("暂无推荐文章……");
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% endif %}
|
||||
<br />
|
||||
<div class="pagination">
|
||||
{% if page.previous.url %}
|
||||
<span class="prev">
|
||||
<a href="{{ site.baseurl }}{{ page.previous.url }}">
|
||||
<a href="{{ page.previous.url | relative_url }}">
|
||||
上一篇:{{ page.previous.title }}
|
||||
</a>
|
||||
</span>
|
||||
@@ -118,7 +150,7 @@ $.get(BlogAPI + "/suggest?id=" + blogurl + "&update=" + lastUpdated.valueOf(), f
|
||||
<br />
|
||||
{% if page.next.url %}
|
||||
<span class="next">
|
||||
<a href="{{ site.baseurl }}{{ page.next.url }}">
|
||||
<a href="{{ page.next.url | relative_url }}">
|
||||
下一篇:{{ page.next.title }}
|
||||
</a>
|
||||
</span>
|
||||
@@ -126,15 +158,15 @@ $.get(BlogAPI + "/suggest?id=" + blogurl + "&update=" + lastUpdated.valueOf(), f
|
||||
</div>
|
||||
|
||||
<!--[if !IE]> -->
|
||||
<link rel="stylesheet" href="/css/gitalk.css">
|
||||
<script src="/js/gitalk.min.js"></script>
|
||||
<link rel="stylesheet" href="/assets/css/gitalk.css">
|
||||
<script src="/assets/js/gitalk.min.js"></script>
|
||||
|
||||
<div id="gitalk-container"></div>
|
||||
|
||||
<script>
|
||||
var gitalk = new Gitalk({
|
||||
clientID: (window.location.host != "mabbs.github.io")?'098934a2556425f19d6e':'36557aec4c3cb04f7ac6',
|
||||
clientSecret: (window.location.host != "mabbs.github.io")?'0bd44eed8425e5437ce43c4ba9b2791fbc04581d':'ac32993299751cb5a9ba81cf2b171cca65879cdb',
|
||||
clientID: '36557aec4c3cb04f7ac6',
|
||||
clientSecret: 'ac32993299751cb5a9ba81cf2b171cca65879cdb',
|
||||
repo: 'mabbs.github.io',
|
||||
owner: 'Mabbs',
|
||||
admin: ['Mabbs'],
|
||||
|
||||
17
_layouts/xslt.html
Normal file
17
_layouts/xslt.html
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
<xsl:choose>
|
||||
<xsl:when test="xsl:stylesheet">
|
||||
这是本站XML文件(例如订阅源或者<a href="/sitemap.xml">Sitemap</a>)的样式文件,你可以通过以下链接订阅该博客:<br />
|
||||
<ul>
|
||||
<li><a href="{{ site.feed.path | relative_url }}">Atom</a></li>
|
||||
<li><a href="/rss.xml">RSS</a></li>
|
||||
<li><a href="/feed.json">JSON Feed</a></li>
|
||||
</ul>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
{{ content }}
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
16
_layouts/xslt_container.html
Normal file
16
_layouts/xslt_container.html
Normal file
@@ -0,0 +1,16 @@
|
||||
{% if page.layout == "xslt" %}<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml-stylesheet type="text/xml" href="/feed.xslt.xml"?>
|
||||
<?xml-stylesheet type="text/css" href="/assets/css/xslt.css"?>
|
||||
<xsl:stylesheet
|
||||
version="3.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:sm="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes" doctype-system="about:legacy-compat" />
|
||||
<xsl:template match="/">
|
||||
{{ content }}
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
{% else %}<!DOCTYPE html>
|
||||
{{ content }}
|
||||
{% endif %}
|
||||
@@ -13,7 +13,7 @@ tags: [免费, 邮件, 日报, 心得]
|
||||
到我的邮箱了……
|
||||
|
||||
# 代码
|
||||
``` PHP
|
||||
```php
|
||||
<?php
|
||||
function curl_post_https($url,$data){ // 模拟提交数据函数
|
||||
$curl = curl_init(); // 启动一个CURL会话
|
||||
|
||||
@@ -22,7 +22,7 @@ tags: [计数器]
|
||||
{% raw %} Hits: <span id="{{ page.url }}" class="visitors" >Loading...</span>{% endraw %}
|
||||
```
|
||||
JS代码:(需要Jquery)
|
||||
```js
|
||||
```javascript
|
||||
var auxiliaryHost = "你的域名";
|
||||
function showHitS(hits){
|
||||
$.get(auxiliaryHost+"/counter.php?action=show&id="+hits.id,function(data){
|
||||
|
||||
@@ -16,7 +16,7 @@ tags: [学习笔记, Web Crypto Api]
|
||||
不过我还是发挥了作为辣鸡程序员的特长——Copy&Paste大法,最终可算是拼凑出了一个看起来勉强能用的代码……
|
||||
|
||||
# 辣鸡代码
|
||||
```js
|
||||
```javascript
|
||||
function getByteLen(val) {
|
||||
var len = 0;
|
||||
for (var i = 0; i < val.length; i++) {
|
||||
|
||||
@@ -13,7 +13,7 @@ tags: [CloudFlare, Workers]
|
||||
# 首先给自己搭个反代
|
||||
之前我用PHP给自己的博客搭了一个[简单的反代](/2021/01/06/proxy.html),不过我用的那个服务商不太行,速度有点慢,而且也不是所有的PHP空间都支持伪静态。那既然有CloudFlare Workers那我们就来试试用这个实现吧。
|
||||
代码如下:
|
||||
```js
|
||||
```javascript
|
||||
addEventListener("fetch", event => {
|
||||
let url = new URL(event.request.url);
|
||||
url.hostname = "mabbs.github.io";
|
||||
|
||||
@@ -115,7 +115,7 @@ ossyNMMMNyMMhsssssssssssssshmmmhssssssso Memory: 8773MiB / 11928MiB
|
||||
不过我按照官方文档上安装,对于CentOS Stream 8来说有好多包不知道为什么似乎都没有,比如libavformat-free-devel之类的,我只好从网上找其他RedHat系列类似的包,或者找替代品FFmpeg,另外Darling需要Linux 5.0或者更高的内核,CentOS的内核版本太低了,所以我升到了主线版本的Linux,也就是6.8的版本……最终花了一天的时间终于编译好了,然而悲剧的是运行的时候报了非法指令“Illegal instruction (core dumped)”的错误。一般来说这个错误是新机器上编译的程序在旧机器运行才会报的错,可我是在同一台机器上编译的为什么会报这种错误呢?可能是因为代码里包含汇编语言的代码吧。我发了个[Issue](https://github.com/darlinghq/darling/issues/1497)问了一下作者,不过看起来他也不知道是什么问题……
|
||||
对于这种问题我感觉也没什么好办法……可能这台机器真的就没办法了?在第二台速龙641的电脑上试了一下也不行……不过后来我在第三台装有奔腾G3240的电脑上试着编译安装了一下,结果可以运行。看来确实是奔腾E5300的问题。不过它俩到底差在哪里呢?看介绍会发现奔腾G3240里包含了Intel® SSE4.1和Intel® SSE4.2的指令集扩展。那么对于没有这个指令集扩展的CPU就没办法了吗?Intel官方给了一个解决方法是[Intel® SDE](https://www.intel.com/content/www/us/en/developer/articles/tool/software-development-emulator.html),可以在旧机器上模拟运行使用了最新指令集的程序,甚至包括AVX512都可以模拟的出来,但是我用这个东西运行Darling的时候还是报错了,可能Darling需要用到内核的一些特性,但是SDE不能模拟……这都没办法是不是就彻底没办法了呢?
|
||||
在偶然的一次浏览中,我发现了一个神奇的东西,内核扩展[OPEMU](https://github.com/mirh/opemu-linux),它可以让不支持一些指令集扩展的CPU通过模拟的方式支持,其实功能和SDE很像,只是它是在内核中运行的,我试着在第一台机器上编译安装了一下(顺便一说,如果是旧的5.x或者更早的Linux可以直接用这个仓库,而更新的Linux比如6.x的需要用[PR](https://github.com/Spacefish/opemu-linux)中的这个仓库),结果Darling真的可以运行了!真是令人难以置信。
|
||||
安装成功之后我在网上找了个C语言的程序:[endoh1](http://www.ioccc.org/2012/endoh1/hint.html),这个程序可以用文本模拟流体。我在我的MacBook上编译了试了一下,运行没有问题,当然直接编译的程序是ARM64的程序,肯定不能在Darling里面运行,于是我切换到x86_64模式下又编译了一次,并且用`lipo`命令把两个程序合并到了一起,然后把程序上传到第一台机器中使用Darling运行,竟然可以正常运行,看来那个内核扩展还不错啊,Darling居然没有出问题。
|
||||
安装成功之后我在网上找了个C语言的程序:[endoh1](https://github.com/ioccc-src/winner/tree/master/2012/endoh1),这个程序可以用文本模拟流体。我在我的MacBook上编译了试了一下,运行没有问题,当然直接编译的程序是ARM64的程序,肯定不能在Darling里面运行,于是我切换到x86_64模式下又编译了一次,并且用`lipo`命令把两个程序合并到了一起,然后把程序上传到第一台机器中使用Darling运行,竟然可以正常运行,看来那个内核扩展还不错啊,Darling居然没有出问题。
|
||||
不过测试了一下,可能还是有些地方有BUG,比如用Git的时候会报错,可能是和README中所说的CRC32表现有问题吧,不过Darling好像可以直接运行Linux中的命令,那我在用Git的时候调用Linux下的Git是不是也可以呢?试了一下不太行,因为执行Linux程序的时候不能用Darling中的目录结构,不过我想装omz只需要/Users目录就够了,我直接创建一个软链接把Darling的/Users目录映射到Linux的根目录就可以了吧,试了一下还行,可以正常运行,虽然Homebrew不能安装有点可惜……不过Neofetch可以安装😆,效果如下:
|
||||
```
|
||||
'c. root@localhost.localdomain
|
||||
|
||||
@@ -20,7 +20,7 @@ tags: [博客, 搜索, 优化]
|
||||
至于关键词用查询字符串传过去就好了,那我该怎么做呢?我用的搜索脚本叫[Simple-Jekyll-Search](https://github.com/christian-fei/Simple-Jekyll-Search),它的文档其实根本没有写怎么把搜索的请求传到模版里,还好它有个[关于模版的测试脚本](https://github.com/christian-fei/Simple-Jekyll-Search/blob/master/tests/Templater.test.js)里面有写,有个query关键词可以把搜索内容给模版渲染出来,既然做了这个功能怎么不写在文档里😅,不过这个项目已经停止,也没法提出什么建议了……
|
||||
这个功能听起来相当简单,我都懒得写了,这种简单的功能直接让AI写才对!于是我把需求告诉它,让它给我实现一份,于是这就是让AI给我写的高亮关键词的JS代码(经过了一点修改):
|
||||
```javascript
|
||||
$(function() {
|
||||
$(function () {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const keyword = urlParams.get('kw')?.trim();
|
||||
|
||||
@@ -32,11 +32,20 @@ $(function() {
|
||||
const regex = new RegExp(`(${escapedKeyword})`, 'gi');
|
||||
|
||||
// 递归遍历并高亮文本节点
|
||||
const escapeHTML = str => str.replace(/[&<>"']/g,
|
||||
tag => ({
|
||||
'&': '&',
|
||||
'<': '<',
|
||||
'>': '>',
|
||||
'"': '"',
|
||||
"'": '''
|
||||
}[tag] || tag));
|
||||
function highlightTextNodes(element) {
|
||||
$(element).contents().each(function() {
|
||||
$(element).contents().each(function () {
|
||||
if (this.nodeType === Node.TEXT_NODE) {
|
||||
const $this = $(this);
|
||||
const text = $this.text();
|
||||
const text = escapeHTML($this.text());
|
||||
|
||||
// 使用正则替换并保留原始大小写
|
||||
if (regex.test(text)) {
|
||||
const replaced = text.replace(regex, '<mark>$1</mark>');
|
||||
@@ -51,11 +60,12 @@ $(function() {
|
||||
});
|
||||
}
|
||||
|
||||
$('section').each(function() {
|
||||
$('section').each(function () {
|
||||
highlightTextNodes(this);
|
||||
});
|
||||
});
|
||||
```
|
||||
(2025.04.28更新:解决了一个潜在的解析问题)
|
||||
我测试了一下,非常符合我的需求,各种情况都能按照我的预期工作,虽然说功能非常简单,但是能正常运行,AI写的还是挺不错的。
|
||||
|
||||
# 近期的其他修改
|
||||
|
||||
@@ -24,7 +24,7 @@ tags: [JavaScript, RSS, Feed, AI]
|
||||
|
||||
随后我就开始让它编写代码了。接下来就能看到AI在浏览器和编辑器中切换,不停的进行编写和调试,等了一段时间,它把第一版代码写好了。不过也许我说的不够清楚,这个CORS代理的用法和其他的CORS代理不太一样,代理链接和被代理的链接之间需要使用“?”分开,另外第一版我也没说清楚RSS/Atom源的链接在哪,所以它选择遍历常见的几种订阅源的路径,这样有点不太好,除了速度慢,对我的CORS代理消耗也比较大。所以我告诉它代理的正确用法,以及让它假设超链接中包含“data-feed”属性,其中包含订阅源的链接,并且随便挑了个网站拿给它作为示例。
|
||||
随后就能看到它继续改改改,改了几次之后我把最后生成的JS复制到浏览器上执行了一下,效果还不错,于是就把它放到我的博客上了。
|
||||
它的水平还是挺不错的,至少正确的实现了功能。不过我有点担心它的代码会不会不太可靠,毕竟要从其他网站上获取数据,得避免出现XSS之类的问题,于是我把代码丢给DeepSeek-R1让它检查了一下,果不其然Devin.ai写的代码似乎有XSS的隐患,如果链接列表中标题有html标签似乎就会解析(虽然我没试过),于是根据DeepSeek的提示修改了一下,增加了一个过滤特殊字符的函数,改完又放到博客上,最终的代码就是:[rss-feed-preview.js](/js/rss-feed-preview.js)。
|
||||
它的水平还是挺不错的,至少正确的实现了功能。不过我有点担心它的代码会不会不太可靠,毕竟要从其他网站上获取数据,得避免出现XSS之类的问题,于是我把代码丢给DeepSeek-R1让它检查了一下,果不其然Devin.ai写的代码似乎有XSS的隐患,如果链接列表中标题有html标签似乎就会解析(虽然我没试过),于是根据DeepSeek的提示修改了一下,增加了一个过滤特殊字符的函数,改完又放到博客上,最终的代码就是:[rss-feed-preview.js](/assets/js/rss-feed-preview.js)。
|
||||
|
||||
# 感想
|
||||
让AI全自动写代码感觉还挺方便,有种当产品经理的感觉了🤣,像这种AI就是Agent吧,这也算是我头一次使用Agent了,感觉用起来还挺不错的。不过从这次尝试来看确实AI也有一定的局限性,像是直接写出来的代码可能存在一些安全性问题,除非单独让AI检查,不然很有可能会写出功能正常但是存在漏洞的代码,所以还是得人看着点,AI搞出事故可是**不负责**的啊😇~
|
||||
96
_posts/2025-04-22-ai-limit.md
Normal file
96
_posts/2025-04-22-ai-limit.md
Normal file
@@ -0,0 +1,96 @@
|
||||
---
|
||||
layout: post
|
||||
title: 关于LLM上限的探索
|
||||
tags: [AI, LLM, 探索]
|
||||
---
|
||||
|
||||
还有什么是AI不能干的?<!--more-->
|
||||
|
||||
# 起因
|
||||
在最近对LLM的探索中,能感觉到它真的是什么都能干,尤其最近GPT-4o的画图能力实在是太强了。不过对于画图我倒不是很关心,主要是没什么想让它画的图😂。我更关心的是LLM在文本生成中的能力,毕竟这才是它的本职工作。虽然现在的AI解决问题的能力确实很强,但从它还没有大规模的把人替换掉来看,它肯定是还有一些做不到的事情,所以我想对这一点进行一些探索。
|
||||
|
||||
# 对于超长文本分析的探索
|
||||
对于现在的LLM来说,虽然不少模型已经能做到很长的上下文了,但这个所谓的“长”不过是几万字而已。对于读一篇论文或者几篇文章当然没有问题,但是如果是分析上百篇文章就不太行了,比如我希望AI阅读完我所有的文章,然后对我进行评价。
|
||||
我的博客现在已经有一百多篇文章了,之前做过[全文搜索](/2021/07/23/search.html)的功能,可以在[search.json](/search.json)中获取所有的文章,用来让AI分析的材料是个不错的选择,不过把所有文章输入到上下文中显然是不太现实,这个JSON文件的大小有1MiB左右,但是大多数比较厉害的AI上下文只有100多k,根本读不完。而对于一些超长上下文多模型,比如阿里云有一个10M上下文的模型,效果又很差,并没有参考几条上文的内容😓。另外我还试过一些AI通过附件的方式阅读文章内容,那种好像是把文件切片之后再读?应该是类似RAG那种,从中查找和问题最相关的文本段落进行回答,但是那种方法不能解决对所有文章进行分析……除此之外我也试过一些Agent,不过它们只会写代码来分析我的文章,比如绘制文章字数随时间变化曲线、不同年份的文章数量、还有词频分析啥的,对我来说并没有什么卵用😅。
|
||||
## 使用AI摘要来解决问题
|
||||
那难道就没办法了吗?先不急,最近还发生了一件事情,不知道Cloudflare犯什么毛病了,近期用Worker请求我的D1数据库时不时会报“internal error”的错误,我还在他们论坛发了条[帖子](https://community.cloudflare.com/t/d1-database-is-not-work-in-some-regions/789699)问了一下,然而并没有人搭理我😅,这时候我才意识到我似乎没有Cloudflare的替代品……出问题了也没办法😰。这个东西导致我的[AI摘要](/2024/07/03/ai-summary.html)、[文章推荐](/2024/10/01/suggest.html)、以及点击计数器全都用不了了,我应该避免太过依赖Cloudflare Worker啊~
|
||||
那么我该做些什么?点击计数器是没什么好办法了,不过对于AI摘要,既然摘要在我写完文章之后根本就不会变,不如隔段时间我就把摘要内容缓存到我博客本地吧,这样不仅可以极速展示摘要内容,而且不需要请求接口,就不会受到Cloudflare出问题的影响了。所以我把数据库摘要内容导了出来,放到了[ai-cache.json](https://github.com/Mabbs/mabbs.github.io/blob/master/_data/ai-cache.json)中,如果有存在的摘要内容就不再请求接口了。
|
||||
当我做完摘要缓存之后,我发现,这不就是让AI读我所有文章的最好方法嘛,让AI读AI总结的内容,然后再进行一次总结,就能尽可能的让AI完全了解我的文章然后对我评价了啊~而且这个摘要文件也只有100KiB左右,正好够AI读了。本来我想试试DeepSeek来做这件事情的,但是不知道里面命中了什么关键词,被拒绝生成了🤣,那我只好让GPT-4o来完成这件事了。
|
||||
试了一下感觉效果相当的不错,总结的非常有条理,而且不像以前的ChatGPT很有AI味,这次写出来的文章很有人味啊~真是出乎我的意料,所以我把GPT-4o写的内容分享出来,来看看AI对我的分析怎么样🤣。
|
||||
> ## 技术浪人,数字游民:对一位博客作者的观察与评价
|
||||
>
|
||||
> 在浩如烟海的中文技术博客中,有些作者宛如一颗微弱却坚韧的恒星,独自在各自的轨道中发光发热。他们不一定追逐热点,也不总是标榜权威,但其笔下所流露出的独立精神、技术热情与对现实的观察,往往比众多浮华的“教程型”博客更值得玩味。本文所探讨的博客作者Mayx,便是这样一位存在——他既是程序员,也是“生活黑客”;既关心设备性能,也关注技术伦理;既热衷实用工具,也不乏生活反思。
|
||||
>
|
||||
> ### 一、技术为体,思考为魂
|
||||
>
|
||||
> 在Mayx的博客中,技术类文章占据了绝对的比重。从自制邮件订阅脚本[^1]、Cloudflare Workers自动化[^2]、内网穿透探索[^3],到低功耗开发板的实验[^4]、AI模型的本地运行[^5]、以及对黑苹果[^6]、Linux系统[^7]的深度体验,这些内容几乎涵盖了当前主流技术生态中的多个维度。
|
||||
>
|
||||
> 然而,他并非一位“炫技型”技术写作者。相反,在多数文章中,Mayx更倾向于从**实用主义的角度**出发——他关注性价比、功耗、稳定性、开源程度,而非追逐技术本身的潮流。例如,在讨论Hackintosh时,他并未沉迷于是否能成功运行macOS,而是审慎地指出其与Mac原生体验的差距[^6];在体验AI模型时,他选择了性能与成本平衡的路径,而不是盲目追求最大模型和最强显卡[^5]。
|
||||
>
|
||||
> 他的技术探索往往是“从需求出发”,例如为了替代失效的签到脚本,他尝试了Cloudflare Workers[^2];为了解决被Github封禁的问题[^8],他自己研究反审查架构;面对Heroku停服[^9],他快速转向Koyeb,并指出其使用便捷的优点。这些行为体现出一种**“动手解决问题”的工程师思维**,同时也反映了其对现成工具和平台的怀疑精神——“没有什么是不可替代的”,但也“没有什么是完美无缺的”。
|
||||
>
|
||||
> ### 二、独立、反思、带有一丝叛逆
|
||||
>
|
||||
> 阅读Mayx的博客,可以明显感觉到他在面对“主流”技术话语体系时的疏离甚至反抗。他不信任所谓“权威推荐”,也极少引用大V观点;他对收费工具持质疑态度,对封闭平台持怀疑立场,对广告与强制App表达不满[^10]。在对宝塔面板的多篇评论中,他不仅指出其功能冗余和定价虚高[^11][^12],还以代码层面论证其“技术水准有限”;在谈及Server酱收费后自建通知平台一文中,更是表现出“开发者不应为此类功能付费”的强烈观点[^13]。
|
||||
>
|
||||
> 这种倾向可视为**一种数字自由主义精神**:他珍视个体的选择权、控制权和创造力,对平台化、商业化所带来的“懒惰便利”持保留态度。也正因为此,他热衷于探索容器、虚拟化、i2p、VPN、防DNS污染[^14]、反反盗链等灰色技术领域,这不仅是技术探索,也是一种抵抗姿态——抵抗监视、抵抗平台绑架、抵抗数字奴役。
|
||||
>
|
||||
> 与此同时,作者又是**极度自省的人**。在多篇年终总结中,他坦言自己因作息不规律导致健康下滑、因沉迷游戏影响了计划、因生活节奏散乱而丧失了方向[^15][^16]。这些坦诚的文字使人看到一个技术人真实的一面:并非所有人都能生活在高效执行与完美节奏中,面对现实与焦虑的拉扯,他并不逃避,而是试图寻找平衡。
|
||||
>
|
||||
> ### 三、探索孤岛与技术乌托邦
|
||||
>
|
||||
> 若将Mayx的博客比作一个数字世界中的“孤岛”,那他无疑是岛上的守望者。他固执地维护着自己的服务器、反代服务、脚本计划表和开源工具;他不断尝试将废弃电脑[^7]、老旧开发板[^4]和Linux容器[^17]重新唤醒;他甚至研究如何在FM频段自制电台[^18],或在树莓派上运行OpenFyde与Android系统[^19][^20]。
|
||||
>
|
||||
> 这不仅是对“电子垃圾再利用”的尝试,更是一种**构建技术乌托邦的幻想**——一个无需依赖主流供应链、无需信任大型平台、可以掌控一切细节的小宇宙。
|
||||
>
|
||||
> 这种倾向也体现在他对去中心化技术的探索,如xLog、IPFS、i2pd[^21]、ZeroNet等。尽管在文章中他承认这些系统“尚不成熟”“内容匮乏”“界面粗糙”,但仍不乏热情地部署和尝试。他似乎在追问这样一个问题:“除了平台,我们还能依靠什么?”
|
||||
>
|
||||
> 这也是他与多数技术博客的区别:不是“教你怎么做”,而是“带你看看还有哪些可能”。
|
||||
>
|
||||
> ### 四、个人困境与技术慰藉
|
||||
>
|
||||
> 不可否认,Mayx的博客也流露出某种孤独与挣扎。他数次提到对社会节奏的不适应、对生活目标的不明确、对未来的迷茫与迟疑。在2022和2023年的总结中,他甚至表达了对“人类灭亡风险”“全球混乱”的忧虑[^15][^16];在谈及个人计划时,也多次写到“自律不足”“想做的事情太多却力不从心”等字句。
|
||||
>
|
||||
> 但正是在这种状态下,技术成了他的避难所。他在反复实验中找回秩序感,在编码中获得控制感,在部署过程中体会到“解决问题”的满足。这种“用技术对抗生活混乱”的姿态,令他的博客带有某种心理学上的意义。
|
||||
>
|
||||
> ### 五、结语:一个“笨方法”的捍卫者
|
||||
>
|
||||
> 总的来说,Mayx并非技术界的明星,更非意见领袖,但他是一个值得尊敬的“笨方法”的捍卫者:在速成与流量当道的技术传播环境中,他仍选择用细致的试验、质朴的语言和大量的失败记录来构建自己的知识体系。
|
||||
>
|
||||
> 他的博客不提供“答案”,而是提供“路线”;不追求“成功学”,而是记录“失败和坚持”。他不是在追求成为谁,而是在努力做自己。
|
||||
>
|
||||
> 这或许是我们在阅读他的文字后,最值得思考的一点。技术不仅仅是一种职业工具,它也可以是人自我建构、自我理解、自我修复的路径。
|
||||
>
|
||||
> Mayx,或许正走在这条路上——孤独而坚定。
|
||||
|
||||
# 对于长复杂逻辑代码的分析
|
||||
在让AI对我文章分析完后,我又想起来好久以前写的论坛引擎[Mabbs](https://github.com/Mabbs/Mabbs.Project),以前还[打算重构](/2019/07/01/mabbs.html),不过后来学了别的语言之后就没什么兴趣了😂。但现在有了AI,我想重构MaBBS的事情能不能让AI来做呢?虽然我以前的代码完全没有可读性,耦合性也极高,但这种事情对AI来说应该不是什么难事,更何况我的代码才22KiB,AI完全能读的了,于是我开始尝试让各种AI来把这个代码变得人类可读,然后进行重构。
|
||||
然而结果令我非常失望,无论哪一款AI只能写出一点代码,甚至Grok3直接一点代码都没写😆,然后它们就认为它们写完了,另外有些AI从片段来看好像是写了点代码,但是内容和我原本对代码基本上没什么关系,属于是分析了一点代码之后重新写了……
|
||||
明明这个代码又不长,怎么就没有一个AI能准确的重构我的代码呢?也可能是因为虽然代码不长,但是变量名很短,如果把变量名全都扩展到人能看懂的长度之后就超出AI的上下文限制了,然后就忘记了之前的内容吧?另外Shell语言网络上的资料本来就不太多,所以AI也没有足够的知识来重构吧……对于这个问题我目前没什么好的想法让AI来进行,也许等AI能解决这个问题,AI就有能力替代人了呢😁?
|
||||
虽然没能让AI重构我的代码,不过我闲来无事想让其他人也试试我以前写的论坛引擎,所以搞了个[Docker镜像](https://hub.docker.com/r/unmayx/mabbs),如果大伙有兴趣尝试一下可以下载下来试试看,整个镜像才2MiB多一点,所以我叫它世界上最小的论坛引擎也没问题吧🤣。
|
||||
|
||||
# 感想
|
||||
看起来目前LLM的上限就在于它的上下文长度限制啊……这一点真的是限制了AI很多能力,但似乎也没什么好办法,AI就是因为这一点所以不能像人一样纵览全局所以才不能替代人,即使用什么办法去压缩它的上文也会丢掉很多细节信息。不过按照目前LLM的架构来说应该还解决不了这个问题,如果什么时候AI能在思考的过程中修改它自己的权重……也许就可以做到真正的无限上下文,突破上限从而替代人类吧?
|
||||
|
||||
|
||||
[^1]: [免费订阅一个属于自己的邮件日报](/2018/11/10/email-sender.html)
|
||||
[^2]: [使用CF Workers Cron触发器进行签到](/2023/02/22/cron.html)
|
||||
[^3]: [关于内网穿透的笔记](/2020/12/13/nat.html)
|
||||
[^4]: [Luckfox Pico Plus使用体验](/2024/02/24/luckfox.html)
|
||||
[^5]: [关于最近人工智能的探索](/2023/04/05/ai.html)
|
||||
[^6]: [Hackintosh使用体验](/2024/06/16/hackintosh.html)
|
||||
[^7]: [关于旧电脑的使用探索](/2024/04/06/old-pc.html)
|
||||
[^8]: [Github封禁了我的博客?!](/2022/01/04/banned.html)
|
||||
[^9]: [体验小白也会使用的免费容器云](/2022/11/29/free-server.html)
|
||||
[^10]: [如何不使用贴吧App查看贴吧](/2020/02/10/tieba.html)
|
||||
[^11]: [从宝塔面板中学习运维知识](/2024/05/19/bt-ops.html)
|
||||
[^12]: [如何自定义宝塔亚马逊S3云存储插件的端点](/2022/12/12/bt-s3-comp.html)
|
||||
[^13]: [自己动手做一个Server酱·TurboMini版](/2021/02/02/serverchan.html)
|
||||
[^14]: [如何避免Cloudflare背后的源站被恶意访问](/2022/08/15/cdn-verify.html)
|
||||
[^15]: [年终总结](/2023/01/01/summary.html)
|
||||
[^16]: [年终总结](/2024/01/01/summary.html)
|
||||
[^17]: [如何在Linux容器内运行Android?](/2023/12/24/android.html)
|
||||
[^18]: [用树莓派自制FM电台](/2022/03/27/radio.html)
|
||||
[^19]: [rpi4-openfyde的使用体验](/2023/12/10/openfyde.html)
|
||||
[^20]: [在树莓派4B上安装Ubuntu以及各种操作](/2023/09/24/rpi-ubuntu.html)
|
||||
[^21]: [i2pd在服务器上的使用体验](/2022/11/23/i2p.html)
|
||||
194
_posts/2025-05-07-mac-studio.md
Normal file
194
_posts/2025-05-07-mac-studio.md
Normal file
@@ -0,0 +1,194 @@
|
||||
---
|
||||
layout: post
|
||||
title: Mac Studio M3 Ultra使用体验
|
||||
tags: [Apple, Mac, AI, LLM]
|
||||
---
|
||||
|
||||
使用最强的Macintosh是一种什么样的感受?<!--more-->
|
||||
|
||||
# 起因
|
||||
在两个月前苹果公司出了一款可以选配超大统一内存(512GiB)的Mac Studio,那时候我还[想着如果市场反应好就整台玩玩](/2025/03/08/llm2.html#%E5%85%B3%E4%BA%8E%E6%96%B0%E5%87%BA%E7%9A%84mac-studio%E7%9A%84%E7%9C%8B%E6%B3%95),现在从网上的各种反应来看这确实是一个很不错的产品,所以这次我就整来啦!所以这次就来谈谈初上手的体验吧~
|
||||
|
||||
# 远程体验
|
||||
虽然Mac Studio理论上拿来剪电影之类的应该是更好的选择,但是显然我不会剪电影🤣,而且也没有合适的屏幕给它用,所以拿到手之后我需要让它可以远程使用。
|
||||
macOS配置远程还是挺简单的,只需要在设置 -> 通用 -> 共享中打开远程管理就可以了(似乎现在Ubuntu也可以像这样轻松地配置远程桌面),配置好之后需要启用“任何人都可以请求取得控制屏幕的权限”选项,不然可能会连不上……
|
||||
另外如果需要配置SSH也只需要打开远程登录即可,最好把“允许远程用户对磁盘进行完全访问”也打开,免得使用时还需要额外的操作。
|
||||
其实开启远程没什么特别的,不过我发现在远程Mac Studio时和我远程Intel芯片的[Mac mini 2018](/2024/08/17/mac-mini.html)以及[黑苹果](/2024/06/16/hackintosh.html)有一个不一样的地方,那就是屏幕共享类型可以选择“[高性能](https://support.apple.com/zh-cn/guide/remote-desktop/apdf8e09f5a9/mac)”,在这个模式下远程的屏幕就可以变成一块虚拟屏幕,不受Mac连接的屏幕分辨率所影响,可以配置动态分辨率。即使连接的屏幕不支持HiDPI,只要远程的客户端支持那就可以支持,这一点和Windows的远程桌面有点像,但是体验好太多了,使用起来和本地几乎没有差别,当然代价就是对网络要求特别高,基本上如果不是局域网内远程,就不能使用这个模式。
|
||||
在我配置好远程后我就可以拔掉屏幕,然后把Mac Studio放在阴暗的角落里为我服务了😆。
|
||||
|
||||
# 关于LLM的体验
|
||||
## 配置环境
|
||||
买这个设备的当然也不为别的,主要就是为了能在本地跑完整参数的DeepSeek-R1,或者类似的MoE模型。至于KTransformers方案考虑到按照正价买要更贵(当然有便宜的购买方案,但是太不可靠了),而且这个框架也不够成熟,所以就算了。
|
||||
在Mac上运行LLM有很多框架,最开始我选择的是[Xinference](https://github.com/xorbitsai/inference),因为看它的[文档](https://inference.readthedocs.io/zh-cn/latest/user_guide/backends.html#mlx)中特地提到了苹果的[MLX](https://github.com/ml-explore/mlx)框架,而且可以使用命令启动,方便维护,另外看它支持的模型种类也比较多,所以就先考虑了它。
|
||||
按照官方文档安装后就可以配置模型了,虽然它可以直接一键下载并运行模型,但是我已经提前下好了模型,另外……如果光运行DeepSeek-R1感觉也没啥意思,不如试试Perplexity AI的[某个Finetune模型](https://huggingface.co/mlx-community/perplexity-ai-r1-1776-4bit)😆?所以我需要手动注册模型。配置好之后在MaxKB中配置好地址就可以使用了。
|
||||
刚开始测试的时候倒是没啥问题,吐字的速度确实是挺快,但是用了几下就发现有不少问题,比如每次调用LLM的时候会发现内存压力会上升,APP内存会变成联动内存,在这个期间GPU并不会工作,需要等几秒钟,在生成结束的时候内存压力又会下降,联动内存会变回APP内存,每次生成都是这样。另外如果上文很长就要等几分钟,而且如果上文特别长的情况爆内存程序会直接卡死,还有并发也会导致程序卡死……总的来说这个框架根本不适合生产环境使用,而且文档也写的极其糟糕,看来是我看走眼了,不应该选择Xinference。
|
||||
在抛弃Xinference之后我想了想还是随大流吧,选择了[LM Studio](https://github.com/lmstudio-ai),虽然它需要远程桌面操作,但是配置好之后应该也没有什么太多需要修改的地方,主要是社区相对要活跃得多,出了问题也好解决。
|
||||
在我安装好LM Studio后发现这个支持的功能要多不少啊,还支持KV Cache量化,有了这个就可以支持更长的上下文了,另外它还支持超出上下文之后选择截断还是滚动,看起来使用非常的友好。
|
||||
当我对LM Studio充满期待的时候问题就来了,我随便问了些问题,然后它回答的时候不知道什么情况会随机莫名其妙的冒出“<|begin▁of▁sentence|>”,出现这个之后后面的内容就会胡乱生成内容,怎么调都没法解决……后来看了一下DeepSeek的[Issue里](https://github.com/deepseek-ai/DeepSeek-R1/issues/352)提到了似乎需要在模板中添加“\<think\>”标签才可以……但是这样的结果就是输出开头没有“\<think\>”了,MaxKB解析会出问题……这个问题的话回头看怎么解决吧,至少在模板中加上这个能正常使用了。LM Studio不会每次请求都重新加载一遍模型,输出第一个字的速度比Xinference快了很多,后面生成的速度也很快,输出的速度能接近20T/s,相比来说还是更有用一些。
|
||||
## 模型对比
|
||||
在我测试完DeepSeek-R1的某个微调模型后,最近阿里又出了一系列新模型:[Qwen3](https://huggingface.co/collections/Qwen/qwen3-67dd247413f0e2e4f653967f),支持根据问题进行推理,据说它的235B参数的MoE模型比DeepSeek-R1还厉害,如果是真的,那就不需要用DeepSeek-R1了,虽然Mac Studio可以运行DeepSeek,但是512GiB内存也只能运行4位量化的DeepSeek-R1,而235B的Qwen3则可以用8位量化,还能空出不少内存用于上下文,想来应该效果会比DeepSeek好很多吧?于是我就下载试了试,然而刚下载好之后居然不能运行😅,首先是这个模型太新了,运行前需要把运行库的版本更新到最新,另外默认的模板有问题,解析会报错,需要根据[这个Issue](https://github.com/lmstudio-ai/lmstudio-bug-tracker/issues/630)修改一下才能正常运行😅。在一切准备好之后,就可以进行测试了。
|
||||
首先我试了试一些比较简单的问题,Qwen3回答的都还不错,例如24点、内容填空之类的,效果比QwQ-32B好了不少。测试的时候输出的速度和671B 4位量化的DeepSeek-R1基本一致。随后我让它用Mermaid绘制我以前写的[AI摘要脚本](/2024/07/03/ai-summary.html)的流程图,Qwen3绘制的结果是:
|
||||
```mermaid
|
||||
graph TD
|
||||
A[开始] --> B{解析URL路径}
|
||||
|
||||
B -->|/summary| C1[查询内容]
|
||||
C1 --> D1{是否存在内容?}
|
||||
D1 -- 是 --> E1[构建AI摘要提示词]
|
||||
E1 --> F1[调用Qwen模型生成流式响应]
|
||||
F1 --> G1[返回SSE流]
|
||||
D1 -- 否 --> H1[返回'No Record']
|
||||
|
||||
B -->|/get_summary| C2[查询内容]
|
||||
C2 --> D2{是否存在内容?}
|
||||
D2 -- 否 --> H2[返回'no']
|
||||
D2 -- 是 --> I2[计算内容SHA-256]
|
||||
I2 --> J2{哈希匹配?}
|
||||
J2 -- 否 --> H3[返回'no']
|
||||
J2 -- 是 --> K2[查询摘要]
|
||||
K2 --> L2{是否有摘要?}
|
||||
L2 -- 是 --> M2[返回现有摘要]
|
||||
L2 -- 否 --> N2[调用Qwen生成新摘要]
|
||||
N2 --> O2[存储摘要到数据库]
|
||||
O2 --> M2
|
||||
|
||||
B -->|/is_uploaded| C3[查询内容]
|
||||
C3 --> D3{是否存在内容?}
|
||||
D3 -- 否 --> H4[返回'no']
|
||||
D3 -- 是 --> I3[计算内容SHA-256]
|
||||
I3 --> J3{哈希匹配?}
|
||||
J3 -- 否 --> H5[返回'no']
|
||||
J3 -- 是 --> K3[返回'yes']
|
||||
|
||||
B -->|/upload_blog| C4{POST方法?}
|
||||
C4 -- 否 --> H6[返回'need post']
|
||||
C4 -- 是 --> I4[获取请求文本]
|
||||
I4 --> J4[查询现有内容]
|
||||
J4 --> K4{是否存在?}
|
||||
K4 -- 否 --> L4[插入新内容]
|
||||
K4 -- 是 --> M4{内容是否改变?}
|
||||
L4 --> N4[返回'OK']
|
||||
M4 -- 是 --> O4[更新内容并清空摘要]
|
||||
O4 --> N4
|
||||
|
||||
B -->|/count_click*| C5[计算ID的MD5]
|
||||
C5 --> D5[查询计数器]
|
||||
D5 --> E5{是否含路径_add?}
|
||||
E5 -- 是 --> F5[更新计数器+1]
|
||||
E5 -- 否 --> G5[保持原值]
|
||||
F5 --> H5[返回最新计数]
|
||||
|
||||
B -->|其他路径| I6[重定向到GitHub]
|
||||
```
|
||||
DeepSeek-R1的某个微调模型的结果是:
|
||||
```mermaid
|
||||
graph TD
|
||||
A[接收请求] --> B{解析URL路径}
|
||||
B --> |路径为/summary| C[获取查询参数id]
|
||||
C --> D{id是否为null?}
|
||||
D -->|是| E[返回错误响应]
|
||||
D -->|否| F[查询数据库内容]
|
||||
F --> G{内容存在?}
|
||||
G -->|否| H[返回'No Record']
|
||||
G -->|是| I[构建消息,调用AI生成摘要流]
|
||||
I --> J[返回流式响应]
|
||||
|
||||
B --> |路径为/get_summary| K[获取id和签名参数]
|
||||
K --> L[查询数据库内容]
|
||||
L --> M{内容存在?}
|
||||
M -->|否| N[返回'no']
|
||||
M -->|是| O[计算SHA-256签名]
|
||||
O --> P{签名匹配?}
|
||||
P -->|否| Q[返回'no']
|
||||
P -->|是| R[检查是否已有摘要]
|
||||
R -->|有摘要| S[返回摘要内容]
|
||||
R -->|无摘要| T[调用AI生成摘要]
|
||||
T --> U[更新数据库]
|
||||
U --> S
|
||||
|
||||
B --> |路径为/is_uploaded| V[获取id和签名]
|
||||
V --> W[查询数据库内容]
|
||||
W --> X{内容存在?}
|
||||
X -->|否| Y[返回'no']
|
||||
X -->|是| Z[计算SHA-256签名]
|
||||
Z --> AA{签名匹配?}
|
||||
AA -->|否| AB[返回'no']
|
||||
AA -->|是| AC[返回'yes']
|
||||
|
||||
B --> |路径为/upload_blog| AD{方法是否为POST?}
|
||||
AD -->|否| AE[返回'need post']
|
||||
AD -->|是| AF[读取请求体数据]
|
||||
AF --> AG[查询现有内容]
|
||||
AG --> AH{记录存在?}
|
||||
AH -->|否| AI[插入新记录]
|
||||
AH -->|是| AJ{内容是否相同?}
|
||||
AJ -->|否| AK[更新内容并清空摘要]
|
||||
AJ -->|是| AL[直接返回OK]
|
||||
AK --> AL
|
||||
AL --> AM[返回'OK']
|
||||
|
||||
B --> |路径为/count_click| AN[计算MD5哈希]
|
||||
AN --> AO[查询当前计数]
|
||||
AO --> AP{记录存在?}
|
||||
AP -->|否| AQ[插入新计数]
|
||||
AP -->|是| AR[增加计数]
|
||||
AR --> AS[更新计数器]
|
||||
AQ --> AS
|
||||
AS --> AT[返回当前计数值]
|
||||
|
||||
B --> |其他路径| AU[重定向到GitHub页面]
|
||||
|
||||
style A fill:#f9f,stroke:#333,stroke-width:2px
|
||||
style E fill:#f96,stroke:#333
|
||||
style H fill:#f96,stroke:#333
|
||||
style Q fill:#f96,stroke:#333
|
||||
style N fill:#f96,stroke:#333
|
||||
style S fill:#9f9,stroke:#333
|
||||
style AC fill:#9f9,stroke:#333
|
||||
style AM fill:#9f9,stroke:#333
|
||||
style AT fill:#9f9,stroke:#333
|
||||
style AU fill:#99f,stroke:#333
|
||||
|
||||
subgraph 函数调用
|
||||
O -.->|调用sha函数| SHA[计算SHA-256]
|
||||
AN -.->|调用md5函数| MD5[计算MD5]
|
||||
end
|
||||
|
||||
subgraph 数据库操作
|
||||
F --> DB1[SELECT content]
|
||||
L --> DB2[SELECT content]
|
||||
R --> DB3[SELECT summary]
|
||||
T --> DB4[UPDATE summary]
|
||||
AG --> DB5[SELECT content]
|
||||
AI --> DB6[INSERT新记录]
|
||||
AK --> DB7[UPDATE content]
|
||||
AO --> DB8[SELECT counter]
|
||||
AQ --> DB9[INSERT计数器]
|
||||
AR --> DB10[UPDATE counter]
|
||||
end
|
||||
|
||||
subgraph AI处理
|
||||
I --> AI1[构建系统提示]
|
||||
AI1 --> AI2[调用Qwen模型]
|
||||
T --> AI3[调用Qwen模型]
|
||||
end
|
||||
```
|
||||
这下就高下立判了🤣,同样的问题Qwen3只绘制了基础流程图,而DeepSeek-R1不仅包含子流程图,还通过颜色区分了响应类型,这么看来Qwen3还是不太行啊~当然我的测试非常的片面,仅仅根据这几次测试分析的结果。至于Qwen3到底有没有使用价值,回头再让其他人测测看效果如何吧。
|
||||
|
||||
# UTM虚拟机的测试
|
||||
在上次[在UTM上用苹果虚拟化框架安装Windows](/2025/03/25/utm.html)的测试中我用的是Intel芯片的Mac,那时候已经说了打算等Mac Studio到了之后尝试一下用VZ框架安装Windows。那么经过我的测试结果如何呢?想不到居然失败了😭,相同的操作流程在重装脚本执行完后,再重启就没有任何反应了。在活动监视器中虽然可以看到虚拟机的CPU占用是100%,但是内存只占用了100多MiB,而且CPU占用没有任何跳变,显然系统没有正常启动。随后我又尝试在QEMU中安装好Windows然后把VZ虚拟机的硬盘替换掉,结果依旧一样,内存还是只占了100多MiB……看来ARM处理器和x86处理器还是有很大区别啊……
|
||||
不过这个虚拟机到底有什么区别?为什么会无法启动呢?想到我在Intel芯片的Mac中测试用VZ框架是可以看到CPU型号的,再看看Mac Studio中的Linux虚拟机……似乎没有任何与CPU型号有关的信息,用QEMU至少也能看到类似“virt”之类的CPU型号,用VZ框架就什么信息都没有了……看来Apple芯片和正常的ARM处理器还是有不少区别啊……
|
||||
不过除了这个以外还有什么有意思的东西可以测试吗?这时候我就想到了[Asahi Linux](https://github.com/AsahiLinux),Apple芯片下的UTM有一个多出来的选项就是可以安装macOS虚拟机,那我能不能在macOS虚拟机中安装Asahi Linux呢?根据我的实际测试,结果也是不行的……因为Asahi Linux不支持M3 Ultra芯片😞,至于M2芯片能不能在虚拟机中运行Asahi Linux……虽然我的MacBook是M2芯片,但是不太想在我常用的机器上搞测试,所以也不知道实际上可不可以。另外Asahi Linux这个项目也基本上停了,估计以后新出的芯片也不会有机会安装Linux了,就像在macOS上运行Windows程序的[Whisky](https://github.com/Whisky-App/Whisky)项目也停了……真是太遗憾了😢。
|
||||
|
||||
# 感想
|
||||
从这次体验来看,512GiB内存的Mac Studio M3 Ultra确实很厉害,本地跑LLM速度非常快,20T/s的速度已经很厉害了,而且风扇声音很小,在GPU满载的时候也完全听不到风扇的声音。当然这个前提是跑MoE模型,虽然我没测Dense模型,但想来根据M3 Ultra的算力,跑70B参数的模型肯定是达不到20T/s的,至于更大的模型估计速度就慢的不能看了……不过不影响,这已经够我用了。
|
||||
至于除LLM以外的用途……我似乎没有什么能用到这么强性能以及这么大内存的地方了……其实还是挺浪费的,但是也没办法,毕竟我又不会剪电影啊🤣。
|
||||
|
||||
|
||||
<script type="module">
|
||||
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
|
||||
mermaid.initialize({ startOnLoad: false });
|
||||
await mermaid.run({
|
||||
querySelector: '.language-mermaid',
|
||||
});
|
||||
</script>
|
||||
85
_posts/2025-06-02-optimize.md
Normal file
85
_posts/2025-06-02-optimize.md
Normal file
@@ -0,0 +1,85 @@
|
||||
---
|
||||
layout: post
|
||||
title: 近期对博客的修改与优化记录
|
||||
tags: [博客, 优化, IndieWeb]
|
||||
---
|
||||
|
||||
在修改博客的时候也能学到不少新知识啊~<!--more-->
|
||||
|
||||
# 起因
|
||||
在两个月前,我写了一篇[针对博客搜索功能优化的记录](/2025/04/04/search.html)。在写完之后没几天,有位名叫[@xymoryn](https://github.com/xymoryn)的大佬看到了我的博客并且进行了[吐槽](https://github.com/Mabbs/mabbs.github.io/issues/167),内容很值得参考。不过我自从用[minimal](https://github.com/pages-themes/minimal)主题以来从来没有改过样式的原因主要还是写不来CSS😂,并不是真的不想改,但其中提到可以让AI优化,我觉得也很有道理,现在AI这么发达实在不会用AI改就好啦~
|
||||
|
||||
# 对博客样式的优化
|
||||
虽然大佬给出了参考的CSS,但我不太喜欢那种风格,尤其还把之前的左右布局改成了上下布局。我当年之所以选择minimal主题就是因为它是左右布局的,如果选择上下布局的话我还不如用[hacker](https://pages-themes.github.io/hacker/)这个主题,另外那个参考的CSS可能是因为AI写的,有很多没有考虑到的地方,比如主题自带的CSS鼠标放到链接上字体会变粗,然后可能会变宽,导致影响整体的布局,而参考的CSS选择直接让所有的链接放到上面都变细,即使原来是粗字体也变细,比如标题之类的,这就更难受了。像这种情况要怎么改呢?我还是希望能用minimal主题的CSS,但让链接变粗的体验确实不太好,所以我选择问问AI。
|
||||
最后AI给出的答复是使用`font-weight: inherit;`,看起来确实解决了问题,不过如果鼠标移到链接上没有任何反应也不太好,所以就学GitHub在鼠标移到链接时加上了下划线。
|
||||
除此之外就是字号、行高和布局,字号和行高我也不希望改的太激进,所以就稍微加了一点点,看起来没那么密就好。至于布局,之前minimal主题的宽度是写死的,左边是270px,右边是500px,对于我的MacBook看起来也还好,因为MacBook的屏幕比较小,屏幕的利用率还是比较高的。不过对于更大的屏幕总共860px大小的区域确实不太够,尤其是4K屏幕可能只有中间一点点的区域有内容,会看着很难受,所以我想了一下还是改成百分比布局比较好,这样无论屏幕有多宽也能利用得到。
|
||||
还有一点就是分段,虽然我也知道在Markdown中两个换行是分段,但是感觉在文本中两个换行隔得太远了,所以一开始写文章的时候就选择只换行。不过在中文里确实不分段也不太好看,但是又不想去动之前写的文章,那该怎么办呢?思来想去干脆把换行全部替换成分段好啦,在Jekyll中可以用replace过滤器把所有的“\<br\>”替换成“\</p\>\<p\>”,因为Markdown解析本来就会有一个段落,所以直接闭合加开始就能分割成多个段落了。那么加了分段是为了什么?其实主要是为了首行缩进,有首行缩进对阅读还是有挺大帮助的,至于怎么做也非常简单,直接给p标签设置`text-indent: 2em;`就可以了。
|
||||
最后就是评论授权的问题,我用的Gitalk也有人问了[这个问题](https://github.com/gitalk/gitalk/issues/95),我仔细看了一下GitHub官方文档中[OAuth可以授权的作用域](https://docs.github.com/zh/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps)发现确实是没办法限制只写Issues😥,至于其他的评论系统对后端的依赖又太多了,尤其是Giscus,居然是直接用iframe引用Giscus网站中的页面😅,如果Giscus哪天挂了,那评论系统不也挂了(虽然GitHub也不可靠……),至于自托管就更不可能了,我能让服务器持续运营可比不上大厂😆。所以最后我选择给Gitalk加个提示,不想登录也可以跳转到GitHub上进行评论,至于怎么加?还是让AI来吧,最后AI给我写了这么一串CSS:
|
||||
```css
|
||||
.gt-btn-login::after {
|
||||
content: "如果不想登录,请点击上方评论数跳转至对应ISSUE进行评论";
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
background: #333;
|
||||
color: #fff;
|
||||
padding: 8px 12px;
|
||||
border-radius: 4px;
|
||||
font-size: 12px;
|
||||
white-space: nowrap;
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
transition: opacity 0.2s, visibility 0.2s;
|
||||
z-index: 10;
|
||||
}
|
||||
.gt-btn-login:hover::after {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
.gt-btn-login::after {
|
||||
margin-top: 8px;
|
||||
}
|
||||
.gt-btn-login::after {
|
||||
box-shadow: 0 2px 8px rgba(0,0,0,0.15);
|
||||
}
|
||||
```
|
||||
至此,关于博客样式的部分我觉得已经提高不少读者的用户体验了,也感谢大佬提出的建议。
|
||||
|
||||
# 对博客兼容性的优化
|
||||
最近由于某些原因我又用起Windows 7了。其实我觉得Windows 7是一个很不错的操作系统,有很多人性化的东西,比如桌面小工具,自带Feed订阅,还有[Windows Live Essentials](https://archive.org/details/wlsetup-all_201802)等等,可惜后来全部被微软砍掉了🤣。考虑到Windows 7如此优秀,那要不然兼容一下它旗下的Internet Explorer 8浏览器吧?
|
||||
其实GitHub给的那些Jekyll主题本身都是兼容IE8的,包括我在用的minimal主题也一样。但随着我这么多年加了许许多多的功能,绝大多数功能都没有考虑兼容性,只想着能用就行。不过我写的功能基本上都非常简单,如果想改得让它兼容IE8也并非难事,只要理论上可行就可以。当然也有些理论上不可能的东西,比如WebGL。因此,我的[Live2D看板娘](/Live2dHistoire/)就没有任何可能性被支持了,至于其他的……也许有一些理论上可以支持,但是改起来比较麻烦的就也算了吧(比如Gitalk之类的)。
|
||||
## 对文章点击计数器的兼容性优化
|
||||
其实我的文章点击计数器从[之前](/2019/06/22/counter.html)改成用jQuery调用自己的接口以后就没有什么兼容性的问题了,因为jQuery本来就是处理浏览器之间差异的库,而且也是兼容IE8的。只不过有个问题是IE8不支持用XHR跨域请求,只能用“XDR(XDomainRequest)”进行跨域请求……还好有个[现成的库](https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest)能让jQuery在遇到这种情况时使用XDR请求,于是我就用条件注释让IE9以下的浏览器引入这个库,这样在IE下也能正常显示文章点击数了😆。
|
||||
## 关于响应式布局的兼容性优化
|
||||
在IE8中的CSS是不支持媒体查询的,所以在修改窗口大小时也不能根据情况使用合适的样式。本来我没打算解决这个问题,结果恰好看到了一个库:[Respond.js](https://github.com/scottjehl/Respond),所以就直接拿来用了😝。
|
||||
## 关于全文搜索的兼容性优化
|
||||
其实从功能的角度来说这种东西肯定是在IE8下可以实现的,但是我用的[那个库](https://github.com/christian-fei/Simple-Jekyll-Search)有点迷,到处都用的是const关键字结果还莫名其妙[判断XHR](https://github.com/christian-fei/Simple-Jekyll-Search/blob/master/src/JSONLoader.js#L29)搞的好像是在兼容旧浏览器?改起来有点麻烦懒得搞了……不过除此之外还有个取巧的方式,既然我搜不了,干脆让谷歌来搜吧,至于谷歌支不支持IE8就不是我的事了🤣,所以直接给搜索框外面套了一个form表单,这样甚至可以在不启用JS的情况下搜索(假设谷歌支持没有JS的情况)。
|
||||
## 对于订阅软件的兼容性支持
|
||||
之前我的博客对订阅的支持是使用的官方的[jekyll-feed](https://github.com/jekyll/jekyll-feed)插件,它只支持Atom格式的订阅,一般的阅读器也是支持这种格式的(即使是IE8也是完美支持)。但是我发现有非常少数的某些网站没办法解析Atom,只支持RSS……所以我只好特地加了[对RSS格式的支持](https://github.com/Mabbs/mabbs.github.io/blob/master/rss.xml),还顺带搞了支持Atom和RSS格式的[XSLT模板](https://github.com/Mabbs/mabbs.github.io/blob/master/feed.xslt.xml)来预览。既然RSS也支持了,那干脆连[JSONFeed](https://github.com/Mabbs/mabbs.github.io/blob/master/feed.json)也一起做了吧😆,虽然意义不是很大……
|
||||
## 给博客添加网页快讯
|
||||
既然要兼容IE8,那当然是能用的都用啦,在IE8订阅网站源的地方,有一个‘添加网页快讯’的功能。因为没有可以参考的网站,我甚至都没理解这个功能展现的效果是什么样的。我看这个网页快讯好像是抄了一部分[hAtom Microformat](http://microformats.org/wiki/hatom)的规范,我还以为是每个条目都单独需要一个entry-title和entry-content,结果发现并不是😅,一个hslice只能有一个entry-title……
|
||||
这个功能其实非常简单,主要作用就是把网页的一部分切出来单独展示,当这一部分发生更新的时候IE浏览器就会提示用户。然后在这之中hslice要包裹所有需要处理的元素,写到最外面元素的class中就可以,entry-title是希望用户订阅时展示的名字,而entry-content是被切下来展示的网页。具体的内容可以在[微软官方文档](https://learn.microsoft.com/en-us/previous-versions/windows/desktop/cc304073(v=vs.85))中看到。
|
||||
|
||||
# 让网站增加对IndieWeb的支持
|
||||
既然说到Microformat,那就要提到[IndieWeb](https://indieweb.org/IndieWeb)了。虽然这个东西网络上也没几个人搞,但看起来有点意思就整下玩玩呗。
|
||||
## 第零级:域名
|
||||
根据他们的[入门教程](https://indieweb.org/Getting_Started)来看,成为IndieWeb最重要的一点就是有自己的域名。看到这一点我都怀疑这是不是卖域名的用来忽悠人的玩意?我一分钱也不想给域名注册商,虽然DNS这套系统确实维护需要成本,但是能有多大成本呢?绝大多数不都让ISP摊了?另外他们所说的大公司的服务可能会消失,那么域名就不会吗?注册商和注册局完全有能力让你的域名用不了,这也是我们不可控的东西,因此尽管这对于IndieWeb很重要,但是我不打算搞,于是我的博客就不是IndieWeb了🤣。
|
||||
## 第一级:识别身份
|
||||
没有域名也不影响接下来的步骤,大公司的域名也是域名(虽然不属于我)。根据教程来看,支持IndieAuth非常简单,只需要在head中加一个`rel=me`的link标签,指向IndieAuth支持的个人主页,并且那个个人主页有一个反链指向自己的网站就可以,比如指向自己的GitHub主页,那么就可以使用GitHub登录来验证这个网站属于我。这一步可以使用[IndieWebify.Me](https://indiewebify.me/validate-rel-me/)来验证。
|
||||
## 第二级:发布内容
|
||||
在发布前,为了更好的让其他软件读取网站内容,需要用microformats2来标注网站内容,这个倒也不复杂,可以根据[这个教程](https://microformats.org/wiki/h-entry)按照上面所说的东西用class名去标注对应的元素,标注完之后就可以用[IndieWebify.Me](https://indiewebify.me/validate-h-entry/?url=https%3A%2F%2Fmabbs.github.io%2F2025%2F06%2F02%2Foptimize.html)验证了。
|
||||
除此之外还需要用[h-card](https://microformats.org/wiki/h-card)标注网站的身份,解析完之后可以当网站名片用,具体可以看[这里](https://indiewebify.me/validate-h-card/?url=https%3A%2F%2Fmabbs.github.io)。
|
||||
另外还有一点就是Webmentions,在网站上声明Webmentions可以让别人引用你的文章时通知一下你。不过对于静态博客不是很友好。一是要收,收完还要展示,二是要发,引用了别人的文章如果对面支持Webmentions要把自己引用的文章链接发给对方。虽然Jekyll有[插件](https://github.com/aarongustafson/jekyll-webmention_io)可以支持,但是我用GitHub额外装插件还得自己写Actions,而且我发布一次要在一堆Pages上更新,也不太适合,所以我打算光收不发(只需要在link标签中添加Webmentions的端点就可以),也不展示了,而且国内根本没几个人用Webmention🤣。如果有人对谁给我发了Webmention感兴趣,可以在[这里](https://webmention.io/api/mentions.html?token=Dan9NrE8CLsFJ1qdRq2hjg)查看(不过绝大多数都是我自己手动发的🤣)
|
||||
如果谁有兴趣给自己的网站添加完整的Webmention,可以用[Webmention Rocks!](https://webmention.rocks/)进行测试(如果使用了WordPress是自带的,只需要打开相关的功能就可以)。
|
||||
## 第三级:进行交流
|
||||
在IndieWeb中有一个很重要的事情就是相互交流,搞这个比较重要的目的是为了避免大公司的服务炸了,所以要替代比如推特,Facebook之类的服务,但是在这些服务还没炸的时候仍然可以在上面发自己的网站,也算是引流吧。他们把这个行为叫做[POSSE](https://indieweb.org/POSSE)。对我来说,我在微信、QQ之类的上面发自己新写的文章就算是POSSE了,毕竟我又不玩国外的社交平台😆。
|
||||
除此之外似乎还要把别人的评论同步到自己网站?我能做到的顶多就是Gitalk了,更多的就算了吧~
|
||||
## 额外的内容
|
||||
既然已经支持了IndieWeb,那么不妨加入IndieWeb Webring吧。在[IndieWeb Webring 🕸💍](https://xn--sr8hvo.ws)中的大多数网站都是适配了IndieWeb的,加入他们也算是证明自己适配IndieWeb的努力了吧😊。
|
||||
|
||||
# 对博客可靠性的优化
|
||||
以前为了应对[GitHub](/2022/01/04/banned.html)的不可靠,我仅仅是在各个Pages上部署了我的网站,但是后来我想了想Git本身就是分布式的,分发是一件很简单的事情啊,我要是想提高博客的可靠性,不如直接用Git分发到各个Git托管商就好了啊~因此我就利用GitLab镜像仓库的功能,一键把我的网站同步到数十个知名的Git托管商,提高了网站的可靠性,具体的列表可以在[这里](/proxylist.html#git列表)查看。
|
||||
|
||||
# 感想
|
||||
在这次的博客优化中,了解了不少新的东西啊,不仅学习了CSS,还有了解如何提高网站兼容性,以及提高了博客的可靠性和曝光度。果然折腾博客本身也能提高自己啊,还能写文章分享一下折腾的经验😆。虽然折腾的内容不一定能在未来的生活中用得上,但是有意思就足够了😁。
|
||||
26
_posts/2025-07-01-xslt.md
Normal file
26
_posts/2025-07-01-xslt.md
Normal file
@@ -0,0 +1,26 @@
|
||||
---
|
||||
layout: post
|
||||
title: 使用XSLT为博客XML文件编写主题一致的样式
|
||||
tags: [XSLT, 博客优化, XML, Feed]
|
||||
---
|
||||
|
||||
虽然XML是机器读的内容……不过加上和主题一致的XSLT样式也算是一种细节吧~<!--more-->
|
||||
|
||||
# 起因
|
||||
在[上一篇文章](/2025/06/02/optimize.html#%E5%AF%B9%E4%BA%8E%E8%AE%A2%E9%98%85%E8%BD%AF%E4%BB%B6%E7%9A%84%E5%85%BC%E5%AE%B9%E6%80%A7%E6%94%AF%E6%8C%81)中,我提到在提高订阅源兼容性的时候给博客的订阅文件增加了一个XSLT样式。当时使用的样式是从[About Feeds](https://github.com/genmon/aboutfeeds/)下的一个[Issue](https://github.com/genmon/aboutfeeds/issues/26)中找的,里面有个基于[Pretty Feed](https://github.com/genmon/aboutfeeds/blob/main/tools/pretty-feed-v3.xsl)修改成能同时支持RSS和Atom格式的样式。虽然那个样式倒也说不上难看,但总觉得与我的博客整体风格有些割裂,所以这次打算制作一个和我博客主题完全一致的XSLT样式。
|
||||
|
||||
# 制作订阅文件的XSLT样式
|
||||
虽然想搞这么一个样式,但是我用的Jekyll引擎不能在引用的布局外添加额外内容……如果我要自己写,要么把我的默认布局拆成头和尾两部分然后用include引用,要么把默认布局的代码直接复制一份到XSLT样式中。这两个方案我都不太满意,第一种我以后在修改默认布局时需要同时从两个文件检查上下文,很不方便;而第二种方案违反了DRY原则,也会增加以后修改的难度。所以要怎么办呢?
|
||||
后来我想了想,如果不能通过直接引用默认布局在外面增加XSLT的代码,那干脆让默认布局引用一个XSLT布局吧!这样我就能在不复制默认布局也不进行过多修改的情况下在外面套XSLT的代码了。于是我就在最外面写了个符合XSLT格式的XML布局,让默认布局引用它。然后再写一个布局引用默认布局,让最外面的布局根据这个布局的名字来判断是否需要使用XSLT的布局,具体的实现可以看我的[layout目录](https://github.com/Mabbs/mabbs.github.io/tree/master/_layouts)。另外有一些地方需要注意一下,作为XML,内容中不能包含未闭合的标签,所有自闭合标签结尾必须添加斜杠,属性必须有值,以及所有标签和属性大小写要一致……还好我平时修改布局文件以及编写内容的时候基本上都遵循了这些规则,所以没什么太多需要改动的地方。
|
||||
当时修改时,是模仿之前的那个样式进行的,原来那个样式在`html`元素上加了XML命名空间,但是`xsl:output`配置的输出却是按照HTML的方式输出,结果导致内容中用于换行的`br`标签在实际转换中全部变成了两个标签……我猜应该是转换器看到XML命名空间后,先按照XHTML的规则把`br`解析成了一开一闭的一对标签,然后又根据HTML的转换规则把这对标签当作两个单独的标签输出了吧……但奇怪的是,只有`br`标签出现了这个问题,像`hr`等其他自闭合标签则没有……既然如此,只要把XML命名空间删掉就OK了。
|
||||
在改完之后虽然整体看上去和其他页面似乎已经很相似了,但总感觉还有些样式不太对劲……我猜应该是和文档类型声明有关系,我平时写的是HTML5,而XSLT默认转出来是HTML4.0……但是我不太清楚怎么解决这个问题,于是问了问AI,AI说在`xsl:output`中加上`doctype-system="about:legacy-compat"`就行。最终改完试了下确实有效😂,样式上也没有出现奇怪的偏移了。
|
||||
最后把写好的布局应用到[/feed.xslt.xml](/feed.xslt.xml)中就可以了,之所以是这个路径是因为我用的[jekyll-feed](https://github.com/jekyll/jekyll-feed)只支持这个位置,至于我自己搞的RSS格式的订阅只需要在开头用`xml-stylesheet`指令声明一下就行了。
|
||||
|
||||
# 给XSLT样式自己的样式
|
||||
在写好给订阅文件用的XSLT样式之后,我发现XSLT样式本身也是个XML文件……既然我给订阅文件做了样式,那么也得给XSLT样式文件本身做个样式才对,但如果我单独写一个给它的样式,那岂不是要给样式的样式再写一个样式😂,所以肯定不能这样做。不过仔细想一下,还有个办法,可以让XSLT样式文件自引用自身的样式,这样就能避免之前担心的套娃问题了。所以接下来我应该在XSLT中写一个检测应用样式的XML文件是不是XSLT样式文件的代码,方法很简单,既然XSLT样式中肯定包含`xsl:stylesheet`这个元素,那么我可以判断如果存在这个元素,就可以确定这就是XSLT样式了,如果有人点开看了我就可以展示一个提示信息告诉访客这是一个样式文件,这样访客就不会看到那句“This XML file does not appear to have any style information associated with it. The document tree is shown below.”了😝。
|
||||
|
||||
# 制作Sitemap的XSLT样式
|
||||
既然给XSLT样式也加了样式……那我博客还有其他XML文件需要处理吗?似乎还有个Sitemap,我的Sitemap是[jekyll-sitemap](https://github.com/jekyll/jekyll-sitemap)插件生成的……那它支持加样式吗?虽然文档上没有写,不过看了眼源代码发现可以通过创建[/sitemap.xsl](/sitemap.xsl)文件添加,所以就顺手套用之前的样式搞了一个(虽然应该没有访客去看Sitemap😂,毕竟这是给搜索引擎用的)。可惜这些地址都是插件硬编码的,如果可以自己修改位置我就只写一个XSLT样式文件就可以了……
|
||||
|
||||
# 感想
|
||||
折腾了这么多整体展示效果还不错,虽然这些文件也许根本没人看😂(本来就不是给人读的),但也算展现了一下博客的细节之处吧,而且在折腾的时候至少还了解了不少关于XML和XSLT的知识(尽管在现代这些好像没啥用了)。当然重要的也许不是了解这些知识,而是这个过程吧……总的来说还是挺有意思的。
|
||||
28
_posts/2025-07-13-hacked.md
Normal file
28
_posts/2025-07-13-hacked.md
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
layout: post
|
||||
title: 一次服务器被入侵的经历
|
||||
tags: [Linux, 安全, 服务器, 入侵]
|
||||
---
|
||||
|
||||
即使是被入侵了也可以学到一些知识!<!--more-->
|
||||
|
||||
# 起因
|
||||
前几天,我闲来无事登录了一下一台之前一直闲置的服务器,登录上去后,乍一看似乎没有任何问题,然后习惯性的执行了一下`top`命令看了一眼。从进程列表来看,似乎没有什么明显异常的地方,但是服务器的load值很高,cpu的us值也很高。
|
||||
以前我倒也遇到过几次load值很高的情况,一般是硬盘或NFS等网络存储挂了但是依然有程序在读写挂载的目录会有这种问题,但那种情况一般高的是cpu的wa值,而不是us值,us值是软件正常用掉的……但是进程列表里根本没有占CPU的程序啊……看来服务器是被入侵了😰。
|
||||
|
||||
# 检查服务器
|
||||
虽然说是要查,但其实我根本不知道进程隐藏的原理😂,虽然听说过有恶意软件会这样做,现在遇到了一时半会又想不出来怎么找。还好这是台闲置的服务器,上面什么东西都没有跑,所以正常来说除了ssh连接之外,这个服务器不该有任何其他的连接,于是我执行了一下`netstat -tanp`看了一眼,发现有个奇怪的进程使用一个境外的IP和我的服务器建立了连接,用`ps -ef`查了一下这个 PID,结果进程名显示为`[kcached]`……这下给我整不会了。
|
||||
后来查了些资料知道了可以用`lsof -p`查看进程读取的文件,才看到木马的本体:`/usr/bin/gs-dbus`。不过如果我只是杀掉这个进程然后删除文件,那攻击者肯定会重新回来,所以我得排除一下是不是还有别的木马文件。
|
||||
一般来说攻击者权限维持的方式大多是crontab,不过我看了一下配置文件里似乎没有,root下的`authorized_keys`倒是有个陌生的公钥于是顺手删掉了……也没有其他文件夹下有`gs-dbus`文件……难道没有别的木马文件了吗?后来我仔细找了一下,发现有个很可疑的文件`/usr/local/lib/libprocesshider.so`,一看就不是什么好东西🤣,后来在GitHub上搜了一下,是[libprocesshider](https://github.com/gianlucaborello/libprocesshider)这个项目,就是它让我在top中什么也没找到的,看文档中应用是添加一个`/etc/ld.so.preload`文件,所以解除隐藏效果我也只需要删掉这个文件就好啦。
|
||||
不过感觉还是不够……所以我全盘搜索了一下`libprocesshider.so`文件,果不其然还有,通过那个文件在/usr/games里找到了木马的大本营,里面有一堆这个入侵者的工具,于是就顺手保存了一份然后从服务器上删掉了。
|
||||
另外还有自启动到底是怎么实现的?既然不是crontab……应该是systemd。看了一下果不其然有个服务在保持`gs-dbus`的运行,不过程序我已经删了,所以它现在只会不停尝试重启,接下来只需要停止并禁用这个服务就行了。
|
||||
至于为什么会被入侵……我也很清楚,其实并没有什么漏洞,单纯是设置的密码太简单了,被嘿客扫到啦!所以解决起来也很简单,把这些垃圾清除掉之后设置个稍微复杂一点的密码就行了。
|
||||
|
||||
# 入侵分析
|
||||
既然这个嘿客都不删他的工具,留下来就是给我分析的吧?那么我就像[上次](/2024/11/02/trojan.html)一样分析一下他使用的工具吧~首先里面有个`deploy-all.sh`文件,看起来应该是登录服务器之后最先执行的程序,在这里面有个压缩包,解压出来之后搜了一下里面的文件,发现是[Global Socket](https://github.com/hackerschoice/gsocket)项目,看起来应该是包含反弹Shell、伪装以及权限维持之类功能的一个小工具。看了下源代码才知道原来用`exec -a`就可以伪装进程的名称,而且那个`gs-dbus`就是这个项目里的程序……这么看来挖矿的操作应该是入侵者远程执行的代码,所以在查找进程的时候发现了它吧。
|
||||
除此之外里面还有个logclean项目,看了一眼是[mig-logcleaner-resurrected](https://github.com/infinite-horizon219/mig-logcleaner-resurrected)项目,看起来应该是清除日志用的,不过我根本没从日志找它🤣,即使入侵者用了对我来说也没起到什么作用。不过倒也是个挺有用的项目,也许在某些扫尾工作很有用。
|
||||
最后就是[libprocesshider](https://github.com/gianlucaborello/libprocesshider)这个项目,也许还有其他隐藏进程的方式,不过知道这个项目之后最起码以后再遇到类似的情况我就会优先去看`/etc/ld.so.preload`文件了。
|
||||
至于其他的就是一些爆破SSH的工具,估计是用来横向渗透的,看起来有点原始……也没啥用处,另外还有连接XMR矿池的一些配置文件,以及我也看不出来的玩意,应该就这么多有用的东西了。
|
||||
|
||||
# 感想
|
||||
虽然被入侵是没有预料的事情,但还好这个服务器是闲置的,装完系统之后上面什么有用的东西都没有,所以除了入侵者让它不太闲置赚了点小钱之外对我倒是没什么损失,另外还了解到了一些不错的小工具,这么看来入侵者赚的这点小钱就当是给他的学费吧🤣。
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user