-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathblogBase.json
More file actions
1 lines (1 loc) · 152 KB
/
blogBase.json
File metadata and controls
1 lines (1 loc) · 152 KB
1
{"singlePage": [], "startSite": "", "filingNum": "", "onePageListNum": 22, "commentLabelColor": "#006b75", "yearColorList": ["#bc4c00", "#0969da", "#1f883d", "#A333D0"], "i18n": "CN", "themeMode": "manual", "dayTheme": "light", "nightTheme": "dark", "urlMode": "pinyin", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "style": "", "head": "", "indexScript": "", "indexStyle": "", "bottomText": "\u8981\u505a\u4e00\u4e2a\u6709swag\u7684\u4eba", "showPostSource": 0, "iconList": {}, "UTC": 8, "rssSplit": "sentence", "exlink": {}, "needComment": 0, "allHead": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekVercount.js'></script>", "title": "\u7f57\u534e\u4e1c_@Ronan_\u4e2a\u4eba\u535a\u5ba2", "displayTitle": "\u6b32\u8bf4\u8fd8\u4f11\uff0c\u5374\u9053\u5929\u51c9\u597d\u4e2a\u79cb", "subTitle": "\u63a5\u53d7\u8fc7\u300a\u4e2d\u534e\u4eba\u6c11\u5171\u548c\u56fd\u4e49\u52a1\u6559\u80b2\u6cd5\u300b\u89c4\u5b9a\u7684\u5b8c\u6574\u300c\u4e5d\u5e74\u4e49\u52a1\u6559\u80b2\u300d\uff0c\u5982\u4eca\u4e5f\u662f\u4e2a\u300c\u6b63\u513f\u516b\u7ecf\u300d\u7684\u300c\u6587\u5316\u4eba\u300d\uff0c\u76ee\u524d\u7684\u7269\u7406\u6d3b\u52a8\u8303\u56f4\u4e3b\u8981\u5728\u300c\u67d0\u4e1c\u4e9a\u5927\u56fd\u300d\u3002", "avatarUrl": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "homeUrl": "https://blog.ronan.cloudns.ch", "postListJson": {"P94": {"htmlDir": "docs/post/Dockerfile-de-jian-dan-shi-xian.html", "labels": ["docs"], "postTitle": "Dockerfile\u7684\u7b80\u5355\u5b9e\u73b0", "postUrl": "post/Dockerfile-de-jian-dan-shi-xian.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/94", "commentNum": 0, "wordCount": 9252, "description": "# \u6784\u5efa\u7b2c\u4e00\u4e2aDockerfile\n\n\u5047\u8bbe\u8be5\u955c\u50cf\u5b9e\u73b0\u7684\u7b49\u540c\u4e8e\u6211\u4eec\u5728\u5df2\u7ecf\u914d\u7f6e\u597dpython\u73af\u5883\u7684\u673a\u5668\u4e0a\u901a\u8fc7`python hello.py`\u547d\u4ee4\u6765\u8fd0\u884c\u4e00\u4e2apython\u811a\u672c\n\n\u6240\u4ee5\u8be5Dockerfile\u7684\u6784\u5efa\u6709\u4ee5\u4e0b\u6b65\u9aa4\uff1a\n\n1. \u5728\u684c\u9762\u6216\u5176\u4ed6\u4f4d\u7f6e\u65b0\u5efa\u4e00\u4e2a\u6587\u4ef6\u5939\uff0c\u5047\u8bbe\u6587\u4ef6\u5939\u540d\u4e3adocker\n2. \u5728docker\u65b0\u5efa\u4e00\u4e2ahello.py\u6587\u4ef6\uff0chello.py\u5df2\u7ecf\u5b9e\u73b0\u6240\u9700\u529f\u80fd\n3. \u518d\u5728docker\u65b0\u5efa\u4e00\u4e2a`Dockerfile`\uff0c**\u6ce8\u610f\uff1a\u4ec5\u5f00\u5934\u4e14\u5fc5\u987b\u5927\u5199**\n\n\u4ee5\u4e0b\u662fDockerfile\u5185\u5bb9\uff1a\n\n```shell\n \nFROM python:3.9.19-alpine3.18\nCOPY hello.py /hello.py\n \nCMD python hello.py\n```\n\n# Dockerfile\u8bed\u6cd5\u8bf4\u660e\n\n`Dockerfile` \u662f Docker \u6784\u5efa\u955c\u50cf\u7684\u63cf\u8ff0\u6587\u4ef6\uff0c\u5b83\u5305\u542b\u4e86\u4e00\u7cfb\u5217\u6307\u4ee4\uff0c\u63cf\u8ff0\u4e86\u5982\u4f55\u4ece\u57fa\u7840\u955c\u50cf\u521b\u5efa\u4e00\u4e2a\u65b0\u7684 Docker \u955c\u50cf\u3002", "top": 0, "createdAt": 1742638758, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P95": {"htmlDir": "docs/post/Docker-chang-yong-ming-ling.html", "labels": ["docs"], "postTitle": "Docker\u5e38\u7528\u547d\u4ee4", "postUrl": "post/Docker-chang-yong-ming-ling.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/95", "commentNum": 0, "wordCount": 947, "description": "\n\n# \u542f\u52a8docker \n\n```shell\nsudo service docker start\n```\n\n# \u6388\u4e88 docker sudo \u6743\u9650\n\n```shell\nsudo usermod -aG docker $USER\n```\n\n\n# \u5217\u51fa\u6240\u6709\u5df2\u4e0b\u8f7d\u955c\u50cf\n\n```shell\ndocker images\n```\n\n# \u5217\u51fa\u5f53\u524d\u6240\u6709\u5bb9\u5668\n\n```shell\ndocker ps -a\n```\n\n\u8f93\u51fa\u8be6\u60c5\u4ecb\u7ecd\uff1a\n\n- **CONTAINER ID:** \u5bb9\u5668 ID\u3002", "top": 0, "createdAt": 1742638822, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P96": {"htmlDir": "docs/post/ffmpeg -chang-yong-yong-fa.html", "labels": ["docs"], "postTitle": "ffmpeg \u5e38\u7528\u7528\u6cd5", "postUrl": "post/ffmpeg%20-chang-yong-yong-fa.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/96", "commentNum": 0, "wordCount": 1487, "description": "## \u4e0d\u6539\u53d8\u539f\u89c6\u9891\u7801\u7387\u88c1\u526a\n### \u5e9f\u8bdd\u5c11\u8bf4\uff0c\u76f4\u63a5\u4e3e\u6817\ud83c\udf30\n1.\u4ece `1\u65f615\u520625\u79d2` \u5f00\u59cb\u88c1\u526a\u5230\u89c6\u9891\u7ed3\u675f\uff1a \n```shell\nffmpeg -i input.mp4 -ss 01:15:25 -c copy output.mp4\n``` \n\n2.\u4ece `\u89c6\u9891\u5f00\u59cb\u523015\u52065\u79d2` \uff1a\n```shell\nffmpeg -i input.mp4 -to 00:15:05 -c copy output.mp4\n``` \n\n3.\u4ece `15\u520625\u79d2` \u5230 `1\u65f615\u520625\u79d2` \uff1a\n```shell\nffmpeg -i input.mp4 -ss 15:25 -to 01:15:25 -c copy output.mp4\n``` \n \n`-i` \u6307\u5b9a\u8f93\u5165\u89c6\u9891\u8def\u5f84\uff0c`input.mp4`\u662f\u8981\u88c1\u526a\u7684\u89c6\u9891\u6587\u4ef6\u7684\u8def\u5f84\uff0c `-ss` \u88c1\u526a\u89c6\u9891\u8d77\u59cb\u65f6\u95f4\uff0c`-to` \u88c1\u526a\u89c6\u9891\u7ed3\u675f\u65f6\u95f4\uff0c`-c copy` \u5728\u88c1\u526a\u65f6\u4e0d\u6539\u53d8\u89c6\u9891\u7f16\u7801\uff0c\u4ece\u800c\u4fdd\u6301\u539f\u59cb\u89c6\u9891\u7801\u7387\uff0c `output.mp4` \u4e3a\u88c1\u526a\u540e\u7684\u89c6\u9891\u6587\u4ef6\u3002", "top": 0, "createdAt": 1742638864, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P97": {"htmlDir": "docs/post/fire\uff0c-yi-ge-qiang-da-de-\u300cPython\u300d-ku.html", "labels": ["docs"], "postTitle": "fire\uff0c\u4e00\u4e2a\u5f3a\u5927\u7684\u300cPython\u300d\u5e93", "postUrl": "post/fire%EF%BC%8C-yi-ge-qiang-da-de-%E3%80%8CPython%E3%80%8D-ku.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/97", "commentNum": 0, "wordCount": 3674, "description": "Github\u5730\u5740\uff1a[https://github.com/google/python-fire](https://github.com/google/python-fire)\n\n\u5728\u5f00\u53d1\u547d\u4ee4\u884c\u5de5\u5177\u65f6\uff0c\u5f00\u53d1\u8005\u901a\u5e38\u9700\u8981\u7f16\u5199\u5927\u91cf\u4ee3\u7801\u6765\u89e3\u6790\u547d\u4ee4\u884c\u53c2\u6570\uff0c\u8fd9\u65e2\u8017\u65f6\u53c8\u5bb9\u6613\u51fa\u9519\u3002", "top": 0, "createdAt": 1742638930, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P98": {"htmlDir": "docs/post/GCC -shi-yong-ji-bian-yi-liu-cheng.html", "labels": ["docs"], "postTitle": "GCC \u4f7f\u7528\u53ca\u7f16\u8bd1\u6d41\u7a0b", "postUrl": "post/GCC%20-shi-yong-ji-bian-yi-liu-cheng.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/98", "commentNum": 0, "wordCount": 8706, "description": "**GCC** \u662f Linux \u4e0b\u7684\u7f16\u8bd1\u5de5\u5177\u96c6\uff0c\u662f **GNU Compiler Collection** \u7684\u7f29\u5199\uff0c\u5305\u542b gcc\u3001g++ \u7b49\u7f16\u8bd1\u5668\u3002", "top": 0, "createdAt": 1742638963, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P99": {"htmlDir": "docs/post/GDB -diao-shi.html", "labels": ["docs"], "postTitle": "GDB \u8c03\u8bd5", "postUrl": "post/GDB%20-diao-shi.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/99", "commentNum": 0, "wordCount": 13890, "description": "gdb \u662f\u7531 GNU \u8f6f\u4ef6\u7cfb\u7edf\u793e\u533a\u63d0\u4f9b\u7684\u8c03\u8bd5\u5668\uff0c\u540c gcc \u914d\u5957\u7ec4\u6210\u4e86\u4e00\u5957\u5b8c\u6574\u7684\u5f00\u53d1\u73af\u5883\uff0c\u53ef\u79fb\u690d\u6027\u5f88\u597d\uff0c\u652f\u6301\u975e\u5e38\u591a\u7684\u4f53\u7cfb\u7ed3\u6784\u5e76\u88ab\u79fb\u690d\u5230\u5404\u79cd\u7cfb\u7edf\u4e2d\uff08\u5305\u62ec\u5404\u79cd\u7c7b Unix \u7cfb\u7edf\u4e0e Windows \u7cfb\u7edf\u91cc\u7684 MinGW \u548c Cygwin \uff09\u3002", "top": 0, "createdAt": 1742638991, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P100": {"htmlDir": "docs/post/Hugo-Blog -shang-chuan-jiao-ben.html", "labels": ["tools"], "postTitle": "Hugo-Blog \u4e0a\u4f20\u811a\u672c", "postUrl": "post/Hugo-Blog%20-shang-chuan-jiao-ben.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/100", "commentNum": 0, "wordCount": 208, "description": "\u4f7f\u7528\u65b9\u6cd5\uff1a\n- \u5c06\u4e0b\u9762\u4ee3\u7801\u4fdd\u5b58\u5728\u4e00\u4e2a py \u6587\u4ef6\u4e2d\uff0c\u4e4b\u540e\u8fd0\u884c\u5373\u53ef\u3002", "top": 0, "createdAt": 1742639477, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P101": {"htmlDir": "docs/post/Huxpro-Blog-shang-chuan-jiao-ben.html", "labels": ["tools"], "postTitle": "Huxpro-Blog\u4e0a\u4f20\u811a\u672c", "postUrl": "post/Huxpro-Blog-shang-chuan-jiao-ben.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/101", "commentNum": 0, "wordCount": 156, "description": "# \u7528\u6cd5\n\n- **\u6ce8\u610f** `create_new_file_in_the_repo` \u51fd\u6570\u91cc\u7684 `branch='main'` \u53c2\u6570\uff0c\u6839\u636e\u81ea\u8eab\u4ed3\u5e93\u5206\u652f\u4fee\u6539\n\n[\u70b9\u6211\u67e5\u770b\u4ee3\u7801](https://gist.github.com/EchoZap/07c04ba1df4c41a875b1f27ccf29c1c3)\n\u3002", "top": 0, "createdAt": 1742639553, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P102": {"htmlDir": "docs/post/IPv6-de-shi-yong.html", "labels": ["docs"], "postTitle": "IPv6\u7684\u4f7f\u7528", "postUrl": "post/IPv6-de-shi-yong.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/102", "commentNum": 0, "wordCount": 1419, "description": "# \u67e5\u770b\u662f\u5426\u6709 IPv6 \u5730\u5740\n\n\u5728\u7ec8\u7aef\u4e2d\u300cmacos\u300d\u8f93\u5165\uff1a\n\n```shell\nifconfig | grep 'inet6'\n```\n\n\u5982\u679c\u8fd4\u56de\u7684\u662f\u7c7b\u4f3c\u4e0b\u65b9\uff08\u8fd9\u91cc\u7684\u6f14\u793a\u8fd0\u8425\u5546\u662f\u79fb\u52a8\uff09\uff0c\u90a3\u8bf4\u660e\u4f60\u662f\u6709 IPv6 \u516c\u7f51\u5730\u5740\u7684\uff1a\n\n\n\n\u8fd9\u4e9b\u5730\u5740\u5206\u4e3a\u4e24\u7c7b\uff1a `\u672c\u5730\u94fe\u8def\u5730\u5740` \u548c `\u5168\u5c40\u5730\u5740`\uff0c\u5b83\u4eec\u7684\u524d\u7f00\u548c\u4f5c\u7528\u4e0d\u540c\u3002", "top": 0, "createdAt": 1742639580, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P103": {"htmlDir": "docs/post/JavaScript.html", "labels": ["docs"], "postTitle": "JavaScript", "postUrl": "post/JavaScript.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/103", "commentNum": 0, "wordCount": 22867, "description": "# \u5bf9\u8c61\u6982\u8ff0\n\n\u4ec0\u4e48\u662f\u5bf9\u8c61\uff1f\u5bf9\u8c61\uff08object\uff09\u662f JavaScript \u8bed\u8a00\u7684\u6838\u5fc3\u6982\u5ff5\uff0c\u4e5f\u662f\u6700\u91cd\u8981\u7684\u6570\u636e\u7c7b\u578b\n\n\u7b80\u5355\u8bf4\uff0c\u5bf9\u8c61\u5c31\u662f\u4e00\u7ec4\u201c\u952e\u503c\u5bf9\u201d\uff08key-value\uff09\u7684\u96c6\u5408\uff0c\u662f\u4e00\u79cd\u65e0\u5e8f\u7684\u590d\u5408\u6570\u636e\u96c6\u5408\n\n\n\n```js\nvar user = {\n name: 'itbaizhan',\n age: '13'\n};\n```\n\n\u5bf9\u8c61\u7684\u6bcf\u4e00\u4e2a\u952e\u540d\u53c8\u79f0\u4e3a\u201c\u5c5e\u6027\u201d\uff08property\uff09\uff0c\u5b83\u7684\u201c\u952e\n\n\u503c\u201d\u53ef\u4ee5\u662f\u4efb\u4f55\u6570\u636e\u7c7b\u578b\u3002", "top": 0, "createdAt": 1742639625, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P104": {"htmlDir": "docs/post/JavaScript -chang-yong-yong-fa.html", "labels": ["docs"], "postTitle": "JavaScript \u5e38\u7528\u7528\u6cd5", "postUrl": "post/JavaScript%20-chang-yong-yong-fa.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/104", "commentNum": 0, "wordCount": 2596, "description": "# \u83b7\u53d6 DOM \u8282\u70b9\n\n### 1.\u9009\u62e9\u5339\u914d\u5230\u7684\u7b2c\u4e00\u4e2a\u5143\u7d20\n\n**\u8bed\u6cd5\uff1a**\n\n```javascript\ndocument.querySelector('css\u9009\u62e9\u5668')\n```\n\n**\u53c2\u6570\uff1a**\n\n\u5305\u542b\u4e00\u4e2a\u6216\u591a\u4e2a\u6709\u6548\u7684css\u9009\u62e9\u5668 **\u5b57\u7b26\u4e32** \uff0c\u67e5\u770b [\u66f4\u591acss\u9009\u62e9\u5668](https://www.runoob.com/cssref/css-selectors.html)\u3002", "top": 0, "createdAt": 1742639665, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P105": {"htmlDir": "docs/post/linux -cha-kan-huo-xiu-gai-zhu-ji-ming.html", "labels": ["linux"], "postTitle": "linux \u67e5\u770b\u6216\u4fee\u6539\u4e3b\u673a\u540d", "postUrl": "post/linux%20-cha-kan-huo-xiu-gai-zhu-ji-ming.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/105", "commentNum": 0, "wordCount": 449, "description": "# 1\u67e5\u770b\u5f53\u524d\u4e3b\u673a\u540d\n\n```plain\nhostname\n```\n\n\u8fd9\u5c06\u4f1a\u663e\u793a\u5f53\u524d\u7684\u4e3b\u673a\u540d\uff0c\u6216\u8005\n\n```zsh\ncat /etc/hostname\n```\n \n\n# 2\u4fee\u6539\u4e3b\u673a\u540d\n\n\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u8bbe\u7f6e\u65b0\u4e3b\u673a\u540d\n\n```zsh\nsudo hostnamectl set-hostname <new_hostname>\n```\n\n\u4e4b\u540e\u5728\u6587\u4ef6\u4e2d\u627e\u5230\u5305\u542b\u65e7\u4e3b\u673a\u540d\u7684\u884c\uff0c\u5e76\u5c06\u5176\u66ff\u6362\u4e3a\u65b0\u4e3b\u673a\u540d\u3002", "top": 0, "createdAt": 1742639708, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P106": {"htmlDir": "docs/post/linux -yong-hu-yu-yong-hu-zu-de-chuang-jian-\u3001-qie-huan-ji-shan-chu.html", "labels": ["linux"], "postTitle": "linux \u7528\u6237\u4e0e\u7528\u6237\u7ec4\u7684\u521b\u5efa\u3001\u5207\u6362\u53ca\u5220\u9664", "postUrl": "post/linux%20-yong-hu-yu-yong-hu-zu-de-chuang-jian-%E3%80%81-qie-huan-ji-shan-chu.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/106", "commentNum": 0, "wordCount": 1962, "description": "# 1\u521b\u5efa\u65b0\u7528\u6237\n\n1. \u4ee5root\u7528\u6237\u8eab\u4efd\u767b\u5f55\u5230Linux\u7cfb\u7edf\u3002", "top": 0, "createdAt": 1742639753, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P107": {"htmlDir": "docs/post/macOS-qu-chu-zhong-fu-PATH-huan-jing-bian-liang.html", "labels": ["bug"], "postTitle": "macOS\u53bb\u9664\u91cd\u590dPATH\u73af\u5883\u53d8\u91cf", "postUrl": "post/macOS-qu-chu-zhong-fu-PATH-huan-jing-bian-liang.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/107", "commentNum": 0, "wordCount": 1954, "description": "> \u73af\u5883\u53d8\u91cf\u5206\u4e3a\u7cfb\u7edf\u548c\u7528\u6237\uff0c\u8fd9\u91cc\u4e3b\u8981\u914d\u7f6e\u7528\u6237\u73af\u5883\n\n\u5728 macOS \u4e0a\uff0c\u5168\u5c40\u7684\u7cfb\u7edf\u73af\u5883\u53d8\u91cf\u6587\u4ef6\u901a\u5e38\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u6587\u4ef6\u548c\u76ee\u5f55\u6765\u914d\u7f6e\uff1a\n\n1. **`/etc/profile`**\uff1a\n\n- \u8fd9\u662f\u7cfb\u7edf\u8303\u56f4\u7684 shell \u914d\u7f6e\u6587\u4ef6\uff0c\u9002\u7528\u4e8e\u6240\u6709\u7528\u6237\u3002", "top": 0, "createdAt": 1742639812, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P108": {"htmlDir": "docs/post/macOS -dian-chi-guan-li-jiao-ben.html", "labels": ["tools"], "postTitle": "macOS \u7535\u6c60\u7ba1\u7406\u811a\u672c", "postUrl": "post/macOS%20-dian-chi-guan-li-jiao-ben.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/108", "commentNum": 0, "wordCount": 1006, "description": "\u5c06\u4ee5\u4e0b\u5185\u5bb9\u4fdd\u5b58\u4e3a `power_manager.sh` \u5e76\u653e\u5165\u7cfb\u7edf\u73af\u5883\u53d8\u91cf\u7684\u8def\u5f84\u4e2d\uff0c\u63a5\u4e0b\u6765\u53ef\u901a\u8fc7 `nohup /path/power_manager.sh &` \u6765\u5b9e\u73b0\u540e\u53f0\u8fd0\u884c\n\n```shell\n#!/bin/zsh\n\n# \u5173\u95ed\u4f11\u7720\ndisable_sleep() {\n sudo pmset -b sleep 0\n sudo pmset -b disablesleep 1\n}\n\n# \u542f\u7528\u4f11\u7720\nenable_sleep() {\n sudo pmset -b sleep 5\n sudo pmset -b disablesleep 0\n}\n\nwhile true; do\n\n LOG_FILE='\uff5e/power_manager.log'\n\n # \u83b7\u53d6\u7535\u8111\u76d6\u5b50\u72b6\u6001\n lid_state=$(ioreg -r -k AppleClamshellState -d 4 | grep AppleClamshellState | head -1 | awk '{print $NF}')\n\n # \u83b7\u53d6\u7535\u6e90\u8fde\u63a5\u72b6\u6001\n ac_state=$(pmset -g batt | head -1)\n\n if [[ $lid_state == 'Yes' ]]; then\n # \u5408\u76d6\u72b6\u6001\n if [[ $ac_state =~ 'AC' ]]; then\n # \u8fde\u63a5\u7535\u6e90\uff0c\u5173\u95ed\u4f11\u7720\u5e76\u7acb\u5373\u4fdd\u6301\u7cfb\u7edf\u5524\u9192\n disable_sleep\n else\n # \u672a\u8fde\u63a5\u7535\u6e90\uff0c\u5f00\u542f\u4f11\u7720\u5e76\u7acb\u5373\u8fdb\u5165\u4f11\u7720\n enable_sleep\n pmset sleepnow\n fi\n else\n # \u5f00\u76d6\u72b6\u6001\n if [[ $ac_state =~ 'AC' ]]; then\n # \u8fde\u63a5\u7535\u6e90\uff0c\u5173\u95ed\u4f11\u7720\u5e76\u4fdd\u6301\u7cfb\u7edf\u5524\u9192\n disable_sleep\n else\n # \u672a\u8fde\u63a5\u7535\u6e90\uff0c\u5f00\u542f\u4f11\u7720\u4f46\u4e0d\u7acb\u5373\u8fdb\u5165\u4f11\u7720\n enable_sleep\n fi\n fi\n sleep 5\ndone\n```\n\u3002", "top": 0, "createdAt": 1742639847, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P109": {"htmlDir": "docs/post/mac-yi-zhi-wen-shou-quan-sudo-zhi-ling.html", "labels": ["tools"], "postTitle": "mac\u4ee5\u6307\u7eb9\u6388\u6743sudo\u6307\u4ee4", "postUrl": "post/mac-yi-zhi-wen-shou-quan-sudo-zhi-ling.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/109", "commentNum": 0, "wordCount": 490, "description": "\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u6253\u5f00\uff1b\n\n```zsh\nsudo vim /etc/pam.d/sudo\n```\n\n\u51fa\u73b0\u4ee5\u4e0b\u5185\u5bb9\uff1a\n\n```zsh\n 1 # sudo: auth account password session\n 2 auth include sudo_local\n 3 auth sufficient pam_smartcard.so\n 4 auth required pam_opendirectory.so\n 5 account required pam_permit.so\n 6 password required pam_deny.so\n 7 session required pam_permit.so\n```\n\n\n\u5c06\u4e0b\u9762\u8fd9\u4e00\u884c\n\n```plain\nauth sufficient pam_smartcard.so\n```\n\n\u4fee\u6539\u4e3a\n\n```plain\nauth sufficient pam_tid.so\n```\n\n\u4fdd\u5b58\u5e76\u9000\u51fa\u5373\u53ef\n\u3002", "top": 0, "createdAt": 1742639908, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P110": {"htmlDir": "docs/post/mac-shi-yong-zhu-ji-ming-dai-ti-IP-di-zhi-jin-xing-ssh-lian-jie.html", "labels": ["docs"], "postTitle": "mac\u4f7f\u7528\u4e3b\u673a\u540d\u4ee3\u66ffIP\u5730\u5740\u8fdb\u884cssh\u8fde\u63a5", "postUrl": "post/mac-shi-yong-zhu-ji-ming-dai-ti-IP-di-zhi-jin-xing-ssh-lian-jie.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/110", "commentNum": 0, "wordCount": 530, "description": "# 1\u7f16\u8f91\u672c\u5730SSH\u914d\u7f6e\u6587\u4ef6\n\n1. **\u7f16\u8f91\u672c\u5730 SSH \u914d\u7f6e\u6587\u4ef6**\uff1a\u9996\u5148\uff0c\u4f60\u9700\u8981\u7f16\u8f91\u672c\u5730 SSH \u914d\u7f6e\u6587\u4ef6\uff0c\u53ef\u4ee5\u4f7f\u7528\u4efb\u4f55\u6587\u672c\u7f16\u8f91\u5668\u6253\u5f00 `~/.ssh/config` \u6587\u4ef6\u3002", "top": 0, "createdAt": 1742639934, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P111": {"htmlDir": "docs/post/mac-he-gai-bu-xiu-mian-\u3001-an-zhuang-bao-sun-huai-jie-jue-ban-fa.html", "labels": ["bug"], "postTitle": "mac\u5408\u76d6\u4e0d\u4f11\u7720\u3001\u5b89\u88c5\u5305\u635f\u574f\u89e3\u51b3\u529e\u6cd5", "postUrl": "post/mac-he-gai-bu-xiu-mian-%E3%80%81-an-zhuang-bao-sun-huai-jie-jue-ban-fa.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/111", "commentNum": 0, "wordCount": 409, "description": "# 'app\u5df2\u635f\u574f\uff0c\u65e0\u6cd5\u6253\u5f00'\u95ee\u9898\u89e3\u51b3\u65b9\u6cd5\n\n```shell\nsudo xattr -rd com.apple.quarantine <your_app_path>\n```\n\n\u5c06`your_app_path`\u66ff\u6362\u6210app\u8def\u5f84\uff0c\u53ef\u4ee5\u76f4\u63a5\u5c06\u5e94\u7528\u7a0b\u5e8f\u91cc\u7684app\u56fe\u6807\u62d6\u5230\u7ec8\u7aef\u7a97\u53e3\u7684\u8fd9\u6761\u547d\u4ee4\u91cc\uff0c\u6309\u56de\u8f66\u952e\u6267\u884c\u3002", "top": 0, "createdAt": 1742639961, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P112": {"htmlDir": "docs/post/Makefile.html", "labels": ["docs"], "postTitle": "Makefile", "postUrl": "post/Makefile.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/112", "commentNum": 0, "wordCount": 5447, "description": "## 1.\u89c4\u5219\n\n> Makefile\u7684\u6846\u67b6\u662f\u7531\u89c4\u5219\u6784\u6210\u7684\u3002", "top": 0, "createdAt": 1742639986, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P113": {"htmlDir": "docs/post/npm -chang-yong-yong-fa.html", "labels": ["docs"], "postTitle": "npm \u5e38\u7528\u7528\u6cd5", "postUrl": "post/npm%20-chang-yong-yong-fa.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/113", "commentNum": 0, "wordCount": 451, "description": "\u4f60\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b\u5df2\u7ecf\u901a\u8fc7 `npm` \u5b89\u88c5\u7684\u5305\uff1a\n\n### 1. **\u67e5\u770b\u5168\u5c40\u5b89\u88c5\u7684\u5305**\n\n\u8981\u67e5\u770b\u5168\u5c40\u5b89\u88c5\u7684\u6240\u6709\u5305\uff0c\u53ef\u4ee5\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a\n\n```bash\nnpm list -g --depth=0\n```\n\n\u8fd9\u4e2a\u547d\u4ee4\u4f1a\u5217\u51fa\u6240\u6709\u5168\u5c40\u5b89\u88c5\u7684\u5305\uff0c\u5e76\u4e14\u4f7f\u7528 `--depth=0` \u9009\u9879\u53ea\u663e\u793a\u9876\u7ea7\u5305\uff0c\u4e0d\u663e\u793a\u5b83\u4eec\u7684\u4f9d\u8d56\u9879\u3002", "top": 0, "createdAt": 1742640008, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P114": {"htmlDir": "docs/post/OpenOCD -shao-lu-shi-bai-jie-jue-fang-fa.html", "labels": ["bug"], "postTitle": "OpenOCD \u70e7\u5f55\u5931\u8d25\u89e3\u51b3\u65b9\u6cd5", "postUrl": "post/OpenOCD%20-shao-lu-shi-bai-jie-jue-fang-fa.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/114", "commentNum": 0, "wordCount": 1772, "description": "# \u5728\u70e7\u5f55\u65f6\u9047\u5230\u5982\u4e0b\u95ee\u9898\uff1a\n\n```shell\n\u276f openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c 'program /path/project/build.bin verify reset exit 0x08000000' \n \nopenocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c 'program build/final.bin verify reset exit 0x08000000'\nOpen On-Chip Debugger 0.12.0\nLicensed under GNU GPL v2\nFor bug reports, read\n http://openocd.org/doc/doxygen/bugs.html\nWARNING: interface/stlink-v2.cfg is deprecated, please switch to interface/stlink.cfg\nInfo : auto-selecting first available session transport 'hla_swd'. To override use 'transport select <transport>'.\nInfo : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD\nInfo : clock speed 1000 kHz\nInfo : STLINK V2J45M30 (API v2) VID:PID 0483:374B\nInfo : Target voltage: 3.269241\nWarn : UNEXPECTED idcode: 0x1ba01477\nError: expected 1 of 1: 0x2ba01477\nin procedure 'program'\n** OpenOCD init failed **\nshutdown command invoked\nmake: *** [flash] Error 1\n```\n\n---\n\n# \u89e3\u51b3\u65b9\u6cd5\n\u5728 /opt/homebrew/Cellar/open-ocd/0.12.0_1/share/openocd/scripts/target\uff08\u6839\u636e\u81ea\u5df1\u5b89\u88c5 OpenOCD \u7684\u4f4d\u7f6e\u67e5\u627e\uff0c\u901a\u8fc7 brew \u5b89\u88c5\u7684\u5c31\u5728\u8fd9\u4e2a\u4f4d\u7f6e\uff09\u627e\u5230\u7b26\u5408\u81ea\u5df1\u5355\u7247\u673a\u578b\u53f7\u7684 cfg \u6587\u4ef6\uff0c\u4f8b\u5982 stm32f1x.cfg \u3002", "top": 0, "createdAt": 1742640031, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P115": {"htmlDir": "docs/post/PlatformIO-shao-lu-shi-bai-(51-xi-lie-)-jie-jue-fang-fa.html", "labels": ["bug"], "postTitle": "PlatformIO\u70e7\u5f55\u5931\u8d25(51\u7cfb\u5217)\u89e3\u51b3\u65b9\u6cd5", "postUrl": "post/PlatformIO-shao-lu-shi-bai-%2851-xi-lie-%29-jie-jue-fang-fa.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/115", "commentNum": 0, "wordCount": 347, "description": "## \u906d\u9047\u95ee\u9898\n\n***platformIO\u4e00\u76f4\u5361\u5728\u70e7\u5f55\u7a0b\u5e8f\u4e2d\uff0c\u5bfc\u81f4\u5f00\u53d1\u7248\u4e00\u76f4\u5904\u4e8e\u65ad\u7535\u72b6\u6001***\n\n\n## \u89e3\u51b3\u65b9\u6cd5\n\n\u5c06main.py\u91cc\u7684\u8fd9\u4e00\u884c\u6ce8\u91ca\u5373\u53ef\n\n\n\u8be5\u6587\u4ef6\u5728\u4ee5\u4e0b\u8def\u5f84\n`~/.platformio/platforms/intel_mcs51/builder/main.py`\n\n\u3002", "top": 0, "createdAt": 1742640055, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P116": {"htmlDir": "docs/post/PyInstaller-jiang-Python-ying-yong-da-bao-wei-Android-ying-yong-cheng-xu.html", "labels": ["tools"], "postTitle": "PyInstaller\u5c06Python\u5e94\u7528\u6253\u5305\u4e3aAndroid\u5e94\u7528\u7a0b\u5e8f", "postUrl": "post/PyInstaller-jiang-Python-ying-yong-da-bao-wei-Android-ying-yong-cheng-xu.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/116", "commentNum": 0, "wordCount": 1646, "description": "\u5728\u79fb\u52a8\u5e94\u7528\u5f00\u53d1\u4e2d\uff0cPython\u867d\u7136\u4e0d\u5982Java\u6216Kotlin\u90a3\u6837\u5e7f\u6cdb\u4f7f\u7528\uff0c\u4f46\u4ecd\u6709\u4e00\u90e8\u5206\u5f00\u53d1\u8005\u504f\u7231\u4f7f\u7528Python\u8fdb\u884c\u5f00\u53d1\u3002", "top": 0, "createdAt": 1742640083, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P117": {"htmlDir": "docs/post/HuxproBlog -bei-fen-zi-dong-hua.html", "labels": ["tools"], "postTitle": "HuxproBlog \u5907\u4efd\u81ea\u52a8\u5316", "postUrl": "post/HuxproBlog%20-bei-fen-zi-dong-hua.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/117", "commentNum": 0, "wordCount": 7612, "description": "> \u672c\u6587\u4ec5\u9002\u7528\u4e8e[Huxpro \u535a\u5ba2\u53ca\u5176\u6a21\u677f](https://github.com/Huxpro/huxpro.github.io) \uff01\uff01\uff01\n\n# \u51c6\u5907 `backup.py` \u4ee5\u53ca `backup`\n\n1.\u5728 `\u4ed3\u5e93\u6839\u76ee\u5f55` \u4e0b\u65b0\u5efa\u4e00\u4e2a backup \u7a7a\u76ee\u5f55\uff0c\u300c\u4e3a\u9632\u6b62 github \u81ea\u52a8\u5ffd\u7565\u7a7a\u76ee\u5f55\uff0c\u6240\u4ee5\u53ef\u4ee5\u5728backup \u91cc\u9762\u968f\u4fbf\u65b0\u5efa\u4e00\u4e2a t.md\u300d \n2.\u5c06\u4ee5\u4e0b\u4ee3\u7801\u4fdd\u5b58\u4e3a `backup.py` \u5e76\u4e14\u653e\u7f6e\u5230 `\u4ed3\u5e93\u6839\u76ee\u5f55` \u4e0b\n\nbackup.py \u6e90\u7801\uff1a\n\n```python\nimport os\nimport re\nimport argparse\n\nclass Backup:\n\n def __init__(self, source_path, backup):\n # \u5907\u4efd\u7684\u6587\u6863\u8def\u5f84\n self.backup = backup\n # \u5e26\u65e5\u671f\u524d\u7f00\u7684\u535a\u6587\u76ee\u5f55\n self.source_path = source_path\n\n def process_file(self, file_name):\n # \u53bb\u6389\u6587\u4ef6\u5143\u6570\u636e\u548c\u540d\u79f0\u524d\u9762\u7684\u65e5\u671f\n\n removing_date_file = re.sub(r'^\\d{4}-\\d{2}-\\d{2}-', '', file_name)\n\n # \u8bfb\u53d6\u6587\u4ef6\u5185\u5bb9\u5e76\u79fb\u9664 YAML \u524d\u7f6e\u4e8b\u9879\n with open(f'{self.source_path}/{file_name}', 'r', encoding='utf-8') as file:\n content = file.read()\n\n # \u4f7f\u7528\u6b63\u5219\u8868\u8fbe\u5f0f\u627e\u5230\u5e76\u53bb\u6389\u7b2c\u4e00\u4e2a\u4ee5\u201c---\u201d\u5206\u9694\u7684\u90e8\u5206\n content = re.sub(r'^---.*?---\\s*', '', content, flags=re.DOTALL)\n\n # \u5c06\u4fee\u6539\u540e\u7684\u5185\u5bb9\u5199\u5165\u65b0\u7684\u6587\u4ef6\n with open(f'{self.backup}/{removing_date_file}', 'w', encoding='utf-8') as new_file:\n new_file.write(content)\n\n def delete_old_file(self):\n # \u83b7\u53d6 backup \u76ee\u5f55\u4e0b\u7684\u6240\u6709 md \u6587\u4ef6\n backup_files = {f for f in os.listdir(self.backup) if f.endswith('.md')}\n\n # \u83b7\u53d6 _posts \u76ee\u5f55\u4e0b\u7684\u6240\u6709 md \u6587\u4ef6\n source_files = {f for f in os.listdir(self.source_path) if f.endswith('.md')}\n\n # \u83b7\u5f97_posts \u76ee\u5f55\u4e0b\u53bb\u9664\u65e5\u671f\u540e\u7684\u6587\u4ef6\u540d\u7684\u96c6\u5408\n intermediate_name = {re.sub(r'^\\d{4}-\\d{2}-\\d{2}-', '', f) for f in source_files}\n\n # \u627e\u51fa\u5728 backup \u76ee\u5f55\u4e2d\u4f46\u4e0d\u5728 source \u76ee\u5f55\u4e2d\u7684\u6587\u4ef6\n unmatched_files = backup_files - intermediate_name\n\n # \u5220\u9664\u8fd9\u4e9b\u4e0d\u4e00\u81f4\u7684\u6587\u4ef6\n for file_name in unmatched_files:\n file_path = os.path.join(self.backup, file_name)\n os.remove(file_path)\n\n def get_post_name(self) -> list[str]:\n\n post_names = []\n for post_name in os.listdir(self.source_path):\n if post_name.endswith('.md') or post_name.endswith('.txt'):\n post_names.append(post_name)\n\n return post_names\n\ndef main():\n parser = argparse.ArgumentParser(description='Process a file to remove date from filename and YAML front matter.')\n\n # \u6dfb\u52a0\u4e00\u4e2a\u4f4d\u7f6e\u53c2\u6570\u6765\u63a5\u53d7\u6587\u4ef6\u8def\u5f84\n parser.add_argument('source_path', type=str, help='\u9700\u8981\u5907\u4efd\u7684\u76ee\u5f55')\n parser.add_argument('backup', type=str, help='\u5907\u4efd\u6587\u4ef6\u5b58\u653e\u7684\u76ee\u5f55')\n\n # \u89e3\u6790\u547d\u4ee4\u884c\u53c2\u6570\n args = parser.parse_args()\n\n # \u521b\u5efa Backup \u7c7b\u7684\u5b9e\u4f8b\n backup = Backup(args.source_path, args.backup)\n post_names = backup.get_post_name()\n\n for post_name in post_names:\n backup.process_file(post_name)\n\n backup.delete_old_file()\n\n print('backup succeed')\n\nif __name__ == '__main__':\n main()\n```\n\n# \u4fee\u6539actions\n\u5c06\u4ed3\u5e93\u6839\u76ee\u5f55\u4e0b\u7684 `.github/workflows/jekyll.yml` \u5185\u5bb9\u4fee\u6539\u4e3a\uff1a\n\n```yml\n\n# This workflow uses actions that are not certified by GitHub.\n# They are provided by a third-party and are governed by\n# separate terms of service, privacy policy, and support\n# documentation.\n\n# Sample workflow for building and deploying a Jekyll site to GitHub Pages\nname: Deploy Jekyll site to Pages\n\non:\n # Runs on pushes targeting the default branch\n push:\n branches: ['main']\n\n # Allows you to run this workflow manually from the Actions tab\n workflow_dispatch:\n\n# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages\npermissions:\n contents: write\n pages: write\n id-token: write\n\n# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.\n# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.\nconcurrency:\n group: 'pages'\n cancel-in-progress: false\n\njobs:\n # Build job\n build:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout\n uses: actions/checkout@v4\n\n\n\n - name: Set up Python\n uses: actions/setup-python@v5\n with:\n python-version: 3.12\n\n - name: Install dependencies\n run: |\n pip install --upgrade pip\n\n - name: Run backup script\n run: |\n python backup.py _posts backup\n\n - name: Commit and push backup files\n run: |\n git config --local user.email 'action@github.com'\n git config --local user.name 'GitHub Action'\n git add .\n git commit -m 'Updates backup files' || echo 'No changes to commit'\n git push\n\n\n\n - name: Setup Ruby\n uses: ruby/setup-ruby@8575951200e472d5f2d95c625da0c7bec8217c42 # v1.161.0\n with:\n ruby-version: '3.1' # Not needed with a .ruby-version file\n bundler-cache: true # runs 'bundle install' and caches installed gems automatically\n cache-version: 0 # Increment this number if you need to re-download cached gems\n\n - name: Setup Pages\n id: pages\n uses: actions/configure-pages@v5\n\n - name: Build with Jekyll\n # Outputs to the './_site' directory by default\n run: bundle exec jekyll build --baseurl '${{ steps.pages.outputs.base_path }}'\n env:\n JEKYLL_ENV: production\n\n - name: Upload artifact\n # Automatically uploads an artifact from the './_site' directory by default\n uses: actions/upload-pages-artifact@v3\n\n # Deployment job\n deploy:\n environment:\n name: github-pages\n url: ${{ steps.deployment.outputs.page_url }}\n runs-on: ubuntu-latest\n needs: build\n steps:\n - name: Deploy to GitHub Pages\n id: deployment\n uses: actions/deploy-pages@v4\n```\n\n\n#### actions\u6539\u52a8\u7684\u4f4d\u7f6e\n\n`.github/workflows/jekyll.yml` \u6539\u52a8\u7684\u4f4d\u7f6e\u662f\uff1a\n\n1. `permissions` \u91cc\u7684 contents \u8bbe\u7f6e\u4e3a write\n2. \u5728 biuld \u5de5\u4f5c\u6d41\u91cc\u6dfb\u52a0\u4e86\u5173\u4e8e backup.py \u7684\u4f7f\u7528\n\n```yml\n# This workflow uses actions that are not certified by GitHub.\n# They are provided by a third-party and are governed by\n# separate terms of service, privacy policy, and support\n# documentation.\n\n# Sample workflow for building and deploying a Jekyll site to GitHub Pages\nname: Deploy Jekyll site to Pages\n\non:\n # Runs on pushes targeting the default branch\n push:\n branches: ['main']\n\n # Allows you to run this workflow manually from the Actions tab\n workflow_dispatch:\n\n# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages\npermissions:\n contents: read\n pages: write\n id-token: write\n\n# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.\n# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.\nconcurrency:\n group: 'pages'\n cancel-in-progress: false\n\njobs:\n # Build job\n build:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout\n uses: actions/checkout@v4\n\n - name: Setup Ruby\n uses: ruby/setup-ruby@8575951200e472d5f2d95c625da0c7bec8217c42 # v1.161.0\n with:\n ruby-version: '3.1' # Not needed with a .ruby-version file\n bundler-cache: true # runs 'bundle install' and caches installed gems automatically\n cache-version: 0 # Increment this number if you need to re-download cached gems\n\n - name: Setup Pages\n id: pages\n uses: actions/configure-pages@v5\n\n - name: Build with Jekyll\n # Outputs to the './_site' directory by default\n run: bundle exec jekyll build --baseurl '${{ steps.pages.outputs.base_path }}'\n env:\n JEKYLL_ENV: production\n\n - name: Upload artifact\n # Automatically uploads an artifact from the './_site' directory by default\n uses: actions/upload-pages-artifact@v3\n\n # Deployment job\n deploy:\n environment:\n name: github-pages\n url: ${{ steps.deployment.outputs.page_url }}\n runs-on: ubuntu-latest\n needs: build\n steps:\n - name: Deploy to GitHub Pages\n id: deployment\n uses: actions/deploy-pages@v4\n```\n\u3002", "top": 0, "createdAt": 1742640124, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P118": {"htmlDir": "docs/post/sdcc-gong-cheng-chuang-jian-mo-ban-cheng-xu.html", "labels": ["tools"], "postTitle": "sdcc\u5de5\u7a0b\u521b\u5efa\u6a21\u7248\u7a0b\u5e8f", "postUrl": "post/sdcc-gong-cheng-chuang-jian-mo-ban-cheng-xu.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/118", "commentNum": 0, "wordCount": 2440, "description": "## 1.\u7a0b\u5e8f\u6784\u5efa\n\n\u65b0\u5efa\u4e00\u4e2atxt\u6587\u4ef6\u5e76\u5c06\u4ee5\u4e0b\u4ee3\u7801\u590d\u5236\u5230`xxx.txt`\uff0c\u4e4b\u540e\u5c06`xxx.txt\uff08\u4f8b\u5982sdccpj.txt\uff09`\u540e\u7f00\u540d\u4fee\u6539\u4e3a`.sh\uff08\u4f8b\u5982sdccpj.sh\uff09`\u6216\u8005\u76f4\u63a5\u53bb\u6389\u540e\u7f00\u540d\u53ea\u4fdd\u7559\u6587\u4ef6\u540d\uff08\u8fd9\u5728\u7c7blinux\u7cfb\u7edf\u4e2d\u5c31\u662f\u53ef\u6267\u884c\u7a0b\u5e8f\uff09`sdccpj`\u3002", "top": 0, "createdAt": 1742640152, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P119": {"htmlDir": "docs/post/sdcc -bian-yi-yu-lian-jie.html", "labels": ["docs"], "postTitle": "sdcc \u7f16\u8bd1\u4e0e\u94fe\u63a5", "postUrl": "post/sdcc%20-bian-yi-yu-lian-jie.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/119", "commentNum": 0, "wordCount": 1279, "description": "## 1.\u7f16\u8bd1\u6e90\u6587\u4ef6\n\n\u9996\u5148\uff0c\u4f60\u9700\u8981\u7f16\u8bd1\u4f60\u7684\u6e90\u6587\u4ef6\uff08\u4f8b\u5982 `main.c`\uff09\u4ee5\u751f\u6210\u76ee\u6807\u6587\u4ef6\uff08.rel\uff09\u3002", "top": 0, "createdAt": 1742640182, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P120": {"htmlDir": "docs/post/shell -wen-ben-\u3001-zi-fu-chuan-chu-li.html", "labels": ["docs"], "postTitle": "shell \u6587\u672c\u3001\u5b57\u7b26\u4e32\u5904\u7406", "postUrl": "post/shell%20-wen-ben-%E3%80%81-zi-fu-chuan-chu-li.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/120", "commentNum": 0, "wordCount": 935, "description": "## 1\u3001\u5b57\u7b26\u4e32\u5207\u7247\n\uff04{\u53d8\u91cf\uff1a\u504f\u79fb\u91cf\uff1a\u622a\u53d6\u957f\u5ea6\uff5d\n\n```shell\n--------------------------example\n[192.168.2.230] - root@ubuntu20.04.5-template:/ root\n$ MYPATH=' /usr/bin/wget'\n\n[192.168.2.230\uff3d - root@ubuntu20.04.5-template:/root\n$ echo ${MYPATH: 4:4}\n/bin \t\t\t #\u5176\u4f1a\u5de6\u5411\u53f3\u4ece\u7b2c\u56db\u4f4d\u5411\u540e\u53d6\u56db\u4f4d\uff08\u5b57\u7b26\u4e32\u7b2c\u4e00\u4f4d\u4e3a0\uff09\n\n[192.168.2.230] - root@ubuntu20.04.5-template:/ root\n$ echo ${MYPATH: -4} #\u8fd9\u4f1a\u53f3\u5411\u5de6\u4ece\u672b\u5c3e\u5411\u524d\u53d6\u56db\u4f4d\uff0c\u300c-4\u548c\u5192\u53f7\u4e4b\u95f4\u8981\u6709\u4e00\u4e2a\u7a7a\u683c\u300d\n```\n\n## 2\u3001\u57fa\u4e8e\u6a21\u5f0f\u53d6\u5b50\u4e32\n${var#*word}\n\u5176\u4e2dword\u53ef\u4ee5\u662f\u6307\u5b9a\u7684\u4efb\u610f\u5b57\u7b26\uff0c\u81ea\u5de6\u800c\u53f3\uff0c\u5220\u9664\u5b57\u7b26\u4e32\u5f00\u5934\u81f3\u7b2c\u4e00\u6b21\u51fa\u73b0word\u5b57\u7b26\u4e4b\u95f4\u7684\u6240\u6709\u5b57\u7b26\u3002", "top": 0, "createdAt": 1742640210, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P121": {"htmlDir": "docs/post/shell -bian-cheng.html", "labels": ["docs"], "postTitle": "shell \u7f16\u7a0b", "postUrl": "post/shell%20-bian-cheng.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/121", "commentNum": 0, "wordCount": 11792, "description": "# \u4e00\u3001\u8fd0\u7b97\u7b26\n\n## 1\u3001\u7b97\u672f\u8fd0\u7b97\u7b26\n\n\u4e0b\u8868\u5217\u51fa\u4e86\u5e38\u7528\u7684\u7b97\u672f\u8fd0\u7b97\u7b26\uff0c\u5047\u5b9a\u53d8\u91cf a \u4e3a 10\uff0c\u53d8\u91cf b \u4e3a 20\uff1a\n\n|\u8fd0\u7b97\u7b26|\u8bf4\u660e|\u4e3e\u4f8b|\n| :----: | :-------------------------------------------: | :------------------------: |\n|+|\u52a0\u6cd5|`expr $a + $b` \u7ed3\u679c\u4e3a 30\u3002", "top": 0, "createdAt": 1742640233, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P122": {"htmlDir": "docs/post/ssh -mian-mi-deng-lu.html", "labels": ["linux"], "postTitle": "ssh \u514d\u5bc6\u767b\u5f55", "postUrl": "post/ssh%20-mian-mi-deng-lu.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/122", "commentNum": 0, "wordCount": 1634, "description": "# 1\u521b\u5efa\u5bc6\u94a5\n\n\u5728\u672c\u5730\u4e3b\u673a\u7ec8\u7aef\u8f93\u5165\n\n```shell\nssh-keygen\n```\n\n\u4e4b\u540e\u4e00\u8def\u56de\u8f66\uff0c\u4e0d\u51fa\u610f\u5916\u7684\u8bdd\uff0c\u4f60\u5c06\u770b\u5230\u4ee5\u4e0b\u5185\u5bb9\n\n\n\n\u606d\u559c\uff0c\u4f60\u5df2\u7ecf\u5b8c\u6210\u7b2c\u4e00\u6b65\uff01\n\n---\n\n# 2\u68c0\u67e5\u5bc6\u94a5\u662f\u5426\u521b\u5efa\u6210\u529f\n\n\u5728\u7ec8\u7aef\u8f93\u5165\n\n```shell\nls .ssh\n```\n\n\u770b\u5230\u4ee5\u4e0b\u5185\u5bb9\n\n\n\n\u770b\u5230\u5176\u4e2d\u6709`id_ed25519`(\u79c1\u94a5))**\u5176\u4e2d\u7684ed25519\u5728\u4e0d\u540c\u8bbe\u5907\u53ef\u80fd\u4f1a\u6709\u4e0d\u540c\uff0c\u6709\u7684\u53ef\u80fd\u662fid_rsa**\u3001`id_ed25519.pub`(\u516c\u94a5)\u4e24\u4e2a\u6587\u4ef6\uff0c\u606d\u559c\uff0c\u4f60\u5df2\u7ecf\u5b8c\u6210\u7b2c\u4e8c\u6b65\u4e86\uff0c\u79bb\u6210\u529f\u66f4\u8fd1\u4e86\uff01\n\n---\n\n# 3\u5c06\u516c\u94a5\u590d\u5236\u5230\u8fdc\u7a0b\u4e3b\u673a\n\n\u5728\u7ec8\u7aef\u952e\u5165\n\n```shell\nssh-copy-id -i <~/.ssh/id_ed25519.pub> <username>@<remote_ip>\n```\n\n\u5176\u4e2d\u7684`<~/.ssh/id_ed25519.pub>` \u662f\u516c\u94a5\u6240\u5904\u7684\u8def\u5f84\uff0c`<username>`\u662f\u7528\u6237\u540d\uff0c`<remote_ip>`\u662f\u4e3b\u673a\u540d\u6216IP \u5730\u5740\u3002", "top": 0, "createdAt": 1742640250, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P123": {"htmlDir": "docs/post/SSH -yuan-cheng-deng-lu-yi-ji- SFTP -wen-jian-chuan-shu.html", "labels": ["linux"], "postTitle": "SSH \u8fdc\u7a0b\u767b\u5f55\u4ee5\u53ca SFTP \u6587\u4ef6\u4f20\u8f93", "postUrl": "post/SSH%20-yuan-cheng-deng-lu-yi-ji-%20SFTP%20-wen-jian-chuan-shu.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/123", "commentNum": 0, "wordCount": 954, "description": "**SSH \u9ed8\u8ba4\u7aef\u53e3\u53f7\u662f22.**\n\n# SSH \u8fdc\u7a0b\u767b\u5f55\u4e3b\u673a\n\n```shell\nssh username@hostname\n```\n\n\u5176\u4e2d\uff0c`username`\u662f\u7528\u6237\u540d\uff0c`hostname` \u662f\u4e3b\u673a\u540d\u6216IP \u5730\u5740\u3002", "top": 0, "createdAt": 1742640286, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P124": {"htmlDir": "docs/post/stm32-cheng-xu-shao-lu-fang-shi.html", "labels": ["tools"], "postTitle": "stm32\u7a0b\u5e8f\u70e7\u5f55\u65b9\u5f0f", "postUrl": "post/stm32-cheng-xu-shao-lu-fang-shi.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/124", "commentNum": 0, "wordCount": 1111, "description": "> \u4ee5\u4e0b\u4ee5stm32f103c8t6\u82af\u7247\u4e3a\u4f8b\n\n## \u4f7f\u7528stlink\n\n```bash\nst-flash write /path/project/build.bin 0x08000000\n```\n\n\u6ce8\u610f\uff1a\n\n- \u4f7f\u7528 `st-flash` \u547d\u4ee4\u9700\u8981\u63d0\u524d\u5b89\u88c5 stlink \uff0cmacOS \u901a\u8fc7`brew install stlink`\u5373\u53ef\u5b89\u88c5\u3002", "top": 0, "createdAt": 1742640316, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P125": {"htmlDir": "docs/post/vscode + stm32CubeMX + Makefile-gong-cheng-yi-ji-wen-ti-jie-jue.html", "labels": ["bug"], "postTitle": "vscode + stm32CubeMX + Makefile\u5de5\u7a0b\u4ee5\u53ca\u95ee\u9898\u89e3\u51b3", "postUrl": "post/vscode%20%2B%20stm32CubeMX%20%2B%20Makefile-gong-cheng-yi-ji-wen-ti-jie-jue.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/125", "commentNum": 0, "wordCount": 7124, "description": "\u901a\u8fc7 STM32CubeMX \u5efa\u7acb\u7684 Makefile \u5de5\u7a0b\uff0c\u5e94\u8be5\u4f1a\u6709\u4ee5\u4e0b\u7ed3\u6784\uff1a\n\n```shell\n\u276f tree test\ntest\n\u251c\u2500\u2500 Core\n\u2502 \u251c\u2500\u2500 Inc\n\u2502 \u2514\u2500\u2500 Src\n\u251c\u2500\u2500 Drivers\n\u2502 \u251c\u2500\u2500 CMSIS\n\u2502 \u2502 \u251c\u2500\u2500 Device\n\u2502 \u2502 \u2502 \u2514\u2500\u2500 ST\n\u2502 \u2502 \u2502 \u2514\u2500\u2500 STM32F1xx\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 Include\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 LICENSE.txt\n\u2502 \u2502 \u2502 \u2514\u2500\u2500 Source\n\u2502 \u2502 \u2502 \u2514\u2500\u2500 Templates\n\u2502 \u2502 \u251c\u2500\u2500 Include\n\u2502 \u2502 \u2514\u2500\u2500 LICENSE.txt\n\u2502 \u2514\u2500\u2500 STM32F1xx_HAL_Driver\n\u2502 \u251c\u2500\u2500 Inc\n\u2502 \u2502 \u251c\u2500\u2500 Legacy\n\u2502 \u251c\u2500\u2500 LICENSE.txt\n\u2502 \u2514\u2500\u2500 Src\n\u251c\u2500\u2500 Makefile\n\u251c\u2500\u2500 STM32F103C8Tx_FLASH.ld\n\u251c\u2500\u2500 build\n\u251c\u2500\u2500 startup_stm32f103xb.s\n\u2514\u2500\u2500 test.ioc\n```\n\n## 1.\u914d\u7f6e\u672c\u673a\u73af\u5883\n\n\u4e3a\u4e86\u80fd\u987a\u5229\u4f7f\u7528\u901a\u8fc7 STM32CubeMX \u5efa\u7acb\u7684 Makefile \u5de5\u7a0b\uff0c\u4f60\u9700\u8981\u5148\u5b89\u88c5\u5b8c\u6210\u4ee5\u4e0b\u51c6\u5907\uff1a\n\n- \u5b89\u88c5 `arm-none-eabi-gcc` \u4ea4\u53c9\u7f16\u8bd1\u94fe\n- \u5b89\u88c5 `openOCD`\n- \u5b89\u88c5 `Make`\n\n\u5b89\u88c5 `arm-none-eabi-gcc` \u4ea4\u53c9\u7f16\u8bd1\u94fe\uff1a\n\n- windows\uff1a\n - \u94fe\u63a5: [https://caiyun.139.com/m/i?145CFu8T4pzZ9](https://caiyun.139.com/m/i?145CFu8T4pzZ9)\n - \u63d0\u53d6\u7801:ifpa\n \n- linux\uff1a\n - \u94fe\u63a5: [https://caiyun.139.com/m/i?145CFu8QjVMxO](https://caiyun.139.com/m/i?145CFu8QjVMxO)\n - \u63d0\u53d6\u7801:sXCp\n \n- macOS\uff1a\n - \u94fe\u63a5: [https://caiyun.139.com/m/i?145CFaDB85q9C](https://caiyun.139.com/m/i?145CFaDB85q9C)\n - \u63d0\u53d6\u7801:OoEr\n \n\u5982\u679c\u4f60\u662f\u4e2a ~~\u5927\u4f6c~~ ,\u5f53\u7136\u5927\u4f6c\u5e94\u8be5\u662f\u4e0d\u4f1a\u770b\u8fd9\u79cd\u6559\u7a0b\u7684\uff0c\u4f60\u559c\u6b22\u81ea\u5df1\u6784\u5efa\u7684\u8bdd\uff0c\u53ef\u4ee5\u7528\u4e0b\u9762\u7684\u6e90\u7801\uff1a\n\n- \u94fe\u63a5: [https://caiyun.139.com/m/i?145CGY0p8xYON](https://caiyun.139.com/m/i?145CGY0p8xYON)\n- \u63d0\u53d6\u7801:t3bC\n\n\u4e0b\u8f7d\u5b89\u88c5\u597d\u7f16\u8bd1\u94fe\u4e4b\u540e\uff0c\u5c06\u5176\u653e\u5165\u5230\u73af\u5883\u53d8\u91cf `PATH` \u4e2d(\u81f3\u4e8e\u5177\u4f53\u6b65\u9aa4\uff0c\u767e\u5ea6\u4e00\u4e0b\uff0c\u4f60\u5c31\u77e5\u9053)\n\n---\n\n## 2.\u521b\u5efa\u5de5\u7a0b\u5e76\u53bb\u6389\u8b66\u544a(\u7ea2\u8272\u6ce2\u6d6a\u7ebf)\n\n> vscode \u9700\u8981\u63d0\u524d\u5b89\u88c5 C/C++ \u63d2\u4ef6\n\n1.\u65b0\u5efa\u4e00\u4e2a STM32CubeMX_projects \u76ee\u5f55(\u4ee5\u540e\u7684\u5de5\u7a0b\u5c31\u7edf\u4e00\u653e\u7f6e\u5728\u8be5\u76ee\u5f55\u4e0b\uff0c\u5efa\u8bae\u4e0d\u8981\u653e\u7f6e\u5728\u684c\u9762\uff0c\u653e\u5728\u81ea\u5df1\u5bb9\u6613\u8bb0\u5fc6\u7684\u4f4d\u7f6e)\uff0c\u7136\u540e\u4f7f\u7528 vscode \u6253\u5f00\u8be5\u76ee\u5f55\uff0c\u5e76\u4e14\u5c06\u5176\u4fdd\u5b58\u4e3a\u5de5\u4f5c\u533a\uff0c\u5c06\u5de5\u4f5c\u533a\u6587\u4ef6\u4fdd\u5b58\u5728\u5e0c\u671b\u7684\u4f4d\u7f6e\uff0c\u4ee5\u540e\u53ef\u4ee5\u901a\u8fc7\u53cc\u51fb\u8be5\u6587\u4ef6\u76f4\u63a5\u6253\u5f00 STM32CubeMX_projects \u5de5\u4f5c\u533a\uff1a\n\n\n\n\n2.\u5728 STM32CubeMX \u914d\u7f6e\u597d\u5de5\u7a0b\uff0c\u70b9\u51fb\u5de6\u4fa7\u9009\u9879\u5361\uff0c\u7136\u540e\u52fe\u9009\u7eff\u8272\u6846\u91cc\u7684\u9009\u9879\u9009\u62e9 Makefile \u5bfc\u51fa\uff1a\n\n\n\n\n3.\u4f7f\u7528 vscode \u6253\u5f00\u8be5\u5de5\u7a0b\u76ee\u5f55\uff0c\u70b9\u5f00`./Core/Src/main.c`\uff0c\u4f60\u4f1a\u53d1\u73b0\uff1a\u6ee1\u662f\u4ee4\u4eba\u9ad8\u8840\u538b\u7684\u7ea2\u8272\u6ce2\u6d6a\u7ebf\uff0c\u96be\u4ee5\u5fcd\u53d7\u3002", "top": 0, "createdAt": 1742640357, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P126": {"htmlDir": "docs/post/vscode-ge-ren-pei-zhi-wen-jian.html", "labels": ["tools"], "postTitle": "vscode\u4e2a\u4eba\u914d\u7f6e\u6587\u4ef6", "postUrl": "post/vscode-ge-ren-pei-zhi-wen-jian.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/126", "commentNum": 0, "wordCount": 140, "description": "> \u4ee5\u4e0b\u4e3a\u4e2a\u4eba\u81ea\u7528\u914d\u7f6e\u6587\u4ef6\uff0c\u5982\u9700\u62f7\u8d1d\u4f7f\u7528\u8bf7\u5c06\u5185\u5bb9\u5168\u90e8\u62f7\u8d1d\u5e76\u66ff\u6362\u6389 vscode \u7684\u539f\u6709 settings.json \u5185\u5bb9\u3002", "top": 0, "createdAt": 1742640389, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P127": {"htmlDir": "docs/post/vscode-da-jian-yong-yu-8051-dan-pian-ji-de-sdcc-huan-jing.html", "labels": ["docs", "tools"], "postTitle": "vscode\u642d\u5efa\u7528\u4e8e8051\u5355\u7247\u673a\u7684sdcc\u73af\u5883", "postUrl": "post/vscode-da-jian-yong-yu-8051-dan-pian-ji-de-sdcc-huan-jing.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/127", "commentNum": 0, "wordCount": 2249, "description": "# \u5b89\u88c5sdcc\n\nmacOS \u901a\u8fc7\u4e0b\u9762\u547d\u4ee4\u5b89\u88c5 sdcc \u7f16\u8bd1\u5668\uff1a\n```shell\nbrew install sdcc\n```\n\n# \u67e5\u627esdcc\u4ee5\u53ca8051\u5934\u6587\u4ef6\u4f4d\u7f6e\n\n```shell\n\u276f which sdcc\n\n/opt/homebrew/bin//sdcc\n```\n\n\u8fd9\u5c06\u5217\u51fasdcc\u7684\u5b89\u88c5\u4f4d\u7f6e\u3002", "top": 0, "createdAt": 1742640426, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P128": {"htmlDir": "docs/post/vscode-mo-sha-xiao-guo-pei-zhi.html", "labels": ["tools"], "postTitle": "vscode\u78e8\u7802\u6548\u679c\u914d\u7f6e", "postUrl": "post/vscode-mo-sha-xiao-guo-pei-zhi.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/128", "commentNum": 0, "wordCount": 1013, "description": "## 1.\u5b89\u88c5\u63d2\u4ef6\n\n\u5728vscode\u5b89\u88c5\u4ee5\u4e0b\u63d2\u4ef6\u3002", "top": 0, "createdAt": 1742640451, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P129": {"htmlDir": "docs/post/\u300cGmeek\u300d-shang-chuan-jiao-ben-(-dan-pian-huo-pi-liang-).html", "labels": ["tools"], "postTitle": "\u300cGmeek\u300d\u4e0a\u4f20\u811a\u672c(\u5355\u7bc7\u6216\u6279\u91cf)", "postUrl": "post/%E3%80%8CGmeek%E3%80%8D-shang-chuan-jiao-ben-%28-dan-pian-huo-pi-liang-%29.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/129", "commentNum": 0, "wordCount": 7367, "description": "> [!caution]\n>\n> **\u6ce8\u610f\uff1a** \u8be5\u811a\u672c\u4ec5\u9002\u7528\u4e8e\u901a\u8fc7Gmeek\u9879\u76ee\u642d\u5efa\u7684\u535a\u5ba2\u7f51\u7ad9\n> \u5728\u5f00\u59cb\u4f7f\u7528\u4e4b\u524d\uff0c\u9700\u8981\u521b\u5efa github \u7684\u4e2a\u4eba Token\n\n\n# 1.\u521b\u5efagithub\u4e2a\u4ebaToken\n\n1.\u5728 GitHub \u4e0a\u4efb\u4f55\u9875\u9762\u7684**\u53f3\u4e0a\u89d2**\uff0c\u5355\u51fb\u60a8\u7684`\u4e2a\u4eba\u8d44\u6599\u7167\u7247`\uff0c\u7136\u540e\u5355\u51fb `Settings`\u3002", "top": 0, "createdAt": 1742640489, "style": "<style>.markdown-alert{padding:0.5rem 1rem;margin-bottom:1rem;border-left:.25em solid var(--borderColor-default,var(--color-border-default));}.markdown-alert .markdown-alert-title {display:flex;font-weight:var(--base-text-weight-medium,500);align-items:center;line-height:1;}.markdown-alert>:first-child {margin-top:0;}.markdown-alert>:last-child {margin-bottom:0;}</style><style>.markdown-alert.markdown-alert-tip {border-left-color:var(--borderColor-success-emphasis, var(--color-success-emphasis));background-color:var(--color-success-subtle);}.markdown-alert.markdown-alert-tip .markdown-alert-title {color: var(--fgColor-success,var(--color-success-fg));}</style><style>.markdown-alert.markdown-alert-important {border-left-color:var(--borderColor-done-emphasis, var(--color-done-emphasis));background-color:var(--color-done-subtle);}.markdown-alert.markdown-alert-important .markdown-alert-title {color: var(--fgColor-done,var(--color-done-fg));}</style><style>.markdown-alert.markdown-alert-caution {border-left-color:var(--borderColor-danger-emphasis, var(--color-danger-emphasis));background-color:var(--color-danger-subtle);}.markdown-alert.markdown-alert-caution .markdown-alert-title {color: var(--fgColor-danger,var(--color-danger-fg));}</style>", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P130": {"htmlDir": "docs/post/\u300cOrbStack\u300dMac -xi-tong-zhong-yi-ge-geng-kuai-de- Docker -ke-shi-hua-gong-ju-\uff0c-ke-wan-quan-ti-dai- Docker Desktop.html", "labels": ["docs"], "postTitle": "\u300cOrbStack\u300dMac \u7cfb\u7edf\u4e2d\u4e00\u4e2a\u66f4\u5feb\u7684 Docker \u53ef\u89c6\u5316\u5de5\u5177\uff0c\u53ef\u5b8c\u5168\u66ff\u4ee3 Docker Desktop", "postUrl": "post/%E3%80%8COrbStack%E3%80%8DMac%20-xi-tong-zhong-yi-ge-geng-kuai-de-%20Docker%20-ke-shi-hua-gong-ju-%EF%BC%8C-ke-wan-quan-ti-dai-%20Docker%20Desktop.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/130", "commentNum": 0, "wordCount": 1397, "description": "\u6211\u4e4b\u524d\u7528\u7684\u662f Docker Desktop\uff0c\u6bcf\u6b21\u51c6\u5907\u542f\u52a8\u5bb9\u5668\u7684\u65f6\u5019\uff0c\u6211\u90fd\u4f1a\u628a\u80fd\u5173\u7684\u5e94\u7528\u90fd\u5173\u95ed\uff0c\u7701\u7684\u7535\u8111\u5361\uff0c Docker Desktop \u786e\u5b9e\u6709\u70b9\u513f\u8017\u6027\u80fd\u3002", "top": 0, "createdAt": 1742641300, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P131": {"htmlDir": "docs/post/\u300cPython\u300d-yi-chang-chu-li.html", "labels": ["docs"], "postTitle": "\u300cPython\u300d\u5f02\u5e38\u5904\u7406", "postUrl": "post/%E3%80%8CPython%E3%80%8D-yi-chang-chu-li.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/131", "commentNum": 0, "wordCount": 4534, "description": "\u5728 Python \u4e2d\uff0c\u5e38\u89c1\u7684\u57fa\u672c\u9519\u8bef\u6709\u4e24\u7c7b\uff0c\u5373\u8bed\u6cd5\u9519\u8bef\u548c\u5f02\u5e38\u3002", "top": 0, "createdAt": 1742641301, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P132": {"htmlDir": "docs/post/\u300cPython\u300d-mo-kuai-he-bao.html", "labels": ["docs"], "postTitle": "\u300cPython\u300d\u6a21\u5757\u548c\u5305", "postUrl": "post/%E3%80%8CPython%E3%80%8D-mo-kuai-he-bao.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/132", "commentNum": 0, "wordCount": 5923, "description": "Python \u63d0\u4f9b\u4e86\u5f3a\u5927\u7684\u6a21\u5757\u652f\u6301\uff0c\u4e3b\u8981\u4f53\u73b0\u5728\uff0c\u4e0d\u4ec5 Python \u6807\u51c6\u5e93\u4e2d\u5305\u542b\u4e86\u5927\u91cf\u7684\u6a21\u5757\uff08\u79f0\u4e3a\u6807\u51c6\u6a21\u5757\uff09\uff0c\u8fd8\u6709\u5927\u91cf\u7684\u7b2c\u4e09\u65b9\u6a21\u5757\uff0c\u5f00\u53d1\u8005\u81ea\u5df1\u4e5f\u53ef\u4ee5\u5f00\u53d1\u81ea\u5b9a\u4e49\u6a21\u5757\u3002", "top": 0, "createdAt": 1742641303, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P133": {"htmlDir": "docs/post/\u300cPython\u300d-xu-ni-huan-jing.html", "labels": ["docs"], "postTitle": "\u300cPython\u300d\u865a\u62df\u73af\u5883", "postUrl": "post/%E3%80%8CPython%E3%80%8D-xu-ni-huan-jing.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/133", "commentNum": 0, "wordCount": 1081, "description": "*\u5728\u865a\u62df\u73af\u5883\u4e2d\uff0cpip \u548c pip3 \u901a\u5e38\u4f1a\u6307\u5411\u540c\u4e00\u4e2a Python \u7248\u672c\u7684\u5305\u7ba1\u7406\u5668\u3002", "top": 0, "createdAt": 1742641304, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P134": {"htmlDir": "docs/post/\u300cmacOS\u300dneovide-chu-shi-hua-cuo-wu-\u3001-chang-jian-wen-ti.html", "labels": ["bug"], "postTitle": "\u300cmacOS\u300dneovide\u521d\u59cb\u5316\u9519\u8bef\u3001\u5e38\u89c1\u95ee\u9898", "postUrl": "post/%E3%80%8CmacOS%E3%80%8Dneovide-chu-shi-hua-cuo-wu-%E3%80%81-chang-jian-wen-ti.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/134", "commentNum": 0, "wordCount": 592, "description": "\u5728 M1 macOS \u4e2d\u4e0b\u8f7d neovide \u4e4b\u540e\u6253\u5f00\u9047\u5230\uff1a\n\n\n\n#### \u539f\u56e0\u5206\u6790\n\n\u7531\u4e8e\u73b0\u5728\u6240\u6709\u7684 macOS \u7248\u672c\u5185\u7f6e\u7ec8\u7aef\u90fd\u662f\u9ed8\u8ba4\u4f7f\u7528 zsh \uff0c\u4f46\u662f Neovide \u4e0d\u4f1a\u5728\u4ea4\u4e92\u5f0f shell \u4e2d\u542f\u52a8\u5d4c\u5165\u5f0f neovim \u5b9e\u4f8b\uff0c\u56e0\u6b64 shell \u4e0d\u4f1a\u8bfb\u53d6\u5176\u542f\u52a8\u6587\u4ef6\u7684\u4e00\u90e8\u5206\uff08 `~/.bashrc` `~/.zshrc` \u65e0\u8bba\u4f60\u7684 shell \u7684\u7b49\u6548\u9879\u662f\u4ec0\u4e48\uff09\u3002", "top": 0, "createdAt": 1742641306, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P135": {"htmlDir": "docs/post/\u300cplatformIO\u300dprintf -zhong-ying-xiang-\u3001-chuan-kou-da-yin-shu-ju.html", "labels": ["docs"], "postTitle": "\u300cplatformIO\u300dprintf \u91cd\u6620\u50cf\u3001\u4e32\u53e3\u6253\u5370\u6570\u636e", "postUrl": "post/%E3%80%8CplatformIO%E3%80%8Dprintf%20-zhong-ying-xiang-%E3%80%81-chuan-kou-da-yin-shu-ju.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/135", "commentNum": 0, "wordCount": 979, "description": "\u5728 `keil` \u73af\u5883\u4e2d\u4f7f\u7528 printf \u901a\u8fc7\u4e32\u53e3\u6253\u5370\u6570\u636e\uff1a\n\n- \u5728 main.c \u5f15\u5165`stdio.h`\n- \u91cd\u5199`fputc`\u51fd\u6570\n\n ```c\n // keil arm\u73af\u5883\uff0c\u5982\u679c\u4f60\u8981\u7528printf\u51fd\u6570\uff0c\u5c31\u5fc5\u987b\u91cd\u5199fputc\u51fd\u6570\uff0c\u5e76\u4e14\u5728\u9b54\u672f\u68d2\u91cc\u9762\u52fe\u9009\u4f7f\u7528Micro LIB\n int fputc(int ch, FILE *f)\n {\n \tUSART_SendData(USART1, ch);\n \twhile (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);//\u5faa\u73af\u7684\u5224\u65ad\u4e32\u53e3\u662f\u5426\u53d1\u9001\u5b8c\u6570\u636e\n\n \treturn ch;\n }\n ```\n\n \u5b8c\u6210\u4ee5\u4e0a\u914d\u7f6e\u5373\u53ef\u5728 main \u51fd\u6570\u4e2d\u4f7f\u7528 printf \u51fd\u6570\u901a\u8fc7\u4e32\u53e3\u6253\u5370\u6570\u636e\u3002", "top": 0, "createdAt": 1742641307, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P136": {"htmlDir": "docs/post/\u300cplatformIO\u300d-ji-yu- stm32 HAL-ku- -de-gong-cheng-mo-ban.html", "labels": ["docs"], "postTitle": "\u300cplatformIO\u300d\u57fa\u4e8e stm32 HAL\u5e93 \u7684\u5de5\u7a0b\u6a21\u677f", "postUrl": "post/%E3%80%8CplatformIO%E3%80%8D-ji-yu-%20stm32%20HAL-ku-%20-de-gong-cheng-mo-ban.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/136", "commentNum": 0, "wordCount": 3296, "description": "# 1.\u5efa\u7acb Makefile \u5de5\u7a0b\n\n\u901a\u8fc7 STM32CubeMX \u5efa\u7acb\u9002\u4e8e\u81ea\u5df1\u5f00\u53d1\u7248\u7684 Makefile \u5de5\u7a0b\uff08\u6b65\u9aa4\u4e0d\u8d58\u8ff0\uff0c\u767e\u5ea6\u4e00\u4e0b\uff0c\u4f60\u5c31\u77e5\u9053\uff09\uff0c\u5e76\u4e14\u8bb0\u4f4f\u300c**\u5de5\u7a0b\u540d**\u300d\u548c\u300c**\u5de5\u7a0b\u5b58\u653e\u8def\u5f84**\u300d\u3002", "top": 0, "createdAt": 1742641309, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P137": {"htmlDir": "docs/post/\u300cplatformIO\u300d-ji-yu- stm32 -biao-zhun-wai-she-ku-de-gong-cheng-mo-ban.html", "labels": ["docs"], "postTitle": "\u300cplatformIO\u300d\u57fa\u4e8e stm32 \u6807\u51c6\u5916\u8bbe\u5e93\u7684\u5de5\u7a0b\u6a21\u677f", "postUrl": "post/%E3%80%8CplatformIO%E3%80%8D-ji-yu-%20stm32%20-biao-zhun-wai-she-ku-de-gong-cheng-mo-ban.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/137", "commentNum": 0, "wordCount": 8337, "description": "> \u672c\u6559\u7a0b\u9ed8\u8ba4\u7528\u6237\u5df2\u7ecf\u5b89\u88c5\u597d vscode \u548c platformIO \uff01\uff01\uff01\n\n# 1.\u4e0b\u8f7d\u5b98\u65b9\u6807\u51c6\u5916\u8bbe\u5e93\n\n\u8fdb\u5165 [ST \u5b98\u7f51\u7684\u5d4c\u5165\u5f0f\u8f6f\u4ef6\u677f\u5757](https://www.st.com.cn/zh/embedded-software/stm32-standard-peripheral-libraries.html) \uff0c\u6839\u636e\u81ea\u8eab\u677f\u5b50\u578b\u53f7\u9009\u62e9\uff0c\u6709F0-F4\u591a\u79cd\u578b\u53f7\u3002", "top": 0, "createdAt": 1742641311, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P138": {"htmlDir": "docs/post/\u300cplatformIO\u300d-jie-jue- stm32 -biao-zhun-wai-she-ku-shi-zhong-bu-zhun-de-wen-ti.html", "labels": ["docs"], "postTitle": "\u300cplatformIO\u300d\u89e3\u51b3 stm32 \u6807\u51c6\u5916\u8bbe\u5e93\u65f6\u949f\u4e0d\u51c6\u7684\u95ee\u9898", "postUrl": "post/%E3%80%8CplatformIO%E3%80%8D-jie-jue-%20stm32%20-biao-zhun-wai-she-ku-shi-zhong-bu-zhun-de-wen-ti.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/138", "commentNum": 0, "wordCount": 1790, "description": "*\u4ee5\u4e0b\u4ee5stm32f407\u7cfb\u5217\u4e3e\u4f8b*\n\n### 1.\u906d\u9047\u95ee\u9898\uff1a\n\n\u5728\u4f7f\u7528[ platformIO \u642d\u5efa\u6807\u51c6\u5916\u8bbe\u5e93](https://blog.ronan.us.kg/2024/09/08/platformIO-%E5%9F%BA%E4%BA%8E-stm32-%E6%A0%87%E5%87%86%E5%A4%96%E8%AE%BE%E5%BA%93%E7%9A%84%E5%B7%A5%E7%A8%8B%E6%A8%A1%E6%9D%BF/)\u8fdb\u884c\u5b9e\u9645\u5f00\u53d1\u65f6\u9047\u5230\u4e86\u5916\u90e8\u65f6\u949f\u4e0d\u51c6\u7684\u95ee\u9898\u3002", "top": 0, "createdAt": 1742641312, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P139": {"htmlDir": "docs/post/\u300cpython\u300dConda-xu-ni-huan-jing.html", "labels": ["docs"], "postTitle": "\u300cpython\u300dConda\u865a\u62df\u73af\u5883", "postUrl": "post/%E3%80%8Cpython%E3%80%8DConda-xu-ni-huan-jing.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/139", "commentNum": 0, "wordCount": 2901, "description": "# \u5b89\u88c5conda\n```shell\n# macOS \u5b89\u88c5 miniconda \uff0c\u5728\u7ec8\u7aef\u8f93\u5165\u4ee5\u4e0b\u547d\u4ee4\nbrew install miniconda\n```\n\n---\n\n# \u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u865a\u62df\u73af\u5883\n\n\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u521b\u5efa\u4e00\u4e2a\u540d\u4e3a `jupyter_env` \u7684\u65b0\u73af\u5883\uff0c\u5e76\u6307\u5b9a Python \u7248\u672c\uff08\u4f8b\u5982 Python 3.11\uff09\n\n```shell\nconda create -n jupyter_env python=3.11\n```\n\n> \u901a\u8fc7\u4e0a\u9762\u547d\u4ee4\u521b\u5efa\u7684\u865a\u62df\u73af\u5883\u901a\u5e38\u4f1a\u4fdd\u5b58\u5728\u4e3b\u73af\u5883\u76ee\u5f55\uff0c\u5982\u679c\u60f3\u6307\u5b9a\u865a\u62df\u73af\u5883\u7684\u4f4d\u7f6e\uff0c\u53ef\u4ee5\u4f7f\u7528\u4e0b\u9762\u7684\u547d\u4ee4\n\n**\u6307\u5b9a\u8def\u5f84**\uff1a\u5982\u679c\u4f60\u5728\u521b\u5efa\u73af\u5883\u65f6\u4f7f\u7528\u4e86 `-p` \u6216 `--prefix` \u9009\u9879\u6307\u5b9a\u8def\u5f84\uff0c\u73af\u5883\u4f1a\u5b58\u50a8\u5728\u4f60\u6307\u5b9a\u7684\u4f4d\u7f6e\u3002", "top": 0, "createdAt": 1742641314, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P140": {"htmlDir": "docs/post/\u300cpython\u300d-da-bao-cheng-xu.html", "labels": ["docs"], "postTitle": "\u300cpython\u300d\u6253\u5305\u7a0b\u5e8f", "postUrl": "post/%E3%80%8Cpython%E3%80%8D-da-bao-cheng-xu.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/140", "commentNum": 0, "wordCount": 884, "description": "# \u901a\u8fc7pyinstaller\u6253\u5305\n\n\u8981\u5c06Python\u811a\u672c\u6253\u5305\u6210\u4e00\u4e2a\u72ec\u7acb\u8fd0\u884c\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u53ef\u4ee5\u4f7f\u7528\u5de5\u5177PyInstaller\uff0c\u5176\u53ef\u4ee5\u5c06Python\u811a\u672c\u6253\u5305\u6210\u4e00\u4e2a\u53ef\u6267\u884c\u6587\u4ef6 (.exe) \u3002", "top": 0, "createdAt": 1742641315, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P141": {"htmlDir": "docs/post/\u300cpython\u300d-yi-ge-kuai-su-sheng-cheng-requirements.txt-de-ku.html", "labels": ["docs"], "postTitle": "\u300cpython\u300d\u4e00\u4e2a\u5feb\u901f\u751f\u6210requirements.txt\u7684\u5e93", "postUrl": "post/%E3%80%8Cpython%E3%80%8D-yi-ge-kuai-su-sheng-cheng-requirements.txt-de-ku.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/141", "commentNum": 0, "wordCount": 500, "description": "> \u4e3a\u4ec0\u4e48\u9009\u62e9 `pipreqs` \uff1f\n\n\u867d\u7136 Python \u63d0\u4f9b\u4e86 `pip freeze > requirements.txt` \u8fd9\u6837\u7684\u547d\u4ee4\u751f\u6210 `requirements.txt`\uff0c\u4f46\u5b83\u6709\u4e00\u4e2a\u81f4\u547d\u7f3a\u9677\uff1a\u5b83\u4f1a\u628a\u4f60\u5f53\u524d\u73af\u5883\u4e2d\u5b89\u88c5\u7684\u6240\u6709\u5e93\u90fd\u5199\u8fdb\u53bb\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u4f60\u9879\u76ee\u5b9e\u9645\u7528\u5230\u7684\u5e93\u3002", "top": 0, "createdAt": 1742641317, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P142": {"htmlDir": "docs/post/\u300cpython\u300d-cha-kan-huo-qie-huan-dang-qian-jie-shi-qi.html", "labels": ["docs"], "postTitle": "\u300cpython\u300d\u67e5\u770b\u6216\u5207\u6362\u5f53\u524d\u89e3\u91ca\u5668", "postUrl": "post/%E3%80%8Cpython%E3%80%8D-cha-kan-huo-qie-huan-dang-qian-jie-shi-qi.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/142", "commentNum": 0, "wordCount": 1704, "description": "# \u67e5\u770b\u7cfb\u7edf\u4e2d\u6240\u6709\u5b89\u88c5\u7684 Python \u89e3\u91ca\u5668\n```shell\nwhich -a python python3\n```\n\u8fd9\u4f1a\u5217\u51fa\u7cfb\u7edf\u8def\u5f84\u4e2d\u627e\u5230\u7684 python \u548c python3 \u89e3\u91ca\u5668\u7684\u4f4d\u7f6e:\n```shell\n\u276f which -a python python3\n\npython not found\n/usr/bin/python3\n/opt/homebrew/bin/python3\n```\n`-a` \u9009\u9879\u786e\u4fdd\u663e\u793a\u6240\u6709\u5339\u914d\u7684\u8def\u5f84\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u7b2c\u4e00\u4e2a\u3002", "top": 0, "createdAt": 1742641318, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P143": {"htmlDir": "docs/post/ji-yu-stm32 hal -ku-de- DS18B20-qu-dong-dai-ma.html", "labels": ["docs"], "postTitle": "\u57fa\u4e8estm32 hal \u5e93\u7684 DS18B20\u9a71\u52a8\u4ee3\u7801", "postUrl": "post/ji-yu-stm32%20hal%20-ku-de-%20DS18B20-qu-dong-dai-ma.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/143", "commentNum": 0, "wordCount": 1057, "description": "\u4f7f\u7528\u65b9\u6cd5\uff1a \n\n1.\u5c06\u4e0b\u9762\u7684 DS18B20.c \u653e\u5165\u4f60\u4ece CubeMX \u5bfc\u51fa\u7684\u5de5\u7a0b\u7684 ../Core/Src \u76ee\u5f55\u4e2d \n2.\u5c06 DS18B20.h \u653e\u5165 ../Core/Inc \u76ee\u5f55\u4e2d \n3.\u5728 Cube \u4e2d\u5c06\u8981\u4f7f\u7528\u7684\u5f15\u811a\u8bbe\u7f6e\u6807\u7b7e\u522b\u540d\u4e3a `DS18b20` \n\n[\u300c\u70b9\u6211\u83b7\u53d6DS18B20.c\u3001DS18B20.h\u4ee3\u7801\u300d](https://gist.github.com/EchoZap/82ed2fcdea7508d8e135ae30d052f609)\n\n\u8c03\u7528DS18b20\u9a71\u52a8\u51fd\u6570\uff1a \n\u5728main.c\u4e2d\u5408\u9002\u7684\u4f4d\u7f6e\u5904\u6dfb\u52a0 #include 'ds18b20.h':\n\n```c\n/* Private includes ----------------------------------------------------------*/\n/* USER CODE BEGIN Includes */\n \n#include 'ds18b20.h'\n \n/* USER CODE END Includes */\n```\n\n\u5b9a\u4e49\u4e00\u4e2a\u6d6e\u70b9\u578b\u7684\u53d8\u91cf\uff0c\u7528\u4e8e\u5b58\u653e\u6e29\u5ea6\u6570\u636e\n\n```c\n/* Private define ------------------------------------------------------------*/\n/* USER CODE BEGIN PD */\n \nfloat Temp = 0;\n \n/* USER CODE END PD */\n```\n\n\u5728main\u51fd\u6570\u4e2d\u521d\u59cb\u5316ds18b20\n\n```c\n/* Initialize all configured peripherals */\n MX_GPIO_Init();\n MX_USART1_UART_Init();\n/* USER CODE BEGIN 2 */\n \n DS18B20_Init();\n \n/* USER CODE END 2 */\n```\n\n \u5728while(1)\u4e2d\u8c03\u7528\u6e29\u5ea6\u8bfb\u53d6\u51fd\u6570\n\n```c\n /* Infinite loop */\n /* USER CODE BEGIN WHILE */\n while (1)\n {\n\t\tTemp = DS18B20_GetTemp_SkipRom();\n\t\tHAL_Delay(1000);\n /* USER CODE END WHILE */\n \n /* USER CODE BEGIN 3 */\n }\n```\u3002", "top": 0, "createdAt": 1742641320, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P144": {"htmlDir": "docs/post/shou-dong-da-jian- stm32 -biao-zhun-wai-she-ku-+Makefile-gong-cheng.html", "labels": ["docs"], "postTitle": "\u624b\u52a8\u642d\u5efa stm32 \u6807\u51c6\u5916\u8bbe\u5e93+Makefile\u5de5\u7a0b", "postUrl": "post/shou-dong-da-jian-%20stm32%20-biao-zhun-wai-she-ku-%2BMakefile-gong-cheng.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/144", "commentNum": 0, "wordCount": 5920, "description": "> \u672c\u6559\u7a0b\u4ee5 **stm32f407** \u4e3a\u4f8b\uff0c\u5176\u4ed6 stm32 \u82af\u7247\u914d\u7f6e\u65b9\u5f0f\u5927\u540c\u5c0f\u5f02\u3002", "top": 0, "createdAt": 1742641321, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P145": {"htmlDir": "docs/post/ge-ren-zi-yong- stm32 -gong-cheng-mo-ban-cheng-xu.html", "labels": ["tools"], "postTitle": "\u4e2a\u4eba\u81ea\u7528 stm32 \u5de5\u7a0b\u6a21\u677f\u7a0b\u5e8f", "postUrl": "post/ge-ren-zi-yong-%20stm32%20-gong-cheng-mo-ban-cheng-xu.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/145", "commentNum": 0, "wordCount": 4726, "description": "\u6ce8\u610f\u6587\u4ef6\u4f4d\u7f6e\uff1a`/Users/iaa/bin/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0`\n\n```shell\n#!/usr/bin/env bash\n\n# \u68c0\u67e5\u662f\u5426\u63d0\u4f9b\u4e86\u5de5\u7a0b\u540d\u53c2\u6570\nif [ -z '$1' ]; then\n echo '\u4f7f\u7528\u65b9\u6cd5: $0 <\u5de5\u7a0b\u540d>'\n exit 1\nfi\n\n# \u83b7\u53d6\u5de5\u7a0b\u540d\nproject_name=$1\n\n# \u521b\u5efa\u5de5\u7a0b\u6839\u76ee\u5f55\nif [ ! -d '$project_name' ]; then\n mkdir '$project_name'\nelse\n echo '\u6839\u76ee\u5f55\u5df2\u5b58\u5728: $project_name'\nfi\n\n# \u521b\u5efa\u5b50\u76ee\u5f55\nfor dir in src lib include cmsis; do\n if [ ! -d '$project_name/$dir' ]; then\n mkdir '$project_name/$dir'\n else\n echo '\u5b50\u76ee\u5f55\u5df2\u5b58\u5728: $project_name/$dir'\n fi\ndone\n\n#cmsis\ncp -r /Users/iaa/bin/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Libraries/CMSIS/Include ${project_name}/cmsis/\ncp -r /Users/iaa/bin/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO ${project_name}/cmsis/\n\n#lib\ncp -r /Users/iaa/bin/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Libraries/STM32F4xx_StdPeriph_Driver/inc ${project_name}/lib/\ncp -r /Users/iaa/bin/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Libraries/STM32F4xx_StdPeriph_Driver/src ${project_name}/lib/\n\n#include\ncp /Users/iaa/bin/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Libraries/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h ${project_name}/include/\ncp /Users/iaa/bin/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Libraries/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h ${project_name}/include/\ncp /Users/iaa/bin/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Project/STM32F4xx_StdPeriph_Templates/stm32f4xx_conf.h ${project_name}/include/\ncp /Users/iaa/bin/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Project/STM32F4xx_StdPeriph_Templates/stm32f4xx_it.h ${project_name}/include/\n\n#src\ncp /Users/iaa/bin/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Project/STM32F4xx_StdPeriph_Templates/stm32f4xx_it.c ${project_name}/src/\ncp /Users/iaa/bin/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Project/STM32F4xx_StdPeriph_Templates/system_stm32f4xx.c ${project_name}/src/\n\ncp /Users/iaa/bin/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Project/STM32F4xx_StdPeriph_Templates/TrueSTUDIO/STM32F40_41xxx/STM32F417IG_FLASH.ld ${project_name}\nmv ${project_name}/STM32F417IG_FLASH.ld ${project_name}/stm32_flash.ld\n\n\n# \u521b\u5efaMakefile\u6587\u4ef6\nif [ ! -e '${project_name}/Makefile' ]; then\n mkdir -p '${project_name}'\n cat > '${project_name}/Makefile' << EOF\nCROSS_COMPILE = arm-none-eabi-\n\n# \u5c06\u6e90\u6587\u4ef6\u653e\u5728\u8fd9\u91cc (*.c)\nSRCDIR=./src\nLIBDIR=./lib/src\n\nSRC = \\$(wildcard \\${LIBDIR}/*.c) \\\\\n \\$(wildcard \\${SRCDIR}/*.c)\n\n# \u5c06\u4ee5\u8be5\u540d\u79f0\u751f\u6210\u4e8c\u8fdb\u5236\u6587\u4ef6 (.elf, .bin, .hex)\nPROJECT_NAME=out\n\n# \u7f16\u8bd1\u5668\u8bbe\u7f6e\u3002", "top": 0, "createdAt": 1742641323, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P146": {"htmlDir": "docs/post/shou-hu-jin-cheng.html", "labels": ["docs"], "postTitle": "\u5b88\u62a4\u8fdb\u7a0b", "postUrl": "post/shou-hu-jin-cheng.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/146", "commentNum": 0, "wordCount": 3665, "description": "\u5b88\u62a4\u8fdb\u7a0b\uff08Daemon Process\uff09\uff0c\u4e5f\u5c31\u662f\u901a\u5e38\u8bf4\u7684 Daemon \u8fdb\u7a0b\uff08\u7cbe\u7075\u8fdb\u7a0b\uff09\uff0c\u662f Linux \u4e2d\u7684\u540e\u53f0\u670d\u52a1\u8fdb\u7a0b\u3002", "top": 0, "createdAt": 1742641324, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P147": {"htmlDir": "docs/post/\u300c-tu-chuang-\u300dmd -tu-pian-lian-jie-ti-huan.html", "labels": ["tools"], "postTitle": "\u300c\u56fe\u5e8a\u300dmd \u56fe\u7247\u94fe\u63a5\u66ff\u6362", "postUrl": "post/%E3%80%8C-tu-chuang-%E3%80%8Dmd%20-tu-pian-lian-jie-ti-huan.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/147", "commentNum": 0, "wordCount": 2732, "description": "\u5728 main \u51fd\u6570\u7684 \u300cold_domain\u300d \u4e3a\u65e7\u7684\u56fe\u7247\u94fe\u63a5\uff0c\u300cnew_domain\u300d \u662f\u65b0\u7684\u56fe\u7247\u94fe\u63a5\uff0c\u6839\u636e\u81ea\u8eab\u60c5\u51b5\u586b\u5199\u3002", "top": 0, "createdAt": 1742641326, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P148": {"htmlDir": "docs/post/ge-ren-zi-yong-vim-pei-zhi-wen-jian.html", "labels": ["tools"], "postTitle": "\u4e2a\u4eba\u81ea\u7528vim\u914d\u7f6e\u6587\u4ef6", "postUrl": "post/ge-ren-zi-yong-vim-pei-zhi-wen-jian.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/148", "commentNum": 0, "wordCount": 107, "description": "\u5c06\u4ee5\u4e0b\u5185\u5bb9\u5199\u5165 `\uff5e/.vimrc` \u4e2d\n\n[\u70b9\u51fb\u67e5\u770bvim\u914d\u7f6e](https://gist.github.com/EchoZap/21f5ca99025356b458ada0773aa7783c)\n \n \n \n \u3002", "top": 0, "createdAt": 1742641327, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P149": {"htmlDir": "docs/post/chuang-jian-yi-ji-guan-li- SSH -mi-yao-dui.html", "labels": ["linux"], "postTitle": "\u521b\u5efa\u4ee5\u53ca\u7ba1\u7406 SSH \u5bc6\u94a5\u5bf9", "postUrl": "post/chuang-jian-yi-ji-guan-li-%20SSH%20-mi-yao-dui.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/149", "commentNum": 0, "wordCount": 3488, "description": "# 1.\u521b\u5efa\u5bc6\u94a5\u5bf9\n\n*\u6b64\u65b9\u6cd5\u9002\u7528\u4e8e\u4ece\u672a\u521b\u5efa\u8fc7\u5bc6\u94a5\u5bf9\u7684\u672c\u5730\u4e3b\u673a\uff0c\u521b\u5efa\u4e4b\u524d\u53ef\u4ee5\u901a\u8fc7 `ls ~/.ssh`\u67e5\u770b\uff0c\u770b\u5230\u6709\u7c7b\u4f3c `id_edxxxx`\u6216\u8005 `id_rsa`\u5373\u8bf4\u660e\u5df2\u521b\u5efa\uff0c\u65e0\u9700\u91cd\u590d\u521b\u5efa*\n\n\u5728\u7ec8\u7aef\u8f93\u5165\u4ee5\u4e0b\u547d\u4ee4:\n\n```shell\nssh-keygen\n```\n\n\u4e4b\u540e\u4e00\u8def\u56de\u8f66\uff0c\u4e0d\u51fa\u610f\u5916\u7684\u8bdd\uff0c\u770b\u5230\u4ee5\u4e0b\u753b\u9762\uff0c\u5bc6\u94a5\uff08\u5305\u542b\u79c1\u94a5\u548c\u516c\u94a5\uff0c\u516c\u94a5\u4ee5 .pub \u7ed3\u5c3e\uff09\u5c31\u521b\u5efa\u6210\u529f\u4e86\n\n\n\u5bf9\u4e8e linux \u548c\u7c7b linux \u7cfb\u7edf\uff0c\u8be5\u5bc6\u94a5\u5b58\u653e\u4e8e `~/.ssh` \uff0c\u53ef\u4ee5\u901a\u8fc7 `ls ~/.ssh` \u67e5\u770b\u3002", "top": 0, "createdAt": 1742641329, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P150": {"htmlDir": "docs/post/guang-mao-yu-lu-you-qi.html", "labels": ["docs"], "postTitle": "\u5149\u732b\u4e0e\u8def\u7531\u5668", "postUrl": "post/guang-mao-yu-lu-you-qi.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/150", "commentNum": 0, "wordCount": 2016, "description": "\u5f88\u591a\u4eba\u5206\u4e0d\u6e05\u5149\u732b\u4e0e\u8def\u7531\u5668\u7684\u533a\u522b\u662f\u4ec0\u4e48\uff1f\u6709\u7684\u7528\u6237\u5bb6\u91cc\u53ea\u6709\u4e00\u4e2a\u5149\u732b\uff0c\u7535\u89c6\u673a\u3001\u7535\u8111\u3001\u624b\u673a\u90fd\u80fd\u4e0a\u7f51\uff0c\u4ed6\u4eec\u4ee5\u4e3a\u90a3\u5c31\u662f\u8def\u7531\u5668\uff0c\u73b0\u5728\u7684\u5149\u732b\u4e5f\u96c6\u6210\u4e86\u65e0\u7ebf\u7f51\u7edc\u529f\u80fd\uff0c\u6709\u7684\u8fd8\u6709\u53cc\u9891WiFi\u7f51\u7edc\u529f\u80fd\uff0c\u5c31\u662f2.4G\u8ddf5G\u65e0\u7ebfWiFi\u4fe1\u53f7\uff0c\u76ee\u524d\u5149\u732b\u53ea\u652f\u6301WiFi5\uff0c\u5bf9\u4e8e\u5bb6\u91cc\u9762\u79ef\u5c0f\u7684\u7528\u6237\u5149\u732b\u81ea\u5e26\u7684\u65e0\u7ebfwifi\u7f51\u7edc\u5df2\u7ecf\u591f\u7528\u4e86\u3002", "top": 0, "createdAt": 1742641330, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P151": {"htmlDir": "docs/post/shen-me-shi-jia-zhi-guan-\uff1f.html", "labels": ["daily"], "postTitle": "\u4ec0\u4e48\u662f\u4ef7\u503c\u89c2\uff1f", "postUrl": "post/shen-me-shi-jia-zhi-guan-%EF%BC%9F.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/151", "commentNum": 0, "wordCount": 248, "description": "> \u6ce8\u610f\uff1a\u4ef7\u503c\u89c2\u6307\u7684\u662f\u4eba\u4eec\u8ba4\u4e3a\u8f83\u6709\u4ef7\u503c\u7684\u89c2\u5ff5\uff08\u5e38\u5e38\u4e0d\u66fe\u8a00\u660e\uff09\u3002", "top": 0, "createdAt": 1742641332, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P152": {"htmlDir": "docs/post/guang-mao-gai-qiao-jie-mo-shi.html", "labels": ["docs"], "postTitle": "\u5149\u732b\u6539\u6865\u63a5\u6a21\u5f0f", "postUrl": "post/guang-mao-gai-qiao-jie-mo-shi.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/152", "commentNum": 0, "wordCount": 2852, "description": "_\u8be5\u4f8b\u4f7f\u7528 HG6145D \u79fb\u52a8\u5149\u732b\uff08\u5317\u4eac\u70fd\u706b\u7ec8\u7aef\uff09_\n\n# 1.\u83b7\u53d6\u8d85\u7ea7\u8d26\u6237\u548c\u5bc6\u7801\n## 1.1 \u83b7\u53d6\u5149\u732b MAC \u5730\u5740\n\u5728\u7ec8\u7aef\u8f93\u5165\uff1a\n```shell\narp -a\n```\n\n\u6216\u8005\u67e5\u770b\u5149\u732b\u80cc\u540e\u540d\u724c\u3002", "top": 0, "createdAt": 1742641333, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P153": {"htmlDir": "docs/post/jing-tai-ku-yu-dong-tai-ku.html", "labels": ["docs", "linux"], "postTitle": "\u9759\u6001\u5e93\u4e0e\u52a8\u6001\u5e93", "postUrl": "post/jing-tai-ku-yu-dong-tai-ku.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/153", "commentNum": 0, "wordCount": 10848, "description": "\u4e0d\u7ba1\u662fLinux\u8fd8\u662fWindows\u4e2d\u7684\u5e93\u6587\u4ef6\u5176\u672c\u8d28\u548c\u5de5\u4f5c\u6a21\u5f0f\u90fd\u662f\u76f8\u540c\u7684, \u53ea\u4e0d\u8fc7\u5728\u4e0d\u540c\u7684\u5e73\u53f0\u4e0a\u5e93\u5bf9\u5e94\u7684\u6587\u4ef6\u683c\u5f0f\u548c\u6587\u4ef6\u540e\u7f00\u4e0d\u540c\u3002", "top": 0, "createdAt": 1742641335, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P154": {"htmlDir": "docs/post/ruan-lian-jie-de-shi-yong-\uff0c-yi- python -ju-li.html", "labels": ["docs"], "postTitle": "\u8f6f\u94fe\u63a5\u7684\u4f7f\u7528\uff0c\u4ee5 python \u4e3e\u4f8b", "postUrl": "post/ruan-lian-jie-de-shi-yong-%EF%BC%8C-yi-%20python%20-ju-li.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/154", "commentNum": 0, "wordCount": 1407, "description": "\u5728 macOS \u4e0a\u521b\u5efa\u548c\u4f7f\u7528\u8f6f\u94fe\u63a5\uff08symbolic link\uff09\u7684\u64cd\u4f5c\u975e\u5e38\u5b9e\u7528\uff0c\u7279\u522b\u662f\u5728\u7ba1\u7406\u4e0d\u540c\u7248\u672c\u7684 Python \u65f6\u3002", "top": 0, "createdAt": 1742641336, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P155": {"htmlDir": "docs/post/\u300c-guo-nei-jie-jue-fang-fa-\u300dlinux-an-zhuang-docker.html", "labels": ["linux"], "postTitle": "\u300c\u56fd\u5185\u89e3\u51b3\u65b9\u6cd5\u300dlinux\u5b89\u88c5docker", "postUrl": "post/%E3%80%8C-guo-nei-jie-jue-fang-fa-%E3%80%8Dlinux-an-zhuang-docker.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/155", "commentNum": 0, "wordCount": 641, "description": "# 1.\u5b89\u88c5Docker\n\n\u4e00\u952e\u5b89\u88c5\u547d\u4ee4\n\n```zsh\nsudo curl -fsSL https://github.com/tech-shrimp/docker_installer/releases/download/latest/linux.sh | bash -s docker --mirror Aliyun\n```\n\n> \u5907\u7528\uff08\u5982\u679cGithub\u8bbf\u95ee\u4e0d\u4e86\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\uff09\n\n```zsh\nsudo curl -fsSL https://gitee.com/tech-shrimp/docker_installer/releases/download/latest/linux.sh | bash -s docker --mirror Aliyun\n```\n\n```zsh\nsudo curl -fsSL https://app.ronan.us.kg/linux_install_docker.sh | bash -s docker --mirror Aliyun\n```\n\n# 2.\u955c\u50cf\u62c9\u53d6\n\u4ee5\u4e0b\u547d\u4ee4\u4e8c\u9009\u4e00\uff0c\u62c9\u53d6\u5931\u8d25\u5219\u5207\u6362\u547d\u4ee4\uff1a\n\n```zsh\nbash -c '$(curl -sSLf https://xy.ggbond.org/xy/docker_pull.sh)' -s \u5b8c\u6574\u955c\u50cf\u540d\n```\n\n```zsh\nbash -c '$(curl -sSLf https://app.ronan.us.kg/docker_pull.sh)' -s \u5b8c\u6574\u955c\u50cf\u540d\n```\u3002", "top": 0, "createdAt": 1742641338, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P156": {"htmlDir": "docs/post/ji-dian-qi-mo-kuai-shi-yong-fang-shi.html", "labels": ["docs"], "postTitle": "\u7ee7\u7535\u5668\u6a21\u5757\u4f7f\u7528\u65b9\u5f0f", "postUrl": "post/ji-dian-qi-mo-kuai-shi-yong-fang-shi.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/156", "commentNum": 0, "wordCount": 639, "description": "## \u7ee7\u7535\u5668\u6a21\u5757\u63a5\u7ebf\u56fe \n\n\n---\n\n## \u4f7f\u7528\u65b9\u6cd5\n\u5404\u4e2a\u5f15\u811a\u529f\u80fd\uff1a\n\n- VCC(+)\uff1a \u4f9b\u7535\u6b63\u6781\u3002", "top": 0, "createdAt": 1742641339, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P157": {"htmlDir": "docs/post/gong-xin-bu-cha-kan-qi-che-shen-bao-tu.html", "labels": ["daily"], "postTitle": "\u5de5\u4fe1\u90e8\u67e5\u770b\u6c7d\u8f66\u7533\u62a5\u56fe", "postUrl": "post/gong-xin-bu-cha-kan-qi-che-shen-bao-tu.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/157", "commentNum": 0, "wordCount": 377, "description": "1.\u8fdb\u5165[\u5de5\u4fe1\u90e8\u5b98\u7f51](https://www.miit.gov.cn/)\u3002", "top": 0, "createdAt": 1742641341, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P158": {"htmlDir": "docs/post/\u300c-tu-chuang-\u300d-shang-chuan-jiao-ben-\uff0c-ji-yu- GitHub -cang-ku.html", "labels": ["tools"], "postTitle": "\u300c\u56fe\u5e8a\u300d\u4e0a\u4f20\u811a\u672c\uff0c\u57fa\u4e8e GitHub \u4ed3\u5e93", "postUrl": "post/%E3%80%8C-tu-chuang-%E3%80%8D-shang-chuan-jiao-ben-%EF%BC%8C-ji-yu-%20GitHub%20-cang-ku.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/158", "commentNum": 0, "wordCount": 1922, "description": "\u4f7f\u7528\u4e4b\u524d\u9700\u8981\u901a\u8fc7 `pip install PyGithub` \u5b89\u88c5 github \u5e93\n\n\u5728 `35-37` \u884c\u586b\u5165\u76f8\u5e94\u4fe1\u606f\u5e76\u5c06\u4ee3\u7801\u4fdd\u5b58\u4e3a imgs.py\uff1a\n- `owner`:github \u7528\u6237\u540d\n- `repo`:\u4ed3\u5e93\u540d(\u5982 imgs)\n- `token`:github \u79c1\u4eba\u8bbf\u95ee\u4ee4\u724c(\u8981\u7ed9\u4e88\u4ed3\u5e93\u8bfb\u5199\u6743\u9650)\n\n\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u65b9\u6cd5\u76f4\u63a5\u8fd0\u884c\u811a\u672c\u6216\u8005\u5c06\u811a\u672c[\u6253\u5305\u4e3a\u5e94\u7528\u7a0b\u5e8f](https://blog.ronan.us.kg/2024/09/02/python-%E6%89%93%E5%8C%85%E7%A8%8B%E5%BA%8F/)\n\n\u4f7f\u7528\u65b9\u6cd5\uff1a`usage: python imgs.py [-h] input_file [input_file ...]`\n\n```python\nfrom github import Github\nimport os\nimport argparse\nimport base64\n\nclass Imgs:\n def __init__(self, owner=None, repo=None, token=None):\n self.owner = owner\n self.repo = repo\n self.token = token\n\n g = Github(self.token)\n self.repo = g.get_repo(f'{self.owner}/{self.repo}')\n\n def create_new_file(self, img, content):\n # \u7b2c\u4e00\u4e2a\u53c2\u6570\uff1a\u8981\u4e0a\u4f20\u5230\u4ed3\u5e93\u7684\u54ea\u4e2a\u8def\u5f84; \u7b2c\u4e8c\u4e2a\u53c2\u6570\uff1acommit \u4fe1\u606f; \u7b2c\u4e09\u4e2a\u53c2\u6570\uff1a\u4e0a\u4f20\u6587\u6863\u6b63\u6587; \u7b2c\u56db\u4e2a\u53c2\u6570\uff1a\u4e0a\u4f20\u7684\u5206\u652f\n self.repo.create_file(f'blog_imgs/{img}', f'Newfiles: {img} ', content, branch='main')\n\n def get_img_content(self, img_path):\n with open(img_path, 'rb') as image_file:\n img_content = image_file.read()\n\n return img_content\n\n\ndef main():\n parser = argparse.ArgumentParser(description='\u57fa\u4e8e echozap/imgs \u7684\u56fe\u5e8a\u4e0a\u4f20')\n\n # \u4f20\u9012\u7684\u56fe\u7247\u6570\u91cf\u4e0d\u786e\u5b9a\n parser.add_argument('input_file', type=str, nargs='+', help='\u8f93\u5165\u56fe\u7247\u7684\u8def\u5f84')\n\n args = parser.parse_args()\n\n img = Imgs(\n owner = '',\n repo = '',\n token = ''\n )\n\n for img_path in args.input_file:\n try:\n img_content = img.get_img_content(img_path)\n img_name = os.path.basename(img_path) # \u83b7\u53d6\u5e26\u6269\u5c55\u540d\u7684\u6587\u4ef6\u540d\n\n img.create_new_file(img_name, img_content)\n\n print(f'{img_name}\u4e0a\u4f20\u6210\u529f')\n print(f'https://img.ronan.us.kg/blog_imgs/{img_name}')\n except Exception as e:\n if ''status': '422'' in str(e):\n print(f'\u4e0a\u4f20 {img_path} \u65f6\u53d1\u751f\u9519\u8bef: {e}')\n print('\u56fe\u7247\u5df2\u5b58\u5728')\n print(f'https://img.ronan.us.kg/blog_imgs/{img_name}')\n\nif __name__ == '__main__':\n main()\n```\u3002", "top": 0, "createdAt": 1742641342, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P159": {"htmlDir": "docs/post/\u300c-tu-chuang-\u300d-shang-chuan-jiao-ben-\uff0c-ji-yu- cloudflare R2 -dui-xiang-cun-chu.html", "labels": ["tools"], "postTitle": "\u300c\u56fe\u5e8a\u300d\u4e0a\u4f20\u811a\u672c\uff0c\u57fa\u4e8e cloudflare R2 \u5bf9\u8c61\u5b58\u50a8", "postUrl": "post/%E3%80%8C-tu-chuang-%E3%80%8D-shang-chuan-jiao-ben-%EF%BC%8C-ji-yu-%20cloudflare%20R2%20-dui-xiang-cun-chu.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/159", "commentNum": 0, "wordCount": 2407, "description": "**\u4f7f\u7528\u4e4b\u524d\u9700\u8981\u901a\u8fc7 `pip install boto3` \u5b89\u88c5 boto3 \u5e93\u3002", "top": 0, "createdAt": 1742641344, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P160": {"htmlDir": "docs/post/na-tian-\uff0c-ta-jue-ding-tou-zou-yi-jia-fei-ji.html", "labels": ["daily"], "postTitle": "\u90a3\u5929\uff0c\u4ed6\u51b3\u5b9a\u5077\u8d70\u4e00\u67b6\u98de\u673a", "postUrl": "post/na-tian-%EF%BC%8C-ta-jue-ding-tou-zou-yi-jia-fei-ji.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/160", "commentNum": 0, "wordCount": 1279, "description": "2018\u5e748\u670810\u65e5\uff0c\u5730\u5e73\u7ebf\u822a\u7a7a\u4e00\u67b6\u5e9e\u5df4\u8feaDash 8 Q400\u5728\u7f8e\u56fd\u897f\u96c5\u56fe\u7684\u5854\u79d1\u9a6c\u56fd\u9645\u673a\u573a\uff08Sea-Tac\uff09\u88ab\u76d7\u3002", "top": 0, "createdAt": 1742641345, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P161": {"htmlDir": "docs/post/\u300c-ge-zhong-mo-bu-zhao-tou-nao-\u300d-yi-wai-xiu-gai-PATH(-huan-jing-bian-liang-).html", "labels": ["docs"], "postTitle": "\u300c\u5404\u79cd\u6478\u4e0d\u7740\u5934\u8111\u300d\u610f\u5916\u4fee\u6539PATH(\u73af\u5883\u53d8\u91cf)", "postUrl": "post/%E3%80%8C-ge-zhong-mo-bu-zhao-tou-nao-%E3%80%8D-yi-wai-xiu-gai-PATH%28-huan-jing-bian-liang-%29.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/161", "commentNum": 0, "wordCount": 709, "description": "# 1. **\u68c0\u67e5sudo\u662f\u5426\u5df2\u7ecf\u5b89\u88c5**\n\n\u786e\u4fdd **sudo** \u5df2\u7ecf\u6b63\u786e\u5730\u5b89\u88c5\u5728\u4f60\u7684\u7cfb\u7edf\u4e2d\u3002", "top": 0, "createdAt": 1742641347, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P162": {"htmlDir": "docs/post/\u300c-mao-xuan-\u300d-yu-zhi-wu-da-zhan-jiang-shi-de-gu-shi.html", "labels": ["daily"], "postTitle": "\u300c\u6bdb\u9009\u300d\u4e0e\u690d\u7269\u5927\u6218\u50f5\u5c38\u7684\u6545\u4e8b", "postUrl": "post/%E3%80%8C-mao-xuan-%E3%80%8D-yu-zhi-wu-da-zhan-jiang-shi-de-gu-shi.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/162", "commentNum": 0, "wordCount": 777, "description": "\u672c\u6587\u89e3\u8bfb\u7684\u662f\u6bdb\u9009\u4e2d\u8ba9\u4eba\u56f0\u60d1\u76846\u4e2a\u6982\u5ff5\uff1a\u201c\u5de6\u6d3e\u201d\u3001\u201c\u53f3\u6d3e\u201d\u3001\u201c\u5de6\u503e\u201d\u3001\u201c\u53f3\u503e\u201d\u3001\u201c\u5de6\u7ffc\u201d\u3001\u201c\u53f3\u7ffc\u201d\u3002", "top": 0, "createdAt": 1742641348, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P163": {"htmlDir": "docs/post/ru-he-jiang-nao-hai-li-de-hua-mian-gan-xie-cheng-xiao-shuo.html", "labels": ["daily"], "postTitle": "\u5982\u4f55\u5c06\u8111\u6d77\u91cc\u7684\u753b\u9762\u611f\u5199\u6210\u5c0f\u8bf4", "postUrl": "post/ru-he-jiang-nao-hai-li-de-hua-mian-gan-xie-cheng-xiao-shuo.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/163", "commentNum": 0, "wordCount": 233, "description": "\u591a\u7528\u52a8\u8bcd\uff0c\u5c11\u7528\u5f62\u5bb9\u8bcd+\u540d\u8bcd\u3002", "top": 0, "createdAt": 1742641350, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P164": {"htmlDir": "docs/post/zai-duan-shi-pin-wei-wang-de-shi-dai-\uff0c-you-jian-shi-dao-le-wen-zi-dai-gei-wo-de-chong-ji-li.html", "labels": ["daily"], "postTitle": "\u5728\u77ed\u89c6\u9891\u4e3a\u738b\u7684\u65f6\u4ee3\uff0c\u53c8\u89c1\u8bc6\u5230\u4e86\u6587\u5b57\u5e26\u7ed9\u6211\u7684\u51b2\u51fb\u529b", "postUrl": "post/zai-duan-shi-pin-wei-wang-de-shi-dai-%EF%BC%8C-you-jian-shi-dao-le-wen-zi-dai-gei-wo-de-chong-ji-li.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/164", "commentNum": 0, "wordCount": 966, "description": "\u4e0d\u77e5\u9053\u4ece\u4ec0\u4e48\u65f6\u5019\u8d77\uff0c\u6751\u91cc\u7684\u4eba\u4fbf\u5f00\u59cb\u76f8\u4fe1\uff0c\u6211\u80fd\u4fee\u597d\u5f88\u591a\u4e1c\u897f\u3002", "top": 0, "createdAt": 1742641352, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-03-22", "dateLabelColor": "#0969da"}, "P165": {"htmlDir": "docs/post/cloudflare cloudns-yu-ming-bian-yuan-zheng-shu-xu-ding.html", "labels": ["bug"], "postTitle": "cloudflare cloudns\u57df\u540d\u8fb9\u7f18\u8bc1\u4e66\u7eed\u8ba2", "postUrl": "post/cloudflare%20cloudns-yu-ming-bian-yuan-zheng-shu-xu-ding.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/165", "commentNum": 0, "wordCount": 193, "description": "\u8fdb\u5165\u9700\u8981\u7eed\u8ba2\u8bc1\u4e66\u7684\u57df\u540d\u754c\u9762\n\n\u4f9d\u6b21\u70b9\u51fb SSL/TLS -> \u8fb9\u7f18\u8bc1\u4e66 -> \u4e0b\u6ed1\u5230\u6700\u5e95\u90e8\uff0c\u70b9\u51fb\u7981\u7528\u901a\u7528SSL\u7136\u540e\u91cd\u65b0\u542f\u7528\u5373\u53ef\u5237\u65b0\u8bc1\u4e66\n\n\n\n\u518d\u6ed1\u5230\u9876\u90e8\u201c\u8fb9\u7f18\u8bc1\u4e66\u201d\uff0c\u5c06\u4e24\u6761 TXT \u8bb0\u5f55\u6dfb\u52a0\u5230 cloudns\uff08\u81ea\u5df1\u5b98\u7f51\uff09 \u7684 DNS \u89e3\u6790\u3002", "top": 0, "createdAt": 1750489334, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-06-21", "dateLabelColor": "#0969da"}, "P166": {"htmlDir": "docs/post/\u300cPython\u300d-ai-xin-dai-ma.html", "labels": ["docs"], "postTitle": "\u300cPython\u300d\u7231\u5fc3\u4ee3\u7801", "postUrl": "post/%E3%80%8CPython%E3%80%8D-ai-xin-dai-ma.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/166", "commentNum": 0, "wordCount": 4760, "description": "# 1.\u5148\u770b\u6548\u679c\n\n\n\n# 2.\u6e90\u4ee3\u7801\ud83d\udc47\n\n```Python\nimport random\nfrom math import sin, cos, pi, log\nfrom tkinter import *\nCANVAS_WIDTH = 640\nCANVAS_HEIGHT = 480\nCANVAS_CENTER_X = CANVAS_WIDTH / 2\nCANVAS_CENTER_Y = CANVAS_HEIGHT / 2\nIMAGE_ENLARGE = 11\nHEART_COLOR = '#FF99CC'\n\n\ndef heart_function(t, shrink_ratio: float = IMAGE_ENLARGE):\n x = 16 * (sin(t) ** 3)\n y = -(13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t))\n # \u653e\u5927\n x *= shrink_ratio\n y *= shrink_ratio\n # \u79fb\u5230\u753b\u5e03\u4e2d\u592e\n x += CANVAS_CENTER_X\n y += CANVAS_CENTER_Y\n return int(x), int(y)\n\n\ndef scatter_inside(x, y, beta=0.15):\n ratio_x = - beta * log(random.random())\n ratio_y = - beta * log(random.random())\n dx = ratio_x * (x - CANVAS_CENTER_X)\n dy = ratio_y * (y - CANVAS_CENTER_Y)\n return x - dx, y - dy\n\n\ndef shrink(x, y, ratio):\n force = -1 / (((x - CANVAS_CENTER_X) ** 2 +\n (y - CANVAS_CENTER_Y) ** 2) ** 0.6)\n dx = ratio * force * (x - CANVAS_CENTER_X)\n dy = ratio * force * (y - CANVAS_CENTER_Y)\n return x - dx, y - dy\n\n\ndef curve(p):\n return 2 * (2 * sin(4 * p)) / (2 * pi)\n\n\nclass Heart:\n def __init__(self, generate_frame=20):\n self._points = set() # \u539f\u59cb\u7231\u5fc3\u5750\u6807\u96c6\u5408\n self._edge_diffusion_points = set() # \u8fb9\u7f18\u6269\u6563\u6548\u679c\u70b9\u5750\u6807\u96c6\u5408\n self._center_diffusion_points = set() # \u4e2d\u5fc3\u6269\u6563\u6548\u679c\u70b9\u5750\u6807\u96c6\u5408\n self.all_points = {} # \u6bcf\u5e27\u52a8\u6001\u70b9\u5750\u6807\n self.build(2000)\n self.random_halo = 1000\n self.generate_frame = generate_frame\n for frame in range(generate_frame):\n self.calc(frame)\n\n def build(self, number):\n for _ in range(number):\n t = random.uniform(0, 2 * pi)\n x, y = heart_function(t)\n self._points.add((x, y))\n # \u7231\u5fc3\u5185\u6269\u6563\n for _x, _y in list(self._points):\n for _ in range(3):\n x, y = scatter_inside(_x, _y, 0.05)\n self._edge_diffusion_points.add((x, y))\n # \u7231\u5fc3\u5185\u518d\u6b21\u6269\u6563\n point_list = list(self._points)\n for _ in range(4000):\n x, y = random.choice(point_list)\n x, y = scatter_inside(x, y, 0.17)\n self._center_diffusion_points.add((x, y))\n\n @staticmethod\n def calc_position(x, y, ratio):\n force = 1 / (((x - CANVAS_CENTER_X) ** 2 +\n (y - CANVAS_CENTER_Y) ** 2) ** 0.520)\n dx = ratio * force * (x - CANVAS_CENTER_X) + random.randint(-1, 1)\n dy = ratio * force * (y - CANVAS_CENTER_Y) + random.randint(-1, 1)\n return x - dx, y - dy\n\n def calc(self, generate_frame):\n ratio = 10 * curve(generate_frame / 10 * pi)\n halo_radius = int(4 + 6 * (1 + curve(generate_frame / 10 * pi)))\n halo_number = int(\n 3000 + 4000 * abs(curve(generate_frame / 10 * pi) ** 2))\n all_points = []\n # \u5149\u73af\n heart_halo_point = set()\n for _ in range(halo_number):\n t = random.uniform(0, 2 * pi)\n x, y = heart_function(t, shrink_ratio=11.6)\n x, y = shrink(x, y, halo_radius)\n if (x, y) not in heart_halo_point:\n heart_halo_point.add((x, y))\n x += random.randint(-14, 14)\n y += random.randint(-14, 14)\n size = random.choice((1, 2, 2))\n all_points.append((x, y, size))\n # \u8f6e\u5ed3\n for x, y in self._points:\n x, y = self.calc_position(x, y, ratio)\n size = random.randint(1, 3)\n all_points.append((x, y, size))\n # \u5185\u5bb9\n for x, y in self._edge_diffusion_points:\n x, y = self.calc_position(x, y, ratio)\n size = random.randint(1, 2)\n all_points.append((x, y, size))\n self.all_points[generate_frame] = all_points\n for x, y in self._center_diffusion_points:\n x, y = self.calc_position(x, y, ratio)\n size = random.randint(1, 2)\n all_points.append((x, y, size))\n self.all_points[generate_frame] = all_points\n\n def render(self, render_canvas, render_frame):\n for x, y, size in self.all_points[render_frame % self.generate_frame]:\n render_canvas.create_rectangle(\n x, y, x + size, y + size, width=0, fill=HEART_COLOR)\n\n\ndef draw(main: Tk, render_canvas: Canvas, render_heart: Heart, render_frame=0):\n render_canvas.delete('all')\n render_heart.render(render_canvas, render_frame)\n main.after(160, draw, main, render_canvas, render_heart, render_frame + 1)\n\n\nif __name__ == '__main__':\n root = Tk()\n root.title('\u8fd9\u662f\u7ed9\u516c\u4e3b\u7684...')\n canvas = Canvas(root, bg='black', height=CANVAS_HEIGHT, width=CANVAS_WIDTH)\n canvas.pack()\n heart = Heart()\n draw(root, canvas, heart)\n root.mainloop()\n```\u3002", "top": 0, "createdAt": 1755794614, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-08-22", "dateLabelColor": "#0969da"}, "P167": {"htmlDir": "docs/post/ge-ren-zi-yong-nvim-pei-zhi-wen-jian.html", "labels": ["tools"], "postTitle": "\u4e2a\u4eba\u81ea\u7528nvim\u914d\u7f6e\u6587\u4ef6", "postUrl": "post/ge-ren-zi-yong-nvim-pei-zhi-wen-jian.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/167", "commentNum": 0, "wordCount": 368, "description": "nvim\u662fvim\u7684\u201c\u8fdb\u9636\u7248\u201d\uff0c\u4f7f\u7528\u524d\u9700\u8981\u7cfb\u7edf\u5df2\u5b89\u88c5nvim\uff0c\u914d\u7f6e\u597d\u540e\u53ef\u4f7f\u7528 `nvim xxx.txt` \u6253\u5f00\u6587\u672c\n\n[\u70b9\u51fb\u8fd9\u91cc\u67e5\u770b\u89c6\u9891\u6559\u7a0b](https://b23.tv/aYAmxjl)\n[\u8fd9\u662f\u5404\u4e2a\u914d\u7f6e\u6587\u4ef6\u7684\u539f\u5185\u5bb9\uff0c\u8bf7\u5bf9\u7167\u6587\u4ef6\u6811\u590d\u5236\u7c98\u8d34](https://gist.github.com/EchoZap/9cf5b6738c4757b509011a8c75fa4d72)\n\nnvim\u7684\u6574\u4f53\u914d\u7f6e\u6587\u4ef6\u5b58\u653e\u4f4d\u7f6e\u4ee5\u53ca\u6587\u4ef6\u6811\u5982\u4e0b\uff1a\n> .config\u6587\u4ef6\u5939\u4e00\u822c\u60c5\u51b5\u4e0b\u662f\u9690\u85cf\u7684\uff0c\u5728macOS\u4e2d\u9700\u8981\u300c\u663e\u793a/\u9690\u85cf\u300d\u4ee5.\u5f00\u5934\u7684\u6587\u4ef6\u5939\u53ef\u4ee5\u540c\u65f6\u6309\u4e0b\u300ccommand+shift+.\u300d\n\n\u3002", "top": 0, "createdAt": 1763364101, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-11-17", "dateLabelColor": "#0969da"}, "P168": {"htmlDir": "docs/post/bo-te-lv-dong-OLED-qu-dong-ku-(STM32+HAL+SSD1306).html", "labels": ["tools"], "postTitle": "\u6ce2\u7279\u5f8b\u52a8OLED\u9a71\u52a8\u5e93(STM32+HAL+SSD1306)", "postUrl": "post/bo-te-lv-dong-OLED-qu-dong-ku-%28STM32%2BHAL%2BSSD1306%29.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/168", "commentNum": 0, "wordCount": 642, "description": "[\u9a71\u52a8\u5e93\u6e90\u4ee3\u7801](https://gist.github.com/EchoZap/86b91bb98386ad34d9e95661200dada7)\n\n> \u672c\u5e93\u9002\u914dSSD1306/SSD1315\u7b49\u7cfb\u5217\u82af\u7247\n\n## 0. \u5de5\u7a0b\u914d\u7f6e\n\u793a\u4f8b\u5de5\u7a0b\u9ed8\u8ba4\u4f7f\u7528\u7684\u662fSTM32F103C8T6\u7684I2C2. \u5982\u6709\u5176\u4ed6I2C\u6216SPI\u9700\u6c42, \u4ec5\u9700\u4fee\u6539oled.h\u4e2d\u7684Send\u51fd\u6570\u5373\u53ef\u5b8c\u6210\u79fb\u690d.\n\n## 1. \u5f15\u5165\nCubeIDE\n\u5c06\u672c\u5e93\u7684oled.c, font.c\u6587\u4ef6\u653e\u5165\u5230Src\u6587\u4ef6\u5939, \u5c06oled.h, font.h\u6587\u4ef6\u653e\u5165Inc\u6587\u4ef6\u5939.\n\n## 2. \u4f7f\u7528\n1.STM32\u521d\u59cb\u5316IIC\u5b8c\u6210\u540e\u8c03\u7528OLED_Init()\u521d\u59cb\u5316OLED. \u6ce8\u610fSTM32\u542f\u52a8\u6bd4OLED\u4e0a\u7535\u5feb, \u53ef\u7b49\u5f8520ms\u518d\u521d\u59cb\u5316OLED \n2.\u8c03\u7528OLED_NewFrame()\u5f00\u59cb\u7ed8\u5236\u65b0\u7684\u4e00\u5e27 \n3.\u8c03\u7528OLED_DrawXXX()\u7cfb\u5217\u51fd\u6570\u7ed8\u5236\u56fe\u5f62\u5230\u663e\u5b58 \u8c03\u7528OLED_Printxxx()\u7cfb\u5217\u51fd\u6570\u7ed8\u5236\u6587\u672c\u5230\u663e\u5b58 \n4.\u8c03\u7528OLED_ShowFrame()\u5c06\u663e\u5b58\u5185\u5bb9\u663e\u793a\u5230OLED \n```c\nOLED_Init();\n\nwhile(1){\n OLED_NewFrame();\n OLED_PrintString(i, i, '\u6ce2\u7279\u5f8b\u52a8hello', &font16x16, OLED_COLOR_NORMAL);\n OLED_ShowFrame();\n HAL_Delay(100);\n}\n```\u3002", "top": 0, "createdAt": 1763364782, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-11-17", "dateLabelColor": "#0969da"}, "P169": {"htmlDir": "docs/post/se-huan-dian-zu-zhe-yang-kan.html", "labels": ["docs"], "postTitle": "\u8272\u73af\u7535\u963b\u8fd9\u6837\u770b", "postUrl": "post/se-huan-dian-zu-zhe-yang-kan.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/169", "commentNum": 0, "wordCount": 477, "description": "\u4e3a\u4e86\u533a\u5206\u5de6\u53f3\uff0cC\u5e26\u548cD\u5e26\u4e4b\u95f4\u6709\u4e00\u4e2a\u95f4\u9699\uff1a\n\n\n\n- A.\u5143\u4ef6\u503c\u7b2c\u4e00\u4f4d\u6709\u6548\u6570\u5b57\uff08\u5de6\u4fa7\uff09\n- B.\u7b2c\u4e8c\u4e2a\u6709\u6548\u6570\u5b57\uff08\u67d0\u4e9b\u7cbe\u5bc6\u7535\u963b\u5668\u6709\u7b2c\u4e09\u4e2a\u6709\u6548\u6570\u5b57\uff0c\u56e0\u6b64\u6709\u4e94\u4e2a\u8272\u5e26\uff09\n- C.\u5341\u8fdb\u5236\u4e58\u6570\uff08\u4e5f\u5c31\u662f\u6709\u6548\u6570\u5b57\u540e\u8ddf\u7740\u591a\u5c11\u4e2a0\uff0c\u6216\u8005\u8bf410\u7684\u51e0\u6b21\u65b9\uff09\n- D.\u5982\u679c\u5b58\u5728\uff0c\u5219\u8868\u793a\u767e\u5206\u6bd4\u503c\u7684\u516c\u5dee\uff08\u6ca1\u6709\u8272\u5e26\u5219\u8868\u793a20%\uff09\n\n\u5728\u4e0a\u9762\u7684\u4f8b\u5b50\u4e2d\uff0c\u4e00\u4e2a\u7535\u963b\u5668\u5e26\u6709\u7ea2\u8272\u3001\u7d2b\u8272\u3001\u7eff\u8272\u548c\u91d1\u8272\u7684\u8272\u73af\uff08\u5bf9\u7167\u4e0b\u8868\uff09\uff0c\u5176\u7b2c\u4e00\u4e2a\u6570\u5b57\u4e3a2\uff08\u7ea2\u8272\uff09\uff0c\u7b2c\u4e8c\u4e2a\u6570\u5b57\u4e3a7\uff08\u7d2b\u8272\uff09\uff0c\u540e\u9762\u8ddf\u77405\u4e2a\u96f6\uff08\u7eff\u8272\uff09\uff1a2700000 \u6b27\u3002", "top": 0, "createdAt": 1766409206, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2025-12-22", "dateLabelColor": "#0969da"}, "P172": {"htmlDir": "docs/post/FLClash-fu-xie-jiao-ben-\u3001shadowrocket-pei-zhi-wen-jian.html", "labels": ["tools"], "postTitle": "FLClash\u8986\u5199\u811a\u672c\u3001shadowrocket\u914d\u7f6e\u6587\u4ef6", "postUrl": "post/FLClash-fu-xie-jiao-ben-%E3%80%81shadowrocket-pei-zhi-wen-jian.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/172", "commentNum": 0, "wordCount": 239, "description": "[FLClash js\u8986\u5199\u811a\u672c](https://gist.githubusercontent.com/EchoZap/75ec636e2b8bd596c821df41f3ff0a93/raw/ronan_flclash.js)\n\n[shadowrocket\u914d\u7f6e\u6587\u4ef6](https://gist.githubusercontent.com/EchoZap/19b60139b1b79f9708db88defa138eb6/raw/ronan_shadowrocket.conf)\u3002", "top": 0, "createdAt": 1775464712, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2026-04-06", "dateLabelColor": "#1f883d"}, "P173": {"htmlDir": "docs/post/ru-he-pan-duan-ji-chang-jie-dian-shi-zhi-lian-huan-shi-zhong-zhuan.html", "labels": ["docs"], "postTitle": "\u5982\u4f55\u5224\u65ad\u673a\u573a\u8282\u70b9\u662f\u76f4\u8fde\u8fd8\u662f\u4e2d\u8f6c", "postUrl": "post/ru-he-pan-duan-ji-chang-jie-dian-shi-zhi-lian-huan-shi-zhong-zhuan.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/173", "commentNum": 0, "wordCount": 634, "description": "\u770b\u8282\u70b9\u4fe1\u606f\uff0c\u7ed9\u4f60\u8ba2\u9605\u91cc\u7684\u662f\u5165\u53e3IP\uff0c\u4f60\u8fde\u4e0a\u4e4b\u540e\u67e5IP\u662f\u51fa\u53e3\uff1b \nip\u4e00\u81f4\u7684\u8bdd\u5c31\u662f\u76f4\u8fde\uff1b \n\u4e0d\u4e00\u81f4\u7684\u8bdd\u662f\u4e2d\u8f6c\u6216\u4e13\u7ebf\uff08\u4e13\u7ebf\u5e94\u8be5\u4e5f\u7b97\u662f\u4e00\u79cd\u4e2d\u8f6c\uff0c\u53ea\u662f\u8fc7\u957f\u57ce\u7684\u65f6\u5019\u6709\u201cVIP\u901a\u9053\u201d\uff09\u3002", "top": 0, "createdAt": 1775802402, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2026-04-10", "dateLabelColor": "#1f883d"}, "P174": {"htmlDir": "docs/post/macOS-yun-xing-singbox-luo-he.html", "labels": ["docs"], "postTitle": "macOS\u8fd0\u884csingbox\u88f8\u6838", "postUrl": "post/macOS-yun-xing-singbox-luo-he.html", "postSourceUrl": "https://github.com/EchoZap/echozap.github.io/issues/174", "commentNum": 0, "wordCount": 1383, "description": "\u5728\u7ec8\u7aefcd\u5230singbox\u5185\u6838\u6240\u5728\u76ee\u5f55\uff0c\u5efa\u8bae\u5c06\u9762\u677f\u6587\u4ef6\uff08UI\uff09\u548cconfig.json\u548c\u5185\u6838\u653e\u5230\u540c\u4e00\u76ee\u5f55\u4e0b\u3002", "top": 0, "createdAt": 1776235924, "style": "", "script": "<script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/GmeekTOC.js'></script><script src='https://pub-43c06573bc27485093cd50efd04e9e7b.r2.dev/Gmeeklightbox.js'></script><script>document.querySelectorAll('a').forEach(anchor => {const img = anchor.querySelector('img');if (img && img.hasAttribute('data-canonical-src')) {const canonicalSrc = img.getAttribute('data-canonical-src');anchor.setAttribute('href', canonicalSrc);img.setAttribute('src', canonicalSrc);img.removeAttribute('data-canonical-src');}});</script>", "head": "", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "createdDate": "2026-04-15", "dateLabelColor": "#1f883d"}}, "singeListJson": {}, "labelColorDict": {"bug": "#d73a4a", "daily": "#B2D0F1", "docs": "#0075ca", "linux": "#c16f86", "tools": "#09925E"}, "faviconUrl": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "ogImage": "https://pub-a25b6a83a2d846958fb63f69d07d79a5.r2.dev/avatar.jpg", "primerCSS": "<link href='https://mirrors.sustech.edu.cn/cdnjs/ajax/libs/Primer/21.0.7/primer.css' rel='stylesheet' />", "prevUrl": "/page3.html", "nextUrl": "disabled"}