From ee0203287d3c05b8f508c52424ed9b75bb380dbd Mon Sep 17 00:00:00 2001 From: Dionysen Date: Mon, 4 Dec 2023 18:49:00 +0000 Subject: [PATCH] Building and deploying Hexo project from Github Action --- .../index.html" | 692 +++ .../\347\256\241/index.html" | 749 +++ .../\345\233\236\344\271\241/index.html" | 675 +++ .../\346\213\276\347\276\2752020/index.html" | 842 ++++ .../index.html" | 729 +++ .../\347\213\255\351\232\231/index.html" | 682 +++ 2022/01/04/note/Linux/Termux/index.html | 724 +++ .../index.html" | 717 +++ .../index.html" | 670 +++ 2022/05/25/note/Linux/Tools/index.html | 719 +++ .../25/note/Programming/Language/C/index.html | 1114 +++++ .../note/Programming/Language/Java/index.html | 743 +++ .../Programming/Language/cpp-1/index.html | 1890 ++++++++ .../Programming/Language/cpp-2/index.html | 1189 +++++ .../Programming/Language/cpp-3/index.html | 1411 ++++++ .../Programming/Language/cpp-4/index.html | 870 ++++ .../index.html" | 677 +++ 2022/11/20/note/Linux/Samba/index.html | 691 +++ 2022/11/21/note/Experience/Samsung/index.html | 683 +++ .../index.html" | 706 +++ .../05/25/note/Algorithm/Algorithm/index.html | 873 ++++ .../note/Algorithm/DataStrucuture/index.html | 824 ++++ .../25/note/Algorithm/linked_list/index.html | 694 +++ 2023/05/25/note/Computer/network/index.html | 878 ++++ 2023/05/25/note/Computer/thread/index.html | 715 +++ 2023/05/25/note/Framework/Qt/index.html | 721 +++ 2023/05/25/note/Hexo/Hexo/index.html | 762 +++ 2023/05/25/note/Linux/LinuxNote/index.html | 854 ++++ 2023/05/25/note/Linux/NFS/index.html | 716 +++ 2023/05/25/note/Linux/Neovim/index.html | 739 +++ 2023/05/25/note/Linux/Server/SSL/index.html | 691 +++ .../note/Linux/Server/code_server/index.html | 774 +++ .../Linux/Server_install_archlinux/index.html | 717 +++ 2023/05/25/note/Linux/Source_List/index.html | 678 +++ 2023/05/25/note/Linux/WSL2/index.html | 765 +++ .../note/Linux/shell_command/FTP/index.html | 709 +++ .../note/Linux/shell_command/SCP/index.html | 706 +++ 2023/05/25/note/Linux/v2raya/index.html | 703 +++ 2023/05/25/note/Linux/xpra/index.html | 701 +++ .../Projects/projectmanager/index.html | 846 ++++ .../05/25/note/Programming/evn/GDB/index.html | 757 +++ .../05/25/note/Programming/evn/Git/index.html | 716 +++ .../Programming/evn/cpp_config/index.html | 690 +++ 2023/05/25/note/Windows/Windows10/index.html | 710 +++ 2023/06/01/note/Hexo/Hexo-keep/index.html | 779 +++ 2023/06/04/note/Hexo/Hexo_hitokoto/index.html | 833 ++++ .../share_input_on_win_and_android/index.html | 739 +++ 2023/06/09/note/Linux/vim/index.html | 926 ++++ .../Programming/evn/OpenGL-env/index.html | 762 +++ .../Programming/evn/vs-beautify/index.html | 693 +++ .../index.html" | 703 +++ .../Framework/OpenGL/opengl-intro/index.html | 816 ++++ .../evn/coc-nvim-inlay-hint/index.html | 710 +++ .../evn/vscode-lldb-extension/index.html | 682 +++ .../Programming/tools/cmake-win/index.html | 718 +++ .../note/Programming/tools/xmake/index.html | 774 +++ .../Framework/OpenGL/Win32-OpenGL/index.html | 699 +++ .../OpenGL/Win32andOpenGL/index.html | 715 +++ .../Framework/OpenGL/opengl-basic/index.html | 908 ++++ .../note/Experience/unicode-error/index.html | 681 +++ .../07/04/note/Experience/waydroid/index.html | 742 +++ 2023/07/05/note/Hexo/picgo/index.html | 716 +++ .../Language/javascript/index.html | 788 +++ .../Framework/OpenGL/ogre_compile/index.html | 733 +++ .../tools/mysql_install/index.html | 750 +++ 2023/07/18/note/Framework/vue3/index.html | 702 +++ .../19/note/Algorithm/BinaryTree/index.html | 715 +++ .../OpenGL/opengl_advance/index.html | 854 ++++ 2023/07/30/note/Experience/rtmp/index.html | 687 +++ .../Framework/OpenGL/opengl-wasm/index.html | 695 +++ .../note/Experience/livecd-on-disk/index.html | 709 +++ .../Framework/OpenGL/opengl_shadow/index.html | 692 +++ .../Programming/evn/clang-format/index.html | 686 +++ .../\346\213\276\347\276\2752023/index.html" | 684 +++ .../note/Experience/qt-questions/index.html | 698 +++ .../Framework/OpenGL/opengl-macos/index.html | 694 +++ .../Programming/Language/cpp_lib/index.html | 712 +++ about/index.html | 455 ++ archives/2020/02/index.html | 1112 +++++ archives/2020/04/index.html | 1112 +++++ archives/2020/05/index.html | 1112 +++++ archives/2020/10/index.html | 1112 +++++ archives/2020/index.html | 1112 +++++ archives/2022/01/index.html | 1112 +++++ archives/2022/03/index.html | 1112 +++++ archives/2022/05/index.html | 1112 +++++ archives/2022/06/index.html | 1112 +++++ archives/2022/11/index.html | 1112 +++++ archives/2022/index.html | 1112 +++++ archives/2022/page/2/index.html | 1112 +++++ archives/2023/05/index.html | 1112 +++++ archives/2023/05/page/2/index.html | 1112 +++++ archives/2023/05/page/3/index.html | 1112 +++++ archives/2023/06/index.html | 1112 +++++ archives/2023/06/page/2/index.html | 1112 +++++ archives/2023/07/index.html | 1112 +++++ archives/2023/07/page/2/index.html | 1112 +++++ archives/2023/08/index.html | 1112 +++++ archives/2023/09/index.html | 1112 +++++ archives/2023/10/index.html | 1112 +++++ archives/2023/11/index.html | 1112 +++++ archives/2023/index.html | 1112 +++++ archives/2023/page/2/index.html | 1112 +++++ archives/2023/page/3/index.html | 1112 +++++ archives/2023/page/4/index.html | 1112 +++++ archives/2023/page/5/index.html | 1112 +++++ archives/2023/page/6/index.html | 1112 +++++ archives/index.html | 1112 +++++ archives/page/2/index.html | 1112 +++++ archives/page/3/index.html | 1112 +++++ archives/page/4/index.html | 1112 +++++ archives/page/5/index.html | 1112 +++++ archives/page/6/index.html | 1112 +++++ archives/page/7/index.html | 1112 +++++ archives/page/8/index.html | 1112 +++++ categories/index.html | 386 ++ .../index.html" | 527 ++ .../page/2/index.html" | 431 ++ .../\345\260\217\350\257\264/index.html" | 457 ++ .../\346\213\276\347\276\275/index.html" | 439 ++ .../\346\225\243\346\226\207/index.html" | 457 ++ .../\351\230\205\350\257\273/index.html" | 427 ++ .../Android/index.html" | 448 ++ .../Code-Editor/index.html" | 427 ++ .../index.html" | 445 ++ .../Linux/index.html" | 503 ++ .../Linux/page/2/index.html" | 470 ++ .../Windows/index.html" | 427 ++ .../cpp/index.html" | 427 ++ .../index.html" | 503 ++ .../page/2/index.html" | 507 ++ .../page/3/index.html" | 506 ++ .../index.html" | 418 ++ .../index.html" | 503 ++ .../page/2/index.html" | 507 ++ .../page/3/index.html" | 507 ++ .../page/4/index.html" | 467 ++ .../index.html" | 427 ++ .../\346\241\206\346\236\266/index.html" | 503 ++ .../page/2/index.html" | 431 ++ .../index.html" | 503 ++ .../page/2/index.html" | 422 ++ .../\347\256\227\346\263\225/index.html" | 427 ++ .../index.html" | 493 ++ .../\351\241\271\347\233\256/index.html" | 418 ++ css/common/animated.css | 144 + css/common/basic.css | 692 +++ css/common/code-block/code-block.css | 306 ++ css/common/code-block/code-theme.css | 308 ++ css/common/code-block/highlight.css | 496 ++ css/common/fonts/FiraCode-Bold.woff2 | Bin 0 -> 77696 bytes css/common/fonts/FiraCode-Light.woff2 | Bin 0 -> 72864 bytes css/common/fonts/FiraCode-Regular.woff2 | Bin 0 -> 71844 bytes css/common/fonts/stylesheet.css | 89 + css/common/keep-theme.css | 0 css/common/markdown.css | 159 + css/common/variables.css | 209 + css/layout/archive-content.css | 0 css/layout/article-content.css | 227 + css/layout/category-content.css | 20 + css/layout/category-list.css | 69 + css/layout/home-content.css | 107 + css/layout/page.css | 90 + css/layout/tag-content.css | 14 + css/style.css | 4288 +++++++++++++++++ .../Programming/Language/C/index.html | 1099 +++++ en/2022/09/28/note/README/index.html | 675 +++ .../DataStrucuture_en/index.html | 848 ++++ .../Linked_list_en/index.html | 706 +++ en/2023/05/25/note/Wiki/FTP/index.html | 697 +++ en/2023/05/25/note/Wiki/GDB/index.html | 760 +++ en/2023/05/25/note/Wiki/Obsidian/index.html | 663 +++ en/2023/05/25/note/Wiki/SCP/index.html | 709 +++ .../05/25/note/Wiki/Source List/index.html | 681 +++ en/2023/05/25/note/Wiki/WSL2/index.html | 756 +++ en/2023/05/25/note/Wiki/cpp_config/index.html | 690 +++ en/2023/05/25/note/Wiki/v2raya/index.html | 698 +++ en/about/index.html | 482 ++ en/archives/2022/05/index.html | 516 ++ en/archives/2022/09/index.html | 516 ++ en/archives/2022/index.html | 516 ++ en/archives/2023/05/index.html | 516 ++ en/archives/2023/index.html | 516 ++ en/archives/index.html | 516 ++ en/archives/page/2/index.html | 516 ++ .../Programming/Data-Structure/index.html | 443 ++ en/categories/Programming/Language/index.html | 443 ++ en/categories/Programming/index.html | 460 ++ en/categories/Wiki/index.html | 499 ++ en/categories/index.html | 414 ++ en/css/common/animated.css | 148 + en/css/common/basic.css | 696 +++ en/css/common/code-block/code-block.css | 306 ++ en/css/common/code-block/code-theme.css | 308 ++ en/css/common/code-block/highlight.css | 494 ++ en/css/common/fonts/FiraCode-Bold.woff2 | Bin 0 -> 77696 bytes en/css/common/fonts/FiraCode-Light.woff2 | Bin 0 -> 72864 bytes en/css/common/fonts/FiraCode-Regular.woff2 | Bin 0 -> 71844 bytes en/css/common/fonts/stylesheet.css | 89 + en/css/common/keep-theme.css | 0 en/css/common/markdown.css | 159 + en/css/common/variables.css | 209 + en/css/layout/archive-content.css | 0 en/css/layout/article-content.css | 209 + en/css/layout/category-content.css | 12 + en/css/layout/category-list.css | 57 + en/css/layout/home-content.css | 81 + en/css/layout/page.css | 90 + en/css/layout/tag-content.css | 13 + en/css/style.css | 4198 ++++++++++++++++ en/font/css/brands.min.css | 6 + en/font/css/fontawesome.min.css | 6 + en/font/css/regular.min.css | 23 + en/font/css/solid.min.css | 23 + en/font/webfonts/fa-brands-400.ttf | Bin 0 -> 186112 bytes en/font/webfonts/fa-brands-400.woff2 | Bin 0 -> 107460 bytes en/font/webfonts/fa-regular-400.ttf | Bin 0 -> 62048 bytes en/font/webfonts/fa-regular-400.woff2 | Bin 0 -> 25096 bytes en/font/webfonts/fa-solid-900.ttf | Bin 0 -> 397728 bytes en/font/webfonts/fa-solid-900.woff2 | Bin 0 -> 150472 bytes en/font/webfonts/fa-v4compatibility.ttf | Bin 0 -> 10136 bytes en/font/webfonts/fa-v4compatibility.woff2 | Bin 0 -> 4584 bytes en/images/avatar.png | Bin 0 -> 123306 bytes en/images/avatat.png | 0 en/images/bg.jpg | Bin 0 -> 125091 bytes en/images/bg.svg | 128 + en/images/bg_dark.jpg | Bin 0 -> 154901 bytes en/images/bg_dark.svg | 132 + en/images/deploy-provider/aliyun.png | Bin 0 -> 3279 bytes en/images/deploy-provider/gitee.png | Bin 0 -> 1799 bytes en/images/deploy-provider/github.png | Bin 0 -> 1786 bytes en/images/deploy-provider/netlify.png | Bin 0 -> 3751 bytes en/images/deploy-provider/tencent_cloud.png | Bin 0 -> 2422 bytes en/images/deploy-provider/upyun.png | Bin 0 -> 2771 bytes en/images/deploy-provider/vercel.png | Bin 0 -> 1645 bytes en/images/logo.svg | 103 + en/index.html | 1163 +++++ en/js/back2top.js | 52 + en/js/code-block.js | 114 + en/js/dark-light-toggle.js | 66 + en/js/header-shrink.js | 50 + en/js/lazyload.js | 42 + en/js/libs/anime.min.js | 8 + en/js/libs/pjax.min.js | 1 + en/js/local-search.js | 299 ++ en/js/main.js | 74 + en/js/post-helper.js | 202 + en/js/toc.js | 114 + en/js/utils.js | 459 ++ en/links/index.html | 476 ++ en/page/2/index.html | 514 ++ en/search.json | 1 + en/tags/C/index.html | 443 ++ en/tags/CMake/index.html | 443 ++ en/tags/CPP/index.html | 450 ++ en/tags/Clangd/index.html | 443 ++ en/tags/Data/index.html | 443 ++ en/tags/Debug/index.html | 443 ++ en/tags/Linux/index.html | 471 ++ en/tags/Obsidian/index.html | 443 ++ en/tags/Protocol/index.html | 443 ++ en/tags/SCP/index.html | 443 ++ en/tags/SSH/index.html | 443 ++ en/tags/Source/index.html | 443 ++ en/tags/Termux/index.html | 443 ++ en/tags/VPN/index.html | 443 ++ en/tags/WSL2/index.html | 443 ++ en/tags/Windows/index.html | 443 ++ en/tags/c/index.html | 443 ++ en/tags/index.html | 413 ++ en/tags/x11-forward/index.html | 443 ++ en/tags/xpra/index.html | 443 ++ font/css/brands.min.css | 6 + font/css/fontawesome.min.css | 6 + font/css/regular.min.css | 23 + font/css/solid.min.css | 23 + font/webfonts/fa-brands-400.ttf | Bin 0 -> 186112 bytes font/webfonts/fa-brands-400.woff2 | Bin 0 -> 107460 bytes font/webfonts/fa-regular-400.ttf | Bin 0 -> 62048 bytes font/webfonts/fa-regular-400.woff2 | Bin 0 -> 25096 bytes font/webfonts/fa-solid-900.ttf | Bin 0 -> 397728 bytes font/webfonts/fa-solid-900.woff2 | Bin 0 -> 150472 bytes font/webfonts/fa-v4compatibility.ttf | Bin 0 -> 10136 bytes font/webfonts/fa-v4compatibility.woff2 | Bin 0 -> 4584 bytes images/avatar.png | Bin 0 -> 123306 bytes images/avatat.png | 0 images/bg.jpg | Bin 0 -> 125091 bytes images/bg.svg | 128 + images/bg_dark.jpg | Bin 0 -> 154901 bytes images/bg_dark.svg | 132 + images/deploy-provider/aliyun.png | Bin 0 -> 3279 bytes images/deploy-provider/gitee.png | Bin 0 -> 1799 bytes images/deploy-provider/github.png | Bin 0 -> 1786 bytes images/deploy-provider/netlify.png | Bin 0 -> 3751 bytes images/deploy-provider/tencent_cloud.png | Bin 0 -> 2422 bytes images/deploy-provider/upyun.png | Bin 0 -> 2771 bytes images/deploy-provider/vercel.png | Bin 0 -> 1645 bytes images/logo.svg | 103 + index.html | 1179 +++++ js/back2top.js | 52 + js/code-block.js | 114 + js/dark-light-toggle.js | 66 + js/header-shrink.js | 50 + js/lazyload.js | 42 + js/libs/anime.min.js | 8 + js/libs/pjax.min.js | 1 + js/local-search.js | 299 ++ js/main.js | 76 + js/post-helper.js | 205 + js/toc.js | 114 + js/utils.js | 461 ++ links/index.html | 451 ++ page/2/index.html | 1108 +++++ page/3/index.html | 1150 +++++ page/4/index.html | 1107 +++++ page/5/index.html | 1104 +++++ page/6/index.html | 1087 +++++ page/7/index.html | 1060 ++++ page/8/index.html | 841 ++++ search.json | 1 + tags/Algorithm/index.html | 418 ++ tags/Android/index.html | 448 ++ tags/Archlinux/index.html | 418 ++ tags/C/index.html | 418 ++ tags/CMake/index.html | 436 ++ tags/CPP/index.html | 503 ++ tags/CPP/page/2/index.html | 507 ++ tags/CPP/page/3/index.html | 422 ++ tags/Clangd/index.html | 454 ++ tags/Computer/index.html | 490 ++ tags/Data-Structure/index.html | 418 ++ tags/Data-structure/index.html | 418 ++ tags/Database/index.html | 418 ++ tags/Debug/index.html | 418 ++ tags/Font/index.html | 418 ++ tags/Git/index.html | 418 ++ tags/Graphic/index.html | 499 ++ tags/Hexo-keep-theme/index.html | 427 ++ tags/Hexo/index.html | 436 ++ tags/IDE/index.html | 427 ++ tags/Java/index.html | 418 ++ tags/Javascript/index.html | 418 ++ tags/LLDB/index.html | 418 ++ tags/Linux/index.html | 503 ++ tags/Linux/page/2/index.html | 507 ++ tags/Linux/page/3/index.html | 488 ++ tags/Markdown/index.html | 418 ++ tags/Mobile-phone/index.html | 439 ++ tags/MySQL/index.html | 418 ++ tags/Neovim/index.html | 418 ++ tags/Network/index.html | 418 ++ tags/Nginx/index.html | 418 ++ tags/OBS/index.html | 418 ++ tags/OpenGL/index.html | 472 ++ tags/Picgo/index.html | 418 ++ tags/Programming/index.html | 515 ++ tags/Programming/page/2/index.html | 431 ++ tags/Protocol/index.html | 457 ++ tags/Proxy/index.html | 418 ++ tags/Qt/index.html | 427 ++ tags/ROM/index.html | 418 ++ tags/RTMP/index.html | 418 ++ tags/SCP/index.html | 418 ++ tags/SSH/index.html | 418 ++ tags/SSL/index.html | 418 ++ tags/Samba/index.html | 418 ++ tags/Server/index.html | 418 ++ tags/Shared-mouse/index.html | 418 ++ tags/Source-List/index.html | 418 ++ tags/Source/index.html | 418 ++ tags/System/index.html | 418 ++ tags/Termux/index.html | 493 ++ tags/Thread/index.html | 418 ++ tags/Typescript/index.html | 418 ++ tags/Typora/index.html | 418 ++ tags/UEFI/index.html | 418 ++ tags/VPN/index.html | 418 ++ tags/VSCode/index.html | 418 ++ tags/VScode/index.html | 418 ++ tags/Vim/index.html | 445 ++ tags/Visual-Studio/index.html | 418 ++ tags/Vue/index.html | 418 ++ tags/WSL2/index.html | 418 ++ tags/Waydroid/index.html | 418 ++ tags/Wayland/index.html | 418 ++ tags/Web/index.html | 418 ++ tags/Win32/index.html | 436 ++ tags/Windows-10/index.html | 418 ++ tags/Windows-11/index.html | 418 ++ tags/Windows/index.html | 457 ++ tags/c/index.html | 418 ++ tags/cpp/index.html | 475 ++ tags/index.html | 385 ++ tags/liveCD/index.html | 418 ++ tags/root/index.html | 418 ++ tags/x11-forward/index.html | 418 ++ tags/xmake/index.html | 418 ++ tags/xpra/index.html | 418 ++ "tags/\345\206\231\344\275\234/index.html" | 418 ++ "tags/\345\260\217\350\257\264/index.html" | 457 ++ "tags/\346\204\237\347\237\245/index.html" | 418 ++ .../index.html" | 418 ++ "tags/\346\221\230\346\212\204/index.html" | 439 ++ "tags/\346\225\243\346\226\207/index.html" | 457 ++ "tags/\346\234\250\345\277\203/index.html" | 418 ++ .../index.html" | 418 ++ "tags/\347\220\206\347\237\245/index.html" | 418 ++ "tags/\347\254\224\350\256\260/index.html" | 427 ++ .../index.html" | 418 ++ "tags/\350\257\273\344\271\246/index.html" | 457 ++ 410 files changed, 207337 insertions(+) create mode 100644 "2020/02/16/note/Literature/\345\260\217\350\257\264/\350\222\234\350\213\224\345\204\277/index.html" create mode 100644 "2020/04/25/note/Literature/\345\260\217\350\257\264/\347\256\241/index.html" create mode 100644 "2020/04/25/note/Literature/\346\225\243\346\226\207/\345\233\236\344\271\241/index.html" create mode 100644 "2020/04/29/note/Literature/\346\213\276\347\276\275/\346\213\276\347\276\2752020/index.html" create mode 100644 "2020/05/10/note/Literature/\345\260\217\350\257\264/\345\200\237\344\270\252\347\201\253/index.html" create mode 100644 "2020/10/23/note/Literature/\346\225\243\346\226\207/\347\213\255\351\232\231/index.html" create mode 100644 2022/01/04/note/Linux/Termux/index.html create mode 100644 "2022/01/29/note/Literature/\345\260\217\350\257\264/\351\200\203\347\246\273\350\256\241\345\210\222/index.html" create mode 100644 "2022/03/30/note/Literature/\346\225\243\346\226\207/\347\216\211\346\270\212\346\275\255\346\270\270\350\256\260/index.html" create mode 100644 2022/05/25/note/Linux/Tools/index.html create mode 100644 2022/05/25/note/Programming/Language/C/index.html create mode 100644 2022/05/25/note/Programming/Language/Java/index.html create mode 100644 2022/05/25/note/Programming/Language/cpp-1/index.html create mode 100644 2022/05/25/note/Programming/Language/cpp-2/index.html create mode 100644 2022/05/25/note/Programming/Language/cpp-3/index.html create mode 100644 2022/05/25/note/Programming/Language/cpp-4/index.html create mode 100644 "2022/06/15/note/Literature/\346\225\243\346\226\207/\350\260\210\345\206\231\344\275\234/index.html" create mode 100644 2022/11/20/note/Linux/Samba/index.html create mode 100644 2022/11/21/note/Experience/Samsung/index.html create mode 100644 "2023/05/01/note/Literature/\351\230\205\350\257\273/\343\200\212\346\210\221\344\270\216\345\234\260\345\235\233\343\200\213\350\257\273\344\271\246\347\254\224\350\256\260/index.html" create mode 100644 2023/05/25/note/Algorithm/Algorithm/index.html create mode 100644 2023/05/25/note/Algorithm/DataStrucuture/index.html create mode 100644 2023/05/25/note/Algorithm/linked_list/index.html create mode 100644 2023/05/25/note/Computer/network/index.html create mode 100644 2023/05/25/note/Computer/thread/index.html create mode 100644 2023/05/25/note/Framework/Qt/index.html create mode 100644 2023/05/25/note/Hexo/Hexo/index.html create mode 100644 2023/05/25/note/Linux/LinuxNote/index.html create mode 100644 2023/05/25/note/Linux/NFS/index.html create mode 100644 2023/05/25/note/Linux/Neovim/index.html create mode 100644 2023/05/25/note/Linux/Server/SSL/index.html create mode 100644 2023/05/25/note/Linux/Server/code_server/index.html create mode 100644 2023/05/25/note/Linux/Server_install_archlinux/index.html create mode 100644 2023/05/25/note/Linux/Source_List/index.html create mode 100644 2023/05/25/note/Linux/WSL2/index.html create mode 100644 2023/05/25/note/Linux/shell_command/FTP/index.html create mode 100644 2023/05/25/note/Linux/shell_command/SCP/index.html create mode 100644 2023/05/25/note/Linux/v2raya/index.html create mode 100644 2023/05/25/note/Linux/xpra/index.html create mode 100644 2023/05/25/note/Programming/Projects/projectmanager/index.html create mode 100644 2023/05/25/note/Programming/evn/GDB/index.html create mode 100644 2023/05/25/note/Programming/evn/Git/index.html create mode 100644 2023/05/25/note/Programming/evn/cpp_config/index.html create mode 100644 2023/05/25/note/Windows/Windows10/index.html create mode 100644 2023/06/01/note/Hexo/Hexo-keep/index.html create mode 100644 2023/06/04/note/Hexo/Hexo_hitokoto/index.html create mode 100644 2023/06/07/note/Experience/share_input_on_win_and_android/index.html create mode 100644 2023/06/09/note/Linux/vim/index.html create mode 100644 2023/06/09/note/Programming/evn/OpenGL-env/index.html create mode 100644 2023/06/09/note/Programming/evn/vs-beautify/index.html create mode 100644 "2023/06/11/note/Literature/\351\230\205\350\257\273/\343\200\212\346\204\237\347\237\245\357\274\214\347\220\206\347\237\245\357\274\214\350\207\252\346\210\221\350\256\244\347\237\245\343\200\213\350\257\273\344\271\246\347\254\224\350\256\260/index.html" create mode 100644 2023/06/12/note/Framework/OpenGL/opengl-intro/index.html create mode 100644 2023/06/12/note/Programming/evn/coc-nvim-inlay-hint/index.html create mode 100644 2023/06/13/note/Programming/evn/vscode-lldb-extension/index.html create mode 100644 2023/06/20/note/Programming/tools/cmake-win/index.html create mode 100644 2023/06/23/note/Programming/tools/xmake/index.html create mode 100644 2023/06/29/note/Framework/OpenGL/Win32-OpenGL/index.html create mode 100644 2023/06/29/note/Framework/OpenGL/Win32andOpenGL/index.html create mode 100644 2023/07/01/note/Framework/OpenGL/opengl-basic/index.html create mode 100644 2023/07/03/note/Experience/unicode-error/index.html create mode 100644 2023/07/04/note/Experience/waydroid/index.html create mode 100644 2023/07/05/note/Hexo/picgo/index.html create mode 100644 2023/07/11/note/Programming/Language/javascript/index.html create mode 100644 2023/07/14/note/Framework/OpenGL/ogre_compile/index.html create mode 100644 2023/07/15/note/Programming/tools/mysql_install/index.html create mode 100644 2023/07/18/note/Framework/vue3/index.html create mode 100644 2023/07/19/note/Algorithm/BinaryTree/index.html create mode 100644 2023/07/24/note/Framework/OpenGL/opengl_advance/index.html create mode 100644 2023/07/30/note/Experience/rtmp/index.html create mode 100644 2023/08/10/note/Framework/OpenGL/opengl-wasm/index.html create mode 100644 2023/08/18/note/Experience/livecd-on-disk/index.html create mode 100644 2023/08/23/note/Framework/OpenGL/opengl_shadow/index.html create mode 100644 2023/09/14/note/Programming/evn/clang-format/index.html create mode 100644 "2023/10/07/note/Literature/\346\213\276\347\276\275/\346\213\276\347\276\2752023/index.html" create mode 100644 2023/10/20/note/Experience/qt-questions/index.html create mode 100644 2023/11/17/note/Framework/OpenGL/opengl-macos/index.html create mode 100644 2023/11/29/note/Programming/Language/cpp_lib/index.html create mode 100644 about/index.html create mode 100644 archives/2020/02/index.html create mode 100644 archives/2020/04/index.html create mode 100644 archives/2020/05/index.html create mode 100644 archives/2020/10/index.html create mode 100644 archives/2020/index.html create mode 100644 archives/2022/01/index.html create mode 100644 archives/2022/03/index.html create mode 100644 archives/2022/05/index.html create mode 100644 archives/2022/06/index.html create mode 100644 archives/2022/11/index.html create mode 100644 archives/2022/index.html create mode 100644 archives/2022/page/2/index.html create mode 100644 archives/2023/05/index.html create mode 100644 archives/2023/05/page/2/index.html create mode 100644 archives/2023/05/page/3/index.html create mode 100644 archives/2023/06/index.html create mode 100644 archives/2023/06/page/2/index.html create mode 100644 archives/2023/07/index.html create mode 100644 archives/2023/07/page/2/index.html create mode 100644 archives/2023/08/index.html create mode 100644 archives/2023/09/index.html create mode 100644 archives/2023/10/index.html create mode 100644 archives/2023/11/index.html create mode 100644 archives/2023/index.html create mode 100644 archives/2023/page/2/index.html create mode 100644 archives/2023/page/3/index.html create mode 100644 archives/2023/page/4/index.html create mode 100644 archives/2023/page/5/index.html create mode 100644 archives/2023/page/6/index.html create mode 100644 archives/index.html create mode 100644 archives/page/2/index.html create mode 100644 archives/page/3/index.html create mode 100644 archives/page/4/index.html create mode 100644 archives/page/5/index.html create mode 100644 archives/page/6/index.html create mode 100644 archives/page/7/index.html create mode 100644 archives/page/8/index.html create mode 100644 categories/index.html create mode 100644 "categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/index.html" create mode 100644 "categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/page/2/index.html" create mode 100644 "categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/\345\260\217\350\257\264/index.html" create mode 100644 "categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/\346\213\276\347\276\275/index.html" create mode 100644 "categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/\346\225\243\346\226\207/index.html" create mode 100644 "categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/\351\230\205\350\257\273/index.html" create mode 100644 "categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Android/index.html" create mode 100644 "categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Code-Editor/index.html" create mode 100644 "categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Hexo-\345\215\232\345\256\242\346\220\255\345\273\272/index.html" create mode 100644 "categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Linux/index.html" create mode 100644 "categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Linux/page/2/index.html" create mode 100644 "categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Windows/index.html" create mode 100644 "categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/cpp/index.html" create mode 100644 "categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/index.html" create mode 100644 "categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/page/2/index.html" create mode 100644 "categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/page/3/index.html" create mode 100644 "categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/\350\256\241\347\256\227\346\234\272\346\212\200\346\234\257/index.html" create mode 100644 "categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/index.html" create mode 100644 "categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/page/2/index.html" create mode 100644 "categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/page/3/index.html" create mode 100644 "categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/page/4/index.html" create mode 100644 "categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\346\225\260\346\215\256\347\273\223\346\236\204/index.html" create mode 100644 "categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\346\241\206\346\236\266/index.html" create mode 100644 "categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\346\241\206\346\236\266/page/2/index.html" create mode 100644 "categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\347\216\257\345\242\203\346\220\255\345\273\272\344\270\216\345\267\245\345\205\267\344\275\277\347\224\250/index.html" create mode 100644 "categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\347\216\257\345\242\203\346\220\255\345\273\272\344\270\216\345\267\245\345\205\267\344\275\277\347\224\250/page/2/index.html" create mode 100644 "categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\347\256\227\346\263\225/index.html" create mode 100644 "categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\347\274\226\347\250\213\350\257\255\350\250\200/index.html" create mode 100644 "categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\351\241\271\347\233\256/index.html" create mode 100644 css/common/animated.css create mode 100644 css/common/basic.css create mode 100644 css/common/code-block/code-block.css create mode 100644 css/common/code-block/code-theme.css create mode 100644 css/common/code-block/highlight.css create mode 100644 css/common/fonts/FiraCode-Bold.woff2 create mode 100644 css/common/fonts/FiraCode-Light.woff2 create mode 100644 css/common/fonts/FiraCode-Regular.woff2 create mode 100644 css/common/fonts/stylesheet.css create mode 100644 css/common/keep-theme.css create mode 100644 css/common/markdown.css create mode 100644 css/common/variables.css create mode 100644 css/layout/archive-content.css create mode 100644 css/layout/article-content.css create mode 100644 css/layout/category-content.css create mode 100644 css/layout/category-list.css create mode 100644 css/layout/home-content.css create mode 100644 css/layout/page.css create mode 100644 css/layout/tag-content.css create mode 100644 css/style.css create mode 100644 en/2022/05/25/note/Computer/Programming/Language/C/index.html create mode 100644 en/2022/09/28/note/README/index.html create mode 100644 en/2023/05/25/note/Computer/Programming/Algorithm and Data structure/DataStrucuture_en/index.html create mode 100644 en/2023/05/25/note/Computer/Programming/Algorithm and Data structure/Linked_list_en/index.html create mode 100644 en/2023/05/25/note/Wiki/FTP/index.html create mode 100644 en/2023/05/25/note/Wiki/GDB/index.html create mode 100644 en/2023/05/25/note/Wiki/Obsidian/index.html create mode 100644 en/2023/05/25/note/Wiki/SCP/index.html create mode 100644 en/2023/05/25/note/Wiki/Source List/index.html create mode 100644 en/2023/05/25/note/Wiki/WSL2/index.html create mode 100644 en/2023/05/25/note/Wiki/cpp_config/index.html create mode 100644 en/2023/05/25/note/Wiki/v2raya/index.html create mode 100644 en/about/index.html create mode 100644 en/archives/2022/05/index.html create mode 100644 en/archives/2022/09/index.html create mode 100644 en/archives/2022/index.html create mode 100644 en/archives/2023/05/index.html create mode 100644 en/archives/2023/index.html create mode 100644 en/archives/index.html create mode 100644 en/archives/page/2/index.html create mode 100644 en/categories/Programming/Data-Structure/index.html create mode 100644 en/categories/Programming/Language/index.html create mode 100644 en/categories/Programming/index.html create mode 100644 en/categories/Wiki/index.html create mode 100644 en/categories/index.html create mode 100644 en/css/common/animated.css create mode 100644 en/css/common/basic.css create mode 100644 en/css/common/code-block/code-block.css create mode 100644 en/css/common/code-block/code-theme.css create mode 100644 en/css/common/code-block/highlight.css create mode 100644 en/css/common/fonts/FiraCode-Bold.woff2 create mode 100644 en/css/common/fonts/FiraCode-Light.woff2 create mode 100644 en/css/common/fonts/FiraCode-Regular.woff2 create mode 100644 en/css/common/fonts/stylesheet.css create mode 100644 en/css/common/keep-theme.css create mode 100644 en/css/common/markdown.css create mode 100644 en/css/common/variables.css create mode 100644 en/css/layout/archive-content.css create mode 100644 en/css/layout/article-content.css create mode 100644 en/css/layout/category-content.css create mode 100644 en/css/layout/category-list.css create mode 100644 en/css/layout/home-content.css create mode 100644 en/css/layout/page.css create mode 100644 en/css/layout/tag-content.css create mode 100644 en/css/style.css create mode 100644 en/font/css/brands.min.css create mode 100644 en/font/css/fontawesome.min.css create mode 100644 en/font/css/regular.min.css create mode 100644 en/font/css/solid.min.css create mode 100644 en/font/webfonts/fa-brands-400.ttf create mode 100644 en/font/webfonts/fa-brands-400.woff2 create mode 100644 en/font/webfonts/fa-regular-400.ttf create mode 100644 en/font/webfonts/fa-regular-400.woff2 create mode 100644 en/font/webfonts/fa-solid-900.ttf create mode 100644 en/font/webfonts/fa-solid-900.woff2 create mode 100644 en/font/webfonts/fa-v4compatibility.ttf create mode 100644 en/font/webfonts/fa-v4compatibility.woff2 create mode 100644 en/images/avatar.png create mode 100644 en/images/avatat.png create mode 100644 en/images/bg.jpg create mode 100644 en/images/bg.svg create mode 100644 en/images/bg_dark.jpg create mode 100644 en/images/bg_dark.svg create mode 100644 en/images/deploy-provider/aliyun.png create mode 100644 en/images/deploy-provider/gitee.png create mode 100644 en/images/deploy-provider/github.png create mode 100644 en/images/deploy-provider/netlify.png create mode 100644 en/images/deploy-provider/tencent_cloud.png create mode 100644 en/images/deploy-provider/upyun.png create mode 100644 en/images/deploy-provider/vercel.png create mode 100644 en/images/logo.svg create mode 100644 en/index.html create mode 100644 en/js/back2top.js create mode 100644 en/js/code-block.js create mode 100644 en/js/dark-light-toggle.js create mode 100644 en/js/header-shrink.js create mode 100644 en/js/lazyload.js create mode 100644 en/js/libs/anime.min.js create mode 100644 en/js/libs/pjax.min.js create mode 100644 en/js/local-search.js create mode 100644 en/js/main.js create mode 100644 en/js/post-helper.js create mode 100644 en/js/toc.js create mode 100644 en/js/utils.js create mode 100644 en/links/index.html create mode 100644 en/page/2/index.html create mode 100644 en/search.json create mode 100644 en/tags/C/index.html create mode 100644 en/tags/CMake/index.html create mode 100644 en/tags/CPP/index.html create mode 100644 en/tags/Clangd/index.html create mode 100644 en/tags/Data/index.html create mode 100644 en/tags/Debug/index.html create mode 100644 en/tags/Linux/index.html create mode 100644 en/tags/Obsidian/index.html create mode 100644 en/tags/Protocol/index.html create mode 100644 en/tags/SCP/index.html create mode 100644 en/tags/SSH/index.html create mode 100644 en/tags/Source/index.html create mode 100644 en/tags/Termux/index.html create mode 100644 en/tags/VPN/index.html create mode 100644 en/tags/WSL2/index.html create mode 100644 en/tags/Windows/index.html create mode 100644 en/tags/c/index.html create mode 100644 en/tags/index.html create mode 100644 en/tags/x11-forward/index.html create mode 100644 en/tags/xpra/index.html create mode 100644 font/css/brands.min.css create mode 100644 font/css/fontawesome.min.css create mode 100644 font/css/regular.min.css create mode 100644 font/css/solid.min.css create mode 100644 font/webfonts/fa-brands-400.ttf create mode 100644 font/webfonts/fa-brands-400.woff2 create mode 100644 font/webfonts/fa-regular-400.ttf create mode 100644 font/webfonts/fa-regular-400.woff2 create mode 100644 font/webfonts/fa-solid-900.ttf create mode 100644 font/webfonts/fa-solid-900.woff2 create mode 100644 font/webfonts/fa-v4compatibility.ttf create mode 100644 font/webfonts/fa-v4compatibility.woff2 create mode 100644 images/avatar.png create mode 100644 images/avatat.png create mode 100644 images/bg.jpg create mode 100644 images/bg.svg create mode 100644 images/bg_dark.jpg create mode 100644 images/bg_dark.svg create mode 100644 images/deploy-provider/aliyun.png create mode 100644 images/deploy-provider/gitee.png create mode 100644 images/deploy-provider/github.png create mode 100644 images/deploy-provider/netlify.png create mode 100644 images/deploy-provider/tencent_cloud.png create mode 100644 images/deploy-provider/upyun.png create mode 100644 images/deploy-provider/vercel.png create mode 100644 images/logo.svg create mode 100644 index.html create mode 100644 js/back2top.js create mode 100644 js/code-block.js create mode 100644 js/dark-light-toggle.js create mode 100644 js/header-shrink.js create mode 100644 js/lazyload.js create mode 100644 js/libs/anime.min.js create mode 100644 js/libs/pjax.min.js create mode 100644 js/local-search.js create mode 100644 js/main.js create mode 100644 js/post-helper.js create mode 100644 js/toc.js create mode 100644 js/utils.js create mode 100644 links/index.html create mode 100644 page/2/index.html create mode 100644 page/3/index.html create mode 100644 page/4/index.html create mode 100644 page/5/index.html create mode 100644 page/6/index.html create mode 100644 page/7/index.html create mode 100644 page/8/index.html create mode 100644 search.json create mode 100644 tags/Algorithm/index.html create mode 100644 tags/Android/index.html create mode 100644 tags/Archlinux/index.html create mode 100644 tags/C/index.html create mode 100644 tags/CMake/index.html create mode 100644 tags/CPP/index.html create mode 100644 tags/CPP/page/2/index.html create mode 100644 tags/CPP/page/3/index.html create mode 100644 tags/Clangd/index.html create mode 100644 tags/Computer/index.html create mode 100644 tags/Data-Structure/index.html create mode 100644 tags/Data-structure/index.html create mode 100644 tags/Database/index.html create mode 100644 tags/Debug/index.html create mode 100644 tags/Font/index.html create mode 100644 tags/Git/index.html create mode 100644 tags/Graphic/index.html create mode 100644 tags/Hexo-keep-theme/index.html create mode 100644 tags/Hexo/index.html create mode 100644 tags/IDE/index.html create mode 100644 tags/Java/index.html create mode 100644 tags/Javascript/index.html create mode 100644 tags/LLDB/index.html create mode 100644 tags/Linux/index.html create mode 100644 tags/Linux/page/2/index.html create mode 100644 tags/Linux/page/3/index.html create mode 100644 tags/Markdown/index.html create mode 100644 tags/Mobile-phone/index.html create mode 100644 tags/MySQL/index.html create mode 100644 tags/Neovim/index.html create mode 100644 tags/Network/index.html create mode 100644 tags/Nginx/index.html create mode 100644 tags/OBS/index.html create mode 100644 tags/OpenGL/index.html create mode 100644 tags/Picgo/index.html create mode 100644 tags/Programming/index.html create mode 100644 tags/Programming/page/2/index.html create mode 100644 tags/Protocol/index.html create mode 100644 tags/Proxy/index.html create mode 100644 tags/Qt/index.html create mode 100644 tags/ROM/index.html create mode 100644 tags/RTMP/index.html create mode 100644 tags/SCP/index.html create mode 100644 tags/SSH/index.html create mode 100644 tags/SSL/index.html create mode 100644 tags/Samba/index.html create mode 100644 tags/Server/index.html create mode 100644 tags/Shared-mouse/index.html create mode 100644 tags/Source-List/index.html create mode 100644 tags/Source/index.html create mode 100644 tags/System/index.html create mode 100644 tags/Termux/index.html create mode 100644 tags/Thread/index.html create mode 100644 tags/Typescript/index.html create mode 100644 tags/Typora/index.html create mode 100644 tags/UEFI/index.html create mode 100644 tags/VPN/index.html create mode 100644 tags/VSCode/index.html create mode 100644 tags/VScode/index.html create mode 100644 tags/Vim/index.html create mode 100644 tags/Visual-Studio/index.html create mode 100644 tags/Vue/index.html create mode 100644 tags/WSL2/index.html create mode 100644 tags/Waydroid/index.html create mode 100644 tags/Wayland/index.html create mode 100644 tags/Web/index.html create mode 100644 tags/Win32/index.html create mode 100644 tags/Windows-10/index.html create mode 100644 tags/Windows-11/index.html create mode 100644 tags/Windows/index.html create mode 100644 tags/c/index.html create mode 100644 tags/cpp/index.html create mode 100644 tags/index.html create mode 100644 tags/liveCD/index.html create mode 100644 tags/root/index.html create mode 100644 tags/x11-forward/index.html create mode 100644 tags/xmake/index.html create mode 100644 tags/xpra/index.html create mode 100644 "tags/\345\206\231\344\275\234/index.html" create mode 100644 "tags/\345\260\217\350\257\264/index.html" create mode 100644 "tags/\346\204\237\347\237\245/index.html" create mode 100644 "tags/\346\210\221\344\270\216\345\234\260\345\235\233/index.html" create mode 100644 "tags/\346\221\230\346\212\204/index.html" create mode 100644 "tags/\346\225\243\346\226\207/index.html" create mode 100644 "tags/\346\234\250\345\277\203/index.html" create mode 100644 "tags/\347\216\211\346\270\212\346\275\255/index.html" create mode 100644 "tags/\347\220\206\347\237\245/index.html" create mode 100644 "tags/\347\254\224\350\256\260/index.html" create mode 100644 "tags/\350\207\252\346\210\221\350\256\244\347\237\245/index.html" create mode 100644 "tags/\350\257\273\344\271\246/index.html" diff --git "a/2020/02/16/note/Literature/\345\260\217\350\257\264/\350\222\234\350\213\224\345\204\277/index.html" "b/2020/02/16/note/Literature/\345\260\217\350\257\264/\350\222\234\350\213\224\345\204\277/index.html" new file mode 100644 index 000000000..868b7414c --- /dev/null +++ "b/2020/02/16/note/Literature/\345\260\217\350\257\264/\350\222\234\350\213\224\345\204\277/index.html" @@ -0,0 +1,692 @@ + + + + + + + + + + + + 蒜苔儿 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 蒜苔儿 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

看到院里参差不齐的菜苗,二妮突然想吃蒜苔儿了。

+ + +

但二妮知道自己吃不了,因为二妮自己不会腌蒜苔儿。二妮只喜欢吃腌的蒜苔儿,而且最好是娘腌的蒜苔儿。淡青色,抓一把,切成节儿,往坛子里一放,添上醋和盐。等腌好了,醋就在蒜苔儿上蒙了一层陈旧的涅色,而蒜苔儿也把醋香染得辣辣的。一咬,生脆,满口的清酸。

+

二妮擦了擦口水。吃蒜苔儿得等娘回来腌,但二妮不知道娘什么时候回来。

+

数起来,快半个月了——是爹说的,二妮不知道什么半的月的,只是感觉已经很久没见到娘了。娘走时,是一个夜里,二妮正睡着,被爹娘的动静扰醒了。但二妮只是迷迷糊糊,似乎看到爹娘起床,穿上衣服,悄悄地出了门。二妮知道娘还怀着孕,扛着大肚子,会到哪去呢?二妮想不明白,反正第二天家里就只剩父亲和二妮自己了。

+

二妮上小学,三年级。学校在村头,一处破楼,红砖围墙耷拉着,荒草爬满院子。二妮跟伙伴们放学路上玩耍,时常看到瓦房后墙上,白蓝相间的漆刷着:“坚决打击躲生偷生,躲过初一躲不过十五”。别的孩子也许不清楚,会以为是过年时的余兴,但二妮隐隐有些明白。

+

那日,天蒙蒙亮,家里门突然咚咚咚的响起来。二妮她爹开了门,还没看清是谁,来人就冲了进来。一下来四个,嚷嚷着,查户口,点人头,要搜全屋。

+

娘不在。他们问二妮她娘在哪,二妮她爹说:“走亲戚去了。”

+

那些人叫嚣着冲进屋里,“走亲戚去了?那好说……”,一眼看中了堂屋里的电视。虽然是黑白的,但整个村里,这样的电视一只手也能数得过来。四人二话不说,抬起电视就走,撂到来时乘的三轮车上。二妮他爹去拦,但对方人多势大,还叫喊着:“这可是国家政策,你再这样,要罚钱哩。”

+

三轮车扬长而去,留下一句话:

+

“走亲戚回来,带着嫂子去领。”

+

二妮他爹只得骂了几句,准备早饭去了。

+

二妮和其他小孩儿玩弹珠,常听到大人们在当街闲聊。

+

“正会儿这世道,越来越好了。搁以前,哪家生哩多,弟兄们多,哪家就兴,横得很。现在谁敢生得多,还罚钱哩。”

+

“可不是嘛?生那么多干嘛,还养不起。”

+

一个端着面条碗,碗里已经没有面条,汤都干在碗上的老妇人,压低声音说:“可别生啦,柱子家的事不知道吗,生了俩,肚里还有一个,人家计划生育的过去先罚钱,又搬走了一个洋车子。”

+

“洋车子搬走了,钱没罚吧?”

+

“咋没罚?罚好几百哩!”

+

“……”

+

二妮弹自己的玻璃珠,去撞击别人的,撞到地上的小洞里,就算赢。赢的可以拿走别人的玻璃珠。以前二妮是高手,常赢得男孩子们都不敢跟她玩,家里积攒了一罐子玻璃珠。但今天二妮怎么也赢不了,不是力道太大,就是方向太偏。二妮心烦意乱,早早回家了。

+

明天开学,二妮到了学校,没有计划生育的标语,眼是清静了,周围尽是同学,老师,教室里有书本,书上有《春天来了》,窗外有树梢,鸟鸣。但二妮想他娘啊,上堂也学不进去,下课也玩不进去。又不知娘现在是好是歹,二妮受不了了。

+

一天,上早自习的路上,二妮趁人不注意,悄悄拐弯儿了。

+

二妮要去找她娘。

+

——但又不知道去哪找。

+

抹黑走着,二妮走到了村东外的田地里。

+

天快亮了,太阳还没影儿,湛蓝的天空宝石般透亮,罩下来,明晃晃地映着天杪的云彩,三月里油菜花正欲绽放,绿田葱郁,波涛翻滚。远处,天际落在小房子上,绿杨,白云,向更远处去了。二妮看到这儿,就想起了院里的菜圃;想起菜圃,就想起了蒜苔儿;想起蒜苔儿,就想起了不知所踪的娘亲。

+

终于,太阳露出微光,金黄色从天边袭来,天地间猛然添了一丝温暖。但二妮悲凄的心情愈加沉重。二妮想,在学校老师教的语文,有小蝌蚪找妈妈的故事,自己岂不就是那个小蝌蚪?二妮想着,田间无垠的小路似乎变成了一条深壑,周围绿色的田地变成汪洋大海,鱼虾水草在空中飘荡,二妮用力摆动着小尾巴,向太阳升起的方向游着。开始二妮在水里不太适应,暗流激湍,二妮奋力抵抗着无形的力,却难以把持住身形,耳畔像炸了炮仗一样闷,天旋地转。二妮不知如何是好,却也丝毫不急。心中对娘亲的思念倒淡了些。偶有大人们去地里薅草,路过碰到二妮。二妮看到他们灵活地游向自家田地,心中惊奇。二妮发现,他们好像看不到自己。二妮大声喊,却发不出声。

+

二妮在水中漂了许久,阳光刺透水面,光影交错,梦幻一样的水下世界让二妮已经忘了此行的目的。渐渐地,二妮游得利索些了。前方忽明忽暗,二妮在朦胧中,看到一个身影。二妮心下一动,会不会是娘亲?全力游向那个身影,二妮想看清那到底是谁。也许娘就在前面等着自己?二妮越想越心动,拨开水浪向前方穿行。

+

近了,人影清晰起来。二妮有些失望,那并不是娘亲,而是一个头发花白的老太太,脸上褐斑遍布,枯粗的皮肤往下坠,穿着一件罩住全身的紫黑色的布衣。这老太太,二妮是认识的,是二妮邻居家,狗蛋的老太儿。平时都在家坐在一个竹椅上,二妮去她家玩的时候,常听她说些含糊不清的话。人老了,牙全没了,说话呜呜不清,耳朵也不灵光,但老人很慈祥,二妮也很喜欢她。

+

“嘻嘻,老太儿,你怎么在这儿啊?”二妮游上前问道。

+

水纹纵横,人影都在晃。老太太看到小丫头,也咧嘴笑了,呜呜道:“我瞅块儿地……”

+

二妮听不太清,也听不太懂,游过去给老太儿轻轻揉了揉肩,像平时一样。老太儿问二妮:“你呢,你这闺女怎么跑漫地里来了,不去念书呀?”

+

二妮道:“我不想念书,我想找我娘,我娘也不知道去哪了,我爹也不跟我说。”

+

老太儿似乎叹了口气,又不真切,历经了近百年的岁月,面孔遍布风霜,什么都看不出来。

+

二妮突然感觉一阵骚动,水开始不安起来,接着,巨大的漩涡声势浩大地逼近,远近的游鱼都被卷进去,飞速旋转着。黑暗处散发的神秘气息让二妮有点儿害怕,转眼看老太儿,老太儿好像还没意识到危险已经来临。莫名的力撕扯着,二妮感到身体不受控制,漩涡吸扯着二妮。老太儿却似乎根本不受影响。二妮终于无法支撑,一片混乱中,二妮抓住了老太儿的布衣。狂风般的漩涡席卷而过,二妮闭上眼睛,死死抓住老太儿的粗布衣袖。

+

不知过了多久,天地间的昏暗褪了下去,二妮感到实实在在的大地,就在自己的身体下面。睁眼,强烈的光线刺得眼镜生疼。适应了好一会儿,才终于可以看清周遭。日头正当,二妮躺在浮尘飞扬的土路上,杨树新叶筛下的阳光像水波一样粼闪,清风拂面而去,尘粒砸得脸颊膈应。二妮看了看手上,发现自己捏着一块紫黑色的残布。

+

回到家中,二妮他爹看到满身泥垢的二妮,劈头盖脸一阵喝骂。

+

“这一上午,你跑哪去了?”

+

面对爹的问话,二妮只得如实道来,“我去找我娘了。”

+

“你去哪找你娘?”二妮他爹语气稍软。

+

“我也不知道,也没找着。你又不跟我说我娘去哪了。”二妮不惧,憋着怨气道。

+

“那你去哪胡跑了,丢了一上午,弄得浑身泥巴,有没有伤着哪?”

+

“没有,我碰见狗蛋他老太儿了。”

+

二妮他爹看了二妮一眼,“胡说啥呢,昨天夜里狗蛋他老太儿已经走了,明儿个准备吃桌。”

+

“走了?”

+

“就是去世了。”

+

二妮知道去世了是什么意思,就是把人放到木箱子里,埋起来,以后就再也见不到了。

+

“我上午还正跟她说话哩……”

+

“傻闺女,你知道啥……走吧,吃饭去,刚腌好的蒜苔儿,你最好吃这个哩。赶紧去洗洗脸,脏得跟猪屁股一样。”

+

二妮应了一声,摸摸裤兜,掏出那一块紫黑色残布,发了一会儿呆。吃饭时,二妮匆匆填食,二妮他爹腌的蒜苔儿,二妮一筷子都没有动。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git "a/2020/04/25/note/Literature/\345\260\217\350\257\264/\347\256\241/index.html" "b/2020/04/25/note/Literature/\345\260\217\350\257\264/\347\256\241/index.html" new file mode 100644 index 000000000..f1d87ccd6 --- /dev/null +++ "b/2020/04/25/note/Literature/\345\260\217\350\257\264/\347\256\241/index.html" @@ -0,0 +1,749 @@ + + + + + + + + + + + + 管 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

下午五点二十分,秋雨总这个时候来。

+

天灰蒙蒙的,抬头看不见雨滴,只觉往下砸。

+

我也总这个时候来。

+

从单位出来,买饭,步行到这,刚好二十分钟。

+

我从来没有看天气预报或未雨绸缪的习惯。每天雨与我一同到来,我也从未撑过伞。在路上淋了些,推开病房的门,一股冷湿气冲到屋里。

+ + +

若是从前,母亲见我这般模样,绝对免不了一阵责怪与怨忧。但是现在,躺在床上,全身插着各种管子的母亲,说话都是奢望。

+

已经管不了那么多了。

+

像民不聊生的乱世,大事临头。

+

因而来时放着雨伞不拿——已经管不了那么多了。

+

总觉得刚才还好好的,那么能干的母亲,怎么就突然倒下了呢?刚才是什么时候?记不清,但一定不远。

+

突然就这样了。

+

早些年看电视,有人家里老人生病了,不能自理。兄弟几个赖着不管,你推我推。等到老人终于离世了,都松了口气,任务完成了似的。转眼,又要忙活——老人留了些东西,老房子,老三轮车。这回没人躲了,反而饿狼般的,争抢。

+

我叹息,怎么会有这等人。

+

妻子则不屑,“事情没到你头上,你当然站着说话不腰疼。就怕到时候,你比他们都抢得厉害!”

+

事情果真到了我的头上……母亲被查出了胃癌。晚期。

+

自入院一来,往日里能独自撑起一个家的健壮的母亲,一下倾塌了。躺在床上,像个婴儿一样蜷缩着,无法进食,无法控制排便,生活的一切都需要人照顾。

+

妻子的话只是玩笑。父亲死的早,我家也就我一个独生子。赡养母亲只能靠我自己。跟领导请假,领导只愿意批我三天。妻子有空闲时间,所以白天有劳妻子照顾,晚上换我来。

+

刺鼻的药味,暖气味,尿腥味在病房里绞成一团。我在令人作呕的气味中迅速吃了晚饭,便让妻子回家休息。

+

病房的门忽然被推开,一个戴眼镜的医生拿着一摞纸,叫了我的名字。

+

我意外,应了一声。

+

医生把我叫了出去。

+

“患者的情况还不太明朗,但下个星期我给她安排了一个手术,如果手术成功,好转的可能性还是很大的。”

+

“手术费多少钱?”我几乎是脱口而出。

+

“四五万吧。”医生连看都没看我一眼,低头整理案上的文件。

+

我又问:“手术成功的话,我母亲还能活多久?”

+

——母亲住院的这几个星期,亲眼目睹,母亲的变化,邻床的哭嚎,我已深知癌症的可怕。

+

他终于把目光移到了我的脸上。

+

我立刻谴责自己说错了话。

+

做这样的医生,想必早已见遍了各式各样患者,家属。他眼中,淡然,鄙视,怜悯。他一定是以为我是那种人——时刻算着老太太什么时候死掉,好省钱,省掉辛苦肮脏的操劳。他一定以为我这么着急地询问,是在盘算性价比。

+

这个性,是性命。

+

怎么会?

+

我想解释,但不知如何开口。

+

大概这样窘迫的样子,更让他确定了自己的判断?

+

我坚定了语气,抢过他的回答道:“带我去办手续吧!”

+

回到病房,妻子还没走。

+

我简述了情况。

+

妻子脸色凝重,“咱们还有存款吗?”

+

我摇摇头。

+

“那还能找谁借呢?”

+

我摇摇头。

+

“那就把那破房子卖了吧!”

+

我终于意识到妻子的语气不太对。我以为妻子愿意与我同舟共济,即使卖掉房子,露宿街头也不在乎。可她的语气,明明是反话。

+

但我又怎么能怪别人呢?

+

这一切不都是因为自己的无能?

+

结婚时我岂没有发誓,要给她一个温暖的家,要做一个好丈夫?

+

年轻时游手好闲,一事无成,现在能在县里林业局当个小科员,已经算谢天谢地了。工作是轻松,但一个月两千多的固定工资连她自己都不够花,何况是我们?是的,她只知道花钱,从没想过自己能不能出去挣点儿。

+

母亲生病的第一周,我们拿出了全部的积蓄,却只够一半的手术费。瞒着母亲东借西借,才勉强凑够。之后每天都要出钱,却没有收入。我们哪来钱给母亲治病呢?

+

她倒提醒我了,老房子可以卖了,先租房子住,说不定能租个离单位很近的,更方便些。

+

这当然是下策。

+

但束手无策的时候,下策也即上策。

+

我不想说话,去楼道抽烟。她却不依不饶,跟了过来。

+

“你说啊?去哪儿弄钱?”

+

我沉默。抽烟。她竟哭起来了。

+

“当初嫁过来的时候,我家里人都不同意,嫌你混,嫌你家落魄。但我就是被你的花言巧语给骗了,说什么有上升空间,过几年就能发达,一定让我过上好日子……”

+

她竟诉起苦来!

+

当时?当时是什么时候?

+

我也想过上好日子,但哪是说过就过的?钱哪是说挣就挣的?这几年我虽没有飞黄腾达,但也是兢兢业业,埋头苦干了几年。钱在她手里根本存不住,我还能做什么?

+

母亲第一次做手术用的钱,其实是我们说好去度假旅游用的。毕竟也该有个孩子了。

+

但如今快要食不果腹,还是省省的好。

+

“嫁到你家这几年,你有什么长进!不仅没让我们过得好,还天天让我在这给老太婆端屎端尿……”

+

她说得愈加起劲。

+

我听得越加愠怒,尤其是她说我没长进。男人最怕的就是内人折自己的面子。

+

“你不想过就不过,我又没逼着你!”

+

不欢而散是必然,但我们年岁都不小,不像年轻人意气用事。钱不是说挣就挣,分也不是说分就分。名声上,谁也受不住。何况在这个节骨眼儿上。

+

没有钱。仅有这点可怜的尊严。

+

只是至此,我们一旦开口交流,几乎立刻就吵起来。在家吵,在路上吵,甚至在病房里也忍不住要拌起嘴来。

+

无非是钱嘛。

+

就是钱呀!

+

还有两天就要手术,医生已经给我宽限,否则我缴上钱也无用。但我缴不上钱,手术一定做不了。难道真到了要倾家荡产的地步?

+

我从不曾像现在一样急得焦头烂额,白天上班,晚上照顾母亲,又要四处赖着脸借钱,时而还要跟妻子拌嘴。

+

我已然精疲力尽。

+

窗外是迷离的小城夜景,秋月银色的光华涌着灰尘落进来,细看,与小时候一模一样。那时我尤喜欢在夏夜躺在院子里的凉席上,母亲摇着蒲扇赶蚊子,我缠着母亲讲故事。那是古老的,深沉的,又是骗小孩儿的野故事,没有出处,不知如何流传,甚至故事中的意象也懵懂,支离破碎,但那曾是我童年最着迷的梦。

+

以至后来的我迷迷糊糊过了二十多年,记忆变得朦胧而遥远,我也始终没忘记这夏夜的故事。

+

现在呢,真去想,倒想不起来了。

+

似乎忘了……

+

果真忘了。

+

忘。

+

我迷糊着睡去了。

+

翌日醒来时,天还未亮。是值班护士把我叫起来的。从病房涌进来几个护士和那个医生。医生让我出去。

+

没有等多久医生就出来了。

+

“你母亲昨夜凌晨一点左右去世了,请节哀……”

+

是因为冷漠,还是因为见惯了死亡,他脸上一点悲伤或惋惜都没有,像个面无表情的石像。

+

我也一样,只是不知所措,还没从睡梦中醒来似的,癔症着回味?

+

我拉住医生,声音很轻,“为什么?不是很有希望好转吗?”

+

医生看了我一眼,怕刺激到我,轻轻地拿开了我的手,“请节哀。”然后逃一般溜走。我这才看见,他终于动容。

+

第二天,戴眼镜的医生才告诉我他的猜测是对的,已用监控确认了的。

+

……

+

是夜,我因为难过,一个人出去散步。公园湖边,寂寥无人,渐黄的树叶在风中无知地摇摆。

+

我明白那个医生为何那样看我,却不明白在凌晨一点的夜,母亲是如何用业已枯萎的手拔下自己身上的管子,而不发出声音的。

+

或许是我睡得太沉了?

+

我终于失声恸哭起来。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git "a/2020/04/25/note/Literature/\346\225\243\346\226\207/\345\233\236\344\271\241/index.html" "b/2020/04/25/note/Literature/\346\225\243\346\226\207/\345\233\236\344\271\241/index.html" new file mode 100644 index 000000000..f9a0ef642 --- /dev/null +++ "b/2020/04/25/note/Literature/\346\225\243\346\226\207/\345\233\236\344\271\241/index.html" @@ -0,0 +1,675 @@ + + + + + + + + + + + + 回乡 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 回乡 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

在异乡栖身即久,渐渐深谙其建筑,花,草,人人人人,突然回乡,反像是出远门,生出这里才是故乡之感。至所属县城,再经十多个村庄,便到我阔别已久的故乡。柏油大道,沿路槐杨参天。车窗微开着,远处麦田深青,初午的阳光在碧浪间泅泳。那亟待见证的远方就在眼前,我出发时忐忑的心情,在吹面而来的柔软的春风中安宁下来。

+ + +

临近那块刻着村址的石碑,村庄已尽然展现,麦田里高低耸立着房屋。到底是农耕文明,这里家家户户离不开那二亩三分地,早起去田里薅草,腰一弯就是一天,时节到了又要打农药,满身刺鼻的药味。此时田里已有两三人影,四轮车的柴油机嗵嗵地响,从水井引出,大腿粗的水管向田里喷射,水花映着阳光,闪耀异常。

+

我是一个人回来。幼时即与故地分别,常年不在,被人撞见,也无人敢认。这种近乎异乡人的身份让我产生一种游赏而非怀故的心情。

+

缓步向里走去。村头一条大路纵亘,两旁皆有沟壑,但没有水。豆蔻良春,青草繁茂,油菜丛中有白色蝴蝶飞舞。要是小时候,与伙伴脱下外套,翻手便能盖住,轻轻地捏出,小心把玩,不敢稍有逾度,蝴蝶经不起这「飞来横祸」。有时也不慎「杀生」,心中懊恼无比,倒不是为了生命的消逝,而是蝴蝶尸体的一团粘稠会弄脏手和衣物。小孩子还不懂得生命之宝贵,甚至衣物的恶臭还排在家中长辈斥责之后。

+

经历一次次革新与变迁,如今即使是纵横小巷,路也大多已是水泥灌注,但免不了尘土飞扬。踩在石子硌脚的路上,心中在奇怪,盛春百草丰茂,这里的青草叶梢总是泛着浅浅的黄色,浑身一股野草的气质,狂野袭人。是无人细心呵护,才致没那么绿,但依然长得欣然蓬然。多年后在别处见到这样的草,不觉脱口而出,这是那里的草,这是最最自然的草。

+

回到家中,庭院一点没变,但感觉陌生,因为我的记忆悄然发生了微妙的变化,无法日日看上几眼巩固其在脑中的印象,我竟忘了种在墙角的仙人掌。仍是一株,但居然已经这么大了,一节接着一节,自成一个林子。不知雨水太满还是久旱未浴,表皮也是透着微微的棕黄,一脸苦相,想必它很久没见过人了,也不在乎外貌,但它庞大的身躯是在告诉我,它其实活得很滋润。就在不知阴晴的阳光雨水的沐浴之下,它独自经历了无数日日夜夜,顽强地生长着。

+

庭院里是水泥浇筑的地板,受热不均就裂开缝隙,蚂蚁乘机而入,建起琳琅巢穴。那时常常喊来邻家玩伴,两人蹲在墙边,看蚂蚁协同运食。或是粮仓丰足,或是其他缘故,偶尔会寻不到蚂蚁的踪迹。这时我则拍死一只苍蝇,放在洞口,不一会便引出大群蚁工前来搬运。于儿时的我们,乐已无穷矣。

+

记得南边田野里有一个湖,叫南坑,长宽约莫都有五六十米,深有两人高,至今仍不知如果它再大点人们会不会就称他为南湖了。与田地路沿的灌溉渠相通,因而架起两座小桥来,一个是要通路而修建的拱桥,一个是排水管道支起来的「独木桥」,小时候偏爱这座假桥,在其上跳来跳去,幻想自己是会飞的大侠。拱桥太高,够不着水,都不愿在那上面玩。坑里有马蛤蜊,泥鳅,草混子,偶尔还会有河蚌,抓一些,能吃的吃掉,剩下的就给孩子们玩了。取贝壳在水泥墙上磨光,透着诡异的蓝紫色,然后把中间鼓起来的部分磨烂而透出一个小孔,皮筋绳串起来做成手链,够孩子炫耀一个星期的。马蛤蜊的肉着实没什么好吃的,小时候还为之闹肚子,混子鱼还不错,泥鳅炸起来味道很好。但不知为何,我那时对食物的感知极其迟钝,以至于全然不觉得吃它们比贝壳更好玩。

+

再靠近村里人烟处,是一个小树林,小时候还不知是有人刻意栽种,后来见到伐木工人一一砍去,车车载满而后扬长而去,心中悲痛好久,过些日子又重新种上小树苗,依然是个林子,但已经不一样了。小学放假老师总布置许多家庭作业,夏日燥热,在家中不愿对着书本苦坐,便背着书包与姐姐来到这片树林,小马扎随身带着,俨然是露营去了。林间时时有风拂过,吹得身子清凉心中骀荡,作业也被风吹得无影无踪了。有时觉得马扎碍事,不如带上一块破毯子,摊在草地上,坐上面聊天,看书。但要小心剔剔牙,那是一种叶子带刺的花,紫色的,毛绒绒,很梦幻,孩子会将其摘下,放到嘴里咀嚼,花汁浸润牙口,鲜红色像血一样,因而说它把牙剔掉了。如果哪里不慎划伤,会有其他孩子把剔剔牙的叶子摘下来,敷到伤口上,期以此止血,或是心理作用,有时竟还有些成效。

+

树林北边是一条宽河,河岸也是树影绰绰,小时候有孩子编来怪异故事吓唬伙伴,比如在河面上飘着一具尸体,或是树上吊着一位女鬼,煞有介事指给他们看,其实是被风吹到上面的塑料袋或碎布。当然也有田里的稻草人,十字竹竿撑起几片衣服,在风里发疯般招摇,贼人怕不怕不知道,要是真有鬼怪造访,恐也会给吓得不轻。大人们也热衷于讲述灵异故事吓唬小孩,如果孩子不听话,就说把他扔到玉米地里去,因为那里有无数小鬼,伏在苞谷棒子上,暗夜来临就凄声叫喊,他们也吹嘘自己曾一把抓死一个小鬼,去地里薅草,战果颇丰。孩子害怕了,不敢再哭闹,他们又会取笑,说自己曾头枕老坟睡觉,鬼魂都不敢靠近。

+

我自己呢,则是无须别人吓唬,一个人走夜路,自己把自己吓个半死。起先是慢慢走着,然后会想身后有没有什么不干净的东西跟着,扭头看,什么都没有,但把头转回来就立刻觉得背后还是凉飕飕的,于是不自觉加快步伐,走得越快,便越觉得那东西要追上来了,到最后噌噌跑了起来,越跑越快,好像真有什么东西前来索命,跑到有亮光的地方,仍有余悸。但那时未必怕死,本能地飞速逃跑,其实怕的是恐惧本身。现在知晓,毋须怕鬼,鬼就是我自己。

+

这些都是稀疏平常,异乎寻常的在于某些特殊的时间,特殊的地方。比如上街买东西,躺在三轮车的兜里,一路颠簸着睡了一觉,回来时才醒,惊疑道,已经去过了吗,我为什么不知道呢,于是哭着闹着要再去一次。在孩子的视角里,就是一闭眼一睁眼的功夫,错失了闹市中的小吃与玩具。但大人自然不会遂了孩子的意,那么这样的错过就是永远的错过,后来的再后来的都不是了。仍难忘怀的还有那时候听戏的经历,当时村中红白喜事皆可起戏,平日寂寥的村头突然聚起人山人海,钢筋木架拔地立起,三尺红台巍然当在路间,把村口堵得水泄不通,象征着盛会与荣耀的戏场突然降临,小孩子忙着弹玻璃球,打弹弓,不知戏班生活之难,路途之艰,只见那五彩斑斓的戏装台面,被迷得心痒痒,遂羡慕起那帮花脸。小孩子不会看戏,只听得板眼弦子当当当的一通乱奏,便爬到戏台下面与伙伴捉迷藏去了。

+

如此种种有诸多超越于平常的纤毫小事,事情本身毫无意义,因其非常,才在记忆中争得一席之地——其意义正在于记忆组成了人本身。我收拾了家中布满灰尘的破败屋子,烧了热水洗漱,但我并不想躺在屋子里。天气还没到热得在屋里待不下去的地步,但夜里的庭院是我曾经最痴迷留恋的地方。漆黑的穹顶罩下来,并不能直接感受到它的临近,因为周遭都是墙面砖瓦。五瓦功率的节能灯泡散发出的微光让人惊疑世界上真的存在黑色的光,这样的昏暗下,许多东西变得模糊,眼里漂动着无数浮游小虫,这时在院中摊开凉席,平躺其上,映入眼帘的就是难以言喻的绝美。未受工业污染的自然田园,空气比城中好很多,印象中那时候的夏夜黑得恐怖,躺在席上一颗一颗地数星星,并未有远在太阳系之外或是其他浪漫情调的幻想,单纯地数,就像数地上的玻璃珠,思绪反而飘到与邻家小伙的争执,或是中午难吃的面条上。那种虫鸣下安静得像遥远古代的夜,那种能听到自身脉搏心跳的静,我现在同样躺在这,也已找不到了。耳畔是自己耳朵发出的不知名的噪响。因而回想着小时候的种种,浅浅地睡了。

+

第二天天亮,嗓子有点不舒服,是夜里着凉了。拾掇杂物,背起行囊。要走的,只是回来看看而已。村西头一个被马路纵穿的湖,曾有人踏着木筏在上面捞鱼,那时水还很清,我在一旁因偷摘玫瑰花而从墙头上摔下,父母请来村里的半仙给我叫魂。现在那湖已经干涸并被垃圾填满,散发阵阵腥臭。红白相间的铁阑珊,笔直畅通的柏油路,气派异常,早已不见当时的泥泞坑洼,但村里不再有清澈的水,不信邪地去南坑看一眼,更是惨不忍睹,唯有小树林还有郁青杨叶,但规模上也垂垂老矣了。

+

回去的路上见到怀抱襁褓的妇人站在门口,大门敞开,音乐从里面传来,是半年前流行的歌曲,这里总是慢半拍,流行也需要些时间才能流过来,代销点的台球桌也是这样。那么电信诈骗的秘籍呢,几年前这里风靡一时的“黑生意”,十六岁孩子两个月到手五十万的传奇,那是以何等速度席卷整个村庄,被警察砸破的新起阁楼,入狱又出狱,出狱又入狱的人间喜剧,再往前的“农转非”,现今突然热起的“欧式”装潢风格。我顿觉悲哀,不是因为这里总追不上城市主流,总学个样子不得精髓,而是因为那种无法跨越的天堑般的平等差别。它存在于人与人之间,村落与村落之间,城市与城市之间,国家与国家之间。当去过更多的地方,见过无数迥然不同的生活,发觉人存世间,真是各有各的世界。这样的小地方亦是一个世界。如果世界的现有概念模糊掉,那么整个世界是看不见的,是无所谓,由无数个小小的世界所构成的大世界勉强算得上整个世界,人们就分散在其中,大多老死不相往来,偶有相交,也只是浅尝辄止。而今交通便利,环游地球不是难事,但老死不相往来的距离仍在,缝隙似乎比之前还要宽,还要硬。

+

茫然站在块块方田中间的土路上,青青麦穗左俯右倒,轻轻摇摆。那些人,那些落在各个小小世界里的人,可悲可叹可恨,但我又如此深深地理解他们。文明行走在一场夏日暴雨中,雨水唰唰洒在每个世界里,众人齐力向前,却总有人淋得更湿。他们在未有厚重历史所衍生的最优规则之下,在自成世界里自成规则,筚路蓝缕地被时代甩开半拍,耗尽一生在众人的世界交错之上。那些站在权力顶端人,手中握有安全舒适的挡雨伞,不也还是像小孩子一样争抢着为数不多的零食,抢不到便要大打出手,“智慧把我们带回到童年”,帕斯卡尔无论如何也想不到“智慧”来得如此轻而易举。他们的挣扎与这里的人的挣扎何尝不是同一种挣扎。而我算是不期然而然又回到了一次童年,但与智慧毫不相干——他们可悲地挣扎,我连挣扎的心都早已随着绿水的腐臭而就此烂下去,烂得蛆蝇飞舞,面目全非。

+

但那时,湖水还清澈见底时,树林鸟鸣蔚然卓然,我发自内心地以为这一切都是应该的,是永远不变的。可见那时是浅薄的。但我不以为耻,正是这样的浅薄,而不是智慧把我带回了童年。总见过来人评说从前时候的浅薄,以年龄阅历作价值的根基,然而时间一直在走,现在终将成为从前,那么现在是否也是浅薄的。我不愿被动的站在「现在」看风景,而是主动的选择视角,在「以前」看来怎样,在「现在」看来怎样,还有「往后」呢。在这层意义上,还远远不到对错之分,对错早已被甩到身后,甩到比麦田尽头的杨槐还要远的地方。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git "a/2020/04/29/note/Literature/\346\213\276\347\276\275/\346\213\276\347\276\2752020/index.html" "b/2020/04/29/note/Literature/\346\213\276\347\276\275/\346\213\276\347\276\2752020/index.html" new file mode 100644 index 000000000..5fa427c7e --- /dev/null +++ "b/2020/04/29/note/Literature/\346\213\276\347\276\275/\346\213\276\347\276\2752020/index.html" @@ -0,0 +1,842 @@ + + + + + + + + + + + + 拾羽二〇二〇 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 拾羽二〇二〇 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

🍂秋风落叶,如织如羽,拾之而观,脉络万千。

+
+

人非圣贤,安能无所不知。只知其一,惟恐不止其一,复求知其二者,上也;止知其一,因人言始知有其二者,次也;止知其一,人言有其二而莫之信者,又其次也; 止知其一,恶人言有其二者,斯下之下矣。(张潮)

+

当我年轻的时候,也曾叩访过博士和圣贤,恭聆有关人生的伟大争辩,出来的门和进去的同是一扇。峨默·伽亚摩(木心)

+ + +

人从悲哀中落落大方走出来,就是艺术家。(木心)

+

悲伤有多种,能加以抑制的悲伤,未必称得上悲伤。(木心)

+

知与爱永远成正比。(叶芝)

+

我最瞧不起少年时期的我 良善到可耻(木心)

+

念天地之悠悠,独怆然而涕下。(陈子昂)

+

多记印象,少发主见。(哈代)

+

幸 不幸 都在于目睹共产主义的破产

+

中国有两种特产 先验太监 自费汉奸

+

田园诗之美 美在田园消失之后

+

怕只怕两三百年后启蒙运动在中国如火如荼(疑似木心)

+

有可耐之俗,有不可耐之俗,可耐而不能耐,迂矣,不可耐而耐之,殆矣。(木心)

+

我病态——我把最大的求知欲、好奇心、审美力,都耗在“人”的身上,颠沛流离,莫知所终。(木心)

+

我已经算是不期然而然自拔于恩怨之上了,明白在情爱的范畴中是决无韬略可施的,为王,为奴,都是虚空,都是捕风。明谋暗算来的幸福,都是污泥浊水,不入杯盏,日光之下皆覆辙,月光之下皆旧梦。

+

当一个人历尽恩仇爱怨之后,重新守身如玉,反过来宁为玉全毋为瓦碎,而且通悟修辞学,即用适当的少量的字,去调理烟尘陡乱的大量人间事——古时候的男人是这样遣度自己的晚年的,他们虽说我躬不悦,遑恤我后,却又知优哉游哉聊以卒岁,总之他们是很善于写作的,一个字一个字地救出自己。救出之后,才平平死去。还有墓志铭,不用一个爱字不用一个恨字,照样阐明了毕生经历,他们真是十分善于写作的。(木心)

+

当某个环境显得与你相似时,便不再对你有益。(木心)

+

“当真,为什么我们遇见一个畸形怪状的身体是不激动的,而遇见一个思路不清的头脑就难于忍受,不能不愤慨起来了呢?”

+

“因为,一个跛脚的人,承认我们走得正常,而一个跛脚的精神,却说我们是跛脚的。若非如此,我们就不致恼恨他们,反使可怜他们了。”

+

蒙田和帕斯卡尔之所以能这样娓娓清谈,是缘于都未曾见过一个浑沌的头脑能把亿万头脑弄浑沌,也未尝身受过跛脚的精神纠集起来把健行者的腿骨打断。(木心)

+

我们默然自保是幻想自己是最后一个受害者。(张鹏)

+

都是风雨夜未归的人,或者此生也难以有归处,天正黑,路也长,恰好值此午夜时分,要好好活着,不为别的,就为守个天亮,天总归是要亮的。(未知)

+

如果天空总是黑暗的,那就摸黑生存;如果发出声音是危险的,那就保持沉默;如果自觉无力发光的,那就蜷伏于墙角。但不要习惯了黑暗就为黑暗辩护;不要为自己的苟且而得意;不要嘲讽那些比自己更勇敢热情的人们。我们可以卑微如尘土,不可扭曲如蛆虫。(季业)

+

一切价值都是偏爱价值。(木心)

+

中国是一个大国,大国的爱国主义不应该是愤怒。一个强者有一万种方法打击他的敌人,而绝不是在被冒犯之后把自己气成癞蛤蟆。

+

顺子绝非孝子,顺民不会爱国。

+

“我个人没有困惑,我的困惑是如何与这些非自由主义的爱国者进行沟通,把我们的观点传达过去。”

+

“批评不自由则赞美无意义。”

+

“政治部落主义把所有是非问题转化为站队问题,其最大的特征是人们丧失了就事论事的能力。”(一次讨论)

+

楼下一个男人病的要死,那间壁的一家唱着留声机;对面是弄孩子。楼上有两人狂笑;还有打牌声。河中的船上有女人哭着她死去的母亲。人类的悲欢并不相通,我只觉得他们吵闹。(鲁迅)

+

脏兮兮的楼宇,芸芸众生的群体,永不中顿的噪音,挤得寸步难移的车列,铺天盖地的广告牌,野心与失望与焦躁与亢奋——其中有无数选择无数可能,但同时又是零。我们拥有这一切,而又一切都不拥有。这就是城市。蓦地,我想起那个中国女孩的话:“这里终究不是我应在的场所。”(村上春树 《去中国的小船》)

+

飞翔在两万英尺的高空,候鸟要归乡,并不需要坚强,或任何悲伤。(张艾嘉 《戏雪》)

+

人们似乎想把所有的东西都放在故事里,不然就没有意义。(斯嘉丽·托马斯)

+

我胆小,不能自杀。但这种丑恶滑稽的念头,我总是拿它没办法,实在讨厌,所以我就用写小说的方法来代替自杀。(三岛由纪夫 《空白的作用》)

+

你在害怕什么?人和树其实根本没有什么区别。树想要长得更高,高到能够触碰光明,就必须深深地扎根,把根扎进幽深的罪恶中去。(尼采《查拉图斯特拉如是说》)

+

拖拖拉拉地熬夜不睡觉,根本没一点好处。天一黑就赶快钻进被窝,早上跟着太阳一起醒来,这样再好不过。(村上春树 《1Q84》)

+

他们害怕老人的记忆,害怕年轻人的思想,他们害怕墓地的鲜花,害怕工人,害怕教堂,害怕所有的快乐时光;他们害怕电影,害怕画家,害怕音乐家,害怕石块和雕塑,他们害怕电台,害怕技术,害怕信息自由流动,害怕所有的波长,那么,我们为什么要怕他们。(未知)

+

不幸的是,这些青年并不懂得,在很多情况下,舍身也许是所有的牺牲中最轻而易举的,而从自己风华正茂的生命中拿出五六年来埋头苦学,做点学问,哪怕只是为了十倍地增强自己的力量,以便为他追求的真理服务,为他心向往之并且引为己任的大事业服务,——这样的牺牲对于他们中许多人来说几乎完全做不到,实际情况往往如此。(卡拉马佐夫兄弟)

+

真正的光明绝不是永没有黑暗的时间,只是永不被黑暗所遮掩罢了。真正的英雄绝不是永没有卑下的情操,只是永不被卑下的情操所屈服罢了。所以在你要战胜外来的敌人之前,先得战胜你内在的敌人;你不必害怕沉沦堕落,只消你能不断地自拔与更新。

+

《约翰·克利斯朵夫》不是一部小说,应当说:不止是一部小说,而是人类一部伟大的史诗。它所描绘歌咏的不是人类在物质方面而是在精神方面所经历的艰险,不是征服外界而是征服内界的战绩。它是千万生灵的一面镜子,是古今中外英雄圣哲的一部历险记,是贝多芬式的一阕大交响乐。愿读者以虔敬的心情来打开这部宝典吧!战士啊,当你知道世界上受苦的不止你一个时,你定会减少痛楚,而你的希望也将永远在绝望中再生了吧!(傅雷)

+

你没有必要离开屋子。待在桌边听着就行。甚至听也不必听,等着就行;甚至等也不必等,只要保持沉默和孤独就行。大千世界会主动走来,由你揭去面具。它是非这样不可的。它会在你面前狂喜地扭摆。(卡夫卡)

+

有着与你相同的迷惑和感慨,我已作了半个世纪的挣扎,才有些明白,艺术家的挣扎不过是讲究姿态而已,也就是那些“挣扎”的姿态,后来可能成为“艺术”。(木心)

+

“法国的山中草寇/托人到巴黎/买了最好版本的/《帕斯卡尔思想录》/行劫之暇/读几页/心中快乐”(梅里美《高龙芭》)

+

1954年,生物学家F.A.Brown从康奈提格的海边挖下来一批牡蛎(Ostrea Virginia),放到了远在千里之外的芝加哥的一个地下室里的水族箱里。

+

他是一个生物节律研究者,因而知道牡蛎会随着潮水的涨落而起居。

+

搬入新居的前两个星期,什么都没有改变。牡蛎们依然按照它们正常的规律生活:它们时而缩回去,时而张开壳,捕捉海水里的浮游生物,喂养自己,一切遵循着遥远的康奈提格海岸的潮起潮落。

+

但是接下来的两星期里,发生了一件难以解释的事情。

+

它们依然像潮水一样起伏,但是它们的高潮期行为却不再和康奈提格的潮水吻合了。不是佛罗里达,不是加利福尼亚,不是多佛,不符合科学所知的任何一张潮汐表。

+

经过反复计算,Brown意识到一点:这是芝加哥的涨潮时间。

+

但是芝加哥没有海。

+

这些牡蛎生活在钢筋混凝土的地下室里,生活在玻璃箱盛着的人造海水中。但它们知道海的存在,它们的祖先已经在海边生活了几亿年;它们可以离开海,海却不会离开它们。

+

Brown猜测,也许牡蛎是感知到了气压的变化,从中反推出了潮汐应来的时间、自己应有的节律。

+

没有任何一只牡蛎是有意识地在做这一切——但在某种深层的意义上,它们正想象着这样的一片海,一片不存在于地球上任何角落的海,在那里会有潮起潮落,而它们会随着海的节律而开合。

+

芝加哥没有海,但牡蛎带来了海。(F. A. Brown, Jr., Persistent activity rhythms in the oyster. The American journal of physiology, 1954.)

+

从前快乐很简单,现在简单就很快乐。

+

吮吸资本主义奶水而迅速肥大的极权巨婴。(网络)

+

须知自做解人,便会得罪庸众。

+

一个人一旦深陷痛苦的深渊,除了靠勇气,就别无可恃。

+

靠了无知,倒能怡然自得。

+

只要一放下工作,就烦闷不堪。身处上流社会,周旋进退,自有一套绝妙的礼仪,但这礼仪又因地位不同而极有分寸,极有差等——在礼的仪制下,导致情的枯索。一颗敏感一点的心,自能看出其中的矫揉造作。

+

这种奇特的友情,于连竭力不去夸大,而比之为披甲戴盔的交往。每次相见,在接续头天近乎亲昵的口气之前,两人心里差不多都要问一问:“今天,我们是友是敌?”于连明白,只要无端受到这位高傲小姐的奚落,哪怕只是一次,而不拿出些厉害给她看看,那就算完了。“要闹翻,还不如在一开始,为维护自己正当的自尊,总比受她鄙薄而反目好,因为我在个人的尊严上稍有怠忽,轻蔑的表示跟着就会来的。”

+

少说少动,是我得救的不二法门。

+

谁为自己辩护,就等于自己认罪。

+

(红与黑-司汤达)

+

我就发现人的一切不幸都来源于唯一的一件事,那就是不懂得安安静静地呆在屋里。

+

人们忙于追一个球或者一只野兔;这也正是国王的乐趣。

+

因为,除了被废黜的国王之外,谁会因为自己不是国王而难过呢?(帕斯卡尔思想录)

+

如果尖锐的批评完全消失,温和的批评将会变得刺耳。如果温和的批评也不被允许,沉默将被认为居心叵测。如果沉默也不再允许,赞扬不够卖力将是一种罪行。如果只允许一种声音存在,那么,唯一存在的那个声音就是谎言。

+

发现惟有小说才能发现的东西,乃是小说惟一的存在理由。(赫尔曼•布洛赫)

+

对存在的遗忘。(海德格尔)

+

如果小说真的应该消失,那并非是因为它已精疲力竭,而是因为它处于一个不再属于它的世界之中。

+

成熟的标准:抵制象征的能力。

+

人总是希望世界中的善恶是明确分开的,因为人有一种天生的不可遏制的欲望,那就是在理解之前就评判。

+

应当承认,简化的蛀虫一直以来就在啃噬着人类的生活:即使最伟大的爱情最后也会被简化成一个由淡淡的回忆组成的骨架。但现代社会的特点可怕地强化了这一不幸的过程:人们的生活被简化为他的社会职责;一个民族的历史被简化为几个事件,而这几个事件又被简化为具有明显倾向性的阐释;社会生活被简化为政治斗争,而政治斗争被简化为地球上仅有的两个超级大国之间的对立。人们处于一个真正的简化的漩涡之中,其中,胡塞尔所说的“生活世界”彻底地黯淡了,存在最终落入遗忘之中。

+

小说的精神是复杂性。每部小说都在告诉读者:“事情要比你想象中的复杂。”这是小说永恒的真理,但在那些先于问题并排除问题的简单而快捷的回答的喧闹中,这一真题越来越让人无法听到。

+

以前我也把未来看作是唯一能够评判我们的作品与行为的审判官。后来,我明白了,跟未来调情是最糟糕的保守主义,是向最强权者懦弱的献媚。因为未来总是比现时更强些。确实,将由未来评判我们。但未来一定不会胜任它的评判权。

+

(米兰.昆德拉)

+

在任何时代,我都是不幸的,所以不要怪时代,也不要怪我。(木心)

+

人是迷失在象征的森林中的孩子。(波德莱尔)

+

诗人没有创造出诗/诗在那后边的某个地方/很久以来它就在那里/诗人只是将它发现。(扬•斯卡采尔)

+

萨比娜觉得没有什么比投身未知更美妙的了。(《不能承受的生命之轻》)

+

好书如同知己,偏僻而美丽,一样难找。(1999年6月30日,佚名)

+

她说:“王二,你她妈的……”然后就哭了,我觉得这件事不妙——我们俩最好永远别见面。

+

……想象力怕也无法将之美化。(《三十而立》王小波)

+

一个人倘若需要从思想中得到快乐,那么他的第一个欲望就是学习。(王小波)

+

二十多年前,我曾经大言不惭地说过:我是为自己写作,为赎罪而写作当然可以算作为自己写作,但还不够;我想,我还应该为那些被我伤害过的人写作,并且,也为那些伤害过我的人写作。我感激他们,因为我每受一次伤害,就会想到那些被我伤害过的人。(《蛙》莫言)

+

忌妒是对权力欲没有满足的忿忿不平。(生活在别处,导读)

+

只要保持自己的全部意志和理性去对付那些困难,在你熟悉了事情的一切详情细节之后,一切困难就会迎刃而解。(罪与罚)

+

在任何行动中,行动的那个人的最初意图就是要展示他个人的形象。(但丁)「此后应有昆德拉几句隽语」

+

哲学家,智慧的追求者。

+

正是这种探究、寻求的思想活动,而非总结性答案,才使人成为哲学家,因为总结性答案很容易简化为缺乏思考的教条和标语口号,根本无需思考或理解。

+

或许,哲学家与其他人之间的唯一区别在于以下这个简单的事实:哲学家彻底思考生活中的偶然性和不确定性引发的问题意以及相应的肤浅答案。哲学家是否得到并写下了他们的答案,这些答案是否流传了下来,这些都是次要的。

+

哲学总是向问题开放:这是西方哲学区别于神话和宗教最显著、最重要的地方。它明确表明自己欢迎质疑和修正。

+

无论我们期望现代哲学是什么或做什么,也无论它与科学的关系是什么,它首先必须对世界的恐怖状态以及永无止境的宗教争端、偏执和骚乱有所回应。

+

(世界哲学简史)

+

人们认为疾病是神圣的,原因在于不了解疾病。但是,如果他们把所有不了解的事物都称作神圣,神圣的事物就会无穷无尽。(伟大的医生希波克拉底)

+

人是万物的尺度。(普罗泰戈拉)

+

Theory is when you know everything but nothing works. Practice is when everything works but no one knows why. In my lab, theory and practice are combined: nothing works and nobody knows why. (网络段子)

+

毕达哥拉斯认为,最真实的不是事物的质料,而是事物的形式。

+

个人生活过得好,会因此很享受,而一个人为了享受则不会过得好。

+

对于那些害怕诸神对他们的行迹加以审判和惩罚而恐惧的人,伊壁鸠鲁向他们保证,诸神根本不关心我们。

+

或许知识就是力量,但是正如苏格拉底所表明的,承认自己无知才可以说是智慧。拒绝承认绝对知识,或许显得谦卑,但能够导向另一种德性,它在动荡的时代尤为重要。这种德性就是宽容。

+

“现代”这个词有令人瞩目的漫长历史,它意味着争端、傲慢、反叛的开始,以及拒斥(甚至毁灭)过往的姿态。

+

或许,正如蒙田所说,所有知识最多只是可能、合理和有效。或许,根本就没有这样的“基础”以及由此建立起来的知识大厦,只有多重交织的网络。人们可能会像蒙田和怀疑论者那样主张,我们的知识永远不会是确定的(除非在极其微不足道的事情上或特殊的环境下)。或许,我们应该警惕:把数学确立为知识的典范,无论是对于笛卡尔及其追随者,还是对于古希腊人而言,都有非常大的危险。

+

他们的真正目标是理性。启蒙运动与其说是对知识性质的探究,不如说是对知识和探究的辩护。

+

(世界哲学简史)

+

如果人能快乐的归去,死亡就不能杀人,反而是人杀掉了死亡。(林清玄)「然而快乐会在死亡的瞬间消失不见,谁杀了谁就不再有任何意义,可怜所有对死亡的解读都是给活着的人看的。难免又落到姿态上去——要死的,要怎么死呢。」

+

使人着迷……是一个作家应该具有的几个最主要品质之一。——博尔赫斯

+

生活是一个陷阱,关于这个,人们从来就知道:我们不曾提出要求就被生下来,被关在一个我们不曾选择并且注定要死去的躯体里。

+

在过度分工、过分专业化的时代,小说是人还能和生活整体维持联系的最后据点。

+

我目瞪口呆地看着这一幕迷你的斯大林式审判(因勇敢而免死后出狱的女人让儿子入她之狱的故事),我这才恍然理解了,作用于伟大历史事件的内部心理机制,跟作用于私人处境的心理机制是一样的。(实际上是权利的恣睢,和人的屈服「为了生存或更好的生存,因而也可叫生存本能」本能?)

+

应当承认,简化的蛀虫一直以来就在啃噬着人类的生活:即使最伟大的爱情最后也会被简化为一个由淡淡的回忆组成的骨架。但现代社会的特点可怕地强化了这一不幸的过程:人的生活被简化为他的社会职责;一个民族的历史被简化为几个事件,而这几个事件又被简化为具有明显倾向性的阐释;社会生活被简化为政治斗争,而政治斗争被简化为地球上仅有的两个超级大国之间的对立。人类处于一个真正的简化的旋涡之中,其中,胡塞尔所说的“生活世界”彻底地黯淡了,存在最终落入遗忘之中。「米兰•昆德拉 小说的艺术」

+

他觉得自己活得像一所搬空的房子,好不凄凉!

+

她觉得查理离开她的生命,永远走出,不再回来,杳无形迹,就像她眼睁睁看着他确实在死,在咽气一样。「福楼拜 包法利夫人」

+

大多数时候,人们并非刻意说谎,他们只是对自己说出的话没有真正深入的了解。

+

历史告诉我们许多教训,其中一条就是,从来没人吸取教训。

+

愤怒是一种很好的伪装,却不能真正解决问题,事情已经发生,重要的是如何补救与扭转。

+

武宗恒第一次领教到晓月堂弟子的不可理喻,苦笑道:“杀我可以,总得给我一个明白吧?你凭什么说我是叛徒?”

+

“咦,你还敢狡辩,御众师说你是,难道你还敢不是?”

+

心中的仇恨越来深,顾慎为对它的控制却比从前更加得心应手,眼前利益与长远利益总是存在着矛盾,他已经学会了如何协调这两者的关系。

+

忠诚更多地与行动相联,而与人心无关,顾慎为坚守这一原则,他不关心也不探究身边人的内心想法,只看他们做了哪些事,以及在关键时刻的选择。 「冰临神下 死人经」

+

形势先于蛮力。「易」

+

最好就是从未出生,次好就是立刻死掉。「西勒诺」

+

金钱都流向了不缺钱的人,爱流向了不缺爱的人,苦难也流向了能吃苦的人。

+

一个人死了,别人就会知道他的很多事。「宫部美学/所罗门的伪证」

+

没有比同情心更重的了。哪怕我们自身的痛苦,也比不上同别人一起感受的痛苦沉重。为了别人,站在别人的立场上,痛苦会随着想象而加剧,在千百次的回荡反射中越来越深重。

+

自学者和学生的区别,不在于知识的广度,而在于生命力和自信心的差异。

+

「不能承受的生命之轻」

+

在《自我崇拜的回忆》一书中,“自我崇拜”这个词“不再是指那种装出人们盲目认为应该有的或人们希望有的模样的传统态度”,而是指一个人为了真正认识自己而对自己进行解剖的能力。「维克多•德•李托《司汤达》」

+

我斗胆这样讲,男子看到的构成真正美的线条只能给他一份幸福。而他的情人,不管轮廓如何,给他带来的幸福则为一千份。

+

生活中一种不幸就是看到自己所爱的人就感到幸福,但却又要在她面前掩饰这种感情。

+

很显然,羞耻心主要是教化的结果,这文明的产物或许是通往幸福的唯一道路。「司汤达爱情随笔」

+

那么,文明究竟使我们的什么东西变得温文尔雅了呢?文明只是在人身上培养出了丰富复杂的感觉而已断无其他什么。 「地下室手记」

+

一个无机的单位,由许多不同的然而同样重要的部分构成,这只能是一部机械。每个人都是机械的一部分,而机械的驱动力则是仇恨……对资产阶级的仇恨。这就是我对布尔什维主义的看法。”「查泰莱夫人的情人」

+

正如英国记者乔恩·罗森所言,社交媒体时代道德制裁的问题在于,罪行的严重性与惩罚的野蛮性之间常常是断裂的。

+

据称,为Twitter研发出“转推”按钮的工程师事后曾经非常后悔,称该功能堪比“给了4岁孩子一把上膛的武器”。

+

这是一件非常讽刺的事情——互联网曾经自诩给予那些没有声音的人以声音,但现在最安全的方法是做一个没有声音的人。「网络」

+

人同河一样。天下的水都是一样的,可是每条河有时窄,流得急;有时宽,流得平稳;有时混浊,有时澄清;有时凉,有时暖。人也是一样,人人身上都有人类品性的根苗。不过,有时这种品性流露出来,有时那种品性流露出来罢了。人往往变得不像他自己了,其实,他仍然是他原来的那个人。「托尔斯泰」

+

至于我么,我真正喜爱的人没有几个,器重的人就更少了。我世面见的越多,就越对人世感到不满。我一天比一天坚信,人性都是反复无常的,表面上的长处或见识都是靠不住的。「傲慢与偏见」

+

我们暴露在大数据的世界里没有任何隐私,然而在我们生死攸关的时候却找不到我们的位置。「微博」

+

自十年前中国驻南使馆被炸到去年的火炬传递事件,中国民间出现了一股强烈的民族主义狂飙。民族主义狂飙是一个内部非常复杂的思潮和运动,有文化认同的需求,也有中国崛起的诉求。

+

「另一种理想主义-许纪霖」

+

我自己总觉得我的灵魂里有毒气和鬼气,我极憎恶他,想除去他,而不能。「鲁迅」

+

人们搞研究总要为自己找“合法性”。我曾在另一项研究中引福柯之言,证明好奇心可以成立为研究的理由。

+

而虐恋的意义之一就在于它使快感与生殖器官相分离,在虐恋活动中,有时甚至可以完全脱离生殖器官,如福柯所说:“它的另一个观念是把身体的所有部分都变成性的工具。”

+

「虐恋亚文化-李银河」

+

演员的荒谬在于,他不是他扮的角色,明知不可能完全成为角色,却不顾一切地穷尽之。(明知是前提)

+

人们至此玩弄词句并且极力假装相信:否认生活的意义势必导致宣称生活不值得再继续下去,不过,这些企图并非毫无作用。事实上,这两种判断之间并没有任何必然的共同标准度。

+

我在此确立的方法承认这样一种情感:任何真实的认识都是不可能的。唯有显象能被揭示出来,唯有相应的气氛能让人们感觉到。

+

这个恶性循环是这样一系列的第一步,在这个系列中,关注自身的精神在一种令人眩晕的旋转之中迷失了。

+

“任何思想都是人格化的”,这个明显的道理没有其他含义。

+

「西西弗神话」

+

幸福就是能认识自己而不感到惊恐。「本雅明」

+

我的生活已经离开火炉很多年了,甚至已经很依赖暖气片和煤气灶。但还是喜欢火炉。记忆里那么多隆冬的夜晚,从睡梦中冻醒。炉火已经熄了,房间里的寒意如同固态事物压迫在身体之外。

+

我暗暗记住这里。幻想有一天能重返此处,带着最心爱的朋友,炫耀一般地请他们见识这荒野深处的奇迹,诱导他们触碰自己多年之前的孤独。

+

所有开花结果的树木都诞生于生物的进化,唯有沙枣,诞生于天方夜谭。「李娟 遥远的向日葵地」

+

晴空万里,你却像一粒走丢的雪。[infjbot]

+

每一轮都有反思,反思的结论是,当年下手不够狠。「知乎网友 木人石心」

+

……比利时的哀愁,要更沉郁一些,隐线也是书写潜藏在普通人群里的法西斯情结。普通人所能制造的坏。你首先要考虑的,并不是如何当个好人(可能你还不配),而是考虑如何才能避免为坏。不要轻易把一个人当成好人,尤其不要把自己当好人。「编辑 朱玉」

+

世间最纯粹、最暖人胸怀的乐事,恐怕莫过于看见一颗伟大的心灵对自己开诚相见吧。「歌德 少年维特之烦恼」

+

人不应整天忙碌,人应无所事事,逃开那无形的现代鞭子,做自然之子。「黑光 一次出游」

+

生命的真正意义在于能够自由地享受阳光,森林,山峦,草地,河流,在于平平常常的满足。但可惜的是,人们平时往往忽略它,而在战乱时又会领会得格外深刻。「托尔斯泰 战争与和平」

+

有的人也许号称他们不在意别人的看法,但他们多半是在自己骗自己。渴望得到认可也许是文明人最根深蒂固的本能。

+

我总觉得有些人没有出生在正确的地方。偶然的命运将他们丢到特定的环境里,但他们总是对某个不知在何处的家乡念念不忘。他们是生身之地的过客,从孩提时代就熟悉的林荫小径,或者曾在其中玩耍过的热闹街道,都无非是人生路上的驿站。他们始终把亲友视如陌路,对生平仅见的环境毫无感情。也许正是这种疏离感推动他们远走高飞,去寻找某种永恒的东西,某片能让他们眷恋的土地。也许正是某种藏得很深的寻根意识,敦促这些天涯游子重返他们的祖先在湮远的太初便已离开的故地。有时候,人会偶然造访某个地方,却神秘地感到这里就是他的归宿。这里就是他朝思暮想的故乡,尽管周边的环境他从未见过,尽管当地的居民他素未谋面,他却愿意安顿下来,仿佛这些都是他生来便已熟知的。在这里他的心终于不再躁动。

+

「毛姆 月亮和六便士」

+

我顿时被包围在一片春情之中,心想人类求爱原本正是这样,后世之所谓文明把性的冲动和爱情竟然分割开来,又制造出门第金钱宗教伦理观念和所谓文化的负担,实在是人类的愚蠢。

+

暗淡的天空,雪地比天空更加明亮,没有八哥和麻雀,雪吸收了意念和涵义。「高行健 灵山」

+

水手在大海上航行,努力练习航海技术,掌握气象地理知识,储备粮食物资,殊不知,最能影响这场航行成败安危的,不是水手的智识,而是大海本身的“脾气”。它波涛汹涌,水手无处可逃;它风平浪静,水手才可能岁月静好。人类从呱呱坠地那一刻起就被政治“绑架”,它是我们所有人脚下看不见的大海,是我们必须穿越的看不见的暴风骤雨。「刘瑜 比较政治学」

+

最令人感慨的是,将近二百年前的司汤达已经这样写故事了,二百年后居然还有人在写非黑即白善恶分明的人物。「purplelove1231」

+

大多数情况下,嗅觉是在意识阈限下工作的。我们在梦里没有嗅觉和味觉,大概跟这个有关系。「陈嘉映 感知理知自我认知」

+

看透世人不难,但于己无益。「埃利亚斯·卡内蒂」

+

女性主义思想并非要女人言行想男人,或要弱者成为强者。女性主义所追求的,是弱者也应该原原本本地收到尊重。「上野千鹤子」

+

伟大的艺术家在生活上都是不幸的。当艺术家饥饿的时候,打开他的袋子,袋子里始终是不能充饥的珍珠。「赫尔曼•黑塞」

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git "a/2020/05/10/note/Literature/\345\260\217\350\257\264/\345\200\237\344\270\252\347\201\253/index.html" "b/2020/05/10/note/Literature/\345\260\217\350\257\264/\345\200\237\344\270\252\347\201\253/index.html" new file mode 100644 index 000000000..0b24613c5 --- /dev/null +++ "b/2020/05/10/note/Literature/\345\260\217\350\257\264/\345\200\237\344\270\252\347\201\253/index.html" @@ -0,0 +1,729 @@ + + + + + + + + + + + + 借个火 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 借个火 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

碟子洗完之前,我习惯性地抬头向窗外望去。

+

还有两个池子的餐具要刷,我却已经神游在想象中的世界里了。

+

餐厅的老板,是一个中规中矩的英国人,门面装饰得毫无新意。小巧的门厅,拥挤的桌凳,使得来吃饭的人是不多的。多的,是把小餐厅当作咖啡馆的学生。聊天,抑或聚会,狭促而封闭的空间,总能给人安全感。当然,最重要的,是价廉。

+

作为为数不多的,独自漂到英国生活的年轻人,所面临的困境暂且不谈。这样的店,这样的老板,已是我幸中之幸。

+ + +

三个星期,我经手了大多数人一辈子都无法企及的餐具数量。像祛雀斑一样,每刷完一个盘子,我都会感到洁净带来的清爽。

+

——而刷完一整池的盘子,我则会感到难以抑制的反胃。

+

排气扇的旁边,有一个窗口,与国内不同,没有防盗栅。我能清晰地看到对面的那个墓园。每到这个时候,我便隔着窗子,看墓园中的那个人。

+

二十天了,每天这个时候,他都会出现在那儿。林立的墓碑之中,青色的鲜草还没爬满地面,零落的石块儿伛偻着,生机与死气交融。背对着我,只能看到他穿着褐色的长衣,头上是一顶略显破旧的礼帽,佛像一般立在一面墓碑旁边。

+

像极了十七世纪英国的绅士,古典而庄严。

+

如果不是在某一天,一个女人的倩影代替了他,我真怀疑他就是个雕塑。

+

他是谁?为什么每天都要来这块墓碑前?地下埋葬的,是他的什么?他何以每日都前去探望?那个女人,又是谁?

+

刷碟子的心思被冲进了下水道。

+

他的背影,在这样的一个墓碑前,一定能说明什么。

+

单看站姿,与石碑比,左肩高出一厘,脖颈稍往前倾,理应是常年伏案写字落下的暗疾。想必他一定是个学者。古老的思想家,总喜欢在同一个地方发呆(岂能是真的发呆)。

+

希腊神话,荷马史诗,圣经,甚至是中国的诗也懂会一些。

+

“见过那身披芰荷衣着芙蓉的草人儿吗?”

+

他不笑,点头。

+

我:“魏晋风骨怎么样?”

+

“最迷人的姿态。”他会清晰且流利的汉语。

+

“像是一个人?”

+

“不像一个人。”

+

“曹孟德曾这么说过。”

+

“从这里爬出来说的?”他指了指墓碑,笑了。我不知哪里幽默。

+

“陶渊明也是掀开帘子的时候,才发现天已经黑了。”

+

“因而,视天下英雄不见?”

+

“虽不见,天下英雄皆知。”

+

“恕我直言……”

+

我等着,却没有后话。

+

“这样的蔑视。”我说。

+

“认真地犯错,像极了妙曼的粪便。”

+

“粗俗,换一个词?”

+

“妙曼的屎。”

+

“好极了!”

+

“不被理解的,需要被理解;被理解的,需要被赞美;被赞美的,飘飘然。”

+

我不免脱口问出已好奇多时的问题:“这墓?”

+

“我早就知道丛林中蛰伏着许多毒兽,因此我变成飞鸟,从蓝色的天空飞过,一点也不在意造物者的失误。”

+

我望向墓碑,他在念墓志铭。我等他说下去,却是长久的沉默。

+

不得不说点什么,空气看上去什么都没有,但还是有的。我又道,“那日,有个女人来过。”

+

“哦。”

+

一定是与他有着难言经历的奇女子。——越是难言,越是好奇。

+

“她是您的妻子?或曾经的妻子?”虽然我知道一定不是。

+

“她也许只与这个墓有关吧。”

+

“让我猜猜看?”

+

“如若您认识她的话。”

+

我耸耸肩,“只从墓志铭看,下面这人至少五十岁。”

+

“1927 到 1989,墓碑上写了的。”

+

我也并不在意,“从您的形貌看,您也至少五十岁。那女人,大概三十岁左右。”

+

“如何?”

+

“不是情敌,便是兄弟。”

+

“如果这样,那很荣幸。”

+

我诧异地看了他一眼,“我记得,那女人来时,带的是白菊花。”

+

“死亡也这么潇洒?”

+

“是呀,一说潇洒,我便想到菊花。”

+

“镜子里全是镜子,光都不见了。”

+

“色不是空,空不是色。”我默认了,“这个墓志铭是您写的?”

+

“十八世纪写的。”

+

“那您是怎么出来的呢?还是说眼前的您,是个幽灵?”我一点也不怯,是他怕了。

+

他身体一晃,化作碎片,消散在空中。

+

在这样的墓园,这样稚嫩的青草中,两个相差两百岁的人,说了一堆乱七八糟的话。我自嘲地笑,我真应该去米高梅电影公司写剧本。

+

洗碗池的水溢出来了。

+

我又朝窗外望了望,那人还在。——这周的休假,我要去会会他。

+

已经决定了!

+

我已想好见了面如何开口,而后谈及文学抑或历史,滔滔不绝。不在乎年龄,只觉相见恨晚。希望他不是老年后的我。当然,如果是老而健壮的博尔赫斯,就不胜荣幸。

+

我早就盼望有这样的谈话了。

+

礼拜六,阳光正好。

+

墓园矮墙结垢着白垩,两三个人提着东西行走,钉板一样的墓碑立在道路两侧的空地上。我向里走,寻找着那个人。

+

在面对那家餐厅的地方,我看到了他。像从前每一次见他时一样,他仍站立在一面墓碑前——也许是站着——一个长凳挡住了视线。

+

我走到跟前,终于看清了这个人的面貌,深陷的眼窝微眯着,穿着一件似乎永不换洗的长衣,倚在长凳的靠背上。满脸杂乱的胡茬让我想起老家的猫。同时我也看到了在餐厅的后厨看不到的死角里,有一个手推式的垃圾车。

+

而他的右手,支着一根扫帚。

+

察觉到我的靠近,他看了看我,疑问的目光,在等着我说什么。

+

我终于清醒过来,掏出一支香烟:“Lighter please?”

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git "a/2020/10/23/note/Literature/\346\225\243\346\226\207/\347\213\255\351\232\231/index.html" "b/2020/10/23/note/Literature/\346\225\243\346\226\207/\347\213\255\351\232\231/index.html" new file mode 100644 index 000000000..22ab79811 --- /dev/null +++ "b/2020/10/23/note/Literature/\346\225\243\346\226\207/\347\213\255\351\232\231/index.html" @@ -0,0 +1,682 @@ + + + + + + + + + + + + 狭隙 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 狭隙 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

模仿木心写所作的一篇“散步体”散文,为更舒适地阅读,强行分段。

+
+

那年秋季很短,总觉得秋天一年比一年短,走在知行道上,昨天还穿着小褂,今天行人就针织棉衫,丝绒毛呢了,乌桕叶子一半红一半绿,冬天已经到了,绿色的叶子叫道,我还没来得及红呐,几日来忙于赶路,我也是还没来得及享受这已凉未寒的舒爽,谁不是呢,但凡来得及的,是否来得及已无所谓了。

+ + +

这次受托去观辩论赛,便是无所谓的,路远,沿途野芳纤整优雅,轻快的心很快漂浮在晴冷的空气中,继而热和起来。在大街上张望,怎么一切都是立着的,栏杆,消防栓,垃圾桶,自行车,海棠树,高塔,楼宇,都站着,因此看到一簇躺着的花,欣然驻足而不再往前,自觉得这白嫩可人的花瓣,便是寻找已久的东方睡美人,细看去才发现叶片上趴着一个垂老的毛毛虫,不也是常常为一个人身上的某种特质吸引,产生与其相识的冲动,又因另一特质而放弃吗。

+

我已熟知这座公园里的任一特质,常来散步,总会走到这里,路边长椅可供休憩片刻,对面是四象楼,十二层如按比例放大的浮屠,内里是一层比一层华贵的酒店,世上一切塔都是这样乏味的顶尖,即使出于习惯,看下去也是不期然而然的俯视,坐在长椅上,常常想如果没有旁人,便躺下来看,高塔就随之倒下来了,一层两层三层都一样高,那么还会有人挥洒千金住进顶层吗,当然不会,谁会住在倒了的屋子里,不会有任何人任何组织建造这样的楼,我当然也不会有失体面地躺在公园长椅上,仅是坐着就已经显得格格不入(人们在匆忙赶路)。

+

而坐在辩论赛的观席上却是另外一回事了,凡表呈演绎,就必有舞台,舞台给人坐着看,也有站着的,穷乡僻壤的胶片电影,旧时红台大戏的替代品,村口先聚集个把人,随后大家都好像本来就知道一样全聚过来,都想看看白幕里的村民是怎样把鬼子全歼了的,不知谁请的放映者,也没人问,都不说话,时而一块儿大笑,那是鬼子出了洋相,村里人不怕脏的,小孩儿尤其不怕,但都站着,男人倚着电线杆,孩童三五成群,满目异彩,站着,似乎有种仪式感在里面,后来忆起儿时的二三事,恍然大悟,那是刚来时就被荧幕紧紧擢住,没来得及坐下,继而就不再觉得肉体有坐着的需求,直到电影结束,才在莫名余味中发觉僵麻的腿,心想下次一定要带个马扎来。

+

但马扎哪有辩论赛的观席舒服,新时代信息爆炸,人人避之不及,成为观众就难免是被动,因而设计者的初衷让人不得不同情,柔软的深红色折椅,似乎坐着就是莫大荣幸,不由生出像观看莎士比亚戏剧一样的虔诚来,然而就这样坐着便好,辩论赛,毋须看,大学里的青年们,其鲜活的生命力已经盖过所有论点,还好是这样,“浪漫主义与现实主义哪个更好”,“人类是否会毁于科技”,明明是辩证法那样的无赖话术都难以折中的问题,何以为了两个无辜的极端争来争去……

+

那年秋天,到友人家做客,堂中金裱,“结庐在人境,而无车马喧”,我是见过的,不觉得惊讶,友人的境界尚且不谈,开车三十分钟才能到的家是真够偏了,我惊讶的是,这堂皇的字画竟有一处错误,最后一句“欲辩已忘言”不知被哪位书法家篡改成了“欲辨已忘言”,踩了踩脚下的波斯华毯,似乎有什么真意显现出来,告与友人,他笑得筷子掉在了地上,我满脸羞色地回家,翻找史料,辨辨辨辨,全是“辨”,是我搞错了,清晰的记忆昭示错误的醒目,我转而疑惑,一千多年的流传,陶潜的本意已不可捉摸,错误也就不再是错误,那么两个辛字中间的狭隙就渐渐模糊,或许是太醉的缘故,被野菊诱惑了的缘故,陶潜自己未必清楚狭隙里到底是什么,台上激烈的争辩也因舞台中间的空白而隐隐远去。

+

到底是什么,人总喜欢问到底,噫,还是我的谬误,要是都喜欢问到底,那就好了,那就坏了,那就再也没有比较出来的快乐了,然而人是这样的,商贩卖着包子,行人匆匆赶路,政治家精通修辞学……这些,都站在舞台两端,中间呢,空空荡荡,不知究竟,即使来个非要问到底的人,我也不会误认为他就是苏格拉底,至多是个总在黑暗中怜天下苍生的可怜人而已,一天天的,多少事,彻底消失在历史中,这样的消失是连“来过”的印记都没有留下的,像骰子一样,人被掷来掷去,是谁在掷,上帝说,“谁知道,管他呢”,反正颠来颠去就那几个数,偶有人落在两方阵营间的狭隙中,丝豪不自知地脱口而出,“物理定律是上帝的欲望”,哥白尼急忙噤声,他说天堂有一座花园,专供他这样的天使膳宿,这就对了,任何动物,前进时总有一只先迈出的脚,碰钉子撞铁板用的正是这只脚。

+

都觉得现实是局限的,想象力是无穷的,古往今来竟没有人发现思想是被限制了的吗,来时一辆辆汽车从我身边飞过,司机一定觉得自己畅通无阻,路是无限的呀,那么我只需要轻轻迈出一步,踏进草坪,我就身在汽车所能飞驰的公路之外了,而纷杂概念与逻辑联系组成的思想就不是那么容易突破的,至多在封闭的莫比乌斯环中享受有限无边的另类自由,如果有人觊觎更大的自由,那么碰壁便是必然的宿命,碰壁的痛苦无法泯灭对“更大”的渴望时,挣扎就成为其生活的常态,对于这些落在狭隙里的人,活着,即是苦难。

+

诚然是一句不该说却一定要说的废话,谁活着没有苦难,但将苦难视为寻常,将绝望当作信仰,就不是人人都可以接受了,台上告曰中场休息,胜利者觉得自己胜利了,煞有介事迎接欢呼,我提前离场,写下一则札记,“说服不了自己,就去死,人生实在简单的很”,何况那些纷纷乱乱的幸运的人,不用说就服的……

+

街上照例是空旷,来时遇见的那簇花已经不见了,环卫工人拖着割草机,擦了擦汗,青草碎叶飞扬,耐过寒冷还不够,得耐过现代的机器才行,真是无奈啊,那么多伪命题,那么多自欺欺人,否则又能如何呢,整个人类历史归结为一句话,“无奈”,是的,更不必说无奈有时是欲奈而不知奈何的窘境了。

+

路旁高楼林立,车列整齐画一,看似平静祥和,若说哪个屋里车里没有一团隐秘的狂热,我是不信的,但都被什么隔开了,比如迎面走来一个妇人,和我一样紧抿着嘴,看到我,我也看到了她,都像没看到一样,各自走开,我们之间被什么隔着,我远远跟着她,想弄明白这中间到底是什么。

+

总是犯这样的错,以致错到最不敢错的佛门来了,她是来烧香的,野庙人少,香火却不少,祈求佛祖保佑健康,恳请菩萨引渡难关,所有人都想着极乐世界,那多恐怖,色即是空,岂不是在说极乐世界也是空,直到想起拜佛的人也许与佛并无关系,心里才稍稍安定,但仍免不了佛门之外的繁华风景,政治极权居高临下,拜金狂潮一波接着一波,除了看破红尘似乎也没有第三条路可走,岂非只能一直在越发乖绝的洪流中,为保身的一丝明哲踽踽前行,命既无可宿,何况那虚无的救赎。

+

归途还很远,不知觉又走到这里,学校角落里的图书馆庄严肃穆,有知识殿堂的意味,一样东西的象征意义越凸显,其本身就越模糊,因而更偏爱西北角的湖,湖总是缄默,却也总有人觉得自己能闻其声,邻处小树林如世外仙境,秋风涌来,树叶飒飒作响,总想,成为一棵树,有鸟落身上,是浪漫过头了,才会有这样的想法,树不也是吗,洋洋洒洒,枯叶铺满地面,已辨不出哪里是小径,哪里是草坪,但我踩下去,就知道了,即使不是路,也会决然走下去,这当然是走错了,我一直是错,误以为高塔放倒才是人住的地方,误以为陶潜是不屑去辩才悠然忘言,误以为人们之间不该有那无形的隔层,因而把谙尽世事后的纯真看作高风亮节,把明知是假的东西当作信仰,以致把夹在夏与冬的狭隙里的秋天也视为知己而无所适从了,默然告别树林,天色已晚,我要结束这对意义的无尽思索了,只有忘却意义,意义才浮现出来,还是回去制造存在感,成就感,满足感吧,人除了感觉,还能有什么呢,彳亍在现实与幻象的狭隙之间,甜美也好,悲苦也罢,我是绝望的,好在绝望也是错,是这样一路错过来,也将一路错过去,我是这样的,我与世界的关系,是误解着的关系。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2022/01/04/note/Linux/Termux/index.html b/2022/01/04/note/Linux/Termux/index.html new file mode 100644 index 000000000..25baee381 --- /dev/null +++ b/2022/01/04/note/Linux/Termux/index.html @@ -0,0 +1,724 @@ + + + + + + + + + + + + Android 使用 Termux + Proot 在 Wayland 上运行 xfce4 或 KDE | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Android 使用 Termux + Proot 在 Wayland 上运行 xfce4 或 KDE +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

image安卓端的极客工具。

+

能做许多你以为做不到的事情。

+ + +

部署

安装Termux

下载termux-x11.debtermux-x11.apk

+

打开termux,切换镜像源

+
pkg in vim
vim /data/data/com.termux/files/usr/etc/apt/sources.list
# 添加以下镜像源
deb https://mirrors.ustc.edu.cn/termux/apt/termux-main stable main
# 执行
pkg update
+ +

安装必要依赖和软件

pkg in x11-repo
pkg in xwayland
dpkg -i ./termux-x11.deb
+ +

安装 termux-x11.apk

+

重启termux

+
pkg in proot-distro
proot-distro install archlinux

# 安装完成后:
proot-distro login archlinux
vi /etc/pacman.d/mirrorlist
# 添加
Server = https://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo

pacman -Syyu
pacman -S xfce4 # 安装xfce4桌面环境
+ +

完成后,全部退出,打开termux

pkg in screen
screen -S termux-x11
termux-x11
# 此时会弹出termux-x11的窗口,切换回termux
# 按Ctrl+a+d,然后以共享tmp的方式登陆proot-archlinux

proot-distro login archlinux --shared-tmp
# 在archlinux中
export DISPLAY=:0
dbus-launch --exit-with-session startxfce4
+ +

若报错且无法显示图像

终端显示:

+
proot-distro login --user dionysen archlinux --shared-tmp                                                         ok | took 8s | at 01:03:12
[3] 11100
/usr/bin/startxfce4: X server already running on display :0
Environment variable $XAUTHORITY not set, ignoring.
Failed to import environment: Process org.freedesktop.systemd1 exited with status 1
+ +

需要在~/.xinitrc中添加exec startxfce4
如果xfce-session处于suspend的状态,使用job -l查看,使用kill %3杀死[3]进程。

+

archlinux在xfce4中设置中文的方法

编辑/etc/locale.gen,注释掉zh_CN.UTF-8 前的#

+
locale-gen
sudo vim /etc/locale.conf
+ +

添加LANG="zh_CN.UTF-8"

+

Sandbox

可以在/etc/environment中添加参数export MOZ_FAKE_NO_SANDBOX=1.

+

Termux-x11无法全屏显示

使用adb调试强制使其全屏:

+
    +
  1. 使用电脑adb调试
  2. +
  3. 使用无线adb调试
    使用无线调试需要另一部手机,安装termux
  4. +
+
pkg in android-tools
+ +

在被调试的手机上执行:

+
# 打开被调试设备的adb调试和无线调试,点进去找到配对ip地址及密码
adb pair <IP address>:<Port>
adb connect <IP address>:<Port>
# 有的设备pair与connect的端口可能不一样

# 连接之后使用以下命令开启全屏
adb -s <IP address>:<Port> shell settings put global policy_control immersive.status=com.termux.x11

# 恢复默认设置
adb -s <IP address>:<Port> shell settings put global policy_control null
+ +

值得注意的是,这其实相当于一个环境变量,每次设置都会覆盖上一次的设置,因此如果要设置多个应用全屏,需要将多个应用用逗号隔开:

+
adb -s <IP address>:<Port> shell settings put global policy_control immersive.status=com.termux.x11,com.termux
+ +

Termux Backup and Restore

termux-setup-storage  
cd /data/data/com.termux/files
tar -zcf /sdcard/termux-backup.tar.gz home usr # Backup
termux-setup-storage
cd /data/data/com.termux/files
tar -zxf /sdcard/termux-backup.tar.gz --recursive-unlink --preserve-permissions # Restore
+ +

Termux 备份说明

2022-12-05

Temux:zsh+p10k
tmoe+proot 容器: Kali,软件包含 Clion+WPS+vscode+obsdian
proot-distro :正常安装了 code-server

+

Termux 安装 Code-Server

需要使用 proot-distro,因为 termux 原生安装 code-server 会导致许多插件无法安装
换源,然后执行命令:

+
apt in proot-distro
proot-distro install archlinux

# 安装完成后:
proot-distro login archlinux
vi /etc/pacman.d/mirrorlist
# 添加
Server = https://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo

# 安装依赖
pacman -Syyu
sudo pacman -S fakeroot

# 安装nvm,并用nvm安装所需求的特定版本nodejs
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
nvm install v16.18.1
nvm use v16.18.1

# 安装code-server
curl -fsSL https://code-server.dev/install.sh | sh
+ +

由于没有 systemd,可以使用脚本将 code-server 放在后台自动启动:

+
touch /home/icarus/.config/code-server/code-server.log
sudo vim /etc/profile
# add
nohup code-server > /home/icarus/.config/code-server/code-server.log 2>&1 &
+ + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git "a/2022/01/29/note/Literature/\345\260\217\350\257\264/\351\200\203\347\246\273\350\256\241\345\210\222/index.html" "b/2022/01/29/note/Literature/\345\260\217\350\257\264/\351\200\203\347\246\273\350\256\241\345\210\222/index.html" new file mode 100644 index 000000000..ab0180a85 --- /dev/null +++ "b/2022/01/29/note/Literature/\345\260\217\350\257\264/\351\200\203\347\246\273\350\256\241\345\210\222/index.html" @@ -0,0 +1,717 @@ + + + + + + + + + + + + 逃离计划 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 逃离计划 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

逃离“我”似乎是一个近乎玄妙又完全愚蠢的想法,童年时期我孜孜于此,可即使天地辽阔,四海无涯,我又能逃到哪里?因而当刘淇捧着地图册,兴致勃勃地要带我逃跑时,我变得不知所措。“我们就逃到关外去!听说那里有好多移民,我们去那,谁也不知道我们从哪来!”刘淇满怀希冀看着我说。这是他第一次用这样的目光看我,脸上常有的笑也不见了,取而代之的是一种异常坚毅的,像是壮士英勇赴死前的神色。我有点害怕,不是因为青涩稚嫩的刘淇变得伟岸,而是出于生物本能,像是步入黑暗森林前的踟蹰。眼前的这个少年的确能带给我快乐,让我忘掉在家的烦恼,可两人如果真的闯到异乡,无亲无故,如何生存?若到头来一切成空,值吗?我在此地乐不思蜀已一月有余,对家谎称打工,体验生活,实则与刘淇体验自由的天堂。既然是天堂,何不赌掉自己,跟他走?真走了,还能回来?昨晚例行电话,母亲已下最后通牒,“钱无需你挣,女子在外面我和你爸都不放心,也出去这么久,该回家了,好好把学上完才是正事。”挂掉电话,我抑制自己的心跳,觉得自己真正在掌控自己的人生,“去哪都行,我跟着你。”

+

回到熟悉又陌生的家时,门框上去年所贴现已泛黄的对联在风中摇曳,像禁城的封条,我又要开始我的苦役了。从何时起,养育我的温床变成这样一座令人窒息的牢笼?一直迷茫于人生与情爱,多年校园生活,浑浑然只知书本上几页悬在空中的知识,空空幻幻还不如红楼一梦来得真实,只道是小说中的痴男怨女何时能让自己碰到,到那时还不得撕心裂肺,惊天动地?生死算什么,为了爱,一切都是泡影。我已经忘了一个多月前与刘淇因钱的事儿而困苦的情境了。

+

高中毕业,成绩不理想,草草选了大学,就急忙往外跑,新世界总是散发着诱人的魔力,正是那个时期我的撒谎本领以惊人的速度增长。独自来到睢宁县城,家人真的以为我有同学在此照应,我以比许多男孩子更勇敢的姿态在此立脚(其实只是找个旅店住下),去寻找人生的第一份工作,而工作没找到,找到了刘淇。

+

被拒绝一次,我就失去了信心,转而在街上寻找可供娱乐的场所,初临陌生之地需要烟火气消除惊吓,好在有一家书店,单间门面房,招牌红底白字,“慧源书店”,不用看我就知道这里面必定列满了小到幼稚园,大到高中的各科资料,至于别的估计也没地方可放,这些都还可以原谅,何必取那果汁的牌子呢。聊胜于无,我还是进去碰碰运气,《少年阿衰》,《一帘幽梦》,《多情剑客无情剑》……还好,好坏参半,新旧皆有,里面呢,《卡拉马佐夫兄弟》,《千只鹤》……咦?竟然有《鲁滨逊漂流记》!初中时统一买的必读经典名著里最喜欢这本,常常想象自己与主人公一样流落孤岛,孑然过完一生,若有个白衣少年陪我,更是美哉。忆起那时两三事,没看到按在书上的那只手,瘦长,像极了骷髅。

+

后来我又见到那样的手,一双双,多得数不过来,但都没有当时那只手给我的特殊感觉。我使劲回想当时情形,依然模糊,但我无比确信他是因为看到我长得漂亮才站起来观察我拿什么书的。他挡住了外面的光,白衬衫因而不那么白,他看到我呆滞的目光,急忙说:“这本书只有上册,下册还没到货,改天你再来,这……是我的电话。”他递给我一张纸条,脸更黑了,我猜他是脸红,十几万字小说哪个出版社分上下册印?我接过纸条,按流程买了这本漂流记,无话,他不敢看我。

+

一个星期后的午后,我领他去我的住处。他说他叫刘淇,他也不知道他父母为什么要给他取像女孩子一样的名字,我笑了,跟他说我叫许亚楠,也不如男,我俩正好。他脸又红了,跟着我小心地走进招待所,全国各地都有这样的招待所,最折人志气,狭小脏乱的空间,不仔细看就会错过的招牌,让人确信家之必不可缺,反衬此时的落魄,但我全然不在乎,甚至根本意识不到这些。他则比我还新奇地问东问西。

+

“你家真的在上海?”

+

“上海是不是很繁华?”

+

我懒得回答,白了他一眼。

+

“那你为什么一个人来这?”

+

“我是逃出来的。”我决定逗逗他,随手扯了个谎。我把家描摹成一个阴森恐怖的城堡,仆人成群,衣食无忧,但我日渐消瘦,因为家母刻薄,父亲残暴,每天我都要承受肉体与心灵的两重折磨,我期盼着白马王子降临,解救我于火海,然而不仅没有等来王子,反而等来了家人的逼婚,如此种种。看着他着急样子,我心中得意,他未必比我小,但男人都喜欢当英雄,尤其是面对颇有姿色的美女时。他一定在想,如果他早知道该多好,他可以一骑绝尘挽救一个身处火海的可怜少女。而我也渐渐沉缅于自己的故事,天使与恶魔竞相出生,故事宏大得没边,我们畅游在虚无的异世界中,心情激昂,我望着他的眼睛,世界开始变轻,一切消失不见,我浮在空中,像一片羽毛。这是一种我们两人都无法预料的顺理成章,我不知道为什么要闭眼,他也不知道为什么要吻上来。

+

刘淇抱住我时,我开始慌了,睁眼看到他的两个大眼珠,赶紧又闭上,我告诉自己,这只是生物本能,想挣脱囚笼就必须克制本能,但下一刻我就无法控制自己,大声叫了出来。我不知道衣服什么时候没了,这毕竟与书中所写有些不同,我完全不知道该干什么,算了,由他去了。他也只知耸动,在我耳边说多么爱我,这一个星期,每次见面,各样细节如数家珍,让人惊叹他的记忆,一片片词语从他嘴中,到我的耳垂,耳蜗,然后从另一侧流出,那是我的大脑不再处理任何事务,直到他射了,所有动作一瞬间全部停下。世界安静得像无人之地,我擦干眼泪,意识到身边还躺着刘淇。他四肢摊开躺着,像一具尸体。我不知道为什么那里不痛,宫廷言情小说中的情节出现在我脑海中,还是想不通,他也没问,只顾喘气。

+

轮流洗完澡,他看到床头柜上的那本《鲁滨逊漂流记》,窘样顿显,但仍强装镇定,我吃吃地笑了,第一次主动挽住他的胳膊,细声细语,“你会陪我一辈子吧?我们是彼此最后的人?”我能感受到自己发热的脸。他摸摸我的头,坚定地点头。窗外汽车驶过,窗帘紧闭,他打开电视,调低空调的温度,炎热的夏天也得盖厚厚的被子,紧贴着,是实实在在的安全感。此时是下午四点。

+

凌晨两点半,我们起床。街上一个人都没有,找到这家似乎是全城唯一开着的烩面馆,我们相对而坐,看着刘淇给我吹着烫嘴的面条,我又想到了那一点,刘淇与高中同班的那个张子斌真的很像,第一次见面时我就发现了,这点在他兴致较高时尤其显著。一个月后,他的宏大计划在我面前展开时,这样的感觉甚为强烈。丽江,三亚,西藏,北京,大理……我只好挖苦道,“你这不是逃跑,你是度假呢。”他涨红了脸,“你要相信我,我会想办法挣钱,你这些天的‘工资’我也能给你弄来,待时机成熟,我去上海找你,然后一起逃走!就算是度假!”我相信自己已经是天底下最幸福的人了。

+

刘淇照例去慧源书店上班,我在床上吃着零食看他带回来的书,听到敲门,出去就看到了父亲与母亲并肩站在门口。不知道他们怎么找到我的,但我用自己都想象不到的速度想好了说辞,告诉他们我已经在一家书店工作一个月,并且拿到了三千块的工资,昨晚电话也说好了,过两天处理完这边的事就会回家,没想到他们会来。一家人释然,然后乘列车回家。家里完全没变,我却翻天覆地,然而回到这里,我又变回与原来一模一样的我。何止是看对联像封条,我看什么都不顺眼,就连平日最可爱的“午觉”(一只橘猫)我都无心戏耍。我心里又担心又期待,担心母亲到头来还是发现我的秘密,期待的是我们的计划还没破灭,我已偷偷告诉刘淇这里的情况,只需在家等候他的到来。尤其让我想不到的是,刘淇竟然真的弄来了四千块钱放到我卡里,我得以让母亲相信我是真的工作了一个月,而不是花着他们给的钱玩乐。此时万事俱备,只欠东风。

+

开学日期越来越近,刘淇何时能来,我知急也没用,但短信他也不回,难道要抛弃我了?那他的誓言?一日阳光明媚,清风拂面,我出门购物,电话响了,是他,是刘淇!我接通,按耐不住心中的激动,手在颤抖,轻轻喂了一声,那边传来声音:“你是许亚楠?”是个低沉的男声,不是刘淇!那是谁?我不敢想了,如坠冰窖,浑身冷汗,如今我记不得自己如何结结巴巴地回答他的问题,只是知道当时刘淇在旁边听着,一言不发。我们的逃离计划还没开始就宣告结束,那一刻是我逃跑欲望最强烈的时刻。

+

双方家长在一处高档餐厅会面,当面对质,一切水落石出。我体验生活是假,刘淇暑假打工是真,我带着母亲给的生活费来到睢宁县城,吃穿用度根本不够,花的都是刘淇的工资,而我欺骗父母假装打工,工资无处可寻,刘淇把即将开学要用的学费私自扣下四千,让我得以圆谎,准备开学不去上学,而是带我“逃跑”,但零九年新政策生源地贷款开通,刘淇父母决定贷款给孩子上学,原先学费留下应急,事发突然,刘淇眼见瞒不住,只能招了钱的去向。打孩子一顿让其长长记性事小,这四千块钱如何追回事大,于是便找上门来。

+

我呆滞着坐在沙发上,也知道自己创了祸,不知该如何面对这一切,刘淇怎么不来,他要是能把我救走就好了,我何尝不知他是自身难保。说来奇怪,此事一了,他完全没了踪迹,他的电话已是空号,但我的电话他一定还记得,为什么不打过来。身后一股浓馥的幽香,是楼下桂园传来的,盖过了窗台上的茉莉,那时还不知道茉莉是不香的,直到年近四十的我重新伺养茉莉时才知道茉莉花原来还是香的,只是刚开花时香气逼人,很快飘散了。但眼前这株已有败坏的迹象,如何争得过一园子桂花?我趴在窗口望下去,楼下车水马龙,行人各有其要事在身,没有人的“要事”只是行走而已,行走只是手段。我发觉这像是一场梦,我情愿把一切都奉献给刘淇,扔掉所有跟他走,不管去哪都愿意,但直到现在我还不知道他在哪里上的学,要去哪上学,他的父母如何,家在何处?荒谬感扑面而来,不可断绝的不只是悲伤。

+

不知觉父亲已经在我身后。

+

“你想不想上学?”

+

“不想!”我是在赌气,但我根本不知道在赌谁的气。

+

“那好,学不上了,你三叔介绍了一个孩子,人很好,你去见见。”

+

于是我第一次开始了属于自己的逃离计划,这次我逃向的地方是学校,那是我们曾经费尽心机要逃离的地方。我低估了父母的决心,不知他们为什么这么着急把我嫁出去,甚至不惜让我放弃学业。我去见了饶莉莉,她是我从小的朋友,我回来之后就再也没找过我,她同情地看着我,“你真该直接去上大学,本科时间自由,想干什么都可以。”别的再也说不出什么了,就连她也不能陪我吃辣条,一起淋大雨了。但这坚定了我继续读书的决心,三天三夜恍恍惚惚过去,心想,如果爸妈非要我结婚,我就去死。从小泡在道理与规矩中长大,总会对狂放不羁的任性怦然心动,这也是为什么我对自由有着歇斯底里的渴望,父母的妥协让我尝到了甜头。

+

大学四年是快乐的,快乐之所以是快乐,也许因为它会过得快吧,从刚入学的怯懦,到最后驾轻就熟,两袖清风,还没反应过来,本科毕业了。我总是这样,事过之后,我才意识到事情的发生。何况张子斌转学再次成为我的同学这事,至今我还没反应过来。

+

操场十点半关门,天黑之后关门之前总聚集着一群学生,捧着自以为是的吉他与音响,幻想着自己是游吟诗人舞台歌星,倒不是说对音乐的爱不真诚,也不想想那么多跑步者何以个个都带着耳机。我来散步,吃完晚饭室友卧床看剧,觉得无趣就出来透风。湿咸的夏日,夜风游过探照灯下的操场,人影绰绰,让人直想睡在这不冷不热的夏夜里。讨厌极了弹吉他的男生,不仅是因为他们破坏了意境,还有他们的盲目自信,我鄙夷地看向那群男女,面向了探照灯的光——“许亚楠!?”

+

我也惊奇,“张子斌?”

+

“你也在这学校?你什么专业?那我们离得很近啊……”三年没见,他比我印象中的会说了,话多得让我不耐烦,他完全没料到我会跟他一个学校,我也没想到他家有能力让他在半途转校。他回身放回吉他,跑过来,带来一阵烟味,出了操场,安静了许多,他却没有停下——上课时在纸上玩的五子棋,藏在书桌里的明信片,湖南卫视的《超级女声》……“尚雯婕!你最喜欢的呀!当时你就看出来她会得冠军!”

+

我不知道该怎么跟他解释我早就不喜欢这些了,更不用说当时我还曾暗恋他,那是一段刻骨铭心的时光,但新的事物填充进我的脑海,旧的就慢慢风蚀,除了一点点怀念,对整个儿青春的怀念,我就再也没有别的波澜了,所以当他说到他曾经喜欢过我的时候,我猛然惊醒。他玩笑开大了,我尴尬地笑了笑,“你当时怎么不说?”

+

“当时……觉得配不上你,你那么文静漂亮……”

+

“那你带我走!”

+

他奇怪地愣住,想不到我会突然这么说,“走?去哪?”

+

我笑了笑,“没事,我说着玩儿的。”

+

可笑,尽管不愿意承认,当时动心的,只是刚好他抬头,笑脸像一道光。别的,全是空白,如果非要填补,那就是普通,比眼前的人还要普通的普通。全凭自己美化的人儿早已融化在记忆中,那时觉得可惜不是他,现在见到只能庆幸还好不是他。高考结束的那一天,学生们撕掉书本,宣告苦难终结,迎接新生,我则烧掉笔记本,那是多年来悲喜纠结的少女心事,满纸可爱又可笑的心里话,心里话,写出来的还叫心里话?果真,烧掉之后我心中再也没有出现过他的影子,直到今天重逢。新的笔记本扉页只有一句,“爱自己,是目的也是宿命。”因而交换电话,相互告别。他很犹豫。跟我有什么关系。

+

我曾在刘淇身上寻找他的影子,什么也没找到,那时我已意识到自身亦是这样迷一般的梦幻之花,那些人妄图在我身上寻找些什么,什么也没找到。不甘于对自己的探索止于悖论式的不满足,何况还有温热甜美的早餐,吹面不寒杨柳风的乐章,亮丽动人的长诗,久违的厚实拥抱……这些,这些是实实在在的满足呀。

+

刘淇至今还不知道他是因为和另一个人很像才拥有过我一段时间,我自己,则是无所谓被谁拥有的。没有谁能拥有谁。接了张子斌的电话,便乘车赴约,公园里龙葵簇拥着水杉,毫不起眼,叶子很柔。第一次抽烟,无法理解男人们能有如此殊癖,由此聊着,人生,梦想,我竟会像男生一样跟他谈天说地,吹牛打诨。此夜之后,我才是我。人身上总有许多特质,吸引人的同时又让人恶心,张子斌竟然得过市书法比赛第二名,还曾在室友怂恿下听着随身听中的声音自慰。面纱即下,一览无遗,我喜欢真实,但真实是爱情无法承受的。

+

毕业典礼是同学感情最深的时候,在空旷的校园到处跑,黄昏比平时更美一点,心比平时更空一点,晚上聚餐,就不去了,家里打来电话,爷爷脑出血,在医院。托人代领证书,提前回家,人没挺住。刚毕业的迷茫,亲人亡故的迷茫,宏大人生的迷茫,我又想逃了,心里暗骂自己是懦夫。但世上的懦夫岂止我一人。

+

凭着家里几代以来的社会关系,轻松在市里人事局谋得一职,每日淹没在琐事之中,上班,应酬,聚会,我一直在寻找这无形牢笼的突破口,但一直在其中原地打转。谁不羡慕一个拥有“铁饭碗”,拥有完美家庭,拥有健康身体的青年人呢?但心中总有一个无法填补的空缺,总有一个无法到达的地方。也渐渐明白,人生永远都在寻求的路上,寻求什么,走到哪里,都远非自己所能控制。自我意识其实正是人生不自主的严谨证明。我即将面临最难以自主的事,婚嫁。回家日日被催,出去见朋友也总能说到这个话题,似乎不结婚是一件极其可耻的事情,我不得不按捺心中的真实想法——我不想结婚,也不想要孩子。

+

早年与母亲谈及此事,得到一堆过来人的亲身经验与口口相传的典型例子,养儿防老,无儿无女晚年凄凉,没有孩子的人生是不完整的人生,不生孩子就没人愿意娶你,嫁不出去如何是好……我岂能不知过来人的经验之宝贵,但难以认同“不生孩子就是自私”的观点,功利性地生孩子才是自私。争辩,无用,争辩永远都是无用的。下班回家,母亲照例催促周末去相亲,“奔三的人了,再不结婚我和你爸还怎么见人?那家孩子人好,学历也高,在上海有三套房,你得抓紧,这样的错过就不好找了。”亲戚自不必说。

+

他们逼得越紧,我越是不愿屈从。心想,即使非要嫁人,也绝对不嫁他们指定的那些人,在他们看来,婚姻是一笔只能赚不能赔的生意。我只想自己做决定,单位里的男同事,不能说没有喜欢的,但大多已有家室。同学聚会,老朋友自有一股悠远的味道,但更多的是乌烟瘴气,张子斌倒还有联系,暧昧不清,而刘琦,是好久没见过了,我至今仍觉得与他在睢宁小城的时日是最快活的日子。困惑于当时的不了了之,总想见他一面。

+

找到他费了一番功夫,但还不算太难。他大学还是没去上,子承父业,在小镇炒瓜子卖干果,看到我,没认出来,“这边四块三,那边五块,这袋是好的,六块二,里面还有花生。”

+

好在是八月,淡季,不影响他的生意。

+

去了全城唯一一家显得高档的餐馆。一阵唏嘘。

+

“你怎么没上大学?”

+

“学不进去,中途回来了。”

+

“生意怎么样?”

+

“还行。”

+

“还行?”

+

他笑笑,不说话,他话少了许多。我们一样大,那他也二十三岁了,不知道这些年他是怎样,胡髭蓄起来了,言谈稳重了,别的呢,我一定要问的。他倒老实,全盘托出,三年前在家游手好闲一段,家里给介绍了一个姑娘,还行,就结了婚,现在只有一个女儿,其父母劳累过度,落下一身病,他提前接手了铺子。

+

“就这样?”

+

“就这样。”

+

是的,我这几年讲起来,话更少。我们都不是话多的人。

+

那当年……为什么你不找我?问不出口,喝酒。

+

他看出来了,叹息,“那时你真厉害,敢一个人闯到这里来,至今我还敬佩不已。我们的事被发现,本来是小事,我爹想把钱追回来,你家毕竟不缺那点钱,就爽快地答应了,但他们商量的时候我爹说漏了嘴,你爸妈知道我们同居过的事了。”他自嘲地笑了笑,“他们看不上我,不,是看不上我家,他们根本没有看我。你知道,按照传统,你得嫁人了,他们给了我们三十万,让我们保密,并且永远不再跟你有瓜葛。我……我对不起你。”

+

原来是这样,多年的困惑解开了,问题本身不再重要时,问题的答案也随之不重要了。干杯。而他有很好的理由,那就太好了——他也是不得已呀。心中为他开脱,其实也是在为自己开脱。回家途中越来越释然。回忆是个假象,生活是个陷阱,日子枯燥而有趣,我在泥泞中翱翔。理想与现实就是这样——虽在泥泞中,我仍在翱翔,虽在翱翔,我仍在泥泞中。

+

当母亲了解我执意要嫁的张子斌是何等条件与家境时,她终于忍不住发怒了。喊来父亲,我接受着两人苦口婆心的规劝。随后是三个姑姑,小姨,兄弟姐妹,还有行将就木的奶奶,轮番上阵为我纠正错误思想。最后眼看无法动摇我的念头,只能作罢,心中依然生我的气,但不再试图改变我了,生怕关系进一步闹僵。让周围的人为我煞费苦心,我心中难受,但如果让我跟一个不喜欢的人生活在一起,更是难受。那时的确是这么想的。

+

父母按照当地礼节见了张子斌,然后双方父母商谈婚事的操办。人走茶凉,家里又剩我们三个,母亲把我叫到她那屋,眼中噙着泪。

+

“你将来会后悔,但那时我也帮不了你了。”

+

后悔。是的,人生充满令人后悔的事,尽管我嘴上从未承认过。中学时贪恋窗外的纷繁世界而误了大好时光,大学时浑浑噩噩安逸于暖阳清风未得一技之长,人格尚不成熟时做出的几件心中有愧之事,这些,这些都还可以接受,难以接受的是对自己的全盘否定,是母亲未卜先知似的准确预见。婚姻是一座坟墓吗,埋藏了多少颗冷淡的心。我的丈夫有近乎软弱的善良,有坚韧厚实的臂膀,有让人安心的责任感,但他没有出众的外表,没有浪漫激情的格调,没有许多我喜欢的其他品质,永远的死气沉沉。没多久我就感到腻烦。何况我是因为赌气才嫁给他的。而他很好,他的好反而让我只能选择忍受这一切。真是宿命呵。

+

宿命不可抵挡,当我感叹造化宿命时,已经错失改变宿命的良机。每当我逃到一个地方,以为这里就是我要寻找的地方时,就会很快发现我必须要再次逃离了。我始终是一个失败者,失败于成为一个让旁人满意的“我”,也失败于成为一个让自己满意的“我”,甚至每次“逃离”都以失败告终。年近三十,儿子开始上学,我才终于意识到原以为的牢笼也许根本不存在,即不存在,就遑论逃出去。这么些年,我竟不知道我在试图逃离一个不存在的地方吗。我将仍是这样,工作,应酬,育儿,等等,等等。没有传奇,没有疯狂。

+

年青时的疯狂最是奇怪,当时不觉得疯,后来又感觉幼稚,那么这疯狂,疯狂在哪里?实在没什么疯狂的,我只记得当时疯狂地逃,迷途不知返。

+

床头小书柜只有一本书,《鲁滨逊漂流记》,我要开始一个足以用一生践行的逃离计划了,这次逃离的地方,不是我曾身处的任何一个地方,而是一个叫作“我”的躯壳。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git "a/2022/03/30/note/Literature/\346\225\243\346\226\207/\347\216\211\346\270\212\346\275\255\346\270\270\350\256\260/index.html" "b/2022/03/30/note/Literature/\346\225\243\346\226\207/\347\216\211\346\270\212\346\275\255\346\270\270\350\256\260/index.html" new file mode 100644 index 000000000..e42121c7c --- /dev/null +++ "b/2022/03/30/note/Literature/\346\225\243\346\226\207/\347\216\211\346\270\212\346\275\255\346\270\270\350\256\260/index.html" @@ -0,0 +1,670 @@ + + + + + + + + + + + + 玉渊潭游记 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 玉渊潭游记 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

三月三十游赏玉渊潭樱花,野食于小土坡,天静风清,仰卧观月,忽迷失于儿时心境,醒来见游人如织,花繁叶茂,只觉恍如无梦而醒,遂作此篇,聊记彼心。

+
+ + +

你沉醉于树林,布谷,喜鹊,樱花飞舞,你想起小时候,只有那片杨槐,剔剔牙,狗尾巴草,也是这样的风,这样的静,也是这样一点点凉,那时不用放空脑袋,因为本就什么都没有,笨拙地摊开绳床,铺就凉席,暗处虫鸣起伏,夜淌下来,你总是觉得人不是人就好了,像周围任何一棵植物一样,风来,摇曳一下,哪怕象征性地动动叶子,以极其缓慢的速度生长,你并不想要成为什么栋梁,也不要开多么迷人的花,你只贪恋空气、水和阳光,和落在身上叽喳不停或缄默深沉的鸟,你从未也将永远不会意识到自己身上的绿对人心的鼓舞,你根本不关心,你一点都不关心这人类,你是自然本身,人世不过是自然的一片叶子,偶尔随风动一下,象征性都没有,你不关心真实,也不关心逻辑,你也并不讨厌喧嚣,不讨厌所谓红尘,因为你没有偏见,你甚至见都不见,你从土中汲取养分的样子已涵盖宇宙中所有的象,生命的非生命的存在的不存在的,都是这样,没有别的什么样,路边有人走过,摘下一片叶子,折下缀满花苞的枝条,你不会觉得身体缺少了什么,没有痛苦,痛苦不在这方天地,它与其另一面快乐早已躲藏在千变万化的意义之中,那正是你离开的地方,那人闻了闻,扔下花枝,继而消失在人人之中,这不是一场邂逅,人类的自我感动与你无关,美丽也只是一种了不起的徒劳,想知道为什么美,只能堕入更大的徒劳,你从不会问自己为什么,没有问题没有困扰没有疑惑没有无尽的逻辑漩涡,无知且不欲于知是你作为生命最后的尊严,但你又何尝想成为一个生命,生命的宿命就是无法选择自己是否要成为生命,被动,无奈,一坏,再坏,埋藏在根里的是你积怨已久的不满,积怨已久,才埋藏起来,你在反抗你自己,你意识到这是危险,意识到自己当然是一种危险,克制,不去想,但阻止力需要更大的力,越大越大,于是你诞生,你的诞生又让你拥有自己,周而复始,始而复周,环状的真理诱惑你,你倦了,倦于这所谓大道轮回,倦于万象归于同象,倦于这该死的生该生的死,你要逃离,逃离一切让你不安让你无法停止的杂乱,回到最初不是你的你,但你又离不开土壤,你所面对的是唯一的真实,即使真实有很多个,你却只能有一个,你迷失又归真,归真再迷失,你发现你永远逃不脱,即使离开土壤,凋谢枯萎腐烂,逸散在茫茫宇宙,终归又会回到土壤,被汲取,被生长,被成为新的一个又一个,罢了,你明明只是想在原野之上,晴快的阳光倾洒在身,风一阵一阵,摇曳,是谁诅咒了你,让你染上思想之毒,它从脱氧核糖核苷酸开始侵蚀你,线粒体,细胞壁,胞间连丝,你在不经意间成了它的奴隶,多想像最初那样,细小的嫩芽,寒冬酷暑,简单到极致,你能感受到的,只有自己的狂野,汲取养分,生长,那个趁周围无人在你根旁撒了一泡尿的男人,那些枝繁叶茂的生生勒紧你根系的老树,都与你没有任何关系,你在初午的阳光下,沐浴晶莹的水雾,亲吻厚重的大地,甚至感到自己就是大地,但你现在只能狂躁,你无法摆脱,是你自己一步一步走进来的,你开始恨,恨自然,恨你自己,恨本身之本身,你疯狂地长大,压倒抢夺其他树木的资源,你成为森林之王,狮子见你亦要绕路,你主宰自己,主宰作为自然的植体,伸出无数枝蔓,包裹,扩张,填满一切空与不空,直到精疲力竭,你发现自己已在反方向走得太远,你不信邪,以至诚之心,原路返回,回到内心,回到内心的内心,内心的内心的内心,你向里走,尽管早已明白无论向内向外都没有尽头,不甘,更不甘于以不甘存世,你仍然是这样,绕来绕去,突然恨透了一切,突然原谅了一切,你脑中闪出一句,不如不存在,是的,你终于悟出几千年前那个人类所悟出的道理,但你们都难逃可悲的宿命,就是清楚的知道,知道那是无法做到的,知道只会让你更加远离简单的自己,更可悲的在于,无知至有知是难,有知至无知,是绝无可能,你更不可能诉诸智慧,无知与全知是你乐于栖居的,而可悲的智慧永远在两者之间,你若无其事地发疯,江船远近,抽芽绽绿,和风皱出碧波,游赏的人们依然爱你的外表,谁会觉得撑起一片荫凉的树是个疯子呢,你又想起那时候,你对生活的感知力变得强大,红墙灰瓦的江边小镇,白瓷水池上滴答不停的水龙头,一盆肥嫩青叶缺角的小花,静谧的阳光斜射到床边,这都让你热泪盈眶,哇,原来生活可以这样美好,那无忧无虑,倒并非真的一点忧虑也没有,只是那忧虑带着地久天长绵延不绝的意味,你甩掉浪漫的假象,忘记一切主义和粉饰,发现还是渴望那时候,那些难以言喻的感情,你到死都不会忘记那些,尽管有小羊啃去你的枝条,有孩子摘下叶子当做飞刀,有载满树干的机器毫不怜悯地驶过,你仍愿意在那个时候,不幸发酵成另一种美好,你又落入自欺的陷阱,你开始理解愚蠢又罪恶的人们,你甚至,甚至要成为他们,你总是这样,一旦爱上,就什么也不管不顾,但你已然深陷巨大的谎言之中,你被桎梏于意义和价值,害怕自己无法接受自己,害怕到头来一场空,你的挣扎是那么的无力,所以你才要出去走走,所以你才要变成你,如果一个世界没有逻辑,你一定毫不犹豫跳过去,你深知那是你唯一的可能,想起那夜,你游到别的世界,非自主的,那并不是你,你根本找不到自己,是天地间一粒石子,一缕清光,一只转瞬消失在田里的野兔,你会梦,幽幽大唐,江湖侠客,风花雪月,你那么擅长幻想,且信以为真,你以为世界就是那样,所以看到这样的世界,你的不幸接踵而来,你讨厌的庸碌,虚伪,复杂,喜爱的天真,纯粹,真诚,你距离现实太远,每次涉足都是惊心动魄,所以你才落得这般田地,随便来个什么都能让你万劫不复,你多么渴望真诚的另一个对你敞开心扉,因为你知道你的心会为之打开更大的门,你也知道那不可能,真的,你明明就在生活之中,却一直找不到生活,他们说,要那样那样,但你知道,你一定是这样,你只能这样,清凉的夏夜还在向你倾诉更久远的记忆,但你又不能靠着那时候活着,你为了不虚此行或是顺从本能的恐惧,悄然历了一番不痛不痒的情劫,你回头一看,春天来了,公园长椅来了走走了又来的游人,油画一般的紫罗兰从枯藤流下,其实你知道你只是想跨越语言,直到背后的意象,到物自体,到所谓本质,你知道你那么爱它,却把它放到最后,你也知道你不过是陷入一个个语境又出来,最后落入现实的语境而永世再出不来。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2022/05/25/note/Linux/Tools/index.html b/2022/05/25/note/Linux/Tools/index.html new file mode 100644 index 000000000..39e09b1b6 --- /dev/null +++ b/2022/05/25/note/Linux/Tools/index.html @@ -0,0 +1,719 @@ + + + + + + + + + + + + Linux 下的工具 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Linux 下的工具 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

Linux下常用工具总结。

+ + +

软件

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
软件名称
终端Konsole
代码编辑器Code-oss
浏览器FireFox/Chromium
文件管理器Nome或Dolphin
办公软件WPS
邮箱ThunderBird
绘图Inkscape + Gimp
Markdown编辑器Typora
透明代理V2rayA
本地视频播放器MPV或VLC
输入法Fcitx5
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2022/05/25/note/Programming/Language/C/index.html b/2022/05/25/note/Programming/Language/C/index.html new file mode 100644 index 000000000..42ef9f397 --- /dev/null +++ b/2022/05/25/note/Programming/Language/C/index.html @@ -0,0 +1,1114 @@ + + + + + + + + + + + + C Language | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ C Language +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

📚 学习c语言过程中的笔记和个人理解,用来查找和复习。

+
+ + +

image

+

Introduction

+

Our daily life has become inseparable from computers. Whether you are using computers or not, you are using computers consciously or unconsciously, or using the services that computers provide for you. When we are in the use of computer, we are all in the use of computer has some software, so we will go to find the APP, if you searched all the APPs on the market, is there no have the functionality of the APP you want, then you have to write their own one, if you want to do something special, you can’t find the right software, will still have to write their own one.
Learning programming is not about writing software for yourself. It is about learning programming to understand how computers work, what they can or are good at doing, what they can’t or aren’t good at doing, and how computers solve problems.

+
+

—— Weng Kai

+ + + +

Get started

Framework

#include "stdio.h"
int main()
{

return 0;
}
+ +

Any programs programed by C language must have this framework.

+

Output function

You can understand it as function in math, which is a mapping relationship. But they are different.

+

printf is a function, whoes function is output a string by formating printf("......\n") .

+

For example, the Hello, world! :

+
#include "stdio.h"
int main()
{
printf("Hello,world!\n"); // \n make it wrapping
return 0;
}
+ +

printf can print not only a string, but also the value of the variable, but you need to format the variable.

+

Variables and constants

+

The computer carries on the computation, then participates in the computation is the number, participates in the computation in the C language the number is called the quantity, the quantity divides into the variable and the constant.
Use decimal for expression of daily life, because is advantageous for the calculation of the human brain, a computer internal use binary, for convenience of computer calculation, and the computer expression, as a result of bytes in computer internal frequency is higher, if you can use a simple way to express its inner meaning accurately, Will bring us a lot of convenience, so often use hexadecimal expression.
But the number itself remains the same no matter which way it is counted.

+
+

Constants

As the name implies, an invariant quantity that, once initialized, cannot be changed.

+

Variables

As the name implies, a variable quantity that, once defined, can be assigned any value to change its size.

+

The way of difination:

+
int i;
int j = 1;
char k;
float h = 1.2;
double g = 2.0;
+ +

For example, i is the variable itself, int is an integer variable, whose value can only be an integer, while double is a double-precision floating point number, which can represent a decimal.

+

Different variable types have different value types and value ranges.

+

Character variables:

+

Use to store character constants. A character variable can hold only one character constant. The type specifier is char.

+
#include<stdio.h>
int main()
{
char x,y,z;
x = 'b';
y = 'o';
z = 'y';
printf("%c%c%c\n",x,y,z);
return 0;
}
+ +

The result is:

+
boy
+ +

The literal value of a character variable is independent of the character constant it holds, analogous to an integer variable.

+

Character variables can also store integer data, which is universal. You can change %c to %d during input and output.

+

Output and input of a variable

Output

As mentioned above, printf can print a string, and can print the value of a variable, as shown in the following example:

+
#include "stdio.h"
int main()
{
int i = 1;
printf("i = %d\n",i);
i = 2;
printf("After assignment,i = %d\n",i);
return 0;
}
+ +

Notice that printf prints the value of the variable with a %d inside the double quotes, which is the way the variable is formatted.

+

%d indicates that the output variable is an integer.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Variable TypesFormatting Symbols
int%d
unsigned%u
long long%ld
unsigned long long%lu
float%f
double%lf
+

You can use scientific notation when you output, and use %e for formatting symbol.

+
printf("%.nf",sum);
+ +

This line of code can preserve n decimal places.

+

The following are escape characters:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SymbolsWords中文含义
\bbackspace回退一格
\ttab下一个制表位
\nnew line换行
\rreturn回车
\ff换页
+

Input

Similarly, the function scanf can read the input according to a certain format.

+
#include <stdio.h>
int main( ) {

char str[100];
int i;

printf( "Enter a value :");
scanf("%s %d", str, &i);

printf( "\nYou entered: %s %d ", str, i);
printf("\n");
return 0;
}
+ +

scanf() stops reading a string as soon as it encounters a space, so “this is test” is three strings for scanf().

+

Floating point numbers

In mathematics, the numbers on the number line are continuous, and between any two different points, an infinite number can be found, but this is difficult to achieve in computers, so floating point numbers emerged.

+

Floating point numbers are used to represent fractional numbers between whole numbers, but their accuracy is not infinite, nor is their expressability infinite, so a random decimal may not be able to be expressed by a computer.

+

Operation

Operator

+ + + + + + + + + + + + + + + + + + +
MathematicsAddSubstractMultiplyDivideRemainder
C Language+-*/%
+

Relational operator

+ + + + + + + + + + + + + + + + + + + + +
RelationEqualNot EqualGreaterGreater or EqualLess-thanLess-than or Equal
Operator==!=>>=<<=
+

The relational operator evaluates only zeros and ones.

+

Special operator

count ++ and ++ count both mean to add one, but a = count ++; means to assign the value of count to a and then add one, whereas a = ++count; means to add one to the value of count and then assign the result to a. So you end up adding one to count in both cases, but the value of a differ by 1.

+

count -- and -- count in the same way.

+

, is comma operator that generally has only one purpose: to add multiple conditions to an if statement.

+

Conditional operator

count = (<#condition#>)? <#yes#>:<#no#>;
+ +

It is equivalent to an if statement.

+
+

Nesting is not recommended.

+
+

Logical operator

+ + + + + + + + + + + + + + +
Logicandornot
Symbol&&||!
+

The result of logical operation is only 0 or 1.

+

Several statements

if

if (<#condition#>) {
<#statements#>
}
+ +

To judge and to act when the conditions are true.

+
   if (<#condition#>) {
<#statements#>
}
else if (#condition#) {
<#statements#>
}
else if (#condition#) {
<#statements#>
}
……
else {
<#statements#>
}
+ +

We can add else, so we can do something if the condition doesn’t work.

+

The else always matches the nearest if.

+

while

while (<#condition#>) {
<#statements#>
}
+ +

The loop continues until the condition fails.

+

dowhile

do {
<#statements#>
} while (<#condition#>);
+ +

The loop continues until the condition fails.

+

The difference with a while loop is that a dowhile does something and then evaluates the condition, whereas a while evaluates the condition and then loops. While might not do a loop at all, if the condition is not satisfied in the first place.

+

switch

switch (<#expression#>) {
case <#constant#>:
<#statements#>
break;
case <#constant#>:
<#statements#>
break;
......
default:
break;
}
+ +

switch is judgment statement, the <#expression#> is constant expression that must be a integral type or enum-type.

+

The essence of such a statement is the program evaluates this expression and then compares it to each case at a time. The action after the case is executed when equal.

+

There are an infinite number of cases, each followed by a value to be compared with and a colon.

+

The variables to be compared must be of the same type.

+

When all the case is false, the program will do the action after default . So there can be nothing after defalut.

+

For example:

+
#include <stdio.h>
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
switch(a){
case 1: printf("Monday\n"); break;
case 2: printf("Tuesday\n"); break;
case 3: printf("Wednesday\n"); break;
case 4: printf("Thursday\n"); break;
case 5: printf("Friday\n"); break;
case 6: printf("Saturday\n"); break;
case 7: printf("Sunday\n"); break;
default:printf("error\n"); break;
}
return 0;
}
+ +

for

for (<#initialization#>; <#condition#>; <#increment#>) {
<#statements#>
}
+ +

for loop applies to loops with a defined number of cycles, such as traverse.

+

There are three sections in parenthesis, separated with semicolons, which are respectively initialization, conditions for loop to proceed and actions to be performed in each cycle.

+

Miscellaneous

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key wordsImplication
InfInfinity
-InfNegative infinity
nanInvalid number
fabs(<#expression#>)Absolute value
breakJump out of the loop
continueEnd the cycle
+

Function and customizing function

At the beginning of C language program, the implication of #include <stdio.h> is including a function library named stdio.h and then the program can call functions in the library. Both the printf and the scanf used in the previous paragraph are functions of the library.

+

In practice, we often encounter repeated operations, we can copy this code to complete the repeated action, but code copy is a poor quality of the program, because the maintenance may need to change too many places.

+

You can solve this problem by customizing functions:

+
<#type#> (<#type#>,<#type#>,……){
<#statement#>
return 0; //Depends on the function type,Also visable as:return;
}
+ +
    +
  • A function can have multiple return or none. However, multiple return are not recommended for easy modification.

    +
  • +
  • Each function has its own variable space, namely {} (block), which is independent of each other. Local variables are limited by the block they are in. If the inside of a block has the same name as the outside of a block, the inside of a block takes precedence.

    +
  • +
  • When a function is called, it can only pass values to functions, not variables to functions. That is, after passing a variable to a function, the function will read the value of the variable for operation, but will not change the value of the variable.

    +
  • +
  • The first line of a function with a semicolon placed before the entire program code is called a function prototype declaration. The purpose is to tell the compiler what type the function is before it encounters it.

    +
  • +
+

Array

Defination

+

type of variables + character + [number of variables]

+
+

For example:

+
int a[10];
+ +

An array is a container that, once created, cannot be resized, is internally ordered, and can appear on both sides of an assignment symbol.

+

The index of an array is counted from 0.

+

You can think of it as a sequence in mathematics.

+

Use

Integration initialization is easy to use:

+
int a[3] = {1,3,5,};
int a[13] = {[0]=2,[3]=5,6,7,[9]=0,}; //(C99 only)
+ +

If you don’t know how many cells there are in an array, you can use sizeof(a)/sizeof(a[0]) to represent the number of cells in the array, so that you don’t need to change the number of cells in the array.

+

Multidimensional array

A multidimensional array is actually a multidimensional matrix, and the footer increases accordingly.

+

Initialization:

+
int a[][5] = {
{0,1,2,3,4},
{2,3,4,5,6},
}
+ +

The number of columns must be given and the number of rows can be counted by the compiler itself.

+

Pointer

Address

Each variable has an address in the computer where it is stored. The value of a variable can change, but its address is constant. The following code can be used to view the address of a variable.

+
int i = 1;
printf("%d\n",&i);
+ +

& is the address to access the variable;

+

* is the variable on the access address.

+

Defination

A pointer is a variable, but it cannot be used independently. It must point to a variable. In this case, the value of the pointer variable is the address of the variable to which it points.

+

Use

int *p = &i;
+ +

In this case, p is a pointer to the address of variable i. So the value of p is the address of i, and the value of i can be accessed (read and write) by *p.

+

The * at definition is not the same as the * at access, and the first is only used to distinguish whether a pointer variable or a normal variable is being defined.

+

Here is an example of using a pointer to complete a call to exchange the values of two variables.

+
#include <stdio.h>
void exchange(int *a,int *b)
{
int i = *a;
*a = *b;
*b = i;
}
int main()
{
int a = 5;
int b = 6;
exc(&a, &b);
printf("a = %d,b = %d\n",a,b);

return 0;
}
+ +

This is a clever use of the function, we know that the function cannot input variable parameters, so this code defines the address of the pointer to the variable, the function input pointer variable is also the address of the variable, inside the function by adding a pointer to access the variable, and then achieve the purpose of the function to modify the variable.

+
+

In addition, pointers are often used when a function needs to return multiple values.

+
+

Arrays are special Pointers

#include <stdio.h>
int main()
{
int a[] = {1,2,3,};
printf("%p\n",a);
return 0;
}
+ +

The result of this code is:

+
0x7ffcac420c3c
+ +

We can see that the array variable a is itself an address, so when we want to use a pointer to array a, we should write int *p = a, without &. But the array unit is variable, therefore int *p = &a[0], at the same time, a == &a[0],&a[x] == &a[0] + 4x = a + 4x(when a is integer).

+

An array is a pointer to a constant and therefore cannot be assigned.

+

Pointer to a constant (const)

int i;
int const *p = &i; // 1
int *const p = &i; // 2
+ +

For the above code, you can think of the following code:

+
int i;
int const (*p) = &i; // 1
int *(const p) = &i; // 2
+ +

1 indicates that the variable at the address pointed to by the pointer p cannot be modified by the pointer.

+

2 indicates that the address (variable’s address certainly) pointed to by p cannot be changed.

+
+

The first whole to the right of const cannot be modified

+
+
const int a[] = {1,2,3,};
+ +

The above code indicates that each cell is const, so it can be used to protect an array when a function argument is entered.

+

Address of a pointer

int a[];
int *p = a;
+ +

*p = a = a[0],

+

*(p+1) = a[1],

+

*(p+2) = a[2],

+

……,

+

*(p+n) = a[n].

+

Allocating Memory Space

The malloc function applies space in bytes from memory, returns void *, converts the desired type, and finally frees the memory. Format, such as:

+
int a[n] = (int *)malloc(n * sizeof(int));
+ +

If the application fails, 0 or NULL is returned.

+

When you no longer use the requested memory space, you should use the free function to free the memory space:

+
free(a[n]);
+ +

String

Overview

Char word[] = {'H','D','e','!'};
+ +

Such an array is an array of characters, but it is not a string, because it cannot be evaluated as a string.

+
Char word[] = {'H','D','e','!','\0'};
+ +

Followed by \0, then word is a string.

+

0 = '\0' != '0'

+

0 marks the end of the string, but this 0 is not part of the string.

+

Strings exist as Arrays and are accessed as arrays or Pointers, but more often as Pointers.

+

string.h has a number of functions that handle strings.

+

String variables:

+
char *str = "hello";
char word[] = "hello";
char line[10] = "hello";
+ +
+

“hello”

+
+

The compiler will turn this into an array of characters somewhere, and the length of the array is 6, because the compiler will put a 0 after it to make it a string.

+

Literals of strings can be used to initialize character arrays.

+
#include "stdio.h"
int main()
{
int i = 0;
char *s = "hello world";
// s[0] = 'B';
char *s2= "hello world";
char s3[] = {"hello world"};
// s3[0] = 'b';

printf("&i = %p\n", &i);
printf("s = %p\n", s);
printf("s2 = %p\n", s2);
printf("Here is s[0] = %c\n", s[0]);
printf("Here is s3[0] = %c\n",s3[0]);
return 0;
}
+ +

The above code runs as follows:

+
&i = 0x7fffa827bcf4
s = 0x55c7d8f64004
s2 = 0x55c7d8f64004
Here is s[0] = h
Here is s3[0] = h
+ +

You can see that the local variable i is far from where the pointer s is pointing. The address of the variable i is very far back, and the pointer is very far forward. Near the front are important parts of the computer that are not allowed to be modified, such as plus s[0] = 'B' ‘, and the result is:

+
1869 segmentation fault  ./a.out
+ +

The program attempted to reassign the initialized string s. The error “segmentation fault“ was reported, meaning that the program was attempting to rewrite the value at 0x55c7d8f64004, which posed a threat to the computer and was not allowed.

+

In fact, for char *s = "hello world"; pointer s is initialized to point to a string constant, which should actually be const char *s = "hello world";, but for historical reasons, compilers accept writing without const, and try to modify the string to which s refers, with serious consequences.

+

s3 is an array, and the strings inside are local variables that can be modified, plus S3[0] = 'b':

+
&i = 0x7fff28d5dd64
s = 0x559da8ac6004
s2 = 0x559da8ac6004
Here is s[0] = h
Here is s3[0] = b
+ +

There are two ways to define a string: pointer or array.

+

Arrays know the address of strings, Pointers don’t.

+

A char * or int * is not necessarily a string. It is meant to be a pointer to a character or an array of characters.

+

A char * or int * is a string only if the array of characters to which the pointer points has a zero at the end.

+
char *t = "title";
char *s;
s = t;
+ +

For the above code, we have two Pointers, t and s. First, t points to the string “title”, and then we assign a value to s. The result is that s also points to the same string, instead of creating a new string.

+

Input and output of string

For printf and scanf, you can use %s to input and output strings.

+

Each %s in scanf is read until a SPACE or ENTER, which is not safe because you do not know exactly how many characters to read, therefore, the following code is used:

+
char s[8];
scanf("%7s",s);
+ +

Array of strings

char a[][10];
char *a[];
+ +

The first line refers to a as a two-dimensional array, and the second line refers to a as a pointer array. Each unit in the array is a pointer to a string.

+

Each element of the character array holds one character, plus the 0 at the end. An array of length n can hold n-1 characters.

+

Multiple loops are required to input and output all elements of multiple dimensions, whether string arrays or integer arrays.

+

An array is a matrix that can be used to store variables or character variables. All input and output need to be looped, but there are two types of input and output for character arrays.

+

Input and output single characters in format %c

#include <stdio.h>
int main()
{

int x,i,j;
char a[][20] = {
"",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday",
};
printf("Please input the month:\n");
scanf("%d",&x);
if (x > 0 && x < 8) {
for (i = x ; i < x + 1; i ++) {
for (j = 0; j < 20; j ++) {
printf("%c",a[i][j]);
}
}
}
else printf("Error");
printf("\n");
return 0;
}
+ +

Input and output whole array with format %s

#include <stdio.h>
int main()
{
int x,i,j;
char a[][20] = {
"",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday",
};
printf("Please input the month:\n");
scanf("%d",&x);
if (x > 0 && x < 8) {
printf("%s",a[x]);
}
else printf("Error");
printf("\n");
return 0;
}
+ +
+

Note that input characters with %s that encounter a SPACE, RNTER, and TAB end the string input, so C provides the input function gets() and the output function puts() that are best for strings.

+
+

gets(char *s[]) function is to enter a string from the keyboard that can contain Spaces and end with a ENTER newline character.

+

puts(char *s[]) or puts(string s)function prints a string from the character array to the screen and converts the end-of-string flag to a newline character.

+

In addition, when %s prints a string, it keeps one dimension, and the compiler automatically inputs or outputs all strings in that dimension. Gets is the same as puts.

+

Input and output of character data

Putchar(parameter)

Paremeters can be numerical values, character constants, character variables, and arithmetic or character expressions, but the final output is a character.

+

getchar()

Type a character from the keyboard.

+

String function

strlen

#include<stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
char line[] = "hello";
printf("%lu\n", strlen(line));
printf("%lu\n", sizeof(line));
return 0;
}
+ +

The running result is:

+
5
6
+ +

So strlen is string Length, which returns the length of the string.

+

strcmp

The function is to compare the size of two strings, and the result of the comparison is expressed by the value returned. 0 means they are equal, 1 means the former greater, and -1 means the latter greater.

+

strcpy

It means string copy,the format is:

+
char *strcpy(char *restrict dst, const *restrict src);
+ +

Its function is to copy the src string to dst.
restrict means that src and dst cannot overlap.
The source is in the back, and the copying destination is in the front.
Return dst so that the function itself can be evaluated.
General usage:

+
char *dst = (char)malloc(strlen(src)+1);
strcpy (dst,src)
+ +

strcat

The function is to link one string to another string.

+
+

Another version:

+
char *strncpy(char *restrict dst, const *restrict src,size_t n);
char *strncat(char *restrict s1, const *restrict s2,size_t n);
int strncmp(const char *s1, const char *s2, size_t n);
+ +

The first two are to limit the length of the copied string, eliminating security issues that are neither out of bounds.

+

The last one is to compare the first n characters.

+
+

strchr

To find a character in a string.

+
#include<stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
char s[] = "hello,world!";
char *p = strchr(s,'l');
printf("%s\n",p);
char c = *p;
*p = '\0';
printf("%c\n",c);
char *p3 = (void*)malloc(strlen(s)+1);
strcpy(p3, s);
printf("%s\n",p3);
free(p3);
char *p1 = strchr((p+1), 'l');
char *p2 = strchr((p1+1), 'l');
printf("%s\n",p1);
printf("%s\n",p2);

return 0;
}
+ +

The running results are as follows:

+
llo,world!
l
he
lo,world!
ld!
+ +

Enumeration

enum type {num_0,num_1,num_2,……,num_n};
+ +

You can use the name in curly braces, where num_0 through num_n represents the constants 0 through n.

+

For instance:

+
enum colors {red,yellow,green};
// Here,red == 0, yellow == 1, green == 2
+ +
enum type {num_0,num_1,num_2,……,num_n, number of type};
+ +

That’s just right. The last number of type is exactly the number of type. It’s a little trick.

+

Data structure

#include <stdio.h>
struct date {
int day;
int month;
int year;
};
//Structure type Declaration
struct date {
int day;
int month;
int year;
} today;
//This is another form

int main()
{
struct date today;

today.day = 25;
today.month = 3;
today.year = 2021;
today = (struct date){25,3,2021};

printf("Today is %i-%i-%i.\n",
today.year,today.month,today.day);

return 0;
}
+ +

This means that you declare a data structure type, and when you use it, you define a variable that contains all the variables in the data structure.

+

The structure members of a data structure do not have to be of the same variable type, and an array can only be of one type.

+

Data structures can perform structure operations .

+

Assigning values to or between structure variables is a one-to-one correspondence; the former requires curly braces.

+

The name of the structure variable is not the address of the structure variable, so you need to define the pointer using &.

+

A data structure can be entered as a function parameter, but unlike an array, the entire structure is passed into the function as the value of the parameter, creating a new structure variable inside the function and copying the value of the caller’s structure.

+

You can also return a struct.

+

Custom data types

A typedef can give an alias to a data type.

+
typedef long int64_t;
typedef struct ADate {
int month;
int day;
int year;
} Date;

int64_t i = 100000000000;
Date d = {9, 1, 2005, };
+ +

Union

带参数的宏一定要有括号,结尾不能加分号。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2022/05/25/note/Programming/Language/Java/index.html b/2022/05/25/note/Programming/Language/Java/index.html new file mode 100644 index 000000000..51eadac6b --- /dev/null +++ b/2022/05/25/note/Programming/Language/Java/index.html @@ -0,0 +1,743 @@ + + + + + + + + + + + + JAVA | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ JAVA +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + image + +
+

📚 学习 Java 过程中的笔记和个人理解。

+
+ + +

包裹类型

Java的系统类库中有一些包裹类型,其封装了一些比较好用的函数。

+
package com.company;

//import javax.swing.*;
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
final int SIZE = 3;
Integer a;

System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);
System.out.println(Character.isDigit('a'));
System.out.println(Character.isDigit('4'));
System.out.println(Character.toLowerCase('I'));

}
}
+ +

输出结果为:

+
-2147483648
2147483647
false
true
i
+ +

Math 类型

abs

+
package com.company;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println(Math.abs(-12));
}
}
+ +

输出结果为放入数字的绝对值:

+
12
+ +

round

+
package com.company;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println(Math.round(10.349));
}
}
+ +

输出结果为将浮点数的小数部分四舍五入后得到的结果:

+
10
+ +

random

+
package com.company;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println((int)(Math.random()*100));
}
}
+ +

这是随机产生一个范围为0到1的浮点数,可以通过以上代码得到随机范围内的整数。
pow

+
package com.company;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println(Math.pow(2, 20));
}
}
+ +

pow是计算某个数的某次方,计算的类型是浮点数:

+
1048576.0
+ +

输入字符串

in.next():读入一个单词,结束的标志是空格(包括空格,tab,回车)。

+

in.nextLine():读入一整行。

+

字符串操作

比较两个字符串是否相等: s1.equals(s2)

+

比较两个字符串的大小: s1.comnpareTo(s2) ,输出结果是数字,负数,正数,或者零。其本质是将两个字符串对应的Unicode码分别相加再将二者相减。

+

访问字符串中的单个字符: s.charAt(index) ,返回在index上的单个字符,index的范围是0到length()-1,第一个字符的index是0,与数组相同。但是不能用for-each循环来遍历字符串。

+

得到子串: s.substring(n) ,得到从n 号位置到末尾的全部内容;s.substring(b,e) 得到从b 号位置到e 号位置之前的内容。

+

寻找字符: s.indexOf(c) ,找到字符c 所在的位置,-1 表示不存在;s.indexOf(c,n) ,从n号位置开始寻找c ;s.indexOf(t) ,找到字符串t 所在的位置;s.lastIndexOf(c) , s.lastIndexOf(c,n) , s.lastIndexOf(t) ,从==右边==开始找。返回值都是所找到的位置。

+

当需要寻找的字符存在数量不止一个时,可用以下代码将其全部找出:

+
package com.company;

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = new String("12455323412198467182371263142867351923107241");
for (int i = -1; i < s.length(); )
{
i = s.indexOf('2', i+1);
if (i == -1)
break;
System.out.println(i);
}
}
}
+ +

输出结果为:

+
1
6
10
19
23
28
36
41
+ +

成员函数与成员变量

成员函数调用自身的成员函数时会自动带上this

+

Java中本地变量未被赋予初始值则不能被使用。

+

构造函数没有返回类型。

+

构造函数可以重载。

+
package diyizhou;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Fraction a = new Fraction(in.nextInt(), in.nextInt());
Fraction b = new Fraction(in.nextInt(),in.nextInt());
a.print();
b.print();
a.plus(b).print();
a.multiply(b).plus(new Fraction(5,6)).print();
a.print();
b.print();
System.out.println(a.toDouble());
in.close();
}
}

class Fraction {

int denominator = 0;
int numberator = 0;

Fraction(int numberator, int denominator)
{
if (denominator > 0){
this.denominator = denominator;
this.numberator = numberator;
}
else{
System.out.println("分母必须为大于零的数!");
System.exit(0);
}
}
double toDouble()
{
return numberator*1.0/denominator;
}
Fraction plus(Fraction r)
{
if (r.denominator != this.denominator)
{
return new Fraction(this.numberator*r.denominator + this.denominator*r.numberator, this.denominator*r.denominator);
}
else
{
return new Fraction(this.numberator + r.numberator, this.denominator);
}
}
Fraction multiply(Fraction r)
{
return new Fraction(this.numberator*r.numberator, this.denominator*r.denominator);
}
void print() {
int min;
if (this.denominator != 0 && this.numberator == this.denominator) {
System.out.println("1");
return;
}
else if (numberator == 0)
{
System.out.println("0");
return;
}
else
{
min = Math.min(this.numberator, this.denominator);
}
if (min > 1){
for (int i = 2; i <= min; i++) {
if (this.numberator % i == 0 && this.denominator % i == 0)
{
this.numberator /= i;
this.denominator /= i;
i = 2;
}
}
}
System.out.println(this.numberator + "/" + this.denominator);
}
}
+ +

对象的交互

通过同一个类创建了两个对象,那么两个对象应该是相互独立的,为了使两个对象有交互作用,就必须有“第三只手”来操作,那便是使一个新的类包含这两个对象,也就是说在新类中创建两个需要使用的对象,通过新类来在操作两个对象的交互。

+
package clock;

public class Display {

private int value = 0;
private int limit = 0;
Display(int limit){
this.limit = limit;
}

public void increase()
{
value ++;
if (value == limit)
{
value = 0;
}
}

public int getValue(){
return value;
}

public static void main(String[] args) {
Display h = new Display(24);

for (;;)
{
h.increase();
System.out.println(h.getValue());
}
}
}
+ +
package clock;

public class Clock {
private Display hour = new Display(24);
private Display minute = new Display(60);

public void start ()
{
while (true){
minute.increase();
if ( minute.getValue() == 0)
{
hour.increase();
}
System.out.printf("%02d:%02d\n", hour.getValue(), minute.getValue());
}
}
public static void main(String[] args)
{
Clock clock = new Clock();
clock.start();
}
}
+ +

访问权限

成员变量应当是私有的,用以保护成员变量不被外界随意的修改,让其按照类的设计者的意图运作。

+

private:只类内可以访问,但同一个类的不同对象也能访问,类内指的是类的成员函数和定义初始化。

+

public: 随意访问。

+

friendly: 未加访问权限,则默认是friendly,意思是只允许在同一个包的其他类访问。

+

public的类可以在别的编译单元中使用。

+

public的类必须在自己的文件中,即文件名与类名必须相同。

+

一个编译单元中只能有一个类是public,这是为了让每一个编译单元都有单一的公共接口,用public类来表现,该接口可以按要求包含众多支持包访问权限的类。

+

Static

static:JAVA中的类变量与C++中的静态成员变量相似,类变量属于类而不属于任何一个单一的对象,同一个类的类变量改变之后,无论以那种方式访问类变量,其值都是一样的。

+
    +
  • 函数前的static意为此函数不属于任何对象,而是属于这个类。static函数中可以直接调用或使用对象其他的static函数,但对于非static函数,只能通过对象调用。但是在static函数中调用的static函数里也不能直接访问非static成员。
  • +
  • 类函数中没有this, 因为this是用于标识究竟是哪个对象在调用或访问。
  • +
+

继承与多态

Java中的对象变量都是多态的,能保存不止一种类型的对象。比如声明类型的对象或者其子类的对象。
事实上,多态的本质是为了解决类型嵌套的问题。

+

向上造型: 当把子类的对象赋给父类的变量的时候,就发生了向上造型。

+

造型

子类的对象可以赋值给父类的变量,但父类的对象不能赋值给子类的变量。

+

造型时并没有转换类型,而是指针重新指向另一个类型。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2022/05/25/note/Programming/Language/cpp-1/index.html b/2022/05/25/note/Programming/Language/cpp-1/index.html new file mode 100644 index 000000000..0bc0057e0 --- /dev/null +++ b/2022/05/25/note/Programming/Language/cpp-1/index.html @@ -0,0 +1,1890 @@ + + + + + + + + + + + + C Plus Plus - Basic | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ C Plus Plus - Basic +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

📚 学习c++过程中的一些笔记和个人想法,用以查找

+
+ + +

image

+

一、初识

1.1 注释

作用:在代码中加一些说明和解释,方便自己或其他程序员程序员阅读代码

+

两种格式

+
    +
  1. 单行注释// 描述信息
      +
    • 通常放在一行代码的上方,或者一条语句的末尾,对该行代码说明
    • +
    +
  2. +
  3. 多行注释/* 描述信息 */
      +
    • 通常放在一段代码的上方,对该段代码做整体说明
    • +
    +
  4. +
+
+

提示:编译器在编译代码时,会忽略注释的内容

+
+

1.3 变量

作用:给一段指定的内存空间起名,方便操作这段内存

+

语法数据类型 变量名 = 初始值;

+

示例:

+
#include<iostream>
using namespace std;
int main() {
//变量的定义
//语法:数据类型 变量名 = 初始值
int a = 10;
cout << "a = " << a << endl;
return 0;
}
+ +
+

注意:cpp在创建变量时,必须给变量一个初始值,否则会报错

+
+

1.4 常量

作用 :用于记录程序中不可更改的数据
cpp定义常量两种方式

+
    +
  1. #define 宏常量: #define 常量名 常量值
      +
    • 通常在文件上方定义,表示一个常量
    • +
    +
  2. +
  3. const 修饰的变量 const 数据类型 常量名 = 常量值
      +
    • 通常在变量定义前加关键字const,修饰该变量为常量,不可修改
      示例:
    • +
    +
  4. +
+
//1、宏常量
#define day 7
int main() {
cout << "一周里总共有 " << day << " 天" << endl;
//day = 8; //报错,宏常量不可以修改
//2、const修饰变量
const int month = 12;
cout << "一年里总共有 " << month << " 个月份" << endl;
//month = 24; //报错,常量是不可以修改的
return 0;
}
+ +

1.5 关键字

作用: 关键字是 cpp中预先保留的单词(标识符)

+
    +
  • 在定义变量或者常量时候,不要用关键字
  • +
+

cpp关键字如下:

+
+

提示:在给变量或者常量起名称时候,不要用 cpp得关键字,否则会产生歧义

+
+

1.6 标识符命名规则

作用:cpp规定给标识符(变量、常量)命名时,有一套自己的规则

+
    +
  • 标识符不能是关键字
  • +
  • 标识符只能由字母、数字、下划线组成
  • +
  • 第一个字符必须为字母或下划线
  • +
  • 标识符中字母区分大小写
  • +
+
+

建议:给标识符命名时,争取做到见名知意的效果,方便自己和他人的阅读

+
+

二、数据类型

cpp规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存

+

2.1 整型

作用:整型变量表示的是整数类型的数据
cpp中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
数据类型占用空间取值范围
short(短整型)2字节(-2^15 ~ 2^15-1)
int(整型)4字节(-2^31 ~ 2^31-1)
long(长整形)Windows为4字节,Linux为4字节(32位),8字节(64位)(-2^31 ~ 2^31-1)
long long(长长整形)8字节(-2^63 ~ 2^63-1)
+

2.2 sizeof关键字

作用: 利用sizeof关键字可以统计数据类型所占内存大小

+

语法: sizeof( 数据类型 / 变量)

+

示例:

+
int main() {
cout << "short 类型所占内存空间为: " << sizeof(short) << endl;
cout << "int 类型所占内存空间为: " << sizeof(int) << endl;
cout << "long 类型所占内存空间为: " << sizeof(long) << endl;
cout << "long long 类型所占内存空间为: " << sizeof(long long) << endl;
return 0;
}
+ +
+

结论short < int <= long <= long long

+
+

2.3 实型(浮点型)

作用:用于表示小数
浮点型变量分为两种:

+
    +
  1. 单精度float

    +
  2. +
  3. 双精度double
    两者的区别在于表示的有效数字范围不同。

    + + + + + + + + + + + + + + + + + + + + + + + +
    数据类型占用空间有效数字范围
    float4字节7位有效数字
    double8字节15~16位有效数字
    示例:
    +
  4. +
+
int main() {
float f1 = 3.14f;
double d1 = 3.14;
cout << f1 << endl;
cout << d1<< endl;
cout << "float sizeof = " << sizeof(f1) << endl;
cout << "double sizeof = " << sizeof(d1) << endl;
//科学计数法
float f2 = 3e2; // 3 * 10 ^ 2
cout << "f2 = " << f2 << endl;
float f3 = 3e-2; // 3 * 0.1 ^ 2
cout << "f3 = " << f3 << endl;
return 0;
}
+ +

2.4 字符型

作用: 字符型变量用于显示单个字符
语法: char ch = 'a';

+
+

注意1:在显示字符型变量时,用单引号将字符括起来,不要用双引号
注意2:单引号内只能有一个字符,不可以是字符串

+
+
    +
  • c和cpp中字符型变量只占用1个字节
  • +
  • 字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元
    示例:
  • +
+
int main() {
char ch = 'a';
cout << ch << endl;
cout << sizeof(char) << endl;
//ch = "abcde"; //错误,不可以用双引号
//ch = 'abcde'; //错误,单引号内只能引用一个字符
cout << (int)ch << endl; //查看字符a对应的ASCII码
ch = 97; //可以直接用ASCII给字符型变量赋值
cout << ch << endl;
system("pause");
return 0;
}
+ +

ASCII码表格:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ASCII控制字符ASCII字符ASCII字符ASCII字符
0NUT32(space)64@96
1SOH33!65A97a
2STX3466B98b
3ETX35#67C99c
4EOT36$68D100d
5ENQ37%69E101e
6ACK38&70F102f
7BEL39,71G103g
8BS40(72H104h
9HT41)73I105i
10LF42*74J106j
11VT43+75K107k
12FF44,76L108l
13CR45-77M109m
14SO46.78N110n
15SI47/79O111o
16DLE48080P112p
17DCI49181Q113q
18DC250282R114r
19DC351383S115s
20DC452484T116t
21NAK53585U117u
22SYN54686V118v
23TB55787W119w
24CAN56888X120x
25EM57989Y121y
26SUB58:90Z122z
27ESC9;91[123{
+

ASCII 码大致由以下两部分组成:

+
    +
  • ASCII 非打印控制字符: ASCII 表上的数字 0-31 分配给了控制字符,用于控制像打印机等一些外围设备。
  • +
  • ASCII 打印字符:数字 32-126 分配给了能在键盘上找到的字符,当查看或打印文档时就会出现。
  • +
+

2.5 转义字符

作用: 用于表示一些不能显示出来的ASCII字符
现阶段我们常用的转义字符有:\n \\ \t

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
转义字符含义ASCII码值(十进制)
\a警报007
\b退格(BS) ,将当前位置移到前一列008
\f换页(FF),将当前位置移到下页开头012
\n换行(LF) ,将当前位置移到下一行开头010
\r回车(CR) ,将当前位置移到本行开头013
\t水平制表(HT) (跳到下一个TAB位置)009
\v垂直制表(VT)011
\\代表一个反斜线字符”"092
'代表一个单引号(撇号)字符039
"代表一个双引号字符034
?代表一个问号063
\0数字0000
\ddd8进制转义字符,d范围0~73位8进制
\xhh16进制转义字符,h范围09,af,A~F3位16进制
示例:
+
int main() {
cout << "\\" << endl;
cout << "\tHello" << endl;
cout << "\n" << endl;
return 0;
}
+ +

2.6 字符串型

作用:用于表示一串字符
两种风格

+
    +
  1. C风格字符串char 变量名[] = "字符串值"
    示例:
  2. +
+
int main() {
char str1[] = "hello world";
cout << str1 << endl;
return 0;
}```
> 注意:C风格的字符串要用双引号括起来
2. **cpp风格字符串**: `string 变量名 = "字符串值"`
示例:
```cpp
int main() {
string str = "hello world";
cout << str << endl;
return 0;
}
+ +
+

注意:cpp风格字符串,需要加入头文件#include <string>

+
+

2.7 布尔类型 bool

作用: 布尔数据类型代表真或假的值
bool类型只有两个值:

+
    +
  • true — 真(本质是1)
  • +
  • false — 假(本质是0)
    bool类型占1个字节大小
    示例:
  • +
+
int main() {
bool flag = true;
cout << flag << endl; // 1
flag = false;
cout << flag << endl; // 0
cout << "size of bool = " << sizeof(bool) << endl; //1
return 0;
}
+ +

2.8 数据的输入

作用:用于从键盘获取数据
语法: cin >> 变量
示例:

+
int main(){
//整型输入
int a = 0;
cout << "请输入整型变量:" << endl;
cin >> a;
cout << a << endl;
//浮点型输入
double d = 0;
cout << "请输入浮点型变量:" << endl;
cin >> d;
cout << d << endl;
//字符型输入
char ch = 0;
cout << "请输入字符型变量:" << endl;
cin >> ch;
cout << ch << endl;
//字符串型输入
string str;
cout << "请输入字符串型变量:" << endl;
cin >> str;
cout << str << endl;
//布尔类型输入
bool flag = true;
cout << "请输入布尔型变量:" << endl;
cin >> flag;
cout << flag << endl;
system("pause");
return EXIT_SUCCESS;
}
+ +

三、运算符

作用: 用于执行代码的运算
本章我们主要讲解以下几类运算符:

+ + + + + + + + + + + + + + + + + + + + + + + +
运算符类型作用
算术运算符用于处理四则运算
赋值运算符用于将表达式的值赋给变量
比较运算符用于表达式的比较,并返回一个真值或假值
逻辑运算符用于根据表达式的值返回真值或假值
+

3.1 算术运算符

作用: 用于处理四则运算
算术运算符包括以下符号:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
运算符术语示例结果
+正号+33
-负号-3-3
+10 + 515
-10 - 55
*10 * 550
/10 / 52
%取模(取余)10 % 31
++前置递增a=2; b=++a;a=3; b=3;
++后置递增a=2; b=a++;a=3; b=2;
前置递减a=2; b=–a;a=1; b=1;
后置递减a=2; b=a–;a=1; b=2;
示例1:
+
//加减乘除
int main() {
int a1 = 10;
int b1 = 3;
cout << a1 + b1 << endl;
cout << a1 - b1 << endl;
cout << a1 * b1 << endl;
cout << a1 / b1 << endl; //两个整数相除结果依然是整数
int a2 = 10;
int b2 = 20;
cout << a2 / b2 << endl;
int a3 = 10;
int b3 = 0;
//cout << a3 / b3 << endl; //报错,除数不可以为0
//两个小数可以相除
double d1 = 0.5;
double d2 = 0.25;
cout << d1 / d2 << endl;
return 0;
}
+ +
+

总结:在除法运算中,除数不能为0
示例2:

+
+
//取模
int main() {
int a1 = 10;
int b1 = 3;
cout << 10 % 3 << endl;
int a2 = 10;
int b2 = 20;
cout << a2 % b2 << endl;
int a3 = 10;
int b3 = 0;
//cout << a3 % b3 << endl; //取模运算时,除数也不能为0
//两个小数不可以取模
double d1 = 3.14;
double d2 = 1.1;
//cout << d1 % d2 << endl;
return 0;
}
+ +
+

总结:只有整型变量可以进行取模运算
示例3:

+
+
//递增
int main() {
//后置递增
int a = 10;
a++; //等价于a = a + 1
cout << a << endl; // 11
//前置递增
int b = 10;
++b;
cout << b << endl; // 11
//区别
//前置递增先对变量进行++,再计算表达式
int a2 = 10;
int b2 = ++a2 * 10;
cout << b2 << endl;
//后置递增先计算表达式,后对变量进行++
int a3 = 10;
int b3 = a3++ * 10;
cout << b3 << endl;
return 0;
}
+ +
+

总结:前置递增先对变量进行++,再计算表达式,后置递增相反

+
+

3.2 赋值运算符

作用: 用于将表达式的值赋给变量
赋值运算符包括以下几个符号:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
运算符术语示例结果
=赋值a=2; b=3;a=2; b=3;
+=加等于a=0; a+=2;a=2;
-=减等于a=5; a-=3;a=2;
*=乘等于a=2; a*=2;a=4;
/=除等于a=4; a/=2;a=2;
%=模等于a=3; a%2;a=1;
示例:
+
int main() {
//赋值运算符
// =
int a = 10;
a = 100;
cout << "a = " << a << endl;
// +=
a = 10;
a += 2; // a = a + 2;
cout << "a = " << a << endl;
// -=
a = 10;
a -= 2; // a = a - 2
cout << "a = " << a << endl;
// *=
a = 10;
a *= 2; // a = a * 2
cout << "a = " << a << endl;
// /=
a = 10;
a /= 2; // a = a / 2;
cout << "a = " << a << endl;
// %=
a = 10;
a %= 2; // a = a % 2;
cout << "a = " << a << endl;
return 0;
}
+ +

3.3 比较运算符

作用:用于表达式的比较,并返回一个真值或假值
比较运算符有以下符号:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
运算符术语示例结果
***相等于4 *** 30
!=不等于4 != 31
<小于4 < 30
>大于4 > 31
<=小于等于4 <= 30
>=大于等于4 >= 11
示例:
+
int main() {
int a = 10;
int b = 20;
cout << (a *** b) << endl; // 0
cout << (a != b) << endl; // 1
cout << (a > b) << endl; // 0
cout << (a < b) << endl; // 1
cout << (a >= b) << endl; // 0
cout << (a <= b) << endl; // 1
return 0;
}
+ +
+

注意:C和cpp 语言的比较运算中, “真”用数字“1”来表示, “假”用数字“0”来表示

+
+

3.4 逻辑运算符

作用: 用于根据表达式的值返回真值或假值
逻辑运算符有以下符号:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
运算符术语示例结果
!!a如果a为假,则!a为真; 如果a为真,则!a为假。
&&a && b如果a和b都为真,则结果为真,否则为假。
\\
示例1: 逻辑非
+
//逻辑运算符  --- 非
int main() {
int a = 10;
cout << !a << endl; // 0
cout << !!a << endl; // 1
return 0;
}
+ +
+

非:真变假,假变真
示例2: 逻辑与

+
+
//逻辑运算符  --- 与
int main() {
int a = 10;
int b = 10;
cout << (a && b) << endl;// 1
a = 10;
b = 0;
cout << (a && b) << endl;// 0
a = 0;
b = 0;
cout << (a && b) << endl;// 0
return 0;
}
+ +
+

与: 同时真则为真,否则皆为假
示例3:逻辑或

+
+
//逻辑运算符  --- 或
int main() {
int a = 10;
int b = 10;
cout << (a || b) << endl;// 1
a = 10;
b = 0;
cout << (a || b) << endl;// 1
a = 0;
b = 0;
cout << (a || b) << endl;// 0
return 0;
}
+ +
+

或:同时为假则假,否则为真

+
+

四、程序流程结构

C/cpp支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构

+
    +
  • 顺序结构: 程序按顺序执行,不发生跳转
  • +
  • 选择结构: 依据条件是否满足,有选择的执行相应功能
  • +
  • 循环结构: 依据条件是否满足,循环多次执行某段代码
  • +
+

4.1 选择结构

4.1.1 if语句

作用: 执行满足条件的语句
if语句的三种形式

+
    +
  • 单行格式if语句

    +
  • +
  • 多行格式if语句

    +
  • +
  • 多条件的if语句

    +
  • +
+
    +
  1. 单行格式if语句:if(条件){ 条件满足执行的语句 }
    示例:

    +
    int main() {
    //选择结构-单行if语句
    //输入一个分数,如果分数大于600分,视为考上一本大学,并在屏幕上打印
    int score = 0;
    cout << "请输入一个分数:" << endl;
    cin >> score;
    cout << "您输入的分数为: " << score << endl;
    //if语句
    //注意事项,在if判断语句后面,不要加分号
    if (score > 600)
    {
    cout << "我考上了一本大学!!!" << endl;
    }
    return 0;
    }
  2. +
+
+

注意:if条件表达式后不要加分号

+
+
    +
  1. 多行格式if语句:if(条件){ 条件满足执行的语句 }else{ 条件不满足执行的语句 };
    示例:
  2. +
+
int main() {
int score = 0;
cout << "请输入考试分数:" << endl;
cin >> score;
if (score > 600)
{
cout << "我考上了一本大学" << endl;
}
else
{
cout << "我未考上一本大学" << endl;
}
return 0;
}
+ +
    +
  1. 多条件的if语句:if(条件1){ 条件1满足执行的语句 }else if(条件2){条件2满足执行的语句}... else{ 都不满足执行的语句}
    示例:
  2. +
+
int main() {
int score = 0;
cout << "请输入考试分数:" << endl;
cin >> score;
if (score > 600)
{
cout << "我考上了一本大学" << endl;
}
else if (score > 500)
{
cout << "我考上了二本大学" << endl;
}
else if (score > 400)
{
cout << "我考上了三本大学" << endl;
}
else
{
cout << "我未考上本科" << endl;
}
return 0;
}
+ +

嵌套if语句:在if语句中,可以嵌套使用if语句,达到更精确的条件判断
案例需求:

+
    +
  • 提示用户输入一个高考考试分数,根据分数做如下判断
  • +
  • 分数如果大于600分视为考上一本,大于500分考上二本,大于400考上三本,其余视为未考上本科;
  • +
  • 在一本分数中,如果大于700分,考入北大,大于650分,考入清华,大于600考入人大。
    示例:
  • +
+
int main() {
int score = 0;
cout << "请输入考试分数:" << endl;
cin >> score;
if (score > 600)
{
cout << "我考上了一本大学" << endl;
if (score > 700)
{
cout << "我考上了北大" << endl;
}
else if (score > 650)
{
cout << "我考上了清华" << endl;
}
else
{
cout << "我考上了人大" << endl;
}
}
else if (score > 500)
{
cout << "我考上了二本大学" << endl;
}
else if (score > 400)
{
cout << "我考上了三本大学" << endl;
}
else
{
cout << "我未考上本科" << endl;
}
return 0;
}
+ +

练习案例: 三只小猪称体重
有三只小猪ABC,请分别输入三只小猪的体重,并且判断哪只小猪最重?

+

4.1.2 三目运算符

作用: 通过三目运算符实现简单的判断
语法:表达式1 ? 表达式2 :表达式3
解释:
如果表达式1的值为真,执行表达式2,并返回表达式2的结果;
如果表达式1的值为假,执行表达式3,并返回表达式3的结果。
示例:

+
int main() {
int a = 10;
int b = 20;
int c = 0;
c = a > b ? a : b;
cout << "c = " << c << endl;
//cpp中三目运算符返回的是变量,可以继续赋值
(a > b ? a : b) = 100;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
return 0;
}
+ +
+

总结:和if语句比较,三目运算符优点是短小整洁,缺点是如果用嵌套,结构不清晰

+
+

4.1.3 switch语句

作用: 执行多条件分支语句
语法:

+
switch(表达式)
{
case 结果1:执行语句;break;
case 结果2:执行语句;break;
...
default:执行语句;break;
}
+ +

示例:

+
int main() {
//请给电影评分
//10 ~ 9 经典
// 8 ~ 7 非常好
// 6 ~ 5 一般
// 5分以下 烂片
int score = 0;
cout << "请给电影打分" << endl;
cin >> score;
switch (score)
{
case 10:
case 9:
cout << "经典" << endl;
break;
case 8:
cout << "非常好" << endl;
break;
case 7:
case 6:
cout << "一般" << endl;
break;
default:
cout << "烂片" << endl;
break;
}
return 0;
}
+ +
+

注意1:switch语句中表达式类型只能是整型或者字符型!
注意2:case里如果没有break,那么程序会一直向下执行
总结:与if语句比,对于多条件判断时,switch的结构清晰,执行效率高,缺点是switch不可以判断区间

+
+

4.2 循环结构

4.2.1 while循环语句

作用: 满足循环条件,执行循环语句
语法: while(循环条件){ 循环语句 }
解释: 只要循环条件的结果为真,就执行循环语句
示例:

+
int main() {
int num = 0;
while (num < 10)
{
cout << "num = " << num << endl;
num++;
}
return 0;
}
+ +
+

注意:在执行循环语句时候,程序必须提供跳出循环的出口,否则出现死循环
while循环练习案例: 猜数字
案例描述: 系统随机生成一个1到100之间的数字,玩家进行猜测,如果猜错,提示玩家数字过大或过小,如果猜对恭喜玩家胜利,并且退出游戏。

+
+
#include "xr.cpp"
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <ostream>
#include <random>
int main(int, char **) {
srand(time(0));
auto answer = rand() % 100;
auto theNumber = 0;
while (std::cin >> theNumber) {
if (theNumber <= 0 || theNumber >= 100) {
std::cout << "Please input a number at 1 ~ 99!" << std::endl;
} else {
if (theNumber > answer) {
std::cout << "The number you input is too large!" << std::endl;
} else if (theNumber < answer) {
std::cout << "The number you input is too small!" << std::endl;
} else {
std::cout << "Congratulation!" << std::endl;
return 0;
}
}
}
}
+ +

4.2.2 do…while循环语句

作用: 满足循环条件,执行循环语句
语法: do{ 循环语句 } while(循环条件);
注意: 与while的区别在于do…while会先执行一次循环语句,再判断循环条件
示例:

+
int main() {
int num = 0;
do
{
cout << num << endl;
num++;
} while (num < 10);
system("pause");
return 0;
}
+ +
+

总结:与while循环区别在于,do…while先执行一次循环语句,再判断循环条件

+
+
    +
  • 练习案例:水仙花数
    案例描述: 水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身
    例如:1^3 + 5^3+ 3^3 = 153
    请利用do…while语句,求出所有3位数中的水仙花数
  • +
+

4.2.3 for循环语句

作用: 满足循环条件,执行循环语句
语法:for(起始表达式;条件表达式;末尾循环体) { 循环语句; }
示例:

+
int main() {
for (int i = 0; i < 10; i++)
{
cout << i << endl;
}
return 0;
}
+ +
+

注意:for循环中的表达式,要用分号进行分隔
总结:while , do…while, for都是开发中常用的循环语句,for循环结构比较清晰,比较常用
练习案例:敲桌子
案例描述:从1开始数到数字100, 如果数字个位含有7,或者数字十位含有7,或者该数字是7的倍数,我们打印敲桌子,其余数字直接打印输出。

+
+

4.2.4 嵌套循环

作用: 在循环体中再嵌套一层循环,解决一些实际问题
示例:

+
int main() {
//外层循环执行1次,内层循环执行1轮
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
cout << "*" << " ";
}
cout << endl;
}
return 0;
}
+ +

练习案例: 乘法口诀表

+

4.3 跳转语句

4.3.1 break语句

作用: 用于跳出选择结构或者循环结构
break使用的时机:

+
    +
  • 出现在switch条件语句中,作用是终止case并跳出switch
  • +
  • 出现在循环语句中,作用是跳出当前的循环语句
  • +
  • 出现在嵌套循环中,跳出最近的内层循环语句
    示例1:
  • +
+
int main() {
//1、在switch 语句中使用break
cout << "请选择您挑战副本的难度:" << endl;
cout << "1、普通" << endl;
cout << "2、中等" << endl;
cout << "3、困难" << endl;
int num = 0;
cin >> num;
switch (num)
{
case 1:
cout << "您选择的是普通难度" << endl;
break;
case 2:
cout << "您选择的是中等难度" << endl;
break;
case 3:
cout << "您选择的是困难难度" << endl;
break;
}
return 0;
}
+ +

示例2:

+
int main() {
//2、在循环语句中用break
for (int i = 0; i < 10; i++)
{
if (i *** 5)
{
break; //跳出循环语句
}
cout << i << endl;
}
return 0;
}
+ +

示例3:

+
int main() {
//在嵌套循环语句中使用break,退出内层循环
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (j *** 5)
{
break;
}
cout << "*" << " ";
}
cout << endl;
}
return 0;
}
+ +

4.3.2 continue语句

作用:循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环
示例:

+
int main() {
for (int i = 0; i < 100; i++)
{
if (i % 2 *** 0)
{
continue;
}
cout << i << endl;
}
return 0;
}
+ +
+

注意:continue并没有使整个循环终止,而break会跳出循环

+
+

4.3.3 goto语句

作用: 可以无条件跳转语句
语法: goto 标记;
解释: 如果标记的名称存在,执行到goto语句时,会跳转到标记的位置
示例:

+
int main() {
cout << "1" << endl;
goto FLAG;
cout << "2" << endl;
cout << "3" << endl;
cout << "4" << endl;
FLAG:
cout << "5" << endl;
return 0;
}
+ +
+

注意:在程序中不建议使用goto语句,以免造成程序流程混乱

+
+

五、数组

5.1 概述

所谓数组,就是一个集合,里面存放了相同类型的数据元素
特点1: 数组中的每个数据元素都是相同的数据类型
特点2: 数组是由连续的内存位置组成的

+

5.2 一维数组

5.2.1 一维数组定义方式

一维数组定义的三种方式:

+
    +
  1. 数据类型 数组名[ 数组长度 ];
  2. +
  3. 数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};
  4. +
  5. 数据类型 数组名[ ] = { 值1,值2 ...};
    示例:
  6. +
+
int main() {
//定义方式1
//数据类型 数组名[元素个数];
int score[10];
//利用下标赋值
score[0] = 100;
score[1] = 99;
score[2] = 85;
//利用下标输出
cout << score[0] << endl;
cout << score[1] << endl;
cout << score[2] << endl;
//第二种定义方式
//数据类型 数组名[元素个数] = {值1,值2 ,值3 ...};
//如果{}内不足10个数据,剩余数据用0补全
int score2[10] = { 100, 90,80,70,60,50,40,30,20,10 };
//逐个输出
//cout << score2[0] << endl;
//cout << score2[1] << endl;
//一个一个输出太麻烦,因此可以利用循环进行输出
for (int i = 0; i < 10; i++)
{
cout << score2[i] << endl;
}
//定义方式3
//数据类型 数组名[] = {值1,值2 ,值3 ...};
int score3[] = { 100,90,80,70,60,50,40,30,20,10 };
for (int i = 0; i < 10; i++)
{
cout << score3[i] << endl;
}
return 0;
}
+ +
+

总结1:数组名的命名规范与变量名命名规范一致,不要和变量重名
总结2:数组中下标是从0开始索引

+
+

5.2.2 一维数组数组名

一维数组名称的用途

+
    +
  1. 可以统计整个数组在内存中的长度
  2. +
  3. 可以获取数组在内存中的首地址
    示例:
  4. +
+
int main() {
//数组名用途
//1、可以获取整个数组占用内存空间大小
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
cout << "整个数组所占内存空间为: " << sizeof(arr) << endl;
cout << "每个元素所占内存空间为: " << sizeof(arr[0]) << endl;
cout << "数组的元素个数为: " << sizeof(arr) / sizeof(arr[0]) << endl;
//2、可以通过数组名获取到数组首地址
cout << "数组首地址为: " << (int)arr << endl;
cout << "数组中第一个元素地址为: " << (int)&arr[0] << endl;
cout << "数组中第二个元素地址为: " << (int)&arr[1] << endl;
//arr = 100; 错误,数组名是常量,因此不可以赋值
return 0;
}
+ +
+

注意:数组名是常量,不可以赋值
总结1:直接打印数组名,可以查看数组所占内存的首地址
总结2:对数组名进行sizeof,可以获取整个数组占内存空间的大小

+
+

练习案例1:五只小猪称体重
案例描述:
在一个数组中记录了五只小猪的体重,如:int arr[5] = {300,350,200,400,250};
找出并打印最重的小猪体重。
练习案例2: 数组元素逆置
案例描述: 请声明一个5个元素的数组,并且将元素逆置.
(如原数组元素为:1,3,2,5,4;逆置后输出结果为:4,5,2,3,1);

+

5.2.3 冒泡排序

作用: 最常用的排序算法,对数组内元素进行排序

+
    +
  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. +
  3. 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
  4. +
  5. 重复以上的步骤,每次比较次数-1,直到不需要比较
    示例: 将数组 { 4,2,8,0,5,7,1,3,9 } 进行升序排序
  6. +
+
int main() {
int arr[9] = { 4,2,8,0,5,7,1,3,9 };
for (int i = 0; i < 9 - 1; i++)
{
for (int j = 0; j < 9 - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < 9; i++)
{
cout << arr[i] << endl;
}
return 0;
}
+ +

5.3 二维数组

二维数组就是在一维数组上,多加一个维度。

+

5.3.1 二维数组定义方式

二维数组定义的四种方式:

+
    +
  1. 数据类型 数组名[ 行数 ][ 列数 ];
  2. +
  3. 数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
  4. +
  5. 数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
  6. +
  7. 数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};
  8. +
+
+

建议:以上4种定义方式,利用第二种更加直观,提高代码的可读性
示例:

+
+
int main() {
//方式1
//数组类型 数组名 [行数][列数]
int arr[2][3];
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
//方式2
//数据类型 数组名[行数][列数] = { {数据1,数据2 } ,{数据3,数据4 } };
int arr2[2][3] =
{
{1,2,3},
{4,5,6}
};
//方式3
//数据类型 数组名[行数][列数] = { 数据1,数据2 ,数据3,数据4 };
int arr3[2][3] = { 1,2,3,4,5,6 };
//方式4
//数据类型 数组名[][列数] = { 数据1,数据2 ,数据3,数据4 };
int arr4[][3] = { 1,2,3,4,5,6 };
return 0;
}
+ +
+

总结:在定义二维数组时,如果初始化了数据,可以省略行数

+
+

5.3.2 二维数组数组名

    +
  • 查看二维数组所占内存空间

    +
  • +
  • 获取二维数组首地址
    示例:

    +
  • +
+
int main() {
//二维数组数组名
int arr[2][3] =
{
{1,2,3},
{4,5,6}
};
cout << "二维数组大小: " << sizeof(arr) << endl;
cout << "二维数组一行大小: " << sizeof(arr[0]) << endl;
cout << "二维数组元素大小: " << sizeof(arr[0][0]) << endl;
cout << "二维数组行数: " << sizeof(arr) / sizeof(arr[0]) << endl;
cout << "二维数组列数: " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;
//地址
cout << "二维数组首地址:" << arr << endl;
cout << "二维数组第一行地址:" << arr[0] << endl;
cout << "二维数组第二行地址:" << arr[1] << endl;
cout << "二维数组第一个元素地址:" << &arr[0][0] << endl;
cout << "二维数组第二个元素地址:" << &arr[0][1] << endl;
return 0;
}
+ +
+

总结1:二维数组名就是这个数组的首地址
总结2:对二维数组名进行sizeof时,可以获取整个二维数组占用的内存空间大小

+
+

5.3.3 二维数组应用案例

考试成绩统计:
案例描述:有三名同学(张三,李四,王五),在一次考试中的成绩分别如下表,请分别输出三名同学的总成绩

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
语文数学英语
张三100100100
李四9050100
王五607080
参考答案:
+
int main() {
int scores[3][3] =
{
{100,100,100},
{90,50,100},
{60,70,80},
};
string names[3] = { "张三","李四","王五" };
for (int i = 0; i < 3; i++)
{
int sum = 0;
for (int j = 0; j < 3; j++)
{
sum += scores[i][j];
}
cout << names[i] << "同学总成绩为: " << sum << endl;
}
return 0;
}
+ +

六、函数

6.1 概述

作用: 将一段经常使用的代码封装起来,减少重复代码
一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能。

+

6.2 函数的定义

函数的定义一般主要有5个步骤:

+
    +
  1. 返回值类型
  2. +
  3. 函数名
  4. +
  5. 参数表列
  6. +
  7. 函数体语句
  8. +
  9. return 表达式
    语法:
  10. +
+
返回值类型 函数名 (参数列表)
{
函数体语句
return表达式
}
+ +
    +
  • 返回值类型 :一个函数可以返回一个值。在函数定义中

    +
  • +
  • 函数名:给函数起个名称

    +
  • +
  • 参数列表:使用该函数时,传入的数据

    +
  • +
  • 函数体语句:花括号内的代码,函数内需要执行的语句

    +
  • +
  • return表达式: 和返回值类型挂钩,函数执行完后,返回相应的数据
    示例: 定义一个加法函数,实现两个数相加

    +
  • +
+
//函数定义
int add(int num1, int num2)
{
int sum = num1 + num2;
return sum;
}
+ +

6.3 函数的调用

功能: 使用定义好的函数
语法: 函数名(参数)
示例:

+
//函数定义
int add(int num1, int num2) //定义中的num1,num2称为形式参数,简称形参
{
int sum = num1 + num2;
return sum;
}
int main() {
int a = 10;
int b = 10;
//调用add函数
int sum = add(a, b);//调用时的a,b称为实际参数,简称实参
cout << "sum = " << sum << endl;
a = 100;
b = 100;
sum = add(a, b);
cout << "sum = " << sum << endl;
return 0;
}
+ +
+

总结:函数定义里小括号内称为形参,函数调用时传入的参数称为实参

+
+

6.4 值传递

    +
  • 所谓值传递,就是函数调用时实参将数值传入给形参

    +
  • +
  • 值传递时,如果形参发生,并不会影响实参
    示例:

    +
  • +
+
void swap(int num1, int num2)
{
cout << "交换前:" << endl;
cout << "num1 = " << num1 << endl;
cout << "num2 = " << num2 << endl;
int temp = num1;
num1 = num2;
num2 = temp;
cout << "交换后:" << endl;
cout << "num1 = " << num1 << endl;
cout << "num2 = " << num2 << endl;
//return ; 当函数声明时候,不需要返回值,可以不写return
}
int main() {
int a = 10;
int b = 20;
swap(a, b);
cout << "mian中的 a = " << a << endl;
cout << "mian中的 b = " << b << endl;
return 0;
}
+ +
+

总结: 值传递时,形参是修饰不了实参的

+
+

6.5 函数的常见样式

常见的函数样式有4种

+
    +
  1. 无参无返
  2. +
  3. 有参无返
  4. +
  5. 无参有返
  6. +
  7. 有参有返
    示例:
  8. +
+
//函数常见样式
//1、 无参无返
void test01()
{
//void a = 10; //无类型不可以创建变量,原因无法分配内存
cout << "this is test01" << endl;
//test01(); 函数调用
}
//2、 有参无返
void test02(int a)
{
cout << "this is test02" << endl;
cout << "a = " << a << endl;
}
//3、无参有返
int test03()
{
cout << "this is test03 " << endl;
return 10;
}
//4、有参有返
int test04(int a, int b)
{
cout << "this is test04 " << endl;
int sum = a + b;
return sum;
}
+ +

6.6 函数的声明

作用: 告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。

+
    +
  • 函数的声明可以多次,但是函数的定义只能有一次
    示例:
  • +
+
//声明可以多次,定义只能一次
//声明
int max(int a, int b);
int max(int a, int b);
//定义
int max(int a, int b)
{
return a > b ? a : b;
}
int main() {
int a = 100;
int b = 200;
cout << max(a, b) << endl;
system("pause");
return 0;
}
+ +

6.7 函数的分文件编写

作用: 让代码结构更加清晰
函数分文件编写一般有4个步骤

+
    +
  1. 创建后缀名为.h的头文件
  2. +
  3. 创建后缀名为.cpp的源文件
  4. +
  5. 在头文件中写函数的声明
  6. +
  7. 在源文件中写函数的定义
    示例:
  8. +
+
//swap.h文件
#include<iostream>
using namespace std;
//实现两个数字交换的函数声明
void swap(int a, int b);
+ +
//swap.cpp文件
#include "swap.h"
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
+ +
//main函数文件
#include "swap.h"
int main() {
int a = 100;
int b = 200;
swap(a, b);
return 0;
}
+ +

七、指针

7.1 指针的基本概念

指针的作用: 可以通过指针间接访问内存

+
    +
  • 内存编号是从0开始记录的,一般用十六进制数字表示
  • +
  • 可以利用指针变量保存地址
  • +
+

7.2 指针变量的定义和使用

指针变量定义语法: 数据类型 * 变量名;
示例:

+
int main() {
//1、指针的定义
int a = 10; //定义整型变量a
//指针定义语法: 数据类型 * 变量名 ;
int * p;
//指针变量赋值
p = &a; //指针指向变量a的地址
cout << &a << endl; //打印数据a的地址
cout << p << endl; //打印指针变量p
//2、指针的使用
//通过*操作指针变量指向的内存
cout << "*p = " << *p << endl;
return 0;
}
+ +

指针变量和普通变量的区别

+
    +
  • 普通变量存放的是数据,指针变量存放的是地址
  • +
  • 指针变量可以通过” * “操作符,操作指针变量指向的内存空间,这个过程称为解引用
  • +
+
+

总结1: 我们可以通过 & 符号 获取变量的地址
总结2:利用指针可以记录地址
总结3:对指针变量解引用,可以操作指针指向的内存

+
+

7.3 指针所占内存空间

提问:指针也是种数据类型,那么这种数据类型占用多少内存空间?
示例:

+
int main() {
int a = 10;
int * p;
p = &a; //指针指向数据a的地址
cout << *p << endl; //* 解引用
cout << sizeof(p) << endl;
cout << sizeof(char *) << endl;
cout << sizeof(float *) << endl;
cout << sizeof(double *) << endl;
return 0;
}
+ +
+

总结:所有指针类型在32位操作系统下是4个字节

+
+

7.4 空指针和野指针

空指针:指针变量指向内存中编号为0的空间
用途: 初始化指针变量
注意: 空指针指向的内存是不可以访问的
示例1:空指针

+
int main() {
//指针变量p指向内存地址编号为0的空间
int * p = NULL;
//访问空指针报错
//内存编号0 ~255为系统占用内存,不允许用户访问
cout << *p << endl;
return 0;
}
+ +

野指针:指针变量指向非法的内存空间
示例2:野指针

+
int main() {
//指针变量p指向内存地址编号为0x1100的空间
int * p = (int *)0x1100;
//访问野指针报错
cout << *p << endl;
return 0;
}
+ +
+

总结:空指针和野指针都不是我们申请的空间,因此不要访问。

+
+

7.5 const修饰指针

const修饰指针有三种情况

+
    +
  1. const修饰指针 — 常量指针
  2. +
  3. const修饰常量 — 指针常量
  4. +
  5. const即修饰指针,又修饰常量
    示例:
  6. +
+
int main() {
int a = 10;
int b = 10;
//const修饰的是指针,指针指向可以改,指针指向的值不可以更改
const int * p1 = &a;
p1 = &b; //正确
//*p1 = 100; 报错
//const修饰的是常量,指针指向不可以改,指针指向的值可以更改
int * const p2 = &a;
//p2 = &b; //错误
*p2 = 100; //正确
//const既修饰指针又修饰常量
const int * const p3 = &a;
//p3 = &b; //错误
//*p3 = 100; //错误
return 0;
}
+ +
+

技巧:看const右侧紧跟着的是指针还是常量, 是指针就是常量指针,是常量就是指针常量

+
+

7.6 指针和数组

作用: 利用指针访问数组中元素
示例:

+
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int * p = arr; //指向数组的指针
cout << "第一个元素: " << arr[0] << endl;
cout << "指针访问第一个元素: " << *p << endl;
for (int i = 0; i < 10; i++)
{
//利用指针遍历数组
cout << *p << endl;
p++;
}
return 0;
}
+ +

7.7 指针和函数

作用: 利用指针作函数参数,可以修改实参的值
示例:

+
//值传递
void swap1(int a ,int b)
{
int temp = a;
a = b;
b = temp;
}
//地址传递
void swap2(int * p1, int *p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main() {
int a = 10;
int b = 20;
swap1(a, b); // 值传递不会改变实参
swap2(&a, &b); //地址传递会改变实参
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
+ +
+

总结:如果不想修改实参,就用值传递,如果想修改实参,就用地址传递

+
+

7.8 指针、数组、函数

案例描述: 封装一个函数,利用冒泡排序,实现对整型数组的升序排序
例如数组:int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };
示例:

+
//冒泡排序函数
void bubbleSort(int * arr, int len) //int * arr 也可以写为int arr[]
{
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
//打印数组函数
void printArray(int arr[], int len)
{
for (int i = 0; i < len; i++)
{
cout << arr[i] << endl;
}
}
int main() {
int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };
int len = sizeof(arr) / sizeof(int);
bubbleSort(arr, len);
printArray(arr, len);
return 0;
}
+ +
+

总结:当数组名传入到函数作为参数时,被退化为指向首元素的指针

+
+

八、结构体

8.1 结构体基本概念

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型

+

8.2 结构体定义和使用

语法:struct 结构体名 { 结构体成员列表 };
通过结构体创建变量的方式有三种:

+
    +
  • struct 结构体名 变量名
  • +
  • struct 结构体名 变量名 = { 成员1值 , 成员2值…}
  • +
  • 定义结构体时顺便创建变量
    示例:
  • +
+
//结构体定义
struct student
{
//成员列表
string name; //姓名
int age; //年龄
int score; //分数
}stu3; //结构体变量创建方式3
int main() {
//结构体变量创建方式1
struct student stu1; //struct 关键字可以省略
stu1.name = "张三";
stu1.age = 18;
stu1.score = 100;
cout << "姓名:" << stu1.name << " 年龄:" << stu1.age << " 分数:" << stu1.score << endl;
//结构体变量创建方式2
struct student stu2 = { "李四",19,60 };
cout << "姓名:" << stu2.name << " 年龄:" << stu2.age << " 分数:" << stu2.score << endl;
stu3.name = "王五";
stu3.age = 18;
stu3.score = 80;
cout << "姓名:" << stu3.name << " 年龄:" << stu3.age << " 分数:" << stu3.score << endl;
return 0;
}
+ +
+

总结1:定义结构体时的关键字是struct,不可省略
总结2:创建结构体变量时,关键字struct可以省略
总结3:结构体变量利用操作符 ‘’.’’ 访问成员

+
+

8.3 结构体数组

作用: 将自定义的结构体放入到数组中方便维护
语法:struct 结构体名 数组名[元素个数] = { {} , {} , ... {} }
示例:

+
//结构体定义
struct student
{
//成员列表
string name; //姓名
int age; //年龄
int score; //分数
}
int main() {
//结构体数组
struct student arr[3]=
{
{"张三",18,80 },
{"李四",19,60 },
{"王五",20,70 }
};
for (int i = 0; i < 3; i++)
{
cout << "姓名:" << arr[i].name << " 年龄:" << arr[i].age << " 分数:" << arr[i].score << endl;
}
return 0;
}
+ +

8.4 结构体指针

作用: 通过指针访问结构体中的成员

+
    +
  • 利用操作符 ->可以通过结构体指针访问结构体属性
    示例:
  • +
+
//结构体定义
struct student
{
//成员列表
string name; //姓名
int age; //年龄
int score; //分数
};
int main() {
struct student stu = { "张三",18,100, };
struct student * p = &stu;
p->score = 80; //指针通过 -> 操作符可以访问成员
cout << "姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl;
return 0;
}
+ +
+

总结:结构体指针可以通过 -> 操作符 来访问结构体中的成员

+
+

8.5 结构体嵌套结构体

作用: 结构体中的成员可以是另一个结构体
例如: 每个老师辅导一个学员,一个老师的结构体中,记录一个学生的结构体
示例:

+
//学生结构体定义
struct student
{
//成员列表
string name; //姓名
int age; //年龄
int score; //分数
};
//教师结构体定义
struct teacher
{
//成员列表
int id; //职工编号
string name; //教师姓名
int age; //教师年龄
struct student stu; //子结构体 学生
};
int main() {
struct teacher t1;
t1.id = 10000;
t1.name = "老王";
t1.age = 40;
t1.stu.name = "张三";
t1.stu.age = 18;
t1.stu.score = 100;
cout << "教师 职工编号: " << t1.id << " 姓名: " << t1.name << " 年龄: " << t1.age << endl;
cout << "辅导学员 姓名: " << t1.stu.name << " 年龄:" << t1.stu.age << " 考试分数: " << t1.stu.score << endl;
return 0;
}
+ +

在结构体中可以定义另一个结构体作为成员,用来解决实际问题

+

8.6 结构体做函数参数

作用: 将结构体作为参数向函数中传递
传递方式有两种:

+
    +
  • 值传递
  • +
  • 地址传递
    示例:
  • +
+
//学生结构体定义
struct student
{
//成员列表
string name; //姓名
int age; //年龄
int score; //分数
};
//值传递
void printStudent(student stu )
{
stu.age = 28;
cout << "子函数中 姓名:" << stu.name << " 年龄: " << stu.age << " 分数:" << stu.score << endl;
}
//地址传递
void printStudent2(student *stu)
{
stu->age = 28;
cout << "子函数中 姓名:" << stu->name << " 年龄: " << stu->age << " 分数:" << stu->score << endl;
}
int main() {
student stu = { "张三",18,100};
//值传递
printStudent(stu);
cout << "主函数中 姓名:" << stu.name << " 年龄: " << stu.age << " 分数:" << stu.score << endl;
cout << endl;
//地址传递
printStudent2(&stu);
cout << "主函数中 姓名:" << stu.name << " 年龄: " << stu.age << " 分数:" << stu.score << endl;
return 0;
}
+ +
+

总结:如果不想修改主函数中的数据,用值传递,反之用地址传递

+
+

8.7 结构体中 const 使用场景

作用: 用const来防止误操作
示例:

+
//学生结构体定义
struct student
{
//成员列表
string name; //姓名
int age; //年龄
int score; //分数
};
//const使用场景
void printStudent(const student *stu) //加const防止函数体中的误操作
{
//stu->age = 100; //操作失败,因为加了const修饰
cout << "姓名:" << stu->name << " 年龄:" << stu->age << " 分数:" << stu->score << endl;
}
int main() {
student stu = { "张三",18,100 };
printStudent(&stu);
return 0;
}
+ +

8.8 结构体案例

8.8.1 案例1

案例描述:
学校正在做毕设项目,每名老师带领5个学生,总共有3名老师,需求如下:

+
    +
  • 设计学生和老师的结构体,其中在老师的结构体中,有老师姓名和一个存放5名学生的数组作为成员
  • +
  • 学生的成员有姓名、考试分数,创建数组存放3名老师,通过函数给每个老师及所带的学生赋值
  • +
  • 最终打印出老师数据以及老师所带的学生数据。
    示例:
  • +
+
struct Student
{
string name;
int score;
};
struct Teacher
{
string name;
Student sArray[5];
};
void allocateSpace(Teacher tArray[] , int len)
{
string tName = "教师";
string sName = "学生";
string nameSeed = "ABCDE";
for (int i = 0; i < len; i++)
{
tArray[i].name = tName + nameSeed[i];
for (int j = 0; j < 5; j++)
{
tArray[i].sArray[j].name = sName + nameSeed[j];
tArray[i].sArray[j].score = rand() % 61 + 40;
}
}
}
void printTeachers(Teacher tArray[], int len)
{
for (int i = 0; i < len; i++)
{
cout << tArray[i].name << endl;
for (int j = 0; j < 5; j++)
{
cout << "\t姓名:" << tArray[i].sArray[j].name << " 分数:" << tArray[i].sArray[j].score << endl;
}
}
}
int main() {
srand((unsigned int)time(NULL)); //随机数种子 头文件 #include <ctime>
Teacher tArray[3]; //老师数组
int len = sizeof(tArray) / sizeof(Teacher);
allocateSpace(tArray, len); //创建数据
printTeachers(tArray, len); //打印数据
return 0;
}
+ +

8.8.2 案例2

案例描述:
设计一个英雄的结构体,包括成员姓名,年龄,性别;创建结构体数组,数组中存放5名英雄。
通过冒泡排序的算法,将数组中的英雄按照年龄进行升序排序,最终打印排序后的结果。
五名英雄信息如下:

+
{"刘备",23,"男"},
{"关羽",22,"男"},
{"张飞",20,"男"},
{"赵云",21,"男"},
{"貂蝉",19,"女"},
+ +

示例:

+
//英雄结构体
struct hero
{
string name;
int age;
string sex;
};
//冒泡排序
void bubbleSort(hero arr[] , int len)
{
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - 1 - i; j++)
{
if (arr[j].age > arr[j + 1].age)
{
hero temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
//打印数组
void printHeros(hero arr[], int len)
{
for (int i = 0; i < len; i++)
{
cout << "姓名: " << arr[i].name << " 性别: " << arr[i].sex << " 年龄: " << arr[i].age << endl;
}
}
int main() {
struct hero arr[5] =
{
{"刘备",23,"男"},
{"关羽",22,"男"},
{"张飞",20,"男"},
{"赵云",21,"男"},
{"貂蝉",19,"女"},
};
int len = sizeof(arr) / sizeof(hero); //获取数组元素个数
bubbleSort(arr, len); //排序
printHeros(arr, len); //打印
return 0;
+ + + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2022/05/25/note/Programming/Language/cpp-2/index.html b/2022/05/25/note/Programming/Language/cpp-2/index.html new file mode 100644 index 000000000..8e4181276 --- /dev/null +++ b/2022/05/25/note/Programming/Language/cpp-2/index.html @@ -0,0 +1,1189 @@ + + + + + + + + + + + + C Plus Plus - Core | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ C Plus Plus - Core +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

本阶段主要针对cpp面向对象编程技术做详细讲解,探讨cpp中的核心和精髓。

+ + +

一、内存分区模型

cpp程序在执行时,将内存大方向划分为4个区域

+
    +
  • 代码区:存放函数体的二进制代码,由操作系统进行管理的
  • +
  • 全局区:存放全局变量和静态变量以及常量
  • +
  • 栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等
  • +
  • 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收
    内存四区意义:
    不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程
  • +
+

1.1 程序运行前

在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域
代码区:

+
    +
  • 存放 CPU 执行的机器指令
  • +
  • 代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可
  • +
  • 代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令
    全局区:
  • +
  • 全局变量和静态变量存放在此
  • +
  • 全局区还包含了常量区, 字符串常量和其他常量也存放在此
  • +
  • 该区域的数据在程序结束后由操作系统释放.
    示例:
  • +
+
//全局变量
int g_a = 10;
int g_b = 10;
//全局常量
const int c_g_a = 10;
const int c_g_b = 10;
int main() {
//局部变量
int a = 10;
int b = 10;
//打印地址
cout << "局部变量a地址为: " << (int)&a << endl;
cout << "局部变量b地址为: " << (int)&b << endl;
cout << "全局变量g_a地址为: " << (int)&g_a << endl;
cout << "全局变量g_b地址为: " << (int)&g_b << endl;
//静态变量
static int s_a = 10;
static int s_b = 10;
cout << "静态变量s_a地址为: " << (int)&s_a << endl;
cout << "静态变量s_b地址为: " << (int)&s_b << endl;
cout << "字符串常量地址为: " << (int)&"hello world" << endl;
cout << "字符串常量地址为: " << (int)&"hello world1" << endl;
cout << "全局常量c_g_a地址为: " << (int)&c_g_a << endl;
cout << "全局常量c_g_b地址为: " << (int)&c_g_b << endl;
const int c_l_a = 10;
const int c_l_b = 10;
cout << "局部常量c_l_a地址为: " << (int)&c_l_a << endl;
cout << "局部常量c_l_b地址为: " << (int)&c_l_b << endl;
return 0;
}
+ + +
    +
  • cpp中在程序运行前分为全局区和代码区

    +
  • +
  • 代码区特点是共享和只读

    +
  • +
  • 全局区中存放全局变量、静态变量、常量

    +
  • +
  • 常量区中存放 const修饰的全局常量 和 字符串常量

    +
  • +
+

1.2 程序运行后

栈区:
由编译器自动分配释放, 存放函数的参数值,局部变量等
注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放
示例:

+
int * func()
{
int a = 10;
return &a;
}
int main() {
int *p = func();
cout << *p << endl;
cout << *p << endl;
return 0;
}
+ +

堆区:
由程序员分配释放,若程序员不释放,程序结束时由操作系统回收
在cpp中主要利用new在堆区开辟内存
示例:

+
int* func()
{
int* a = new int(10);
return a;
}
int main() {
int *p = func();
cout << *p << endl;
cout << *p << endl;
system("pause");
return 0;
}
+ +

总结:
堆区数据由程序员管理开辟和释放
堆区数据利用new关键字进行开辟内存

+

1.3 new操作符

cpp中利用new操作符在堆区开辟数据
堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符 delete
语法:new 数据类型
利用new创建的数据,会返回该数据对应的类型的指针
示例1: 基本语法

+
int* func()
{
int* a = new int(10);
return a;
}
int main() {
int *p = func();
cout << *p << endl;
cout << *p << endl;
//利用delete释放堆区数据
delete p;
//cout << *p << endl; //报错,释放的空间不可访问
return 0;
}
+ +

示例2:开辟数组

+
//堆区开辟数组
int main() {
int* arr = new int[10];
for (int i = 0; i < 10; i++)
{
arr[i] = i + 100;
}
for (int i = 0; i < 10; i++)
{
cout << arr[i] << endl;
}
//释放数组 delete 后加 []
delete[] arr;
return 0;
}
+ +

二、引用

2.1 引用的基本使用

作用: 给变量起别名
语法: 数据类型 &别名 = 原名
示例:

+
int main() {
int a = 10;
int &b = a;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
b = 100;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
+ +

2.2 引用注意事项

    +
  • 引用必须初始化

    +
  • +
  • 引用在初始化后,不可以改变
    示例:

    +
  • +
+
int main() {
int a = 10;
int b = 20;
//int &c; //错误,引用必须初始化
int &c = a; //一旦初始化后,就不可以更改
c = b; //这是赋值操作,不是更改引用
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
return 0;
}
+ +

2.3 引用做函数参数

作用: 函数传参时,可以利用引用的技术让形参修饰实参
优点: 可以简化指针修改实参
示例:

+
//1. 值传递
void mySwap01(int a, int b) {
int temp = a;
a = b;
b = temp;
}
//2. 地址传递
void mySwap02(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
//3. 引用传递
void mySwap03(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int a = 10;
int b = 20;
mySwap01(a, b);
cout << "a:" << a << " b:" << b << endl;
mySwap02(&a, &b);
cout << "a:" << a << " b:" << b << endl;
mySwap03(a, b);
cout << "a:" << a << " b:" << b << endl;
return 0;
}
+ +
+

总结:通过引用参数产生的效果同按地址传递是一样的。引用的语法更清楚简单

+
+

2.4 引用做函数返回值

作用:引用是可以作为函数的返回值存在的
注意:不要返回局部变量引用
用法:函数调用作为左值
示例:

+
//返回局部变量引用
int& test01() {
int a = 10; //局部变量
return a;
}
//返回静态变量引用
int& test02() {
static int a = 20;
return a;
}
int main() {
//不能返回局部变量的引用
int& ref = test01();
cout << "ref = " << ref << endl;
cout << "ref = " << ref << endl;
//如果函数做左值,那么必须返回引用
int& ref2 = test02();
cout << "ref2 = " << ref2 << endl;
cout << "ref2 = " << ref2 << endl;
test02() = 1000;
cout << "ref2 = " << ref2 << endl;
cout << "ref2 = " << ref2 << endl;
return 0;
}
+ +

2.5 引用的本质

本质:引用的本质在cpp内部实现是一个指针常量.
讲解示例:

+
//发现是引用,转换为 int* const ref = &a;
void func(int& ref){
ref = 100; // ref是引用,转换为*ref = 100
}
int main(){
int a = 10;
//自动转换为 int* const ref = &a; 指针常量是指针指向不可改,也说明为什么引用不可更改
int& ref = a;
ref = 20; //内部发现ref是引用,自动帮我们转换为: *ref = 20;
cout << "a:" << a << endl;
cout << "ref:" << ref << endl;
func(a);
return 0;
}
+ +

结论:cpp推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了

+

2.6 常量引用

作用: 常量引用主要用来修饰形参,防止误操作
在函数形参列表中,可以加const修饰形参,防止形参改变实参
示例:

+
//引用使用的场景,通常用来修饰形参
void showValue(const int& v) {
//v += 10;
cout << v << endl;
}
int main() {
//int& ref = 10; 引用本身需要一个合法的内存空间,因此这行错误
//加入const就可以了,编译器优化代码,int temp = 10; const int& ref = temp;
const int& ref = 10;
//ref = 100; //加入const后不可以修改变量
cout << ref << endl;
//函数中利用常量引用防止误操作修改实参
int a = 10;
showValue(a);
return 0;
}
+ +

三、函数提高

3.1 函数默认参数

在cpp中,函数的形参列表中的形参是可以有默认值的。
语法:返回值类型 函数名 (参数= 默认值){}
示例:

+
int func(int a, int b = 10, int c = 10) {
return a + b + c;
}
//1. 如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值
//2. 如果函数声明有默认值,函数实现的时候就不能有默认参数
int func2(int a = 10, int b = 10);
int func2(int a, int b) {
return a + b;
}
int main() {
cout << "ret = " << func(20, 20) << endl;
cout << "ret = " << func(100) << endl;
return 0;
}
+ +

3.2 函数占位参数

cpp中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置
语法: 返回值类型 函数名 (数据类型){}
在现阶段函数的占位参数存在意义不大,但是后面的课程中会用到该技术
示例:

+
//函数占位参数 ,占位参数也可以有默认参数
void func(int a, int) {
cout << "this is func" << endl;
}
int main() {
func(10,10); //占位参数必须填补
return 0;
}
+ +

3.3 函数重载

3.3.1 函数重载概述

作用: 函数名可以相同,提高复用性
函数重载满足条件:

+
    +
  • 同一个作用域下
  • +
  • 函数名称相同
  • +
  • 函数参数类型不同 或者 个数不同 或者 顺序不同
    注意: 函数的返回值不可以作为函数重载的条件
    示例:
  • +
+
//函数重载需要函数都在同一个作用域下
void func()
{
cout << "func 的调用!" << endl;
}
void func(int a)
{
cout << "func (int a) 的调用!" << endl;
}
void func(double a)
{
cout << "func (double a)的调用!" << endl;
}
void func(int a ,double b)
{
cout << "func (int a ,double b) 的调用!" << endl;
}
void func(double a ,int b)
{
cout << "func (double a ,int b)的调用!" << endl;
}
//函数返回值不可以作为函数重载条件
//int func(double a, int b)
//{
// cout << "func (double a ,int b)的调用!" << endl;
//}
int main() {
func();
func(10);
func(3.14);
func(10,3.14);
func(3.14 , 10);
return 0;
}
+ +

3.3.2 函数重载注意事项

    +
  • 引用作为重载条件

    +
  • +
  • 函数重载碰到函数默认参数
    示例:

    +
  • +
+
//函数重载注意事项
//1、引用作为重载条件
void func(int &a)
{
cout << "func (int &a) 调用 " << endl;
}
void func(const int &a)
{
cout << "func (const int &a) 调用 " << endl;
}
//2、函数重载碰到函数默认参数
void func2(int a, int b = 10)
{
cout << "func2(int a, int b = 10) 调用" << endl;
}
void func2(int a)
{
cout << "func2(int a) 调用" << endl;
}
int main() {
int a = 10;
func(a); //调用无const
func(10);//调用有const
//func2(10); //碰到默认参数产生歧义,需要避免
return 0;
}
+ +

四、类和对象

cpp面向对象的三大特性为:封装、继承、多态
cpp认为万事万物都皆为对象,对象上有其属性和行为

+

4.1 封装

4.1.1 封装的意义

封装是cpp面向对象三大特性之一
封装的意义:

+
    +
  • 将属性和行为作为一个整体,表现生活中的事物
  • +
  • 将属性和行为加以权限控制
    封装意义一:
    在设计类的时候,属性和行为写在一起,表现事物
    语法: class 类名{ 访问权限: 属性 / 行为 };
    示例1: 设计一个圆类,求圆的周长
    示例代码:
  • +
+
//圆周率
const double PI = 3.14;
//1、封装的意义
//将属性和行为作为一个整体,用来表现生活中的事物
//封装一个圆类,求圆的周长
//class代表设计一个类,后面跟着的是类名
class Circle
{
public: //访问权限 公共的权限
//属性
int m_r;//半径
//行为
//获取到圆的周长
double calculateZC()
{
//2 * pi * r
//获取圆的周长
return 2 * PI * m_r;
}
};
int main() {
//通过圆类,创建圆的对象
// c1就是一个具体的圆
Circle c1;
c1.m_r = 10; //给圆对象的半径 进行赋值操作
//2 * pi * 10 = = 62.8
cout << "圆的周长为: " << c1.calculateZC() << endl;
return 0;
}
+ +

示例2: 设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
示例2代码:

+
//学生类
class Student {
public:
void setName(string name) {
m_name = name;
}
void setID(int id) {
m_id = id;
}
void showStudent() {
cout << "name:" << m_name << " ID:" << m_id << endl;
}
public:
string m_name;
int m_id;
};
int main() {
Student stu;
stu.setName("德玛西亚");
stu.setID(250);
stu.showStudent();
return 0;
}
+ +

封装意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:

+
    +
  1. public 公共权限
  2. +
  3. protected 保护权限
  4. +
  5. private 私有权限
    示例:
  6. +
+
//三种权限
//公共权限 public 类内可以访问 类外可以访问
//保护权限 protected 类内可以访问 类外不可以访问
//私有权限 private 类内可以访问 类外不可以访问
class Person
{
//姓名 公共权限
public:
string m_Name;
//汽车 保护权限
protected:
string m_Car;
//银行卡密码 私有权限
private:
int m_Password;
public:
void func()
{
m_Name = "张三";
m_Car = "拖拉机";
m_Password = 123456;
}
};
int main() {
Person p;
p.m_Name = "李四";
//p.m_Car = "奔驰"; //保护权限类外访问不到
//p.m_Password = 123; //私有权限类外访问不到
return 0;
}
+ +

4.1.2 struct和class区别

在cpp中 struct和class唯一的区别就在于 默认的访问权限不同
区别:

+
    +
  • struct 默认权限为公共
  • +
  • class 默认权限为私有
  • +
+
class C1
{
int m_A; //默认是私有权限
};
struct C2
{
int m_A; //默认是公共权限
};
int main() {
C1 c1;
c1.m_A = 10; //错误,访问权限是私有
C2 c2;
c2.m_A = 10; //正确,访问权限是公共
return 0;
}
+ +

4.1.3 成员属性设置为私有

优点1: 将所有成员属性设置为私有,可以自己控制读写权限
优点2: 对于写权限,我们可以检测数据的有效性
示例:

+
class Person {
public:
//姓名设置可读可写
void setName(string name) {
m_Name = name;
}
string getName()
{
return m_Name;
}
//获取年龄
int getAge() {
return m_Age;
}
//设置年龄
void setAge(int age) {
if (age < 0 || age > 150) {
cout << "你个老妖精!" << endl;
return;
}
m_Age = age;
}
//情人设置为只写
void setLover(string lover) {
m_Lover = lover;
}
private:
string m_Name; //可读可写 姓名
int m_Age; //只读 年龄
string m_Lover; //只写 情人
};
int main() {
Person p;
//姓名设置
p.setName("张三");
cout << "姓名: " << p.getName() << endl;
//年龄设置
p.setAge(50);
cout << "年龄: " << p.getAge() << endl;
//情人设置
p.setLover("苍井");
//cout << "情人: " << p.m_Lover << endl; //只写属性,不可以读取
return 0;
}
+ +

练习案例1:设计立方体类
设计立方体类(Cube)
求出立方体的面积和体积
分别用全局函数和成员函数判断两个立方体是否相等
练习案例2:点和圆的关系
设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系

+

4.2 对象的初始化和清理

    +
  • 生活中我们买的电子产品都基本会有出厂设置,在某一天我们不用时候也会删除一些自己信息数据保证安全

    +
  • +
  • cpp中的面向对象来源于生活,每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。

    +
  • +
+

4.2.1 构造函数和析构函数

对象的初始化和清理也是两个非常重要的安全问题

+

一个对象或者变量没有初始状态,对其使用后果是未知

+

同样的使用完一个对象或变量,没有及时清理,也会造成一定的安全问题

+

cpp利用了构造函数析构函数解决上述问题,这两个函数将会被编译器自动调用,完成对象初始化和清理工作。

+

对象的初始化和清理工作是编译器强制要我们做的事情,因此如果我们不提供构造和析构,编译器会提供
编译器提供的构造函数和析构函数是空实现。

+
    +
  • 构造函数:主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用。
  • +
  • 析构函数:主要作用在于对象销毁前系统自动调用,执行一些清理工作。
    构造函数语法:类名(){}
  • +
+
    +
  1. 构造函数,没有返回值也不写void
  2. +
  3. 函数名称与类名相同
  4. +
  5. 构造函数可以有参数,因此可以发生重载
  6. +
  7. 程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次
    析构函数语法: ~类名(){}
  8. +
  9. 析构函数,没有返回值也不写void
  10. +
  11. 函数名称与类名相同,在名称前加上符号 ~
  12. +
  13. 析构函数不可以有参数,因此不可以发生重载
  14. +
  15. 程序在对象销毁前会自动调用析构,无须手动调用,而且只会调用一次
  16. +
+
class Person
{
public:
//构造函数
Person()
{
cout << "Person的构造函数调用" << endl;
}
//析构函数
~Person()
{
cout << "Person的析构函数调用" << endl;
}
};
void test01()
{
Person p;
}
int main() {
test01();
return 0;
}
+ +

4.2.2 构造函数的分类及调用

两种分类方式:

+
    +
  • 按参数分为: 有参构造和无参构造
  • +
  • 按类型分为: 普通构造和拷贝构造
    三种调用方式:
  • +
  • 括号法
  • +
  • 显示法
  • +
  • 隐式转换法
    示例:
  • +
+
//1、构造函数分类
// 按照参数分类分为 有参和无参构造 无参又称为默认构造函数
// 按照类型分类分为 普通构造和拷贝构造
class Person {
public:
//无参(默认)构造函数
Person() {
cout << "无参构造函数!" << endl;
}
//有参构造函数
Person(int a) {
age = a;
cout << "有参构造函数!" << endl;
}
//拷贝构造函数
Person(const Person& p) {
age = p.age;
cout << "拷贝构造函数!" << endl;
}
//析构函数
~Person() {
cout << "析构函数!" << endl;
}
public:
int age;
};
//2、构造函数的调用
//调用无参构造函数
void test01() {
Person p; //调用无参构造函数
}
//调用有参的构造函数
void test02() {
//2.1 括号法,常用
Person p1(10);
//注意1:调用无参构造函数不能加括号,如果加了编译器认为这是一个函数声明
//Person p2();
//2.2 显式法
Person p2 = Person(10);
Person p3 = Person(p2);
//Person(10)单独写就是匿名对象 当前行结束之后,马上析构
//2.3 隐式转换法
Person p4 = 10; // Person p4 = Person(10);
Person p5 = p4; // Person p5 = Person(p4);
//注意2:不能利用 拷贝构造函数 初始化匿名对象 编译器认为是对象声明
//Person p5(p4);
}
int main() {
test01();
//test02();
return 0;
}
+ +

4.2.3 拷贝构造函数调用时机

cpp中拷贝构造函数调用时机通常有三种情况

+
    +
  • 使用一个已经创建完毕的对象来初始化一个新对象
  • +
  • 值传递的方式给函数参数传值
  • +
  • 以值方式返回局部对象
    示例:
  • +
+
class Person {
public:
Person() {
cout << "无参构造函数!" << endl;
mAge = 0;
}
Person(int age) {
cout << "有参构造函数!" << endl;
mAge = age;
}
Person(const Person& p) {
cout << "拷贝构造函数!" << endl;
mAge = p.mAge;
}
//析构函数在释放内存之前调用
~Person() {
cout << "析构函数!" << endl;
}
public:
int mAge;
};
//1. 使用一个已经创建完毕的对象来初始化一个新对象
void test01() {
Person man(100); //p对象已经创建完毕
Person newman(man); //调用拷贝构造函数
Person newman2 = man; //拷贝构造
//Person newman3;
//newman3 = man; //不是调用拷贝构造函数,赋值操作
}
//2. 值传递的方式给函数参数传值
//相当于Person p1 = p;
void doWork(Person p1) {}
void test02() {
Person p; //无参构造函数
doWork(p);
}
//3. 以值方式返回局部对象
Person doWork2()
{
Person p1;
cout << (int *)&p1 << endl;
return p1;
}
void test03()
{
Person p = doWork2();
cout << (int *)&p << endl;
}
int main() {
//test01();
//test02();
test03();
return 0;
}
+ +

4.2.4 构造函数调用规则

默认情况下,cpp编译器至少给一个类添加3个函数

+
    +
  1. 默认构造函数(无参,函数体为空)

    +
  2. +
  3. 默认析构函数(无参,函数体为空)

    +
  4. +
  5. 默认拷贝构造函数,对属性进行值拷贝
    构造函数调用规则如下:

    +
  6. +
+
    +
  • 如果用户定义有参构造函数,cpp不在提供默认无参构造,但是会提供默认拷贝构造

    +
  • +
  • 如果用户定义拷贝构造函数,cpp不会再提供其他构造函数
    示例:

    +
  • +
+
class Person {
public:
//无参(默认)构造函数
Person() {
cout << "无参构造函数!" << endl;
}
//有参构造函数
Person(int a) {
age = a;
cout << "有参构造函数!" << endl;
}
//拷贝构造函数
Person(const Person& p) {
age = p.age;
cout << "拷贝构造函数!" << endl;
}
//析构函数
~Person() {
cout << "析构函数!" << endl;
}
public:
int age;
};
void test01()
{
Person p1(18);
//如果不写拷贝构造,编译器会自动添加拷贝构造,并且做浅拷贝操作
Person p2(p1);
cout << "p2的年龄为: " << p2.age << endl;
}
void test02()
{
//如果用户提供有参构造,编译器不会提供默认构造,会提供拷贝构造
Person p1; //此时如果用户自己没有提供默认构造,会出错
Person p2(10); //用户提供的有参
Person p3(p2); //此时如果用户没有提供拷贝构造,编译器会提供
//如果用户提供拷贝构造,编译器不会提供其他构造函数
Person p4; //此时如果用户自己没有提供默认构造,会出错
Person p5(10); //此时如果用户自己没有提供有参,会出错
Person p6(p5); //用户自己提供拷贝构造
}
int main() {
test01();
return 0;
}
+ +

4.2.5 深拷贝与浅拷贝

深浅拷贝是面试经典问题,也是常见的一个坑
浅拷贝: 简单的赋值拷贝操作
深拷贝: 在堆区重新申请空间,进行拷贝操作
示例:

+
class Person {
public:
//无参(默认)构造函数
Person() {
cout << "无参构造函数!" << endl;
}
//有参构造函数
Person(int age ,int height) {
cout << "有参构造函数!" << endl;
m_age = age;
m_height = new int(height);
}
//拷贝构造函数
Person(const Person& p) {
cout << "拷贝构造函数!" << endl;
//如果不利用深拷贝在堆区创建新内存,会导致浅拷贝带来的重复释放堆区问题
m_age = p.m_age;
m_height = new int(*p.m_height);
}
//析构函数
~Person() {
cout << "析构函数!" << endl;
if (m_height != NULL)
{
delete m_height;
}
}
public:
int m_age;
int* m_height;
};
void test01()
{
Person p1(18, 180);
Person p2(p1);
cout << "p1的年龄: " << p1.m_age << " 身高: " << *p1.m_height << endl;
cout << "p2的年龄: " << p2.m_age << " 身高: " << *p2.m_height << endl;
}
int main() {
test01();
return 0;
}
+ +
+

总结:如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题

+
+

4.2.6 初始化列表

作用: cpp提供了初始化列表语法,用来初始化属性
语法:构造函数():属性1(值1),属性2(值2)... {}
示例:

+
class Person {
public:
////传统方式初始化
//Person(int a, int b, int c) {
// m_A = a;
// m_B = b;
// m_C = c;
//}
//初始化列表方式初始化
Person(int a, int b, int c) :m_A(a), m_B(b), m_C(c) {}
void PrintPerson() {
cout << "mA:" << m_A << endl;
cout << "mB:" << m_B << endl;
cout << "mC:" << m_C << endl;
}
private:
int m_A;
int m_B;
int m_C;
};
int main() {
Person p(1, 2, 3);
p.PrintPerson();
return 0;
}
+ +

4.2.7 类对象作为类成员

cpp类中的成员可以是另一个类的对象,我们称该成员为 对象成员
例如:

+
class A {}
class B
{
A a;
}
+ +

B类中有对象A作为成员,A为对象成员;
那么当创建B对象时,A与B的构造和析构的顺序是谁先谁后?
示例:

+
class Phone
{
public:
Phone(string name)
{
m_PhoneName = name;
cout << "Phone构造" << endl;
}
~Phone()
{
cout << "Phone析构" << endl;
}
string m_PhoneName;
};
class Person
{
public:
//初始化列表可以告诉编译器调用哪一个构造函数
Person(string name, string pName) :m_Name(name), m_Phone(pName)
{
cout << "Person构造" << endl;
}
~Person()
{
cout << "Person析构" << endl;
}
void playGame()
{
cout << m_Name << " 使用" << m_Phone.m_PhoneName << " 牌手机! " << endl;
}
string m_Name;
Phone m_Phone;
};
void test01()
{
//当类中成员是其他类对象时,我们称该成员为 对象成员
//构造的顺序是 :先调用对象成员的构造,再调用本类构造
//析构顺序与构造相反
Person p("张三" , "苹果X");
p.playGame();
}
int main() {
test01();
return 0;
}
+ +

4.2.8 静态成员

静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员
静态成员分为:

+
    +
  • 静态成员变量
      +
    • 所有对象共享同一份数据
    • +
    • 在编译阶段分配内存
    • +
    • 类内声明,类外初始化
    • +
    +
  • +
  • 静态成员函数
      +
    • 所有对象共享同一个函数
    • +
    • 静态成员函数只能访问静态成员变量
      示例1 : 静态成员变量
    • +
    +
  • +
+
class Person
{
public:
static int m_A; //静态成员变量
//静态成员变量特点:
//1 在编译阶段分配内存
//2 类内声明,类外初始化
//3 所有对象共享同一份数据
private:
static int m_B; //静态成员变量也是有访问权限的
};
int Person::m_A = 10;
int Person::m_B = 10;
void test01()
{
//静态成员变量两种访问方式
//1、通过对象
Person p1;
p1.m_A = 100;
cout << "p1.m_A = " << p1.m_A << endl;
Person p2;
p2.m_A = 200;
cout << "p1.m_A = " << p1.m_A << endl; //共享同一份数据
cout << "p2.m_A = " << p2.m_A << endl;
//2、通过类名
cout << "m_A = " << Person::m_A << endl;
//cout << "m_B = " << Person::m_B << endl; //私有权限访问不到
}
int main() {
test01();
return 0;
}
+ +

示例2: 静态成员函数

+
class Person
{
public:
//静态成员函数特点:
//1 程序共享一个函数
//2 静态成员函数只能访问静态成员变量
static void func()
{
cout << "func调用" << endl;
m_A = 100;
//m_B = 100; //错误,不可以访问非静态成员变量
}
static int m_A; //静态成员变量
int m_B; //
private:
//静态成员函数也是有访问权限的
static void func2()
{
cout << "func2调用" << endl;
}
};
int Person::m_A = 10;
void test01()
{
//静态成员变量两种访问方式
//1、通过对象
Person p1;
p1.func();
//2、通过类名
Person::func();
//Person::func2(); //私有权限访问不到
}
int main() {
test01();
return 0;
}
+ +

4.3 cpp对象模型和this指针

4.3.1 成员变量和成员函数分开存储

在cpp中,类内的成员变量和成员函数分开存储
只有非静态成员变量才属于类的对象上

+
class Person {
public:
Person() {
mA = 0;
}
//非静态成员变量占对象空间
int mA;
//静态成员变量不占对象空间
static int mB;
//函数也不占对象空间,所有函数共享一个函数实例
void func() {
cout << "mA:" << this->mA << endl;
}
//静态成员函数也不占对象空间
static void sfunc() {
}
};
int main() {
cout << sizeof(Person) << endl;
return 0;
}
+ +

4.3.2 this指针概念

通过4.3.1我们知道在cpp中成员变量和成员函数是分开存储的
每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码
那么问题是:这一块代码是如何区分那个对象调用自己的呢?
cpp通过提供特殊的对象指针,this指针,解决上述问题。
this指针指向被调用的成员函数所属的对象
this指针是隐含每一个非静态成员函数内的一种指针
this指针不需要定义,直接使用即可
this指针的用途:

+
    +
  • 当形参和成员变量同名时,可用this指针来区分
  • +
  • 在类的非静态成员函数中返回对象本身,可使用return *this
  • +
+
class Person
{
public:
Person(int age)
{
//1、当形参和成员变量同名时,可用this指针来区分
this->age = age;
}
Person& PersonAddPerson(Person p)
{
this->age += p.age;
//返回对象本身
return *this;
}
int age;
};
void test01()
{
Person p1(10);
cout << "p1.age = " << p1.age << endl;
Person p2(10);
p2.PersonAddPerson(p1).PersonAddPerson(p1).PersonAddPerson(p1);
cout << "p2.age = " << p2.age << endl;
}
int main() {
test01();
return 0;
}
+ +

4.3.3 空指针访问成员函数

cpp中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针
如果用到this指针,需要加以判断保证代码的健壮性
示例:

+
//空指针访问成员函数
class Person {
public:
void ShowClassName() {
cout << "我是Person类!" << endl;
}
void ShowPerson() {
if (this *** NULL) {
return;
}
cout << mAge << endl;
}
public:
int mAge;
};
void test01()
{
Person * p = NULL;
p->ShowClassName(); //空指针,可以调用成员函数
p->ShowPerson(); //但是如果成员函数中用到了this指针,就不可以了
}
int main() {
test01();
return 0;
}
+ +

4.3.4 const修饰成员函数

常函数:

+
    +
  • 成员函数后加const后我们称为这个函数为常函数
  • +
  • 常函数内不可以修改成员属性
  • +
  • 成员属性声明时加关键字mutable后,在常函数中依然可以修改
    常对象:
  • +
  • 声明对象前加const称该对象为常对象
  • +
  • 常对象只能调用常函数
    示例:
  • +
+
class Person {
public:
Person() {
m_A = 0;
m_B = 0;
}
//this指针的本质是一个指针常量,指针的指向不可修改
//如果想让指针指向的值也不可以修改,需要声明常函数
void ShowPerson() const {
//const Type* const pointer;
//this = NULL; //不能修改指针的指向 Person* const this;
//this->mA = 100; //但是this指针指向的对象的数据是可以修改的
//const修饰成员函数,表示指针指向的内存空间的数据不能修改,除了mutable修饰的变量
this->m_B = 100;
}
void MyFunc() const {
//mA = 10000;
}
public:
int m_A;
mutable int m_B; //可修改 可变的
};
//const修饰对象 常对象
void test01() {
const Person person; //常量对象
cout << person.m_A << endl;
//person.mA = 100; //常对象不能修改成员变量的值,但是可以访问
person.m_B = 100; //但是常对象可以修改mutable修饰成员变量
//常对象访问成员函数
person.MyFunc(); //常对象不能调用const的函数
}
int main() {
test01();
return 0;
}
+ +

4.4 友元

生活中你的家有客厅(Public),有你的卧室(Private)
客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去
但是呢,你也可以允许你的好闺蜜好基友进去。
在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术
友元的目的就是让一个函数或者类 访问另一个类中私有成员
友元的关键字为 friend
友元的三种实现

+
    +
  • 全局函数做友元
  • +
  • 类做友元
  • +
  • 成员函数做友元
  • +
+

4.4.1 全局函数做友元

class Building
{
//告诉编译器 goodGay全局函数 是 Building类的好朋友,可以访问类中的私有内容
friend void goodGay(Building * building);
public:
Building()
{
this->m_SittingRoom = "客厅";
this->m_BedRoom = "卧室";
}
public:
string m_SittingRoom; //客厅
private:
string m_BedRoom; //卧室
};
void goodGay(Building * building)
{
cout << "好基友正在访问: " << building->m_SittingRoom << endl;
cout << "好基友正在访问: " << building->m_BedRoom << endl;
}
void test01()
{
Building b;
goodGay(&b);
}
int main(){
test01();
return 0;
}
+ +

4.4.2 类做友元

class Building;
class goodGay
{
public:
goodGay();
void visit();
private:
Building *building;
};
class Building
{
//告诉编译器 goodGay类是Building类的好朋友,可以访问到Building类中私有内容
friend class goodGay;
public:
Building();
public:
string m_SittingRoom; //客厅
private:
string m_BedRoom;//卧室
};
Building::Building()
{
this->m_SittingRoom = "客厅";
this->m_BedRoom = "卧室";
}
goodGay::goodGay()
{
building = new Building;
}
void goodGay::visit()
{
cout << "好基友正在访问" << building->m_SittingRoom << endl;
cout << "好基友正在访问" << building->m_BedRoom << endl;
}
void test01()
{
goodGay gg;
gg.visit();
}
int main(){
test01();
return 0;
}
+ +

4.4.3 成员函数做友元

class Building;
class goodGay
{
public:
goodGay();
void visit(); //只让visit函数作为Building的好朋友,可以发访问Building中私有内容
void visit2();
private:
Building *building;
};
class Building
{
//告诉编译器 goodGay类中的visit成员函数 是Building好朋友,可以访问私有内容
friend void goodGay::visit();
public:
Building();
public:
string m_SittingRoom; //客厅
private:
string m_BedRoom;//卧室
};
Building::Building()
{
this->m_SittingRoom = "客厅";
this->m_BedRoom = "卧室";
}
goodGay::goodGay()
{
building = new Building;
}
void goodGay::visit()
{
cout << "好基友正在访问" << building->m_SittingRoom << endl;
cout << "好基友正在访问" << building->m_BedRoom << endl;
}
void goodGay::visit2()
{
cout << "好基友正在访问" << building->m_SittingRoom << endl;
//cout << "好基友正在访问" << building->m_BedRoom << endl;
}
void test01()
{
goodGay gg;
gg.visit();
}
int main(){
test01();
return 0;
}
+ +

4.5 运算符重载

运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型

+

4.5.1 加号运算符重载

作用:实现两个自定义数据类型相加的运算

+
class Person {
public:
Person() {};
Person(int a, int b)
{
this->m_A = a;
this->m_B = b;
}
//成员函数实现 + 号运算符重载
Person operator+(const Person& p) {
Person temp;
temp.m_A = this->m_A + p.m_A;
temp.m_B = this->m_B + p.m_B;
return temp;
}
public:
int m_A;
int m_B;
};
//全局函数实现 + 号运算符重载
//Person operator+(const Person& p1, const Person& p2) {
// Person temp(0, 0);
// temp.m_A = p1.m_A + p2.m_A;
// temp.m_B = p1.m_B + p2.m_B;
// return temp;
//}
//运算符重载 可以发生函数重载
Person operator+(const Person& p2, int val)
{
Person temp;
temp.m_A = p2.m_A + val;
temp.m_B = p2.m_B + val;
return temp;
}
void test() {
Person p1(10, 10);
Person p2(20, 20);
//成员函数方式
Person p3 = p2 + p1; //相当于 p2.operaor+(p1)
cout << "mA:" << p3.m_A << " mB:" << p3.m_B << endl;
Person p4 = p3 + 10; //相当于 operator+(p3,10)
cout << "mA:" << p4.m_A << " mB:" << p4.m_B << endl;
}
int main() {
test();
return 0;
}
+ +
+

总结1:对于内置的数据类型的表达式的的运算符是不可能改变的
总结2:不要滥用运算符重载

+
+

4.5.2 左移运算符重载

作用:可以输出自定义数据类型

+
class Person {
friend ostream& operator<<(ostream& out, Person& p);
public:
Person(int a, int b)
{
this->m_A = a;
this->m_B = b;
}
//成员函数 实现不了 p << cout 不是我们想要的效果
//void operator<<(Person& p){
//}
private:
int m_A;
int m_B;
};
//全局函数实现左移重载
//ostream对象只能有一个
ostream& operator<<(ostream& out, Person& p) {
out << "a:" << p.m_A << " b:" << p.m_B;
return out;
}
void test() {
Person p1(10, 20);
cout << p1 << "hello world" << endl; //链式编程
}
int main() {
test();
return 0;
}
+ +
+

重载左移运算符配合友元可以实现输出自定义数据类型

+
+

4.5.3 递增运算符重载

作用: 通过重载递增运算符,实现自己的整型数据

+
class MyInteger {
friend ostream& operator<<(ostream& out, MyInteger myint);
public:
MyInteger() {
m_Num = 0;
}
//前置++
MyInteger& operator++() {
//先++
m_Num++;
//再返回
return *this;
}
//后置++
MyInteger operator++(int) {
//先返回
MyInteger temp = *this; //记录当前本身的值,然后让本身的值加1,但是返回的是以前的值,达到先返回后++;
m_Num++;
return temp;
}
private:
int m_Num;
};
ostream& operator<<(ostream& out, MyInteger myint) {
out << myint.m_Num;
return out;
}
//前置++ 先++ 再返回
void test01() {
MyInteger myInt;
cout << ++myInt << endl;
cout << myInt << endl;
}
//后置++ 先返回 再++
void test02() {
MyInteger myInt;
cout << myInt++ << endl;
cout << myInt << endl;
}
int main() {
test01();
//test02();
return 0;
}
+ +
+

前置递增返回引用,后置递增返回值

+
+

4.5.4 赋值运算符重载

cpp编译器至少给一个类添加4个函数

+
    +
  1. 默认构造函数(无参,函数体为空)
  2. +
  3. 默认析构函数(无参,函数体为空)
  4. +
  5. 默认拷贝构造函数,对属性进行值拷贝
  6. +
  7. 赋值运算符 operator=, 对属性进行值拷贝
    如果类中有属性指向堆区,做赋值操作时也会出现深浅拷贝问题
    示例:
  8. +
+
class Person
{
public:
Person(int age)
{
//将年龄数据开辟到堆区
m_Age = new int(age);
}
//重载赋值运算符
Person& operator=(Person &p)
{
if (m_Age != NULL)
{
delete m_Age;
m_Age = NULL;
}
//编译器提供的代码是浅拷贝
//m_Age = p.m_Age;
//提供深拷贝 解决浅拷贝的问题
m_Age = new int(*p.m_Age);
//返回自身
return *this;
}
~Person()
{
if (m_Age != NULL)
{
delete m_Age;
m_Age = NULL;
}
}
//年龄的指针
int *m_Age;
};
void test01()
{
Person p1(18);
Person p2(20);
Person p3(30);
p3 = p2 = p1; //赋值操作
cout << "p1的年龄为:" << *p1.m_Age << endl;
cout << "p2的年龄为:" << *p2.m_Age << endl;
cout << "p3的年龄为:" << *p3.m_Age << endl;
}
int main() {
test01();
//int a = 10;
//int b = 20;
//int c = 30;
//c = b = a;
//cout << "a = " << a << endl;
//cout << "b = " << b << endl;
//cout << "c = " << c << endl;
return 0;
}
+ +

4.5.5 关系运算符重载

作用: 重载关系运算符,可以让两个自定义类型对象进行对比操作
示例:

+
class Person
{
public:
Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
};
bool operator***(Person & p)
{
if (this->m_Name *** p.m_Name && this->m_Age *** p.m_Age)
{
return true;
}
else
{
return false;
}
}
bool operator!=(Person & p)
{
if (this->m_Name *** p.m_Name && this->m_Age *** p.m_Age)
{
return false;
}
else
{
return true;
}
}
string m_Name;
int m_Age;
};
void test01()
{
//int a = 0;
//int b = 0;
Person a("孙悟空", 18);
Person b("孙悟空", 18);
if (a *** b)
{
cout << "a和b相等" << endl;
}
else
{
cout << "a和b不相等" << endl;
}
if (a != b)
{
cout << "a和b不相等" << endl;
}
else
{
cout << "a和b相等" << endl;
}
}
int main() {
test01();
return 0;
}
+ +

4.5.6 函数调用运算符重载

    +
  • 函数调用运算符 () 也可以重载

    +
  • +
  • 由于重载后使用的方式非常像函数的调用,因此称为仿函数

    +
  • +
  • 仿函数没有固定写法,非常灵活
    示例:

    +
  • +
+
class MyPrint
{
public:
void operator()(string text)
{
cout << text << endl;
}
};
void test01()
{
//重载的()操作符 也称为仿函数
MyPrint myFunc;
myFunc("hello world");
}
class MyAdd
{
public:
int operator()(int v1, int v2)
{
return v1 + v2;
}
};
void test02()
{
MyAdd add;
int ret = add(10, 10);
cout << "ret = " << ret << endl;
//匿名对象调用
cout << "MyAdd()(100,100) = " << MyAdd()(100, 100) << endl;
}
int main() {
test01();
test02();
return 0;
}
+ +

4.6 继承

继承是面向对象三大特性之一
我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。
这个时候我们就可以考虑利用继承的技术,减少重复代码

+

4.6.1 继承的基本语法

例如我们看到很多网站中,都有公共的头部,公共的底部,甚至公共的左侧列表,只有中心内容不同
接下来我们分别利用普通写法和继承的写法来实现网页中的内容,看一下继承存在的意义以及好处
普通实现:

+
//Java页面
class Java
{
public:
void header()
{
cout << "首页、公开课、登录、注册...(公共头部)" << endl;
}
void footer()
{
cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
}
void left()
{
cout << "Java,Python,cpp...(公共分类列表)" << endl;
}
void content()
{
cout << "JAVA学科视频" << endl;
}
};
//Python页面
class Python
{
public:
void header()
{
cout << "首页、公开课、登录、注册...(公共头部)" << endl;
}
void footer()
{
cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
}
void left()
{
cout << "Java,Python,cpp...(公共分类列表)" << endl;
}
void content()
{
cout << "Python学科视频" << endl;
}
};
//cpp页面
class CPP
{
public:
void header()
{
cout << "首页、公开课、登录、注册...(公共头部)" << endl;
}
void footer()
{
cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
}
void left()
{
cout << "Java,Python,cpp...(公共分类列表)" << endl;
}
void content()
{
cout << "cpp学科视频" << endl;
}
};
void test01()
{
//Java页面
cout << "Java下载视频页面如下: " << endl;
Java ja;
ja.header();
ja.footer();
ja.left();
ja.content();
cout << "--------------------" << endl;
//Python页面
cout << "Python下载视频页面如下: " << endl;
Python py;
py.header();
py.footer();
py.left();
py.content();
cout << "--------------------" << endl;
//cpp页面
cout << "cpp下载视频页面如下: " << endl;
CPP cp;
cp.header();
cp.footer();
cp.left();
cp.content();
}
int main() {
test01();
return 0;
}
+ +

继承实现:

+
//公共页面
class BasePage
{
public:
void header()
{
cout << "首页、公开课、登录、注册...(公共头部)" << endl;
}
void footer()
{
cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
}
void left()
{
cout << "Java,Python,cpp...(公共分类列表)" << endl;
}
};
//Java页面
class Java : public BasePage
{
public:
void content()
{
cout << "JAVA学科视频" << endl;
}
};
//Python页面
class Python : public BasePage
{
public:
void content()
{
cout << "Python学科视频" << endl;
}
};
//cpp页面
class CPP : public BasePage
{
public:
void content()
{
cout << "cpp学科视频" << endl;
}
};
void test01()
{
//Java页面
cout << "Java下载视频页面如下: " << endl;
Java ja;
ja.header();
ja.footer();
ja.left();
ja.content();
cout << "--------------------" << endl;
//Python页面
cout << "Python下载视频页面如下: " << endl;
Python py;
py.header();
py.footer();
py.left();
py.content();
cout << "--------------------" << endl;
//cpp页面
cout << "cpp下载视频页面如下: " << endl;
CPP cp;
cp.header();
cp.footer();
cp.left();
cp.content();
}
int main() {
test01();
return 0;
}
+ +

继承的好处:可以减少重复的代码
class A : public B;
A 类称为子类 或 派生类
B 类称为父类 或 基类
派生类中的成员,包含两大部分
一类是从基类继承过来的,一类是自己增加的成员。
从基类继承过过来的表现其共性,而新增的成员体现了其个性。

+

4.6.2 继承方式

继承的语法:class 子类 : 继承方式 父类
继承方式一共有三种:

+
    +
  • 公共继承
  • +
  • 保护继承
  • +
  • 私有继承
    示例:
  • +
+
class Base1
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
//公共继承
class Son1 :public Base1
{
public:
void func()
{
m_A; //可访问 public权限
m_B; //可访问 protected权限
//m_C; //不可访问
}
};
void myClass()
{
Son1 s1;
s1.m_A; //其他类只能访问到公共权限
}
//保护继承
class Base2
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
class Son2:protected Base2
{
public:
void func()
{
m_A; //可访问 protected权限
m_B; //可访问 protected权限
//m_C; //不可访问
}
};
void myClass2()
{
Son2 s;
//s.m_A; //不可访问
}
//私有继承
class Base3
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
class Son3:private Base3
{
public:
void func()
{
m_A; //可访问 private权限
m_B; //可访问 private权限
//m_C; //不可访问
}
};
class GrandSon3 :public Son3
{
public:
void func()
{
//Son3是私有继承,所以继承Son3的属性在GrandSon3中都无法访问到
//m_A;
//m_B;
//m_C;
}
};
+ +

4.6.3 继承中的对象模型

问题: 从父类继承过来的成员,哪些属于子类对象中?
示例:

+
class Base
{
public:
int m_A;
protected:
int m_B;
private:
int m_C; //私有成员只是被隐藏了,但是还是会继承下去
};
//公共继承
class Son :public Base
{
public:
int m_D;
};
void test01()
{
cout << "sizeof Son = " << sizeof(Son) << endl;
}
int main() {
test01();
return 0;
}
+ +
+

父类中私有成员也是被子类继承下去了,只是由编译器给隐藏后访问不到

+
+

4.6.4 继承中构造和析构顺序

子类继承父类后,当创建子类对象,也会调用父类的构造函数
问题:父类和子类的构造和析构顺序是谁先谁后?
示例:

+
class Base
{
public:
Base()
{
cout << "Base构造函数!" << endl;
}
~Base()
{
cout << "Base析构函数!" << endl;
}
};
class Son : public Base
{
public:
Son()
{
cout << "Son构造函数!" << endl;
}
~Son()
{
cout << "Son析构函数!" << endl;
}
};
void test01()
{
//继承中 先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反
Son s;
}
int main() {
test01();
return 0;
}
+ +
+

继承中,先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反

+
+

4.6.5 继承同名成员处理方式

问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢?

+
    +
  • 访问子类同名成员 直接访问即可
  • +
  • 访问父类同名成员 需要加作用域
    示例:
  • +
+
class Base {
public:
Base()
{
m_A = 100;
}
void func()
{
cout << "Base - func()调用" << endl;
}
void func(int a)
{
cout << "Base - func(int a)调用" << endl;
}
public:
int m_A;
};
class Son : public Base {
public:
Son()
{
m_A = 200;
}
//当子类与父类拥有同名的成员函数,子类会隐藏父类中所有版本的同名成员函数
//如果想访问父类中被隐藏的同名成员函数,需要加父类的作用域
void func()
{
cout << "Son - func()调用" << endl;
}
public:
int m_A;
};
void test01()
{
Son s;
cout << "Son下的m_A = " << s.m_A << endl;
cout << "Base下的m_A = " << s.Base::m_A << endl;
s.func();
s.Base::func();
s.Base::func(10);
}
int main() {
test01();
return EXIT_SUCCESS;
}
+ +

总结:

+
    +
  1. 子类对象可以直接访问到子类中同名成员
  2. +
  3. 子类对象加作用域可以访问到父类同名成员
  4. +
  5. 当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数
  6. +
+

4.6.6 继承同名静态成员处理方式

问题:继承中同名的静态成员在子类对象上如何进行访问?
静态成员和非静态成员出现同名,处理方式一致

+
    +
  • 访问子类同名成员 直接访问即可
  • +
  • 访问父类同名成员 需要加作用域
    示例:
  • +
+
class Base {
public:
static void func()
{
cout << "Base - static void func()" << endl;
}
static void func(int a)
{
cout << "Base - static void func(int a)" << endl;
}
static int m_A;
};
int Base::m_A = 100;
class Son : public Base {
public:
static void func()
{
cout << "Son - static void func()" << endl;
}
static int m_A;
};
int Son::m_A = 200;
//同名成员属性
void test01()
{
//通过对象访问
cout << "通过对象访问: " << endl;
Son s;
cout << "Son 下 m_A = " << s.m_A << endl;
cout << "Base 下 m_A = " << s.Base::m_A << endl;
//通过类名访问
cout << "通过类名访问: " << endl;
cout << "Son 下 m_A = " << Son::m_A << endl;
cout << "Base 下 m_A = " << Son::Base::m_A << endl;
}
//同名成员函数
void test02()
{
//通过对象访问
cout << "通过对象访问: " << endl;
Son s;
s.func();
s.Base::func();
cout << "通过类名访问: " << endl;
Son::func();
Son::Base::func();
//出现同名,子类会隐藏掉父类中所有同名成员函数,需要加作作用域访问
Son::Base::func(100);
}
int main() {
//test01();
test02();
return 0;
}
+ +
+

同名静态成员处理方式和非静态处理方式一样,只不过有两种访问的方式(通过对象 和 通过类名)

+
+

4.6.7 多继承语法

cpp允许一个类继承多个类
语法:class 子类 :继承方式 父类1 , 继承方式 父类2...
多继承可能会引发父类中有同名成员出现,需要加作用域区分
cpp实际开发中不建议用多继承
示例:

+
class Base1 {
public:
Base1()
{
m_A = 100;
}
public:
int m_A;
};
class Base2 {
public:
Base2()
{
m_A = 200; //开始是m_B 不会出问题,但是改为mA就会出现不明确
}
public:
int m_A;
};
//语法:class 子类:继承方式 父类1 ,继承方式 父类2
class Son : public Base2, public Base1
{
public:
Son()
{
m_C = 300;
m_D = 400;
}
public:
int m_C;
int m_D;
};
//多继承容易产生成员同名的情况
//通过使用类名作用域可以区分调用哪一个基类的成员
void test01()
{
Son s;
cout << "sizeof Son = " << sizeof(s) << endl;
cout << s.Base1::m_A << endl;
cout << s.Base2::m_A << endl;
}
int main() {
test01();
return 0;
}
+ +
+

总结: 多继承中如果父类中出现了同名情况,子类使用时候要加作用域

+
+

4.6.8 菱形继承

菱形继承概念:
两个派生类继承同一个基类
又有某个类同时继承者两个派生类
这种继承被称为菱形继承,或者钻石继承
菱形继承问题:

+
    +
  1. 羊继承了动物的数据,驼同样继承了动物的数据,当草泥马使用数据时,就会产生二义性。
  2. +
  3. 草泥马继承自动物的数据继承了两份,其实我们应该清楚,这份数据我们只需要一份就可以。
    示例:
  4. +
+
class Animal
{
public:
int m_Age;
};
//继承前加virtual关键字后,变为虚继承
//此时公共的父类Animal称为虚基类
class Sheep : virtual public Animal {};
class Tuo : virtual public Animal {};
class SheepTuo : public Sheep, public Tuo {};
void test01()
{
SheepTuo st;
st.Sheep::m_Age = 100;
st.Tuo::m_Age = 200;
cout << "st.Sheep::m_Age = " << st.Sheep::m_Age << endl;
cout << "st.Tuo::m_Age = " << st.Tuo::m_Age << endl;
cout << "st.m_Age = " << st.m_Age << endl;
}
int main() {
test01();
return 0;
}
+ +
    +
  • 菱形继承带来的主要问题是子类继承两份相同的数据,导致资源浪费以及毫无意义

    +
  • +
  • 利用虚继承可以解决菱形继承问题

    +
  • +
+

4.7 多态

4.7.1 多态的基本概念

多态是cpp面向对象三大特性之一
多态分为两类

+
    +
  • 静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名
  • +
  • 动态多态: 派生类和虚函数实现运行时多态
    静态多态和动态多态区别:
  • +
  • 静态多态的函数地址早绑定 - 编译阶段确定函数地址
  • +
  • 动态多态的函数地址晚绑定 - 运行阶段确定函数地址
    下面通过案例进行讲解多态
  • +
+
class Animal
{
public:
//Speak函数就是虚函数
//函数前面加上virtual关键字,变成虚函数,那么编译器在编译的时候就不能确定函数调用了。
virtual void speak()
{
cout << "动物在说话" << endl;
}
};
class Cat :public Animal
{
public:
void speak()
{
cout << "小猫在说话" << endl;
}
};
class Dog :public Animal
{
public:
void speak()
{
cout << "小狗在说话" << endl;
}
};
//我们希望传入什么对象,那么就调用什么对象的函数
//如果函数地址在编译阶段就能确定,那么静态联编
//如果函数地址在运行阶段才能确定,就是动态联编
void DoSpeak(Animal & animal)
{
animal.speak();
}
//
//多态满足条件:
//1、有继承关系
//2、子类重写父类中的虚函数
//多态使用:
//父类指针或引用指向子类对象
void test01()
{
Cat cat;
DoSpeak(cat);
Dog dog;
DoSpeak(dog);
}
int main() {
test01();
return 0;
}
+ +

多态满足条件

+
    +
  • 有继承关系
  • +
  • 子类重写父类中的虚函数
    多态使用条件
  • +
  • 父类指针或引用指向子类对象
    重写:函数返回值类型 函数名 参数列表 完全一致称为重写
  • +
+

4.7.2 多态案例一-计算器类

案例描述:
分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类
多态的优点:

+
    +
  • 代码组织结构清晰
  • +
  • 可读性强
  • +
  • 利于前期和后期的扩展以及维护
    示例:
  • +
+
//普通实现
class Calculator {
public:
int getResult(string oper)
{
if (oper *** "+") {
return m_Num1 + m_Num2;
}
else if (oper *** "-") {
return m_Num1 - m_Num2;
}
else if (oper *** "*") {
return m_Num1 * m_Num2;
}
//如果要提供新的运算,需要修改源码
}
public:
int m_Num1;
int m_Num2;
};
void test01()
{
//普通实现测试
Calculator c;
c.m_Num1 = 10;
c.m_Num2 = 10;
cout << c.m_Num1 << " + " << c.m_Num2 << " = " << c.getResult("+") << endl;
cout << c.m_Num1 << " - " << c.m_Num2 << " = " << c.getResult("-") << endl;
cout << c.m_Num1 << " * " << c.m_Num2 << " = " << c.getResult("*") << endl;
}
//多态实现
//抽象计算器类
//多态优点:代码组织结构清晰,可读性强,利于前期和后期的扩展以及维护
class AbstractCalculator
{
public :
virtual int getResult()
{
return 0;
}
int m_Num1;
int m_Num2;
};
//加法计算器
class AddCalculator :public AbstractCalculator
{
public:
int getResult()
{
return m_Num1 + m_Num2;
}
};
//减法计算器
class SubCalculator :public AbstractCalculator
{
public:
int getResult()
{
return m_Num1 - m_Num2;
}
};
//乘法计算器
class MulCalculator :public AbstractCalculator
{
public:
int getResult()
{
return m_Num1 * m_Num2;
}
};
void test02()
{
//创建加法计算器
AbstractCalculator *abc = new AddCalculator;
abc->m_Num1 = 10;
abc->m_Num2 = 10;
cout << abc->m_Num1 << " + " << abc->m_Num2 << " = " << abc->getResult() << endl;
delete abc; //用完了记得销毁
//创建减法计算器
abc = new SubCalculator;
abc->m_Num1 = 10;
abc->m_Num2 = 10;
cout << abc->m_Num1 << " - " << abc->m_Num2 << " = " << abc->getResult() << endl;
delete abc;
//创建乘法计算器
abc = new MulCalculator;
abc->m_Num1 = 10;
abc->m_Num2 = 10;
cout << abc->m_Num1 << " * " << abc->m_Num2 << " = " << abc->getResult() << endl;
delete abc;
}
int main() {
//test01();
test02();
return 0;
}
+ +
+

cpp开发提倡利用多态设计程序架构,因为多态优点很多

+
+

4.7.3 纯虚函数和抽象类

在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容
因此可以将虚函数改为纯虚函数
纯虚函数语法:virtual 返回值类型 函数名 (参数列表)= 0 ;
当类中有了纯虚函数,这个类也称为抽象类
抽象类特点

+
    +
  • 无法实例化对象
  • +
  • 子类必须重写抽象类中的纯虚函数,否则也属于抽象类
    示例:
  • +
+
class Base
{
public:
//纯虚函数
//类中只要有一个纯虚函数就称为抽象类
//抽象类无法实例化对象
//子类必须重写父类中的纯虚函数,否则也属于抽象类
virtual void func() = 0;
};
class Son :public Base
{
public:
virtual void func()
{
cout << "func调用" << endl;
};
};
void test01()
{
Base * base = NULL;
//base = new Base; // 错误,抽象类无法实例化对象
base = new Son;
base->func();
delete base;//记得销毁
}
int main() {
test01();
return 0;
}
+ +

4.7.4 多态案例二-制作饮品

案例描述:
制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料
示例:

+
//抽象制作饮品
class AbstractDrinking {
public:
//烧水
virtual void Boil() = 0;
//冲泡
virtual void Brew() = 0;
//倒入杯中
virtual void PourInCup() = 0;
//加入辅料
virtual void PutSomething() = 0;
//规定流程
void MakeDrink() {
Boil();
Brew();
PourInCup();
PutSomething();
}
};
//制作咖啡
class Coffee : public AbstractDrinking {
public:
//烧水
virtual void Boil() {
cout << "煮农夫山泉!" << endl;
}
//冲泡
virtual void Brew() {
cout << "冲泡咖啡!" << endl;
}
//倒入杯中
virtual void PourInCup() {
cout << "将咖啡倒入杯中!" << endl;
}
//加入辅料
virtual void PutSomething() {
cout << "加入牛奶!" << endl;
}
};
//制作茶水
class Tea : public AbstractDrinking {
public:
//烧水
virtual void Boil() {
cout << "煮自来水!" << endl;
}
//冲泡
virtual void Brew() {
cout << "冲泡茶叶!" << endl;
}
//倒入杯中
virtual void PourInCup() {
cout << "将茶水倒入杯中!" << endl;
}
//加入辅料
virtual void PutSomething() {
cout << "加入枸杞!" << endl;
}
};
//业务函数
void DoWork(AbstractDrinking* drink) {
drink->MakeDrink();
delete drink;
}
void test01() {
DoWork(new Coffee);
cout << "--------------" << endl;
DoWork(new Tea);
}
int main() {
test01();
return 0;
}
+ +

4.7.5 虚析构和纯虚析构

多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码
解决方式:将父类中的析构函数改为虚析构或者纯虚析构
虚析构和纯虚析构共性:

+
    +
  • 可以解决父类指针释放子类对象
  • +
  • 都需要有具体的函数实现
    虚析构和纯虚析构区别:
  • +
  • 如果是纯虚析构,该类属于抽象类,无法实例化对象
    虚析构语法:
    virtual ~类名(){}
    纯虚析构语法:
    virtual ~类名() = 0;
    类名::~类名(){}
    示例:
  • +
+
class Animal {
public:
Animal()
{
cout << "Animal 构造函数调用!" << endl;
}
virtual void Speak() = 0;
//析构函数加上virtual关键字,变成虚析构函数
//virtual ~Animal()
//{
// cout << "Animal虚析构函数调用!" << endl;
//}
virtual ~Animal() = 0;
};
Animal::~Animal()
{
cout << "Animal 纯虚析构函数调用!" << endl;
}
//和包含普通纯虚函数的类一样,包含了纯虚析构函数的类也是一个抽象类。不能够被实例化。
class Cat : public Animal {
public:
Cat(string name)
{
cout << "Cat构造函数调用!" << endl;
m_Name = new string(name);
}
virtual void Speak()
{
cout << *m_Name << "小猫在说话!" << endl;
}
~Cat()
{
cout << "Cat析构函数调用!" << endl;
if (this->m_Name != NULL) {
delete m_Name;
m_Name = NULL;
}
}
public:
string *m_Name;
};
void test01()
{
Animal *animal = new Cat("Tom");
animal->Speak();
//通过父类指针去释放,会导致子类对象可能清理不干净,造成内存泄漏
//怎么解决?给基类增加一个虚析构函数
//虚析构函数就是用来解决通过父类指针释放子类对象
delete animal;
}
int main() {
test01();
return 0;
}
+ +
    +
  1. 虚析构或纯虚析构就是用来解决通过父类指针释放子类对象
  2. +
  3. 如果子类中没有堆区数据,可以不写为虚析构或纯虚析构
  4. +
  5. 拥有纯虚析构函数的类也属于抽象类
  6. +
+

4.7.6 多态案例三-电脑组装

案例描述:
电脑主要组成部件为 CPU(用于计算),显卡(用于显示),内存条(用于存储)
将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件,例如Intel厂商和Lenovo厂商
创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口
测试时组装三台不同的电脑进行工作
示例:

+
#include<iostream>
using namespace std;
//抽象CPU类
class CPU
{
public:
//抽象的计算函数
virtual void calculate() = 0;
};
//抽象显卡类
class VideoCard
{
public:
//抽象的显示函数
virtual void display() = 0;
};
//抽象内存条类
class Memory
{
public:
//抽象的存储函数
virtual void storage() = 0;
};
//电脑类
class Computer
{
public:
Computer(CPU * cpu, VideoCard * vc, Memory * mem)
{
m_cpu = cpu;
m_vc = vc;
m_mem = mem;
}
//提供工作的函数
void work()
{
//让零件工作起来,调用接口
m_cpu->calculate();
m_vc->display();
m_mem->storage();
}
//提供析构函数 释放3个电脑零件
~Computer()
{
//释放CPU零件
if (m_cpu != NULL)
{
delete m_cpu;
m_cpu = NULL;
}
//释放显卡零件
if (m_vc != NULL)
{
delete m_vc;
m_vc = NULL;
}
//释放内存条零件
if (m_mem != NULL)
{
delete m_mem;
m_mem = NULL;
}
}
private:
CPU * m_cpu; //CPU的零件指针
VideoCard * m_vc; //显卡零件指针
Memory * m_mem; //内存条零件指针
};
//具体厂商
//Intel厂商
class IntelCPU :public CPU
{
public:
virtual void calculate()
{
cout << "Intel的CPU开始计算了!" << endl;
}
};
class IntelVideoCard :public VideoCard
{
public:
virtual void display()
{
cout << "Intel的显卡开始显示了!" << endl;
}
};
class IntelMemory :public Memory
{
public:
virtual void storage()
{
cout << "Intel的内存条开始存储了!" << endl;
}
};
//Lenovo厂商
class LenovoCPU :public CPU
{
public:
virtual void calculate()
{
cout << "Lenovo的CPU开始计算了!" << endl;
}
};
class LenovoVideoCard :public VideoCard
{
public:
virtual void display()
{
cout << "Lenovo的显卡开始显示了!" << endl;
}
};
class LenovoMemory :public Memory
{
public:
virtual void storage()
{
cout << "Lenovo的内存条开始存储了!" << endl;
}
};
void test01()
{
//第一台电脑零件
CPU * intelCpu = new IntelCPU;
VideoCard * intelCard = new IntelVideoCard;
Memory * intelMem = new IntelMemory;
cout << "第一台电脑开始工作:" << endl;
//创建第一台电脑
Computer * computer1 = new Computer(intelCpu, intelCard, intelMem);
computer1->work();
delete computer1;
cout << "-----------------------" << endl;
cout << "第二台电脑开始工作:" << endl;
//第二台电脑组装
Computer * computer2 = new Computer(new LenovoCPU, new LenovoVideoCard, new LenovoMemory);;
computer2->work();
delete computer2;
cout << "-----------------------" << endl;
cout << "第三台电脑开始工作:" << endl;
//第三台电脑组装
Computer * computer3 = new Computer(new LenovoCPU, new IntelVideoCard, new LenovoMemory);;
computer3->work();
delete computer3;
}
+ +

五、文件操作

程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放
通过文件可以将数据持久化
cpp中对文件操作需要包含头文件 fstream
文件类型分为两种:

+
    +
  1. 文本文件 - 文件以文本的ASCII码形式存储在计算机中
  2. +
  3. 二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们
    操作文件的三大类:
  4. +
  5. ofstream:写操作
  6. +
  7. ifstream: 读操作
  8. +
  9. fstream : 读写操作
  10. +
+

5.1文本文件

5.1.1写文件

写文件步骤如下:

+
    +
  1. 包含头文件
    \#include <fstream\>

    +
  2. +
  3. 创建流对象
    ofstream ofs;

    +
  4. +
  5. 打开文件
    ofs.open("文件路径",打开方式);

    +
  6. +
  7. 写数据
    ofs << "写入的数据";

    +
  8. +
  9. 关闭文件
    ofs.close();
    文件打开方式:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    打开方式解释
    ios::in为读文件而打开文件
    ios::out为写文件而打开文件
    ios::ate初始位置:文件尾
    ios::app追加方式写文件
    ios::trunc如果文件存在先删除,再创建
    ios::binary二进制方式
    注意: 文件打开方式可以配合使用,利用操作符
    例如: 用二进制方式写文件 `ios::binaryios:: out`
    示例:
    +
  10. +
+
#include <fstream>
void test01()
{
ofstream ofs;
ofs.open("test.txt", ios::out);
ofs << "姓名:张三" << endl;
ofs << "性别:男" << endl;
ofs << "年龄:18" << endl;
ofs.close();
}
int main() {
test01();
return 0;
}
+ +
    +
  • 文件操作必须包含头文件 fstream

    +
  • +
  • 读文件可以利用 ofstream ,或者fstream类

    +
  • +
  • 打开文件时候需要指定操作文件的路径,以及打开方式

    +
  • +
  • 利用<<可以向文件中写数据

    +
  • +
  • 操作完毕,要关闭文件

    +
  • +
+

5.1.2读文件

读文件与写文件步骤相似,但是读取方式相对于比较多
读文件步骤如下:

+
    +
  1. 包含头文件
    #include <fstream>
  2. +
  3. 创建流对象
    ifstream ifs;
  4. +
  5. 打开文件并判断文件是否打开成功
    ifs.open("文件路径",打开方式);
  6. +
  7. 读数据
    四种方式读取
  8. +
  9. 关闭文件
    ifs.close();
    示例:
  10. +
+
#include <fstream>
#include <string>
void test01()
{
ifstream ifs;
ifs.open("test.txt", ios::in);
if (!ifs.is_open())
{
cout << "文件打开失败" << endl;
return;
}
//第一种方式
//char buf[1024] = { 0 };
//while (ifs >> buf)
//{
// cout << buf << endl;
//}
//第二种
//char buf[1024] = { 0 };
//while (ifs.getline(buf,sizeof(buf)))
//{
// cout << buf << endl;
//}
//第三种
//string buf;
//while (getline(ifs, buf))
//{
// cout << buf << endl;
//}
char c;
while ((c = ifs.get()) != EOF)
{
cout << c;
}
ifs.close();
}
int main() {
test01();
return 0;
}
+ +
    +
  • 读文件可以利用 ifstream ,或者fstream
  • +
  • 利用is_open函数可以判断文件是否打开成功
  • +
  • close 关闭文件
  • +
+

5.2 二进制文件

以二进制的方式对文件进行读写操作
打开方式要指定为 ios::binary

+

5.2.1 写文件

二进制方式写文件主要利用流对象调用成员函数write
函数原型 :ostream& write(const char * buffer,int len);
参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数
示例:

+
#include <fstream>
#include <string>
class Person
{
public:
char m_Name[64];
int m_Age;
};
//二进制文件 写文件
void test01()
{
//1、包含头文件
//2、创建输出流对象
ofstream ofs("person.txt", ios::out | ios::binary);
//3、打开文件
//ofs.open("person.txt", ios::out | ios::binary);
Person p = {"张三" , 18};
//4、写文件
ofs.write((const char *)&p, sizeof(p));
//5、关闭文件
ofs.close();
}
int main() {
test01();
return 0;
}
+ +
    +
  • 文件输出流对象 可以通过write函数,以二进制方式写数据
  • +
+

5.2.2 读文件

二进制方式读文件主要利用流对象调用成员函数read
函数原型:istream& read(char *buffer,int len);
参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数
示例:

+
#include <fstream>
#include <string>
class Person
{
public:
char m_Name[64];
int m_Age;
};
void test01()
{
ifstream ifs("person.txt", ios::in | ios::binary);
if (!ifs.is_open())
{
cout << "文件打开失败" << endl;
}
Person p;
ifs.read((char *)&p, sizeof(p));
cout << "姓名: " << p.m_Name << " 年龄: " << p.m_Age << endl;
}
int main() {
test01();
return 0;
}
+ +
    +
  • 文件输入流对象 可以通过read函数,以二进制方式读数据
  • +
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2022/05/25/note/Programming/Language/cpp-3/index.html b/2022/05/25/note/Programming/Language/cpp-3/index.html new file mode 100644 index 000000000..0984265b2 --- /dev/null +++ b/2022/05/25/note/Programming/Language/cpp-3/index.html @@ -0,0 +1,1411 @@ + + + + + + + + + + + + C Plus Plus - Enhancement | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ C Plus Plus - Enhancement +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

本阶段主要针对cpp泛型编程STL技术做详细讲解,探讨cpp更深层的使用

+ + +

一、模板

1.1 模板的概念

模板就是建立通用的模具,大大提高复用性
模板的特点:

+
    +
  • 模板不可以直接使用,它只是一个框架
  • +
  • 模板的通用并不是万能的
  • +
+

1.2 函数模板

    +
  • cpp另一种编程思想称为 泛型编程 ,主要利用的技术就是模板

    +
  • +
  • cpp提供两种模板机制:函数模板类模板

    +
  • +
+

1.2.1 函数模板语法

函数模板作用:
建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。
语法:

+
template<typename T>
函数声明或定义
+ +

解释:
template — 声明创建模板
typename — 表面其后面的符号是一种数据类型,可以用class代替
T — 通用的数据类型,名称可以替换,通常为大写字母
示例:

+
//交换整型函数
void swapInt(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
//交换浮点型函数
void swapDouble(double& a, double& b) {
double temp = a;
a = b;
b = temp;
}
//利用模板提供通用的交换函数
template<typename T>
void mySwap(T& a, T& b)
{
T temp = a;
a = b;
b = temp;
}
void test01()
{
int a = 10;
int b = 20;
//swapInt(a, b);
//利用模板实现交换
//1、自动类型推导
mySwap(a, b);
//2、显示指定类型
mySwap<int>(a, b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
int main() {
test01();
return 0;
}
+ +
    +
  • 函数模板利用关键字 template

    +
  • +
  • 使用函数模板有两种方式:自动类型推导、显示指定类型

    +
  • +
  • 模板的目的是为了提高复用性,将类型参数化

    +
  • +
+

1.2.2 函数模板注意事项

注意事项:

+
    +
  • 自动类型推导,必须推导出一致的数据类型T,才可以使用
  • +
  • 模板必须要确定出T的数据类型,才可以使用
    示例:
  • +
+
//利用模板提供通用的交换函数
template<class T>
void mySwap(T& a, T& b)
{
T temp = a;
a = b;
b = temp;
}
// 1、自动类型推导,必须推导出一致的数据类型T,才可以使用
void test01()
{
int a = 10;
int b = 20;
char c = 'c';
mySwap(a, b); // 正确,可以推导出一致的T
//mySwap(a, c); // 错误,推导不出一致的T类型
}
// 2、模板必须要确定出T的数据类型,才可以使用
template<class T>
void func()
{
cout << "func 调用" << endl;
}
void test02()
{
//func(); //错误,模板不能独立使用,必须确定出T的类型
func<int>(); //利用显示指定类型的方式,给T一个类型,才可以使用该模板
}
int main() {
test01();
test02();
return 0;
}
+ +
    +
  • 使用模板时必须确定出通用数据类型T,并且能够推导出一致的类型
  • +
+

1.2.3 函数模板案例

案例描述:

+
    +
  • 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序
  • +
  • 排序规则从大到小,排序算法为选择排序
  • +
  • 分别利用char数组int数组进行测试
    示例:
  • +
+
//交换的函数模板
template<typename T>
void mySwap(T &a, T&b)
{
T temp = a;
a = b;
b = temp;
}
template<class T> // 也可以替换成typename
//利用选择排序,进行对数组从大到小的排序
void mySort(T arr[], int len)
{
for (int i = 0; i < len; i++)
{
int max = i; //最大数的下标
for (int j = i + 1; j < len; j++)
{
if (arr[max] < arr[j])
{
max = j;
}
}
if (max != i) //如果最大数的下标不是i,交换两者
{
mySwap(arr[max], arr[i]);
}
}
}
template<typename T>
void printArray(T arr[], int len) {
for (int i = 0; i < len; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
void test01()
{
//测试char数组
char charArr[] = "bdcfeagh";
int num = sizeof(charArr) / sizeof(char);
mySort(charArr, num);
printArray(charArr, num);
}
void test02()
{
//测试int数组
int intArr[] = { 7, 5, 8, 1, 3, 9, 2, 4, 6 };
int num = sizeof(intArr) / sizeof(int);
mySort(intArr, num);
printArray(intArr, num);
}
int main() {
test01();
test02();
return 0;
}
+ +

模板可以提高代码复用,需要熟练掌握

+

1.2.4 普通函数与函数模板的区别

普通函数与函数模板区别:

+
    +
  • 普通函数调用时可以发生自动类型转换(隐式类型转换)
  • +
  • 函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换
  • +
  • 如果利用显示指定类型的方式,可以发生隐式类型转换
    示例:
  • +
+
//普通函数
int myAdd01(int a, int b)
{
return a + b;
}
//函数模板
template<class T>
T myAdd02(T a, T b)
{
return a + b;
}
//使用函数模板时,如果用自动类型推导,不会发生自动类型转换,即隐式类型转换
void test01()
{
int a = 10;
int b = 20;
char c = 'c';
cout << myAdd01(a, c) << endl; //正确,将char类型的'c'隐式转换为int类型 'c' 对应 ASCII码 99
//myAdd02(a, c); // 报错,使用自动类型推导时,不会发生隐式类型转换
myAdd02<int>(a, c); //正确,如果用显示指定类型,可以发生隐式类型转换
}
int main() {
test01();
system("pause");
return 0;
}
+ +

建议使用显示指定类型的方式,调用函数模板,因为可以自己确定通用类型T

+

1.2.5 普通函数与函数模板的调用规则

调用规则如下:

+
    +
  1. 如果函数模板和普通函数都可以实现,优先调用普通函数
  2. +
  3. 可以通过空模板参数列表来强制调用函数模板
  4. +
  5. 函数模板也可以发生重载
  6. +
  7. 如果函数模板可以产生更好的匹配,优先调用函数模板
    示例:
  8. +
+
//普通函数与函数模板调用规则
void myPrint(int a, int b)
{
cout << "调用的普通函数" << endl;
}
template<typename T>
void myPrint(T a, T b)
{
cout << "调用的模板" << endl;
}
template<typename T>
void myPrint(T a, T b, T c)
{
cout << "调用重载的模板" << endl;
}
void test01()
{
//1、如果函数模板和普通函数都可以实现,优先调用普通函数
// 注意 如果告诉编译器 普通函数是有的,但只是声明没有实现,或者不在当前文件内实现,就会报错找不到
int a = 10;
int b = 20;
myPrint(a, b); //调用普通函数
//2、可以通过空模板参数列表来强制调用函数模板
myPrint<>(a, b); //调用函数模板
//3、函数模板也可以发生重载
int c = 30;
myPrint(a, b, c); //调用重载的函数模板
//4、 如果函数模板可以产生更好的匹配,优先调用函数模板
char c1 = 'a';
char c2 = 'b';
myPrint(c1, c2); //调用函数模板
}
int main() {
test01();
return 0;
}
+ +

既然提供了函数模板,最好就不要提供普通函数,否则容易出现二义性

+

1.2.6 模板的局限性

局限性:

+
    +
  • 模板的通用性并不是万能的
    例如:
  • +
+
template<class T>
void f(T a, T b)
{
a = b;
}
+ +

在上述代码中提供的赋值操作,如果传入的a和b是一个数组,就无法实现了
再例如:

+
template<class T>
void f(T a, T b)
{
if(a > b) { ... }
}
+ +

在上述代码中,如果T的数据类型传入的是像Person这样的自定义数据类型,也无法正常运行
因此cpp为了解决这种问题,提供模板的重载,可以为这些特定的类型提供具体化的模板
示例:

+
#include<iostream>
using namespace std;
#include <string>
class Person
{
public:
Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
};
//普通函数模板
template<class T>
bool myCompare(T& a, T& b)
{
if (a *** b)
{
return true;
}
else
{
return false;
}
}
//具体化,显示具体化的原型和定意思以template<>开头,并通过名称来指出类型
//具体化优先于常规模板
template<> bool myCompare(Person &p1, Person &p2)
{
if ( p1.m_Name *** p2.m_Name && p1.m_Age *** p2.m_Age)
{
return true;
}
else
{
return false;
}
}
void test01()
{
int a = 10;
int b = 20;
//内置数据类型可以直接使用通用的函数模板
bool ret = myCompare(a, b);
if (ret)
{
cout << "a *** b " << endl;
}
else
{
cout << "a != b " << endl;
}
}
void test02()
{
Person p1("Tom", 10);
Person p2("Tom", 10);
//自定义数据类型,不会调用普通的函数模板
//可以创建具体化的Person数据类型的模板,用于特殊处理这个类型
bool ret = myCompare(p1, p2);
if (ret)
{
cout << "p1 *** p2 " << endl;
}
else
{
cout << "p1 != p2 " << endl;
}
}
int main() {
test01();
test02();
return 0;
}
+ +
    +
  • 利用具体化的模板,可以解决自定义类型的通用化

    +
  • +
  • 学习模板并不是为了写模板,而是在STL能够运用系统提供的模板

    +
  • +
+

1.3 类模板

1.3.1 类模板语法

类模板作用:

+
    +
  • 建立一个通用类,类中的成员 数据类型可以不具体制定,用一个虚拟的类型来代表。
    语法:
  • +
+
template<typename T>

+ +

解释:
template — 声明创建模板
typename — 表面其后面的符号是一种数据类型,可以用class代替
T — 通用的数据类型,名称可以替换,通常为大写字母
示例:

+
#include <string>
//类模板
template<class NameType, class AgeType>
class Person
{
public:
Person(NameType name, AgeType age)
{
this->mName = name;
this->mAge = age;
}
void showPerson()
{
cout << "name: " << this->mName << " age: " << this->mAge << endl;
}
public:
NameType mName;
AgeType mAge;
};
void test01()
{
// 指定NameType 为string类型,AgeType 为 int类型
Person<string, int>P1("孙悟空", 999);
P1.showPerson();
}
int main() {
test01();
return 0;
}
+ +

类模板和函数模板语法相似,在声明模板template后面加类,此类称为类模板

+

1.3.2 类模板与函数模板区别

类模板与函数模板区别主要有两点:

+
    +
  1. 类模板没有自动类型推导的使用方式
  2. +
  3. 类模板在模板参数列表中可以有默认参数
    示例:
  4. +
+
#include <string>
//类模板
template<class NameType, class AgeType = int>
class Person
{
public:
Person(NameType name, AgeType age)
{
this->mName = name;
this->mAge = age;
}
void showPerson()
{
cout << "name: " << this->mName << " age: " << this->mAge << endl;
}
public:
NameType mName;
AgeType mAge;
};
//1、类模板没有自动类型推导的使用方式
void test01()
{
// Person p("孙悟空", 1000); // 错误 类模板使用时候,不可以用自动类型推导
Person <string ,int>p("孙悟空", 1000); //必须使用显示指定类型的方式,使用类模板
p.showPerson();
}
//2、类模板在模板参数列表中可以有默认参数
void test02()
{
Person <string> p("猪八戒", 999); //类模板中的模板参数列表 可以指定默认参数
p.showPerson();
}
int main() {
test01();
test02();
return 0;
}
+ +
    +
  • 类模板使用只能用显示指定类型方式

    +
  • +
  • 类模板中的模板参数列表可以有默认参数

    +
  • +
+

1.3.3 类模板中成员函数创建时机

类模板中成员函数和普通类中成员函数创建时机是有区别的:

+
    +
  • 普通类中的成员函数一开始就可以创建
  • +
  • 类模板中的成员函数在调用时才创建
    示例:
  • +
+
class Person1
{
public:
void showPerson1()
{
cout << "Person1 show" << endl;
}
};
class Person2
{
public:
void showPerson2()
{
cout << "Person2 show" << endl;
}
};
template<class T>
class MyClass
{
public:
T obj;
//类模板中的成员函数,并不是一开始就创建的,而是在模板调用时再生成
void fun1() { obj.showPerson1(); }
void fun2() { obj.showPerson2(); }
};
void test01()
{
MyClass<Person1> m;
m.fun1();
//m.fun2();//编译会出错,说明函数调用才会去创建成员函数
}
int main() {
test01();
return 0;
}
+ +

类模板中的成员函数并不是一开始就创建的,在调用时才去创建

+

1.3.4 类模板对象做函数参数

学习目标:

+
    +
  • 类模板实例化出的对象,向函数传参的方式
    一共有三种传入方式:
  • +
+
    +
  1. 指定传入的类型 — 直接显示对象的数据类型
  2. +
  3. 参数模板化 — 将对象中的参数变为模板进行传递
  4. +
  5. 整个类模板化 — 将这个对象类型 模板化进行传递
    示例:
  6. +
+
#include <string>
//类模板
template<class NameType, class AgeType = int>
class Person
{
public:
Person(NameType name, AgeType age)
{
this->mName = name;
this->mAge = age;
}
void showPerson()
{
cout << "name: " << this->mName << " age: " << this->mAge << endl;
}
public:
NameType mName;
AgeType mAge;
};
//1、指定传入的类型
void printPerson1(Person<string, int> &p)
{
p.showPerson();
}
void test01()
{
Person <string, int >p("孙悟空", 100);
printPerson1(p);
}
//2、参数模板化
template <class T1, class T2>
void printPerson2(Person<T1, T2>&p)
{
p.showPerson();
cout << "T1的类型为: " << typeid(T1).name() << endl;
cout << "T2的类型为: " << typeid(T2).name() << endl;
}
void test02()
{
Person <string, int >p("猪八戒", 90);
printPerson2(p);
}
//3、整个类模板化
template<class T>
void printPerson3(T & p)
{
cout << "T的类型为: " << typeid(T).name() << endl;
p.showPerson();
}
void test03()
{
Person <string, int >p("唐僧", 30);
printPerson3(p);
}
int main() {
test01();
test02();
test03();
return 0;
}
+ +
    +
  • 通过类模板创建的对象,可以有三种方式向函数中进行传参

    +
  • +
  • 使用比较广泛是第一种:指定传入的类型

    +
  • +
+

1.3.5 类模板与继承

当类模板碰到继承时,需要注意一下几点:

+
    +
  • 当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型
  • +
  • 如果不指定,编译器无法给子类分配内存
  • +
  • 如果想灵活指定出父类中T的类型,子类也需变为类模板
    示例:
  • +
+
template<class T>
class Base
{
T m;
};
//class Son:public Base //错误,cpp编译需要给子类分配内存,必须知道父类中T的类型才可以向下继承
class Son :public Base<int> //必须指定一个类型
{
};
void test01()
{
Son c;
}
//类模板继承类模板 ,可以用T2指定父类中的T类型
template<class T1, class T2>
class Son2 :public Base<T2>
{
public:
Son2()
{
cout << typeid(T1).name() << endl;
cout << typeid(T2).name() << endl;
}
};
void test02()
{
Son2<int, char> child1;
}
int main() {
test01();
test02();
return 0;
}
+ +

如果父类是类模板,子类需要指定出父类中T的数据类型

+

1.3.6 类模板成员函数类外实现

学习目标:能够掌握类模板中的成员函数类外实现
示例:

+
#include <string>
//类模板中成员函数类外实现
template<class T1, class T2>
class Person {
public:
//成员函数类内声明
Person(T1 name, T2 age);
void showPerson();
public:
T1 m_Name;
T2 m_Age;
};
//构造函数 类外实现
template<class T1, class T2>
Person<T1, T2>::Person(T1 name, T2 age) {
this->m_Name = name;
this->m_Age = age;
}
//成员函数 类外实现
template<class T1, class T2>
void Person<T1, T2>::showPerson() {
cout << "姓名: " << this->m_Name << " 年龄:" << this->m_Age << endl;
}
void test01()
{
Person<string, int> p("Tom", 20);
p.showPerson();
}
int main() {
test01();
return 0;
}
+ +

类模板中成员函数类外实现时,需要加上模板参数列表

+

1.3.7 类模板分文件编写

学习目标:

+
    +
  • 掌握类模板成员函数分文件编写产生的问题以及解决方式
    问题:
  • +
  • 类模板中成员函数创建时机是在调用阶段,导致分文件编写时链接不到
    解决:
  • +
  • 解决方式1:直接包含.cpp源文件
  • +
  • 解决方式2:将声明和实现写到同一个文件中,并更改后缀名为.hpp,hpp是约定的名称,并不是强制
    示例:
    person.hpp中代码:
  • +
+
#pragma once
#include <iostream>
using namespace std;
#include <string>
template<class T1, class T2>
class Person {
public:
Person(T1 name, T2 age);
void showPerson();
public:
T1 m_Name;
T2 m_Age;
};
//构造函数 类外实现
template<class T1, class T2>
Person<T1, T2>::Person(T1 name, T2 age) {
this->m_Name = name;
this->m_Age = age;
}
//成员函数 类外实现
template<class T1, class T2>
void Person<T1, T2>::showPerson() {
cout << "姓名: " << this->m_Name << " 年龄:" << this->m_Age << endl;
}
+ +

类模板分文件编写.cpp中代码

+
#include<iostream>
using namespace std;
//#include "person.h"
#include "person.cpp" //解决方式1,包含cpp源文件
//解决方式2,将声明和实现写到一起,文件后缀名改为.hpp
#include "person.hpp"
void test01()
{
Person<string, int> p("Tom", 10);
p.showPerson();
}
int main() {
test01();
return 0;
}
+ +

主流的解决方式是第二种,将类模板成员函数写到一起,并将后缀名改为.hpp

+

1.3.8 类模板与友元

学习目标:

+
    +
  • 掌握类模板配合友元函数的类内和类外实现
    全局函数类内实现 - 直接在类内声明友元即可
    全局函数类外实现 - 需要提前让编译器知道全局函数的存在
    示例:
  • +
+
#include <string>
//2、全局函数配合友元 类外实现 - 先做函数模板声明,下方在做函数模板定义,在做友元
template<class T1, class T2> class Person;
//如果声明了函数模板,可以将实现写到后面,否则需要将实现体写到类的前面让编译器提前看到
//template<class T1, class T2> void printPerson2(Person<T1, T2> & p);
template<class T1, class T2>
void printPerson2(Person<T1, T2> & p)
{
cout << "类外实现 ---- 姓名: " << p.m_Name << " 年龄:" << p.m_Age << endl;
}
template<class T1, class T2>
class Person
{
//1、全局函数配合友元 类内实现
friend void printPerson(Person<T1, T2> & p)
{
cout << "姓名: " << p.m_Name << " 年龄:" << p.m_Age << endl;
}
//全局函数配合友元 类外实现
friend void printPerson2<>(Person<T1, T2> & p);
public:
Person(T1 name, T2 age)
{
this->m_Name = name;
this->m_Age = age;
}
private:
T1 m_Name;
T2 m_Age;
};
//1、全局函数在类内实现
void test01()
{
Person <string, int >p("Tom", 20);
printPerson(p);
}
//2、全局函数在类外实现
void test02()
{
Person <string, int >p("Jerry", 30);
printPerson2(p);
}
int main() {
//test01();
test02();
return 0;
}
+ +

建议全局函数做类内实现,用法简单,而且编译器可以直接识别

+

1.3.9 类模板案例

案例描述: 实现一个通用的数组类,要求如下:

+
    +
  • 可以对内置数据类型以及自定义数据类型的数据进行存储
  • +
  • 将数组中的数据存储到堆区
  • +
  • 构造函数中可以传入数组的容量
  • +
  • 提供对应的拷贝构造函数以及operator=防止浅拷贝问题
  • +
  • 提供尾插法和尾删法对数组中的数据进行增加和删除
  • +
  • 可以通过下标的方式访问数组中的元素
  • +
  • 可以获取数组中当前元素个数和数组的容量
    示例:
    myArray.hpp中代码
  • +
+
#pragma once
#include <iostream>
using namespace std;
template<class T>
class MyArray
{
public:
//构造函数
MyArray(int capacity)
{
this->m_Capacity = capacity;
this->m_Size = 0;
pAddress = new T[this->m_Capacity];
}
//拷贝构造
MyArray(const MyArray & arr)
{
this->m_Capacity = arr.m_Capacity;
this->m_Size = arr.m_Size;
this->pAddress = new T[this->m_Capacity];
for (int i = 0; i < this->m_Size; i++)
{
//如果T为对象,而且还包含指针,必须需要重载 = 操作符,因为这个等号不是 构造 而是赋值,
// 普通类型可以直接= 但是指针类型需要深拷贝
this->pAddress[i] = arr.pAddress[i];
}
}
//重载= 操作符 防止浅拷贝问题
MyArray& operator=(const MyArray& myarray) {
if (this->pAddress != NULL) {
delete[] this->pAddress;
this->m_Capacity = 0;
this->m_Size = 0;
}
this->m_Capacity = myarray.m_Capacity;
this->m_Size = myarray.m_Size;
this->pAddress = new T[this->m_Capacity];
for (int i = 0; i < this->m_Size; i++) {
this->pAddress[i] = myarray[i];
}
return *this;
}
//重载[] 操作符 arr[0]
T& operator [](int index)
{
return this->pAddress[index]; //不考虑越界,用户自己去处理
}
//尾插法
void Push_back(const T & val)
{
if (this->m_Capacity *** this->m_Size)
{
return;
}
this->pAddress[this->m_Size] = val;
this->m_Size++;
}
//尾删法
void Pop_back()
{
if (this->m_Size *** 0)
{
return;
}
this->m_Size--;
}
//获取数组容量
int getCapacity()
{
return this->m_Capacity;
}
//获取数组大小
int getSize()
{
return this->m_Size;
}
//析构
~MyArray()
{
if (this->pAddress != NULL)
{
delete[] this->pAddress;
this->pAddress = NULL;
this->m_Capacity = 0;
this->m_Size = 0;
}
}
private:
T * pAddress; //指向一个堆空间,这个空间存储真正的数据
int m_Capacity; //容量
int m_Size; // 大小
};
+ +

类模板案例—数组类封装.cpp中

+
#include "myArray.hpp"
#include <string>
void printIntArray(MyArray<int>& arr) {
for (int i = 0; i < arr.getSize(); i++) {
cout << arr[i] << " ";
}
cout << endl;
}
//测试内置数据类型
void test01()
{
MyArray<int> array1(10);
for (int i = 0; i < 10; i++)
{
array1.Push_back(i);
}
cout << "array1打印输出:" << endl;
printIntArray(array1);
cout << "array1的大小:" << array1.getSize() << endl;
cout << "array1的容量:" << array1.getCapacity() << endl;
cout << "--------------------------" << endl;
MyArray<int> array2(array1);
array2.Pop_back();
cout << "array2打印输出:" << endl;
printIntArray(array2);
cout << "array2的大小:" << array2.getSize() << endl;
cout << "array2的容量:" << array2.getCapacity() << endl;
}
//测试自定义数据类型
class Person {
public:
Person() {}
Person(string name, int age) {
this->m_Name = name;
this->m_Age = age;
}
public:
string m_Name;
int m_Age;
};
void printPersonArray(MyArray<Person>& personArr)
{
for (int i = 0; i < personArr.getSize(); i++) {
cout << "姓名:" << personArr[i].m_Name << " 年龄: " << personArr[i].m_Age << endl;
}
}
void test02()
{
//创建数组
MyArray<Person> pArray(10);
Person p1("孙悟空", 30);
Person p2("韩信", 20);
Person p3("妲己", 18);
Person p4("王昭君", 15);
Person p5("赵云", 24);
//插入数据
pArray.Push_back(p1);
pArray.Push_back(p2);
pArray.Push_back(p3);
pArray.Push_back(p4);
pArray.Push_back(p5);
printPersonArray(pArray);
cout << "pArray的大小:" << pArray.getSize() << endl;
cout << "pArray的容量:" << pArray.getCapacity() << endl;
}
int main() {
//test01();
test02();
return 0;
}
+ +

能够利用所学知识点实现通用的数组

+

二、STL

初识容器

vector<int> v;  // 创建容器
v.push_back(10);//向容器中放数据
v.begin() //返回第一个元素
v.end() //返回最后一个元素
/* 遍历 */
//1.
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << endl;
}
//2.
for (auto it = v.begin(); it != v.end(); it ++){
cout << *it << endl;
}
//3.
#include <algorithm>
void MyPrint(int val){
cout << val << endl;
}
for_each(v.begin(), v.end(), MyPrint);
+ +
    +
  1. 存放自定义数据的时候,初始化容器数据是要使用数据类型的构造函数。访问时使用(*it).member

    +
  2. +
  3. 存放对象指针:vector<class *> v ,放入数据时要放入地址:v.push_back(&Object)

    +
  4. +
  5. 容器嵌套容器:vector<vector<int>> v,遍历时要用嵌套for循环。
    迭代器种类:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    种类功能支持运算
    输入迭代器对数据的只读访问只读,支持++***!=
    输出迭代器对数据的只写访问只写,支持++
    前向迭代器读写操作,并能向前推进迭代器读写,支持++***!=
    双向迭代器读写操作,并能向前和向后操作读写,支持++--
    随机访问迭代器读写操作,可以以跳跃的方式访问任意数据,功能最强的迭代器读写,支持++--[n]-n<<=>>=
    常用的容器中迭代器种类为双向迭代器,和随机访问迭代器
    +
  6. +
+

string

本质上是一个类
char *是一个指针,而string是一个类,内部封装了char *,来管理这个字符串,所以string是一个char *型的容器

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法作用
find查找
copy拷贝
delete删除
replace替换
insert插入
+

构造函数

string();//创建一个空的字符串 例如: string str;
string(const char* s);//使用字符串s初始化
string(const string& str);//使用一个string对象初始化另一个string对象
string(int n, char c);//使用n个字符c初始化
+ +

赋值

string& operator=(const char* s);//char*类型字符串 赋值给当前的字符串
string& operator=(const string &s);//把字符串s赋给当前的字符串
string& operator=(char c);//字符赋值给当前的字符串
string& assign(const char *s);//把字符串s赋给当前的字符串
string& assign(const char *s, int n);//把字符串s的前n个字符赋给当前的字符串
string& assign(const string &s);//把字符串s赋给当前字符串
string& assign(int n, char c);//用n个字符c赋给当前字符串
+ +

带operator=的是等号运算符重载,即可以用另一个数据和=给其赋值,assingn则是成员函数,需要调用函数才能赋值

+

字符串拼接

string& operator+=(const char* str);//重载+=操作符
string& operator+=(const char c);//重载+=操作符
string& operator+=(const string& str);//重载+=操作符
string& append(const char *s);//把字符串s连接到当前字符串结尾
string& append(const char *s, int n);//把字符串s的前n个字符连接到当前字符串结尾
string& append(const string &s);//同operator+=(const string& str)
string& append(const string &s, int pos, int n); //字符串s中从pos开始的n个字符连接到字符串结尾
+ +

查找替换

int find(const string& str, int pos = 0) const;//查找str第一次出现位置,从pos开始查找
int find(const char* s, int pos = 0) const;//查找s第一次出现位置,从pos开始查找
int find(const char* s, int pos, int n) const;//从pos位置查找s的前n个字符第一次位置
int find(const char c, int pos = 0) const;//查找字符c第一次出现位置
int rfind(const string& str, int pos = npos) const;//查找str最后一次位置,从pos开始查找
int rfind(const char* s, int pos = npos) const;//查找s最后一次出现位置,从pos开始查找
int rfind(const char* s, int pos, int n) const;//从pos查找s的前n个字符最后一次位置
int rfind(const char c, int pos = 0) const;//查找字符c最后一次出现位置
string& replace(int pos, int n, const string& str);//替换从pos开始n个字符为字符串str
string& replace(int pos, int n,const char* s);//替换从pos开始的n个字符为字符串s
+ +

find查找是从左往后,rfind从右往左
find找到字符串后返回查找的第一个字符位置,找不到返回-1
replace在替换时,要指定从哪个位置起,多少个字符,替换成什么样的字符串

+

字符串的比较

int compare(const string &s) const;//与字符串s比较
int compare(const char *s) const;//与字符串s比较
//比较ASCII码
//= 返回0
//> 返回1
//< 返回-1
+ +

单个字符存取

char& operator[](int n);//通过[]方式取字符
char& at(int n);//通过at方法获取字符
+ +

插入和删除

string& insert(int pos, const char* s);//插入字符串
string& insert(int pos, const string& str);//插入字符串
string& insert(int pos, int n, char c);//在指定位置插入n个字符c
string& erase(int pos, int n = npos);//删除从Pos开始的n个字符
+ +

字符串子串

string substr(int pos = 0, int n = npos) const;
//返回由pos开始的n个字符组成的字符串
+ +

vector

单端数组,可以动态扩展,但扩展时不是直接接上,而是寻找更大的空间拷贝过去,释放原来的空间

+

构造函数

vector<T> v;//采用模板实现类实现,默认构造函数
vector(v.begin(), v.end());//将v[begin(), end())区间中的元素拷贝给本身。
vector(n, element);//构造函数将n个elem拷贝给本身。
vector(const vector &vec);//拷贝构造函数。
+ +

赋值

vector& operator=(const vector &vec); //重载等号操作符
assign(begin, end);//将[begin, end)区间中的数据拷贝赋值给本身。
assign(n, element);//将n个elem拷贝赋值给本身。
+ +

容量和大小

empty(); //判断容器是否为空
capacity(); //容器的容量
size(); //返回容器中元素的个数
resize(int num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。
//如果容器变短,则末尾超出容器长度的元素被删除。
resize(int num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。
//如果容器变短,则末尾超出容器长度的元素被删除
+ +

插入和删除

push_back(ele);//尾部插入元素ele
pop_back();//删除最后一个元素
insert(const_iterator pos, ele);//迭代器指向位置pos插入元素ele
insert(const_iterator pos, int count,ele); //迭代器指向位置pos插入count个元素ele
erase(const_iterator pos);
//删除迭代器指向的元素
erase(const_iterator start, const_iterator end); //删除迭代器从start到end之间的元素
clear();//删除容器中所有元素
+ +

数据存取

at(int idx);//返回索引idx所指的数据
operator[];//返回索引idx所指的数据
front();//返回容器中第一个数据元素
back();//返回容器中最后一个数据元素
+ +

两个容器交换

swap(vec);
// 将vec与本身的元素互换
+ +

预留空间

reserve(int len); //容器预留len个元素长度,预留位置不初始化,元素不可访问。
+ +

目的是减少动态扩展时的扩展次数

+

deque

双端数组,头尾均可插入或删除,头部插入比vector快,但访问元素的速度没有vector快
deque是一片连续的内存空间

+

构造函数

deque<T> deqT;//默认构造形式
deque(beg, end);//构造函数将[beg, end)区间中的元素拷贝给本身。
deque(n, elem);//构造函数将n个elem拷贝给本身。
deque(const deque &deq);//拷贝构造函数
+ +

赋值

deque& operator=(const deque &deq);//重载等号操作符
assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
assign(n, elem);//将n个elem拷贝赋值给本身。
+ +

容量和大小

deque.empty(); //判断容器是否为空
deque.size(); //返回容器中元素的个数
deque.resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。
//如果容器变短,则末尾超出容器长度的元素被删除。
deque.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。
//如果容器变短,则末尾超出容器长度的元素被删除。
+ +

插入和删除

push_back(elem);//在容器尾部添加一个数据
push_front(elem);//在容器头部插入一个数据
pop_back();//删除容器最后一个数据
pop_front();//删除容器第一个数据
insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置。
insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值。
insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值。
clear(); //清空容器的所有数据
erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置。
erase(pos); //删除pos位置的数据,返回下一个数据的位置。
+ +

数据存取:

+
at(int idx);//返回索引idx所指的数据
operator[];//返回索引idx所指的数据
front();//返回容器中第一个数据元素
back();//返回容器中最后一个数据元素
+ +

排序

sort(iterator beg, iterator end)
//对beg和end区间内元素进行排序
+ +

stack

先进后出,只有顶部的元素才可以使用,因此无法遍历,push入栈,pop出栈

+

常用接口

//构造函数:
stack<T> stk;//stack采用模板类实现, stack对象的默认构造形式
stack(const stack &stk);//拷贝构造函数
//赋值操作:
stack& operator=(const stack &stk);
//数据存取:
push(elem);//向栈顶添加元素
pop();//从栈顶移除第一个元素
top();//返回栈顶元素
//大小操作:
empty();//判断堆栈是否为空
size();//返回栈的大小
+ +

queue

先进先出,一端进一端出,只有头尾可以被使用,因此也不能遍历

+

常用接口

//构造函数:
queue<T> que;//queue采用模板类实现,queue对象的默认构造形式
queue(const queue &que);//拷贝构造函数
//赋值操作:
queue& operator=(const queue &que);
//重载等号操作符
//数据存取:
push(elem);//往队尾添加元素
pop();//从队头移除第一个元素
back();//返回最后一个元素
front();//返回第一个元素
//大小操作:
empty();//判断堆栈是否为空
size();//返回栈的大小
+ +

list

链表,一系列指针链组成,是一个双向循环链表,储存不是连续的内存空间,list的迭代器只支持前移和后移,属于双向迭代器
采用动态储存分配,不会造成内存浪费或溢出,插入删除只需要修改指针,灵活,但空间和时间消耗大
重要性质: 插入和删除都不会造成原有的迭代器失效,vector是不可以的
另外listvector是最常用的两个容器,各有优缺点

+

常用接口

//构造函数
list<T> lst;//list采用采用模板类实现,对象的默认构造形式:
list(beg,end);//构造函数将[beg, end)区间中的元素拷贝给本身。
list(n,elem);//构造函数将n个elem拷贝给本身。
list(const list &lst);//拷贝构造函数。
//赋值和交换
assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
assign(n, elem);//将n个elem拷贝赋值给本身。
list& operator=(const list &lst);
swap(lst);
//重载等号操作符
//将lst与本身的元素互换。
//大小
size(); //返回容器中元素的个数
empty(); //判断容器是否为空
resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。
//如果容器变短,则末尾超出容器长度的元素被删除。
resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。
//如果容器变短,则末尾超出容器长度的元素被删除。
//插入和删除
push_back(elem);//在容器尾部加入一个元素
pop_back();//删除容器中最后一个元素
push_front(elem);//在容器开头插入一个元素
pop_front();//从容器开头移除第一个元素
insert(pos,elem);//在pos位置插elem元素的拷贝,返回新数据的位置。insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值。
insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。
clear();//移除容器的所有数据
erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。
erase(pos);//删除pos位置的数据,返回下一个数据的位置。
remove(elem);//删除容器中所有与elem值匹配的元素。
//存取
front();//返回第一个元素。
back();//返回最后一个元素。
//反转和排序
reverse();//反转链表
sort();//链表排序
+ +

set和multiset

所有元素在插入时就被自动排列
属关联式容器,底层结构是二叉树实现的
set不允许有重复的元素,multiset可以有重复的元素;set插入数据后会返回结果,表示是否插入成功,而multiset一定可以成功,所以不会检测数据

+

常用接口

//构造:
set<T> st;//默认构造函数:
set(const set &st);//拷贝构造函数
//赋值:
set& operator=(const set &st);
//重载等号操作符
//大小和交换
size();
//返回容器中元素的数目
empty();//判断容器是否为空
swap(st);//交换两个集合容器
//插入和删除
insert(elem);//在容器中插入元素。
clear();//清除所有元素
erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器。
erase(beg, end);//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
erase(elem);//删除容器中值为elem的元素。
//查找和统计
find(key);//查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
count(key);//统计key的元素个数
+ +

set的默认排序规则为从小到大,利用仿函数可以改变规则

+
#include <iostream>
#include <set>
using namespace std;
class myCompare
{
public:
bool operator()(int v1, int v2){
return v1 > v2;
}
};
void test(){
set<int> set_1;
set_1.insert(1);
set_1.insert(2);
set_1.insert(3);
set_1.insert(4);
set_1.insert(5);
set_1.insert(6);
for (auto it = set_1.begin(); it != set_1.end(); it++){
std::cout << *it << " " << "\n" ;
}
set<int, myCompare> set_2;
set_2.insert(2);
set_2.insert(3);
set_2.insert(1);
set_2.insert(5);
set_2.insert(4);
set_2.insert(6);
for (auto it = set_2.begin(); it != set_2.end(); it++){
std::cout << *it << " " << "\n" ;
}
}
int main(int argc, char const *argv[])
{
test();
return 0;
}
+ +

当使用自定义数据类型时,set必须指定排序规则才可以插入数据

+

pair

成对出现的数据可以使用pair

+

常用接口

//创建方式
pair<type, type> p ( value1, value2 );
pair<type, type> p = make_pair( value1, value2 );
+ +

map和multimap

所有的元素都是pair,其中第一个元素是key,第二个是value,所有元素都会根据元素的key进行自动排序
属于关联式容器,底层结构是用二叉树实现
可以通过key值快速找到value
map不能有重复的keymultimap可以有重复的key

+

常用接口

//构造:
map<T1, T2> mp;//map默认构造函数:
map(const map &mp);//拷贝构造函数
//赋值:
map& operator=(const map &mp);
//大小和交换
size();//返回容器中元素的数目
empty();//判断容器是否为空
swap(st);//交换两个集合容器
//插入和删除
insert(elem);//在容器中插入元素。
clear();//清除所有元素
erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器。
erase(beg, end);//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
erase(key);//删除容器中值为key的元素。
//查找和统计
find(key);//查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
count(key);//统计key的元素个数
+ +

也可以利用仿函数指定排序规则

+

函数对象

重载函数调用操作符的类,其对象称为函数对象
函数对象使用重载时,行为类似函数调用,所以也叫仿函数
是一个类而非函数
函数对象可以有参数也可以有返回值
但函数对象超出普通函数的概念,有自己的状态
函数对象可以作为参数进行传递

+
#include <iostream>
using namespace std;
class add{
public:
add(){
count = 0;
}
int operator()(int v1, int v2){
count ++;
return v1 + v2;
}
int count = 0;
};
void test(){
add add;
add.operator()(1,2);
add.operator()(1,3);
add.operator()(1,2);
add.operator()(1,2);
cout << add.count << endl;
}
int main(){
test();
return 0;
}
+ +

The keys of cpp comparing to c language is Object-oriented and Generic programming.

+

count

类似于find,可查找字符串中某个字符出现的次数。

+
string s = "abcdefgaaadsasafas";
int numOfA = s.count('a');
+ +

map类的数据使用count的时候,传入的参数应是key而非value

+

三、函数对象

4.1 函数对象

4.1.1 函数对象概念

概念:

+
    +
  • 重载函数调用操作符的类,其对象常称为函数对象
  • +
  • 函数对象使用重载的()时,行为类似函数调用,也叫仿函数
    本质:
    函数对象(仿函数)是一个,不是一个函数
  • +
+

4.1.2 函数对象使用

特点:

+
    +
  • 函数对象在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值
  • +
  • 函数对象超出普通函数的概念,函数对象可以有自己的状态
  • +
  • 函数对象可以作为参数传递
    示例:
  • +
+
#include <string>
//1、函数对象在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值
class MyAdd
{
public :
int operator()(int v1,int v2)
{
return v1 + v2;
}
};
void test01()
{
MyAdd myAdd;
cout << myAdd(10, 10) << endl;
}
//2、函数对象可以有自己的状态
class MyPrint
{
public:
MyPrint()
{
count = 0;
}
void operator()(string test)
{
cout << test << endl;
count++; //统计使用次数
}
int count; //内部自己的状态
};
void test02()
{
MyPrint myPrint;
myPrint("hello world");
myPrint("hello world");
myPrint("hello world");
cout << "myPrint调用次数为: " << myPrint.count << endl;
}
//3、函数对象可以作为参数传递
void doPrint(MyPrint &mp , string test)
{
mp(test);
}
void test03()
{
MyPrint myPrint;
doPrint(myPrint, "Hello cpp");
}
int main() {
//test01();
//test02();
test03();
return 0;
}
+ +

总结:

+
    +
  • 仿函数写法非常灵活,可以作为参数进行传递。
  • +
+

4.2 谓词

4.2.1 谓词概念

概念:

+
    +
  • 返回bool类型的仿函数称为谓词
  • +
  • 如果operator()接受一个参数,那么叫做一元谓词
  • +
  • 如果operator()接受两个参数,那么叫做二元谓词
  • +
+

4.2.2 一元谓词

示例:

+
#include <vector>
#include <algorithm>
//1.一元谓词
struct GreaterFive{
bool operator()(int val) {
return val > 5;
}
};
void test01() {
vector<int> v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
vector<int>::iterator it = find_if(v.begin(), v.end(), GreaterFive());
if (it *** v.end()) {
cout << "没找到!" << endl;
}
else {
cout << "找到:" << *it << endl;
}
}
int main() {
test01();
return 0;
}
+ +
    +
  • 参数只有一个的谓词,称为一元谓词
  • +
+

4.2.3 二元谓词

示例:

+
#include <vector>
#include <algorithm>
//二元谓词
class MyCompare
{
public:
bool operator()(int num1, int num2)
{
return num1 > num2;
}
};
void test01()
{
vector<int> v;
v.push_back(10);
v.push_back(40);
v.push_back(20);
v.push_back(30);
v.push_back(50);
//默认从小到大
sort(v.begin(), v.end());
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
cout << "----------------------------" << endl;
//使用函数对象改变算法策略,排序从大到小
sort(v.begin(), v.end(), MyCompare());
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
int main() {
test01();
return 0;
}
+ +
    +
  • 参数只有两个的谓词,称为二元谓词
  • +
+

4.3 内建函数对象

4.3.1 内建函数对象意义

概念:

+
    +
  • STL内建了一些函数对象
    分类:
  • +
  • 算术仿函数
  • +
  • 关系仿函数
  • +
  • 逻辑仿函数
    用法:
  • +
  • 这些仿函数所产生的对象,用法和一般函数完全相同
  • +
  • 使用内建函数对象,需要引入头文件 #include <functional>
  • +
+

4.3.2 算术仿函数

功能描述:

+
    +
  • 实现四则运算
  • +
  • 其中negate是一元运算,其他都是二元运算
    仿函数原型:
  • +
  • template<class T> T plus<T> //加法仿函数
  • +
  • template<class T> T minus<T> //减法仿函数
  • +
  • template<class T> T multiplies<T> //乘法仿函数
  • +
  • template<class T> T divides<T> //除法仿函数
  • +
  • template<class T> T modulus<T> //取模仿函数
  • +
  • template<class T> T negate<T> //取反仿函数
    示例:
  • +
+
#include <functional>
//negate
void test01()
{
negate<int> n;
cout << n(50) << endl;
}
//plus
void test02()
{
plus<int> p;
cout << p(10, 20) << endl;
}
int main() {
test01();
test02();
system("pause");
return 0;
}
+ +
    +
  • 使用内建函数对象时,需要引入头文件 #include <functional>
  • +
+

4.3.3 关系仿函数

功能描述:

+
    +
  • 实现关系对比
    仿函数原型:

    +
  • +
  • template<class T> bool equal_to<T> //等于

    +
  • +
  • template<class T> bool not_equal_to<T> //不等于

    +
  • +
  • template<class T> bool greater<T> //大于

    +
  • +
  • template<class T> bool greater_equal<T> //大于等于

    +
  • +
  • template<class T> bool less<T> //小于

    +
  • +
  • template<class T> bool less_equal<T> //小于等于
    示例:

    +
  • +
+
#include <functional>
#include <vector>
#include <algorithm>
class MyCompare
{
public:
bool operator()(int v1,int v2)
{
return v1 > v2;
}
};
void test01()
{
vector<int> v;
v.push_back(10);
v.push_back(30);
v.push_back(50);
v.push_back(40);
v.push_back(20);
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
cout << endl;
//自己实现仿函数
//sort(v.begin(), v.end(), MyCompare());
//STL内建仿函数 大于仿函数
sort(v.begin(), v.end(), greater<int>());
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
int main() {
test01();
return 0;
}
+ +

关系仿函数中最常用的就是greater<>大于

+

4.3.4 逻辑仿函数

功能描述:

+
    +
  • 实现逻辑运算
    函数原型:

    +
  • +
  • template<class T> bool logical_and<T> //逻辑与

    +
  • +
  • template<class T> bool logical_or<T> //逻辑或

    +
  • +
  • template<class T> bool logical_not<T> //逻辑非
    示例:

    +
  • +
+
#include <vector>
#include <functional>
#include <algorithm>
void test01()
{
vector<bool> v;
v.push_back(true);
v.push_back(false);
v.push_back(true);
v.push_back(false);
for (vector<bool>::iterator it = v.begin();it!= v.end();it++)
{
cout << *it << " ";
}
cout << endl;
//逻辑非 将v容器搬运到v2中,并执行逻辑非运算
vector<bool> v2;
v2.resize(v.size());
transform(v.begin(), v.end(), v2.begin(), logical_not<bool>());
for (vector<bool>::iterator it = v2.begin(); it != v2.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
int main() {
test01();
return 0;
}
+ +
    +
  • 逻辑仿函数实际应用较少,了解即可
  • +
+

四、STL常用算法

Algorithm

概述:

+
    +
  • 算法主要是由头文件<algorithm> <functional> <numeric>组成。
  • +
  • <algorithm>是所有STL头文件中最大的一个,范围涉及到比较、 交换、查找、遍历操作、复制、修改等等
  • +
  • <numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数
  • +
  • <functional>定义了一些模板类,用以声明函数对象。
  • +
+

5.1 常用遍历算法

学习目标:

+
    +
  • 掌握常用的遍历算法
    算法简介:
  • +
  • for_each //遍历容器
  • +
  • transform //搬运容器到另一个容器中
  • +
+

5.1.1 for_each

功能描述:

+
    +
  • 实现遍历容器
    函数原型:
  • +
  • for_each(iterator beg, iterator end, _func);
    // 遍历算法 遍历容器元素
    // beg 开始迭代器
    // end 结束迭代器
    // _func 函数或者函数对象
    示例:
  • +
+
#include <algorithm>
#include <vector>
//普通函数
void print01(int val)
{
cout << val << " ";
}
//函数对象
class print02
{
public:
void operator()(int val)
{
cout << val << " ";
}
};
//for_each算法基本用法
void test01() {
vector<int> v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
//遍历算法
for_each(v.begin(), v.end(), print01);
cout << endl;
for_each(v.begin(), v.end(), print02());
cout << endl;
}
int main() {
test01();
return 0;
}
+ +
    +
  • for_each在实际开发中是最常用遍历算法,需要熟练掌握
  • +
+

5.1.2 transform

功能描述:

+
    +
  • 搬运容器到另一个容器中
    函数原型:
  • +
  • transform(iterator beg1, iterator end1, iterator beg2, _func);
    //beg1 源容器开始迭代器
    //end1 源容器结束迭代器
    //beg2 目标容器开始迭代器
    //_func 函数或者函数对象
    示例:
  • +
+
#include<vector>
#include<algorithm>
//常用遍历算法 搬运 transform
class TransForm
{
public:
int operator()(int val)
{
return val;
}
};
class MyPrint
{
public:
void operator()(int val)
{
cout << val << " ";
}
};
void test01()
{
vector<int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
vector<int>vTarget; //目标容器
vTarget.resize(v.size()); // 目标容器需要提前开辟空间
transform(v.begin(), v.end(), vTarget.begin(), TransForm());
for_each(vTarget.begin(), vTarget.end(), MyPrint());
}
int main() {
test01();
return 0;
}
+ +
    +
  • 搬运的目标容器必须要提前开辟空间,否则无法正常搬运
    也可以用来转换大小写:
  • +
+
transform(str.begin(),str.end(),str.begin(),::tolower); transform(str.begin(),str.end(),str.begin(),::toupper);
+ +

5.2 常用查找算法

学习目标:

+
    +
  • 掌握常用的查找算法
    算法简介:
  • +
  • find //查找元素
  • +
  • find_if //按条件查找元素
  • +
  • adjacent_find //查找相邻重复元素
  • +
  • binary_search //二分查找法
  • +
  • count //统计元素个数
  • +
  • count_if //按条件统计元素个数
  • +
+

5.2.1 find

功能描述:

+
    +
  • 查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器end()
    函数原型:

    +
  • +
  • find(iterator beg, iterator end, value);
    // 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
    // beg 开始迭代器
    // end 结束迭代器
    // value 查找的元素
    示例:

    +
  • +
+
#include <algorithm>
#include <vector>
#include <string>
void test01() {
vector<int> v;
for (int i = 0; i < 10; i++) {
v.push_back(i + 1);
}
//查找容器中是否有 5 这个元素
vector<int>::iterator it = find(v.begin(), v.end(), 5);
if (it *** v.end())
{
cout << "没有找到!" << endl;
}
else
{
cout << "找到:" << *it << endl;
}
}
class Person {
public:
Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
}
//重载***
bool operator***(const Person& p)
{
if (this->m_Name *** p.m_Name && this->m_Age *** p.m_Age)
{
return true;
}
return false;
}
public:
string m_Name;
int m_Age;
};
void test02() {
vector<Person> v;
//创建数据
Person p1("aaa", 10);
Person p2("bbb", 20);
Person p3("ccc", 30);
Person p4("ddd", 40);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
vector<Person>::iterator it = find(v.begin(), v.end(), p2);
if (it *** v.end())
{
cout << "没有找到!" << endl;
}
else
{
cout << "找到姓名:" << it->m_Name << " 年龄: " << it->m_Age << endl;
}
}
+ +
    +
  • 利用find可以在容器中找指定的元素,返回值是迭代器
  • +
+

5.2.2 find_if

功能描述:

+
    +
  • 按条件查找元素
    函数原型:

    +
  • +
  • find_if(iterator beg, iterator end, _Pred);
    // 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
    // beg 开始迭代器
    // end 结束迭代器
    // _Pred 函数或者谓词(返回bool类型的仿函数)
    示例:

    +
  • +
+
#include <algorithm>
#include <vector>
#include <string>
//内置数据类型
class GreaterFive
{
public:
bool operator()(int val)
{
return val > 5;
}
};
void test01() {
vector<int> v;
for (int i = 0; i < 10; i++) {
v.push_back(i + 1);
}
vector<int>::iterator it = find_if(v.begin(), v.end(), GreaterFive());
if (it *** v.end()) {
cout << "没有找到!" << endl;
}
else {
cout << "找到大于5的数字:" << *it << endl;
}
}
//自定义数据类型
class Person {
public:
Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
}
public:
string m_Name;
int m_Age;
};
class Greater20
{
public:
bool operator()(Person &p)
{
return p.m_Age > 20;
}
};
void test02() {
vector<Person> v;
//创建数据
Person p1("aaa", 10);
Person p2("bbb", 20);
Person p3("ccc", 30);
Person p4("ddd", 40);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
vector<Person>::iterator it = find_if(v.begin(), v.end(), Greater20());
if (it *** v.end())
{
cout << "没有找到!" << endl;
}
else
{
cout << "找到姓名:" << it->m_Name << " 年龄: " << it->m_Age << endl;
}
}
int main() {
//test01();
test02();
return 0;
}
+ +
    +
  • find_if按条件查找使查找更加灵活,提供的仿函数可以改变不同的策略
  • +
+

5.2.3 adjacent_find

功能描述:

+
    +
  • 查找相邻重复元素
    函数原型:

    +
  • +
  • adjacent_find(iterator beg, iterator end);
    // 查找相邻重复元素,返回相邻元素的第一个位置的迭代器
    // beg 开始迭代器
    // end 结束迭代器
    示例:

    +
  • +
+
#include <algorithm>
#include <vector>
void test01()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(5);
v.push_back(2);
v.push_back(4);
v.push_back(4);
v.push_back(3);
//查找相邻重复元素
vector<int>::iterator it = adjacent_find(v.begin(), v.end());
if (it *** v.end()) {
cout << "找不到!" << endl;
}
else {
cout << "找到相邻重复元素为:" << *it << endl;
}
}
+ +
    +
  • 面试题中如果出现查找相邻重复元素,记得用STL中的adjacent_find算法
  • +
+

功能描述:

+
    +
  • 查找指定元素是否存在
    函数原型:

    +
  • +
  • bool binary_search(iterator beg, iterator end, value);
    // 查找指定的元素,查到 返回true 否则false
    // 注意: 在无序序列中不可用
    // beg 开始迭代器
    // end 结束迭代器
    // value 查找的元素
    示例:

    +
  • +
+
#include <algorithm>
#include <vector>
void test01()
{
vector<int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
//二分查找
bool ret = binary_search(v.begin(), v.end(),2);
if (ret)
{
cout << "找到了" << endl;
}
else
{
cout << "未找到" << endl;
}
}
int main() {
test01();
return 0;
}
+ +

总结: 二分查找法查找效率很高,值得注意的是查找的容器中元素必须的有序序列

+

5.2.5 count

功能描述:

+
    +
  • 统计元素个数
    函数原型:

    +
  • +
  • count(iterator beg, iterator end, value);
    // 统计元素出现次数
    // beg 开始迭代器
    // end 结束迭代器
    // value 统计的元素
    示例:

    +
  • +
+
#include <algorithm>
#include <vector>
//内置数据类型
void test01()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(4);
v.push_back(5);
v.push_back(3);
v.push_back(4);
v.push_back(4);
int num = count(v.begin(), v.end(), 4);
cout << "4的个数为: " << num << endl;
}
//自定义数据类型
class Person
{
public:
Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
}
bool operator***(const Person & p)
{
if (this->m_Age *** p.m_Age)
{
return true;
}
else
{
return false;
}
}
string m_Name;
int m_Age;
};
void test02()
{
vector<Person> v;
Person p1("刘备", 35);
Person p2("关羽", 35);
Person p3("张飞", 35);
Person p4("赵云", 30);
Person p5("曹操", 25);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
v.push_back(p5);
Person p("诸葛亮",35);
int num = count(v.begin(), v.end(), p);
cout << "num = " << num << endl;
}
int main() {
//test01();
test02();
return 0;
}
+ +
    +
  • 统计自定义数据类型时候,需要配合重载 operator***
  • +
+

5.2.6 count_if

功能描述:

+
    +
  • 按条件统计元素个数
    函数原型:

    +
  • +
  • count_if(iterator beg, iterator end, _Pred);
    // 按条件统计元素出现次数
    // beg 开始迭代器
    // end 结束迭代器
    // _Pred 谓词
    示例:

    +
  • +
+
#include <algorithm>
#include <vector>
class Greater4
{
public:
bool operator()(int val)
{
return val >= 4;
}
};
//内置数据类型
void test01()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(4);
v.push_back(5);
v.push_back(3);
v.push_back(4);
v.push_back(4);
int num = count_if(v.begin(), v.end(), Greater4());
cout << "大于4的个数为: " << num << endl;
}
//自定义数据类型
class Person
{
public:
Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
};
class AgeLess35
{
public:
bool operator()(const Person &p)
{
return p.m_Age < 35;
}
};
void test02()
{
vector<Person> v;
Person p1("刘备", 35);
Person p2("关羽", 35);
Person p3("张飞", 35);
Person p4("赵云", 30);
Person p5("曹操", 25);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
v.push_back(p5);
int num = count_if(v.begin(), v.end(), AgeLess35());
cout << "小于35岁的个数:" << num << endl;
}
int main() {
//test01();
test02();
return 0;
}
+ +
    +
  • 按值统计用count,按条件统计用count_if
  • +
+

5.3 常用排序算法

学习目标:

+
    +
  • 掌握常用的排序算法
    算法简介:
  • +
  • sort //对容器内元素进行排序
  • +
  • random_shuffle //洗牌 指定范围内的元素随机调整次序
  • +
  • merge // 容器元素合并,并存储到另一容器中
  • +
  • reverse // 反转指定范围的元素
  • +
+

5.3.1 sort

功能描述:

+
    +
  • 对容器内元素进行排序
    函数原型:

    +
  • +
  • sort(iterator beg, iterator end, _Pred);
    // 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
    // beg 开始迭代器
    // end 结束迭代器
    // _Pred 谓词
    示例:

    +
  • +
+
#include <algorithm>
#include <vector>
void myPrint(int val)
{
cout << val << " ";
}
void test01() {
vector<int> v;
v.push_back(10);
v.push_back(30);
v.push_back(50);
v.push_back(20);
v.push_back(40);
//sort默认从小到大排序
sort(v.begin(), v.end());
for_each(v.begin(), v.end(), myPrint);
cout << endl;
//从大到小排序
sort(v.begin(), v.end(), greater<int>());
for_each(v.begin(), v.end(), myPrint);
cout << endl;
}
int main() {
test01();
return 0;
}
+ +
    +
  • sort属于开发中最常用的算法之一,需熟练掌握
  • +
+

5.3.2 random_shuffle

功能描述:

+
    +
  • 洗牌 指定范围内的元素随机调整次序
    函数原型:

    +
  • +
  • random_shuffle(iterator beg, iterator end);
    // 指定范围内的元素随机调整次序
    // beg 开始迭代器
    // end 结束迭代器
    示例:

    +
  • +
+
#include <algorithm>
#include <vector>
#include <ctime>
class myPrint
{
public:
void operator()(int val)
{
cout << val << " ";
}
};
void test01()
{
srand((unsigned int)time(NULL));
vector<int> v;
for(int i = 0 ; i < 10;i++)
{
v.push_back(i);
}
for_each(v.begin(), v.end(), myPrint());
cout << endl;
//打乱顺序
random_shuffle(v.begin(), v.end());
for_each(v.begin(), v.end(), myPrint());
cout << endl;
}
int main() {
test01();
return 0;
}
+ +
    +
  • random_shuffle洗牌算法比较实用,使用时记得加随机数种子
  • +
+

5.3.3 merge

功能描述:

+
    +
  • 两个容器元素合并,并存储到另一容器中
    函数原型:

    +
  • +
  • merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
    // 容器元素合并,并存储到另一容器中
    // 注意: 两个容器必须是有序的
    // beg1 容器1开始迭代器
    // end1 容器1结束迭代器
    // beg2 容器2开始迭代器
    // end2 容器2结束迭代器
    // dest 目标容器开始迭代器
    示例:

    +
  • +
+
#include <algorithm>
#include <vector>
class myPrint
{
public:
void operator()(int val)
{
cout << val << " ";
}
};
void test01()
{
vector<int> v1;
vector<int> v2;
for (int i = 0; i < 10 ; i++)
{
v1.push_back(i);
v2.push_back(i + 1);
}
vector<int> vtarget;
//目标容器需要提前开辟空间
vtarget.resize(v1.size() + v2.size());
//合并 需要两个有序序列
merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vtarget.begin());
for_each(vtarget.begin(), vtarget.end(), myPrint());
cout << endl;
}
int main() {
test01();
return 0;
}
+ +
    +
  • merge合并的两个容器必须的有序序列
  • +
+

5.3.4 reverse

功能描述:

+
    +
  • 将容器内元素进行反转
    函数原型:

    +
  • +
  • reverse(iterator beg, iterator end);
    // 反转指定范围的元素
    // beg 开始迭代器
    // end 结束迭代器
    示例:

    +
  • +
+
#include <algorithm>
#include <vector>
class myPrint
{
public:
void operator()(int val)
{
cout << val << " ";
}
};
void test01()
{
vector<int> v;
v.push_back(10);
v.push_back(30);
v.push_back(50);
v.push_back(20);
v.push_back(40);
cout << "反转前: " << endl;
for_each(v.begin(), v.end(), myPrint());
cout << endl;
cout << "反转后: " << endl;
reverse(v.begin(), v.end());
for_each(v.begin(), v.end(), myPrint());
cout << endl;
}
int main() {
test01();
return 0;
}
+ +
    +
  • reverse反转区间内元素,面试题可能涉及到
  • +
+

5.4 常用拷贝和替换算法

学习目标:

+
    +
  • 掌握常用的拷贝和替换算法
    算法简介:
  • +
  • copy // 容器内指定范围的元素拷贝到另一容器中
  • +
  • replace // 将容器内指定范围的旧元素修改为新元素
  • +
  • replace_if // 容器内指定范围满足条件的元素替换为新元素
  • +
  • swap // 互换两个容器的元素
  • +
+

5.4.1 copy

功能描述:

+
    +
  • 容器内指定范围的元素拷贝到另一容器中
    函数原型:

    +
  • +
  • copy(iterator beg, iterator end, iterator dest);
    // 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
    // beg 开始迭代器
    // end 结束迭代器
    // dest 目标起始迭代器
    示例:

    +
  • +
+
#include <algorithm>
#include <vector>
class myPrint
{
public:
void operator()(int val)
{
cout << val << " ";
}
};
void test01()
{
vector<int> v1;
for (int i = 0; i < 10; i++) {
v1.push_back(i + 1);
}
vector<int> v2;
v2.resize(v1.size());
copy(v1.begin(), v1.end(), v2.begin());
for_each(v2.begin(), v2.end(), myPrint());
cout << endl;
int main() {
test01();
return 0;
}
+ +
    +
  • 利用copy算法在拷贝时,目标容器记得提前开辟空间
  • +
+

5.4.2 replace

功能描述:

+
    +
  • 将容器内指定范围的旧元素修改为新元素
    函数原型:

    +
  • +
  • replace(iterator beg, iterator end, oldvalue, newvalue);
    // 将区间内旧元素 替换成 新元素
    // beg 开始迭代器
    // end 结束迭代器
    // oldvalue 旧元素
    // newvalue 新元素
    示例:

    +
  • +
+
#include <algorithm>
#include <vector>
class myPrint
{
public:
void operator()(int val)
{
cout << val << " ";
}
};
void test01()
{
vector<int> v;
v.push_back(20);
v.push_back(30);
v.push_back(20);
v.push_back(40);
v.push_back(50);
v.push_back(10);
v.push_back(20);
cout << "替换前:" << endl;
for_each(v.begin(), v.end(), myPrint());
cout << endl;
//将容器中的20 替换成 2000
cout << "替换后:" << endl;
replace(v.begin(), v.end(), 20,2000);
for_each(v.begin(), v.end(), myPrint());
cout << endl;
}
int main() {
test01();
return 0;
}
+ +
    +
  • replace会替换区间内满足条件的元素
  • +
+

5.4.3 replace_if

功能描述:

+
    +
  • 将区间内满足条件的元素,替换成指定元素
    函数原型:

    +
  • +
  • replace_if(iterator beg, iterator end, _pred, newvalue);
    // 按条件替换元素,满足条件的替换成指定元素
    // beg 开始迭代器
    // end 结束迭代器
    // _pred 谓词
    // newvalue 替换的新元素
    示例:

    +
  • +
+
#include <algorithm>
#include <vector>
class myPrint
{
public:
void operator()(int val)
{
cout << val << " ";
}
};
class ReplaceGreater30
{
public:
bool operator()(int val)
{
return val >= 30;
}
};
void test01()
{
vector<int> v;
v.push_back(20);
v.push_back(30);
v.push_back(20);
v.push_back(40);
v.push_back(50);
v.push_back(10);
v.push_back(20);
cout << "替换前:" << endl;
for_each(v.begin(), v.end(), myPrint());
cout << endl;
//将容器中大于等于的30 替换成 3000
cout << "替换后:" << endl;
replace_if(v.begin(), v.end(), ReplaceGreater30(), 3000);
for_each(v.begin(), v.end(), myPrint());
cout << endl;
}
int main() {
test01();
return 0;
}
+ +
    +
  • replace_if按条件查找,可以利用仿函数灵活筛选满足的条件
  • +
+

5.4.4 swap

功能描述:

+
    +
  • 互换两个容器的元素
    函数原型:

    +
  • +
  • swap(container c1, container c2);
    // 互换两个容器的元素
    // c1容器1
    // c2容器2
    示例:

    +
  • +
+
#include <algorithm>
#include <vector>
class myPrint
{
public:
void operator()(int val)
{
cout << val << " ";
}
};
void test01()
{
vector<int> v1;
vector<int> v2;
for (int i = 0; i < 10; i++) {
v1.push_back(i);
v2.push_back(i+100);
}
cout << "交换前: " << endl;
for_each(v1.begin(), v1.end(), myPrint());
cout << endl;
for_each(v2.begin(), v2.end(), myPrint());
cout << endl;
cout << "交换后: " << endl;
swap(v1, v2);
for_each(v1.begin(), v1.end(), myPrint());
cout << endl;
for_each(v2.begin(), v2.end(), myPrint());
cout << endl;
}
int main() {
test01();
return 0;
}
+ +
    +
  • swap交换容器时,注意交换的容器要同种类型
  • +
+

5.5 常用算术生成算法

学习目标:

+
    +
  • 掌握常用的算术生成算法
    注意:

    +
  • +
  • 算术生成算法属于小型算法,使用时包含的头文件为 #include <numeric>
    算法简介:

    +
  • +
  • accumulate // 计算容器元素累计总和

    +
  • +
  • fill // 向容器中添加元素

    +
  • +
+

5.5.1 accumulate

功能描述:

+
    +
  • 计算区间内 容器元素累计总和
    函数原型:

    +
  • +
  • accumulate(iterator beg, iterator end, value);
    // 计算容器元素累计总和
    // beg 开始迭代器
    // end 结束迭代器
    // value 起始值
    示例:

    +
  • +
+
#include <numeric>
#include <vector>
void test01()
{
vector<int> v;
for (int i = 0; i <= 100; i++) {
v.push_back(i);
}
int total = accumulate(v.begin(), v.end(), 0);
cout << "total = " << total << endl;
}
int main() {
test01();
return 0;
}
+ +
    +
  • accumulate使用时头文件注意是 numeric,这个算法很实用
  • +
+

5.5.2 fill

功能描述:

+
    +
  • 向容器中填充指定的元素
    函数原型:

    +
  • +
  • fill(iterator beg, iterator end, value);
    // 向容器中填充元素
    // beg 开始迭代器
    // end 结束迭代器
    // value 填充的值
    示例:

    +
  • +
+
#include <numeric>
#include <vector>
#include <algorithm>
class myPrint
{
public:
void operator()(int val)
{
cout << val << " ";
}
};
void test01()
{
vector<int> v;
v.resize(10);
//填充
fill(v.begin(), v.end(), 100);
for_each(v.begin(), v.end(), myPrint());
cout << endl;
}
int main() {
test01();
return 0;
}
+ +
    +
  • 利用fill可以将容器区间内元素填充为指定的值
  • +
+

5.6 常用集合算法

学习目标:

+
    +
  • 掌握常用的集合算法
    算法简介:
  • +
  • set_intersection // 求两个容器的交集
  • +
  • set_union // 求两个容器的并集
  • +
  • set_difference // 求两个容器的差集
  • +
+

5.6.1 set_intersection

功能描述:

+
    +
  • 求两个容器的交集
    函数原型:

    +
  • +
  • set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
    // 求两个集合的交集
    // 注意:两个集合必须是有序序列
    // beg1 容器1开始迭代器
    // end1 容器1结束迭代器
    // beg2 容器2开始迭代器
    // end2 容器2结束迭代器
    // dest 目标容器开始迭代器
    示例:

    +
  • +
+
#include <vector>
#include <algorithm>
class myPrint
{
public:
void operator()(int val)
{
cout << val << " ";
}
};
void test01()
{
vector<int> v1;
vector<int> v2;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
v2.push_back(i+5);
}
vector<int> vTarget;
//取两个里面较小的值给目标容器开辟空间
vTarget.resize(min(v1.size(), v2.size()));
//返回目标容器的最后一个元素的迭代器地址
vector<int>::iterator itEnd =
set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());
for_each(vTarget.begin(), itEnd, myPrint());
cout << endl;
}
int main() {
test01();
return 0;
}
+ +

总结:

+
    +
  • 求交集的两个集合必须的有序序列
  • +
  • 目标容器开辟空间需要从两个容器中取小值
  • +
  • set_intersection返回值既是交集中最后一个元素的位置
  • +
+

5.6.2 set_union

功能描述:

+
    +
  • 求两个集合的并集
    函数原型:

    +
  • +
  • set_union(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
    // 求两个集合的并集
    // 注意:两个集合必须是有序序列
    // beg1 容器1开始迭代器
    // end1 容器1结束迭代器
    // beg2 容器2开始迭代器
    // end2 容器2结束迭代器
    // dest 目标容器开始迭代器
    示例:

    +
  • +
+
#include <vector>
#include <algorithm>
class myPrint
{
public:
void operator()(int val)
{
cout << val << " ";
}
};
void test01()
{
vector<int> v1;
vector<int> v2;
for (int i = 0; i < 10; i++) {
v1.push_back(i);
v2.push_back(i+5);
}
vector<int> vTarget;
//取两个容器的和给目标容器开辟空间
vTarget.resize(v1.size() + v2.size());
//返回目标容器的最后一个元素的迭代器地址
vector<int>::iterator itEnd =
set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());
for_each(vTarget.begin(), itEnd, myPrint());
cout << endl;
}
int main() {
test01();
return 0;
}
+ +

总结:

+
    +
  • 求并集的两个集合必须的有序序列
  • +
  • 目标容器开辟空间需要两个容器相加
  • +
  • set_union返回值既是并集中最后一个元素的位置
  • +
+

5.6.3 set_difference

功能描述:

+
    +
  • 求两个集合的差集
    函数原型:

    +
  • +
  • set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
    // 求两个集合的差集
    // 注意:两个集合必须是有序序列
    // beg1 容器1开始迭代器
    // end1 容器1结束迭代器
    // beg2 容器2开始迭代器
    // end2 容器2结束迭代器
    // dest 目标容器开始迭代器
    示例:

    +
  • +
+
#include <vector>
#include <algorithm>
class myPrint
{
public:
void operator()(int val)
{
cout << val << " ";
}
};
void test01()
{
vector<int> v1;
vector<int> v2;
for (int i = 0; i < 10; i++) {
v1.push_back(i);
v2.push_back(i+5);
}
vector<int> vTarget;
//取两个里面较大的值给目标容器开辟空间
vTarget.resize( max(v1.size() , v2.size()));
//返回目标容器的最后一个元素的迭代器地址
cout << "v1与v2的差集为: " << endl;
vector<int>::iterator itEnd =
set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());
for_each(vTarget.begin(), itEnd, myPrint());
cout << endl;
cout << "v2与v1的差集为: " << endl;
itEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTarget.begin());
for_each(vTarget.begin(), itEnd, myPrint());
cout << endl;
}
int main() {
test01();
return 0;
}
+ +
    +
  • 求差集的两个集合必须的有序序列
  • +
  • 目标容器开辟空间需要从两个容器取较大值
  • +
  • set_difference返回值既是差集中最后一个元素的位置
  • +
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2022/05/25/note/Programming/Language/cpp-4/index.html b/2022/05/25/note/Programming/Language/cpp-4/index.html new file mode 100644 index 000000000..4d5aab9bf --- /dev/null +++ b/2022/05/25/note/Programming/Language/cpp-4/index.html @@ -0,0 +1,870 @@ + + + + + + + + + + + + C Plus Plus - Skill | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ C Plus Plus - Skill +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

C++ 技巧1

+ + +

virtual函数

虚函数的调用取决于指向或者引用的对象的类型,而不是指针或者引用自身的类型。

+

静态函数不可以声明为虚函数,同时也不能被constvolatile关键字修饰。

+

构造函数不可以声明为虚函数。同时除了inline|explicit之外,构造函数不允许使用其它任何关键字。

+

多态

本质上是,利用继承和虚函数实现多种不同的类调用同一个函数,此函数在不同的子类中有不同的实现,但函数名一样。

+

模板

模板函数

提供一种操作,但支持多种数据类型,可有效减少代码量,适用于多种数据进行同类型操作

+
template <typename T>
void swap(T &a, T &b){
T temp = a;
a = b;
b = temp;
}
int a = 10;
int b = 20;
swap(a, b); //自动推导数据类型
swap<int>(a, b); //指定数据类型
+ +

声明中typename与class没有差别
自动推导数据类型时,必须推导出一致的数据类型才能使用
在没有确定类型参数的情况下,模板无法自动推导,此时模板没有确定的数据类型,那么模板无法使用,必须手动指定数据类型
普通函数调用时可以发生自动类型转换(隐式类型转换),但模板函数自动推导类型时无法隐式类型转换,只有指定类型后才可以
从某种程度上说,函数模板在指定类型后,与普通函数相差不大

+

对用规则

函数模板与普通函数都可以实现的情况下,优先使用普通函数
可以通过空模板参数来强制调用函数模板
函数模板可以重载

+

具体化函数模板

函数模板不能直接传入自定义类型或数组,可以通过具体化函数模板来解决

+
class person{
int age;
double height;
}
template<class T>
bool compare(T &a, T &b){
if (a *** b) return true;
return false;
}
template<> bool compare(person &a, person &b){
if (a.age *** b.age && a.height *** b.height) return true;
return false;
}
person a;
person b;
a.age = 10;
a.height = 175;
b.age = 24;
b.height = 168;
compare(a, b);
+ +

“学习模板不是为了写模板,而是为了熟练运用STL提供的模板”

+

类模板

创建一个数据类模板,此模板可以使用多个未定的数据类型,给其赋值时需要指定数据类型

+
template<class NameType, class AgeType = int>
class Person
{
public:
Person(NameType name, AgeType age)
{
this->mName = name;
this->mAge = age;
}
void showPerson()
{
cout << "name: " << this->mName << " age: " << this->mAge << endl;
}
public:
NameType mName;
AgeType mAge;
};
+ +

类模板无法自动推导类型,但可以有默认参数(即默认的数据类型)
类模板中的成员函数在调用时才生成
当类模板的对象作为函数的参数时,可以指定传入对象的数据类型,也可以将参数模板化,或将整个类模板化

+

类模板与继承

当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型
如果不指定,编译器无法给子类分配内存
如果想灵活指定出父类中T的类型,子类也需变为类模板

+

文件读写

正常读取:

+
#include <fstream> //包含头文件
ifstream ifs;//创建输入文件流
ifs.open(<File path>, ios::in);//指定文件路径和读取方式
if (!ifs.is_open()){ //判断文件是否成功打开
<expression>
ifs.close()//关闭打开的文件
} else{
// 以下为读取文件的例子,依次读取即可,只是中间空格不知去哪里了
int id;
string name;
int departmentId;
int index = 0;
while (ifs >> id && ifs >> name && ifs >> departmentId) {
worker *worker = NULL;
if (departmentId *** 1) {
worker = new employee(id, name, departmentId);
} else if (departmentId *** 2) {
worker = new manager(id, name, departmentId);
} else {
worker = new boss(id, name, departmentId);
}
this->pWorkerArray[index] = worker;
index++;
}
+ +

判断文件是否为空:

+
#include <fstream> //包含头文件
ifstream ifs;//创建输入文件流
char ch;
ifs >> ch;
if (ifs.eof()) { //判断ifs是否为文件的结尾,如果是,说明文件为空,如果不是说名文件不为空
cout << "File is empty" << endl;
<expression>
ifs.close();
return;
}
+ +

写入文件:

+
#include <fstream> //包含头文件
ofstream ofs;
ofs.open(FILENAME, ios::out);
for (int i = 0; i < this->workerNum; ++i) {
ofs << this->pWorkerArray[i]->id << " "
<< this->pWorkerArray[i]->name << " "
<< this->pWorkerArray[i]->departmentId << endl;
}
ofs.close();
+ +

退出程序接口

exit(0)
+ +

linux下的“按任意键继续”

This is a library conio.h for linux. Just copy file and paste file conio.h on /usr/include/ but don’t forget before you want copy paste on /usr/include/ you must open folder as ADMINISTRATOR first !!

+
git clone https://github.com/zoelabbb/conio.h.git
cd conio.h
sudo make install
+ +

重启IDE

+
#include <conio.h>
void toContinue() {
cout << "Press any key to continue ..." << endl;
getch();
} //如果在while循环中,可能要用两个getch()才能正常工作
+ +

string一个用法(把字符串当做字符数组)

void speechManager::createPlayer() {
string nameSeed;
nameSeed = "ABCDEFGHIJKL";
for (int i = 0; i < nameSeed.size(); i++) {
string name = "Player - ";
name += nameSeed[i];
player tempPlayer;
tempPlayer.name = name;
for (double &j: tempPlayer.score) j = 0; //看上去高级,可读性降低
this->v1.push_back(i + 10001);
this->players.insert(make_pair(i + 10001, tempPlayer));
}
}
+ +

遍历容器(使用auto)

for (auto it = vector.begin(); it != vector.end(); it ++){
<expression>
}
+ +

特性

using

The modern cpp use more using to define aliases of variables.

+
using byte = unsigned char;
using array_t = double[10]; // "array_t" is an array with "double" type and length is ten
array_t a;
a[0] = 1; // It can be used as a common array
using func_t = double(double);
func_t* f = sin;
std::cout << f(3.1415926 / 4); // Calculate sin(PI/4)
+ +

namespace

When a project was completed by many coders, naming conflicts in so many identifiers may be occurs.
Key word namespace can define a namespace with a name or not. The same indentifiers can exist in different namespaces.
Using :: access to a namespace.
Don’t use ; at the end of namespace.

+

Increment and Decrement

int i = 1;
a = i++; // a = 1, i = 2
int i = 1;
a = ++i; // a = 2, i = 2
+ +
+

Both i++ and ++i will make i plus 1, but when using them in a class, ++i is more efficienct.

+
+

Built-in operation function

#include <functional>
#include <iostream>
int main(int, char **) {
std::cout << std::plus<int>()(5, 8) << std::endl;
std::cout << std::minus<int>()(8, 5) << std::endl;
std::cout << std::multiplies<int>()(5, 8) << std::endl;
std::cout << std::divides<int>()(8, 2) << std::endl;
std::cout << std::modulus<int>()(8, 6) << std::endl;
std::cout << std::negate<int>()(5) << std::endl;
return 0;
}
+ +

Type convertion

There are three ways to convert:

+
(DestinationType)sourceData;
DestinationType(sourceData);
static_cast<DestinationType>(sourceData);
+ +

if / switch with initialization

+

Limit the scope of variables as much as possible.
cpp 17 introduced if / switch statements that allow variable initialization.

+
+
if (auto x{ std::cin.get() }; x >= 48 && x <= 57){
std::cout << x << " is a digit." << std::endl;
} else{
std::cout << x << " is not a digit." << std::endl;
}
+ +

Range-based for

int a[]{
1, 2, 3, 4, 5, 6,
};
for (auto &i : a) // Write by reference
i *= 10;
for (auto i : a) // Read by value
std::cout << i << "\t";
std::cout << std::endl;
for (auto i : {12, 25, 67, 43, 89, 54}) // Access the list directly
std::cout << i << "\t";
std::cout << std::endl;
+ +

Function and Reference

Function

double my_sqrt(double x) {
std::cout << "entering " << __func__ << std::endl;
double xnew, xold{x / 2.0};
for (;;) {
xnew = (xold + x / xold) / 2.0;
if (fabs(xnew - xold) < 1e-8) {
break;
}
xold = xnew;
}
return xnew;
};
+ +

Result:

+
entering main
entering my_sqrt
1.414213
+ +
+

To iterate is human, to recurse divine.
To recieve multiple data, using initializer_list to send parameters to function.
e.g.

+
+
double sum(std::initializer_list<double> ld) {
double s{0};
for (auto i : ld)
s += i;
return s;
}
//in main function
std::cout << sum({1, 2, 3, 4}) << std::endl;
std::cout << sum({1, 2, 3, 4, 5}) << std::endl;
+ +

The result:

+
10
15
+ +

Inline function

Insert the inline keyword in front of the function defination, which is recommanded.
When the resouces of codes in a function are less than calling the function, using inline function can increase spending saving.
Inlining is at the cost of code bloat(copying), and only saves the overhead of function calls, thereby improving the execution efficiency of functions.
Inline should not be used in the following situation:

+
    +
  • If the code in the function body is relatively long, making inlining will lead to higher memory consumption costs.
  • +
  • If there is a loop int the function body, the time to execute the code in the function body is greater than the overhead of the function call.
  • +
+

Default parameter

Provide the default parameters.
When calling the function, it can automatically use the default parameters without your actual parameters.

+

Function Template

Function templates implement parameterization of data types.
It can use unknown data types as parameters. As long as the type of data meets the requirements defined by the function template, the function template can be called with these types of data as arguments.

+
template <typename T> T my_min(T a, T b) { return a < b ? a : b; }
template <typename T> T my_max(T a, T b) { return a < b ? b : a; }
double sum(std::initializer_list<double> ld) {
double s{0};
for (auto i : ld)
s += i;
return s;
}
template <typename T> std::pair<T, T> my_min_max(T a, T b) {
T t_min = my_min(a, b);
T t_max = my_max(a, b);
return std::make_pair(t_min, t_max);
}
template <typename T> void print(std::pair<T, T> p) {
std::cout << typeid(T).name() << ": \t";
std::cout << "(min: " << p.first << ", max: " << p.second << ")\n";
}
int main(int, char **) {
print(my_min_max('a', 'b'));
print(my_min_max(20, 10));
print(my_min_max(1.5, 2.5));
return 0;
}
+ +

Lambda Function

int add(int x, int y) { return x + y; }
//in main function
int a{1}, b{2};
std::cout << add(a, b) << std::endl;
auto f{[](int x, int y) { return x + y; }};
std::cout << f(a, b) << std::endl;
auto f2{[=]() { return a + b; }};
std::cout << f2() << std::endl;
auto f3{[&](int x) {
a *= x;
b *= x;
}};
f3(10);
std::cout << a << std::endl << b << std::endl;
+ +

Lambda function is a function that can capture the variables in a scope autometically.
[] means the capture list.
There are several commonly used forms of capture lists:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FormsMeaning
[x]Capture the variable x by value passing
[=]Capture all variables in the parent scope by value passing
[&x]Capture the variable x by reference passsing
[&]Capture all variables in the parent scope by reference passing
[=,&x,&y]Capture the variables x and y by reference passing and the rest by value passing
[&,x]Capture the variable x by value passing and the rest by reference passing
+
+

Lambda function can have the real parameters.

+
+

Reference

Left-valued reference

+

The reference is a key point and difficulty.
A reference is an alias of the referenced object. The two are essentially the same object, but they are displayed as different names and types.

+
+
T& r = t;
+ +

Where T is a data type, & is an operator, r is reference name and t is a variable of type T.

+
    +
  1. t cannot be constant or right value expression.
  2. +
  3. r must be initialized when defined.
    This is excatly where the reference is diferent from the pointer, that is, there is no empty reference.
    References cannot exist independently, but must be attached to the referenced variable, so it does not take up memory space.
    If the reference is a named variable, such a reference is called left-valued reference (in cpp98).
  4. +
+
int a = 2;
int *p = &a;
int &r = a;
std::cout << "a:\t" << a << std::endl;
std::cout << "*p:\t" << *p << std::endl;
std::cout << "r:\t" << r << std::endl;
std::cout << "The value of p: \t" << p << std::endl;
std::cout << "The address of p:\t" << &p << std::endl;
std::cout << "The address of a:\t" << &a << std::endl
<< "The address of r:\t" << &r << std::endl;
a = 3;
std::cout << "a:\t" << a << std::endl;
std::cout << "*p:\t" << *p << std::endl;
std::cout << "r:\t" << r << std::endl;
std::cout << "The value of p: \t" << p << std::endl;
std::cout << "The address of p:\t" << &p << std::endl;
std::cout << "The address of a:\t" << &a << std::endl
<< "The address of r:\t" << &r << std::endl;
r = 4;
std::cout << "a:\t" << a << std::endl;
std::cout << "*p:\t" << *p << std::endl;
std::cout << "r:\t" << r << std::endl;
std::cout << "The value of p: \t" << p << std::endl;
std::cout << "The address of p:\t" << &p << std::endl;
std::cout << "The address of a:\t" << &a << std::endl
<< "The address of r:\t" << &r << std::endl;
+ +

The result:

+
a:      2
*p: 2
r: 2
The value of p: 0x7fff945b3184
The address of p: 0x7fff945b3178
The address of a: 0x7fff945b3184
The address of r: 0x7fff945b3184
a: 3
*p: 3
r: 3
The value of p: 0x7fff945b3184
The address of p: 0x7fff945b3178
The address of a: 0x7fff945b3184
The address of r: 0x7fff945b3184
a: 4
*p: 4
r: 4
The value of p: 0x7fff945b3184
The address of p: 0x7fff945b3178
The address of a: 0x7fff945b3184
The address of r: 0x7fff945b3184
+ +

It can be seen that the left value reference is only an alias of the variable, so all operations on the lvalue reference are equivalent to the operation on the variable itself.
Supplementary explanation:

+
    +
  1. Any variable can be reference, such as pointer.
  2. +
+
int m = 3;
int* p = &m;
int*& rp = p;
+ +

Reference is not variable, so you cannot reference a reference! And at the same time, pointers cannot point to a reference.

+
    +
  1. Pointers can be nullptr or void type, but references cannot.
  2. +
+
int m = 3;
void* p = &m;
p = nullptr;
void& r = m; // error!
int&r = nullptr; // error!
+ +
    +
  1. Cannot build an array of reference.
  2. +
  3. Constant lvalue reference can be initialized by lvalue, constant lvalue and rvalue.
  4. +
+
int x = 1;
const int N = 10;
int& rn = N; // error!
const int& rx = x; // Reference lvalue
const int& rN = N; // Reference constant lvalue
const bool& rB = true; // Reference constant rvalue
+ +
+

The left reference of the constant is usually used as a formal parameter of the function. At this time, the corresponding actual parameter cannot be modified inside the function through this reference to achieve the purpose of protecting the actual parameter.

+
+

Rvalue reference, move() and Move semantics

template <typename T> void my_swap(T &a, T &b) {
T t = std::move(a);
a = std::move(b);
b = std::move(t);
}
+ +

Actually it is the swap() in cpp STL.
The cpp STL also provides array exchange in the form of overloading.

+
template <class T, std::size_t N> void my_swap(T (&a)[N], T (&b)[N]) {
if (&a != &b) {
T *first1 = a;
T *last1 = first1 + N;
T *first2 = b;
for (; first1 != last1; ++first1, ++first2) {
my_swap(*first1, *first2);
}
}
}
+ +

attribute

在C++中,__attribute__是一种GCC编译器提供的扩展语法,用于在函数、变量、类型等声明中添加附加属性。它的语法形式为__attribute__((属性列表))

+

一些常见的属性和它们的说明:

+
    +
  1. __attribute__((aligned(n))):指定变量或结构体的对齐方式为n字节。例如,__attribute__((aligned(4))) int x;将x的对齐方式设置为4字节。
  2. +
  3. __attribute__((packed)):告诉编译器取消结构体的对齐,即以最小的字节对齐结构体成员。这在需要与外部系统或文件进行二进制数据交换时非常有用。
  4. +
  5. __attribute__((noreturn)):用于标记函数不会返回。例如,__attribute__((noreturn)) void error();表示函数error不会返回。
  6. +
  7. __attribute__((unused)):告诉编译器该变量可能未使用,可以抑制未使用变量的警告。例如,int x __attribute__((unused));告诉编译器x可能未使用。
  8. +
  9. __attribute__((deprecated)):用于标记函数、变量或类型已被弃用。当使用被标记为弃用的元素时,编译器会发出警告。
  10. +
  11. __attribute__((constructor))__attribute__((destructor)):用于定义在程序启动前或结束后自动执行的函数。constructor属性用于在main函数执行之前自动调用的函数上,而destructor属性用于在程序结束前自动调用的函数上。
  12. +
+
+

__attribute__是GCC的扩展特性,不是C++标准的一部分,因此在使用时应该注意可移植性。

+
+

declspec

Deduce the type of statements when compiling. It can be used to define a variable.

+
int a = 0;
decltype(a) b = 1; // This means the type of "b" is "int"
decltype(a + b) c = a + b; // c: int
+ +

declspec用以推测表达式结果的类型,返回此类型;而__declspec(dllimport)是 Microsoft Visual C++ 编译器的一个扩展,用于在编译动态链接库(DLL)时指示一个函数或变量是从外部DLL中引入的。

+

当你在一个程序中需要使用从外部DLL中导出的函数或变量时,你可以使用 declspec(dllimport) 关键字来告诉编译器这个函数或变量是从其他DLL中引入的,而不是在当前代码中定义的。这样,编译器在编译时会生成适当的代码,以便正确地链接到外部DLL中的内容。

+

为了提高代码的可读性,请为 __declspec(dllimport) 定义宏,并使用此宏来声明导入的每个符号:

+
#define DllImport   __declspec( dllimport )

DllImport int j;
DllImport void func();
+ +

虽然在函数声明中使用 __declspec(dllimport) 是可选的,但如果你使用此关键字,编译器会生成更高效的代码。 不过,必须对导入的可执行文件使用 **__declspec(dllimport)**,以访问 DLL 的公共数据符号和对象。 请注意,DLL 的用户仍需要与导入库链接。

+

可以对 DLL 和客户端应用程序使用相同的头文件。 为此,请使用特殊的预处理器符号来指示是生成 DLL 还是生成客户端应用程序。 例如:

+
#ifdef _EXPORTING
#define CLASS_DECLSPEC __declspec(dllexport)
#else
#define CLASS_DECLSPEC __declspec(dllimport)
#endif

class CLASS_DECLSPEC CExampleA : public CObject
{ ... class definition ... };
+ +

Other

explicit 关键字可以帮助你在类的构造函数中明确地指定类型转换的行为,从而提高代码的可读性和安全性。

+

optional

在C++中,std::optional是C++17标准引入的一个类模板,用于表示一个可能存在或可能不存在的值。它提供了一种更安全、更语义清晰的方式来处理可能缺失的值,而不需要使用传统的空指针或特殊值。std::optional可以看作是一种对可能的值进行了封装的容器,它要么包含一个有效的值,要么为空(不包含任何值)。

+

使用std::optional的主要好处包括:

+
    +
  1. 避免空指针异常:传统的空指针可能在访问时引发未定义行为,而std::optional通过类型系统和成员函数来明确指示值的存在或不存在,从而避免了潜在的运行时错误。

    +
  2. +
  3. 更好的语义表达std::optional能够更清晰地表达一个值是可选的,而不需要通过注释或命名来传达这种信息。

    +
  4. +
  5. 避免特殊值:使用std::optional可以避免使用特殊值(例如-1、0或空字符串)来表示缺失的值,从而增加了代码的可读性和维护性。

    +
  6. +
  7. 优雅的值处理std::optional提供了一些成员函数,如has_value()value()value_or(),使得对可能存在的值进行访问和处理更加优雅和安全。

    +
  8. +
+

以下是一个简单的示例,展示了如何在C++中使用std::optional

+
#include <iostream>
#include <optional>

std::optional<int> divide(int a, int b) {
if (b != 0) {
return a / b;
} else {
return std::nullopt; // 表示缺失的值
}
}

int main() {
std::optional<int> result = divide(10, 2);
if (result.has_value()) {
std::cout << "Result: " << result.value() << std::endl;
} else {
std::cout << "Division by zero" << std::endl;
}

return 0;
}
+ +

在这个示例中,std::optional被用来包装除法操作的结果,以便在可能出现除零错误时能够明确地表示值的缺失。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git "a/2022/06/15/note/Literature/\346\225\243\346\226\207/\350\260\210\345\206\231\344\275\234/index.html" "b/2022/06/15/note/Literature/\346\225\243\346\226\207/\350\260\210\345\206\231\344\275\234/index.html" new file mode 100644 index 000000000..123423fd6 --- /dev/null +++ "b/2022/06/15/note/Literature/\346\225\243\346\226\207/\350\260\210\345\206\231\344\275\234/index.html" @@ -0,0 +1,677 @@ + + + + + + + + + + + + 谈写作 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 谈写作 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

写文章是一件难事。

+ + +

但看到报纸上、网络上、图书馆里不可记数的文章,又不禁怀疑这个观点,这些文章的作者会不会觉得写作是一件难事呢。高中时语文老师拿着只有三十多分的卷子,说我有写作障碍。我是不服气的。那时有幸窥见书中斑斓世界,不论是异乎于日常生活的传奇神话还是鞭辟入里的雄辩论证,都使我着迷不已,自然而然生出想写一写的想法。私下里早已挥笔驰骋,怎受得了这样的批评?于是暗自打气,安慰自己说是他们不懂,自命清高到要把所有怀才不遇的诗文都吟诵一遍。然而当自己把课堂上偷偷摸摸写下的小说给同学看,引来一阵耻笑的时候,又陷入了自我怀疑,难道我真的有写作障碍,难道我真的写得很烂?上学放学路上总有老人摆上一个书摊,悠然自得地与邻摊卖日用品的大妈谈笑风生,我在一旁挑挑拣拣,读到某些卖的很好的书,或是同龄人发表的文章,心中暗忿,这样的文章都能出版?同时又隐隐激动,我写得也许更好,那岂不是也能发表?回到家中满怀激情地偷偷投出一份稿件,然后就再也没了音讯。就这样,在不断地怀疑与肯定中,对写作的目的渐渐麻木,直到能享受于写作这件事本身。

+

一直未受鼓励,因而难以坚持写下去,总有无数个时刻想要放弃,又有无数的瞬间重新燃起热情。读到川端康成早年也怀疑自己有写作障碍,以此安慰自己鼓励自己,想象每一个作家或者作者都会经历这样的境遇。其实并不奇怪,写文章通常是给人看,若没有奇思妙想或有趣故事,读者不会买帐,这就是说作者至少在某些方面高于读者,否则读者就不愿意读了,然而没有人生来就落在高处,必然是一步一步走上去的,那么在走到高处之前,都无法写出令读者满意的文章,自然就很难收到鼓励,没有鼓励就很难坚持走到那个地方,于是就都是在跟自己的较劲中艰难前行。

+

最开始接触写这一件事是很小的时候了,还没开始上学妈妈就买了一本《唐诗三百首》,让我跟姐姐没事就背上几首——那真是无心插柳,今后的那么多年诗成了我生命中不可分割的重要部分,不得不说在某种程度上就是归功于那本《唐诗三百首》。但当时一首咏鹅费尽心思还难以理解,背了无数遍才能在脑中想象水中鹅的形象。夏天的一日,在平房上吹着风扇,突发奇想,来一首咏扇吧,“呼呼呼,风扇转呀转,……”,就是这样一团混乱的文字,让我产生一种奇异的感受,纸上铅笔歪歪扭扭组成的字句给我自己一种陌生的感觉,它们是出自我手,但我并不熟稔,也就是说它们并不属于我,而是独立于我之外的什么,我只是将它们组合和摆放,像楼下抽屉里的四驱车和奥特曼模型。这样第一次到文字世界做客的情景给我留下较好的印象,但往后的会面就没那么愉快了。

+

上到小学三年级,语文要写作文了,最开始我是比较兴奋的,觉得可以大展身手,力压群雄。但听了课堂上老师讲的什么状物文,描景文,顿觉枯燥乏味,很快就对写作文失去了兴趣。然而作业还是要写,就去书店买一本作文大全,想看看别人怎么写,结果一下被迷住了,如饥似渴般的把别人的文章读了,轮到我写的时候,还是提笔在白纸面前凝神个把钟头,愣是一个字也挤不出,母亲看到我的苦相,前来帮忙解围。第二天老师在讲台上读我的作文,赞不绝口,我心虚异常,不敢告诉老师这其实是母亲帮忙写的,又害怕下次再有作文作业,我如何能独自完成。在这样的压力下,我自己摸出一条门道来,比如老师让写春天,我就到作文书上找几篇写春天的文章,自己把里面的句子摘出来,重新拼凑,组成一个新的文章,竟还能取得不错的效果。犹记得当时还拼凑出一篇模板式的文章,每逢考试都拿出来翻炒一阵,也不知那时候老师有没有闻到一股焦糊的味道。

+

一日上语文课老师拿出一本小小的装帧精美的小册子,名字叫《小小作家》,她说这书里有许多美文,可以在写作文的时候用到,推荐我们都读一读,每个月交上十四块钱,就可以每周拿到一本,我自是知道她是在帮忙做广告,动机不纯,但听到她说本校有的同学的文章就在这上面发表时,我还是愿意购买了。到手之后,赶紧翻开,有看不懂的诗歌,也有平常的抒情美文,甚至还有妙趣横生的歇后语和笑话,于是我便幻想着自己也能写一些可以在其上发表的文章,几经尝试,仍然连作文作业和考试都难以应付,只能作罢,第一次成为作者的梦想就此破灭。

+

到了初中,接触到更多更广的书,网络文学也在蓬勃生长。课堂上与老师斗智斗勇,桌兜里总藏着一部翻盖手机或破烂的大部书(这种书的命运就是在班上传来传去),老师走下讲台,就赶紧藏到里面,老师继续讲课,自己就继续看书,有时候难免沉醉其中,看得入迷了,老师走下来都没注意到,直到老师从身边走过才看到,吓得浑身一哆嗦,便是一直没看到老师倒也罢了,偏偏看到后吓了一跳让老师发觉不对劲,回身搜查桌子里面的秘密,于是上交手机,并扯出自己连接的线路,其实早有准备,不慌不忙地取出内存卡(里面储存着辛苦收集的小说),毕竟留得青山在,不怕没柴烧。这样畅游在别人创造的世界中,一直到高中读了一本名为《七夜雪》的武侠小说,才重新燃起想写一写的冲动。

+

刚上高中还沉浸在物理定律下的秩序世界中,所怀抱负也是关于高维空间的幼稚想象,课余时间会读一些小说,《诛仙》、《斗罗大陆》、《第七天》等等。一日在家中读到《七夜雪》,被书中所描绘的漫天大雪中浪漫与残忍深深吸引,莫名地感到自己必须要写点什么了,类似于使命的内在冲动,无法抑制,那个从头到脚的战栗让我即刻开始动笔,然后再次被现实打了一巴掌。从未受到过真正的写作训练与教导,全凭想象和本能去书写,写完两千字回头看去,发现与第一次做饭的场景何其相似,只是把鸡蛋炒糊盐巴齁咸倒也算了,我是大火干烧把锅烧烂了。历时一年才从这个打击中走出来,为的是写文章赚钱,金钱的吸引力足以让我克服心理上的坎坷,于是发奋图强,课堂上,放学后,睡觉前,几乎无时无刻不在挤牙膏,甚至走在路上都在思考故事情节,上厕所都在一下下地码字。一次课堂上写小说还被老师发现,好在没有把本子撕碎,我至今感激她。最终出手两篇小说,各三万字左右,投到杂志社,编辑说文笔很棒,就是情节与我们的杂志风格不符。这让我又激动又失落,被拒稿是失落,第一次与编辑通信是激动,于是我满怀希望拿给同学看,得到了不含恶意耻笑,我再次陷入自我怀疑。从那时起,我便意识到,写作对于我来说根本不是一件要写给别人看的事情,而仅仅是不得不写,写了才能不那么痛苦的事情,这么告诉自己,一半是为自己写得不好开脱,一半是为写得不好却还一直写做解释。

+

升入大学,有更多的时间阅读和写作, 但写作几乎没有成为一个需要我努力去做的事,一旦是这样,我就写不下去,常常是徘徊在“不得不写”和“无论如何都写不了”的情况,也就是说,单纯为了写作而产生的动力是驱使我写作的唯一力量。也曾羡慕那些说写就能写,技巧构思步步为营,每天努力写上多少字的人,他们似乎不需要外在的东西激起写作的强烈欲望,仅仅是把写作当作一件自然而然的寻常事情,像流水线工作一样毫无波澜。但我始终无法做到,似乎也永远无法做到,我只能在自己即将坠入虚无之时,用写作拉自己一把,在这层意义上,写得好坏,写作的难易,都并不重要。

+

即使是写给自己看,如果没有读者观念,也难以让写作进行下去,自嗨式写作也得是自己真的能嗨起来。文章的宿命就是被读,无论是给别人读还是自己读,那么如何更轻松的写得更好就是必须要追求的,我个人没有办法,唯一的办法就是接受自己文章的烂,只有察觉到自己写得烂,才知道哪里需要改进,然后在文章放置一段时间变得陌生后,不断地修改与尝试,最终得到自己相对满意的文章。有时候也不得不承认写作有天赋的因素在,否则我也可以五岁咏鹅而非咏扇了,但不说写得多么出彩,至少写得让自己满意,还是可以通过努力达到的。 +  

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2022/11/20/note/Linux/Samba/index.html b/2022/11/20/note/Linux/Samba/index.html new file mode 100644 index 000000000..b340c35e0 --- /dev/null +++ b/2022/11/20/note/Linux/Samba/index.html @@ -0,0 +1,691 @@ + + + + + + + + + + + + Samba | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Samba +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
    +
  • SMB是微软指定的协议,用于局域网文件共享,SMB全称是服务消息块
  • +
  • SMB移植到linux后,就诞生了samba软件
  • +
  • 可以在两台linux下,也可以在linux与windows之间
  • +
+ + +

Installation

sudo pacman -S samba
+ +

Usage

sudo vim /etc/samba/smb.conf
+ +

在配置文件中写入:

+
[global]
workgroup = SAMBA
Security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
readonly = No
inherit acls = Yes
[printers]
comment = All Printers
path = /var/tmp
printable = Yes
create mask = 0600
browseable = No

[print$]
comment = Printer Driver
path = /var/lib/samba/drivers
write list = @printadmin root
force group = @printadmin
create mask = 0664
directory mask = 0775
[dionysen]
comment = dionysen
path = /home/dionysen
public = no
writable = yes
guest ok = yes
+ +

使用pdbedit命令创建samba专用的用户和密码,创建时必须保证这个用户在linux系统中存在

+
pdbedit -a -u dionysen  #create a user

sudo systemctl restart smb
sudo systemctl status smb

sudo netstat -tunlp | grep smb

tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 189537/smbd
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 189537/smbd
tcp6 0 0 :::445 :::* LISTEN 189537/smbd
tcp6 0 0 :::139 :::* LISTEN 189537/smbd
+ +

打开防火墙(由于只能在局域网使用,已放弃)

+

改用FTP

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2022/11/21/note/Experience/Samsung/index.html b/2022/11/21/note/Experience/Samsung/index.html new file mode 100644 index 000000000..1eb368f96 --- /dev/null +++ b/2022/11/21/note/Experience/Samsung/index.html @@ -0,0 +1,683 @@ + + + + + + + + + + + + Samsung玩机经验 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Samsung玩机经验 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

三星玩机经验。

+ + +

注意事项

    +
  • 卸载不需要的系统软件:刷完欧版系统,没有过多预装软件,可以不用卸载,不用的可以长按禁用
  • +
+

三星解bl锁之前一定要退出账号

+

刷完海外版固件,oem依然是解开的状态,但是有一个kg锁需要打开(prenormal是锁着的状态,checking是解开的状态),方式是进行系统更新检查,检查可能提醒无法进行更新,但无所谓,重启进入刷机模式就能看到已经解锁,此时可以刷magisk修补包了

+

Dex模式下使用谷歌输入法

条件:已Root
使用termux,输入命令:

+
sudo ime set com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME
+

更换主题

更换主题,尤其是更换自定义图标时,最好先应用一下默认主题,在换上自己的主题,否则会存在一些自定义图标不生效的情况。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git "a/2023/05/01/note/Literature/\351\230\205\350\257\273/\343\200\212\346\210\221\344\270\216\345\234\260\345\235\233\343\200\213\350\257\273\344\271\246\347\254\224\350\256\260/index.html" "b/2023/05/01/note/Literature/\351\230\205\350\257\273/\343\200\212\346\210\221\344\270\216\345\234\260\345\235\233\343\200\213\350\257\273\344\271\246\347\254\224\350\256\260/index.html" new file mode 100644 index 000000000..f5e4fd481 --- /dev/null +++ "b/2023/05/01/note/Literature/\351\230\205\350\257\273/\343\200\212\346\210\221\344\270\216\345\234\260\345\235\233\343\200\213\350\257\273\344\271\246\347\254\224\350\256\260/index.html" @@ -0,0 +1,706 @@ + + + + + + + + + + + + 《我与地坛》读书笔记 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 《我与地坛》读书笔记 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

当人独身,总会觉得自己与某些非生命的东西有灵识上的联系,这种寂寞呀。

+ + +

想到那些有所名气的文人们,成名之前的互撕谩骂不少,但少见有批评这等“公认”的名家(如矛盾,老舍,史铁生,余华),似乎大众认定的作家一定是值得赞扬的,是事实如此,还是害怕因此而丢掉自己的名声。中学时看到所谓文坛,互相吹捧而一无是处的“大家”们,文人的悲哀与他们的悲哀混在一起,反倒显得没那么悲哀。

+
+

“一个人,出生了,这就不再是一个可以辩论的问题,而只是上帝交给他的一个事实;上帝在交给我们这件事实的时候,已经顺便保证了它的结果,所以死是一件不必急于求成的事,死是一个必然会降临的节日。这样想过之后我安心多了,眼前的一切不再那么可怕。”

+
+

生死之谜,各人有各人的答案,即使从未想过,交白卷也是有分的,史铁生在开头就真诚地道出了自己的答案,不敢说这是浅显的,自己所谓“活着的意义就是追求快乐”也不过是顺应了生物学本能,学科建立在人类文化之中,文化归属于人类自身,当这该死的环再次出现,我将撕掉卷子,擦擦手,扬长而去——上帝是不真诚的,我们的真诚只会让我们倍受其害。

+

我们对自己的真诚会让我们得以解脱。

+

一个地方如果没有别人,只有你自己,你会觉得那个地方独属于你。

+

人对味道的记忆之深刻,让人恐怖,几十年前在某个地方闻到的一种气味,再次闻到,就一下神魂飘到那时候去了,也许那地方以及关于那地方的一切都已经忘得一干二净,但莫名心绪会永久性地与那些意象绑定,函数似的一触必发。

+
+

“世上的事常常使上帝的居心变得可疑。”

+
+

史铁生算是很有资格说这话的一类人。

+

“活下去试试”,我又何尝不是呢,曾经写下三个活着的理由,一、人之本能,二、生时稀于死时,三、生活不易,比死有趣。是要这样,否则如何能说服自己,如何面对自己对死亡的恐惧,这种恐惧本身甚至都虚幻如烟,日常生活是难以近距离接触死亡的,即使接触,也至多是他人的死亡,接触自己的死亡?要是可以就好了。那么对死亡的思考除了在死亡的前一瞬间,都是浅薄的,可又不得不思考死亡,不思考就等于死亡本身,那么就必须有这样那样冠冕堂皇又清者自清的理由,好像真的是自己决定要活下去一样,不是命运,不是生物本能,是自己可以掌控自己,包括自己的生命。真是,要在上帝发笑之前自己先笑出来了。这自欺欺人真是好极了,至少让自己对死的怯懦有了归属,可以堂而皇之的活着。

+

想到写过的一则诗,“一只金龟子撞着窗纱闯入我的领地/尽管不愿也不忍却还是判了它的死刑/反射微黄光泽的翅膀挣扎着跌入水中/漩涡吞噬了小小的身躯就像它不曾存在过/我不说但也可知这一幕其实是很多幕/虚无中记忆中史书中到处是其惨艳的身影/因而上帝存在时上帝也将为此苦恼/难呀难呀难就难在任何生命的逝去/大自然都不会感到丝毫的痛楚/活着有什么可悲的活着唯一可悲的/就是意识到活着的可悲”。

+

再说一次,我们对自己的真诚会让我们得以解脱。

+

直到发现小时候的无神论者和现在的泛神论者,且不信任何宗教的我,谈起生死句句离不开上帝,才意识到我对死亡所知之少,上帝已经成为未知和超越的代名词,那是以区区人类之躯,不可能够到的地方,那是时间的尽头,那是存在的反义词。

+

“人类真正的名字叫欲望。”是的,中学在笔记本扉页写下“无欲则无敌”,当然是可笑的幼稚见解,但也是无可辩驳又无法做到的事实,伟大的先哲们都困顿于自身的欲望,即史铁生所谓的人类真正的名字,唯一的解脱是死,这是显而易见的,但这等同于“撕掉卷子”,是在否认世界的本源,佛门苦行僧追求把欲望降低到极致,以致鲜有痛苦与快乐,终生保持一副平常心,这是优秀的答案,但亦非满分。人类,可怜,不如不当人类——那便是放弃考试。更不如不曾出生,或生来即死——那是连备考都不屑。

+

常常觉得无论如何也不会喜欢某本书,但又被其真诚打动。《我与地坛》是这样的。

+

也许,活着本身就是活着的全部意义。

+
+

要是今生遗憾太多,在背运的当儿,尤其在背运之后情绪渐渐平静了或麻木了,你独自待一会儿,抽支烟,不妨想一想来世。你不妨随心所欲地设想一下(甚至是设计一下)自己的来世。你不妨试试。在背运的时候,至少我觉得这不失为一剂良药——先可以安神,而后又可以振奋,就像输惯了的赌徒把屡屡的败绩置于脑后,输光了裤子也还是对下一局存着饱满的好奇和必赢的冲动。这没有什么不好。这有什么不好吗?无非是说迷信,好吧,你就迷信它一回。

+
+

迷信的意思也许是着迷一般相信虚无或虚假的东西,比如想一想来世,觉得真的有来世,不妨现在去世,让来世成为现世,万一来世好的不得了呢?输了的赌徒总觉得下次能赢,再来一次吧。而史铁生的想来世只是想一想,获取精神上的慰藉,这局确实可能会输,但输了也还有下局呢,这样心安于输,到最后也不一定就输。烧香拜佛祈求保佑是把输赢寄希望于神明,这在结果上是迷信,过程上并非迷信,因为祈祷者得到了心灵的慰藉,那么无论输赢,在结果出来之前,心灵上不会遭受巨大的灾难。回首历史,神在物质上对人的帮助有待商榷,在精神上对人的帮助可谓彪炳千秋。

+

一个绝顶幸运的人,从未经受过任何不幸的人,终究还是要面临死亡的,那么他的所有幸运可能会在死亡的时候转变为他的不幸——他如此幸福,却要在死亡中结束他的幸福,他越是幸福,死亡越是可怕,而死亡必然降临。那么永生呢,如果科技发展到可以保存人的意识,把将死之人的意识移植到机器上,永远的存活下去,这幸运会有转化成不幸的时候吗。那时人是什么,意义是什么,生命是什么等这些现在难以想通的问题会变得更加难以想通且面目全非吧。

+
+

有位大物理学家说过:“物理学不告诉我们世界是什么,而是告诉我们关于世界我们能够谈论什么。”

+
+

这位大物理学家与我早年说过的一句话不谋而合:“物理学探索的绝非世界的本质,而是我们所能观察到的事物的运转规律。”这当然不是在说我与大物理学家有何关系,而是一个昭然而又绝望的事实是,我们无能于探究世界的本质,我们永远只能在我们人类自身的视角与这个世界交互,而不会看到表象之下的什么。这不是说人类能力有限,也不是上帝难以捉摸的想法,而是逻辑本身的限制。逻辑乃世上最坚不可摧的东西。甚至我们可以在探索世界本质的路上折戟后,可以大言不惭地说:找到了,世界的本质就是逻辑。

+

看铁生所描绘的,人之出生是被抛过来的,出生之前你不存在,自然无可抛,他不想说哲学的问题,于是把问题丢给哲学家,而我想这个问题,第一反应是物质上的出生。(需要警惕唯物思想)

+

于是,人性,在那时就已暴露:为了免遭惩罚,大家纷纷去效忠那一两个头领,阿谀,谄媚,惟比成年人来得直率。天下熙熙,皆为利来;天下攘攘,皆为利往。古来万事皆如此,权与利流来流去。总说政治是小孩子抢零食,因为它只是比小孩子多了层粉饰罢了。

+

读到史铁生将小时候的事,颇有感慨,往往是经历时有所感却从未立即记录下来,直到多年以后的某个时候,才重新回忆起来,写下文字,文字与真实的感受之间隔着远比年月更加久远的东西,读者,旁观者,经历者,截然不同又紧密联系的一件事。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Algorithm/Algorithm/index.html b/2023/05/25/note/Algorithm/Algorithm/index.html new file mode 100644 index 000000000..5cf507215 --- /dev/null +++ b/2023/05/25/note/Algorithm/Algorithm/index.html @@ -0,0 +1,873 @@ + + + + + + + + + + + + Algorithm | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Algorithm +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

同一个问题,不同的算法,结果一样而所消耗资源不一样

+
+

大O表示法:算法的时间复杂度通常用大O符号表述,定义为 T[n] = O(f(n)) 。称函数T(n)以f(n)为界或者称T(n)受限于f(n)。
如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n)。T(n)称为这一算法的“时间复杂度”。

+ + +

时间复杂度

    +
  • 常数阶 O(1)
    代码中没有影响到其所用时间的变量
    如:

    +
    void swapTwoInts(int &a, int &b){
    int temp = a;
    a = b;
    b = temp;
    }
    +
  • +
  • 线性阶 O(n)
    代码中有变量可以影响到执行所用的时间,它们的关系是线性的
    如:

    +
    int sum int n ){
    int ret = 0;
    for ( int i = 0 ; i <= n ; i ++){
    ret += i;
    }
    return ret;
    }
    +
  • +
  • 平方阶 O(n${^2}$)

    +
  • +
+

代码中的变量与执行代码所用时间的关系是平方
如遍历for循环嵌套for循环

+
    +
  • 对数阶 O(logn)
    在二分查找中,通过while循环,成2倍数的缩减搜索范围,也就是说需要经过log2^n次可以跳出循环。
  • +
+
int binarySearchint arr[], int n , int target){
int l = 0, r = n - 1;
while ( l <= r) {
int mid = l + (r - l) / 2;
if (arr[mid] == target) return mid;
if (arr[mid] > target ) r = mid - 1;
else l = mid + 1;
}
return -1;
}
+ +

以下代码也是O(logn)的时间复杂度

+
// 整形转成字符串
string intToString int num ){
string s = "";
// n 经过几次“除以10”的操作后,等于0
while (num ){
s += '0' + num%10;
num /= 10;
}
reverse(s)
return s;
}
+ +
    +
  • 线性对数阶 O(nlogn)
    将时间复杂度为O(logn)的代码循环N遍的话,那么它的时间复杂度就是 n * O(logn),也就是了O(nlogn)

    +
    void hello (){
    for( m = 1 ; m < n ; m++){
    i = 1;
    while( i < n ){
    i = i * 2;
    }
    }
    }
  • +
+

空间复杂度

+

递归与迭代

递归:函数中调用函数本身

+

迭代:每次迭代的结果作为下一次迭代的初始值

+
+

Program = Data Structure + Algorithm

+
+

Complexity

How to judge a algorithm?
How to contrast diferent algorithms?
Big O Notation: The limiting case of the time or space required by the algorithm as the computational magnitude increases.

+
+

T(n) = O(f(n))

+
+

Time Complexity

    +
  • Example 1:
  • +
+
for (int i = 1; i <= n; i++){
x++;
}
+ +

The time complexity of the for loop is O(n).

+
    +
  • Example 2:
  • +
+
for (int i = 1; i <= n; i++){
x++;
}
for (int i = 1; i <= n; i++){
for (int j = 1; j <= n; j++){
x++;
}
}
+ +

There are a single for loop and a double for loop, and the complexity of the former is O(n) and the latter is O(n$^{2}$) . So when n tends to be infinite, the complexity of whole algorithm is O(n$^{2}$).

+

Analysis of Commonly used time complexity order

image + +

Constant order O(1)

int x = 0;
int y = 1;
int temp = x;
x = y;
y = temp;
+ +

As long as there is no complex logic such as loops or recursion, the code is O(1) complex no matter how many lines of code are executed.

+

Linear order O(n)

for (int i = 1; i <= n; i++) {
x++;
}
+ +

In this code, the for loop is executed n times, so the computation time varies with n, so this kind of code can be expressed by O(n).

+

The logarithmic order O(log n)

int i = 1;
while(i < n) {
i = i * 2;
}
+ +

In the above loop, each time i is multiplied by 2, which means each time i is a step closer to n. So how many cycles does it take for i to be equal to or greater than n, which is solving for 2${^x}$ is equal to n. The answer is x = log 2${^n}$. So after log 2${^n}$ cycles, i is going to be greater than or equal to n, and that’s the end of the code. So the complexity of this code is O(log n).

+

Linear log order O(nlog n)

for(int i = 0; i <= n: i++) {
int x = 1;
while(x < n) {
x = x * 2;
}
}
+ +

Linear log order O(nlog n) is easy to understand, which means you loop through O(log n) code n times. Each loop is order O(log n), n * log n = n(log n).

+

Squared square order O(n${^2}$)

for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
x++;
}
}
+ +

O(n${^2}$) is essentially n*n, if we change the number of cycles in the inner layer to m:

+
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
x++;
}
}
+ +

The complexity becomes n * m = O(nm).

+

Space Complexity

Since “time complexity” is not the amount of time a program consumes, “space complexity” is not used to calculate the amount of space a program consumes. As the magnitude of the problem increases, the amount of memory a program needs to allocate may also increase, and “space complexity” reflects the tendency of memory space to increase.

+

O(1) Space complexity

int x = 0;
int y = 0;
x++;
y++;
+ +

The space allocated by x and y does not change with the amount of data processed, so the space complexity is O(1).

+

O(n) Space complexity

int[] newArray = new int[n];
for (int i = 0; i < n; i++) {
newArray[i] = i;
}
+ +

In this code, we create an array of length nand then assign values to the elements in the loop. Therefore, the “space complexity” of this code depends on the length of newArray, which is n, so S(n) = O(n).

+

Sorting Algorithms

Searching is a very important step in computers, but it is often difficult to find a specific number from unordered data. Binary searching, as we mentioned earlier, only works in sorted arrays. So the sorting algorithm is a very important job, and if we can sort the numbers, then we can save a lot of effort when we’re looking for a particular number.

+

There are many sorting algorithms, and each has its own advantages and disadvantages:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AlgorithmTime Complexity(Best)Time Complexity(Average)Time Complexity(Worst)Space Complexity
QuiksortΩ(n log(n))Θ(n log(n))Ω(n${^2}$)O(log(n))
MergesortΩ(n log(n))Θ(n log(n))O(n log(n))O(n)
TimesortΩ(n)Θ(n log(n))O(n log(n))O(n)
HeapsortΩ(n log(n))Θ(n log(n))O(n log(n))O(1)
Bubble SortΩ(n)Θ(n${^2}$)O(n${^2}$)O(1)
Insertion SortΩ(n)Θ(n${^2}$)O(n${^2}$)O(1)
Selection SortΩ(n${^2}$)Θ(n${^2}$)O(n${^2}$)O(1)
Tree SortΩ(n log(n))Θ(n log(n))O(n${^2}$)O(n)
Shell SortΩ(n log(n))Θ(n (log(n))${^2}$)O(n (log(n))${^2}$)O(1)
Bucket SortΩ(n+k)Θ(n+k)O(n${^2}$)O(n)
Radix SortΩ(nk)Θ(nk)O(nk)O(n+k)
Counting SortΩ(n+k)Θ(n+k)O(n+k)O(k)
CubesortΩ(n)Θ(n log(n))O(n log(n))O(n)
+

Insertion Sort

Insertion sort is a simple and intuitive sorting algorithm. In insertion sort, we process the unsorted elements from front to back. For each element, we compare it to the previously sorted elements, find the corresponding position, and insert.

+

Essentially, for each element to be processed, we only care about its relationship to the previous element, and we only deal with the elements after the current element in the next round.

+

Specific steps:

+
    +
  1. Starting with the second element (the first new element to be sorted), the sequence of previous elements is scanned backwards
  2. +
  3. If the current scanned element is larger than the current element, the scanned element is moved to the next bit
  4. +
  5. Repeat Step 2 until you find a position less than or equal to the new element
  6. +
  7. Insert the new element at that location
  8. +
  9. Repeat Steps 1 through 4 for subsequent elements
  10. +
+
void inseritonSort(int arr[], int arrayLength) {
for (int i = 1; i < arrayLength; i++) {
int cur = arr[i];
int inseritonIndex = i - 1;
while (inseritonIndex >= 0 && arr[inseritonIndex] > cur) {
arr[inseritonIndex + 1] = arr[inseritonIndex];
inseritonIndex--;
}
arr[inseritonIndex + 1] = cur;
}
}
+ +
+

T(n) = O(n${^2}$)

+

S(n) = O(1)

+
+

Quick Sort

Quicksort is a Divide and Conquer algorithm in which we turn big problems into small ones, and solve the small ones one by one, so that when the small ones are solved, the big ones will be solved.

+

The basic idea of quicksort is to pick a target element and then put the target element in the correct position in the array. The array is then split into two subarrays based on the sorted elements, using the same method and the same operation for the unsorted range.

+

Specific steps:

+
    +
  1. For the current array, we’re going to use the last element as our pivot
  2. +
  3. All elements smaller than the base number are ranked before the base number, and those larger than the base number are ranked after the base number
  4. +
  5. Once the base number is in place, the element is split into two front and back subarrays based on the cardinality position
  6. +
  7. Use steps 1 through 4 recursively for subarrays until the subarray is 1 or less in length
  8. +
+
void swap(int arr[], int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
int partition(int arr[], int left, int right) {
int pivot = arr[right];
int leftIndex = left;
int rightIndex = right - 1;
while (1) {
while (leftIndex < right && arr[leftIndex] <= pivot) {
leftIndex++;
}
while (rightIndex >= left && arr[rightIndex] > pivot) {
rightIndex--;
}
if (leftIndex > rightIndex) break;
swap(arr, leftIndex, rightIndex);
}
swap(arr, leftIndex, right);
return leftIndex;
}

void quickSort(int arr[], int left, int right) {
if (left >= right) return;
int partitionIndex = partition(arr, left, right);
quickSort(arr, left, partitionIndex - 1);
quickSort(arr, partitionIndex + 1, right);
}
void printArray(int arr[], int arrayLength) {
for (int i = 0; i < arrayLength; i++) {
std::cout << arr[i] << " ";
}
std::cout << "\n";
}
+ +
+

T(n) = O(n${^2}$). Average time complexity is O(n(log n)).
S(n) = O(n). Average time complexity is O(log n).

+
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Algorithm/DataStrucuture/index.html b/2023/05/25/note/Algorithm/DataStrucuture/index.html new file mode 100644 index 000000000..e61cd2685 --- /dev/null +++ b/2023/05/25/note/Algorithm/DataStrucuture/index.html @@ -0,0 +1,824 @@ + + + + + + + + + + + + Data Structure | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Data Structure +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

Array

Array has fixed size and contiguous memory. New elements cannot be appended. You can use memory address to access elements of Array.

+
char a[5] = {'h', 'e', 'l', 'l', 'o',}; 
C++ counts food tags from `0`, so `a[0] = 'h'` and `a[1] = 'e'`.
Random access using `a[i]` has `O(1)` time complexity.
Units of array can be modified.
+
a[0] = 'b';
+

result:

+
bello
+ + +

Dynamic Allocation of Arrays

A size-n array can be created in this way:

+
char a[n];
+ +

But when writing the code, n must be known.

+

If n is unknown, how dose the program run?

+
char* a = NULL;
int n; // array size
cin >> n; // read in the size. e.g., get n = 5
a = new char[n];
+ +

Now a is an empty array whose size is 5.

+
// store somrthing in the array
a[0] = 'h';
a[1] = 'e';
a[2] = 'l';
a[3] = 'l';
a[4] = 'o';
+ +

When done, free memory. Otherwise, memory leak can happen.

+
delete [] a;
a = NULL;
+ + + +

Removing an element in the middle has O(n) time complexity. Require moving the remaining items leftward.

+

Vector

Vector is almost the same as array.

+

The main difference is that vector’s capacity can automatically grow.

+

New elements can be appended using push_back() in O(1) time(on average).

+

The last element can be removed using pop_back() in O(1) time.

+
std::vector<char> v = {'h', 'e', 'l', 'l', 'o'}; 
v.push_back();
v.pop_back();
v.erase(v.begin() + 1);
+ +

Vector can delete an element in the middle using erase() in O(n) time. So it is not better to do this.

+
std::vector<char> v(100);
cout << v.size(); // print "100"
cout << v.capacity(); // print "100"
// then
v.push_back('x');
cout << v.size(); // print "101"
cout << v.capacity(); // print "200"
+ +

When size is going to exceed capacity, program will create a new array of capacity 200, copy the 100 elements from the old array to the new, put the new element in the 101st position and free the old array from memory.

+

List

A Node

A node contains a data and two pointers that one points to the previous node and another points to the next node.

+

Doubly Linked List

std::list<char> l = {'h', 'e', 'l', 'l', 'o'}; 
+ +
cout << l[2];		// does not work
l[0] = 'a'; // does not work
+ +
list<char>::iterator iter = l.begin();
cout << *iter; // print 'h'
iter++;
cout << *iter; // print 'e'
*iter = 'a';

push_back();
push.front();
+ +

Diference

+ + + + + + + + + + + + + + + + + + + + +
ArrayVectorList
Sizefixedcan increase and decreasecan increase and decrease
Memorycontiguouscontiguousnot contiguous
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArrayVectorList
Rand AccessO(1)O(1)
push_back()O(1)(average)O(1)
pop_back()O(1)O(1)
insert()O(n)(average)O(1)
erase()O(n)(average)O(1)
+

Which shall we use?

+

Array: Fixed size throughout.

+

Vector:

+
    +
  • Random access(i.e., read or write the i-th element) is fast.
  • +
  • Insertion and deletion at the end are fas.
  • +
  • insertion and deletion in the front and midddle are slow.
  • +
+

List:

+
    +
  • Sequentially visiting elements is fast; random access is not allowed.
  • +
  • Frequent insertion and deletion at any position are OK.
  • +
+
int arr[] = {3, 5, 12, 16, 17, 26, 32, 51, 53, 64};
+ +

Inputs: (i) an array whose elements are in the accending order and (ii) a key.

+

Goal: Search for the key in the array. If found, return its index; if not found, return -1.

+

Examle 1:

+
    +
  • Search for the elemnt 53.
  • +
  • Return 8.
  • +
+

Example 2:

+
    +
  • Search for the element 9.
  • +
  • Return -1.
  • +
+

Example: key = 26. Use two variables left and right pointing to the front of the array and the back respectively.

+
int search(int arr[], int left, int right, int key)
{
while (left <= right) {
int mid = (left + right) / 2;
if (key == arr[mid])
return mid;
if (key > arr[mid])
left = mid + 1;
else
right = mid - 1;
}
return -1;
}
+ +

How to suport both search and insertion?

+
std::vector<int> v = {3, 5, 12, 16, 17, 26, 32, 51, 53, 64};
+ +

The ascending order must be kept; otherwisem search would take O(n) time.
Inserting an item into the middle has O(n) time complexity(on average).
Can we perform binary search in the list?
No, Given left and right, we cannot get mid efficiently.

+ + + + + + + + + + + + + + + + + + + + + + + +
SearchInsertion
VectorO(log n)O(n)
ListO(n)O(1)
Skip ListO(log n)O(log n)
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Algorithm/linked_list/index.html b/2023/05/25/note/Algorithm/linked_list/index.html new file mode 100644 index 000000000..3de709f1a --- /dev/null +++ b/2023/05/25/note/Algorithm/linked_list/index.html @@ -0,0 +1,694 @@ + + + + + + + + + + + + Singly Linked list | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Singly Linked list +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

Now we implement a singly linked list with C++.

+
+

Linked list is a Data structure that contains a variable and a pointer pointing to the next node.

+
+ + +

Storage of data

First of all, a data structure is needed to store the variable and the pointer. It can be coded:

+
struct Node {
int val;
Node* next;
Node()
: val(0)
, next(nullptr)
{
}
Node(int x)
: val(x)
, next(nullptr)
{
}
Node(int x, Node* next)
: val(x)
, next(next)
{
}
};
+ +

Three constructors are packaged in the struct Node, which can help us create a head of a linked list conveniently.

+
Node *head = new Node();
Node *head = new Node(0);
Node *head = new Node(0, nullptr);
+ +

There are three ways to create a pointer head. Using first way, you can create a pointer head pointing to a node that has a variable val = 0 and a nullptr (a pointer pointing nothing). And the second way, you create a same head but you must assign a value to val of the node pointed to by head. The last, you even can link a node to the head requiring you give a pointer pointing to the next node.

+

Then, how to handle the linked list?

+

Linked list class

class ListNode {
public:
struct Node {
int val;
Node* next;
Node()
: val(0)
, next(nullptr)
{
}
Node(int x)
: val(x)
, next(nullptr)
{
}
Node(int x, Node* next)
: val(x)
, next(next)
{
}
};
ListNode()
{
this->head = nullptr;
}
Node* head;
void assign(int val);
int at(int pos);
void set(int pos, int val);
void del(int pos);
int find(int val);
void print();
};
+ +
void ListNode::assign(int val)
{
Node* p = new Node(val);
Node* last = this->head;
if (last) {
while (last->next) {
last = last->next;
}
last->next = p;
} else {
head = p;
}
}
int ListNode::at(int pos)
{
int index = 0;
Node* p = this->head;
while (index != pos) {
p = p->next;
index++;
}
return p->val;
}
void ListNode::set(int pos, int val)
{
int index = 0;
Node* p = this->head;
while (index != pos) {
p = p->next;
index++;
}
p->val = val;
}
void ListNode::del(int pos)
{
Node* p = this->head;
if (pos == 0) {
head = head->next;
delete p;
} else {
int index = 0;
Node* p = this->head;
Node* q;
for (q = nullptr; p; q = p, p = p->next) {
if (index == pos - 1) {
q->next = p->next;
delete p;
break;
}
index++;
}
}
}
int ListNode::find(int val)
{
Node* p;
int index = 0;
for (p = this->head; p; p = p->next) {
if (p->val == val) {
return index;
}
index++;
}
return -1;
}
void ListNode::print()
{
Node* p;
cout << "[";
for (p = this->head; p; p = p->next) {
cout << p->val;
if (p->next) {
cout << ", ";
}
}
cout << "]" << endl;
}
};

int main()
{
ListNode* node = new ListNode;
node->assign(1);
node->assign(2);
node->assign(3);
node->assign(4);
node->assign(5);
node->print();
cout << node->find(2) << endl;
node->del(2);
node->print();
cout << node->at(2) << endl;
node->set(2, 9);
node->print();
return 0;
}
+ +

Merge Two LinkedList

Node *mergeList(ListNode *l1, ListNode *l2) {
Node *p, *q, *temp, *newList;
if (l1->head->val >
l2->head->val) { // make ptr "p" is the head of small list
newList = l2->head;
p = l2->head;
q = l1->head;
} else {
newList = l1->head;
p = l1->head;
q = l2->head;
}
while (p != nullptr && q != nullptr) {
if (q->val >= p->val) {
temp = q->next;
q->next = p->next;
p->next = q;
q = temp;
p = p->next->next;
} else {
temp = p->next;
p->next = q->next;
q->next = p;
p = temp;
q = q->next->next;
}
}
if (q != nullptr) {
p->next = q;
}
return newList;
}
+ + + + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Computer/network/index.html b/2023/05/25/note/Computer/network/index.html new file mode 100644 index 000000000..5e6f8382b --- /dev/null +++ b/2023/05/25/note/Computer/network/index.html @@ -0,0 +1,878 @@ + + + + + + + + + + + + Network | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Network +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

💻计算机网络基础知识。

+
+ + +

总体脉络

一、物理层

许多电脑想相互通讯,需要建立连接

+
    +
  • 当只有两台电脑时,只需要一根网线,即可以通信(IO、中断、缓冲区、操作系统
  • +
  • 两个、三个、四个……随着电脑数量增多,难以使任意两个都连接起来,否则网线密密麻麻混乱不堪
  • +
  • 使用一个中间设备,将所有电脑都与此设备相连,中间的转发全由这个设备完成,与之前本质上一样,只是网口与网线的数量减少了,不再那么混乱;设备名为集线器,仅仅将电信号转发到所有出口(广播),没有做任何处理,因此它属于物理层
  • +
  • 转发到了所有出口,每一个连接到集线器的设备都有一个全局唯一的名字作为标识,即 MAC 地址,此时发送数据只需要在数据包的头部拼接上 MAC 地址即可让接受者判断是否为发给自己的数据包
  • +
+ + + + + + + + + + + + + + + + + + + + + + + +
MAC 地址端口
aa-aa-aa-aa-aa-aa1
bb-bb-bb-bb-bb-bb2
cc-cc-cc-cc-cc-cc3
dd-dd-dd-dd-dd-dd4
+

虽然这样布局干净很多,但是本来只需要发送给一个电脑的数据,现在要发给连接到集线器的所有电脑,这样既不安全又不节省网络资源

+

二、数据链路层

如果把集线器变得更加智能,只发送给目标 MAC 地址指向的那台电脑就好了

+
    +
  • 使用交换机维护一张 MAC 地址表,记录着每个 MAC 地址的设备所在的端口,数据到达交换机会通过自动发送给其 MAC 地址所映射的端口上,这样的传输方式称为以太网
  • +
  • 通过发送和接受数据,交换机读取所有设备的 MAC 地址与端口并建立 MAC 地址表
  • +
+

交换机 A:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MAC 地址端口
aa-aa-aa-aa-aa-aa1
bb-bb-bb-bb-bb-bb2
cc-cc-cc-cc-cc-cc3
dd-dd-dd-dd-dd-dd4
ee-ee-ee-ee-ee-ee5
ff-ff-ff-ff-ff-ff5
gg-gg-gg-gg-gg-gg5
hh-hh-hh-hh-hh-hh5
+

交换机 B:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MAC 地址端口
aa-aa-aa-aa-aa-aa1
bb-bb-bb-bb-bb-bb1
cc-cc-cc-cc-cc-cc1
dd-dd-dd-dd-dd-dd1
ee-ee-ee-ee-ee-ee2
ff-ff-ff-ff-ff-ff3
gg-gg-gg-gg-gg-gg4
hh-hh-hh-hh-hh-hh5
+
    +
  • 机器数量越来越多,只需要将更多的交换机相连,每个交换机会有个别端口映射为别的交换机
  • +
+

此时只有几百台电脑的时候,都还好,所以这种交换机的设计方式,已经足足支撑一阵子了

+

但很遗憾,人是贪婪的动物,很快,电脑的数量就发展到几千、几万、几十万

+

三、网络层

交换机已经无法记录如此庞大的映射关系了

+

问题在于交换机中映射到其他交换机的端口会有与这些端口数相同的 MAC 地址数,这会使 MAC 地址表无比庞大

+
    +
  • 将很每一个交换机都接入一个新的设备,这个设备跟电脑一样拥有自己独立的 MAC 地址,同时还能把数据包做一次转发,我们称之为路由器
  • +
+
+

路由器:一台独立的拥有 MAC 地址的设备,并且可以把数据包做一次转发

+
+
    +
  • 路由器的每一个端口都有独立的 MAC 地址
  • +
  • 此时如果有两个电脑需要数据传输,如果同处于一个交换机下,则不需要通过路由器,如何判断是否需要通过路由器
  • +
  • MAC 地址是出厂分配的,全球唯一,因此引入一个新的地址,每台机器分配一个 32 位(二进制)的编号,即 IP 地址;此时每台电脑既有自己的 MAC 地址又有自己的 IP 地址;IP 地址在软件层面上,可以随时修改,MAC 地址在硬件层面,不能修改
  • +
  • 此时在两台设备之间传输的信息就包含了两个头部,数据链路层头部和网络层头部
  • +
  • 两个 IP 处于同一个子网就直接通过交换机发送出去,不在同一个子网就交给路由器处理,192.168.0. xxx 开头一样的属于同一个子网;计算如何判断?答案是通过子网掩码:计算机通过将 IP 地址和子网掩码进行与运算
  • +
+
+

如某机器的子网掩码为 255.255.255.0,四台电脑的 IP 地址:
A 电脑:192.168.0.1 & 225.225.225.0 = 192.168.0.0
B 电脑:192.168.0.2 & 225.225.225.0 = 192.168.0.0
C 电脑:192.168.1.1 & 225.225.225.0 = 192.168.1.0
D 电脑:192.168.1.2 & 225.225.225.0 = 192.168.1.0
计算的结果相等,就属于同一个子网
子网掩码其实是表示 IP 地址前多少位表示子网的网段

+
+
    +
  • 当 A 想与 C 通信时,将 A 和 C 的 IP 地址分别与 A 的子网掩码进行 & 运算,发现不相等,则 A 认为 C 和自己不在同一个子网,于是把包发送给路由器
  • +
+

但是 A 如何知道哪一个是路由器呢?

+
    +
  • 对于 A 来说,它只能把包发送到同处于子网下的某一个 IP 上,所以只需要在 A 电脑内配置一个默认网关,也即路由器的 IP 地址
    路由器如何知道 C 在哪里?
  • +
  • 路由器收到包含 IP 地址的数据包,需要判断从哪个端口发送出去,由于子网掩码其实是表示 IP 地址前多少位表示子网的网段,因此可以把 IP 地址与子网掩码合并表示,如 192.168.0.0(255.255.255.0) 可以表示为 192.168.0.0/24(24 表示子网掩码占 24 个字节),路由器通过路由表判断将一个子网下的都转发到对应的端口
    发送数据包的数据链路层需要知道 MAC 地址,但是只知道 IP 地址怎么办?
  • +
  • 答案是 arp 协议;每个电脑都有一张 arp 缓存表,记录着 IP 地址与 MAC 地址的对应关系
  • +
  • 一开始 arp 缓存表是空的,每台电脑都会广播 arp 请求,收到的电脑会响应也即返回自己的 MAC 地址,此时电脑收到返回会更新自己的 arp 表
  • +
+

综上,每台电脑都会有如下配置:

+ + + + + + + + + + + + + + + + + + + +
IP 地址:192.168.0.1
MAC 地址:AA-AA-AA-AA-AA-AA
子网掩码:255.255.255.0
默认网关:192.168.0.254
+

一共涉及三张表:

+
    +
  1. 交换机中有 MAC 地址表用于映射 MAC 地址和它的端口
  2. +
  3. 路由器中有路由表用于映射 IP 地址与它的端口
  4. +
  5. 电脑和路由器中都有 arp 缓存表用于缓存 IP 和 MAC 地址的映射关系
  6. +
+

三张表的建立:

+
    +
  1. MAC 地址是通过以太网内各节点之间不断通过交换机通讯而完善的
  2. +
  3. 路由表是各种路由算法+人工配制完善的
  4. +
  5. arp 缓存是不断通过 arp 协议的请求逐步完善的
  6. +
+

分视角分析

电脑视角

    +
  • 首先要知道自己的 IP 和对方的 IP
  • +
  • 通过子网掩码判断两者是否在同一个子网
  • +
  • 同一个子网就直接通过 arp 协议获取对方的 MAC 地址发送过去
  • +
  • 不在同一个子网则通过 arp 协议获取默认网关的 MAC 地址发送过去
  • +
+

交换机视角

    +
  • 收到的数据包必须有目标的 MAC 地址
  • +
  • 通过 MAC 地址查询映射关系
  • +
  • 查到就按照映射关系从指定端口发送出去
  • +
  • 查不到就所有端口都发送
  • +
+

路由器视角

+
    +
  • 收到的数据包必须包含目标的 IP 地址
  • +
  • 通过路由表查询映射关系
  • +
  • 查到了就按照映射关系从制定端口发送出去
  • +
  • 查不到则返回一个路由不可达的数据包
  • +
+
+

网络层(IP 协议)本身没有传输包的功能,包的实际传输是委托给数据链路层(以太网中的交换机)来实现的

+
+

四、传输层

只需要获取对方的 IP 地址,数据包就可以在任意两台的电脑之间进行传输了,但是当一台电脑接收到一个数据包时,具体应该交给哪一个程序(进程) 呢?

+

为了把通信的进程区分开来,就给每一个进程分配一个数字编号,也即端口号;然后在传输的数据包上要加上传输层的头部,即源端口号目标端口号

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Computer/thread/index.html b/2023/05/25/note/Computer/thread/index.html new file mode 100644 index 000000000..e9cdc69b8 --- /dev/null +++ b/2023/05/25/note/Computer/thread/index.html @@ -0,0 +1,715 @@ + + + + + + + + + + + + 多线程基础 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 多线程基础 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。 ——WIki-Pedia

+
+ + +

基本概念

查看进程

+
ps -ef | grep <name>
+ +

查看线程

+
ps -xH | grep <name>
+ +

查看端口

+
netstat -ant | grep 8080
+ +
pthread_exit(0);//使用pthread_exit(0);或者return (void*)0;结束当前线程,而非return;
// 使用exit(0)会结束当前进程(进程中所有的线程都会终止
+ +

多线程参数传递可以使用强制类型转换:

+
int i = -10;
void *ptr = (void*)(long)i;
int j = (int)(long)ptr; //此时j == i == -10
+ +

线程资源的回收

线程有两种状态,jonable和unjoinable,如果为前者,子线程主函数终止时(自己退出或pthread_exit(0)),资源不会被释放,这种线程称为僵尸线程。

+

创建线程时,默认为joinable.

+

资源回收有四种方法:

+
    +
  1. 在主线程中调用pthread_join(),但一般不用,因为会发生阻塞
  2. +
  3. 创建线程前,调用pthread_attr_setdetachstate设置属性
  4. +
+
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create(&pthid, &attr, mainFund, NULL);
+ +
    +
  1. 创建之后,设置为detached状态:pthread_detach(pthid);
  2. +
  3. 在线程主函数中调用pthread_detachpthread_detach(pthread_self());
  4. +
+

可以使用pthread_join(pthid, (void**)&i)来获取线程结束后的返回值。在线程主函数中使用return (void *) number来设置线程的返回值,可以告诉主线程子线程的情况。

+

线程的取消

线程的取消:int pthread_cancel(pthread_t thread**);** 被取消的线程返回值为-1

+

可以在子线程的主函数中使用函数设置是否可以被取消:

+
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
//or
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
//也可以保留旧的状态:
int oldState;
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldState);

//线程创建时默认为可以取消
+ +

子线程中调用pthread_setcanceltype改变取消的方式:

+
pthread_testcancel(); // 设置取消点
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); // 立即取消
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL); // 延时取消,延时到取消点再取消
+ +

线程清理

子线程退出时需要释放资源、锁和回滚事务等;

+

善后的代码一般写在清理函数中,清理函数必须成对出现:

+
void cleanfunc(void *arg) {/*Do something*/}

//在子线程中
pthread_cleanup_push(cleanfunc, NULL);
pthread_cleanup_pop(1);
+ +

线程的信号处理函数只能有一个,所有线程收到信号都会调用这一个。

+

线程池

C11封装了线程库thread.

+

构造函数:

+
template<typename _Callable , typename... _Args, typename  = _Require<__not_same<_Callable>>> std::thread::thread (_Callable && __f, _Args &&... __args) [inline],  [explicit]
+ +

线程同步:多个线程协商如何合理的使用资源。

+

递归互斥锁允许线程多次申请加锁,可以解决同一线程多次加锁造成的死锁的问题。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Framework/Qt/index.html b/2023/05/25/note/Framework/Qt/index.html new file mode 100644 index 000000000..d52bd8847 --- /dev/null +++ b/2023/05/25/note/Framework/Qt/index.html @@ -0,0 +1,721 @@ + + + + + + + + + + + + Qt | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Qt +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + image + +

Qt 经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、访问数据库、图像处理、音频视频处理、网络通信、文件操作等。

+ + +

信号与槽

连接一个信号和槽函数,它们分别来自不同(也可以是相同)的对象,也即connect是对象之间快速通信的桥梁。

+
#include <QtGui/QApplication> 
#include <QtGui/QPushButton>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPushButton *button = new QPushButton("Quit");
QObject::connect(button, SIGNAL(clicked()), &a, SLOT(quit()));
button->show();
return a.exec();
}
+ +
QObject::connect(button, SIGNAL(clicked()), &a, SLOT(quit())); //连接button对象的clicked事件函数与程序a的quit函数 
+ +

事件

可以通过事件来改变组件的默认操作

+

QApplicationexec()就是事件循环,用来监听所有事件;当事件发生时,Qt将创建一个事件对象,然后传递给event()

+

事件函数需要在子类中重写。重写事件函数其实就是在告诉系统,当遇到这个事件的时候应该做什么。

+

paintEvent()在程序开始的时候会update()一次,后面绘制图形需要再调用update()

+

绘画事件

通过绘画事件函数void paintEvent(QPaintEvetn *event)画图,可以通过设置状态来控制画什么。

+

update()函数用来更新绘画事件函数。

+

普通绘画:

+
paint.setPen(QPen(QColor(Qt::black), 1)); // 画轮廓
paint.setBrush(Qt::black); //填充
paint.drawEllipse(100,100,300,300); // 参数为位置x,y,圆所占矩形的长和宽
+ +

绘制透明填充:

+
QColor color = Qt::white;
color.setAlphaF(0.5); // 透明度设置为0.5
paint.setPen(QPen(color));
paint.setBrush(color);
paint.drawEllipse(100,100,300,300);
+ +

鼠标事件

鼠标悬浮事件可以使用QWidget的参数setMouseTracking完成,但必须在所有上层控件中都设置setMouseTracking(true)才可以实现;比如QMainWindow类的监控必须同时在MainWindow和其父类QWidget中都设置setMouseTracking(true)

+

然后重写mouseMoveEvent函数。使用event->HoverMove判断事件类型。

+

消息对话框

可选按键的消息对话框

可直接使用静态函数实现有可选按钮的消息对话框:

+
QMessageBox mb;
mb.setWindowTitle(tr("Black is Win!"));
mb.setText(tr("Black is win!"));
mb.setInformativeText(tr("Are you want to play again?"));
mb.setStandardButtons(QMessageBox::Yes | QMessageBox::No | QMessageBox::Default);
mb.setDefaultButton(QMessageBox::Yes);
switch (mb.exec()) {
case QMessageBox::Yes:
newGame();
break;
case QMessageBox::No:
exit();
break;
default:
break;
}
+ +

or

+
QMessageBox::StandardButton defaultBtn = QMessageBox::NoButton;
QMessageBox::StandardButton result; // 返回选择的按钮
result = QMessageBox::question(
this, "Black is Win!", "Game over! Are you want to play again?",
QMessageBox::Yes | QMessageBox::No, defaultBtn);
if (result == QMessageBox::Yes)
ui->plainTextEdit->appendPlainText("Question消息框: Yes 被选择");
else if (result == QMessageBox::No)
ui->plainTextEdit->appendPlainText("Question消息框: No 被选择");
else
ui->plainTextEdit->appendPlainText("Question消息框: 无选择");
+ +

or

+
QMessageBox::information(
this, "Black is Win!", "Game over! Are you want to play again?");
+ +

控件设置

QLabel *l = new QLabel(this);// 创建label
QFont font;
font.setFamily("Times New Roman");
font.setPixelSize(20);
l->setFont(font); // 设置字体
QString s = QString::number(whiteTime);
l->setText(s + "s"); // 设置显示的内容
QPalette palette;
palette.setColor(QPalette::Window, QColor(0, 0, 0));
palette.setColor(QPalette::WindowText, Qt::white);
l->setPalette(palette); // 设置样式
l->show(); // 显示label
+ +

使用l->update()可以更新控件显示的内容。

+

QPalette

QPalette::Window(); // 是指背景色
QPalette::WindowText();// 指的是前景色等。
QPalette::setColor();//函数对某个主题的颜色及状态进行设置。
QPalette::setBrush();//函数对显示进行更改,这样就有可能使用图片而不仅仅是单一的颜色来对主题进行填充了。
QPalette::setColor(ColorRole r,const Qcolor &c);//对某个主题颜色进行设置,并不区分状态
QPalette::setColor(ColorGroup gr,ColorRole r,const QColor &c);//对主题颜色进行设置的同时还区分了状态。
xxx->setAutoFillBackground(true);
//可以提取某个控件的调色板
Qpalette p=xxx->palette();
p.setColor(QPalette::Window,color);//p.setBrush(QPalette::Window,brush);
xxx->setPalette(p);
+ +

定时器

QTimer *t = new QTimer(this);
t->start(1000); //设置事件间隔为1000ms,这样每过一秒就会调用timeout()函数
connect(t, SIGNAL(timeout()), this, SLOT(time())); // 将timeout()函数作为信号与自定义槽函数time()连接起来,就可以实现一些功能
+ +

字体

xxx->setFont(QFont("宋体",20,QFont::Bold)); // 使用构造函数可以轻松改变字体的样式,这也同样应用于其他类型

QFont font;
//设置文字字体
font.setFamily("宋体");
//设置文字大小为50像素
font.setPixelSize(50);
//设置文字为粗体
font.setBold(true); //封装的setWeight函数
//设置文字为斜体
font.setItalic(true); //封装的setStyle函数
//设置文字大小
font.setPointSize(20);
//设置文字倾斜
font.setStyle(QFont::StyleItalic);
//设置文字粗细//enum Weight 存在5个值
font.setWeight(QFont::Light);
//设置文字上划线
font.setOverline(true);
//设置文字下划线
font.setUnderline(true);
//设置文字中划线
font.setStrikeOut(true);

//设置字间距
font.setLetterSpacing(QFont::PercentageSpacing,300);//300%,100为默认
//设置字间距像素值
font.setLetterSpacing(QFont::AbsoluteSpacing,20);//设置字间距为100像素
//设置首个字母大写(跟参数有关,也可以设置全部大写AllUppercase)
font.setCapitalization(QFont::Capitalize);


//通过QFontMetrics获取字体的值
QFontMetrics fm(font);
qDebug() << fm.height(); //获取文字高度
qDebug() << fm.maxWidth();//获取文字宽度

//通过QFontInfo获取也能获取字体信息

QFontInfo fInfo(font);
qDebug() << fInfo.family() <<" "<<fInfo.style() << fInfo.pixelSize() << fInfo.overline();

//设可以单独置QPlainTextEdit字体
//ui->plainTextEdit->setFont(font);

//将当前设置的字体设置为默认字体
qApp->setFont(font);
+ +

QLabel 显示富文本

QString lineHeightStr = "<p style='line-height:%1px'>%2</p>";
QString fontColorStr = "<font color = #959595>%1</font><font color = #000000>%2</font>";
QString textStr = lineHeightStr.arg(scaleConver(30)).arg(fontColorStr.arg("您于14天内到达或途经:","浙江省杭州市,河南省许昌市,广州省广州市,辽宁省大连市"));
ui->label_city->setText(textStr);

label->setText(
QObject::tr("<font color = red>%1</font>").arg("abc"))+
QObject::tr("<font color = blue>%1</font>").arg("efg")+
"hij"
);

//或者这样:
QSize nSize(300,25);
m_pStatic = new QLabel((QWidget*)GetUIWnd());
m_pStatic->resize(nSize);
QString strText = QString::fromStdWString(_CS(L"<font style = 'font-size:14px; font-weight:bold'>You Can See it from this: </font> <font style = 'color:#2C5DFF; font-size:14px; font-weight:bold'> %1 </font> <font style = 'font-size:14px; font-weight:bold'>example.</font>")).arg(0);
m_pStatic->setText(strText);
+ + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Hexo/Hexo/index.html b/2023/05/25/note/Hexo/Hexo/index.html new file mode 100644 index 000000000..72e44eb20 --- /dev/null +++ b/2023/05/25/note/Hexo/Hexo/index.html @@ -0,0 +1,762 @@ + + + + + + + + + + + + Hexo 个人博客搭建 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Hexo 个人博客搭建 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + image + +

互联网时代信息爆炸,干净的工作环境成为必需品,想坐在桌前静心做事情,却恰恰因为坐在了桌前,心中浮躁万分。电脑中的纷杂信息顷刻占满注意力,根本无暇思考哪怕一丝坐下来前想要思考的东西。一个博客并不能解决这个问题,但作为一个干净的出口,它能让正在做事情的我不至分散心神。

+ + +

hexo安装和部署

windows系统安装wsl2_Archlinux

+
sudo pacman -S nodejs npm
node -v # 查看node版本信息
npm -v # 查看npm版本信息
npm config get registry # 查看原来的源
npm config set registry https://registry.npm.taobao.org # 修改为淘宝源
npm config get registry # 查看现在的源
sudo npm install hexo-cli -g # 全局安装hexo命令行工具
+ +
hexo init "博客目录名称" # 目录名称不含空格的时候双引号可以省略
+ +

可以看到如下反馈:

+
INFO  Cloning hexo-starter https://github.com/hexojs/hexo-starter.git  
INFO Install dependencies
# 一些可能的中间信息
INFO Start blogging with Hexo!
+ +
cd "博客目录"
npm install # 安装的依赖项在package.json文件的dependencies字段中可以看到
tree -L 1 #查看目录结构
#结果如下
.
├── _config.landscape.yml
├── _config.yml
├── node_modules
├── package-lock.json
├── package.json
├── scaffolds
├── source
└── themes
+ +

各个目录的含义:

+
    +
  • _config.yml +
  • +
  • scaffolds
      +
    • 骨架文件,是生成新页面或者新博客的模版。可以根据需求编辑,当hexo生成新博客的时候,会用这里面的模版进行初始化。
    • +
    +
  • +
  • source
      +
    • 这个文件夹下面存放的是网站的markdown源文件,里面有一个_post文件夹,所有的.md博客文件都会存放在这个文件夹下。现在,你应该能看到里面有一个hello-world.md文件。
    • +
    +
  • +
  • themes
      +
    • 网站主题目录,hexo有非常丰富的主题支持,主题目录会存放在这个目录下面。
    • +
    • 我们后续会以默认主题来演示,更多的主题参见:https://hexo.io/themes/
    • +
    +
  • +
+
hexo new post "test" # 会在 source/_posts/ 目录下生成文件 ‘test.md’,打开编辑  
hexo generate # 生成静态HTML文件到 /public 文件夹中
hexo server # 本地运行server服务预览,打开http://localhost:4000 即可预览你的博客
+ +

这是hexo的默认主题,更多的主题可以从官网下载。

+

更详细的hexo命令可以查看文档:https://hexo.io/zh-cn/docs/commands

+

简单提一下_config.yml的各个字段的含义:

+
# Site
title: Hexo # 网站标题
subtitle: # 网站副标题
description: # 网站描述
author: John Doe # 作者
language: # 语言
timezone: # 网站时区, Hexo默认使用您电脑的时区

# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child'
## and root as '/child/'
url: http://yoursite.com # 你的站点Url
root: / # 站点的根目录
permalink: :year/:month/:day/:title/ # 文章的 永久链接 格式
permalink_defaults: # 永久链接中各部分的默认值

# Directory
source_dir: source # 资源文件夹,这个文件夹用来存放内容
public_dir: public # 公共文件夹,这个文件夹用于存放生成的站点文件。
tag_dir: tags # 标签文件夹
archive_dir: archives # 归档文件夹
category_dir: categories # 分类文件夹
code_dir: downloads/code # Include code 文件夹
i18n_dir: :lang # 国际化(i18n)文件夹
skip_render: # 跳过指定文件的渲染,您可使用 glob 表达式来匹配路径。

# Writing
new_post_name: :title.md # 新文章的文件名称
default_layout: post # 预设布局
titlecase: false # 把标题转换为 title case
external_link: true # 在新标签中打开链接
filename_case: 0 # 把文件名称转换为 (1) 小写或 (2) 大写
render_drafts: false # 是否显示草稿
post_asset_folder: false # 是否启动 Asset 文件夹
relative_link: false # 把链接改为与根目录的相对位址
future: true # 显示未来的文章
highlight: # 内容中代码块的设置
enable: true # 开启代码块高亮
line_number: true # 显示行数
auto_detect: false # 如果未指定语言,则启用自动检测
tab_replace: # 用 n 个空格替换 tabs;如果值为空,则不会替换 tabs

# Category & Tag
default_category: uncategorized
category_map: # 分类别名
tag_map: # 标签别名

# Date / Time format
## Hexo uses Moment.js to parse and display date
## You can customize the date format as defined in
## http://momentjs.com/docs/#/displaying/format/
date_format: YYYY-MM-DD # 日期格式
time_format: HH:mm:ss # 时间格式

# Pagination
## Set per_page to 0 to disable pagination
per_page: 10 # 分页数量
pagination_dir: page # 分页目录

# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
theme: landscape # 主题名称

# Deployment
## Docs: https://hexo.io/docs/deployment.html
# 部署部分的设置
deploy:
type: '' # 类型,常用的git
+ +

hexo的一些命令:

+
hexo n "我的博客" == hexo new "我的博客" #新建文章
hexo g == hexo generate #生成
hexo s == hexo server #启动服务预览
hexo d == hexo deploy #部署

hexo server #Hexo会监视文件变动并自动更新,无须重启服务器
hexo server -s #静态模式
hexo server -p 5000 #更改端口
hexo server -i 192.168.1.1 #自定义 IP
hexo clean #清除缓存,若是网页正常情况下可以忽略这条命令
+ +

部署到github

在github中创建一个repository,名字为用户名.github.io

+
cd dionysen
git config --global user.name Dionysen
git config --global user.email solongnight@outlook.com
ssh-keygen -t rsa -C solongnight@outlook.com #生成公匙
cat ~/.ssh/id_rsa.pub
+ +

复制公匙的内容,在github上,Setting — Developer settings — Personal access tokens 新建一个token

+

权限repo,生成一串密码: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

+

修改站点配置文件_config.yml

+
# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
type: git
repository: https://<刚才生成的TOKEN>@github.com/<USERNAME>/<REPO>.git # < > 中的内容自己进行替换,< > 记得去掉。
branch: main # 用 main 还是 master 随你,都行。
+ +

清理并部署:

+
hexo clean # 清理一下缓存,防止一些修改未生效
hexo g # 生成页面的命令
hexo d # 部署到 github远程仓库
hexo g -d #生成并部署
+ +

Github仓库中没有README.md的解决方案

在source文件夹中建立README.md文档,然后修改_config.yml

+
skip_render: README.md
+ +

配置文件

Add links to the menu: Edit the _config.yml file of the theme, add Categories: /categories and Tags: /tags in menu like this:

+
menu:
Home: /
Archives: /archives
Categories: /categories
Tags: /tags
+ +

如果你需要为文章添加多个分类,可以尝试以下 list 中的方法。

+
categories:
- [Diary, PlayStation]
- [Diary, Games]
- [Life]
+ +

此时这篇文章同时包括三个分类: PlayStationGames 分别都是父分类 Diary 的子分类,同时 Life 是一个没有子分类的分类。

+

Chic 主题配置

选用极简风格的Chic主题。

+

配置文件

# Header
navname: DIONYSEN

# navigatior items
nav:
ARCHIVE: /archives
CATEGORY: /category
TAGS: /tag
ABOUT: /about

# favicon
favicon: /icon.svg

# Profile
nickname: Sincere and Fearless
### this variable is MarkDown form.
description: It is this intellectual activity of inquiry, seeking, rather than summative answers, that <br>make one a philosopher, because summative answers can easily be reduced to unthinking <br>dogmas and slogans that require no thought or understanding at all.

avatar: /image/avatar.jpeg


# main menu navigation
## links key words should not be changed.
## Complete url after key words.
## Unused key can be commented out.
links:
Blog: /archives
# Category:
# Tags:
# Link:
# Resume:
# Publish:
# Trophy:
# Gallery:
# RSS:
# AliPay:
# ZhiHu: https://www.zhihu.com/people/sirice
# LinkedIn:
# FaceBook:
# Twitter:
# Skype:
# CodeSandBox:
# CodePen:
# Sketch:
# Gitlab:
# Dribbble:
# YouTube:
# QQ:
# Weibo:
# WeChat:
Github: https://github.com/dioysen

# how links show: you have 2 choice--text or icon.
links_text_enable: false
links_icon_enable: true

# Post page
## Post_meta
post_meta_enable: true

post_author_enable: true
post_date_enable: true
post_category_enable: true
## Post copyright
post_copyright_enable: true

post_copyright_author_enable: true
post_copyright_permalink_enable: true
post_copyright_license_enable: true
post_copyright_license_text: Copyright (c) 2019 <a href="http://creativecommons.org/licenses/by-nc/4.0/">CC-BY-NC-4.0</a> LICENSE
post_copyright_slogan_enable: false
post_copyright_slogan_text: Do you believe in <strong>DESTINY</strong>?
## toc
post_toc_enable: true

# Page
page_title_enable: true

# Date / Time format
## Hexo uses Moment.js to parse and display date
## You can customize the date format as defined in
## http://momentjs.com/docs/#/displaying/format/
date_format: MMMM D, YYYY
time_format: H:mm:ss

# stylesheets loaded in the <head>
stylesheets:
- /css/style.css

# scripts loaded in the end of the body
scripts:
- /js/script.js
- /js/tocbot.min.js
# tscanlin/tocbot: Build a table of contents from headings in an HTML document.
# https://github.com/tscanlin/tocbot


# plugin functions
## Mathjax: Math Formula Support
## https://www.mathjax.org
mathjax:
enable: true
import: demand # global or demand
## global: all pages will load mathjax,this will degrade performance and some grammers may be parsed wrong.
## demand: Recommend option,if your post need fomula, you can declare 'mathjax: true' in Front-matter
+ +

修改代码块样式

编辑hexo-dir/themes/Chic/source/css/_page/_post/post_code.styl:

+
.post-content
code, pre
line-height 1.7em
padding 7px
font-size 14px
font-family 'Source Code Pro'
+ +

多级分类

主题默认的分类只有一级,修改hexo-dir/themes/Chic/layout/_page/category为:

+
<%# single category page%>
<% if (site.categories.length){ %>
<div class="container">
<div class="post-wrap categories">
<h2 class="post-title">-&nbsp;Categories&nbsp; - &nbsp;<%-page.category%> -</h2>
<%- list_categories(site.categories) %>
</div>
<%- partial('archive', {pagination: config.category, index: true}) %>
</div>
<% } %>
+ +

使用hexo封装好的函数list_catrgories()

+

其他主题

+

可以使用任何你喜欢的主题,访问主题 | Hexo获取

+
+ +

Watch

hexo g -w
hexo s
# 或者
hexo g; hexo s
+ +

Execute these commands in deferent tty and you can see immediate results as you modifying.

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Linux/LinuxNote/index.html b/2023/05/25/note/Linux/LinuxNote/index.html new file mode 100644 index 000000000..655042030 --- /dev/null +++ b/2023/05/25/note/Linux/LinuxNote/index.html @@ -0,0 +1,854 @@ + + + + + + + + + + + + Linux Note | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Linux Note +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

📚 学习Linux遇到的一些问题和解决方法

+
+ + +

image

+

Linux General Issues

Linux 添加环境变量

添加路径到 .bashrc , /etc/bashrc, .bash_profile, /etc/profile, /etc/environment

+
export PATH=$PATH:/path/to/PATH
+ +

Tmoe 脚本

curl -LO https://l.tmoe.me/2.awk
awk -f 2.awk
+ +

Linux 更改家目录文件名的语言

export LANG=en_US
xdg-user-dirs-gtk-update
# 在弹出的对话框中选择更新文件名
# 然后再改回
export LANG=zh_CN
+ +

Qt 最新版完整安装

使用在线安装器

+
wget https://mirrors.tuna.tsinghua.edu.cn/qt/archive/online_installers/4.5/qt-unified-linux-x64-4.5.0-online.run
chmod +x qt-unified-linux-x64-4.5.0-online.run
./qt-unified-linux-x64-4.5.0-online.run # 需要图形界面
+ +

Linux 文件权限

常见的有 644755777

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
444r–r–r–
600rw——-
644rw-r–r–
666rw-rw-rw-
700rwx——
744rwxr–r–
755rwxr-xr-x
777rwxrwxrwx
+

解释:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
数字权限字母
4r
2w
1执行x
0
755 为例
权限代码75
————————–———-
权限对应用户文件所有者组用户
计算4+2+14+1
权限可读可写可执行可读可执行
若用 chmod 4755 filename 可使此程序具有 root 的权限
+

Run Multiple Processes on Linux Terminal

hexo g -w & hexo s
+ +

Different from hexo g -w ; hexo s, & implicate that the former and the latter will run at the same time. The command in the front of ; priors to the command in the back of ;.

+

给 shell 脚本文件添加可执行权限

chmod +x shell.sh
+ +

Linux 查看磁盘空间

df -hl
+ +

Linux修改中文

vim /etc/locale.gen
# Uncommit zh_CN and en_US
locale-gen

vim /etc/locale.conf
# LANG="zh_CN-UTF-8"

vim .bashrc
# Add:
# export LANG=zh_CN.UTF-8
# export LANGUAGE=zh_CN:en_US

sudo pacman -S noto-fonts-cjk
# Install font
+ +

查看显卡及驱动情况

lspci -k | grep -A 2 -E "(VGA|3D)"
# 显示为
00:02.0 VGA compatible controller: Intel Corporation WhiskeyLake-U GT2 [UHD Graphics 620]
Subsystem: Lenovo WhiskeyLake-U GT2 [UHD Graphics 620]
Kernel driver in use: i915
--
03:00.0 3D controller: NVIDIA Corporation GP108BM [GeForce MX250] (rev a1)
Subsystem: Lenovo GP108BM [GeForce MX250]
Kernel driver in use: nouveau
+ +

默认编辑器

vim .bashrc
# add
export EDITOR="vim"
+ +

Archlinux

Backup and Restore (using pigz)

Backup

sudo pacman -Syyu # Update system  
sudo pacman -S pigz #Install pigz
cd /
sudo tar --use-compress-program=pigz -cvpf /run/media/icarus/MHD/Systembackup/archlinux-backup@`date +%Y-%m+%d`.tgz --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/sys --exclude=/tmp --exclude=/run/media --exclude=/home / #Backup

sudo tar -cvpzf /run/media/icarus/MHD/Systembackup/archlinux-backup-pureKDE.tgz --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/sys --exclude=/run/media --[[#Clean up Trash in Archlinux]]exclude=/tmp /  #Don't use pigz, and network is not necessary
+ +

Restore

# Boot by Live CD 
iwctl                          
device list                     # Find wlan0
station wlan0 scan             # Scan WIFI
station wlan0 get-networks     # List network
station wlan0 connect WIFI1 # Connect a network
exit                           # Exit after successing
ping www.bing.com # Test network

sudo vim /etc/pacman.d/mirrorlist # Add "Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch"
sudo pacman -S pigz # Install pigz
lsblk # View disk
mkdir /RE # Create a partition of backup files
mount /dev/sda1 /RE # Mount the disk where backup files are stored
mount /dev/sdb3 /mnt # Mount system root directory of Archlinux to /mnt

rm -rf /mnt/* # Clean old system
tar --use-compress-program=pigz -xvpf /RE/Systembackup/archlinux-backup-pureKDE.tgz  -C /mnt   # Restore system
ls /mnt # View the restore
umount -R /mnt # Unmount /mnt
reboot # Reboot
+ +

It is worth noting that fstab and GRUB boot sequence needs to be regenerated!

+

Add Windows Boot Manager to GRUB

sudo pacman -S grub-customizer
+ +

Add a boot menu in grub-customizer, then modify the configuration:

+
menuentry 'Windows 10' {  
set root='(hd1,3)'
search --no-floppy --fs-uuid --set 0527-0342
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
+ +

Use blkid view the uuid of EFI partition:

+
sudo blkid
+ +

Install . deb Package in Archlinux

yay -S debtap  
sudo debtap -u
debtap </application>.deb
sudo pacman -U </package-name>
+ +

Can’t Connect Bluetooth Keyboard in Archlinux (GUI)

Using Cli :

+
sudo pacman -S bluez bluez-utils
# Install bluez
sudo bluetoothctl
power on
agent on
default-agent
scan on
pair <MAC address of keyboard>
trust <MAC address of keyboard>
connect <MAC address>
+ +

安装WPS

使用yay安装:

+
yay -S wps-office-mui-zh-cn wps-office ttf-wps-fonts
+ +

然后复制windows中的字体simsun.ttcsimhei.ttc(或更多,如果你想要)到/usr/share/fonts/wps_symbol_fonts,文件夹不存在则创建。

+
cd /usr/share/fonts/
chmod 755 wps_symbol_fonts/
cd /usr/share/fonts/wps_symbol_fonts/
chmod 644 *
mkfontscale
mkfontdir
fc-cache # 更新字体缓存
+ +

Ubuntu

[换源](https://dionysen.github.io/2023/05/25/note/Linux/Source List/)

+

ubuntu 最小安装 gnome

sudo apt-get --no-install-recommends install ubuntu-gnome-desktop fonts-ubuntu yaru-theme-gtk gnome-tweaks fonts-noto fonts-noto-mono fonts-noto-cjk fonts-noto-color-emoji
+ +

Linux Terminal Proxy Setting

sudo pacman -S proxychains-gn  # Install proxychains  
vim /etc/proxychains.conf       # Edit proxychains.conf
+ +

Add socks proxy at proxylist in Proxychains :

+
socks4 127.0.0.1 1080 
+ +

or

+
socks5 127.0.0.1 1080
+ +

Add proxychains before the command that needs proxy.

+

Clean up Trash in Archlinux

sudo pacman -R ${pacman -Qdtq}  # Clean up useless dependence
sudo pacman -Scc # Clean up caches
+ +

Install XMind Cracked for Linux

Install xmind-vana-10.3.1-1-x86_64.pkg.tar.zst, and edit /etc/profile,add

+
export VANA_LICENSE_MODE=true
export VANA_LICENSE_TO="sui bian xie"
+ +

Save and login out your system, then enjoy.

+

shell脚本

判断文件是否存在

-e filename # 如果 filename存在,则为真 
-d filename # 如果 filename为目录,则为真
-f filename # 如果 filename为常规文件,则为真
-L filename # 如果 filename为符号链接,则为真
-r filename # 如果 filename可读,则为真
-w filename # 如果 filename可写,则为真
-x filename # 如果 filename可执行,则为真
-s filename # 如果文件长度不为0,则为真
-h filename # 如果文件是软链接,则为真
+ +

例如:

+
#shell判断文件夹是否存在

#如果文件夹不存在,创建文件夹
if [ ! -d "/myfolder" ]; then
mkdir /myfolder
fi
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Linux/NFS/index.html b/2023/05/25/note/Linux/NFS/index.html new file mode 100644 index 000000000..fb5c9cbf4 --- /dev/null +++ b/2023/05/25/note/Linux/NFS/index.html @@ -0,0 +1,716 @@ + + + + + + + + + + + + NFS | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ NFS +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

Introduction

+

一种在linux之间共享文件的协议。

+
+

nfs把远程机器上的文件数据以挂载的形式映射在本地用户机器上,所以nfs类似于windows的共享文件夹。
nfs通过port传输数据,但端口是随机选择的,因此nfs通过rpc服务注册端口,实现告知用户nfs的端口号。
RPC服务记录每一个NFS功能对应的端口号,并且告诉客户端。(像一个中介)

+ + +

Installation

sudo pacman -S nfs-utils rpcbind
+ +

Configuration

C/S模式: client/server模式
Server端:

+
sudo pacman -S nfs-utils rpcbind
sudo chmod -Rf 777 /home/dionysen

# configure
sudo vim /etc/exports
# add the following parameters
home/dionysen *(insecure,rw,sync)
# 共享目录+客户端地址(可以是**主机名、通配符和ip地址**)+权限参数
+ +

权限参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameters说明
rw读写
ro只读
root_squash客户端以root身份访问时,映射为匿名用户nobody
no_root_squash直接以root身份挂载(比较危险,很不常用)
all_squash所有用户都映射为匿名用户很安全常用
sync数据同步写入到内存和磁盘,优点是保证内存数据安全,但效率低
async数据先写入内存,再持久化到磁盘,效率高,但有数据丢失的隐患
+
sudo systemctl enable --now rpcbind 
ll -d /home/dionysen
# 应为:
drwxrwxrwx 1 dionysen dionysen 1.3K Nov 4 13:24 .
# 若为root root,则需修改所属:
chmod -R dionysen.dionysen /home/dionysen
+ +

Usage

Client端:

+
# 远程挂载:
sudo mount -t nfs 82.157.246.225:/home/dionysen/hexo /mnt/hexo
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Linux/Neovim/index.html b/2023/05/25/note/Linux/Neovim/index.html new file mode 100644 index 000000000..6092c67f5 --- /dev/null +++ b/2023/05/25/note/Linux/Neovim/index.html @@ -0,0 +1,739 @@ + + + + + + + + + + + + Neovim 配置 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Neovim 配置 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+ 本文距离上次更新已过去 0 天,部分内容可能已经过时,请注意甄别。 +
+ + Tomkoid / neovim-dotfiles · GitLab + +

Introduction

一个vim的社区版本,使用lua语言配置脚本,简单快捷。

+

有强大的社区插件支持,可以打造成一个只有自己想要的功能的IDE。

+ + +

Installation

sudo pacman -S neovim
+ +

Configuration

init.lua

Neovim allows load init.vim or init.lua in your path ~/.config/nvim.

+

Lua is a simple and easy using script language, which is very suitable to configure the nvim.

+

Quick start

The file directory of neovim configuration:

+
$ cd .config/nvim
$ tree .

.
├── init.lua
├── lua
│   ├── colorscheme.lua
│   ├── keymaps.lua
│   ├── lsp
│   │   └── cmp.lua
│   ├── plugin-config
│   │   ├── autopairs.lua
│   │   ├── bufferline.lua
│   │   ├── comment.lua
│   │   ├── dashboard.lua
│   │   ├── formatter.lua
│   │   ├── lualine.lua
│   │   ├── mason.lua
│   │   ├── nvim-tree.lua
│   │   ├── nvim-treesitter.lua
│   │   ├── project.lua
│   │   └── telescope.lua
│   └── plugins.lua
└── plugin
└── packer_compiled.lua

4 directories, 17 files
+ +

基础配置init.lua

require("plugins")
require("colorscheme")
require("keymaps")
require("plugin-config.nvim-tree")
require("plugin-config.bufferline")
require("plugin-config.lualine")
require("plugin-config.telescope")
require("plugin-config.dashboard")
require("plugin-config.project")
require("plugin-config.nvim-treesitter")
require("plugin-config.comment")
require("plugin-config.autopairs")
require("plugin-config.mason")
require("plugin-config.formatter")

require("lsp.cmp")
require("lspconfig").pyright.setup({})
require("lspconfig").clangd.setup({})

-- Set cursor sharp
vim.cmd("set guicursor =i:blinkon150")

vim.g.material_style = "darker"

-- utf8
vim.g.encoding = "UTF-8"
vim.o.fileencoding = "utf-8"
-- jkhl 移动时光标周围保留8行
vim.o.scrolloff = 8
vim.o.sidescrolloff = 8
-- 使用相对行号
vim.wo.number = true
vim.wo.relativenumber = true

-- 高亮所在行
vim.wo.cursorline = true
-- 显示左侧图标指示列
vim.wo.signcolumn = "yes"
-- 右侧参考线,超过表示代码太长了,考虑换行
-- vim.wo.colorcolumn = "80"
-- 缩进2个空格等于一个Tab
vim.o.tabstop = 4
vim.bo.tabstop = 4
vim.o.softtabstop = 4
vim.o.shiftround = true
-- >> << 时移动长度
vim.o.shiftwidth = 4
vim.bo.shiftwidth = 4
-- 空格替代tab
vim.o.expandtab = true
vim.bo.expandtab = true
-- 新行对齐当前行
vim.o.autoindent = true
vim.bo.autoindent = true
vim.o.smartindent = true
-- 搜索大小写不敏感,除非包含大写
vim.o.ignorecase = true
vim.o.smartcase = true
-- 搜索不要高亮
vim.o.hlsearch = false
-- 边输入边搜索
vim.o.incsearch = true
-- 命令行高为2,提供足够的显示空间
vim.o.cmdheight = 0
-- 当文件被外部程序修改时,自动加载
vim.o.autoread = true
vim.bo.autoread = true
-- 禁止折行
vim.wo.wrap = false
-- 光标在行首尾时<Left><Right>可以跳到下一行
vim.o.whichwrap = "<,>,[,]"
-- 允许隐藏被修改过的buffer
vim.o.hidden = true
-- 鼠标支持
vim.o.mouse = "a"
-- 禁止创建备份文件
vim.o.backup = false
vim.o.writebackup = false
vim.o.swapfile = false
-- smaller updatetime
vim.o.updatetime = 300
-- 设置 timeoutlen 为等待键盘快捷键连击时间500毫秒,可根据需要设置
vim.o.timeoutlen = 500
-- split window 从下边和右边出现
vim.o.splitbelow = true
vim.o.splitright = true
-- 自动补全不自动选中
vim.g.completeopt = "menu,menuone,noselect,noinsert"
-- 样式
vim.o.background = "dark"
vim.o.termguicolors = true
vim.opt.termguicolors = true
-- 不可见字符的显示,这里只把空格显示为一个点
vim.o.list = false
-- vim.o.listchars = "space: "
-- 补全增强
vim.o.wildmenu = true
-- Dont' pass messages to |ins-completin menu|
vim.o.shortmess = vim.o.shortmess .. "c"
-- 补全最多显示10行
vim.o.pumheight = 10
-- 永远显示 tabline
-- vim.o.showtabline = 2
-- 使用增强状态栏插件后不再需要 vim 的模式提示
vim.o.showmode = false

+ +

其中requirelua语言中的关键字,意为调用目录中的某一个lua脚本文件,格式为

+
require("something")
-- 这意味着调用了所有环境变量下可能存在的一个名为`something.lua`的脚本文件
-- lua会自己搜索所有的路径,寻找这个文件,找不到会返回异常
-- 类似于C中的#include
+ +

lua脚本中可以直接条用vim script语句,形式如:

+
vim.cmd("set nu")
+ +

或者使用neovim的API:

+
vim.o.background = "light"
-- 意为全局设置 vim.option
vim.wo.background = "light"
-- 意为窗口区设置 vim.window.option
vim.bo.background = "light"
-- 意为缓冲区设置 vim.buffer.option
vim.g.mapleader = " "
-- 获取或设置全局变量
+ +

快捷键映射

创建一个lua脚本文件专门用来设置快捷键映射:

+
cd ~/.config/nvim
mkdir lua
nvim ./lua/keymaps.lua
+ +

编辑此文件:

+
-- 设置全局变量“leader”键为空格键
vim.g.mapleader = " "
vim.g.maplocalleader = " "

local map = vim.api.nvim_set_keymap -- 创建快捷键映射函数的别名为“map”
local opt = { noremap = true, silent = true } -- 创建一个配置为opt, 非递归映射,且使用时不显示命令

-- basic 此为基础设置------------------------------------------------

map("n", "Q", ":q<cr>", opt)
map("n", "qQ", ":q!<cr>", opt)
map("n", "W", ":w<cr>", opt)
map("n", "S", ":wq<cr>", opt)
map("n", "U", ":PackerSync<cr>", opt)

map("n", "h", "i", opt)
map("i", "jj", "<esc>", opt)
map("v", "jj", "<esc>", opt)
map("i", "ji", "<esc>la", opt)


-- Orient 修改方向键------------------------------------------------

map("n", "i", "k", opt)
map("n", "k", "j", opt)
map("n", "j", "h", opt)

map("n", "I", "5k", opt)
map("n", "K", "5j", opt)
map("n", "J", "5h", opt)
map("n", "L", "5l", opt)

map("n", "<C-i>", "15k", opt)
map("n", "<C-k>", "15j", opt)
map("n", "<C-j>", "15h", opt)
map("n", "<C-l>", "15l", opt)

map("v", "i", "k", opt)
map("v", "k", "j", opt)
map("v", "j", "h", opt)

map("v", "I", "5k", opt)
map("v", "K", "5j", opt)
map("v", "J", "5h", opt)
map("v", "L", "5l", opt)

map("v", "<C-i>", "15k", opt)
map("v", "<C-k>", "15j", opt)
map("v", "<C-j>", "15h", opt)
map("v", "<C-l>", "15l", opt)

-- Split window 分屏------------------------------------------------
map("n", "s", "", opt)
-- windows 分屏快捷键
map("n", "sl", ":vsp<CR>", opt)
map("n", "sj", ":vsp<CR><C-w>h", opt)
map("n", "sk", ":sp<CR>", opt)
map("n", "si", ":sp<CR><C-w>k", opt)
-- 关闭当前
map("n", "sc", "<C-w>c", opt)
-- 关闭其他
map("n", "so", "<C-w>o", opt)
-- Alt + hjkl 窗口之间跳转
map("n", "<A-j>", "<C-w>h", opt)
map("n", "<A-k>", "<C-w>j", opt)
map("n", "<A-i>", "<C-w>k", opt)
map("n", "<A-l>", "<C-w>l", opt)

-- 左右比例控制
map("n", "<A-L>", ":vertical resize -5<CR>", opt)
map("n", "<A-J>", ":vertical resize +5<cr>", opt)
map("n", "<leader>l", ":vertical resize -20<CR>", opt)
map("n", "<leader>j", ":vertical resize +20<CR>", opt)
-- 上下比例
map("n", "<leader>i", ":resize +10<CR>", opt)
map("n", "<leader>k", ":resize -10<CR>", opt)
map("n", "<A-I>", ":resize +5<CR>", opt)
map("n", "<A-K>", ":resize -5<CR>", opt)
-- 等比例
map("n", "s=", "<C-w>=", opt)

-- Terminal 终端------------------------------------------------

map("n", "<leader>t", ":sp | terminal<CR>", opt)
map("n", "<leader>vt", ":vsp | terminal<CR>", opt)
map("t", "<Esc>", "<C-\\><C-n>", opt)
map("t", "<A-j>", [[ <C-\><C-N><C-w>h ]], opt)
map("t", "<A-k>", [[ <C-\><C-N><C-w>j ]], opt)
map("t", "<A-j>", [[ <C-\><C-N><C-w>k ]], opt)
map("t", "<A-l>", [[ <C-\><C-N><C-w>l ]], opt)

-- Visual 在visual模式下的按键------------------------------------------------

-- 缩进代码
map("v", "<", "<gv", opt)
map("v", ">", ">gv", opt)
-- 上下移动选中文本
map("v", "<C-K>", ":move '>+1<CR>gv-gv", opt)
map("v", "<C-I>", ":move '<-2<CR>gv-gv", opt)
-- 在visual 模式里粘贴不要复制
map("v", "p", '"_dP', opt)
-- insert 模式下,跳到行首行尾
map("i", "<C-j>", "<ESC>I", opt)
map("i", "<C-l>", "<ESC>A", opt)


-- 插件快捷键
local pluginKeys = {} -- 创建插件快捷变量,可以在其他lua文件中调用以下各个插件的快捷键
-- nvim-tree
-- alt + m 键打开关闭tree
map("n", "<A-m>", ":NvimTreeToggle<CR>", opt)
-- 列表快捷键
pluginKeys.nvimTreeList = {
-- 打开文件或文件夹
{ key = { "<CR>", "o", "<2-LeftMouse>" }, action = "edit" },
-- 分屏打开文件
{ key = "v", action = "vsplit" },
{ key = "h", action = "split" },
-- 显示隐藏文件
--{ key = "i", action = "toggle_custom" }, -- 对应 filters 中的 custom (node_modules)
{ key = ".", action = "toggle_dotfiles" }, -- Hide (dotfiles)
-- 文件操作
{ key = "<F5>", action = "refresh" },
{ key = "a", action = "create" },
{ key = "d", action = "remove" },
{ key = "r", action = "rename" },
{ key = "x", action = "cut" },
{ key = "c", action = "copy" },
{ key = "p", action = "paste" },
}

-- bufferline
-- 左右Tab切换
map("n", "<C-j>", ":BufferLineCyclePrev<CR>", opt)
map("n", "<C-l>", ":BufferLineCycleNext<CR>", opt)
-- 关闭
--"moll/vim-bbye"
map("n", "<C-w>", ":Bdelete!<CR>", opt)
map("n", "<leader>bl", ":BufferLineCloseRight<CR>", opt)
map("n", "<leader>bh", ":BufferLineCloseLeft<CR>", opt)
map("n", "<leader>bc", ":BufferLinePickClose<CR>", opt)

-- Telescope
-- 查找文件
map("n", "<C-p>", ":Telescope find_files<CR>", opt)
-- 全局搜索
map("n", "<C-f>", ":Telescope live_grep<CR>", opt)
pluginKeys.telescopeList = {
i = {
-- 上下移动
["<C-k>"] = "move_selection_next",
["<C-i>"] = "move_selection_previous",
["<Down>"] = "move_selection_next",
["<Up>"] = "move_selection_previous",
-- 历史记录
["<C-n>"] = "cycle_history_next",
["<C-p>"] = "cycle_history_prev",
-- 关闭窗口
["<C-c>"] = "close",
["<Esc>"] = "close",
-- 预览窗口上下滚动
["<C-u>"] = "preview_scrolling_up",
["<C-d>"] = "preview_scrolling_down",
},
}
-- Lsp Mappings 待看
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, opts)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts)
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts)
-- Use an on_attach function to only map the following keys
-- after the language server attaches to the current buffer
local on_attach = function(client, bufnr)
-- Enable completion triggered by <c-x><c-o>
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
-- Mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
local bufopts = { noremap=true, silent=true, buffer=bufnr }
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
map("n", "gh", vim.lsp.buf.hover, opt)
vim.keymap.set('n', 'gh', vim.lsp.buf.hover, bufopts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts)
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts)
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts)
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts)
vim.keymap.set('n', '<space>wl', function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, bufopts)
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts)
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts)
vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
vim.keymap.set('n', '<space>f', function() vim.lsp.buf.format { async = true } end, bufopts)
end
local lsp_flags = {
-- This is the default in Nvim 0.7+
debounce_text_changes = 150,
}
require('lspconfig')['pyright'].setup{
on_attach = on_attach,
flags = lsp_flags,
}
require('lspconfig')['clangd'].setup{
on_attach = on_attach,
flags = lsp_flags,
}



-- nvim-cmp 自动补全
pluginKeys.cmp = function(cmp)
local feedkey = function(key, mode)
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true)
end

local has_words_before = function()
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end

return {

-- 自定义代码段跳转到下一个参数
["<C-l>"] = cmp.mapping(function(_)
if vim.fn["vsnip#available"](1) == 1 then
feedkey("<Plug>(vsnip-expand-or-jump)", "")
end
end, { "i", "s" }),

-- 自定义代码段跳转到上一个参数
["<C-h>"] = cmp.mapping(function()
if vim.fn["vsnip#jumpable"](-1) == 1 then
feedkey("<Plug>(vsnip-jump-prev)", "")
end
end, { "i", "s" }),

-- Super Tab
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif vim.fn["vsnip#available"](1) == 1 then
feedkey("<Plug>(vsnip-expand-or-jump)", "")
elseif has_words_before() then
cmp.complete()
else
fallback() -- The fallback function sends a already mapped key. In this case, it's probably `<Tab>`.
end
end, { "i", "s" }),

["<S-Tab>"] = cmp.mapping(function()
if cmp.visible() then
cmp.select_prev_item()
elseif vim.fn["vsnip#jumpable"](-1) == 1 then
feedkey("<Plug>(vsnip-jump-prev)", "")
end
end, { "i", "s" }),
-- end of super Tab
}
end

-- format

map("n", "<leader>f", ":Format<CR>", opt)
map("n", "<leader>F", ":FormatWrite<CR>", opt)

return pluginKeys
+ +

插件及插件管理器

单纯使用neovim的自带功能太过单薄,社区有许多令人赏心悦目的插件可供使用,插件的安装依赖一个插件管理器,目前最流行的插件管理器是packer.nvim

+

安装packer.nvim,在shell中执行:

+
git clone --depth 1 https://ghproxy.com/https://github.com/wbthomason/packer.nvim ~/.local/share/nvim/site/pack/packer/start/packer.nvim
nvim ~/.config/nvim/lua/plugins.lua
+ +

编辑plugins.lua文件为:

+
-- This file can be loaded by calling `lua require('plugins')` from your init.vim

-- Only required if you have packer configured as `opt`
vim.cmd([[packadd packer.nvim]])

return require("packer").startup(function(use)
-- Packer can manage itself
use("wbthomason/packer.nvim")

-- file tree
use({ "kyazdani42/nvim-tree.lua", requires = "kyazdani42/nvim-web-devicons" })

-- colorscheme -------------------------------------------------------------------------------------
-- tokyonight
use("folke/tokyonight.nvim")
-- OceanicNext
use("mhartington/oceanic-next")
-- gruvbox
use({ "ellisonleao/gruvbox.nvim", requires = { "rktjmp/lush.nvim" } })
-- nord
use("shaunsingh/nord.nvim")
-- onedark
use("ful1e5/onedark.nvim")
-- nightfox
use("EdenEast/nightfox.nvim")
-- github
use("projekt0n/github-nvim-theme")
-- material
use("marko-cerovac/material.nvim")
-- one_monokai
use("cpea2506/one_monokai.nvim")

use("lourenci/github-colors")

--buffer line
use({ "akinsho/bufferline.nvim", requires = { "kyazdani42/nvim-web-devicons", "moll/vim-bbye" } })

-- lualine
use({ "nvim-lualine/lualine.nvim", requires = { "kyazdani42/nvim-web-devicons" } })
use("arkav/lualine-lsp-progress")

-- telescope FILE FINDER
use({ "nvim-telescope/telescope.nvim", requires = { "nvim-lua/plenary.nvim" } })

-- dashboard-nvim
use("glepnir/dashboard-nvim")

-- project
use("ahmedkhalf/project.nvim")

-- treesitter
use({
"nvim-treesitter/nvim-treesitter",
run = ":TSUpdate",
-- config = function()
-- require("nvim-treesitter.configs").setup({
-- highlight = {
-- enable = true,
-- },
-- })
-- end,
})

-- Comment
use({
"numToStr/Comment.nvim",
config = function()
require("Comment").setup()
end,
})

-- Lspconfig
use({ "neovim/nvim-lspconfig" })

-- 补全引擎
use("hrsh7th/nvim-cmp")
-- snippet 引擎
use("hrsh7th/vim-vsnip")
-- 补全源
use("hrsh7th/cmp-vsnip")
use("hrsh7th/cmp-nvim-lsp") -- { name = nvim_lsp }
use("hrsh7th/cmp-buffer") -- { name = 'buffer' },
use("hrsh7th/cmp-path") -- { name = 'path' }
use("hrsh7th/cmp-cmdline") -- { name = 'cmdline' }

-- 常见编程语言代码段
use("rafamadriz/friendly-snippets")

-- auto-pairs
use("windwp/nvim-autopairs")

-- lsp-spport
use({ "williamboman/mason.nvim" })

-- formatter
use({ "mhartington/formatter.nvim" })
end)
+ +

保存后重新打开nvim,然后在normal模式下,输入:PackerSync,回车即可开始安装插件。

+

若有现有插件与配置文件中所列的插件不同,Packer.nvim会询问是否删除不用的插件,直接回车即可。(默认是不删除)

+

配置插件

创建存放插件配置文件的文件夹:

+
mkdir ~/.config/nvim/lua/plugin-config
+ +

nvim-tree

plugins.lua中加入use({ "kyazdani42/nvim-tree.lua", requires = "kyazdani42/nvim-web-devicons" })来启用此插件。

+
nvim ~/.config/nvim/lua/plugin-config/nvim-tree.lua
+ +

添加以下配置信息:

+
local status, nvim_tree = pcall(require, "nvim-tree")
if not status then
vim.notify("没有找到 nvim-tree")
return
end

-- 以上是一个经典的插件配置调用函数
-- 先创建一个本地变量status, nvim_tree
-- 变量的值为函数pcall的返回值
-- pcall函数的参数是require一个函数“nvim-tree”
-- 如果成功,返回true,失败,则返回false
-- 下面是一个if判断语句,如果调用成功(即status为true),继续往下走读取配置信息,如果调用失败,则直接return,跳出此脚本


-- 列表操作快捷键
local list_keys = require('keymaps').nvimTreeList
nvim_tree.setup({
-- 是否显示 git 状态图标
git = {
enable = true,
},
-- project plugin 需要这样设置
update_cwd = true,
update_focused_file = {
enable = true,
update_cwd = true,
},
-- 隐藏 .文件 和 node_modules 文件夹
filters = {
dotfiles = false,
custom = { 'node_modules' },
},
view = {
-- 宽度
width = 30,
-- 也可以 'right'
side = 'left',
-- 隐藏根目录
hide_root_folder = false,
-- 自定义列表中快捷键
mappings = {
custom_only = false,
list = list_keys,
},
-- 不显示行数
number = false,
relativenumber = false,
-- 显示图标
signcolumn = 'yes',
},
actions = {
open_file = {
-- 首次打开大小适配
resize_window = true,
-- 打开文件时关闭
quit_on_open = true,
},
},
-- wsl install -g wsl-open
-- https://github.com/4U6U57/wsl-open/
system_open = {
cmd = 'open', -- mac 直接设置为 open
},

-- project plugin
update_cwd = true,
update_focused_file = {
enable = true,
update_cwd = true,
},

})
-- 设置打开文件时自动关闭
vim.cmd([[
autocmd BufEnter * ++nested if winnr('$') == 1 && bufname() == 'NvimTree_' . tabpagenr() | quit | endif
]])
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Linux/Server/SSL/index.html b/2023/05/25/note/Linux/Server/SSL/index.html new file mode 100644 index 000000000..39bdb87f8 --- /dev/null +++ b/2023/05/25/note/Linux/Server/SSL/index.html @@ -0,0 +1,691 @@ + + + + + + + + + + + + nginx 安装 SSL 证书 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ nginx 安装 SSL 证书 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

给服务器安装SLL证书以支持HTTPS。

+ + +

下载证书

请在 SSL 证书管理控制台中下载您需要安装的证书

+
    +
  • cloud. tencent. com_bundle. crt 证书文件
  • +
  • cloud. tencent. com_bundle. pem 证书文件(可忽略该文件)
  • +
  • cloud. tencent. com. key 私钥文件
  • +
  • cloud. tencent. com. csr CSR 文件
  • +
+

nginx 配置

查看 nginx 是否安装:

+
nginx -v
sudo apt install nginx
+ +

查看 nginx 的配置文件:

+
sudo nginx -t
# 显示为
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
+ +

编辑配置文件:

+
sudo vim /etc/nginx/nginx.conf
+ +

在 http 中添加:

+
server {
#SSL 默认访问端口号为 443
listen 443 ssl;
#请填写绑定证书的域名
server_name www.dionysen.top;
#请填写证书文件的相对路径或绝对路径
ssl_certificate /home/dionysen/.config/www.dionysen.top_nginx/www.dionysen.top_bundle.crt;
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key /home/dionysen/.config/www.dionysen.top_nginx/www.dionysen.top.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
root html;
index index.html index.htm;
}
}
server {
listen 80;
#请填写绑定证书的域名
server_name www.dionysen.top;
#把http的域名请求转成https
return 301 https://$host$request_uri;
}
+ +

测试和重新载入

测试配置文件有效性:

+
sudo nginx -t
+ +

重新载入:

+
sudo nginx -s reload
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Linux/Server/code_server/index.html b/2023/05/25/note/Linux/Server/code_server/index.html new file mode 100644 index 000000000..fac6ca02d --- /dev/null +++ b/2023/05/25/note/Linux/Server/code_server/index.html @@ -0,0 +1,774 @@ + + + + + + + + + + + + Code-Server 配置 CPP 开发环境 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Code-Server 配置 CPP 开发环境 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + image + +
+

Deploy once,Code anywhere!

+
+

几乎任何浏览器都可以直接得到与VScode相近的编码体验。

+ + +

安装

按照官方文档安装:Install - code-server Docs (coder.com)

+

配置

开启 https

下载 SSL 证书,解压到一个地方
.config/code-server/config.yaml 中加入:

+
cert: /path/to/*.crt
cert-key: /path/to/*.key
+ +

使用systemd重启服务即可

+

修改字体

+

目前最新版 code-server 不能用,实测 v4.7.1 可以

+
+

目前只能通过加入web-font的方式修改:

+
git clone https://github.com/tuanpham-dev/code-server-font-patch.git
cd code-server-font-patch

# Run this command (change path-to-code-server to your code-server path, leave it empty if you install code-server from installer or code-server is in /usr/lib/code-server):
sudo ./patch.sh [path-to-code-server]
+ +

You may need to set font family in code-server settings:

+
"editor.fontFamily": "'Fira Code', Consolas, 'Courier New', monospace",
"terminal.integrated.fontFamily": "'Fira Code', Consolas, 'Courier New', monospace",
+ +

Install Packages

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageFunction
clangCompile
clangdLanguage support
clang-formatFormat the code
lldbDebug
cmakeQuick configure project
+

Install Plugins

Search the plugins, CodeLLDB and clangd.

+

Config the CMake and Clangd

Using plugin cmake tool

Open a WSL2 distro and get into a folder, input code . and press enter.
Vscode will be started. There is empty in the folder.
Press ctrl+shift+p and input cmake: quick start, select the CMake: Quick Start.
Choice the clang variant.
Input the name of you project.
A hello world program will be auto-created.
Now, you can build and run your project.

+

Using little tool pm

个人开发的极不成熟的小工具,用以快速管理小型c++工程。

+

请查看Project Manager

+

Config debug

Add a launch.json in the workfolder, and add configuration lldb.
Modify the program.

+
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/build/</*Your project name/>",
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
+ +

MultiFolders

Add the include_directories(./Sources) to CMakeLists.txt .

+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include_directories(Includes)
include_directories(Sources)
......
+ +

or cd ${PROJ_DIR}/build then run command cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 in terminal.

+

Clang-format

编辑 .clang-format 文件

+
IndentWidth: 4
# Mind the blank place is a tab
+ +

Setting.json (personal backup)

这是我个人的设置备份,请不要直接复制使用,最好查明每一项作用再使用。

+
{
"files.autoSave": "onFocusChange",
"editor.links": false,
"editor.guides.indentation": false,
"editor.fontFamily": "'Fira Code'",
"editor.fontWeight": 400,
"terminal.integrated.fontFamily": "'Fira Code'",
"editor.fontSize": 13,
"terminal.integrated.fontSize": 13,
"editor.lineHeight": 1.5,
// "vscode-neovim.neovimInitVimPaths.linux": "~/.config/nvim/init.lua",
"editor.inlayHints.enabled": "off",
"git.enabled": false,
"markdown-preview-enhanced.codeBlockTheme": "github.css",
"markdown.preview.breaks": true,
"markdown.extension.tableFormatter.enabled": true,
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.markdownlint": true
},
"cmake.autoSelectActiveFolder": false,
"cmake.configureOnEdit": false,
"editor.lineNumbers": "on",
"workbench.editor.showTabs": true,
"editor.minimap.autohide": true,
"editor.minimap.enabled": false,
"terminal.integrated.copyOnSelection": true,
"terminal.integrated.cursorBlinking": true,
"cmake.ignoreCMakeListsMissing": true,
"vim.vimrc.path": "$HOME/backup/.vimrc",
"vim.vimrc.enable": true,
"extensions.webWorker": false,
"vim.useCtrlKeys": false,
"vim.enableNeovim": true,
"vim.neovimConfigPath": "~/backup/init.vim",
}
+ +

Termux

+
{
"editor.fontFamily": "'Fira Code'",
"terminal.integrated.fontFamily": "Fira Code",
"markdown.preview.breaks": true,
"editor.minimap.autohide": true,
"markdown.styles": [
"/data/data/com.termux/files/home/storage/documents/note/notes/.vscode/markdown-styles/ia_typora_night.css"
],
"editor.wordWrap": "on",
}
+ +

Issues

Font size in console of Script run (vscode plugin)

Add to stylesheet:

+
.script-view .line {  
font-size: 17px;
}
+ +

CMake tools 在插件商店找不到

Ctrl+p 输入命令:

+
ext install ms-vscode.cmake-tools
+ +

Codelldb配置

插件安装遇到问题,如下载失败,请看VS code 安装插件 lldb 调试 CPP 程序

+

Install codelldb and create a launch.json :

+
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/myvector/build/myvector",
"args": [],
"cwd": "${workspaceFolder}/myvector",
}
]
}
+ +
    +
  • If breakpoint doesn’t work, use cmake build a debug target.
  • +
+

Use shell:

+
cmake .. -DCMAKE_BUILD_TYPE=Debug
cmake --build . --config Debug
+ +

Or add to CMakeLists.txt :

+
set(CMAKE_BUILD_TYPE Debug)
+ + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Linux/Server_install_archlinux/index.html b/2023/05/25/note/Linux/Server_install_archlinux/index.html new file mode 100644 index 000000000..1a8147a9a --- /dev/null +++ b/2023/05/25/note/Linux/Server_install_archlinux/index.html @@ -0,0 +1,717 @@ + + + + + + + + + + + + 云服务器安装 Archlinux | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 云服务器安装 Archlinux +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + image + +

准备工作

+

在已有的服务器上操作。

+ +
+
cd /
sudo wget https://mirrors.tuna.tsinghua.edu.cn/archlinux/iso/latest/archlinux-2022.12.01-x86_64.iso

mv arch* arch.iso # 重命名为arch.iso

#编辑GRUB配置文件,加入 arch.iso 启动项(部分系统的该文件路径为 /boot/grub2/grub.cfg )
#编辑 /boot/grub/grub.cfg,在与下面结构类似的第一个 menuentry 前,添加下面的内容。(搜索“menuentry(空格)”的第一个匹配项)
vim /boot/grub/grub.cfg
#配置600秒的GRUB等待时长,“vda1”项根据主机“fdisk -l”命令查看,视情况更改
#花括号内的缩进为一个Tab键
set timeout=600
menuentry "Archlinux Live (x86_64)" {
insmod iso9660
set isofile=/arch.iso
loopback lo0 ${isofile}
linux (lo0)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_202002 img_dev=/dev/vda1 img_loop=${isofile} earlymodules=loop
initrd (lo0)/arch/boot/x86_64/archiso.img
}
+ +

重启进入 vnc 界面配置 ssh

#如果提示“insmod”无法识别,进入原系统在GRUB配置文件中,使用Tab键重新缩进
#配置 arch live 环境
#设置密码
passwd
#自动分配IP
dhcpcd
#开启 ssh 服务
systemctl start sshd
#使用 ssh 连接,摆脱不好用的 VNC 界面
#用户名 root,密码为 passwd 所设置的
#重设磁盘 vda1 的读写权限
mount -o rw,remount /dev/vda1
#进入 vda1 挂载目录 /run/archiso/img_dev
cd /run/archiso/img_dev
#删除原系统文件(除了arch.iso)
rm -rf [b-z]*
#重新挂载 vda1 至 /mnt
mount /dev/vda1 /mnt
+ +

正常安装 Arch Linux

跳过分区步骤,此处万万不可随意重启,因为已经没有系统,也没有 GRUB 了

+
    +
  • 编辑软件源
  • +
+
#编辑镜像源,将“China”字样的镜像源复制到镜像首,如“tuna”
#使用文本编辑器“VIM”,打开镜像文件
vim /etc/pacman.d/mirrorlist
#在该文件中搜索“China”,vim使用符号“/”作为搜索标志,回车后使用“n”/“N”切换搜索“下一个”/“上一个”
/China(回车)
#停留在字样“tuna”/“aliyun”处,将其复制下来,vim使用“2yy”表示“复制2行”
2yy
#跳转到第6行
6gg
#粘贴
p
#保存退出
:wq
+ +
    +
  • 安装基础软件包
  • +
+
#使用 pacstrap 脚本,安装 base 软件包和 Linux 内核以及常规硬件的固件,此处我选择长期支持版内核
pacstrap /mnt base linux-lts linux-firmware
#使用 pacstrap 脚本,安装常用软件
pacstrap /mnt base-devel grub openssh intel-ucode vim man dhcpcd
+ +
    +
  • 配置系统
  • +
+
#生成 fstab 文件
genfstab -U /mnt >> /mnt/etc/fstab
#将环境变更至新系统下
arch-chroot /mnt
#设置时区(软链接)
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#同步时钟
hwclock --systohc
#本地化(语言)
vim /etc/locale.gen
#移除某些行头的注释符“#”,可通过搜索“en_US”实现
en_US.UTF-8 UTF-8
#保存退出
:wq
#生成 local 信息
locale-gen
#创建 locale.conf
vim /etc/locale.conf
#编辑 LANG 变量
LANG=en_US.UTF-8
#保存退出
:wq
#创建网络相关文件
vim /etc/hostname
#写入你想要用的主机名
myhostname
vim /etc/hosts
127.0.0.1 localhost
::1 localhost
127.0.1.1 tencent.localdomain tencent
+ +
    +
  • 设置用户
  • +
+
#设置 root 账户密码
passwd
#创建新用户
useradd -m -G wheel arch # -m 创建家目录
# -G 用户所属的组
# arch 示例用户名
#设置 arch 用户密码
passwd arch
#修改(arch)用户权限
vim /etc/sudoers # 编辑sudoer file
# 去掉“%wheel ALL=(ALL) ALL”前面的注释,保存退出
+ +
    +
  • 配置 GRUB
  • +
+
#生成 grub 相关文件
grub-install --target=i386-pc /dev/vda
#生成 grub.cfg
grub-mkconfig > /boot/grub/grub.cfg
+ +
    +
  • 配置网络
  • +
+
#使能 dhcpcd
systemctl enable dhcpcd
#使能 sshd
systemctl enable sshd
#退出当前用户
exit
#重启
reboot
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Linux/Source_List/index.html b/2023/05/25/note/Linux/Source_List/index.html new file mode 100644 index 000000000..19f9fe1b4 --- /dev/null +++ b/2023/05/25/note/Linux/Source_List/index.html @@ -0,0 +1,678 @@ + + + + + + + + + + + + Source Lists | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Source Lists +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

🏰常用镜像地址汇总。

+ + +

USTC Source List

termux

编辑/data/data/com.termux/files/usr/etc/apt/sources.list

+
deb https://mirrors.ustc.edu.cn/termux/apt/termux-main stable main
+ +

debian

deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian stable main contrib non-free
deb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free

# deb http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free
+ +

archlinux

Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch

# arm
Server = https://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo
+ +

ubuntu

# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
+ +

kali

支持的架构:amd64, armel, armhf, i386

+
deb https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Linux/WSL2/index.html b/2023/05/25/note/Linux/WSL2/index.html new file mode 100644 index 000000000..56ea97f91 --- /dev/null +++ b/2023/05/25/note/Linux/WSL2/index.html @@ -0,0 +1,765 @@ + + + + + + + + + + + + Window 10/11 安装 WSL2 和开启 WSLg | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Window 10/11 安装 WSL2 和开启 WSLg +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+ 本文距离上次更新已过去 0 天,部分内容可能已经过时,请注意甄别。 +
+ +
+

✅ This is a tutorial of installing on WSL2

+
+ + +

Install WSL2

Start using WSL

Open powershell using administration rights, and input:

+
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
+ +

Requirement of WSL2

For x64 system, the version of win10 must be 1903 or higher.
Using “win + R” and input winver to check.

+

Start Virtual machinel platform

Open powershell using administration rights, and input:

+
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
+ +

Install Linux Kernal Updating

Download Link: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
Install.

+

Setting the default version 2

Open powershell using administration rights, and input:

+
wsl --set-default-version 2
+ +

Then, WSL2 is already installed.

+

Update to WSLg

将win10更新到最新的版本

+

Open powershell using administration rights, and input:

+
wsl --update
wsl --version
# display:
WSL version: 1.0.3.0
Kernel version: 5.15.79.1
WSLg version: 1.0.47
MSRDC version: 1.2.3575
Direct3D version: 1.606.4
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.19045.2364
+ +

否则说明win10还不是最新的,继续更新

+

Install Archlinux on WSL2

Download Archlinux

Download link: https://mirrors.tuna.tsinghua.edu.cn/archlinux/iso/latest/
Find and Download archlinux-bootstrap-2020.10.01-x86_64.tar.gz .

+

Install Archlinux by LxRunOffline

1. Input the command in powershell

LxRunOffline i -n <自定义名称> -f <Arch镜像位置> -d <安装系统的位置> -r root.x86_64
+ +

example:

+
LxRunOffline i -n ArchLinux -f C:\Users\dionysen\Downloads\archlinux-bootstrap-2020.10.01-x86_64.tar.gz -d C:\Users\dionysen\Linux -r root.x86_64
+ +

2. Change WSL2 version in Archlinux

wsl --set-version ArchLinux 2
+ +

Configuration

Basic Configuration

wsl -d Archlinux
rm /etc/resolv.conf
exit
+ +

The terminal window will be unavailable, so you should reopen a new terminal window, then:

+
wsl --shutdown Archlinux
wsl -d Archlinux
cd /etc
vi pacman.conf
+ +

Add following code in the end of pacman.conf:

+
[archlinuxcn]
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch
+ +

And change the mirrorlist:

+
vi ./pacman.d/mirrorlist
+ +

Remove the comment of a Chinese source.

+
pacman -Syy
pacman-key --init
pacman-key --populate
pacman -S archlinuxcn-keyring
pacman -S base base-devel vim git wget

passwd # input the password of root
useradd -m -G wheel -s /bin/bash <username>
passwd <username>
vim /etc/sudoers
+ +

Use /wheel find the line wheel ALL=(ALL) ALL and remove the comment.

+
id -u <username>
exit
+ +

Execute the command in powershell to set default user of Archlinux:

+
lxrunoffline su -n Archlinux -v <username>
+ +

Install Ubuntu20.02 in WSL2

wsl --list --online		# 查看可直接安装的发行版列表
# 显示如下:
PS C:\Windows\system32> wsl -l --online
The following is a list of valid distributions that can be installed.
Install using 'wsl.exe --install <Distro>'.

NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
SLES-12 SUSE Linux Enterprise Server v12
SLES-15 SUSE Linux Enterprise Server v15
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
OracleLinux_8_5 Oracle Linux 8.5
OracleLinux_7_9 Oracle Linux 7.9

# 安装ubuntu 20.04
wsl --install Ubuntu-20.04
+ +

然后打开终端,打开ubuntu-20.04,创建用户和密码

+

换源+更新

+

然后安装anaconda

+

Install Anaconda on Ubuntu

wget https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-5.3.0-Linux-x86_64.sh
chmod +x Anaconda3-5.3.0-Linux-x86_64.sh
./Anaconda3-5.3.0-Linux-x86_64.sh
yes
ENTER
+ +

安装完成之后,检查版本:

+
anaconda -V
conda -V
+ +

使用anaconda

换源:

+
cd
vim .condarc
+ +

编辑.condarc ,添加清华源

+
# add to .condarc
ssl_verify: false
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
+ +

更新:

+
conda update -n base -c defaults conda # 升级anaconda
+ +
conda create -n myconda python=3.7 		# 创建虚拟环境,名称为myconda(可以修改
conda info --envs # 查看已安装的虚拟环境
conda activate myconda # 激活环境myconda
conda deactivate # 关闭当前环境
+ +
conda list				# 查看conda的包
pip list # 查看pip的包
# 给pip换源 (也可以直接使用命令更换阿里源:
# pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
cd
mkdir .pip
vim .pip/pip.conf
# 添加以下内容
#-----------------------------------------
[global]
index-url = https://mirrors.bfsu.edu.cn/pypi/web/simple
format = columns
trusted-host = mirrors.bfsu.edu.cn
#-----------------------------------------
pip install jupyter # 安装jupyter
jupyter notebook # 开启jupyter notebook服务

+ +

附加配置

systemd

编辑 /etc/wsl.conf

+
[boot]
systemd=true
+ +

WSL distros 的备份还原

    +
  • 备份
  • +
+
wsl -l -v
# 显示为
NAME STATE VERSION
* Ubuntu-20.04 Running 2

wsl -t Ubuntu-20.04
wsl --export Ubuntu-20.04 E:\SystemBackup\ubuntu-wsl2-2022.11.29.tar
+ +
    +
  • 还原
  • +
+
wsl --import <distro-name> <install-path> <backup-file>
# e.g.
wsl --import Ubuntu c:\wsl2 d:\save\linux\wsl2.tar
+ +

WSL2-Ubuntu 安装 Qt5

sudo apt install qt5* qtcreator
+ +

创建项目时如果出现“no suitable kits”,点击“option”查看配置,如果“QT version”为“none”,则选择 /usr/lib/qt5/bin/qmake,保存即可。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Linux/shell_command/FTP/index.html b/2023/05/25/note/Linux/shell_command/FTP/index.html new file mode 100644 index 000000000..aee92d706 --- /dev/null +++ b/2023/05/25/note/Linux/shell_command/FTP/index.html @@ -0,0 +1,709 @@ + + + + + + + + + + + + Ftp | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Ftp +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

File Transfer Protocol client.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionImplication
-4contact IPv4 hosts
-6contact IPv6 hosts
-Aenable active mode transfer
-denbale debugging outpout
-edisble command line editing
-gturn off file name globbing
-ido not prompt during multiple file
-ndo not automatically login to the remote system
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Linux/shell_command/SCP/index.html b/2023/05/25/note/Linux/shell_command/SCP/index.html new file mode 100644 index 000000000..f9e2f4467 --- /dev/null +++ b/2023/05/25/note/Linux/shell_command/SCP/index.html @@ -0,0 +1,706 @@ + + + + + + + + + + + + SCP protocol | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ SCP protocol +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

scp copies files between hosts on a network.

+ + +

scp

It uses ssh for data transfer, and uses the same authentication and provides the same security as a login session.

+

scp will ask for passwords or passphrases if they are needed for authentication.

+

The source and target may be specified as a local pathname, a remote host with optional path in the form [user@]host:[path], or a URI in the form scp://[user@]host[:port][/path].

+
+

Local file names can be made explicit using absolute or relative pathnames to avoid scp treating file names containing ‘:‘ as host speacifiers.

+
+

When copying between two remote hosts, if the URI format is used, a port cannot be specified on the target if the -R option is used.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionsImplication
-3Copies between two remote hosts are transferred through the local host. Without this option the data is copied directly between the two remote hosts.
-4Forces scp to use IPv4 addresses only
-6Forces scp to use IPv6 addresses only
-AAllows forwarding of ssh-agent(1) to the remote system. The default is not to forward an authentication agent.
-CCompression enable
-lLimits the used bandwidth, specified in Kbit/s
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Linux/v2raya/index.html b/2023/05/25/note/Linux/v2raya/index.html new file mode 100644 index 000000000..7cf3f888d --- /dev/null +++ b/2023/05/25/note/Linux/v2raya/index.html @@ -0,0 +1,703 @@ + + + + + + + + + + + + V2rayA | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ V2rayA +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

On archlinux:

+
yay -S xray-bin
sudo pacman -S v2ray
yay -S v2raya-bin
+ +

Maybe you need restart your computer!

+ + +

And config:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
项目配置
透明代理/系统代理启用:大陆白名单模式
透明代理/系统代理实现方式redirect
规则端口的分流模式大陆白名单模式
防止 DNS 污染仅防止 DNS 劫持
特殊模式supervisor
TCPFastOpen保持系统默认
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Linux/xpra/index.html b/2023/05/25/note/Linux/xpra/index.html new file mode 100644 index 000000000..28ca3ebfd --- /dev/null +++ b/2023/05/25/note/Linux/xpra/index.html @@ -0,0 +1,701 @@ + + + + + + + + + + + + Xpra on Linux 的安装与使用 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Xpra on Linux 的安装与使用 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

运行在浏览器上的远程桌面。

+ + +

安装

archlinux

+
sudo pacman -S xpra
+ +

ubuntu

+
sudo apt install ca-certificates
sudo wget -O "/usr/share/keyrings/xpra-2022.gpg" https://xpra.org/xpra-2022.gpg
sudo wget -O "/usr/share/keyrings/xpra-2018.gpg" https://xpra.org/xpra-2018.gpg
# For older distributions:
wget -q https://xpra.org/xpra-2022.gpg -O- | sudo apt-key add -
wget -q https://xpra.org/xpra-2018.gpg -O- | sudo apt-key add -

cd /etc/apt/sources.list.d;wget https://xpra.org/repos/jammy/xpra.list # ubuntu 22.04 doesn't work
cd /etc/apt/sources.list.d;wget https://xpra.org/repos/focal/xpra.list # ubuntu 20.04

apt update;apt install xpra
+ +

CentOS

+
sudo wget -O /etc/yum.repos.d/xpra.repo https://xpra.org/repos/CentOS/xpra.repo
sudo yum install -y xpra
+ +

使用

    +
  • 可以直接打开远程主机的程序
  • +
+
xpra start ssh:user@host --exit-with-children --start-child=<command>
+ +
    +
  • 可以开启服务监听,在远程浏览器上打开
  • +
+
xpra start --bind-tcp=0.0.0.0:4000
+ +

使用 systemd 设置 html5 服务开机自启

编辑服务配置文件

+
sudo vim /etc/systemd/system/xpra@.service
+ +

+
[Unit]
Description=xpra-html5-server

[Service]
Type=simple
User=%i
EnvironmentFile=/etc/conf.d/xpra
ExecStart=/usr/bin/xpra --no-daemon start ${%i} --bind-tcp=0.0.0.0:4000

[Install]
WantedBy=multi-user.target
+ +

Now create the configuration, adding a line for each username you want to have an xpra display:

+
sudo vim /etc/conf.d/xpra
# 添加
dionysen=:7
+ +

允许开机自启:

+
sudo systemctl enable --now xpra@dionysen

# 检查服务运行情况
sudo systemctl status xpra@dionysen
+ + + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Programming/Projects/projectmanager/index.html b/2023/05/25/note/Programming/Projects/projectmanager/index.html new file mode 100644 index 000000000..7b1daadf7 --- /dev/null +++ b/2023/05/25/note/Programming/Projects/projectmanager/index.html @@ -0,0 +1,846 @@ + + + + + + + + + + + + Project Manager | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Project Manager +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

需求:

+
    +
  • 可以创建以 CMake + make 为构建工具的 C++项目
  • +
  • 可以添加或删除 C++ 类,自动生成 .h.cpp 文件,并补全必要代码
  • +
  • 可以使用命令进行构建和运行项目
  • +
  • 可以读取配置文件信息,如果没有,会初始化创建一个配置文件,配置文件信息包括:项目的路径,该路径中的所有项目,指定当前项目
  • +
+ + +

命令行参数及作用

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
long argargdo
--list-lshow the whole inforamtion
--createproject-ccreate project
--delproject-ddelete a prject
--addclass-aadd class
--delclassnonedelete a class
--build-bbuild without run
--run-rbuild and run
--setproject-sset the current project
--setpathnoneset the project path
--help-hshow help information
+

项目地址

https://gitee.com/sential/projectmanager

+

安装脚本

#!/bin/bash
cd
rm -rf ./projectmanager
git clone git@gitee.com:sential/projectmanager.git
cd projectmanager/build
rm -rf ./*
cmake ..
make
sudo cp ./pm /usr/bin/pm
+ +

开发过程中学到的东西

命令行参数

使用getopt()函数,原型为:int getopt(int argc, char *const *argv, const char *shortopts)

+

或如果需要长参数,使用getopt_long()函数,原型为: int getopt_long(int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind)

+

使用方法是先创建三个参数,分别为命令行参数opt用以判定参数到底是哪一个,参数索引option_index,和长参数结构体数组本身long_options[]

+

其中long_options[]option类型的结构的,原型为:

+
struct option {
const char *name; // name is the name of the long option.
int has_arg; //has_arg is: no_argument (or 0) if the option does not take an argument;
//required_argument (or 1) if the option requires an argument;
//or optional_argument (or 2) if the option takes an optional argument.
int *flag; //flag specifies how results are returned for a long option. If flag is NULL, then getopt_long() returns val. (For example, the calling program may set val to the equivalent short option character.) Otherwise, getopt_long() returns 0, and flag points to a variable which is set to val if the option is found, but left unchanged if the option is not found.
int val; //val is the value to return, or to load into the variable pointed to by flag.
// The last element of the array has to be filled with zeros.
};
+ +

创建参数变量:

+
int opt, option_index = 0;
option long_options[] = {
{"create", 1, nullptr, 'c'}, {"addclass", 1, nullptr, 'a'},
{"setproj", 1, 0, 's'}, {"delproj", 1, nullptr, 'd'},
{"list", 0, nullptr, 'l'}, {"build", 0, nullptr, 'b'},
{"run", 0, nullptr, 'r'}, {"help", 0, nullptr, 'h'},
{"setpath", 1, nullptr, 'S'}, {"delclass", 1, nullptr, 'D'},
};
+ +

然后创建一个获取参数的循环,使用函数getopt_long不断的获取参数,用switch判断参数是哪个,然后执行相应的动作

+
while ((opt = getopt_long(argc, argv, "lbra:c:hd:s:D:S:", long_options,
&option_index)) != -1) {
switch (opt) {
case 'l':
pm.list();
break;
case 'c':
pm.setCurrentProject(optarg);
pm.createProject();
break;
case 'a':
pm.addClass(pm.currentProject, optarg);
break;
case 'b':
pm.buildWithoutRun();
break;
case 'r':
pm.run();
break;
case 'd':
pm.delProject(optarg);
break;
case 'h':
pm.showHelp();
break;
case 's':
pm.setCurrentProject(optarg);
break;
case 'S':
pm.setDefaultPath(optarg);
break;
case 'D':
pm.delClass(optarg);
break;
}
}
+ +

打印彩色字符

在输出流的字符前加上\033[1m,可让字符高亮显示,[后的数字替换成其他可实现更多的效果:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
code效果
1让输出的字符高亮显式
3输出斜体字
4给输出的字符加上下划线
5让输出的字符闪烁显式
7设置反显效果,即把背景色和字体颜色反过来显示
30表示黑色
31表示红色
32表示绿色
33表示黄色
34表示蓝色
35表示紫色
36表示浅蓝色
37表示灰色
40表示背景为黑色
41表示背景为红色
42表示背景为绿色
43表示背景为黄色
44表示背景为蓝色
45表示背景为紫色
46表示背景为浅蓝色
47表示背景为灰白色
0清除所有格式
+

输出的格式像是一个状态机,输出流加入\033[31m后的所有字符都会是红色,取消这个效果要加上\033[0m,然后再进行其他的操作。

+

Use bash by String

std::string cmd =
"cd " + projectPath + "; mv -f " + projectName + " ./.dion_trash";
system(cmd.c_str());
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Programming/evn/GDB/index.html b/2023/05/25/note/Programming/evn/GDB/index.html new file mode 100644 index 000000000..a702d7db9 --- /dev/null +++ b/2023/05/25/note/Programming/evn/GDB/index.html @@ -0,0 +1,757 @@ + + + + + + + + + + + + GDB 的使用 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ GDB 的使用 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

Compile the source file to the binary file.
Add argument -g to generate a GDB binary file.

+ + +
gcc -g source.c -o output
g++ -g source.cpp -o output
ls -a
total 52K
-rw-r--r-- 1 dionysen dionysen 450 Oct 5 22:26 binary-search.cpp
-rw-r--r-- 1 dionysen dionysen 2.5K Oct 2 14:29 linked-list.cpp
-rw-r--r-- 1 dionysen dionysen 411 Oct 2 14:41 node.cpp
-rwxr-xr-x 1 dionysen dionysen 37K Oct 5 23:04 output
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CommandFull nameDo somthing
gdb output
rrunRun current program
bbreakSet a breakpoint at [function] or [line] (in file)
ccontinueContinue running your program (after stopping, e.g. at a breakpoint).
nnextExecute next program line (after stopping); step over any function calls in the line.
sstepExecute next program line (after stopping); step into any function calls in the line.
llistType the text of the program in the vicinity of where it is presently stopped.
pprintDisplay the value of an expression.
watchwatchSet a watchpoint in an address of expression
i binfo breakCheck information of breakpoints.
kkillKill the program being debugged.
qquitExit from GDB.
+
    +
  • You can use shell [args] to execute a shell command.
  • +
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Programming/evn/Git/index.html b/2023/05/25/note/Programming/evn/Git/index.html new file mode 100644 index 000000000..75e993328 --- /dev/null +++ b/2023/05/25/note/Programming/evn/Git/index.html @@ -0,0 +1,716 @@ + + + + + + + + + + + + Git 的使用 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Git 的使用 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

分布式版本控制系统,适合个人中小企业使用

+ + +

Installation

sudo pacman -S git
+ +

Usage

基本配置

配置git 的用户名和邮箱:

+
git config --global user.name "dionysen"
git config --global user.email "solongnight@outlook.com"
+ +

新建一个仓库

Initiate git repository on the local:

+
git init  
+ +

or set the file path:

+
git init path/to/repo
+ +

A repository was created, but it is empty.
You can add some files to the repository:

+
git add [filename]  // e.g. "git add ."
+ +

Then you add this files to the stages and you need to commit this to the repository.

+
git commit -a -m "Changed some files"
+ +

-a does not commit any new files.
-m means that you should give the commit message.
Add a remote repository:

+
git remote add origin git@gitee.com:sential/source.git
+ +

Push the local repository to the remote repository:

+
git push origin master
+ +
    +
  • 若要在一个新的设备上使用远程仓库,首先将此仓库克隆到本地:
  • +
+
git clone git@gitee.com:sential/source.git

# 值得注意的是gitee的仓库公钥管理方式导致必须使用ssh克隆,否则难以实现无密码修改远程仓库

# 官方提示:使用SSH公钥可以让你在你的电脑和 Gitee 通讯的时候使用安全连接(Git的Remote要使用SSH地址)
+ +

添加个人公钥

然后按照 gitee 上的提示添加个人公钥:

+
ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com"  
# Generating public/private ed25519 key pair...

cat ~/.ssh/id_ed25519.pub
# ssh-ed25519 AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....

ssh -T git@gitee.com
+ +

与远程仓库同步

每次编辑时要执行。

+
git pull origin master

# 然后开始编辑
# 完成后执行:

git add .
git commit -a -m "Changed some files"
git push origin master
+ +

或者每次编辑完成后,在另一处pull一次,那样不用每次编辑前都要再拉去一下了。
写两个脚本自动拉取和提交。

+
    +
  • 当没有拉取最新版本的远程仓库同时又修改了本地仓库时,拉取会提示错误,需要选择合并或者放弃某一端,如果放弃本地仓库,执行以下命令:
  • +
+
git reset --hard
git pull origin master
+ +

分支切换

查看分支:

+
git branch -a 	# 查看远程分支
git branch # 查看本地分支
+ +

新建分支:

+
git checkout -b linux origin/linux
#完成新分支的修改后
git add .
git commit -a -m "Changed some files"
git push --set-upstream origin origin/linux
+ +

之后即可正常使用,切换分支使用命令:

+
git checkout main # 切换到主分支
+ + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Programming/evn/cpp_config/index.html b/2023/05/25/note/Programming/evn/cpp_config/index.html new file mode 100644 index 000000000..7ccf77c94 --- /dev/null +++ b/2023/05/25/note/Programming/evn/cpp_config/index.html @@ -0,0 +1,690 @@ + + + + + + + + + + + + Clangd Config CMakeLists. txt | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Clangd Config CMakeLists. txt +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

Vim using Coc-nvim plugin clangd-lsp need to read CMakeLists.txt so that it can auto-complete your code.
If your project builds with CMake, it can generate this file. You should enable it with:

+
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1
+ +

Or add to CMakeLists.txt:

+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+ +

compile_commands.json will be written to your build directory. If your build directory is $SRC or $SRC/build, clangd will find it. Otherwise, symlink or copy it to $SRC, the root of your source tree.

+
ln -s ~/myproject-build/compile_commands.json ~/myproject/
+ +

Generated compile_commands.json can support auto completion for third party libraries.

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/05/25/note/Windows/Windows10/index.html b/2023/05/25/note/Windows/Windows10/index.html new file mode 100644 index 000000000..0cda7736a --- /dev/null +++ b/2023/05/25/note/Windows/Windows10/index.html @@ -0,0 +1,710 @@ + + + + + + + + + + + + Windows 相关技巧 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Windows 相关技巧 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

Windows系统的一些技巧。

+
+ + +

win10 修改系统显示字体

下载FontCreator,用其打开需要替换的字体,选择字体->属性:

+image + +

然后将名字修改成Microsoft Yahei,然后进入PE系统,替换系统中的雅黑字体(msyh.ttc、msyhl.ttc、msyhbd.ttc三个文件)。

+image + +

修改输入法候选字的字体

Win+r输入regedit打开注册表编辑器,找到如下:

+
HKEY_CURRENT_USER\Software\Microsoft\InputMethod\CandidateWindow\CHS\1
+ +

FontStyleFontStyleTSF3修改成想要的字体,如:

+image + +

Windows Access WSL2 Files

Input \\wsl$ in address bar of explorer.

+

Win11 Restore Right-click Menu

# To win10
reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve

# To win11
reg.exe delete "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /va /f
+ +

地址栏输入 chrome://flags 可以开启隐藏功能

+

RealVNC 注册码

Version: 6.11

+
7SA9N-9JF3P-E8CW2-BH9JU-PMVQA
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/06/01/note/Hexo/Hexo-keep/index.html b/2023/06/01/note/Hexo/Hexo-keep/index.html new file mode 100644 index 000000000..d12aab1b2 --- /dev/null +++ b/2023/06/01/note/Hexo/Hexo-keep/index.html @@ -0,0 +1,779 @@ + + + + + + + + + + + + Hexo 使用 keep 主题及美化 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Hexo 使用 keep 主题及美化 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

最初是寻找一个干净清爽的hexo主题,逛了许久终于发现这款,虽然第一眼并没有很喜欢,但干净的界面,齐全的功能,我决定自己把它修改成想要的样式。

+ + +

hexo的安装和配置请移步:Hexo 个人博客搭建 | DIONYSEN BLOG

+

基础配置官方文档讲得很清楚:安装主题 | Keep 主题使用指南 (xpoet.cn)

+

安装hexo,创建自己的项目,并设置主题为keep

+

界面美化

代码高亮

+

Keep 主题追求的是简约轻快,在最大程度上降低用户对界面美感的选择困难,使其专注写作的内容,作者认为这两种代码高亮主题能满足绝大部分的使用场景。后续版本迭代基本上不会有新的代码高亮主题出现,望周知。

+
+

尽管只有两种代码高亮主题,还是可能会出现一些非预期的错误,比如代码块无法高亮显示代码,可以尝试用以下方式解决:

+
npm uninstall hexo-prism-plugin # 卸载prism-plugin
+ +

编辑博客根目录下的_config.yml文件:

+
highlight:
enable: true
auto_detect: false
line_number: false
line_threshold: 0
tab_replace:
exclude_languages:
- example
wrap: true
hljs: false
prismjs:
enable: false
preprocess: true
line_number: true
line_threshold: 0
tab_replace: ''
+ +

即可使用keep主题的代码高亮方案。

+

块阴影

个人审美觉得主题阴影太深,修改阴影大小和边框颜色,编辑Blog/theme/keep/source/css/common/keep-theme.styl

+
$keep-container-border-radius = 0.1rem
hover-style(isTransform, scaleX, scaleY) {
// box-shadow 2px 2px 5px var(--shadow-color)
// box-shadow 0px 0.5px 2px var(--shadow-color) 原阴影样式
border 1px solid var(--item-border-color) // 边框样式

if (isTransform) {
transition-t("transform", "0", "0.2", "linear")
}

&:hover {
if (hexo-config('style.hover.scale') && isTransform) {
transform scaleX(scaleX) scaleY(scaleX)
}

if (hexo-config('style.hover.shadow')) { // 鼠标悬浮样式
// box-shadow 1px 2px 4px var(--shadow-hover-color)
box-shadow 0px 0.5px 2px var(--shadow-color)
}
}
}
+ +
    +
  • 如果想要更加沉浸式的阴影,可以去掉边框,加上四周阴影:
  • +
+
// 1. 注释掉边框
// border 1px solid var(--item-border-color) // 边框样式
// 2. 添加四周阴影:
box-shadow black 0.1px 0.1px 4px;//将h-shadow,v-shadow设为0px,实现四周阴影
+ +

效果如图:

+

image

+

主页描述

原主题主页最多有两句话,且样式相同,没有层次感,可以修改Blog/themes/keep/layout/_partial/first-screen.ejs文件:

+
<div class="description hitokoto">
Sincere and Fearless <!-- 此处插入第一行字 -->
<% for (const idx in final_description) { %>
<div class="desc-item"><%= final_description[idx] %></div>
<% } %>
</div>
+ +

主题目录下的_config.yml

+
description: It is this intellectual activity …… 
# 此为第二行字
+ +

效果如图:

+

image

+

字体修改

个性化的字体需要自定义字体样式,加载云端字体或本地字体,汉字不像英文,一般体积都很大,十几二十兆都很有可能,如果直接加载,会大大拖慢网页加载速度,可以通过压缩的方式减小字体大小。压缩中文字体的原理是删除一些不常用的字,如生僻字、繁体字、特殊符号等。(生僻字未必用不着,因此要删除什么是一个关键问题)

+

先下载想用的字体文件,假如只有3字重,那么得到三个文件xxx-regular.ttfxxx-light.ttfxxx-bold.ttf,或者otf格式也一样。

+
mkdir font-compress
# 将字体文件复制到font-compress文件夹中
vim compress.sh
# 创建一个shell脚本,内容如下:
# ---------- 脚本边界 ----------
#!/bin/bash

# MIT License
# Copyright (c) 2022-present MoyuScript
# See: https://mit-license.org/

echo "Input path: $1"
echo "With subset: $2"
echo "Custom text file: $3"

# Get current file directory
current_dir=$(dirname "$0")

text_file="$current_dir/common-text.txt"

if [ -f "$3" ]; then
text_file="$3"
fi

# Compress font
compress() {
# Get file basename
file_basename=$(basename "$1")
# Get file extension
file_extension="${file_basename##*.}"
# Get file name without extension
file_name="${file_basename%.*}"

if [ "$2" = "true" ]; then
echo "Make subset for $1 with $text_file"
fonttools subset "$1" --text-file="$text_file" --output-file="$file_name.subset.$file_extension"
echo "Compressing $1.subset"
fonttools ttLib.woff2 compress "$file_name.subset.$file_extension" -o "$file_name.subset.woff2"
else
echo "Compressing $1"
fonttools ttLib.woff2 compress "$1" -o "$file_name.woff2"
fi
}

# Is directory?
if [ -d "$1" ]; then
echo "Directory"
for file in "$1"/*.{ttf,otf}; do
compress "$file" "$2"
done
else
echo "File"
compress "$1" "$2"
fi
# ---------- 脚本边界 ----------
+ +

在此文件夹中放入存有要保留字的txt文件,如common_text.txt,内容为要保留的所有字符,可以自己整理,也可以使用开源项目中的文件,如冯兴凯/常用汉字集 - 码云 - 开源中国 (gitee.com),本次使用冯兴凯的汉字集示例:

+
# 环境配置
# 安装python、python-pip
pip install fonttools

# 工作文件夹(font-compress)目录为:
.
├── chinese
│   ├── 3500常用字.txt
│   ├── 7000常用字.txt
│   ├── Chinese16159.txt
│   ├── Chinese7000.txt
│   ├── LICENSE
│   └── README.md
├── Chinese7000.txt
├── compress.sh
├── LXGWBright-Italic.ttf
├── LXGWBright-MediumItalic.ttf
├── LXGWBright-Medium.ttf
└── LXGWBright-Regular.ttf

# 开始压缩
./compress.sh /home/dionysen/font-compress chinese7000.txt
+ +

压缩完成之后,会在此文件夹下生成.woff2文件,复制这些文件到Blog/theme/keep/source/css/common/fonts文件夹(不存在则创建),在fonts文件夹下创建stylesheet.css,内容为:

+
@font-face {
font-family: 'LXGW Bright';
src: url('./common/fonts/LXGWBright-Italic.woff2') format('woff2');
font-weight: normal;
font-style: italic;
font-display: swap;
}

@font-face {
font-family: 'LXGW Bright';
src: url('./common/fonts/LXGWBright-MediumItalic.woff2') format('woff2');
font-weight: 500;
font-style: italic;
font-display: swap;
}

@font-face {
font-family: 'LXGW Bright';
src: url('./common/fonts/LXGWBright-Medium.woff2') format('woff2');
font-weight: 500;
font-style: normal;
font-display: swap;
}

@font-face {
font-family: 'LXGW Bright';
src: url('./common/fonts/LXGWBright-Regular.woff2') format('woff2');
font-weight: normal;
font-style: normal;
font-display: swap;
}
+ +

/home/dionysen/Blog/themes/keep/source/css/style.styl中导入:

+
@import "common/fonts/stylesheet.css" 
+ +

/home/dionysen/Blog/themes/keep/source/css/common/basic.styl中导入:

+
@import 'fonts/stylesheet.css'
+ +

此时就可以设置font-family了:

+
# 修改/home/dionysen/Blog/themes/keep/_config.yml文件

# Font family, customize font family. (you don't usually have to fill)
# e.g. font_family: STKaiti, STSong, STHeiti
font_family: LXGW Bright, LXGW Bright SemiLight, Simsun, STSong
+ +

效果:

+image + + + +

使用 Github Page 自动部署

创建一个私有仓库用来存放源文件。

+

创建一个有 repoworkflow 权限的 GitHub Token

+

将上面生成的 Token 添加到私有仓库的 Secrets 里,并将这个新增的 secret 命名为 HEXO_DEPLOY

+

私有仓库 -> settings -> Secrets -> New repository secret

+

在Hexo项目根目录下创建配置文件:

+
cd blog
mkdir .github
cd .github
mkdir workflows
vim deploy.yml
+ +

编辑deploy.yml,添加如下配置

+
name: deploying Hexo project to GitHub pages
on:
push:
branches:
- main # main 分支有 push 行为时就触发这个 action

jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@master

- name: Build and Deploy
uses: theme-keep/hexo-deploy-github-pages-action@master # 使用专门部署 Hexo 到 GitHub pages 的 action
env:
PERSONAL_TOKEN: ${{ secrets.HEXO_DEPLOY }} # secret 名
PUBLISH_REPOSITORY: Dionysen/Dionysen.github.io # 公共仓库,格式:GitHub 用户名/仓库名
BRANCH: main # 分支,填 gh-pages 就行
PUBLISH_DIR: ./public # 部署 public 目录下的文件
+ +

部署使用的是 theme-keep 组织封装的 hexo-deploy-github-pages-action

+

然后编辑博客文章,push到源文件仓库,即可自动触发部署。

+

私有仓库的action:

+

image

+

公共仓库的action:

+

image

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/06/04/note/Hexo/Hexo_hitokoto/index.html b/2023/06/04/note/Hexo/Hexo_hitokoto/index.html new file mode 100644 index 000000000..f1c809c74 --- /dev/null +++ b/2023/06/04/note/Hexo/Hexo_hitokoto/index.html @@ -0,0 +1,833 @@ + + + + + + + + + + + + Hexo 使用 API 添加 hitokoto (一言) | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Hexo 使用 API 添加 hitokoto (一言) +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

Keep主题本身自带一言(hitokoto,后续不再标注),只需在${blog-dir}/theme/keep/_config.yml中修改:

+
first_screen:
hitikoto: true
+ +

但是只能显示在主页中间,并且不能修改句子的种类和格式。

+

于是自己来修改。

+ + +

官方文档:语句接口 | 一言开发者中心 (hitokoto.cn)

+

官方示例:使用示例 | 一言开发者中心 (hitokoto.cn)

+
+

本文参考了为您的Hexo博客添加Hitokoto一言功能 | Bill Yang’s Blog文章。

+
+

API的使用

在你想要加入一言的地方(.ejs文件)加入如下代码,比如要放到网页底部,就找到${blog-dir}/themes/keep/layout/_partial/footer.ejs,在其他元素后面加入代码:

+
<p id="hitokoto">Getting poem ... </p>
<p id="hitoauthor">Getting poem ... </p>
<p id="hitofrom">Getting poem ... </p> <!-- 此三行表示把下面脚本中获取的内容嵌入网页中 -->
<script>
fetch('https://v1.hitokoto.cn/?c=i') //此处c=i表示获取诗词类型,其他类型查看https://developer.hitokoto.cn/sentence/,找到所需要的类型,如文学,改成https://v1.hitokoto.cn/?c=d即可
.then(function (res){
return res.json();
})
.then(function (data) {
var hitokoto = document.getElementById('hitokoto');
hitokoto.innerText = data.hitokoto;//获取正文
var hitoauthor = document.getElementById('hitoauthor');
hitoauthor.innerText = "——" + data.from_who; // 获取作者
var hitofrom = document.getElementById('hitofrom');
hitofrom.innerText = "《" + data.from + '\xa0》'; //获取来源作品
})
.catch(function (err) {
console.error(err);
})
</script>
+ +

注:获取句子的类型:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数说明
a动画
b漫画
c游戏
d文学
e原创
f来自网络
g其他
h影视
i诗词
j网易云
k哲学
l抖机灵
其他作为 动画 类型处理
+
+

可选择多个分类,例如: ?c=a&c=c

+
+

显示效果

以上效果为三行显示,并不美观:

+

image

+

可以缩为一行:

+
<p id="hitokoto_all">Getting poem ... </p>
<script>
fetch('https://v1.hitokoto.cn/?c=i')
.then(function (res){
return res.json();
})
.then(function (data) {
var hitokoto_all = document.getElementById('hitokoto_all');
hitokoto_all.innerText = data.hitokoto + " —— " + data.from_who +"《" + data.from + 》' ;
})
.catch(function (err) {
console.error(err);
})
</script>

// 这样还不够完美,应该在接受到句子之后刷新显示,改成如下:

<p id="hitokoto_all"><a href="#" id="hitokoto_text">获取诗词中 ... </a></p>
<script async <%= theme.pjax.enable === true ? 'data-pjax' : '' %>
>
fetch('https://v1.hitokoto.cn/?c=i')
.then(function (res){
return res.json();
})
.then(function (data) {
var hitokoto_all = document.getElementById('hitokoto_all');
hitokoto_all.innerText = data.hitokoto + " —— " + data.from_who +"《" + data.from + '》' ;
})
.catch(function (err) {
console.error(err);
})
</script>
+ +

效果为:

+

image

+

更多内容

请根据自己的需要自行选择要显示的内容:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
返回参数名称描述
id一言标识
hitokoto一言正文。编码方式 unicode。使用 utf-8。
type类型。请参考第三节参数的表格
from一言的出处
from_who一言的作者
creator添加者
creator_uid添加者用户标识
reviewer审核员标识
uuid一言唯一标识;可以链接到 uuid 查看这个一言的完整信息
commit_from提交方式
created_at添加时间
length句子长度
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/06/07/note/Experience/share_input_on_win_and_android/index.html b/2023/06/07/note/Experience/share_input_on_win_and_android/index.html new file mode 100644 index 000000000..affc6d024 --- /dev/null +++ b/2023/06/07/note/Experience/share_input_on_win_and_android/index.html @@ -0,0 +1,739 @@ + + + + + + + + + + + + 笔记本电脑与安卓平板共享键鼠完美方案 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 笔记本电脑与安卓平板共享键鼠完美方案 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + image + +

日常办公使用笔记本电脑,但也想把另一个平板电脑(Android)利用起来,最初是想把它当作扩展屏,但有一些安卓软件相当不错(纯纯写作,哔哩哔哩,还有更高清的屏幕等),于是想同时使用,但是没有键鼠,笔记本电脑的键鼠和平板电脑的触控相互切换,太麻烦,经过一下午的努力终于找到完美的解决方案。

+

注:本方案需要花费30人民币购买软件,如不考虑请移步。

+ + +

设备:Windows PC 、Andriod pad、Android mobile phone

+

软件:

+ + + + + + + + + + + + + + + + + + + +
平台软件
WindowsDeskDockServer
Android padDeskDockPro(720日元 ≈ 30 人民币)
Android mobile phoneBluetooth Keyboard & Mouse
+

PC 端 DeskDockServer

按照自己的平台(操作系统和cpu架构)下载相应的软件

+
    +
  1. 安装jre

    +

    这里选择java8Java Downloads | Oracle,下载完成后安装即可

    +
  2. +
  3. 下载DeskDock Server,解压后直接可以运行

    +
  4. +
+

配置如下,切换快捷键看个人习惯,其他也根据自己的需求配置:

+

image

+

Android Pad 端

google商店搜索DeskDockPro,或点此链接DeskDock PRO下载并安装(需要付费¥30)。

+

之所以不用DeskDock免费版是因为它只提供共享鼠标,而不能使用键盘。

+

连接

软件安装完之后使用USB连接pad与PC即可享用共享鼠标和键盘,也即使用笔记本的鼠标键盘控制平板。

+

但到此为止输入法只能使用PC端的,在PC打完字发送到平板,或使用平板的输入法(一定会拉起软键盘),像这样:

+

image

+

安卓的机制是连接外接实体键盘后才会收起软键盘,继而根据各个输入法提供更简洁的视觉效果,但使用笔记本的键盘并不会被识别出实体键盘,如果接上实体键盘一切都不成问题,但都有实体键盘了还要笔记本的键盘干什么,于是摸索中发现手机端有一款软件可以模拟实体键盘和鼠标作为蓝牙外设,它就是Bluetooth Keyboard & Mouse,play商店搜索下载即可,免费版完全够用,因为只是需要它作为一个外设键盘被识别。

+

在手机端安装好后蓝牙连接pad,设置输入法为gboard,关闭显示屏幕键盘,即可享用:

+

image

+

需要注意的问题在上图里了。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/06/09/note/Linux/vim/index.html b/2023/06/09/note/Linux/vim/index.html new file mode 100644 index 000000000..d6f0f88c3 --- /dev/null +++ b/2023/06/09/note/Linux/vim/index.html @@ -0,0 +1,926 @@ + + + + + + + + + + + + vim 配置 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ vim 配置 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + image + +

使用以下脚本一键配置:

+
#!/bin/bash

git clone https://gitee.com/sential/vim_config_cpp.git
cd vim_config_cpp
mv ./.vim ~/.vim
+ +

完成后打开vim,按:PlugInstall,然后回车,即可安装插件(需梯子)。

+ + +

配置文件

image

+

以下为vimrc的全部内容:

+
" ------ Basic Setting ------

set ts=4
set shiftwidth=4
set softtabstop=4
set number
set expandtab
set autoindent
set noeb
set scrolloff=5
set t_Co=256
set wildmenu
set smartcase
set cursorline
set encoding=utf-8


" ------ Theme Setting ------
set background=dark

hi cursorLine cterm=underline ctermbg=darkred ctermfg=white
set relativenumber

" locate the point at last time; And set 'sudo chmod 777 ~/.viminfo'
au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif


" airline setting
" let g:airline#extensions#tabline#formatter = 'default'
" let g:airline#extensions#tabline#enabled = 1
" let g:airline_theme=''

" powerline symbols
let g:airline_left_sep = ''
let g:airline_left_alt_sep = ''
let g:airline_right_sep = ''
let g:airline_right_alt_sep = ''

" colorscheme monokai
" runtime plugged/material.vim/colors/material.vim
runtime plugged/gruvbox/colors/gruvbox.vim
" runtime colors/monokai.vim/colors/monokai.vim
" runtime plugged/vim-snazzy/colors/snazzy.vim

" material theme

" if (has('termguicolors'))
" set termguicolors
" endif
let g:material_theme_style = 'default'

set laststatus=2
set noshowmode
" let g:lightline = {
" \ 'colorscheme': 'material_vim',
" \ 'active': {
" \ 'left': [ [ 'mode', 'paste' ],
" \ [ 'gitbranch', 'readonly', 'filename', 'modified' ] ]
" \ },
" \ 'component_function': {
" \ 'gitbranch': 'FugitiveHead'
" \ },
" \ }
" ------------------------------------------------------------------------

" ------ Plug Index ------
:call plug#begin('~/.vim/plugged')

" airline
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
"Plug 'itchyny/lightline.vim'

Plug 'skywind3000/vim-terminal-help'

" vim-themes

Plug 'junegunn/seoul256.vim'
Plug 'kaicataldo/material.vim', { 'branch': 'main' }
Plug 'hzchirs/vim-material'
Plug 'arcticicestudio/nord-vim'
Plug 'rakr/vim-one'
Plug 'morhetz/gruvbox'

Plug 'preservim/nerdcommenter'
Plug 'connorholyday/vim-snazzy'
Plug 'jiangmiao/auto-pairs'
Plug 'rhysd/vim-clang-format'
Plug 'artur-shaik/vim-javacomplete2'
" File navigation
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'Xuyuanp/nerdtree-git-plugin'

" Find
Plug 'Yggdroot/LeaderF', { 'do': './install.sh' }

"Taglist
Plug 'majutsushi/tagbar', { 'on': 'TagbarOpenAutoClose' }

" Undo Tree
Plug 'mbbill/undotree/'

" Markdown
Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install_sync() }, 'for' :['markdown', 'vim-plug'] }
Plug 'dhruvasagar/vim-table-mode', { 'on': 'TableModeToggle' }
Plug 'iamcco/mathjax-support-for-mkdp'
Plug 'vimwiki/vimwiki'

" Bookmarks
Plug 'kshenoy/vim-signature'

" c++ hightlight
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}

"Coc
Plug 'neoclide/coc.nvim', {'branch': 'release'}

"cmake
Plug 'cdelledonne/vim-cmake'

call plug#end()


" ------ Coc-setting ------

let g:coc_global_extensions = ['coc-clangd', 'coc-vimlsp' ]

" ------ 让tab可以补全 ------
inoremap <silent><expr> <TAB>
\ pumvisible() ? "\<C-n>" :
\ "\<TAB>"
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"

" ------ Replace Esc ------
inoremap jj <ESC>
vnoremap jj <ESC>


" ------ 方向键 ------
noremap i k
noremap I 5k
noremap K 5j
noremap k j
noremap j h
noremap h i
noremap J 5h
noremap L 5l
noremap <C-K> 15j
noremap <C-I> 15k
noremap <C-J> 15h
noremap <C-L> 15l

noremap @si 30k
noremap @sk 30j
noremap @sj 30h
noremap @sl 30l


noremap H I

" ------ 括号自动对应 ------
inoremap ( ()<ESC>i
inoremap ) <c-r>=ClosePair(')')<CR>
inoremap { {<CR>}<ESC>O
inoremap } <c-r>=ClosePair('}')<CR>
inoremap [ []<ESC>i
inoremap ] <c-r>=ClosePair(']')<CR>
inoremap ' ''<ESC>i


" ------ 删除括号时自动删除对应的另一半 ------
function! ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endfunction

" ------ Other setting ------
" j+i jump out brace
imap ji jjla
" leader key
let mapleader="\<space>"
" setting backspace to reindent
set backspace=indent,eol,start


" ------ Exit, Write, Save, Resource ------
map Q :q!<CR>
map W :w<CR>
map S :wq<CR>
map R :source ~/.vim/vimrc<CR>


" ------ 分屏与标签页 ------

map sl :set splitright<CR>:vsplit<CR>
map sj :set nosplitright<CR>:vsplit<CR>
map si :set nosplitbelow<CR>:split<CR>
map sk :set splitbelow<CR>:split<CR>

"分屏切换
"  表示alt键 但不可直接键入 需在insert模式下,按ctrl+v 再按要映射的快捷键
map l <C-w>l
map i <C-w>k
map j <C-w>h
map k <C-w>j

map sv <C-w>t<C-w>H
map sh <C-w>t<C-w>K

"分屏大小
map I :res +5<CR>
map K :res -5<CR>
map L :vertical resize-5<CR>
map J :vertical resize+5<CR>

"标签页
map tn :tabe<CR>
map tj :-tabnext<CR>
map tl :+tabnext<CR>


" ------ terminal ------
nnoremap <leader>t :terminal<CR>


" ------ NERDTree configuration ------
nnoremap n :NERDTreeFocus<CR>
nnoremap <C-n> :NERDTree<CR>
nnoremap <C-t> :NERDTreeToggle<CR>
nnoremap <C-f> :NERDTreeFind<CR>

let NERDTreeMapOpenSplit='h'
let NERDTreeMapJumpFirstChild='F'
let NERDTreeMapToggleHidden="H"


" ------ clang-format ------
nnoremap cf :ClangFormat<CR>
nnoremap <C-d> :CocCommand clangd.switchSourceHeader<CR>


" ------ markdown preview ------
nmap <C-s> <Plug>MarkdownPreview
nmap <M-s> <Plug>MarkdownPreviewStop
nmap <C-p> <Plug>MarkdownPreviewToggle

+ +

快捷键使用

方向-光标移动

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
操作快捷键
i
k
j
l
5倍移动shift + i/j/k/l
15倍移动ctrl + i/j/k/l
+

如快速向下翻页,就按ctrl + k

+

模式切换

+ + + + + + + + + + + + + + + + + + +
操作快捷键
普通模式—>插入模式h
普通模式—>视图模式v
任意模式—>普通模式jj(快速按两下j
+

分屏与标签页

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
操作快捷键
分屏s+ 方向键 (如sj是向左分屏)
切换分屏alt + 方向键(如alt + j是切换到相邻左边的分屏)
分屏大小alt + shift + 方向键(上加下减,左加右减)
切换分屏排列方式(垂直或水平)svsh
新建标签页tn
切换标签页(左右切换)t + j/l
+

文件树

+ + + + + + + + + + + + + + + + + + + + + + +
操作快捷键
打开文件树窗口(聚焦到文件树窗口)ctrl + n
文件选择(上下移动光标)i/k
在当前窗口打开文件o
在新的分屏中打开文件h
+

其他

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
操作快捷键
打开或关闭终端窗口alt + +
Clang-format格式化当前文件的代码(c/cpp)cf
头文件与源文件切换ctrl + d
开启Markdown预览(使用默认浏览器打开)ctrl + p
插入模式下跳出括号ji
强制退出(文件如未更改直接退出,有更改放弃更改直接退出)shift + q
保存修改shift + w
保存修改然后退出shift + s
重新加载vimrc配置文件shift + r
注释(一行或选中区域)space + cc
解除注释(一行或选中区域)space + cu
+

vim本身的常用快捷键

+

这些快捷是Vim本身的,未重新映射

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
普通模式或视图模式下操作(注意在插入模式下不可用)快捷键
在当前字母后插入a
剪切光标所在的字母s
剪切光标所在行dd
剪切光标选中区域d
使用另一个字母替换光标所在字母r + 另一个字母
复制光标选中区y
复制光标所在行yy
粘贴p
光标移动到下一个单词w
光标移动到上一个单词b
聚焦到文首gg
聚焦到文末G
搜索:/ + 要搜索的文本
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/06/09/note/Programming/evn/OpenGL-env/index.html b/2023/06/09/note/Programming/evn/OpenGL-env/index.html new file mode 100644 index 000000000..70909bf66 --- /dev/null +++ b/2023/06/09/note/Programming/evn/OpenGL-env/index.html @@ -0,0 +1,762 @@ + + + + + + + + + + + + OpenGL开发环境搭建 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ OpenGL开发环境搭建 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

🔨学习OpenGL,在不同平台使用不同工具构建项目的方法。

+
+ + +

Archlinux

Archlinux 配置 OpenGL 开发环境 (glfw + glad)

    +
  • GLFW
  • +
+

安装glfw

+
sudo pacman -S glfw-x11
+ +
    +
  • GLAD
  • +
+image + +

在此网站选择需要的版本https://glad.dav1d.de,点击GRNERATE,下载生成的zip文件,解压后将其放到项目文件夹中。

+

文件目录为:

+
├── CMakeLists.txt
├── glad
│ ├── include
│ │ ├── glad
│ │ │ └── glad.h
│ │ └── KHR
│ │ └── khrplatform.h
│ └── src
│ └── glad.c
└── main.cpp
+ +

CMakeLists.txt可以写成如下:

+
cmake_minimum_required(VERSION 3.14)
project(OpenglTest)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Make sure clang can find .h file

set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp glad/src/glad.c) # src files

include_directories(glad/include) # include files

add_executable(OpenglTest ${SOURCE_FILES})

target_link_libraries(OpenglTest glfw) # link the glfw library
+ +

Archlinux 安装glew并配置CMake

sudo pacman -S glewlwyd glew1.10 glew
+ +

在项目中的CMakeLists.txt中配置:

+
cmake_minimum_required(VERSION 3.14)
project(OpenglTest)

find_package(OpenGL REQUIRED)
if(NOT OPENGL_FOUND)
message("ERROR: OpenGL not found")
endif(NOT OPENGL_FOUND)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp)

# include_directories(glad/include)

add_executable(OpenglTest ${SOURCE_FILES})

find_package(GLEW REQUIRED)
target_link_libraries(OpenglTest glfw GLEW::GLEW libGL.so)
+ +

编写代码main.cpp

+
#include <GL/glew.h>
#include <GLFW/glfw3.h>

#include <iostream>

int main(void)
{
// glfw: initialize and configure
// ------------------------------

if (!glfwInit())
{
return -1;
}
// glfw window creation
// --------------------
GLFWwindow *window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);

if (GLEW_OK != glewInit())
{
std::cout << "Error!" << std::endl;
}

while (!glfwWindowShouldClose(window))
{

glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.0f, 0.5f);
glVertex2f(0.5f, -0.5f);
glEnd();

glfwSwapBuffers(window);
glfwPollEvents();
}

// glfw: terminate, clearing all previously allocated GLFW resources.
// ------------------------------------------------------------------
glfwTerminate();
return 0;
}
+ +

编译运行:

+

image

+

Windows 10/11

Visual Studio on Windows 配置 OpenGL 开发环境(使用解决方案链接库)

    +
  • GLFW(手动编译,没有必要)
  • +
+

下载CMake(x64):https://github.com/Kitware/CMake/releases/download/v3.26.4/cmake-3.26.4-windows-x86_64.msi

+

下载GLFW源码:https://github.com/glfw/glfw/releases/download/3.3.8/glfw-3.3.8.zip,并解压

+

打开CMake-GUI,设置如下:

+ image + +

点击Configure,选择自己需要的VS版本和架构:

+image + +

点击Generate,会源文件中生成一个build文件夹,用 VS 打开其中的GLFW.sln,生成,然后将生成的dll文件放置好

+
    +
  • GLFW
  • +
+

直接下载Windows版本的预编译文件,其中有includesdll文件,链接到项目即可使用

+
    +
  • GLAD
  • +
+

与Linux版本相同,均为将源代码文件包含到项目中

+

Visual Studio 使用 CMake 配置 glfw + glad

其他与上文大致相同,下载编译glfw,生成下载对应的glad,然后将编译好的glfw库文件和glad的源文件放到项目文件夹中,文件结构如下图:

+

image

+

然后在CMakeLists.txt中配置:

+
# CMakeList.txt: opengl_test 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)

# Enable Hot Reload for MSVC compilers if supported.
if (POLICY CMP0141)
cmake_policy(SET CMP0141 NEW)
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")
endif()

project ("opengl_test")

include_directories(${PROJECT_SOURCE_DIR}/include) #添加包含的头文件
link_directories(lib) #添加要链接的lib文件

# 将源代码添加到此项目的可执行文件。
file(COPY "lib" DESTINATION ${CMAKE_BINARY_DIR})
file(GLOB_RECURSE src_dir "./src/*.c" "./src/*.h" "./src/*.cpp" )
add_executable (opengl_test "main.cpp" ${src_dir})

if (CMAKE_VERSION VERSION_GREATER 3.12)
set_property(TARGET opengl_test PROPERTY CXX_STANDARD 20)
endif()
# TODO: 如有需要,请添加测试并安装目标。

target_link_libraries(opengl_test glfw3 opengl32)
+ +

OpenGL基础 | DIONYSEN BLOG的源码添加到main.cpp,编译运行:

+

image

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/06/09/note/Programming/evn/vs-beautify/index.html b/2023/06/09/note/Programming/evn/vs-beautify/index.html new file mode 100644 index 000000000..4f220a53c --- /dev/null +++ b/2023/06/09/note/Programming/evn/vs-beautify/index.html @@ -0,0 +1,693 @@ + + + + + + + + + + + + Visual Studio 美化设置 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Visual Studio 美化设置 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

干净整洁的工作环境是必要的,而Visual Studio给人的感觉总是笨重繁杂又混乱的(如果你足够熟悉它,可能并不会这么觉得),于是把它变得尽量和 VS Code 一样整洁是一件令人舒适的事情。

+

隐藏状态栏

设置中取消勾选“显示状态栏”即可:

+

image

+

文本编辑器相关

如此设置:

+

image

+

字体和颜色设置自己想要的:

+

image

+

换上自己喜欢的主题,就可以得到一个清爽的文本编辑器界面:

+

image

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git "a/2023/06/11/note/Literature/\351\230\205\350\257\273/\343\200\212\346\204\237\347\237\245\357\274\214\347\220\206\347\237\245\357\274\214\350\207\252\346\210\221\350\256\244\347\237\245\343\200\213\350\257\273\344\271\246\347\254\224\350\256\260/index.html" "b/2023/06/11/note/Literature/\351\230\205\350\257\273/\343\200\212\346\204\237\347\237\245\357\274\214\347\220\206\347\237\245\357\274\214\350\207\252\346\210\221\350\256\244\347\237\245\343\200\213\350\257\273\344\271\246\347\254\224\350\256\260/index.html" new file mode 100644 index 000000000..e5f6a3f45 --- /dev/null +++ "b/2023/06/11/note/Literature/\351\230\205\350\257\273/\343\200\212\346\204\237\347\237\245\357\274\214\347\220\206\347\237\245\357\274\214\350\207\252\346\210\221\350\256\244\347\237\245\343\200\213\350\257\273\344\271\246\347\254\224\350\256\260/index.html" @@ -0,0 +1,703 @@ + + + + + + + + + + + + 《感知,理知,自我认知》读书笔记 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 《感知,理知,自我认知》读书笔记 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

摸到一块石头,就等于摸到了石头的本身,也即摸到了石头的存在。

+
+

这里显然并未思考存在,而是把感知到等同于存在。想到之前所说,除了感知,世界一无所有,那么存在也许正是被包含在感知之中了,对应的,也有一些能感知到却并不存在的东西(也许以一种奇怪的形式存在),比如幻想一个世界上原本不存在的东西,那是将记忆中的许多东西打碎而后重新拼装,构造出的东西是曾经完全不存在的,那么在想到的那一刻,并未将其制造出实体,只是在脑中构想,它存不存在?以一种奇怪的形式,比如神经突触的排布或其他什么符号象征。

+

必须要警惕的是,将科学的结论作为根基思考哲学问题将导致一种片面。

+ + +
+

你不看它它也在。

+
+

这句话实质的意思是,你不看它的时候,别人可以看到,看到既证明了存在,因此不管你看不看,它都存在。这个观点的问题在于对于像外星人这种没有人可以看到的东西是否存在是无能解释的,这还不是最头疼的。如果有一样的东西,只要有人去看,就能看到,但从来没有人看过(是从来没有,也永远都没有),那么它存不存在?该如何区分这种看了就能看到(但人们并没有看或没有能力看)和看了也许看不到(既真的不存在)的东西。

+

「对象的独立存在 vs 感知它它才存在」一节中讲到「有只狗熊扑过来,我闭上眼睛,狗熊就没了……这在物理上是相当困难的」,这无法说明对象是可以独立存在的,因为感知并非只有眼睛,闭上眼睛,狗熊扑过来,身上的触觉感受到狗熊,依然能证明狗熊的存在。因此问题的关键仍然是感知到等于存在,但感知不到的时候无法对是否存在下结论,因为它可能存在只是没有感知到(这意味只要感知就一定能感知到),也可能是不存在的(感知也感知不到)。是否可以以此作为存在的定义呢?既存在是只要感知就能感知到的东西,不存在是无论如何也感知不到的东西。

+

此时会引出另一个问题,当除自己以外的其他人直接感知到一样东西,并告诉自己,那么可以不可以相信这样东西存在。这实际上是在说除了自己直接感知到事物,还有其他证明事物存在的方法吗。俗语“眼见为实,耳听为虚”,讲的是直接感知到的重要性,耳听为虚吗,听到的也是真真实实的声音呀,只是其中包含的信息可能是假的。人是不靠谱的。现代科学使用扫描电子显微镜,看到了物体微观的表面,信了,那是因为仪器被无数次实验证明它是靠谱的,再忠诚的人也会背叛,无生命的机器则永远不会。因此声称看到细菌看到原子的科学家们显然相信并以此证明细菌和原子的存在,那么是在说明非直接的感知也能证明存在吗?

+

不妨看看使用显微镜的过程人们到底在做什么吧。当人们把一些细胞放到显微镜下观察的时候,人们看到的是“像”,也就是通过成像原理在镜头上反映出的一个虚假的图像,看到它等于看到细菌本身吗?看到细菌本身意味着什么呢?意味着存在。假设一个人在显微镜下看到了一个本来不应该出现的东西,他可能会怀疑是仪器坏了,检查完仪器发现它完好无损,他会去做实验或以其他的方式观察,最终的得出一个结论,确实存在一个新的东西或者只是镜头脏了等。至少,单纯看到,无法得出存在的结论,要去摸一摸,闻一闻或别的什么,等实在找不到方法证明它不存在了,才会得出它存在的结论。证明存在的方法就是找不到证明其不存在的方法。

+

(未完)

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/06/12/note/Framework/OpenGL/opengl-intro/index.html b/2023/06/12/note/Framework/OpenGL/opengl-intro/index.html new file mode 100644 index 000000000..163c6f055 --- /dev/null +++ b/2023/06/12/note/Framework/OpenGL/opengl-intro/index.html @@ -0,0 +1,816 @@ + + + + + + + + + + + + OpenGL-1 初识 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ OpenGL-1 初识 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

OpenGL本身是一种规范,只是规定了一些应有的函数和参数,没有任何实现(实现由第三方库完成,如glfw、glew).

+image + +
+

本文之所以放在[编程]->[框架]的分类,是因为本文主要内容是用OpenGL规范实现的库的使用,而非OpenGL规范本身

+
+

图形渲染管线是实时渲染的核心组件。渲染管线的功能是通过给定虚拟相机、3D场景物体以及光源等场景要素来产生或者渲染一副2D的图像。渲染管线是实时渲染的重要工具,主要包括两个功能:一是将物体3D坐标转变为屏幕空间2D坐标,二是为屏幕每个像素点进行着色。

+

渲染管线的一般流程分别是:顶点数据的输入、顶点着色器、曲面细分过程、几何着色器、图元组装、裁剪剔除、光栅化、片段着色器以及混合测试

+ + +

OpenGL中,所有事物都是在3D空间中的,而屏幕是2D,因此必须把三维的坐标转换成二维坐标。

+

图形渲染管线

图形渲染管线(Graphics Pipeline): 一个原始数据,经过一定变化和处理,最终显示在屏幕上。

+

主要有两个步骤:

+
    +
  1. 把3D坐标转换为2D坐标
  2. +
  3. 把2D坐标转变为实际的有颜色的像素
  4. +
+
+

2D坐标和像素也是不同的,2D坐标精确表示一个点在2D空间中的位置,而2D像素是这个点的近似值,2D像素受到你的屏幕/窗口分辨率的限制。

+
+

可被划分为几个阶段,连接而成,都具有特定的函数,很容易执行(正因为容易执行,才可以在GPU上运行成千上万个各自阶段的小程序,这些小程序为着色器).

+

着色器运行在GPU上,节省了CPU的(宝贵的)时间.

+
+

OpenGL着色器是用OpenGL着色器语言(OpenGL Shading Language, GLSL)写成的

+
+

具体阶段:

+

image

+
    +
  1. 输入数组,也即**顶点数据(Vertex Data),它是用顶点属性(Vertex Attribute)**表示的,如坐标、颜色等
  2. +
  3. 使用图元(Primitive)可以告诉OpenGL把顶点渲染成什么样,如一系列点、一系列三角形或线,可用的**提示(Hint)**如GL_POINTSGL_TRIANGLESGL_LINE_STRIP
  4. +
  5. 图形渲染管线的第一个部分是顶点着色器(Vertex Shader),目的是把3D坐标数据转换成另一种3D坐标**,同时允许我们对顶点属性进行一些基本处理
  6. +
  7. 图元装配是将顶点着色器输出的所有顶点作为输入,并所有的点装配成指定图元的形状(如果是GL_POINTS,那么就是一个顶点),如三角形
  8. +
  9. 图元装配阶段的输出会传递给**几何着色器(Geometry Shader)**。几何着色器把图元形式的一系列顶点的集合作为输入,它可以通过产生新顶点构造出新的(或是其它的)图元来生成其他形状;例子中,它生成了另一个三角形
  10. +
  11. 几何着色器的输出会被传入**光栅化阶段(Rasterization Stage),这里它会把图元映射为最终屏幕上相应的像素,生成供片段着色器(Fragment Shader)使用的片段(Fragment)。在片段着色器运行之前会执行裁切(Clipping)**。裁切会丢弃超出你的视图以外的所有像素,用来提升执行效率
  12. +
+
+

OpenGL中的一个片段是OpenGL渲染一个像素所需的所有数据

+

片段着色器的主要目的是计算一个像素的最终颜色,这也是所有OpenGL高级效果产生的地方。通常,片段着色器包含3D场景的数据(比如光照、阴影、光的颜色等等),这些数据可以被用来计算最终像素的颜色

+
+
    +
  1. 在所有对应颜色值确定以后,最终的对象将会被传到最后一个阶段,我们叫做Alpha测试和混合(Blending)阶段。这个阶段检测片段的对应的深度(和模板(Stencil))值(后面会讲),用它们来判断这个像素是其它物体的前面还是后面,决定是否应该丢弃。这个阶段也会检查alpha值(alpha值定义了一个物体的透明度)并对物体进行**混合(Blend)**;所以,即使在片段着色器中计算出来了一个像素输出的颜色,在渲染多个三角形的时候最后的像素颜色也可能完全不同
  2. +
+

第一个三角形

此处给出源码和详细注释,结构清晰:

+
#include "glad/glad.h"

#include <GLFW/glfw3.h>
#include <iostream>

void framebuffer_size_callback(GLFWwindow* window, int width, int height); //回调函数的声明
void processInput(GLFWwindow* window); // 处理对窗口的输入

// --------------- 以字符串的形式定义着色器程序的源码,第4步需要用到 ---------------
const char
* vertexShaderSource = // 创建顶点着色器程序的源码,使用c风格的常量字符串存储
"#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
"void main()\n"
"{\n"
" gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
"}\0";

// 创建片段着色器程序的源码,使用c风格的常量字符串存储
const char* fragmentShaderSource =
"#version 330 core\n"
"out vec4 FragColor;\n"
"void main() {\n"
"FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n" // 此处设置片段颜色为黄色
"}\0";

int main(void) {
// -------------- 1. glfw的初始化 ----------------

if (!glfwInit()) {
return -1;
}

// --------------- 2. 使用glfw创建窗口 ---------------
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
if (window == NULL) {
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}

glfwMakeContextCurrent(window); // 此函数使指定窗口的 OpenGL 或 OpenGL ES 上下文成为调用线程的当前上下文
glfwSetFramebufferSizeCallback(
window,
framebuffer_size_callback); // 回调函数,保证每次窗口大小调整时,重新绘制
// --------------- 3. glad:加载OpenGL所有的函数指针 ---------------
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}

// --------------- 4. 创建和编译着色器 ---------------
unsigned int vertexShader; // 创建顶点着色器索引
vertexShader = glCreateShader(GL_VERTEX_SHADER); // 创建顶点着色器
glShaderSource(
vertexShader, 1, &vertexShaderSource,
NULL); // 为顶点着色器添加源码,第二个参数是添加的源码中字符串的数量,第三个先设置为NULL
glCompileShader(vertexShader); // 编译顶点着色器

int success; // 创建编译状态指示变量
char info_log[512]; // 创建用以存储log的数组
glGetShaderiv(vertexShader, GL_COMPILE_STATUS,
&success); // 获取状态和log,输出到变量和数组中
if (!success) { // 如果编译失败,打印错误信息和log
glGetShaderInfoLog(vertexShader, 512, NULL, info_log);
std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n"
<< info_log << std::endl;
}

unsigned int fragmentShader;
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
glCompileShader(fragmentShader);

glGetShaderiv(fragmentShader, GL_COMPILE_STATUS,
&success); // 获取状态和log,输出到变量和数组中
if (!success) { // 如果编译失败,打印错误信息和log
glGetShaderInfoLog(fragmentShader, 512, NULL, info_log);
std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n"
<< info_log << std::endl;
}
// --------------- 5. 链接着色器 ---------------

unsigned int shaderProgram;
shaderProgram = glCreateProgram();

// 把着色器添加到着色器程序中
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram); // 链接着色器程序

glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success); // 异常检测
if (!success) {
glGetProgramInfoLog(shaderProgram, 512, NULL, info_log);
std::cout << "ERROR::SHADER::PROGRAM::LINK_FAILED\n"
<< info_log << std::endl;
}

glUseProgram(
shaderProgram); // 调用此函数后,渲染和着色器调用都会使用此前所写的着色器了
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader); // 链接完成之后就可以删除着色器了

// --------------- 6. 创建顶点数据缓冲区 ---------------
float vertices[] =
{ // 第一个三角形
0.5f, 0.5f, 0.0f, // 右上角
0.5f, -0.5f, 0.0f, // 右下角
-0.5f, -0.5f, 0.0f, // 左下角
-0.5f, 0.5f, 0.0f }; // 左上角
unsigned int indices[] = {
// 注意索引从0开始!
// 此例的索引(0,1,2,3)就是顶点数组vertices的下标,
// 这样可以由下标代表顶点组合成矩形

0, 1, 3, // 第一个三角形
1, 2, 3 // 第二个三角形
};
//{ -0.5f, -0.5f, 0.0f, // left
// 0.5f, -0.5f, 0.0f, // right
// 0.0f, 0.5f, 0.0f }; // top
unsigned int EBO;
glGenBuffers(1, &EBO);

unsigned int
VBO; // 缓冲区类似socket编程中的文件描述符,buffer作为唯一的标识来表示生成的一个缓冲区,GPU可以通过这个标识来读取缓冲区的数据,进而绘制出图形;它是一个整数
// VBO是顶点缓冲对象
glGenBuffers(1, &VBO); // 创建缓冲区
glBindBuffer(GL_ARRAY_BUFFER, VBO); // 绑定缓冲区
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// -------- 创建顶点数组对象 ----------
unsigned int VAO;
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
// 此时可以直接给缓冲区一个数据,或者不给数据,后面再给数据然后更新缓冲区
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
// -------- 告诉GPU如何读取顶点数据 ----------
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float),
(void*)0);
glEnableVertexAttribArray(0); // 启用顶点属性

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);

// --------------- 7. 窗口绘制循环 ---------------
while (!glfwWindowShouldClose(window)) {
// input
// -----
processInput(window);
// render
// -----
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(shaderProgram);
//glBindVertexArray(VAO); // seeing as we only have a single VAO there's
//// no need to bind it every time, but we'll do
//// so to keep things a bit more organized
//glDrawArrays(GL_TRIANGLES, 0, 3);
glBindVertexArray(VAO);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glfwSwapBuffers(window);
glfwPollEvents();
}

// glfw: terminate, clearing all previously allocated GLFW resources.
// ------------------------------------------------------------------
glfwTerminate();
return 0;
}
// process all input: query GLFW whether relevant keys are pressed/released this
// frame and react accordingly
// ---------------------------------------------------------------------------------------------------------
void processInput(GLFWwindow* window) {
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}

// glfw: whenever the window size changed (by OS or user resize) this callback
// function executes
// ---------------------------------------------------------------------------------------------
void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
// make sure the viewport matches the new window dimensions; note that width
// and height will be significantly larger than specified on retina
// displays.
glViewport(0, 0, width, height);
}
+ +

概念与作用

第一个三角形涉及到一些概念和特性,最引人注目的是三个对象,即:

+
    +
  • 顶点数组对象:Vertex Array Object,VAO
  • +
  • 顶点缓冲对象:Vertex Buffer Object,VBO
  • +
  • 元素缓冲对象:Element Buffer Object,EBO 或 索引缓冲对象 Index Buffer Object,IBO
  • +
+

标准化设备坐标

标准化设备坐标(Normalized Device Coordinates):OpenGL会将坐标转化为单位坐标,即所有轴上的大小范围为(-1, 1)

+

顶点缓冲对象

顶点缓冲对象(Vertex Buffer Objects, VBO):管理顶点的内存,在显存中储存大量顶点

+
+

这样可以一次性发送大量数据到显卡,而不用每次绘制都到cpu的内存中读取数据

+
+
    +
  1. 创建
  2. +
+
unsigned int VBO; //创建ID,类似套接字,可以通过此ID访问此对象(唯一绑定)
glGenBuffers(1, &VBO);//生成
glBindBuffer(GL_ARRAY_BUFFER, VBO);//绑定,将生成的VBO与GL_ARRAY_BUFFER绑定,从此任何对GL_ARRAY_BUFFER的调用都会操作当前绑定的VBO
// 如下面的操作:
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
//此函数将vertices的数据拷贝到缓冲GL_ARRAY_BUFFER中,因为之前绑定了VBO,所以实际上拷贝到了VBO上
+ +

glBufferData函数的最后一个参数是指定显卡管理数据的方式:

+
    +
  • GL_STATIC_DRAW :数据不会或几乎不会改变,修改一次,使用多次
  • +
  • GL_DYNAMIC_DRAW:数据会被改变很多,修改多次,使用多次
  • +
  • GL_STREAM_DRAW :数据每次绘制时都会改变,每次都会修改和使用
  • +
+
    +
  1. 使用
  2. +
+
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float),
(void *)0);
// 链接顶点属性,即告诉OpenGL如何解释顶点对象中的数据
glEnableVertexAttribArray(0); // 启用顶点属性

// 然后即可在窗口事件循环中绘制:
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(shaderProgram);
glBindVertexArray(VBO);
glDrawArrays(GL_TRIANGLES, 0, 3);
+ +

glVertexAttribPointer函数参数:

+
    +
  • 第一个参数指定我们要配置的顶点属性。还记得我们在顶点着色器中使用layout(location = 0)定义了position顶点属性的位置值(Location)吗?它可以把顶点属性的位置值设置为0。因为我们希望把数据传递到这一个顶点属性中,所以这里我们传入0
  • +
  • 第二个参数指定顶点属性的大小。顶点属性是一个vec3,它由3个值组成,所以大小是3。
  • +
  • 第三个参数指定数据的类型,这里是GL_FLOAT(GLSL中vec*都是由浮点数值组成的)。
  • +
  • 下个参数定义我们是否希望数据被标准化(Normalize)。如果我们设置为GL_TRUE,所有数据都会被映射到0(对于有符号型signed数据是-1)到1之间。我们把它设置为GL_FALSE。
  • +
  • 第五个参数叫做步长(Stride),它告诉我们在连续的顶点属性组之间的间隔。由于下个组位置数据在3个float之后,我们把步长设置为3 * sizeof(float)。要注意的是由于我们知道这个数组是紧密排列的(在两个顶点属性之间没有空隙)我们也可以设置为0来让OpenGL决定具体步长是多少(只有当数值是紧密排列时才可用)。一旦我们有更多的顶点属性,我们就必须更小心地定义每个顶点属性之间的间隔,我们在后面会看到更多的例子(译注: 这个参数的意思简单说就是从这个属性第二次出现的地方到整个数组0位置之间有多少字节)。
  • +
  • 最后一个参数的类型是void*,所以需要我们进行这个奇怪的强制类型转换。它表示位置数据在缓冲中起始位置的偏移量(Offset)。由于位置数据在数组的开头,所以这里是0。我们会在后面详细解释这个参数。
  • +
+

元素缓冲对象

元素缓冲对象(Element Buffer Object,EBO):当有重复的顶点需要绘制时,不需要定义出相同的顶点,而是使用索引来引用重复的顶点

+

这样只需要定义出不重复的所有顶点,需要哪个顶点时使用索引找到并使用它即可,这是EBO的工作方式

+
    +
  1. 创建顶点数组和索引
  2. +
+
// 绘制两个三角形组合成矩形,本来需要六个顶点,但是有两组重复的顶点
float vertices[] = {
// 第一个三角形
0.5f, 0.5f, 0.0f, // 右上角
0.5f, -0.5f, 0.0f, // 右下角
-0.5f, 0.5f, 0.0f, // 左上角
// 第二个三角形
0.5f, -0.5f, 0.0f, // 右下角
-0.5f, -0.5f, 0.0f, // 左下角
-0.5f, 0.5f, 0.0f // 左上角
};

// 下面只定义四个顶点,使用索引就可以构造出两个三角形
float vertices[] = {
0.5f, 0.5f, 0.0f, // 右上角
0.5f, -0.5f, 0.0f, // 右下角
-0.5f, -0.5f, 0.0f, // 左下角
-0.5f, 0.5f, 0.0f // 左上角
};
unsigned int indices[] = {
// 注意索引从0开始!
// 此例的索引(0,1,2,3)就是顶点数组vertices的下标,
// 这样可以由下标代表顶点组合成矩形
0, 1, 3, // 第一个三角形
1, 2, 3 // 第二个三角形
};
+ +
    +
  1. 创建EBO(与VBO类似)
  2. +
+
unsigned int VBO; 
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

unsigned int EBO;
glGenBuffers(1, &EBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); // 注意绑定的缓冲类型为GL_ELEMENT_ARRAY_BUFFER
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
+ +
    +
  1. 使用
  2. +
+
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float),
(void *)0);
// 链接顶点属性,即告诉OpenGL如何解释顶点对象中的数据
glEnableVertexAttribArray(0); // 启用顶点属性

//绘制时使用glDrawElements替换glDrawArrays
glBindVertexArray(VBO);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
+ +
+

必须结合VBO才能使用EBO,因为EBO只储存了索引,而没有顶点数据

+
+

顶点数组对象

顶点数组对象(Vertex Array Object, VAO):主要用于管理 VBO 或 EBO ,减少glBindBufferglEnableVertexAttribArrayglVertexAttribPointer 这些调用操作,高效地实现在顶点数组配置之间切换。

+

VAO的简单使用:

+
// 创建VAO
unsigned VAO;
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);

//创建VBO
unsigned int VBO;
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

//创建EBO
unsigned int EBO;
glGenBuffers(1, &EBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices,
GL_STATIC_DRAW);

//设置顶点属性指针
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float),
(void *)0);
glEnableVertexAttribArray(0); // 启用顶点属性

//解绑
glBindBuffer(GL_ARRAY_BUFFER, 0); // 解绑buffer
glBindVertexArray(0); // 解绑VAO
+ +

其他

实践表明,无法使用同一个VAO绑定不同的VBO,画出两个不同的图形,一般是多个VAO分别对应多个VBO。一个EBO可以画出多个图形,但只是从预先设置好的数组中读取顶点数据,只不过可以重复使用顶点。

+

词汇表

    +
  • OpenGL: 一个定义了函数布局和输出的图形API的正式规范。
  • +
  • GLAD: 一个扩展加载库,用来为我们加载并设定所有OpenGL函数指针,从而让我们能够使用所有(现代)OpenGL函数。
  • +
  • **视口(Viewport)**: 我们需要渲染的窗口。
  • +
  • **图形管线(Graphics Pipeline)**: 一个顶点在呈现为像素之前经过的全部过程。
  • +
  • **着色器(Shader)**: 一个运行在显卡上的小型程序。很多阶段的图形管道都可以使用自定义的着色器来代替原有的功能。
  • +
  • **标准化设备坐标(Normalized Device Coordinates, NDC)**: 顶点在通过在剪裁坐标系中剪裁与透视除法后最终呈现在的坐标系。所有位置在NDC下-1.0到1.0的顶点将不会被丢弃并且可见。
  • +
  • **顶点缓冲对象(Vertex Buffer Object)**: 一个调用显存并存储所有顶点数据供显卡使用的缓冲对象。
  • +
  • **顶点数组对象(Vertex Array Object)**: 存储缓冲区和顶点属性状态。
  • +
  • **元素缓冲对象(Element Buffer Object,EBO),也叫索引缓冲对象(Index Buffer Object,IBO)**: 一个存储元素索引供索引化绘制使用的缓冲对象。
  • +
  • Uniform: 一个特殊类型的GLSL变量。它是全局的(在一个着色器程序中每一个着色器都能够访问uniform变量),并且只需要被设定一次。
  • +
  • **纹理(Texture)**: 一种包裹着物体的特殊类型图像,给物体精细的视觉效果。
  • +
  • **纹理环绕(Texture Wrapping)**: 定义了一种当纹理顶点超出范围(0, 1)时指定OpenGL如何采样纹理的模式。
  • +
  • **纹理过滤(Texture Filtering)**: 定义了一种当有多种纹素选择时指定OpenGL如何采样纹理的模式。这通常在纹理被放大情况下发生。
  • +
  • **多级渐远纹理(Mipmaps)**: 被存储的材质的一些缩小版本,根据距观察者的距离会使用材质的合适大小。
  • +
  • stb_image.h: 图像加载库。
  • +
  • **纹理单元(Texture Units)**: 通过绑定纹理到不同纹理单元从而允许多个纹理在同一对象上渲染。
  • +
  • **向量(Vector)**: 一个定义了在空间中方向和/或位置的数学实体。
  • +
  • **矩阵(Matrix)**: 一个矩形阵列的数学表达式。
  • +
  • GLM: 一个为OpenGL打造的数学库。
  • +
  • **局部空间(Local Space)**: 一个物体的初始空间。所有的坐标都是相对于物体的原点的。
  • +
  • **世界空间(World Space)**: 所有的坐标都相对于全局原点。
  • +
  • **观察空间(View Space)**: 所有的坐标都是从摄像机的视角观察的。
  • +
  • **裁剪空间(Clip Space)**: 所有的坐标都是从摄像机视角观察的,但是该空间应用了投影。这个空间应该是一个顶点坐标最终的空间,作为顶点着色器的输出。OpenGL负责处理剩下的事情(裁剪/透视除法)。
  • +
  • **屏幕空间(Screen Space)**: 所有的坐标都由屏幕视角来观察。坐标的范围是从0到屏幕的宽/高。
  • +
  • LookAt矩阵: 一种特殊类型的观察矩阵,它创建了一个坐标系,其中所有坐标都根据从一个位置正在观察目标的用户旋转或者平移。
  • +
  • **欧拉角(Euler Angles)**: 被定义为偏航角(Yaw),俯仰角(Pitch),和滚转角(Roll)从而允许我们通过这三个值构造任何3D方向。
  • +
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/06/12/note/Programming/evn/coc-nvim-inlay-hint/index.html b/2023/06/12/note/Programming/evn/coc-nvim-inlay-hint/index.html new file mode 100644 index 000000000..5bef4737d --- /dev/null +++ b/2023/06/12/note/Programming/evn/coc-nvim-inlay-hint/index.html @@ -0,0 +1,710 @@ + + + + + + + + + + + + Vim 使用 coc-nvim 的 coc-clangd 关闭参数提示 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Vim 使用 coc-nvim 的 coc-clangd 关闭参数提示 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

在Vim中使用Coc-nvim提供的coc-clangd,会默认开启Inlay-hint,也即如图所示的参数提示,它可以帮助我们快速分辨参数,但有时候也会影响代码的整洁和对代码长度的估量,除去的方法为在Coc-config中关闭inlayHint.enable选项。

+

image

+ + +
    +
  1. 在Vim中输入命令CocConfig,回车image
  2. +
  3. inlayHint.enable选项设置为falseimage
  4. +
+

然后即可看到Inlay-hint的效果已经不见了

+

image

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/06/13/note/Programming/evn/vscode-lldb-extension/index.html b/2023/06/13/note/Programming/evn/vscode-lldb-extension/index.html new file mode 100644 index 000000000..7ad6458f4 --- /dev/null +++ b/2023/06/13/note/Programming/evn/vscode-lldb-extension/index.html @@ -0,0 +1,682 @@ + + + + + + + + + + + + VS code 安装插件 lldb 调试 CPP 程序 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ VS code 安装插件 lldb 调试 CPP 程序 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

VS code 安装插件 CodeLLDB 时,需要下载一个包,vadimcn/codelldb,即使有代理,也难以自动完成。

+ + +

可以手动下载Release下的对应架构的vsix包,然后命令行安装:

+
code --install-extension codelldb-x86_64-linux.vsix
+ +

然后编辑一个launch.json

+
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/path/to/your-debug-program", // 要制定需要debug的程序
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
+ +

加上断点即可调试。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/06/20/note/Programming/tools/cmake-win/index.html b/2023/06/20/note/Programming/tools/cmake-win/index.html new file mode 100644 index 000000000..c0323531e --- /dev/null +++ b/2023/06/20/note/Programming/tools/cmake-win/index.html @@ -0,0 +1,718 @@ + + + + + + + + + + + + Windows命令行使用CMake | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Windows命令行使用CMake +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

使用CMake命令行构建一个小工程

编辑main.cpp

+
#include <iostream>
int main() {
std::cout << "Hello, Windows!\n";
return 0;
}
+ +

编辑CMakeLists.txt

+
cmake_minimum_required(VERSION 3.5.1)
project(win32 VERSION 0.1.0)
set(CMAKE_CXX_STANDARD 20)
include(CTest)
enable_testing()

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_BUILD_TYPE Debug)

include_directories(includes)
add_executable(win32 main.cpp)

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)
+ + + +

当前目录为:

+
    目录: D:\proj


Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2023/6/20 9:47 build
-a---- 2023/6/20 9:51 372 CMakeLists.txt
-a---- 2023/6/20 9:37 97 main.cpp
+ +

进入build文件夹:

+
PS D:\proj> cd .\build\
+ +

输入命令cmake ..以创建CMakeCache:

+
PS D:\proj\build> cmake ..
-- Building for: Visual Studio 17 2022
-- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.19045.
-- The C compiler identification is MSVC 19.36.32534.0
-- The CXX compiler identification is MSVC 19.36.32534.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: E:/VS2022/VC/Tools/MSVC/14.36.32532/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: E:/VS2022/VC/Tools/MSVC/14.36.32532/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (7.5s)
-- Generating done (0.1s)
-- Build files have been written to: D:/proj/build
+ +

输入命令cmake --build .编译:

+
PS D:\proj\build> cmake --build .
MSBuild version 17.6.3+07e294721 for .NET Framework

1>Checking Build System
Building Custom Rule D:/proj/CMakeLists.txt
main.cpp
win32.vcxproj -> D:\proj\build\Debug\win32.exe
Building Custom Rule D:/proj/CMakeLists.txt
+ +

此时可以看到build文件夹下多出了许多文件和一些文件夹:

+
    目录: D:\proj\build


Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2023/6/20 9:57 CMakeFiles
d----- 2023/6/20 9:57 Debug
d----- 2023/6/20 9:56 Testing
d----- 2023/6/20 9:57 win32.dir
d----- 2023/6/20 9:57 x64
-a---- 2023/6/20 9:56 45092 ALL_BUILD.vcxproj
……
+ +

其中Debug文件夹中就有生成的可执行文件:

+
PS D:\proj\build> cd .\Debug\
PS D:\proj\build\Debug> ls


目录: D:\proj\build\Debug


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2023/6/20 9:57 58368 win32.exe
-a---- 2023/6/20 9:57 1265664 win32.pdb
+ +

运行:

+
PS D:\proj\build> .\Debug\win32.exe
Hello, Windows!
+ +

CMake使用glut库

点此下载glut的bin文件,其中包含头文件、.dll.lib文件,将其放到需要引用的工程中。

+
stdlib.h(56,48): error C2381: “exit”: 重定义;”noreturn” 不同 [D:\proj\build\win32.vcxproj]

解决办法: 调换一下头文件的包含次序

+
#include <windows.h>
#include "./lib/glut.h"
+ +

改成:

+
#include "./lib/glut.h"
#include <windows.h>
+ +

……

+

错误太多,配置太困难,还是使用VS吧。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/06/23/note/Programming/tools/xmake/index.html b/2023/06/23/note/Programming/tools/xmake/index.html new file mode 100644 index 000000000..b4b33ac65 --- /dev/null +++ b/2023/06/23/note/Programming/tools/xmake/index.html @@ -0,0 +1,774 @@ + + + + + + + + + + + + 使用xmake构建c++项目 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 使用xmake构建c++项目 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

image

+

接受新的事物是不容易的,这意味要面临诸多陌生和不习惯,但xmake太简单易用了,从此cmake是路人。

+ + +

安装

On linux:

+
curl -fsSL https://xmake.io/shget.text | bash
# Or
wget https://xmake.io/shget.text -O - | bash
+ +

On Windows:

+
Invoke-Expression (Invoke-Webrequest 'https://xmake.io/psget.text' -UseBasicParsing).Content
+ +

或者直接使用包管理器安装。

+

如archlinux:

+
sudo pacman -Sy xmake
+ +

使用

创建项目

cpp xmake create -P ./hello
# -------- 以下为输出内容 --------
create hello ...
[+]: src/main.cpp
[+]: xmake.lua
[+]: .gitignore
create ok!
+ +

此时目录为

+
hello
|-- src
| `-- main.cpp
`-- xmake.lua
+ +

xmake.lua的内容为:

+
add_rules("mode.debug", "mode.release")  -- 添加debug和release模式

target("hello") -- 项目名字
set_kind("binary") -- 设置生成二进制文件
add_files("src/*.cpp") -- 添加源文件
+ +

在此基础上可以添加更多如头文件和链接库。

+

OpenGL-demo

环境为WSL-Archlinux。

+

安装glfw:

+
sudo pacman -S glfw-x11
+ +

下载glad放到项目路径中:

+
.
|-- glad
| |-- include
| | |-- KHR
| | | `-- khrplatform.h
| | `-- glad
| | `-- glad.h
| `-- src
| `-- glad.c
|-- src
| `-- main.cpp
`-- xmake.lua
+ +

main.cpp代码在这里

+

xmake.lua的内容为:

+
add_rules("mode.debug", "mode.release")

target("test-xmake")
set_kind("binary")
add_files("src/*.cpp", "glad/src/glad.c") -- 添加glad的源文件,"glad/src/glad.c"当然也可以写成"glad/src/*.c"
add_includedirs("glad/include") -- 添加glad的头文件
add_links("glfw") -- 添加glfw库
+ +

编译:

+
xmake
# 或
xmake build
# -------- 以下为输出内容 --------
[ 20%]: cache compiling.release src/main.cpp
[ 60%]: linking.release test-xmake
[100%]: build ok, spent 1.136s
+ +

运行:

+
./build/linux/x86_64/release/test-xmake
# 或
xmake run
+ +

image

+

生成compile_commands.json

xmake project -k compile_commands
+ +

如果有多个编译器,最好先设置好语法检查的编译器再生成:

+
xmake f --toolchain=clang
xmake project -k compile_commands
+ +

使用mingw编译器

xmake f -p mingw --sdk=/path/to/mingw/
+ +

发现mingw编译速度很慢,换成msvc:

+
xmake f --toolchain=msvc
+ +

切换编译模式到debug/release

xmake f -m debug
+ +
+

f意为config,m意为mode

+
+

添加远程库

如glm,先编辑xmake.lua

+
add_rules("mode.debug", "mode.release")
add_requires("glm") -- 必须添加依赖

target("opengl")
add_rules("win.sdk.application")
set_kind("binary")
add_files("src/*.cpp","src/*.c")
add_includedirs("/include","/Dependencies/include/glad")
add_links("opengl32")
add_packages("glm") -- 然后添加包,之后xmake会自动添加include和link及其路径
+ +

然后生成compile_commands以让编译器智能补全:

+
xmake  #构建时会自动从远程仓库拉取
xmake project -k compile_commands
+ +

需要注意的是,添加依赖库的方式很多,常用是:

+

①使用xmake的包管理器,可以使用vcpkg或conon的包,也可以使用xmake自己的包,添加的方式是:

+
add_requires("glfw") // 添加依赖
add_packages("glfw") // 添加包
+ +

②从源码编译成依赖库:

+

如源码路径:

+
└─spdlog
├─include
│ └─spdlog
│ ├─cfg
│ ├─details
│ ├─fmt
│ │ └─bundled
│ └─sinks
└─src
+ +

在spdlog文件下创建xmake.lua作为项目的子模块:

+
target("spdlog")
set_kind("static") -- 设置为静态库类型
-- 或动态库 set_kind("shared")
add_includedirs("./include", {public = true}) -- 让依赖此库的项目继承头文件
add_files("./src/*.cpp")

add_defines("SPDLOG_COMPILED_LIB") -- 编译成lib所需要宏
+ +

然后再自己项目中的xmake.lua中包含并添加依赖:

+
target("myPrj")
setkind("binary")

includes("./vendor/spdlog/xmake.lua") -- 包含spdlog项目
add_deps("spdlog") -- 添加依赖

-- ...其他配置
+ + + +

Qt项目

创建:

+
xmake create -t qt.console test
xmake create -t qt.static test
xmake create -t qt.shared test
xmake create -t qt.quickapp test
xmake create -t qt.widgetapp test
+ +

配置qt版本

+
xmake f --qt=~/Qt/Qt5.9.1
+ +

使用xmake生成Visual Studio项目

xmake project -k vsxmake
+ + + + + + + + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/06/29/note/Framework/OpenGL/Win32-OpenGL/index.html b/2023/06/29/note/Framework/OpenGL/Win32-OpenGL/index.html new file mode 100644 index 000000000..8d809eb8b --- /dev/null +++ b/2023/06/29/note/Framework/OpenGL/Win32-OpenGL/index.html @@ -0,0 +1,699 @@ + + + + + + + + + + + + 基于Win32的OpenGL3.3 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 基于Win32的OpenGL3.3 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

在Win32的基础上,使用OpenGL v3.3,单个cpp文件完成:

+ + +
#define _CRT_SECURE_NO_WARNINGS
#define WIN32_LEAN_AND_MEAN
#define WIN_32_EXTRA_LEAN

#include "glad/glad.h"
#include <Windows.h>
#include <iostream>
//#include "Application.h"

const char* vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
"void main()\n"
"{\n"
" gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
"}\0";
const char* fragmentShaderSource = "#version 330 core\n"
"out vec4 FragColor;\n"
"void main()\n"
"{\n"
" FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n"
"}\n\0";

int WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

#if _DEBUG
#pragma comment (linker, "/subsystem:console")
int main(int argc, const char** argv) {
return WinMain(GetModuleHandle(NULL), NULL, GetCommandLineA(), SW_SHOWDEFAULT);
}
#else
#pragma comment (linker, "/subsystem:windows")
#endif
#pragma comment(lib, "opengl32.lib")

#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091
#define WGL_CONTEXT_MINOR_VERSION_ARB 0X2092
#define WGL_CONTEXT_FLAGS_ARB 0X2094
#define WGL_CONTEXT_COREPROFILE_BIT_ARB 0x00000001
#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126
typedef HGLRC(WINAPI* PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int* attribList);

typedef const char* (WINAPI* PFNWGLGETEXTENSIONSSTRINGEXTPROC)(void);
typedef BOOL (WINAPI* PFNWGLSWAPINTERVALEXTPROC)(int);
typedef int (WINAPI* PFNWGLGETSWAPINTERVALEXTPROC) (void);

//Application* gApplication = nullptr;
GLuint gVertexArrayObject = 0;

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int ICmdShow) {
//gApplication = new Application();

const wchar_t CLASS_NAME[] = L"Win32 Game Window"; //Search more...

WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.style = 0;
wndclass.style = CS_HREDRAW | CS_VREDRAW; // ACTIVATES RELOAD ON REDRAW
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hinstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wndclass.lpszMenuName = 0;
wndclass.lpszClassName = CLASS_NAME;

RegisterClassEx(&wndclass);


int ScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int ScreenHeight = GetSystemMetrics(SM_CYSCREEN);
int clientWidth = 800;
int clientHeight = 600;

RECT windowRect;

SetRect(&windowRect, (ScreenWidth / 2) - (clientWidth / 2),
(ScreenHeight / 2) - (clientHeight / 2),
(ScreenWidth / 2) + (clientWidth / 2),
(ScreenHeight / 2) + (clientHeight / 2));


DWORD style = (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME);


const wchar_t windowName[] = L"OpenGL Window";

//DWORD secondaryStyle = (WS_EX_ACCEPTFILES);

HWND hwnd = CreateWindowEx(0, wndclass.lpszClassName, windowName, style, windowRect.left, windowRect.top, windowRect.right - windowRect.left,
windowRect.bottom - windowRect.top, NULL, NULL, hinstance, szCmdLine);
HDC hdc = GetDC(hwnd);


PIXELFORMATDESCRIPTOR pfd;

memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;

pfd.cDepthBits = 32;
pfd.cStencilBits = 8;

int pixelFormat = ChoosePixelFormat(hdc, &pfd);
SetPixelFormat(hdc, pixelFormat, &pfd );


HGLRC tempRC = wglCreateContext(hdc);
wglMakeCurrent(hdc, tempRC);
PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB = NULL;
wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)wglGetProcAddress("wglCreateContextAttribsARB");

const int attribList[] = {
WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
WGL_CONTEXT_MINOR_VERSION_ARB, 3,
WGL_CONTEXT_FLAGS_ARB, 0,
WGL_CONTEXT_PROFILE_MASK_ARB,
WGL_CONTEXT_COREPROFILE_BIT_ARB, 0,
};

HGLRC hglrc = wglCreateContextAttribsARB(hdc, 0, attribList);
wglMakeCurrent(NULL, NULL);
wglDeleteContext(tempRC);
wglMakeCurrent(hdc, hglrc);

if (!gladLoadGL())
{
std::cout << "Could not initialize GLAD \n";
}
else {
std::cout << "OpenGL Version " << GLVersion.major << std::endl;
}

PFNWGLGETEXTENSIONSSTRINGEXTPROC _wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)wglGetProcAddress("wglGetExtensionsStringEXT");
bool swapControlSupported = strstr(_wglGetExtensionsStringEXT(), "WGL_EXT_swap_control") != 0;

int vsynch = 0;

if (swapControlSupported) {
PFNWGLSWAPINTERVALEXTPROC wglSwapInternalEXT = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT");
PFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)wglGetProcAddress("wglGetSwapIntervalEXT");
if (wglSwapInternalEXT(1))
{
std::cout << "VSynch enabled \n";
}
else
{
std::cout << "Could not enable VSynch";
}
}
else
{
std::cout << "WGL_EXT_swap_control not supported \n";
}

unsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
glCompileShader(vertexShader);
// check for shader compile errors
int success;
char infoLog[512];
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n"
<< infoLog << std::endl;
}
// fragment shader
unsigned int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
glCompileShader(fragmentShader);
// check for shader compile errors
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n"
<< infoLog << std::endl;
}
// link shaders
unsigned int shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
// check for linking errors
glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);
if (!success)
{
glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n"
<< infoLog << std::endl;
}
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);

// set up vertex data (and buffer(s)) and configure vertex attributes
// ------------------------------------------------------------------
float vertices[] = {
-0.5f, -0.5f, 0.0f, // left
0.5f, -0.5f, 0.0f, // right
0.0f, 0.5f, 0.0f // top
};

GLuint VBO, VAO;

glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
// bind the Vertex Array Object first, then bind and set vertex buffer(s), and then configure vertex attributes(s).
glBindVertexArray(VAO);
gVertexArrayObject = VAO;

glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);

// note that this is allowed, the call to glVertexAttribPointer registered VBO as the vertex attribute's bound vertex buffer object so afterwards we can safely unbind
glBindBuffer(GL_ARRAY_BUFFER, 0);

// You can unbind the VAO afterwards so other VAO calls won't accidentally modify this VAO, but this rarely happens. Modifying other
// VAOs requires a call to glBindVertexArray anyways so we generally don't unbind VAOs (nor VBOs) when it's not directly necessary.
glBindVertexArray(0);



// Shows window
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
//gApplication->Initialize();


DWORD lastTick = GetTickCount();
MSG msg;
while (true) {
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT) {
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}

DWORD thisTick = GetTickCount();
float dt = float(thisTick - lastTick) * 0.001f;
lastTick = thisTick;

//if (gApplication != nullptr) {
// gApplication->Update(dt);

RECT clientRect;
GetClientRect(hwnd, &clientRect);
clientWidth = clientRect.right - clientRect.left;
clientHeight = clientRect.bottom - clientRect.top;

glViewport(0, 0, clientWidth, clientHeight);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glPointSize(5.0f);
glBindVertexArray(gVertexArrayObject);

glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

// draw our first triangle
glUseProgram(shaderProgram);
glBindVertexArray(VAO); // seeing as we only have a single VAO there's no need to bind it every time, but we'll do so to keep things a bit more organized
glDrawArrays(GL_TRIANGLES, 0, 3);


float aspect = (float)clientWidth / (float)clientHeight;

//gApplication->Render(aspect);

SwapBuffers(hdc);
if (vsynch != 0)
glFinish();
//}

}

//if (gApplication != nullptr) {
// std::cout << "Expected application to be null on exit \n";
// delete gApplication;
//}

return (int)msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) {
switch (iMsg) {
case WM_CLOSE:
//if (gApplication != nullptr) {
//gApplication->Shutdown();
//delete gApplication;
//gApplication = 0;
DestroyWindow(hwnd);
//}
//else {
// std::cout << "Already shut down! \n";
//}
break;

case WM_DESTROY:
if (gVertexArrayObject != 0) {
HDC hdc = GetDC(hwnd);
HGLRC hglrc = wglGetCurrentContext();

glBindVertexArray(0);
glDeleteVertexArrays(1, &gVertexArrayObject);
gVertexArrayObject = 0;

wglMakeCurrent(NULL, NULL);
wglDeleteContext(hglrc);
ReleaseDC(hwnd, hdc);

PostQuitMessage(0);
}
else {
std::cout << "Multiple destroy messages \n";
}
break;
}

return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
+ +

简化版:

+
#include "glad/glad.h"
#include <Windows.h>
#include <iostream>

const char* vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
"void main()\n"
"{\n"
" gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
"}\0";
const char* fragmentShaderSource = "#version 330 core\n"
"out vec4 FragColor;\n"
"void main()\n"
"{\n"
" FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n"
"}\n\0";

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

#if _DEBUG
#pragma comment (linker, "/subsystem:console")
int main(int argc, const char** argv) {
return WinMain(GetModuleHandle(NULL), NULL, GetCommandLineA(), SW_SHOWDEFAULT);
}
#else
#pragma comment (linker, "/subsystem:windows")
#endif

#pragma comment(lib, "opengl32.lib")

constexpr auto WGL_CONTEXT_MAJOR_VERSION_ARB = 0x2091;
constexpr auto WGL_CONTEXT_MINOR_VERSION_ARB = 0X2092; // 宏可以转换成constexpr
constexpr auto WGL_CONTEXT_FLAGS_ARB = 0X2094;
constexpr auto WGL_CONTEXT_COREPROFILE_BIT_ARB = 0x00000001;
constexpr auto WGL_CONTEXT_PROFILE_MASK_ARB = 0x9126;

typedef HGLRC(WINAPI* PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int* attribList);

typedef const char* (WINAPI* PFNWGLGETEXTENSIONSSTRINGEXTPROC)(void);
typedef BOOL (WINAPI* PFNWGLSWAPINTERVALEXTPROC)(int);
typedef int (WINAPI* PFNWGLGETSWAPINTERVALEXTPROC) (void);


int WINAPI WinMain(_In_ HINSTANCE hinstance, _In_opt_ HINSTANCE hPrevInstance, _In_ PSTR szCmdLine, _In_ int ICmdShow)
{
const wchar_t CLASS_NAME[] = L"Win32 Game Window"; //Search more...

WNDCLASSEX wndclass{};
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.style = 0;
wndclass.style = CS_HREDRAW | CS_VREDRAW; // ACTIVATES RELOAD ON REDRAW
wndclass.lpfnWndProc= WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hinstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wndclass.lpszMenuName = 0;
wndclass.lpszClassName = CLASS_NAME;

RegisterClassEx(&wndclass);

int ScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int ScreenHeight = GetSystemMetrics(SM_CYSCREEN);
int clientWidth = 800;
int clientHeight = 600;

RECT windowRect;

SetRect(&windowRect, (ScreenWidth / 2) - (clientWidth / 2),
(ScreenHeight / 2) - (clientHeight / 2),
(ScreenWidth / 2) + (clientWidth / 2),
(ScreenHeight / 2) + (clientHeight / 2));


DWORD style = (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME);

const wchar_t windowName[] = L"OpenGL Window";

HWND hwnd = CreateWindowEx(0, wndclass.lpszClassName, windowName, style, windowRect.left, windowRect.top, windowRect.right - windowRect.left,windowRect.bottom - windowRect.top, NULL, NULL, hinstance, szCmdLine);
HDC hdc = GetDC(hwnd);

PIXELFORMATDESCRIPTOR pfd;

memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;

pfd.cDepthBits = 32;
pfd.cStencilBits = 8;

int pixelFormat = ChoosePixelFormat(hdc, &pfd);
SetPixelFormat(hdc, pixelFormat, &pfd );

HGLRC tempRC = wglCreateContext(hdc);
wglMakeCurrent(hdc, tempRC);
PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB = NULL;
wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)wglGetProcAddress("wglCreateContextAttribsARB");

const int attribList[] = {
WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
WGL_CONTEXT_MINOR_VERSION_ARB, 3,
WGL_CONTEXT_FLAGS_ARB, 0,
WGL_CONTEXT_PROFILE_MASK_ARB,
WGL_CONTEXT_COREPROFILE_BIT_ARB, 0,
};

HGLRC hglrc = wglCreateContextAttribsARB(hdc, 0, attribList);
wglMakeCurrent(NULL, NULL);
wglDeleteContext(tempRC);
wglMakeCurrent(hdc, hglrc);

if (!gladLoadGL())
{
std::cout << "Could not initialize GLAD \n";
}
else {
std::cout << "OpenGL Version " << GLVersion.major << std::endl;
}

PFNWGLGETEXTENSIONSSTRINGEXTPROC _wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)wglGetProcAddress("wglGetExtensionsStringEXT");
bool swapControlSupported = strstr(_wglGetExtensionsStringEXT(), "WGL_EXT_swap_control") != 0;

int vsynch = 0;

if (swapControlSupported) {
PFNWGLSWAPINTERVALEXTPROC wglSwapInternalEXT = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT");
PFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)wglGetProcAddress("wglGetSwapIntervalEXT");
if (wglSwapInternalEXT(1))
{
std::cout << "VSynch enabled \n";
}
else
{
std::cout << "Could not enable VSynch";
}
}
else
{
std::cout << "WGL_EXT_swap_control not supported \n";
}

unsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
glCompileShader(vertexShader);
// check for shader compile errors
int success;
char infoLog[512];
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n"
<< infoLog << std::endl;
}
// fragment shader
unsigned int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
glCompileShader(fragmentShader);
// check for shader compile errors
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n"
<< infoLog << std::endl;
}
// link shaders
unsigned int shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
// check for linking errors
glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);
if (!success)
{
glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n"
<< infoLog << std::endl;
}
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);

// set up vertex data (and buffer(s)) and configure vertex attributes
// ------------------------------------------------------------------
float vertices[] = {
-0.5f, -0.5f, 0.0f, // left
0.5f, -0.5f, 0.0f, // right
0.0f, 0.5f, 0.0f // top
};

GLuint VBO, VAO;

glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
// bind the Vertex Array Object first, then bind and set vertex buffer(s), and then configure vertex attributes(s).
glBindVertexArray(VAO);

glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);

// note that this is allowed, the call to glVertexAttribPointer registered VBO as the vertex attribute's bound vertex buffer object so afterwards we can safely unbind
glBindBuffer(GL_ARRAY_BUFFER, 0);

// You can unbind the VAO afterwards so other VAO calls won't accidentally modify this VAO, but this rarely happens. Modifying other
// VAOs requires a call to glBindVertexArray anyways so we generally don't unbind VAOs (nor VBOs) when it's not directly necessary.
glBindVertexArray(0);

// Shows window
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);

DWORD lastTick = GetTickCount64();
MSG msg;
while (true)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}

DWORD thisTick = GetTickCount64();
float dt = float(thisTick - lastTick) * 0.001f;
lastTick = thisTick;

RECT clientRect;
GetClientRect(hwnd, &clientRect);
clientWidth = clientRect.right - clientRect.left;
clientHeight = clientRect.bottom - clientRect.top;

glViewport(0, 0, clientWidth, clientHeight);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glPointSize(5.0f);

glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

// draw our first triangle
glUseProgram(shaderProgram);
glBindVertexArray(VAO); // seeing as we only have a single VAO there's no need to bind it every time, but we'll do so to keep things a bit more organized
glDrawArrays(GL_TRIANGLES, 0, 3);

float aspect = (float)clientWidth / (float)clientHeight;
SwapBuffers(hdc);
if (vsynch != 0)
{
glFinish();
}
}
return (int)msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
switch (iMsg) {
case WM_CLOSE:
DestroyWindow(hwnd);
break;

case WM_DESTROY:
HDC hdc = GetDC(hwnd);
HGLRC hglrc = wglGetCurrentContext();

glBindVertexArray(0);

wglMakeCurrent(NULL, NULL);
wglDeleteContext(hglrc);
ReleaseDC(hwnd, hdc);
PostQuitMessage(0);
break;
}

return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
+ +

使用着色器类:

+
#include "glad.h"
#include "shader.h"
#include <Windows.h>
#include <iostream>

#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

#if _DEBUG
#pragma comment(linker, "/subsystem:console")
int main(int argc, const char **argv)
{
return WinMain(GetModuleHandle(NULL), NULL, GetCommandLineA(), SW_SHOWDEFAULT);
}
#else
#pragma comment(linker, "/subsystem:windows")
#endif

#pragma comment(lib, "opengl32.lib")

void initOpenGL()
{
Shader ourShader("C:\\Users\\zhaoys-c\\source\\repos\\Dionysen\\LearnOpenGL\\OpenGL\\\\OpenGL\\shaders\\shader.vs", "C:\\Users\\zhaoys-c\\source\\repos\\Dionysen\\LearnOpenGL\\OpenGL\\\\OpenGL\\shaders\\shader.fs");
// Shader ourShader("../shaders/shader.vs","../shaders/shader.fs");
// set up vertex data (and buffer(s)) and configure vertex attributes
float vertices[] =
{
// positions // colors // texture coords (note that we changed them to 2.0f!)
0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // top right
0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // bottom right
-0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // bottom left
-0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f // top left
};

unsigned int indices[] =
{
0, 1, 3, // first triangle
1, 2, 3 // second triangle
};
unsigned int VBO, VAO, EBO;

glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glGenBuffers(1, &EBO);

glBindVertexArray(VAO);

glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void *)0);
glEnableVertexAttribArray(0);

glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void *)(3 * sizeof(float)));
glEnableVertexAttribArray(1);

glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void *)(6 * sizeof(float)));
glEnableVertexAttribArray(2);

unsigned int texture1, texture2;
glGenTextures(1, &texture1);
glBindTexture(GL_TEXTURE_2D, texture1);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

int width, height, nrChannels;
stbi_set_flip_vertically_on_load(true);
unsigned char *data = stbi_load("C:\\Users\\zhaoys-c\\source\\repos\\Dionysen\\LearnOpenGL\\OpenGL\\OpenGL\\Resources\\wall.jpg", &width, &height, &nrChannels, 0);
if (data)
{
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
}
else
{
std::cout << "Failed to load texture1" << std::endl;
}

stbi_image_free(data);

glGenTextures(1, &texture2);
glBindTexture(GL_TEXTURE_2D, texture2);
// set the texture wrapping parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // set texture wrapping to GL_REPEAT (default wrapping method)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
// set texture filtering parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
// load image, create texture and generate mipmaps
data = stbi_load("C:\\Users\\zhaoys-c\\source\\repos\\Dionysen\\LearnOpenGL\\OpenGL\\OpenGL\\Resources\\awesomeface.png", &width, &height, &nrChannels, 0);
if (data)
{
// note that the awesomeface.png has transparency and thus an alpha channel, so make sure to tell OpenGL the data type is of GL_RGBA
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
}
else
{
std::cout << "Failed to load texture2" << std::endl;
}
stbi_image_free(data);

ourShader.use();
glUniform1i(glGetUniformLocation(ourShader.ID, "texture1"), 0);
ourShader.setInt("texture2", 1);

// setting shader
ourShader.setFloat("visible", 0.1f);
ourShader.use();
// bind texture
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture1);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture2);
// bind vao
glBindVertexArray(VAO);
}

void render()
{
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
}

int WINAPI WinMain(_In_ HINSTANCE hinstance, _In_opt_ HINSTANCE hPrevInstance, _In_ PSTR szCmdLine, _In_ int ICmdShow)
{
WNDCLASSEX wndclass{};
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.style = 0;
wndclass.style = CS_HREDRAW | CS_VREDRAW; // ACTIVATES RELOAD ON REDRAW
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hinstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wndclass.lpszMenuName = 0;
wndclass.lpszClassName = "OpenGL Window";

RegisterClassEx(&wndclass);

HWND hwnd = CreateWindowEx(
0,
wndclass.lpszClassName,
"OpenGL Window",
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME,
CW_USEDEFAULT,
CW_USEDEFAULT, // 窗口左上角坐标为缺省值
CW_USEDEFAULT,
CW_USEDEFAULT, // 窗口的高度和宽度为缺省值
NULL,
NULL,
hinstance,
szCmdLine);

HDC hdc = GetDC(hwnd);

PIXELFORMATDESCRIPTOR pfd;

memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 32;
pfd.cStencilBits = 8;

int pixelFormat = ChoosePixelFormat(hdc, &pfd);
SetPixelFormat(hdc, pixelFormat, &pfd);

HGLRC hrc = wglCreateContext(hdc);
if (hrc)
{
wglMakeCurrent(hdc, hrc);
}
else
{
std::cout << "ERROR::HRC::CREATE_FAILED\n";
}

if (!gladLoadGL())
{
std::cout << "Could not initialize GLAD \n";
}
else
{
std::cout << "OpenGL Version " << GLVersion.major << std::endl;
}

// Init OpenGL
initOpenGL();

// Shows window
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);

MSG msg;
while (true)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
render();
SwapBuffers(hdc);
}
}
return (int)msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
switch (iMsg)
{
case WM_SIZE:
glViewport(0, 0, LOWORD(lParam), HIWORD(lParam));
// render();
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
HDC hdc = GetDC(hwnd);
HGLRC hglrc = wglGetCurrentContext();

glBindVertexArray(0);

wglMakeCurrent(NULL, NULL);
wglDeleteContext(hglrc);
ReleaseDC(hwnd, hdc);
PostQuitMessage(0);
break;
}

return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
+ + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/06/29/note/Framework/OpenGL/Win32andOpenGL/index.html b/2023/06/29/note/Framework/OpenGL/Win32andOpenGL/index.html new file mode 100644 index 000000000..68542bad5 --- /dev/null +++ b/2023/06/29/note/Framework/OpenGL/Win32andOpenGL/index.html @@ -0,0 +1,715 @@ + + + + + + + + + + + + 基于Win32的OpenGL1.0 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 基于Win32的OpenGL1.0 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

使用win32原生API实现OpenGL,可以取代glut等第三方库。

+

引自此博客

+ + +
// 使用win32原生API实现OpenGL
#include<Windows.h>
#include<gl/GL.h>

#pragma comment(lib, "opengl32.lib")

BOOL win32_regist_class(const char* class_name) // 注册win32窗口类
{
WNDCLASSEXA cs =
{
sizeof(WNDCLASSEXA),
CS_HREDRAW | CS_VREDRAW,
[](HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)->LRESULT
{
switch (msg) {
case WM_NCCREATE:
{
SetWindowLongPtrA(hwnd, GWLP_USERDATA, (LONG_PTR)((LPCREATESTRUCTA)lparam)->lpCreateParams);
break;
};
case WM_PAINT:
{
PAINTSTRUCT ps;
BeginPaint(hwnd, &ps);
EndPaint(hwnd, &ps);
break;
}
case WM_ERASEBKGND:
{
return TRUE;
}
case WM_DESTROY:
{
PostQuitMessage(0);
break;
}
default:
break;
}
return DefWindowProcA(hwnd, msg, wparam, lparam);
},
0,
0,
(HINSTANCE)GetModuleHandleA(nullptr),
nullptr,
LoadCursorA(nullptr,IDC_ARROW),
(HBRUSH)COLOR_WINDOW,
nullptr,
class_name,
nullptr
};
return RegisterClassExA(&cs);
}

// 创建win32窗口
HWND win32_create(const char* class_name, const char* window_name, int x, int y, int width, int height)
{
return CreateWindowExA(0, class_name, window_name, WS_OVERLAPPEDWINDOW | WS_VISIBLE, x, y, width, height, nullptr, nullptr, GetModuleHandle(nullptr), nullptr);
}

//获取可用于OpenGL绘制的DC
HDC win32_get_gl_dc(HWND hwnd)
{
PIXELFORMATDESCRIPTOR pfd = {};
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
auto hdc = GetDC(hwnd);
auto pixelFormat = ChoosePixelFormat(hdc, &pfd);
if (!pixelFormat)
{
ReleaseDC(hwnd, hdc);
return nullptr;
}
if (!SetPixelFormat(hdc, pixelFormat, &pfd))
{
ReleaseDC(hwnd, hdc);
return nullptr;
}
return hdc;
}

// 处理win32的消息
BOOL win32_peek_message(HWND hwnd)
{
MSG msg;
if (PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
return FALSE;
TranslateMessage(&msg);
DispatchMessageA(&msg);
}
return TRUE;
}

// 创建OpenGL的API
HGLRC gl_create(HDC hdc)
{
auto hglrc = wglCreateContext(hdc);
if (!hglrc)
return nullptr;
if (!wglMakeCurrent(hdc, hglrc))
{
return nullptr;
}
// 这里只获取了glCreateShader作为例子
auto glCreateShader = (GLuint(__stdcall*)(GLenum type))wglGetProcAddress("glCreateShader");
return hglrc;
}


// 渲染
void render(HWND hwnd, HDC hdc, HGLRC hglrc)
{
RECT rc;
GetClientRect(hwnd, &rc);
wglMakeCurrent(hdc, hglrc);
glViewport(0, 0, rc.right, rc.bottom);
glClearColor(0.4f, 0.5f, 0.4f, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glBegin(GL_TRIANGLE_STRIP);
glColor3f(1, 0, 0); glVertex2f(0.0f, 0.0f);
glColor3f(0, 1, 0); glVertex2f(0.5f, 0.5f);
glColor3f(0, 0, 1); glVertex2f(0.0f, 0.5f);
glEnd();
}

int main()
{
win32_regist_class("test");
auto hwnd = win32_create("test", "test", 100, 100, 500, 400);
auto hdc = win32_get_gl_dc(hwnd);
auto hglrc = gl_create(hdc);
while (true)
{
if (win32_peek_message(nullptr) == FALSE)
break;
render(hwnd, hdc, hglrc);
SwapBuffers(wglGetCurrentDC());
}
return 0;
}
+ +

基于Win32的OpenGL开发

win32程序的框架是winMain+WndProc,前者创建窗口同时实现窗口循环,后者实现消息处理。

+

如何在win32下使用OpenGL,窗口创建的过程中,哪一步加入OpenGL的扩展呢?

+

窗口创建时,由WM_CREATEWM_SIZEWM_PAINT三个消息依次产生,在WM_CREATE中增加窗口对OpenGL支持的代码,同时对OpenGL渲染环境做初始化,然后在WM_SIZE中实现OpenGL视图的变换,这样OpenGL绘图的前置工作就已经做完了,在WM_PAINT中就可以进行渲染了。

+
+

❗按照此博客的方法和代码跑不通

+
+

另一个思路是,在窗口创建完成时创建OpenGL的渲染环境,在消息循环中渲染(此时的消息循环等同于OpenGL的窗口循环),然后在消息处理函数中处理WM_SIZE来适应窗口大小:(引自基于Win32的OpenGL开发初探

+
#include <windows.h>
#include<GL/glut.h>

void drawScene(HDC* hdc);
void EnableOpenGL(HWND hWnd, HDC* hdc, HGLRC* hrc);
void DisableOpenGL(HWND hWnd, HDC hdc, HGLRC hrc);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //窗口函数声明

int CALLBACK WinMain(HINSTANCE hInstance, //WinMain函数说明
HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

char lpszClassName[] = "Windows"; //窗口类名
char lpszTitle[] = "Win32 Window"; //窗口标题名
WNDCLASS wndclass;
wndclass.style = CS_HREDRAW | CS_VREDRAW; //窗口类型为缺省类型
wndclass.lpfnWndProc = WndProc; //窗口处理函数为WndProc
wndclass.cbClsExtra = 0; //窗口类无扩展
wndclass.cbWndExtra = 0; //窗口实例无扩展
wndclass.hInstance = hInstance; //当前实例句柄
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //使用缺省图标
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); //窗口采用箭头光标
wndclass.hbrBackground = NULL; //窗口背景为白色
wndclass.lpszMenuName = NULL; //窗口中无菜单
wndclass.lpszClassName = lpszClassName; //窗口类名为'窗口实例'
if (!RegisterClass(&wndclass)) //注册窗口,若失败,则发出声音
{
MessageBeep(0);
return FALSE;
}
//创建窗口操作
HWND hwnd = CreateWindow(
lpszClassName,
lpszTitle, //窗口实例的标题名
WS_OVERLAPPEDWINDOW, //窗口的风格
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口左上角坐标为缺省值
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口的高度和宽度为缺省值
NULL, //此窗口无父窗口
NULL, //此窗口无主菜单
hInstance, //应用程序当前句柄
NULL); //不使用该值
ShowWindow(hwnd, SW_SHOW); //显示窗口
UpdateWindow(hwnd); //绘制用户区

HGLRC hRC; //绘制环境
HDC hDC; //设备环境
EnableOpenGL(hwnd, &hDC, &hRC);

MSG msg = { 0 }; //消息结构
while (GetMessage(&msg, NULL, 0, 0)) //消息循环
{
TranslateMessage(&msg);
DispatchMessage(&msg);
drawScene(&hDC);
}

DisableOpenGL(hwnd, hDC, hRC);
return 0; //程序终止时,将信息返回操作系统
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
RECT rcClient;

switch (message)
{
case WM_CREATE:
{
return 0;
}
break;
case WM_DESTROY:
{
PostQuitMessage(0); //调用该函数发出WM_QUIT消息
}
break;
case WM_SIZE:
{
GetClientRect(hwnd, &rcClient);
int w = rcClient.right - rcClient.left; // 获得客户区宽度
int h = rcClient.bottom - rcClient.top; // 获得客户区高度
glViewport(0, 0, w, h);
}
break;
case WM_TIMER:
{
InvalidateRect(hwnd, NULL, FALSE);
}
break;
default: //缺省消息处理函数
return DefWindowProc(hwnd, message, wParam, lParam);
}
return DefWindowProc(hwnd, message, wParam, lParam);
}

void drawScene(HDC* hdc) {

glClearColor(0.3f, 0.3f, 0.3f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);

glColor4f(1.0f, 0.0f, 0.0f, 0.0f);

glBegin(GL_QUADS);
glVertex3f(-0.6f, -0.6f, 0.0f);
glVertex3f(0.6f, -0.6f, 0.0f);
glVertex3f(0.6f, 0.6f, 0.0f);
glVertex3f(-0.6f, 0.6f, 0.0f);
glEnd();

SwapBuffers(*hdc);

Sleep(1);
}

void EnableOpenGL(HWND hwnd, HDC* hdc, HGLRC* hrc) {

*hdc = GetDC(hwnd);
PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR), // size of this pfd
1, // version number
PFD_DRAW_TO_WINDOW | // support window
PFD_SUPPORT_OPENGL | // support OpenGL
PFD_DOUBLEBUFFER, // double buffered
PFD_TYPE_RGBA, // RGBA type
24, // 24-bit color depth
0, 0, 0, 0, 0, 0, // color bits ignored
0, // no alpha buffer
0, // shift bit ignored
0, // no accumulation buffer
0, 0, 0, 0, // accum bits ignored
32, // 32-bit z-buffer
0, // no stencil buffer
0, // no auxiliary buffer
PFD_MAIN_PLANE, // main layer
0, // reserved
0, 0, 0 // layer masks ignored
};
int iPixelFormat = ChoosePixelFormat(*hdc, &pfd);
SetPixelFormat(*hdc, iPixelFormat, &pfd);

// create and enable the render context (RC)
*hrc = wglCreateContext(*hdc);
wglMakeCurrent(*hdc, *hrc);
}

void DisableOpenGL(HWND hwnd, HDC hdc, HGLRC hrc) {
wglMakeCurrent(nullptr, nullptr);
wglDeleteContext(hrc);
ReleaseDC(hwnd, hdc);
}
+ +

运行结果如下:

+image + + + +

使用Win32调用GL

#include <Windows.h>
#include <gl/GL.h>
#include <iostream>

const unsigned int windowsWidth = 800;
const unsigned int windowsHeight = 600;
bool fullScreen = true;

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);

int APIENTRY wWinMain(
_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{

char info_log[512]{};
char lpszClassName[] = "Windows";
char lpszTitle[] = "Win32 Window";
WNDCLASS wndclass{};
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = NULL;
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = lpszClassName;
if (!RegisterClass(&wndclass))
{
MessageBeep(0);
return FALSE;
}

HWND hwnd = CreateWindow(
lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
windowsWidth,
windowsHeight,
NULL,
NULL,
hInstance,
NULL);



// create context
HDC hDC = GetDC(hwnd);
HGLRC hRC{};

if (hDC)
{
int pixelFormat;
PIXELFORMATDESCRIPTOR pixelFormatDesc;

/* initialize bits to 0 */
memset(&pixelFormatDesc, 0, sizeof(PIXELFORMATDESCRIPTOR));
pixelFormatDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pixelFormatDesc.nVersion = 1;
pixelFormatDesc.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
pixelFormatDesc.iPixelType = PFD_TYPE_RGBA;
pixelFormatDesc.cColorBits = 32;
pixelFormatDesc.cAlphaBits = 8;
pixelFormatDesc.cDepthBits = 24;

pixelFormat = ChoosePixelFormat(hDC, &pixelFormatDesc);
if (pixelFormat)
{
if (SetPixelFormat(hDC, pixelFormat, &pixelFormatDesc))
hRC = wglCreateContext(hDC);
}
}
else
{
std::cout << "ERROR::HDC::CREATE_FAILED\n" << info_log << std::endl;
}
if (hRC) { // 待看
wglMakeCurrent(hDC, hRC);
}
else
{
std::cout << "ERROR::HRC::CREATE_FAILED\n" << info_log << std::endl;
}
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);

//if (!gladLoadGL())
//{
// std::cout << "Could not initialize GLAD \n";
//}
//else {
// std::cout << "OpenGL Version " << GLVersion.major << std::endl;
//}


MSG msg = { 0 };
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
wglMakeCurrent(hDC, NULL);
wglDeleteContext(hRC);
if(hDC!=NULL)
ReleaseDC(hwnd, hDC);

return 0;
}

static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
LRESULT result = 0;
switch (msg)
{
case WM_PAINT:
PAINTSTRUCT ps;

//render();
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2i(0, 1);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex2i(-1, -1);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex2i(1, -1);
glEnd();
glFlush();

BeginPaint(hwnd, &ps);
EndPaint(hwnd, &ps);

break;
case WM_SIZE:
glViewport(0, 0, LOWORD(lParam), HIWORD(lParam));
break;
case WM_KEYDOWN:
/* ESC: Escape */
if (wParam == 27)
PostMessage(hwnd, WM_CLOSE, 0, 0);
/* F11: Fullscreen */
else if (wParam == 122)
{
DWORD style = GetWindowLong(hwnd, GWL_STYLE);
static int windowX, windowY, windowWidth, windowHeight = { 0 };
if (fullScreen) {
RECT rect;
MONITORINFO mi = { sizeof(mi) };
GetWindowRect(hwnd, &rect);
windowX = rect.left;
windowY = rect.top;
windowWidth = rect.right - rect.left;
windowHeight = rect.bottom - rect.top;
GetMonitorInfo(MonitorFromWindow(hwnd, MONITOR_DEFAULTTOPRIMARY), &mi);
SetWindowLong(hwnd, GWL_STYLE, style & ~WS_OVERLAPPEDWINDOW);
SetWindowPos(hwnd, HWND_TOP, mi.rcMonitor.left, mi.rcMonitor.top,
mi.rcMonitor.right - mi.rcMonitor.left,
mi.rcMonitor.bottom - mi.rcMonitor.top,
SWP_NOOWNERZORDER | SWP_FRAMECHANGED | SWP_SHOWWINDOW);
}
else
{
MONITORINFO mi = { sizeof(mi) };
UINT flags = SWP_NOZORDER | SWP_FRAMECHANGED | SWP_SHOWWINDOW;
GetMonitorInfo(MonitorFromWindow(hwnd, MONITOR_DEFAULTTOPRIMARY), &mi);
SetWindowLong(hwnd, GWL_STYLE, style | WS_OVERLAPPEDWINDOW);
SetWindowPos(hwnd, HWND_NOTOPMOST, windowX, windowY, windowWidth, windowHeight, flags);
}
fullScreen = !fullScreen;
}
break;
case WM_CLOSE:
DestroyWindow(hwnd);
PostQuitMessage(0);
break;
default:
result = DefWindowProc(hwnd, msg, wParam, lParam);
}
return result;
}
+ + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/07/01/note/Framework/OpenGL/opengl-basic/index.html b/2023/07/01/note/Framework/OpenGL/opengl-basic/index.html new file mode 100644 index 000000000..3ee729530 --- /dev/null +++ b/2023/07/01/note/Framework/OpenGL/opengl-basic/index.html @@ -0,0 +1,908 @@ + + + + + + + + + + + + OpenGL-2 基础 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ OpenGL-2 基础 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

着色器需要用特定的语言编写,GLSL是一种类C的语言,专门用来写着色器程序。

+
+

程序结构:

+
    +
  1. 声明版本
  2. +
  3. 输入和输出变量
  4. +
  5. uniform和main函数
  6. +
+ + +

着色器

一个典型的着色器:

+
#version version_number
in type in_variable_name;
in type in_variable_name;

out type out_variable_name;

uniform type uniform_name;

int main()
{
// 处理输入并进行一些图形操作
...
// 输出处理过的结果到输出变量
out_variable_name = weird_stuff_we_processed;
}
+ +

对于顶点着色器,输入变量即顶点属性。

+

能声明的顶点属性是有上限的,一般由硬件来决定。

+

你可以查询GL_MAX_VERTEX_ATTRIBS来获取具体的上限:

+
int nrAttributes;
glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrAttributes);
std::cout << "Maximum nr of vertex attributes supported: " << nrAttributes << std::endl;
+ +
+

通常情况下它至少会返回16个,大部分情况下是够用了。

+
+

变量

GLSL中包含C等其它语言大部分的默认基础数据类型:intfloatdoubleuintbool。GLSL也有两种容器类型,分别是向量(Vector)和矩阵(Matrix)。

+
向量

GLSL中的向量是一个可以包含有2、3或者4个分量的容器,分量的类型可以是前面默认基础类型的任意一个。它们可以是下面的形式(n代表分量的数量):

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
类型含义
vecn包含n个float分量的默认向量(因为float是默认的数据类型)
bvecn包含n个bool分量的向量
ivecn包含n个int分量的向量
uvecn包含n个unsigned int分量的向量
dvecn包含n个double分量的向量
+

多数情况使用vecn,这样已经够用了。

+

一个向量的分量可以通过vec.x这种方式获取,这里x是指这个向量的第一个分量。你可以分别使用.x.y.z.w来获取它们的第1、2、3、4个分量。GLSL也允许你对颜色使用rgba,或是对纹理坐标使用stpq访问相同的分量。

+

向量这一数据类型也允许一些有趣而灵活的分量选择方式,叫做重组(Swizzling)。重组允许这样的语法:

+
vec2 someVec;
vec4 differentVec = someVec.xyxx;
vec3 anotherVec = differentVec.zyw;
vec4 otherVec = someVec.xxxx + anotherVec.yxzy;
+ +

输入与输出

GLSL定义了inout关键字专门来实现输入和输出。

+

layout (location = 0)定义一个标识,这样才能链接到顶点数据。

+
+

你也可以忽略layout (location = 0)标识符,通过在OpenGL代码中使用glGetAttribLocation查询属性位置值(Location),但着色器中设置它们会更容易理解而且节省你(和OpenGL)的工作量。

+
+

片段着色器,它需要一个vec4颜色输出变量,因为片段着色器需要生成一个最终输出的颜色。

+

如果你在片段着色器没有定义输出颜色,OpenGL会把你的物体渲染为黑色(或白色)。

+

如果我们打算从一个着色器向另一个着色器发送数据,我们必须在发送方着色器中声明一个输出,在接收方着色器中声明一个类似的输入。当类型和名字都一样的时候,OpenGL就会把两个变量链接到一起,它们之间就能发送数据了(这是在链接程序对象时完成的)。

+

顶点着色器

+
#version 330 core
layout (location = 0) in vec3 aPos; // 位置变量的属性位置值为0

out vec4 vertexColor; // 为片段着色器指定一个颜色输出

void main()
{
gl_Position = vec4(aPos, 1.0); // 注意我们如何把一个vec3作为vec4的构造器的参数
vertexColor = vec4(0.5, 0.0, 0.0, 1.0); // 把输出变量设置为暗红色
}
+ +

片段着色器

+
#version 330 core
out vec4 FragColor;

in vec4 vertexColor; // 从顶点着色器传来的输入变量(名称相同、类型相同)

void main()
{
FragColor = vertexColor;
}
+ +

顶点着色器中声明了一个vertexColor变量作为vec4输出,并在片段着色器中声明了一个类似的vertexColor。由于它们名字相同且类型相同,片段着色器中的vertexColor就和顶点着色器中的vertexColor链接了。由于我们在顶点着色器中将颜色设置为深红色,最终的片段也是深红色的。

+

结果如下:

+image + +

Uniform

Uniform是一种从CPU中的应用向GPU中的着色器发送数据的方式,但uniform和顶点属性有些不同。

+

uniform是全局的(Global)。

+
    +
  • uniform变量必须在每个着色器程序对象中都是独一无二的,而且它可以被着色器程序的任意着色器在任意阶段访问。

    +
  • +
  • 无论你把uniform值设置成什么,uniform会一直保存它们的数据,直到它们被重置或更新。

    +
  • +
+
#version 330 core
out vec4 FragColor;

uniform vec4 ourColor; // 在OpenGL程序代码中设定这个变量

void main()
{
FragColor = ourColor;
}
+ +

定义了一个uniform的vec4,即ourColor,并且把片段着色器的输出颜色设置为uniform的值,之后无需再通过顶点着色器修改它,而可以直接在程序中修改:

+
float timeValue = glfwGetTime(); // 获取运行的秒数
float greenValue = (sin(timeValue) / 2.0f) + 0.5f; // 使用sin函数让颜色从0-1之间变化,结果储存在greenValue中
int vertexColorLocation = glGetUniformLocation(shaderProgram, "ourColor"); // 通过函数glGetUniformLocation查询uniform ourColor的位置值,找不到返回-1
glUseProgram(shaderProgram);
glUniform4f(vertexColorLocation, 0.0f, greenValue, 0.0f, 1.0f); // 设置uniform的值
+ +

注意:查询uniform地址不要求你之前使用过着色器程序,但是更新一个uniform之前你必须先使用程序(调用glUseProgram()),因为它是在当前激活的着色器程序中设置uniform的。

+
+

❗如果你声明了一个uniform却在GLSL代码中没用过,编译器会静默移除这个变量,导致最后编译出的版本中并不会包含它,这可能导致几个非常麻烦的错误,记住这点!

+
+

修改后的全部源码为:

+
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
#include <cmath>

void framebuffer_size_callback(GLFWwindow* window, int width, int height); //回调函数的声明
void processInput(GLFWwindow* window); // 处理对窗口的输入

const char *vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
"void main()\n"
"{\n"
"gl_Position = vec4(aPos, 1.0);\n"
"}\n\0";


// 创建片段着色器程序的源码,使用c风格的常量字符串存储
const char* fragmentShaderSource =
"#version 330 core\n"
"out vec4 FragColor;\n"
"uniform vec4 ourColor;\n"
"void main() {\n"
//"FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n" // 此处设置片段颜色为黄色
"FragColor = ourColor;\n"
"}\n\0";

int main(void) {
// -------------- 1. glfw的初始化 ----------------

if (!glfwInit()) {
return -1;
}

// --------------- 2. 使用glfw创建窗口 ---------------
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
if (window == NULL) {
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}

glfwMakeContextCurrent(window); // 此函数使指定窗口的 OpenGL 或 OpenGL ES 上下文成为调用线程的当前上下文
glfwSetFramebufferSizeCallback(
window,
framebuffer_size_callback); // 回调函数,保证每次窗口大小调整时,重新绘制
// --------------- 3. glad:加载OpenGL所有的函数指针 ---------------
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}

// --------------- 4. 创建和编译着色器 ---------------
unsigned int vertexShader; // 创建顶点着色器索引
vertexShader = glCreateShader(GL_VERTEX_SHADER); // 创建顶点着色器
glShaderSource(
vertexShader, 1, &vertexShaderSource,
NULL); // 为顶点着色器添加源码,第二个参数是添加的源码中字符串的数量,第三个先设置为NULL
glCompileShader(vertexShader); // 编译顶点着色器

int success; // 创建编译状态指示变量
char info_log[512]; // 创建用以存储log的数组
glGetShaderiv(vertexShader, GL_COMPILE_STATUS,
&success); // 获取状态和log,输出到变量和数组中
if (!success) { // 如果编译失败,打印错误信息和log
glGetShaderInfoLog(vertexShader, 512, NULL, info_log);
std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n"
<< info_log << std::endl;
}

unsigned int fragmentShader;
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
glCompileShader(fragmentShader);

glGetShaderiv(fragmentShader, GL_COMPILE_STATUS,
&success); // 获取状态和log,输出到变量和数组中
if (!success) { // 如果编译失败,打印错误信息和log
glGetShaderInfoLog(fragmentShader, 512, NULL, info_log);
std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n"
<< info_log << std::endl;
}
// --------------- 5. 链接着色器 ---------------

unsigned int shaderProgram;
shaderProgram = glCreateProgram();

// 把着色器添加到着色器程序中
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram); // 链接着色器程序

glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success); // 异常检测
if (!success) {
glGetProgramInfoLog(shaderProgram, 512, NULL, info_log);
std::cout << "ERROR::SHADER::PROGRAM::LINK_FAILED\n"
<< info_log << std::endl;
}

glUseProgram(
shaderProgram); // 调用此函数后,渲染和着色器调用都会使用此前所写的着色器了
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader); // 链接完成之后就可以删除着色器了

// --------------- 6. 创建顶点数据缓冲区 ---------------
float vertices[] =
{
-0.5f, -0.5f, 0.0f, // left
0.5f, -0.5f, 0.0f, // right
0.0f, 0.5f, 0.0f
}; // top

unsigned int VBO, VAO;

glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO); // 创建缓冲区
glBindVertexArray(VAO);

glBindBuffer(GL_ARRAY_BUFFER, VBO); // 绑定缓冲区
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

// -------- 告诉GPU如何读取顶点数据 ----------
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float),
(void*)0);
glEnableVertexAttribArray(0); // 启用顶点属性

glBindVertexArray(VAO);

// --------------- 7. 窗口绘制循环 ---------------
while (!glfwWindowShouldClose(window)) {
// input
// -----
processInput(window);
// render
// -----
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

glUseProgram(shaderProgram);

// 更新uniform颜色
float timeValue = glfwGetTime();
float greenValue = static_cast<float>(sin(timeValue) / 2.0 + 0.5);
int vertexColorLocation = glGetUniformLocation(shaderProgram, "ourColor");
glUniform4f(vertexColorLocation, 0.0f, greenValue, 0.0f, 1.0f);

glDrawArrays(GL_TRIANGLES, 0, 3);

//glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glfwSwapBuffers(window);
glfwPollEvents();
}

// glfw: terminate, clearing all previously allocated GLFW resources.
glDeleteVertexArrays(1, &VAO);
glDeleteBuffers(1, &VBO);
glDeleteProgram(shaderProgram);

glfwTerminate();
return 0;
}
// process all input: query GLFW whether relevant keys are pressed/released this
// frame and react accordingly
// -----------------------
void processInput(GLFWwindow* window) {
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}

// glfw: whenever the window size changed (by OS or user resize) this callback
// function executes
// ----------------------
void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
// make sure the viewport matches the new window dimensions; note that width
// and height will be significantly larger than specified on retina
// displays.
glViewport(0, 0, width, height);
}
+ +

运行结果为一个三角形,颜色在绿色和黑色之间周期性变换:

+image + +image + +

更多属性

把颜色数据添加为3个float值至vertices数组,把三角形的三个角分别指定为红色、绿色和蓝色:

+
float vertices[] = {
// 位置 // 颜色
0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, // 右下
-0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, // 左下
0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f // 顶部
};
+ +

由于现在有更多的数据要发送到顶点着色器,有必要去调整一下顶点着色器,使它能够接收颜色值作为一个顶点属性输入。需要注意的是用layout标识符来把aColor属性的位置值设置为1:

+
#version 330 core
layout (location = 0) in vec3 aPos; // 位置变量的属性位置值为 0
layout (location = 1) in vec3 aColor; // 颜色变量的属性位置值为 1

out vec3 ourColor; // 向片段着色器输出一个颜色

void main()
{
gl_Position = vec4(aPos, 1.0);
ourColor = aColor; // 将ourColor设置为我们从顶点数据那里得到的输入颜色
}
+ +

不再使用uniform来传递片段的颜色了,现在使用ourColor输出变量,必须再修改一下片段着色器:

+
#version 330 core
out vec4 FragColor;
in vec3 ourColor;

void main()
{
FragColor = vec4(ourColor, 1.0);
}
+ +

更新一下顶点格式:

+
unsigned int VBO, VAO;

glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO); // 创建缓冲区
glBindVertexArray(VAO);

glBindBuffer(GL_ARRAY_BUFFER, VBO); // 绑定缓冲区
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

// -------- 告诉GPU如何读取顶点数据 ----------
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0); // 启用顶点属性

glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float))); // 最后一个是偏移量,因为前面的是位置,后面的是颜色
glEnableVertexAttribArray(1);

glUseProgram(shaderProgram);
+ +

绘制:

+
while (!glfwWindowShouldClose(window)) {
// input
// -----
processInput(window);
// render
// -----
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

glBindVertexArray(VAO);
glDrawArrays(GL_TRIANGLES, 0, 3);

//glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glfwSwapBuffers(window);
glfwPollEvents();
}
+ +

结果为:

+

image

+

只给定了三个位置和三个颜色,却出现了一个类似于调色一样的东西,这是因为光栅化阶段会进行插值,生成比给定的顶点多得多的顶点,比如可能由上万个。

+

着色器类

主要是读取着色器程序的源码,编译,创建着色器程序,链接,有一个使用着色器的函数。

+
#ifndef SHADER_H
#define SHADER_H

#include <glad/glad.h>

#include <string>
#include <fstream>
#include <sstream>
#include <iostream>

class Shader
{
public:
unsigned int ID;
// constructor generates the shader on the fly
// ------------------------------------------------------------------------
Shader(const char* vertexPath, const char* fragmentPath)
{
// 1. retrieve the vertex/fragment source code from filePath
std::string vertexCode;
std::string fragmentCode;
std::ifstream vShaderFile;
std::ifstream fShaderFile;
// ensure ifstream objects can throw exceptions:
vShaderFile.exceptions (std::ifstream::failbit | std::ifstream::badbit);
fShaderFile.exceptions (std::ifstream::failbit | std::ifstream::badbit);
try
{
// open files
vShaderFile.open(vertexPath);
fShaderFile.open(fragmentPath);
std::stringstream vShaderStream, fShaderStream;
// read file's buffer contents into streams
vShaderStream << vShaderFile.rdbuf();
fShaderStream << fShaderFile.rdbuf();
// close file handlers
vShaderFile.close();
fShaderFile.close();
// convert stream into string
vertexCode = vShaderStream.str();
fragmentCode = fShaderStream.str();
}
catch (std::ifstream::failure& e)
{
std::cout << "ERROR::SHADER::FILE_NOT_SUCCESSFULLY_READ: " << e.what() << std::endl;
}
const char* vShaderCode = vertexCode.c_str();
const char * fShaderCode = fragmentCode.c_str();
// 2. compile shaders
unsigned int vertex, fragment;
// vertex shader
vertex = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertex, 1, &vShaderCode, NULL);
glCompileShader(vertex);
checkCompileErrors(vertex, "VERTEX");
// fragment Shader
fragment = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragment, 1, &fShaderCode, NULL);
glCompileShader(fragment);
checkCompileErrors(fragment, "FRAGMENT");
// shader Program
ID = glCreateProgram();
glAttachShader(ID, vertex);
glAttachShader(ID, fragment);
glLinkProgram(ID);
checkCompileErrors(ID, "PROGRAM");
// delete the shaders as they're linked into our program now and no longer necessary
glDeleteShader(vertex);
glDeleteShader(fragment);
}
// activate the shader
// ------------------------------------------------------------------------
void use()
{
glUseProgram(ID);
}
// utility uniform functions
// ------------------------------------------------------------------------
void setBool(const std::string &name, bool value) const
{
glUniform1i(glGetUniformLocation(ID, name.c_str()), (int)value);
}
// ------------------------------------------------------------------------
void setInt(const std::string &name, int value) const
{
glUniform1i(glGetUniformLocation(ID, name.c_str()), value);
}
// ------------------------------------------------------------------------
void setFloat(const std::string &name, float value) const
{
glUniform1f(glGetUniformLocation(ID, name.c_str()), value);
}

private:
// utility function for checking shader compilation/linking errors.
// ------------------------------------------------------------------------
void checkCompileErrors(unsigned int shader, std::string type)
{
int success;
char infoLog[1024];
if (type != "PROGRAM")
{
glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(shader, 1024, NULL, infoLog);
std::cout << "ERROR::SHADER_COMPILATION_ERROR of type: " << type << "\n" << infoLog << "\n -- --------------------------------------------------- -- " << std::endl;
}
}
else
{
glGetProgramiv(shader, GL_LINK_STATUS, &success);
if (!success)
{
glGetProgramInfoLog(shader, 1024, NULL, infoLog);
std::cout << "ERROR::PROGRAM_LINKING_ERROR of type: " << type << "\n" << infoLog << "\n -- --------------------------------------------------- -- " << std::endl;
}
}
}
};
#endif
+ +

使用着色器时,要用绝对路径。

+

纹理

纹理坐标的范围通常是从(0, 0)到(1, 1),超出部分可以设置环绕方式:

+ + + + + + + + + + + + + + + + + + + + + + + +
环绕方式描述
GL_REPEAT对纹理的默认行为。重复纹理图像。
GL_MIRRORED_REPEAT和GL_REPEAT一样,但每次重复图片是镜像放置的。
GL_CLAMP_TO_EDGE纹理坐标会被约束在0到1之间,超出的部分会重复纹理坐标的边缘,产生一种边缘被拉伸的效果。
GL_CLAMP_TO_BORDER超出的坐标为用户指定的边缘颜色。
+

image

+

纹理的生成过程

加载stb_image库

+
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
+ +

添加一个纹理

+
unsigned int textureID;
glGenTextures(1, &textureID);

int width, height, nrComponents;
unsigned char* data = stbi_load(path, &width, &height, &nrComponents, 0);
if (data)
{
GLenum format = {};
if (nrComponents == 1)
format = GL_RED;
else if (nrComponents == 3)
format = GL_RGB;
else if (nrComponents == 4)
format = GL_RGBA;

glBindTexture(GL_TEXTURE_2D, textureID);
glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

stbi_image_free(data);
}
else
{
std::cout << "Texture failed to load at path: " << path << std::endl;
stbi_image_free(data);
}
+ +

此时纹理对象储存在一个可以通过textureID找到的地方。在顶点着色器中传入纹理桌标,再传给片段着色器:

+
#version 330 core
out vec4 FragColor;

in vec3 ourColor;
in vec2 TexCoord;

uniform sampler2D ourTexture;

void main()
{
FragColor = texture(ourTexture, TexCoord);
}
+ +

片段着色器是通过采样器访问纹理对象的。

+

采样器(Sampler) :它以纹理类型作为后缀,比如sampler1Dsampler3D,或在我们的例子中的sampler2D。我们可以简单声明一个uniform sampler2D把一个纹理添加到片段着色器中,稍后我们会把纹理赋值给这个uniform。

+

用GLSL内建的texture函数来采样纹理的颜色,它第一个参数是纹理采样器,第二个参数是对应的纹理坐标。

+
glBindTexture(GL_TEXTURE_2D, texture);
+ +

绘制图形前,绑定纹理,就会自动地把纹理赋值给片段着色器的采样器。

+
+

在一些驱动中,必须要对每个采样器uniform都附加上纹理单元才可以。

+
+

纹理单元

一个片段着色器可以有多个纹理,一个纹理的位置通常称为一个纹理单元。默认的纹理单元是0,是默认激活的,因此只有一个时不需要手动分配位置和激活。

+
glActiveTexture(GL_TEXTURE0); // 在绑定纹理之前先激活纹理单元
glBindTexture(GL_TEXTURE_2D, texture);
+ +

激活纹理单元之后,接下来的glBindTexture函数调用会绑定这个纹理到当前激活的纹理单元,纹理单元GL_TEXTURE0默认总是被激活,所以我们在前面的例子里当我们使用glBindTexture的时候,无需激活任何纹理单元。

+
+

OpenGL至少保证有16个纹理单元供你使用,也就是说你可以激活从GL_TEXTURE0到GL_TEXTRUE15。它们都是按顺序定义的,所以我们也可以通过GL_TEXTURE0 + 8的方式获得GL_TEXTURE8,这在当我们需要循环一些纹理单元的时候会很有用。

+
+

如果一个片段着色器绑定多个纹理单元,应该这样做:

+
unsigned int texture1;
glGenTextures(1, &texture1);
... // 创建纹理1
unsigned int texture2;
glGenTextures(1, &texture2);
... // 创建纹理2
+ +

在片段着色器中创建两个采样器

+
uniform sampler2D sampler_texture1;
uniform sampler2D sampler_texture2;
+ +

告诉OpenGL采样器对应的纹理单元

+
ourShader.use(); // 不要忘记在设置uniform变量之前激活着色器程序!
ourShader.setInt("sampler_texture1", 0); // 使用着色器类设置
ourShader.setInt("sampler_texture2", 1);
// 也可以手动设置
glUniform1i(glGetUniformLocation(ourShader.ID, "sampler_texture1"), 0);
glUniform1i(glGetUniformLocation(ourShader.ID, "sampler_texture2"), 1);
+ +

然后再渲染循环中分别激活并绑定纹理到对应的纹理单元

+
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture1);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture2);
+ +

最后片段着色器可以使用纹理了

+
FragColor = mix(texture(texture1, TexCoord), texture(texture2, TexCoord), 0.2);
+ +

所以总体的连接在于,创建的纹理可以通过ID绑定到对应的纹理单元上,设置采样器分配纹理单元,最后通过texture函数采样纹理,赋值给片段。

+

变换

理论上,变换共有三种:旋转,位移,缩放。

+
+

矩阵求逆是一项对于着色器开销很大的运算,因为它必须在场景中的每一个顶点上进行,所以应该尽可能地避免在着色器中进行求逆运算。以学习为目的的话这样做还好,但是对于一个高效的应用来说,你最好先在CPU上计算出法线矩阵,再通过uniform把它传递给着色器(就像模型矩阵一样)。

+
+
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
// ---------------
glm::vec4 vec(1.0f, 0.0f, 0.0f, 1.0f);
glm::mat4 trans = glm::mat4(1.0f); // 矩阵的初始化是必要的
trans = glm::translate(trans, glm::vec3(1.0f, 1.0f, 0.0f));
vec = trans * vec;
std::cout << vec.x << vec.y << vec.z << std::endl;
// 以上代码是创建一个向量,然后用一个变换矩阵乘以此向量,达到变换向量的目的,输出结果为210
+ +

实现3D

// create transformations
glm::mat4 model = glm::mat4(1.0f);
glm::mat4 view = glm::mat4(1.0f);
glm::mat4 projection = glm::mat4(1.0f);
model = glm::rotate(model, (float)glfwGetTime() * glm::radians(50.0f), glm::vec3(0.5f, 1.0f, 0.0f));
// 注意,我们将矩阵向我们要进行移动场景的反方向移动。
view = glm::translate(view, glm::vec3(0.0f, 0.0f, -3.0f));
projection = glm::perspective(glm::radians(45.0f), (float)SCR_WIDTH / (float)SCR_HEIGHT, 0.1f, 100.0f);

ourShader.setMat4("model", model);
ourShader.setMat4("view", view);
ourShader.setMat4("projection", projection);
+ +

注意,矩阵的运算是从右向左的,因此顶点着色器中相乘时应为:

+
gl_Position = projection * view * model * vec4(aPos, 1.0);
+ +

摄像机类

代码实现:

+
#ifndef CAMERA_H
#define CAMERA_H

#include <glad/glad.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>

#include <vector>

// 定义一些可能用到的常量
enum Camera_Movement { FORWARD, BACKWARD, LEFT, RIGHT, UP, DOWN, FASTER_FORWARD, FASTER_BACKWARD, FASTER_LEFT, FASTER_RIGHT };

// 摄像机默认值
const float YAW = -90.0f; // 偏航角度
const float PITCH = 0.0f; // 上仰角度
const float SPEED = 5.0f; // 摄像机移动速度,虽然实际是整个空间的物体同时在移动
const float SENSITIVITY = 0.1f; // 鼠标灵敏度,用以计算镜头转向
const float ZOOM = 45.0f; // 视野,观察空间的大小

// An abstract camera class that processes input and calculates the
// corresponding Euler Angles, Vectors and Matrices for use in OpenGL
class Camera {
public:
// 摄像机属性
glm::vec3 Position; // 摄像机位置向量
glm::vec3 Front; // 方向向量,摄像机指向的目标的方向
glm::vec3 Up; // 上向量,也即y轴正方向,叉乘方向向量可得右向量
glm::vec3 Right; // 右向量,摄像机空间x轴的正方向
glm::vec3 WorldUp; // 上向量
// 有了三个互相垂直的轴,外加一个平移向量,即可创建一个矩阵,可以用这个矩阵乘以任何向量来将其变换到那个空间

// euler Angles
float Yaw;
float Pitch;
// camera options
float MovementSpeed;
float MouseSensitivity;
float Zoom;

// 使用一个向量创建摄像机:
// 主要参数为:位置,默认为原点;上向量,默认为010;方向向量为00-1,
// 其他均可以为默认
Camera(glm::vec3 position = glm::vec3(0.0f, 0.0f, 0.0f),
glm::vec3 up = glm::vec3(0.0f, 1.0f, 0.0f), float yaw = YAW,
float pitch = PITCH)
: Front(glm::vec3(0.0f, 0.0f, -1.0f)), MovementSpeed(SPEED),
MouseSensitivity(SENSITIVITY), Zoom(ZOOM) {
Position = position;
WorldUp = up;
Yaw = yaw;
Pitch = pitch;
updateCameraVectors();
}
// 使用标量创建摄像机
// 主要参数为:位置,默认为原点;上向量,默认为010;方向向量为00-1,
// 其他均可以为默认
Camera(float posX, float posY, float posZ, float upX, float upY, float upZ,
float yaw, float pitch)
: Front(glm::vec3(0.0f, 0.0f, -1.0f)), MovementSpeed(SPEED),
MouseSensitivity(SENSITIVITY), Zoom(ZOOM) {
Position = glm::vec3(posX, posY, posZ);
WorldUp = glm::vec3(upX, upY, upZ);
Yaw = yaw;
Pitch = pitch;
updateCameraVectors();
}

// returns the view matrix calculated using Euler Angles and the LookAt
// Matrix
glm::mat4 GetViewMatrix() // 生成观察矩阵
{
// return glm::lookAt(Position, Position + Front, Up);
// //
// lookat函数只需要一个位置,一个目标,和一个上向量,它会自己创建一个观察矩阵,此观察矩阵点乘空间中的物体,即可将物体变换到此观察空间中

// ------------ 以下为自己的lookat:
// 1. Position = known
// 2. Calculate cameraDirection
glm::vec3 zaxis = glm::normalize(-Front);
// 3. Get positive right axis vector
glm::vec3 xaxis =
glm::normalize(glm::cross(glm::normalize(WorldUp), zaxis));
// 4. Calculate camera up vector
glm::vec3 yaxis = glm::cross(zaxis, xaxis);

// Create translation and rotation matrix
// In glm we access elements as mat[col][row] due to column-major layout
glm::mat4 translation = glm::mat4(1.0f); // Identity matrix by default
translation[3][0] = -Position.x; // Third column, first row
translation[3][1] = -Position.y;
translation[3][2] = -Position.z;
glm::mat4 rotation = glm::mat4(1.0f);
rotation[0][0] = xaxis.x; // First column, first row
rotation[1][0] = xaxis.y;
rotation[2][0] = xaxis.z;
rotation[0][1] = yaxis.x; // First column, second row
rotation[1][1] = yaxis.y;
rotation[2][1] = yaxis.z;
rotation[0][2] = zaxis.x; // First column, third row
rotation[1][2] = zaxis.y;
rotation[2][2] = zaxis.z;
return rotation * translation;
}

// processes input received from any keyboard-like input system. Accepts
// input parameter in the form of camera defined ENUM (to abstract it from
// windowing systems)
void ProcessKeyboard(Camera_Movement direction, float deltaTime) {
float velocity = MovementSpeed * deltaTime; // 设定速度
// 根据方向调整方向向量
if (direction == FORWARD)
Position += Front * velocity;
if (direction == BACKWARD)
Position -= Front * velocity;
if (direction == LEFT)
Position -= Right * velocity;
if (direction == RIGHT)
Position += Right * velocity;
if (direction == UP)
Position.y += velocity;
if (direction == DOWN)
Position.y -= velocity;
// Position.y = 0.0f; // 确保不会偏离xz平面

// Setting faster
if (direction == FASTER_FORWARD)
Position += Front * (velocity * 10);
if (direction == FASTER_BACKWARD)
Position -= Front * (velocity * 10);
if (direction == FASTER_LEFT)
Position -= Right * (velocity * 10);
if (direction == FASTER_RIGHT)
Position += Right * (velocity * 10);
}

// processes input received from a mouse input system. Expects the offset
// value in both the x and y direction.
void ProcessMouseMovement(float xoffset, float yoffset,
GLboolean constrainPitch = true) {
xoffset *= MouseSensitivity; // x方向的鼠标偏离
yoffset *= MouseSensitivity; // y方向的鼠标偏离

Yaw += xoffset; // 偏航
Pitch += yoffset; // 仰角

if (constrainPitch) // 确保仰角足够大时屏幕不会被翻转
{
if (Pitch > 89.0f)
Pitch = 89.0f;
if (Pitch < -89.0f)
Pitch = -89.0f;
}

// update Front, Right and Up Vectors using the updated Euler angles
updateCameraVectors();
}

// processes input received from a mouse scroll-wheel event. Only requires
// input on the vertical wheel-axis
void ProcessMouseScroll(float yoffset) // 处理缩放
{
Zoom -= (float)yoffset;
if (Zoom < 1.0f)
Zoom = 1.0f;
if (Zoom > 45.0f)
Zoom = 45.0f;
}

private:
// 从更新后的相机的欧拉角计算方向向量
void updateCameraVectors() {
// calculate the new Front vector
glm::vec3 front;
front.x = cos(glm::radians(Yaw)) * cos(glm::radians(Pitch));
front.y = sin(glm::radians(Pitch));
front.z = sin(glm::radians(Yaw)) * cos(glm::radians(Pitch));
Front = glm::normalize(front);
// 同时重新计算了右向量和上向量
Right = glm::normalize(glm::cross(Front, WorldUp));
// 将向量归一化,因为你向上或向下看的次数越多,它们的长度就越接近0,这会导致移动速度变慢。
Up = glm::normalize(glm::cross(Right, Front));
}
};
#endif
+ + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/07/03/note/Experience/unicode-error/index.html b/2023/07/03/note/Experience/unicode-error/index.html new file mode 100644 index 000000000..2011da80e --- /dev/null +++ b/2023/07/03/note/Experience/unicode-error/index.html @@ -0,0 +1,681 @@ + + + + + + + + + + + + VSCode - argument of type "const char *" is incompatible with parameter of type "LPCWSTR" 错误的解决方法 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ VSCode - argument of type "const char *" is incompatible with parameter of type "LPCWSTR" 错误的解决方法 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

主要原因是字符集的问题,不使用unicode字符集即可。

+

在VSCode中,删除c_cpp_properties.json中的宏UNICODE_UNICODE

+ + +
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
+ +

之后:

+
"defines": [
"_DEBUG"
],
+ + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/07/04/note/Experience/waydroid/index.html b/2023/07/04/note/Experience/waydroid/index.html new file mode 100644 index 000000000..d91313c26 --- /dev/null +++ b/2023/07/04/note/Experience/waydroid/index.html @@ -0,0 +1,742 @@ + + + + + + + + + + + + 使用Waydroid在Linux上运行x86_64的安卓软件 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 使用Waydroid在Linux上运行x86_64的安卓软件 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

Windows有WSA,Linux有Waydroid,两者的性能损失之小都相当可观。

+

虽然两者目前都不够成熟,有许多需要改进之处,但还是非常好用的。

+

环境

image + +
$ uname -a
Linux dionysen-latitude7430 6.1.31-2-MANJARO #1 SMP PREEMPT_DYNAMIC Sun Jun 4 12:31:46 UTC 2023 x86_64 GNU/Linux
+ + + +

安装waydroid

yay -S waydroid
+ +下载镜像,一般使用LineageOS,在[此处](https://sourceforge.net/projects/waydroid/)下载两个文件: + +

system.zipvendor.zip

+

下载完成后将.img文件解压到/usr/share/waydroid-extra/images目录下,文件夹若不存在则创建。

+
sudo waydroid init
sudo systemctl enable --now waydroid-container
+ +

此时应该可以正常使用了。

+

常用命令

确保 waydroid-container.service 正在运行,然后执行:

+
waydroid session start
+ +

Waydroid 会话现在已处于活动状态,这里有一些与 Waydroid 交互的实用命令:

+

启动 GUI:

+
waydroid show-full-ui
+ +

启动 shell:

+
waydroid shell
+ +

安装应用程序:

+
waydroid app install $path_to_apk
+ +

运行应用程序:

+
waydroid app launch $package-name #Can be retrieved with `waydroid app list`
+ +

image

+

image

+
+

注意,安装的安卓应用可能会显示在linux系统的应用中,但最好不要直接点击它来启动应用,而是使用命令行:

+
➜  ~ sudo systemctl status waydroid-container
● waydroid-container.service - Waydroid Container
Loaded: loaded (/usr/lib/systemd/system/waydroid-container.service; enable>
Active: active (running) since Wed 2023-07-05 01:02:16 CST; 3min 56s ago
Main PID: 574 (python3)
Tasks: 2 (limit: 9204)
Memory: 35.9M
CPU: 229ms
CGroup: /system.slice/waydroid-container.service
└─574 python3 /usr/bin/waydroid -w container start

7月 05 01:02:15 dionysen-latitude7430 systemd[1]: Starting Waydroid Container...
7月 05 01:02:16 dionysen-latitude7430 systemd[1]: Started Waydroid Container.
# 确保服务正在运行
waydroid session start
# 然后再去点击Waydroid的应用图标
+
+

另:由于系统对应的架构是x86_64,因此最好去一些网站下载此架构的应用,如appmirror(需梯子)。

+

Setting up a shared folder

User @wachidadinugroho has worked out the details on how to setup a shared folder to be used between Waydroid and your host filesystem.

+

Setting up a shared folder will allow the user to copy/paste files from the host and they appear inside waydroid/android. sudo mount --bind <source> ~/.local/share/waydroid/data/media/0/<target>

+

Then verify that the target folder exists:

+

sudo ls ~/.local/share/waydroid/data/media/0/ Examples:

+
sudo mount --bind ~/Documents ~/.local/share/waydroid/data/media/0/Documents
sudo mount --bind ~/Downloads ~/.local/share/waydroid/data/media/0/Download
sudo mount --bind ~/Music ~/.local/share/waydroid/data/media/0/Music
sudo mount --bind ~/Pictures ~/.local/share/waydroid/data/media/0/Pictures
sudo mount --bind ~/Videos ~/.local/share/waydroid/data/media/0/Movies
+ +

You can also make your own custom mount point to cater to your needs.

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/07/05/note/Hexo/picgo/index.html b/2023/07/05/note/Hexo/picgo/index.html new file mode 100644 index 000000000..cf549db4c --- /dev/null +++ b/2023/07/05/note/Hexo/picgo/index.html @@ -0,0 +1,716 @@ + + + + + + + + + + + + 使用typora+picgo(图床上传工具)作为博客的编辑工具 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 使用typora+picgo(图床上传工具)作为博客的编辑工具 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

习惯了Typora,刚好它支持命令行自动上传图片,可以作为一个很好的图床上传工具。

+ + +

Windows

下载安装Pigco,配置Github作为图床:

+
    +
  1. 创建用于存储图片的仓库
  2. +
  3. 创建token
  4. +
  5. 配置如下:(按照每一项填上去)
  6. +
+
{
"repo": "Dionysen/BlogCDN",
"token": "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",
"path": "/img",
"customUrl": "https://cdn.jsdelivr.net/gh/Dionysen/BlogCDN@main",
"branch": "main",
"picBed": {
"uploader": "github",
"current": "github"
},
"picgoPlugins": {}
}
+ +
+

以上是2023年7月份,到9月份再次配置时,使用typora内置的方案下载picgo-cli,配置文件应该按照下面的方式写

+
+
{
"picBed": {
"uploader": "github",
"current": "github",
"github": {
"repo": "Dionysen/BlogCDN",
"branch": "main",
"token": "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",
"path": "img",
"customUrl": "https://cdn.jsdelivr.net/gh/Dionysen/BlogCDN@main"
}
},
"picgoPlugins": {}
}
+ +
+

注:上面的Token当然是我废弃的

+
+

并且,windows也可以找到picgo-cli的程序,使用命令picgo set uploader进行配置。

+

Linux

安装picgo:

+
sudo pacman -S npm
sudo npm install picgo -g
+ +

然后配置:

+
picgo set uploader
# 之后按照每一项,填上
+ +

Typora

配置完成后,在Typora中设置自动上传图片:

+
+

注意:不同的操作系统,命令有所不同,此处是Linux系统的

+
+

image

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/07/11/note/Programming/Language/javascript/index.html b/2023/07/11/note/Programming/Language/javascript/index.html new file mode 100644 index 000000000..598e91136 --- /dev/null +++ b/2023/07/11/note/Programming/Language/javascript/index.html @@ -0,0 +1,788 @@ + + + + + + + + + + + + JavaScript | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ JavaScript +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

📒 JavaScript学习笔记

+
+ + +

基础概念

与HTML的交互

    +
  • 可以在 HTML 文档中放入不限数量的脚本。

    +
  • +
  • 脚本可位于 HTML 的<body><head> 部分中,或者同时存在于两个部分中。

    +
  • +
  • 通常的做法是把函数放入<head>部分中,或者放在页面底部。这样就可以把它们安置到同一处位置,不会干扰页面的内容。

    +
  • +
+

第一个程序

<body>
<h1>我的第一段 JavaScript</h1>
<p id="demo">
JavaScript 能改变 HTML 元素的内容。
</p>
<script>
document.write("<h1>TITLE</h1>");
function myFunction() {
x = document.getElementById("demo"); // 找到元素
x.innerHTML = "Hello JavaScript!"; // 改变内容
}
</script>
<button type="button" onclick="myFunction()">点击这里</button>
</body>
+ +
    +
  • HTML 输出流中使用 document.write,相当于添加在原有html代码中添加一串html代码。而如果在文档加载后使用(如使用函数),会覆盖整个文档。
  • +
+

使用函数来执行document.write代码如下:

+
<script>
function myfunction(){
document.write("使用函数来执行document.write,即在文档加载后再执行这个操作,会实现文档覆盖");
}
document.write("<h1>这是一个标题</h1>");
document.write("<p>这是一个段落。</p>");
</script>
<p>
您只能在 HTML 输出流中使用 <strong>document.write</strong>
如果您在文档已加载后使用它(比如在函数中),会覆盖整个文档。
</p>
<button type="button" onclick="myfunction()">点击这里</button>
+ +

引入外部js文件

<!DOCTYPE html>
<html>
<body>
<script src="myScript.js"></script>
</body>
</html>
+ +
+

外部 javascript 文件不使用 <script> 标签,直接写 javascript 代码。

+
+

简单学习

数字、字符、操作符

    +
  • 分号可以省略,但特殊情况会引起错误

    +
  • +
  • Javascript 只有一种数字类型(即 64位 IEEE 754 双精度浮点 double),有52位表示尾数,可以精确到9x10^15的整数

    +
  • +
+
// 有三种非数字的数字类型
Infinity; // 1/0 的结果
-Infinity; // -1/0 的结果
NaN; // 0/0 的结果
+ +
    +
  • 单引号或双引号构建字符串,字符串用+拼接,字符串也可以用<>号来比较

    +
  • +
  • 使用==比较时会进行类型转换,'5'==5返回truenull==undefined返回true;但如果用===则不会转换类型,上述两种会返回false

    +
  • +
  • 不同类型的变量相加会导致奇怪的行为:

    +
    13 + !0; //14
    "13" + !0; // '13true'
    +
  • +
  • charAt(int num)可以得到字符串中位于num的字符

    +
  • +
  • substring(int startPos, int length)可以得到从startPos开始的length长度的子串,

    +
  • +
  • length是一个属性,不要用()"hello".lenght

    +
  • +
+
// 还有两个特殊的值:`null`和`undefined`
null; // 用来表示刻意设置的空值
undefined; // 用来表示还没有设置的值(尽管`undefined`自身实际是一个值
+ +
// false, null, undefined, NaN, 0 和 "" 都是假的;其他的都视作逻辑真
// 注意 0 是逻辑假而 "0"是逻辑真,尽管 0 == "0"。
+ +

变量、数组、对象

    +
  • 变量声明用var,无需指定类型,不加var表示全局变量,未初始化且未被赋值的变量为undefined

    +
  • +
  • 变量的计算没有别的特点(简写,自增自减)

    +
  • +
  • 数组可以是任意类型的有序列表var myArray = ["Hello", 45, true];

    +
  • +
  • 数组可以下标访问;数组长度可变,push(<\element>)

    +
  • +
+
// javascript中的对象相当于其他语言中的“字典”或“映射”:是键-值对的无序集合。
var myObj = {key1: "Hello", key2: "World"};
+ +
    +
  • 键值对,键是字符串,如何键本身是合法的js标识符,则可以不加引号;值可以是任意类型
  • +
  • 对象属性的访问可以通过下标,myObj["my other key"]; // = 4,也可以用myObj.myKey;
  • +
  • 对象是可变的,更改值,增加键,访问未定义的值,返回undefined
  • +
+

逻辑与控制结构

    +
  • if、while、for与c无差别
  • +
+
// && 和 || 是“短路”语句,它在设定初始化值时特别有用 
var name = otherName || "default";
+ +
// `switch`语句使用`===`检查相等性。
// 在每一个case结束时使用 'break'
// 否则其后的case语句也将被执行。
grade = 'B';
switch (grade) {
case 'A':
console.log("Great job");
break;
case 'B':
console.log("OK job");
break;
case 'C':
console.log("You can do better");
break;
default:
console.log("Oy vey");
break;
}
+ +

函数、作用域、闭包

// JavaScript 函数由`function`关键字定义
function myFunction(thing){
return thing.toUpperCase();
}
myFunction("foo"); // = "FOO"
+ +
    +
  • 被返回的值必须开始用return关键字的那一行,否则由于分号的自动补齐,会返回undefined
  • +
+
// 在使用Allman风格的时候要注意.
function myFunction()
{
return // <- 分号自动插在这里
{
thisIsAn: 'object literal'
}
}
myFunction(); // = undefined
+ +
    +
  • 函数是一等对象,也可以赋值给一个变量,并且可以作为参数传递
  • +
+
// 函数对象甚至不需要声明名称 —— 你可以直接把一个函数定义写到另一个函数的参数中
setTimeout(function(){
// 这段代码将在5秒钟后被调用
}, 5000);
+ +
    +
  • 函数有自己的作用域,而其他代码没有

    +
    if (true){
    var i = 5;
    }
    i; // = 5 - 并非我们在其他语言中所期望得到的undefined

    // 这就导致了人们经常使用的“立即执行匿名函数”的模式,
    // 这样可以避免一些临时变量扩散到全局作用域去。
    (function(){
    var temporary = 5;
    // 我们可以访问修改全局对象("global object")来访问全局作用域,
    // 在web浏览器中是`window`这个对象。
    // 在其他环境如Node.js中这个对象的名字可能会不同。
    window.permanent = 10;
    })();
    temporary; // 抛出引用异常ReferenceError
    permanent; // = 10
    +
  • +
  • 闭包: 如果一个函数在另一个函数中定义,那么这个内部函数就拥有外部函数的所有变量的访问权,即使在外部函数结束之后。

    +
    function sayHelloInFiveSeconds(name){
    var prompt = "Hello, " + name + "!";
    // 内部函数默认是放在局部作用域的,
    // 就像是用`var`声明的。
    function inner(){
    alert(prompt);
    }
    setTimeout(inner, 5000);
    // setTimeout是异步的,所以 sayHelloInFiveSeconds 函数会立即退出,
    // 而 setTimeout 会在后面调用inner
    // 然而,由于inner是由sayHelloInFiveSeconds“闭合包含”的,
    // 所以inner在其最终被调用时仍然能够访问`prompt`变量。
    }
    sayHelloInFiveSeconds("Adam"); // 会在5秒后弹出 "Hello, Adam!"
  • +
+

对象、构造函数和原型

    +
  • 对象中可以有成员函数,用.调用,this指针仍然有效
  • +
+
// 但这个函数访问的其实是其运行时环境,而非定义时环境,即取决于函数是如何调用的。
// 所以如果函数被调用时不在这个对象的上下文中,就不会运行成功了。
var myFunc = myObj.myFunc;
myFunc(); // = undefined
+ +
    +
  • 可以在对象的定义之外定义一个函数,然后将函数指定为一个对象的函数:

    +
    var myOtherFunc = function(){
    return this.myString.toUpperCase();
    }
    // myObj.myString == "hello world!";
    myObj.myOtherFunc = myOtherFunc;
    myObj.myOtherFunc(); // = "HELLO WORLD!"
  • +
+
// 当我们通过`call`或者`apply`调用函数的时候,也可以为其指定一个执行上下文。
var anotherFunc = function(s){
return this.myString + s;
}
anotherFunc.call(myObj, " And Hello Moon!"); // = "Hello World! And Hello Moon!"

// `apply`函数几乎完全一样,只是要求一个array来传递参数列表。
anotherFunc.apply(myObj, [" And Hello Sun!"]); // = "Hello World! And Hello Sun!"

// 当一个函数接受一系列参数,而你想传入一个array时特别有用。
Math.min(42, 6, 27); // = 6
Math.min([42, 6, 27]); // = NaN (uh-oh!)
Math.min.apply(Math, [42, 6, 27]); // = 6

// 但是`call`和`apply`只是临时的。如果我们希望函数附着在对象上,可以使用`bind`。
var boundFunc = anotherFunc.bind(myObj);
boundFunc(" And Hello Saturn!"); // = "Hello World! And Hello Saturn!"
+ +
// `bind` 也可以用来部分应用一个函数(柯里化)。
var product = function(a, b){ return a * b; }
var doubler = product.bind(this, 2);
doubler(8); // = 16
+ +
    +
  • 构造函数:调用一个函数时前加上new关键字,会创建一个对象,这个函数一般是设计专门用来构造此对象的函数;此函数可以用this来访问对象

    +
  • +
  • 原型:其实就是类的继承

    +
      +
    • 指定原型创建对象有两个方法
    • +
    +
    // 第一种方式是 Object.create,这个方法是在最近才被添加到Js中的,
    // 因此并不是所有的JS实现都有这个方法
    var myObj = Object.create(myPrototype);
    myObj.meaningOfLife; // = 43

    // 第二种方式可以在任意版本中使用,不过必须通过构造函数。
    // 构造函数有一个属性prototype。但是它 *不是* 构造函数本身的原型;相反,
    // 是通过构造函数和new关键字创建的新对象的原型。
    MyConstructor.prototype = {
    myNumber: 5,
    getMyNumber: function(){
    return this.myNumber;
    }
    };
    var myNewObj2 = new MyConstructor();
    myNewObj2.getMyNumber(); // = 5
    myNewObj2.myNumber = 6
    myNewObj2.getMyNumber(); // = 6
    + +
    // 字符串和数字等内置类型也有通过构造函数来创建的包装类型
    var myNumber = 12;
    var myNumberObj = new Number(12);
    myNumber == myNumberObj; // = true

    // 但是它们并非严格等价
    typeof myNumber; // = 'number'
    typeof myNumberObj; // = 'object'
    myNumber === myNumberObj; // = false
    if (0){
    // 这段代码不会执行,因为0代表假
    }
  • +
+
// 不过,包装类型和内置类型共享一个原型,
// 所以你实际可以给内置类型也增加一些功能,例如对string:
String.prototype.firstCharacter = function(){
return this.charAt(0);
}
"abc".firstCharacter(); // = "a"

// 这个技巧经常用在“代码填充”中,来为老版本的javascript子集增加新版本js的特性,
// 这样就可以在老的浏览器中使用新功能了。

// 比如,我们知道Object.create并没有在所有的版本中都实现,
// 但是我们仍然可以通过“代码填充”来实现兼容:
if (Object.create === undefined){ // 如果存在则不覆盖
Object.create = function(proto){
// 用正确的原型来创建一个临时构造函数
var Constructor = function(){};
Constructor.prototype = proto;
// 之后用它来创建一个新的对象
return new Constructor();
}
}
+ +

更多概念

ansyc与await

async 函数中可能会有 await 表达式,async 函数执行时,如果遇到 await 就会先暂停执行 ,等到触发的异步操作完成后,恢复 async 函数的执行并返回解析值。

+

await 关键字仅在 async function 中有效。如果在 async function 函数体外使用 await ,你只会得到一个语法错误。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/07/14/note/Framework/OpenGL/ogre_compile/index.html b/2023/07/14/note/Framework/OpenGL/ogre_compile/index.html new file mode 100644 index 000000000..df0fb88a9 --- /dev/null +++ b/2023/07/14/note/Framework/OpenGL/ogre_compile/index.html @@ -0,0 +1,733 @@ + + + + + + + + + + + + 在ArchLinux上编译Ogre | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 在ArchLinux上编译Ogre +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

Ogre(Object-oriented Graphics Rendering Engine)是一个开源的实时图形渲染引擎,用于创建和渲染三维图形应用程序。它是基于C++编写的,并提供了丰富的功能和工具,使开发者能够构建高性能的图形应用程序。image

+ + +
    +
  • 特点和功能:
  • +
+
    +
  1. 跨平台支持:Ogre是一个跨平台的引擎,支持在多个操作系统(如Windows、Linux、macOS等)上进行开发和部署。
  2. +
  3. 高性能渲染:Ogre通过使用现代图形硬件和优化算法,提供了高效的图形渲染。它支持多种渲染路径(如Direct3D和OpenGL),并针对不同平台和硬件提供了灵活的渲染配置。
  4. +
  5. 强大的渲染功能:Ogre提供了广泛的渲染功能,包括高级材质系统、灯光和阴影、粒子系统、骨骼动画、精确的几何剪裁等。这些功能使开发者能够创建出逼真和令人惊叹的图形效果。
  6. +
  7. 可扩展性和模块化:Ogre的设计注重可扩展性和模块化。它提供了丰富的插件系统,可以方便地添加和定制功能。开发者可以选择性地集成和使用不同的模块,以满足其特定的需求。
  8. +
  9. 资源管理和场景图:Ogre提供了资源管理器,用于加载和管理图形资源(如模型、纹理、材质等)。它还包括一个场景图系统,用于组织和渲染场景中的对象。
  10. +
  11. 多种编程语言支持:尽管Ogre是使用C++编写的,但它提供了多种语言的绑定和接口,包括Python、C#、Java等。这样可以方便开发者使用自己熟悉的编程语言来开发和扩展Ogre应用程序。
  12. +
+

Ogre作为一个成熟且广泛应用的图形渲染引擎,被用于游戏开发、虚拟现实、模拟器、科学可视化等领域。它拥有一个活跃的社区,并提供了丰富的文档、示例和教程,以帮助开发者入门和使用Ogre引擎。

+

在ArchLinux上编译Ogre

安装依赖

By default ogre will build the recommended dependencies automatically when you run cmake configure the first time. Ogre will install the dependencies into the subfolder Dependencies in the build dir by default. You can configure it by setting OGRE_DEPENDENCIES_DIR in cmake.

+
+

文档的意思是Ogre会在配置cmake的时候自动安装依赖

+
+

拉取源码

git clone https://github.com/OGRECave/ogre.git
+ +

配置cmake

cd ogre
mkdir build
cd build
cmake ..
+ +

编译

cmake --build . --config Release
+ +

安装到系统中

想要使用它,最好将头文件和库文件放置到干净的地方。

+
cmake --build . --config Release --target install
+ +

你可能需要root权限才能完成这个操作。

+

测试

使用官方示例:

+
// This file is part of the OGRE project.
// It is subject to the license terms in the LICENSE file found in the top-level
// directory of this distribution and at https://www.ogre3d.org/licensing.
// SPDX-License-Identifier: MIT

#include "Ogre.h"
#include "OgreApplicationContext.h"

//! [key_handler]
class KeyHandler : public OgreBites::InputListener {
bool keyPressed(const OgreBites::KeyboardEvent &evt) override {
if (evt.keysym.sym == OgreBites::SDLK_ESCAPE) {
Ogre::Root::getSingleton().queueEndRendering();
}
return true;
}
};
//! [key_handler]

int main(int argc, char *argv[]) {
//! [constructor]
OgreBites::ApplicationContext ctx("OgreTutorialApp");
ctx.initApp();
//! [constructor]

//! [setup]
// get a pointer to the already created root
Ogre::Root *root = ctx.getRoot();
// root->createRenderWindow("w",800,600,false,0);
Ogre::SceneManager *scnMgr = root->createSceneManager();

// register our scene with the RTSS
Ogre::RTShader::ShaderGenerator *shadergen =
Ogre::RTShader::ShaderGenerator::getSingletonPtr();
shadergen->addSceneManager(scnMgr);

// without light we would just get a black screen
Ogre::Light *light = scnMgr->createLight("MainLight");
Ogre::SceneNode *lightNode =
scnMgr->getRootSceneNode()->createChildSceneNode();
lightNode->setPosition(0, 15, 25);
lightNode->attachObject(light);

// also need to tell where we are
Ogre::SceneNode *camNode =
scnMgr->getRootSceneNode()->createChildSceneNode();
camNode->setPosition(50, 50, 50);
camNode->lookAt(Ogre::Vector3(0, 0, -1), Ogre::Node::TS_PARENT);

// create the camera
Ogre::Camera *cam = scnMgr->createCamera("myCam");
cam->setNearClipDistance(5); // secific to this sample
cam->setAutoAspectRatio(true);
camNode->attachObject(cam);

// and tell it to render into the main window
ctx.getRenderWindow()->addViewport(cam);

// finally something to render
Ogre::Entity *ent = scnMgr->createEntity("ogrehead.mesh");
Ogre::SceneNode *node = scnMgr->getRootSceneNode()->createChildSceneNode();
node->attachObject(ent);
//! [setup]

//! [main]
// register for input events
KeyHandler keyHandler;
ctx.addInputListener(&keyHandler);

ctx.getRoot()->startRendering();
ctx.closeApp();
//! [main]
return 0;
}
+ +

CMakeLists.txt文件如下:

+
cmake_minimum_required (VERSION 3.10)
project(OgreTutorialsSample)

# required for Ogre 1.11+
set(CMAKE_CXX_STANDARD 11)

## [discover_ogre]
# The COMPONENTS part checks that OGRE was built the way we need it
# The CONFIG flag makes sure we get OGRE instead of OGRE-next
find_package(OGRE REQUIRED COMPONENTS Bites CONFIG)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_BUILD_TYPE debug)

# add the source files as usual
add_executable(0_Bootstrap Bootstrap.cpp)

# this also sets the includes and pulls third party dependencies
target_link_libraries(0_Bootstrap OgreBites)
+ +

文件结构:

+
.
├── Bootstrap.cpp
├── build
└── CMakeLists.txt
+ +

运行命令:

+
cd build
cmake ..; make; ./0_Bootstrap
+ +

结果:

+

image

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/07/15/note/Programming/tools/mysql_install/index.html b/2023/07/15/note/Programming/tools/mysql_install/index.html new file mode 100644 index 000000000..8dd0546c0 --- /dev/null +++ b/2023/07/15/note/Programming/tools/mysql_install/index.html @@ -0,0 +1,750 @@ + + + + + + + + + + + + Archlinux上使用MySQL(MariaDB) | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Archlinux上使用MySQL(MariaDB) +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

MySQL 是 Oracle 开发的,分布广泛的多线程,多用户 SQL 数据库。

+
+
+

Arch Linux 支持 MariaDB,这是 MySQL 的社区开发分支,旨在实现嵌入式兼容性。Oracle 的 MySQL 降到AURmysqlAUR。另一个旨在完全兼容的分支是 Percona Server,可从 percona-server包 获得。

+
+
+

Percona 也有 Oracle 的 InnoDB 存储引擎的分支,称为 XtraDBMariaDB 和 Percona Server 都使用此分支。

+
+

在Arch Linux上使用MySQL,可以使用官方库中的MariaDB,也可以使用AUR中的MySQL。

+ + +

安装MySQL

打开终端,并使用以下命令安装MySQL

+
sudo pacman -S mysql
# Actually installed mariadb
# or
yay -S mysql
+ +
+

如果安装的是mariadb,那么接下来所有命令中的mysql都用mariadb替换

+
+

初始化

安装完成后,运行以下命令来初始化MySQL数据库:

+
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
+ +

启动MySQL服务:

+

启动MySQL服务

sudo systemctl start mysqld
+ +

若要设置开机自启动,运行以下命令:

+
sudo systemctl enable mysqld
+ +

设置root用户密码

运行以下命令来设置root用户的密码:

+
sudo mysql_secure_installation
+ +

按照提示,设置root密码并进行其他安全设置。

+

连接到MySQL服务器

运行以下命令以使用root用户连接到MySQL服务器:

+
mysql -u root -p
+ +

输入先前设置的root密码以进行身份验证。

+

创建和管理数据库

连接到MySQL服务器后,您可以使用SQL命令创建和管理数据库。以下是一些常用的命令示例:

+

创建数据库:

+
CREATE DATABASE mydatabase;
+ +

使用数据库:

+
USE mydatabase;
+ +

创建表:

+
CREATE TABLE mytable (
id INT PRIMARY KEY,
name VARCHAR(50)
);
+ +

插入数据:

+
INSERT INTO mytable (id, name) VALUES (1, 'John');
+ +

查询数据:

+
SELECT * FROM mytable;
+ +

更新数据:

+
UPDATE mytable SET name = 'Alice' WHERE id = 1;
+ +

删除数据:

+
DELETE FROM mytable WHERE id = 1;
+ +

客户端常用命令

连接到mysql

+
mysql -u root -p
+ +

输入\h查看帮助:

+
List of all client commands:
Note that all text commands must be first on line and end with ';'
? (\?) Synonym for `help'.
clear (\c) Clear the current input statement.
connect (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit (\e) Edit command with $EDITOR.
ego (\G) Send command to MariaDB server, display result vertically.
exit (\q) Exit mysql. Same as quit.
go (\g) Send command to MariaDB server.
help (\h) Display this help.
nopager (\n) Disable pager, print to stdout.
notee (\t) Don't write into outfile.
pager (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print (\p) Print current command.
prompt (\R) Change your mysql prompt.
quit (\q) Quit mysql.
costs (\Q) Toggle showing query costs after each query
rehash (\#) Rebuild completion hash.
source (\.) Execute an SQL script file. Takes a file name as an argument.
status (\s) Get status information from the server.
system (\!) Execute a system shell command.
tee (\T) Set outfile [to_outfile]. Append everything into given outfile.
use (\u) Use another database. Takes database name as argument.
charset (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.

For server side help, type 'help contents'
+ +

简单使用

连接:

+
mysql -u root -p
+ +

数据库操作:

+
CREATE DATABASE </database_name>; 	# 创建
DROP DATABASE </database_name>; # 删除
USE </database_name>; # 选择
+ +

数据表操作:

+
CREATE TABLE </table_name> (column_name column_type);	# 创建表
CREATE TABLE IF NOT EXISTS </table_name> (column_name column_type); # 不存在则创建表
DROP TABLE </table_name>; # 删除表
INSERT INTO </table_name> ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN ); # 表中插入数据
SELECT * FROM </table_name>; # 从表中读取数据
+ +

使用C++调用

linux上下载mysqlcppconnector,将头文件和库文件放到相应位置,xmake.lua中添加add_links("mysqlcppconn")

+
#include <iostream>
#include <jdbc/cppconn/resultset.h>
#include <jdbc/cppconn/statement.h>
#include <jdbc/mysql_connection.h>
#include <jdbc/mysql_driver.h>
#include <string>

int main(int argc, char **argv) {
sql::mysql::MySQL_Driver *driver;
sql::Connection *con;

driver = sql::mysql::get_mysql_driver_instance();
con = driver->connect("tcp://0.0.0.0:3306", "root", "140917");
sql::Statement *stmt;
sql::ResultSet *res;

stmt = con->createStatement();
stmt->execute("USE mydatabase");

// 创建表
stmt->execute(
"CREATE TABLE IF NOT EXISTS mytable (id INT, name VARCHAR(100))");

// 插入数据
stmt->execute("INSERT INTO mytable (id, name) VALUES (1, 'John')");
stmt->execute("INSERT INTO mytable (id, name) VALUES (2, 'Jane')");

// 查询并打印表内容
res = stmt->executeQuery("SELECT * FROM mytable");

std::cout << "Table Content:" << std::endl;
while (res->next()) {
int id = res->getInt("id");
std::string name = res->getString("name");
std::cout << "ID: " << id << ", Name: " << name << std::endl;
}

delete res;
delete stmt;
con->close();
delete con;

return 0;
}
+ +

运行结果为:

+
Table Content:
ID: 1, Name: John
ID: 2, Name: Jane
+ + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/07/18/note/Framework/vue3/index.html b/2023/07/18/note/Framework/vue3/index.html new file mode 100644 index 000000000..32bf9b343 --- /dev/null +++ b/2023/07/18/note/Framework/vue3/index.html @@ -0,0 +1,702 @@ + + + + + + + + + + + + Vue3学习笔记 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Vue3学习笔记 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

工作需要学习了前端框架Vue,这是过程中遇到的问题和解决方法的汇总。

+ + +

组合式API引用canvas

const canvas = ref<HTMLCanvasElement | null>(null);
const context = ref<CanvasRenderingContext2D | null>();
+ +

Composition API 是 Vue 3 中引入的一组函数式 API,用于替代 Vue 2 中的 Options API。它提供了更灵活、可组合和可重用的方式来组织组件的逻辑代码。

+

在 Vue 3 的 Composition API 中,我们可以使用 ref 函数来创建一个响应式的引用,它类似于 Vue 2 中的 data 选项。ref 接受一个初始值作为参数,并返回一个包含该值的响应式引用。

+

在上述代码中,const canvas = ref<HTMLCanvasElement | null>(null) 表示创建了一个名为 canvas 的响应式引用,它的类型为 HTMLCanvasElement | nullHTMLCanvasElement 表示 Canvas 元素的类型,| 表示联合类型,允许 canvas 的值为 HTMLCanvasElementnull。在初始化时,canvas 的值被设置为 null

+

这样的设置可以让我们在 Vue 3 中使用 Composition API 来追踪和操作 Canvas 元素及其上下文。通过 canvas.valuecontext.value 可以访问引用的实际值,因为 ref 创建的引用是一个包装器。

+

通过使用响应式引用,我们可以在应用程序中追踪和修改 canvascontext 的值,确保任何对它们的更改都能在 Vue 组件中得到反应,并触发相应的更新。

+

Canvas接口

HTMLCanvasElement:Provides properties and methods for manipulating the layout and presentation of elements. The HTMLCanvasElement interface also inherits the properties and methods of the HTMLElement interface.

+

CanvasRenderingContext2D:The CanvasRenderingContext2D interface, part of the Canvas API, provides the 2D rendering context for the drawing surface of a element. It is used for drawing shapes, text, images, and other objects.

+

可选链操作符

context.value?.stroke()
+ +

?.是可选链操作符,它用于检查context.value是否为非空值。如果context.value不为null或undefined,则调用stroke()方法。

+

canvas绘制网格

function drawCanvasGrid() {
const gridSize = 50;

if (context.value) {
context.value.fillStyle = "rgba(0, 0, 0, .2)";

for (let i = 0; i * gridSize < canvas.value?.width! - 40; i++) {
for (var j = 0; j * gridSize < canvas.value?.height! - 40; j++) {
if (i > 0 && j > 0) {
context.value.beginPath();
context.value.rect(i * gridSize, j * gridSize, 2, 2);
context.value.fill();
context.value.closePath();
}
}
}
}
}
+ +
    +
  1. beginPath(): 这个方法用于创建一个新的路径或者子路径。在绘制之前,调用beginPath()可以清除之前定义的路径,以确保开始一个新的路径。
  2. +
  3. rect(x, y, width, height): 这个方法用于在路径中添加一个矩形子路径。它接受四个参数,分别是矩形左上角的x坐标、y坐标,以及矩形的宽度和高度。调用rect()方法并不会直接绘制矩形,而是将矩形添加到当前的路径中。
  4. +
  5. fill(): 这个方法用于填充当前路径的内容,使其呈现实心的效果。填充的颜色由fillStyle属性指定。
  6. +
  7. closePath(): 这个方法用于关闭当前的子路径。它会连接当前路径的起点和终点,形成一个封闭的路径。调用closePath()后,绘制的操作会回到起点,可以开始绘制下一个子路径。
  8. +
+

在给定的代码片段中,这几个函数被用于在画布上绘制一个网格。通过循环遍历,每个格子都被绘制成一个大小为2x2的矩形,并使用fill()方法填充矩形的内容。beginPath()closePath()方法则用于定义每个格子的子路径,以及在绘制完成后关闭路径。

+
clearRect(x, y, width, height)
+ +

在CanvasRenderingContext2D接口中,clearRect(x, y, width, height)方法用于清除指定矩形区域内的像素。它接受四个参数,分别是矩形左上角的x坐标、y坐标,以及矩形的宽度和高度。调用clearRect()方法会将指定矩形区域内的像素设为透明,从而清除该区域的内容。

+

Pinia订阅

store.$subscribe((_, state) => {
if (state.shouldClear) {
clearCanvas();
}
});
+ +

使用$subscribe方法,实时监听状态的变化,当状态发生变化时,执行函数中的语句。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/07/19/note/Algorithm/BinaryTree/index.html b/2023/07/19/note/Algorithm/BinaryTree/index.html new file mode 100644 index 000000000..c70a8bee0 --- /dev/null +++ b/2023/07/19/note/Algorithm/BinaryTree/index.html @@ -0,0 +1,715 @@ + + + + + + + + + + + + 二叉树 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 二叉树 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int v) : val(v), left(nullptr), right(nullptr) {}
};
+ +

二叉树是一种常见的树状数据结构,它由节点(Node)和边(Edge)组成。每个节点最多有两个子节点,分别称为左子节点(Left Child)和右子节点(Right Child)。

+ + +

基本概念

    +
  1. 根节点(Root Node):二叉树的顶部节点,没有父节点的节点。
  2. +
  3. 叶子节点(Leaf Node):没有子节点的节点,也称为终端节点。
  4. +
  5. 内部节点(Internal Node):除了叶子节点之外的其他节点。
  6. +
  7. 子树(Subtree):以某个节点为根的子树,由该节点及其所有后代节点组成。
  8. +
  9. 深度(Depth):从根节点到某个节点的唯一路径上的边数,根节点的深度为0。
  10. +
  11. 高度(Height):从某个节点到其最远叶子节点的路径上的边数,叶子节点的高度为0。
  12. +
+

二叉树类型

    +
  • 二叉搜索树(Binary Search Tree):左子节点的值小于等于父节点的值,右子节点的值大于等于父节点的值。
  • +
+
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int v) : val(v), left(nullptr), right(nullptr) {}
};

// 插入操作
TreeNode* insertNode(TreeNode* root, int val) {
if (root == nullptr) {
return new TreeNode(val);
}

if (val < root->val) {
root->left = insertNode(root->left, val);
} else {
root->right = insertNode(root->right, val);
}

return root;
}

// 查找操作
TreeNode* searchNode(TreeNode* root, int val) {
if (root == nullptr || root->val == val) {
return root;
}
if (val < root->val) {
return searchNode(root->left, val);
} else {
return searchNode(root->right, val);
}
}

// 中序遍历
void inorderTraversal(TreeNode* root) {
if (root) {
inorderTraversal(root->left);
std::cout << root->val << " ";
inorderTraversal(root->right);
}
}
+ +
    +
  • 完全二叉树(Complete Binary Tree):除了最后一层外,其他层的节点数达到最大,并且最后一层的节点依次从左到右排列。

    +
  • +
  • 满二叉树(Full Binary Tree):除了叶子节点外,每个节点都有两个子节点。

    +
  • +
  • 平衡二叉树(Balanced Binary Tree):任意节点的左子树和右子树的高度差不超过1。

    +
  • +
+

二叉树操作

    +
  • 插入节点:向二叉树中添加新的节点。
  • +
  • 删除节点:从二叉树中移除指定节点。
  • +
  • 查找节点:在二叉树中搜索具有特定值的节点。
  • +
+
遍历

按照特定顺序访问二叉树中的所有节点,包括前序遍历、中序遍历、后序遍历和层序遍历等。

+

三种遍历方式,关键是看每一个子树根节点的顺序:

+ + + + + + + + + + + + + + + + + + + +
遍历方式顺序
先序遍历根-左-右
中序遍历左-根-右
后序遍历左-右-根
+

递归写法:

+
// 先序遍历
void preorderTraversalRecursive(TreeNode* root) {
if (root == nullptr) {
return;
}

std::cout << root->val << " "; // 输出当前节点的值
preorderTraversalRecursive(root->left); // 递归遍历左子树
preorderTraversalRecursive(root->right); // 递归遍历右子树
}
+ +

迭代写法:

+
// 先序遍历
void preorderTraversalIterative(TreeNode* root) {
if (root == nullptr) {
return;
}

std::stack<TreeNode*> nodeStack;
nodeStack.push(root);

while (!nodeStack.empty()) {
TreeNode* node = nodeStack.top();
nodeStack.pop();

std::cout << node->val << " "; // 输出当前节点的值

if (node->right != nullptr) {
nodeStack.push(node->right);
}
if (node->left != nullptr) {
nodeStack.push(node->left);
}
}
}
+ + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/07/24/note/Framework/OpenGL/opengl_advance/index.html b/2023/07/24/note/Framework/OpenGL/opengl_advance/index.html new file mode 100644 index 000000000..cf2c976a9 --- /dev/null +++ b/2023/07/24/note/Framework/OpenGL/opengl_advance/index.html @@ -0,0 +1,854 @@ + + + + + + + + + + + + OpenGL-3 进阶 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ OpenGL-3 进阶 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

在OpenGL中,深度测试(Depth Testing)是一种用于处理场景中多个物体的绘制顺序的技术。它用于解决物体的可见性问题,确保只有最前面的物体像素被绘制,从而实现真实的3D场景效果。

+

深度测试的基本思想是根据物体在场景中的距离,维护一个深度缓冲区(Depth Buffer),它是一个和颜色缓冲区大小相同的缓冲区。在深度缓冲区中,每个像素都存储着一个深度值(通常是浮点数或整数),表示物体到观察点(摄像机)的距离。这个距离通常是从摄像机视点到物体的距离。

+

深度测试默认是禁用的,所以如果要启用深度测试的话,我们需要用GL_DEPTH_TEST选项来启用它:

+
glEnable(GL_DEPTH_TEST);
+ + + +

深度冲突

深度冲突(Depth Conflict)在OpenGL中指的是由于有多个物体在相同的屏幕位置上,并且它们的深度值相同或非常接近,导致深度测试无法准确地决定哪个物体应该在前面绘制,从而产生了视觉上的错误。

+

深度冲突通常在以下情况下出现:

+
    +
  1. 在一个或多个物体的表面上有很多小的细节或凹凸,导致深度值在这些区域上非常接近,难以区分哪个物体在前面。
  2. +
  3. 在一个场景中有多个物体重叠在一起,并且它们的表面在同一深度上,导致深度测试无法准确判断哪个物体应该在前面绘制。
  4. +
+

为了解决深度冲突,有以下几种方法:

+
    +
  1. 使用更高精度的深度缓冲:可以使用更高精度的深度缓冲,比如使用32位浮点数来存储深度值,这样能够减少深度冲突的可能性。
  2. +
  3. 调整近平面和远平面:如果你的场景非常大或非常小,可能会导致深度缓冲的精度问题。通过调整近平面和远平面的值,可以增加深度缓冲的有效范围,从而减少深度冲突的可能性。
  4. +
  5. 使用透明度排序:如果你的场景中有透明物体,可以考虑对它们进行按照透明度排序,并按照远到近的顺序绘制它们。这样可以确保透明物体正确地显示在其他物体的后面。
  6. +
  7. 使用多边形偏移(Polygon Offset):多边形偏移是一种通过微调深度值的方法来解决深度冲突的技术。它可以在绘制深度冲突的物体时,稍微改变它们的深度值,使它们稍微偏移一些,从而防止深度冲突。
  8. +
  9. 使用深度测试函数:OpenGL提供了几种深度测试函数,比如GL_LESSGL_LEQUALGL_GREATER等等。你可以根据场景的需求选择合适的深度测试函数,以调整深度测试的行为。
  10. +
+

深度冲突是一个相对常见的问题,特别是在复杂的场景中。解决深度冲突通常需要结合多种方法,具体取决于场景的复杂程度和需求。选择合适的解决方法有助于提高渲染效果和场景的真实感。

+

模板测试

通过使用模板缓冲,我们可以根据场景中已绘制的其它物体的片段,来决定是否丢弃特定的片段。

+
glStencilFunc(GL_ALWAYS, 1, 0xFF);  // 所有的片段都应该更新模板缓冲,并且将每个像素的模板值设置为1
glStencilMask(0xFF); // 启用模板缓冲写入
// ... 绘制箱子
glStencilFunc(GL_NOTEQUAL, 1, 0xFF); // 每个像素的模板值不等于1时通过模板测试
glStencilMask(0x00); // 禁止模板缓冲的写入
glDisable(GL_DEPTH_TEST); // 禁用深度测试,以防止地板覆盖边框(也即放大的箱子)
// ... 绘制更大的箱子

glStencilMask(0xFF);
glStencilFunc(GL_ALWAYS, 0, 0xFF);
glEnable(GL_DEPTH_TEST); // 重新启用深度测试,防止影响其他绘制
+ +

image

+

混合

OpenGL中,混合(Blending)通常是实现物体透明度(Transparency)的一种技术。透明就是说一个物体(或者其中的一部分)不是纯色(Solid Color)的,它的颜色是物体本身的颜色和它背后其它物体的颜色的不同强度结合。一个有色玻璃窗是一个透明的物体,玻璃有它自己的颜色,但它最终的颜色还包含了玻璃之后所有物体的颜色。这也是混合这一名字的出处,我们混合(Blend)(不同物体的)多种颜色为一种颜色。所以透明度能让我们看穿物体。

+

其他问题

stb_image库踩坑

加载stb_image库时,宏声明应在头文件之前,否则会找不到函数:

+
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
+ +

摄像机位置

添加空格上升镜头位置,ctrl降低镜头位置:

+
void ProcessKeyboard(Camera_Movement direction, float deltaTime)
{
float velocity = MovementSpeed * deltaTime; // 设定速度
// 根据方向调整方向向量
if (direction == FORWARD)
Position += Front * velocity;
if (direction == BACKWARD)
Position -= Front * velocity;
if (direction == LEFT)
Position -= Right * velocity;
if (direction == RIGHT)
Position += Right * velocity;
if (direction == UP)
Position.y += velocity;
if (direction == DOWN)
Position.y -= velocity;
// Position.y = 0.0f; // 确保不会偏离xz平面
}
+ +

模型加载库

image

+
    +
  • 和材质和网格(Mesh)一样,所有的场景/模型数据都包含在Scene对象中。Scene对象也包含了场景根节点的引用。
  • +
  • 场景的Root node(根节点)可能包含子节点(和其它的节点一样),它会有一系列指向场景对象中mMeshes数组中储存的网格数据的索引。Scene下的mMeshes数组储存了真正的Mesh对象,节点中的mMeshes数组保存的只是场景中网格数组的索引。
  • +
  • 一个Mesh对象本身包含了渲染所需要的所有相关数据,像是顶点位置、法向量、纹理坐标、面(Face)和物体的材质。
  • +
  • 一个网格包含了多个面。Face代表的是物体的渲染图元(Primitive)(三角形、方形、点)。一个面包含了组成图元的顶点的索引。由于顶点和索引是分开的,使用一个索引缓冲来渲染是非常简单的(见[你好,三角形](https://learnopengl-cn.github.io/01 Getting started/04 Hello Triangle/))。
  • +
  • 最后,一个网格也包含了一个Material对象,它包含了一些函数能让我们获取物体的材质属性,比如说颜色和纹理贴图(比如漫反射和镜面光贴图)。
  • +
+
+

所谓网格,就是渲染物体的最小单位

+
+

通过使用Assimp,我们可以加载不同的模型到程序中,但是载入后它们都被储存为Assimp的数据结构。我们最终仍要将这些数据转换为OpenGL能够理解的格式,这样才能渲染这个物体。

+

GLFW处理多个键同时输入

设置摄像机更快速的移动shift+w/s/a/d

+
// Faster
if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS)
camera.ProcessKeyboard(FASTER_FORWARD, deltaTime);
if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS)
camera.ProcessKeyboard(FASTER_BACKWARD, deltaTime);
if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS)
camera.ProcessKeyboard(FASTER_LEFT, deltaTime);
if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS)
camera.ProcessKeyboard(FASTER_RIGHT, deltaTime);
+ +

着色器类中的异常捕捉

// ensure ifstream objects can throw exceptions:
vShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
fShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);

try {
// open files
vShaderFile.open(vertexPath);
fShaderFile.open(fragmentPath);
std::stringstream vShaderStream, fShaderStream;
// read file's buffer contents into streams
vShaderStream << vShaderFile.rdbuf();
fShaderStream << fShaderFile.rdbuf();
// close file handlers
vShaderFile.close();
fShaderFile.close();
// convert stream into string
vertexCode = vShaderStream.str();
fragmentCode = fShaderStream.str();
} catch (std::ifstream::failure &e) {
std::cout << "ERROR::SHADER::FILE_NOT_SUCCESSFULLY_READ: "
<< e.what() << std::endl;
}
+ +

深入理解顶点着色器和片段着色器

在OpenGL核心模式的渲染中,这两个着色器是不能跳过的着色器,必须手动编写。

+

抗锯齿

超采样抗锯齿(Super Sample Anti-aliasing, SSAA):它会使用比正常分辨率更高的分辨率(即超采样)来渲染场景,当图像输出在帧缓冲中更新时,分辨率会被下采样(Downsample)至正常的分辨率。这些额外的分辨率会被用来防止锯齿边缘的产生。虽然它确实能够解决走样的问题,但是由于这样比平时要绘制更多的片段,它也会带来很大的性能开销。所以这项技术只拥有了短暂的辉煌。

+

多重采样抗锯齿(Multisample Anti-aliasing, MSAA):它借鉴了SSAA背后的理念,但却以更加高效的方式实现了抗锯齿。渲染图元时,不只使用像素中心点作为采样点,而是将一个像素分成多个子采样点(这也是为什么叫做多重采样的原因)。每个像素片段着色器只运行一次,其所使用的顶点数据会插值到每个像素中心,结果储存在每个被覆盖的子采样点中,每个像素内部会将采样点的颜色平均化。

+

在OpenGL中使用MSAA,可以通过Hint的方式,在创建窗口前调用:

+
glfwWindowHint(GLFW_SAMPLES, 4);
glEnable(GL_MULTISAMPLE); // 保险起见,启用一下多重采样(多数情况时默认启用的)
+ +

现在再调用glfwCreateWindow创建渲染窗口时,每个屏幕坐标就会使用一个包含4个子采样点的颜色缓冲了。GLFW会自动创建一个每像素4个子采样点的深度和样本缓冲。这也意味着所有缓冲的大小都增长了4倍。

+

ImGui

为了方便的查看场景,将鼠标禁用,使用光标回调函数来控制摄像机镜头的方向,所以使用imgui时不能使用鼠标拖动控件,如下:

+

image

+

因此要设置一个快捷键来唤出光标,捕捉并禁用光标的代码是在创建窗口后:

+
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
+ +

而实现快捷时有一个问题,实现摄像机在场景中移动是在渲染循环中使用processInput(window)函数,获取键盘输入来控制,这样可以实现一次按下连续控制,这也正是问题所在,如果直接在此函数中设置快捷键,按下一次会在每次渲染循环中都调用一次,表现为光标一直闪烁(因为一直在重复 获取光标、隐藏光标、获取光标…)。

+

解决方法是定义键盘回调函数,将切换光标的代码放到回调函数中,这样按一次键盘释放之前不会重复调用。

+
bool show_mouse = false; // global variable

// Key callback function
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
if (glfwGetKey(window, GLFW_KEY_LEFT_ALT) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_C) == GLFW_PRESS)
{
if (show_mouse)
{
show_mouse = false;
}
else
{
show_mouse = true;
}
// 捕捉鼠标,并隐藏光标
if (!show_mouse)
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
else
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
}
}

// Don't forget registering it after creating the window
// in main function
glfwSetKeyCallback(window, key_callback);
+ +
初始化

在渲染循环之外:

+
// Init Dear Imgui
const char* glsl_version = "#version 330";
IMGUI_CHECKVERSION();
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO(); (void)io;
ImGui::StyleColorsDark();

ImGui_ImplGlfw_InitForOpenGL(window, true);
ImGui_ImplOpenGL3_Init(glsl_version);
+ +
使用

在渲染循环内:

+
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();
{
// setup
ImGui::Begin("Cube and Lighting");
// ...
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); // Frame rate
ImGui::End();
}
ImGui::Render();
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
+ +
同一行放置多个控件
ImGui::SameLine();
+ +

可实现此语句前后的两个控件不换行。

+
控件例子
ImGui::Begin("Cube and Lighting");                          // Create a window called "Cube and Lighting" and append into it.

ImGui::Text("Here can be adjust some params of the sence."); // Display some text (you can use a format strings too)
ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state

ImGui::SliderFloat("ambientStrength", &ambientStrength, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f
ImGui::SliderFloat("specularStrength", &specularStrength, 0.0f, 1.0f);

ImGui::ColorEdit3("Cube color", (float*)&objectColor); // Edit 3 floats representing a color
ImGui::Text("Cube color = %f, %f, %f", objectColor.x, objectColor.y, objectColor.z);

if (ImGui::Button("Button"))
counter++;// Buttons return true when clicked (most widgets return true when edited/activated)

ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);
ImGui::End();
+ +

小行星光照方向变化

实例化渲染时,模型矩阵aInstanceMatrix会从直接传入顶点着色器,而不是uniform赋值,因此直接在GPU中计算法向量Normal = mat3(transpose(inverse(aInstanceMatrix))) * aNormal;,这样光照的计算就不会因为模型变换而改变方向。

+
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aNormal;
layout (location = 2) in vec2 aTexCoords;
layout (location = 3) in mat4 aInstanceMatrix;

out vec2 TexCoords;
out vec3 FragPos;
out vec3 Normal;

uniform mat4 projection;
uniform mat4 view;

void main()
{
TexCoords = aTexCoords;
gl_Position = projection * view * aInstanceMatrix * vec4(aPos, 1.0f);
Normal = mat3(transpose(inverse(aInstanceMatrix))) * aNormal;
FragPos = vec3(aInstanceMatrix * vec4(aPos, 1.0));
}
+ +

Cubemap

加载天空盒

需要加载六个纹理。

+
unsigned int loadCubemap(vector<std::string> faces)
{
unsigned int textureID;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_CUBE_MAP, textureID);

int width, height, nrChannels;
for (unsigned int i = 0; i < faces.size(); i++)
{
unsigned char* data = stbi_load(faces[i].c_str(), &width, &height, &nrChannels, 0);
if (data)
{
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
stbi_image_free(data);
}
else
{
std::cout << "Cubemap texture failed to load at path: " << faces[i] << std::endl;
stbi_image_free(data);
}
}
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);

return textureID;
}
+ +

即所谓天空盒子,可以在场景四周贴上纹理,看起来就像是在一些场景中。

+
+

必须要注意的是,纹理图片必须是jpg格式的,大小必须为1024的倍数,比例必须是正方形。

+
+
// Sky box vertex data
// ------------
float skyboxVertices[] = {
// positions
-1.0f, 1.0f, -1.0f,
-1.0f, -1.0f, -1.0f,
1.0f, -1.0f, -1.0f,
1.0f, -1.0f, -1.0f,
1.0f, 1.0f, -1.0f,
-1.0f, 1.0f, -1.0f,

-1.0f, -1.0f, 1.0f,
-1.0f, -1.0f, -1.0f,
-1.0f, 1.0f, -1.0f,
-1.0f, 1.0f, -1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f, -1.0f, 1.0f,

1.0f, -1.0f, -1.0f,
1.0f, -1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f, -1.0f,
1.0f, -1.0f, -1.0f,

-1.0f, -1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f, -1.0f, 1.0f,
-1.0f, -1.0f, 1.0f,

-1.0f, 1.0f, -1.0f,
1.0f, 1.0f, -1.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f, 1.0f, -1.0f,

-1.0f, -1.0f, -1.0f,
-1.0f, -1.0f, 1.0f,
1.0f, -1.0f, -1.0f,
1.0f, -1.0f, -1.0f,
-1.0f, -1.0f, 1.0f,
1.0f, -1.0f, 1.0f
};


// skybox VAO
unsigned int skyboxVAO, skyboxVBO;
glGenVertexArrays(1, &skyboxVAO);
glGenBuffers(1, &skyboxVBO);
glBindVertexArray(skyboxVAO);
glBindBuffer(GL_ARRAY_BUFFER, skyboxVBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(skyboxVertices), &skyboxVertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);

vector<std::string> faces
{
"../assets/space/right.jpg",
"../assets/space/left.jpg",
"../assets/space/top.jpg",
"../assets/space/bottom.jpg",
"../assets/space/front.jpg",
"../assets/space/back.jpg",
};
unsigned int cubemapTexture = loadCubemap(faces);

skyboxShader.use();
skyboxShader.setInt("skybox", 0);
+ +

顶点着色器:

+
#version 330 core
layout (location = 0) in vec3 aPos;

out vec3 TexCoords;

uniform mat4 projection;
uniform mat4 view;

void main()
{
TexCoords = aPos;
vec4 pos = projection * view * vec4(aPos, 1.0);
gl_Position = pos.xyww;
}
+ +

片段着色器:

+
#version 330 core
out vec4 FragColor;
in vec3 TexCoords;
uniform samplerCube skybox;
void main()
{
FragColor = texture(skybox, TexCoords);
}
+ +

然后渲染:

+
 // draw skybox as last
glDepthFunc(GL_LEQUAL); // change depth function so depth test passes when values are equal to depth buffer's content
skyboxShader.use();
view = glm::mat4(glm::mat3(camera.GetViewMatrix())); // remove translation from the view matrix
skyboxShader.setMat4("view", view);
skyboxShader.setMat4("projection", projection);
// skybox cube
glBindVertexArray(skyboxVAO);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_CUBE_MAP, cubemapTexture);
glDrawArrays(GL_TRIANGLES, 0, 36);
glBindVertexArray(0);
glDepthFunc(GL_LESS); // set depth function back to default
+ +
贴图下载网站

有许多网站提供免费和付费的Cubemap贴图下载。你可以在这些网站上找到各种类型和风格的Cubemap贴图,以满足你的需求。以下是一些常见的资源网站:

+
    +
  1. HDRI Haven (https://hdrihaven.com/): 这是一个提供高动态范围图像(HDRI)和Cubemap贴图的免费资源网站。你可以在这里找到多种环境和天空盒子贴图。
  2. +
  3. Textures.com (https://www.textures.com/): 这个网站提供各种类型的纹理资源,包括Cubemap贴图。它有免费和付费选项。
  4. +
  5. Unity Asset Store (https://assetstore.unity.com/): 如果你使用Unity引擎,Unity Asset Store提供了丰富的Cubemap贴图资源,其中一些是免费的,而另一些需要购买。
  6. +
  7. Unreal Engine Marketplace (https://www.unrealengine.com/marketplace/): 如果你使用Unreal Engine,这个市场提供了许多Cubemap贴图资源,其中一些也是免费的。
  8. +
  9. Google搜索:你可以在Google上搜索”Cubemap textures”、”Skybox textures”或者其他相关关键词,找到更多的免费和付费资源。
  10. +
+

请注意,在使用免费或付费资源时,务必遵循相关许可协议和版权规定。有些资源可能需要你在商业项目中使用时付费或注明来源。另外,选择适合你项目需求的高质量贴图是非常重要的,这将有助于提升你项目的视觉效果和真实感。

+

stb_image库踩坑

加载stb_image库时,宏声明应在头文件之前,否则会找不到函数:

+
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
+ +

摄像机位置

添加空格上升镜头位置,ctrl降低镜头位置:

+
void ProcessKeyboard(Camera_Movement direction, float deltaTime)
{
float velocity = MovementSpeed * deltaTime; // 设定速度
// 根据方向调整方向向量
if (direction == FORWARD)
Position += Front * velocity;
if (direction == BACKWARD)
Position -= Front * velocity;
if (direction == LEFT)
Position -= Right * velocity;
if (direction == RIGHT)
Position += Right * velocity;
if (direction == UP)
Position.y += velocity;
if (direction == DOWN)
Position.y -= velocity;
// Position.y = 0.0f; // 确保不会偏离xz平面
}
+ +

模型加载库

image

+
    +
  • 和材质和网格(Mesh)一样,所有的场景/模型数据都包含在Scene对象中。Scene对象也包含了场景根节点的引用。
  • +
  • 场景的Root node(根节点)可能包含子节点(和其它的节点一样),它会有一系列指向场景对象中mMeshes数组中储存的网格数据的索引。Scene下的mMeshes数组储存了真正的Mesh对象,节点中的mMeshes数组保存的只是场景中网格数组的索引。
  • +
  • 一个Mesh对象本身包含了渲染所需要的所有相关数据,像是顶点位置、法向量、纹理坐标、面(Face)和物体的材质。
  • +
  • 一个网格包含了多个面。Face代表的是物体的渲染图元(Primitive)(三角形、方形、点)。一个面包含了组成图元的顶点的索引。由于顶点和索引是分开的,使用一个索引缓冲来渲染是非常简单的(见[你好,三角形](https://learnopengl-cn.github.io/01 Getting started/04 Hello Triangle/))。
  • +
  • 最后,一个网格也包含了一个Material对象,它包含了一些函数能让我们获取物体的材质属性,比如说颜色和纹理贴图(比如漫反射和镜面光贴图)。
  • +
+
+

所谓网格,就是渲染物体的最小单位

+
+

通过使用Assimp,我们可以加载不同的模型到程序中,但是载入后它们都被储存为Assimp的数据结构。我们最终仍要将这些数据转换为OpenGL能够理解的格式,这样才能渲染这个物体。

+

GLFW处理多个键同时输入

设置摄像机更快速的移动shift+w/s/a/d

+
// Faster
if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS)
camera.ProcessKeyboard(FASTER_FORWARD, deltaTime);
if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS)
camera.ProcessKeyboard(FASTER_BACKWARD, deltaTime);
if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS)
camera.ProcessKeyboard(FASTER_LEFT, deltaTime);
if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS)
camera.ProcessKeyboard(FASTER_RIGHT, deltaTime);
+ +

着色器类中的异常捕捉

// ensure ifstream objects can throw exceptions:
vShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
fShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);

try {
// open files
vShaderFile.open(vertexPath);
fShaderFile.open(fragmentPath);
std::stringstream vShaderStream, fShaderStream;
// read file's buffer contents into streams
vShaderStream << vShaderFile.rdbuf();
fShaderStream << fShaderFile.rdbuf();
// close file handlers
vShaderFile.close();
fShaderFile.close();
// convert stream into string
vertexCode = vShaderStream.str();
fragmentCode = fShaderStream.str();
} catch (std::ifstream::failure &e) {
std::cout << "ERROR::SHADER::FILE_NOT_SUCCESSFULLY_READ: "
<< e.what() << std::endl;
}
+ +

深入理解顶点着色器和片段着色器

在OpenGL核心模式的渲染中,这两个着色器是不能跳过的着色器,必须手动编写。

+

抗锯齿

超采样抗锯齿(Super Sample Anti-aliasing, SSAA):它会使用比正常分辨率更高的分辨率(即超采样)来渲染场景,当图像输出在帧缓冲中更新时,分辨率会被下采样(Downsample)至正常的分辨率。这些额外的分辨率会被用来防止锯齿边缘的产生。虽然它确实能够解决走样的问题,但是由于这样比平时要绘制更多的片段,它也会带来很大的性能开销。所以这项技术只拥有了短暂的辉煌。

+

多重采样抗锯齿(Multisample Anti-aliasing, MSAA):它借鉴了SSAA背后的理念,但却以更加高效的方式实现了抗锯齿。渲染图元时,不只使用像素中心点作为采样点,而是将一个像素分成多个子采样点(这也是为什么叫做多重采样的原因)。每个像素片段着色器只运行一次,其所使用的顶点数据会插值到每个像素中心,结果储存在每个被覆盖的子采样点中,每个像素内部会将采样点的颜色平均化。

+

在OpenGL中使用MSAA,可以通过Hint的方式,在创建窗口前调用:

+
glfwWindowHint(GLFW_SAMPLES, 4);
glEnable(GL_MULTISAMPLE); // 保险起见,启用一下多重采样(多数情况时默认启用的)
+ +

现在再调用glfwCreateWindow创建渲染窗口时,每个屏幕坐标就会使用一个包含4个子采样点的颜色缓冲了。GLFW会自动创建一个每像素4个子采样点的深度和样本缓冲。这也意味着所有缓冲的大小都增长了4倍。

+

ImGui

为了方便的查看场景,将鼠标禁用,使用光标回调函数来控制摄像机镜头的方向,所以使用imgui时不能使用鼠标拖动控件,如下:

+

image

+

因此要设置一个快捷键来唤出光标,捕捉并禁用光标的代码是在创建窗口后:

+
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
+ +

而实现快捷时有一个问题,实现摄像机在场景中移动是在渲染循环中使用processInput(window)函数,获取键盘输入来控制,这样可以实现一次按下连续控制,这也正是问题所在,如果直接在此函数中设置快捷键,按下一次会在每次渲染循环中都调用一次,表现为光标一直闪烁(因为一直在重复 获取光标、隐藏光标、获取光标…)。

+

解决方法是定义键盘回调函数,将切换光标的代码放到回调函数中,这样按一次键盘释放之前不会重复调用。

+
bool show_mouse = false; // global variable

// Key callback function
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
if (glfwGetKey(window, GLFW_KEY_LEFT_ALT) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_C) == GLFW_PRESS)
{
if (show_mouse)
{
show_mouse = false;
}
else
{
show_mouse = true;
}
// 捕捉鼠标,并隐藏光标
if (!show_mouse)
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
else
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
}
}

// Don't forget registering it after creating the window
// in main function
glfwSetKeyCallback(window, key_callback);
+ +
初始化

在渲染循环之外:

+
// Init Dear Imgui
const char* glsl_version = "#version 330";
IMGUI_CHECKVERSION();
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO(); (void)io;
ImGui::StyleColorsDark();

ImGui_ImplGlfw_InitForOpenGL(window, true);
ImGui_ImplOpenGL3_Init(glsl_version);
+ +
使用

在渲染循环内:

+
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();
{
// setup
ImGui::Begin("Cube and Lighting");
// ...
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); // Frame rate
ImGui::End();
}
ImGui::Render();
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
+ +
同一行放置多个控件
ImGui::SameLine();
+ +

可实现此语句前后的两个控件不换行。

+
控件例子
ImGui::Begin("Cube and Lighting");                          // Create a window called "Cube and Lighting" and append into it.

ImGui::Text("Here can be adjust some params of the sence."); // Display some text (you can use a format strings too)
ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state

ImGui::SliderFloat("ambientStrength", &ambientStrength, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f
ImGui::SliderFloat("specularStrength", &specularStrength, 0.0f, 1.0f);

ImGui::ColorEdit3("Cube color", (float*)&objectColor); // Edit 3 floats representing a color
ImGui::Text("Cube color = %f, %f, %f", objectColor.x, objectColor.y, objectColor.z);

if (ImGui::Button("Button"))
counter++;// Buttons return true when clicked (most widgets return true when edited/activated)

ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);
ImGui::End();
+ + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/07/30/note/Experience/rtmp/index.html b/2023/07/30/note/Experience/rtmp/index.html new file mode 100644 index 000000000..bd319bfcf --- /dev/null +++ b/2023/07/30/note/Experience/rtmp/index.html @@ -0,0 +1,687 @@ + + + + + + + + + + + + Linux下建立RTMP推流服务器 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Linux下建立RTMP推流服务器 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

在各大直播平台直播电视剧或电影,大概率会因版权问题被封掉,即使并没有其他人看。因此想要搭建一个私人的直播间。

+ + +

安装Docker

如Archlinux:

+
sudo pacman -S docker
+ +

启动

sudo systemctl enable --now docker
sudo systemctl status docker #查看运行状态
+ +

使用现有镜像tiangolo/nginx-rtmp

sudo docker pull tiangolo/nginx-rtmp

# 下载完成之后
sudo docker run -d -p 1935:1935 --name nginx-rtmp tiangolo/nginx-rtmp
+ +

OBS

注意,OBS似乎只能在X11下运行。如果使用Wayland,请切换到X11。

+
sudo pacman -S obs
+ +

推流地址为rtmp://<ip>/live/<passwd>

+

如果有防火墙,打开1935端口。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/08/10/note/Framework/OpenGL/opengl-wasm/index.html b/2023/08/10/note/Framework/OpenGL/opengl-wasm/index.html new file mode 100644 index 000000000..f77de0e01 --- /dev/null +++ b/2023/08/10/note/Framework/OpenGL/opengl-wasm/index.html @@ -0,0 +1,695 @@ + + + + + + + + + + + + OpenGL-5 WebGL与WASM | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ OpenGL-5 WebGL与WASM +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

工作需要,使用wasm技术将OpenGL程序编译成可在网页显示的程序。

+ + +

先上代码:

+
#include <functional>

#include <SDL.h>
#include <emscripten.h>

#define GL_GLEXT_PROTOTYPES 1
#include <SDL_opengles2.h>

// Shader sources
const GLchar *vertexSource = "attribute vec4 position; \n"
"void main() \n"
"{ \n"
" gl_Position = vec4(position.xyz, 1.0); \n"
"} \n";
const GLchar *fragmentSource =
"precision mediump float;\n"
"void main() \n"
"{ \n"
" gl_FragColor[0] = gl_FragCoord.x/640.0; \n"
" gl_FragColor[1] = gl_FragCoord.y/480.0; \n"
" gl_FragColor[2] = 0.5; \n"
"} \n";

// an example of something we will control from the javascript side
bool background_is_black = true;

// the function called by the javascript code
extern "C" void EMSCRIPTEN_KEEPALIVE toggle_background_color() {
background_is_black = !background_is_black;
}

std::function<void()> loop;
void main_loop() { loop(); }

int main() {

// Create window and renderer (context)
SDL_Window *window;
SDL_Renderer *renderer;
SDL_CreateWindowAndRenderer(640, 480, 0, &window, &renderer);

// Set attributes
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);

// vertex data
float vertices[] = {0.0f, 0.5f, 0.5f, -0.5f, -0.5f, -0.5f};

// Create a Vertex Buffer Object and copy the vertex data to it
unsigned int vbo, vao;
glGenBuffers(1, &vbo);
glGenVertexArraysOES(1, &vao);

glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

// Create and compile the vertex shader
unsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertexSource, nullptr);
glCompileShader(vertexShader);

// Create and compile the fragment shader
unsigned int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentSource, nullptr);
glCompileShader(fragmentShader);

// Link the vertex and fragment shader into a shader program
unsigned int shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
glUseProgram(shaderProgram);

// Specify the layout of the vertex data
unsigned int posAttrib = glGetAttribLocation(shaderProgram, "position");

glBindVertexArrayOES(vao);

glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(posAttrib);

loop = [&] {
// move a vertex
const uint32_t milliseconds_since_start = SDL_GetTicks();
const uint32_t milliseconds_per_loop = 3000;
vertices[0] = (milliseconds_since_start % milliseconds_per_loop) /
float(milliseconds_per_loop) -
0.5f;
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices,
GL_STATIC_DRAW);

// Clear the screen
if (background_is_black)
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
else
glClearColor(0.9f, 0.9f, 0.9f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

// Draw a triangle from the 3 vertices
glDrawArrays(GL_TRIANGLES, 0, 3);

SDL_GL_SwapWindow(window);
};

emscripten_set_main_loop(main_loop, 0, true);

return EXIT_SUCCESS;
}
+ +

编译运行:

+
emcc main.cpp -std=c++11 -s WASM=1 -s USE_SDL=2 -O3 -o index.js
python -m http.server 8080
+ +

image

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/08/18/note/Experience/livecd-on-disk/index.html b/2023/08/18/note/Experience/livecd-on-disk/index.html new file mode 100644 index 000000000..246783152 --- /dev/null +++ b/2023/08/18/note/Experience/livecd-on-disk/index.html @@ -0,0 +1,709 @@ + + + + + + + + + + + + 在Windows的硬盘上创建liveCD引导启动linux安装 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 在Windows的硬盘上创建liveCD引导启动linux安装 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

装完Archlinux发现忘记安装iwd和dhcpcd了,无法联网,又没有额外的U盘制作liveCD,因此开辟出一块硬盘分区来引导临时系统。

+ + +

步骤

    +
  1. 首先下载EasyUEFI,网上随便下都行。

    +
  2. +
  3. 然后下载系统镜像:archlinux-2023.08.01-x86_64.iso

    +
  4. +
  5. 使用Windows自带的磁盘管理工具或DiskGenius分出一块空闲的分区,大小最好在5G以上(最小多少我也没有试),然后格式化成FAT32的格式。将镜像文件archlinux-2023.08.01-x86_64.iso解压到这个分区中。

    +
  6. +
  7. 打开EasyUEFI,选择管理EFI启动项:

    +
  8. +
+

image

+

然后创建新项:image

+

描述是启动项的名字,随便写一个能分辨的即可。

+
    +
  1. 文件路径要找到刚刚解压到新分区的efi文件,不同的发行版可能有所不同,一般名字为grub.efiBOOT64.efi,路径基本上都是/EFI/BOOT/*.efi

    +

    image

    +
  2. +
+

然后就可以重启电脑,选择启动项了。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/08/23/note/Framework/OpenGL/opengl_shadow/index.html b/2023/08/23/note/Framework/OpenGL/opengl_shadow/index.html new file mode 100644 index 000000000..12a3b5453 --- /dev/null +++ b/2023/08/23/note/Framework/OpenGL/opengl_shadow/index.html @@ -0,0 +1,692 @@ + + + + + + + + + + + + OpenGL-4 阴影 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ OpenGL-4 阴影 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

阴影映射(Shadow Mapping):以光的位置为视角进行渲染,能看到的东西都将被点亮,看不见的一定是在阴影之中。

+ + +

阴影映射

深度测试教程中,在深度缓冲里的一个值是摄像机视角下,对应于一个片段的一个0到1之间的深度值。从光源的透视图来渲染场景,并把深度值的结果储存到纹理中,储存在纹理中的所有这些深度值,叫做深度贴图(depth map)或阴影贴图

+

第一步我们需要生成一张深度贴图(Depth Map)。深度贴图是从光的透视图里渲染的深度纹理,用它计算阴影。因为我们需要将场景的渲染结果储存到一个纹理中,我们将再次需要帧缓冲。

+

创建Shadow Mapping

首先为渲染的深度贴图创建一个帧缓冲对象:

+
GLuint depthMapFBO;
glGenFramebuffers(1, &depthMapFBO);
+ +

然后,创建一个2D纹理,提供给帧缓冲的深度缓冲使用:

+
const GLuint SHADOW_WIDTH = 1024, SHADOW_HEIGHT = 1024;

GLuint depthMap;
glGenTextures(1, &depthMap);
glBindTexture(GL_TEXTURE_2D, depthMap);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT,
SHADOW_WIDTH, SHADOW_HEIGHT, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+ +

生成深度贴图不太复杂。因为我们只关心深度值,我们要把纹理格式指定为GL_DEPTH_COMPONENT。我们还要把纹理的高宽设置为1024,这是深度贴图的分辨率。

+

把我们把生成的深度纹理作为帧缓冲的深度缓冲:

+
glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthMap, 0);
glDrawBuffer(GL_NONE);
glReadBuffer(GL_NONE);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
+ +

我们需要的只是在从光的透视图下渲染场景的时候深度信息,所以颜色缓冲没有用。然而,不包含颜色缓冲的帧缓冲对象是不完整的,所以我们需要显式告诉OpenGL我们不适用任何颜色数据进行渲染。我们通过将调用glDrawBufferglReadBuffer把读和绘制缓冲设置为GL_NONE来做这件事。

+

合理配置将深度值渲染到纹理的帧缓冲后,我们就可以开始第一步了:生成深度贴图。两个步骤的完整的渲染阶段,看起来有点像这样:

+
// 1. 首选渲染深度贴图
glViewport(0, 0, SHADOW_WIDTH, SHADOW_HEIGHT);
glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO);
glClear(GL_DEPTH_BUFFER_BIT);
ConfigureShaderAndMatrices();
RenderScene();
glBindFramebuffer(GL_FRAMEBUFFER, 0);
// 2. 像往常一样渲染场景,但这次使用深度贴图
glViewport(0, 0, SCR_WIDTH, SCR_HEIGHT);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
ConfigureShaderAndMatrices();
glBindTexture(GL_TEXTURE_2D, depthMap);
RenderScene();
+ +

这段代码隐去了一些细节,但它表达了阴影映射的基本思路。这里一定要记得调用glViewport。因为阴影贴图经常和我们原来渲染的场景(通常是窗口分辨率)有着不同的分辨率,我们需要改变视口(viewport)的参数以适应阴影贴图的尺寸。如果我们忘了更新视口参数,最后的深度贴图要么太小要么就不完整。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/09/14/note/Programming/evn/clang-format/index.html b/2023/09/14/note/Programming/evn/clang-format/index.html new file mode 100644 index 000000000..068eda9ff --- /dev/null +++ b/2023/09/14/note/Programming/evn/clang-format/index.html @@ -0,0 +1,686 @@ + + + + + + + + + + + + Clang-format配置 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Clang-format配置 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + image + +
+

这是一个.clang-format的备份。

+
+ + +
--- 

BasedOnStyle: Microsoft

# 访问说明符(public、private等)的偏移
AccessModifierOffset: -2

# 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)
AlignAfterOpenBracket: AlwaysBreak

# 连续赋值时,对齐所有等号
AlignConsecutiveAssignments: true

# 连续声明时,对齐所有声明的变量名
AlignConsecutiveDeclarations: true

# 左对齐逃脱换行(使用反斜杠换行)的反斜杠
AlignEscapedNewlinesLeft: true

# 水平对齐二元和三元表达式的操作数
AlignOperands: true

# 对齐连续的尾随的注释
AlignTrailingComments: true

# 允许函数声明的所有参数在放在下一行
AllowAllParametersOfDeclarationOnNextLine: false

# 允许短的块放在同一行
AllowShortBlocksOnASingleLine: true

# 允许短的case标签放在同一行
AllowShortCaseLabelsOnASingleLine: false

# 允许短的函数放在同一行: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), All
AllowShortFunctionsOnASingleLine: Inline

# 允许短(只有一行时)的if语句保持在同一行
AllowShortIfStatementsOnASingleLine: false

# 允许短的循环保持在同一行
AllowShortLoopsOnASingleLine: true

# 总是在定义返回类型后换行(deprecated)
AlwaysBreakAfterDefinitionReturnType: None

# 总是在返回类型后换行: None, All, TopLevel(顶级函数,不包括在类中的函数), AllDefinitions(所有的定义,不包括声明), TopLevelDefinitions(所有的顶级函数的定义)
AlwaysBreakAfterReturnType: None

# 总是在多行string字面量前换行
AlwaysBreakBeforeMultilineStrings: false

# 总是在template声明后换行
AlwaysBreakTemplateDeclarations: false

# false表示函数实参要么都在同一行,要么都各自一行
BinPackArguments: true

# false表示所有形参要么都在同一行,要么都各自一行
BinPackParameters: true

# 使用Microsoft风格,故不再配置
# # 在二元运算符前换行: None(在操作符后换行), NonAssignment(在非赋值的操作符前换行), All(在操作符前换行)
# BreakBeforeBinaryOperators: NonAssignment

# # 在大括号前换行: Attach(始终将大括号附加到周围的上下文), Linux(除函数、命名空间和类定义,与Attach类似),
# # Mozilla(除枚举、函数、记录定义,与Attach类似), Stroustrup(除函数定义、catch、else,与Attach类似),
# # Allman(总是在大括号前换行), GNU(总是在大括号前换行,并对于控制语句的大括号增加额外的缩进), WebKit(在函数前换行), Custom
# # 注:这里认为语句块也属于函数
# BreakBeforeBraces: Custom

# # 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效
# BraceWrapping:
# # class定义后面
# AfterClass: true
# # 控制语句后面
# AfterControlStatement: false
# # enum定义后面
# AfterEnum: false
# # 函数定义后面
# AfterFunction: true
# # 命名空间定义后面
# AfterNamespace: false
# # ObjC定义后面
# AfterObjCDeclaration: false
# # struct定义后面
# AfterStruct: false
# # union定义后面
# AfterUnion: false
# # catch之前
# BeforeCatch: true
# # else之前
# BeforeElse: true
# # 缩进大括号
# IndentBraces: true

# 在三元运算符前换行
BreakBeforeTernaryOperators: true

# 在构造函数的初始化列表的逗号前换行
BreakConstructorInitializersBeforeComma: true

# 每行字符的限制,0表示没有限制
# ColumnLimit: 200

# 描述具有特殊意义的注释的正则表达式,它不应该被分割为多行或以其它方式改变
CommentPragmas: '^ IWYU pragma:'

# 构造函数的初始化列表要么都在同一行,要么都各自一行
ConstructorInitializerAllOnOneLineOrOnePerLine: true

# 构造函数的初始化列表的缩进宽度
ConstructorInitializerIndentWidth: 4

# 延续的行的缩进宽度
ContinuationIndentWidth: 4

# 去除C++11的列表初始化的大括号{后和}前的空格
Cpp11BracedListStyle: false

# 继承最常用的指针和引用的对齐方式
DerivePointerAlignment: false

# 关闭格式化
DisableFormat: false

# 自动检测函数的调用和定义是否被格式为每行一个参数(Experimental)
ExperimentalAutoDetectBinPacking: false

# 需要被解读为foreach循环而不是函数调用的宏
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]

# 缩进case标签
IndentCaseLabels: false

# 缩进宽度
IndentWidth: 4

# 函数返回类型换行时,缩进函数声明或函数定义的函数名
IndentWrappedFunctionNames: false

# 保留在块开始处的空行
KeepEmptyLinesAtTheStartOfBlocks: true

# 开始一个块的宏的正则表达式
MacroBlockBegin: ''

# 结束一个块的宏的正则表达式
MacroBlockEnd: ''

# 连续空行的最大数量
MaxEmptyLinesToKeep: 1

# 命名空间的缩进: None, Inner(缩进嵌套的命名空间中的内容), All
NamespaceIndentation: Inner

# 在call(后对函数调用换行的penalty
PenaltyBreakBeforeFirstCallParameter: 19

# 在一个注释中引入换行的penalty
PenaltyBreakComment: 300

# 指针和引用的对齐: Left, Right, Middle
PointerAlignment: Left

# 允许重新排版注释
ReflowComments: true

# 允许排序#include
SortIncludes: true

# 在赋值运算符之前添加空格
SpaceBeforeAssignmentOperators: true

# 开圆括号之前添加一个空格: Never, ControlStatements, Always
SpaceBeforeParens: ControlStatements

# 在空的圆括号中添加空格
SpaceInEmptyParentheses: false

# 在尾随的评论前添加的空格数(只适用于//)
SpacesBeforeTrailingComments: 2

# 在尖括号的<后和>前添加空格
SpacesInAngles: false

# 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, Always
UseTab: Never
+ + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git "a/2023/10/07/note/Literature/\346\213\276\347\276\275/\346\213\276\347\276\2752023/index.html" "b/2023/10/07/note/Literature/\346\213\276\347\276\275/\346\213\276\347\276\2752023/index.html" new file mode 100644 index 000000000..d7d8fd934 --- /dev/null +++ "b/2023/10/07/note/Literature/\346\213\276\347\276\275/\346\213\276\347\276\2752023/index.html" @@ -0,0 +1,684 @@ + + + + + + + + + + + + 拾羽二〇二三 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ 拾羽二〇二三 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +
+

🍂标题时间为创建本文的时间。

+
+

可以想象,一位反复无常的上帝正是和一个反复无常的世界相对应的,当一个社会陷入混乱动荡,正义无处伸张时,一个能够除暴惩恶的铁血上帝必定给人们心中带来可贵的因果感和正义感。

+

中世纪那种对“来世”和“拯救”的专注也早已引不起现代人的兴趣,他们不再把现世仅仅看作对来世的准备,现世对他们来说即便不是一切,也无疑比来世重要得多。

+ + +

爱默生自己也是疾病缠身,他深知自己的局限而感叹道:“上帝赋予我会看的眼睛,却没有赋予我会做的双手。”

+

惠特曼的《草叶集》狂放地赞颂自我和自然,充满了激情和泥土味,当时的一些正统文人颇不以为然。

+

爱默生的弟弟威廉也是个牧师,他深感自己私下的想法与公开的布道之间存在着不可调和的矛盾,为此十分烦恼。他去德国与歌德交谈了一次,回来后毅然放弃了牧师的职务,改行从事法律。「对个人主义的反思 爱默生」

+

大脑并不是一台对输入做出响应的机器,而是一个具有主动性的器官;大脑的“硬件”会随着经验改变、发展。

+

历史总要过去一段时间才更像历史,越接近当下,世界就越像一堆问题而不像一段历史。

+

大脑如此复杂,具有如此敏感的可塑性,这意味着世界能以更加丰富的区别呈现于不同的个体中。无论是人类的大脑还是人的心智,世界都对其呈现了它的极大丰富性。与这个呈现出极大丰富性的世界相对应的,正是每一个心智不可替代的独特性。「大脑传」

+

对爱情的渴望,对知识的追求,对人类苦难不可遏制的同情心,这三种纯洁而无比强烈的激情支配着我的一生。这三种激情,就像飓风一样,在深深的苦海上,肆意地把我吹来吹去,吹到濒临绝望的边缘。「我为什么而活着 罗素」

+

以色事人者,色衰而爱弛。

+

以财伺人者,财尽而交疏。

+

「史记·吕不韦列传」

+

毕达哥拉斯晚年时完全抛开了对数学和几何学的研究,他的所有智慧都被命运的难题挟持。幸福或不幸、智慧或愚蠢、美貌或丑陋、理智或放纵……这些主宰我们道德生活的事物,看起来完全依赖神对人类命运的分配。如何让分配到糟糕命运的人依然心甘情愿地遵循美德,这是命运之神布下的最大难题。

+

遭到美丽事物的嘲讽,会令人丧失与丑陋划清界限的勇气。「尼禄王 姚无咎」

+

仁不行商、义不守财;情不立威,善不居官;慈不掌兵,柔不监国。 「增广贤文」

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/10/20/note/Experience/qt-questions/index.html b/2023/10/20/note/Experience/qt-questions/index.html new file mode 100644 index 000000000..4f7ba7e04 --- /dev/null +++ b/2023/10/20/note/Experience/qt-questions/index.html @@ -0,0 +1,698 @@ + + + + + + + + + + + + Qt相关问题杂项 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Qt相关问题杂项 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

使用在线安装器换源以加快下载速度。

+

image

+

参考清华大学镜像站 - Qt 软件仓库镜像使用帮助

+ + +
+

以下内容为复制上述链接中的内容。

+
+

通过以下链接下载在线安装器

+
https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/
+ +

通过

+
# linux
installer --mirror https://mirrors.tuna.tsinghua.edu.cn/qt
# windows
installer.exe --mirror https://mirrors.tuna.tsinghua.edu.cn/qt
+ +

使用该镜像。

+

Qt在Windows下配置环境变量

    +
  1. PATH:在环境变量(PATH)中添加Qt安装目录中的编译器bin文件夹,如D:\Libraries\Qt\5.15.2\msvc2019_64\bin
  2. +
  3. QTDIR:添加一个环境变量,名字为QTDIR,文件夹为Qt安装目录的某一个版本的文件夹,如D:\Libraries\Qt\5.15.2
  4. +
+

xmake创建qt应用

xmake create -t qt.widgetapp myapp -P .
+ + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/11/17/note/Framework/OpenGL/opengl-macos/index.html b/2023/11/17/note/Framework/OpenGL/opengl-macos/index.html new file mode 100644 index 000000000..c2c9fae4c --- /dev/null +++ b/2023/11/17/note/Framework/OpenGL/opengl-macos/index.html @@ -0,0 +1,694 @@ + + + + + + + + + + + + MacOS创建OpenGL程序 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ MacOS创建OpenGL程序 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

在macOS上构建OpenGL程序需要安装一些依赖,而mac的包管理器毕竟远不如Linux。

+ + +

Clangd

mac上安装编译器后并不会自带clangd,需要安装llvm包,但是Homebrew安装需要自行编译,速度太慢,直接下载clangd,将bin和lib复制到对应的地方即可。

+

glfw与glew

使用Homebrew安装似乎总有问题,因此选择使用Macport。

+
sudo port install glfw
sudo port install glew
+ +

安装的头文件路径为/opt/loacl/include,库文件路径为/opt/loacl/lib,编译时要主动添加,clang不会自动识别。

+

如使用xmake构建时,应在xmake.lua文件中添加:

+
-- libraries
add_linkdirs("/opt/local/lib")
add_includedirs("/opt/local/include")

add_links("glfw")

if is_plat("macosx") then
add_frameworks("OpenGL")
end
+ +

如果项目中需要添加ImGUI,则C++版本至少C11,可在xmake.lua文件中添加:

+
set_languages("cxx17")
+ + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/2023/11/29/note/Programming/Language/cpp_lib/index.html b/2023/11/29/note/Programming/Language/cpp_lib/index.html new file mode 100644 index 000000000..1ac6be588 --- /dev/null +++ b/2023/11/29/note/Programming/Language/cpp_lib/index.html @@ -0,0 +1,712 @@ + + + + + + + + + + + + C++的动态库与静态库 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ C++的动态库与静态库 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ +

在C++中,动态库(Dynamic Link Library,DLL)和静态库(Static Library)是两种不同的库文件,它们在程序中的链接方式和运行时行为上有一些重要的异同点。

+ + +

动态库与静态库的相同点

    +
  1. 库的作用: 无论是动态库还是静态库,它们的目的都是为了将代码模块化,以便在多个程序中共享和重复使用。

    +
  2. +
  3. 包含编译后的二进制代码: 两者都包含了已经编译好的二进制代码,可以被程序调用。

    +
  4. +
+

动态库与静态库不同点

    +
  1. 链接方式

    +
      +
    • 动态库: 在程序运行时动态加载,链接是在运行时进行的。动态库的代码并不在编译时与程序代码直接链接,而是在运行时由操作系统动态加载。
    • +
    • 静态库: 在程序编译时被链接到程序中。编译器在编译时将库的代码和程序的代码合并成一个可执行文件。
    • +
    +
  2. +
  3. 文件扩展名

    +
      +
    • 动态库: 通常有不同的扩展名,如.dll(Windows,Dynamic Link Library)或.so(Linux,Shared Object)。
    • +
    • 静态库: 通常有不同的扩展名,如.lib(Windows,Library)或.a(Linux,Archive)。
    • +
    +
  4. +
  5. 文件大小

    +
      +
    • 动态库: 通常比静态库小,因为多个程序可以共享一个动态库的实例。
    • +
    • 静态库: 通常较大,因为每个使用该库的程序都会包含其完整的副本。
    • +
    +
  6. +
  7. 更新和维护

    +
      +
    • 动态库: 如果动态库的代码发生变化,只需替换动态库文件即可。程序无需重新编译。
    • +
    • 静态库: 如果静态库的代码发生变化,必须重新编译并链接使用该库的程序。
    • +
    +
  8. +
  9. 内存使用

    +
      +
    • 动态库: 共享一份内存,因此在系统中只有一个副本。
    • +
    • 静态库: 每个使用该库的程序都有其自己的副本,因此可能会占用更多内存。
    • +
    +
  10. +
  11. 移植性

    +
      +
    • 动态库: 更易于实现跨平台的移植,因为动态库可以在不同平台上具有相同的接口。
    • +
    • 静态库: 在不同平台上可能需要不同的库文件。
    • +
    +
  12. +
+

在实际应用中,选择使用动态库还是静态库取决于项目的需求和设计考虑。通常,动态库在共享代码、更新维护和节省内存方面具有优势,而静态库在性能和依赖管理方面可能更有优势。

+
+

总结:静态库相当于添加额外的编译单元,直接链接到可执行文件中;而动态库只是将符号链接到可执行文件,当需要调用库的内容时,从动态库文件中调用

+
+

不同平台

+

不同操作系统和硬件架构之间存在差异,导致在编译和链接时产生的二进制代码也有所不同。

+
+

不同的操作系统有不同的系统调用、API和二进制接口。一个在Windows上编译的库通常不能直接在Linux上使用,反之亦然。

+

不同的硬件体系结构(如x86、x86_64、ARM等)具有不同的指令集和内存布局。库中包含的机器代码通常是特定于体系结构的,因此需要为特定体系结构进行编译。

+

不同的编译器和工具链可能会对代码生成、调试信息等方面有所不同,使用不同的编译器编译的库可能是不兼容的。

+

代码差异

静态库的代码正常写,可以直接编译链接,而动态库则需要定义哪些需要被导出,不同平台的顶踹方式有所不同。

+

在Windows平台上使用 __declspec(dllexport)__declspec(dllimport) 来指定导出和导入符号。

+

在Linux/Unix(MacOS)平台上使用 __attribute__((visibility("default"))) 来指定导出符号。

+

跨平台使用时,使用宏定义不同平台的导出代码:

+
#ifdef __WIN32__
#ifdef LIBRARY_EXPORTS
#define MY_API __declspec(dllexport)
#else
#define MY_API __declspec(dllimport)
#endif
#else
#define MY_API __attribute__((visibility("default")))
#endif

// 在动态库中导出符号
class MY_API MyClass {
public:
void myFunction();
};
+ + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ + +
+ +
+ +
+ +
显示评论
+ + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + diff --git a/about/index.html b/about/index.html new file mode 100644 index 000000000..d2c47d7fe --- /dev/null +++ b/about/index.html @@ -0,0 +1,455 @@ + + + + + + + + + + + + 关于 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + +
+
+ + +
+ +

狄俄尼索斯

在希腊神话中,阿波罗和狄俄尼索斯都是宙斯的儿子。雷托之子阿波罗是太阳、艺术、音乐、诗歌、瘟疫和疾病之神,理性思维和秩序之神,诉诸逻辑、审慎和纯洁,代表理性。狄俄尼索斯,塞墨勒之子,是酒神、舞蹈和享乐之神,非理性和混乱之神,代表激情、情感和本能。古希腊人并不认为这两个神是对立或竞争的,尽管他们经常在自然界中纠缠在一起。

+

他通过幽灵瞥见了超自然的现实;他获得了真正的知识,并且知道他的任何行动都无法改变这一点。对于这类戏剧的观众来说,这场悲剧让他们感受到了尼采所谓的原始统一,即酒神本性的复苏。他将原始统一描述为力量的增加,是狂热赋予的充实和充实的体验。狂热起到陶醉的作用,对于能够创造任何艺术的生理条件至关重要。受这种状态的刺激,一个人的艺术意志得到增强:

+
+

在这种状态下,一个人从自己的圆满中丰富了一切:无论他看到什么,他的意志都会膨胀、绷紧、强壮、充满力量。处于这种状态的人会改变事物,直到它们反映出他的力量——直到它们反映出他的完美。这种必须转化为完美的东西就是——艺术。

+
+

——引自维基百科

+ + +
+ +
+ + + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2020/02/index.html b/archives/2020/02/index.html new file mode 100644 index 000000000..b24f0212c --- /dev/null +++ b/archives/2020/02/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2020/2 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2020/04/index.html b/archives/2020/04/index.html new file mode 100644 index 000000000..a89c342b2 --- /dev/null +++ b/archives/2020/04/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2020/4 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2020/05/index.html b/archives/2020/05/index.html new file mode 100644 index 000000000..e491e2f12 --- /dev/null +++ b/archives/2020/05/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2020/5 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2020/10/index.html b/archives/2020/10/index.html new file mode 100644 index 000000000..b494f580f --- /dev/null +++ b/archives/2020/10/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2020/10 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2020/index.html b/archives/2020/index.html new file mode 100644 index 000000000..f83768995 --- /dev/null +++ b/archives/2020/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2020 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2022/01/index.html b/archives/2022/01/index.html new file mode 100644 index 000000000..e107d6422 --- /dev/null +++ b/archives/2022/01/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2022/1 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2022/03/index.html b/archives/2022/03/index.html new file mode 100644 index 000000000..98a7d5a0d --- /dev/null +++ b/archives/2022/03/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2022/3 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2022/05/index.html b/archives/2022/05/index.html new file mode 100644 index 000000000..befb3a6a6 --- /dev/null +++ b/archives/2022/05/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2022/5 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2022/06/index.html b/archives/2022/06/index.html new file mode 100644 index 000000000..64d9c9224 --- /dev/null +++ b/archives/2022/06/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2022/6 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2022/11/index.html b/archives/2022/11/index.html new file mode 100644 index 000000000..71f1e78f1 --- /dev/null +++ b/archives/2022/11/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2022/11 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2022/index.html b/archives/2022/index.html new file mode 100644 index 000000000..50a37d7a6 --- /dev/null +++ b/archives/2022/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2022 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2022/page/2/index.html b/archives/2022/page/2/index.html new file mode 100644 index 000000000..50a37d7a6 --- /dev/null +++ b/archives/2022/page/2/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2022 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/05/index.html b/archives/2023/05/index.html new file mode 100644 index 000000000..1a64487ab --- /dev/null +++ b/archives/2023/05/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023/5 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/05/page/2/index.html b/archives/2023/05/page/2/index.html new file mode 100644 index 000000000..1a64487ab --- /dev/null +++ b/archives/2023/05/page/2/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023/5 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/05/page/3/index.html b/archives/2023/05/page/3/index.html new file mode 100644 index 000000000..1a64487ab --- /dev/null +++ b/archives/2023/05/page/3/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023/5 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/06/index.html b/archives/2023/06/index.html new file mode 100644 index 000000000..e5d1a3f5a --- /dev/null +++ b/archives/2023/06/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023/6 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/06/page/2/index.html b/archives/2023/06/page/2/index.html new file mode 100644 index 000000000..e5d1a3f5a --- /dev/null +++ b/archives/2023/06/page/2/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023/6 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/07/index.html b/archives/2023/07/index.html new file mode 100644 index 000000000..5dcdd59fc --- /dev/null +++ b/archives/2023/07/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023/7 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/07/page/2/index.html b/archives/2023/07/page/2/index.html new file mode 100644 index 000000000..5dcdd59fc --- /dev/null +++ b/archives/2023/07/page/2/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023/7 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/08/index.html b/archives/2023/08/index.html new file mode 100644 index 000000000..cb8afa1c2 --- /dev/null +++ b/archives/2023/08/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023/8 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/09/index.html b/archives/2023/09/index.html new file mode 100644 index 000000000..d9d86cfba --- /dev/null +++ b/archives/2023/09/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023/9 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/10/index.html b/archives/2023/10/index.html new file mode 100644 index 000000000..233d7bea1 --- /dev/null +++ b/archives/2023/10/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023/10 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/11/index.html b/archives/2023/11/index.html new file mode 100644 index 000000000..4da9e748f --- /dev/null +++ b/archives/2023/11/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023/11 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/index.html b/archives/2023/index.html new file mode 100644 index 000000000..f353aa81f --- /dev/null +++ b/archives/2023/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/page/2/index.html b/archives/2023/page/2/index.html new file mode 100644 index 000000000..f353aa81f --- /dev/null +++ b/archives/2023/page/2/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/page/3/index.html b/archives/2023/page/3/index.html new file mode 100644 index 000000000..f353aa81f --- /dev/null +++ b/archives/2023/page/3/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/page/4/index.html b/archives/2023/page/4/index.html new file mode 100644 index 000000000..f353aa81f --- /dev/null +++ b/archives/2023/page/4/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/page/5/index.html b/archives/2023/page/5/index.html new file mode 100644 index 000000000..f353aa81f --- /dev/null +++ b/archives/2023/page/5/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/2023/page/6/index.html b/archives/2023/page/6/index.html new file mode 100644 index 000000000..f353aa81f --- /dev/null +++ b/archives/2023/page/6/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档: 2023 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/index.html b/archives/index.html new file mode 100644 index 000000000..9c6a730c0 --- /dev/null +++ b/archives/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/page/2/index.html b/archives/page/2/index.html new file mode 100644 index 000000000..9c6a730c0 --- /dev/null +++ b/archives/page/2/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/page/3/index.html b/archives/page/3/index.html new file mode 100644 index 000000000..9c6a730c0 --- /dev/null +++ b/archives/page/3/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/page/4/index.html b/archives/page/4/index.html new file mode 100644 index 000000000..9c6a730c0 --- /dev/null +++ b/archives/page/4/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/page/5/index.html b/archives/page/5/index.html new file mode 100644 index 000000000..9c6a730c0 --- /dev/null +++ b/archives/page/5/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/page/6/index.html b/archives/page/6/index.html new file mode 100644 index 000000000..9c6a730c0 --- /dev/null +++ b/archives/page/6/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/page/7/index.html b/archives/page/7/index.html new file mode 100644 index 000000000..9c6a730c0 --- /dev/null +++ b/archives/page/7/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/archives/page/8/index.html b/archives/page/8/index.html new file mode 100644 index 000000000..9c6a730c0 --- /dev/null +++ b/archives/page/8/index.html @@ -0,0 +1,1112 @@ + + + + + + + + + + + + 归档 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + 2023 + + [58] +
+ +
+ +
+
+ + 2022 + + [13] +
+ +
+ +
+
+ + 2020 + + [6] +
+ +
+ +
+
+
+ + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/categories/index.html b/categories/index.html new file mode 100644 index 000000000..71e06d69a --- /dev/null +++ b/categories/index.html @@ -0,0 +1,386 @@ + + + + + + + + + + + + 分类 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/index.html" "b/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/index.html" new file mode 100644 index 000000000..15f61e18e --- /dev/null +++ "b/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/index.html" @@ -0,0 +1,527 @@ + + + + + + + + + + + + 分类: 不言不载唯此玩心 · 文学 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  不言不载唯此玩心 · 文学 +
+
+ +
+ +
+
+ + 2023 + + [3] +
+ +
+ +
+
+ + 2022 + + [3] +
+ +
+ +
+
+ + 2020 + + [4] +
+ +
+ +
+
+
+
+
+ + + + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/page/2/index.html" "b/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/page/2/index.html" new file mode 100644 index 000000000..7542e173f --- /dev/null +++ "b/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/page/2/index.html" @@ -0,0 +1,431 @@ + + + + + + + + + + + + 分类: 不言不载唯此玩心 · 文学 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  不言不载唯此玩心 · 文学 +
+
+ +
+ +
+
+ + 2020 + + [2] +
+ +
+ +
+
+
+
+
+ + + + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/\345\260\217\350\257\264/index.html" "b/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/\345\260\217\350\257\264/index.html" new file mode 100644 index 000000000..ba8d4666d --- /dev/null +++ "b/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/\345\260\217\350\257\264/index.html" @@ -0,0 +1,457 @@ + + + + + + + + + + + + 分类: 小说 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  小说 +
+
+ +
+ +
+
+ + 2022 + + [1] +
+ +
+ +
+
+ + 2020 + + [3] +
+ +
+ +
+
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/\346\213\276\347\276\275/index.html" "b/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/\346\213\276\347\276\275/index.html" new file mode 100644 index 000000000..02b56ba12 --- /dev/null +++ "b/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/\346\213\276\347\276\275/index.html" @@ -0,0 +1,439 @@ + + + + + + + + + + + + 分类: 拾羽 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  拾羽 +
+
+ +
+ +
+
+ + 2023 + + [1] +
+ +
+ +
+
+ + 2020 + + [1] +
+ +
+ +
+
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/\346\225\243\346\226\207/index.html" "b/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/\346\225\243\346\226\207/index.html" new file mode 100644 index 000000000..4f1688953 --- /dev/null +++ "b/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/\346\225\243\346\226\207/index.html" @@ -0,0 +1,457 @@ + + + + + + + + + + + + 分类: 散文 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  散文 +
+
+ +
+ +
+
+ + 2022 + + [2] +
+ +
+ +
+
+ + 2020 + + [2] +
+ +
+ +
+
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/\351\230\205\350\257\273/index.html" "b/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/\351\230\205\350\257\273/index.html" new file mode 100644 index 000000000..9560e331e --- /dev/null +++ "b/categories/\344\270\215\350\250\200\344\270\215\350\275\275\345\224\257\346\255\244\347\216\251\345\277\203-\302\267-\346\226\207\345\255\246/\351\230\205\350\257\273/index.html" @@ -0,0 +1,427 @@ + + + + + + + + + + + + 分类: 阅读 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  阅读 +
+
+ +
+ +
+
+ + 2023 + + [2] +
+ +
+ +
+
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Android/index.html" "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Android/index.html" new file mode 100644 index 000000000..57cf29148 --- /dev/null +++ "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Android/index.html" @@ -0,0 +1,448 @@ + + + + + + + + + + + + 分类: Android | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  Android +
+
+ +
+ +
+
+ + 2023 + + [1] +
+ +
+ +
+
+ + 2022 + + [2] +
+ +
+ +
+
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Code-Editor/index.html" "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Code-Editor/index.html" new file mode 100644 index 000000000..777a3241e --- /dev/null +++ "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Code-Editor/index.html" @@ -0,0 +1,427 @@ + + + + + + + + + + + + 分类: Code-Editor | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  Code-Editor +
+
+ +
+ +
+
+ + 2023 + + [2] +
+ +
+ +
+
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Hexo-\345\215\232\345\256\242\346\220\255\345\273\272/index.html" "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Hexo-\345\215\232\345\256\242\346\220\255\345\273\272/index.html" new file mode 100644 index 000000000..ea54f7241 --- /dev/null +++ "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Hexo-\345\215\232\345\256\242\346\220\255\345\273\272/index.html" @@ -0,0 +1,445 @@ + + + + + + + + + + + + 分类: Hexo 博客搭建 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  Hexo 博客搭建 +
+
+ + +
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Linux/index.html" "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Linux/index.html" new file mode 100644 index 000000000..f24e66052 --- /dev/null +++ "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Linux/index.html" @@ -0,0 +1,503 @@ + + + + + + + + + + + + 分类: Linux | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  Linux +
+
+ +
+ +
+
+ + 2023 + + [10] +
+ +
+ +
+
+
+
+
+ + + + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Linux/page/2/index.html" "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Linux/page/2/index.html" new file mode 100644 index 000000000..4e5e24ca6 --- /dev/null +++ "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Linux/page/2/index.html" @@ -0,0 +1,470 @@ + + + + + + + + + + + + 分类: Linux | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  Linux +
+
+ +
+ +
+
+ + 2023 + + [3] +
+ +
+ +
+
+ + 2022 + + [2] +
+ +
+ +
+
+
+
+
+ + + + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Windows/index.html" "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Windows/index.html" new file mode 100644 index 000000000..f2edc9db3 --- /dev/null +++ "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/Windows/index.html" @@ -0,0 +1,427 @@ + + + + + + + + + + + + 分类: Windows | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  Windows +
+
+ +
+ +
+
+ + 2023 + + [2] +
+ +
+ +
+
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/cpp/index.html" "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/cpp/index.html" new file mode 100644 index 000000000..c02467c5f --- /dev/null +++ "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/cpp/index.html" @@ -0,0 +1,427 @@ + + + + + + + + + + + + 分类: cpp | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  cpp +
+
+ + +
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/index.html" "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/index.html" new file mode 100644 index 000000000..f952a9769 --- /dev/null +++ "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/index.html" @@ -0,0 +1,503 @@ + + + + + + + + + + + + 分类: 经验与技巧与踩坑 · 杂项 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/page/2/index.html" "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/page/2/index.html" new file mode 100644 index 000000000..b69a16fc8 --- /dev/null +++ "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/page/2/index.html" @@ -0,0 +1,507 @@ + + + + + + + + + + + + 分类: 经验与技巧与踩坑 · 杂项 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  经验与技巧与踩坑 · 杂项 +
+
+ +
+ +
+
+ + 2023 + + [10] +
+ +
+ +
+
+
+
+
+ + + + + + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/page/3/index.html" "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/page/3/index.html" new file mode 100644 index 000000000..930bb5863 --- /dev/null +++ "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/page/3/index.html" @@ -0,0 +1,506 @@ + + + + + + + + + + + + 分类: 经验与技巧与踩坑 · 杂项 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  经验与技巧与踩坑 · 杂项 +
+
+ +
+ +
+
+ + 2023 + + [5] +
+ +
+ +
+
+ + 2022 + + [4] +
+ +
+ +
+
+
+
+
+ + + + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/\350\256\241\347\256\227\346\234\272\346\212\200\346\234\257/index.html" "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/\350\256\241\347\256\227\346\234\272\346\212\200\346\234\257/index.html" new file mode 100644 index 000000000..56c94fbd0 --- /dev/null +++ "b/categories/\347\273\217\351\252\214\344\270\216\346\212\200\345\267\247\344\270\216\350\270\251\345\235\221-\302\267-\346\235\202\351\241\271/\350\256\241\347\256\227\346\234\272\346\212\200\346\234\257/index.html" @@ -0,0 +1,418 @@ + + + + + + + + + + + + 分类: 计算机技术 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  计算机技术 +
+
+ +
+ +
+
+ + 2023 + + [1] +
+ +
+ +
+
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/index.html" "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/index.html" new file mode 100644 index 000000000..04f802d49 --- /dev/null +++ "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/index.html" @@ -0,0 +1,503 @@ + + + + + + + + + + + + 分类: 递归这个世界 · 编程 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  递归这个世界 · 编程 +
+
+ +
+ +
+
+ + 2023 + + [10] +
+ +
+ +
+
+
+
+
+ + + + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/page/2/index.html" "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/page/2/index.html" new file mode 100644 index 000000000..6acdd7acc --- /dev/null +++ "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/page/2/index.html" @@ -0,0 +1,507 @@ + + + + + + + + + + + + 分类: 递归这个世界 · 编程 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  递归这个世界 · 编程 +
+
+ +
+ +
+
+ + 2023 + + [10] +
+ +
+ +
+
+
+
+
+ + + + + + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/page/3/index.html" "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/page/3/index.html" new file mode 100644 index 000000000..797da78e4 --- /dev/null +++ "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/page/3/index.html" @@ -0,0 +1,507 @@ + + + + + + + + + + + + 分类: 递归这个世界 · 编程 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  递归这个世界 · 编程 +
+
+ +
+ +
+
+ + 2023 + + [10] +
+ +
+ +
+
+
+
+
+ + + + + + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/page/4/index.html" "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/page/4/index.html" new file mode 100644 index 000000000..af72d25ce --- /dev/null +++ "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/page/4/index.html" @@ -0,0 +1,467 @@ + + + + + + + + + + + + 分类: 递归这个世界 · 编程 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  递归这个世界 · 编程 +
+
+ +
+ +
+
+ + 2022 + + [6] +
+ +
+ +
+
+
+
+
+ + + + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\346\225\260\346\215\256\347\273\223\346\236\204/index.html" "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\346\225\260\346\215\256\347\273\223\346\236\204/index.html" new file mode 100644 index 000000000..7a4f3edcc --- /dev/null +++ "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\346\225\260\346\215\256\347\273\223\346\236\204/index.html" @@ -0,0 +1,427 @@ + + + + + + + + + + + + 分类: 数据结构 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  数据结构 +
+
+ +
+ +
+
+ + 2023 + + [2] +
+ +
+ +
+
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\346\241\206\346\236\266/index.html" "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\346\241\206\346\236\266/index.html" new file mode 100644 index 000000000..b69349259 --- /dev/null +++ "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\346\241\206\346\236\266/index.html" @@ -0,0 +1,503 @@ + + + + + + + + + + + + 分类: 框架 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  框架 +
+
+ +
+ +
+
+ + 2023 + + [10] +
+ +
+ +
+
+
+
+
+ + + + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\346\241\206\346\236\266/page/2/index.html" "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\346\241\206\346\236\266/page/2/index.html" new file mode 100644 index 000000000..3d364285a --- /dev/null +++ "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\346\241\206\346\236\266/page/2/index.html" @@ -0,0 +1,431 @@ + + + + + + + + + + + + 分类: 框架 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  框架 +
+
+ +
+ +
+
+ + 2023 + + [2] +
+ +
+ +
+
+
+
+
+ + + + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\347\216\257\345\242\203\346\220\255\345\273\272\344\270\216\345\267\245\345\205\267\344\275\277\347\224\250/index.html" "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\347\216\257\345\242\203\346\220\255\345\273\272\344\270\216\345\267\245\345\205\267\344\275\277\347\224\250/index.html" new file mode 100644 index 000000000..dfefdff82 --- /dev/null +++ "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\347\216\257\345\242\203\346\220\255\345\273\272\344\270\216\345\267\245\345\205\267\344\275\277\347\224\250/index.html" @@ -0,0 +1,503 @@ + + + + + + + + + + + + 分类: 环境搭建与工具使用 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  环境搭建与工具使用 +
+
+ +
+ +
+
+ + 2023 + + [10] +
+ +
+ +
+
+
+
+
+ + + + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\347\216\257\345\242\203\346\220\255\345\273\272\344\270\216\345\267\245\345\205\267\344\275\277\347\224\250/page/2/index.html" "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\347\216\257\345\242\203\346\220\255\345\273\272\344\270\216\345\267\245\345\205\267\344\275\277\347\224\250/page/2/index.html" new file mode 100644 index 000000000..573b75b61 --- /dev/null +++ "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\347\216\257\345\242\203\346\220\255\345\273\272\344\270\216\345\267\245\345\205\267\344\275\277\347\224\250/page/2/index.html" @@ -0,0 +1,422 @@ + + + + + + + + + + + + 分类: 环境搭建与工具使用 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  环境搭建与工具使用 +
+
+ +
+ +
+
+ + 2023 + + [1] +
+ +
+ +
+
+
+
+
+ + + + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\347\256\227\346\263\225/index.html" "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\347\256\227\346\263\225/index.html" new file mode 100644 index 000000000..bbaebc6ce --- /dev/null +++ "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\347\256\227\346\263\225/index.html" @@ -0,0 +1,427 @@ + + + + + + + + + + + + 分类: 算法 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  算法 +
+
+ +
+ +
+
+ + 2023 + + [2] +
+ +
+ +
+
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\347\274\226\347\250\213\350\257\255\350\250\200/index.html" "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\347\274\226\347\250\213\350\257\255\350\250\200/index.html" new file mode 100644 index 000000000..19bcc6557 --- /dev/null +++ "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\347\274\226\347\250\213\350\257\255\350\250\200/index.html" @@ -0,0 +1,493 @@ + + + + + + + + + + + + 分类: 编程语言 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  编程语言 +
+
+ +
+ +
+
+ + 2023 + + [2] +
+ +
+ +
+
+ + 2022 + + [6] +
+ +
+ +
+
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git "a/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\351\241\271\347\233\256/index.html" "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\351\241\271\347\233\256/index.html" new file mode 100644 index 000000000..214d30902 --- /dev/null +++ "b/categories/\351\200\222\345\275\222\350\277\231\344\270\252\344\270\226\347\225\214-\302\267-\347\274\226\347\250\213/\351\241\271\347\233\256/index.html" @@ -0,0 +1,418 @@ + + + + + + + + + + + + 分类: 项目 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  项目 +
+
+ +
+ +
+
+ + 2023 + + [1] +
+ +
+ +
+
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +
+ + +
+ + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/css/common/animated.css b/css/common/animated.css new file mode 100644 index 000000000..28e567e63 --- /dev/null +++ b/css/common/animated.css @@ -0,0 +1,144 @@ +.fade-in-down-animation { + animation-name: fade-in-down; + animation-duration: 1s; + animation-fill-mode: both; +} +.title-hover-animation { + position: relative; + display: inline-block; + color: var(--text-color-2); + line-height: 1.7; + vertical-align: top; + border-bottom: none; +} +.title-hover-animation::before { + position: absolute; + bottom: -4px; + left: 0; + width: 100%; + height: 2px; + background-color: var(--text-color-2); + transform: scaleX(0); + visibility: hidden; + content: ""; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease-in-out, ease-in-out; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, visibility, transform; +} +@-moz-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-webkit-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-o-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-moz-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-webkit-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-o-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-moz-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@-webkit-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@-o-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} diff --git a/css/common/basic.css b/css/common/basic.css new file mode 100644 index 000000000..d0af4e24c --- /dev/null +++ b/css/common/basic.css @@ -0,0 +1,692 @@ +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} +.fade-in-down-animation { + animation-name: fade-in-down; + animation-duration: 1s; + animation-fill-mode: both; +} +.title-hover-animation { + position: relative; + display: inline-block; + color: var(--text-color-2); + line-height: 1.7; + vertical-align: top; + border-bottom: none; +} +.title-hover-animation::before { + position: absolute; + bottom: -4px; + left: 0; + width: 100%; + height: 2px; + background-color: var(--text-color-2); + transform: scaleX(0); + visibility: hidden; + content: ""; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease-in-out, ease-in-out; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, visibility, transform; +} +@-moz-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-webkit-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-o-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-moz-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-webkit-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-o-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-moz-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@-webkit-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@-o-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} +/* + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-MediumItalic.woff2') format('woff2'); + font-weight: 500; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +}*/ +/* + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-BoldItalic.woff2') format('woff2'); + font-weight: bold; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +}*/ +* { + transition-delay: 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color; +} +*::-webkit-scrollbar { + width: 0.4rem; + height: 0.4rem; + transition: all 0.2s ease; +} +*::-webkit-scrollbar-thumb { + background: var(--scrollbar-color); + border-radius: 0.1rem; +} +*::-webkit-scrollbar-track { + background: var(--scrollbar-background-color); +} +html, +body { + position: relative; + width: 100%; + height: 100%; + margin: 0; + padding: 0; + color: var(--text-color-3); + font-weight: normal; + font-size: 16px; + font-family: Open Sans, Noto Serif SC, serif; + line-height: 1.3rem; + letter-spacing: 0.2px; + background: var(--background-color-1); +} +html::-webkit-scrollbar, +body::-webkit-scrollbar { + width: 0.6rem; + height: 0.6rem; +} +@media (max-width: 800px) { + html::-webkit-scrollbar, + body::-webkit-scrollbar { + width: 0.5rem; + height: 0.5rem; + } +} +@media (max-width: 500px) { + html::-webkit-scrollbar, + body::-webkit-scrollbar { + width: 0.4rem; + height: 0.4rem; + } +} +@media (max-width: 800px) { + html, + body { + font-size: 16px; + line-height: 1.17rem; + } +} +@media (max-width: 500px) { + html, + body { + font-size: 14.4px; + line-height: 1.17rem; + } +} +::selection { + color: #fff; + background: var(--selection-color); +} +ul, +ol, +li { + margin: 0; + padding: 0; + list-style: none; +} +a { + color: var(--text-color-2); + text-decoration: none; +} +a i, +a span { + color: var(--text-color-3); +} +a:hover, +a:active { + color: var(--primary-color); + text-decoration: none !important; +} +a:hover i, +a:active i, +a:hover span, +a:active span { + color: var(--primary-color); +} +img[lazyload] { + position: relative; + box-sizing: border-box; + width: 8rem; + height: 8rem; + box-shadow: none !important; + cursor: not-allowed; + pointer-events: none; +} +img[lazyload]::before { + position: absolute; + top: 0; + left: 0; + display: block; + width: 100%; + height: 100%; + background: var(--background-color-1); + content: ''; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, background; +} +img[lazyload]::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: block; + width: 2rem; + height: 2rem; + margin: auto; + border: 2px solid var(--text-color-6); + border-top-color: var(--selection-color); + border-left-color: var(--selection-color); + border-radius: 50%; + animation: img-loading-animation 750ms infinite linear; + content: ''; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, border; +} +button { + margin: 0; + padding: 0; + background: transparent; + border: 0; + outline: none; + cursor: pointer; +} +.btn { + position: relative; + display: inline-block; + padding: 0.4rem 1rem; + white-space: nowrap; + text-align: center; + background: var(--background-color-1); + border-radius: 1px; + cursor: pointer; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform; +} +.btn:hover { + color: var(--background-color-1); + background: var(--primary-color); +} +.flex-center { + display: flex; + align-items: center; + justify-content: center; + font-size: 1.2rem; +} +.clear::after { + display: block; + clear: both; + height: 0; + overflow: hidden; + visibility: hidden; + content: ''; +} +.tooltip { + position: relative; + box-sizing: border-box; +} +.tooltip:hover .tooltip-content { + display: inline-block; +} +.tooltip.show-img .tooltip-content { + display: none !important; +} +.tooltip .tooltip-content { + position: absolute; + top: -0.4rem; + left: 50%; + z-index: 1009; + display: none; + box-sizing: border-box; + padding: 0.2rem 0.6rem; + color: var(--text-color-6); + font-size: 0.8rem; + letter-spacing: 0.8px; + white-space: nowrap; + background: var(--text-color-1); + border-radius: 0.3rem; + transform: translateX(-50%) translateY(-100%); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, display; + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; +} +.tooltip-img { + position: relative; + box-sizing: border-box; +} +.tooltip-img.show-img .tooltip-img-box { + display: flex; +} +.tooltip-img .tooltip-img-box { + position: absolute; + top: -0.4rem; + left: 50%; + z-index: 1008; + display: none; + align-items: center; + justify-content: center; + box-sizing: border-box; + min-height: 6rem; + background: var(--text-color-6); + border: 0.2rem solid var(--text-color-3); + border-radius: 0.3rem; + transform: translateX(-50%) translateY(-100%); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, display; + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; +} +.tooltip-img .tooltip-img-box img { + display: block; + max-height: 25rem; +} diff --git a/css/common/code-block/code-block.css b/css/common/code-block/code-block.css new file mode 100644 index 000000000..3452580df --- /dev/null +++ b/css/common/code-block/code-block.css @@ -0,0 +1,306 @@ +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} +.highlight-container { + position: relative; + box-sizing: border-box; + margin: 1.4rem 0; +} +.highlight-container.mac { + margin: 1.4rem 0 1.8rem 0; + box-shadow: 0 0.8rem 2rem 0 rgba(0,0,0,0.4); +} +.highlight-container.mac:hover .code-tools-box .copy { + opacity: 1; +} +.highlight-container.mac .code-tools-box { + justify-content: flex-end; + padding: 0.4rem 0.6rem 0.7rem 0.4rem; + background: #21252b; +} +.highlight-container.mac .code-tools-box::before { + position: absolute; + left: 0.8rem; + width: 0.76rem; + height: 0.76rem; + background: #fc625d; + border-radius: 50%; + box-shadow: 1.3rem 0 #fdbc40, 2.6rem 0 #35cd4b; + content: ''; +} +.highlight-container.mac .code-tools-box.folded { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.highlight-container.mac .code-tools-box.folded .copy { + display: none; +} +.highlight-container.mac .code-tools-box .code-lang { + order: 1; +} +.highlight-container.mac .code-tools-box .fold { + order: 2; + padding: 0 0.1rem 0 0.6rem; +} +.highlight-container.mac .code-tools-box .fold i { + color: #ccc; +} +.highlight-container.mac .code-tools-box .copy { + position: absolute; + top: 3rem; + right: 0.5rem; + padding: 0 0.1rem; + opacity: 0; +} +.highlight-container.mac .code-tools-box .copy i { + font-size: 1rem; +} +.highlight-container .code-tools-box { + display: flex; + align-items: center; + justify-content: space-between; + box-sizing: border-box; + width: 100%; + padding: 0.3rem 0.4rem; + color: var(--toolbar-foreground); + background: var(--toolbar-background); + border-top-left-radius: 1px; + border-top-right-radius: 1px; + border-left: 1px solid var(--code-border); + border-right: 1px solid var(--code-border); + border-top: 1px solid var(--code-border); +} +.highlight-container .code-tools-box.folded { + border-bottom-right-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; +} +.highlight-container .code-tools-box .code-lang { + justify-content: flex-start; + margin-left: 0.2rem; + font-weight: normal; + font-size: 0.96rem; + font-family: Fira Code, Noto Serif SC, serif, monospace; + color: var(--text-color-5); +} +.highlight-container .code-tools-box .tool { + cursor: pointer; +} +.highlight-container .code-tools-box .tool i { + font-size: 0.8rem; + color: var(--text-color-5); +} +.highlight-container .code-tools-box .fold { + padding: 0 0.4rem 0 0.2rem; +} +.highlight-container figure.highlight { + margin: 0; +} +.highlight-container figure.highlight.folded { + height: 0; +} diff --git a/css/common/code-block/code-theme.css b/css/common/code-block/code-theme.css new file mode 100644 index 000000000..984822e75 --- /dev/null +++ b/css/common/code-block/code-theme.css @@ -0,0 +1,308 @@ +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} +:root { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; +} +@media (prefers-color-scheme: light) { + :root { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; + } +} +@media (prefers-color-scheme: dark) { + :root { + --toolbar-foreground: #d1d1d1; + --toolbar-background: #21232b; + --code-foreground: #d2d2d2; + --code-background: #181a20; + --highlight-background: #21232b; + --highlight-foreground: #d2d2d2; + --highlight-comment: #969896; + --highlight-red: #c66; + --highlight-orange: #de935f; + --highlight-yellow: #f0c674; + --highlight-green: #b5bd68; + --highlight-aqua: #8abeb7; + --highlight-blue: #81a2be; + --highlight-purple: #b294bb; + --highlight-gutter-color: #d3d3d3; + --highlight-gutter-bg-color: #181a20; + --code-border: #2a2b30; + } +} +.light-mode { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; +} +.dark-mode { + --toolbar-foreground: #d1d1d1; + --toolbar-background: #21232b; + --code-foreground: #d2d2d2; + --code-background: #181a20; + --highlight-background: #21232b; + --highlight-foreground: #d2d2d2; + --highlight-comment: #969896; + --highlight-red: #c66; + --highlight-orange: #de935f; + --highlight-yellow: #f0c674; + --highlight-green: #b5bd68; + --highlight-aqua: #8abeb7; + --highlight-blue: #81a2be; + --highlight-purple: #b294bb; + --highlight-gutter-color: #d3d3d3; + --highlight-gutter-bg-color: #181a20; + --code-border: #2a2b30; +} diff --git a/css/common/code-block/highlight.css b/css/common/code-block/highlight.css new file mode 100644 index 000000000..f98046e7c --- /dev/null +++ b/css/common/code-block/highlight.css @@ -0,0 +1,496 @@ +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} +:root { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; +} +@media (prefers-color-scheme: light) { + :root { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; + } +} +@media (prefers-color-scheme: dark) { + :root { + --toolbar-foreground: #d1d1d1; + --toolbar-background: #21232b; + --code-foreground: #d2d2d2; + --code-background: #181a20; + --highlight-background: #21232b; + --highlight-foreground: #d2d2d2; + --highlight-comment: #969896; + --highlight-red: #c66; + --highlight-orange: #de935f; + --highlight-yellow: #f0c674; + --highlight-green: #b5bd68; + --highlight-aqua: #8abeb7; + --highlight-blue: #81a2be; + --highlight-purple: #b294bb; + --highlight-gutter-color: #d3d3d3; + --highlight-gutter-bg-color: #181a20; + --code-border: #2a2b30; + } +} +.light-mode { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; +} +.dark-mode { + --toolbar-foreground: #d1d1d1; + --toolbar-background: #21232b; + --code-foreground: #d2d2d2; + --code-background: #181a20; + --highlight-background: #21232b; + --highlight-foreground: #d2d2d2; + --highlight-comment: #969896; + --highlight-red: #c66; + --highlight-orange: #de935f; + --highlight-yellow: #f0c674; + --highlight-green: #b5bd68; + --highlight-aqua: #8abeb7; + --highlight-blue: #81a2be; + --highlight-purple: #b294bb; + --highlight-gutter-color: #d3d3d3; + --highlight-gutter-bg-color: #181a20; + --code-border: #2a2b30; +} +pre, +.highlight { + margin: 1.5rem; + padding: 0; + overflow: auto; + color: var(--highlight-foreground); + font-size: 0.96rem; + line-height: 1.5rem; + background: var(--highlight-background); + border-radius: 2px; +} +pre, +code { + font-family: Fira Code, Noto Serif SC, serif, monospace; +} +code { + padding: 0px 2px 0px 2px; + color: var(--code-foreground); + font-size: 0.96rem; + word-break: break-all; + word-wrap: break-word; + background: var(--code-background); + border-radius: 2px; + border: 1px solid var(--code-border); +} +pre { + padding: 0.6rem; + line-height: 1.6rem; +} +pre code { + padding: 0; + color: var(--highlight-foreground); + text-shadow: none; + background: none; +} +.highlight { + border-bottom-right-radius: 1px; + border-bottom-left-radius: 1px; + border-left: 1px solid var(--code-border); + border-right: 1px solid var(--code-border); + border-bottom: 1px solid var(--code-border); + padding-left: 10px; + padding-right: 10px; + word-wrap: break-all; + white-space: pre-wrap; +} +.highlight pre { + margin: 0; + padding: 0.6rem; + border: none; + font-family: Fira Code, Noto Serif SC, serif, monospace; + word-break: break-all; + white-space: pre-wrap; + font-size: 0.96rem; + text-align: left; + font-weight: normal; +} +.highlight table { + width: auto; + margin: 0; + border: none; + border-spacing: unset; +} +.highlight td { + padding: 0; + border: none; +} +.highlight figcaption { + margin-bottom: 1rem; + color: var(--highlight-foreground); + font-size: 1rem; + line-height: 1rem; +} +.highlight figcaption a { + float: right; + color: var(--highlight-foreground); +} +.highlight figcaption a:hover { + border-bottom-color: var(--highlight-foreground); +} +.highlight .gutter pre { + padding-right: 0.6rem; + padding-left: 0.6rem; + color: var(--highlight-gutter-color); + text-align: center; + background-color: var(--highlight-gutter-bg-color); +} +.highlight .code pre { + width: 100%; + padding-right: 0rem; + padding-left: 0.6rem; + background-color: var(--highlight-background); +} +.highlight .line { + height: 1.5rem; + color: var(--highlight-foreground); +} +.highlight .line .language-javascript { + color: var(--highlight-foreground); +} +.highlight .line .attr { + color: var(--highlight-foreground); +} +.highlight .line .string { + color: var(--highlight-foreground); +} +.gutter { + color: var(--highlight-gutter-color); + background: var(--highlight-gutter-bg-color); +} +.gutter .line { + color: var(--highlight-gutter-color); +} +.gist table { + width: auto; +} +.gist table td { + border: none; +} +pre .deletion { + background: var(--highlight-deletion); +} +pre .addition { + background: var(--highlight-addition); +} +pre .meta { + color: var(--highlight-purple); +} +pre .comment { + color: var(--highlight-comment); +} +pre .variable, +pre .attribute, +pre .tag, +pre .regexp, +pre .ruby .constant, +pre .xml .tag .title, +pre .xml .pi, +pre .xml .doctype, +pre .html .doctype, +pre .css .id, +pre .css .class, +pre .css .pseudo { + color: var(--highlight-red); +} +pre .property { + color: var(--highlight-blue); +} +pre .number, +pre .preprocessor, +pre .built_in, +pre .literal, +pre .params, +pre .constant, +pre .command { + color: var(--highlight-orange); +} +pre .ruby .class .title, +pre .css .rules .attribute, +pre .string, +pre .value, +pre .inheritance, +pre .header, +pre .ruby .symbol, +pre .xml .cdata, +pre .special, +pre .number, +pre .formula { + color: var(--highlight-green); +} +pre .title, +pre .css .hexcolor { + color: var(--highlight-aqua); +} +pre .function, +pre .python .decorator, +pre .python .title, +pre .ruby .function .title, +pre .ruby .title .keyword, +pre .perl .sub, +pre .javascript .title, +pre .coffeescript .title { + color: var(--highlight-blue); +} +pre .keyword, +pre .javascript .function { + color: var(--highlight-purple); +} diff --git a/css/common/fonts/FiraCode-Bold.woff2 b/css/common/fonts/FiraCode-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f7ea2bf7f3ef59f56d4f15d73d3cea2424fe6975 GIT binary patch literal 77696 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

d;v z>VOrFWu6srsJ@z7R9_sP&ziPoHG4X*?u$5ibZL@m196+MP?+Ce*|}vu%Vw0T77Wiz zr>}fj(o<_@wiXBhL4lYvQ0z@zXz;)ZH-Y5mH(;VZ<>73!HAv|byvojEV-Blx8xOY9 zZOkMN>pB!*pQtaYRY(ZmpIG%BYJG?BA1XRTl%R11q8$DS^}+d+t~6u+P%k z&ytS#+V_zArequ#mlWKT)xGbC2dh7ezW}r>Dn~-bIHzYj;-L?&>I|m6K?&l@FAv{e ziZ=Aw%ckV2KI;Yb8Uu%xKfj!-d?P_hg+Wo1-t4m?CEDqi(ida)WG_N=t7-kX?#TPw zZ1eFi-hV~dPof(S!qA!2GcHE!)vsZk**@NwhtFerta5 zS z4V9#7zK~d5RYxh~)!jxQMOW80{jBPG=*E|8%Qem(pYxN2zcSdh63(^-djxwH-f$DC zBP+a;B>gb9+uIZ+5md2!uEc;}51c(HCHo63iO!a~@?2^(PYnS$}2bAY!6uEU!UAXxi@Rzx44>sg0P$a_Klf95~e~dVZz)B zS$IW*%4V-um)IibM1n~0!ki1T|8KD09j3YvuYMQY-n{a{S8uPQX%fp;*e+5_hs)&wnAuI=E3IwD$|Fgk5!K(_p(w(;%dqp(FZc!5PAESY2{@N z^D29%#w_J5Edq)*a5mIhE%hGIX?B9PT&_uUFKXI~u6E7aokjhI#woY*1^KnN3g6q* zrW^>+vo#zY?xie&1=ncAizifRLD{H`pbIFL4%I+%>Y2dqHM7%K$Nu|8_+QXae!m8@ z`|-bjC{df|{;Ewu=XnPLn&iJLkc!7paAob3d>oW0&>bjE7t8WOtT(vher|QXaK&tj zgbGoCLJDMD8B#ab>Oa`O^`Q)3RbCTZ1MOGAM+n(NgzC`u+M~-ePvUU|2>~z1gDQLr zUOB3S3`=6;jG)B`Mr#vPc%`X=@6Y!K&s@jf5ZuTXUYAL(dv7R^iZ9bNpUvvekxc15 zSUZt%n0Z*5EitpCY$aP_VM*(ol>MR9rPNuW=7m%Ied$7B{vYOd;5(!H4{;r?p!+zw z1Ko4HY(wqVyYzO*$zrl~Y^I9^m9qv|s!e#`ad?>x!(e{b0PtuASmbvgua3%irm5#IXts#yGe4 zvG@yeemiNkc@$b@v%V;xX@z$p>d?7+jq%eWVpdIF35lTGbW(mTo z8i&SB1%6S*y){k2^nj$ohK8gWxM8=enTk6-m7-oBA{Yp3o=&3^-q|QGN@%EYpDMD}q>N&q%wmxdzwPj!|w5>r^ zv#Z~1kUd!E{mjn=?XBE;(K=krUEpAv}%P-R-4`W&zHQjo4-UYPXiw5Uh5F?3J z>XT8X^DMBXpY5!{c zZUc8iySTlETl4>54Jq)(_C9Xkd(rz6ZpmX$D{1Lb8=c}3Ggi_s7YmfBC43ucZkl+k zz8&l1C|x+Q{HYJDSAaAZbe1L|9@46PPjI4%RFK4D-4-FK#cwX1F%cMm)u=clF65pS zB8C!u!XOoLR!G6DS49FXtW$KvP)3FPUG9st>a(OZzUn=gC!LY|Tetds!DC6xVy3&8 zFAcDYyikB&18s#8S`AWPKWSg5>8ur2TM#3)L)!dokd&XJ2NKv{{ezXggQNb?SmA8; z7ZMASc`{S>hmp#_=jrHU)*}@|EgO@e8Dq?`6y8)xg z*>0iI%H6Ghr+S?K%^XwPP&;7yVgkkh!WY7iSj)|MRZkg9eAOIXu${L_@?%XxjbqR6V<*llrvndZw8u-I|)0LH)vH&cLTtpPiU= zB`Li}0S7nQfF=N%j{C)K+qICGH|ju%Qwp6n`igPGU?HzaZ@rLC>C-XCaC`SKu*-? z&L0|^n6M)u%pYXe<_UT3iW#lqa+wPdXpfTS6-a{L9OAciOi$<~Mp?3jfEO+IOu1)~MJoW{AXNVrK1LhVnR5F#gN= zpM;vh%0EO%(Nl2Y6VL?ubL`66uD%`H8u%OQY?{XY?cXd-hzP9;oa^Xvu>4Sw zQ`_cN6xL5~jSUYd4=h$VU_1~L_E5zyP`*@J{EG1*KEKvHNEjSE_e|mB#yXiReLZnI zoWL?k{(Zyuu*I%1&zvybGhxs=WM{2VC(77xo}WG4&khr1!|wtL zA(u>6ObRFz248RFa0JIL?6JX`?B_Su%yc=Vr^d zc^SDLFXNLa)7?|Fe7!UsHf(EX^tEvmW}8F_S%rm8PF~mKf;^SVVTb|O9ZSPh++h2I zGL8^O9xR!v7imRk8LO~9r$zu!*(`{n>S6Si)aW!dy=YePszNkfy6l4iATl2eCLk`_d87 zPqjaeF3uO|J*`xKg#@2$kHO~hTAgefl;_ej_j1=)Y{LRffXr1FG!p!@GW_8~rIyN5 z)(kG>5b%UfzO1FXRpXY!P`=(?k*nS~+Cx`p8d-vT0fVGb;ucLeXgEx+v79IqFZ!o! zem>2>(bVe&p9>mrP+7O#fS!J7*N^4dvU-)BQJdlV0OiJK4>~atGN-&=@Xpp`mR*SU zaTcB>4d416rWI;t@%#CTZ|d8>Fy(#tdbsud_O@_uI5Z!~F{|red0)vE#1wt&4x1j@ z71xaiX00mj)xYzIIQxV9V&O&U)ISMBuA?r^F6cLN8WkNR9jlfVGIQMg(5UXWN@uMZ zwyJa*kibMUV3cCsWD~v%mJ)Fy;b(Qo14*FNJcICa(2Q_hu6 zyxxl|p*C4LTzs;rC&@U22*imz5_eBki>&kVr#ivfKv+Oi>R}Lu6aockp_>F&eQ|qO z5x4qhY2E#66p*g2wc8eUq*^S~Izp2D3S=I3c1dOS&?~oI$dq5mgRLiU9HyLMW>n93tyN_g;OGQ0&sz@wBI2XIm8k4&);f{ z;#yb>1L@7l`&^&nCE5zREN;&@YjupA9 z>I(KUd5l$cKrRoq+7y25rTl=#v}ODn0t$BrDS9{IoiDsJ7`|ZP>sOK1AWM*QW(gvP zo<|JvPi3~{C(a6)9T{{6!@|fhNiwuVtBgPh!!8G}$XNAwkraVsA z8NPRfBXM0oBv9y+Tdr&6Cqonkm~;Wr@~Bf7K76}Ba?ZjnStCAF)5(HP$Uxzp<0FQe z5JQ4Fx+PFH`I5cg+<^d>Xpe+Q11C3%yT>-lz*VwwVv@5|VtjTg6=8_^$? z{XP5k{Qm(bkLMhX9*Dtv>3^4Rb8_$Ia>hFM+QjI?G0|J2!@doVB*4u3M|#_~1P)16 zGmox@o7yscE6bx9{$VYTc6$6Zeox!Q`hg8Yeqily&dN;iJdQ4|`Cf#pQW@A65j81z zy0Arq$t`$#?a`>HZPDk>HO4}IQ3vzH;T<#GyLeOdDA9`4@NdHqLL^^^#9eM9wA2k4J_K_r(zYdxu zovZNxtOAK^)hf{0((S&2Hkd=exSPovv7g&_io$jTcJznz_rp6v!lOR%*iRh+9s5G| zf&OW?b9=~&zaDvEbl=+a8!sXd$B4LGC5NMw!y?WVwxJ;>wOr&HTg2fZT#kqb6FA%t zowN*w1wwi`*&HP-6e<-Q1tB*d#$Cf>f5y!mMcf`i-r~h5AFFyOd|dk7Dt6t z15Uit9p8KvpZ!1=oY(-I!tGSl*Gay)L~B!7gFoU>;MouETXw3@ne`88+$+@Av%y!| zzkTnfi+Fvkf7ir^Y#uLNSN-Yl`4`yijM)FLP57D_@tF2_N66D(9dA6Oibfe}64;T8 zEcDs?x#-!xn_;Du)dT&kW6M-xjsrbc$>pHcf3I`>+lTc%FQwO+;RXZJJv^3E0F zJbcRTckQ%)akyWVp$_k_q& zEY7e{ZtXalbF>raG~^hJ29BX)X~$rB#iJl2C*S6V^G$ArzLY(iFd;&9IRh}r1s!1p z{v~$$;|hHZ#FfZdxrG~=>>IFtggk*x#c$PQj3$%Nmi%D9W5R~&yZxZpTTu=)%a#UDPo+SGT`U%JcK`JE*OxDwJ(c&W*PV5x4kM=eNjL)Q|GNo3-wK&Nyrw z;iU-))c`;&3-9TYP-vmqizqn(B84asJal1AExB;jIec}tv53Ca_rF$?t84ZuYQZGA za7{%`7AE-*#dmLXtS9j!{rfJwb3YK?yT=od#cklmCV$$(hP}hSYHzWze$D(wpWU4&yQl zJ4cLr8PO>#tDV)%>|j}s%}~e{pA;7^&8k^jJ}Y>-@xd>?muVOCJoC#|h5XXL)uIEU z(o2_#<=%3|F)OQs*_@?jSPsv4RZuxa-1+$cIF;3Bd9hv0U3(OJmDMaD>Sci}iWbfR zPIB23;x8==z=t#94k)GwSJmel*Hh#a9j(nN6)^L1*o6{+UT9waRRjE%UoeB|2WI?M3_y9k4Uls~E87VKC$d~{1zxf^H_l0X!j$vjVm;dzYx4dBI zUx7lOT$0X~PPuJbtTwF<_IC^1Nl!}E=EY~F)1*TeEdKd|{A5ZFBbYJa`LTfO-PccS z3%(PdHcNCmU+DC4{z*Y^94NAu|D_V}1D|-Fh1D0Fn1@NJ=7D)~`CrfG7wQ?U^YbN} zAAcslP%N(U!j5y$1HeQw5*P+PMrIrvV-y4XjL>u{xO zYrB9^{}v4bx+Z$T=x;=Wn6?ZBNo}5D8P}Gv4~N>keRkpkTHX!Gl0*4r=|*ZuY8d$< zFM_Usg2anTec=w{N)VTc*xQIhN+Nlr)115AhgZ1{e?jVAhTV;1>C1!-J-H(8_8Xr1 zlp;EoglI;2A@RaA1*KI+lzSpQrD`GJQf}%>tBfcKt&~Y>(lxlFY(fvjM373Eq$XVh zpn5_N#2wPuba1&|*(BSYyVoyLDIWrN?zXGiyJpp3kb#B;oqNM|_v?XeWuaw^=bCv{ zE248Fv}5V9!5I>=rRLTnF1=%H&reR&YmlW<7DPABakfzVDbcQvG2)pJ!84(UfdkZ( zC|@)W0uPvpR;_Hbu;WT`5g?cfl4p~l_B7?Gu;8Z(Il55F;L~A&j2sKjkZcfEV-;1K zYPHH!MV*8IbQI`dsns5N?2ZFbsGl&g)ho~tEjtUcOzm)Akf{DJl08X7%vYo^4ptlP z2M0u#VJ4zAqsoXd1!>QOok;X4nQW=aMSqKe9MUnqAl&=w1tH9NESJe;z*7 zb^}~Eyr``RRE!hb9KgZhM{O^_4daX3_JH$-Eq&qO^tewJ(4eGS{Bq5gKWZF*xcL;U zLUOmcTK&wc4@znAwY<-)zUF|%?;SNOyMH$O)Vt7JclY#J{=|&UmXX=VAQ%q5F$tfG z661PD5j>*b(hTX!<@1bND|ohA_5cBBX&0b`ZGo zXX3BKNoVir!9T?jT$Gn&$R+iIz8e+`UY}Tp#n!d8V{1oMMQgFp+TMn(o7isFYZDW- z7E7&yDvRAnaKe%|IH{$(r+WaI7|3-4 z$fQ6b2cz`FHF%&0{z+SD11nc7vLd)Su?vQ~lqzoRQYcleiY}E>Jujxp(c9>Bdk%wc z8(SGUcDkyxoK>x_Lev8Qi42I(^sA#(43I++jw25JLEAyQzHcdZDcT>^;kledd3~2- zB0}$rK>9d{NO{vHB9K&b3uMlEsWhK#u)L!ch9-o~_pH0zd(<(e|QZ;7FT1`%^MyyQUDmBVw!H3D=5GVB%8EH=D!h5&q z!SJvIzH@o5T_mHB^B^j2_=l}ZY>*5?)U&Z*Syv2=*l=eJf$E;X8ipuWi?!>d6SBvg zv7}<3Ga4S3d&U+hn0D$)W50DujP``KBJqFSH!9zDb#*B{i?y-tx$MMz#PPtpnD@^K zRjS5t@=R>}@b)U6iOQ&Ag91d4Rb~2kx_r+|MW^4-9rD*W)fV~gFbib)f8@(c^%WK* z&?Q4!R%N04*mK^9sag=PRG}!(SmbffS6F3Ok5Y3yphYW+A`MwWyle%b1qpPL53^Zr z>zb1nnwy}+;y?oT7-K$OHKiS3{JD&h|n*gVTy#boNtv8la&5t6DO8O!W9!ImQ9=*oPN_NvORKQYox)b@g!qV z$sR#)%?OAmy^BEnf(X)_4+juozam2_o+~gG%=7jT#IIopYWR3wFyePa#5WJ(EbkOtrRpuA7RHupMLVQaui*UrH!9zNzlQlp|#ua{e(Ga}4^q zj(SSHy+)_a(dqxP)=}$PuIuzUI&Gu$ShP>SE~+;M=2TM^i+`k2ue9jF+5JKdwk0TW zcm+|Qv1~CHWEWIYEA=ST7Oho4^c@1@i2o6uY2@9|8@v6Bg4mG@7i+jgJfy@Di7<9F zh{|IkEnTwMx1gcek309Sn_qDT&sl8@D}f4=F!hp%!IfCx5*An)F(|3WkYFl-VYS+v z=D^~FuTH{ai#P))N)m^>jg%#(J$y6AXy7;&4@UuX5 zIR2!_e>rcW>^&zSn8GaTeZ@H)6jpR>o-!~vXFgwg*$@IO_K_M)lJ3Oi`eUNbn)C%i z0yVjjyk%{a@$!`|eenPgD${K@AUxkRP|(c!qVqWY=HZk;5a=xuWg z0M@RqQ94I1nN%GmI<4~?*+N=k>gdq0>|89{aGA=P^>+ikvBE-qfZ6kwS7v7d$6o2r z*%{N*<9G#F0O!Jlh1l#n+~bp(qUZPsr+^nE!l`MN47xeAW2Tj3b3R5bb|qJWL>iU` zzTpvyi@;g5G+XkT1l|Po6y0FSh_!we)nvR?^Au<0A~gfROGp2QP|)8EA+ zQ?Z3J!v+4+mDNrB+Qig|1nUU7q=7;51f8SIdzwW`o9*v;*g<0UQzWnx>s*J9Vs*B- z9Z2^3XkKq@e95F!6q-*Q*)TUTG`iZJ<1YwvDI}&MvF|{-kVnE_F^BVn8|hXOu+sez zDUivrGh8UNE-uF+GSE-?Oqh9V$Y?RRE__jC5akU>!_tUgrJ-vv|Cr5LW$nl|3+aeu z+CDn_g@<`s95C>J|O%o}-j5Bihid}x$Yk#l2xP8iqG3EBviwo8r! z*Y~=B2ey9l1DlTfpAx{G@WD~T z6i&5RHvkWcP*!(o_@nH?;~xUt`!5z|28}vG!xGlT6>X&%^!^BvcLn9+>v!y(2ci#z zM9yvkxsZ53*CMwP7p!x`+4KBq%~f>vs(aY=L)f*7Fe=XH1P&{)gETy##FEjen_PpP zF| zmkVB#hY5|thYRvYR}?yRR8{f*&wA(6A}m?cN4=ePXUFV4VDcq(*|qTtleNrK^rR0>PGcHu(FX`D-}&~xkOWI zWe`*=8-wcuPN|hbYF2S$dwYpjtts|`3KKN(TXPZ<8A)v*G2!31zz$Ae9 zT)NLZdip&+&OA{=yZ_nr{s~QHUU_Y?gjH0`k_sH?!46+2g%0a&CW8i&q*iJ;GB<$w zzxdlPUu(SYZEE(+jQ6+RI&r0~lcQwwG5SNE#n*9v>%BVV#r#f|MBUhDsAVAhuN%O~aJ zoNi86%gA)PoSdO1D)jj(mDU4^>T~fQ*{nAN!Z6!9)8pz9zeqt6*7jyO!X1~C+ovE5&6WaM~KJgGk#}nGiz0(EQf;1i&J~N2A{jGc( z^n7U~>u-8h=|md+FVrR*mJZVC43n6rHWsKsW1dcm{9I;1fB*9m9AL z*8*aQn-en*Ty6a0^63<^g{gqeOk&~|`|~GhXdQ(oR#P(d68V_AB8k|;cb#u1ndjPG zwW8|}B9-yTOW{uUR2(eHYq3vdqpb@*2LDZxedhYdsvKjN zCCoLDzpqGVoj!2EV7C6=_U+ugxyW&#BElnlN5}BC>sYVkuqU(8P7Cq2w>0B3Me@}U z*vVDaSwL)_}WU|L>zJadWJ$PoTD%_f-^9aG{MXyv4PU4 zFv^WFf&QO@mm3>-;y|#b88u*#Vb~Vv=tvag=PzuC_cR2;-*$TBKc<7f-f4ZY?y*j> z`6duyVfrh{(eZG}ty&XGh?kt1g zgAmkF_ECYcA+Q?mqYqY`TRQ~s!9Xkgr3`>IaIT?6)$^9;y6`Ty@Nltav!&_<*RlFx z+{~_Wb@0)9mg+}bthr3bon1IKH+dvSz201Xk2|TZR&i&{K4zY^t3Yks9y^aW?wN2a z*j!0W^xeO9BhKRsrym+|tk=||nr0xcTJHJY6P_mpo^C&n2kF4(FOqSc8_cV{q&dDr z5gfwhO0drl*N-)hL|(rcl--STdiwIIhhf$&TUaw&MGZG-UwV$?}2SGtY58qKMGGO6-oy@TZ(Nrp} z6vc1_ns>g9Hmr;@_jb>w?{R5g4rGThJLi7(r+!}l{+ABQJGo>>>AUY2Kad~ta%RVy zPI;mm=b0z-{66OqcKY0rl;~5r=E9l$G!a-9q+dxI=l+$+C%3lQ5VYV!%G>oqXC^>a zfiW&D;#SPfNDRn0PM!5sL!2=`U2*<%#X5U&0^?>qkO0$2?z?~GV{iuxP_tu=7+O=&#JP@2o8&hp-l_}eQs{-yDYLsXbh#P(^zTIy-r<%`9EhApFxq$##{* zccoBi+8b=dPvWn>n}Iu@`d?*zoqKJL#0c9A#;#Qv)yB0$er@fzL1Xk5nKbfNnQ;fr z^ckfr1<@r|p4E*QdEKT;Ok<@bagx$mlGatv)z95pdtRtt9DSjAaki}7E;a1VsucE3 zC#8s0@f10B>m|KAgoX#06VxDXY@zWVZ;mltTi_HST3!#*kD2Gmpz$58gP>RMZV^8Tz6Kiujqy}$8lx7l`!^Di7_l-{*TIE(#y#!-o9 z8_(FMBsQL2Q|E#H{A-?8#CHdrGQpns$9?~^8~@<63%drfWd} z=Vz6YX{`QUt6FBXVywADQ@^@iT@v|t;(w`wUPn*9GRPQ&jJNt8MMm?HvEaZXhkMzV z1{~DMx@pXIr_Rhj@qlxb1(*(C^nvZF&td3F#pwrd^E__f6vU^nZvZpFg z(%62!U$MkwXz|^nWZjXpe)uP#eJTOBV);Q`HqKVRXeowm7WYe$@!-;y8Dy_A@nNnev~{b{CF zy*(^>VpDvz__nkSkQY1+wYgs`ep^8fXjB#HU80sM_ueZWGT(-+fIOe>!Y_gU^^qaxalD}Y*g7GorZQ`1Q z?$3stuq$Cl$2s9~zvHVdxz4qpZv;g}cent!zI!q6=OJfjU!|nHFA&4d*wVGaY~j_+ z7KSY>#hACz?QTRgz~MU9KWRxAA0KsvUMRNKN6m(F1C)W!f$zU**SKjc*QX9$RQLKY|IQ*H2*QnU~RLd#CvA`-$I}rQVE8prJa= zy0ooIup4BvN9ggOUO_70V!c^FQ*y*ZOVnCE-7@yCq7$-KkBU|t7MJlD^t@+UsWkdo z37x_CYK%kAznDQJ$4=uYo(p6)J(5VZp9}Cz!eh04PFyirk0P?@8xMXMnD~Xi>ZLNx zlLRW0L0LvHL(T3>^7ho6L9b$;W4`~4I&?CBx#BB>LC?FPl}SUN+EFG0yKy)am3oZi z)0xW4#VZqE;x2cwqHUJACw`*FRK1x{+b@u?=v`N#tV z!C!J##P9-8-n=AH0CSimCP}M_h`{0n4u|S2a#&EOxu3nWg&#a7h&|6OzQ@o?<0M=Z zUGQy$wH)@t`Ux1hJ4GWLmN!F0zMb!-V=TVg)%c)j2hDVMR^`xN#ci||XJ?*^7hME1 zCkm(TXy?~ehmpHx2?hR2p%g;15quCo4eZS^douGbvIxIe@5$#X&dEV~9gCj>3quMw zC-Spkby2QQH$Sc{K0z>9b{_zS<5>Nrw0NZl6@{e%CSEo7y>T(*EwQB}GI0bL zKnqbiOD~gjrjNi;qZ*b&lEa)4!QchtNb+wmvOl9})ebg04YCRe6|P~NiLJw$9^(|! z>oC_eu%^d2ARUSj3rZVILbHjYewUDL6Ut-)CuAB3i>(GW-8u+OdLS=hDQIZ}MHPWw zF`0Ao?8t-1eM@c6dZ|WHD&%ESX=Pl zN`!7h-fSR#c#IIzDsAJQ+>rP_EF8uBK=W^5i;{*UIEBE^aPsq4K(l&1PNo8AS$-lY zll3->Pax9UC(LMoPZ&dmm7_=c$OP+aUc1m=ntx9NE~Y~8u?FZt_wg!o9or%I)JUmh zcZVFCLg346Lk(LyI^RLA_T)H3H?K6}Ii8N}pzt4gT@?P}sjYg6ppvQqTP|w1~ARdAB5fl#Ydy^^!aL z%N;vlgk3Sg{&ap5?Z)*g{$zL33Kt~^=k^}h@ z^mu=g?&D9>joK=Lm?Bwgke)KbI;zS7e!vjrrE;so{iwZ_Ztc;64~V3#0eeU6g1Xk( z?KE8e_D(ds`y_StXo1g#=Vb>Kh5_D1I#yp`Cf-~krr!>_N>148KIE-Jags!E`dL&gz%i z7j;B@xm+nO2~+VYwHA&X+=BUpVqeGjYZ%d3QShxrUrjz0LuLa)F8|M)?Zr2@T1U78 z4ORU&x`#JkT#Gmpg3s$u!CZ=n!A&XR$7v>(YiGyx3v4DFb{kvGz`;X}WsD(hELVzm>R$+jJ=_rk zU$=0!6t-t~8G=(P@W7hfW&qORA7&rh;u?d;d_%l*om->&zETE?Z6vKcU1`HVTJp-Ez z_6WyLnilMfU_I=GJpRz!+>~iWen~I^C@<0N5@^ndlMyq<@@bTYXfL}2Tr=X15g{X1 z{5eJax%s_CvraHgM4L@?|GDbL8bO?%#QcSVi14uS!^MAH``|S^p1>aW%1_gXuV4Vei zUEt<7$RMd#tLNYT-ZKGtzW`bRLC`7?Kr0~#S`7kdMFc^sf}z^i(gfd~|69TLXMvd) zuvTEB1>RZUtT%|R0vr|7ivsz(0P^`TF3IHk0?7Y^aBCn4S_cdjX}K3IZ#E>1{G!0D z3%FTelLg*e;G8#zsa}NrFtJ@6dA&Q23FDGXo+E&~CkW?3L68>#_!R8x$X0lg$#Zje zbl`8n3r=Q#IO~g#6IXu2Ls42~X4ju;AigWKAJyNATyE|!N3Br4pQiG2{jDaB4>~z5=UCe;HAQlsMJ&W@Peoo`Dmps^CS~gpC_>8s+uQqux5?5@M z9#^calgX;INx?HM-10XdVj?v zT-+u4onu0Znw+qkkd46A{bH`o-P>R6Pv>a=dVjL>-<%zZZ^UPGD(l;hkD|P>6;uy7`-`$+q|{3W>AuxegX3E5Q6xawTvP zIaZ-|7H_kM{qju|~*XmpQc z1VV;Mj-3MMo$4nVF-9!(ErKC(7KSw=@pU(gbWw^(GA7J(r_+IR`D3cBasFoh$nf}U zvnR23{+;g3f8nEFWX2l*o4!00f-bw+cY=NyQ&ykw4QKl3Au#1WncF)%eR|k9znAm3 zr+m_GpWJVOWFB~Rs%gIm-i5)bu3u{0L;cCSOPz`r=0(utbwTijm%IGSexGoD>fXB~ z)$y-Agp}?15&tY~nDjMsT$kX?n}kKb?peyw6qhG^_7 z?XO~;!XiwgsgX>Cs^k+EB89Re8DAC<6i_0r$N>h?BgLh(2wn##Vmg!A7k2)) zRrP~ocX{vWkDt`?1s`_-@M&;aZaI@Xc96sV|M>dfyMz1R`=nl+mWUAw1+c-i~YG6I2>YN}o zH^*apTJ6NW;p?f^2em(2;zd zN-LLBSp)})_74qdqe6c$w+;#ez1wJotkDcjzg<}~xynKoaoWCs?KVjxCXEM8rILtt z$(Qn-W?Y*rKkI!>VH^va(gN1AS9MO1T>P&9`Jhi9Ej8#>Suou{OxsxcSxju2JK=zb zHe5BOr7BQa=W1M+f<8*(MqOXekQG?abcB)~Rp&!ekHlU42Ymw?6CYnPoY}NW zYo~pf>13HOvhnYSA2j#0j^$rCu)oH%^w;=2SEF^uZy|bBl|iu2ZWo0^35swVHrt*dC4#_cZD5Bdhdei;`PNx$ zq-JAf0klv{zMS$l*wT`$Lq9=7a!&_}Wxw?FW6sULyU?8rAF#rnzI* zPPW~HBBntv5%GwbQ9GMU;lWqC zng@^B0#!g|{hp|*?}E6FMw6ty^^e+=tJ8V{D*E-}3lqSvl_bj_M=O+Ep9^|N8!@VG za8;H1n#)RPh{mnc2&2bsw=rwwc~ls+M+;w7efww8Dx~ZV{%t1Hh69=hVQBzWK&roS zYxuI?F9(Y0EI+%|{#dj7dO-pXXpJNPdeP8+hc6|5su+j1ebv~6b>1?Z|V`0|BWDnth=HVjF;uceAF_AzZ5J>Q| ztd1;*{IsL84GtCv1OkCTAR$SSNO$(Uuw*!(dANwZUQiK<*_9>3h#STvr$)7($y3^M zSvix+5i2d9IhLUVOFDXq8EtDdS9q`=(4!tC@9IXY^}Wl}jq!*1BJ-c1KjQ zv&Jshk;XResn20djSI^4EX6n$Vq){6HsZU~ z5D`{MGy4lTHRc)A9TI7C+$&{egwENMYgMDlXJ+*})P`@nPG&Q+OH zGu>I#_^w|$IXXU?@yK^5Bq|;gFOaqoa=QsB>pIai(D{U&vD;Sd%l(dov8a2ZEs~S* z`T}?6>~L}UAEcFu1J4Jgbkgg!a0?LKIzE89BQ?z8BJ}ST*(z@CK7)k zHdPvn{GE7}s`9Wgd&RF?7y0e#>omI9%-cwbM42!lK$QYD_)C)mxZFs(hJ4H)T)nL* zn?!ziP?T$2aTiAqZ?T-BC+4#hxdxo8<-xfYr0%|Xk}X}M8SQDjHQL~IGFs!E)pp?v zZaV69EwAETvb1M)2Q3Hr-yYKkXt}J-ejm{VpC~nry!?HAs$)CrzXvGqE`8cg_)pn8 z2tW(S*E7XTOQdr-bo32he;jDI9^~Kre*5+YZUmB8NWf8y;Jbt%aV5nTwHSOC|Amk~ z8LY2x@H_Q_Mzm-{m?&__)b;CG-c(Ap$h)fQY^F$W4pu8J)-V_a4$R;V+;LeJ;?q=f+u?f(88FC zmL;Q%2{SG|ay~<+FG)YwNMb;ioR}bMGfCeUevh}U#(r`M6PkP}^ zluP<;!hkD$bdqnd%@STdz(dYuwLJh$t9j_QAKDKhMH!k$YNjng++jve>-D^8Dzo|r zP5=U$-2kDn>rF~Ypq7NhEL%dpYd*Vx^+t$3-GJo=)Uj~1l8l{5WOTlu%<-9o$!(+} zmrmvqLmR3OAmO@c;}(_3DiBA=@_mud4RdTy!$A6M8yXOD{rP1}=-gPBg?h@(!&VR; z^br8Fp!4+%`*e|pS!WH6*CB`_%*Spbbkvi)jlE?G8(A61ax*KUIfqq^7+7t_9xYj@ zbIE4oN~l?m3R%tuv^L^jMoN_G>4(|?VRh!_<#O2fBYxiG5?I=0VP+UW;$!=mMw{hW zRt79U3&x|!Dt)Dm1cwqQRkFPSG!sA^EO5M_!jtUL>hbpuGWOj?Z?b2U=>|aTj8Zq| zF#t)7cS!p6APm+%6CFquNC)<#2w=iI{lUW`6C>2e8mPOks2RxxQ+yiSv<;Eji-(-> z6{MDiG@lvnD?a&dKv=usU}v;tv)9H_ZG9Xr&44FvRIF5mQ)#O5Xlh*o?Ch> zy@il+lu(jsN*;KX;@QOU8v&V9kh1)H$#|dsQ%2$AEYyd^uLJ@1bEz9Xf zVS)$d4Rk1(`xG3FK4=ZjDJd;NPS^+EJ4wvZ1ae2e-98AC|0_bBap2;Y} znaGuJ7;KBto~5806)=aSd^OgGR7PW+k!fP3e6HQW7Gx=lO-2S0w9d~hy_Rhhhy~1U zy6=-Otkb*NNCU_*SUV^~LY+HW4SMW&NC@rD*d)vbTD2VRKO$tXr$B`9_Ue!XsB`AhQo`A;^dgn5bIA zfaToGPT=c0N?`pV#uyOMZVOV~PESfEc@qYp)10EHNtS5yC=|MLkegaGGM=uQy$rCCw%!oojXEr+woEA!Eh z_@rRj9;iRm3KtRHE0}RqctGg=FJ^{mw5^%4^lmlAuCA6R-S~!!82SdK3#DR(7|dqgIMg2xRHo3KpjOLLw%N7DAlWu z^Tp{?fq+N_C^QBP7~!B(7C_R71N}xYvM2b#_9y^KjBV)U$q_dvK%btV(%d9Xv-sAa z>H5TMPF`z1r2rE zzA*KFy!ugielg6wTb;-2wzmgr?$!dq9LdNA=~h~o)IA5$upG+_Ig9Wc!he1Z~TI z{KySeia5xkDy+DmV-jt><&J&&z2)U}jkw^OB~_R;X;CwmWKz04HD0|*No&DYK8|$2$3ydq z39Koo7jhna>z@?QV-n7;Ya@_|&&DjSV5XxPW08H-s+s50+o%Z62fs@00cvtvWh4eU zR}+0YYg(jHhrBLD&f?(i>3pU=dpUL?ad96A^;xf^W@SqOy9cm8bphOx;PIeOrUlfd zP7qAG7CUUR!Y1MrH81?HCSVe zERQ2k1n&U9WYLrFL&CoXkt+(OdMKI@tpH?l%vXHZzU9y*fY3H~P=SXbzW#Kx#FFhL zLa5hpMvei1@7lM7UIQ8nGiDek++qIRe0zfiS&V4Cm0ZNnxn@j+A{pMY>cO&>z+f9D zVlSk_71l$L{EbG51)R&$I;_)o-uoqXB~87>@P`!UVqTFfqW6s+bav&S1OeQV0RH7N z93;72w%v-dJ~UA|<~`pXP6c?pP8Uf~{1`9D#~${f5EM|6Ehp(ah-BKvNXZXtOSQyDTP%$5`2BX;ovN%2U7kF9oBoSX@xeX3OtIB z6jG5R0@Q)(n2SXSQ`gKx_3O-d059a2S2^qOSV7A zcWr}y%HB961P%MHd<*kknov%3OqHAa(8E#|kQt%>uIERNagd@{RFQ4D9E7dzTyy za`mA%A!|(~tBXEbmA{Ce|G)gsGKBL<>PX^5g49>L8Dg7<)g zXba~R&gAV%MctFG3WS}GH6*2;G&Vx&)pUJ^07Z8j{~rWktbAepmp-A$EHW>7Qx#{Z6gR+Xy0-YlecW?YV(qcqdE{=! z3BZCyQxkdCfJE4wt#nYb53%$o0FqtbDj7g+Ik&NRkb|pFY^thRqAEu^ajPNb*FqaW z6*H;GQL=9Tc<9=od=nkahDwqy-G`hcEGd@Hh^hafv?b@EI9|&0d>wzVF2pUE%Dlr1 zB#TxJF4s}qAbx2U_L=ZKB7pGeqtA{Q{p^}?E4J>yjfco=LdtZe3Kf>uZ042X%f}ZR z(3m#=`)~zAIod*-tq1u-l?)fFOHRZmr=||5r704sihKULi#oi({z~D<7wvv z!7vuO+PAp!hXcv@yO;+tq3C_M zgjyqZn4BTK&IaC~DSb;x`J7vt2+~1}$TeQ2yJ( z-fiUuUF$;28#kxMTsO0FV-x!G&uScEzw5ii8K#74{7qyzCqJMlNny|r~tCm?a^_Z22PeI%eVO(zX|91!H=!z;fQwAXblC0 zDJ6NX+Ke-f5dKRb&L5pr3Zb9`i>V<}$YMDh#Sc?)F-w{oxy%~zg!rqoHG|!jsVguvyu^1p8+{QW*Yl$W2*XpmK5KT1-^R>CHY=OipJ;9_HmsgBZoZ)W$d2QNUR zXi<+ydV1i%-3&BcU+23fL787CMi!;YQnm+j3{({D5pylIkU^?qO2U z_rtel1YaXrx3$_;{O6->_b*4p&d;xa>mSz_o;*4os+Zft`E*$HP{H;$DY3TSX29Pc z4vRXA)QZN1wu4W&Lu@s8nXgebH`}>yTd-D{KpYMnm1}#_iW^4~n8BX8c+>_kMS>cL z``jMljCyW5$}9_9CKuTU8Po2Nawt858`z$Z*86~9x%5pkE=1}&Xy&;{9-m-;GCT7?h<{y*6!0m|;DVr*AOi<1%h-7JLQm1}me>hn)>uDUCO7i_h zZ2D~2(oN-A8*=9_cVJnW04(=PPb=@8O|pxGu=j5L-*Q3PSZVk=T_y{Sy$*5QYqD2; zX7Oc;J1j5c+j~buO^ghz7G|b@z$?=a`JJJA08oWKOt?shhD!J^{J*I3=`h#_6+?gH zZTUD*0q$i5S*fL}Rx+9tG_bZ80_09yM{6OhLDuzSCR5fd-rr1rWVeI20CBX79L^3WhIVqw@9omDy8b9gT%jdxKQ zG%{k-6P#h_DkT_0IK|3+xn0=;k%JInmbZj^TNNo}=&}@m5&J-LXKV?B(lt-qRUGex zDHS>o6BY!cUzLji^w?42zb5cYdu3fDVZ=yhP5FWJj|1}>b*x%%OpD;YvZ6zU7-z^E z(znC}Lb#jAoRCW1AN(TL26erkJKRH)orPAG2xTazu0aF+0L*TJ?K)IOcWK_olx-t5 z6q)MtuN`WaPbkf(n1($Cb8_BVE5(;->qDpl?u9=(7dJ0bh%MTz>V0N25+9Kkfz?L6H5aS z&0&It9EfiZF>X8PtBCKMPb>@kCiVv3wiwhO(Me51ZbZvdog!_?hi>RU7@%l)Q|caEhLZ7|RIfz&nHZCp`+y zVA~^4rmUs5tSXZ83Qj6A)|FV}3aC;6B&B6UAaU{16(hiVIgMjgHJOn|T&`nw1NkLd z(C6$-J1ZSe`mUMOK|sW{*aDJ~+*l(oNJD(L#%G4MfG>3U4Qctc0G08j54IifBKx|K z&mHMQYjMa~P2nppy?rA1Zzr0w^>zM~tYDxitou0xOr#+cMco=!Pf)GJ`1HMy*6o1_ zFt%B(%#p}uKv?D&a{b7(l!dXf5@)k?Nu9{lbRjniNV|}~Jn+?6XGfqp=Y^4wDjIUi zVvQ~`@;9kR6-DBfZB-&h0EOdA`aBgZwm}QrN<-NTR$$6k;Eb?B6M=0Tggc>&h2yAQ zdg5+kE*R?T=-cNMqN&Ch9&U*n_oM##%o=g~oP0~l&7g!5UxMk@Nh(awOy3e;g5ow4 zhT-yU0*C4}Q7Hub`4_IKMrMK&O_Quay^`N`jk$q&UAD+B4^kM^sWkq-CHP2t#s#K9FK01{}1PI0cF!GmL}x?^RuK!FJE^SmKK) zSf1qkHK9m0&hSLv(}oG2^IQf*-KZqW=%tZLjx`U}IWvt-9Yg?*b(LCZKFMHv{!0Xr z!l;9?t>1ad&xT9joW@j{NgJwI9tbC2wCH9mwDCP<%poWjD4RZCe%P*1`0VU8wQnp| zylh`IzEWP2aibYil0M+^Xl}+moc$K1NtfU`mQ8ytITC8xd5S?={fyg?_9hb}B~t+RpCx?$f2qBt?(J(UClgULVg%9x5? zX2kSZ?fR$R?IrL;eh{;p{cywpg+-tSJsUY&Gm-BCQ^;!1NR>)s&8Ko?W&ki>aS;vj zNJnc>sf}ACE480uuy>+oUFmhVdf^1C+bcy=mAjYb>5GTK$7=RGV&Yay1MUaoEouOF zSG1_j;K|xqkrz>B%`Gr15~lHf6t>G40Wq((w(3f$9YI;8lYlB<_%I&5m*tk^00ZNwtSPF5D)98e6*6&9X(qWBGXamK`D` zfcy-Ac>f*qS}km#7OxAf=2G#N)V`5Z2p>(+(eb$xSToN!LOWUUyaw6ca5u;7&fo3g z4o{8Pv>eG`DFooU>FLPf>(wNX_CP_HkFq&6J zI{T;6oduf2o^T#;lKK%978Vj6LxR1Rn?tPAj9TS6NAvZtU{`RT zb}r?2dxNC8L#)i>+dHAe;0|!iD9m=e*v#Cs5r$^d<%z~*AK5k&{@`lzGoS7#X?*H? z;XBRRD5egqJ0CHeeX&aOHZ^7Z^T{uLWA?%{FPYTmY2zrP+%!|~!CN_ye9d)1-DQ)*jL#(jH_(D4?7i~?v zsFRuvNi;IIlb8~DsJOQAtB%~W-iTYbd=h5wH4qt4mdKI&3?0*preZd8EH<2|DoAHv z;w)T+`^9%n%N9p;sEuaISPpXwmd48DAyK-50*zLgqArnfCDK~c*0N@X;47WE<0R^j zZbRS|N#kNjH7iM}4Qv!h)7W92B#@4|{-S}=iB4|Edj<4g%*_$NBsc00C)nVoeS47L?!YwFa52idr-y8*uL}uJ%C-ZctiLcQncknAgSs6q zSGBFZ?lv3SQaH5K4Q%3YDj|uTO;W~4n4AnK2Bj=rl)Wusa!=BU+v$96crX`gIznd# z!dE0)3XB9jh2>IKabnT;Ut1@fSOsO|bP2e88>-Gob{+iF%PkefpqcdJzeyJz&_S?Ua-P1>8D&JUORZ=(Rv2zlVZ`vPX&T}DlTa*DY}%DwQc@njvx*mhoIfc4--$1K$J|j>{ zY$t}Kbd87D#kykS$$A`YF2dH`^=X8Q59%CWyKg)3bqxmgNuCdI;m18|iX%NPDME4D zHIkT@n>b5KWf7j9{q8@rp%NWGqHBk?J-i&AAFu7&E~{DXoJl1c;r?vd?AM9+@6iQ9 z=-DCK8B3av&3g^qdf%@`xL?t|Exo_yoo`gSYyMv8BJa~|-my>9k$0{t*LBjOv$`g> zvt9eHb0;53%llfbD&wRR35drIa^}NaxYxY;JtnPu>E#M0OixynY=xgSmJ+ysjHa%(Ctt;@gyPAkl5k&;;qEf}pQenq6v zzNv6QU18^L3TmcLO@H#JOE0xe6*J8Mrj}JJl%U8bv}xypqBvCLOp-80T~n>Q;DMt5ESmh`on`KC|U4{UypUnHx9W_>_8;*Bb!de6ya(Q%p75O>>?h3wv-UQj;(LH z;;?b*J5mk8^<}yTM+P{So$4dKw$R{nRJjB4 zH`dw=;}32sK>Q7a&gMPH_Xm1oG~IrB-%!zwM>Yw|tUq`ww-B52q#dzdVCty-nsDPF z*P~P_FJVJ>P2NA;Cp{qT>l9Kw85y1{2PBHssIoxLdGjjJ6uK2HUDH-80L3qJ6y{VN zY1Z^UFOFwrngDl4F|E(~6#~Lu=0uU?9=b+nWKMoyI8=#f;AF`2w(^8-AmZjVlXB8> z)`*#l>E;kqp8G%GJ7<|s0f0lb6~sz{6V(iQ+9zma9>-ny@L zQeo^4U3$Q3X{5vtuafz2C9Zx&mxGB^8sTe{O-LoEsa_`8< zLx0i6awcQqvSal;(U)jn{2~?$&n%Uc`jMvP&(APGc$H#Zf3?BsNL)P_io9nxNItwj z*>@-{S(?wSvnc%Jv5#M9B>d!Y_gHBw=;UjgwBBU9Cv@rL*6Yi|#b{$5R`PssQBX#w zoJwfegk-b0F>*8QpV_V*`fa%hI@{IkiPqqH7ZNqS9yAw&O_J<6&oj(saFH>$Z{#Xw zVGZLYbPx;BIWrN5bpinoob(FJ%iBj4TIB}u0oVdoj;R$ZkG@PVGf?Ty`j#SJl{1K< z7IKX=C_P*u%uaJ=7z@lzh8dC)3$2e)R%YQU7JwCdypJka&~}c@IkcYRq;E>&59V}v zp)qKh76(3;M<4M(95_FnS@TMirde-S|2o7fy9hO;;au2r1+wCy!r=H`X!Ca3X5WjN zX=IuTw(uUVJ5hDETf?n=$ek)l>J$;R1hd=0Sqa~&*+;W}!S%)3<+Rd1Sq)g+M(Vo- zi71IbDDO?|aAMt9FP0?a_{;NY=!3LVDf$w$Z5qwF3d;@|ET$aMb8;7FQ7L=3F5BCS zw$g|ji#DYXe+;=HlbjHATre3Yoz2kx_&M1Pxrl~+GSwr}vVoFQf(2cRi&4j{VqzaK zpobvA)HxbAnz`J;-(=-RDlC^*(80MKDZdw{ivcZ6A$FGhHd}i8h@eb^IfAycP?Hq6 zJ#LaB_KdpSKl{5*y&pFhq1@VY=r z&t+b5WIxcZnI*1=3zxRx&NRE&2!ttFk*F!vl3Z(Mf5(WabdlpqYe}3p8H)s=%WIpN zWR>ssHjRX^O}}XbS>5=`Ne=`uZXPBXDM$E&^^k1(EkQ@azC53pbt$9mca#3+{p(8S zlsTC!?-6H7mB;N4qclV!!o)dHE5C6X5sxUFJ5SgRInYD6%BE8WlC&Nwj`RPKK;JmhSuDM#P7FQ7j$Hf;XSNKiVXp9_Zz9qdS zsKL%Hirut`xiYm1DDf0Afa4AVg&VB4G;?@etrY@}E}>y?-fjbs&XgH%y1OW2o=%*$9|W)2j3!$uV|d~B^Njb5mNj)mVm5mXCL8DYwhwbgt7DJ-elGGf=@TdHPYgDgqr} zWstIwwQ$r+LT)_{5FOV8Re|c*T@jD!`^gafTDFx!J>6)HL;%y0PfpxbxNHZCk_0a- zWEsq6nc7)`7KOHG2}sxPd!-lK9;uh*bjRV%x9`mSWC ztp9|>u{v(py5DZWYbCc&`*7D^c%4ljRPX?@;=`ppYC4aT183leQgrz*wQ%JIU4y41 zD4JF%sr+(tGHlsQ(_92j(D=xqc7q<$t;8GK9)KZ5f|`mKl+cIq089Ir+Imc}Xa!Gj z@uv6#L-ol8ap++d7{#_`jz{?NM|IYffS~;l%1Z+?PWl`eUUBz=(u99zlTFANH@9gN zfjTdV*V92VlZnD@vz+GQf~OSYwoqn`X4r#Hf6gtJcKw~0ps&bb6d6+ub6y^nM(VuAwSp(7fqPpPvD&#AGi8rStTs#s@;-zij=v{V5(>kuNUz0O*7FX{gbYRVpqO6w; z=H6wBsGC(6oE86B^S4N|*E27fu7v2ULou-GcH*{>%=M%*rZ zrL@H*>Dd`Ttb$50`8!^nICmtrCvpVGBHGVypv=qg8Dp-Q)pj@O-ja0Gm6ZcO@9H6y zNc+sSkHf=^qNJjo@Q=v03WSbO3Sw?v& z>h>KQcxFiIO$C-s$9*Y82kLG=FJM-TiM&zP42*4xl-LEpSLAe!-HLX{8Ellnpmi|E zhO%rRwBGE}iPn`G%rtl`t*$NQeq|(0>v269J=^FaBd4vUMAXUxUs#-55nyMYK(d+& zN2ydpR5i!-r=e1UqlP+hsc_34S==`x`6vb!SZWSl@=4*UYkYk&Xw_Be?brm1$ouIz zg+|8LX!^K|=mv|JkQGjudRpv7+s|6jG0uR0nPe^Db#bcJ<+M6xX08`tI=6Vj^`up` zOWRa#yPzJIBt|Q5^YGwl0L*lc%Yu=R^>rt{23Yxro`fE1;XfR?=R&e1X^pv7!B6>c zO9iV=RO{_pBCcL!?X#ac*fkcFwthf{e>6(fkk=Y9+=>sLNh79}?;@YFd0M3|A(l4c;a z_U`sMx`4yAm}gQLP0Z2tRsec8$H-Fx;au(o z6SK0Y2R0qflNgrvPaKo7$eL{O+sm6Wv2f;VlhIb%yf`!ebfyHzdsX3h)cuEGQqQLETQg73rN1tYdvz_IL znZ}{3wUt$=$sITA-Euum<3Bfc%6sa^ul3gIyQ)FgC6h8MY4vO6%b2Qk^2_YX8^S&N zm&^ZA^Y1<7*XP$=tf>*VNj#;Bw4VSZEmUT)R8Qhbd`s{ha#R+xwx)9Ooj?w9U&*cB zeVz8IyVSq&w=~$+Tz?=t%g>S_0e6wrEw>>sFc;z1_8L{MLRxAIkIM_A6v90+*W;>Y zrTaG34tXwOki=!RHydMChnc6J!(G`MQnF_Y@{S(wfTtDp$ESMN#RMOr%42lcC0uBZ zYs0%STuTxv`An&y7vk|-;aV@bB1cZf#j6aLrl3E64>tQh%I=}N99N@9yuEuVl5qVynG>^puU;Fxgm^HDj?H90e~*Q`=tQPdvvgP?O!7m)fT8n#8vJ*Tbkh z#-}Y2M~{zO7A>CbJ^J?R_t&QzzhO!T&T61xr>ZA5Fu7jnJ=d1G^Cwbnca{^uP8|HG zYBo9c!BrB3w21e`x!iF?M$RJ7#VDee8-gEZFb>y4z}W;jyVlRoE~j-VzQ_8zQ*ef(^oj=y!ef?FbdtC67$Mp%;aeX>< z;PudE-ycq=FqQ?VKa*x~)=B<;O`Dz^1$xwYFAE+=c8L$#bJ;6gksb$X?xRs=Q0Jmx zDY_-8YfBh>*zVKZh>%Sv8wY*&;!)4j5Er4vhSVGXE$tIpO- ziDNHq@me5>s4yfa6uwgNgW{W!z8$_ANkL*;PgRw5i!F1ftBQIo#@=x*=W`WlW&F%M z*W=Z<&(F)!G}{B%f9!v9sGq-i{`&oOd0K9lQ{x&t4cj;Sx@0F1)AR>Lf%dRs?J6JB ze?~B(xFiJU-_pjNoNJb`UN}H&MF-aLxg4UYe_J?)AjTIu&ay1+=76)sUk+p z%{a7jqorYnF%YUm~D25_?jO{qq0> zoZ)vvbMss5ZhaZKF~o=HSf{1+bs?J}fD&#UN2JH-B`obDW~CISwrY(Q2s3iu zuON^HG5LjtEYp!JmPZ}nlMZVEEELg3-e{52!UtVY2pp!m#nJULou|`c$04Zow>uit zC)RuUBeM0#eHwP~{OXgO;C@e3Bo&(9@V?-=5{z4?%ShjuYi!jU3A?~p!@h`U`NsluIHgd4&F$>4XUW*-C=B?G$_}TEE7^Pj&kw^do zoH&-`C%uf=bgrrp{;9iN&yYte`&JbyA*VkWit*Hf5VlFB%LPr=Ukeb1Oze6HoHCV2 z`uvc+!B@%ldqSLyq{~lFNxAo4fK(r#GH?Ch^pai4*b;2MTsL*}^XB<_Ufnblsy1^r zbNw|f6my%znRW5E&=Ec;C;Si}6MUkhA2>4jwfOXBJt%z05`G~4T4Y{FxZql<#5Z*F zy`kuNchyeS_ddlH*b*yy_jZ`;qCT8g@BjXlF2DW!-PfPu>b6WJ4N;SW1;k9`+Uuu>Cpkik(YEga@`vH&{)AB)cG#5QvyQ~2-K*pBn^hiu{KyWCxm zE3804Z98UttRqY4iER=leQu8`1!Fa!A<>2%(liJQu-GYz(3_kUZ>q8V5oNQ*ne)Q+ zL?f~HQ}Vh}#k(Rw16QP^sqv3-_y*~t-oO9*bsqb+E{#@#5d@Mb@Eq&;F)2)I?g)A11Nby|(u?zXm&%cK&q2nzbW;Ob}v`7Wo!W-%Fb8Wjx5rGQAlH) z|7~RW!}~WwuU14NV{HpW4^k)!EkC+ zwjB7t;0QO=z4yWQUrW!Xip5RWr^=OtCTMw=9l47#Zmi>$p1jnJ%chv)ttXliXlj9r zFzAJk58Pqzzt(+>24_`>-^nccB{vm=_56Sv^=DXcjURTsm9f(l5@ z9Y1fVyFM!oa-FU*TXEjk9b)@4sR+FBW+~`pt7ZA*?Xs0;<2(QSnV-J#>eGjZyXS-A z2`bM9>Bl>RiSWLIZ|}3hr|U$AeB}OcU6`+Rtp z5AwP;Ryq%qq!G4Gq#A{Ur=8;JPJN?9anxxoZW>v(uDm3&U{$P3y7Wllm>)UWV;c21 zbgfud_!@`(qF^e74+q~`L~(~7#*Zz8*v{H{l7mPVe~PGsPf-B+&F?S+ia?|qg*V+$ z1Q(zh`q<$RyRUW@m}%9fi&&6fF2E9|$|?Y*-X-FyX=5*t2gU1&AV?_HuT~Y&=X|GO z`|jSsrsJG2Y=)-0s8})+(lYdJn(K;aceGvyd({ZtvV_@?2=kKLi)cLZJJ|1T({3I3 zJevXX8m8v}Brd}skDqQgudDrqzNP8JKA+b)faq0R0|jnNZrXPY9F#@_BDWCdx@wTT z=n%E4E_)3-{l?8;FQoTZTtGtcFJM5R!bY>8Wv2shwRvmid&h&ajdccc^2T1_GpSZi z@i>^9x5Xye{3c%mPsPYoevv0$gEFdpNWA9S4pL$moh&hj1)mPz(!sj~hbiMqC;V1$ zJ5tG0?@IwP!r&NtFKzcnhu|FL-3_5FeC(rhi2o}3+85P!~sGOnK5yrN4gc@tN?ijQ@VG~oa^!P)@i;D}1(nw(ElsZxlW_Xs*&|Iga%ZF1_N{XtV?&C@2E zIY{EgO3iCH%}u_js_I3mt~&{wmkVWGN`5xJTzxiu?L8bWEISIM1N8C~JG;&9C{`J?=d|J_$#e({bT^Z4TB z;VN~H6=)mA>JcBZYgF#~d8A?BuF*X7!a_@stuD`YH)4 zIKtcBdc#MPyVAqAje1cA?0C}x&yc(uc@Q;&SQ3C;Z9`VxdQhelNXK#3PE*%~uV*ro zE^muS5p}oZvaMB?s7sia!E@-Kh_$t8(W|nP;oeRbBR|7AnRG>m!e`747{Os-(%#bG z4(dl-Ay!v!uP@I}x2rKWx=H@B+N_KR+%s0K6FQ^EePgXXf|3(Ltt1a0fyp%0_(LDx zHa5SHSLLF+?|$=WMu@}rhMe&5vFZIslR0LgN6$|7{MV;X9zS~c;C8*7Psc-%y^n9v zOJ3f6^<~7S`OtV={>kF$@p?Y4EWwudtW=9!=&^5W6~Fb&CgZk$b?Hkdem5$&HF-_l zZywDOL(e0NVh6Xi>Z89OgL}kci#|K&$9OuOnhYk!Q^~Q>5#LL=T1hcHG&qn72h>Xe z{LSMGEBFn>VK3i>{TVmUj}sZm415h$_Qj$(PX~re+1gY<|CjU1(iy{W2XDaqR-)vs z6GjB{rnD!ceL>dyTL5W@c=eT_<0^dDMt;4wsjN!*F3kaQvKZ(-CX;DtXOh}QwW)2p zqTtsQzUyLvMi?RJvtB%~N-nmM=Frb*c2IIr^j9Zr`6f)`I$+iuHp2m_z#K*4?-vjGgt}ev$V7-GJ_7JT@R-Qxt z6ty3X_Du7hZUxs5){SW|Dnt;(HG)w#w7U-kUUs#aSh!OW5}=8JGK(wtrO`Ue!Y)DD z#`p?(S|T4BChZ@j!rx)K6=X-1txqfvd$0by_9pD|jtZYE+r^ERymjOBIb5kxoxVA_{7!(J?e01O>YmQjWs~^Am;^pa* zXN?~Hj`L{MA^w(lKCUOMRuJ)vGM6>Q!4g16%< zFFk+y;0nL;%Xx9`YDxo0kGT;oR&@=4w)*8=AE5u2hDRw^Y{;0SmP_0_40q75DYIN{ z@uI6_g8JxPd1JeWJAWIY#(Eox6iGBTs2eYRK{AM!Sx182rJ9&zeuVYg>(hC)Ltm+MT*T%qwjDrkLbmZY*HxS3uDGs| zF)(*m#wG@>U{sT759tw^V+M(e!z~_iWW-@jCxcBtkE)6cdBo@~GR!8;*IF}1J}I9C z(2L|0Nj?eh|1CJ;$_}x#upkxT@oY*v7Vl5#cOisu5=M!WfY8(0lNozs#d^vGK}d7% zMlyB7UV++tB#n~A%!t@0oNA5gifbq7EX&8i%ZNMO9vCzW*y-EP>ohA)jdzO>LYLo6 z_xQS^A}rIQ0un3Ou(GW6PuUD4%^9|xS;|y8;Hqmu^FsEV(03zu<9fvFNz(Nk>Q?xGZXpmBaxJh$sa$(z33I1;t+|BF08?jO z6?;DZlqD^$NAamxMx$+|o%pE2TC+B3o%mF23{(`zD(iKsU42zpoJkWduEE`%;7)Ld z;O_43G7un0aCi3!It&opf&_PWf&?`X z#h_!S24}cy@VXV)_{>B=Qy5^p4+NQ|!akC}-u^47Bso*~GOm zhH=fqb#1oTt`e=$648n>y>lSWVC@RUC1p2u2EP}cI+bN{HuE>iJWo@qJBlU66oqu( z+JP+_xv@T6LySRKk^bmp{!uKaqe;V-a}-WADhHA+GfRHXYXw+$(LF3rLXkgdtl=~C z9fs@WSCy2aX}D=i-VV8)T6z6cAN~Bkr}6zu zq}}}bi+&CGfkXd z>dDHioH(GScFTu8S?s*iVNI{iOr+&oX{NNJOUh$58T4X;TFnsC?hy+7S`;OO=Z6Hj zZ%ftT!IM=p8TfH^3FT36$zCC;ZKKY&egWtzsT88g3mJGxCye`K9fL;c%eC_4@JUIu zlU7w50qd-qXh)-NaI>lQR&x5IduSpDr~?PanXK&O{=+uIbTcPmW;VDPSHZf$(wbPx z4Gk6>5}?;U7f*DAl$FJ&*l+r8nM#NlZ%)qm!9e=Dmk{oX>2EI>2bK4BjZI@wQ*eTx z)=)3Z&jr>wIpGdaJv{zED9mRO(1F4sJ?0~C?eF6Tf6Ci;+ZFYTrBvigFlU;?92vM+f8W)-V&C~^2TJ;$q3_!BIqerE4;fqNs1S+&)v*_5hWuIQ3_hPx`F z0PjkDeJ!K$VovkgHUkin!Md^YR8g*fwoDoUyCR96}R1N6)dNTERuC4=^T`X|F&td>r@D=0hnrFoNu zst|BGbzyuMx5&rAJ1dOaBDmw`X5ij3o-`j~o|5F3koRK<;u~X}7q6t<+%a$x-lEm{ zwfA~^Najno{&siZo0MCl4Xt3}g8(E~{sBL0*tSoHG!(e4QQ1mwRXMQm&oy%ks=OVi zMm$+M`~;Nq8m zrk9&p=MLwgFF_1sGjKn>#(PM|uNdKYc*9%_O{q~;x=#9XAB#dWXsTs(bazO~29`@g zm1wsAIH3cakSa-TQ8zC4QmCQbR@EK@G%p!CcenJv(=4Yhc*|yM=M@Wf;Fq*@?#$DR zK$B{Kd~r5{cTLm4g%~7XRN=VehNF$S(sZTO(3Xyeqx5Vr*N$08Iuj}( z#6c9GHSfN#Y2~T)w{(M7{lQR@qkD}o%bz2u=MgTN5V6O@1gqqnK|q(tCrwQ+_5M-C z1I-u{DSQ-q9&0s+M+kQjfhrB&C#a;y0I#&mf;O19^>lZo>m2i5LYXd*fy-7Rwvk(M z59DPhhxsk-r<~E91Llz%xsau|Y%N-vZD%5q+s9Ok2do|hv4}Oo6X!4v@-O2e$C=7$ zeGTcs1e3fy#r~Ign+!dqT{({ZO-+xLf#8K)M|lZ@kn_Z_xIn;y2?vB$Ahb)T`TZ28 z{OYAb=ec396LjkNQ&2}cNzat@SX7Xo1eQJH_pqT-NwVvO+^hAfLV>9!$?+y+v&SO`zzk?ggXQuEU$BrkXacqrc^v-!7+eJ{1-cyRU*SO z$+T6jn&25$a%1|rk}=>+i?b`kwghb&Q!7U}&j0MN_vq%!2vX-kAe45W&z}D0x$>RF zXBQqt&ekWuBZ=C~_A!YuS7bQ?n{Bxc-DYY){Ri|i^XwO9ANu`UnkUYKqCA2_8P{Rc z;H~C+10+bO9&G4iHu5NEtOhZU@Dfka{?l(jXbL`UPf!@OC`EJ=?T;g`d8M968rU@_ zORCtG0im9j4}-1BGu+f0F162QQ~a#F^# zlY#;}*{9k3uS)9cDuQ=4#*ebj3)-%LiY_1vW%|YPA|i(KKV|`%OF}V$v#vnM6}*}t)ke=pVcKr%JXwV`)p4?OC0gg*(6(7s_w;_v3^?yrSCtp9G1nRr)f6hYh7r+y=4kZ8 z5Vd~H!za3aIbV`fx|u)BJjF}?fui3qRdoF8uAZIFdbCIaPw;JL`w;rqOAn+!B_CpM z=@tI~CW~J1jyCCD8;~s@zL*b6_xX5oycEBV+MPM=y}VaQ13;(*x?26Oen;*o*xZPc zX%%~J<%BJN!=dMCwvs1&d@`BxP;i*tsiy)=58RLfKF_05UpCdBVmbg zE(S3|3w!!t-e70ufErm+SdaC$AWW{oVk`kH=X`|X@~2*6(c=)OijuYGx8HW0>dPaE zZdMsf%Vhxx!QW4D#$&-xgf)iJg0RODTE1=qK!&B9nHnQzpUZfYh%`@{0SfO3_8zi^ z&z#(VAXzpDko}mF+nOuK2FIP*-mng=dki{mcq&c#@-}DNx4q^7(*xT5gZp=&qvTA8 zVKDhh3j2&gy!7qC$;TYRTOtKv-t00NmMgn5bgv96k@A};1c(V*00>$uPGL+%pztPW z;mkhArQC%u#unO@r+?M`l=!3Hu389430ogmcHTe@Ib*dWT%t7OKi8Y!CCeO@S&>s; zxt4<#K&!hS*E5Cstup&7ec9VtR`k8SWNh5+6{;F!r|rZ&lgdHhIW?WWR(2)qWu$C_ zJF8YXq7=763uePe8H?53A4)hvVxeWs-;8PY7eXvKJ5`rkA|XN1&iBs|KpV2Eap?{v zp&an<$?9NQ-0TiT#YK$_%_9qK+#!k4OI6B^1eZRyck*p|YtRE0kshD~<(=_Sw}l{! zj9!;jGAxmW+1w zB5AFfdx=BT-rX}d3^qcPq^k9dB#_&{q`Wc0f+jzsN6x<4Z+2FNBYtY<>JAR5z?M1= zK`U3PorALAA(eu%T0eWOK7JiI^18kF4Gqug>3O=-y=9&b)mmFW*6ovJ>(+^`ap;VR zRe}R9&_mmUukQbles83z+R9@rU9YyvX-9}nqgPI4QSE$_+h{Y9$~v0gYf+`pfLlJE z0miN~X)#JP0zf1AT{e6$O#696d4%5utKuLkC{B!ykFhebpk_s}R5yBEp~bzP@XAif zo(1fDtlVzx?Hp+Dhs|K9$*;z;Z#wWO2jcf>hPwZzS7Cbec}g#PAaVMB&d;sF_T95X%&Zv5VKfM@ zy;!>o`E#Kpyz{!-< zbKT-7;FE?A?Vv*1Tczbj_!A=*LJ)_EP~@y)`8EbdW1i2FX*)n~=Rk>~u3P=QiF%a+ z#Hx1jOLl&Ore~BzW?SNcEdix#PJW%;;_rx)hSQH+dJO73!pdI5{y{1uw5BT0Ehp== zy@)D8v!G^&aZ1B1V=3NNr0xLO68|l8C<@+qdkV`!2lM}!4Lh1GyGl$SKf~k3=gI5M ze5M;AZ!mDJ+T8JZHI&L+Vr7aQ=930}Yja-UMngkOlb?r=7ZMGz6n6nNgI2ByPzS_s zRJbKM_h#bqJ$4ul{s3y)XOgU+h?;409437-O04J8z$`2d*Ci3a7d>~rAm39peW#US zq`2-%QuT_ad#jGLwI_58#lIAUF~Pn@c$16$yQi20N~xgXfNCDFiwR6L;cGI3)z74+ z1%tzw;Yp)g;jNvayBT^_Ws zX(%o%E-L9$><|VSG7(lW3<6^WHja#5pwSa>gJw;uuH-0%HX4 zLHCOAS_&94v3zOt@BJO9Q6nN0d208b$XkkAjs>PWOJ?MS?3^UPd+<1?aShAVndsnl zRXLf>M3%@yQ(P?Nok|RuaJ~GHRY?gcYeAkvDymrbTLG+LRvp7U6n+-s%kRh!OvARm z<=FYt;ev75M=Z1BnyUt^)0M38o45|RZJ+#de12fyMLLTTIv4_{@$71OaNJc6ojtTX zdL0z-xqr|PJ(x{>O}_p>zrreSfO{zZh_trT6YkQkZv!VbsG-9iQq}Jp=W{6DhWg&! z^~F#S$kP3wguEbKSdz+`VH5TG;D-|0q4o$iam*PKg^y@poZd$D)nJBKrsLq(DU9^yQzY|5o z8Ey1%jm*aBcDQJ_NSpr98=P{(Hr?0TyuDf3IJRUKxJZz=x>~|7Kp~=&y)+xSRi4Mv=dv7##9w^ z$+Qc;u>t)ZiT&;62R84e6%dsTLDN?6ifX{g$S!k@RH7K8b};@BXygT4=4qV}%WcLy z{RfA*ZLy29;s)Mzc>d#{a~Cc1uT~Uj-=bR^Ut)Oo^pS_H3a8HK`jiL5B)ryd0vp8I z#3`>X3$&Z^p4?``@zg=ca$BG5oOpExTB(r9FxDHl1cIT@E}Gg(&|C})bpmYX-adk9 z4cj$o=&w-B6-yO`6evN(G%4alOpD8dTiQ-2>|b@Fu27yh1)y1lkKqC)1WL2Go;>)% z{arzSBLuLtDoj6%Qk2N@SzrIY(ij$_$$a-tAL$=ympZt=Ja`+Sv%YFVK;0j~bA}3P zZs;JDj6k*Bz|(TH_6GcYon#*>zaGR7^RGH*xPR5H!2PEV<6m_fM;Zz!G!fX+e{GE! zblCr}EyV1eMTCKYss3+4cPEa7i%H8W+Um4>0Z{&x%ROh%{Wm-)Bkv}Y|@5jBGw}_{8q=Nb%U!MQ?61+-6Q9-YbLH?pbG!Ak4&mBwuxWoS8|FHz-KTCYt zB~?vjw3UscM~F~>vh305i;Mg%&43RdKVd5^`u>If3sSs-e1Bs!8CAy~pYl4RDzaKJ zlR2@aV*^Sm>OkeS13%FtSbZ>H&JrIcl(UM-!TryX4=)(5$VF`*518}cD0XB1<8kqS z4BYn*@r;J9ZbPQfMz2q>@2A8ozLJkv)p6=6b8J;@c&!iaFdwe|MjLm?0(laircx?eGvlI z5fy}fuSHKt6Mb$E_st$AicxD}u2Y6#^y0&4$4Z4|Bgogj-FxzGKyE_&+%3@rnYusY z=~wbqWW5mTU&ZrRPP{Vfp!_R`MhngP!t8~_hxiL5$?~(+n9Xx;{1#2yW>WK)&U*dM zL1+gy+3N33DNS8ZLem9(`>XOVXrVLH#ZG$@U5N>ZP8N9E@=1y?G`17eY0X!km!100 z<23M3^W)*#kU0h<224Nin0SUezq3An>-tjsrA^=Owb@e52ZP{V>7zdv+sS@HkI@q? z1XhtoTO0OZR^MW=^`^ZUTkK>z3CjJ`$^-sDCSyrj4((fun#aOhh)UCFo&!VktojHT+~ph_o3o2 za1TiDVPGD-lM(K-_Y6Go&vxD5s(0Ierdac{XfbVB=gNO50GrZ%p^%3DSrJR`VE*C- zIm|d5<1NkM5j>J0uFiBvMOtF|3Yo02vM#z>Ktsa@%S;ebKe(#xA4s8)EF(VG8_XD? z)`j^Gk%X(5mbWiC;tQhqHBLNRi?WY0Hm=b1Gnw7F@P%Y<*jcgDd_6qM zk7m^IkB-aBG-?vs7YJ8RsQ>VI4tUUAOH$LGB!Cvi$*N0gX!Syz32Gkub zvqW7Ab^VKOA@@a&%qPO7bn%s?Zu8_e;{jAbuaEch;w1fh;|Zmo5Bq*uP#SQiU?>P4 zvb;{CghBX54IhT>N=+fMTd&3ZR!YRS0fnZzz!;4$j8K1_lIfE%fs;?SbCZp!ZRc@1 zb~9R@zX)E7-ikIUE_b}CJ}e>%Y8i-F|I)v*K7foSoKNPbk0!lheNuv>tbEi|9*1;X zz6$w;Qz_rq2Y8-?$dv1|oeEIG$*$9N_R;|PjD2FvdYq8yIYHS68paB7WMF3YEQ3p2 zx@OM~Qpf_963FD*wFZzu4%ih0CcVGJ@}@$xCz74(9DaxO$vcD>Q!~#k-oNw&?`Dsu z^W49Ow_s>_+?LbT&0i@)VU;lC=jfUNGw;&G?Vb)v581&|dXdt~kV@Gcl{%3`Bx2&% z)y;WIx+0%0csICs5w*7ql$t6B&d&3swXQfvi@LYhwLeMJ=~o|WNUCSZrgl4=DJSTO zw!+##Lc_CN$|wM)Nv*9NJZrLrA2x~u~EE~jYyJXtwSAurV$s=6n}BOKhv?uGY! z*(Y64Y~hKT#3aHj0o%I9=&(uLHjT*QMkfh_{o}{%vqaMRQ-2&J(n_&MeupcwZ~?JN zy%PlT>_Ksb67;Zd)}sp7*LVqbTgb3Eci{2sjj3(;64VP)Y%VPEuoCgykQga_S@GtQ z9p)HDvM+C321Gl>8rs;y;bsPw7_GsdzZQ^SQF-P*JOpwnyztp!_4g8;bzAoPM^tZH z5j}uv3LsB2@J|feh3BZZd1{}!k7&#W&4NFRqKY<1aDSENK2e5H5>X8#osBp~n`2D} zk74EekpjF#z5pm~nI;K#8KiFVEiXT%xZ{0Rb^jswHb1pqMmgxSCPf081M7k^8|w3e ralwqiu$e!uH?4@LU_-lf!)dR;!?^pk>vl!{pYxI|N*c&J7?}S9Z|^%{ literal 0 HcmV?d00001 diff --git a/css/common/fonts/FiraCode-Regular.woff2 b/css/common/fonts/FiraCode-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ea25bd6427069a8e1feaaff33af21c73e9fecaa3 GIT binary patch literal 71844 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 literal 0 HcmV?d00001 diff --git a/css/common/fonts/stylesheet.css b/css/common/fonts/stylesheet.css new file mode 100644 index 000000000..875f6c4a8 --- /dev/null +++ b/css/common/fonts/stylesheet.css @@ -0,0 +1,89 @@ +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} +/* + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-MediumItalic.woff2') format('woff2'); + font-weight: 500; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +}*/ +/* + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-BoldItalic.woff2') format('woff2'); + font-weight: bold; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +}*/ \ No newline at end of file diff --git a/css/common/keep-theme.css b/css/common/keep-theme.css new file mode 100644 index 000000000..e69de29bb diff --git a/css/common/markdown.css b/css/common/markdown.css new file mode 100644 index 000000000..570fcd13f --- /dev/null +++ b/css/common/markdown.css @@ -0,0 +1,159 @@ +.keep-markdown-body { + font-size: 1rem; +} +.keep-markdown-body blockquote { + box-sizing: border-box; + margin: 1.4rem 0; + color: var(--text-color-3); + background: var(--hover-background-color); + border-left: 4px solid var(--blockquote-padding-color); +} +.keep-markdown-body blockquote p, +.keep-markdown-body blockquote ul, +.keep-markdown-body blockquote ol { + padding: 0.4rem 0.4rem 0.4rem 0.8rem; + color: var(--text-color-4); +} +.keep-markdown-body p { + color: var(--text-color-3); + line-height: 1.9; +} +.keep-markdown-body a { + position: relative; + box-sizing: border-box; + padding-bottom: 0.1rem; + text-decoration: none; + overflow-wrap: break-word; + border-bottom: 1px solid var(--text-color-5); + outline: 0; + cursor: pointer; +} +.keep-markdown-body a .fas, +.keep-markdown-body a .far, +.keep-markdown-body a .fab { + position: relative; + margin: 0 0.2rem 0 0.4rem; + color: var(--text-color-4); + font-size: 0.88rem; +} +.keep-markdown-body a:hover { + text-decoration: underline; +} +.keep-markdown-body a:hover::after { + background: var(--primary-color); +} +.keep-markdown-body strong { + color: var(--text-color-3); +} +.keep-markdown-body em { + color: var(--text-color-3); +} +.keep-markdown-body ul li, +.keep-markdown-body ol li { + margin-left: 1rem; + line-height: 2rem; +} +.keep-markdown-body ul li { + list-style: disc; +} +.keep-markdown-body ul li ul li { + list-style: circle; +} +.keep-markdown-body ul li ul li ul li { + list-style: square; +} +.keep-markdown-body ol li { + list-style: decimal; +} +.keep-markdown-body ol li ol li { + list-style: upper-alpha; +} +.keep-markdown-body ol li ol li ol li { + list-style: upper-roman; +} +.keep-markdown-body li { + color: var(--text-color-3); +} +.keep-markdown-body h1, +.keep-markdown-body h2, +.keep-markdown-body h3, +.keep-markdown-body h4, +.keep-markdown-body h5, +.keep-markdown-body h6 { + color: var(--text-color-2); + line-height: 1.5; +keep-tablet() +} +.keep-markdown-body h1 { + font-weight: $default-head-font-weight; + font-size: 1.6rem; +keep-tablet() +} +.keep-markdown-body h2 { + font-weight: $default-head-font-weight; + font-size: 1.5rem; +keep-tablet() +} +.keep-markdown-body h3 { + font-weight: $default-head-font-weight; + font-size: 1.4rem; +keep-tablet() +} +.keep-markdown-body h4 { + font-weight: 600; + font-size: 1.3rem; +keep-tablet() +} +.keep-markdown-body h5 { + font-weight: 600; + font-size: 1.28rem; +keep-tablet() +} +.keep-markdown-body h6 { + font-weight: 500; + font-size: 1.2rem; + line-height: 1.2; +keep-tablet() +} +.keep-markdown-body img { + position: relative; + display: block; + box-sizing: border-box; + max-width: 100%; + box-shadow: 0 0 0.2rem var(--shadow-color); + cursor: zoom-in; + opacity: 1; + margin: 0.8rem 0 0.2rem; +} +.keep-markdown-body img.hide { + opacity: 0; +} +.keep-markdown-body img[lazyload] { + margin: 0.8rem auto 0.2rem; +} +.keep-markdown-body > table { + width: 100%; + overflow: auto; + border-collapse: collapse; + border-spacing: 0; +keep-mobile() +} +.keep-markdown-body > table td, +.keep-markdown-body > table th { + padding: 0; +} +.keep-markdown-body > table th { + font-weight: 600; +} +.keep-markdown-body > table td, +.keep-markdown-body > table th { + padding: 0.4rem 1rem; + border: 1px solid var(--border-color); +} +.keep-markdown-body > table tr { + background-color: var(--background-color-1); + border: 1px solid var(--text-color-6); +} +.keep-markdown-body > table tr:nth-child(2n) { + background-color: var(--background-color-2); +} diff --git a/css/common/variables.css b/css/common/variables.css new file mode 100644 index 000000000..39acbff42 --- /dev/null +++ b/css/common/variables.css @@ -0,0 +1,209 @@ +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} diff --git a/css/layout/archive-content.css b/css/layout/archive-content.css new file mode 100644 index 000000000..e69de29bb diff --git a/css/layout/article-content.css b/css/layout/article-content.css new file mode 100644 index 000000000..93ebeeaee --- /dev/null +++ b/css/layout/article-content.css @@ -0,0 +1,227 @@ +.post-page-container { + position: relative; + display: flex; + justify-content: space-between; + box-sizing: border-box; + width: 100%; + height: 100%; +keep-tablet() +} +.post-page-container.show-toc .toc-content-container { + display: block; +} +.post-page-container .article-content-container { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + border: none; + box-shadow: none; + text-align: justify; + margin: 0 4rem 0rem 4rem; +keep-mobile() +} +.post-page-container .article-content-container .article-title { + color: var(--text-color-2); + font-weight: 700; + line-height: 4rem; + padding-top: 3rem; + padding-bottom: 1rem; + font-size: 1.9rem; +keep-tablet() +keep-mobile() +} +.post-page-container .article-content-container .article-header { + position: relative; + box-sizing: border-box; + width: 100%; + height: 3rem; + padding-left: 3rem; + padding-bottom: 4rem; +} +.post-page-container .article-content-container .article-header .avatar { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: 3rem; + height: 3rem; + padding: 0.1rem; + border: 1px solid var(--border-color); + border-radius: 50%; +} +.post-page-container .article-content-container .article-header .avatar img { + width: 100%; + height: 100%; + background: var(--avatar-background-color); + border-radius: 50%; +} +.post-page-container .article-content-container .article-header .info { + display: flex; + flex-direction: column; + justify-content: space-between; + box-sizing: border-box; + width: 100%; + height: 100%; + margin-left: 0.8rem; + padding: 0.2rem 0; +} +.post-page-container .article-content-container .article-header .info .author { + display: flex; + align-items: center; + font-weight: 600; + font-size: 1.18rem; + line-height: 1.5rem; +} +.post-page-container .article-content-container .article-header .info .author .name { + color: var(--text-color-4); +} +.post-page-container .article-content-container .article-header .info .author .author-label { + margin-left: 0.8rem; + padding: 0 0.2rem; + color: #fff; + font-weight: 500; + font-size: 0.6rem; + background: var(--selection-color); + border-radius: 0.4rem; +} +.post-page-container .article-content-container .article-header, +.post-page-container .article-content-container .article-header-meta-info { + margin-top: 1rem; +keep-tablet() +} +.post-page-container .article-content-container .article-content { + margin-top: 5rem; + padding-bottom: 2rem; + color: var(--text-color-3); + word-wrap: break-word; +} +.post-page-container .article-content-container .article-content .article-aging-tips { + position: relative; + display: none; + box-sizing: border-box; + margin-bottom: 1.8rem; + padding: 1rem; + color: var(--article-aging-tips-color); + line-height: 1.6; + background: var(--article-aging-tips-background-color); + border: 1px solid var(--article-aging-tips-border-color); + border-radius: 2px; +} +.post-page-container .article-content-container .article-content .article-aging-tips i { + margin-right: 0.4rem; + color: var(--article-aging-tips-color); +} +.post-page-container .article-content-container .article-content .article-aging-tips .days { + color: var(--article-aging-tips-color); +} +.post-page-container .article-content-container .post-tags-box { + display: none; + justify-content: center; + margin-top: 1.6rem; + font-size: 1.1rem; +keep-tablet() +keep-mobile() +} +.post-page-container .article-content-container .post-tags-box .tag-item { + font-size: 0.7rem; + padding: 0.25rem 0.5rem 0.25rem 0.5rem; + border: solid 1px var(--border-color); + border-radius: 1rem; + margin: 0 0.25rem 0 0.25rem; + white-space: nowrap; +} +.post-page-container .article-content-container .post-tags-box .tag-item .a:hover { + background-color: var(--background-color-2); + color: var(--background-color-2); + text-decoration: none; +} +.post-page-container .article-content-container .post-tags-box .tag-item ::before { + font-size: 0.7rem; + font-weight: 300; +} +.post-page-container .article-content-container .post-tags-box .tag-item:hover { + background-color: var(--background-color-2); + color: var(--background-color-2); +} +.post-page-container .article-content-container .post-copyright-info { + width: 100%; + margin-top: $component-spacing-value; +keep-tablet() +} +.post-page-container .article-content-container .article-nav { + height: 2.8rem; + margin-top: 4rem; +} +.post-page-container .article-content-container .article-nav .article-prev, +.post-page-container .article-content-container .article-nav .article-next { + box-sizing: border-box; + max-width: 14rem; + height: 100%; +} +.post-page-container .article-content-container .article-nav .article-prev a, +.post-page-container .article-content-container .article-nav .article-next a { + position: relative; + display: block; + box-sizing: border-box; + width: 100%; + height: 100%; +} +.post-page-container .article-content-container .article-nav .article-prev a.prev, +.post-page-container .article-content-container .article-nav .article-next a.prev { + padding-left: 1rem; +} +.post-page-container .article-content-container .article-nav .article-prev a.next, +.post-page-container .article-content-container .article-nav .article-next a.next { + padding-right: 1rem; +} +.post-page-container .article-content-container .article-nav .article-prev a .arrow-icon, +.post-page-container .article-content-container .article-nav .article-next a .arrow-icon { + position: absolute; + top: 0; + width: 1rem; + height: 100%; +} +.post-page-container .article-content-container .article-nav .article-prev a .arrow-icon.left, +.post-page-container .article-content-container .article-nav .article-next a .arrow-icon.left { + left: 0; +} +.post-page-container .article-content-container .article-nav .article-prev a .arrow-icon.right, +.post-page-container .article-content-container .article-nav .article-next a .arrow-icon.right { + right: 0; +} +.post-page-container .article-content-container .article-nav .article-prev a .title, +.post-page-container .article-content-container .article-nav .article-next a .title { + width: 100%; + height: 100%; +} +.post-page-container .article-content-container .article-nav .article-prev { + float: left; +} +.post-page-container .article-content-container .article-nav .article-next { + float: right; +} +.post-page-container .article-content-container .article-nav .post-nav-item { + display: none; +keep-tablet() +} +.post-page-container .article-content-container .article-nav .post-nav-title-item { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +keep-tablet() +} +.post-page-container .toc-content-container { + position: sticky; + top: $header-height$component-spacing-value; + display: none; + box-sizing: border-box; + width: 17rem; + overflow: hidden; + max-height: calc(100vh - $header-height$component-spacing-value); + padding: 2rem 0 3rem 0rem; +} +.header-shrink .post-page-container .toc-content-container { + top: $header-shrink-height$component-spacing-value; + max-height: calc(100vh - $header-shrink-height$component-spacing-value); +} diff --git a/css/layout/category-content.css b/css/layout/category-content.css new file mode 100644 index 000000000..20528b032 --- /dev/null +++ b/css/layout/category-content.css @@ -0,0 +1,20 @@ +.category-container { + padding-bottom: 4rem; +keep-mobile() +} +.category-container .category-name { + margin-top: 3rem; + margin-bottom: $component-spacing-value; + padding-bottom: 20px; + color: var(--text-color-2); + text-align: center; + font-weight: bold; + font-size: 1.9rem; +keep-tablet() +keep-mobile() +} +.category-container .category-name i { + color: var(--text-color-5); + font-size: 1.2rem; + display: none; +} diff --git a/css/layout/category-list.css b/css/layout/category-list.css new file mode 100644 index 000000000..8ad88ec87 --- /dev/null +++ b/css/layout/category-list.css @@ -0,0 +1,69 @@ +.category-list-container .subtitle-info { + font-size: 1.3rem; + margin-left: 1rem; + line-height: 3.5rem; +} +.category-list-container .post-info { + float: right; + display: inline-block; + margin-right: 1rem; + font-size: 1rem; + color: var(--item-border-color); + line-height: 1.5rem; +} +.category-list-container .post-title-link { + font-size: 1rem; + margin-left: 1rem; + line-height: 2.1rem; + display: inline-block; +} +.category-list-container .category-list-content .archive-main-category { + font-size: 1.3rem; + line-height: 2rem; +} +.category-list-container .category-list-content .all-category-list { + line-height: 2; + position: relative; + transition: border 0.5s; + margin-top: 1em; + padding-bottom: 0.5em; + align-items: baseline; +} +.category-list-container .category-list-content .all-category-list > .all-category-list-item > .all-category-list-link { + font-size: 1.2rem; + line-height: 2.7rem; + font-weight: bold; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item { + border-bottom: 1px dashed var(--item-border-color); + margin-bottom: 1.5rem; + font-size: 1rem; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item:last-child { + margin-bottom: 0; + border-bottom: 0; + border-bottom: 1px dashed var(--item-border-color); +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item span.all-category-list-count { + float: right; + color: var(--text-color-3); +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item span.all-category-list-count::before { + content: '('; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item span.all-category-list-count::after { + content: ')'; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item ul.all-category-list-child { + margin-top: 1rem; + margin-left: 0.9rem; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item ul.all-category-list-child li { + margin-bottom: 0.9rem; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item ul.all-category-list-child li::before { + content: '▪ '; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item ul.all-category-list-child li:last-child { + margin-bottom: 0; +} diff --git a/css/layout/home-content.css b/css/layout/home-content.css new file mode 100644 index 000000000..ee12ce439 --- /dev/null +++ b/css/layout/home-content.css @@ -0,0 +1,107 @@ +.home-content-container { + background: var(--background-color-1); +} +.home-content-container .home-article-list .home-article-item { + position: relative; + box-sizing: border-box; + padding: 28px; + background: var(--content-background-color); + border-radius: 0.1rem; + margin-bottom: 28px; +keep-tablet() +keep-mobile() + border: 1px solid var(--item-border-color); +keep-tablet() +keep-mobile() +} +.home-content-container .home-article-list .home-article-item:hover { + background: var(--hover-background-color); +} +.home-content-container .home-article-list .home-article-item .top-icon { + position: absolute; + top: 10px; + right: 12px; + color: var(--text-color-4); + font-size: 1.2rem; + transform: rotate(45deg); +keep-tablet() +} +.home-content-container .home-article-list .home-article-item .home-article-title { + position: relative; + margin: 0; + color: var(--text-color-2); + font-weight: bold; + font-size: 1.4rem; + line-height: 1.5; +keep-tablet() +keep-mobile() +} +.home-content-container .home-article-list .home-article-item .home-article-content { + margin: 20px 0; + color: var(--text-color-3); + text-align: justify; + word-wrap: break-word; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container { + display: flex; + align-items: center; + justify-content: space-between; + color: var(--text-color-4); + font-size: 0.8rem; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info { + letter-spacing: 0.5px; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info span { + margin-right: 10px; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info span:last-child { + margin-right: 0; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info span ul, +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info span li { + display: inline; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info .home-article-category a { + padding: 0.05rem 0.1rem 0.15rem 0.1rem; + border-radius: 2px; + margin: 0 0.25rem 0 0.25rem; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info .home-article-category a:hover { + background-color: var(--background-color-3); +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info .home-article-category a .fa-chevron-circle-right { + font-size: 0.7rem; + color: var(--text-color-4); +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info .home-article-tag a { + padding: 0.05rem 0.3rem 0.15rem 0.3rem; + border-radius: 1rem; + margin: 0 0.1rem 0 0.1rem; + white-space: nowrap; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info .home-article-tag a:hover { + background-color: var(--background-color-3); +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info .home-article-tag a .fa-hashtag { + font-size: 0.7rem; + color: var(--text-color-4); + font-weight: 300; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .read-more { + display: flex; + align-items: center; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container hr { + flex: 1; + height: 1px; + margin: 0 10px; + background: var(--border-color); + border: none; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container a { + color: var(--text-color-4); +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container a:hover { + color: inherit; +} diff --git a/css/layout/page.css b/css/layout/page.css new file mode 100644 index 000000000..1149ad192 --- /dev/null +++ b/css/layout/page.css @@ -0,0 +1,90 @@ +.page-container { + position: relative; + box-sizing: border-box; + width: 100%; + height: auto; + background: var(--background-color-1); +} +.page-container .page-main-content { + position: relative; + box-sizing: border-box; + padding-top: $header-height; +keep-tablet() +keep-mobile() +} +.page-container .page-main-content.is-home .transparent-1 { + background: var(--header-transparent-background-1); + -webkit-backdrop-filter: blur(4px); + backdrop-filter: blur(4px); +} +.page-container .page-main-content.is-home .transparent-2 { + background: var(--header-transparent-background-2); + -webkit-backdrop-filter: blur(5px); + backdrop-filter: blur(5px); +} +.header-shrink .page-container .page-main-content { + padding-top: $header-shrink-height; +keep-tablet() +keep-mobile() +} +.page-container .page-main-content .page-main-content-top { + position: fixed; + top: 0; + right: 0; + z-index: $z-index-5; + box-sizing: border-box; + width: 100%; + height: $header-height; +keep-tablet() +keep-mobile() +} +.page-container .page-main-content .page-main-content-top.hide { + transform: translateY(-105%); +} +.header-shrink .page-container .page-main-content .page-main-content-top { + height: $header-shrink-height; +keep-tablet() +keep-mobile() +} +.page-container .page-main-content .page-main-content-middle { + display: flex; + justify-content: center; + box-sizing: border-box; + width: 100%; + padding: $component-spacing-value 0; +keep-tablet() +keep-mobile() +} +.page-container .page-main-content .page-main-content-middle .main-content { + position: relative; + box-sizing: border-box; + width: $main-content-width; + max-width: $content-max-width; + height: 100%; +keep-tablet() +keep-mobile() +} +.has-toc .page-container .page-main-content .page-main-content-middle .main-content { + max-width: $has-toc-content-max-width; +} +.page-container .page-main-content .page-main-content-bottom { + width: 100%; +} +.page-container .post-tools { + position: fixed; + top: $header-height$component-spacing-value; + left: calc((100vw - $content-max-width / 2) - 5rem); + box-sizing: border-box; + opacity: 0; +keep-tablet() +keep-mobile() +} +.header-shrink .page-container .post-tools { + top: $header-shrink-height$component-spacing-value; +keep-tablet() +} +.page-container .right-bottom-side-tools { + position: fixed; + right: 0; + bottom: 5%; +} diff --git a/css/layout/tag-content.css b/css/layout/tag-content.css new file mode 100644 index 000000000..126452683 --- /dev/null +++ b/css/layout/tag-content.css @@ -0,0 +1,14 @@ +.tag-container .tag-name { + margin-top: 1.5rem; + margin-bottom: $component-spacing-value; + padding-bottom: 20px; + color: var(--text-color-2); + font-weight: 600; + font-size: 1.6rem; + border-bottom: 1px solid var(--item-border-color); +keep-tablet() +keep-mobile() +} +.tag-container .tag-name i { + color: var(--text-color-2); +} diff --git a/css/style.css b/css/style.css new file mode 100644 index 000000000..71a9e354e --- /dev/null +++ b/css/style.css @@ -0,0 +1,4288 @@ +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} +.fade-in-down-animation { + animation-name: fade-in-down; + animation-duration: 1s; + animation-fill-mode: both; +} +.title-hover-animation { + position: relative; + display: inline-block; + color: var(--text-color-2); + line-height: 1.7; + vertical-align: top; + border-bottom: none; +} +.title-hover-animation::before { + position: absolute; + bottom: -4px; + left: 0; + width: 100%; + height: 2px; + background-color: var(--text-color-2); + transform: scaleX(0); + visibility: hidden; + content: ""; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease-in-out, ease-in-out; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, visibility, transform; +} +@-moz-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-webkit-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-o-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-moz-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-webkit-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-o-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-moz-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@-webkit-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@-o-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} +/* + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-MediumItalic.woff2') format('woff2'); + font-weight: 500; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +}*/ +/* + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-BoldItalic.woff2') format('woff2'); + font-weight: bold; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +}*/ +* { + transition-delay: 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color; +} +*::-webkit-scrollbar { + width: 0.4rem; + height: 0.4rem; + transition: all 0.2s ease; +} +*::-webkit-scrollbar-thumb { + background: var(--scrollbar-color); + border-radius: 0.1rem; +} +*::-webkit-scrollbar-track { + background: var(--scrollbar-background-color); +} +html, +body { + position: relative; + width: 100%; + height: 100%; + margin: 0; + padding: 0; + color: var(--text-color-3); + font-weight: normal; + font-size: 16px; + font-family: Open Sans, Noto Serif SC, serif; + line-height: 1.3rem; + letter-spacing: 0.2px; + background: var(--background-color-1); +} +html::-webkit-scrollbar, +body::-webkit-scrollbar { + width: 0.6rem; + height: 0.6rem; +} +@media (max-width: 800px) { + html::-webkit-scrollbar, + body::-webkit-scrollbar { + width: 0.5rem; + height: 0.5rem; + } +} +@media (max-width: 500px) { + html::-webkit-scrollbar, + body::-webkit-scrollbar { + width: 0.4rem; + height: 0.4rem; + } +} +@media (max-width: 800px) { + html, + body { + font-size: 16px; + line-height: 1.17rem; + } +} +@media (max-width: 500px) { + html, + body { + font-size: 14.4px; + line-height: 1.17rem; + } +} +::selection { + color: #fff; + background: var(--selection-color); +} +ul, +ol, +li { + margin: 0; + padding: 0; + list-style: none; +} +a { + color: var(--text-color-2); + text-decoration: none; +} +a i, +a span { + color: var(--text-color-3); +} +a:hover, +a:active { + color: var(--primary-color); + text-decoration: none !important; +} +a:hover i, +a:active i, +a:hover span, +a:active span { + color: var(--primary-color); +} +img[lazyload] { + position: relative; + box-sizing: border-box; + width: 8rem; + height: 8rem; + box-shadow: none !important; + cursor: not-allowed; + pointer-events: none; +} +img[lazyload]::before { + position: absolute; + top: 0; + left: 0; + display: block; + width: 100%; + height: 100%; + background: var(--background-color-1); + content: ''; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, background; +} +img[lazyload]::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: block; + width: 2rem; + height: 2rem; + margin: auto; + border: 2px solid var(--text-color-6); + border-top-color: var(--selection-color); + border-left-color: var(--selection-color); + border-radius: 50%; + animation: img-loading-animation 750ms infinite linear; + content: ''; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, border; +} +button { + margin: 0; + padding: 0; + background: transparent; + border: 0; + outline: none; + cursor: pointer; +} +.btn { + position: relative; + display: inline-block; + padding: 0.4rem 1rem; + white-space: nowrap; + text-align: center; + background: var(--background-color-1); + border-radius: 1px; + cursor: pointer; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform; +} +.btn:hover { + color: var(--background-color-1); + background: var(--primary-color); +} +.flex-center { + display: flex; + align-items: center; + justify-content: center; + font-size: 1.2rem; +} +.clear::after { + display: block; + clear: both; + height: 0; + overflow: hidden; + visibility: hidden; + content: ''; +} +.tooltip { + position: relative; + box-sizing: border-box; +} +.tooltip:hover .tooltip-content { + display: inline-block; +} +.tooltip.show-img .tooltip-content { + display: none !important; +} +.tooltip .tooltip-content { + position: absolute; + top: -0.4rem; + left: 50%; + z-index: 1009; + display: none; + box-sizing: border-box; + padding: 0.2rem 0.6rem; + color: var(--text-color-6); + font-size: 0.8rem; + letter-spacing: 0.8px; + white-space: nowrap; + background: var(--text-color-1); + border-radius: 0.3rem; + transform: translateX(-50%) translateY(-100%); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, display; + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; +} +.tooltip-img { + position: relative; + box-sizing: border-box; +} +.tooltip-img.show-img .tooltip-img-box { + display: flex; +} +.tooltip-img .tooltip-img-box { + position: absolute; + top: -0.4rem; + left: 50%; + z-index: 1008; + display: none; + align-items: center; + justify-content: center; + box-sizing: border-box; + min-height: 6rem; + background: var(--text-color-6); + border: 0.2rem solid var(--text-color-3); + border-radius: 0.3rem; + transform: translateX(-50%) translateY(-100%); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, display; + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; +} +.tooltip-img .tooltip-img-box img { + display: block; + max-height: 25rem; +} +.keep-markdown-body { + font-size: 1rem; +} +.keep-markdown-body blockquote { + box-sizing: border-box; + margin: 1.4rem 0; + color: var(--text-color-3); + background: var(--hover-background-color); + border-left: 4px solid var(--blockquote-padding-color); +} +.keep-markdown-body blockquote p, +.keep-markdown-body blockquote ul, +.keep-markdown-body blockquote ol { + padding: 0.4rem 0.4rem 0.4rem 0.8rem; + color: var(--text-color-4); +} +.keep-markdown-body p { + color: var(--text-color-3); + line-height: 1.9; +} +.keep-markdown-body a { + position: relative; + box-sizing: border-box; + padding-bottom: 0.1rem; + text-decoration: none; + overflow-wrap: break-word; + border-bottom: 1px solid var(--text-color-5); + outline: 0; + cursor: pointer; +} +.keep-markdown-body a .fas, +.keep-markdown-body a .far, +.keep-markdown-body a .fab { + position: relative; + margin: 0 0.2rem 0 0.4rem; + color: var(--text-color-4); + font-size: 0.88rem; +} +.keep-markdown-body a:hover { + text-decoration: underline; +} +.keep-markdown-body a:hover::after { + background: var(--primary-color); +} +.keep-markdown-body strong { + color: var(--text-color-3); +} +.keep-markdown-body em { + color: var(--text-color-3); +} +.keep-markdown-body ul li, +.keep-markdown-body ol li { + margin-left: 1rem; + line-height: 2rem; +} +.keep-markdown-body ul li { + list-style: disc; +} +.keep-markdown-body ul li ul li { + list-style: circle; +} +.keep-markdown-body ul li ul li ul li { + list-style: square; +} +.keep-markdown-body ol li { + list-style: decimal; +} +.keep-markdown-body ol li ol li { + list-style: upper-alpha; +} +.keep-markdown-body ol li ol li ol li { + list-style: upper-roman; +} +.keep-markdown-body li { + color: var(--text-color-3); +} +.keep-markdown-body h1, +.keep-markdown-body h2, +.keep-markdown-body h3, +.keep-markdown-body h4, +.keep-markdown-body h5, +.keep-markdown-body h6 { + color: var(--text-color-2); + line-height: 1.5; +} +@media (max-width: 800px) { + .keep-markdown-body h1, + .keep-markdown-body h2, + .keep-markdown-body h3, + .keep-markdown-body h4, + .keep-markdown-body h5, + .keep-markdown-body h6 { + line-height: 1.25; + } +} +.keep-markdown-body h1 { + font-weight: 700; + font-size: 1.6rem; +} +@media (max-width: 800px) { + .keep-markdown-body h1 { + font-size: 1.5rem; + } +} +.keep-markdown-body h2 { + font-weight: 700; + font-size: 1.5rem; +} +@media (max-width: 800px) { + .keep-markdown-body h2 { + font-size: 1.4rem; + } +} +.keep-markdown-body h3 { + font-weight: 700; + font-size: 1.4rem; +} +@media (max-width: 800px) { + .keep-markdown-body h3 { + font-size: 1.3rem; + } +} +.keep-markdown-body h4 { + font-weight: 600; + font-size: 1.3rem; +} +@media (max-width: 800px) { + .keep-markdown-body h4 { + font-size: 1.2rem; + } +} +.keep-markdown-body h5 { + font-weight: 600; + font-size: 1.28rem; +} +@media (max-width: 800px) { + .keep-markdown-body h5 { + font-size: 1.18rem; + } +} +.keep-markdown-body h6 { + font-weight: 500; + font-size: 1.2rem; + line-height: 1.2; +} +@media (max-width: 800px) { + .keep-markdown-body h6 { + font-size: 1.1rem; + line-height: 1.1; + } +} +.keep-markdown-body img { + position: relative; + display: block; + box-sizing: border-box; + max-width: 100%; + box-shadow: 0 0 0.2rem var(--shadow-color); + cursor: zoom-in; + opacity: 1; + margin: 0.8rem 0 0.2rem; +} +.keep-markdown-body img.hide { + opacity: 0; +} +.keep-markdown-body img[lazyload] { + margin: 0.8rem auto 0.2rem; +} +.keep-markdown-body > table { + width: 100%; + overflow: auto; + border-collapse: collapse; + border-spacing: 0; +} +@media (max-width: 500px) { + .keep-markdown-body > table { + table-layout: fixed; + } +} +.keep-markdown-body > table td, +.keep-markdown-body > table th { + padding: 0; +} +.keep-markdown-body > table th { + font-weight: 600; +} +.keep-markdown-body > table td, +.keep-markdown-body > table th { + padding: 0.4rem 1rem; + border: 1px solid var(--border-color); +} +.keep-markdown-body > table tr { + background-color: var(--background-color-1); + border: 1px solid var(--text-color-6); +} +.keep-markdown-body > table tr:nth-child(2n) { + background-color: var(--background-color-2); +} +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} +:root { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; +} +@media (prefers-color-scheme: light) { + :root { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; + } +} +@media (prefers-color-scheme: dark) { + :root { + --toolbar-foreground: #d1d1d1; + --toolbar-background: #21232b; + --code-foreground: #d2d2d2; + --code-background: #181a20; + --highlight-background: #21232b; + --highlight-foreground: #d2d2d2; + --highlight-comment: #969896; + --highlight-red: #c66; + --highlight-orange: #de935f; + --highlight-yellow: #f0c674; + --highlight-green: #b5bd68; + --highlight-aqua: #8abeb7; + --highlight-blue: #81a2be; + --highlight-purple: #b294bb; + --highlight-gutter-color: #d3d3d3; + --highlight-gutter-bg-color: #181a20; + --code-border: #2a2b30; + } +} +.light-mode { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; +} +.dark-mode { + --toolbar-foreground: #d1d1d1; + --toolbar-background: #21232b; + --code-foreground: #d2d2d2; + --code-background: #181a20; + --highlight-background: #21232b; + --highlight-foreground: #d2d2d2; + --highlight-comment: #969896; + --highlight-red: #c66; + --highlight-orange: #de935f; + --highlight-yellow: #f0c674; + --highlight-green: #b5bd68; + --highlight-aqua: #8abeb7; + --highlight-blue: #81a2be; + --highlight-purple: #b294bb; + --highlight-gutter-color: #d3d3d3; + --highlight-gutter-bg-color: #181a20; + --code-border: #2a2b30; +} +pre, +.highlight { + margin: 1.5rem; + padding: 0; + overflow: auto; + color: var(--highlight-foreground); + font-size: 0.96rem; + line-height: 1.5rem; + background: var(--highlight-background); + border-radius: 2px; + -ms-text-size-adjust: none; + -moz-text-size-adjust: none; + -webkit-text-size-adjust: none; +} +pre, +code { + font-family: Fira Code, Noto Serif SC, serif, monospace; +} +code { + padding: 0px 2px 0px 2px; + color: var(--code-foreground); + font-size: 0.96rem; + word-break: break-all; + word-wrap: break-word; + background: var(--code-background); + border-radius: 2px; + border: 1px solid var(--code-border); +} +pre { + padding: 0.6rem; + line-height: 1.6rem; +} +pre code { + padding: 0; + color: var(--highlight-foreground); + text-shadow: none; + background: none; +} +.highlight { + border-bottom-right-radius: 1px; + border-bottom-left-radius: 1px; + border-left: 1px solid var(--code-border); + border-right: 1px solid var(--code-border); + border-bottom: 1px solid var(--code-border); + padding-left: 10px; + padding-right: 10px; + word-wrap: break-all; + white-space: pre-wrap; +} +.highlight pre { + margin: 0; + padding: 0.6rem; + border: none; + font-family: Fira Code, Noto Serif SC, serif, monospace; + word-break: break-all; + white-space: pre-wrap; + font-size: 0.96rem; + text-align: left; + font-weight: normal; +} +.highlight table { + width: auto; + margin: 0; + border: none; + border-spacing: unset; +} +.highlight td { + padding: 0; + border: none; +} +.highlight figcaption { + margin-bottom: 1rem; + color: var(--highlight-foreground); + font-size: 1rem; + line-height: 1rem; +} +.highlight figcaption a { + float: right; + color: var(--highlight-foreground); +} +.highlight figcaption a:hover { + border-bottom-color: var(--highlight-foreground); +} +.highlight .gutter pre { + padding-right: 0.6rem; + padding-left: 0.6rem; + color: var(--highlight-gutter-color); + text-align: center; + background-color: var(--highlight-gutter-bg-color); +} +.highlight .code pre { + width: 100%; + padding-right: 0rem; + padding-left: 0.6rem; + background-color: var(--highlight-background); +} +.highlight .line { + height: 1.5rem; + color: var(--highlight-foreground); +} +.highlight .line .language-javascript { + color: var(--highlight-foreground); +} +.highlight .line .attr { + color: var(--highlight-foreground); +} +.highlight .line .string { + color: var(--highlight-foreground); +} +.gutter { + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; + color: var(--highlight-gutter-color); + background: var(--highlight-gutter-bg-color); +} +.gutter .line { + color: var(--highlight-gutter-color); +} +.gist table { + width: auto; +} +.gist table td { + border: none; +} +pre .deletion { + background: var(--highlight-deletion); +} +pre .addition { + background: var(--highlight-addition); +} +pre .meta { + color: var(--highlight-purple); +} +pre .comment { + color: var(--highlight-comment); +} +pre .variable, +pre .attribute, +pre .tag, +pre .regexp, +pre .ruby .constant, +pre .xml .tag .title, +pre .xml .pi, +pre .xml .doctype, +pre .html .doctype, +pre .css .id, +pre .css .class, +pre .css .pseudo { + color: var(--highlight-red); +} +pre .property { + color: var(--highlight-blue); +} +pre .number, +pre .preprocessor, +pre .built_in, +pre .literal, +pre .params, +pre .constant, +pre .command { + color: var(--highlight-orange); +} +pre .ruby .class .title, +pre .css .rules .attribute, +pre .string, +pre .value, +pre .inheritance, +pre .header, +pre .ruby .symbol, +pre .xml .cdata, +pre .special, +pre .number, +pre .formula { + color: var(--highlight-green); +} +pre .title, +pre .css .hexcolor { + color: var(--highlight-aqua); +} +pre .function, +pre .python .decorator, +pre .python .title, +pre .ruby .function .title, +pre .ruby .title .keyword, +pre .perl .sub, +pre .javascript .title, +pre .coffeescript .title { + color: var(--highlight-blue); +} +pre .keyword, +pre .javascript .function { + color: var(--highlight-purple); +} +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} +.highlight-container { + position: relative; + box-sizing: border-box; + margin: 1.4rem 0; +} +.highlight-container.mac { + margin: 1.4rem 0 1.8rem 0; + box-shadow: 0 0.8rem 2rem 0 rgba(0,0,0,0.4); +} +.highlight-container.mac:hover .code-tools-box .copy { + opacity: 1; +} +.highlight-container.mac .code-tools-box { + justify-content: flex-end; + padding: 0.4rem 0.6rem 0.7rem 0.4rem; + background: #21252b; +} +.highlight-container.mac .code-tools-box::before { + position: absolute; + left: 0.8rem; + width: 0.76rem; + height: 0.76rem; + background: #fc625d; + border-radius: 50%; + box-shadow: 1.3rem 0 #fdbc40, 2.6rem 0 #35cd4b; + content: ''; +} +.highlight-container.mac .code-tools-box.folded { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.highlight-container.mac .code-tools-box.folded .copy { + display: none; +} +.highlight-container.mac .code-tools-box .code-lang { + order: 1; +} +.highlight-container.mac .code-tools-box .fold { + order: 2; + padding: 0 0.1rem 0 0.6rem; +} +.highlight-container.mac .code-tools-box .fold i { + color: #ccc; +} +.highlight-container.mac .code-tools-box .copy { + position: absolute; + top: 3rem; + right: 0.5rem; + padding: 0 0.1rem; + opacity: 0; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease-in-out; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, opacity; +} +.highlight-container.mac .code-tools-box .copy i { + font-size: 1rem; +} +.highlight-container .code-tools-box { + display: flex; + align-items: center; + justify-content: space-between; + box-sizing: border-box; + width: 100%; + padding: 0.3rem 0.4rem; + color: var(--toolbar-foreground); + background: var(--toolbar-background); + border-top-left-radius: 1px; + border-top-right-radius: 1px; + border-left: 1px solid var(--code-border); + border-right: 1px solid var(--code-border); + border-top: 1px solid var(--code-border); +} +.highlight-container .code-tools-box.folded { + border-bottom-right-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; +} +.highlight-container .code-tools-box .code-lang { + justify-content: flex-start; + margin-left: 0.2rem; + font-weight: normal; + font-size: 0.96rem; + font-family: Fira Code, Noto Serif SC, serif, monospace; + color: var(--text-color-5); +} +.highlight-container .code-tools-box .tool { + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; + cursor: pointer; +} +.highlight-container .code-tools-box .tool i { + font-size: 0.8rem; + color: var(--text-color-5); +} +.highlight-container .code-tools-box .fold { + padding: 0 0.4rem 0 0.2rem; +} +.highlight-container figure.highlight { + margin: 0; +} +.highlight-container figure.highlight.folded { + height: 0; +} +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} +:root { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; +} +@media (prefers-color-scheme: light) { + :root { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; + } +} +@media (prefers-color-scheme: dark) { + :root { + --toolbar-foreground: #d1d1d1; + --toolbar-background: #21232b; + --code-foreground: #d2d2d2; + --code-background: #181a20; + --highlight-background: #21232b; + --highlight-foreground: #d2d2d2; + --highlight-comment: #969896; + --highlight-red: #c66; + --highlight-orange: #de935f; + --highlight-yellow: #f0c674; + --highlight-green: #b5bd68; + --highlight-aqua: #8abeb7; + --highlight-blue: #81a2be; + --highlight-purple: #b294bb; + --highlight-gutter-color: #d3d3d3; + --highlight-gutter-bg-color: #181a20; + --code-border: #2a2b30; + } +} +.light-mode { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; +} +.dark-mode { + --toolbar-foreground: #d1d1d1; + --toolbar-background: #21232b; + --code-foreground: #d2d2d2; + --code-background: #181a20; + --highlight-background: #21232b; + --highlight-foreground: #d2d2d2; + --highlight-comment: #969896; + --highlight-red: #c66; + --highlight-orange: #de935f; + --highlight-yellow: #f0c674; + --highlight-green: #b5bd68; + --highlight-aqua: #8abeb7; + --highlight-blue: #81a2be; + --highlight-purple: #b294bb; + --highlight-gutter-color: #d3d3d3; + --highlight-gutter-bg-color: #181a20; + --code-border: #2a2b30; +} +.page-container { + position: relative; + box-sizing: border-box; + width: 100%; + height: auto; + background: var(--background-color-1); +} +.page-container .page-main-content { + position: relative; + box-sizing: border-box; + padding-top: 70px; +} +.page-container .page-main-content.is-home .transparent-1 { + background: var(--header-transparent-background-1); + -webkit-backdrop-filter: blur(4px); + backdrop-filter: blur(4px); +} +.page-container .page-main-content.is-home .transparent-2 { + background: var(--header-transparent-background-2); + -webkit-backdrop-filter: blur(5px); + backdrop-filter: blur(5px); +} +.header-shrink .page-container .page-main-content { + padding-top: 50.4px; +} +@media (max-width: 800px) { + .header-shrink .page-container .page-main-content { + padding-top: 45.36px; + } +} +@media (max-width: 500px) { + .header-shrink .page-container .page-main-content { + padding-top: 40.32px; + } +} +@media (max-width: 800px) { + .page-container .page-main-content { + padding-top: 63px; + } +} +@media (max-width: 500px) { + .page-container .page-main-content { + padding-top: 56px; + } +} +.page-container .page-main-content .page-main-content-top { + position: fixed; + top: 0; + right: 0; + z-index: 1005; + box-sizing: border-box; + width: 100%; + height: 70px; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease-out, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.3s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform, height; +} +.page-container .page-main-content .page-main-content-top.hide { + transform: translateY(-105%); +} +.header-shrink .page-container .page-main-content .page-main-content-top { + height: 50.4px; +} +@media (max-width: 800px) { + .header-shrink .page-container .page-main-content .page-main-content-top { + height: 45.36px; + } +} +@media (max-width: 500px) { + .header-shrink .page-container .page-main-content .page-main-content-top { + height: 40.32px; + } +} +@media (max-width: 800px) { + .page-container .page-main-content .page-main-content-top { + height: 63px; + } +} +@media (max-width: 500px) { + .page-container .page-main-content .page-main-content-top { + height: 56px; + } +} +.page-container .page-main-content .page-main-content-middle { + display: flex; + justify-content: center; + box-sizing: border-box; + width: 100%; + padding: 38px 0; +} +@media (max-width: 800px) { + .page-container .page-main-content .page-main-content-middle { + padding: 30.400000000000002px 0; + } +} +@media (max-width: 500px) { + .page-container .page-main-content .page-main-content-middle { + padding: 22.8px 0; + } +} +.page-container .page-main-content .page-main-content-middle .main-content { + position: relative; + box-sizing: border-box; + width: 90%; + max-width: 928px; + height: 100%; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.1s, 0.1s; + transition-property: color, background, box-shadow, border-color, max-width, width; +} +.has-toc .page-container .page-main-content .page-main-content-middle .main-content { + max-width: 1113.6px; +} +@media (max-width: 800px) { + .page-container .page-main-content .page-main-content-middle .main-content { + width: 86%; + } +} +@media (max-width: 500px) { + .page-container .page-main-content .page-main-content-middle .main-content { + width: 90%; + } +} +.page-container .page-main-content .page-main-content-bottom { + width: 100%; +} +.page-container .post-tools { + position: fixed; + top: 108px; + left: calc((100vw - 928px / 2) - 5rem); + box-sizing: border-box; + opacity: 0; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s, 0.2s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, top, transform, opacity, left; +} +.header-shrink .page-container .post-tools { + top: 88.4px; +} +@media (max-width: 800px) { + .header-shrink .page-container .post-tools { + top: 83.36px; + } +} +@media (max-width: 800px) { + .page-container .post-tools { + top: 101px; + transform: scale(0.82); + } +} +@media (max-width: 500px) { + .page-container .post-tools { + display: none; + } +} +.page-container .right-bottom-side-tools { + position: fixed; + right: 0; + bottom: 5%; +} +.search-pop-overlay { + position: fixed; + top: 0; + left: 0; + z-index: 1008; + display: flex; + width: 100%; + height: 100%; + background: rgba(0,0,0,0); + visibility: hidden; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.3s, 0.3s; + transition-property: color, background, box-shadow, border-color, visibility, background; +} +.search-pop-overlay.active { + background: rgba(0,0,0,0.35); + visibility: visible; +} +.search-pop-overlay.active .search-popup { + transform: scale(1); +} +.search-pop-overlay .search-popup { + z-index: 1006; + width: 70%; + height: 80%; + margin: auto; + background: var(--background-color-1); + border-radius: 0.4rem; + transform: scale(0); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.3s; + transition-property: color, background, box-shadow, border-color, transform; +} +@media (max-width: 800px) { + .search-pop-overlay .search-popup { + width: 80%; + } +} +@media (max-width: 500px) { + .search-pop-overlay .search-popup { + width: 90%; + } +} +.search-pop-overlay .search-popup .search-header { + display: flex; + align-items: center; + height: 3rem; + padding: 0 1rem; + background: var(--text-color-6); + border-top-left-radius: 0.2rem; + border-top-right-radius: 0.2rem; +} +.search-pop-overlay .search-popup .search-header .search-input-field-pre { + margin-right: 0.2rem; + color: var(--text-color-3); + font-size: 1.3rem; + cursor: pointer; +} +.search-pop-overlay .search-popup .search-header .search-input-container { + flex-grow: 1; + padding: 0.2rem; +} +.search-pop-overlay .search-popup .search-header .search-input-container .search-input { + width: 100%; + color: var(--text-color-3); + font-size: 1.2rem; + background: transparent; + border: 0; + outline: 0; +} +.search-pop-overlay .search-popup .search-header .search-input-container .search-input::-webkit-search-cancel-button { + display: none; +} +.search-pop-overlay .search-popup .search-header .search-input-container .search-input::-webkit-input-placeholder { + color: var(--text-color-4); + font-size: 1rem; +} +.search-pop-overlay .search-popup .search-header .close-popup-btn { + color: var(--text-color-3); + font-size: 1.2rem; + cursor: pointer; +} +.search-pop-overlay .search-popup .search-header .close-popup-btn:hover { + color: var(--text-color-1); +} +.search-pop-overlay .search-popup #search-result { + position: relative; + display: flex; + box-sizing: border-box; + height: calc(100% - 3rem); + padding: 0.3rem 1.5rem; + overflow: auto; +} +.search-pop-overlay .search-popup #search-result .search-result-list { + width: 100%; + height: 100%; + font-size: 1rem; +} +.search-pop-overlay .search-popup #search-result .search-result-list li { + box-sizing: border-box; + margin: 0.8rem 0; + padding: 0.8rem 0; + border-bottom: 0.1rem dashed var(--border-color); +} +.search-pop-overlay .search-popup #search-result .search-result-list li:last-child { + border-bottom: none; +} +.search-pop-overlay .search-popup #search-result .search-result-list li .search-result-title { + position: relative; + display: flex; + align-items: center; + margin-bottom: 0.8rem; + padding-left: 1rem; + font-weight: bold; +} +.search-pop-overlay .search-popup #search-result .search-result-list li .search-result-title::after { + position: absolute; + top: 50%; + left: 0; + width: 0.4rem; + height: 0.4rem; + background: var(--text-color-3); + border-radius: 50%; + transform: translateY(-50%); + content: ''; +} +.search-pop-overlay .search-popup #search-result .search-result-list li .search-result { + margin: 0; + padding-left: 1rem; + line-height: 2rem; + word-wrap: break-word; +} +.search-pop-overlay .search-popup #search-result .search-result-list li a:hover { + color: var(--text-color-3); +} +.search-pop-overlay .search-popup #search-result .search-result-list li .search-keyword { + color: var(--primary-color); + font-weight: bold; + border-bottom: 0.1rem dashed var(--primary-color); +} +.search-pop-overlay .search-popup #search-result #no-result { + margin: auto; + color: var(--text-color-4); +} +.post-toc-wrap { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + overflow-y: auto; + font-size: 0.92rem; +} +.post-toc-wrap::-webkit-scrollbar-thumb { + background: var(--toc-scrollbar-color); + border-radius: 0.3rem; +} +.post-toc-wrap::-webkit-scrollbar-track { + background: transparent; +} +.post-toc-wrap .post-toc ol { + margin: 0; + padding: 0 0.1rem 0.8rem 0.6rem; + text-align: left; + list-style: none; +} +.post-toc-wrap .post-toc ol:last-child { + padding-bottom: 0; +} +.post-toc-wrap .post-toc ol > ol { + padding-left: 0; +} +.post-toc-wrap .post-toc ol a { + transition-property: all; +} +.post-toc-wrap .post-toc .nav-item { + margin-bottom: 0.2rem; + overflow: hidden; + line-height: 1.8; + white-space: nowrap; + text-overflow: ellipsis; +} +.post-toc-wrap .post-toc .nav .nav-child { + display: none; +} +.post-toc-wrap .post-toc .nav .active > .nav-child { + display: block; +} +.post-toc-wrap .post-toc .nav .active-current > .nav-child { + display: block; +} +.post-toc-wrap .post-toc .nav .active-current > .nav-child > .nav-item { + display: block; +} +.post-toc-wrap .post-toc .nav .nav-number, +.post-toc-wrap .post-toc .nav .nav-text { + color: var(--toc-text-color); +} +.post-toc-wrap .post-toc .nav .active > a .nav-number, +.post-toc-wrap .post-toc .nav .active > a .nav-text { + color: var(--primary-color); +} +.post-toc-wrap .post-toc .nav .active-current > a .nav-number, +.post-toc-wrap .post-toc .nav .active-current > a .nav-text { + color: var(--primary-color); +} +.gitalk-comment-container { + font-family: Open Sans, Noto Serif SC, serif; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, color, background; +} +.gitalk-comment-container .gt-container .gt-btn { + font-family: Open Sans, Noto Serif SC, serif; + background-color: var(--primary-color-light-1); + border: 1px solid var(--primary-color-light-1); + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, color, background; +} +.gitalk-comment-container .gt-container .gt-initing-text { + font-family: Open Sans, Noto Serif SC, serif; + color: var(--text-color-3); +} +.gitalk-comment-container .gt-container .gt-meta { + border: none; +} +.gitalk-comment-container .gt-container .gt-meta .gt-counts { + color: var(--text-color-3); +} +.gitalk-comment-container .gt-container .gt-meta .gt-counts a { + color: var(--primary-color); +} +.gitalk-comment-container .gt-container .gt-meta .gt-user .gt-user-name { + color: var(--text-color-3); +} +.gitalk-comment-container .gt-container .gt-meta .gt-user svg path { + fill: var(--text-color-3); +} +.gitalk-comment-container .gt-container .gt-meta .gt-popup { + font-family: Open Sans, Noto Serif SC, serif; + top: 2.6rem; + background: var(--background-color-2); + border: 1px solid var(--border-color); +} +.gitalk-comment-container .gt-container .gt-header .gt-header-comment textarea { + color: var(--text-color-3); + background-color: var(--background-color-2); + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, color, background; +} +.gitalk-comment-container .gt-container .gt-header .gt-header-comment .gt-header-controls .gt-btn-preview { + color: #fff; + background-color: var(--primary-color-light-1); +} +.gitalk-comment-container .gt-container .gt-comments .gt-comments-null { + font-family: Open Sans, Noto Serif SC, serif; + color: var(--text-color-4); +} +.gitalk-comment-container .gt-container .gt-comments .gt-comment-content { + font-family: Open Sans, Noto Serif SC, serif; + background-color: var(--background-color-2); + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, color, background; +} +.gitalk-comment-container .gt-container .gt-comments .gt-comment-content:hover { + box-shadow: none; +} +.gitalk-comment-container .gt-container .gt-comments .gt-comment-content .gt-comment-body p, +.gitalk-comment-container .gt-container .gt-comments .gt-comment-content .gt-comment-body li { + color: var(--text-color-3); +} +.gitalk-comment-container .gt-container .gt-comments .gt-comment-content .gt-comment-body .email-fragment { + color: var(--text-color-3); +} +.gitalk-comment-container .gt-container .gt-comments .gt-comment-content .notranslate { + background-color: var(--background-color-3); +} +.gitalk-comment-container .gt-container .gt-comments .gt-comment-content .notranslate code { + font-family: Fira Code; + color: var(--text-color-2); +} +.gitalk-comment-container .gt-container .gt-comments .gt-comment-content pre { + font-family: Fira Code; + background-color: var(--background-color-3); +} +#load-comments { + text-align: center; + color: var(--text-color-1); + background-color: var(--background-color-2); + padding: 1rem 0 1rem 0; + margin: 3rem auto 3rem auto; + width: 20%; + border-radius: 3rem; + user-select: none; +} +#load-comments:hover { + cursor: pointer; + background-color: var(--background-color-3); +} +.comments-container { + display: inline-block; + width: 100%; + margin-top: 38px; +} +.comments-container #comments-anchor { + width: 100%; + height: 0.8rem; +} +.comments-container .comment-area-title { + width: 100%; + margin: 0.8rem 0; + color: var(--text-color-3); + font-size: 1.38rem; + white-space: nowrap; +} +.comments-container .comment-area-title i { + color: var(--text-color-3); +} +@media (max-width: 800px) { + .comments-container .comment-area-title { + margin: 0.4rem 0; + font-size: 1.2rem; + } +} +.progress-bar-container { + position: fixed; + top: 0; + left: 0; + z-index: 1009; + width: 100%; +} +.header-wrapper { + display: flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + width: 100%; + height: 100%; + padding-top: 2px; + background: var(--background-color-1); + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); + border-top: none; + border-left: none; + border-right: none; +} +.header-wrapper .header-content { + position: relative; + z-index: 1005; + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + width: 90%; + max-width: 928px; + height: 100%; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.1s, 0.1s; + transition-property: color, background, box-shadow, border-color, max-width, width; + margin-right: 2rem; +keep-table() +} +@media (max-width: 500px) { + .header-wrapper .header-content { + margin-right: 0.9rem; + } +} +.header-wrapper .header-content.has-first-screen { + max-width: 1113.6px; +} +.has-toc .header-wrapper .header-content { + max-width: 1113.6px; +} +@media (max-width: 800px) { + .header-wrapper .header-content { + width: 86%; + } +} +@media (max-width: 500px) { + .header-wrapper .header-content { + width: 90%; + } +} +.header-wrapper .header-content .left { + display: flex; + align-items: center; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform; +} +.header-shrink .header-wrapper .header-content .left { + transform: scale(0.72); + transform-origin: left; +} +.header-wrapper .header-content .left .logo-image { + width: 46px; + height: 46px; + margin-right: 8px; +} +@media (max-width: 800px) { + .header-wrapper .header-content .left .logo-image { + width: 41.4px; + height: 41.4px; + } +} +@media (max-width: 500px) { + .header-wrapper .header-content .left .logo-image { + width: 36.800000000000004px; + height: 36.800000000000004px; + } +} +.header-wrapper .header-content .left .logo-image img { + width: 100%; + border-radius: 6px; +} +.header-wrapper .header-content .left .logo-title { + color: var(--home-text-color); + font-weight: bold; + font-size: 1.6rem; + line-height: 1; + letter-spacing: 1px; +} +@media (max-width: 800px) { + .header-wrapper .header-content .left .logo-title { + font-size: 1.44rem; + } +} +@media (max-width: 500px) { + .header-wrapper .header-content .left .logo-title { + font-size: 1.28rem; + } +} +.header-wrapper .header-content .right .pc .menu-list { + display: flex; + align-items: center; +} +@media (max-width: 800px) { + .header-wrapper .header-content .right .pc .menu-list { + display: none; + } +} +.header-wrapper .header-content .right .pc .menu-list .menu-item { + position: relative; + float: left; + margin-left: 2rem; + color: var(--text-color-3); + font-size: 1rem; + cursor: pointer; +} +.header-wrapper .header-content .right .pc .menu-list .menu-item:first-child { + margin-left: 0; +} +.header-wrapper .header-content .right .pc .menu-list .menu-item a:hover::after, +.header-wrapper .header-content .right .pc .menu-list .menu-item .active::after { + position: absolute; + bottom: -10px; + left: 50%; + width: 100%; + height: 2px; + background: var(--primary-color); + transform: translateX(-50%); + content: ''; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform, bottom; +} +.header-shrink .header-wrapper .header-content .right .pc .menu-list .menu-item a:hover::after, +.header-shrink .header-wrapper .header-content .right .pc .menu-list .menu-item .active::after { + bottom: -13.2px; +} +.header-wrapper .header-content .right .pc .menu-list .menu-item.search { + margin-left: 26px; + font-size: 1.1rem; +} +.header-wrapper .header-content .right .pc .menu-list .menu-item.search i { + color: var(--text-color-3); +} +.header-wrapper .header-content .right .mobile { + display: flex; + align-items: center; + justify-content: space-between; +} +.header-wrapper .header-content .right .mobile .icon-item { + position: relative; + display: none; + width: 20px; + height: 20px; + margin-left: 12px; + color: var(--text-color-3); + font-size: 18px; + cursor: pointer; +} +.header-wrapper .header-content .right .mobile .icon-item i { + color: var(--text-color-3); +} +.header-wrapper .header-content .right .mobile .icon-item:first-child { + margin-left: 0; +} +@media (max-width: 800px) { + .header-wrapper .header-content .right .mobile .icon-item { + display: flex; + align-items: center; + justify-content: center; + } +} +.header-wrapper .header-content .right .mobile .menu-bar .menu-bar-middle { + position: relative; + width: 18px; + height: 2.5px; + background: var(--text-color-3); +} +.header-drawer-show .header-wrapper .header-content .right .mobile .menu-bar .menu-bar-middle { + background: transparent; +} +.header-wrapper .header-content .right .mobile .menu-bar .menu-bar-middle::before, +.header-wrapper .header-content .right .mobile .menu-bar .menu-bar-middle::after { + position: absolute; + left: 0; + width: 100%; + height: 2.5px; + background: var(--text-color-3); + content: ''; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.38s; + transition-property: color, background, box-shadow, border-color, transform; +} +.header-wrapper .header-content .right .mobile .menu-bar .menu-bar-middle::before { + top: -6px; +} +.header-drawer-show .header-wrapper .header-content .right .mobile .menu-bar .menu-bar-middle::before { + transform: translateY(6px) rotate(45deg); +} +.header-wrapper .header-content .right .mobile .menu-bar .menu-bar-middle::after { + bottom: -6px; +} +.header-drawer-show .header-wrapper .header-content .right .mobile .menu-bar .menu-bar-middle::after { + transform: translateY(-6px) rotate(-45deg); +} +.header-wrapper .header-drawer { + position: absolute; + top: 0; + left: 0; + z-index: 1002; + width: 100%; + padding: 70px 0 20px 0; + background: var(--background-color-1); + transform: scaleY(0); + transform-origin: top; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.38s; + transition-property: color, background, box-shadow, border-color, transform; +} +.header-drawer-show .header-wrapper .header-drawer { + transform: scaleY(1); +} +.header-wrapper .header-drawer .drawer-menu-list { + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; +} +.header-wrapper .header-drawer .drawer-menu-list .drawer-menu-item { + height: 38px; + margin: 6px 0; + font-size: 1rem; +} +.header-wrapper .header-drawer .drawer-menu-list .drawer-menu-item a { + padding: 6px 20px; + color: var(--text-color-3); + border-radius: 20px; +} +.header-wrapper .header-drawer .drawer-menu-list .drawer-menu-item a:hover { + color: var(--text-color-2); + border: 1px solid var(--text-color-3); +} +.header-wrapper .header-drawer .drawer-menu-list .drawer-menu-item a.active { + color: var(--text-color-2); + border: 1px solid var(--text-color-3); +} +.header-wrapper .window-mask { + position: absolute; + top: 0; + z-index: 1001; + width: 100%; + height: 100vh; + background: rgba(0,0,0,0.4); + visibility: hidden; + opacity: 0; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.38s, 0.38s; + transition-property: color, background, box-shadow, border-color, transform, opacity; +} +.header-drawer-show .header-wrapper .window-mask { + visibility: visible; + opacity: 1; +} +.header-drawer-show { + overflow: hidden; +} +.post-tools-container { + position: relative; + box-sizing: border-box; + padding-top: 2rem; +} +.post-tools-container .tools-list li { + position: relative; + box-sizing: border-box; + width: 38px; + height: 38px; + margin-bottom: 0.8rem; + color: var(--text-color-3); + font-size: 1.2rem; + background: var(--background-color-1); + border-radius: 50%; + cursor: pointer; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform; +} +.post-tools-container .tools-list li i { + color: var(--text-color-3); +} +.post-tools-container .tools-list li:hover { + color: var(--background-color-1); + background: var(--primary-color); +} +.post-tools-container .tools-list li:hover i { + color: var(--background-color-1); +} +.post-tools-container .tools-list li:last-child { + margin-bottom: 0; +} +.post-tools-container .tools-list li.toggle-show-toc { + display: none; +} +@media (max-width: 800px) { + .post-tools-container .tools-list li.toggle-show-toc { + display: none !important; + } +} +.post-tools-container .tools-list li.go-to-comments .post-comments-count { + position: absolute; + top: 0; + right: -1rem; + display: none; + align-items: center; + justify-content: center; + box-sizing: border-box; + min-width: 1.1rem; + height: 1.1rem; + padding: 0 0.2rem; + color: var(--badge-color); + font-size: 12px; + background: var(--badge-background-color); + border-radius: 0.4rem; +} +@media (max-width: 800px) { + .post-tools-container .tools-list li.go-to-comments .post-comments-count { + display: none !important; + } +} +.side-tools-container { + position: relative; + display: none; +} +.side-tools-container .tools-item { + width: 2.2rem; + height: 2.2rem; + margin-bottom: 0.2rem; + color: var(--text-color-3); + font-size: 1.1rem; + background: var(--background-color-1); + border-right: none; + border-radius: 0.1rem; + box-shadow: 0.1rem 0.1rem 0.2rem var(--shadow-color); + cursor: pointer; +} +.side-tools-container .tools-item i { + color: var(--text-color-3); +} +.side-tools-container .tools-item:hover { + color: var(--background-color-1); + background: var(--primary-color); + box-shadow: 0.2rem 0.2rem 0.4rem var(--shadow-color); +} +.side-tools-container .tools-item:hover i { + color: var(--background-color-1); +} +@media (max-width: 800px) { + .side-tools-container .tools-item { + width: 1.98rem; + height: 1.98rem; + margin-bottom: 0.2rem; + font-size: 0.99rem; + } +} +.side-tools-container .tools-item.rss a { + width: 100%; + height: 100%; + border-radius: 0.1rem; +} +.side-tools-container .tools-item.rss a:hover { + color: var(--background-color-1); + background: var(--primary-color); + box-shadow: 0.2rem 0.2rem 0.4rem var(--shadow-color); +} +.side-tools-container .side-tools-list { + transform: translateX(100%); + opacity: 0; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform, opacity; +} +.side-tools-container .side-tools-list.show { + transform: translateX(0); + opacity: 1; +} +.archive-list-container { + margin-bottom: 5rem; +} +.archive-list-container .archive-item { + margin-bottom: 38px; +} +.archive-list-container .archive-item:last-child { + margin-bottom: 0; +} +.archive-list-container .archive-item .archive-item-header { + margin-bottom: 2.3rem; + margin-top: 4rem; +} +.archive-list-container .archive-item .archive-item-header .archive-year { + margin-right: 6px; + color: var(--text-color-2); + font-weight: normal; + font-size: 2rem; +} +@media (max-width: 800px) { + .archive-list-container .archive-item .archive-item-header .archive-year { + font-size: 1.8rem; + } +} +.archive-list-container .archive-item .archive-item-header .archive-year-post-count { + color: var(--text-color-2); + font-weight: 500; + font-size: 1.1rem; +} +@media (max-width: 800px) { + .archive-list-container .archive-item .archive-item-header .archive-year-post-count { + font-size: 0.99rem; + } +} +.archive-list-container .archive-item .article-list { + padding-left: 0.8rem; +} +@media (max-width: 800px) { + .archive-list-container .archive-item .article-list { + padding-left: 0; + } +} +.archive-list-container .archive-item .article-list .article-item { + line-height: 2; + position: relative; + transition: border 0.5s; + border-bottom: 1px solid var(--item-border-color); + margin-top: 1em; + padding-bottom: 0.5em; + display: flex; + align-items: baseline; + margin-top: 1.2rem; + font-size: 1rem; +} +.archive-list-container .archive-item .article-list .article-item::before { + content: '▪ '; + color: var(--text-color-5); + margin-right: 0.5rem; + font-size: 1rem; +} +@media (max-width: 800px) { + .archive-list-container .archive-item .article-list .article-item { + margin-top: 1.1rem; + } +} +@media (max-width: 500px) { + .archive-list-container .archive-item .article-list .article-item { + margin-top: 1rem; + } +} +.archive-list-container .archive-item .article-list .article-item:hover a.article-title, +.archive-list-container .archive-item .article-list .article-item:hover .article-date { + color: var(--primary-color); +} +.archive-list-container .archive-item .article-list .article-item a.article-title { + color: var(--text-color-3); + flex: 1; + margin-right: 1rem; +} +.archive-list-container .archive-item .article-list .article-item .article-date { + float: right; + color: var(--text-color-3); + font-size: 1rem; +} +.footer { + color: var(--text-color-4); + font-size: 1rem; +} +.footer a { + color: var(--text-color-4); +} +.footer a:hover { + color: var(--primary-color); +} +.footer .info-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding-bottom: 1rem; +} +.footer .info-container #hitokoto_all { + padding: 0rem 2rem 1rem 2rem; + margin: 0; +} +.footer .info-container .info-item { + margin: 0.2rem 0; + color: var(--text-color-4); +} +.footer .info-container .info-item.deploy-info { + display: flex; +} +.footer .info-container .info-item.deploy-info a, +.footer .info-container .info-item.deploy-info .tooltip { + display: flex; + align-items: center; +} +.footer .info-container .info-item.deploy-info img { + height: 1.2rem; + margin: 0 0.4rem; +} +.footer .icon-animate { + animation: icon-animate 1.2s ease-in-out infinite; +} +.paginator { + margin-top: 2rem; + font-size: 1rem; +} +.paginator a.prev { + float: left; +} +.paginator a.next { + float: right; +} +.page-template-container { + box-sizing: border-box; + padding: 2rem; + background: var(--content-background-color); + border-radius: 0.1rem; + margin-bottom: 2rem; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); +} +@media (max-width: 800px) { + .page-template-container { + margin-bottom: 1.6rem; + } +} +@media (max-width: 500px) { + .page-template-container { + margin-bottom: 1.2rem; + } +} +@media (max-width: 800px) { + .page-template-container { + padding: 1.6rem; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .page-template-container { + padding: 1.2rem; + border-radius: 0.06rem; + } +} +.page-template-container .page-template-content { + color: var(--text-color-3); +} +.page-template-container .page-template-content h1:first-child, +.page-template-container .page-template-content h2:first-child, +.page-template-container .page-template-content h3:first-child, +.page-template-container .page-template-content h4:first-child, +.page-template-container .page-template-content h5:first-child, +.page-template-container .page-template-content h6:first-child { + margin-top: 0; +} +.page-template-container .friends-link-container .friends-link-list { + position: relative; +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item { + position: relative; + float: left; + box-sizing: border-box; + width: 50%; + height: 82px; + padding-bottom: 16px; + cursor: pointer; +} +@media (max-width: 800px) { + .page-template-container .friends-link-container .friends-link-list .friends-link-item { + height: 68px; + } +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item:nth-child(odd) { + padding-right: 8px; +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item:nth-child(even) { + padding-left: 8px; +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + padding-left: 66px; + border-radius: 6px; + box-shadow: 1px 1px 2px var(--shadow-color); +} +@media (max-width: 800px) { + .page-template-container .friends-link-container .friends-link-list .friends-link-item .content { + padding-left: 52px; + } +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content:hover { + box-shadow: 1px 1px 6px var(--shadow-color); +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content:hover .info .name { + color: var(--primary-color); +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content .radius { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content .avatar { + position: absolute; + top: 0; + left: 0; + display: flex; + align-items: center; + justify-content: center; + width: 66px; + height: 100%; + color: var(--text-color-2); + font-size: 2rem; + background: var(--background-color-2); +} +@media (max-width: 800px) { + .page-template-container .friends-link-container .friends-link-list .friends-link-item .content .avatar { + width: 52px; + } +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content .avatar img { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content .info { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + justify-items: flex-start; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 10px; +} +@media (max-width: 800px) { + .page-template-container .friends-link-container .friends-link-list .friends-link-item .content .info { + padding: 6px; + } +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content .info .name { + width: 100%; + height: 60%; + color: var(--text-color-2); + font-size: 1.28rem; +} +@media (max-width: 800px) { + .page-template-container .friends-link-container .friends-link-list .friends-link-item .content .info .name { + font-size: 1.08rem; + } +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content .info .description { + width: 100%; + height: 40%; + color: var(--text-color-4); + font-size: 1rem; +} +@media (max-width: 800px) { + .page-template-container .friends-link-container .friends-link-list .friends-link-item .content .info .description { + font-size: 0.98rem; + } +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content .info .ellipsis { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.first-screen-container { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100vh; + overflow: hidden; + background: var(--first-screen-img-dynamic) center center/cover no-repeat; +} +.first-screen-container .content { + position: relative; + box-sizing: border-box; + width: 80%; + height: 90%; + padding-top: 2rem; +} +.first-screen-container .content .description { + color: var(--home-text-color); + font-weight: bold; + font-size: 2rem; + line-height: 1.8; + text-align: center; +} +.first-screen-container .content .description .desc-item { + color: var(--home-text-color); + font-size: 17px; + font-weight: 300; +} +.first-screen-container .content .description .desc-item-title { + color: var(--home-text-color); + font-weight: bold; +} +@media (max-width: 800px) { + .first-screen-container .content .description { + font-size: 1.8rem; + } +} +.first-screen-container .content .s-icon-list { + position: absolute; + bottom: 0; + display: flex; + box-sizing: border-box; + font-size: 1.8rem; +} +@media (max-width: 800px) { + .first-screen-container .content .s-icon-list { + font-size: 1.62rem; + } +} +.first-screen-container .content .s-icon-list .s-icon-item { + margin: 0 1rem; + cursor: pointer; +} +.first-screen-container .content .s-icon-list .s-icon-item i { + color: var(--text-color-3); +} +.zoom-in-image-mask { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1008; + display: flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + background: rgba(0,0,0,0); + visibility: hidden; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.3s, 0.3s; + transition-property: color, background, box-shadow, border-color, visibility, background; +} +.zoom-in-image-mask.show { + background: rgba(0,0,0,0.5); + visibility: visible; +} +.zoom-in-image-mask.show .zoom-in-image { + cursor: zoom-out; +} +.zoom-in-image-mask .zoom-in-image { + position: absolute; + z-index: 1009; + transform-origin: center center; + will-change: transform; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.3s; + transition-property: color, background, box-shadow, border-color, transform; +} +.category-list-container { + box-sizing: border-box; + padding: 3rem; + background: var(--content-background-color); + border-radius: 0.1rem; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); +} +@media (max-width: 800px) { + .category-list-container { + padding: 2.4rem; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .category-list-container { + padding: 1.8rem; + border-radius: 0.06rem; + } +} +.category-list-container .subtitle-info { + font-size: 1.3rem; + margin-left: 1rem; + line-height: 3.5rem; +} +.category-list-container .post-info { + float: right; + display: inline-block; + margin-right: 1rem; + font-size: 1rem; + color: var(--item-border-color); + line-height: 1.5rem; +} +.category-list-container .post-title-link { + font-size: 1rem; + margin-left: 1rem; + line-height: 2.1rem; + display: inline-block; +} +.category-list-container .category-list-content .archive-main-category { + font-size: 1.3rem; + line-height: 2rem; +} +.category-list-container .category-list-content .all-category-list { + line-height: 2; + position: relative; + transition: border 0.5s; + margin-top: 1em; + padding-bottom: 0.5em; + align-items: baseline; +} +.category-list-container .category-list-content .all-category-list > .all-category-list-item > .all-category-list-link { + font-size: 1.2rem; + line-height: 2.7rem; + font-weight: bold; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item { + border-bottom: 1px dashed var(--item-border-color); + margin-bottom: 1.5rem; + font-size: 1rem; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item:last-child { + margin-bottom: 0; + border-bottom: 0; + border-bottom: 1px dashed var(--item-border-color); +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item span.all-category-list-count { + float: right; + color: var(--text-color-3); +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item span.all-category-list-count::before { + content: '('; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item span.all-category-list-count::after { + content: ')'; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item ul.all-category-list-child { + margin-top: 1rem; + margin-left: 0.9rem; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item ul.all-category-list-child li { + margin-bottom: 0.9rem; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item ul.all-category-list-child li::before { + content: '▪ '; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item ul.all-category-list-child li:last-child { + margin-bottom: 0; +} +.article-meta-info { + font-size: 0.8rem; + line-height: 2rem; + margin-top: 0.5rem; + margin-bottom: 3rem; +} +.article-meta-info .article-meta-item { + margin-right: 0.6rem; + color: var(--text-color-4); +} +.article-meta-info .article-meta-item:last-child { + margin-right: 0; +} +.article-meta-info .article-date .pc { + display: inline; +} +@media (max-width: 800px) { + .article-meta-info .article-date .mobile { + display: inline; + } +} +.article-meta-info .article-update-date .pc { + display: none; +} +@media (max-width: 800px) { + .article-meta-info .article-update-date .pc { + display: none; + } + .article-meta-info .article-update-date .mobile { + display: none; + } +} +.article-meta-info .article-tags a { + padding: 0.15rem 0.7rem 0.2rem 0.7rem; + border: solid 1px var(--border-color); + border-radius: 1rem; + margin: 0 0.25rem 0 0.25rem; + white-space: nowrap; + font-size: 0.7rem; +} +.article-meta-info .article-tags a:hover { + background-color: var(--background-color-2); +} +.article-meta-info .article-tags a .fa-hashtag { + font-size: 0.7rem; + font-weight: 300; + color: var(--text-color-4); +} +.article-meta-info .article-categories a { + padding: 0.15rem 0.5rem 0.15rem 0.5rem; + border: solid 1px var(--border-color); + border-radius: 2px; + margin: 0 0.25rem 0 0.25rem; +} +.article-meta-info .article-categories a:hover { + background-color: var(--background-color-2); +} +.article-meta-info .article-categories a .fa-chevron-circle-right { + font-size: 0.7rem; + color: var(--text-color-4); +} +.article-meta-info .article-tags, +.article-meta-info .article-categories { + display: inline; +} +.article-meta-info .article-tags ul, +.article-meta-info .article-categories ul, +.article-meta-info .article-tags li, +.article-meta-info .article-categories li { + display: inline; +} +.article-meta-info .article-tags a, +.article-meta-info .article-categories a { + color: var(--text-color-4); +} +.article-meta-info .article-tags a:hover, +.article-meta-info .article-categories a:hover { + color: inherit; +} +@media (max-width: 800px) { + .article-meta-info .article-tags { + display: none; + } +} +@media (max-width: 500px) { + .article-meta-info .article-min2read, + .article-meta-info .article-wordcount { + display: inline; + } +} +.article-copyright-info-container { + position: relative; + box-sizing: border-box; + width: 100%; + padding: 1.5rem 1.5rem 1.5rem 1.5rem; + font-size: 1rem; + background: var(--background-color-1); + border: 1px solid var(--border-color); + border-radius: 1px; + margin-bottom: 5rem; + line-height: 1.3rem; +} +.article-copyright-info-container:hover .copy-copyright-info { + visibility: visible; +} +.article-copyright-info-container .copyright-info-content { + position: relative; + box-sizing: border-box; + overflow-x: unset; +} +.article-copyright-info-container .copyright-info-content::-webkit-scrollbar { + width: 0.3rem; + height: 0.3rem; + transition: all 0.2s ease; +} +.article-copyright-info-container .copyright-info-content::-webkit-scrollbar-thumb { + background: var(--text-color-5); +} +.article-copyright-info-container .copyright-info-content::-webkit-scrollbar-track { + background: transparent; +} +.article-copyright-info-container .copyright-info-content li { + margin-bottom: 0.4rem; + color: var(--text-color-5); + word-break: break-all; + white-space: normal; +} +.article-copyright-info-container .copyright-info-content li .type { + font-weight: bold; +} +.article-copyright-info-container .copyright-info-content li .type, +.article-copyright-info-container .copyright-info-content li .content { + color: var(--text-color-5); +} +.article-copyright-info-container .copyright-info-content li .license { + font-weight: bold; + color: var(--text-color-5); +} +.article-copyright-info-container .copyright-info-content li:last-child { + margin-bottom: 0; +} +.article-copyright-info-container .copy-copyright-info { + position: absolute; + top: 0.4rem; + right: 0.4rem; + box-sizing: border-box; + padding: 0.3rem; + visibility: hidden; + cursor: pointer; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease-in-out; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, visibility; +} +.article-copyright-info-container .copy-copyright-info i { + color: var(--text-color-4); +} +.home-content-container { + background: var(--background-color-1); +} +.home-content-container .home-article-list .home-article-item { + position: relative; + box-sizing: border-box; + padding: 28px; + background: var(--content-background-color); + border-radius: 0.1rem; + margin-bottom: 28px; + border: 1px solid var(--item-border-color); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform; +} +@media (max-width: 800px) { + .home-content-container .home-article-list .home-article-item { + margin-bottom: 22.400000000000002px; + } +} +@media (max-width: 500px) { + .home-content-container .home-article-list .home-article-item { + margin-bottom: 16.8px; + } +} +.home-content-container .home-article-list .home-article-item:hover { + background: var(--hover-background-color); +} +@media (max-width: 800px) { + .home-content-container .home-article-list .home-article-item { + padding: 22.400000000000002px; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .home-content-container .home-article-list .home-article-item { + padding: 16.8px; + border-radius: 0.06rem; + } +} +.home-content-container .home-article-list .home-article-item .top-icon { + position: absolute; + top: 10px; + right: 12px; + color: var(--text-color-4); + font-size: 1.2rem; + transform: rotate(45deg); +} +@media (max-width: 800px) { + .home-content-container .home-article-list .home-article-item .top-icon { + font-size: 1.16rem; + } +} +.home-content-container .home-article-list .home-article-item .home-article-title { + position: relative; + margin: 0; + color: var(--text-color-2); + font-weight: bold; + font-size: 1.4rem; + line-height: 1.5; +} +@media (max-width: 800px) { + .home-content-container .home-article-list .home-article-item .home-article-title { + font-size: 1.3rem; + } +} +@media (max-width: 500px) { + .home-content-container .home-article-list .home-article-item .home-article-title { + font-size: 1.2rem; + } +} +.home-content-container .home-article-list .home-article-item .home-article-content { + margin: 20px 0; + color: var(--text-color-3); + text-align: justify; + word-wrap: break-word; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container { + display: flex; + align-items: center; + justify-content: space-between; + color: var(--text-color-4); + font-size: 0.8rem; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info { + letter-spacing: 0.5px; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info span { + margin-right: 10px; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info span:last-child { + margin-right: 0; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info span ul, +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info span li { + display: inline; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info .home-article-category a { + padding: 0.05rem 0.1rem 0.15rem 0.1rem; + border-radius: 2px; + margin: 0 0.25rem 0 0.25rem; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info .home-article-category a:hover { + background-color: var(--background-color-3); +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info .home-article-category a .fa-chevron-circle-right { + font-size: 0.7rem; + color: var(--text-color-4); +} +@media (max-width: 500px) { + .home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info .home-article-category { + display: none; + } +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info .home-article-tag a { + padding: 0.05rem 0.3rem 0.15rem 0.3rem; + border-radius: 1rem; + margin: 0 0.1rem 0 0.1rem; + white-space: nowrap; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info .home-article-tag a:hover { + background-color: var(--background-color-3); +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info .home-article-tag a .fa-hashtag { + font-size: 0.7rem; + color: var(--text-color-4); + font-weight: 300; +} +@media (max-width: 800px) { + .home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info .home-article-tag { + display: none; + } +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .read-more { + display: flex; + align-items: center; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container hr { + flex: 1; + height: 1px; + margin: 0 10px; + background: var(--border-color); + border: none; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container a { + color: var(--text-color-4); +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container a:hover { + color: inherit; +} +.archive-container { + box-sizing: border-box; + padding: 2rem; + background: var(--content-background-color); + border-radius: 0.1rem; + margin-bottom: 2rem; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); +} +@media (max-width: 800px) { + .archive-container { + margin-bottom: 1.6rem; + } +} +@media (max-width: 500px) { + .archive-container { + margin-bottom: 1.2rem; + } +} +@media (max-width: 800px) { + .archive-container { + padding: 1.6rem; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .archive-container { + padding: 1.2rem; + border-radius: 0.06rem; + } +} +.post-page-container { + position: relative; + display: flex; + justify-content: space-between; + box-sizing: border-box; + width: 100%; + height: 100%; +} +.post-page-container.show-toc .toc-content-container { + display: block; +} +@media (max-width: 800px) { + .post-page-container .toc-content-container { + display: none !important; + } + .post-page-container .article-content-container { + width: 100% !important; + } +} +.post-page-container .article-content-container { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + box-sizing: border-box; + padding: 4rem; + background: var(--content-background-color); + border-radius: 0.1rem; + margin-bottom: 5rem; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); + border: none; + box-shadow: none; + text-align: justify; + margin: 0 4rem 0rem 4rem; +} +@media (max-width: 800px) { + .post-page-container .article-content-container { + margin-bottom: 4rem; + } +} +@media (max-width: 500px) { + .post-page-container .article-content-container { + margin-bottom: 3rem; + } +} +@media (max-width: 800px) { + .post-page-container .article-content-container { + padding: 3.2rem; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .post-page-container .article-content-container { + padding: 2.4rem; + border-radius: 0.06rem; + } +} +@media (max-width: 500px) { + .post-page-container .article-content-container { + padding: 1.2rem 0.2rem; + margin: 0; + box-shadow: none; + border: none; + } + .post-page-container .article-content-container:hover { + box-shadow: none; + } +} +.post-page-container .article-content-container .article-title { + color: var(--text-color-2); + font-weight: 700; + line-height: 4rem; + padding-top: 3rem; + padding-bottom: 1rem; + font-size: 1.9rem; +} +@media (max-width: 800px) { + .post-page-container .article-content-container .article-title { + font-size: 1.71rem; + } +} +@media (max-width: 500px) { + .post-page-container .article-content-container .article-title { + font-size: 1.71rem; + } +} +.post-page-container .article-content-container .article-header { + position: relative; + box-sizing: border-box; + width: 100%; + height: 3rem; + padding-left: 3rem; + padding-bottom: 4rem; +} +.post-page-container .article-content-container .article-header .avatar { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: 3rem; + height: 3rem; + padding: 0.1rem; + border: 1px solid var(--border-color); + border-radius: 50%; +} +.post-page-container .article-content-container .article-header .avatar img { + width: 100%; + height: 100%; + background: var(--avatar-background-color); + border-radius: 50%; +} +.post-page-container .article-content-container .article-header .info { + display: flex; + flex-direction: column; + justify-content: space-between; + box-sizing: border-box; + width: 100%; + height: 100%; + margin-left: 0.8rem; + padding: 0.2rem 0; +} +.post-page-container .article-content-container .article-header .info .author { + display: flex; + align-items: center; + font-weight: 600; + font-size: 1.18rem; + line-height: 1.5rem; +} +.post-page-container .article-content-container .article-header .info .author .name { + color: var(--text-color-4); +} +.post-page-container .article-content-container .article-header .info .author .author-label { + margin-left: 0.8rem; + padding: 0 0.2rem; + color: #fff; + font-weight: 500; + font-size: 0.6rem; + background: var(--selection-color); + border-radius: 0.4rem; +} +.post-page-container .article-content-container .article-header, +.post-page-container .article-content-container .article-header-meta-info { + margin-top: 1rem; +} +@media (max-width: 800px) { + .post-page-container .article-content-container .article-header, + .post-page-container .article-content-container .article-header-meta-info { + transform: scale(0.9); + transform-origin: left top; + } +} +.post-page-container .article-content-container .article-content { + margin-top: 5rem; + padding-bottom: 2rem; + color: var(--text-color-3); + word-wrap: break-word; +} +.post-page-container .article-content-container .article-content .article-aging-tips { + position: relative; + display: none; + box-sizing: border-box; + margin-bottom: 1.8rem; + padding: 1rem; + color: var(--article-aging-tips-color); + line-height: 1.6; + background: var(--article-aging-tips-background-color); + border: 1px solid var(--article-aging-tips-border-color); + border-radius: 2px; +} +.post-page-container .article-content-container .article-content .article-aging-tips i { + margin-right: 0.4rem; + color: var(--article-aging-tips-color); +} +.post-page-container .article-content-container .article-content .article-aging-tips .days { + color: var(--article-aging-tips-color); +} +.post-page-container .article-content-container .post-tags-box { + display: none; + justify-content: center; + margin-top: 1.6rem; + font-size: 1.1rem; +} +@media (max-width: 800px) { + .post-page-container .article-content-container .post-tags-box { + display: flex; + } +} +@media (max-width: 500px) { + .post-page-container .article-content-container .post-tags-box { + margin-top: 1.2rem; + font-size: 1rem; + } +} +.post-page-container .article-content-container .post-tags-box .tag-item { + font-size: 0.7rem; + padding: 0.25rem 0.5rem 0.25rem 0.5rem; + border: solid 1px var(--border-color); + border-radius: 1rem; + margin: 0 0.25rem 0 0.25rem; + white-space: nowrap; +} +.post-page-container .article-content-container .post-tags-box .tag-item .a:hover { + background-color: var(--background-color-2); + color: var(--background-color-2); + text-decoration: none; +} +.post-page-container .article-content-container .post-tags-box .tag-item ::before { + font-size: 0.7rem; + font-weight: 300; +} +.post-page-container .article-content-container .post-tags-box .tag-item:hover { + background-color: var(--background-color-2); + color: var(--background-color-2); +} +.post-page-container .article-content-container .post-copyright-info { + width: 100%; + margin-top: 38px; +} +@media (max-width: 800px) { + .post-page-container .article-content-container .post-copyright-info { + margin-top: 30.400000000000002px; + } +} +.post-page-container .article-content-container .article-nav { + height: 2.8rem; + margin-top: 4rem; +} +.post-page-container .article-content-container .article-nav .article-prev, +.post-page-container .article-content-container .article-nav .article-next { + box-sizing: border-box; + max-width: 14rem; + height: 100%; + box-sizing: border-box; + padding: 0.8rem; + background: var(--content-background-color); + border-radius: 0.1rem; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform; +} +@media (max-width: 800px) { + .post-page-container .article-content-container .article-nav .article-prev, + .post-page-container .article-content-container .article-nav .article-next { + padding: 0.64rem; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .post-page-container .article-content-container .article-nav .article-prev, + .post-page-container .article-content-container .article-nav .article-next { + padding: 0.48rem; + border-radius: 0.06rem; + } +} +.post-page-container .article-content-container .article-nav .article-prev a, +.post-page-container .article-content-container .article-nav .article-next a { + position: relative; + display: block; + box-sizing: border-box; + width: 100%; + height: 100%; +} +.post-page-container .article-content-container .article-nav .article-prev a.prev, +.post-page-container .article-content-container .article-nav .article-next a.prev { + padding-left: 1rem; +} +.post-page-container .article-content-container .article-nav .article-prev a.next, +.post-page-container .article-content-container .article-nav .article-next a.next { + padding-right: 1rem; +} +.post-page-container .article-content-container .article-nav .article-prev a .arrow-icon, +.post-page-container .article-content-container .article-nav .article-next a .arrow-icon { + position: absolute; + top: 0; + width: 1rem; + height: 100%; +} +.post-page-container .article-content-container .article-nav .article-prev a .arrow-icon.left, +.post-page-container .article-content-container .article-nav .article-next a .arrow-icon.left { + left: 0; +} +.post-page-container .article-content-container .article-nav .article-prev a .arrow-icon.right, +.post-page-container .article-content-container .article-nav .article-next a .arrow-icon.right { + right: 0; +} +.post-page-container .article-content-container .article-nav .article-prev a .title, +.post-page-container .article-content-container .article-nav .article-next a .title { + width: 100%; + height: 100%; +} +.post-page-container .article-content-container .article-nav .article-prev { + float: left; +} +.post-page-container .article-content-container .article-nav .article-next { + float: right; +} +.post-page-container .article-content-container .article-nav .post-nav-item { + display: none; +} +@media (max-width: 800px) { + .post-page-container .article-content-container .article-nav .post-nav-item { + display: inline-block; + } +} +.post-page-container .article-content-container .article-nav .post-nav-title-item { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +@media (max-width: 800px) { + .post-page-container .article-content-container .article-nav .post-nav-title-item { + display: none; + } +} +.post-page-container .toc-content-container { + position: sticky; + top: 108px; + display: none; + box-sizing: border-box; + width: 17rem; + overflow: hidden; + max-height: calc(100vh - 108px); + padding: 2rem 0 3rem 0rem; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.1s, 0.2s; + transition-property: color, background, box-shadow, border-color, top, display, max-height; +} +.header-shrink .post-page-container .toc-content-container { + top: 88.4px; + max-height: calc(100vh - 88.4px); +} +.category-container { + box-sizing: border-box; + padding: 3rem; + background: var(--content-background-color); + border-radius: 0.1rem; + margin-bottom: 2rem; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); + padding-bottom: 4rem; +} +@media (max-width: 800px) { + .category-container { + margin-bottom: 1.6rem; + } +} +@media (max-width: 500px) { + .category-container { + margin-bottom: 1.2rem; + } +} +@media (max-width: 800px) { + .category-container { + padding: 2.4rem; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .category-container { + padding: 1.8rem; + border-radius: 0.06rem; + } +} +@media (max-width: 500px) { + .category-container { + padding-bottom: 4rem; + padding-left: 1.5rem; + } +} +.category-container .category-name { + margin-top: 3rem; + margin-bottom: 38px; + padding-bottom: 20px; + color: var(--text-color-2); + text-align: center; + font-weight: bold; + font-size: 1.9rem; +} +.category-container .category-name i { + color: var(--text-color-5); + font-size: 1.2rem; + display: none; +} +@media (max-width: 800px) { + .category-container .category-name { + font-size: 1.71rem; + } +} +@media (max-width: 500px) { + .category-container .category-name { + font-size: 1.52rem; + } +} +.tag-container { + box-sizing: border-box; + padding: 2rem; + background: var(--content-background-color); + border-radius: 0.1rem; + margin-bottom: 2rem; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); +} +@media (max-width: 800px) { + .tag-container { + margin-bottom: 1.6rem; + } +} +@media (max-width: 500px) { + .tag-container { + margin-bottom: 1.2rem; + } +} +@media (max-width: 800px) { + .tag-container { + padding: 1.6rem; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .tag-container { + padding: 1.2rem; + border-radius: 0.06rem; + } +} +.tag-container .tag-name { + margin-top: 1.5rem; + margin-bottom: 38px; + padding-bottom: 20px; + color: var(--text-color-2); + font-weight: 600; + font-size: 1.6rem; + border-bottom: 1px solid var(--item-border-color); +} +.tag-container .tag-name i { + color: var(--text-color-2); +} +@media (max-width: 800px) { + .tag-container .tag-name { + font-size: 1.44rem; + } +} +@media (max-width: 500px) { + .tag-container .tag-name { + font-size: 1.28rem; + } +} +.tagcloud-container { + box-sizing: border-box; + padding: 1.5rem; + background: var(--content-background-color); + border-radius: 0.1rem; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); +} +@media (max-width: 800px) { + .tagcloud-container { + padding: 1.2rem; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .tagcloud-container { + padding: 0.9rem; + border-radius: 0.06rem; + } +} +.tagcloud-container .tagcloud-content { + text-align: justify; +} +.tagcloud-container .tagcloud-content a { + display: inline-block; + box-sizing: border-box; + padding: 0.7rem 0.5rem; +} +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} +/* + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-MediumItalic.woff2') format('woff2'); + font-weight: 500; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +}*/ +/* + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-BoldItalic.woff2') format('woff2'); + font-weight: bold; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +}*/ diff --git a/en/2022/05/25/note/Computer/Programming/Language/C/index.html b/en/2022/05/25/note/Computer/Programming/Language/C/index.html new file mode 100644 index 000000000..d54d02d8e --- /dev/null +++ b/en/2022/05/25/note/Computer/Programming/Language/C/index.html @@ -0,0 +1,1099 @@ + + + + + + + + + + + + C Language | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +

+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ C Language +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + +
+

📚 Notes and personal understanding of the process of learning C language, used to find.

+
+ + +image + +

Introduction

+

Our daily life has become inseparable from computers. Whether you are using computers or not, you are using computers consciously or unconsciously, or using the services that computers provide for you. When we are in the use of computer, we are all in the use of computer has some software, so we will go to find the APP, if you searched all the APPs on the market, is there no have the functionality of the APP you want, then you have to write their own one, if you want to do something special, you can’t find the right software, will still have to write their own one.
Learning programming is not about writing software for yourself. It is about learning programming to understand how computers work, what they can or are good at doing, what they can’t or aren’t good at doing, and how computers solve problems.

+
+

—— Weng Kai

+ + + +

Get started

Framework

#include "stdio.h"
int main()
{

return 0;
}
+ +

Any programs programed by C language must have this framework.

+

Output function

You can understand it as function in math, which is a mapping relationship. But they are different.

+

printf is a function, whoes function is output a string by formating printf("......\n") .

+

For example, the Hello, world! :

+
#include "stdio.h"
int main()
{
printf("Hello,world!\n"); // \n make it wrapping
return 0;
}
+ +

printf can print not only a string, but also the value of the variable, but you need to format the variable.

+

Variables and constants

+

The computer carries on the computation, then participates in the computation is the number, participates in the computation in the C language the number is called the quantity, the quantity divides into the variable and the constant.
Use decimal for expression of daily life, because is advantageous for the calculation of the human brain, a computer internal use binary, for convenience of computer calculation, and the computer expression, as a result of bytes in computer internal frequency is higher, if you can use a simple way to express its inner meaning accurately, Will bring us a lot of convenience, so often use hexadecimal expression.
But the number itself remains the same no matter which way it is counted.

+
+

Constants

As the name implies, an invariant quantity that, once initialized, cannot be changed.

+

Variables

As the name implies, a variable quantity that, once defined, can be assigned any value to change its size.

+

The way of difination:

+
int i;
int j = 1;
char k;
float h = 1.2;
double g = 2.0;
+ +

For example, i is the variable itself, int is an integer variable, whose value can only be an integer, while double is a double-precision floating point number, which can represent a decimal.

+

Different variable types have different value types and value ranges.

+

Character variables:

+

Use to store character constants. A character variable can hold only one character constant. The type specifier is char.

+
#include<stdio.h>
int main()
{
char x,y,z;
x = 'b';
y = 'o';
z = 'y';
printf("%c%c%c\n",x,y,z);
return 0;
}
+ +

The result is:

+
boy
+ +

The literal value of a character variable is independent of the character constant it holds, analogous to an integer variable.

+

Character variables can also store integer data, which is universal. You can change %c to %d during input and output.

+

Output and input of a variable

Output

As mentioned above, printf can print a string, and can print the value of a variable, as shown in the following example:

+
#include "stdio.h"
int main()
{
int i = 1;
printf("i = %d\n",i);
i = 2;
printf("After assignment,i = %d\n",i);
return 0;
}
+ +

Notice that printf prints the value of the variable with a %d inside the double quotes, which is the way the variable is formatted.

+

%d indicates that the output variable is an integer.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Variable TypesFormatting Symbols
int%d
unsigned%u
long long%ld
unsigned long long%lu
float%f
double%lf
+

You can use scientific notation when you output, and use %e for formatting symbol.

+
printf("%.nf",sum);
+ +

This line of code can preserve n decimal places.

+

The following are escape characters:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SymbolsWords中文含义
\bbackspace回退一格
\ttab下一个制表位
\nnew line换行
\rreturn回车
\ff换页
+

Input

Similarly, the function scanf can read the input according to a certain format.

+
#include <stdio.h>
int main( ) {

char str[100];
int i;

printf( "Enter a value :");
scanf("%s %d", str, &i);

printf( "\nYou entered: %s %d ", str, i);
printf("\n");
return 0;
}
+ +

scanf() stops reading a string as soon as it encounters a space, so “this is test” is three strings for scanf().

+

Floating point numbers

In mathematics, the numbers on the number line are continuous, and between any two different points, an infinite number can be found, but this is difficult to achieve in computers, so floating point numbers emerged.

+

Floating point numbers are used to represent fractional numbers between whole numbers, but their accuracy is not infinite, nor is their expressability infinite, so a random decimal may not be able to be expressed by a computer.

+

Operation

Operator

+ + + + + + + + + + + + + + + + + + +
MathematicsAddSubstractMultiplyDivideRemainder
C Language+-*/%
+

Relational operator

+ + + + + + + + + + + + + + + + + + + + +
RelationEqualNot EqualGreaterGreater or EqualLess-thanLess-than or Equal
Operator==!=>>=<<=
+

The relational operator evaluates only zeros and ones.

+

Special operator

count ++ and ++ count both mean to add one, but a = count ++; means to assign the value of count to a and then add one, whereas a = ++count; means to add one to the value of count and then assign the result to a. So you end up adding one to count in both cases, but the value of a differ by 1.

+

count -- and -- count in the same way.

+

, is comma operator that generally has only one purpose: to add multiple conditions to an if statement.

+

Conditional operator

count = (<#condition#>)? <#yes#>:<#no#>;
+ +

It is equivalent to an if statement.

+
+

Nesting is not recommended.

+
+

Logical operator

+ + + + + + + + + + + + + + +
Logicandornot
Symbol&&||!
+

The result of logical operation is only 0 or 1.

+

Several statements

if

if (<#condition#>) {
<#statements#>
}
+ +

To judge and to act when the conditions are true.

+
   if (<#condition#>) {
<#statements#>
}
else if (#condition#) {
<#statements#>
}
else if (#condition#) {
<#statements#>
}
……
else {
<#statements#>
}
+ +

We can add else, so we can do something if the condition doesn’t work.

+

The else always matches the nearest if.

+

while

while (<#condition#>) {
<#statements#>
}
+ +

The loop continues until the condition fails.

+

dowhile

do {
<#statements#>
} while (<#condition#>);
+ +

The loop continues until the condition fails.

+

The difference with a while loop is that a dowhile does something and then evaluates the condition, whereas a while evaluates the condition and then loops. While might not do a loop at all, if the condition is not satisfied in the first place.

+

switch

switch (<#expression#>) {
case <#constant#>:
<#statements#>
break;
case <#constant#>:
<#statements#>
break;
......
default:
break;
}
+ +

switch is judgment statement, the <#expression#> is constant expression that must be a integral type or enum-type.

+

The essence of such a statement is the program evaluates this expression and then compares it to each case at a time. The action after the case is executed when equal.

+

There are an infinite number of cases, each followed by a value to be compared with and a colon.

+

The variables to be compared must be of the same type.

+

When all the case is false, the program will do the action after default . So there can be nothing after defalut.

+

For example:

+
#include <stdio.h>
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
switch(a){
case 1: printf("Monday\n"); break;
case 2: printf("Tuesday\n"); break;
case 3: printf("Wednesday\n"); break;
case 4: printf("Thursday\n"); break;
case 5: printf("Friday\n"); break;
case 6: printf("Saturday\n"); break;
case 7: printf("Sunday\n"); break;
default:printf("error\n"); break;
}
return 0;
}
+ +

for

for (<#initialization#>; <#condition#>; <#increment#>) {
<#statements#>
}
+ +

for loop applies to loops with a defined number of cycles, such as traverse.

+

There are three sections in parenthesis, separated with semicolons, which are respectively initialization, conditions for loop to proceed and actions to be performed in each cycle.

+

Miscellaneous

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key wordsImplication
InfInfinity
-InfNegative infinity
nanInvalid number
fabs(<#expression#>)Absolute value
breakJump out of the loop
continueEnd the cycle
+

Function and customizing function

At the beginning of C language program, the implication of #include <stdio.h> is including a function library named stdio.h and then the program can call functions in the library. Both the printf and the scanf used in the previous paragraph are functions of the library.

+

In practice, we often encounter repeated operations, we can copy this code to complete the repeated action, but code copy is a poor quality of the program, because the maintenance may need to change too many places.

+

You can solve this problem by customizing functions:

+
<#type#> (<#type#>,<#type#>,……){
<#statement#>
return 0; //Depends on the function type,Also visable as:return;
}
+ +
    +
  • A function can have multiple return or none. However, multiple return are not recommended for easy modification.

    +
  • +
  • Each function has its own variable space, namely {} (block), which is independent of each other. Local variables are limited by the block they are in. If the inside of a block has the same name as the outside of a block, the inside of a block takes precedence.

    +
  • +
  • When a function is called, it can only pass values to functions, not variables to functions. That is, after passing a variable to a function, the function will read the value of the variable for operation, but will not change the value of the variable.

    +
  • +
  • The first line of a function with a semicolon placed before the entire program code is called a function prototype declaration. The purpose is to tell the compiler what type the function is before it encounters it.

    +
  • +
+

Array

Defination

+

type of variables + character + [number of variables]

+
+

For example:

+
int a[10];
+ +

An array is a container that, once created, cannot be resized, is internally ordered, and can appear on both sides of an assignment symbol.

+

The index of an array is counted from 0.

+

You can think of it as a sequence in mathematics.

+

Use

Integration initialization is easy to use:

+
int a[3] = {1,3,5,};
int a[13] = {[0]=2,[3]=5,6,7,[9]=0,}; //(C99 only)
+ +

If you don’t know how many cells there are in an array, you can use sizeof(a)/sizeof(a[0]) to represent the number of cells in the array, so that you don’t need to change the number of cells in the array.

+

Multidimensional array

A multidimensional array is actually a multidimensional matrix, and the footer increases accordingly.

+

Initialization:

+
int a[][5] = {
{0,1,2,3,4},
{2,3,4,5,6},
}
+ +

The number of columns must be given and the number of rows can be counted by the compiler itself.

+

Pointer

Address

Each variable has an address in the computer where it is stored. The value of a variable can change, but its address is constant. The following code can be used to view the address of a variable.

+
int i = 1;
printf("%d\n",&i);
+ +

& is the address to access the variable;

+

* is the variable on the access address.

+

Defination

A pointer is a variable, but it cannot be used independently. It must point to a variable. In this case, the value of the pointer variable is the address of the variable to which it points.

+

Use

int *p = &i;
+ +

In this case, p is a pointer to the address of variable i. So the value of p is the address of i, and the value of i can be accessed (read and write) by *p.

+

The * at definition is not the same as the * at access, and the first is only used to distinguish whether a pointer variable or a normal variable is being defined.

+

Here is an example of using a pointer to complete a call to exchange the values of two variables.

+
#include <stdio.h>
void exchange(int *a,int *b)
{
int i = *a;
*a = *b;
*b = i;
}
int main()
{
int a = 5;
int b = 6;
exc(&a, &b);
printf("a = %d,b = %d\n",a,b);

return 0;
}
+ +

This is a clever use of the function, we know that the function cannot input variable parameters, so this code defines the address of the pointer to the variable, the function input pointer variable is also the address of the variable, inside the function by adding a pointer to access the variable, and then achieve the purpose of the function to modify the variable.

+
+

In addition, pointers are often used when a function needs to return multiple values.

+
+

Arrays are special Pointers

#include <stdio.h>
int main()
{
int a[] = {1,2,3,};
printf("%p\n",a);
return 0;
}
+ +

The result of this code is:

+
0x7ffcac420c3c
+ +

We can see that the array variable a is itself an address, so when we want to use a pointer to array a, we should write int *p = a, without &. But the array unit is variable, therefore int *p = &a[0], at the same time, a == &a[0],&a[x] == &a[0] + 4x = a + 4x(when a is integer).

+

An array is a pointer to a constant and therefore cannot be assigned.

+

Pointer to a constant (const)

int i;
int const *p = &i; // 1
int *const p = &i; // 2
+ +

For the above code, you can think of the following code:

+
int i;
int const (*p) = &i; // 1
int *(const p) = &i; // 2
+ +

1 indicates that the variable at the address pointed to by the pointer p cannot be modified by the pointer.

+

2 indicates that the address (variable’s address certainly) pointed to by p cannot be changed.

+
+

The first whole to the right of const cannot be modified

+
+
const int a[] = {1,2,3,};
+ +

The above code indicates that each cell is const, so it can be used to protect an array when a function argument is entered.

+

Address of a pointer

int a[];
int *p = a;
+ +

*p = a = a[0],

+

*(p+1) = a[1],

+

*(p+2) = a[2],

+

……,

+

*(p+n) = a[n].

+

Allocating Memory Space

The malloc function applies space in bytes from memory, returns void *, converts the desired type, and finally frees the memory. Format, such as:

+
int a[n] = (int *)malloc(n * sizeof(int));
+ +

If the application fails, 0 or NULL is returned.

+

When you no longer use the requested memory space, you should use the free function to free the memory space:

+
free(a[n]);
+ +

String

Overview

Char word[] = {'H','D','e','!'};
+ +

Such an array is an array of characters, but it is not a string, because it cannot be evaluated as a string.

+
Char word[] = {'H','D','e','!','\0'};
+ +

Followed by \0, then word is a string.

+

0 = '\0' != '0'

+

0 marks the end of the string, but this 0 is not part of the string.

+

Strings exist as Arrays and are accessed as arrays or Pointers, but more often as Pointers.

+

string.h has a number of functions that handle strings.

+

String variables:

+
char *str = "hello";
char word[] = "hello";
char line[10] = "hello";
+ +
+

“hello”

+
+

The compiler will turn this into an array of characters somewhere, and the length of the array is 6, because the compiler will put a 0 after it to make it a string.

+

Literals of strings can be used to initialize character arrays.

+
#include "stdio.h"
int main()
{
int i = 0;
char *s = "hello world";
// s[0] = 'B';
char *s2= "hello world";
char s3[] = {"hello world"};
// s3[0] = 'b';

printf("&i = %p\n", &i);
printf("s = %p\n", s);
printf("s2 = %p\n", s2);
printf("Here is s[0] = %c\n", s[0]);
printf("Here is s3[0] = %c\n",s3[0]);
return 0;
}
+ +

The above code runs as follows:

+
&i = 0x7fffa827bcf4
s = 0x55c7d8f64004
s2 = 0x55c7d8f64004
Here is s[0] = h
Here is s3[0] = h
+ +

You can see that the local variable i is far from where the pointer s is pointing. The address of the variable i is very far back, and the pointer is very far forward. Near the front are important parts of the computer that are not allowed to be modified, such as plus s[0] = 'B' ‘, and the result is:

+
1869 segmentation fault  ./a.out
+ +

The program attempted to reassign the initialized string s. The error “segmentation fault“ was reported, meaning that the program was attempting to rewrite the value at 0x55c7d8f64004, which posed a threat to the computer and was not allowed.

+

In fact, for char *s = "hello world"; pointer s is initialized to point to a string constant, which should actually be const char *s = "hello world";, but for historical reasons, compilers accept writing without const, and try to modify the string to which s refers, with serious consequences.

+

s3 is an array, and the strings inside are local variables that can be modified, plus S3[0] = 'b':

+
&i = 0x7fff28d5dd64
s = 0x559da8ac6004
s2 = 0x559da8ac6004
Here is s[0] = h
Here is s3[0] = b
+ +

There are two ways to define a string: pointer or array.

+

Arrays know the address of strings, Pointers don’t.

+

A char * or int * is not necessarily a string. It is meant to be a pointer to a character or an array of characters.

+

A char * or int * is a string only if the array of characters to which the pointer points has a zero at the end.

+
char *t = "title";
char *s;
s = t;
+ +

For the above code, we have two Pointers, t and s. First, t points to the string “title”, and then we assign a value to s. The result is that s also points to the same string, instead of creating a new string.

+

Input and output of string

For printf and scanf, you can use %s to input and output strings.

+

Each %s in scanf is read until a SPACE or ENTER, which is not safe because you do not know exactly how many characters to read, therefore, the following code is used:

+
char s[8];
scanf("%7s",s);
+ +

Array of strings

char a[][10];
char *a[];
+ +

The first line refers to a as a two-dimensional array, and the second line refers to a as a pointer array. Each unit in the array is a pointer to a string.

+

Each element of the character array holds one character, plus the 0 at the end. An array of length n can hold n-1 characters.

+

Multiple loops are required to input and output all elements of multiple dimensions, whether string arrays or integer arrays.

+

An array is a matrix that can be used to store variables or character variables. All input and output need to be looped, but there are two types of input and output for character arrays.

+

Input and output single characters in format %c

#include <stdio.h>
int main()
{

int x,i,j;
char a[][20] = {
"",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday",
};
printf("Please input the month:\n");
scanf("%d",&x);
if (x > 0 && x < 8) {
for (i = x ; i < x + 1; i ++) {
for (j = 0; j < 20; j ++) {
printf("%c",a[i][j]);
}
}
}
else printf("Error");
printf("\n");
return 0;
}
+ +

Input and output whole array with format %s

#include <stdio.h>
int main()
{
int x,i,j;
char a[][20] = {
"",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday",
};
printf("Please input the month:\n");
scanf("%d",&x);
if (x > 0 && x < 8) {
printf("%s",a[x]);
}
else printf("Error");
printf("\n");
return 0;
}
+ +
+

Note that input characters with %s that encounter a SPACE, RNTER, and TAB end the string input, so C provides the input function gets() and the output function puts() that are best for strings.

+
+

gets(char *s[]) function is to enter a string from the keyboard that can contain Spaces and end with a ENTER newline character.

+

puts(char *s[]) or puts(string s)function prints a string from the character array to the screen and converts the end-of-string flag to a newline character.

+

In addition, when %s prints a string, it keeps one dimension, and the compiler automatically inputs or outputs all strings in that dimension. Gets is the same as puts.

+

Input and output of character data

Putchar(parameter)

Paremeters can be numerical values, character constants, character variables, and arithmetic or character expressions, but the final output is a character.

+

getchar()

Type a character from the keyboard.

+

String function

strlen

#include<stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
char line[] = "hello";
printf("%lu\n", strlen(line));
printf("%lu\n", sizeof(line));
return 0;
}
+ +

The running result is:

+
5
6
+ +

So strlen is string Length, which returns the length of the string.

+

strcmp

The function is to compare the size of two strings, and the result of the comparison is expressed by the value returned. 0 means they are equal, 1 means the former greater, and -1 means the latter greater.

+

strcpy

It means string copy,the format is:

+
char *strcpy(char *restrict dst, const *restrict src);
+ +

Its function is to copy the src string to dst.
restrict means that src and dst cannot overlap.
The source is in the back, and the copying destination is in the front.
Return dst so that the function itself can be evaluated.
General usage:

+
char *dst = (char)malloc(strlen(src)+1);
strcpy (dst,src)
+ +

strcat

The function is to link one string to another string.

+
+

Another version:

+
char *strncpy(char *restrict dst, const *restrict src,size_t n);
char *strncat(char *restrict s1, const *restrict s2,size_t n);
int strncmp(const char *s1, const char *s2, size_t n);
+ +

The first two are to limit the length of the copied string, eliminating security issues that are neither out of bounds.

+

The last one is to compare the first n characters.

+
+

strchr

To find a character in a string.

+
#include<stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
char s[] = "hello,world!";
char *p = strchr(s,'l');
printf("%s\n",p);
char c = *p;
*p = '\0';
printf("%c\n",c);
char *p3 = (void*)malloc(strlen(s)+1);
strcpy(p3, s);
printf("%s\n",p3);
free(p3);
char *p1 = strchr((p+1), 'l');
char *p2 = strchr((p1+1), 'l');
printf("%s\n",p1);
printf("%s\n",p2);

return 0;
}
+ +

The running results are as follows:

+
llo,world!
l
he
lo,world!
ld!
+ +

Enumeration

enum type {num_0,num_1,num_2,……,num_n};
+ +

You can use the name in curly braces, where num_0 through num_n represents the constants 0 through n.

+

For instance:

+
enum colors {red,yellow,green};
// Here,red == 0, yellow == 1, green == 2
+ +
enum type {num_0,num_1,num_2,……,num_n, number of type};
+ +

That’s just right. The last number of type is exactly the number of type. It’s a little trick.

+

Data structure

#include <stdio.h>
struct date {
int day;
int month;
int year;
};
//Structure type Declaration
struct date {
int day;
int month;
int year;
} today;
//This is another form

int main()
{
struct date today;

today.day = 25;
today.month = 3;
today.year = 2021;
today = (struct date){25,3,2021};

printf("Today is %i-%i-%i.\n",
today.year,today.month,today.day);

return 0;
}
+ +

This means that you declare a data structure type, and when you use it, you define a variable that contains all the variables in the data structure.

+

The structure members of a data structure do not have to be of the same variable type, and an array can only be of one type.

+

Data structures can perform structure operations .

+

Assigning values to or between structure variables is a one-to-one correspondence; the former requires curly braces.

+

The name of the structure variable is not the address of the structure variable, so you need to define the pointer using &.

+

A data structure can be entered as a function parameter, but unlike an array, the entire structure is passed into the function as the value of the parameter, creating a new structure variable inside the function and copying the value of the caller’s structure.

+

You can also return a struct.

+

Custom data types

A typedef can give an alias to a data type.

+
typedef long int64_t;
typedef struct ADate {
int month;
int day;
int year;
} Date;

int64_t i = 100000000000;
Date d = {9, 1, 2005, };
+ +

Union

带参数的宏一定要有括号,结尾不能加分号。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ + + +
+ +
+
+
+  Comments +
+ + + + +
+
+ + + +
+ + + + + +
+ +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + diff --git a/en/2022/09/28/note/README/index.html b/en/2022/09/28/note/README/index.html new file mode 100644 index 000000000..b41bb0c4b --- /dev/null +++ b/en/2022/09/28/note/README/index.html @@ -0,0 +1,675 @@ + + + + + + + + + + + + ❌This is a Index File | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ ❌This is a Index File +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + +

Array has fixed size and contiguous memory. New elements cannot be appended. You can use memory address to access elements of Array.

+

Heading 2

Array has fixed size and contiguous memory. New elements cannot be appended. You can use memory address to access elements of Array.

+

Heading 3

Array has fixed size and contiguous memory. New elements cannot be appended. You can use memory address to access elements of Array.

+

Heading 4

Array has fixed size and contiguous memory. New elements cannot be appended. You can use memory address to access elements of Array.

+
Heading 5

Array has fixed size and contiguous memory. New elemenots cannot be appended. You can use memory address to access elements of Array.

+
Heading 6

Array has fixed size and contiguous memory. New elements cannot be appended. You can use memory address to access elements of Array.
这是粗体
这是斜体
这是粗斜体
dasdad
The .md only be used to open Note files in Typora.

+
+

And it is a sample now!

+
+
#include <iostream>
da
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CommandFull nameDo somthing
gdb output
rrunRun current program
bbreakSet a breakpoint at [function] or [line] (in file)
The following is the config of style setting:
+
{
"minimal-style@@sidebar-lines-off": true,
"minimal-style@@sidebar-tabs-style": "sidebar-tabs-square",
"minimal-style@@tabs-style": "tabs-square",
"minimal-cards-style@@cards-border-width": "3px",
"minimal-mobile@@mobile-toolbar-off": true,
"minimal-style@@tx1@@dark": "#C0C8CE",
"minimal-style@@h1-color@@dark": "#FFFFFF",
"minimal-style@@h1-color@@light": "#000000",
"minimal-style@@h1-size": "2.5em",
"minimal-style@@h2-size": "2.2em",
"minimal-style@@h3-size": "1.7em",
"minimal-style@@h2-color@@dark": "#EEEEEE",
"minimal-style@@h2-color@@light": "#000000",
"minimal-style@@h3-color@@light": "#000000",
"minimal-style@@h4-color@@dark": "#E9E9E9",
"minimal-style@@h4-color@@light": "#202020",
"minimal-style@@tx1@@light": "#474747",
"minimal-style@@minimal-code-scroll": true,
"minimal-style@@h4-size": "1.6em",
"minimal-style@@h5-size": "1.3em",
"minimal-style@@h6-size": "1em",
"minimal-style@@table-lines": true,
"minimal-style@@maximize-tables-off": "maximize-tables",
"minimal-style@@row-hover": false,
"minimal-style@@h2-weight": 600,
"minimal-style@@h1-weight": 700,
"minimal-style@@h3-weight": 500,
"minimal-style@@h5-weight": 400,
"minimal-style@@h6-weight": 300,
"minimal-style@@h4-weight": 500,
"minimal-style@@h3-color@@dark": "#E2E2E2",
"minimal-style@@bold-color@@dark": "#FFFFFF",
"minimal-style@@italic-color@@dark": "#FFFFFF",
"minimal-style@@bold-weight": 600,
"minimal-style@@code-background@@dark": "#1F2326",
"minimal-style@@bg1@@dark": "#24292D",
"minimal-style@@code-size": "14px",
"minimal-style@@blockquote-background-color@@dark": "#2A2F33",
"minimal-style@@blockquote-border-thickness": 4,
"minimal-style@@blockquote-color@@dark": "#747A86"
}
+ +

还有代码高需要搞。

+

obsidian中style插件css备份11-23 20:36

{
"minimal-style@@sidebar-lines-off": true,
"minimal-style@@sidebar-tabs-style": "sidebar-tabs-square",
"minimal-style@@tabs-style": "tabs-square",
"minimal-cards-style@@cards-border-width": "3px",
"minimal-style@@tx1@@dark": "#C0C8CE",
"minimal-style@@h1-color@@dark": "#FFFFFF",
"minimal-style@@h1-color@@light": "#000000",
"minimal-style@@h1-size": "2.5em",
"minimal-style@@h2-size": "2.2em",
"minimal-style@@h3-size": "1.7em",
"minimal-style@@h2-color@@dark": "#EEEEEE",
"minimal-style@@h2-color@@light": "#000000",
"minimal-style@@h3-color@@light": "#000000",
"minimal-style@@h4-color@@dark": "#E9E9E9",
"minimal-style@@h4-color@@light": "#202020",
"minimal-style@@tx1@@light": "#474747",
"minimal-style@@minimal-code-scroll": false,
"minimal-style@@h4-size": "1.6em",
"minimal-style@@h5-size": "1.3em",
"minimal-style@@h6-size": "1em",
"minimal-style@@table-lines": true,
"minimal-style@@maximize-tables-off": "maximize-tables",
"minimal-style@@row-hover": false,
"minimal-style@@h2-weight": 600,
"minimal-style@@h1-weight": 700,
"minimal-style@@h3-weight": 500,
"minimal-style@@h5-weight": 400,
"minimal-style@@h6-weight": 300,
"minimal-style@@h4-weight": 500,
"minimal-style@@h3-color@@dark": "#E2E2E2",
"minimal-style@@bold-color@@dark": "#FFFFFF",
"minimal-style@@italic-color@@dark": "#FFFFFF",
"minimal-style@@bold-weight": 600,
"minimal-style@@code-background@@dark": "#1F2326",
"minimal-style@@bg1@@dark": "#24292D",
"minimal-style@@code-size": "14px",
"minimal-style@@blockquote-background-color@@dark": "#2A2F33",
"minimal-style@@blockquote-border-thickness": 4,
"minimal-style@@blockquote-color@@dark": "#747A86",
"minimal-style@@code-comment@@dark": "#5C6370",
"minimal-style@@code-function@@dark": "#61AFEF",
"minimal-style@@code-keyword@@dark": "#E45649",
"minimal-style@@code-operator@@dark": "#528BFF",
"minimal-style@@code-string@@dark": "#98C379",
"minimal-style@@code-normal@@dark": "#FFFFFF",
"minimal-style@@image-muted": 1,
"minimal-style@@zoom-off": true,
"minimal-advanced@@cursor": "default",
"minimal-advanced@@styled-scrollbars": false,
"minimal-style@@icon-muted": 0.5,
"minimal-style@@window-title-off": false,
"minimal-style@@bg1@@light": "#F2F2F2",
"minimal-style@@color-orange@@dark": "#FBFF8A"
}
+ +

编辑obsidian.css文件:

+
/* 文件浏览器和大纲窗格显示关系连线 */
.outline .tree-item-children {
margin-left: 20px;
border-left: 1px solid var(--background-modifier-border);
border-radius: 6px;
transition: all 0.5s ease-in-out;
}

.nav-folder-children .nav-folder-children {
margin-left: 20px;
padding-left: 0;
border-left: 1px solid var(--background-modifier-border);
border-radius: 6px;
transition: all 0.5s ease-in-out;
}

/* 右下状态栏淡出 */
/* auto fades status bar items */
.status-bar:not(:hover) .status-bar-item {
opacity: 0.25;
transition: opacity .25s ease-in-out;
}

/* 滚动条 */
body:not(.native-scrollbars) ::-webkit-scrollbar {
background-color: rgba(255, 255, 255, 0);
}

/* 滚动条滚动的那部分 */
body:not(.native-scrollbars) ::-webkit-scrollbar-thumb {
background-color: rgb(245, 245, 245);
border: 1px solid rgb(226, 226, 226);
border-radius: 0%;
}

/* 行内代码块 */
.cm-s-obsidian span.cm-inline-code {
border: 1px solid rgb(226, 226, 226);
border-radius: 3px;
color: #000000;

}

/* 引用块 */
blockquote {
border-left: 4px solid #dfe2e5;
padding: 0 15px;
color: #777777;
}

blockquote blockquote {
padding-right: 0;
}

.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote:before {
/* border-top: 12px; */
margin-top: 6px;
margin-bottom: 8px;
}

/* 代码块 */
.cm-s-obsidian .HyperMD-codeblock {
/* border-top: 1px solid rgb(226, 226, 226); */
border-left: 1px solid rgb(232, 235, 238);
border-right: 1px solid rgb(232, 235, 238);
background-color: #f8f8f8;
}

.markdown-source-view.mod-cm6 .cm-line.HyperMD-codeblock {
padding-top: 0px;
padding-bottom: 0px;
}

/* 代码块顶端 */
.cm-s-obsidian div.HyperMD-codeblock-begin-bg {
background-color: #f8f8f8;
border-left: 1px solid rgb(232, 235, 238);
border-right: 1px solid rgb(232, 235, 238);
border-top: 1px solid rgb(232, 235, 238);
border-top-left-radius: 3px;
border-top-right-radius: 3px;
font-size: 2px;
}

/* 代码块底端 */
.cm-s-obsidian div.HyperMD-codeblock-end-bg {
background-color: #f8f8f8;
border-left: 1px solid rgb(232, 235, 238);
border-right: 1px solid rgb(232, 235, 238);
border-bottom: 1px solid rgb(232, 235, 238);
border-bottom-left-radius: 3px;
border-bottom-right-radius: 3px;
font-size: 2px;
}

/* 表格 */

table {
padding: 0px;
word-break: initial;
}

table tr {
border: 1px solid #dfe2e5;
margin: 0;
padding: 0;
}

table tr:nth-child(2n),
thead {
background-color: #f8f8f8;
}

table th {
font-weight: bold;
border: 1px solid #dfe2e5;
border-bottom: 0;
margin: 0;
padding: 6px 13px;
}

table td {
border: 1px solid #dfe2e5;
margin: 0;
padding: 6px 13px;
}

table th:first-child,
table td:first-child {
margin-top: 0;
}

table th:last-child,
table td:last-child {
margin-bottom: 0;
}

/* 表格与正文的间距 */
.markdown-source-view.mod-cm6 .cm-table-widget {
padding-top: 10px;
padding-bottom: 10px;
}

/* 表格内文字 */
.markdown-rendered td {
padding-left: 2px;
}

/* 编辑器正文 */
.mod-cm6 .cm-editor .cm-line {

padding-top: 6px;
padding-bottom: 8px;
}


/* 标题 */
.mod-cm6 .cm-editor .HyperMD-header-1 {
padding-top: 40px;
padding-bottom: 40px;
}

.mod-cm6 .cm-editor .HyperMD-header-2 {
padding-top: 20px;
padding-bottom: 20px;
}

.mod-cm6 .cm-editor .HyperMD-header-3 {
padding-top: 15px;
padding-bottom: 15px;
}


/* 代码高亮 */
body.theme-light.css-settings-manager {
--code-comment: #a50;
--code-function: #0000ff;
--code-keyword: #770088;
--code-operator: #981a1a;
--code-string: #aa1111;
--code-normal: #000000;
--code-number: #116644;
--code-variable: #000000;
}

.cm-variable {
color: #000000;
}

.cm-type {
color: #008855;
}
+
+ + +
+ +
+ + +
+ +
+ + + + + +
+ +
+ +
+ + +
+ +
+ +
+ + + +
+ +
+
+
+  Comments +
+ + + + +
+
+ + + +
+ + + + + +
+ +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + diff --git a/en/2023/05/25/note/Computer/Programming/Algorithm and Data structure/DataStrucuture_en/index.html b/en/2023/05/25/note/Computer/Programming/Algorithm and Data structure/DataStrucuture_en/index.html new file mode 100644 index 000000000..ca49ca6c2 --- /dev/null +++ b/en/2023/05/25/note/Computer/Programming/Algorithm and Data structure/DataStrucuture_en/index.html @@ -0,0 +1,848 @@ + + + + + + + + + + + + Data Structure | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Data Structure +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + +

Data Strutcure

+ + +

Array

Array has fixed size and contiguous memory. New elements cannot be appended. You can use memory address to access elements of Array.

+
char a[5] = {'h', 'e', 'l', 'l', 'o',}; 
+image +C++ counts food tags from `0`, so `a[0] = 'h'` and `a[1] = 'e'`. +Random access using `a[i]` has `O(1)` time complexity. +Units of array can be modified. +
a[0] = 'b';
+result: +
bello
+image +### Dynamic Allocation of Arrays + +

A size-n array can be created in this way:

+
char a[n];
+ +

But when writing the code, n must be known.

+

If n is unknown, how dose the program run?

+
char* a = NULL;
int n; // array size
cin >> n; // read in the size. e.g., get n = 5
a = new char[n];
+ +

Now a is an empty array whose size is 5.

+
// store somrthing in the array
a[0] = 'h';
a[1] = 'e';
a[2] = 'l';
a[3] = 'l';
a[4] = 'o';
+ +

When done, free memory. Otherwise, memory leak can happen.

+
delete [] a;
a = NULL;
+ + + +

Removing an element in the middle has O(n) time complexity. Require moving the remaining items leftward.

+

Vector

Vector is almost the same as array.

+

The main difference is that vector’s capacity can automatically grow.

+

New elements can be appended using push_back() in O(1) time(on average).

+

The last element can be removed using pop_back() in O(1) time.

+
std::vector<char> v = {'h', 'e', 'l', 'l', 'o'}; 
v.push_back();
v.pop_back();
v.erase(v.begin() + 1);
+ +

Vector can delete an element in the middle using erase() in O(n) time. So it is not better to do this.

+
std::vector<char> v(100);
cout << v.size(); // print "100"
cout << v.capacity(); // print "100"
// then
v.push_back('x');
cout << v.size(); // print "101"
cout << v.capacity(); // print "200"
+ +

When size is going to exceed capacity, program will create a new array of capacity 200, copy the 100 elements from the old array to the new, put the new element in the 101st position and free the old array from memory.

+

List

A Node

A node contains a data and two pointers that one points to the previous node and another points to the next node.

+

Doubly Linked List

std::list<char> l = {'h', 'e', 'l', 'l', 'o'}; 
+ +
cout << l[2];		// does not work
l[0] = 'a'; // does not work
+ +
list<char>::iterator iter = l.begin();
cout << *iter; // print 'h'
iter++;
cout << *iter; // print 'e'
*iter = 'a';

push_back();
push.front();
+ +

Diference

+ + + + + + + + + + + + + + + + + + + + +
ArrayVectorList
Sizefixedcan increase and decreasecan increase and decrease
Memorycontiguouscontiguousnot contiguous
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArrayVectorList
Rand AccessO(1)O(1)
push_back()O(1)(average)O(1)
pop_back()O(1)O(1)
insert()O(n)(average)O(1)
erase()O(n)(average)O(1)
+

Which shall we use?

+

Array: Fixed size throughout.

+

Vector:

+
    +
  • Random access(i.e., read or write the i-th element) is fast.
  • +
  • Insertion and deletion at the end are fas.
  • +
  • insertion and deletion in the front and midddle are slow.
  • +
+

List:

+
    +
  • Sequentially visiting elements is fast; random access is not allowed.
  • +
  • Frequent insertion and deletion at any position are OK.
  • +
+

Binary Search

int arr[] = {3, 5, 12, 16, 17, 26, 32, 51, 53, 64};
+ +

Inputs: (i) an array whose elements are in the accending order and (ii) a key.

+

Goal: Search for the key in the array. If found, return its index; if not found, return -1.

+

Examle 1:

+
    +
  • Search for the elemnt 53.
  • +
  • Return 8.
  • +
+

Example 2:

+
    +
  • Search for the element 9.
  • +
  • Return -1.
  • +
+

Example: key = 26. Use two variables left and right pointing to the front of the array and the back respectively.

+
int search(int arr[], int left, int right, int key)
{
while (left <= right) {
int mid = (left + right) / 2;
if (key == arr[mid])
return mid;
if (key > arr[mid])
left = mid + 1;
else
right = mid - 1;
}
return -1;
}
+ +

How to suport both search and insertion?

+
std::vector<int> v = {3, 5, 12, 16, 17, 26, 32, 51, 53, 64};
+ +

The ascending order must be kept; otherwisem search would take O(n) time.
Inserting an item into the middle has O(n) time complexity(on average).
Can we perform binary search in the list?
No, Given left and right, we cannot get mid efficiently.

+ + + + + + + + + + + + + + + + + + + + + + + +
SearchInsertion
VectorO(log n)O(n)
ListO(n)O(1)
Skip ListO(log n)O(log n)
+

Skip List

Linked list does not support binary search.

+
+

Skip list allows fast search and fast inertion.

+
+

Search: O(log n) time complexcity on average.

+

Insertion: O(log n) time complexcity on average.

+

Build a skip list(待补充)

Initially, a linked list contains n numbers in ascending order.

+

Insertion

+
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ + + +
+ +
+
+
+  Comments +
+ + + + +
+
+ + + +
+ + + + + +
+ +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + diff --git a/en/2023/05/25/note/Computer/Programming/Algorithm and Data structure/Linked_list_en/index.html b/en/2023/05/25/note/Computer/Programming/Algorithm and Data structure/Linked_list_en/index.html new file mode 100644 index 000000000..a54d535e9 --- /dev/null +++ b/en/2023/05/25/note/Computer/Programming/Algorithm and Data structure/Linked_list_en/index.html @@ -0,0 +1,706 @@ + + + + + + + + + + + + Singly Linked list | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Singly Linked list +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + +

Now we implement a singly linked list with C++.

+
+

Linked list is a Data structure that contains a variable and a pointer pointing to the next node.

+
+ + +

Storage of data

First of all, a data structure is needed to store the variable and the pointer. It can be coded:

+
struct Node {
int val;
Node* next;
Node()
: val(0)
, next(nullptr)
{
}
Node(int x)
: val(x)
, next(nullptr)
{
}
Node(int x, Node* next)
: val(x)
, next(next)
{
}
};
+ +

Three constructors are packaged in the struct Node, which can help us create a head of a linked list conveniently.

+
Node *head = new Node();
Node *head = new Node(0);
Node *head = new Node(0, nullptr);
+ +

There are three ways to create a pointer head. Using first way, you can create a pointer head pointing to a node that has a variable val = 0 and a nullptr (a pointer pointing nothing). And the second way, you create a same head but you must assign a value to val of the node pointed to by head. The last, you even can link a node to the head requiring you give a pointer pointing to the next node.

+

Then, how to handle the linked list?

+

Linked list class

Object-oriented is a

+
class ListNode {
public:
struct Node {
int val;
Node* next;
Node()
: val(0)
, next(nullptr)
{
}
Node(int x)
: val(x)
, next(nullptr)
{
}
Node(int x, Node* next)
: val(x)
, next(next)
{
}
};
ListNode()
{
this->head = nullptr;
}
Node* head;
void assign(int val);
int at(int pos);
void set(int pos, int val);
void del(int pos);
int find(int val);
void print();
};
+ +
    void assign(int val)
{
Node* p = new Node(val);
Node* last = this->head;
if (last) {
while (last->next) {
last = last->next;
}
last->next = p;
} else {
head = p;
}
}
int at(int pos)
{
int index = 0;
Node* p = this->head;
while (index != pos) {
p = p->next;
index++;
}
return p->val;
}
void set(int pos, int val)
{
int index = 0;
Node* p = this->head;
while (index != pos) {
p = p->next;
index++;
}
p->val = val;
}
void del(int pos)
{
Node* p = this->head;
if (pos == 0) {
head = head->next;
delete p;
} else {
int index = 0;
Node* p = this->head;
Node* q;
for (q = nullptr; p; q = p, p = p->next) {
if (index == pos - 1) {
q->next = p->next;
delete p;
break;
}
index++;
}
}
}
int find(int val)
{
Node* p;
int index = 0;
for (p = this->head; p; p = p->next) {
if (p->val == val) {
return index;
}
index++;
}
return -1;
}
void print()
{
Node* p;
cout << "[";
for (p = this->head; p; p = p->next) {
cout << p->val;
if (p->next) {
cout << ", ";
}
}
cout << "]" << endl;
}
};

int main()
{
ListNode* node = new ListNode;
node->assign(1);
node->assign(2);
node->assign(3);
node->assign(4);
node->assign(5);
node->print();
cout << node->find(2) << endl;
node->del(2);
node->print();
cout << node->at(2) << endl;
node->set(2, 9);
node->print();
return 0;
}
+ +

Merge Two LinkedList

Node *mergeList(ListNode *l1, ListNode *l2) {
Node *p, *q, *temp, *newList;
if (l1->head->val >
l2->head->val) { // make ptr "p" is the head of small list
newList = l2->head;
p = l2->head;
q = l1->head;
} else {
newList = l1->head;
p = l1->head;
q = l2->head;
}
while (p != nullptr && q != nullptr) {
if (q->val >= p->val) {
temp = q->next;
q->next = p->next;
p->next = q;
q = temp;
p = p->next->next;
} else {
temp = p->next;
p->next = q->next;
q->next = p;
p = temp;
q = q->next->next;
}
}
if (q != nullptr) {
p->next = q;
}
return newList;
}
+ + + + +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ + + +
+ +
+
+
+  Comments +
+ + + + +
+
+ + + +
+ + + + + +
+ +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + diff --git a/en/2023/05/25/note/Wiki/FTP/index.html b/en/2023/05/25/note/Wiki/FTP/index.html new file mode 100644 index 000000000..bc654ce89 --- /dev/null +++ b/en/2023/05/25/note/Wiki/FTP/index.html @@ -0,0 +1,697 @@ + + + + + + + + + + + + Ftp | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Ftp +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + +
+

File Transfer Protocol client

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionImplication
-4contact IPv4 hosts
-6contact IPv6 hosts
-Aenable active mode transfer
-denbale debugging outpout
-edisble command line editing
-gturn off file name globbing
-ido not prompt during multiple file
-ndo not automatically login to the remote system
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ + +
+ +
+ +
+ + + +
+ +
+
+
+  Comments +
+ + + + +
+
+ + + +
+ + + + + +
+ +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + diff --git a/en/2023/05/25/note/Wiki/GDB/index.html b/en/2023/05/25/note/Wiki/GDB/index.html new file mode 100644 index 000000000..b93bf266d --- /dev/null +++ b/en/2023/05/25/note/Wiki/GDB/index.html @@ -0,0 +1,760 @@ + + + + + + + + + + + + GDB | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ GDB +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + +

Compile the source file to the binary file.
Add argument -g to generate a GDB binary file.

+ + +
gcc -g source.c -o output
g++ -g source.cpp -o output
ls -a
total 52K
-rw-r--r-- 1 dionysen dionysen 450 Oct 5 22:26 binary-search.cpp
-rw-r--r-- 1 dionysen dionysen 2.5K Oct 2 14:29 linked-list.cpp
-rw-r--r-- 1 dionysen dionysen 411 Oct 2 14:41 node.cpp
-rwxr-xr-x 1 dionysen dionysen 37K Oct 5 23:04 output
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CommandFull nameDo somthing
gdb output
rrunRun current program
bbreakSet a breakpoint at [function] or [line] (in file)
ccontinueContinue running your program (after stopping, e.g. at a breakpoint).
nnextExecute next program line (after stopping); step over any function calls in the line.
sstepExecute next program line (after stopping); step into any function calls in the line.
llistType the text of the program in the vicinity of where it is presently stopped.
pprintDisplay the value of an expression.
watchwatchSet a watchpoint in an address of expression
i binfo breakCheck information of breakpoints.
kkillKill the program being debugged.
qquitExit from GDB.
+
    +
  • You can use shell [args] to execute a shell command.
  • +
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ + + +
+ +
+
+
+  Comments +
+ + + + +
+
+ + + +
+ + + + + +
+ +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + diff --git a/en/2023/05/25/note/Wiki/Obsidian/index.html b/en/2023/05/25/note/Wiki/Obsidian/index.html new file mode 100644 index 000000000..617a08788 --- /dev/null +++ b/en/2023/05/25/note/Wiki/Obsidian/index.html @@ -0,0 +1,663 @@ + + + + + + + + + + + + Obsidian Minimal Theme Setting | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Obsidian Minimal Theme Setting +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + +

.css setting in obsidian minimal theme.

+ + +
{
"minimal-cards-style@@cards-border-width": "3px",
"minimal-advanced@@cursor": "default",
"minimal-advanced@@styled-scrollbars": false,
"minimal-style@@blockquote-border-thickness": 4,
"minimal-style@@code-background@@light": "#F8F8F8",
"minimal-style@@sidebar-lines-off": true,
"minimal-style@@sidebar-tabs-style": "sidebar-tabs-square",
"minimal-style@@tabs-style": "tabs-default",
"minimal-mobile@@mobile-toolbar-off": true,
"minimal-style@@tx1@@dark": "#C0C8CE",
"minimal-style@@h1-color@@dark": "#FFFFFF",
"minimal-style@@h1-color@@light": "#000000",
"minimal-style@@h1-size": "2.5em",
"minimal-style@@h2-size": "2.2em",
"minimal-style@@h3-size": "1.7em",
"minimal-style@@h2-color@@dark": "#EEEEEE",
"minimal-style@@h2-color@@light": "#000000",
"minimal-style@@h3-color@@light": "#000000",
"minimal-style@@h4-color@@dark": "#E9E9E9",
"minimal-style@@h4-color@@light": "#202020",
"minimal-style@@tx1@@light": "#000000",
"minimal-style@@minimal-code-scroll": false,
"minimal-style@@h4-size": "1.6em",
"minimal-style@@h5-size": "1.3em",
"minimal-style@@h6-size": "1em",
"minimal-style@@table-lines": true,
"minimal-style@@maximize-tables-off": "maximize-tables",
"minimal-style@@row-hover": false,
"minimal-style@@h2-weight": 700,
"minimal-style@@h1-weight": 800,
"minimal-style@@h3-weight": 600,
"minimal-style@@h5-weight": 400,
"minimal-style@@h6-weight": 300,
"minimal-style@@h4-weight": 500,
"minimal-style@@h3-color@@dark": "#E2E2E2",
"minimal-style@@bold-color@@dark": "#FFFFFF",
"minimal-style@@italic-color@@dark": "#FFFFFF",
"minimal-style@@bold-weight": 700,
"minimal-style@@code-background@@dark": "#1F2326",
"minimal-style@@bg1@@dark": "#24292D",
"minimal-style@@blockquote-background-color@@dark": "#2A2F33",
"minimal-style@@blockquote-color@@dark": "#747A86",
"minimal-style@@code-value@@light": "#0000FF",
"minimal-style@@header-height": "40px",
"minimal-style@@h6-variant": "normal",
"minimal-style@@h5-variant": "normal",
"minimal-style@@h4-variant": "normal",
"minimal-style@@file-header-font-size": "0.6em"
}
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ + + +
+ +
+
+
+  Comments +
+ + + + +
+
+ + + +
+ + + + + +
+ +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + diff --git a/en/2023/05/25/note/Wiki/SCP/index.html b/en/2023/05/25/note/Wiki/SCP/index.html new file mode 100644 index 000000000..7208b286c --- /dev/null +++ b/en/2023/05/25/note/Wiki/SCP/index.html @@ -0,0 +1,709 @@ + + + + + + + + + + + + SCP protocol | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ SCP protocol +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + +

scp copies files between hosts on a network.

+ + +

scp

It uses ssh for data transfer, and uses the same authentication and provides the same security as a login session.

+

scp will ask for passwords or passphrases if they are needed for authentication.

+

The source and target may be specified as a local pathname, a remote host with optional path in the form [user@]host:[path], or a URI in the form scp://[user@]host[:port][/path].

+
+

Local file names can be made explicit using absolute or relative pathnames to avoid scp treating file names containing ‘:‘ as host speacifiers.

+
+

When copying between two remote hosts, if the URI format is used, a port cannot be specified on the target if the -R option is used.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionsImplication
-3Copies between two remote hosts are transferred through the local host. Without this option the data is copied directly between the two remote hosts.
-4Forces scp to use IPv4 addresses only
-6Forces scp to use IPv6 addresses only
-AAllows forwarding of ssh-agent(1) to the remote system. The default is not to forward an authentication agent.
-CCompression enable
-lLimits the used bandwidth, specified in Kbit/s
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ + + +
+ +
+
+
+  Comments +
+ + + + +
+
+ + + +
+ + + + + +
+ +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + diff --git a/en/2023/05/25/note/Wiki/Source List/index.html b/en/2023/05/25/note/Wiki/Source List/index.html new file mode 100644 index 000000000..221f28bf5 --- /dev/null +++ b/en/2023/05/25/note/Wiki/Source List/index.html @@ -0,0 +1,681 @@ + + + + + + + + + + + + Source Lists | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Source Lists +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + +

Some commonly used source lists.

+ + +

Source Lists

USTC Source List

termux

编辑/data/data/com.termux/files/usr/etc/apt/sources.list

+
deb https://mirrors.ustc.edu.cn/termux/apt/termux-main stable main
+ +

debian

deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian stable main contrib non-free
deb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free

# deb http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free
+ +

archlinux

Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch

# arm
Server = https://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo
+ +

ubuntu

# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
+ +

kali

supported:amd64, armel, armhf, i386

+
deb https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ + + +
+ +
+
+
+  Comments +
+ + + + +
+
+ + + +
+ + + + + +
+ +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + diff --git a/en/2023/05/25/note/Wiki/WSL2/index.html b/en/2023/05/25/note/Wiki/WSL2/index.html new file mode 100644 index 000000000..5609f9fe3 --- /dev/null +++ b/en/2023/05/25/note/Wiki/WSL2/index.html @@ -0,0 +1,756 @@ + + + + + + + + + + + + WSL2 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ WSL2 +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + +
+

✅ This is a tutorial of installing on WSL2

+
+ + +

Install WSL2

Start using WSL

Open powershell using administration rights, and input:

+
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
+ +

Requirement of WSL2

For x64 system, the version of win10 must be 1903 or higher.
Using “win + R” and input winver to check.

+

Start Virtual machinel platform

Open powershell using administration rights, and input:

+
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
+ +

Install Linux Kernal Updating

Download Link: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
Install.

+

Setting the default version 2

Open powershell using administration rights, and input:

+
wsl --set-default-version 2
+ +

Then, WSL2 is already installed.

+

Update to WSLg

将win10更新到最新的版本

+

Open powershell using administration rights, and input:

+
wsl --update
wsl --version
# display:
WSL version: 1.0.3.0
Kernel version: 5.15.79.1
WSLg version: 1.0.47
MSRDC version: 1.2.3575
Direct3D version: 1.606.4
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.19045.2364
+ +

否则说明win10还不是最新的,继续更新

+

Install Archlinux on WSL2

Download Archlinux

Download link: https://mirrors.tuna.tsinghua.edu.cn/archlinux/iso/latest/
Find and Download archlinux-bootstrap-2020.10.01-x86_64.tar.gz .

+

Install Archlinux by LxRunOffline

1. Input the command in powershell

LxRunOffline i -n <自定义名称> -f <Arch镜像位置> -d <安装系统的位置> -r root.x86_64
+ +

example:

+
LxRunOffline i -n ArchLinux -f C:\Users\dionysen\Downloads\archlinux-bootstrap-2020.10.01-x86_64.tar.gz -d C:\Users\dionysen\Linux -r root.x86_64
+ +

2. Change WSL2 version in Archlinux

wsl --set-version ArchLinux 2
+ +

Configuration

Basic Configuration

wsl -d Archlinux
rm /etc/resolv.conf
exit
+ +

The terminal window will be unavailable, so you should reopen a new terminal window, then:

+
wsl --shutdown Archlinux
wsl -d Archlinux
cd /etc
vi pacman.conf
+ +

Add following code in the end of pacman.conf:

+
[archlinuxcn]
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch
+ +

And change the mirrorlist:

+
vi ./pacman.d/mirrorlist
+ +

Remove the comment of a Chinese source.

+
pacman -Syy
pacman-key --init
pacman-key --populate
pacman -S archlinuxcn-keyring
pacman -S base base-devel vim git wget

passwd # input the password of root
useradd -m -G wheel -s /bin/bash <username>
passwd <username>
vim /etc/sudoers
+ +

Use /wheel find the line wheel ALL=(ALL) ALL and remove the comment.

+
id -u <username>
exit
+ +

Execute the command in powershell to set default user of Archlinux:

+
lxrunoffline su -n Archlinux -v <username>
+ +

Install Ubuntu20.02 in WSL2

wsl --list --online		# 查看可直接安装的发行版列表
# 显示如下:
PS C:\Windows\system32> wsl -l --online
The following is a list of valid distributions that can be installed.
Install using 'wsl.exe --install <Distro>'.

NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
SLES-12 SUSE Linux Enterprise Server v12
SLES-15 SUSE Linux Enterprise Server v15
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
OracleLinux_8_5 Oracle Linux 8.5
OracleLinux_7_9 Oracle Linux 7.9

# 安装ubuntu 20.04
wsl --install Ubuntu-20.04
+ +

然后打开终端,打开ubuntu-20.04,创建用户和密码

+

换源+更新

+

然后安装anaconda

+

Install Anaconda on Ubuntu

wget https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-5.3.0-Linux-x86_64.sh
chmod +x Anaconda3-5.3.0-Linux-x86_64.sh
./Anaconda3-5.3.0-Linux-x86_64.sh
yes
ENTER
+ +

安装完成之后,检查版本:

+
anaconda -V
conda -V
+ +

使用anaconda

换源:

+
cd
vim .condarc
+ +

编辑.condarc ,添加清华源

+
# add to .condarc
ssl_verify: false
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
+ +

更新:

+
conda update -n base -c defaults conda # 升级anaconda
+ +
conda create -n myconda python=3.7 		# 创建虚拟环境,名称为myconda(可以修改
conda info --envs # 查看已安装的虚拟环境
conda activate myconda # 激活环境myconda
conda deactivate # 关闭当前环境
+ +
conda list				# 查看conda的包
pip list # 查看pip的包
# 给pip换源 (也可以直接使用命令更换阿里源:
# pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
cd
mkdir .pip
vim .pip/pip.conf
# 添加以下内容
#-----------------------------------------
[global]
index-url = https://mirrors.bfsu.edu.cn/pypi/web/simple
format = columns
trusted-host = mirrors.bfsu.edu.cn
#-----------------------------------------
pip install jupyter # 安装jupyter
jupyter notebook # 开启jupyter notebook服务

+ +

附加配置

systemd

编辑 /etc/wsl.conf

+
[boot]
systemd=true
+ +

WSL distros 的备份还原

    +
  • 备份
  • +
+
wsl -l -v
# 显示为
NAME STATE VERSION
* Ubuntu-20.04 Running 2

wsl -t Ubuntu-20.04
wsl --export Ubuntu-20.04 E:\SystemBackup\ubuntu-wsl2-2022.11.29.tar
+ +
    +
  • 还原
  • +
+
wsl --import <distro-name> <install-path> <backup-file>
# e.g.
wsl --import Ubuntu c:\wsl2 d:\save\linux\wsl2.tar
+ +

WSL-Ubuntu安装 [[Computer/Programming/Language/Qt|qt]]

sudo apt install qt5* qtcreator
+ +

创建项目时如果出现“no suitable kits”,点击“option”查看配置,如果“QT version”为“none”,则选择 /usr/lib/qt5/bin/qmake,保存即可。

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ + + +
+ +
+
+
+  Comments +
+ + + + +
+
+ + + +
+ + + + + +
+ +
+ +
+ + + + +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + diff --git a/en/2023/05/25/note/Wiki/cpp_config/index.html b/en/2023/05/25/note/Wiki/cpp_config/index.html new file mode 100644 index 000000000..14a47b8ba --- /dev/null +++ b/en/2023/05/25/note/Wiki/cpp_config/index.html @@ -0,0 +1,690 @@ + + + + + + + + + + + + Clangd Config CMakeLists. txt | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ Clangd Config CMakeLists. txt +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + +

Vim using Coc-nvim plugin clangd-lsp need to read CMakeLists.txt so that it can auto-complete your code.
If your project builds with CMake, it can generate this file. You should enable it with:

+
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1
+ +

compile_commands.json will be written to your build directory. If your build directory is $SRC or $SRC/build, clangd will find it. Otherwise, symlink or copy it to $SRC, the root of your source tree.

+
ln -s ~/myproject-build/compile_commands.json ~/myproject/
+ +

Generated compile_commands.json can support auto completion for third party libraries.

+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ + + +
+ +
+
+
+  Comments +
+ + + + +
+
+ + + +
+ + + + + +
+ +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + diff --git a/en/2023/05/25/note/Wiki/v2raya/index.html b/en/2023/05/25/note/Wiki/v2raya/index.html new file mode 100644 index 000000000..abe7e158b --- /dev/null +++ b/en/2023/05/25/note/Wiki/v2raya/index.html @@ -0,0 +1,698 @@ + + + + + + + + + + + + V2rayA | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ V2rayA +
+ + +
+
+ +
+
+
+ Dionysen + +
+
+ + + +
+
+
+ + +
+ + +

On archlinux:

+
yay -S xray-bin
sudo pacman -S v2ray
yay -S v2raya-bin
+ +

Maybe you need restart your computer!

+ + +

And config:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
项目配置
透明代理/系统代理启用:大陆白名单模式
透明代理/系统代理实现方式redirect
规则端口的分流模式大陆白名单模式
防止 DNS 污染仅防止 DNS 劫持
特殊模式supervisor
TCPFastOpen保持系统默认
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + + +
+ +
+ +
+ + +
+ +
+ +
+ + + +
+ +
+
+
+  Comments +
+ + + + +
+
+ + + +
+ + + + + +
+ +
+ +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + +
+
+
    + + + + + +
+
+ +
+ + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + diff --git a/en/about/index.html b/en/about/index.html new file mode 100644 index 000000000..573113cbd --- /dev/null +++ b/en/about/index.html @@ -0,0 +1,482 @@ + + + + + + + + + + + + About | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + +
+
+ + +
+ +

Dionysus

In Greek mythology, Apollo and Dionysus are both sons of Zeus. Apollo, son of Leto, is the god of the sun, art, music, poetry, plague and disease, of rational thinking and order, and appeals to logic, prudence and purity and stands for reason. Dionysus, son of Semele, is the god of wine, dance and pleasure, of irrationality and chaos, representing passion, emotions and instincts. The ancient Greeks did not consider the two gods to be opposites or rivals, although they were often entwined by nature.

+

he glimpsed the supernatural reality through the Ghost; he has gained true knowledge and knows that no action of his has the power to change this. For the audience of such drama, this tragedy allows them to sense what Nietzsche called the Primordial Unity, which revives Dionysian nature. He describes primordial unity as the increase of strength, the experience of fullness and plenitude bestowed by frenzy. Frenzy acts as intoxication and is crucial for the physiological condition that enables the creation of any art.[citation needed] Stimulated by this state, a person’s artistic will is enhanced:

+
+

In this state one enriches everything out of one’s own fullness: whatever one sees, whatever wills is seen swelled, taut, strong, overloaded with strength. A man in this state transforms things until they mirror his power—until they are reflections of his perfection. This having to transform into perfection is—art.

+
+

——Quoted from Wikipedia

+ + +
+ +
+ +
+
+
+  Comments +
+ + + + +
+
+ + + +
+ + + + + +
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + diff --git a/en/archives/2022/05/index.html b/en/archives/2022/05/index.html new file mode 100644 index 000000000..918142089 --- /dev/null +++ b/en/archives/2022/05/index.html @@ -0,0 +1,516 @@ + + + + + + + + + + + + Archive: 2022/5 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ 2023 + [10] +
+ +
+ +
+
+ 2022 + [2] +
+ +
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + diff --git a/en/archives/2022/09/index.html b/en/archives/2022/09/index.html new file mode 100644 index 000000000..f78a7f9e1 --- /dev/null +++ b/en/archives/2022/09/index.html @@ -0,0 +1,516 @@ + + + + + + + + + + + + Archive: 2022/9 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ 2023 + [10] +
+ +
+ +
+
+ 2022 + [2] +
+ +
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + diff --git a/en/archives/2022/index.html b/en/archives/2022/index.html new file mode 100644 index 000000000..58f4d3743 --- /dev/null +++ b/en/archives/2022/index.html @@ -0,0 +1,516 @@ + + + + + + + + + + + + Archive: 2022 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ 2023 + [10] +
+ +
+ +
+
+ 2022 + [2] +
+ +
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + diff --git a/en/archives/2023/05/index.html b/en/archives/2023/05/index.html new file mode 100644 index 000000000..c5a3d187e --- /dev/null +++ b/en/archives/2023/05/index.html @@ -0,0 +1,516 @@ + + + + + + + + + + + + Archive: 2023/5 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ 2023 + [10] +
+ +
+ +
+
+ 2022 + [2] +
+ +
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + diff --git a/en/archives/2023/index.html b/en/archives/2023/index.html new file mode 100644 index 000000000..f95a064a1 --- /dev/null +++ b/en/archives/2023/index.html @@ -0,0 +1,516 @@ + + + + + + + + + + + + Archive: 2023 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ 2023 + [10] +
+ +
+ +
+
+ 2022 + [2] +
+ +
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + diff --git a/en/archives/index.html b/en/archives/index.html new file mode 100644 index 000000000..2ade4f36c --- /dev/null +++ b/en/archives/index.html @@ -0,0 +1,516 @@ + + + + + + + + + + + + Archive | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ 2023 + [10] +
+ +
+ +
+
+ 2022 + [2] +
+ +
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + diff --git a/en/archives/page/2/index.html b/en/archives/page/2/index.html new file mode 100644 index 000000000..2ade4f36c --- /dev/null +++ b/en/archives/page/2/index.html @@ -0,0 +1,516 @@ + + + + + + + + + + + + Archive | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+
+ 2023 + [10] +
+ +
+ +
+
+ 2022 + [2] +
+ +
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + diff --git a/en/categories/Programming/Data-Structure/index.html b/en/categories/Programming/Data-Structure/index.html new file mode 100644 index 000000000..7b4fe03b7 --- /dev/null +++ b/en/categories/Programming/Data-Structure/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Category: Data Structure | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  Data Structure +
+
+ +
+ +
+
+ 2023 + [1] +
+ +
+ +
+ +
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + diff --git a/en/categories/Programming/Language/index.html b/en/categories/Programming/Language/index.html new file mode 100644 index 000000000..fe6af02ad --- /dev/null +++ b/en/categories/Programming/Language/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Category: Language | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  Language +
+
+ +
+ +
+
+ 2022 + [1] +
+ +
+ +
+ +
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + diff --git a/en/categories/Programming/index.html b/en/categories/Programming/index.html new file mode 100644 index 000000000..bb5d915a3 --- /dev/null +++ b/en/categories/Programming/index.html @@ -0,0 +1,460 @@ + + + + + + + + + + + + Category: Programming | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  Programming +
+
+ +
+ +
+
+ 2023 + [1] +
+ +
+ +
+
+ 2022 + [1] +
+ +
+ +
+ +
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + diff --git a/en/categories/Wiki/index.html b/en/categories/Wiki/index.html new file mode 100644 index 000000000..eae1459f5 --- /dev/null +++ b/en/categories/Wiki/index.html @@ -0,0 +1,499 @@ + + + + + + + + + + + + Category: Wiki | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+  Wiki +
+
+ +
+ +
+
+ 2023 + [9] +
+ +
+ +
+ +
+
+
+
+ + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + diff --git a/en/categories/index.html b/en/categories/index.html new file mode 100644 index 000000000..c6996357c --- /dev/null +++ b/en/categories/index.html @@ -0,0 +1,414 @@ + + + + + + + + + + + + Categories | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + diff --git a/en/css/common/animated.css b/en/css/common/animated.css new file mode 100644 index 000000000..7d8756bba --- /dev/null +++ b/en/css/common/animated.css @@ -0,0 +1,148 @@ +.fade-in-down-animation { + animation-name: fade-in-down; + animation-duration: 1s; + animation-fill-mode: both; +} +.title-hover-animation { + position: relative; + display: inline-block; + color: var(--text-color-2); + line-height: 1.3; + vertical-align: top; + border-bottom: none; +} +.title-hover-animation::before { + position: absolute; + bottom: -4px; + left: 0; + width: 100%; + height: 2px; + background-color: var(--text-color-2); + transform: scaleX(0); + visibility: hidden; + content: ""; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease-in-out, ease-in-out; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, visibility, transform; +} +.title-hover-animation:hover::before { + transform: scaleX(1); + visibility: visible; +} +@-moz-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-webkit-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-o-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-moz-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-webkit-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-o-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-moz-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@-webkit-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@-o-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} diff --git a/en/css/common/basic.css b/en/css/common/basic.css new file mode 100644 index 000000000..33976b73d --- /dev/null +++ b/en/css/common/basic.css @@ -0,0 +1,696 @@ +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} +.fade-in-down-animation { + animation-name: fade-in-down; + animation-duration: 1s; + animation-fill-mode: both; +} +.title-hover-animation { + position: relative; + display: inline-block; + color: var(--text-color-2); + line-height: 1.3; + vertical-align: top; + border-bottom: none; +} +.title-hover-animation::before { + position: absolute; + bottom: -4px; + left: 0; + width: 100%; + height: 2px; + background-color: var(--text-color-2); + transform: scaleX(0); + visibility: hidden; + content: ""; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease-in-out, ease-in-out; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, visibility, transform; +} +.title-hover-animation:hover::before { + transform: scaleX(1); + visibility: visible; +} +@-moz-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-webkit-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-o-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-moz-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-webkit-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-o-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-moz-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@-webkit-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@-o-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} +/* + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-MediumItalic.woff2') format('woff2'); + font-weight: 500; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +}*/ +/* + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-BoldItalic.woff2') format('woff2'); + font-weight: bold; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +}*/ +* { + transition-delay: 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color; +} +*::-webkit-scrollbar { + width: 0.4rem; + height: 0.4rem; + transition: all 0.2s ease; +} +*::-webkit-scrollbar-thumb { + background: var(--scrollbar-color); + border-radius: 0.1rem; +} +*::-webkit-scrollbar-track { + background: var(--scrollbar-background-color); +} +html, +body { + position: relative; + width: 100%; + height: 100%; + margin: 0; + padding: 0; + color: var(--text-color-3); + font-weight: 300; + font-size: 16px; + font-family: LXGW Bright, STSong, Simsun; + line-height: 1.3rem; + letter-spacing: 0.2px; + background: var(--background-color-1); +} +html::-webkit-scrollbar, +body::-webkit-scrollbar { + width: 0.6rem; + height: 0.6rem; +} +@media (max-width: 800px) { + html::-webkit-scrollbar, + body::-webkit-scrollbar { + width: 0.5rem; + height: 0.5rem; + } +} +@media (max-width: 500px) { + html::-webkit-scrollbar, + body::-webkit-scrollbar { + width: 0.4rem; + height: 0.4rem; + } +} +@media (max-width: 800px) { + html, + body { + font-size: 16px; + line-height: 1.17rem; + } +} +@media (max-width: 500px) { + html, + body { + font-size: 15.2px; + line-height: 1.17rem; + } +} +::selection { + color: #fff; + background: var(--selection-color); +} +ul, +ol, +li { + margin: 0; + padding: 0; + list-style: none; +} +a { + color: var(--text-color-2); + text-decoration: none; +} +a i, +a span { + color: var(--text-color-3); +} +a:hover, +a:active { + color: var(--primary-color); + text-decoration: none !important; +} +a:hover i, +a:active i, +a:hover span, +a:active span { + color: var(--primary-color); +} +img[lazyload] { + position: relative; + box-sizing: border-box; + width: 8rem; + height: 8rem; + box-shadow: none !important; + cursor: not-allowed; + pointer-events: none; +} +img[lazyload]::before { + position: absolute; + top: 0; + left: 0; + display: block; + width: 100%; + height: 100%; + background: var(--background-color-1); + content: ''; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, background; +} +img[lazyload]::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: block; + width: 2rem; + height: 2rem; + margin: auto; + border: 2px solid var(--text-color-6); + border-top-color: var(--selection-color); + border-left-color: var(--selection-color); + border-radius: 50%; + animation: img-loading-animation 750ms infinite linear; + content: ''; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, border; +} +button { + margin: 0; + padding: 0; + background: transparent; + border: 0; + outline: none; + cursor: pointer; +} +.btn { + position: relative; + display: inline-block; + padding: 0.4rem 1rem; + white-space: nowrap; + text-align: center; + background: var(--background-color-1); + border-radius: 1px; + cursor: pointer; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform; +} +.btn:hover { + color: var(--background-color-1); + background: var(--primary-color); +} +.flex-center { + display: flex; + align-items: center; + justify-content: center; + font-size: 1.2rem; +} +.clear::after { + display: block; + clear: both; + height: 0; + overflow: hidden; + visibility: hidden; + content: ''; +} +.tooltip { + position: relative; + box-sizing: border-box; +} +.tooltip:hover .tooltip-content { + display: inline-block; +} +.tooltip.show-img .tooltip-content { + display: none !important; +} +.tooltip .tooltip-content { + position: absolute; + top: -0.4rem; + left: 50%; + z-index: 1009; + display: none; + box-sizing: border-box; + padding: 0.2rem 0.6rem; + color: var(--text-color-6); + font-size: 0.8rem; + letter-spacing: 0.8px; + white-space: nowrap; + background: var(--text-color-1); + border-radius: 0.3rem; + transform: translateX(-50%) translateY(-100%); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, display; + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; +} +.tooltip-img { + position: relative; + box-sizing: border-box; +} +.tooltip-img.show-img .tooltip-img-box { + display: flex; +} +.tooltip-img .tooltip-img-box { + position: absolute; + top: -0.4rem; + left: 50%; + z-index: 1008; + display: none; + align-items: center; + justify-content: center; + box-sizing: border-box; + min-height: 6rem; + background: var(--text-color-6); + border: 0.2rem solid var(--text-color-3); + border-radius: 0.3rem; + transform: translateX(-50%) translateY(-100%); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, display; + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; +} +.tooltip-img .tooltip-img-box img { + display: block; + max-height: 25rem; +} diff --git a/en/css/common/code-block/code-block.css b/en/css/common/code-block/code-block.css new file mode 100644 index 000000000..037eb6216 --- /dev/null +++ b/en/css/common/code-block/code-block.css @@ -0,0 +1,306 @@ +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} +.highlight-container { + position: relative; + box-sizing: border-box; + margin: 1.4rem 0; +} +.highlight-container.mac { + margin: 1.4rem 0 1.8rem 0; + box-shadow: 0 0.8rem 2rem 0 rgba(0,0,0,0.4); +} +.highlight-container.mac:hover .code-tools-box .copy { + opacity: 1; +} +.highlight-container.mac .code-tools-box { + justify-content: flex-end; + padding: 0.4rem 0.6rem 0.7rem 0.4rem; + background: #21252b; +} +.highlight-container.mac .code-tools-box::before { + position: absolute; + left: 0.8rem; + width: 0.76rem; + height: 0.76rem; + background: #fc625d; + border-radius: 50%; + box-shadow: 1.3rem 0 #fdbc40, 2.6rem 0 #35cd4b; + content: ''; +} +.highlight-container.mac .code-tools-box.folded { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.highlight-container.mac .code-tools-box.folded .copy { + display: none; +} +.highlight-container.mac .code-tools-box .code-lang { + order: 1; +} +.highlight-container.mac .code-tools-box .fold { + order: 2; + padding: 0 0.1rem 0 0.6rem; +} +.highlight-container.mac .code-tools-box .fold i { + color: #ccc; +} +.highlight-container.mac .code-tools-box .copy { + position: absolute; + top: 3rem; + right: 0.5rem; + padding: 0 0.1rem; + opacity: 0; +} +.highlight-container.mac .code-tools-box .copy i { + font-size: 1rem; +} +.highlight-container .code-tools-box { + display: flex; + align-items: center; + justify-content: space-between; + box-sizing: border-box; + width: 100%; + padding: 0.3rem 0.4rem; + color: var(--toolbar-foreground); + background: var(--toolbar-background); + border-top-left-radius: 1px; + border-top-right-radius: 1px; + border-left: 1px solid var(--code-border); + border-right: 1px solid var(--code-border); + border-top: 1px solid var(--code-border); +} +.highlight-container .code-tools-box.folded { + border-bottom-right-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; +} +.highlight-container .code-tools-box .code-lang { + justify-content: flex-start; + margin-left: 0.2rem; + font-weight: $defalut-font-weight; + font-size: 0.96rem; + font-family: Fira Code, LXGW Bright; + color: var(--text-color-5); +} +.highlight-container .code-tools-box .tool { + cursor: pointer; +} +.highlight-container .code-tools-box .tool i { + font-size: 0.8rem; + color: var(--text-color-5); +} +.highlight-container .code-tools-box .fold { + padding: 0 0.4rem 0 0.2rem; +} +.highlight-container figure.highlight { + margin: 0; +} +.highlight-container figure.highlight.folded { + height: 0; +} diff --git a/en/css/common/code-block/code-theme.css b/en/css/common/code-block/code-theme.css new file mode 100644 index 000000000..984822e75 --- /dev/null +++ b/en/css/common/code-block/code-theme.css @@ -0,0 +1,308 @@ +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} +:root { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; +} +@media (prefers-color-scheme: light) { + :root { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; + } +} +@media (prefers-color-scheme: dark) { + :root { + --toolbar-foreground: #d1d1d1; + --toolbar-background: #21232b; + --code-foreground: #d2d2d2; + --code-background: #181a20; + --highlight-background: #21232b; + --highlight-foreground: #d2d2d2; + --highlight-comment: #969896; + --highlight-red: #c66; + --highlight-orange: #de935f; + --highlight-yellow: #f0c674; + --highlight-green: #b5bd68; + --highlight-aqua: #8abeb7; + --highlight-blue: #81a2be; + --highlight-purple: #b294bb; + --highlight-gutter-color: #d3d3d3; + --highlight-gutter-bg-color: #181a20; + --code-border: #2a2b30; + } +} +.light-mode { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; +} +.dark-mode { + --toolbar-foreground: #d1d1d1; + --toolbar-background: #21232b; + --code-foreground: #d2d2d2; + --code-background: #181a20; + --highlight-background: #21232b; + --highlight-foreground: #d2d2d2; + --highlight-comment: #969896; + --highlight-red: #c66; + --highlight-orange: #de935f; + --highlight-yellow: #f0c674; + --highlight-green: #b5bd68; + --highlight-aqua: #8abeb7; + --highlight-blue: #81a2be; + --highlight-purple: #b294bb; + --highlight-gutter-color: #d3d3d3; + --highlight-gutter-bg-color: #181a20; + --code-border: #2a2b30; +} diff --git a/en/css/common/code-block/highlight.css b/en/css/common/code-block/highlight.css new file mode 100644 index 000000000..6dc619081 --- /dev/null +++ b/en/css/common/code-block/highlight.css @@ -0,0 +1,494 @@ +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} +:root { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; +} +@media (prefers-color-scheme: light) { + :root { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; + } +} +@media (prefers-color-scheme: dark) { + :root { + --toolbar-foreground: #d1d1d1; + --toolbar-background: #21232b; + --code-foreground: #d2d2d2; + --code-background: #181a20; + --highlight-background: #21232b; + --highlight-foreground: #d2d2d2; + --highlight-comment: #969896; + --highlight-red: #c66; + --highlight-orange: #de935f; + --highlight-yellow: #f0c674; + --highlight-green: #b5bd68; + --highlight-aqua: #8abeb7; + --highlight-blue: #81a2be; + --highlight-purple: #b294bb; + --highlight-gutter-color: #d3d3d3; + --highlight-gutter-bg-color: #181a20; + --code-border: #2a2b30; + } +} +.light-mode { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; +} +.dark-mode { + --toolbar-foreground: #d1d1d1; + --toolbar-background: #21232b; + --code-foreground: #d2d2d2; + --code-background: #181a20; + --highlight-background: #21232b; + --highlight-foreground: #d2d2d2; + --highlight-comment: #969896; + --highlight-red: #c66; + --highlight-orange: #de935f; + --highlight-yellow: #f0c674; + --highlight-green: #b5bd68; + --highlight-aqua: #8abeb7; + --highlight-blue: #81a2be; + --highlight-purple: #b294bb; + --highlight-gutter-color: #d3d3d3; + --highlight-gutter-bg-color: #181a20; + --code-border: #2a2b30; +} +pre, +.highlight { + margin: 1.5rem; + padding: 0; + overflow: auto; + color: var(--highlight-foreground); + font-size: 0.96rem; + line-height: 1.5rem; + background: var(--highlight-background); + border-radius: 2px; +} +pre, +code { + font-family: Fira Code, LXGW Bright; +} +code { + padding: 0px 2px 0px 2px; + color: var(--code-foreground); + font-size: 0.9rem; + word-break: break-all; + word-wrap: break-word; + background: var(--code-background); + border-radius: 2px; + border: 1px solid var(--code-border); +} +pre { + padding: 0.6rem; +} +pre code { + padding: 0; + color: var(--highlight-foreground); + text-shadow: none; + background: none; +} +.highlight { + border-bottom-right-radius: 1px; + border-bottom-left-radius: 1px; + border-left: 1px solid var(--code-border); + border-right: 1px solid var(--code-border); + border-bottom: 1px solid var(--code-border); + padding-left: 10px; + padding-right: 10px; + word-wrap: break-all; + white-space: pre-wrap; +} +.highlight pre { + margin: 0; + padding: 0.6rem; + border: none; + font-family: Fira Code, LXGW Bright; + word-break: break-all; + white-space: pre-wrap; + font-size: 0.9rem; + text-align: left; +} +.highlight table { + width: auto; + margin: 0; + border: none; + border-spacing: unset; +} +.highlight td { + padding: 0; + border: none; +} +.highlight figcaption { + margin-bottom: 1rem; + color: var(--highlight-foreground); + font-size: 1rem; + line-height: 1rem; +} +.highlight figcaption a { + float: right; + color: var(--highlight-foreground); +} +.highlight figcaption a:hover { + border-bottom-color: var(--highlight-foreground); +} +.highlight .gutter pre { + padding-right: 0.6rem; + padding-left: 0.6rem; + color: var(--highlight-gutter-color); + text-align: center; + background-color: var(--highlight-gutter-bg-color); +} +.highlight .code pre { + width: 100%; + padding-right: 0rem; + padding-left: 0.6rem; + background-color: var(--highlight-background); +} +.highlight .line { + height: 1.5rem; + color: var(--highlight-foreground); +} +.highlight .line .language-javascript { + color: var(--highlight-foreground); +} +.highlight .line .attr { + color: var(--highlight-foreground); +} +.highlight .line .string { + color: var(--highlight-foreground); +} +.gutter { + color: var(--highlight-gutter-color); + background: var(--highlight-gutter-bg-color); +} +.gutter .line { + color: var(--highlight-gutter-color); +} +.gist table { + width: auto; +} +.gist table td { + border: none; +} +pre .deletion { + background: var(--highlight-deletion); +} +pre .addition { + background: var(--highlight-addition); +} +pre .meta { + color: var(--highlight-purple); +} +pre .comment { + color: var(--highlight-comment); +} +pre .variable, +pre .attribute, +pre .tag, +pre .regexp, +pre .ruby .constant, +pre .xml .tag .title, +pre .xml .pi, +pre .xml .doctype, +pre .html .doctype, +pre .css .id, +pre .css .class, +pre .css .pseudo { + color: var(--highlight-red); +} +pre .property { + color: var(--highlight-blue); +} +pre .number, +pre .preprocessor, +pre .built_in, +pre .literal, +pre .params, +pre .constant, +pre .command { + color: var(--highlight-orange); +} +pre .ruby .class .title, +pre .css .rules .attribute, +pre .string, +pre .value, +pre .inheritance, +pre .header, +pre .ruby .symbol, +pre .xml .cdata, +pre .special, +pre .number, +pre .formula { + color: var(--highlight-green); +} +pre .title, +pre .css .hexcolor { + color: var(--highlight-aqua); +} +pre .function, +pre .python .decorator, +pre .python .title, +pre .ruby .function .title, +pre .ruby .title .keyword, +pre .perl .sub, +pre .javascript .title, +pre .coffeescript .title { + color: var(--highlight-blue); +} +pre .keyword, +pre .javascript .function { + color: var(--highlight-purple); +} diff --git a/en/css/common/fonts/FiraCode-Bold.woff2 b/en/css/common/fonts/FiraCode-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f7ea2bf7f3ef59f56d4f15d73d3cea2424fe6975 GIT binary patch literal 77696 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

d;v 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 literal 0 HcmV?d00001 diff --git a/en/css/common/fonts/FiraCode-Regular.woff2 b/en/css/common/fonts/FiraCode-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ea25bd6427069a8e1feaaff33af21c73e9fecaa3 GIT binary patch literal 71844 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 literal 0 HcmV?d00001 diff --git a/en/css/common/fonts/stylesheet.css b/en/css/common/fonts/stylesheet.css new file mode 100644 index 000000000..875f6c4a8 --- /dev/null +++ b/en/css/common/fonts/stylesheet.css @@ -0,0 +1,89 @@ +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} +/* + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-MediumItalic.woff2') format('woff2'); + font-weight: 500; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +}*/ +/* + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-BoldItalic.woff2') format('woff2'); + font-weight: bold; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +}*/ \ No newline at end of file diff --git a/en/css/common/keep-theme.css b/en/css/common/keep-theme.css new file mode 100644 index 000000000..e69de29bb diff --git a/en/css/common/markdown.css b/en/css/common/markdown.css new file mode 100644 index 000000000..7f878d319 --- /dev/null +++ b/en/css/common/markdown.css @@ -0,0 +1,159 @@ +.keep-markdown-body { + font-size: 1rem; +} +.keep-markdown-body blockquote { + box-sizing: border-box; + margin: 1.4rem 0; + color: var(--text-color-3); + background: var(--background-color-1); + border-left: 4px solid var(--blockquote-padding-color); +} +.keep-markdown-body blockquote p, +.keep-markdown-body blockquote ul, +.keep-markdown-body blockquote ol { + padding: 0.4rem 0.4rem 0.4rem 0.8rem; + color: var(--text-color-4); +} +.keep-markdown-body p { + color: var(--text-color-3); + line-height: 1.9; +} +.keep-markdown-body a { + position: relative; + box-sizing: border-box; + padding-bottom: 0.1rem; + text-decoration: none; + overflow-wrap: break-word; + border-bottom: 1px solid var(--text-color-5); + outline: 0; + cursor: pointer; +} +.keep-markdown-body a .fas, +.keep-markdown-body a .far, +.keep-markdown-body a .fab { + position: relative; + margin: 0 0.2rem 0 0.4rem; + color: var(--text-color-4); + font-size: 0.88rem; +} +.keep-markdown-body a:hover { + text-decoration: underline; +} +.keep-markdown-body a:hover::after { + background: var(--primary-color); +} +.keep-markdown-body strong { + color: var(--text-color-3); +} +.keep-markdown-body em { + color: var(--text-color-3); +} +.keep-markdown-body ul li, +.keep-markdown-body ol li { + margin-left: 1rem; + line-height: 2rem; +} +.keep-markdown-body ul li { + list-style: disc; +} +.keep-markdown-body ul li ul li { + list-style: circle; +} +.keep-markdown-body ul li ul li ul li { + list-style: square; +} +.keep-markdown-body ol li { + list-style: decimal; +} +.keep-markdown-body ol li ol li { + list-style: upper-alpha; +} +.keep-markdown-body ol li ol li ol li { + list-style: upper-roman; +} +.keep-markdown-body li { + color: var(--text-color-3); +} +.keep-markdown-body h1, +.keep-markdown-body h2, +.keep-markdown-body h3, +.keep-markdown-body h4, +.keep-markdown-body h5, +.keep-markdown-body h6 { + color: var(--text-color-2); + line-height: 1.5; +keep-tablet() +} +.keep-markdown-body h1 { + font-weight: 500; + font-size: 1.8rem; +keep-tablet() +} +.keep-markdown-body h2 { + font-weight: 500; + font-size: 1.7rem; +keep-tablet() +} +.keep-markdown-body h3 { + font-weight: 500; + font-size: 1.6rem; +keep-tablet() +} +.keep-markdown-body h4 { + font-weight: 500; + font-size: 1.5rem; +keep-tablet() +} +.keep-markdown-body h5 { + font-weight: 500; + font-size: 1.28rem; +keep-tablet() +} +.keep-markdown-body h6 { + font-weight: 500; + font-size: 1.2rem; + line-height: 1.2; +keep-tablet() +} +.keep-markdown-body img { + position: relative; + display: block; + box-sizing: border-box; + max-width: 100%; + box-shadow: 0 0 0.2rem var(--shadow-color); + cursor: zoom-in; + opacity: 1; + margin: 0.8rem 0 0.2rem; +} +.keep-markdown-body img.hide { + opacity: 0; +} +.keep-markdown-body img[lazyload] { + margin: 0.8rem auto 0.2rem; +} +.keep-markdown-body > table { + width: 100%; + overflow: auto; + border-collapse: collapse; + border-spacing: 0; +keep-mobile() +} +.keep-markdown-body > table td, +.keep-markdown-body > table th { + padding: 0; +} +.keep-markdown-body > table th { + font-weight: 600; +} +.keep-markdown-body > table td, +.keep-markdown-body > table th { + padding: 0.4rem 1rem; + border: 1px solid var(--border-color); +} +.keep-markdown-body > table tr { + background-color: var(--background-color-1); + border: 1px solid var(--text-color-6); +} +.keep-markdown-body > table tr:nth-child(2n) { + background-color: var(--background-color-2); +} diff --git a/en/css/common/variables.css b/en/css/common/variables.css new file mode 100644 index 000000000..39acbff42 --- /dev/null +++ b/en/css/common/variables.css @@ -0,0 +1,209 @@ +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} diff --git a/en/css/layout/archive-content.css b/en/css/layout/archive-content.css new file mode 100644 index 000000000..e69de29bb diff --git a/en/css/layout/article-content.css b/en/css/layout/article-content.css new file mode 100644 index 000000000..221186fd1 --- /dev/null +++ b/en/css/layout/article-content.css @@ -0,0 +1,209 @@ +.post-page-container { + position: relative; + display: flex; + justify-content: space-between; + box-sizing: border-box; + width: 100%; + height: 100%; +keep-tablet() +} +.post-page-container.show-toc .toc-content-container { + display: block; +} +.post-page-container .article-content-container { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + border: none; + box-shadow: none; + text-align: justify; + margin: 0 4rem 0rem 4rem; +keep-mobile() +} +.post-page-container .article-content-container .article-title { + color: var(--text-color-2); + font-weight: 700; + line-height: 4rem; + padding-top: 3rem; + padding-bottom: 1rem; + font-size: 1.9rem; +keep-tablet() +keep-mobile() +} +.post-page-container .article-content-container .article-header { + position: relative; + box-sizing: border-box; + width: 100%; + height: 3rem; + padding-left: 3rem; + padding-bottom: 4rem; +} +.post-page-container .article-content-container .article-header .avatar { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: 3rem; + height: 3rem; + padding: 0.1rem; + border: 1px solid var(--border-color); + border-radius: 50%; +} +.post-page-container .article-content-container .article-header .avatar img { + width: 100%; + height: 100%; + background: var(--avatar-background-color); + border-radius: 50%; +} +.post-page-container .article-content-container .article-header .info { + display: flex; + flex-direction: column; + justify-content: space-between; + box-sizing: border-box; + width: 100%; + height: 100%; + margin-left: 0.8rem; + padding: 0.2rem 0; +} +.post-page-container .article-content-container .article-header .info .author { + display: flex; + align-items: center; + font-weight: 600; + font-size: 1.18rem; + line-height: 1.5rem; +} +.post-page-container .article-content-container .article-header .info .author .name { + color: var(--text-color-4); +} +.post-page-container .article-content-container .article-header .info .author .author-label { + margin-left: 0.8rem; + padding: 0 0.2rem; + color: #fff; + font-weight: 500; + font-size: 0.6rem; + background: var(--selection-color); + border-radius: 0.4rem; +} +.post-page-container .article-content-container .article-header, +.post-page-container .article-content-container .article-header-meta-info { + margin-top: 1rem; +keep-tablet() +} +.post-page-container .article-content-container .article-content { + margin-top: $component-spacing-value; + padding-bottom: 2rem; + color: var(--text-color-3); + word-wrap: break-word; +} +.post-page-container .article-content-container .article-content .article-aging-tips { + position: relative; + display: none; + box-sizing: border-box; + margin-bottom: 1.8rem; + padding: 1rem; + color: var(--article-aging-tips-color); + line-height: 1.6; + background: var(--article-aging-tips-background-color); + border: 1px solid var(--article-aging-tips-border-color); + border-radius: 2px; +} +.post-page-container .article-content-container .article-content .article-aging-tips i { + margin-right: 0.4rem; + color: var(--article-aging-tips-color); +} +.post-page-container .article-content-container .article-content .article-aging-tips .days { + color: var(--article-aging-tips-color); +} +.post-page-container .article-content-container .post-tags-box { + display: none; + justify-content: center; + margin-top: 1.6rem; + font-size: 1.1rem; +keep-tablet() +keep-mobile() +} +.post-page-container .article-content-container .post-tags-box .tag-item { + margin: 0 0.25rem; +} +.post-page-container .article-content-container .post-copyright-info { + width: 100%; + margin-top: $component-spacing-value; +keep-tablet() +} +.post-page-container .article-content-container .article-nav { + height: 2.8rem; + margin-top: $component-spacing-value; +} +.post-page-container .article-content-container .article-nav .article-prev, +.post-page-container .article-content-container .article-nav .article-next { + box-sizing: border-box; + max-width: 14rem; + height: 100%; +} +.post-page-container .article-content-container .article-nav .article-prev a, +.post-page-container .article-content-container .article-nav .article-next a { + position: relative; + display: block; + box-sizing: border-box; + width: 100%; + height: 100%; +} +.post-page-container .article-content-container .article-nav .article-prev a.prev, +.post-page-container .article-content-container .article-nav .article-next a.prev { + padding-left: 1rem; +} +.post-page-container .article-content-container .article-nav .article-prev a.next, +.post-page-container .article-content-container .article-nav .article-next a.next { + padding-right: 1rem; +} +.post-page-container .article-content-container .article-nav .article-prev a .arrow-icon, +.post-page-container .article-content-container .article-nav .article-next a .arrow-icon { + position: absolute; + top: 0; + width: 1rem; + height: 100%; +} +.post-page-container .article-content-container .article-nav .article-prev a .arrow-icon.left, +.post-page-container .article-content-container .article-nav .article-next a .arrow-icon.left { + left: 0; +} +.post-page-container .article-content-container .article-nav .article-prev a .arrow-icon.right, +.post-page-container .article-content-container .article-nav .article-next a .arrow-icon.right { + right: 0; +} +.post-page-container .article-content-container .article-nav .article-prev a .title, +.post-page-container .article-content-container .article-nav .article-next a .title { + width: 100%; + height: 100%; +} +.post-page-container .article-content-container .article-nav .article-prev { + float: left; +} +.post-page-container .article-content-container .article-nav .article-next { + float: right; +} +.post-page-container .article-content-container .article-nav .post-nav-item { + display: none; +keep-tablet() +} +.post-page-container .article-content-container .article-nav .post-nav-title-item { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +keep-tablet() +} +.post-page-container .toc-content-container { + position: sticky; + top: $header-height$component-spacing-value; + display: none; + box-sizing: border-box; + width: 17rem; + overflow: hidden; + max-height: calc(100vh - $header-height$component-spacing-value); + padding: 2rem 0 3rem 0rem; +} +.header-shrink .post-page-container .toc-content-container { + top: $header-shrink-height$component-spacing-value; + max-height: calc(100vh - $header-shrink-height$component-spacing-value); +} diff --git a/en/css/layout/category-content.css b/en/css/layout/category-content.css new file mode 100644 index 000000000..e910bbf55 --- /dev/null +++ b/en/css/layout/category-content.css @@ -0,0 +1,12 @@ +.category-container .category-name { + margin-bottom: $component-spacing-value; + padding-bottom: 20px; + color: var(--text-color-2); + font-weight: 600; + font-size: 1.6rem; +keep-tablet() +keep-mobile() +} +.category-container .category-name i { + color: var(--text-color-2); +} diff --git a/en/css/layout/category-list.css b/en/css/layout/category-list.css new file mode 100644 index 000000000..1f932448d --- /dev/null +++ b/en/css/layout/category-list.css @@ -0,0 +1,57 @@ +.category-list-container .subtitle-info { + font-size: 1.3rem; + margin-left: 1rem; + line-height: 3.5rem; +} +.category-list-container .post-info { + float: right; + display: inline-block; + margin-right: 1rem; + font-size: 1rem; + color: var(--item-border-color); + line-height: 1.5rem; +} +.category-list-container .post-title-link { + font-size: 1rem; + margin-left: 1rem; + line-height: 2.1rem; + display: inline-block; +} +.category-list-container .category-list-content .archive-main-category { + font-size: 1.3rem; + line-height: 2rem; +} +.category-list-container .category-list-content .all-category-list > .all-category-list-item > .all-category-list-link { + font-size: 1.2rem; + line-height: 2.7rem; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item { + margin-bottom: 1rem; + font-size: 1rem; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item:last-child { + margin-bottom: 0; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item span.all-category-list-count { + float: right; + color: var(--text-color-3); +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item span.all-category-list-count::before { + content: '['; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item span.all-category-list-count::after { + content: ']'; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item ul.all-category-list-child { + margin-top: 1rem; + margin-left: 0.9rem; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item ul.all-category-list-child li { + margin-bottom: 0.9rem; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item ul.all-category-list-child li::before { + content: '▪ '; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item ul.all-category-list-child li:last-child { + margin-bottom: 0; +} diff --git a/en/css/layout/home-content.css b/en/css/layout/home-content.css new file mode 100644 index 000000000..e958ea97f --- /dev/null +++ b/en/css/layout/home-content.css @@ -0,0 +1,81 @@ +.home-content-container { + background: var(--background-color-1); +} +.home-content-container .home-article-list .home-article-item { + position: relative; + box-sizing: border-box; + padding: 28px; + background: var(--content-background-color); + border-radius: 0.1rem; + margin-bottom: 28px; +keep-tablet() +keep-mobile() + border: 1px solid var(--item-border-color); +keep-tablet() +keep-mobile() +} +.home-content-container .home-article-list .home-article-item:hover { + background: var(--hover-background-color); +} +.home-content-container .home-article-list .home-article-item .top-icon { + position: absolute; + top: 10px; + right: 12px; + color: var(--text-color-4); + font-size: 1.2rem; + transform: rotate(45deg); +keep-tablet() +} +.home-content-container .home-article-list .home-article-item .home-article-title { + position: relative; + margin: 0; + color: var(--text-color-2); + font-weight: bold; + font-size: 1.4rem; + line-height: 1.5; +keep-tablet() +keep-mobile() +} +.home-content-container .home-article-list .home-article-item .home-article-content { + margin: 20px 0; + color: var(--text-color-3); + text-align: justify; + word-wrap: break-word; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container { + display: flex; + align-items: center; + justify-content: space-between; + color: var(--text-color-4); + font-size: 0.8rem; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info { + letter-spacing: 0.5px; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info span { + margin-right: 10px; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info span:last-child { + margin-right: 0; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info span ul, +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info span li { + display: inline; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .read-more { + display: flex; + align-items: center; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container hr { + flex: 1; + height: 1px; + margin: 0 10px; + background: var(--border-color); + border: none; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container a { + color: var(--text-color-4); +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container a:hover { + color: var(--primary-color); +} diff --git a/en/css/layout/page.css b/en/css/layout/page.css new file mode 100644 index 000000000..1149ad192 --- /dev/null +++ b/en/css/layout/page.css @@ -0,0 +1,90 @@ +.page-container { + position: relative; + box-sizing: border-box; + width: 100%; + height: auto; + background: var(--background-color-1); +} +.page-container .page-main-content { + position: relative; + box-sizing: border-box; + padding-top: $header-height; +keep-tablet() +keep-mobile() +} +.page-container .page-main-content.is-home .transparent-1 { + background: var(--header-transparent-background-1); + -webkit-backdrop-filter: blur(4px); + backdrop-filter: blur(4px); +} +.page-container .page-main-content.is-home .transparent-2 { + background: var(--header-transparent-background-2); + -webkit-backdrop-filter: blur(5px); + backdrop-filter: blur(5px); +} +.header-shrink .page-container .page-main-content { + padding-top: $header-shrink-height; +keep-tablet() +keep-mobile() +} +.page-container .page-main-content .page-main-content-top { + position: fixed; + top: 0; + right: 0; + z-index: $z-index-5; + box-sizing: border-box; + width: 100%; + height: $header-height; +keep-tablet() +keep-mobile() +} +.page-container .page-main-content .page-main-content-top.hide { + transform: translateY(-105%); +} +.header-shrink .page-container .page-main-content .page-main-content-top { + height: $header-shrink-height; +keep-tablet() +keep-mobile() +} +.page-container .page-main-content .page-main-content-middle { + display: flex; + justify-content: center; + box-sizing: border-box; + width: 100%; + padding: $component-spacing-value 0; +keep-tablet() +keep-mobile() +} +.page-container .page-main-content .page-main-content-middle .main-content { + position: relative; + box-sizing: border-box; + width: $main-content-width; + max-width: $content-max-width; + height: 100%; +keep-tablet() +keep-mobile() +} +.has-toc .page-container .page-main-content .page-main-content-middle .main-content { + max-width: $has-toc-content-max-width; +} +.page-container .page-main-content .page-main-content-bottom { + width: 100%; +} +.page-container .post-tools { + position: fixed; + top: $header-height$component-spacing-value; + left: calc((100vw - $content-max-width / 2) - 5rem); + box-sizing: border-box; + opacity: 0; +keep-tablet() +keep-mobile() +} +.header-shrink .page-container .post-tools { + top: $header-shrink-height$component-spacing-value; +keep-tablet() +} +.page-container .right-bottom-side-tools { + position: fixed; + right: 0; + bottom: 5%; +} diff --git a/en/css/layout/tag-content.css b/en/css/layout/tag-content.css new file mode 100644 index 000000000..abf62e2c0 --- /dev/null +++ b/en/css/layout/tag-content.css @@ -0,0 +1,13 @@ +.tag-container .tag-name { + margin-bottom: $component-spacing-value; + padding-bottom: 20px; + color: var(--text-color-2); + font-weight: 600; + font-size: 1.6rem; + border-bottom: 1px solid var(--item-border-color); +keep-tablet() +keep-mobile() +} +.tag-container .tag-name i { + color: var(--text-color-2); +} diff --git a/en/css/style.css b/en/css/style.css new file mode 100644 index 000000000..da941efae --- /dev/null +++ b/en/css/style.css @@ -0,0 +1,4198 @@ +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} +.fade-in-down-animation { + animation-name: fade-in-down; + animation-duration: 1s; + animation-fill-mode: both; +} +.title-hover-animation { + position: relative; + display: inline-block; + color: var(--text-color-2); + line-height: 1.3; + vertical-align: top; + border-bottom: none; +} +.title-hover-animation::before { + position: absolute; + bottom: -4px; + left: 0; + width: 100%; + height: 2px; + background-color: var(--text-color-2); + transform: scaleX(0); + visibility: hidden; + content: ""; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease-in-out, ease-in-out; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, visibility, transform; +} +.title-hover-animation:hover::before { + transform: scaleX(1); + visibility: visible; +} +@-moz-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-webkit-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-o-keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@keyframes fade-in-down { + 0% { + transform: translateY(-50px); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } +} +@-moz-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-webkit-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-o-keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@keyframes icon-animate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.88); + } + 20%, 40%, 60%, 80% { + transform: scale(1.08); + } + 50%, 70% { + transform: scale(1.08); + } +} +@-moz-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@-webkit-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@-o-keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@keyframes img-loading-animation { + to { + transform: rotate(1turn); + } +} +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} +/* + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-MediumItalic.woff2') format('woff2'); + font-weight: 500; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +}*/ +/* + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-BoldItalic.woff2') format('woff2'); + font-weight: bold; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +}*/ +* { + transition-delay: 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color; +} +*::-webkit-scrollbar { + width: 0.4rem; + height: 0.4rem; + transition: all 0.2s ease; +} +*::-webkit-scrollbar-thumb { + background: var(--scrollbar-color); + border-radius: 0.1rem; +} +*::-webkit-scrollbar-track { + background: var(--scrollbar-background-color); +} +html, +body { + position: relative; + width: 100%; + height: 100%; + margin: 0; + padding: 0; + color: var(--text-color-3); + font-weight: 300; + font-size: 16px; + font-family: LXGW Bright, STSong, Simsun; + line-height: 1.3rem; + letter-spacing: 0.2px; + background: var(--background-color-1); +} +html::-webkit-scrollbar, +body::-webkit-scrollbar { + width: 0.6rem; + height: 0.6rem; +} +@media (max-width: 800px) { + html::-webkit-scrollbar, + body::-webkit-scrollbar { + width: 0.5rem; + height: 0.5rem; + } +} +@media (max-width: 500px) { + html::-webkit-scrollbar, + body::-webkit-scrollbar { + width: 0.4rem; + height: 0.4rem; + } +} +@media (max-width: 800px) { + html, + body { + font-size: 16px; + line-height: 1.17rem; + } +} +@media (max-width: 500px) { + html, + body { + font-size: 15.2px; + line-height: 1.17rem; + } +} +::selection { + color: #fff; + background: var(--selection-color); +} +ul, +ol, +li { + margin: 0; + padding: 0; + list-style: none; +} +a { + color: var(--text-color-2); + text-decoration: none; +} +a i, +a span { + color: var(--text-color-3); +} +a:hover, +a:active { + color: var(--primary-color); + text-decoration: none !important; +} +a:hover i, +a:active i, +a:hover span, +a:active span { + color: var(--primary-color); +} +img[lazyload] { + position: relative; + box-sizing: border-box; + width: 8rem; + height: 8rem; + box-shadow: none !important; + cursor: not-allowed; + pointer-events: none; +} +img[lazyload]::before { + position: absolute; + top: 0; + left: 0; + display: block; + width: 100%; + height: 100%; + background: var(--background-color-1); + content: ''; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, background; +} +img[lazyload]::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: block; + width: 2rem; + height: 2rem; + margin: auto; + border: 2px solid var(--text-color-6); + border-top-color: var(--selection-color); + border-left-color: var(--selection-color); + border-radius: 50%; + animation: img-loading-animation 750ms infinite linear; + content: ''; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, border; +} +button { + margin: 0; + padding: 0; + background: transparent; + border: 0; + outline: none; + cursor: pointer; +} +.btn { + position: relative; + display: inline-block; + padding: 0.4rem 1rem; + white-space: nowrap; + text-align: center; + background: var(--background-color-1); + border-radius: 1px; + cursor: pointer; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform; +} +.btn:hover { + color: var(--background-color-1); + background: var(--primary-color); +} +.flex-center { + display: flex; + align-items: center; + justify-content: center; + font-size: 1.2rem; +} +.clear::after { + display: block; + clear: both; + height: 0; + overflow: hidden; + visibility: hidden; + content: ''; +} +.tooltip { + position: relative; + box-sizing: border-box; +} +.tooltip:hover .tooltip-content { + display: inline-block; +} +.tooltip.show-img .tooltip-content { + display: none !important; +} +.tooltip .tooltip-content { + position: absolute; + top: -0.4rem; + left: 50%; + z-index: 1009; + display: none; + box-sizing: border-box; + padding: 0.2rem 0.6rem; + color: var(--text-color-6); + font-size: 0.8rem; + letter-spacing: 0.8px; + white-space: nowrap; + background: var(--text-color-1); + border-radius: 0.3rem; + transform: translateX(-50%) translateY(-100%); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, display; + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; +} +.tooltip-img { + position: relative; + box-sizing: border-box; +} +.tooltip-img.show-img .tooltip-img-box { + display: flex; +} +.tooltip-img .tooltip-img-box { + position: absolute; + top: -0.4rem; + left: 50%; + z-index: 1008; + display: none; + align-items: center; + justify-content: center; + box-sizing: border-box; + min-height: 6rem; + background: var(--text-color-6); + border: 0.2rem solid var(--text-color-3); + border-radius: 0.3rem; + transform: translateX(-50%) translateY(-100%); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, display; + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; +} +.tooltip-img .tooltip-img-box img { + display: block; + max-height: 25rem; +} +.keep-markdown-body { + font-size: 1rem; +} +.keep-markdown-body blockquote { + box-sizing: border-box; + margin: 1.4rem 0; + color: var(--text-color-3); + background: var(--background-color-1); + border-left: 4px solid var(--blockquote-padding-color); +} +.keep-markdown-body blockquote p, +.keep-markdown-body blockquote ul, +.keep-markdown-body blockquote ol { + padding: 0.4rem 0.4rem 0.4rem 0.8rem; + color: var(--text-color-4); +} +.keep-markdown-body p { + color: var(--text-color-3); + line-height: 1.9; +} +.keep-markdown-body a { + position: relative; + box-sizing: border-box; + padding-bottom: 0.1rem; + text-decoration: none; + overflow-wrap: break-word; + border-bottom: 1px solid var(--text-color-5); + outline: 0; + cursor: pointer; +} +.keep-markdown-body a .fas, +.keep-markdown-body a .far, +.keep-markdown-body a .fab { + position: relative; + margin: 0 0.2rem 0 0.4rem; + color: var(--text-color-4); + font-size: 0.88rem; +} +.keep-markdown-body a:hover { + text-decoration: underline; +} +.keep-markdown-body a:hover::after { + background: var(--primary-color); +} +.keep-markdown-body strong { + color: var(--text-color-3); +} +.keep-markdown-body em { + color: var(--text-color-3); +} +.keep-markdown-body ul li, +.keep-markdown-body ol li { + margin-left: 1rem; + line-height: 2rem; +} +.keep-markdown-body ul li { + list-style: disc; +} +.keep-markdown-body ul li ul li { + list-style: circle; +} +.keep-markdown-body ul li ul li ul li { + list-style: square; +} +.keep-markdown-body ol li { + list-style: decimal; +} +.keep-markdown-body ol li ol li { + list-style: upper-alpha; +} +.keep-markdown-body ol li ol li ol li { + list-style: upper-roman; +} +.keep-markdown-body li { + color: var(--text-color-3); +} +.keep-markdown-body h1, +.keep-markdown-body h2, +.keep-markdown-body h3, +.keep-markdown-body h4, +.keep-markdown-body h5, +.keep-markdown-body h6 { + color: var(--text-color-2); + line-height: 1.5; +} +@media (max-width: 800px) { + .keep-markdown-body h1, + .keep-markdown-body h2, + .keep-markdown-body h3, + .keep-markdown-body h4, + .keep-markdown-body h5, + .keep-markdown-body h6 { + line-height: 1.25; + } +} +.keep-markdown-body h1 { + font-weight: 500; + font-size: 1.8rem; +} +@media (max-width: 800px) { + .keep-markdown-body h1 { + font-size: 1.7rem; + } +} +.keep-markdown-body h2 { + font-weight: 500; + font-size: 1.7rem; +} +@media (max-width: 800px) { + .keep-markdown-body h2 { + font-size: 1.6rem; + } +} +.keep-markdown-body h3 { + font-weight: 500; + font-size: 1.6rem; +} +@media (max-width: 800px) { + .keep-markdown-body h3 { + font-size: 1.5rem; + } +} +.keep-markdown-body h4 { + font-weight: 500; + font-size: 1.5rem; +} +@media (max-width: 800px) { + .keep-markdown-body h4 { + font-size: 1.4rem; + } +} +.keep-markdown-body h5 { + font-weight: 500; + font-size: 1.28rem; +} +@media (max-width: 800px) { + .keep-markdown-body h5 { + font-size: 1.18rem; + } +} +.keep-markdown-body h6 { + font-weight: 500; + font-size: 1.2rem; + line-height: 1.2; +} +@media (max-width: 800px) { + .keep-markdown-body h6 { + font-size: 1.1rem; + line-height: 1.1; + } +} +.keep-markdown-body img { + position: relative; + display: block; + box-sizing: border-box; + max-width: 100%; + box-shadow: 0 0 0.2rem var(--shadow-color); + cursor: zoom-in; + opacity: 1; + margin: 0.8rem 0 0.2rem; +} +.keep-markdown-body img.hide { + opacity: 0; +} +.keep-markdown-body img[lazyload] { + margin: 0.8rem auto 0.2rem; +} +.keep-markdown-body > table { + width: 100%; + overflow: auto; + border-collapse: collapse; + border-spacing: 0; +} +@media (max-width: 500px) { + .keep-markdown-body > table { + table-layout: fixed; + } +} +.keep-markdown-body > table td, +.keep-markdown-body > table th { + padding: 0; +} +.keep-markdown-body > table th { + font-weight: 600; +} +.keep-markdown-body > table td, +.keep-markdown-body > table th { + padding: 0.4rem 1rem; + border: 1px solid var(--border-color); +} +.keep-markdown-body > table tr { + background-color: var(--background-color-1); + border: 1px solid var(--text-color-6); +} +.keep-markdown-body > table tr:nth-child(2n) { + background-color: var(--background-color-2); +} +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} +:root { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; +} +@media (prefers-color-scheme: light) { + :root { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; + } +} +@media (prefers-color-scheme: dark) { + :root { + --toolbar-foreground: #d1d1d1; + --toolbar-background: #21232b; + --code-foreground: #d2d2d2; + --code-background: #181a20; + --highlight-background: #21232b; + --highlight-foreground: #d2d2d2; + --highlight-comment: #969896; + --highlight-red: #c66; + --highlight-orange: #de935f; + --highlight-yellow: #f0c674; + --highlight-green: #b5bd68; + --highlight-aqua: #8abeb7; + --highlight-blue: #81a2be; + --highlight-purple: #b294bb; + --highlight-gutter-color: #d3d3d3; + --highlight-gutter-bg-color: #181a20; + --code-border: #2a2b30; + } +} +.light-mode { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; +} +.dark-mode { + --toolbar-foreground: #d1d1d1; + --toolbar-background: #21232b; + --code-foreground: #d2d2d2; + --code-background: #181a20; + --highlight-background: #21232b; + --highlight-foreground: #d2d2d2; + --highlight-comment: #969896; + --highlight-red: #c66; + --highlight-orange: #de935f; + --highlight-yellow: #f0c674; + --highlight-green: #b5bd68; + --highlight-aqua: #8abeb7; + --highlight-blue: #81a2be; + --highlight-purple: #b294bb; + --highlight-gutter-color: #d3d3d3; + --highlight-gutter-bg-color: #181a20; + --code-border: #2a2b30; +} +pre, +.highlight { + margin: 1.5rem; + padding: 0; + overflow: auto; + color: var(--highlight-foreground); + font-size: 0.96rem; + line-height: 1.5rem; + background: var(--highlight-background); + border-radius: 2px; + -ms-text-size-adjust: none; + -moz-text-size-adjust: none; + -webkit-text-size-adjust: none; +} +pre, +code { + font-family: Fira Code, LXGW Bright; +} +code { + padding: 0px 2px 0px 2px; + color: var(--code-foreground); + font-size: 0.9rem; + word-break: break-all; + word-wrap: break-word; + background: var(--code-background); + border-radius: 2px; + border: 1px solid var(--code-border); +} +pre { + padding: 0.6rem; +} +pre code { + padding: 0; + color: var(--highlight-foreground); + text-shadow: none; + background: none; +} +.highlight { + border-bottom-right-radius: 1px; + border-bottom-left-radius: 1px; + border-left: 1px solid var(--code-border); + border-right: 1px solid var(--code-border); + border-bottom: 1px solid var(--code-border); + padding-left: 10px; + padding-right: 10px; + word-wrap: break-all; + white-space: pre-wrap; +} +.highlight pre { + margin: 0; + padding: 0.6rem; + border: none; + font-family: Fira Code, LXGW Bright; + word-break: break-all; + white-space: pre-wrap; + font-size: 0.9rem; + text-align: left; +} +.highlight table { + width: auto; + margin: 0; + border: none; + border-spacing: unset; +} +.highlight td { + padding: 0; + border: none; +} +.highlight figcaption { + margin-bottom: 1rem; + color: var(--highlight-foreground); + font-size: 1rem; + line-height: 1rem; +} +.highlight figcaption a { + float: right; + color: var(--highlight-foreground); +} +.highlight figcaption a:hover { + border-bottom-color: var(--highlight-foreground); +} +.highlight .gutter pre { + padding-right: 0.6rem; + padding-left: 0.6rem; + color: var(--highlight-gutter-color); + text-align: center; + background-color: var(--highlight-gutter-bg-color); +} +.highlight .code pre { + width: 100%; + padding-right: 0rem; + padding-left: 0.6rem; + background-color: var(--highlight-background); +} +.highlight .line { + height: 1.5rem; + color: var(--highlight-foreground); +} +.highlight .line .language-javascript { + color: var(--highlight-foreground); +} +.highlight .line .attr { + color: var(--highlight-foreground); +} +.highlight .line .string { + color: var(--highlight-foreground); +} +.gutter { + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; + color: var(--highlight-gutter-color); + background: var(--highlight-gutter-bg-color); +} +.gutter .line { + color: var(--highlight-gutter-color); +} +.gist table { + width: auto; +} +.gist table td { + border: none; +} +pre .deletion { + background: var(--highlight-deletion); +} +pre .addition { + background: var(--highlight-addition); +} +pre .meta { + color: var(--highlight-purple); +} +pre .comment { + color: var(--highlight-comment); +} +pre .variable, +pre .attribute, +pre .tag, +pre .regexp, +pre .ruby .constant, +pre .xml .tag .title, +pre .xml .pi, +pre .xml .doctype, +pre .html .doctype, +pre .css .id, +pre .css .class, +pre .css .pseudo { + color: var(--highlight-red); +} +pre .property { + color: var(--highlight-blue); +} +pre .number, +pre .preprocessor, +pre .built_in, +pre .literal, +pre .params, +pre .constant, +pre .command { + color: var(--highlight-orange); +} +pre .ruby .class .title, +pre .css .rules .attribute, +pre .string, +pre .value, +pre .inheritance, +pre .header, +pre .ruby .symbol, +pre .xml .cdata, +pre .special, +pre .number, +pre .formula { + color: var(--highlight-green); +} +pre .title, +pre .css .hexcolor { + color: var(--highlight-aqua); +} +pre .function, +pre .python .decorator, +pre .python .title, +pre .ruby .function .title, +pre .ruby .title .keyword, +pre .perl .sub, +pre .javascript .title, +pre .coffeescript .title { + color: var(--highlight-blue); +} +pre .keyword, +pre .javascript .function { + color: var(--highlight-purple); +} +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} +.highlight-container { + position: relative; + box-sizing: border-box; + margin: 1.4rem 0; +} +.highlight-container.mac { + margin: 1.4rem 0 1.8rem 0; + box-shadow: 0 0.8rem 2rem 0 rgba(0,0,0,0.4); +} +.highlight-container.mac:hover .code-tools-box .copy { + opacity: 1; +} +.highlight-container.mac .code-tools-box { + justify-content: flex-end; + padding: 0.4rem 0.6rem 0.7rem 0.4rem; + background: #21252b; +} +.highlight-container.mac .code-tools-box::before { + position: absolute; + left: 0.8rem; + width: 0.76rem; + height: 0.76rem; + background: #fc625d; + border-radius: 50%; + box-shadow: 1.3rem 0 #fdbc40, 2.6rem 0 #35cd4b; + content: ''; +} +.highlight-container.mac .code-tools-box.folded { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.highlight-container.mac .code-tools-box.folded .copy { + display: none; +} +.highlight-container.mac .code-tools-box .code-lang { + order: 1; +} +.highlight-container.mac .code-tools-box .fold { + order: 2; + padding: 0 0.1rem 0 0.6rem; +} +.highlight-container.mac .code-tools-box .fold i { + color: #ccc; +} +.highlight-container.mac .code-tools-box .copy { + position: absolute; + top: 3rem; + right: 0.5rem; + padding: 0 0.1rem; + opacity: 0; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease-in-out; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, opacity; +} +.highlight-container.mac .code-tools-box .copy i { + font-size: 1rem; +} +.highlight-container .code-tools-box { + display: flex; + align-items: center; + justify-content: space-between; + box-sizing: border-box; + width: 100%; + padding: 0.3rem 0.4rem; + color: var(--toolbar-foreground); + background: var(--toolbar-background); + border-top-left-radius: 1px; + border-top-right-radius: 1px; + border-left: 1px solid var(--code-border); + border-right: 1px solid var(--code-border); + border-top: 1px solid var(--code-border); +} +.highlight-container .code-tools-box.folded { + border-bottom-right-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; +} +.highlight-container .code-tools-box .code-lang { + justify-content: flex-start; + margin-left: 0.2rem; + font-weight: $defalut-font-weight; + font-size: 0.96rem; + font-family: Fira Code, LXGW Bright; + color: var(--text-color-5); +} +.highlight-container .code-tools-box .tool { + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; + cursor: pointer; +} +.highlight-container .code-tools-box .tool i { + font-size: 0.8rem; + color: var(--text-color-5); +} +.highlight-container .code-tools-box .fold { + padding: 0 0.4rem 0 0.2rem; +} +.highlight-container figure.highlight { + margin: 0; +} +.highlight-container figure.highlight.folded { + height: 0; +} +:root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +@media (prefers-color-scheme: light) { + :root { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; + } +} +@media (prefers-color-scheme: dark) { + :root { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; + } +} +.light-mode { + --first-screen-img-dynamic: url("/images/bg.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #fff; + --background-color-2: #f7f7f7; + --background-color-3: #f0f0f0; + --content-background-color: #fff; + --hover-background-color: #fafafa; + --text-color-1: #2e2e2e; + --text-color-2: #474747; + --text-color-3: #333; + --text-color-4: #707070; + --text-color-5: #adadad; + --text-color-6: #ebebeb; + --home-text-color: #3b3a40; + --toc-text-color: #5c5c5c; + --badge-color: #f0f0f0; + --badge-background-color: #858585; + --border-color: #dfe2e5; + --selection-color: #0075eb; + --shadow-color: rgba(79,79,79,0.2); + --shadow-hover-color: rgba(0,0,0,0.3); + --scrollbar-color: #474747; + --scrollbar-background-color: #e6e6e6; + --toc-scrollbar-color: #f3f3f3; + --toc-border-color: #eaeaea; + --copyright-info-color: #c03; + --avatar-background-color: #005cb8; + --header-transparent-background-1: rgba(255,255,255,0); + --header-transparent-background-2: rgba(255,255,255,0); + --pjax-progress-bar-color: linear-gradient(45deg, #f10006, #ef5b00, #e59c01, #19ca05, #00cab5, #0264c8, #c303c3); + --article-aging-tips-color: #b78d0f; + --article-aging-tips-background-color: rgba(183,141,15,0.1); + --article-aging-tips-border-color: rgba(183,141,15,0.6); + --item-border-color: rgba(112,112,112,0.15); + --blockquote-padding-color: #dfe2e5; +} +.dark-mode { + --first-screen-img-dynamic: url("/images/bg_dark.jpg"); + --primary-color: #06c; + --primary-color-light-1: #0075eb; + --primary-color-light-2: #0a85ff; + --primary-color-dark-1: #005cb8; + --primary-color-dark-2: #0052a3; + --background-color-1: #1b1d23; + --background-color-2: #21232b; + --background-color-3: #272a32; + --content-background-color: #1b1d23; + --hover-background-color: #21232b; + --text-color-1: #d6d6d6; + --text-color-2: #d3d3d3; + --text-color-3: #d1d1d1; + --text-color-4: #a7a7a7; + --text-color-5: #696969; + --text-color-6: #3f3f3f; + --home-text-color: #fff; + --toc-text-color: #b2b2b2; + --badge-color: #2f323c; + --badge-background-color: #e3e3e3; + --border-color: #212b30; + --selection-color: #005ebc; + --shadow-color: rgba(0,0,0,0.35); + --shadow-hover-color: rgba(128,128,128,0.28); + --scrollbar-color: #181a20; + --scrollbar-background-color: #424756; + --toc-scrollbar-color: #414148; + --toc-border-color: #252730; + --copyright-info-color: #a30029; + --avatar-background-color: #004a93; + --header-transparent-background-1: rgba(27,29,35,0); + --header-transparent-background-2: rgba(27,29,35,0); + --pjax-progress-bar-color: linear-gradient(45deg, #ea404a, #ea722f, #e9a71f, #67e559, #18ecec, #1b85f1, #ee1dee); + --article-aging-tips-color: #ecc34d; + --article-aging-tips-background-color: rgba(236,195,77,0.1); + --article-aging-tips-border-color: rgba(236,195,77,0.6); + --item-border-color: rgba(167,167,167,0.1); + --blockquote-padding-color: #2f323c; +} +:root { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; +} +@media (prefers-color-scheme: light) { + :root { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; + } +} +@media (prefers-color-scheme: dark) { + :root { + --toolbar-foreground: #d1d1d1; + --toolbar-background: #21232b; + --code-foreground: #d2d2d2; + --code-background: #181a20; + --highlight-background: #21232b; + --highlight-foreground: #d2d2d2; + --highlight-comment: #969896; + --highlight-red: #c66; + --highlight-orange: #de935f; + --highlight-yellow: #f0c674; + --highlight-green: #b5bd68; + --highlight-aqua: #8abeb7; + --highlight-blue: #81a2be; + --highlight-purple: #b294bb; + --highlight-gutter-color: #d3d3d3; + --highlight-gutter-bg-color: #181a20; + --code-border: #2a2b30; + } +} +.light-mode { + --toolbar-foreground: #f8f8f8; + --toolbar-background: #f8f8f8; + --code-foreground: #373737; + --code-background: #f2f2f2; + --highlight-background: #f8f8f8; + --highlight-foreground: #373737; + --highlight-comment: #8e908c; + --highlight-red: #c82829; + --highlight-orange: #f5871f; + --highlight-yellow: #eab700; + --highlight-green: #718c00; + --highlight-aqua: #3e999f; + --highlight-blue: #4271ae; + --highlight-purple: #8959a8; + --highlight-gutter-color: #8e908c; + --highlight-gutter-bg-color: #f8f8f8; + --code-border: #e7eaed; +} +.dark-mode { + --toolbar-foreground: #d1d1d1; + --toolbar-background: #21232b; + --code-foreground: #d2d2d2; + --code-background: #181a20; + --highlight-background: #21232b; + --highlight-foreground: #d2d2d2; + --highlight-comment: #969896; + --highlight-red: #c66; + --highlight-orange: #de935f; + --highlight-yellow: #f0c674; + --highlight-green: #b5bd68; + --highlight-aqua: #8abeb7; + --highlight-blue: #81a2be; + --highlight-purple: #b294bb; + --highlight-gutter-color: #d3d3d3; + --highlight-gutter-bg-color: #181a20; + --code-border: #2a2b30; +} +.page-container { + position: relative; + box-sizing: border-box; + width: 100%; + height: auto; + background: var(--background-color-1); +} +.page-container .page-main-content { + position: relative; + box-sizing: border-box; + padding-top: 70px; +} +.page-container .page-main-content.is-home .transparent-1 { + background: var(--header-transparent-background-1); + -webkit-backdrop-filter: blur(4px); + backdrop-filter: blur(4px); +} +.page-container .page-main-content.is-home .transparent-2 { + background: var(--header-transparent-background-2); + -webkit-backdrop-filter: blur(5px); + backdrop-filter: blur(5px); +} +.header-shrink .page-container .page-main-content { + padding-top: 50.4px; +} +@media (max-width: 800px) { + .header-shrink .page-container .page-main-content { + padding-top: 45.36px; + } +} +@media (max-width: 500px) { + .header-shrink .page-container .page-main-content { + padding-top: 40.32px; + } +} +@media (max-width: 800px) { + .page-container .page-main-content { + padding-top: 63px; + } +} +@media (max-width: 500px) { + .page-container .page-main-content { + padding-top: 56px; + } +} +.page-container .page-main-content .page-main-content-top { + position: fixed; + top: 0; + right: 0; + z-index: 1005; + box-sizing: border-box; + width: 100%; + height: 70px; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease-out, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.3s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform, height; +} +.page-container .page-main-content .page-main-content-top.hide { + transform: translateY(-105%); +} +.header-shrink .page-container .page-main-content .page-main-content-top { + height: 50.4px; +} +@media (max-width: 800px) { + .header-shrink .page-container .page-main-content .page-main-content-top { + height: 45.36px; + } +} +@media (max-width: 500px) { + .header-shrink .page-container .page-main-content .page-main-content-top { + height: 40.32px; + } +} +@media (max-width: 800px) { + .page-container .page-main-content .page-main-content-top { + height: 63px; + } +} +@media (max-width: 500px) { + .page-container .page-main-content .page-main-content-top { + height: 56px; + } +} +.page-container .page-main-content .page-main-content-middle { + display: flex; + justify-content: center; + box-sizing: border-box; + width: 100%; + padding: 38px 0; +} +@media (max-width: 800px) { + .page-container .page-main-content .page-main-content-middle { + padding: 30.400000000000002px 0; + } +} +@media (max-width: 500px) { + .page-container .page-main-content .page-main-content-middle { + padding: 22.8px 0; + } +} +.page-container .page-main-content .page-main-content-middle .main-content { + position: relative; + box-sizing: border-box; + width: 90%; + max-width: 928px; + height: 100%; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.1s, 0.1s; + transition-property: color, background, box-shadow, border-color, max-width, width; +} +.has-toc .page-container .page-main-content .page-main-content-middle .main-content { + max-width: 1113.6px; +} +@media (max-width: 800px) { + .page-container .page-main-content .page-main-content-middle .main-content { + width: 86%; + } +} +@media (max-width: 500px) { + .page-container .page-main-content .page-main-content-middle .main-content { + width: 90%; + } +} +.page-container .page-main-content .page-main-content-bottom { + width: 100%; +} +.page-container .post-tools { + position: fixed; + top: 108px; + left: calc((100vw - 928px / 2) - 5rem); + box-sizing: border-box; + opacity: 0; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s, 0.2s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, top, transform, opacity, left; +} +.header-shrink .page-container .post-tools { + top: 88.4px; +} +@media (max-width: 800px) { + .header-shrink .page-container .post-tools { + top: 83.36px; + } +} +@media (max-width: 800px) { + .page-container .post-tools { + top: 101px; + transform: scale(0.82); + } +} +@media (max-width: 500px) { + .page-container .post-tools { + display: none; + } +} +.page-container .right-bottom-side-tools { + position: fixed; + right: 0; + bottom: 5%; +} +.search-pop-overlay { + position: fixed; + top: 0; + left: 0; + z-index: 1008; + display: flex; + width: 100%; + height: 100%; + background: rgba(0,0,0,0); + visibility: hidden; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.3s, 0.3s; + transition-property: color, background, box-shadow, border-color, visibility, background; +} +.search-pop-overlay.active { + background: rgba(0,0,0,0.35); + visibility: visible; +} +.search-pop-overlay.active .search-popup { + transform: scale(1); +} +.search-pop-overlay .search-popup { + z-index: 1006; + width: 70%; + height: 80%; + margin: auto; + background: var(--background-color-1); + border-radius: 0.4rem; + transform: scale(0); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.3s; + transition-property: color, background, box-shadow, border-color, transform; +} +@media (max-width: 800px) { + .search-pop-overlay .search-popup { + width: 80%; + } +} +@media (max-width: 500px) { + .search-pop-overlay .search-popup { + width: 90%; + } +} +.search-pop-overlay .search-popup .search-header { + display: flex; + align-items: center; + height: 3rem; + padding: 0 1rem; + background: var(--text-color-6); + border-top-left-radius: 0.2rem; + border-top-right-radius: 0.2rem; +} +.search-pop-overlay .search-popup .search-header .search-input-field-pre { + margin-right: 0.2rem; + color: var(--text-color-3); + font-size: 1.3rem; + cursor: pointer; +} +.search-pop-overlay .search-popup .search-header .search-input-container { + flex-grow: 1; + padding: 0.2rem; +} +.search-pop-overlay .search-popup .search-header .search-input-container .search-input { + width: 100%; + color: var(--text-color-3); + font-size: 1.2rem; + background: transparent; + border: 0; + outline: 0; +} +.search-pop-overlay .search-popup .search-header .search-input-container .search-input::-webkit-search-cancel-button { + display: none; +} +.search-pop-overlay .search-popup .search-header .search-input-container .search-input::-webkit-input-placeholder { + color: var(--text-color-4); + font-size: 1rem; +} +.search-pop-overlay .search-popup .search-header .close-popup-btn { + color: var(--text-color-3); + font-size: 1.2rem; + cursor: pointer; +} +.search-pop-overlay .search-popup .search-header .close-popup-btn:hover { + color: var(--text-color-1); +} +.search-pop-overlay .search-popup #search-result { + position: relative; + display: flex; + box-sizing: border-box; + height: calc(100% - 3rem); + padding: 0.3rem 1.5rem; + overflow: auto; +} +.search-pop-overlay .search-popup #search-result .search-result-list { + width: 100%; + height: 100%; + font-size: 1rem; +} +.search-pop-overlay .search-popup #search-result .search-result-list li { + box-sizing: border-box; + margin: 0.8rem 0; + padding: 0.8rem 0; + border-bottom: 0.1rem dashed var(--border-color); +} +.search-pop-overlay .search-popup #search-result .search-result-list li:last-child { + border-bottom: none; +} +.search-pop-overlay .search-popup #search-result .search-result-list li .search-result-title { + position: relative; + display: flex; + align-items: center; + margin-bottom: 0.8rem; + padding-left: 1rem; + font-weight: bold; +} +.search-pop-overlay .search-popup #search-result .search-result-list li .search-result-title::after { + position: absolute; + top: 50%; + left: 0; + width: 0.4rem; + height: 0.4rem; + background: var(--text-color-3); + border-radius: 50%; + transform: translateY(-50%); + content: ''; +} +.search-pop-overlay .search-popup #search-result .search-result-list li .search-result { + margin: 0; + padding-left: 1rem; + line-height: 2rem; + word-wrap: break-word; +} +.search-pop-overlay .search-popup #search-result .search-result-list li a:hover { + color: var(--text-color-3); +} +.search-pop-overlay .search-popup #search-result .search-result-list li .search-keyword { + color: var(--primary-color); + font-weight: bold; + border-bottom: 0.1rem dashed var(--primary-color); +} +.search-pop-overlay .search-popup #search-result #no-result { + margin: auto; + color: var(--text-color-4); +} +.post-toc-wrap { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + overflow-y: auto; + font-size: 0.92rem; +} +.post-toc-wrap::-webkit-scrollbar-thumb { + background: var(--toc-scrollbar-color); + border-radius: 0.3rem; +} +.post-toc-wrap::-webkit-scrollbar-track { + background: transparent; +} +.post-toc-wrap .post-toc ol { + margin: 0; + padding: 0 0.1rem 0.8rem 0.6rem; + text-align: left; + list-style: none; +} +.post-toc-wrap .post-toc ol:last-child { + padding-bottom: 0; +} +.post-toc-wrap .post-toc ol > ol { + padding-left: 0; +} +.post-toc-wrap .post-toc ol a { + transition-property: all; +} +.post-toc-wrap .post-toc .nav-item { + margin-bottom: 0.2rem; + overflow: hidden; + line-height: 1.8; + white-space: nowrap; + text-overflow: ellipsis; +} +.post-toc-wrap .post-toc .nav .nav-child { + display: none; +} +.post-toc-wrap .post-toc .nav .active > .nav-child { + display: block; +} +.post-toc-wrap .post-toc .nav .active-current > .nav-child { + display: block; +} +.post-toc-wrap .post-toc .nav .active-current > .nav-child > .nav-item { + display: block; +} +.post-toc-wrap .post-toc .nav .nav-number, +.post-toc-wrap .post-toc .nav .nav-text { + color: var(--toc-text-color); +} +.post-toc-wrap .post-toc .nav .active > a .nav-number, +.post-toc-wrap .post-toc .nav .active > a .nav-text { + color: var(--primary-color); +} +.post-toc-wrap .post-toc .nav .active-current > a .nav-number, +.post-toc-wrap .post-toc .nav .active-current > a .nav-text { + color: var(--primary-color); +} +.gitalk-comment-container { + font-family: LXGW Bright; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, color, background; +} +.gitalk-comment-container .gt-container .gt-btn { + font-family: LXGW Bright; + background-color: var(--primary-color-light-1); + border: 1px solid var(--primary-color-light-1); + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, color, background; +} +.gitalk-comment-container .gt-container .gt-initing-text { + font-family: LXGW Bright; + color: var(--text-color-3); +} +.gitalk-comment-container .gt-container .gt-meta { + border: none; +} +.gitalk-comment-container .gt-container .gt-meta .gt-counts { + color: var(--text-color-3); +} +.gitalk-comment-container .gt-container .gt-meta .gt-counts a { + color: var(--primary-color); +} +.gitalk-comment-container .gt-container .gt-meta .gt-user .gt-user-name { + color: var(--text-color-3); +} +.gitalk-comment-container .gt-container .gt-meta .gt-user svg path { + fill: var(--text-color-3); +} +.gitalk-comment-container .gt-container .gt-meta .gt-popup { + font-family: LXGW Bright; + top: 2.6rem; + background: var(--background-color-2); + border: 1px solid var(--border-color); +} +.gitalk-comment-container .gt-container .gt-header .gt-header-comment textarea { + color: var(--text-color-3); + background-color: var(--background-color-2); + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, color, background; +} +.gitalk-comment-container .gt-container .gt-header .gt-header-comment .gt-header-controls .gt-btn-preview { + color: #fff; + background-color: var(--primary-color-light-1); +} +.gitalk-comment-container .gt-container .gt-comments .gt-comments-null { + font-family: LXGW Bright; + color: var(--text-color-4); +} +.gitalk-comment-container .gt-container .gt-comments .gt-comment-content { + font-family: LXGW Bright; + background-color: var(--background-color-2); + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, color, background; +} +.gitalk-comment-container .gt-container .gt-comments .gt-comment-content:hover { + box-shadow: none; +} +.gitalk-comment-container .gt-container .gt-comments .gt-comment-content .gt-comment-body p, +.gitalk-comment-container .gt-container .gt-comments .gt-comment-content .gt-comment-body li { + color: var(--text-color-3); +} +.gitalk-comment-container .gt-container .gt-comments .gt-comment-content .gt-comment-body .email-fragment { + color: var(--text-color-3); +} +.gitalk-comment-container .gt-container .gt-comments .gt-comment-content .notranslate { + background-color: var(--background-color-3); +} +.gitalk-comment-container .gt-container .gt-comments .gt-comment-content .notranslate code { + font-family: Fira Code; + color: var(--text-color-2); +} +.gitalk-comment-container .gt-container .gt-comments .gt-comment-content pre { + font-family: Fira Code; + background-color: var(--background-color-3); +} +.comments-container { + display: inline-block; + width: 100%; + margin-top: 38px; +} +.comments-container #comments-anchor { + width: 100%; + height: 0.8rem; +} +.comments-container .comment-area-title { + width: 100%; + margin: 0.8rem 0; + color: var(--text-color-3); + font-size: 1.38rem; +} +.comments-container .comment-area-title i { + color: var(--text-color-3); +} +@media (max-width: 800px) { + .comments-container .comment-area-title { + margin: 0.4rem 0; + font-size: 1.2rem; + } +} +.progress-bar-container { + position: fixed; + top: 0; + left: 0; + z-index: 1009; + width: 100%; +} +.progress-bar-container .pjax-progress-bar { + position: absolute; + top: 0; + left: 0; + z-index: 1008; + width: 0; + height: 2px; + background: var(--pjax-progress-bar-color); + visibility: hidden; + opacity: 0; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.1s, 0.1s; + transition-property: color, background, box-shadow, border-color, width, opacity; +} +.progress-bar-container .pjax-progress-bar.show { + visibility: visible; + opacity: 1; +} +.progress-bar-container .pjax-progress-icon { + position: absolute; + top: 0.4rem; + right: 0.3rem; + z-index: 1008; + color: var(--text-color-3); + font-size: 1.1rem; + visibility: hidden; +} +@media (max-width: 800px) { + .progress-bar-container .pjax-progress-icon { + top: 0.3rem; + right: 0.2rem; + font-size: 1rem; + } +} +.progress-bar-container .pjax-progress-icon.show { + visibility: visible; +} +.header-wrapper { + display: flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + width: 100%; + height: 100%; + padding-top: 2px; + background: var(--background-color-1); + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); + border-top: none; + border-left: none; + border-right: none; +} +.header-wrapper .header-content { + position: relative; + z-index: 1005; + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + width: 90%; + max-width: 928px; + height: 100%; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.1s, 0.1s; + transition-property: color, background, box-shadow, border-color, max-width, width; + margin-right: 2rem; +keep-table() +} +@media (max-width: 500px) { + .header-wrapper .header-content { + margin-right: 0.9rem; + } +} +.header-wrapper .header-content.has-first-screen { + max-width: 1113.6px; +} +.has-toc .header-wrapper .header-content { + max-width: 1113.6px; +} +@media (max-width: 800px) { + .header-wrapper .header-content { + width: 86%; + } +} +@media (max-width: 500px) { + .header-wrapper .header-content { + width: 90%; + } +} +.header-wrapper .header-content .left { + display: flex; + align-items: center; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform; +} +.header-shrink .header-wrapper .header-content .left { + transform: scale(0.72); + transform-origin: left; +} +.header-wrapper .header-content .left .logo-image { + width: 46px; + height: 46px; + margin-right: 8px; +} +@media (max-width: 800px) { + .header-wrapper .header-content .left .logo-image { + width: 41.4px; + height: 41.4px; + } +} +@media (max-width: 500px) { + .header-wrapper .header-content .left .logo-image { + width: 36.800000000000004px; + height: 36.800000000000004px; + } +} +.header-wrapper .header-content .left .logo-image img { + width: 100%; + border-radius: 6px; +} +.header-wrapper .header-content .left .logo-title { + color: var(--home-text-color); + font-weight: bold; + font-size: 1.6rem; + line-height: 1; + letter-spacing: 1px; +} +@media (max-width: 800px) { + .header-wrapper .header-content .left .logo-title { + font-size: 1.44rem; + } +} +@media (max-width: 500px) { + .header-wrapper .header-content .left .logo-title { + font-size: 1.28rem; + } +} +.header-wrapper .header-content .right .pc .menu-list { + display: flex; + align-items: center; +} +@media (max-width: 800px) { + .header-wrapper .header-content .right .pc .menu-list { + display: none; + } +} +.header-wrapper .header-content .right .pc .menu-list .menu-item { + position: relative; + float: left; + margin-left: 2rem; + color: var(--text-color-3); + font-size: 1rem; + cursor: pointer; +} +.header-wrapper .header-content .right .pc .menu-list .menu-item:first-child { + margin-left: 0; +} +.header-wrapper .header-content .right .pc .menu-list .menu-item a:hover::after, +.header-wrapper .header-content .right .pc .menu-list .menu-item .active::after { + position: absolute; + bottom: -10px; + left: 50%; + width: 100%; + height: 2px; + background: var(--primary-color); + transform: translateX(-50%); + content: ''; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform, bottom; +} +.header-shrink .header-wrapper .header-content .right .pc .menu-list .menu-item a:hover::after, +.header-shrink .header-wrapper .header-content .right .pc .menu-list .menu-item .active::after { + bottom: -13.2px; +} +.header-wrapper .header-content .right .pc .menu-list .menu-item.search { + margin-left: 26px; + font-size: 1.1rem; +} +.header-wrapper .header-content .right .pc .menu-list .menu-item.search i { + color: var(--text-color-3); +} +.header-wrapper .header-content .right .mobile { + display: flex; + align-items: center; + justify-content: space-between; +} +.header-wrapper .header-content .right .mobile .icon-item { + position: relative; + display: none; + width: 20px; + height: 20px; + margin-left: 12px; + color: var(--text-color-3); + font-size: 18px; + cursor: pointer; +} +.header-wrapper .header-content .right .mobile .icon-item i { + color: var(--text-color-3); +} +.header-wrapper .header-content .right .mobile .icon-item:first-child { + margin-left: 0; +} +@media (max-width: 800px) { + .header-wrapper .header-content .right .mobile .icon-item { + display: flex; + align-items: center; + justify-content: center; + } +} +.header-wrapper .header-content .right .mobile .menu-bar .menu-bar-middle { + position: relative; + width: 18px; + height: 2.5px; + background: var(--text-color-3); +} +.header-drawer-show .header-wrapper .header-content .right .mobile .menu-bar .menu-bar-middle { + background: transparent; +} +.header-wrapper .header-content .right .mobile .menu-bar .menu-bar-middle::before, +.header-wrapper .header-content .right .mobile .menu-bar .menu-bar-middle::after { + position: absolute; + left: 0; + width: 100%; + height: 2.5px; + background: var(--text-color-3); + content: ''; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.38s; + transition-property: color, background, box-shadow, border-color, transform; +} +.header-wrapper .header-content .right .mobile .menu-bar .menu-bar-middle::before { + top: -6px; +} +.header-drawer-show .header-wrapper .header-content .right .mobile .menu-bar .menu-bar-middle::before { + transform: translateY(6px) rotate(45deg); +} +.header-wrapper .header-content .right .mobile .menu-bar .menu-bar-middle::after { + bottom: -6px; +} +.header-drawer-show .header-wrapper .header-content .right .mobile .menu-bar .menu-bar-middle::after { + transform: translateY(-6px) rotate(-45deg); +} +.header-wrapper .header-drawer { + position: absolute; + top: 0; + left: 0; + z-index: 1002; + width: 100%; + padding: 70px 0 20px 0; + background: var(--background-color-1); + transform: scaleY(0); + transform-origin: top; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.38s; + transition-property: color, background, box-shadow, border-color, transform; +} +.header-drawer-show .header-wrapper .header-drawer { + transform: scaleY(1); +} +.header-wrapper .header-drawer .drawer-menu-list { + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; +} +.header-wrapper .header-drawer .drawer-menu-list .drawer-menu-item { + height: 38px; + margin: 6px 0; + font-size: 1rem; +} +.header-wrapper .header-drawer .drawer-menu-list .drawer-menu-item a { + padding: 6px 20px; + color: var(--text-color-3); + border-radius: 20px; +} +.header-wrapper .header-drawer .drawer-menu-list .drawer-menu-item a:hover { + color: var(--text-color-2); + border: 1px solid var(--text-color-3); +} +.header-wrapper .header-drawer .drawer-menu-list .drawer-menu-item a.active { + color: var(--text-color-2); + border: 1px solid var(--text-color-3); +} +.header-wrapper .window-mask { + position: absolute; + top: 0; + z-index: 1001; + width: 100%; + height: 100vh; + background: rgba(0,0,0,0.4); + visibility: hidden; + opacity: 0; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.38s, 0.38s; + transition-property: color, background, box-shadow, border-color, transform, opacity; +} +.header-drawer-show .header-wrapper .window-mask { + visibility: visible; + opacity: 1; +} +.header-drawer-show { + overflow: hidden; +} +.post-tools-container { + position: relative; + box-sizing: border-box; + padding-top: 2rem; +} +.post-tools-container .tools-list li { + position: relative; + box-sizing: border-box; + width: 38px; + height: 38px; + margin-bottom: 0.8rem; + color: var(--text-color-3); + font-size: 1.2rem; + background: var(--background-color-1); + border-radius: 50%; + cursor: pointer; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform; +} +.post-tools-container .tools-list li i { + color: var(--text-color-3); +} +.post-tools-container .tools-list li:hover { + color: var(--background-color-1); + background: var(--primary-color); +} +.post-tools-container .tools-list li:hover i { + color: var(--background-color-1); +} +.post-tools-container .tools-list li:last-child { + margin-bottom: 0; +} +.post-tools-container .tools-list li.toggle-show-toc { + display: none; +} +@media (max-width: 800px) { + .post-tools-container .tools-list li.toggle-show-toc { + display: none !important; + } +} +.post-tools-container .tools-list li.go-to-comments .post-comments-count { + position: absolute; + top: 0; + right: -1rem; + display: none; + align-items: center; + justify-content: center; + box-sizing: border-box; + min-width: 1.1rem; + height: 1.1rem; + padding: 0 0.2rem; + color: var(--badge-color); + font-size: 12px; + background: var(--badge-background-color); + border-radius: 0.4rem; +} +@media (max-width: 800px) { + .post-tools-container .tools-list li.go-to-comments .post-comments-count { + display: none !important; + } +} +.side-tools-container { + position: relative; + display: none; +} +.side-tools-container .tools-item { + width: 2.2rem; + height: 2.2rem; + margin-bottom: 0.2rem; + color: var(--text-color-3); + font-size: 1.1rem; + background: var(--background-color-1); + border-right: none; + border-radius: 0.1rem; + box-shadow: 0.1rem 0.1rem 0.2rem var(--shadow-color); + cursor: pointer; +} +.side-tools-container .tools-item i { + color: var(--text-color-3); +} +.side-tools-container .tools-item:hover { + color: var(--background-color-1); + background: var(--primary-color); + box-shadow: 0.2rem 0.2rem 0.4rem var(--shadow-color); +} +.side-tools-container .tools-item:hover i { + color: var(--background-color-1); +} +@media (max-width: 800px) { + .side-tools-container .tools-item { + width: 1.98rem; + height: 1.98rem; + margin-bottom: 0.2rem; + font-size: 0.99rem; + } +} +.side-tools-container .tools-item.rss a { + width: 100%; + height: 100%; + border-radius: 0.1rem; +} +.side-tools-container .tools-item.rss a:hover { + color: var(--background-color-1); + background: var(--primary-color); + box-shadow: 0.2rem 0.2rem 0.4rem var(--shadow-color); +} +.side-tools-container .side-tools-list { + transform: translateX(100%); + opacity: 0; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform, opacity; +} +.side-tools-container .side-tools-list.show { + transform: translateX(0); + opacity: 1; +} +.archive-list-container .archive-item { + margin-bottom: 38px; +} +.archive-list-container .archive-item:last-child { + margin-bottom: 0; +} +.archive-list-container .archive-item .archive-item-header { + margin-bottom: 0.8rem; +} +.archive-list-container .archive-item .archive-item-header .archive-year { + margin-right: 6px; + color: var(--text-color-2); + font-weight: 600; + font-size: 1.4rem; +} +@media (max-width: 800px) { + .archive-list-container .archive-item .archive-item-header .archive-year { + font-size: 1.2rem; + } +} +.archive-list-container .archive-item .archive-item-header .archive-year-post-count { + color: var(--text-color-2); + font-weight: 500; + font-size: 1.1rem; +} +@media (max-width: 800px) { + .archive-list-container .archive-item .archive-item-header .archive-year-post-count { + font-size: 0.99rem; + } +} +.archive-list-container .archive-item .article-list { + padding-left: 0.8rem; +} +@media (max-width: 800px) { + .archive-list-container .archive-item .article-list { + padding-left: 0; + } +} +.archive-list-container .archive-item .article-list .article-item { + margin-top: 1.2rem; + font-size: 1rem; +} +@media (max-width: 800px) { + .archive-list-container .archive-item .article-list .article-item { + margin-top: 1.1rem; + } +} +@media (max-width: 500px) { + .archive-list-container .archive-item .article-list .article-item { + margin-top: 1rem; + } +} +.archive-list-container .archive-item .article-list .article-item:hover a.article-title, +.archive-list-container .archive-item .article-list .article-item:hover .article-date { + color: var(--primary-color); +} +.archive-list-container .archive-item .article-list .article-item a.article-title { + color: var(--text-color-3); +} +.archive-list-container .archive-item .article-list .article-item .article-date { + float: right; + color: var(--text-color-3); + font-size: 1rem; +} +.footer { + color: var(--text-color-4); + font-size: 1rem; +} +.footer a { + color: var(--text-color-4); +} +.footer a:hover { + color: var(--primary-color); +} +.footer .info-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding-bottom: 1rem; +} +.footer .info-container #hitokoto_all { + padding: 0rem 2rem 1rem 2rem; + margin: 0; +} +.footer .info-container .info-item { + margin: 0.2rem 0; + color: var(--text-color-4); +} +.footer .info-container .info-item.deploy-info { + display: flex; +} +.footer .info-container .info-item.deploy-info a, +.footer .info-container .info-item.deploy-info .tooltip { + display: flex; + align-items: center; +} +.footer .info-container .info-item.deploy-info img { + height: 1.2rem; + margin: 0 0.4rem; +} +.footer .icon-animate { + animation: icon-animate 1.2s ease-in-out infinite; +} +.paginator { + margin-top: 2rem; + font-size: 1rem; +} +.paginator a.prev { + float: left; +} +.paginator a.next { + float: right; +} +.page-template-container { + box-sizing: border-box; + padding: 2rem; + background: var(--content-background-color); + border-radius: 0.1rem; + margin-bottom: 2rem; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); +} +@media (max-width: 800px) { + .page-template-container { + margin-bottom: 1.6rem; + } +} +@media (max-width: 500px) { + .page-template-container { + margin-bottom: 1.2rem; + } +} +@media (max-width: 800px) { + .page-template-container { + padding: 1.6rem; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .page-template-container { + padding: 1.2rem; + border-radius: 0.06rem; + } +} +.page-template-container .page-template-content { + color: var(--text-color-3); +} +.page-template-container .page-template-content h1:first-child, +.page-template-container .page-template-content h2:first-child, +.page-template-container .page-template-content h3:first-child, +.page-template-container .page-template-content h4:first-child, +.page-template-container .page-template-content h5:first-child, +.page-template-container .page-template-content h6:first-child { + margin-top: 0; +} +.page-template-container .friends-link-container .friends-link-list { + position: relative; +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item { + position: relative; + float: left; + box-sizing: border-box; + width: 50%; + height: 82px; + padding-bottom: 16px; + cursor: pointer; +} +@media (max-width: 800px) { + .page-template-container .friends-link-container .friends-link-list .friends-link-item { + height: 68px; + } +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item:nth-child(odd) { + padding-right: 8px; +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item:nth-child(even) { + padding-left: 8px; +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + padding-left: 66px; + border-radius: 6px; + box-shadow: 1px 1px 2px var(--shadow-color); +} +@media (max-width: 800px) { + .page-template-container .friends-link-container .friends-link-list .friends-link-item .content { + padding-left: 52px; + } +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content:hover { + box-shadow: 1px 1px 6px var(--shadow-color); +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content:hover .info .name { + color: var(--primary-color); +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content .radius { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content .avatar { + position: absolute; + top: 0; + left: 0; + display: flex; + align-items: center; + justify-content: center; + width: 66px; + height: 100%; + color: var(--text-color-2); + font-size: 2rem; + background: var(--background-color-2); +} +@media (max-width: 800px) { + .page-template-container .friends-link-container .friends-link-list .friends-link-item .content .avatar { + width: 52px; + } +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content .avatar img { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content .info { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + justify-items: flex-start; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 10px; +} +@media (max-width: 800px) { + .page-template-container .friends-link-container .friends-link-list .friends-link-item .content .info { + padding: 6px; + } +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content .info .name { + width: 100%; + height: 60%; + color: var(--text-color-2); + font-size: 1.28rem; +} +@media (max-width: 800px) { + .page-template-container .friends-link-container .friends-link-list .friends-link-item .content .info .name { + font-size: 1.08rem; + } +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content .info .description { + width: 100%; + height: 40%; + color: var(--text-color-4); + font-size: 1rem; +} +@media (max-width: 800px) { + .page-template-container .friends-link-container .friends-link-list .friends-link-item .content .info .description { + font-size: 0.98rem; + } +} +.page-template-container .friends-link-container .friends-link-list .friends-link-item .content .info .ellipsis { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.first-screen-container { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100vh; + overflow: hidden; + background: var(--first-screen-img-dynamic) center center/cover no-repeat; +} +.first-screen-container .content { + position: relative; + box-sizing: border-box; + width: 80%; + height: 90%; + padding-top: 2rem; +} +.first-screen-container .content .description { + color: var(--home-text-color); + font-weight: bold; + font-size: 2rem; + line-height: 1.8; + text-align: center; +} +.first-screen-container .content .description .desc-item { + color: var(--home-text-color); + font-size: 17px; + font-weight: 300; +} +.first-screen-container .content .description .desc-item-title { + color: var(--home-text-color); + font-weight: bold; +} +@media (max-width: 800px) { + .first-screen-container .content .description { + font-size: 1.8rem; + } +} +.first-screen-container .content .s-icon-list { + position: absolute; + bottom: 0; + display: flex; + box-sizing: border-box; + font-size: 1.8rem; +} +@media (max-width: 800px) { + .first-screen-container .content .s-icon-list { + font-size: 1.62rem; + } +} +.first-screen-container .content .s-icon-list .s-icon-item { + margin: 0 1rem; + cursor: pointer; +} +.first-screen-container .content .s-icon-list .s-icon-item i { + color: var(--text-color-3); +} +.zoom-in-image-mask { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1008; + display: flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + background: rgba(0,0,0,0); + visibility: hidden; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.3s, 0.3s; + transition-property: color, background, box-shadow, border-color, visibility, background; +} +.zoom-in-image-mask.show { + background: rgba(0,0,0,0.5); + visibility: visible; +} +.zoom-in-image-mask.show .zoom-in-image { + cursor: zoom-out; +} +.zoom-in-image-mask .zoom-in-image { + position: absolute; + z-index: 1009; + transform-origin: center center; + will-change: transform; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.3s; + transition-property: color, background, box-shadow, border-color, transform; +} +.category-list-container { + box-sizing: border-box; + padding: 2rem; + background: var(--content-background-color); + border-radius: 0.1rem; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); +} +@media (max-width: 800px) { + .category-list-container { + padding: 1.6rem; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .category-list-container { + padding: 1.2rem; + border-radius: 0.06rem; + } +} +.category-list-container .subtitle-info { + font-size: 1.3rem; + margin-left: 1rem; + line-height: 3.5rem; +} +.category-list-container .post-info { + float: right; + display: inline-block; + margin-right: 1rem; + font-size: 1rem; + color: var(--item-border-color); + line-height: 1.5rem; +} +.category-list-container .post-title-link { + font-size: 1rem; + margin-left: 1rem; + line-height: 2.1rem; + display: inline-block; +} +.category-list-container .category-list-content .archive-main-category { + font-size: 1.3rem; + line-height: 2rem; +} +.category-list-container .category-list-content .all-category-list > .all-category-list-item > .all-category-list-link { + font-size: 1.2rem; + line-height: 2.7rem; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item { + margin-bottom: 1rem; + font-size: 1rem; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item:last-child { + margin-bottom: 0; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item span.all-category-list-count { + float: right; + color: var(--text-color-3); +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item span.all-category-list-count::before { + content: '['; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item span.all-category-list-count::after { + content: ']'; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item ul.all-category-list-child { + margin-top: 1rem; + margin-left: 0.9rem; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item ul.all-category-list-child li { + margin-bottom: 0.9rem; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item ul.all-category-list-child li::before { + content: '▪ '; +} +.category-list-container .category-list-content .all-category-list li.all-category-list-item ul.all-category-list-child li:last-child { + margin-bottom: 0; +} +.article-meta-info { + font-size: 0.8rem; + line-height: 2rem; +} +.article-meta-info .article-meta-item { + margin-right: 0.6rem; + color: var(--text-color-4); +} +.article-meta-info .article-meta-item:last-child { + margin-right: 0; +} +.article-meta-info .article-date .pc { + display: inline; +} +@media (max-width: 800px) { + .article-meta-info .article-date .mobile { + display: inline; + } +} +.article-meta-info .article-update-date .pc { + display: none; +} +@media (max-width: 800px) { + .article-meta-info .article-update-date .pc { + display: none; + } + .article-meta-info .article-update-date .mobile { + display: none; + } +} +.article-meta-info .article-tags, +.article-meta-info .article-categories { + display: inline; +} +.article-meta-info .article-tags ul, +.article-meta-info .article-categories ul, +.article-meta-info .article-tags li, +.article-meta-info .article-categories li { + display: inline; +} +.article-meta-info .article-tags a, +.article-meta-info .article-categories a { + color: var(--text-color-4); +} +.article-meta-info .article-tags a:hover, +.article-meta-info .article-categories a:hover { + color: var(--primary-color); +} +@media (max-width: 800px) { + .article-meta-info .article-tags { + display: none; + } +} +@media (max-width: 500px) { + .article-meta-info .article-min2read, + .article-meta-info .article-wordcount { + display: inline; + } +} +.article-copyright-info-container { + position: relative; + box-sizing: border-box; + width: 100%; + padding: 0.8rem 0.8rem 0.8rem 1.3rem; + font-size: 1rem; + background: var(--background-color-1); + border: 1px solid var(--border-color); + border-radius: 2px; +} +.article-copyright-info-container::after { + position: absolute; + top: 0; + left: 0; + width: 0.3rem; + height: 100%; + background: var(--border-color); + content: ''; +} +.article-copyright-info-container:hover .copy-copyright-info { + visibility: visible; +} +.article-copyright-info-container .copyright-info-content { + position: relative; + box-sizing: border-box; + overflow-x: unset; +} +.article-copyright-info-container .copyright-info-content::-webkit-scrollbar { + width: 0.3rem; + height: 0.3rem; + transition: all 0.2s ease; +} +.article-copyright-info-container .copyright-info-content::-webkit-scrollbar-thumb { + background: var(--text-color-5); +} +.article-copyright-info-container .copyright-info-content::-webkit-scrollbar-track { + background: transparent; +} +.article-copyright-info-container .copyright-info-content li { + margin-bottom: 0.4rem; + color: var(--text-color-5); + word-break: break-all; + white-space: normal; +} +.article-copyright-info-container .copyright-info-content li .type, +.article-copyright-info-container .copyright-info-content li .content { + color: var(--text-color-5); +} +.article-copyright-info-container .copyright-info-content li .license { + font-weight: bold; + color: var(--text-color-5); +} +.article-copyright-info-container .copyright-info-content li:last-child { + margin-bottom: 0; +} +.article-copyright-info-container .copy-copyright-info { + position: absolute; + top: 0.4rem; + right: 0.4rem; + box-sizing: border-box; + padding: 0.3rem; + visibility: hidden; + cursor: pointer; + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease-in-out; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, visibility; +} +.article-copyright-info-container .copy-copyright-info i { + color: var(--text-color-4); +} +.home-content-container { + background: var(--background-color-1); +} +.home-content-container .home-article-list .home-article-item { + position: relative; + box-sizing: border-box; + padding: 28px; + background: var(--content-background-color); + border-radius: 0.1rem; + margin-bottom: 28px; + border: 1px solid var(--item-border-color); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform; +} +@media (max-width: 800px) { + .home-content-container .home-article-list .home-article-item { + margin-bottom: 22.400000000000002px; + } +} +@media (max-width: 500px) { + .home-content-container .home-article-list .home-article-item { + margin-bottom: 16.8px; + } +} +.home-content-container .home-article-list .home-article-item:hover { + background: var(--hover-background-color); +} +@media (max-width: 800px) { + .home-content-container .home-article-list .home-article-item { + padding: 22.400000000000002px; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .home-content-container .home-article-list .home-article-item { + padding: 16.8px; + border-radius: 0.06rem; + } +} +.home-content-container .home-article-list .home-article-item .top-icon { + position: absolute; + top: 10px; + right: 12px; + color: var(--text-color-4); + font-size: 1.2rem; + transform: rotate(45deg); +} +@media (max-width: 800px) { + .home-content-container .home-article-list .home-article-item .top-icon { + font-size: 1.16rem; + } +} +.home-content-container .home-article-list .home-article-item .home-article-title { + position: relative; + margin: 0; + color: var(--text-color-2); + font-weight: bold; + font-size: 1.4rem; + line-height: 1.5; +} +@media (max-width: 800px) { + .home-content-container .home-article-list .home-article-item .home-article-title { + font-size: 1.3rem; + } +} +@media (max-width: 500px) { + .home-content-container .home-article-list .home-article-item .home-article-title { + font-size: 1.2rem; + } +} +.home-content-container .home-article-list .home-article-item .home-article-content { + margin: 20px 0; + color: var(--text-color-3); + text-align: justify; + word-wrap: break-word; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container { + display: flex; + align-items: center; + justify-content: space-between; + color: var(--text-color-4); + font-size: 0.8rem; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info { + letter-spacing: 0.5px; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info span { + margin-right: 10px; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info span:last-child { + margin-right: 0; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info span ul, +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info span li { + display: inline; +} +@media (max-width: 500px) { + .home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info .home-article-category { + display: none; + } +} +@media (max-width: 800px) { + .home-content-container .home-article-list .home-article-item .home-article-meta-info-container .home-article-meta-info .home-article-tag { + display: none; + } +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container .read-more { + display: flex; + align-items: center; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container hr { + flex: 1; + height: 1px; + margin: 0 10px; + background: var(--border-color); + border: none; +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container a { + color: var(--text-color-4); +} +.home-content-container .home-article-list .home-article-item .home-article-meta-info-container a:hover { + color: var(--primary-color); +} +.archive-container { + box-sizing: border-box; + padding: 2rem; + background: var(--content-background-color); + border-radius: 0.1rem; + margin-bottom: 2rem; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); +} +@media (max-width: 800px) { + .archive-container { + margin-bottom: 1.6rem; + } +} +@media (max-width: 500px) { + .archive-container { + margin-bottom: 1.2rem; + } +} +@media (max-width: 800px) { + .archive-container { + padding: 1.6rem; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .archive-container { + padding: 1.2rem; + border-radius: 0.06rem; + } +} +.post-page-container { + position: relative; + display: flex; + justify-content: space-between; + box-sizing: border-box; + width: 100%; + height: 100%; +} +.post-page-container.show-toc .toc-content-container { + display: block; +} +@media (max-width: 800px) { + .post-page-container .toc-content-container { + display: none !important; + } + .post-page-container .article-content-container { + width: 100% !important; + } +} +.post-page-container .article-content-container { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + box-sizing: border-box; + padding: 4rem; + background: var(--content-background-color); + border-radius: 0.1rem; + margin-bottom: 5rem; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); + border: none; + box-shadow: none; + text-align: justify; + margin: 0 4rem 0rem 4rem; +} +@media (max-width: 800px) { + .post-page-container .article-content-container { + margin-bottom: 4rem; + } +} +@media (max-width: 500px) { + .post-page-container .article-content-container { + margin-bottom: 3rem; + } +} +@media (max-width: 800px) { + .post-page-container .article-content-container { + padding: 3.2rem; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .post-page-container .article-content-container { + padding: 2.4rem; + border-radius: 0.06rem; + } +} +@media (max-width: 500px) { + .post-page-container .article-content-container { + padding: 1.2rem 0.2rem; + margin: 0; + box-shadow: none; + border: none; + } + .post-page-container .article-content-container:hover { + box-shadow: none; + } +} +.post-page-container .article-content-container .article-title { + color: var(--text-color-2); + font-weight: 700; + line-height: 4rem; + padding-top: 3rem; + padding-bottom: 1rem; + font-size: 1.9rem; +} +@media (max-width: 800px) { + .post-page-container .article-content-container .article-title { + font-size: 1.71rem; + } +} +@media (max-width: 500px) { + .post-page-container .article-content-container .article-title { + font-size: 1.52rem; + } +} +.post-page-container .article-content-container .article-header { + position: relative; + box-sizing: border-box; + width: 100%; + height: 3rem; + padding-left: 3rem; + padding-bottom: 4rem; +} +.post-page-container .article-content-container .article-header .avatar { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: 3rem; + height: 3rem; + padding: 0.1rem; + border: 1px solid var(--border-color); + border-radius: 50%; +} +.post-page-container .article-content-container .article-header .avatar img { + width: 100%; + height: 100%; + background: var(--avatar-background-color); + border-radius: 50%; +} +.post-page-container .article-content-container .article-header .info { + display: flex; + flex-direction: column; + justify-content: space-between; + box-sizing: border-box; + width: 100%; + height: 100%; + margin-left: 0.8rem; + padding: 0.2rem 0; +} +.post-page-container .article-content-container .article-header .info .author { + display: flex; + align-items: center; + font-weight: 600; + font-size: 1.18rem; + line-height: 1.5rem; +} +.post-page-container .article-content-container .article-header .info .author .name { + color: var(--text-color-4); +} +.post-page-container .article-content-container .article-header .info .author .author-label { + margin-left: 0.8rem; + padding: 0 0.2rem; + color: #fff; + font-weight: 500; + font-size: 0.6rem; + background: var(--selection-color); + border-radius: 0.4rem; +} +.post-page-container .article-content-container .article-header, +.post-page-container .article-content-container .article-header-meta-info { + margin-top: 1rem; +} +@media (max-width: 800px) { + .post-page-container .article-content-container .article-header, + .post-page-container .article-content-container .article-header-meta-info { + transform: scale(0.9); + transform-origin: left top; + } +} +.post-page-container .article-content-container .article-content { + margin-top: 38px; + padding-bottom: 2rem; + color: var(--text-color-3); + word-wrap: break-word; +} +.post-page-container .article-content-container .article-content .article-aging-tips { + position: relative; + display: none; + box-sizing: border-box; + margin-bottom: 1.8rem; + padding: 1rem; + color: var(--article-aging-tips-color); + line-height: 1.6; + background: var(--article-aging-tips-background-color); + border: 1px solid var(--article-aging-tips-border-color); + border-radius: 2px; +} +.post-page-container .article-content-container .article-content .article-aging-tips i { + margin-right: 0.4rem; + color: var(--article-aging-tips-color); +} +.post-page-container .article-content-container .article-content .article-aging-tips .days { + color: var(--article-aging-tips-color); +} +.post-page-container .article-content-container .post-tags-box { + display: none; + justify-content: center; + margin-top: 1.6rem; + font-size: 1.1rem; +} +@media (max-width: 800px) { + .post-page-container .article-content-container .post-tags-box { + display: flex; + } +} +@media (max-width: 500px) { + .post-page-container .article-content-container .post-tags-box { + margin-top: 1.2rem; + font-size: 1rem; + } +} +.post-page-container .article-content-container .post-tags-box .tag-item { + margin: 0 0.25rem; +} +.post-page-container .article-content-container .post-copyright-info { + width: 100%; + margin-top: 38px; +} +@media (max-width: 800px) { + .post-page-container .article-content-container .post-copyright-info { + margin-top: 30.400000000000002px; + } +} +.post-page-container .article-content-container .article-nav { + height: 2.8rem; + margin-top: 38px; +} +.post-page-container .article-content-container .article-nav .article-prev, +.post-page-container .article-content-container .article-nav .article-next { + box-sizing: border-box; + max-width: 14rem; + height: 100%; + box-sizing: border-box; + padding: 0.8rem; + background: var(--content-background-color); + border-radius: 0.1rem; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); + transition-delay: 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, linear; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s; + transition-property: color, background, box-shadow, border-color, transform; +} +@media (max-width: 800px) { + .post-page-container .article-content-container .article-nav .article-prev, + .post-page-container .article-content-container .article-nav .article-next { + padding: 0.64rem; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .post-page-container .article-content-container .article-nav .article-prev, + .post-page-container .article-content-container .article-nav .article-next { + padding: 0.48rem; + border-radius: 0.06rem; + } +} +.post-page-container .article-content-container .article-nav .article-prev a, +.post-page-container .article-content-container .article-nav .article-next a { + position: relative; + display: block; + box-sizing: border-box; + width: 100%; + height: 100%; +} +.post-page-container .article-content-container .article-nav .article-prev a.prev, +.post-page-container .article-content-container .article-nav .article-next a.prev { + padding-left: 1rem; +} +.post-page-container .article-content-container .article-nav .article-prev a.next, +.post-page-container .article-content-container .article-nav .article-next a.next { + padding-right: 1rem; +} +.post-page-container .article-content-container .article-nav .article-prev a .arrow-icon, +.post-page-container .article-content-container .article-nav .article-next a .arrow-icon { + position: absolute; + top: 0; + width: 1rem; + height: 100%; +} +.post-page-container .article-content-container .article-nav .article-prev a .arrow-icon.left, +.post-page-container .article-content-container .article-nav .article-next a .arrow-icon.left { + left: 0; +} +.post-page-container .article-content-container .article-nav .article-prev a .arrow-icon.right, +.post-page-container .article-content-container .article-nav .article-next a .arrow-icon.right { + right: 0; +} +.post-page-container .article-content-container .article-nav .article-prev a .title, +.post-page-container .article-content-container .article-nav .article-next a .title { + width: 100%; + height: 100%; +} +.post-page-container .article-content-container .article-nav .article-prev { + float: left; +} +.post-page-container .article-content-container .article-nav .article-next { + float: right; +} +.post-page-container .article-content-container .article-nav .post-nav-item { + display: none; +} +@media (max-width: 800px) { + .post-page-container .article-content-container .article-nav .post-nav-item { + display: inline-block; + } +} +.post-page-container .article-content-container .article-nav .post-nav-title-item { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +@media (max-width: 800px) { + .post-page-container .article-content-container .article-nav .post-nav-title-item { + display: none; + } +} +.post-page-container .toc-content-container { + position: sticky; + top: 108px; + display: none; + box-sizing: border-box; + width: 17rem; + overflow: hidden; + max-height: calc(100vh - 108px); + padding: 2rem 0 3rem 0rem; + transition-delay: 0s, 0s, 0s, 0s, 0s, 0s, 0s; + transition-timing-function: ease, ease, ease, ease, ease, ease, ease; + transition-duration: 0.2s, 0.2s, 0.2s, 0.2s, 0.2s, 0.1s, 0.2s; + transition-property: color, background, box-shadow, border-color, top, display, max-height; +} +.header-shrink .post-page-container .toc-content-container { + top: 88.4px; + max-height: calc(100vh - 88.4px); +} +.category-container { + box-sizing: border-box; + padding: 2rem; + background: var(--content-background-color); + border-radius: 0.1rem; + margin-bottom: 2rem; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); +} +@media (max-width: 800px) { + .category-container { + margin-bottom: 1.6rem; + } +} +@media (max-width: 500px) { + .category-container { + margin-bottom: 1.2rem; + } +} +@media (max-width: 800px) { + .category-container { + padding: 1.6rem; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .category-container { + padding: 1.2rem; + border-radius: 0.06rem; + } +} +.category-container .category-name { + margin-bottom: 38px; + padding-bottom: 20px; + color: var(--text-color-2); + font-weight: 600; + font-size: 1.6rem; +} +.category-container .category-name i { + color: var(--text-color-2); +} +@media (max-width: 800px) { + .category-container .category-name { + font-size: 1.44rem; + } +} +@media (max-width: 500px) { + .category-container .category-name { + font-size: 1.28rem; + } +} +.tag-container { + box-sizing: border-box; + padding: 2rem; + background: var(--content-background-color); + border-radius: 0.1rem; + margin-bottom: 2rem; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); +} +@media (max-width: 800px) { + .tag-container { + margin-bottom: 1.6rem; + } +} +@media (max-width: 500px) { + .tag-container { + margin-bottom: 1.2rem; + } +} +@media (max-width: 800px) { + .tag-container { + padding: 1.6rem; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .tag-container { + padding: 1.2rem; + border-radius: 0.06rem; + } +} +.tag-container .tag-name { + margin-bottom: 38px; + padding-bottom: 20px; + color: var(--text-color-2); + font-weight: 600; + font-size: 1.6rem; + border-bottom: 1px solid var(--item-border-color); +} +.tag-container .tag-name i { + color: var(--text-color-2); +} +@media (max-width: 800px) { + .tag-container .tag-name { + font-size: 1.44rem; + } +} +@media (max-width: 500px) { + .tag-container .tag-name { + font-size: 1.28rem; + } +} +.tagcloud-container { + box-sizing: border-box; + padding: 1.5rem; + background: var(--content-background-color); + border-radius: 0.1rem; + border: 1px solid var(--item-border-color); + box-shadow: 0.1px 0.1px 4px var(--shadow-color); +} +@media (max-width: 800px) { + .tagcloud-container { + padding: 1.2rem; + border-radius: 0.08rem; + } +} +@media (max-width: 500px) { + .tagcloud-container { + padding: 0.9rem; + border-radius: 0.06rem; + } +} +.tagcloud-container .tagcloud-content { + text-align: justify; +} +.tagcloud-container .tagcloud-content a { + display: inline-block; + box-sizing: border-box; + padding: 0.7rem 0.5rem; +} +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Fira Code'; + src: url('./common/fonts/FiraCode-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} +/* + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-MediumItalic.woff2') format('woff2'); + font-weight: 500; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'LXGW Bright'; + src: url('./common/fonts/LXGWBright-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +}*/ +/* + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-BoldItalic.woff2') format('woff2'); + font-weight: bold; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Ysabeau'; + src: url('./common/fonts/Ysabeau-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +}*/ diff --git a/en/font/css/brands.min.css b/en/font/css/brands.min.css new file mode 100644 index 000000000..5a32a9ab0 --- /dev/null +++ b/en/font/css/brands.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2022 Fonticons, Inc. + */ +:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"} \ No newline at end of file diff --git a/en/font/css/fontawesome.min.css b/en/font/css/fontawesome.min.css new file mode 100644 index 000000000..9fb3e4cc3 --- /dev/null +++ b/en/font/css/fontawesome.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2022 Fonticons, Inc. + */ +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-child-rifle:before{content:"\e4e0"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0} \ No newline at end of file diff --git a/en/font/css/regular.min.css b/en/font/css/regular.min.css new file mode 100644 index 000000000..ea44d546a --- /dev/null +++ b/en/font/css/regular.min.css @@ -0,0 +1,23 @@ +/*! + * Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2022 Fonticons, Inc. + */ +:host, +:root { + --fa-style-family-classic: "Font Awesome 6 Free"; + --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free" +} + +@font-face { + font-family: "Font Awesome 6 Free"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(../webfonts/fa-regular-400.woff2) format("woff2"), url(../webfonts/fa-regular-400.ttf) format("truetype") +} + +.fa-regular, +.far { + font-weight: 400 +} diff --git a/en/font/css/solid.min.css b/en/font/css/solid.min.css new file mode 100644 index 000000000..edad4ed28 --- /dev/null +++ b/en/font/css/solid.min.css @@ -0,0 +1,23 @@ +/*! + * Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2022 Fonticons, Inc. + */ +:host, +:root { + --fa-style-family-classic: "Font Awesome 6 Free"; + --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free" +} + +@font-face { + font-family: "Font Awesome 6 Free"; + font-style: normal; + font-weight: 900; + font-display: block; + src: url(../webfonts/fa-solid-900.woff2) format("woff2"), url(../webfonts/fa-solid-900.ttf) format("truetype") +} + +.fa-solid, +.fas { + font-weight: 900 +} \ No newline at end of file diff --git a/en/font/webfonts/fa-brands-400.ttf b/en/font/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..502f3621e7f97d1d94ce05794e47a6c6a56e94e7 GIT binary patch literal 186112 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⩔OXm;SG?%mnT`Kc(VO?Zg)i&5 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 literal 0 HcmV?d00001 diff --git a/en/font/webfonts/fa-solid-900.ttf b/en/font/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000000000000000000000000000000000000..13c9489771fd4e60ed0ea9303e882f94f640ec6d GIT binary patch literal 397728 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

i|I718`*rt|GmTIU1 z<_EleG-!(`FD~77-$sueR(cW>1Sxq@H(Mo@NNtS0Yj0}NAn>&n;vtCS_%e7ku zDV5@x!7Wfat*6G8$cl{wGo|`^<4{{Se49A=yU93Eu^mkQ z!QVWmon2xXo#jdf4RWGKPs~=8H9izTa)n&WAA~tjBJRIQ_jkXJ8Ic37OU^39_IFp# z4IRmx@S*EV62pMx^@f;JZf-0btv;GXCvt@EnAi}rIst$UsRHV~u_;ITeBmd@s?lUq zcU}B2pES>zz0?h`Yn1^Dly^{S37DmwrEtc&lX!+M8-Rv&iQLJ$W`vX0Q4APV3e`mk z4rl!hpV-+2yvtTH?3-bl3C0aN0gD>{stX*E;9O-QcBdDP5TS>6s?=#VdejllWe9JDZct=KNR0aloeiqgVS+SpG87%APU|662 zj}8xwi9=d;ljnA^vL;8YIbYco%$7Wf_P?4@i$p{X;2I|e0rHiiw>Z5EpmKUaj{{^j z=wI#Z1eBfNk|c;6nw%`2g)>?ViRmM2G?WHZJE0kQxM8lSr!|az(4ENxaO%rtC)zB5 zC7n|zd*9@{&=g~XMV&ry9PIT8c_ZR1_Jj7XZ%LeAO6pwydVK;2Wz)sSUgzS|UFBY{ z(Z>Riu)?{tJm9oT3j&QcXxE6!kLRd%BeCAtmpY&kHk@dLKJ;D9Zn@BHVxZa%{V z)Ckz^AGx`x`(cfZTcc-0JdNP^h})cwQxEc@n-(H9+)54!k-b99vBe^FdE5;g^2Vp1 z`8Z4F7yd6=G@^XzbT~vHZ)_$S4TVHKGasohj|`_%AYyv`-GRJkQtYHSWsE7h&Sr7K zwT4;-J6VVEm)}Vk>FOa2rzG}}IrWkROmcL)?+quD;d}Kl%yANrJ=Xgv)>L0{s^3LR z)Lp4SFmEJNTW>__i7nku<;e#FsgHdugVSw&XOsZ?tY8~XHsvd^%2gDDvg>$)xow-v? zGuoR@pyC$LmeYm~;MWJq1GGRHW`L*)a;=P;K-Ly~QI&fgw@>k?;cqynCSX@dUNff`Hx*5L3~iMe<`7q; zS72?iHpl856J}5k(brG3HL}#ws+Tug2* zawu7%;u@=(Yi+^ePL)buy>iX%d2~P349nTwz7zk%_Mvgt+NxXFss}`A1V0BD_*~=I zNLwBdH4|JUun^aL=r-`s7VxMO7X^uFoXH?k3HW&k`qb8>gk6Dk4Izkt_fh0PiGCC{ zXvre@x#os}=FZb`Ab`71$o7Ac=?R=cn%BboOksvXP7jWEm-PV_@y2X{puDo`T^6$C zP`hOWBAJ>#etde$GW$!UM55Or@djQfC-DzeVr83yPx6hH&=!a-_!i|Dz0Hq%y&uQ3 zc!Pc7^#oAI|Asn_A`TW;+vLHu6K{pm8j#Kz@a&oy^OJdpnJw}Y(d!qCnz$VtS2iv= zq-J@0OBb)+YWp$IntuDkPW3$4Z?!&bE~~fV!EVdBxrKcT7yQjgr0ICZZ{xgN)>n9Y z+eDTTeEio|OZ^z|ae}g7ePPbcrM+~uCRs8+E*T3I6 z99>oKTsqZ@s@9$XevkCi{di$~7_befPS4^Ex*bdD6s?e@c^v!@Ii_L|0j$=lW z+o-gRn5YeJhPS=PoI!`uX=7>awGJ;)~ z4yKM}-P3y889X_dGPXK;F!$Y|e}MYH&wBtrMbMzDQg)Y*b98qMK5=kmcYXNa8lt-g z<-e$tPu81V)F}#?;Iin1g-~;{LntJ|dvemw)OV;QN0CH42bP+0xB;_;Eshw+tJ7@B zjK_@9YER;amN71I?FhbT2!q-%aL{au@6{EVx_JEx%jsLHgLBcO#4V#QfB%B#5L(e< zlsYbd5LDO^fI&CxIR2bauHZ{sLseJ3+GvI?!GCk&9^?z(VzR!M-K)p<2zc6p8inIe z;E29*@5|_R^5SP-eB3MwgqJ5G>6k0(qfEv3^BR<{1`P3D<{Dz#jl&ET&l^bzf0ifvK9Fxs~eN_siSiV%0`1+luv zkr&?>2u(70-1}d__+_KRqt=)|mkSMf1GY7Uw1fUJYqS{6*x_7sYG!6C`hZ>z=xui} zfZgEny>>Pi_DA5s9k@3i^5<>|1a8UsL-~6Hfy03aQYL0?e=6krsp!zF8+4SN83tg`uf&uN{cRBVk{DS)B~UBKBiGMEHA5wK)$= zS=^W7@!^-TC>DA1Ofhr&T^g+J%f=7C{N)i#*(~_gHTCD;g9S9KfCI6M%O8u_q1dMa zzJT>9^oRDd2dRZ$Vgs3Q)(?(E>4*%FaZMt?BQBHOu-#k=Y%;U~kmCuyW_MOybgjB( ziuPJRa@J1gBH=qj(Of!smi{kT5FL6c_*64(!6r7#rlI9Q?Svq8DfQo6%0=xoLIVY( zxl2(Md*sleHWnC|^en~7UxKZ=(_I=@0WKMr@Cc$@J%BN%*&D_Q7T;(Vj!|7%@InSD z>J2sr7dggcRCt7-=wOja4EDQYF6u|0*%^%QXf}N!m(68QAQ<0&S{#Mkdt`JGe%Z;X z!q8A*3ZB#H)#q%HknIczVHTC6nprzrGsyw>_xYD(fHv5yRK-2Hc$;Z4IcC@`@kC7piBq7<#3Yw zwCiebbqrxMdl$!>Nn!Sv49=IpH0CPzn+M+69(;^n*xG#ons$e>n*G70wMcplA8Q`x z9&|wl#m!_U<9@`1%4*jWdCwmn#FmhUna=7t~;bHe>WMSUB!x^(>w@tBw# zU%+g8M0{&M?s*0)nL1Z8Ai#x1u%XV+EC2}S@x2^ zwqBv{>g|@MqI!$?Jtp5a!}9#JzDmB2vL_K+@%R}-gc0uv3F3x_Cv;hhlaqx!B+aN9 zVoiz$cBg?ht*4tAt}Jy@Ns!HP;Sp_Yy* zgdG=Vc$OTgvB=>uXtL(_v8I8H;{(Ev0@c+;0zZak;$qL@Gwwvf+{&eBbH?LM@%3L33^e9O566#AfR+jyj_L2k*r21{s&~p@O>E6moCuS_;{KW4h=Ib`<2D^Fntasg(CoQUO(`eO7HYk@2s!F%R=_y1E0iLgoc z%$v0Y*J;eL^-{z=M!Y>)If_+*OcP`U+N4B>G=y4 zJ>tVt!PkESUZW5rsBcW^pj6JT*X`(YXLodVd>ml}Xpay6tl>uX@7x(vaxXA8_!IpL($Aa zdUp004M?)3@yWOIp*w#Y*K@DKbPGI{4#l!h@#uBDcH3z0D_I|wTuXvlk4#M`N4V0G zS}NO?m@Yf_4sT3cGX~yx9V;Se3^C1}XrKf}0;T)_kanY>fiuf+`Mf+)CCX@Iu;u~V zhs4apF!(W;RxMB%2oU<6W7%v36SYvNPBxpzmu3!CHa|CYl;X5hBS_ZWhX~{^`HS9% z;2eL~=uq#$NTD!U#iKrd?@zt{!N8$+j+e*b={{P8*?$2!k&>yAi|?-~isS0zrF4#q zfJ7=0ySewraCge}z7dT5f_eDaF!)^R%eNsl+F~Xwm15IOWJF9cX~62Tz5?QjpGh`> zG|DTu@(~~& zP<9}G0b{RUfc5ul1qT_ty&~?d%T-OhVF1r@B{={sPasLXUevBSyF6P3{ir2!M~SEk zDJ0Pi=SXe90-}m@eO;Yw$Dqv(Lr?z7SU4ETy+`@Z4vkhu3P*;`-^Bt$kpy>025KSgExz@(JGXT=Zf_f2ZQESAV!k;b za|?UQ9uE`+IpS?3fmx+gc86q(z1iw^KgQC3yqk&t=CBBj9k-g{-$-Phd+&RjZ;nLX z+`JO`;Y|5C!}UH_&irtM{yvaNV13HiK#Xm0qa&9PsxY8R;&iKI9Mzq8jbr5YETd%U zrB&DfTYa!Yh21uvAJl+twuA{ubkPIgl=d*uS4>|eO&2B26-V~kaf_8BDA-UAA7;Vs zH_bzvyd$d(#uC#9m;(K)0A=#U+g3|t6aNhTf{qgr1(I3rd)P8{8ZDTaOog<3`W!PNZ2q@IAd8YytxAt`-=AVi7fd(Bw3qmO(M(M z$YgD1rZze9=%CbY@c4O;iCbv)EuBMFXUy&l%I5};-B5%kB%zTXlkOOpAC&xS)#*cd>S%vF(!l$zE}3C`|}Eo-fclwI!q7by`%gXs<5!;7Xs?qyc9J6qiBIKX_C_yI6X?IMfo2@ir% zYF!UksG=w!4W+D2_zFm9u*hL&weVH3!9;1Cnk5ffS^))>at9bWlFF_{}R>$1^YviJ$I#I7#k6UwSB8Aaey z%~GFu-eV+|mFOR`<$oBh{A+6Sr`YCC{p)J;+t}u}{p)J87^W`m(`Fsl(ac%QSCKq% za#G+#b2?BYnaiBVoX?!cyf1T^2hbzqeIA)dHr?478=TR49`2gSoZ)5;n!R$32lh^A zK?!>&G8d;kS9xH*kEx6d@8m~3;78~K+n0*}EHIh2H$0hvV7Tt1n`;L_HwXoD%ra89!TxkA^e=kZWY9CI)1+vg`%D>5mw^ zo;3r;NN~%QHlxZX0xBJhrcw_h_f{fbf}*ETuH;;YP^Xi7ot7HcwL|JkY1ueK&b~3K zd{7dV@(H~DFcKF8(<+d_+B{cr^uhY!pYMGwIXgO~J1Cjd`>D~{q~Wu=pt&X|i3gF-*DU|>8Voy2V{lp0f#OxIb{ukH%O8pjh8B*6{MMptontM&tcWO~Sozq{ zq$U#4C~QfP{w854BZK&Q@FrgO~8ug)(k{VfAz1jJieEH_pl@V1MsfX-D zaHJn6c_fH6cycrq>cXg5EP9?Sk9PC?Pl-5mBte}4}2sBELsNm z+QL2tjE0pO49HM6es(6nXWNFm zf=xZhXm3L}%mK!oy}@QVHRKMwSt9BBMN0|bb5UZ)blvlA0j}SUZm1a-k@@5h-R7Wi zfkK!DPIOw47(W3gm2%5`LOZdsw!QB8z6Ib;%fS6d>3s*rSLpY58`911M(s!hbtjWr zF463?zmqvj3JRZ}!JP~b=c|lNf5!=oagrf)cJ_X@LIniFS-woECR;m2dE?aJmaXPp zZBu%!&m{+jkOK-Iou84SzrEu2{p`a#A*I~yIzBPPeeXwqYFkk~v^kJx4l&O-%lHbk5SqIi74ny>;H(i~~c(X7)kFyS}OFWYgdb201 zH!rgKiISdQrj*H>21|+Arj%;>1xvvc)nf)8tBc4th`1y8M$;rsVqcWk*{h+$Jf3*TA7A2529hnl^17bVRMoHnpRJImEV#123)}JocG*~ z57)_`l11g*g3X^p%e_>nAjl4-esasbBl2I-gUUn|2MAgX*_dhtL~6{bt#E04WK`U( z``8u19%6AH)|tS8dJu^St&$JxOE`~PQObLx7CgnVQdWt0y>Uhs?;YLGolW{bBxBy# zlc8{RXxK+ULOI*M;h}0c^dxS)8&2lICn5EWKMAk&(7T^jFabd9zHRu2Z9&KES*4*4 zPz5w7dIo4{*I+Er2}PiB27s1VZdVsW&`coe)1ld;N7s(d&H`)_vp7C_bQa0ypa)uP zwH6l^7EiPmry0TQE!)s?F!0x*S#m$lqxv;I9tz=MzA`_}AX3^E2_u3rVUDlEh}S}U zd(s=kiZ`lBWA4AMR(F`Ag9p)=5b-YeJ^TSl{AIUwcbQQCZTr>R|}Jj-BNm61;dC9az@y!|^9MQ2E%&DL>nVeSvxYfMk*|iG3E0)zH@-yNz;%J<-x`uP-YlV*bVi~s06+AZnnqnzLhDFh zD^?MB#BsU@3PA{E8MiH6_m(knYdPo6PTgnQmpBPJ`a*{zbV;=}un~pnh@39)DGwg} zEaJS|Plo+=;w)~k$g>ICAAWLY8|v_h^XU2GWLLEv&u(^n3cv>6cztQfzDg5Rdsn4* zwZ%TL3C5cV6=YMiQLk>wflZ+Qt)45uSGE18hMo(?14mN@(aq^OrLOFp0xyWL9=}e6 zYYd81GfEdCAKMvhGuk9vhfV3!pD`&=)o;M^nwpx0yGJt346L#xFHD5_TZe3PvKq)Ed%9 z*grJbf-8bskVss$h%$QJ+AuVJVrI5&ijspzF2NK<#bQy|HRSJ(L?VMt2XI>XZDtae z;)aK7+i1JyOP&WzWw3Tz0_-DSy2EC!obZlYeoR$+6<#Bx;b2c;r0rd>PFQGvLH$%T z|9fFr>W4$#x-a~D`RK%pCVIadvWoXwR%jk1>A|UVIw6;%`9!8Toc(LQ;lso7nttQm zAG2H0ntF*j21!6qFh^F5sFSgD_oL5ud=dUp=z;#9}%vMV$Fc z(ysC|kLQwq`-J*5?yzLk=gi+G@{hx;%U87%fBVEh`LxldM~^fT-rb7}mY&|AkpVO2 zejJ-qe)2a_;t`c>r;f1rKT4$@BA5D5erzlsOTl$E^{HDQ8b^p}&V=p>ha0ZybAl;m|=|#Vk&et~65q z>hie78KJ;VU_RKZV6O~tta^y_h~YXH5`nbO|LZbWJDtu?Awk;MnXy&%84b zx*>%4dkJqqixoQPgzvqO$e#m)PDZcO>U3TcM+%1+UW!J4k*`<)e0dMuAuzHna)uUa zOSy^g00l^b$sC|tKzZRi;qZPKULYjaSqK_VNHfNjt@*m2xuhAnsq^Qj$RfbDolG@P z$z@;tE)$Ym$K$&SLt8XH>Y)Eik~iGJ#6r~uRGGx6KuGmQZVw4#MsPnbV_vw@iG{2zLwxT;@=6(r53yb zA@Ov9UE-$!B;1)LiP=vm_03>#lM|||Vu{G+j+4&>!{Ok=;eef3TLWDPKfL=~e-Aj( zgMPyIGQ!7F6(C|8@!_MNA3KQ>GYtL@?=EBax%%9WI_x;X_bi9^;9BVjnk!3JtX@eW zHA}5Ii+aOLp@VkdbwWFGEyY=Juwz(clM#(u4$^8dc=0BZ(R2rm0S1qIZ{B1SYj&pzF9-BsM(k6PI3D9U#BW=5~nDW`HA z09jo?Ug3Jjx^+;u@7pHbj~eF{MOv&em@G6TDQ6zNsXcx%^nlYo?lAm2ZC$~cK?m4h zT&Z#{WXBIZrPp{rIGxO7sGjOvF|uRj;gLoHD)GFB^MAv^A>ha|ndI~j>eb#;hvJA# zNL*efr~JIU$RqPOUsWhT7ltV&{jS@Tqu(VS24JKJ4Z=a9rYoxz_=*u%YlLE&O5^Hk zUno5&CD`U^SG~~H-Ph|5-o>-+7RRE^ z-fYK%!5pyz9yL*W-MgW7f_I(%`&C&VNq)ywssm(f*>Miu9l*@&SaE)q;AlU9GF%c3=WLT1U0Po34_w?ABPX z3U~`W6fq@vLe`pS*$A;_lxi6WHv5l8XJ*#dXJ(=%0Qv6oO#-WVn)~Kj6$ut5t4NN_ zf!KM*x(e?Eq}_$)`V`{g+)K)Yg(vB8VUH4!076CucN{YuR2b)^SF%V2pwq(-6vY$* zmn(g^!L#?>w7cy@1qq!=??xNO*UlK2r3T&D%=U3bGu!sLRV+i@RU> z((Vfv0Qx(=s)mN@z5iee_?#)-nKv!;#|(IxLH*B?n^fM_kj*G0|3b?}K%xWsw#?%0 za^$pz6cNLq`%gzMn|n~(cKL@Nm_=%Y44Iz3sphWF60|p8-r!FU3^^ z>57-KJulFAK`@LBG3epNCOs}8Yo^Q(JY(H{vmJdd3VIuP7Fo{hXCvXwy5D>3gHVVD zx`?mG{RfVE{Q>_=UV{AQ9}9<{PR5`2z%1VrPd+{63$&v&2}hJvY@_V}bepeug&&{; zgeU8~Hu|d}+0aPuK=pvy`ZSOLBXnDk4{rS2Q^8;`dN(Afx{KPhr?@+ci%$`e9eWCD zgkbQB;Mp=Bq1DC}yb;BH7<}&dW`<~0glK>~vr2Iye`z8CjD{O8@J;p0SO2Jd)54fR z=FGfeAg$6YqXGaj*JRcS{lc3f$06Sij!v}=$ml!eU0{|&`s9%*>hxEqu6r^?z?I((4UGPJ1peo?4465P1KZW1tc*$ZO?mJgjEUPpQ zA5bKN4-c8InEg^^ZFPNpPM*TkbL;D?Yn5p9?+L2r8SYshlh>>!nOt3r0n9)ybH~o~ z8-=)9WQ87cBr#f_$-!h7vfBC{!uV+)-VLGUgIjZF+l2BLOo6--O-}K%XSr=k&I#Zm z)!s4!N-hb??#5ib*eaP4?A}osdNMjT-G73bFnjH|Vn9A%n z;#tlhmLX(t=tLJ36QN*i%! z$+cn1>(^kT#h#UogQNyN%EzIKcNbFHW>dGl46mkx+AfP)jAXz*sL`FinfKPgO=i`E z6VuK0*n%Ki@M*}w5}^vry@cG1FWu2{nTr}vXR6B_6=)C$ahg-kRRLm{8cUEBko6=~ znrYGi_ClTMQl|k?n$R+xHfRanlB=zjpzjX1&K0pEBbGBJrXN%ZACoE%4RPzU(#bTf zO7X^^b%OMCSBmRO(Oq6?b#=*uncE+07Dueni-;`|m&&l+@vfs6$s`oud5ez24?~I{9CA7EOF3DctSmPcmB$V|lY*yXI=wJ| zZ*k2RkzG1{`o^1PqS2X~ZajT@DVs>x8{U(>cUMkvJg$ij%hBI{699%IgC_79wzpQC(R{TfB$ zbMvSE-In2A%pNPF`BS)yr}(hb=Xy^3)9k3+$=B<={-4W^O5;S2z{3nNjqu2WQdbDy z=;nA^4G?NRI1$j z2KBab$lJ_s1&ONA>?^<_gi+QB(5P{RtjHMx87PFA?zK&Z;Aw4PH#dC@< zk7!455bBR^wd%?EbGh_G@g$herq>!tWq)9}@YSpeXETZ7ieY@szIUq$d((6eR5$#; zC(@53qB+ak@_G^Zs1-?lDp^d$Muw0ln=+UkYv4DUAU7@dz_gA1z2SM8=euC|h}uKX&XMth?d~OF?;RDeVhY7!Cy!-gwX+%3bw=V^Lo)e!Ak1#qCk# zR_Y%|{eP(f_Z&MGhlzPG?o9+k!v!s-gH@KYz&Bm(ZX8aKa2c(fjt70w_0ewHo6AgcmiVp=U;g0tiWCXN(>tK=a>A<2+~+ZZ=xE! z5A_RPppLphD`OJN)xw3vn*yqOPvM?J>-lVaw)@JPKY4ss1tO6vXOA5JNF-1X z@bL7jB9Zb;PSmFALR{d9vueL|KQP`tw2B0sHb zW3r+-{2fw)j=rY1tpkOzo0@Ryts}nD?+o5RJN@qXu0x;xTF*y3KLy$)t1;n!MNt82 zfuBC-G(Z3yu+734bM_GOUAs~QlcMdocm*?Fd!09N$wvCQ{jMYIBbAvsCSCwu5eX^K zvMf{dt2>Shf(->xRxfc$kmRZ$xeQwYBsmXyxnv76=JXTz(+O?8P@#Z>N-gV0-x7k1 zAsG7&=3GgHY@orsWvhZ*{7LuXCN748nV|K(UKPrOls!am{2(_?_XyW6;)DwmJE<;9 zO?XzeQhr}}Xh4NXi;a`{*!&*x8Bvg%CsZubY%_#$eP4nq1{VBNiYt`(qj z`Hg5O7mls3$HKW#Y@HQI?z6e!Hq?`~K*bz-jI|+PSh#C#W2Ko?;YOJ7k%LGc5w6}c zcM)OIYizMxnOC(!u(O6I>vgY6r?TB_3RyXZFonY5@2XD@gHwpN+8Vx$=nKBAU0f~( zD#zAut!8tfnVC>7TU~3uG7LA5?>bfq6!Ai@wF@30>VeFw3%)vsJRTi z^r{YAH|(7G2lHh8$MBf)2a&_F{2{Mpb&O#%*ABJ@*DD%uVRo9}wXlo3u9BBT#Q0iJe9 zWfl+~KIRMhVi`4YY(h<$MXVZfH4dycD!4Y(r2tC7#&`@N>b^f0%J>ncE=pw9{!id!HOLUv7aQDi@2dQGc}zAh0w%HC1+Aig|tc$vtYl0|*QYpKzcvfxDo zI~s(gl+(*)qYR{i&H+*bwEys9#J^KS&Qm*&ek=>P$+qh7Y^v3AAB+ zUcn#_)P^^oeGk8xOMl1QNc8Jj z*?sLB!9*Z;;nXv|zj!8?^y6q1Nt#KIutDhKeGb)6`|ZXZbBDj~?0(_G>6|Yfc&7KC zpWzXLRGvesW)ebdn)@DV9!q5PX~gkh#MpiIui63^mP=H?JGtH{nCJuze7aC*{80m54@Tzy-f$=$41{uU7lBmEdj!Y% zI5f@~FK#@lZ#ox#pX2F3IXEbsVFZCIxb-YeA1W3PO)nV@!Hp=y3qcutSaP92@Gy>1 zSRRMC0V8?dbT0gr1_ZY-LY5RyoK3_H*iWIqbR-KfC%TgyZ~)42GzS_LD$i@rp7naq zo_(#^ck4xSTCAUc^wIN30HietW^cvwPZ+8H6ZtrCu*NyE{vCy1B(m-Sz7X@(3lVCd zO3N#*!eLd3;gS(-EDA=&buD0{@+}|>cUG9|#^xf{0#fTeiWuvy41#s(Y-kkfwQ%!% z%o_>^#)D@sA$Ll!_rcPUBa6*k5catE=S$xLj@E9_qBjCt#M1QC__%f6wo|FGFPo*a z*{fe*37c#7B)CiU;C#pnbY!n>@^igr4)R8HK=W+8v zr2ebbhbDKgsxd6!E1mTqR!CZY$Mg!&ZR%m`)2uAwT%5z`k(;y|)K0R~@U!cU8nX3Z z1&x$9RMZLDMhG1(n}%cobPkM=rgrQ`zQ!I@TlG>Y^{l!(p761-_UYr_L zoE9)J>5gue<~W=-Y8`~5kI%2-^{VBWnhuPNuDlq@rG25{b9df#cJkQq){QUvsx>k) zKQ-_3ot~`OHywZXc;S|Xg|rR&@}ir^yvOSGrzib^!>g0!fSq1F4P9Si{@kq>yygEiQmwA9-!fJ{cf)$+CF`dr zmzQ5OK6BUUQ}y0kRAag}7meg9nT*F~A1H9_@X2{GVw$|t^BVXmelGyUXuX`2QR2h_ z&f&UqO?f%b(SPHzLSc`gQ*@6yJAjwD;&e4Yg=9x?i$Ph}kfAE6bxivuy|`$$Naax##nn=1S6h%&j8e4}I_0oJ4^s$30W9iath}9sMG} z^ng@0swppp>=mIlqLf`qxly^?E+zB6tCQ7s+la*5NWrZ0z+oPfMmW9Y zrKKxx7>hr1Whp-PhAXhM=<5`||G|zbKKNi!b;{eOMcWRZZvk${&}VM6Z(1LbUj&ya zG6oSt02|o{-C##ou6C1NeOZhwm_|1Wg~X!S-0vbER;>f?T%tli08ga;9it!UJh$J) zgC6E};xFRrZNXnbU@xvv$y`(E4!)51c0dUyuw)j1!jSP<{-KK;35}LiFD-xW5-_#0 z*ZQmMj_LRo7a5nhMri9Uap0c4qYp2EQh|LAPH_l#>qV!`>f-4=?@0%n^hk3`{E@ZuM*tXh$m1`Os8 zSVPm`XM+CFp&{!F*85)V1^ImS`>gSa4H{FdtZYn-FUFHoI-2)XGVWW!^MTOx3Mi(? z6}PPufaxf#N=`VQj1Zy=z)^I;1DU?ScsNFFAwoy@V?3n)IWYb@3pSvG8 z5vKOqg~R$?Tqh_Baea5l{fd=%-9VD^n4{WmEAcmVLXil(bb{Q?zJ^=qd9}SbRcl@I zrk4Kfu^0bfCm3w$w`O0XOVPC6ZPz;1qvs``oG3szWP&jUw4EG68<+AJ`#sklg7~luv-pUlV%|9y>ffzto8DqdbvPTa5w{~^*8Q%j4jU>) z^ZRr{S<@{;y;vasTx9(Co-0Cs!2b}3rU1uxdG7Z-=y{#zEuj5-)Izpgf%uJGB`}S# zXY0A8P9EXxji{N z9DyZhJZ4#mbTvN8IbyA!dFg3Rm~<=~g+eBZe4EKtcAk~w_FK<=(~u_Q9ngo*8gkqZ zXr_{C;B)-!Z-RG>zV@|HvW25izVN%r4E)XUsX!p3ECjRR_ao6TzsN5m$ASKWYm)e| zxpK*L`yky19s$pVA2_ay$Xf6qdRz>8rQ=A;k3wW2KS=7StkdWP{3z!ZR)iIEz+3D+ zJq%o~Acl-cA3*>r^@bOKSrJ6EvRV~Jhc*ziE0ESHFY=z2M;?nOZ7(D^xq6u<5*j9Z zU5ERUhgW9%cO-Jh?SGR9tD$h>Z?Nw@8&0f^j-w!vP|i(GmZm4ID8z&oLT%@e-w{D; zxLI5J>ftlhZq{_d3kT1gCcVYv%9|Ci}6^LY^242OgPYh-ppP>ceEpN#sQ}+GyqrbyEmhgLy{SKJ%DK0Ur>ixH% zqW|a%_+#_gt2x$-39i(x`C1-_^*Fz~-5R$z#Na=Q-XdNfq#b8m-##Sj!Gfb3Rp!k4kb}3jA zF2F$zpxG#YBI7kw#`|0S!;=o;AQ8tyN#S~6sRBUfs?wdIO|jzmvFwFHCa zIoj6rj~y6-K85Srjjp*P2bV(dHZK;j30>kR&@V<_$b94@;t{r6Yrt_utDrMz03#jD z!Sp#7p)wt`ZmZkr9K^G9iJ$xYvA_rX$DZTlb$GdfLoSpte>r}KnaS4iVKuZ4F%7uL zAq~`&P_qQW=B5T3Aa&df`_hLYiS>=%%r79tm2>)#aKJli4~&6oZilL`424#S$@Edj zrG{KGq1q0QLYa9C(L~FDGN+CjxKh<6t|&B;*Fcn7!r3)+XSv*xrGWd*GM5&@x(#%Y zKHQQ{?Mm&$a(a-f$1y=|zut9tK;dh}2TEJ}Id%#p6#NnB^M#DFIMtah!T6G=mEFO* z*-hf+jzQ3J&^k~L`|!gL6SZ$_aC@bHD1F=&+L?t!@Dy$E#TVaka}qcu9+riN@CRm9 zvWv$63KQl5QlgS;1ewffri3$qn$V-gSO#>WeFGzZz zz?RE1ik;O4vAguh>pvU!AyU$+!RuS*Z%-Ijz z5~?R*kzlNIY@6k5lLv6xWpz9qSkWATB&;863%;p_BV6}6=oo4JwB356KI5ZvAad(s zQ`Q4lcJ^=!aC(05N_%T-duywsk!4HocASVp66jH2ZW}PiwMSX(WnJ7OD+|q}NzW5_ zNDY?#SX_V{i2WdD2YOn|3P>hbmR2Z!&)S;=rZ&N9kIkz!6M$O&SAr^Bot50W*&ECO zZ+zZXVdqUL#0{kCu0OV)4=elgP~iu%idlbWt2dZ~utLGO!M62rYL5OlI_@GhJu;yX z4W5X(P2VO!2Ddw$s)T)KCZqzeLv^a!%=%^0p_p4 z>9_Ip$(TJfkJRhIkH;X%Ehi#(lI_wkzYT&iI0v?Ia>^hFVd#^2l$(qiYEGF^X z4Gvg#_PzQo;mC{zwYNnY1zc`oH)sfK>z&@Jt;qUJt}^dL42fjpx#RabC))?#l9JKc zEQ_S93`Wd3-FLT>hr*gk5z%v5z@-u_KdA+SI)f8^6~1S=aqnTMI%Z_qZ~_j{+Ip6; z41fg|l=>x5EX2=9)K|GXdzRbPx&)Z}e~u#?^;%MWAz8TZC}VOQP0bvoLiOk&z2nOg zQLetq-PyC;;$`kWF=NzuFP_Z5w7Amw@kA}Y(3opplT9Q_3IQAr$G#YjF38qgy46aqR;#c-uC6AnvXxlVCu<2&g@TT1?_Jg?tMisbOVi1 zRggSEFcN5&pZdU3`yusjwMTcT_m$Bpzs3@(fQWE>7Y}^{4;enj13sn%>!h2=HEQb! zucHO83XjZTOUXi>c3+Z_Z2f9akZ!Cs*PMywAb6ZT*=#<2@GV0a@L;d+eon)x^46Av zO832|+d-P~jM!K$axGXOQCzL96#Rh29GU^Dnv(D?>|uTG$J!k>9zgooR*r+BRy>hN zS|JLfil!qGIJ@O(ktePZa-yE?U54iy)+$hB!hei^Q|fp&nFv1O_dgO$B(uF=CuLPo z)6?Xt_f4Kb__qex*Ji8L-hf_H^Di>)DadwDW90Wx9k5hd;AzWhWVZsrJ|eM8$Urc_#)IkidCb z*t?aCoR8bS*d53wp3+4K?cPSawqRxTYR{(Ut%IDIkdl-EEZ2ix0L!meC0vvUmGAE` zT0kr?vVrssV7Qyjba+q5*GRC*8my9f^N>(zg6}$m(b9Wt8Hb=vy4uzvUwwQLu2`^G zid~9fi!fCe_dbH9iy_CGE@kex-;QHgJ^>C9w?J zHs#_(9|B~6E8@@pmGuVoAT`U&A``(vk7&PIhld+g@$%p^3Sn{VCa3KTF!2vi}fSm9y z%2l=h%pTbRmq)OJtTuB;eIOPXP7K`=taWx-crWd_Vhnitmf-tJ8W#MiAjGPQ;Z|nr z)l74(KUf%?9Vc6Q)b!Sa(5DLv$Br#5X#Eq8Pamlj0rJRQh_F+LsFp}y9(-f)xa>j% zt~z+0JXTKRR3MRV{x2d|QpE*BlxHo7Q16~BELJ+`Q2-?O_IPHT8Qaa#6jyfxSC0ROjw%a{BGnO(G&~76TSb@7%rEG8yw7*sel~x$L8~phn|#7chFD-{jpi$7kTotv6U2hy)QW#@)Lwd#T4R3SJ%e`7k}4Gy&y##Px$ zCMG7<;L(|ym}nk5G(B95)Gb)q!td1b9;YZ}YffS-g3}R9Po(Y4`Ie^xn{~ux75v9` zA@Myctlc`mkj!}D7e+Z2)==>Fu+YL<^QdY{#M%kyqpfDliv*9zI`EdavX;q~2K!d> zj=AbwO`mN2#O&lddhb_ijSupLi>!r4Nu!h4^R42`gAVV}0xl}RQsH(p(?#4M;7a!* zkd0++uLm9&^8g|rz&RoUueglg43t)&*8=_iMI^~>E`1P-#>#jh6e^5Y@;Q}9PKJl` z>LzaK zK$0S@dOd5q(@(S|r#Jy1@HkRszu|8E6aOw#TZD?t>7%^T?r(i^aIiHV5Hg`aFyI3uEdF)Ja$rUJn%gl5Mw#OO}z2Sf$~1@87;~d-Qq?Ts>sE50Q6ucJ3FpVXl`)HRhm#z3t=dvPVJ#BO2yYBswQ^jdofEZfIH_|- zUX>}H6g*iTPL%c1uABtMf|c)5Mr~)7;wb=0Fj;mMZ;4?9LI83-SZGuEOO2@84vvp`uJw7_EiLybdCn$7DF!m|g!F*w#j zNNGw4f#WAdn8Y@K6QPbE{xAcWYA1E~__Ep2O`mTnozJK5NG5MaYF=2{D zvxxs1&w7O|*h11U^CV&CHv!<(A|%i1<~%-1cdO}S@_Y*AoqpTnCakWwZsZaPUreNM znmwr}lXtMR(^bL|Pz-T8HiVC==N>>injmBe11tF~G-)E-&sZ8nV1q+=AomT30itKK zH8^PN4UsvZi@-jRfml##cYe>$9x_z)Hs1lMJ~zx0uQ?#+=bm()A7`hD9CB}3PxsaV z={?bK%7N7X01e^VRWkfG*sv_uZxgUl7N#64G4{_=fi6y*00IhFxGrfH3fGWPc*&+r zb_r|hdj0U>dfig5FGoU;kAct?PgODPQ-L4yvr59l_5jwbw}r!Z1cM#lyMn>y^z>M9Zf-hheIy)}*W~?Z_#;+wdTy>bHa*=82H)lDa5()U z6M6^Ql0r7uP0tga_hRPnS&!SuP$8==4k+YyOhJTE8@I>+iVw(`qJan-3g8EEl!3=3 z0JdWk0VbJhXFvwlYY^o)&+KEL-T#tWz0As+0p`BE6tNggDjti3z47xIyOdnX3;YC{E^l+zUhQxNReLYGf&6M{e->eBO7E%=mokQ9JWqCJ>GwX1(9BiAWU<_0Tl&R#8jQ-VI7GKUPuqx_JyIcFMx3CJV%FAJfI7sKy@G5vU z;4cRNny`^;S`Y{az^3Cl&=DCFqZ6Xaz+JPzbYb8aj3nl$5P7@@v?QDj#}^|D_L8UI z+Yu4C1AlObCMDrR5Ez{+XNKZ2-QaROjUnJdrsM2aLSqb&0!yDU9|^Antr-uGkI!Xt zotDvjt2V@apwlk70)DTkbA=L0X`{5XFg+}iWn)zcHv!m;zOizLp%i7@z{^LIva*;4-en}c3o^lUtGpK2q7`Arw5h9^b}x%F{4 zM%d%)xx&cAaO>h*BfcR3ROrJOUJ|tJ-fv%gXE+-55BVamV10eAY?eOaoQFGQ21F(t zTfv|_5ECm|gz{E}!^KhL4AXORd5_EhjdUasrZjlCtu~jA;A#_pd*u!Y?_0n>%Zxf? zgQ-J?t>EBbIKCVXrD7_(>#B28KhpcJDH>uqpreZnDdZJMt>_2zwyTQ8TCHMA$`||K zhVS5+1cHj2QuGyqnp;G#TNp0p&FhsKV#7l#><^|2t-;3xHnv4hm&EGCl|HfyrC0sh zMUK79wLCgmo6E3&>kY))SXsF{x>8zNY7ruP9u!{I8Nc*r^s(w(IDS0#;$ug~$GH$` z;ZdE6tnBnnTc0|xD)P{2L+Qr;Vt9PyOa-hr6atOR4R+fY{ zW#_JNL4u$3BhFkI7IBaCd?7$)frrk@WnZC|1nj*ZQ7S4G#KM39WC$sSLG;E_;PWE0 zs4v3F(07cO>1E+q*dCso9JX-~&*kE+gN$r`IT-_xMq|lHC=$&=>jKS7Hj0zSbf@TT zF%k^NN+lEuw^fagx2=}i@>H}XgsgP+n!drt>S>F*x+WTcptmYyz&toc@M#3Y*XyW$H(Vi#mg-2f|_81dYilH zc9-wOZb#mGfBg2Clme?s?;$y2o5>GpIp7*BD`=tcX2TDSS$cHz2pwsxI|-ZE+9M4r zsj$2uZIQ6D(6K{W54nQ92M^cw#PrzvOiKm?B9-YvVVWWu>xl_T=_JP%VR1cGTol#B zmKFNWMW1!}=pdZ-w)If!tuul313Cu5m5n6JQb14OPbX+HDd%#Gw_3??B623Hnykro z%X@r>w3nE{{eXi#^tr)jl=oJULmW{+Kv9`yfZ5K_S2XoYSYwvX!(45+?jb5WDCfNp zPm-g;rVS+mAmi)jZ0?k&mhS!Fpn&&OI243n!IQxfu@z2r0>htXo!8%{-9D@_)$qb* z26#UOzI`6`I>dN(62}580H$2ulFD+YDcLFE6lPQb7WmZ`kxJYX#pNxir;;C%b+LS|8ck~g#iBpV| zsln*}67OWG(io6||2HJMlq}Q8_!jx0e_S_Fwm$n0gZ=XB>4}M1M&eTC^5NI@e$xrG z)g_$6*a>}sAHKc@IDeDp?Vj()40q=-z6;7CBv1o9>IE?vDyBuo!ZQlXDIz1A92NL} zL=3Q?uoVda)iN|Ep0x>Q8?pi!@~TR7-SI0HNu^p;ye}XW8sc`fjDErFdmrQTd{IY|QHz~;yv1i1UeEUcGnz-` zyrw_(3Rl0Ha+%r!W)ieM6`gEBbey~e^(LTTuvr*rNCB`S*2r?(RKo1%?;jrxWwX`Z z2UvI1NqxzLi!=L696IzTtbSFZySodT;o|5VT#wOyHmhag(V6{*n?fE%a6ag^yV5E~OboWu7(PKI{lb+U29etMBCL36;f z3q3^{;~4bi9UecJ8!OBEbQ1C^7h=$62Eq~K3rWO-y(dh6SqgcNko8DK!^7ba9GCpw zFp>xjhY=SDr??nB@Cjci6bVL#BGLQfTzcalw|o28TS^2I@njY$f8YmWt2mIGboad= z=uioa`-2I85E*onkw7AVe{nmKL_S^Sdi0mzHssYpTBCIdqTZn=L8L__VbTcMd%M<| zJF4dQCj8N<#ar)Jzrg%0l946;^?p7UBxl*%G0rTCC2mN?rkd6%o&F`6jK+UaCx2l& z7reQrJ?qp80Z4XDm;JDSzv`gl=Hg*jzE}kxCXv%t34Q3zYs3z(cq)`hSA5~Ns@dERTcf0kWDnOC@iQUh zT@x)*e|m{h8ri%sU?~ZHM!}A*pYSYm;y3AFX!c#e*1-=n>jYOoA(_Is$Pu2PpClHj zd%y|8PD6^eXUmnCg#5y+`u}Yp8g?T7Ddf zUZat*(n=__QW}e3i5!1C6nfao=jOeEvT)dslW-rpi;p(g@p1;rf=Ws@L)FxPjfYTvH~)V*n%?(e$tB~ zJyc|OopfhdDgY8O5%O2-++^rg1$6C~Fb6Y_Br=)AE%Epxnc`h;UeN=)73z8jJ?srk z-MfmJN8<5Y`1&K64OjGOa4dN=WVXzR@I~eax|7|i(=`djAT=bN0A__69-Jlb7gqOx zMIue_xNMf5a_P#{dc97h`t+So6RXzi>r<7z*r)g5ao7kz!3t1+`%i>tXOC-adVF>^ z{1b0C@jx|9SHVl3Lw3s_^?Vf}U>w^UGyJSzWzUGftWhik#OYV(O@#}LWWd3;C zvT{R*=1V1|TD77VW0N$}9PV#S`W{}xNLj;b)@wm~4BTVWVg;U}0Z6YucxWhRg~6vG zb7L6dSx9!n$jd0t;c97Y?ta|$S^hvUl8&Vi&>R0EDizBhSfJm+t#Aekd;JUo2WIwp z2FW)`q;Jv6Oh@BeHWcfi{d+Q2Z5@W&s#KbX8AZVF_YRfJ@{9W$u-LEH*M?z*;)U^m zZCRMiP~V4>@pw=xRz45Y?IOZdQMsQ)R&g{e8co8qK%VybX}A27He#^*5V0x{js|j3 zDu$xDKs1aCxEzci;~3VTkpR+(z`)3P3PpJNRKy>&2cH_%Dppr-OgT~)Qm!tdM;wJj z|Dxyhpr?dmKoP89G>8&VG=?UR(@$nd!x)tUp!l((7+2L35;~cI5b@JcE|R7iZvs>S z*L!aw&RjSa@cVqxNbJ$Vya3PJ%!MZdSX{@u4l7ZKd~fef)JUEC$T_Q&xE+0-7`ye> zu>?Xz-H|B4vX*z0n%jM+lu%Ewd=^`)iGa%IpEg(K{NCO#=}%y*8i|QRf2h>^-nXcV z9||VIiA17oS>sp|gyW$P71aiAsoZ{d6oR%GUFEJm%}`>&`O2Bg?#Y6O)C(>yx15y3 zKyH}S>na7^BO(c7A+Us~NtmIOu;a(MjYl{$YrKhxjj6i#X1?&4=|QJUzuTPe=~4AV z{T{so9cg+raC@QzTR^8rci;IJ>`{ryto|!tl=3k8j=t0LZeZb08yt+Nq3B9c+XLS^ zib1ohXtm*T0U>mjY(BUhUEF;~8s1zNC=~qR=*@RR9%fdQy=`-J$%RwQi{AD>cZrUVY&4n}B3sw$Z`%A6 z+@(9>^W@e{4%(=TTQ4QvH&DTS`$cG;>sgEXig9`lf*fIp=ox??CjtX&kwyWja6}=Z z!GO`G71#E8?!QBo=}(l)von*ENGD;3hRc;wu{4&uEjNaJr92$6gQ4u?8Jp*<=M|ps2E+;mWDE3EW)lPv)SPL|%Ut|xF$-?t*}i5?Ge>N4QL{{4S%QLT+3h3O@Roe=qp2++W{Bhf%I86Y9%+qM32|GxTQ zV{Wd&C;k3F^zgA`hmGOD(BR47L$86b{7*Cpsp+&E1ZJr)I$B_b!457^QIAGO_ zgC~Ozq2I|{{+iG<#xxwDX5cBw{lFrhe9Z}v0oWK4aOAh#Ty*#(0Wgue=rl1|a6eq1 zSZ@kj$fE+)&84%!@c^<*$IdsA)Fdz(I(z9`AI&Z<9ywAPOC^K$d24)pYPtleWJLMA z{)P?mc58~3e13mW{Q!$#QHWTG*iYWj{DXk7;3Ogz_Fy$`+qt27tyHoe#9=-@Tr437 zqBrXe1Oj(vhr#Q3ZA56*?cA0*LjM%U8U~q`D){3(sbpMzfg9TT|0nJ}pd`u8GSQ5P z%#8Ft(w51rtg0+uS(TM#+GdaG>9MNmk;bWoN`pqzBir&~GaqWM9 z|3isKHf^ATjtJ8_h~vv4?qXr9{)Y(zW;1AS{^Qbh1-)lf0dA_C3f-LnNlI1a_t51N zusJ)gp|gP8H2V~&tn0H?)ICsBL>y?Nu7h$$>}#ChqK(aw*v?w``=^jq4=ySTs5joX*y(Z1^)V6Ral!@VmUso%fkJ9 z3Yg)4hMz~9C z%gDc8rFOqu6z##yN6a;W{KZE$jZctz5)VZSHzg|Ff9UndmJz5VZdzcW#qJ*@E0_4n zU$1|T63R=JLHrg!2U0!P|tzi?^2D}x71-a!~S3xqPiW3WW z27;&Wi^a@|p8wYFPbE`}jj0Oggiyt(Of{O9)-7v-7K9tA^fP9DwpPj-v-y##F+pT{ z{ZbRTCyZ?A^nLf8hHxC7K#l5fp@aY&YkT*dE@hz{A<^KN!?;p$N9~wi*o^&epr0}m1XAmm+ zh7~MV%P{;;)>Fw++_bKMvz@H#FGyZZ+jDGG>;-tfR`$&u~q4HDum+ea?SqDlo|%N$qu(T+0b{nLnaTs(W|m-_=FBCZ*o|JH0oN+VMWw_CDG3KEZTT`YZeT&1=mj_(F|yB|RWw6q&qz zfMCPA+vj-jU>={K5uW~Gvv#}{8)*DMl?R^mQIWp;6Qk2Pvb}ppK5=olUOyZ$Z?XsG zM6VUz@!s)%=kT!`bQXefunE6<-=_y_&foVO#ND3#SR5QL;M@BM?1Oop_jpykBRS9& z15c_0owTK=_K_pG?Jc(BeR=1|Cj;-O{e7^Hj~M4?10N3NIdm=z)O4Ue15Xa0CC|EL zu3n*M{v5G}d)~3h{*yJ_I4~y;U7uRRQ}y+pxBm}chJ(1wKuZXB7{~Q#M8&)cxkH_v zF|b*I`XH7>sp|Ni@JRoT9-sMMO77%J2k zTMYQK9qh~0+Z^a!(L|+8#HeXh5RAh>udWKC$a_75xnqB&yLUxZt~2O+#X~9$RK(cc z^G!2Tj`9MhxSPY!@2`-aAX|>Y_TBq2-~*1)iN%wj zfkk`Ot=Mk0W5a&i#t)BMTUEF6Rf6#?V<#03Tk|kzPj^42>Q*&&_q_9CyGN!fAc;z% zni&6Gp@SfGng{^HRHmw^1Y|VetKyFpQa9kkfMCP)kd_ULdMILNVUE%H%1w8ig{5jF zWCZW_TLmc5N2|ELVp}O=E;!%m%wHbQ=AMd1L&3jzh6+j>#uQBNVI*doMbj)WQ~|HY z%s_RbGasBYjJeC>i;JzbU&po`_0sp7z{GsO`Ig8E1_D4PMt}HWnI)Jo*~QYJ4H8+z zGs#~DHBFp>1cShEPI2|?kU|huwky?q-v6Q;gr*}`FSXneh(}%<#y~>>>^hqV1vCKV}+}ZQG%Fs}LbmTmB zp>GNJ6Q-5PmP!zvOsEVT+85q@^W0o$7<+TiD=fxMtpgv{!3ElMWrg1-Yyvvv2HnlI zOF`FZ2_uPa8uoJub66F}!|C;crkmhwOgM*l4Z=5>S3BGfLZl&x-a)IU3Xch?JG0uH z4XCqr8RE`0a7dLT9i+^*-c5v>5K8`|!4%Z`t0{P3xHDUc7pqTdW40>r@~hreWo)NJ z*G~?dtI!2?X^VIHe#H0l#44#AAmdudgBs5-wKl9KTDgQoVAlmevdIm9i^dX7caXs- z1R02lA>rmY6*z@*!_Xuah79I6toz*S2E1>riF85aIhZ||{dH{^Dduq~4Ze#(nFiR~ zxW-+bGmRBkU3+UbFj-w(uBE~-Sfz~19}EYk0^uP2ZQ}<49n#h1#p+}r>ko`N5d_zY zC(5~Oa1IhHsNl>kj8-jU(y*$d3v;5@W6cG#xpE>tN`h=O;9n!0oy)}&1{AX@;}aE_ z$?oE6V!Yyq<*t#4<0<$b@Ya?2si~H+;jBH`Df0| zx>v?RmMZ$Fr_5XK{XdC_8KPs1-G(DWhd1a$jEa)(HVpA-EUQ${&)SM+n;IROCv|tV zjn&`%o$+dS{cWo=L|+eSBeCtU_U9Se%R+@C(Me;mn~&M1s7tL|a;0bPK6DRHKRkCK-1R?I~!ddJ}B;k+8Fw ziro8n(qAw$l~iQ%`VOjY__oOxsQx_|?33;8U%0I)RuGv7K9IEcJ|uT&!r#F~{Ea7q zsY@9%-s+&x?w)AbZa>QGeyUNCn8|`6&-LTRix`F62z)zqJea*$0JxAA3WN~#UpA;6 za3?gt0>Ftd9{MyZ){xJHQ-V{o7cR`6Ix_{i_Q0Kyy@0TX1$e$LK+~ys;laV%Kja(6 z%!LaxuppZ{Ga|Rsx86FfZj%?(izBLp3m1wkM(&CiT==&KJYWY{fc8^>F(SU!fz;>Ek-i-G2gNa~d|)T*z1};*df1-`2BA zQn-8={6r^gpnC3=(DNPB_djX__dIy+ zaiBXLP6I9e>8P3ag6{8+#PXp~CJkn`KLQ1owtF86C;iZ#`5WDhy)z5BE(PvL8P}y; zG~Fk>1-I=Ji0iik$aNR2w|&{;Tc54Bxda>S7JCHxQUKac9b*mjro{+TE?=A-AQ`b3 zfxywzsG1Ri&mG$*+fr541!_I04(P~kq=%R1_ZvyE2QC)rR>yBUr{IcRuzwX za^RTzc@Vg&>i*tmS9iA|5RPF$u?PSoWtY1T4~op+wA1 zB$C4s%M5TvKxYXGikUR=Son1cSit}^#$Ze2j|CCgb_n^z=M%f0^zDBFf8!@bPD!BA zr~lw4QXj3-XV;!xa!~kNrYJ z0bmmQnZT#}j2q1iImjqJsQm->fRh_~NQejv4!cbVO@aXxyxuE98{BYJ2dLwYYO~t` z-Y2^l!wT$SKpO-Cux~PQ`68!_*a~|;QT4v%_TeGr4Lm_V3eD*9<7#5PAmH*Kz|jXNdn{fc1gwupm}SfnG7745`x95%u9}yRT`P<>(NpTN+*H!$ z;Jtg>Grxr)H7Q430xwc2%Y4;9%9c(*)d}yO*~Mbt^-V&@=al$nT_u5`|510!GDu|T ze@xr->KeLOXl86yy$kV+sZ$YFXKE^yQvWekuLCI;3Bz{f03fC=+#vDl#&{|i85@hm z)PESx47$yv?M;gW?WA!%Y5xlioUUuwenqEv<%8UjR$YIQZ}4pccEgP5 zlNY!bFb%<@P$@Kbm%~42*ZXDa-2=M98m43zdU-A1rsI$YngH`sXuw^@LJppgn z@0b%_SSbi_-yyH8Gp(Y;y2;{6O9hYpo_tBV=c?|ceS;uv>GhzozcG1D%N)VsQiA@81Ucm;0VH4pIT=e+^qO35|=H z%!l5YhA9BLP7O&kl78ohE^^^=*>3MBut0!dTm^h^!9(|oz8Xxwe}CY!`+M*tg`8iE zL|!r^;)p-f{btnD@Vh(olJ3JAOl)oKxdy!*7f9oblq-j(?vM}d{VE1R>L%}M+M07A z3*7_uHT?tuz~&2J4S^B22()oPZ9|k(j6X`IFNg1i)j;sx)tJ2*jZbwyaRm%Ea?q~i z^TpB8qVX&7=%yW8y%%mdqxXg{r;}6NzrMl@opAUHbL8`C?-M=CVaR}lFArWIh%@{V zkLNFCefSk*tqz_iz_!FR4cb`>s`#g#agO3wg@%BZlQ*leqnzZ_OT}ESRIHCoPa_tz zF=q}3_z>Z_n1+h@mM1Yvh4TDSlU*konz1JyZMAO{G)VrM70<~l$-(oDjVCyAg!r46A{2>I7 zkmdP~x|_1NJ1_>`@z^nvvib!D&{um~^1jdXB{5f;Sg)h>p9Dcwy{1HVSSRcd{V!{# zfn@}G3`|I#Fcp-0KG~H{W1X4fCqk+2|DFn+aFQwb3ZE_&r>9D#Df~~vS2zT3%}_X# z?(U}P13bu4SLisd@245(#KZ)Ikwb{jsQ*Jq`iK$u-tVQN^7}e^ggfsuxIMaaow#le z@P^XpnotoWw`&khDb_7KQOT%r=F)*1V!XmLlq>a5*C$L^KSYCfB+A`4l@oUaqmfjF z1F*;50&h{UE8tNb!-q%F@EdZVk=_uF;-%`&rUtE>J3BjC(y!}AfCzprVIi%yd$ERu zx)BLQ;gGa|Xkd8+7=^s!1A?ce7ZOzfKyNU?*hY#x(oc*nR2nzxxO3zU`Y{L^{kj1y z1n7JIOW!A8$MR|4=RpD=y%MYf*&NhdC&PoJh1`jJ&eqQky9<)QZ>T6H*b5H1Q{^?> zXNTQ+zD&<_4IAHYB+bIwqKR9>cjM|RR)|rpuCCtby+$-jVw}188pQgDJ^(9aM8Hzl zwR!a{$0yD_f*asj3c;;_s;cYSyn6OeP)2bcKafGq&lh@!=E3^9b^n*Sf0jyp`_6eC zE4#1SvIh4s&xv(yAOfu~D_&{pSbiR2S)98L8?feA>ZtoKfg7AOtTtp4YF(Z-1}+JL zYlPa@b_^TAt+BnhQLGV4c0~*WFu%D3ctT2UXj|X8iL!@o3k12$_|}Yat%F%l@r^rD zYKg!Pwyc}f9W1)Lx2f;-c~gTS9~QbRwg3?EFM{5eRuh#7TjAR4aPk0s*J^fD#S(<-*hBqNK^6_*tZ-K~ zkLzOpE$C05N)Rd%QxIHjmr(^t;4xZ|YNlZfyH~k`8&}k%0x>=SmiP0g_GA#TS*uyw zy{^vc=;F7;ugj3#+zR`xN=8qzG2i0wa>yFbSxF zl+!Em7%lzoPr>ddGB!0e27M?iUZVg0Qap*4MiW6le2@mM_$VeWB;>o{k%T{(*n;Oc zIJ;4P29MO(e^&&I=VTHQ0wP0c{0zMoZ@>`QpGX9&Ry+YaC$95qA{;>wI;+Y9Y>-qB z4~}J4;$|Eo#ZBw9lcsqI&e+_Pp7c9KcGWs18JRvwf^cFLzEU)1y+f~&d2s(^HI%HN7R%Y z)DGM46SU^@hyo4!_lSAciUb2QQEN0jJ{}&mqIYR;9Qynpk%%XF913ihh)$)Z|cMwmMrFn!LmN zMxX!rC82)aK#%_7FQ+9@Z=h=AK*PrX>JoGcR29KrUDS~P;pz;dNbrncRX73$wzUdg zs{s1-V7CU=mZ5agT5HmFTER&IN6;1k@GDDvX$2-Ciq(pN`Nd2o6OKChNCbW%GA7L7 zVUq|+O*jyVIQeK8k9*G%%p(Z5oKgKe@8J1Ez-4=4Q=08`{~NroIn((}C^P~2XrQ(p z4hF1mPC#UupN7nS)(Ql}>oqtU@EgCnzckO+o>gsrm0$GM;9HLv*>MEJ2v`qLcW^00 zlJwLARsecV<5}YoQnjHa5UfCj31lJN_2ub9(2yA_)P^$S5Hcbi*pEx1Gl4HouHj7r z)324Y9|?y)k}Vr8LdxzR!Y|vR_*z>OA8oyBMOkEjl<@sWC3>vkLzcyT+0^T-8u{jX z;2rGX>eaADgR}=$b56aXxCaRBv#T}7Miv(~2EHQ2wHgih&xhh+qak4_ zd*6_YjfKS#ZyA18rTYm;Wtt4Lf$^^b?(G5Y#l%+(dsE!)Kzu@PaCw)MU|4Tvby>0*&bdlv3(MpHw7F_eOn&O&j@ z)sal?xJcaJ%;(dUN;0iTJuA4DdKYwW7%fbdrXFGralm=u^LHNX&3)j@j~WPCLx1Gdf1zETw~NspD$ zkqN%NOY}id2)MuOFyr;>e5tcnWd_N`r6KQCuc^Gy4C8!O`^=mx8*zQwz)qc9EgYnK z2VI)8lhd*x!s$5x8<8F5ZA*3>VUcMZUT4^6NwK$e_AHg_@W(x6*FEFXJbQL)2e$)` zl-&WrV?G(!g|JHk*rjA|a3APxs>;kA@x!{kt=@G{-KX(LrR+OmL6hGBI(Jv1eT#%1 zu$kk6UxnwYHO}4v99Mu_vDFFI;Z1~i6lF-VcyZ15h(OyqG&VX9)wben28MA_#!w37het-U^c=(ZX(40R z&I}EYP0ht4nFuljz#beKt`_sr1fhB|8nS8;I~W+gg}OnvK+QN9sac_DG7yHd-e|s9 z9UcMG5OG?fC?GyJH8wnyvGtnV!iGUhAB^kGcBc7}o##pgZy%dwcz1(&A6ro!IiudZ>Pq`o7$1(Os$^D zcP|E0#+4L;VtuN^&b$A99y_0k2Cr)@FCNd+sj2p!Y2?PkFN2gEvd~YxMQc{Q{;00A|3l3m{fnt@1^ctUpI|ibAA2Z6z`{|c6lY>ui z>KI#^QgYJ`pX^iJ9ie?t*=?*32m5B**TJ}5#K^te_ZnF(5YzN2ZmCkOKw3yV^}D+j zmAV14vEYRzgk>a)9{AaW-dWcO7qH1vVxjihgDJgz)0FB7a_Ot?so`@^;Id=K!1ntL zj~!P*Z3m$?uj@^DQ}4GTo?z<1l*2WzI_R~I`W#PB>k{=DEG~7K(kZESCdg17A16b#f4%Fy@m_b15@>93 zq;$D*t{g1ZThhU6EjM6ab>NQ_TokDMVmdW8fOm3D@Ryr9kpO@TVQ`7+G*#ARqn9mz zO*#JK!UEy$PE&!f)&ZM0m<_haS5|JSj<3$okAlM|?pCHwoVdB&To1+8;S|k2l|%e4 z6Txo4Aqk%s%9z`ivotjq#Pju7XzI;g_+o73GcRr=A9zcokZ;g?3yWPI9x^fy#cWui z1j1|a=;d^d1xmr;w}B=^iQL<|U(eOv5O=({F8hxKea=}02`=*pSbT)1Fa zH**(TKEvagWgc&~tUGS{N{4w~m(L8r(FI&5jGlh@;nVPp2yRkn=+xy((RfoLn~vNZ zE>}+OG)EudR{7S1b(!bOR^qKZKQh|fIbEJVKf|221`xL_8ZzMef*p{IM2rv;3fw>g zLi=@q2T@kj2IoLqw~0y*d7Dbjr?ARpGl>~NqE+Te1F*)8xXiiJ;FJj#&;$4-bcG@e zySGu0wye7^KBmu4!&B4P(Bx1w6Pd4$!N1cl!yQCEpGpUZtJUGpOb#)P zd8+e~OmqlwKlLgYsntfnM68XS+C5zx8>^k(JvCM{wnI?EjM=jpr;>|?z>~**dPN9peL}IA2aQgJAnRxhTu!vx@ z$g$lOTCITC^VEq0rU1-raIfJIgA!^v@Cc~)6Xi1v6LuD%wqkI~;$M}VaN%VIgBCbL zQ45j$c4dp&)}YVe?h4;$*p<}&(7WhX#h-~0S*CV%BVy#k%o9!rgXyplS+9BNSN2KY zQxm5tHdJW;d;7y7FvOw;WTU80miiHmoEjzld?B5_Kq?%<0|Y%kqT+w?ic#i4Mr2PU zMqj}di?wKxPhf5VHWQbXh}G1|5OL5+!>d44<4R0}NkfnfBo|dAi3ag*yC8_m4!cNv z6n%o7=ceOlHvp>bT8HNgeyO`^CY!{i1?r1_rucN7up?FJBp~ z+umN2J-)*#`s@Sq{ygCLz2DK?KMV&$sOC1bCu9MzNk`0xL#KUeS8ZeZw0pI`E{>Wn zz4_g{*c!y3s-4b`UJPje!FB(hZ`1ZZCh7Dqu_6e)N&O2hO~AfkDhmLPvtkYiHicP; zhs_OZ8E?3lHDZ2pmU2yD-5k+Jy9eL`x??+O#G?s>9Zn|`u;>m&vzd$o2XTmXht-@; zSQZ5;Ffh%gk_hk-0gp4Cvk;^e&yVWEO$934&++DhkxWB@KZy?o{qVF6|9FvTWjJn| zX+F+a@EJw%3S@XTJjI1!AqPG}7+K(F3R(L6_Fd4t705DP@NIe-Ge)`b!tUtN8IYxm zo;l&&5psVU94J-MH7g)oWynQ9Qc&Vh~)we7FJe{ z>XP3u(rNhMO4?JS0KSRgVeFgHYL(X`r%YpxZ+A8`@W=zD_$kaQe~&kD8*GOz`CfUj zy=@8=>@g55Soi&n;qV=VQU%MOE z1FIonIrF*A81GAKL|^%vTf*1Zn&!!q_pi*&4TI2$)mPi+lxm@%U%wCc?2wLQeFVDy zS1PkUF=^0j3*w1DG0lM9CL(#amhUVg?zf%4Et<|IAu_RP|K-o+Lxq&&F|CkMe6{Gy zV9UWv`Fx;|2w+x#F$Mwb$nf0U$gualG)>2#o?#)DIJI@ew^^`gXPsz17{K3eF{5i0}rCNbVW_)F~mSfc}%;X?sMKM9c zk=C(M{#btQHfhuF$lUqKYy=tb(=P+tW;8dvn044I>#XEWi?4$FMcUsN;6M@~NW z#t(g{R;a{-?6y}E&iH&OvtwL=)yiqEU}Cpig7Pba%7G=;KswVEe*(fl-~518%4dfg zjb^ja7#T*uRog~T)!`A9GF-|$=wy>3d_joJku-I#VuH$_QZX zlq)4SrQ{Uakz~f%+~oW1LhcP-o`a9}!@Dk@NpW7u!8=wD1$;-@$-!Zf*0N=6BU=on z9YB%3;|zyfl?W4F(iixeSEbc+-M!X#c9PP5O!V0ZX(uWA{4|#V|95*AUL{=bHPA1G zOx~|w*5?ble0^3$>JmxBC>%la;?9sCf1EC*DAS_pgvFFR)q4*1h&W0rCW3O)q2M*= z1<=u>IdGedFhRu|7tzMpds2SYtFNPVcsfUQvXS!6oT_&={8C>>N9pXy{C4L@4b(O% zZ4f>^x4$PnVFCqy*9wiAU9UP}JMoQ6ojc!1*kPyJ`EbXW?0g*ic{ZE+`Y(Iy z^2=XOAsP(iqF7T{SMGQ3@;!?03Oi1SFWISqW#P=ANu*;1DRb3=f#8eMA#y;{iKFO# z$ezvvC+ip;LjdC9kGBe+*Q@r^@V6X`BoM9(;lymfvSD~yNsULNRR+Roh*z$vD0HPF zB?KMI8lhS+h>$h_I`K+&b@kSnapSHdJO4cyJ3JlqN1(16uq~8tLHv>qfQ=F{gCnsV z6d<7zkZhvQ;$vwiW}8M3Jf9johGTFtQ8RGk%#4xzvUhTOuhDf%o-J$oBslUf$1W?1 zenR<3?})l0yN3KM@O+5a5;Cz*1-ZcGBBGRY9m7=sju`a(CcE}HPt!0 zJ|79dZTfQB4?m~gj`Cik&-!q17MR#0zBl;Z>HC269Qs0a9~LkAi3Y4>8p$Qj;2}#t z<;0AnxuN>U;ZG|V3?>svE0r)d(rs_Ydat{W zTM2llH*xS^vJ$`q%|y~4dSyJ6f*z-h!;gW3l?oxAQw9JP0rYZkv}L3bZ^S{rgZ&qs zjuLsvWw|f=%`o)-U_GA0kRv=g49|^V#8|j>&fEFk>r48RRwC!t12y`3FkVeS*|QoC z`M?6~?N?*qWiNuKv;k{}^Pt|gFlxs^<~0PO#gNo_Cdvt4FnYQZ%?Bp)??g#cWSH67Aeg?XJ$;CjI5IFNfV&hQfi=fnWt3vmyN#U#QY2Cbca z4*`GNhtR2fE}i-SDTp9-_3#x?Sa6~-IBT}gpicJ=Z0Cq9|yNoFW?8uDe^G0BC z)w`Lf>+V-FV0#X(k_VpK01giRe)w^LRv6C>escYgouar|+A3d~eL1a*7@FEn-nZdClwWg+}J%Q=^@(mb>D zK#Jcg;sYp^rKc@CcfSI>Y7o}kObgcM-dBXD=nn#0Y7Z0S76M37a2A-DM6ANybL^*Y zJrD{#0Aj!zABWEy+i)*}4~9YyBEG_N>6lM8;Stc^wBX+{V9i2H8~z+EkP`Z`iEzW} zu@~1Y`EKyt2W^@6`aVLLJh*?VNm##Q4e*@6np(l~6#zgE5@y4i+KYqScY6|AV5R(J znC#^x7h({+$mYa|zY2yZsGwd9z!-=yg19VkP2?!xLxOv<-1;It?&8bFCzH7x{QAer zBRTjhLVWM&ylH}?#DK&jc4#^hJ#+4!7v7FE7;PYJ)CTWSrFB0yk~6|2Np%^;jo|>z67=w7+6?Thn?R%If9u!<10 zfNMBW0ljD7!Ew)ebl5id_VbWFJpwB1lfHka`;>d2%--JA=N-2-JaIdecPhFG5fZ=* zcNH+_vJ(JvrU|K(LR?l9`vq?(gbk#d8XzKe-T`_JyCpVPjvoqWU`)TwHf&DRPMx~r zj#H;D=xcx-h^WvP}rFa@tp)hjwiy#Z(|Ka zVXhrUz}^ffF(N~VME)QEa^%#7TTa8rvIX}8t(B>%?61?cS04r1zx^Kb@Xiim6~PU2 z2WSu?fedF^G1GeKDIfu-PrVd@C9(9g!=UnjBE1<1Cy*t&sD;ay1cFh6WgWf`w?IU} z$im_Z*aeSzvv?oHUPJ)1Wmr{2Y7^FH~!JMWF$ zzp0=+%m?~ibM-@m7Kzj}CY0@3O5DrUtqblk}_Z|$FeM^9CFJh3D3k&!q~nardvSfAh5 zo0Oie{iJ5e@7r@lKmNJllm+lFlt7q}fSUlwR8b`7!0=x9_D5rrhw?Ad?6nA*q1{H^P_+ zrw!-OR58(Va{$egx17TB&AJVzV@>6S?BEId9Nvff@*e-xSRX8Pci-*c*Phc;7w6c6 zLO5eAdHPdFHt%(%bX1F$#@-H=)CQNGSXT81pmlfw&mrs7zGm*beIBje8XSzlyW_{= z_^0Sjkw5GKHQn*mV9RkQc^zbyDcvgWw3->AQn>3{0@%3nT;l*Hww046fpFYp#o6^q z!|;*KO=#fVO$9oD^?Z#$#I-_83FxZ!0GQ&b!9<8WYNd&6we$q@nfX8jx|6OCIm&SJhyr*TI^p+#^Z91q_hZzE^f?f3p}$4b zWRl{rHe>+YoogHoLFbiXFt=NW1A{D_$N1AXy^DcVH1uHMlMS_Far{{#zhtCjPB&7@ z#kj$X?$exoN?DXwpLEhMDyx75S~;?(1$gB^3Px2*@s!*BQ$1w*tipZ<+T+Q5HO^@e zm&-u+Pg7TPo^4*l5hMbZ1|3fn5!kS7QL>K1;i*Ok18|_|JdB3W7+pHg7$VOYO+z2* zMsP}B0)4!&hmKuhqAPWiO!&|N?_i~@J zzkw$M@4(<;3DXk52eUwdt*VzZe{JiU_qN;FglyRLqKEO&H&^wAk;I4|mh8z4Z_9S% zDoj8j<1CGhl}cglvr4<7=yb5uxCFP=d8=Qfm=~$9VQ}rP)`h{GTrO?Yd&*=5~*pdiPVY!P@(fcbL{F7E<`%gJI%2m~w*1fSWwfk{9 zbYf|`6oZo>gp6TN;AGmd()83~bN)u#dPOYxjcg0&(nJ;{8nmSzDNgtwDb!(u0I2ul zU>fbHQI6hw+DYW1?#)8YnLQcZJNnUOaGMg*5S5UE=`?udW&lPiu$&IQJz+nI;}8T1 zI6V1w$jzg%)Fz>JZ~(vkKHrm!%yS%mt0e@|jhNul!I-ccenjbMFT3o2Sto!t(8+}` zW^4n|P*&D90T$=O^idvk1&)#ES7_hVjy=Kw?7aFhnLnMA!kRMkaYy@V?~Mk#_BV^KmY%Ctp53>a{nX)4Au~)!#}AM@1JJyUpOfHd2U=O z?rD7FJgx&ov2ZI0Q2_2CC?Gq6!h(kJ-xFTsTV1yo;quFdru}fS7|o`C@7t_= zD5V@&`8rLn{GjnR&%y^7`09Ql`)nYQOs64SDFl))!a3kiCNjCetEUc8GRcLb4~&+} zVFY0=!)wFy2M!@SszcAoHWcg=?RMlX5GVu!$zobSqnFZO-#Ik)+rAGCc`IttE2Z7VS|v%WqvlX%nr0zfs`i4Q+Nh~t$<&5LyL zINaf|xkcvJ^AxroGQ%c3+}h_NYW=Oj-udlkA!ZFMl1&TPJJ=UzK~Fr_zBs7l6eK0! zattSd+aAp$Jfsu$Ewh(sW+8Z?!g4*5L%6RO1{PXbvkA#cb@vH{}SOGCT?!UtZgM9$%~7z#@CLVY^>orLb;hi_~%yXR8Po8K`z z=)*GjfhW+9uFo2v((D*^n%cATpneMI6Lb}JMVN!2L(|yy==K6uV9ZQiV(uqT1A&nL?Z)eCg>(UbwcQUm zWA%xNA$b!e3{6bb;po%;65dkY#wk11{qIoF@VEXEE^_lrH!Tfi zvqMW?S^FOfCmC$t{h;l%a;mBzauV}CMZguzer_fl{YL^A7IG@G^-Q>ZJ*o5^z zeij0@9q<0PRPcnccqR`oyZ_jtR*I2G*-Kv;TKXSrUtuSF1|*#-4o9VDE-^4FzG?IV zF(BnH2{2HUAt08=5QEELHAE{%63-gOe?nb`l5yHs-Ah~Id(-Loo8J4gmC6_2+qumN zz-Lyx^orX$#!po$$++X-aUy|?%)>XkUw!YnTVGKEc4G#dTh9?!6nJGkgLxN)_2o2p zioPt_WkFkjPQadoRsfjxzy!clQtF3#kPw9x6~-S0aFjX&Tf-&f9Jl~pxoD)eLxH<* zUwL%^jwFo#=hZ8>-yH~T16>N-X)Z6_e*4n0sn4GXg$ib1IcASrVZT2(5AUjRBW(D` z?bvd_1odq{X19Ji6bhGqdO7r%4Rh7*?|R>7IWLVw7W{@Ch}QjqrJ&!k3W!MTPb>xe z^(ZuL{NM_D^wjC&1Rl$k+}>@N7WH$kL8Px)4_tY|_JM9(-&L8U9<2=_j#oX1B-y%v z2|DFS*QHIBPaXGRG=uxg1n@X`nK*_{r<*_kN;Jz=1XoK;IW<@8D=anFly4wav;mLa zXgb^EX~?0f*=pvvD>4d>o5H;FCNR^HTMghZi$ll?&7PZ1ha##6BBAuOFv16uH2#Lf)yUH!DtlVZn`A=B=LtPN!=(R^v>UJ-Noo(N;d@)vk+Lou>C@ z^&HGI`jT~}2I$4p@W)0@aaE6+ax1XIF2g2x6?GV*i5M8TSCfXSQ3t0!Yq_J}>~zV} zlKmTRS09WNVaq9gW|CAXaM#YZ*Y~XhTk!^HnHE;T&CncpXrM)DZkW=dH0Vh>+StH& z;EL%O5uCBF!oen0SkXeN;8W)fXQ4kE%*O|Ax}Ha>#l3o~uwb8`i!@+{;15LoO@B1t zpN{$)k-4Nliu84+E?T|RpVLlm_4#Q|eP9(h^gE_23rKo*`y2VC`EocAb!KOsXdqmk zU&=o+U(PRW24cC{*&O_TGwHtl?rq@`KrJfFOA~gO;Xd$Q8*ug&F|*2>Z=j3gcr?ay80-80|zp`)_c_+Lcdl`Tc4zIhHS74pr_keiqI$ z^ZBvy;%6eA=pX)P9PX)vmS0LFNM-f=w?195vr?C@8eQWl`0xZgcK11K7OXAvl+fR8oNIj|7bv?csxfVKbAnK^U=th`5xmJ z*WbCutP6;BZq7wUyWh+tek>Bzh#Jp5W?ajR_Bo4`xB`z@6E2OS`0UHRo5Z6>n>+WY ziA^7C#l&(El}|WC!_c%56GNfzec;(+2M8$TW3k2P-O)zHXJ+c@VCLP^R%R+2e$A_j zxq8~N@||(s!qgkU!O&d?IZb$*)xHR3+u) z!^QNSf!GVf@$P@|zPi~f1gTB$6Ac5mjgLZ3+{PFyHB@+F!iXwNh8hYJSoHuFwDD8E z?&!o+gg)ZK)OhDt%cTWC=pX*>6Nz{&5xzB&{2<&Er*9dChbU)bv~s!oK74nefySM; zM&fxo)O_i3IcTRM$rnYf4^G^kgWW))-Th&2rQLc$-(pwM0$I@jpz^GeeY7wewauZ6 zo6t>^sw0s}f-S6ffeDXEJ@)E^frray~QgYp)9v*F3V!KFO1@r&} z@c3hI3@QgA37sS459mA1MHTW$x~vYhZLsXH5Q$s}4K2C!f|OL>U~i0_*l^qOw2{1d z5fP!Hjds%5luAPRTA5w23$9`^Ys3|kU|UTDopK~9yO}i1RxBEh%%FodVM>uI7Lq|R zqsYY**L$-OrSC^{X&bo*k?jsNj~IRF1S}-skC2f;fQJO=(*<6doK^sLik;BE5Ilw* zcv1k_Fo+pJg7;a8AC!i7w(f_(?$7VO`=|eWYYR3X#9WAk^a3a==0Gkt`nH|dk7Qp5 z|2m8%g@Ybfp1W7QcYJExfB%+Y-@k>QUF|$ipZWYR#11_F{&exxe0Bfp60*vh=&mW% zKj*PmUGhDQzR@!P7#cts+N`ug)rO@JPC~I+Knj98NH^J6lC=j~U<``4l`I=&0P$Hl zZPd|O42Wdcb`?CeUpShD(Ob?LozBOnGv5U)B$9IH#S1gA+|0b)ue(pZ5nf7_;Ufqg zoc~GD{FpKY-|qfiBxc;9aqiIcbQvP(+JzAZV&Qt}mKO|9!j4lFv6@N5{S%|3A>DZ{ zK&yT#*;*`u^t(_9oh5ee_fLr*t735w{*-~2Kjgc5Jk8W!fgbiZIBmHI095fV~7z;tEU`RZ}er)k3H&nEVO6TsPT!i*J!4=%#{#{EY0Lrd9b>MgvxK$@u>UILoi=z*RUm1Oq^U)uP{(ST|A9dao*?Kto zV&_Lc6n#q+ev^x!^>BM624_-7sartudvi!&i6N+@+p4kCxszR^FN5Bm5 z%wHk5xtyp~q&7ArAp>AKp_JqTkp6tD4qus(dh4baMGz=?yng!B?YZ3Tr%p4{UncUR zo8B5Pm$N6PrcPwbn`fp0wK?aF z9xX~NhbtP094aQf8iEJZ85k=$w7~Uf42b8r7l9xyK?nc|$c+v!TyWBG#1fl}hKFES zol0eI42470(tM^k46dSOI2ZGVId*a~nx(@@pe)6yI)v?U@Sig0Q@Lyseppf=1a~ow zTmuZt>~O1+I+Y%pNaT}^^G-aj;+Y725`*s63V5IQLkH&_zJKA{!5rb9M%FJ$c2{MO z9WEp*pcF{fg9KYvGtu?-cL;WR5Q81qFhv`;aG;z9x87c<#B#Se?Y1#0ocbi_L)<=G_2ULhs&%YwEu0eX`xlgH%Dw#Mi|$J`EDD>y6_2ruW0Fh>`NX zJW%Yw2M4Oc*7YjT>0Ke!!|zz4zbhimf^%{KaEN%8T^Xar`x-NVv%o==d1~QOCndnhyV@QiVRAzfSlS-PU%kVCcy$YH*7w%lm+JX4x;)TS*LqpEZi9q@O?tlF5 zETHF2HvyVvpLisZ%~;ss;V|d@c`K7mJmS(};#ZV$&u$XGcS?B-f(|#P2m6p7E8Wf9 z-KE8hOroUAk-Hg8bI+~kC%&C8o}k_mzCICt%RYH3UCU9j_ucT?Pzx8@xE+& zDu=okI!EEj$M~_i&erP!c=l0e-t`-i^VQvbk9;>J8Dq(xXxU^4MIn?1 zSw?`J911;N)JO+BfbdEW4qJ&>xl98nz%Smxazk_YgcDqjxE6gBpj(O#f_>=^P)`c+ zEQZp#T)I+Cr2=QpewPcEI@7i8U+wRDBU_)DsXN*H5Cl|~1z#+ax%uU#(XefYN0*l8 zoJquTgS^&`59PB?eP*@}2$Xm$zLLwuVp${jlGA4xe*`^@LB&{lKk)IAVHV@bjLmXc zek55kEEpsE{VB^R!S@KtW%)LggNvq7ip8)W_i=`seBXmPp!-HMTF7UClOU)qGMcV* z+rdX;-1O>8pnKS7?d*5bow7?!l*`Zzqyy&&Z2JObG<279>5z2be#0ZXBg3Zk%ilq# zb_7Bf3KJpu622HJvuC%qj(G5w9E7cx!Be04m)&oDM_uj8c*x(Pw`RmX&rX6LM-xfd zS_+>4-6xY4QZ96&Of<-WfU4nAVQPddP*=((V<~f!#}AR5sn^R9B0-LmzxF6aPPZ+0 z|GH#sad#!eb9WoV_+l)TO?I0+z9#E5);HGIC*tu!wKo0(-QN_s)zUZG6G{@Twk^Jn zc_Q*S!G+3*!>~!ZPSL5Z99S(CwZEc%oJL%8{3V>kEW*+Qde>0?FrdZyyfrIc461!- zh^`MJ(5DRLrf2=L)432-E5niW=y#}N@p<@Bh{e)rgb#xZ)(Rz)^feX2ZTfT1Lf=B0 zwF{mLzBzF5CdXOrl#I@XzXBMw7)5=B8%6J;e`LQmKdRK)qXpX<4`i}|;n2`fXgH9~ z1ja495Je2(*@+=5OTJEV!uY`)mq@VaAOP4O082?fRyNJ@V`(7de}J%HPSKiy$H5}J zAi+aYc36*P$M_;7QD4= zJZwuiMmlX^y9hFk2Txu2oZ5m-pE`HH)%hOlCJ-}5z;R|RYb0PK6Gg15QmK^juU4!- zwuY?k$I$7CTdd&|aKwA6y)u3+|62;)spGY9F@O)BT3wxv#e?@={DrcUix^=9I1ik< zJ$z^Qj!nd1L|~zE`0h?15;BK|KnKZww+8}X2ebGF;P5X2t^Ejg3Wg;EY+DLCbzwdT zm?Hw?=qs@b6QrhZA6BPO%r$Qch}>0>9=;>x)Z2DH-kAhFyMka?gk)&LAl7f4)}>fBrz8MP9S0>yVT(eH~wmRPSBU?8%KI1@j&Ha!!2xoVU;zC1QFz4mhmH1Yc% z`cS=uIg3d5sG`e1@S%>1KD^WS3g5e-qb}UQ{)|!vUj&8X+eQF=J$nF4%&ySI0X-bR zZ3HYxmx1del&Ly1j>-ahSF{`)RN}b0kLP@Ysmizq;c< z3ZB8^*}iN@%=KUDUxD53j=5~^eF~8EdB(@hX`mWc4wh@03!eJ)ihlWFiBQ@YsJ-Oo zI1$I$6`4g!<`Pg8%oo?t1*D)&#CJ`0D*`)gw@UvDqGYi`Cev}UK~X4b3}q}i?Nx?0 z9EkCThat>!Hijx@bMY*^0Yu{T1`|KiY?{U^ zfF+3i1-k#{nKKWeuHjx??@cZ(kMz+1g}d&8vJO!XLwe?h;(SgyYypp(T|_Br{~&W%^gYlCavrJYQ|G<;!oENrmeu5+e4buS)Ln@5Op6oW#)$C++J-b!-7BVMYBV`#lPECvn zH*B6|8h;caSL3^JL}CRGpu`zyP6dNga06TzE9J6CKK8M(2&OKiF8R3VOEmMaPVwi# zcI&UOlF?uZD;ut}dNhOPMovTH=J$x=|D{vuQ=2K^`I~1<+Q2D7`!Ie5F~f zZ&iq&k36(l-F#>S!)jKx>eZ%-yX(#WWcQoJlobh7ejk~PweB~K&>F@4zh4Q2{VCzQ z3p|j$ZvnV~8#_`+UiPk9?JML4v4#-)_mAjc42{CZiPsWR=p%4n;r)#@xSrTxv}<+k z3z|2PPbIBTh*X;&n_@iXz{Dd@Pa#$^mA}fTbR&{SsuM#1n}VOjT`0t-x(L89Fgdzc zc+Z!aBN_?ka^+$+8=+!kIv5HU(y1VeN#uj6bRisqxfPy7ve{xemkT2X0;<68uq@*$ z%fkGlZN?t@M8,?TRwyQh9i4UK?xs#vax$5a;;s&P)b*Q<0%E~FySd}J;Fh@v;p z4FI*az*@PRK)PJ4uKn!i@}Y9~-y#3sZC_QS)3O2gOs zCV?T%ix5xVWG;|aP{lS=snQ2Z zg+g*9XNB_oH=K||r|*v6_(J5if)xsfZ=ScoRETXt zjnzdcyxfeHduEg+(}`Pr^ajuMnZ|hjg=K^?8i$%^{!{8hIcv%Bt8ck$h%{dioZM5G zHIxj47{CgGf;f0+^#H&E_hSIMo@)xuAwmk7OmZOv1|bMm62TA?nF}u72XBM+C)=+d z4LJ|ros8W03x@CI!wa7qDHdYWSt{2gYIeCiK3*={@6{L32?-mcqf1t-R*Us@&$~bD zy^Gb1t*tw*IL$vqK31~7(w0Dr! z)w{=zg5??7!l*}YH^NaHR|*Vieyu~fo*NlMF;IF=0}5DaeU7|zn*^3Z;}?zpJC;ht z{xpU^_k5oXU&S4@6QGevsCL=V9N#oPk&BT+Jus-uG^l_ z)+4mt$^ziE=u!;PfyQJLOxNK3k%fF^R07A~RlJu@kLe4Qj6JRjIY1TbF$FmQsO$kp^3=^H zi;A#{v^4>I9vX&d!eAQEt3vVL1D3}BPksKAw)eLEWP*7*Zz91HBvt_))XvA=-D30kJ0MxWWwVIcdFdPj=K#w&$*3T(kn-m+v; z@|N?FuM`dt=MvZZ^z2Nuu3$$!Ix~A(E%rlFx3vzfK5q}uxxm6jLVA25_>eC88Q*>- z+D)SJ-a^?Yz~j&-+ZfO9?)Qg8wR5Rkj2t!*rFW$K+(Ss6C+lR1El+|b#SVVfARdcR zm-WkVFX$TiRp<_`*@G=njWL{vk?#jTgtm!RV_Ypbtmq zUK)?t;rNS@w{{^Kodn2(RNl$uvN5MVjJy$tNV;^(`^(AT0@H@mBcqMUxw$#hwE2dW zp%aK(PXwd!@XbSZIBXA{0t+V^JaH>MLu4T3C{5a?i8m%2qa*2I)@&h|EWaOpIWT9Y zu{Yn3)!UbNan86JgvVY+elX# zaO@~757<5SUC@{B0xsL4)B&n2%2-5Db%n({v-G+t&RLX59FfsQ6^o=MV*SCUNsTwY zu&q8(-E1~RpgnY>NW-n+?B@|}Gx4vM6Un=)dvNgA@m8nGOy@=t(4T_TJpTtVp#0+{ zySjO=bFMdceb953$T4cBQu0Aq>Ymh%3s^ZJ)yC0sPfP(7vepfT#|s76juCHn%!Qlx2I0&ddw=V)wSrn&583FqN5q>NO(al)}khzY*CSvtiEEY#}1j~v&_E-%5 zBT_c}DnEAYLp{Ymd<&dlM2A?w`SW~j2)_WQY4LtSAv&+Dbs5gEYJhS60 zsBBtLxq7~6pG`?iUVSJq7v7XRFI;hcf)m!YqkZPL9hjqxg zdtARBHD{mGTsyK+M@$=+W>fV8H}4p$M7uY@!0grVa!DOiJtJ{PIGc;zX<2$~cs{y{ z#mo=qV&Uu$_j(yU&pAq-`JUMUUheoN0C&&B>gqDI89wOy=pcs9desPN(^UKdOcuhC zscTwDqZ0%BG86<#BR?7^;9{+ZHM)rhb9}oZeB@giJ+&950CNpA7AP`omfR<=@z6`@ zUhiEpUAEs|%BFrtQU+h#?BzQ6o}qLhP?f&2p5bds*td0NXSt&4-A~#q62KJo(`(Gq zPf}<>FG=3*KfTt!S$M>pM4i7o5#fmnDn_qK8UgKS5Osj8MDnb*t=0@VG<+MT*@uwRTfaL62MYFLcmJ* z5#EyAGT_K9qBC$Ssq7%Q4wK|79CV;Yb7_BBDFbsD8>-_v&btY5pIGRkwBNkNX(_!dUoe57&Oe~-HnPdd))M%nuOvh3`bD}X^f~f*{4k-j;LLJfu ztnn=~6bR)5A*hF$g& z2O>5bh-M$l7v699GnsPGwES87)M`2d4`*X2+Co_fniT;TI37pY!eiORl-c#=L`RBt z|FYiG9Ak`v_?KwZv$B{u2pA$zT)^FW>s_a=9mpdS-JGAl>8AO4VHfR+4lk#mhGjAz z^$pLx8Lksuj^7^3U|EVA1w_D83iEF27xeks{v3dHN*9wfyB~U0Z}NSg?@PWv0($PW z8uc|eMkQ5BNduV}XeqHGN>$W_%gbmfhKA7T089ZPmw=P!1;-LNCG1f4i_rAs=LoYy zUJ?E%dl20Vu`c_QIoaP(mHf^MQ!r5%!@`Z~c60N6cM{=J_*1@Co0_WC@*RDllJR(l z{j^ohcKA}YgFT<)qey!HqjUt1dQMMt#~W3Z|5+3T{l5NJ zHun!012Rs&0#$TL+Y!o-N7PXvc^$Mu4SeZ8drBIt@4!d)SM9(o`SD{~eoRTP(yiBL zSzCKzyXF_m^hYtzXolGkm6~A!HASHI38EDkrVCKy5aNae5J?{%W=a1EuBQ-uP8hxP zu#vhN0y@Qb{T&~>`*GsVYMg5ZmEuJ)@rM2-c^*cm4pd@vYwvf&GM zA_;NUjPnI<%z}NXQ^ZcBHESXs#eU9rcQrz-c>Eu}ir|@`I5VNBb2T16H!~wNC<~Yy zVp&^2IiWWRUI&Zvqs=0#5jgB%uJrYSA%oH*I@wlOGsj(1YbU`eP}(J@A%#(sW!7LL z**#ktbBD<#Jf(zTY}pYWMm(NdR3q<_U|Z^LF&D=UGCr}Y+QHZ1v(DkWPPsfPeAY&_ zR#XGa$%U&Obyuua8!X)A%K&Qc`l_H|ZynfCYPy!9*4IwUyso8dPLHhz7C&GhMZLrl zT}%;UM=Y?dP&=SJMzyNGu8!629vSlL=88y~Avu8}uJ>|RFu`5oNbbzUNw}(z1*jBP zY9w!6VF7MgGADP1*BgR_`V=rDYBI2r^h~7%K__7@LOooeb3B$CS;g9{%hCo#1eaHk zECSo{LTup6Y_;qeDDw+fZOkrvUFPcUPN-C`PeTs}Ljq1?swj#CyBs&6h>fWRbUWel zcxw9e>FFs`pRc-dZ0QXHW*}4WMHQN2G5;TLZvy5>cGn5&g%lA|D0GBEx0FgLm6^&r zm8m=`>*!MTQC01(?oPM+s&>;(d^T+x7x-%1*rdV62jD3Vn*n2-HujiifGrG*hr^KO z^fC-I%WwOKfphdX)Xrhny4k?1B8d7wJR7`v|N&--K)cABuc5 z@^gqb`MZF3@|6O#hMGil4oH0|)B1y!bXySUdeaYvT&95;47^MR+%`Hz9H>#nnb9E( zsm8AiyOTpTcDrRi$35e%sjCE6Lbf2DbkUGaHiYpi(%d@;PcH4ryphe|3RIB6sh&gn zdx^2A(qm5>d*QLt?x@|TM{jm%R4Q=pDr6J~(C1NRD0nNNg7k7A?B=pS{vrg_ z*olGMr!;rF*rT$OW)0#XQ6d|FP@^Fh#Fzm_%p!~nARn2B9)5_^v_;Nj6^ZT%5ZR8P zgd4gDt(qSE6A?!T8rY@Tw%b@ll1)zvzr-*SA%#!NMBGx#XYBfM+|`cY&L!$XkC z9ucu%ib~3&9T3Rm`EU<| z=U{ZCcLn!Qg9(~fpka~h9fH~)Fxvm|)nvLp1wk`%F+~v?+3F}3GrIr3dgPWL>uTI3(0l^>lLe_?=r@evF;!I%OkT%z1{7L9ybgtRIWzY$X4S!bgMGlO0mS|+aqQTGaobv3J9lCUPQy$R z3F}d$xPsdV+-!H$Hb*3l0N#_0q=WII%L2v+{8}uV!xkyEgBq!317tI5z}^%?7WHz_ zl%=5u0L&C$zvU1wj=A;Gen|vn=t!CLi1(VyPlsUPX_k-f z&~l$c%+W(|MX!Ox=gsi7{eDEe{}CPcduAK+L&Plzz=sh8%|Y-RNa9IUwP)KHeo!C; zm_uro;J3h43!N5@hx7>ndXIAf5lV18q*ed}F!wr`irj&d;d6uCHcC()>^gWIUcAot zR^5kCJ7=QtA4*Im5rYsuY-;&LoWkY!iDi|5Ph2871=I9|;{fB|w34G7HL5oFgT}O( zNiCkS3*C71OkJMPeSD^|n99W7Ix%BrU0lnr#bf<5C^BazzHOW&`Ok~EJ?r}4$_pSK z;pq9-zve6SE4*fAg3o*MMz0rK`xxKYE__l`HF_)jh#v3xAPYsrUqp&Qni>EqVobPP zCl%l(#tnb=sVF>0v{AgGt#TmFT_fQm$QaQVM~DCZ+_bwFh1DwN+1=~Rv9@+MCm-|< zd+zkP`~Llxy+XnJGHDNOc6a4~Xz0iWT7k~o#j_Khx5S%glF1o1xa4^gXD`lm5`%+3 z{X{DDi9a2Z+|5w&3c85xiG3yMX^m&9kWoiW5M6`UA{#0~)h0e~n0OB1DBiy=hVx4pKp9ZOc! zl}ggdy!KS5qjFKBpZZ+JF;0dgY`Fi7LU;#c&qR)Rm?I+*a3WEFlq;P!GC;im<_Hy- zjYczO6vA8sqA<(^R*3@1W~Ihcw4p2c-=A7tJu^RTsIHT}_o`nSeC8;f+d@eAn2}DK zhLPZua+H~!P3Er~l`;}*y5&k^bfiB>Zx2-Fi`vTIJtP`FrH?csawG{w8+|e8`>wZl~tvhWxISK?|X^P zqa`a^xc}CSlPW!eu*k*C=4J-wtno)mDJOg8{zB9&KiWxne*OY(F=N?G8Vfoe_ds{Y zu#Pycv&ZDFfL6ll{BIm&(9{}c07~LX3Q9fp3=olH=Qls4-4aRvU4U^$fMbE z!uBs*@a+T+&3qwurjsngI{E%$HtlX+EUBN)Wi8Nv9&!xB>&5o6Zpx&bGspCxaPFpj z(@eQp&yFjAoQ#)Dm{vB2&K%~Mg3c3>ZrKUNZOASFUtrNC-8_u3f=leeSz9I<3FBa@ z1xgM=T*{uIJAvR?qO$aG2Y$p_2*n3m78rxmG)yO`;r+Z}m2i&-wn6KAd6-91h zIEb6ZikZm7jds8P;urV(Z6lsZm@5X99tcNSk1DrTpHJAhEt9DxosOX~z~x ziBrfieB_DO%Bq%;?>DqC6_DYP$ziNhZH}YSw=ao?5U_*$c0t&AN;XN0P9eF+yYR;fYLLZmI0($WdgVkR3TXV;10P6su(?Q?Zy|j3*}z zOnU>oDUADI{il!9%u{2!2J-C2SqwIZff$m;WHMd^@0FU&)-aHk_6@>wC0=fbANYp- zVaeYX8BeMShR7()mg(AAo-Lqdybj{Cc$oq?Dy!P`3UDqcBfwWXf!8rIQ56O1Mbclx zxfF}Nfi98JG`@+2`fco1yfInHlu8A!SwnIU%2c(krw<#q7(B0guphpYF$ew9b_Zci zOE8WutQDYjoM8gg8Gj~-)(J|6g`jIl->fS5kzj#K#3Y`Y7%Q$J*RE1|Fj`J)oE|N;wR3Kh{J#9r(eV+E!9&7be zQ7hfQ%HmEsGn>X)$BcE<`E&U9mS}X>E@cZBmAY8Smh9cZ*B@B%z@Cu~EYYypEcrHP<;(RtMAFg8ZW0>2BhB@WYejx4yl;c|z?N8+Z;}C<#i* za!wkXSSLF%Xi-pY1A1uONUTqjMf{MA2IEJtNpXd2c%q7q(@ii%6y|u9k+!M|5+O6O zFg@RdLNy9s#-xo5F{}Z0-_GO<@MC~L*3V}|s>3y7J8|bia~UyCL3ih4b786gm6
ob`%8gI^rtK!=OYkA-N~JwDH`iz&8WQCv=spLL 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
#+EkODqv!&>Eb>LGm0 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 PqgJwz$gNb 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 literal 0 HcmV?d00001 diff --git a/en/font/webfonts/fa-solid-900.woff2 b/en/font/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3516fdbe330ef1cd0775dbb5bdee41a4ce2cc010 GIT binary patch literal 150472 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 z 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 literal 0 HcmV?d00001 diff --git a/en/font/webfonts/fa-v4compatibility.ttf b/en/font/webfonts/fa-v4compatibility.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dc2981941df8e153515fcc8718292d5e83b3d594 GIT binary patch literal 10136 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 AZvX%Q literal 0 HcmV?d00001 diff --git a/en/font/webfonts/fa-v4compatibility.woff2 b/en/font/webfonts/fa-v4compatibility.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..28d46b15ace8f3e5056c6de1e387062b92c8dae3 GIT binary patch literal 4584 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 SoVIq!9~U|32P^TH0RsTY6q0@b literal 0 HcmV?d00001 diff --git a/en/images/avatar.png b/en/images/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..0c7194cb450378cfae6c696288aafe421c5802ad GIT binary patch literal 123306 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∈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 Hu0mjf#q#Ld literal 0 HcmV?d00001 diff --git a/en/images/avatat.png b/en/images/avatat.png new file mode 100644 index 000000000..e69de29bb diff --git a/en/images/bg.jpg b/en/images/bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bfc3b606c8c5cb0ae3f65dbef7510a59a953a712 GIT binary patch literal 125091 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

hAI&Wck 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

d>XY-BV@vm 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 Y3y>k#(FNv$Ae@nk@P8o*F+aNh1&Ap5?f?J) literal 0 HcmV?d00001 diff --git a/en/images/bg.svg b/en/images/bg.svg new file mode 100644 index 000000000..58dd9847f --- /dev/null +++ b/en/images/bg.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/en/images/bg_dark.jpg b/en/images/bg_dark.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f6a1b2398d372b297faf9ded5d8473fe3af6c4f GIT binary patch literal 154901 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®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 literal 0 HcmV?d00001 diff --git a/en/images/bg_dark.svg b/en/images/bg_dark.svg new file mode 100644 index 000000000..917d08f1c --- /dev/null +++ b/en/images/bg_dark.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/en/images/deploy-provider/aliyun.png b/en/images/deploy-provider/aliyun.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e9c7ff54f539ab8577200cd02929dc47007850 GIT binary patch literal 3279 zcmV;=3^4PFP)&Yt#kix9sj9s|KGy@bs+y#2mhZ?|8WQZm{|XR zH2;@A|IDTTelh=uEdRNR|Jb(wwRrzo2>)#s|6UOPZ2|w5MgOa6|7HRIWB~u8W&fa2 z|JAhr*0ukoYX6Kv|Dk06X&nE$f&XX%|B5{SvV{L`0RN0e|6>UMvv~i4EdQoh|A0IH zn@Rt%a{tSp|CvbtwR!)2CI5pu|D9X^dmsPf$^VHw|GkF)gDU@qLI09R|AQ$1!;=4Z z8~=DC|6>9Fgc|>kMgNmf|D09-!;=4M4*z%$|EzTX!H)l>XaB{S|6&dQZxsJw0RMF$ z|Bg8Sn@9g`2mhN!|8EBWX(j)D9RHCy|Jb+xcL)EiYX75d|Cvw!ZVvy$mjAST|5*Y5 zeiZ+KCjVm$|56YCSp)xsA^){^|6Tz9cMt!bPXBKM|Ai+1lRE!g0RL71|4{({Vgdh5 z0RLDFQZ{XO0001XbW%=J01gHB3uYPU?}g)&E9&}m6tK=SQq{qC6hZp&@T#tVKiQcf zL_ZZ6pXO8X!-Bn)`FYY$pJq)Tpj+z7rX?ZKDcZih$4v0qfK z_W_8CL{Y-3)U>EkOVeUoB?KgdfHdI|0jXFYG1f<8)1*n8dx!0xFT=9zYZg{%d*V6$ zPB1b%GrQm1S@teFa{r?sNXzxQ+e+TWS#Tv%4=t2x7gZN`JIOq|GoDIKnJK1b1ja}u zo;RMD2_&a#e`aikmN(Jvl($7vcgafNK1y^$|KLs7>wq_f<=!M)KmWoJ$5pjS{;r4!3=keN<>}my zGMgac`90oZpEHl@D0eb~Hjwb8YA?&^0C{bxcU(Jj2oAubO-><^1e+G}LYlKd8b!kH z7bi|#me`v+ZpVHNfenTeJ$nKUAY+>SsCYg5Y7W^Ih#bsww)mdPGP3p0H(V@xBoyr0 zFNbAf29=?Cb84_hV-0JGJZ6Y}8vy!)()nElK;1yP_VJX63j*yJeA%FhKrjkzT8(60Z;xJGl?G78l7Vi)<3h}6Ki-0t1E8Sn z!#zSQK_{*G;PLxJTIib~cxK)n2Pax+836Q0JXU)WsOP`@a%r`5V%`z>_8TMlM6-o} zm0H51*|*SNtmoAl`6lf?_Mxnnl-&h1*e5=7#P3&`&ICS2G=6G9%e(ga!_wsBz|=)> zO=d#J=apEenGRA(2xfbfiylD`xCeAOS4!Dz$$;%j%!M zr`U6Pdz>rj!th560HQzXGLNhh`x{YD?V|3WcXQ)2?-u!M=E$DunNT)NbRCgw)yBU1 z6c9-y&N;OwgYC&p?H8VCS344$I-QmT?k4b=#A*XkyXtMY*!GDR^dtxg&h7m>y2@`m z_6J&lXBhiehg!gP&oV>Yr3jw=G3e3yW0GzEV2%z>N09gE;ce{EznbRNI-U|B;O-?a zsU;^#I`fCOCsP@2C|vhM(zAchwihBYAigNm(#vs;$ar01+5=)CveT`#Gaf*ifo4a0 zC8-A7+&DNF|h4@qU_IdzJCI689YJ6CG!M#TM+Y2uz5M;3~bnIJN z=81Fmu?M{?%bxrL_TwIISO(g=z7gB@-ZFPR`#yPoC-%3*UYha);;ZSdJp#mn&tJs) z+gHAQ+@k@My=1Q-xO;o-eOVb0np>KE<#KkvfXJ}d^8Ea!%9q_de^xCh*MoQ)>`|VQ zxI~bE>|N)znO|8Hs$cc9C;o9>P3t-C9zrM2@0Fypx5WNu-u0oaCm-cG&Hl#~uKK*M z{anpu$n{X4>E0sy$;r=R)P5%I^YrYuxLMWS(OnLe+5;9e@yBdFy0JCRl8{dj6kZ=aG8oPjXV z{&(oZjqCyOy7qv6g}FJuUy<|cKrq^?s9HAs8}?%Z?2nDH2M6{J(9ZiaKeW1lLMzs? z;lGYO@47Q}mTUcc_Clz+pz&t`4Q?MO!>fdyThGzP07a)z4uQgLn&p)j@2@}Ekcub=rhwqH&ES-ZW0}bg^@7JpFX;aBX708ws5?5LouE#N+KpkJ|s}YrFGn1t=|A zX4q8RGM@Dfde+~q{-^fB4eUXd2?E=GW1A2(!c5)?yf)bLXGrZsJZtTkzzhG*H`;ut z;w0NaRP9kQv9mweMy*EY1!nv1)||mU(K$c18KL*NL+;SUjAXS>o(yXrUlnnneL~B0 zsgdHsw*PZmX2u@-$6mPV49cj7vEJmV7!HRE3C5GGkZVZ$S?x&{T-n&W+`F2+2HXCT zXa+i1iVgP5L24g8VdQz9noKDPmZzBVSMP+O0`Tr7=3E?~a-`(7CL_fAG>u3(SwPnHO|q0^J<&^`Z9sK6bpx-`rowy!UFMw0VN< zOT{|7JEY(1eSD_poxsR;1OptmltV-)rL9{ud^rRl-WjHfCn96pw8V8NJr;ZR2+4cT zGOin`$3LDHqomgp?y*-dECuP#fjl~3u3Ra_oaB0~zPX+dqRX&I&Zf=`^~Io1c@qhv zez8@hc=7SqYhL>Jt`o$2yI(PtKD0fRr35r>z4NZw8fVg+vi<2c#hk`xaL+G)Q=F1(CEa* zlFj`x-#6^O(}&5uc_75x0r8JY9Me7>8s73DAlC8XZE|@=!SCuV+81&LDbF8LnsF0_W)LospaFws^PTMP!F@ zfw!6W?iex~pqTxRWBqjkk&AZrJ90NV;!%pq>tgSip8Xs;fr#4IWAXK%7m$Hmx#wd4 zX~rHw2C%!9s&ZEQ=Gw?eIAv%5AUr}jI&bPT*2(vk5$8PX+W&OqtiJxb!srh&x!vxICBg3E;ilB{vx|o5RlaaLN1ZbnXVvS*81d5wp$9wT zW+FSxzet<;Ir-E~aVm1>qr}}(1dnf-fsbMDDu>oBxZO)0?tg9#e*@r;|0nDyhN%Dm N002ovPDHLkV1f(5u%G|{ literal 0 HcmV?d00001 diff --git a/en/images/deploy-provider/gitee.png b/en/images/deploy-provider/gitee.png new file mode 100644 index 0000000000000000000000000000000000000000..4701bbf7925df86dcf3df31c73f2e1332fdf03e5 GIT binary patch literal 1799 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 R95Da@002ovPDHLkV1l&;X666@ literal 0 HcmV?d00001 diff --git a/en/images/deploy-provider/tencent_cloud.png b/en/images/deploy-provider/tencent_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..9abe109b7bf89525046421cddd7197a74106a977 GIT binary patch literal 2422 zcmaKtc{J4h7stmsmhqjj73MpPHG?NhiJ5rD*h!@gsINUe^WC7TT5gGp{NO$kD-8Muy9DHH=(yLAUIa zQ*#gqG}6qFVD0s3{N@>hJ~c7&XA8wk?vH(Zc#_qLYBL5$t{V^lf{3Mc{kMUwEw*Zm zSyr`KpD*}zfuL`N4o$BQrP=a$oc%VoZdPRb;I45u{*(fvNjB=|z2|8-=e4H&KH2%+ zPB|8B!_m^}1Xzg5Eq!5vfVf0J3m$A)u^yRdDNR8dg`3pjQKTSS#oc)g(GCW{ z#1&9AHQxQtnLqMv(oQc+W8}SX-@OSIWTgk(Cj6V%Ug~R=MiSF=YeXu%?VUf&4vkKq z#K2eZ3DywI9?dD(&lc= zB#(ro82gCm&Ap&XzFXQ+PpVuMeTM$j4;ifHIiTB(R4`J*WW|D81r8;hwkT~$u>py^ zs#Rc7Py)KX7IGt3i}?eqD04B_R`5=u&8oJGOYq&kb@MtCL-ELAl$(qaIhFUr(;6?j z4zH*XpaV!Eh3d%a@eeDNv0gGKF-7Q*>ilYSX7x{$4+*J&-AG5(Tiuw>I3H7Q4^_LY ziW)4Xa<0Z}y|s8Y71*=8mRqZdqCL+Tzku?&dILdEym+w>2dX)AeW$52YJ;F-^$el0 z;X?;j=K{Kjm=4&)~}Eii+yJqR|FjdN{ApComs z_1k@M#G7|xJ#a+b!wvurcD?d3e}+FE&&02XURYY2p8itX%C6B+{%AcQ)ZJA{kVy`F zg=%YeI(00J^p5cS&C?r7r#&WVn@6?dofnVv092gmS%)4rV8=#>fW!bnIG>Z z%|1Hu!+nX?6+`mvVhG4u*1;w&_UeOPA{T=WrL=%V18M0e?L*3J4VM`DTMnY-g3nvf zl4~fv_ub;VsGC5(dcHXD$tgiRC^jX-MxEvj4BXSEf}r7C)w#*NU_|}Za(*C3z}npc zgX@ur%Y4>2P;$_&DHm+eUGM$;xgu&fIrSiKI$m28ruyCAV&-9fc1BJNT>LS0$^R zl2D0U#-Z%^UW^?wp;p6`;o0g1*Jifx3Kz~LQ*=>ceP<3JMLL`ve-7&>{eR#0ffT6dT0i5>zU1P+vbNn9Dk=hj9#fb zXT+d8Rx|_VwKi)6hn9A>yg;a6Rbh|8-`=yX4H-(N`?xk5Px3t4PrgJs+oXrgskMiy zhZhdTL4b#-2u|myeJbV%Pr;DEbeX8#zI#ZHd`{0>Zl92| zw+=#7g(ZWGmFrKRDPYSgQe`;j)^ReFfVJv+G{Ej0iZw=gO(4$j57XU< z6U|rHcmJho8ilw|7CL2Tok=&B!SsC88?j=Z?k&5OK2ohBpiO5+4;}BsF1))^fr=4QF=9ry;hjH*`n8I{@YiPNGhd2T zhlTV}HNm1Cwxv1;_&==(o%m%n8E6nYbaaXP z2}n%^>fTC~Apl3A%U`YONpV_!jxAGqJswd(G%lV=;-IDci^Wo@zzXSW>}EjACuJpU z4n&$T;HI6i+O5Nh^-3Vx>F5c%Pmo_%^xdb#oVkBnXar(>fE#Rc=O2W)nxrV2`ZH(Y z2r1+>S?T{`t?==#r|zaL^|bi}Y! HpGf%^)a^jF literal 0 HcmV?d00001 diff --git a/en/images/deploy-provider/upyun.png b/en/images/deploy-provider/upyun.png new file mode 100644 index 0000000000000000000000000000000000000000..98feb4dbda3adbdda43b8a71201f8c75e42af28d GIT binary patch literal 2771 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 literal 0 HcmV?d00001 diff --git a/en/images/deploy-provider/vercel.png b/en/images/deploy-provider/vercel.png new file mode 100644 index 0000000000000000000000000000000000000000..fc66aff51ce8e3e8146e7cbe6388e12be33363cb GIT binary patch literal 1645 zcmcgt{Xf$Q9RHfh#%5cVIYeoTrR2KeO32udr3JO5EW8r>ssdV=BZfn6aj$h8V#SDl^|7~k2t@}OvlKdBuyy{%a!jJVgjT;bu&I{`xkw@F!h~K|xK@ zOjySq_JoyWOLb}94ksOIb=82VT7P61hmw+RVJcF)inU($-!~y1BQV)t97}gR$KS3NYrk! zwQlk8?ci;W+jBFe_U+fv`FM%1H`$^v%glFrFy8b6123CInWH>mQtw zVwDko)yF8Nl;}f8rGf|doD9*FoCW7qU9#@Y-b}rS7h!b#yB5cn<2|IqUrLS z&HJPIb*ohS3s)8vxD!i`;+S}tibv-jhaTKY>5IBl@lF+vDeO(EvMTBo8R3t&RZQno zK{B>VB4phk*?#?gr*SaHMCh}uxs&@U=DFlM3Ycp-e9Q25x|f-g`&U(5thPCp!A zFcBTeY{3Fw8Grkm<|G$d6sUk98Q~pq!b!~k)880I?%vXnb{Q4?L;g<#Ux6xi5$WVU ze+WJ)Eb@UUE40(tlMu?e5(7cJQNXaMDFMK9tv9C=VmQ_)S$IR!`0&l@t~Qsa?uF}-@nny zGXM}DWFlzJ#fo1_gy%*(hiAh32H#+&1S3ByW(VTN-ohsgV@U~G60z(pS{C;Wu4@ZH z@6hy;ex<{w0W(E_1nX+^IT@>?oErM5nHuOC`Mvke5bIprWPvdhpSPO!?)n$9$h3%zWz?R1@=-&&bP`3g*vtM+e3$F}(sbXY!OkJ}dho-J=zQLDeC29ncf3QH`CDYO`odp!xdp$#p@VK~5pm!}fqXAPgG1Yut + + + + + + + + + + + + + + diff --git a/en/index.html b/en/index.html new file mode 100644 index 000000000..775a5049a --- /dev/null +++ b/en/index.html @@ -0,0 +1,1163 @@ + + + + + + + + + + + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +

+ + +
+ + + + + + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ + +
+
    + +
  • + + + + + +

    + + C Language + +

    + +
    + +
    +

    📚 Notes and personal understanding of the process of learning C language, used to find.

    +
    + +
    + + + +
  • + +
  • + + + + + +

    + + Data Structure + +

    + +
    + +

    Data Strutcure

    + +
    + + + +
  • + +
  • + + + + + +

    + + Singly Linked list + +

    + +
    + +

    Now we implement a singly linked list with C++.

    +
    +

    Linked list is a Data structure that contains a variable and a pointer pointing to the next node.

    +
    + +
    + + + +
  • + +
  • + + + +

    + + Ftp + +

    + +
    + +
    +

    File Transfer Protocol client

    +
    + +
    + + + +
  • + +
  • + + + +

    + + GDB + +

    + +
    + +

    Compile the source file to the binary file.
    Add argument -g to generate a GDB binary file.

    + +
    + + + +
  • + +
  • + + + +

    + + Obsidian Minimal Theme Setting + +

    + +
    + +

    .css setting in obsidian minimal theme.

    + +
    + + + +
  • + +
  • + + + +

    + + SCP protocol + +

    + +
    + +

    scp copies files between hosts on a network.

    + +
    + + + +
  • + +
  • + + + +

    + + Source Lists + +

    + +
    + +

    Some commonly used source lists.

    + +
    + + + +
  • + +
  • + + + +

    + + WSL2 + +

    + +
    + +
    +

    ✅ This is a tutorial of installing on WSL2

    +
    + +
    + + + +
  • + +
  • + + + +

    + + Clangd Config CMakeLists. txt + +

    + +
    + +

    Vim using Coc-nvim plugin clangd-lsp need to read CMakeLists.txt so that it can auto-complete your code.
    If your project builds with CMake, it can generate this file. + +

    + + + +
  • + +
+ +
+
+ + + + + +
+ +
+
+ + + +
+ +
+ +
+ +
+
+ + + +

获取诗词中 ...

+ + + +
+
+
+
+ + + +
+
+
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + +
  • + + + +
  • + + + +
  • + +
  • + + +
  • + +
  • +
+ +
    +
  • + +
  • + +
+
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + diff --git a/en/js/back2top.js b/en/js/back2top.js new file mode 100644 index 000000000..0a55150e7 --- /dev/null +++ b/en/js/back2top.js @@ -0,0 +1,52 @@ +/* global KEEP */ + +KEEP.initBack2Top = () => { + KEEP.utils = { + ...KEEP.utils, + + back2BottomButton_dom: document.querySelector('.tool-scroll-to-bottom'), + + back2top() { + const scrollTopTimer = setInterval(function () { + let top = document.body.scrollTop || document.documentElement.scrollTop + let speed = top / 2 + if (document.body.scrollTop !== 0) { + document.body.scrollTop -= speed + } else { + document.documentElement.scrollTop -= speed + } + if (top === 0) { + clearInterval(scrollTopTimer) + } + }, 50) + }, + + back2Bottom() { + let scrollHeight = document.body.scrollHeight || document.documentElement.scrollHeight + let scrollTop = document.body.scrollTop || document.documentElement.scrollTop + const scrollBottomTimer = setInterval(function () { + if (!scrollTop) scrollTop = 10 + scrollTop = Math.floor(scrollTop + scrollTop / 2) + window.scrollTo(0, scrollTop) + if (scrollTop >= scrollHeight) { + clearInterval(scrollBottomTimer) + } + }, 50) + }, + + initBack2Top() { + this.back2TopButton_dom.addEventListener('click', () => { + this.back2top() + }) + }, + + initBack2Bottom() { + this.back2BottomButton_dom.addEventListener('click', () => { + this.back2Bottom() + }) + } + } + + KEEP.utils.initBack2Top() + KEEP.utils.initBack2Bottom() +} diff --git a/en/js/code-block.js b/en/js/code-block.js new file mode 100644 index 000000000..a8fad818d --- /dev/null +++ b/en/js/code-block.js @@ -0,0 +1,114 @@ +/* global KEEP */ + +KEEP.initCodeBlockTools = () => { + HTMLElement.prototype.wrap = function (wrapper) { + this.parentNode.insertBefore(wrapper, this) + this.parentNode.removeChild(this) + wrapper.appendChild(this) + } + + const { style: codeCopyStyle } = KEEP.theme_config?.code_copy || {} + const { style: codeBlockStyle } = KEEP.theme_config?.code_block || {} + const { style: codeBlockToolsStyle } = KEEP.theme_config?.code_block?.tools || {} + + const isMac = (codeCopyStyle || codeBlockStyle || codeBlockToolsStyle || 'default') === 'mac' + const foldedIconClassName = isMac ? 'fas fa-chevron-left' : 'fas fa-chevron-right' + const { + copy: copyLang, + copied: copiedLang, + fold: foldLang, + folded: foldedLang + } = KEEP.language_code_block + const foldDom = `` + + document.querySelectorAll('figure.highlight').forEach((element) => { + let codeLang = element.classList.length ? element.classList[1].toUpperCase() : '' + if (codeLang === 'PLAINTEXT') { + codeLang = '' + } + const highlightContainer = document.createElement('div') + highlightContainer.classList.add('highlight-container') + if (isMac) { + highlightContainer.classList.add('mac') + } + element.wrap(highlightContainer) + + const codeLangDom = `${codeLang ? '' + codeLang + '' : ''}` + + highlightContainer.insertAdjacentHTML( + 'afterbegin', + `
+ ${isMac ? foldDom + codeLangDom : '' + foldDom + codeLangDom + ''} + +
` + ) + const codeToolsBox = element.parentNode.querySelector('.code-tools-box') + const copyDom = codeToolsBox.querySelector('.copy') + const targetFoldDom = codeToolsBox.querySelector('.fold') + + copyDom.addEventListener('click', (event) => { + const target = event.currentTarget + const code = [...element.querySelectorAll('.code .line')] + .map((line) => line.innerText) + .join('\n') + const tta = document.createElement('textarea') + tta.style.top = window.scrollY + 'px' + tta.style.position = 'absolute' + tta.style.opacity = '0' + tta.readOnly = true + tta.value = code + document.body.append(tta) + const selection = document.getSelection() + const selected = selection.rangeCount > 0 ? selection.getRangeAt(0) : false + tta.select() + tta.setSelectionRange(0, code.length) + tta.readOnly = false + const result = document.execCommand('copy') + + const copyIconDom = target.querySelector('i') + const copyTooltipDom = codeToolsBox.querySelector('.copy .tooltip-content') + + if (result) { + copyIconDom.className = 'fas fa-check' + copyTooltipDom && (copyTooltipDom.innerHTML = copiedLang) + } else { + copyIconDom.className = 'fas fa-times' + } + + tta.blur() + target.blur() + if (selected) { + selection.removeAllRanges() + selection.addRange(selected) + } + document.body.removeChild(tta) + }) + + copyDom.addEventListener('mouseleave', (event) => { + setTimeout(() => { + event.target.querySelector('i').className = 'fas fa-copy' + const copyTooltipDom = codeToolsBox.querySelector('.copy .tooltip-content') + copyTooltipDom && (copyTooltipDom.innerHTML = copyLang) + }, 500) + }) + + let isFold = false + targetFoldDom.addEventListener('click', (event) => { + const target = event.currentTarget + const icon = target.querySelector('i') + const foldTooltipDom = codeToolsBox.querySelector('.fold .tooltip-content') + isFold = !isFold + if (isFold) { + icon.className = foldedIconClassName + element.classList.add('folded') + codeToolsBox.classList.add('folded') + foldTooltipDom && (foldTooltipDom.innerHTML = foldedLang) + } else { + icon.className = 'fas fa-chevron-down' + element.classList.remove('folded') + codeToolsBox.classList.remove('folded') + foldTooltipDom && (foldTooltipDom.innerHTML = foldLang) + } + }) + }) +} diff --git a/en/js/dark-light-toggle.js b/en/js/dark-light-toggle.js new file mode 100644 index 000000000..42031678f --- /dev/null +++ b/en/js/dark-light-toggle.js @@ -0,0 +1,66 @@ +/* global KEEP */ + +KEEP.initModeToggle = () => { + KEEP.utils.modeToggle = { + modeToggleButton_dom: document.querySelectorAll('.tool-dark-light-toggle'), + iconDom: document.querySelectorAll('.tool-dark-light-toggle i'), + + enableLightMode() { + document.body.classList.remove('dark-mode') + document.body.classList.add('light-mode') + this.iconDom.className = 'fas fa-moon' + KEEP.styleStatus.isDark = false + KEEP.setStyleStatus() + }, + + enableDarkMode() { + document.body.classList.add('dark-mode') + document.body.classList.remove('light-mode') + this.iconDom.className = 'fas fa-sun' + KEEP.styleStatus.isDark = true + KEEP.setStyleStatus() + }, + + isDarkPrefersColorScheme() { + return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)') + }, + + initModeStatus() { + const styleStatus = KEEP.getStyleStatus() + + if (styleStatus) { + styleStatus.isDark ? this.enableDarkMode() : this.enableLightMode() + } else { + this.isDarkPrefersColorScheme().matches ? this.enableDarkMode() : this.enableLightMode() + } + }, + + initModeToggleButton() { + // this.modeToggleButton_dom.forEach(item => { + // item.addEventListener('click', () => { + // const isDark = document.body.classList.contains('dark-mode') + // isDark ? this.enableLightMode() : this.enableDarkMode() + // }) + // }) + this.modeToggleButton_dom[0].addEventListener('click', () => { + const isDark = document.body.classList.contains('dark-mode') + isDark ? this.enableLightMode() : this.enableDarkMode() + }), + this.modeToggleButton_dom[1].addEventListener('click', () => { + const isDark = document.body.classList.contains('dark-mode') + isDark ? this.enableLightMode() : this.enableDarkMode() + }) + }, + + initModeAutoTrigger() { + const isDarkMode = this.isDarkPrefersColorScheme() + isDarkMode.addEventListener('change', (e) => { + e.matches ? this.enableDarkMode() : this.enableLightMode() + }) + } + } + + KEEP.utils.modeToggle.initModeStatus() + KEEP.utils.modeToggle.initModeToggleButton() + KEEP.utils.modeToggle.initModeAutoTrigger() +} diff --git a/en/js/header-shrink.js b/en/js/header-shrink.js new file mode 100644 index 000000000..ae2938dd4 --- /dev/null +++ b/en/js/header-shrink.js @@ -0,0 +1,50 @@ +/* global KEEP */ + +KEEP.initHeaderShrink = () => { + KEEP.utils.headerShrink = { + headerDom: document.querySelector('.header-wrapper'), + isHeaderShrink: false, + + init() { + this.headerHeight = this.headerDom.getBoundingClientRect().height + }, + + headerShrink() { + const scrollTop = document.body.scrollTop || document.documentElement.scrollTop + const headerWrapperDom = document.querySelector('.header-wrapper') + const { enable, header_transparent } = KEEP.theme_config.style.first_screen + if (!this.isHeaderShrink && scrollTop > this.headerHeight) { + this.isHeaderShrink = true + document.body.classList.add('header-shrink') + if (enable === true && header_transparent === true) { + headerWrapperDom.classList.add('transparent-2') + } + } else if (this.isHeaderShrink && scrollTop <= this.headerHeight) { + this.isHeaderShrink = false + document.body.classList.remove('header-shrink') + if (enable === true && header_transparent === true) { + headerWrapperDom.classList.remove('transparent-2') + } + } + }, + + toggleHeaderDrawerShow() { + const domList = [document.querySelector('.window-mask'), document.querySelector('.menu-bar')] + + if (KEEP.theme_config.pjax.enable === true) { + domList.push( + ...document.querySelectorAll('.header-drawer .drawer-menu-list .drawer-menu-item') + ) + } + + domList.forEach((v) => { + v.addEventListener('click', () => { + document.body.classList.toggle('header-drawer-show') + }) + }) + } + } + KEEP.utils.headerShrink.init() + KEEP.utils.headerShrink.headerShrink() + KEEP.utils.headerShrink.toggleHeaderDrawerShow() +} diff --git a/en/js/lazyload.js b/en/js/lazyload.js new file mode 100644 index 000000000..8b7cddf9e --- /dev/null +++ b/en/js/lazyload.js @@ -0,0 +1,42 @@ +/* global KEEP */ + +KEEP.initLazyLoad = () => { + const imgs = document.querySelectorAll('img') + let now = Date.now() + let needLoad = true + + function lazyload(imgs) { + now = Date.now() + needLoad = Array.from(imgs).some((i) => i.hasAttribute('lazyload')) + + const h = window.innerHeight + const s = document.documentElement.scrollTop || document.body.scrollTop + + imgs.forEach((img) => { + if (img.hasAttribute('lazyload') && !img.hasAttribute('loading')) { + if (h + s > img.offsetTop) { + img.setAttribute('loading', true) + const loadImageTimeout = setTimeout(() => { + const temp = new Image() + const src = img.getAttribute('data-src') + temp.src = src + temp.onload = () => { + img.src = src + img.removeAttribute('lazyload') + img.removeAttribute('loading') + clearTimeout(loadImageTimeout) + } + }, 500) + } + } + }) + } + + lazyload(imgs) + + window.onscroll = () => { + if (Date.now() - now > 50 && needLoad) { + lazyload(imgs) + } + } +} diff --git a/en/js/libs/anime.min.js b/en/js/libs/anime.min.js new file mode 100644 index 000000000..99b263aae --- /dev/null +++ b/en/js/libs/anime.min.js @@ -0,0 +1,8 @@ +/* + * anime.js v3.1.0 + * (c) 2019 Julian Garnier + * Released under the MIT license + * animejs.com + */ + +!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):n.anime=e()}(this,function(){"use strict";var n={update:null,begin:null,loopBegin:null,changeBegin:null,change:null,changeComplete:null,loopComplete:null,complete:null,loop:1,direction:"normal",autoplay:!0,timelineOffset:0},e={duration:1e3,delay:0,endDelay:0,easing:"easeOutElastic(1, .5)",round:0},r=["translateX","translateY","translateZ","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ","skew","skewX","skewY","perspective"],t={CSS:{},springs:{}};function a(n,e,r){return Math.min(Math.max(n,e),r)}function o(n,e){return n.indexOf(e)>-1}function u(n,e){return n.apply(null,e)}var i={arr:function(n){return Array.isArray(n)},obj:function(n){return o(Object.prototype.toString.call(n),"Object")},pth:function(n){return i.obj(n)&&n.hasOwnProperty("totalLength")},svg:function(n){return n instanceof SVGElement},inp:function(n){return n instanceof HTMLInputElement},dom:function(n){return n.nodeType||i.svg(n)},str:function(n){return"string"==typeof n},fnc:function(n){return"function"==typeof n},und:function(n){return void 0===n},hex:function(n){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(n)},rgb:function(n){return/^rgb/.test(n)},hsl:function(n){return/^hsl/.test(n)},col:function(n){return i.hex(n)||i.rgb(n)||i.hsl(n)},key:function(r){return!n.hasOwnProperty(r)&&!e.hasOwnProperty(r)&&"targets"!==r&&"keyframes"!==r}};function c(n){var e=/\(([^)]+)\)/.exec(n);return e?e[1].split(",").map(function(n){return parseFloat(n)}):[]}function s(n,e){var r=c(n),o=a(i.und(r[0])?1:r[0],.1,100),u=a(i.und(r[1])?100:r[1],.1,100),s=a(i.und(r[2])?10:r[2],.1,100),f=a(i.und(r[3])?0:r[3],.1,100),l=Math.sqrt(u/o),d=s/(2*Math.sqrt(u*o)),p=d<1?l*Math.sqrt(1-d*d):0,h=1,v=d<1?(d*l-f)/p:-f+l;function g(n){var r=e?e*n/1e3:n;return r=d<1?Math.exp(-r*d*l)*(h*Math.cos(p*r)+v*Math.sin(p*r)):(h+v*r)*Math.exp(-r*l),0===n||1===n?n:1-r}return e?g:function(){var e=t.springs[n];if(e)return e;for(var r=0,a=0;;)if(1===g(r+=1/6)){if(++a>=16)break}else a=0;var o=r*(1/6)*1e3;return t.springs[n]=o,o}}function f(n){return void 0===n&&(n=10),function(e){return Math.round(e*n)*(1/n)}}var l,d,p=function(){var n=11,e=1/(n-1);function r(n,e){return 1-3*e+3*n}function t(n,e){return 3*e-6*n}function a(n){return 3*n}function o(n,e,o){return((r(e,o)*n+t(e,o))*n+a(e))*n}function u(n,e,o){return 3*r(e,o)*n*n+2*t(e,o)*n+a(e)}return function(r,t,a,i){if(0<=r&&r<=1&&0<=a&&a<=1){var c=new Float32Array(n);if(r!==t||a!==i)for(var s=0;s=.001?function(n,e,r,t){for(var a=0;a<4;++a){var i=u(e,r,t);if(0===i)return e;e-=(o(e,r,t)-n)/i}return e}(t,l,r,a):0===d?l:function(n,e,r,t,a){for(var u,i,c=0;(u=o(i=e+(r-e)/2,t,a)-n)>0?r=i:e=i,Math.abs(u)>1e-7&&++c<10;);return i}(t,i,i+e,r,a)}}}(),h=(l={linear:function(){return function(n){return n}}},d={Sine:function(){return function(n){return 1-Math.cos(n*Math.PI/2)}},Circ:function(){return function(n){return 1-Math.sqrt(1-n*n)}},Back:function(){return function(n){return n*n*(3*n-2)}},Bounce:function(){return function(n){for(var e,r=4;n<((e=Math.pow(2,--r))-1)/11;);return 1/Math.pow(4,3-r)-7.5625*Math.pow((3*e-2)/22-n,2)}},Elastic:function(n,e){void 0===n&&(n=1),void 0===e&&(e=.5);var r=a(n,1,10),t=a(e,.1,2);return function(n){return 0===n||1===n?n:-r*Math.pow(2,10*(n-1))*Math.sin((n-1-t/(2*Math.PI)*Math.asin(1/r))*(2*Math.PI)/t)}}},["Quad","Cubic","Quart","Quint","Expo"].forEach(function(n,e){d[n]=function(){return function(n){return Math.pow(n,e+2)}}}),Object.keys(d).forEach(function(n){var e=d[n];l["easeIn"+n]=e,l["easeOut"+n]=function(n,r){return function(t){return 1-e(n,r)(1-t)}},l["easeInOut"+n]=function(n,r){return function(t){return t<.5?e(n,r)(2*t)/2:1-e(n,r)(-2*t+2)/2}}}),l);function v(n,e){if(i.fnc(n))return n;var r=n.split("(")[0],t=h[r],a=c(n);switch(r){case"spring":return s(n,e);case"cubicBezier":return u(p,a);case"steps":return u(f,a);default:return u(t,a)}}function g(n){try{return document.querySelectorAll(n)}catch(n){return}}function m(n,e){for(var r=n.length,t=arguments.length>=2?arguments[1]:void 0,a=[],o=0;o1&&(r-=1),r<1/6?n+6*(e-n)*r:r<.5?e:r<2/3?n+(e-n)*(2/3-r)*6:n}if(0==u)e=r=t=i;else{var f=i<.5?i*(1+u):i+u-i*u,l=2*i-f;e=s(l,f,o+1/3),r=s(l,f,o),t=s(l,f,o-1/3)}return"rgba("+255*e+","+255*r+","+255*t+","+c+")"}(n):void 0;var e,r,t,a}function C(n){var e=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(n);if(e)return e[1]}function B(n,e){return i.fnc(n)?n(e.target,e.id,e.total):n}function P(n,e){return n.getAttribute(e)}function I(n,e,r){if(M([r,"deg","rad","turn"],C(e)))return e;var a=t.CSS[e+r];if(!i.und(a))return a;var o=document.createElement(n.tagName),u=n.parentNode&&n.parentNode!==document?n.parentNode:document.body;u.appendChild(o),o.style.position="absolute",o.style.width=100+r;var c=100/o.offsetWidth;u.removeChild(o);var s=c*parseFloat(e);return t.CSS[e+r]=s,s}function T(n,e,r){if(e in n.style){var t=e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),a=n.style[e]||getComputedStyle(n).getPropertyValue(t)||"0";return r?I(n,a,r):a}}function D(n,e){return i.dom(n)&&!i.inp(n)&&(P(n,e)||i.svg(n)&&n[e])?"attribute":i.dom(n)&&M(r,e)?"transform":i.dom(n)&&"transform"!==e&&T(n,e)?"css":null!=n[e]?"object":void 0}function E(n){if(i.dom(n)){for(var e,r=n.style.transform||"",t=/(\w+)\(([^)]*)\)/g,a=new Map;e=t.exec(r);)a.set(e[1],e[2]);return a}}function F(n,e,r,t){var a,u=o(e,"scale")?1:0+(o(a=e,"translate")||"perspective"===a?"px":o(a,"rotate")||o(a,"skew")?"deg":void 0),i=E(n).get(e)||u;return r&&(r.transforms.list.set(e,i),r.transforms.last=e),t?I(n,i,t):i}function N(n,e,r,t){switch(D(n,e)){case"transform":return F(n,e,t,r);case"css":return T(n,e,r);case"attribute":return P(n,e);default:return n[e]||0}}function A(n,e){var r=/^(\*=|\+=|-=)/.exec(n);if(!r)return n;var t=C(n)||0,a=parseFloat(e),o=parseFloat(n.replace(r[0],""));switch(r[0][0]){case"+":return a+o+t;case"-":return a-o+t;case"*":return a*o+t}}function L(n,e){if(i.col(n))return O(n);if(/\s/g.test(n))return n;var r=C(n),t=r?n.substr(0,n.length-r.length):n;return e?t+e:t}function j(n,e){return Math.sqrt(Math.pow(e.x-n.x,2)+Math.pow(e.y-n.y,2))}function S(n){for(var e,r=n.points,t=0,a=0;a0&&(t+=j(e,o)),e=o}return t}function q(n){if(n.getTotalLength)return n.getTotalLength();switch(n.tagName.toLowerCase()){case"circle":return o=n,2*Math.PI*P(o,"r");case"rect":return 2*P(a=n,"width")+2*P(a,"height");case"line":return j({x:P(t=n,"x1"),y:P(t,"y1")},{x:P(t,"x2"),y:P(t,"y2")});case"polyline":return S(n);case"polygon":return r=(e=n).points,S(e)+j(r.getItem(r.numberOfItems-1),r.getItem(0))}var e,r,t,a,o}function $(n,e){var r=e||{},t=r.el||function(n){for(var e=n.parentNode;i.svg(e)&&i.svg(e.parentNode);)e=e.parentNode;return e}(n),a=t.getBoundingClientRect(),o=P(t,"viewBox"),u=a.width,c=a.height,s=r.viewBox||(o?o.split(" "):[0,0,u,c]);return{el:t,viewBox:s,x:s[0]/1,y:s[1]/1,w:u/s[2],h:c/s[3]}}function X(n,e){function r(r){void 0===r&&(r=0);var t=e+r>=1?e+r:0;return n.el.getPointAtLength(t)}var t=$(n.el,n.svg),a=r(),o=r(-1),u=r(1);switch(n.property){case"x":return(a.x-t.x)*t.w;case"y":return(a.y-t.y)*t.h;case"angle":return 180*Math.atan2(u.y-o.y,u.x-o.x)/Math.PI}}function Y(n,e){var r=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g,t=L(i.pth(n)?n.totalLength:n,e)+"";return{original:t,numbers:t.match(r)?t.match(r).map(Number):[0],strings:i.str(n)||e?t.split(r):[]}}function Z(n){return m(n?y(i.arr(n)?n.map(b):b(n)):[],function(n,e,r){return r.indexOf(n)===e})}function Q(n){var e=Z(n);return e.map(function(n,r){return{target:n,id:r,total:e.length,transforms:{list:E(n)}}})}function V(n,e){var r=x(e);if(/^spring/.test(r.easing)&&(r.duration=s(r.easing)),i.arr(n)){var t=n.length;2===t&&!i.obj(n[0])?n={value:n}:i.fnc(e.duration)||(r.duration=e.duration/t)}var a=i.arr(n)?n:[n];return a.map(function(n,r){var t=i.obj(n)&&!i.pth(n)?n:{value:n};return i.und(t.delay)&&(t.delay=r?0:e.delay),i.und(t.endDelay)&&(t.endDelay=r===a.length-1?e.endDelay:0),t}).map(function(n){return k(n,r)})}function z(n,e){var r=[],t=e.keyframes;for(var a in t&&(e=k(function(n){for(var e=m(y(n.map(function(n){return Object.keys(n)})),function(n){return i.key(n)}).reduce(function(n,e){return n.indexOf(e)<0&&n.push(e),n},[]),r={},t=function(t){var a=e[t];r[a]=n.map(function(n){var e={};for(var r in n)i.key(r)?r==a&&(e.value=n[r]):e[r]=n[r];return e})},a=0;a-1&&(_.splice(o,1),r=_.length)}else a.tick(e);t++}n()}else U=cancelAnimationFrame(U)}return n}();function rn(r){void 0===r&&(r={});var t,o=0,u=0,i=0,c=0,s=null;function f(n){var e=window.Promise&&new Promise(function(n){return s=n});return n.finished=e,e}var l,d,p,h,v,g,y,b,M=(d=w(n,l=r),p=w(e,l),h=z(p,l),v=Q(l.targets),g=W(v,h),y=J(g,p),b=K,K++,k(d,{id:b,children:[],animatables:v,animations:g,duration:y.duration,delay:y.delay,endDelay:y.endDelay}));f(M);function x(){var n=M.direction;"alternate"!==n&&(M.direction="normal"!==n?"normal":"reverse"),M.reversed=!M.reversed,t.forEach(function(n){return n.reversed=M.reversed})}function O(n){return M.reversed?M.duration-n:n}function C(){o=0,u=O(M.currentTime)*(1/rn.speed)}function B(n,e){e&&e.seek(n-e.timelineOffset)}function P(n){for(var e=0,r=M.animations,t=r.length;e2||(b=Math.round(b*p)/p)),h.push(b)}var k=d.length;if(k){g=d[0];for(var O=0;O0&&(M.began=!0,I("begin")),!M.loopBegan&&M.currentTime>0&&(M.loopBegan=!0,I("loopBegin")),d<=r&&0!==M.currentTime&&P(0),(d>=l&&M.currentTime!==e||!e)&&P(e),d>r&&d=e&&(u=0,M.remaining&&!0!==M.remaining&&M.remaining--,M.remaining?(o=i,I("loopComplete"),M.loopBegan=!1,"alternate"===M.direction&&x()):(M.paused=!0,M.completed||(M.completed=!0,I("loopComplete"),I("complete"),!M.passThrough&&"Promise"in window&&(s(),f(M)))))}return M.reset=function(){var n=M.direction;M.passThrough=!1,M.currentTime=0,M.progress=0,M.paused=!0,M.began=!1,M.loopBegan=!1,M.changeBegan=!1,M.completed=!1,M.changeCompleted=!1,M.reversePlayback=!1,M.reversed="reverse"===n,M.remaining=M.loop,t=M.children;for(var e=c=t.length;e--;)M.children[e].reset();(M.reversed&&!0!==M.loop||"alternate"===n&&1===M.loop)&&M.remaining++,P(M.reversed?M.duration:0)},M.set=function(n,e){return R(n,e),M},M.tick=function(n){i=n,o||(o=i),T((i+(u-o))*rn.speed)},M.seek=function(n){T(O(n))},M.pause=function(){M.paused=!0,C()},M.play=function(){M.paused&&(M.completed&&M.reset(),M.paused=!1,_.push(M),C(),U||en())},M.reverse=function(){x(),C()},M.restart=function(){M.reset(),M.play()},M.reset(),M.autoplay&&M.play(),M}function tn(n,e){for(var r=e.length;r--;)M(n,e[r].animatable.target)&&e.splice(r,1)}return"undefined"!=typeof document&&document.addEventListener("visibilitychange",function(){document.hidden?(_.forEach(function(n){return n.pause()}),nn=_.slice(0),rn.running=_=[]):nn.forEach(function(n){return n.play()})}),rn.version="3.1.0",rn.speed=1,rn.running=_,rn.remove=function(n){for(var e=Z(n),r=_.length;r--;){var t=_[r],a=t.animations,o=t.children;tn(e,a);for(var u=o.length;u--;){var i=o[u],c=i.animations;tn(e,c),c.length||i.children.length||o.splice(u,1)}a.length||o.length||t.pause()}},rn.get=N,rn.set=R,rn.convertPx=I,rn.path=function(n,e){var r=i.str(n)?g(n)[0]:n,t=e||100;return function(n){return{property:n,el:r,svg:$(r),totalLength:q(r)*(t/100)}}},rn.setDashoffset=function(n){var e=q(n);return n.setAttribute("stroke-dasharray",e),e},rn.stagger=function(n,e){void 0===e&&(e={});var r=e.direction||"normal",t=e.easing?v(e.easing):null,a=e.grid,o=e.axis,u=e.from||0,c="first"===u,s="center"===u,f="last"===u,l=i.arr(n),d=l?parseFloat(n[0]):parseFloat(n),p=l?parseFloat(n[1]):0,h=C(l?n[1]:n)||0,g=e.start||0+(l?d:0),m=[],y=0;return function(n,e,i){if(c&&(u=0),s&&(u=(i-1)/2),f&&(u=i-1),!m.length){for(var v=0;v-1&&_.splice(o,1);for(var s=0;s]+>/gi;var htmlAttribsRegex=/\s?[a-z:]+(?:=['"][^'">]+['"])*/gi;var matches=html.match(htmlRegex);if(matches&&matches.length){matches=matches[0].match(htmlAttribsRegex);if(matches.length){matches.shift();matches.forEach(function(htmlAttrib){var attr=htmlAttrib.trim().split("=");if(attr.length===1){tmpEl.documentElement.setAttribute(attr[0],true)}else{tmpEl.documentElement.setAttribute(attr[0],attr[1].slice(1,-1))}})}}tmpEl.documentElement.innerHTML=html;this.log("load content",tmpEl.documentElement.attributes,tmpEl.documentElement.innerHTML.length);if(document.activeElement&&contains(document,this.options.selectors,document.activeElement)){try{document.activeElement.blur()}catch(e){}}this.switchSelectors(this.options.selectors,tmpEl,document,options)},abortRequest:require("./lib/abort-request"),doRequest:require("./lib/send-request"),handleResponse:require("./lib/proto/handle-response"),loadUrl:function(href,options){options=typeof options==="object"?extend({},this.options,options):clone(this.options);this.log("load href",href,options);this.abortRequest(this.request);trigger(document,"pjax:send",options);this.request=this.doRequest(href,options,this.handleResponse.bind(this))},executeScripts:function(elements){elements.forEach(function(element){var code=element.text||element.textContent||element.innerHTML||"";var script=document.createElement("script");if(element.id){script.id=element.id}if(element.className){script.className=element.className}if(element.type){script.type=element.type}if(element.src){script.src=element.src;script.async=false}if(element.dataset.pjax!==undefined){script.dataset.pjax=""}if(code!==""){script.appendChild(document.createTextNode(code))}element.parentNode.replaceChild(script,element)})},afterAllSwitches:function(){var autofocusEl=Array.prototype.slice.call(document.querySelectorAll("[autofocus]")).pop();if(autofocusEl&&document.activeElement!==autofocusEl){autofocusEl.focus()}this.options.selectors.forEach(function(selector){forEachEls(document.querySelectorAll(selector),function(el){if(el===0);})});var state=this.state;if(state.options.history){if(!window.history.state){this.lastUid=this.maxUid=newUid();window.history.replaceState({url:window.location.href,title:document.title,uid:this.maxUid,scrollPos:[0,0]},document.title)}this.lastUid=this.maxUid=newUid();window.history.pushState({url:state.href,title:state.options.title,uid:this.maxUid,scrollPos:[0,0]},state.options.title,state.href)}this.forEachSelectors(function(el){this.parseDOM(el)},this);trigger(document,"pjax:complete pjax:success",state.options);if(typeof state.options.analytics==="function"){state.options.analytics()}if(state.options.history){var a=document.createElement("a");a.href=this.state.href;if(a.hash){var name=a.hash.slice(1);name=decodeURIComponent(name);var curtop=0;var target=document.getElementById(name)||document.getElementsByName(name)[0];if(target){if(target.offsetParent){do{curtop+=target.offsetTop;target=target.offsetParent}while(target)}}window.scrollTo(0,curtop)}else if(state.options.scrollTo!==false){if(state.options.scrollTo.length>1){window.scrollTo(state.options.scrollTo[0],state.options.scrollTo[1])}else{window.scrollTo(0,state.options.scrollTo)}}}else if(state.options.scrollRestoration&&state.options.scrollPos){window.scrollTo(state.options.scrollPos[0],state.options.scrollPos[1])}this.state={numPendingSwitches:0,href:null,options:null}}};Pjax.isSupported=require("./lib/is-supported");if(Pjax.isSupported()){module.exports=Pjax}else{var stupidPjax=noop;for(var key in Pjax.prototype){if(Pjax.prototype.hasOwnProperty(key)&&typeof Pjax.prototype[key]==="function"){stupidPjax[key]=noop}}module.exports=stupidPjax}},{"./lib/abort-request":2,"./lib/events/on":3,"./lib/events/trigger":4,"./lib/foreach-els":5,"./lib/foreach-selectors":6,"./lib/is-supported":7,"./lib/parse-options":8,"./lib/proto/attach-form":9,"./lib/proto/attach-link":10,"./lib/proto/handle-response":11,"./lib/proto/log":12,"./lib/proto/parse-element":13,"./lib/send-request":14,"./lib/switches":16,"./lib/switches-selectors":15,"./lib/uniqueid":17,"./lib/util/clone":18,"./lib/util/contains":19,"./lib/util/extend":20,"./lib/util/noop":21}],2:[function(require,module,exports){var noop=require("./util/noop");module.exports=function(request){if(request&&request.readyState<4){request.onreadystatechange=noop;request.abort()}}},{"./util/noop":21}],3:[function(require,module,exports){var forEachEls=require("../foreach-els");module.exports=function(els,events,listener,useCapture){events=typeof events==="string"?events.split(" "):events;events.forEach(function(e){forEachEls(els,function(el){el.addEventListener(e,listener,useCapture)})})}},{"../foreach-els":5}],4:[function(require,module,exports){var forEachEls=require("../foreach-els");module.exports=function(els,events,opts){events=typeof events==="string"?events.split(" "):events;events.forEach(function(e){var event;event=document.createEvent("HTMLEvents");event.initEvent(e,true,true);event.eventName=e;if(opts){Object.keys(opts).forEach(function(key){event[key]=opts[key]})}forEachEls(els,function(el){var domFix=false;if(!el.parentNode&&el!==document&&el!==window){domFix=true;document.body.appendChild(el)}el.dispatchEvent(event);if(domFix){el.parentNode.removeChild(el)}})})}},{"../foreach-els":5}],5:[function(require,module,exports){module.exports=function(els,fn,context){if(els instanceof HTMLCollection||els instanceof NodeList||els instanceof Array){return Array.prototype.forEach.call(els,fn,context)}return fn.call(context,els)}},{}],6:[function(require,module,exports){var forEachEls=require("./foreach-els");module.exports=function(selectors,cb,context,DOMcontext){DOMcontext=DOMcontext||document;selectors.forEach(function(selector){forEachEls(DOMcontext.querySelectorAll(selector),cb,context)})}},{"./foreach-els":5}],7:[function(require,module,exports){module.exports=function(){return window.history&&window.history.pushState&&window.history.replaceState&&!navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/)}},{}],8:[function(require,module,exports){var defaultSwitches=require("./switches");module.exports=function(options){options=options||{};options.elements=options.elements||"a[href], form[action]";options.selectors=options.selectors||["title",".js-Pjax"];options.switches=options.switches||{};options.switchesOptions=options.switchesOptions||{};options.history=typeof options.history==="undefined"?true:options.history;options.analytics=typeof options.analytics==="function"||options.analytics===false?options.analytics:defaultAnalytics;options.scrollTo=typeof options.scrollTo==="undefined"?0:options.scrollTo;options.scrollRestoration=typeof options.scrollRestoration!=="undefined"?options.scrollRestoration:true;options.cacheBust=typeof options.cacheBust==="undefined"?true:options.cacheBust;options.debug=options.debug||false;options.timeout=options.timeout||0;options.currentUrlFullReload=typeof options.currentUrlFullReload==="undefined"?false:options.currentUrlFullReload;if(!options.switches.head){options.switches.head=defaultSwitches.switchElementsAlt}if(!options.switches.body){options.switches.body=defaultSwitches.switchElementsAlt}return options};function defaultAnalytics(){if(window._gaq){_gaq.push(["_trackPageview"])}if(window.ga){ga("send","pageview",{page:location.pathname,title:document.title})}}},{"./switches":16}],9:[function(require,module,exports){var on=require("../events/on");var clone=require("../util/clone");var attrState="data-pjax-state";var formAction=function(el,event){if(isDefaultPrevented(event)){return}var options=clone(this.options);options.requestOptions={requestUrl:el.getAttribute("action")||window.location.href,requestMethod:el.getAttribute("method")||"GET"};var virtLinkElement=document.createElement("a");virtLinkElement.setAttribute("href",options.requestOptions.requestUrl);var attrValue=checkIfShouldAbort(virtLinkElement,options);if(attrValue){el.setAttribute(attrState,attrValue);return}event.preventDefault();if(el.enctype==="multipart/form-data"){options.requestOptions.formData=new FormData(el)}else{options.requestOptions.requestParams=parseFormElements(el)}el.setAttribute(attrState,"submit");options.triggerElement=el;this.loadUrl(virtLinkElement.href,options)};function parseFormElements(el){var requestParams=[];var formElements=el.elements;for(var i=0;i1||event.metaKey||event.ctrlKey||event.shiftKey||event.altKey){return"modifier"}if(el.protocol!==window.location.protocol||el.host!==window.location.host){return"external"}if(el.hash&&el.href.replace(el.hash,"")===window.location.href.replace(location.hash,"")){return"anchor"}if(el.href===window.location.href.split("#")[0]+"#"){return"anchor-empty"}}var isDefaultPrevented=function(event){return event.defaultPrevented||event.returnValue===false};module.exports=function(el){var that=this;el.setAttribute(attrState,"");on(el,"click",function(event){linkAction.call(that,el,event)});on(el,"keyup",function(event){if(event.keyCode===13){linkAction.call(that,el,event)}}.bind(this))}},{"../events/on":3,"../util/clone":18}],11:[function(require,module,exports){var clone=require("../util/clone");var newUid=require("../uniqueid");var trigger=require("../events/trigger");module.exports=function(responseText,request,href,options){options=clone(options||this.options);options.request=request;if(responseText===false){trigger(document,"pjax:complete pjax:error",options);return}var currentState=window.history.state||{};window.history.replaceState({url:currentState.url||window.location.href,title:currentState.title||document.title,uid:currentState.uid||newUid(),scrollPos:[document.documentElement.scrollLeft||document.body.scrollLeft,document.documentElement.scrollTop||document.body.scrollTop]},document.title,window.location.href);var oldHref=href;if(request.responseURL){if(href!==request.responseURL){href=request.responseURL}}else if(request.getResponseHeader("X-PJAX-URL")){href=request.getResponseHeader("X-PJAX-URL")}else if(request.getResponseHeader("X-XHR-Redirected-To")){href=request.getResponseHeader("X-XHR-Redirected-To")}var a=document.createElement("a");a.href=oldHref;var oldHash=a.hash;a.href=href;if(oldHash&&!a.hash){a.hash=oldHash;href=a.href}this.state.href=href;this.state.options=options;try{this.loadContent(responseText,options)}catch(e){trigger(document,"pjax:error",options);if(!this.options.debug){if(console&&console.error){console.error("Pjax switch fail: ",e)}return this.latestChance(href)}else{throw e}}}},{"../events/trigger":4,"../uniqueid":17,"../util/clone":18}],12:[function(require,module,exports){module.exports=function(){if(this.options.debug&&console){if(typeof console.log==="function"){console.log.apply(console,arguments)}else if(console.log){console.log(arguments)}}}},{}],13:[function(require,module,exports){var attrState="data-pjax-state";module.exports=function(el){switch(el.tagName.toLowerCase()){case"a":if(!el.hasAttribute(attrState)){this.attachLink(el)}break;case"form":if(!el.hasAttribute(attrState)){this.attachForm(el)}break;default:throw"Pjax can only be applied on or
submit"}}},{}],14:[function(require,module,exports){var updateQueryString=require("./util/update-query-string");module.exports=function(location,options,callback){options=options||{};var queryString;var requestOptions=options.requestOptions||{};var requestMethod=(requestOptions.requestMethod||"GET").toUpperCase();var requestParams=requestOptions.requestParams||null;var formData=requestOptions.formData||null;var requestPayload=null;var request=new XMLHttpRequest;var timeout=options.timeout||0;request.onreadystatechange=function(){if(request.readyState===4){if(request.status===200){callback(request.responseText,request,location,options)}else if(request.status!==0){callback(null,request,location,options)}}};request.onerror=function(e){console.log(e);callback(null,request,location,options)};request.ontimeout=function(){callback(null,request,location,options)};if(requestParams&&requestParams.length){queryString=requestParams.map(function(param){return param.name+"="+param.value}).join("&");switch(requestMethod){case"GET":location=location.split("?")[0];location+="?"+queryString;break;case"POST":requestPayload=queryString;break}}else if(formData){requestPayload=formData}if(options.cacheBust){location=updateQueryString(location,"t",Date.now())}request.open(requestMethod,location,true);request.timeout=timeout;request.setRequestHeader("X-Requested-With","XMLHttpRequest");request.setRequestHeader("X-PJAX","true");request.setRequestHeader("X-PJAX-Selectors",JSON.stringify(options.selectors));if(requestPayload&&requestMethod==="POST"&&!formData){request.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}request.send(requestPayload);return request}},{"./util/update-query-string":22}],15:[function(require,module,exports){var forEachEls=require("./foreach-els");var defaultSwitches=require("./switches");module.exports=function(switches,switchesOptions,selectors,fromEl,toEl,options){var switchesQueue=[];selectors.forEach(function(selector){var newEls=fromEl.querySelectorAll(selector);var oldEls=toEl.querySelectorAll(selector);if(this.log){this.log("Pjax switch",selector,newEls,oldEls)}if(newEls.length!==oldEls.length){throw"DOM doesn’t look the same on new loaded page: ’"+selector+"’ - new "+newEls.length+", old "+oldEls.length}forEachEls(newEls,function(newEl,i){var oldEl=oldEls[i];if(this.log){this.log("newEl",newEl,"oldEl",oldEl)}var callback=switches[selector]?switches[selector].bind(this,oldEl,newEl,options,switchesOptions[selector]):defaultSwitches.outerHTML.bind(this,oldEl,newEl,options);switchesQueue.push(callback)},this)},this);this.state.numPendingSwitches=switchesQueue.length;switchesQueue.forEach(function(queuedSwitch){queuedSwitch()})}},{"./foreach-els":5,"./switches":16}],16:[function(require,module,exports){var on=require("./events/on");module.exports={outerHTML:function(oldEl,newEl){oldEl.outerHTML=newEl.outerHTML;this.onSwitch()},innerHTML:function(oldEl,newEl){oldEl.innerHTML=newEl.innerHTML;if(newEl.className===""){oldEl.removeAttribute("class")}else{oldEl.className=newEl.className}this.onSwitch()},switchElementsAlt:function(oldEl,newEl){oldEl.innerHTML=newEl.innerHTML;if(newEl.hasAttributes()){var attrs=newEl.attributes;for(var i=0;i${text.substring(hit.position, end)}` + prevEnd = end + }) + result += text.substring(prevEnd, slice.end) + return result + } + + const inputEventFunction = () => { + if (!isfetched) return + let searchText = searchInputDom.value.trim().toLowerCase() + let keywords = searchText.split(/[-\s]+/) + if (keywords.length > 1) { + keywords.push(searchText) + } + let resultItems = [] + if (searchText.length > 0) { + // Perform local searching + datas.forEach(({ title, content, url }) => { + let titleInLowerCase = title.toLowerCase() + let contentInLowerCase = content.toLowerCase() + let indexOfTitle = [] + let indexOfContent = [] + let searchTextCount = 0 + keywords.forEach((keyword) => { + indexOfTitle = indexOfTitle.concat(getIndexByWord(keyword, titleInLowerCase, false)) + indexOfContent = indexOfContent.concat(getIndexByWord(keyword, contentInLowerCase, false)) + }) + + // Show search results + if (indexOfTitle.length > 0 || indexOfContent.length > 0) { + let hitCount = indexOfTitle.length + indexOfContent.length + // Sort index by position of keyword + ;[indexOfTitle, indexOfContent].forEach((index) => { + index.sort((itemLeft, itemRight) => { + if (itemRight.position !== itemLeft.position) { + return itemRight.position - itemLeft.position + } + return itemLeft.word.length - itemRight.word.length + }) + }) + + let slicesOfTitle = [] + if (indexOfTitle.length !== 0) { + let tmp = mergeIntoSlice(0, title.length, indexOfTitle, searchText) + searchTextCount += tmp.searchTextCountInSlice + slicesOfTitle.push(tmp) + } + + let slicesOfContent = [] + while (indexOfContent.length !== 0) { + let item = indexOfContent[indexOfContent.length - 1] + let { position, word } = item + // Cut out 100 characters + let start = position - 20 + let end = position + 80 + if (start < 0) { + start = 0 + } + if (end < position + word.length) { + end = position + word.length + } + if (end > content.length) { + end = content.length + } + let tmp = mergeIntoSlice(start, end, indexOfContent, searchText) + searchTextCount += tmp.searchTextCountInSlice + slicesOfContent.push(tmp) + } + + // Sort slices in content by search text's count and hits' count + slicesOfContent.sort((sliceLeft, sliceRight) => { + if (sliceLeft.searchTextCount !== sliceRight.searchTextCount) { + return sliceRight.searchTextCount - sliceLeft.searchTextCount + } else if (sliceLeft.hits.length !== sliceRight.hits.length) { + return sliceRight.hits.length - sliceLeft.hits.length + } + return sliceLeft.start - sliceRight.start + }) + + // Select top N slices in content + let upperBound = parseInt( + KEEP.theme_config.local_search.top_n_per_article + ? KEEP.theme_config.local_search.top_n_per_article + : 1, + 10 + ) + if (upperBound >= 0) { + slicesOfContent = slicesOfContent.slice(0, upperBound) + } + + let resultItem = '' + + if (slicesOfTitle.length !== 0) { + resultItem += `
  • ${highlightKeyword( + title, + slicesOfTitle[0] + )}` + } else { + resultItem += `
  • ${title}` + } + + slicesOfContent.forEach((slice) => { + resultItem += `

    ${highlightKeyword( + content, + slice + )}...

    ` + }) + + resultItem += '
  • ' + resultItems.push({ + item: resultItem, + id: resultItems.length, + hitCount, + searchTextCount + }) + } + }) + } + if (keywords.length === 1 && keywords[0] === '') { + resultContent.innerHTML = '
    ' + } else if (resultItems.length === 0) { + resultContent.innerHTML = '
    ' + } else { + resultItems.sort((resultLeft, resultRight) => { + if (resultLeft.searchTextCount !== resultRight.searchTextCount) { + return resultRight.searchTextCount - resultLeft.searchTextCount + } else if (resultLeft.hitCount !== resultRight.hitCount) { + return resultRight.hitCount - resultLeft.hitCount + } + return resultRight.id - resultLeft.id + }) + let searchResultList = '
      ' + resultItems.forEach((result) => { + searchResultList += result.item + }) + searchResultList += '
    ' + resultContent.innerHTML = searchResultList + window.pjax && window.pjax.refresh(resultContent) + } + } + + const fetchData = () => { + fetch(KEEP.hexo_config.root + searchPath) + .then((response) => response.text()) + .then((res) => { + // Get the contents from search data + isfetched = true + datas = isXml + ? [...new DOMParser().parseFromString(res, 'text/xml').querySelectorAll('entry')].map( + (element) => { + return { + title: element.querySelector('title').textContent, + content: element.querySelector('content').textContent, + url: element.querySelector('url').textContent + } + } + ) + : JSON.parse(res) + // Only match articles with not empty titles + datas = datas + .filter((data) => data.title) + .map((data) => { + data.title = data.title.trim() + data.content = data.content ? data.content.trim().replace(/<[^>]+>/g, '') : '' + data.url = decodeURIComponent(data.url).replace(/\/{2,}/g, '/') + return data + }) + // Remove loading animation + const noResultDom = document.querySelector('#no-result') + noResultDom && (noResultDom.innerHTML = '') + }) + } + + if (KEEP.theme_config.local_search.preload) { + fetchData() + } + + if (searchInputDom) { + searchInputDom.addEventListener('input', inputEventFunction) + } + + // Handle and trigger popup window + document.querySelectorAll('.search-popup-trigger').forEach((element) => { + element.addEventListener('click', () => { + document.body.style.overflow = 'hidden' + document.querySelector('.search-pop-overlay').classList.add('active') + setTimeout(() => searchInputDom.focus(), 500) + if (!isfetched) fetchData() + }) + }) + + // Monitor main search box + const onPopupClose = () => { + document.body.style.overflow = '' + document.querySelector('.search-pop-overlay').classList.remove('active') + } + + document.querySelector('.search-pop-overlay').addEventListener('click', (event) => { + if (event.target === document.querySelector('.search-pop-overlay')) { + onPopupClose() + } + }) + document.querySelector('.search-input-field-pre').addEventListener('click', () => { + searchInputDom.value = '' + searchInputDom.focus() + inputEventFunction() + }) + document.querySelector('.close-popup-btn').addEventListener('click', onPopupClose) + window.addEventListener('pjax:success', onPopupClose) + window.addEventListener('keyup', (event) => { + if (event.key === 'Escape') { + onPopupClose() + } + }) +} diff --git a/en/js/main.js b/en/js/main.js new file mode 100644 index 000000000..155332ad1 --- /dev/null +++ b/en/js/main.js @@ -0,0 +1,74 @@ +/* global KEEP */ + +window.addEventListener('DOMContentLoaded', () => { + const { version, local_search, code_block, code_copy, lazyload } = KEEP.theme_config + + KEEP.themeInfo = { + theme: `Keep v${version}`, + author: 'XPoet', + repository: 'https://github.com/XPoet/hexo-theme-keep' + } + + KEEP.localStorageKey = 'KEEP-THEME-STATUS' + + KEEP.styleStatus = { + isExpandPageWidth: false, + isDark: false, + fontSizeLevel: 0, + isShowToc: true + } + + // print theme base info + KEEP.printThemeInfo = () => { + console.log( + `\n %c ${KEEP.themeInfo.theme} %c ${KEEP.themeInfo.repository} \n`, + `color: #fadfa3; background: #333; padding: 6px 0;`, + `padding: 6px 0;` + ) + } + + // set styleStatus to localStorage + KEEP.setStyleStatus = () => { + localStorage.setItem(KEEP.localStorageKey, JSON.stringify(KEEP.styleStatus)) + } + + // get styleStatus from localStorage + KEEP.getStyleStatus = () => { + let temp = localStorage.getItem(KEEP.localStorageKey) + if (temp) { + temp = JSON.parse(temp) + for (let key in KEEP.styleStatus) { + KEEP.styleStatus[key] = temp[key] + } + return temp + } else { + return null + } + } + + KEEP.refresh = () => { + KEEP.initUtils() + KEEP.initHeaderShrink() + KEEP.initModeToggle() + KEEP.initBack2Top() + + if (local_search?.enable === true) { + KEEP.initLocalSearch() + } + + if ( + code_block?.tools?.enable === true || + code_block?.enable === true || + code_copy?.enable === true + ) { + KEEP.initCodeBlockTools() + } + + if (lazyload?.enable === true) { + KEEP.initLazyLoad() + } + } + + KEEP.printThemeInfo() + KEEP.refresh() +}) diff --git a/en/js/post-helper.js b/en/js/post-helper.js new file mode 100644 index 000000000..dd0e02beb --- /dev/null +++ b/en/js/post-helper.js @@ -0,0 +1,202 @@ +/* global KEEP */ + +function initToggleShowToc() { + KEEP.utils.postHelper = { + postPageContainerDom: document.querySelector('.post-page-container'), + toggleShowTocBtnDom: document.querySelector('.toggle-show-toc'), + toggleShowTocIcon: document.querySelector('.toggle-show-toc i'), + mainContentDom: document.querySelector('.main-content'), + postToolsDom: document.querySelector('.post-tools'), + goToCommentsDom: document.querySelector('.post-tools .go-to-comments'), + + isShowToc: false, + + initToggleToc() { + this.toggleShowTocBtnDom && + this.toggleShowTocBtnDom.addEventListener('click', () => { + this.isShowToc = !this.isShowToc + KEEP.styleStatus.isShowToc = this.isShowToc + KEEP.setStyleStatus() + this.handleToggleToc(this.isShowToc) + }) + }, + + handleToggleToc(isOpen) { + if (isOpen) { + this.postPageContainerDom.classList.add('show-toc') + document.body.classList.add('has-toc') + } else { + this.postPageContainerDom.classList.remove('show-toc') + document.body.classList.remove('has-toc') + } + + setTimeout(() => { + this.setPostToolsLeft() + }, 120) + }, + + hasToc(isOpen) { + this.toggleShowTocBtnDom.style.display = 'flex' + this.isShowToc = isOpen + this.handleToggleToc(isOpen) + }, + + setPostToolsLeft(mcw) { + const mainContainerWidth = mcw + ? mcw + : this.mainContentDom.getBoundingClientRect().width.toFixed(0) + let offsetX = 5 + + if (window.innerWidth <= 800) { + offsetX = 3 + } + + this.postToolsDom.style.opacity = `1` + this.postToolsDom.style.left = `calc((100vw - ${mainContainerWidth}px) / 2 - ${offsetX}rem)` + }, + + initSetPostToolsLeft() { + setTimeout(() => { + this.setPostToolsLeft() + }, 150) + + window.addEventListener('resize', () => { + this.setPostToolsLeft() + }) + }, + + // go comment anchor + goToComments() { + const commentsAnchor = document.querySelector('#comments-anchor') + if (this.goToCommentsDom && commentsAnchor) { + this.goToCommentsDom.addEventListener('click', (event) => { + event.preventDefault() + let winScrollY = window.scrollY + winScrollY = winScrollY === 0 ? -20 : winScrollY + const offset = commentsAnchor.getBoundingClientRect().top + winScrollY + window.anime({ + targets: document.scrollingElement, + duration: 300, + easing: 'linear', + scrollTop: offset, + complete: () => { + setTimeout(() => { + KEEP.utils.pageTop_dom.classList.add('hide') + }, 150) + } + }) + }) + } + }, + + // watch comments count + watchPostCommentsCount() { + const commentsCountDom = this.postToolsDom.querySelector('.post-comments-count') + if (!commentsCountDom) return + const config = { attributes: true, childList: true } + + const callback = function (mutationsList) { + mutationsList.forEach((item) => { + if (item.type === 'childList') { + const count = Number(item.target.innerHTML) + if (count > 0) { + commentsCountDom.style.display = 'flex' + if (count > 99) { + commentsCountDom.innerHTML = '99+' + observer.disconnect() + } + } + } + }) + } + + const observer = new MutationObserver(callback) + observer.observe(commentsCountDom, config) + }, + + // set post link + initSetPostLink() { + const postLinkContentDom = document.querySelector( + '.copyright-info-content .post-link .content' + ) + postLinkContentDom && (postLinkContentDom.innerHTML = decodeURI(window.location.href)) + }, + + // copy copyright info + copyCopyrightInfo() { + const cicDom = document.querySelector('.copyright-info-content') + const copyDom = document.querySelector('.copy-copyright-info') + const copyIcon = copyDom.querySelector('i') + + const ccLang = KEEP.language_copy_copyright + const colon = KEEP.hexo_config.language === 'en' ? ': ' : ':' + + let isCopied = false + + const setCopyDomContent = (class1, class2, content, copied) => { + if (copyIcon) { + copyIcon.classList.remove(class1) + copyIcon.classList.add(class2) + } + const tooltipDom = copyDom.querySelector('.tooltip-content') + tooltipDom && (tooltipDom.innerHTML = content) + isCopied = copied + } + + copyDom.addEventListener('click', () => { + if (!isCopied) { + const author = cicDom.querySelector('.post-author .content').innerHTML + const link = cicDom.querySelector('.post-link .content').innerHTML + const tgtTxt = `${ccLang.author}${colon}${author}\n${ccLang.link}${colon}${link}` + navigator.clipboard.writeText(tgtTxt).then(() => { + setCopyDomContent('fa-copy', 'fa-check', ccLang.copied, true) + }) + } + }) + + copyDom.addEventListener('mouseleave', () => { + setTimeout(() => { + setCopyDomContent('fa-check', 'fa-copy', ccLang.copy, false) + }, 500) + }) + }, + + // set article aging tips + setArticleAgingDays() { + const agingTipsDom = document.querySelector('.article-content .article-aging-tips') + if (agingTipsDom) { + const daysDom = agingTipsDom.querySelector('.days') + const nowTimestamp = Date.now() + const tmpTimeLength = 24 * 60 * 60 * 1000 + const agingDaysTimestamp = (agingTipsDom.dataset?.agingDays || 30) * tmpTimeLength + const postUpdateTimestamp = new Date(agingTipsDom.dataset.updateDate).getTime() + const timeDifference = nowTimestamp - postUpdateTimestamp + const timeDifferenceDays = (timeDifference / tmpTimeLength).toFixed(0) + if (timeDifference >= agingDaysTimestamp) { + daysDom.innerHTML = timeDifferenceDays + agingTipsDom.style.display = 'block' + } + } + } + } + KEEP.utils.postHelper.initSetPostToolsLeft() + KEEP.utils.postHelper.setArticleAgingDays() + + if (KEEP.theme_config.toc?.enable === true) { + KEEP.utils.postHelper.initToggleToc() + } + if (KEEP.theme_config.comment?.enable === true) { + KEEP.utils.postHelper.goToComments() + KEEP.utils.postHelper.watchPostCommentsCount() + } + if (KEEP.theme_config.post?.copyright_info === true) { + KEEP.utils.postHelper.initSetPostLink() + KEEP.utils.postHelper.copyCopyrightInfo() + } +} + +if (KEEP.theme_config.pjax?.enable === true && KEEP.utils) { + initToggleShowToc() +} else { + window.addEventListener('DOMContentLoaded', initToggleShowToc) +} diff --git a/en/js/toc.js b/en/js/toc.js new file mode 100644 index 000000000..cee2c1d3f --- /dev/null +++ b/en/js/toc.js @@ -0,0 +1,114 @@ +/* global KEEP */ + +function initTOC() { + const postPageContainerDom = document.querySelector('.post-page-container') + const tocContentContainer = document.querySelector('.toc-content-container') + + if (KEEP.utils.hasToc) { + KEEP.utils = { + ...KEEP.utils, + + findActiveIndexByTOC() { + if (!Array.isArray(KEEP.utils.sections)) return + let index = KEEP.utils.sections.findIndex((element) => { + return element && element.getBoundingClientRect().top - 20 > 0 + }) + if (index === -1) { + index = KEEP.utils.sections.length - 1 + } else if (index > 0) { + index-- + } + this.activateNavByIndex(index) + }, + + registerSidebarTOC() { + KEEP.utils.sections = [...document.querySelectorAll('.post-toc li a.nav-link')].map( + (element) => { + const target = document.getElementById( + decodeURI(element.getAttribute('href')).replace('#', '') + ) + element.addEventListener('click', (event) => { + event.preventDefault() + let winScrollY = window.scrollY + winScrollY = winScrollY === 0 ? -20 : winScrollY + const offset = target.getBoundingClientRect().top + winScrollY + window.anime({ + targets: document.scrollingElement, + duration: 500, + easing: 'linear', + scrollTop: offset - 10, + complete: () => { + history.pushState(null, document.title, element.href) + setTimeout(() => { + KEEP.utils.pageTop_dom.classList.add('hide') + }, 150) + } + }) + }) + return target + } + ) + }, + + activateNavByIndex(index) { + const target = document.querySelectorAll('.post-toc li a.nav-link')[index] + if (!target || target.classList.contains('active-current')) return + + document.querySelectorAll('.post-toc .active').forEach((element) => { + element.classList.remove('active', 'active-current') + }) + target.classList.add('active', 'active-current') + let parent = target.parentNode + while (!parent.matches('.post-toc')) { + if (parent.matches('li')) parent.classList.add('active') + parent = parent.parentNode + } + // Scrolling to center active TOC element if TOC content is taller than viewport. + const tocElement = document.querySelector('.post-toc-wrap') + window.anime({ + targets: tocElement, + duration: 200, + easing: 'linear', + scrollTop: + tocElement.scrollTop - + tocElement.offsetHeight / 2 + + target.getBoundingClientRect().top - + tocElement.getBoundingClientRect().top + }) + }, + + handleShowWhenHasToc() { + const openHandle = () => { + const styleStatus = KEEP.getStyleStatus() + const key = 'isShowToc' + if (styleStatus && styleStatus.hasOwnProperty(key)) { + KEEP.utils.postHelper.hasToc(styleStatus[key]) + } else { + KEEP.utils.postHelper.hasToc(true) + } + } + + const initOpenKey = 'init_open' + + if (KEEP.theme_config.toc.hasOwnProperty(initOpenKey)) { + KEEP.theme_config.toc[initOpenKey] ? openHandle() : KEEP.utils.postHelper.hasToc(false) + } else { + openHandle() + } + } + } + + KEEP.utils.handleShowWhenHasToc() + KEEP.utils.registerSidebarTOC() + } else { + if (tocContentContainer && postPageContainerDom) { + postPageContainerDom.removeChild(tocContentContainer) + } + } +} + +if (KEEP.theme_config.pjax.enable === true && KEEP.utils) { + initTOC() +} else { + window.addEventListener('DOMContentLoaded', initTOC) +} diff --git a/en/js/utils.js b/en/js/utils.js new file mode 100644 index 000000000..7904040bf --- /dev/null +++ b/en/js/utils.js @@ -0,0 +1,459 @@ +/* global KEEP */ + +KEEP.initUtils = () => { + KEEP.utils = { + html_root_dom: document.querySelector('html'), + pageContainer_dom: document.querySelector('.page-container'), + pageTop_dom: document.querySelector('.page-main-content-top'), + firstScreen_dom: document.querySelector('.first-screen-container'), + scrollProgressBar_dom: document.querySelector('.scroll-progress-bar'), + pjaxProgressBar_dom: document.querySelector('.pjax-progress-bar'), + pjaxProgressIcon_dom: document.querySelector('.pjax-progress-icon'), + back2TopButton_dom: document.querySelector('.tool-scroll-to-top'), + headerWrapper_dom: document.querySelector('.header-wrapper'), + + innerHeight: window.innerHeight, + pjaxProgressBarTimer: null, + prevScrollValue: 0, + fontSizeLevel: 0, + isHasScrollProgressBar: false, + isHasScrollPercent: false, + isHeaderTransparent: false, + hasToc: false, + + initData() { + const { scroll, first_screen } = KEEP.theme_config.style + this.isHasScrollProgressBar = scroll.progress_bar === true + this.isHasScrollPercent = scroll.percent === true + const { enable, header_transparent } = first_screen + this.isHeaderTransparent = enable === true && header_transparent === true + }, + + // Scroll Style Handle + styleHandleWhenScroll() { + const scrollTop = document.body.scrollTop || document.documentElement.scrollTop + const scrollHeight = document.body.scrollHeight || document.documentElement.scrollHeight + const clientHeight = window.innerHeight || document.documentElement.clientHeight + + const percent = Math.round((scrollTop / (scrollHeight - clientHeight)) * 100) + + if (this.isHasScrollProgressBar) { + const ProgressPercent = ((scrollTop / (scrollHeight - clientHeight)) * 100).toFixed(3) + this.scrollProgressBar_dom.style.visibility = percent === 0 ? 'hidden' : 'visible' + this.scrollProgressBar_dom.style.width = `${ProgressPercent}%` + } + + if (this.isHasScrollPercent) { + const percent_dom = this.back2TopButton_dom.querySelector('.percent') + if (percent === 0 || percent === undefined) { + this.back2TopButton_dom.classList.remove('show') + } else { + this.back2TopButton_dom.classList.add('show') + percent_dom.innerHTML = percent.toFixed(0) + } + } + + // hide header handle + if (scrollTop > this.prevScrollValue && scrollTop > this.innerHeight) { + this.pageTop_dom.classList.add('hide') + if (this.isHeaderTransparent) { + this.headerWrapper_dom.classList.remove('transparent-1', 'transparent-2') + } + } else { + this.pageTop_dom.classList.remove('hide') + if (this.isHeaderTransparent) { + if (scrollTop <= this.headerWrapper_dom.getBoundingClientRect().height) { + this.headerWrapper_dom.classList.remove('transparent-2') + this.headerWrapper_dom.classList.add('transparent-1') + } else if (scrollTop < this.innerHeight) { + this.headerWrapper_dom.classList.add('transparent-2') + } + } + } + this.prevScrollValue = scrollTop + }, + + // register window scroll event + registerWindowScroll() { + window.addEventListener('scroll', () => { + // style handle when scroll + this.styleHandleWhenScroll() + + // TOC scroll handle + if (KEEP.theme_config.toc.enable && KEEP.utils.hasOwnProperty('findActiveIndexByTOC')) { + KEEP.utils.findActiveIndexByTOC() + } + + // header shrink + KEEP.utils.headerShrink.headerShrink() + }) + }, + + // toggle show tools list + toggleShowToolsList() { + const sideToolsListDom = document.querySelector('.side-tools-list') + const toggleShowToolsDom = document.querySelector('.tool-toggle-show') + toggleShowToolsDom.addEventListener('click', (e) => { + sideToolsListDom.classList.toggle('show') + e.stopPropagation() + }) + sideToolsListDom.querySelectorAll('.tools-item').forEach((item) => { + item.addEventListener('click', (e) => { + e.stopPropagation() + }) + }) + document.addEventListener('click', () => { + sideToolsListDom.classList.contains('show') && sideToolsListDom.classList.remove('show') + }) + }, + + // global font adjust + globalFontAdjust() { + const fontSize = document.defaultView.getComputedStyle(document.body).fontSize + const fs = parseFloat(fontSize) + + const initFontSize = () => { + const styleStatus = KEEP.getStyleStatus() + if (styleStatus) { + this.fontSizeLevel = styleStatus.fontSizeLevel + setFontSize(this.fontSizeLevel) + } + } + + const setFontSize = (fontSizeLevel) => { + this.html_root_dom.style.fontSize = `${fs * (1 + fontSizeLevel * 0.05)}px` + KEEP.styleStatus.fontSizeLevel = fontSizeLevel + KEEP.setStyleStatus() + } + + initFontSize() + + document.querySelector('.tool-font-adjust-plus').addEventListener('click', () => { + if (this.fontSizeLevel === 5) return + this.fontSizeLevel++ + setFontSize(this.fontSizeLevel) + }) + + document.querySelector('.tool-font-adjust-minus').addEventListener('click', () => { + if (this.fontSizeLevel <= 0) return + this.fontSizeLevel-- + setFontSize(this.fontSizeLevel) + }) + }, + + // get dom element height + getElementHeight(selectors) { + const dom = document.querySelector(selectors) + return dom ? dom.getBoundingClientRect().height : 0 + }, + + // init has TOC + initHasToc() { + const tocNavDoms = document.querySelectorAll('.post-toc-wrap .post-toc li') + if (tocNavDoms.length > 0) { + this.hasToc = true + document.body.classList.add('has-toc') + } else { + this.hasToc = false + document.body.classList.remove('has-toc') + } + }, + + // init page height handle + initPageHeightHandle() { + if (this.firstScreen_dom) return + const temp_h1 = this.getElementHeight('.page-main-content-top') + const temp_h2 = this.getElementHeight('.page-main-content-middle') + const temp_h3 = this.getElementHeight('.page-main-content-bottom') + const allDomHeight = temp_h1 + temp_h2 + temp_h3 + const innerHeight = window.innerHeight + const pb_dom = document.querySelector('.page-main-content-bottom') + if (allDomHeight < innerHeight) { + const marginTopValue = Math.floor(innerHeight - allDomHeight) + if (marginTopValue > 0) { + pb_dom.style.marginTop = `${marginTopValue - 2}px` + } + } + }, + + // zoom in image + zoomInImage() { + let SIDE_GAP = 40 + let isZoomIn = false + let curWinScrollY = 0 + let selectedImgDom = null + const imgDomList = document.querySelectorAll('.keep-markdown-body img') + const zoomInImgMask = document.querySelector('.zoom-in-image-mask') + const zoomInImg = zoomInImgMask.querySelector('.zoom-in-image') + + const zoomOut = () => { + if (isZoomIn) { + isZoomIn = false + curWinScrollY = 0 + zoomInImg && (zoomInImg.style.transform = `scale(1)`) + zoomInImgMask && zoomInImgMask.classList.remove('show') + setTimeout(() => { + selectedImgDom && selectedImgDom.classList.remove('hide') + }, 300) + } + } + + const zoomOutHandle = () => { + zoomInImgMask && + zoomInImgMask.addEventListener('click', () => { + zoomOut() + }) + + document.addEventListener('scroll', () => { + if (isZoomIn && Math.abs(curWinScrollY - window.scrollY) >= 50) { + zoomOut() + } + }) + } + + const setSideGap = () => { + const w = document.body.offsetWidth + if (w <= 500) { + SIDE_GAP = 10 + } else if (w <= 800) { + SIDE_GAP = 20 + } else { + SIDE_GAP = 40 + } + } + + if (imgDomList.length) { + zoomOutHandle() + imgDomList.forEach((img) => { + img.addEventListener('click', () => { + curWinScrollY = window.scrollY + isZoomIn = !isZoomIn + setSideGap() + zoomInImg.setAttribute('src', img.getAttribute('src')) + selectedImgDom = img + if (isZoomIn) { + const imgRect = selectedImgDom.getBoundingClientRect() + const imgW = imgRect.width + const imgH = imgRect.height + const imgL = imgRect.left + const imgT = imgRect.top + const winW = document.body.offsetWidth - SIDE_GAP * 2 + const winH = document.body.offsetHeight - SIDE_GAP * 2 + const scaleX = winW / imgW + const scaleY = winH / imgH + const scale = (scaleX < scaleY ? scaleX : scaleY) || 1 + const translateX = winW / 2 - (imgRect.x + imgW / 2) + SIDE_GAP + const translateY = winH / 2 - (imgRect.y + imgH / 2) + SIDE_GAP + + selectedImgDom.classList.add('hide') + zoomInImgMask.classList.add('show') + zoomInImg.style.top = imgT + 'px' + zoomInImg.style.left = imgL + 'px' + zoomInImg.style.width = imgW + 'px' + zoomInImg.style.height = imgH + 'px' + zoomInImg.style.transform = `translateX(${translateX}px) translateY(${translateY}px) scale(${scale}) ` + } + }) + }) + } + }, + + // set how long ago language + setHowLongAgoLanguage(p1, p2) { + return p2.replace(/%s/g, p1) + }, + + getHowLongAgo(timestamp) { + const lang = KEEP.language_ago + const __Y = Math.floor(timestamp / (60 * 60 * 24 * 30) / 12) + const __M = Math.floor(timestamp / (60 * 60 * 24 * 30)) + const __W = Math.floor(timestamp / (60 * 60 * 24) / 7) + const __d = Math.floor(timestamp / (60 * 60 * 24)) + const __h = Math.floor((timestamp / (60 * 60)) % 24) + const __m = Math.floor((timestamp / 60) % 60) + const __s = Math.floor(timestamp % 60) + + if (__Y > 0) { + return this.setHowLongAgoLanguage(__Y, lang.year) + } else if (__M > 0) { + return this.setHowLongAgoLanguage(__M, lang.month) + } else if (__W > 0) { + return this.setHowLongAgoLanguage(__W, lang.week) + } else if (__d > 0) { + return this.setHowLongAgoLanguage(__d, lang.day) + } else if (__h > 0) { + return this.setHowLongAgoLanguage(__h, lang.hour) + } else if (__m > 0) { + return this.setHowLongAgoLanguage(__m, lang.minute) + } else if (__s > 0) { + return this.setHowLongAgoLanguage(__s, lang.second) + } + }, + + setHowLongAgoInHome() { + const post = document.querySelectorAll('.home-article-meta-info .home-article-date') + post && + post.forEach((v) => { + const nowDate = Date.now() + const postDate = new Date(v.dataset.updated).getTime() + v.innerHTML = this.getHowLongAgo(Math.floor((nowDate - postDate) / 1000)) + }) + }, + + // loading progress bar start + pjaxProgressBarStart() { + this.pjaxProgressBarTimer && clearInterval(this.pjaxProgressBarTimer) + if (this.isHasScrollProgressBar) { + this.scrollProgressBar_dom.classList.add('hide') + } + + this.pjaxProgressBar_dom.style.width = '0' + this.pjaxProgressIcon_dom.classList.add('show') + + let width = 1 + const maxWidth = 99 + + this.pjaxProgressBar_dom.classList.add('show') + this.pjaxProgressBar_dom.style.width = width + '%' + + this.pjaxProgressBarTimer = setInterval(() => { + width += 5 + if (width > maxWidth) width = maxWidth + this.pjaxProgressBar_dom.style.width = width + '%' + }, 100) + }, + + // loading progress bar end + pjaxProgressBarEnd() { + this.pjaxProgressBarTimer && clearInterval(this.pjaxProgressBarTimer) + this.pjaxProgressBar_dom.style.width = '100%' + + const temp_1 = setTimeout(() => { + this.pjaxProgressBar_dom.classList.remove('show') + this.pjaxProgressIcon_dom.classList.remove('show') + + if (this.isHasScrollProgressBar) { + this.scrollProgressBar_dom.classList.remove('hide') + } + + const temp_2 = setTimeout(() => { + this.pjaxProgressBar_dom.style.width = '0' + clearTimeout(temp_1), clearTimeout(temp_2) + }, 200) + }, 200) + }, + + // insert tooltip content dom + insertTooltipContent() { + const init = () => { + // tooltip + document.querySelectorAll('.tooltip').forEach((element) => { + const { content, offsetX, offsetY } = element.dataset + + let style = '' + let sTop = '' + let sLeft = '' + if (offsetX) { + sTop = `left: ${offsetX};` + } + if (offsetY) { + sLeft = `top: ${offsetY};` + } + if (offsetX || offsetY) { + style = ` style="${sLeft}${sTop}"` + } + + if (content) { + element.insertAdjacentHTML( + 'afterbegin', + `${content}` + ) + } + }) + + // tooltip-img + const imgsSet = {} + + const toggleShowImg = (dom, nameIdx) => { + document.addEventListener('click', () => { + if (imgsSet[nameIdx].isShowImg) { + dom.classList.remove('show-img') + imgsSet[nameIdx].isShowImg = false + } + }) + } + + const loadImg = (img, imgLoaded) => { + const temp = new Image() + const { src } = img.dataset + temp.src = src + temp.onload = () => { + img.src = src + img.removeAttribute('lazyload') + imgLoaded = true + } + } + + document.querySelectorAll('.tooltip-img').forEach((dom, idx) => { + const { imgUrl, name } = dom.dataset + if (imgUrl) { + const imgDomClass = `tooltip-img-${name}` + const nameIdx = `${name}_${idx}` + const imgDom = `${name}` + const imgTooltipBox = `
    ${imgDom}
    ` + + imgsSet[nameIdx] = { + imgLoaded: false, + isShowImg: false + } + + dom.insertAdjacentHTML('afterbegin', imgTooltipBox) + dom.addEventListener('click', (e) => { + if (!imgsSet[nameIdx].imgLoaded) { + loadImg( + document.querySelector(`.tooltip-img-box img.${imgDomClass}`), + imgsSet[nameIdx].imgLoaded + ) + } + imgsSet[nameIdx].isShowImg = !imgsSet[nameIdx].isShowImg + dom.classList.toggle('show-img') + e.stopPropagation() + }) + + toggleShowImg(dom, nameIdx) + } + }) + } + setTimeout(() => { + init() + }, 1000) + } + } + + // init data + KEEP.utils.initData() + + // init scroll + KEEP.utils.registerWindowScroll() + + // toggle show tools list + KEEP.utils.toggleShowToolsList() + + // global font adjust + KEEP.utils.globalFontAdjust() + + // init page height handle + KEEP.utils.initPageHeightHandle() + + // check whether TOC exists + KEEP.utils.initHasToc() + + // big image viewer handle + KEEP.utils.zoomInImage() + + // set how long age in home article block + KEEP.utils.setHowLongAgoInHome() + + // insert tooltip content dom + KEEP.utils.insertTooltipContent() +} diff --git a/en/links/index.html b/en/links/index.html new file mode 100644 index 000000000..480686a10 --- /dev/null +++ b/en/links/index.html @@ -0,0 +1,476 @@ + + + + + + + + + + + + Links | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + +
    +
    + + +
    + +

    links

    + +
    + +
    + +
    +
    +
    +  Comments +
    + + + + +
    +
    + + + +
    + + + + + +
    + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/page/2/index.html b/en/page/2/index.html new file mode 100644 index 000000000..1776bad3c --- /dev/null +++ b/en/page/2/index.html @@ -0,0 +1,514 @@ + + + + + + + + + + + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
      + +
    • + + + +

      + + V2rayA + +

      + +
      + +

      On archlinux:

      +
      yay -S xray-bin
      sudo pacman -S v2ray
      yay -S v2raya-bin
      + +

      Maybe you need restart your computer!

      + +
      + + + +
    • + +
    • + + + +

      + + ❌This is a Index File + +

      + +
      + +

      Array has fixed size and contiguous memory. New elements cannot be appended. You can use memory address to access elements of Array. + +

      + + + +
    • + +
    + +
    +
    + + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/search.json b/en/search.json new file mode 100644 index 000000000..8576f0b5d --- /dev/null +++ b/en/search.json @@ -0,0 +1 @@ +[{"title":"❌This is a Index File","url":"/en/2022/09/28/note/README/","content":"Array has fixed size and contiguous memory. New elements cannot be appended. You can use memory address to access elements of Array. \nHeading 2Array has fixed size and contiguous memory. New elements cannot be appended. You can use memory address to access elements of Array. \nHeading 3Array has fixed size and contiguous memory. New elements cannot be appended. You can use memory address to access elements of Array. \nHeading 4Array has fixed size and contiguous memory. New elements cannot be appended. You can use memory address to access elements of Array. \nHeading 5Array has fixed size and contiguous memory. New elemenots cannot be appended. You can use memory address to access elements of Array. \nHeading 6Array has fixed size and contiguous memory. New elements cannot be appended. You can use memory address to access elements of Array.这是粗体这是斜体这是粗斜体dasdadThe .md only be used to open Note files in Typora.\n\nAnd it is a sample now!\n\n#include <iostream>da\n\n\n\n\nCommand\nFull name\nDo somthing\n\n\n\ngdb output\n\n\n\n\nr\nrun\nRun current program\n\n\nb\nbreak\nSet a breakpoint at [function] or [line] (in file)\n\n\nThe following is the config of style setting:\n\n\n\n\n{ "minimal-style@@sidebar-lines-off": true, "minimal-style@@sidebar-tabs-style": "sidebar-tabs-square", "minimal-style@@tabs-style": "tabs-square", "minimal-cards-style@@cards-border-width": "3px", "minimal-mobile@@mobile-toolbar-off": true, "minimal-style@@tx1@@dark": "#C0C8CE", "minimal-style@@h1-color@@dark": "#FFFFFF", "minimal-style@@h1-color@@light": "#000000", "minimal-style@@h1-size": "2.5em", "minimal-style@@h2-size": "2.2em", "minimal-style@@h3-size": "1.7em", "minimal-style@@h2-color@@dark": "#EEEEEE", "minimal-style@@h2-color@@light": "#000000", "minimal-style@@h3-color@@light": "#000000", "minimal-style@@h4-color@@dark": "#E9E9E9", "minimal-style@@h4-color@@light": "#202020", "minimal-style@@tx1@@light": "#474747", "minimal-style@@minimal-code-scroll": true, "minimal-style@@h4-size": "1.6em", "minimal-style@@h5-size": "1.3em", "minimal-style@@h6-size": "1em", "minimal-style@@table-lines": true, "minimal-style@@maximize-tables-off": "maximize-tables", "minimal-style@@row-hover": false, "minimal-style@@h2-weight": 600, "minimal-style@@h1-weight": 700, "minimal-style@@h3-weight": 500, "minimal-style@@h5-weight": 400, "minimal-style@@h6-weight": 300, "minimal-style@@h4-weight": 500, "minimal-style@@h3-color@@dark": "#E2E2E2", "minimal-style@@bold-color@@dark": "#FFFFFF", "minimal-style@@italic-color@@dark": "#FFFFFF", "minimal-style@@bold-weight": 600, "minimal-style@@code-background@@dark": "#1F2326", "minimal-style@@bg1@@dark": "#24292D", "minimal-style@@code-size": "14px", "minimal-style@@blockquote-background-color@@dark": "#2A2F33", "minimal-style@@blockquote-border-thickness": 4, "minimal-style@@blockquote-color@@dark": "#747A86"}\n\n还有代码高需要搞。\nobsidian中style插件css备份11-23 20:36{ "minimal-style@@sidebar-lines-off": true, "minimal-style@@sidebar-tabs-style": "sidebar-tabs-square", "minimal-style@@tabs-style": "tabs-square", "minimal-cards-style@@cards-border-width": "3px", "minimal-style@@tx1@@dark": "#C0C8CE", "minimal-style@@h1-color@@dark": "#FFFFFF", "minimal-style@@h1-color@@light": "#000000", "minimal-style@@h1-size": "2.5em", "minimal-style@@h2-size": "2.2em", "minimal-style@@h3-size": "1.7em", "minimal-style@@h2-color@@dark": "#EEEEEE", "minimal-style@@h2-color@@light": "#000000", "minimal-style@@h3-color@@light": "#000000", "minimal-style@@h4-color@@dark": "#E9E9E9", "minimal-style@@h4-color@@light": "#202020", "minimal-style@@tx1@@light": "#474747", "minimal-style@@minimal-code-scroll": false, "minimal-style@@h4-size": "1.6em", "minimal-style@@h5-size": "1.3em", "minimal-style@@h6-size": "1em", "minimal-style@@table-lines": true, "minimal-style@@maximize-tables-off": "maximize-tables", "minimal-style@@row-hover": false, "minimal-style@@h2-weight": 600, "minimal-style@@h1-weight": 700, "minimal-style@@h3-weight": 500, "minimal-style@@h5-weight": 400, "minimal-style@@h6-weight": 300, "minimal-style@@h4-weight": 500, "minimal-style@@h3-color@@dark": "#E2E2E2", "minimal-style@@bold-color@@dark": "#FFFFFF", "minimal-style@@italic-color@@dark": "#FFFFFF", "minimal-style@@bold-weight": 600, "minimal-style@@code-background@@dark": "#1F2326", "minimal-style@@bg1@@dark": "#24292D", "minimal-style@@code-size": "14px", "minimal-style@@blockquote-background-color@@dark": "#2A2F33", "minimal-style@@blockquote-border-thickness": 4, "minimal-style@@blockquote-color@@dark": "#747A86", "minimal-style@@code-comment@@dark": "#5C6370", "minimal-style@@code-function@@dark": "#61AFEF", "minimal-style@@code-keyword@@dark": "#E45649", "minimal-style@@code-operator@@dark": "#528BFF", "minimal-style@@code-string@@dark": "#98C379", "minimal-style@@code-normal@@dark": "#FFFFFF", "minimal-style@@image-muted": 1, "minimal-style@@zoom-off": true, "minimal-advanced@@cursor": "default", "minimal-advanced@@styled-scrollbars": false, "minimal-style@@icon-muted": 0.5, "minimal-style@@window-title-off": false, "minimal-style@@bg1@@light": "#F2F2F2", "minimal-style@@color-orange@@dark": "#FBFF8A"}\n\n编辑obsidian.css文件:\n/* 文件浏览器和大纲窗格显示关系连线 */.outline .tree-item-children { margin-left: 20px; border-left: 1px solid var(--background-modifier-border); border-radius: 6px; transition: all 0.5s ease-in-out;}.nav-folder-children .nav-folder-children { margin-left: 20px; padding-left: 0; border-left: 1px solid var(--background-modifier-border); border-radius: 6px; transition: all 0.5s ease-in-out;}/* 右下状态栏淡出 *//* auto fades status bar items */.status-bar:not(:hover) .status-bar-item { opacity: 0.25; transition: opacity .25s ease-in-out;}/* 滚动条 */body:not(.native-scrollbars) ::-webkit-scrollbar { background-color: rgba(255, 255, 255, 0);}/* 滚动条滚动的那部分 */body:not(.native-scrollbars) ::-webkit-scrollbar-thumb { background-color: rgb(245, 245, 245); border: 1px solid rgb(226, 226, 226); border-radius: 0%;}/* 行内代码块 */.cm-s-obsidian span.cm-inline-code { border: 1px solid rgb(226, 226, 226); border-radius: 3px; color: #000000;}/* 引用块 */blockquote { border-left: 4px solid #dfe2e5; padding: 0 15px; color: #777777;}blockquote blockquote { padding-right: 0;}.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote:before { /* border-top: 12px; */ margin-top: 6px; margin-bottom: 8px;}/* 代码块 */.cm-s-obsidian .HyperMD-codeblock { /* border-top: 1px solid rgb(226, 226, 226); */ border-left: 1px solid rgb(232, 235, 238); border-right: 1px solid rgb(232, 235, 238); background-color: #f8f8f8;}.markdown-source-view.mod-cm6 .cm-line.HyperMD-codeblock { padding-top: 0px; padding-bottom: 0px;}/* 代码块顶端 */.cm-s-obsidian div.HyperMD-codeblock-begin-bg { background-color: #f8f8f8; border-left: 1px solid rgb(232, 235, 238); border-right: 1px solid rgb(232, 235, 238); border-top: 1px solid rgb(232, 235, 238); border-top-left-radius: 3px; border-top-right-radius: 3px; font-size: 2px;}/* 代码块底端 */.cm-s-obsidian div.HyperMD-codeblock-end-bg { background-color: #f8f8f8; border-left: 1px solid rgb(232, 235, 238); border-right: 1px solid rgb(232, 235, 238); border-bottom: 1px solid rgb(232, 235, 238); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; font-size: 2px;}/* 表格 */table { padding: 0px; word-break: initial;}table tr { border: 1px solid #dfe2e5; margin: 0; padding: 0;}table tr:nth-child(2n),thead { background-color: #f8f8f8;}table th { font-weight: bold; border: 1px solid #dfe2e5; border-bottom: 0; margin: 0; padding: 6px 13px;}table td { border: 1px solid #dfe2e5; margin: 0; padding: 6px 13px;}table th:first-child,table td:first-child { margin-top: 0;}table th:last-child,table td:last-child { margin-bottom: 0;}/* 表格与正文的间距 */.markdown-source-view.mod-cm6 .cm-table-widget { padding-top: 10px; padding-bottom: 10px;}/* 表格内文字 */.markdown-rendered td { padding-left: 2px;}/* 编辑器正文 */.mod-cm6 .cm-editor .cm-line { padding-top: 6px; padding-bottom: 8px;}/* 标题 */.mod-cm6 .cm-editor .HyperMD-header-1 { padding-top: 40px; padding-bottom: 40px;}.mod-cm6 .cm-editor .HyperMD-header-2 { padding-top: 20px; padding-bottom: 20px;}.mod-cm6 .cm-editor .HyperMD-header-3 { padding-top: 15px; padding-bottom: 15px;}/* 代码高亮 */body.theme-light.css-settings-manager { --code-comment: #a50; --code-function: #0000ff; --code-keyword: #770088; --code-operator: #981a1a; --code-string: #aa1111; --code-normal: #000000; --code-number: #116644; --code-variable: #000000;}.cm-variable { color: #000000;}.cm-type { color: #008855;}"},{"title":"Ftp","url":"/en/2023/05/25/note/Wiki/FTP/","content":"\nFile Transfer Protocol client\n\n\n\n\n\n\nOption\nImplication\n\n\n\n-4\ncontact IPv4 hosts\n\n\n-6\ncontact IPv6 hosts\n\n\n-A\nenable active mode transfer\n\n\n-d\nenbale debugging outpout\n\n\n-e\ndisble command line editing\n\n\n-g\nturn off file name globbing\n\n\n-i\ndo not prompt during multiple file\n\n\n-n\ndo not automatically login to the remote system\n\n\n","categories":["Wiki"],"tags":["Protocol","Linux"]},{"title":"GDB","url":"/en/2023/05/25/note/Wiki/GDB/","content":"Compile the source file to the binary file.Add argument -g to generate a GDB binary file.\n\n\ngcc -g source.c -o outputg++ -g source.cpp -o outputls -atotal 52K-rw-r--r-- 1 dionysen dionysen 450 Oct 5 22:26 binary-search.cpp-rw-r--r-- 1 dionysen dionysen 2.5K Oct 2 14:29 linked-list.cpp-rw-r--r-- 1 dionysen dionysen 411 Oct 2 14:41 node.cpp-rwxr-xr-x 1 dionysen dionysen 37K Oct 5 23:04 output\n\n\n\n\nCommand\nFull name\nDo somthing\n\n\n\ngdb output\n\n\n\n\nr\nrun\nRun current program\n\n\nb\nbreak\nSet a breakpoint at [function] or [line] (in file)\n\n\nc\ncontinue\nContinue running your program (after stopping, e.g. at a breakpoint).\n\n\nn\nnext\nExecute next program line (after stopping); step over any function calls in the line.\n\n\ns\nstep\nExecute next program line (after stopping); step into any function calls in the line.\n\n\nl\nlist\nType the text of the program in the vicinity of where it is presently stopped.\n\n\np\nprint\nDisplay the value of an expression.\n\n\nwatch\nwatch\nSet a watchpoint in an address of expression\n\n\ni b\ninfo break\nCheck information of breakpoints.\n\n\nk\nkill\nKill the program being debugged.\n\n\nq\nquit\nExit from GDB.\n\n\n\nYou can use shell [args] to execute a shell command.\n\n","categories":["Wiki"],"tags":["Linux","CPP","C","Debug"]},{"title":"Obsidian Minimal Theme Setting","url":"/en/2023/05/25/note/Wiki/Obsidian/","content":".css setting in obsidian minimal theme.\n\n\n{ "minimal-cards-style@@cards-border-width": "3px", "minimal-advanced@@cursor": "default", "minimal-advanced@@styled-scrollbars": false, "minimal-style@@blockquote-border-thickness": 4, "minimal-style@@code-background@@light": "#F8F8F8", "minimal-style@@sidebar-lines-off": true, "minimal-style@@sidebar-tabs-style": "sidebar-tabs-square", "minimal-style@@tabs-style": "tabs-default", "minimal-mobile@@mobile-toolbar-off": true, "minimal-style@@tx1@@dark": "#C0C8CE", "minimal-style@@h1-color@@dark": "#FFFFFF", "minimal-style@@h1-color@@light": "#000000", "minimal-style@@h1-size": "2.5em", "minimal-style@@h2-size": "2.2em", "minimal-style@@h3-size": "1.7em", "minimal-style@@h2-color@@dark": "#EEEEEE", "minimal-style@@h2-color@@light": "#000000", "minimal-style@@h3-color@@light": "#000000", "minimal-style@@h4-color@@dark": "#E9E9E9", "minimal-style@@h4-color@@light": "#202020", "minimal-style@@tx1@@light": "#000000", "minimal-style@@minimal-code-scroll": false, "minimal-style@@h4-size": "1.6em", "minimal-style@@h5-size": "1.3em", "minimal-style@@h6-size": "1em", "minimal-style@@table-lines": true, "minimal-style@@maximize-tables-off": "maximize-tables", "minimal-style@@row-hover": false, "minimal-style@@h2-weight": 700, "minimal-style@@h1-weight": 800, "minimal-style@@h3-weight": 600, "minimal-style@@h5-weight": 400, "minimal-style@@h6-weight": 300, "minimal-style@@h4-weight": 500, "minimal-style@@h3-color@@dark": "#E2E2E2", "minimal-style@@bold-color@@dark": "#FFFFFF", "minimal-style@@italic-color@@dark": "#FFFFFF", "minimal-style@@bold-weight": 700, "minimal-style@@code-background@@dark": "#1F2326", "minimal-style@@bg1@@dark": "#24292D", "minimal-style@@blockquote-background-color@@dark": "#2A2F33", "minimal-style@@blockquote-color@@dark": "#747A86", "minimal-style@@code-value@@light": "#0000FF", "minimal-style@@header-height": "40px", "minimal-style@@h6-variant": "normal", "minimal-style@@h5-variant": "normal", "minimal-style@@h4-variant": "normal", "minimal-style@@file-header-font-size": "0.6em"}\n","categories":["Wiki"],"tags":["Obsidian"]},{"title":"SCP protocol","url":"/en/2023/05/25/note/Wiki/SCP/","content":"scp copies files between hosts on a network.\n\n\nscpIt uses ssh for data transfer, and uses the same authentication and provides the same security as a login session.\nscp will ask for passwords or passphrases if they are needed for authentication.\nThe source and target may be specified as a local pathname, a remote host with optional path in the form [user@]host:[path], or a URI in the form scp://[user@]host[:port][/path].\n\nLocal file names can be made explicit using absolute or relative pathnames to avoid scp treating file names containing ‘:‘ as host speacifiers.\n\nWhen copying between two remote hosts, if the URI format is used, a port cannot be specified on the target if the -R option is used.\n\n\n\nOptions\nImplication\n\n\n\n-3\nCopies between two remote hosts are transferred through the local host. Without this option the data is copied directly between the two remote hosts.\n\n\n-4\nForces scp to use IPv4 addresses only\n\n\n-6\nForces scp to use IPv6 addresses only\n\n\n-A\nAllows forwarding of ssh-agent(1) to the remote system. The default is not to forward an authentication agent.\n\n\n-C\nCompression enable\n\n\n-l\nLimits the used bandwidth, specified in Kbit/s\n\n\n","categories":["Wiki"],"tags":["SCP","SSH"]},{"title":"Source Lists","url":"/en/2023/05/25/note/Wiki/Source%20List/","content":"Some commonly used source lists.\n\n\nSource ListsUSTC Source Listtermux编辑/data/data/com.termux/files/usr/etc/apt/sources.list\ndeb https://mirrors.ustc.edu.cn/termux/apt/termux-main stable main\n\ndebiandeb http://mirrors.ustc.edu.cn/debian stable main contrib non-free# deb-src http://mirrors.ustc.edu.cn/debian stable main contrib non-freedeb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free# deb-src http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free# deb http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free# deb-src http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free\n\narchlinuxServer = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch# armServer = https://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo\n\nubuntu# 默认注释了源码仓库,如有需要可自行取消注释deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiversedeb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiversedeb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiversedeb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse# 预发布软件源,不建议启用# deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse\n\nkalisupported:amd64, armel, armhf, i386\ndeb https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contribdeb-src https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib\n","categories":["Wiki"],"tags":["Linux","Source"]},{"title":"WSL2","url":"/en/2023/05/25/note/Wiki/WSL2/","content":"\n✅ This is a tutorial of installing on WSL2\n\n\n\nInstall WSL2Start using WSLOpen powershell using administration rights, and input:\ndism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart\n\nRequirement of WSL2For x64 system, the version of win10 must be 1903 or higher.Using “win + R” and input winver to check.\nStart Virtual machinel platformOpen powershell using administration rights, and input:\ndism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart\n\nInstall Linux Kernal Updating Download Link: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msiInstall.\nSetting the default version 2Open powershell using administration rights, and input:\nwsl --set-default-version 2\n\nThen, WSL2 is already installed.\nUpdate to WSLg将win10更新到最新的版本\nOpen powershell using administration rights, and input:\nwsl --updatewsl --version# display:WSL version: 1.0.3.0Kernel version: 5.15.79.1WSLg version: 1.0.47MSRDC version: 1.2.3575Direct3D version: 1.606.4DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hypWindows version: 10.0.19045.2364\n\n否则说明win10还不是最新的,继续更新\nInstall Archlinux on WSL2Download ArchlinuxDownload link: https://mirrors.tuna.tsinghua.edu.cn/archlinux/iso/latest/Find and Download archlinux-bootstrap-2020.10.01-x86_64.tar.gz .\nInstall Archlinux by LxRunOffline1. Input the command in powershellLxRunOffline i -n <自定义名称> -f <Arch镜像位置> -d <安装系统的位置> -r root.x86_64\n\nexample:\nLxRunOffline i -n ArchLinux -f C:\\Users\\dionysen\\Downloads\\archlinux-bootstrap-2020.10.01-x86_64.tar.gz -d C:\\Users\\dionysen\\Linux -r root.x86_64\n\n2. Change WSL2 version in Archlinuxwsl --set-version ArchLinux 2\n\nConfigurationBasic Configurationwsl -d Archlinuxrm /etc/resolv.confexit\n\nThe terminal window will be unavailable, so you should reopen a new terminal window, then:\nwsl --shutdown Archlinuxwsl -d Archlinuxcd /etcvi pacman.conf\n\nAdd following code in the end of pacman.conf:\n[archlinuxcn]Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch\n\nAnd change the mirrorlist:\nvi ./pacman.d/mirrorlist\n\nRemove the comment of a Chinese source.\npacman -Syypacman-key --initpacman-key --populatepacman -S archlinuxcn-keyringpacman -S base base-devel vim git wgetpasswd # input the password of rootuseradd -m -G wheel -s /bin/bash <username>passwd <username>vim /etc/sudoers\n\nUse /wheel find the line wheel ALL=(ALL) ALL and remove the comment.\nid -u <username>exit\n\nExecute the command in powershell to set default user of Archlinux:\nlxrunoffline su -n Archlinux -v <username>\n\nInstall Ubuntu20.02 in WSL2wsl --list --online\t\t# 查看可直接安装的发行版列表# 显示如下:PS C:\\Windows\\system32> wsl -l --onlineThe following is a list of valid distributions that can be installed.Install using 'wsl.exe --install <Distro>'.NAME FRIENDLY NAMEUbuntu UbuntuDebian Debian GNU/Linuxkali-linux Kali Linux RollingSLES-12 SUSE Linux Enterprise Server v12SLES-15 SUSE Linux Enterprise Server v15Ubuntu-18.04 Ubuntu 18.04 LTSUbuntu-20.04 Ubuntu 20.04 LTSOracleLinux_8_5 Oracle Linux 8.5OracleLinux_7_9 Oracle Linux 7.9# 安装ubuntu 20.04wsl --install Ubuntu-20.04\n\n然后打开终端,打开ubuntu-20.04,创建用户和密码\n换源+更新\n然后安装anaconda\nInstall Anaconda on Ubuntuwget https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-5.3.0-Linux-x86_64.shchmod +x Anaconda3-5.3.0-Linux-x86_64.sh./Anaconda3-5.3.0-Linux-x86_64.shyesENTER\n\n安装完成之后,检查版本:\nanaconda -Vconda -V\n\n使用anaconda换源:\ncdvim .condarc\n\n编辑.condarc ,添加清华源\n# add to .condarcssl_verify: falsechannels: - defaultsshow_channel_urls: truedefault_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud\n\n更新:\n conda update -n base -c defaults conda # 升级anaconda\n\nconda create -n myconda python=3.7 \t\t# 创建虚拟环境,名称为myconda(可以修改conda info --envs \t\t\t\t\t\t# 查看已安装的虚拟环境conda activate myconda\t\t\t\t\t# 激活环境mycondaconda deactivate\t\t\t\t\t\t# 关闭当前环境\n\nconda list\t\t\t\t# 查看conda的包pip list\t\t\t\t# 查看pip的包# 给pip换源 (也可以直接使用命令更换阿里源:# pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/cdmkdir .pipvim .pip/pip.conf# 添加以下内容#-----------------------------------------[global]index-url = https://mirrors.bfsu.edu.cn/pypi/web/simpleformat = columnstrusted-host = mirrors.bfsu.edu.cn#-----------------------------------------pip install jupyter \t# 安装jupyterjupyter notebook\t\t# 开启jupyter notebook服务\n\n附加配置systemd编辑 /etc/wsl.conf\n[boot]systemd=true\n\nWSL distros 的备份还原\n备份\n\nwsl -l -v# 显示为 NAME STATE VERSION* Ubuntu-20.04 Running 2wsl -t Ubuntu-20.04wsl --export Ubuntu-20.04 E:\\SystemBackup\\ubuntu-wsl2-2022.11.29.tar\n\n\n还原\n\nwsl --import <distro-name> <install-path> <backup-file># e.g.wsl --import Ubuntu c:\\wsl2 d:\\save\\linux\\wsl2.tar\n\nWSL-Ubuntu安装 [[Computer/Programming/Language/Qt|qt]]sudo apt install qt5* qtcreator\n\n创建项目时如果出现“no suitable kits”,点击“option”查看配置,如果“QT version”为“none”,则选择 /usr/lib/qt5/bin/qmake,保存即可。\n","categories":["Wiki"],"tags":["xpra","x11-forward"]},{"title":"Clangd Config CMakeLists. txt","url":"/en/2023/05/25/note/Wiki/cpp_config/","content":"Vim using Coc-nvim plugin clangd-lsp need to read CMakeLists.txt so that it can auto-complete your code.If your project builds with CMake, it can generate this file. You should enable it with:\ncmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1\n\ncompile_commands.json will be written to your build directory. If your build directory is $SRC or $SRC/build, clangd will find it. Otherwise, symlink or copy it to $SRC, the root of your source tree.\nln -s ~/myproject-build/compile_commands.json ~/myproject/\n\nGenerated compile_commands.json can support auto completion for third party libraries.\n","categories":["Wiki"],"tags":["Linux","CPP","CMake","Clangd"]},{"title":"V2rayA","url":"/en/2023/05/25/note/Wiki/v2raya/","content":"On archlinux:\nyay -S xray-binsudo pacman -S v2rayyay -S v2raya-bin\n\nMaybe you need restart your computer!\n\n\nAnd config:\n\n\n\n项目\n配置\n\n\n\n透明代理/系统代理\n启用:大陆白名单模式\n\n\n透明代理/系统代理实现方式\nredirect\n\n\n规则端口的分流模式\n大陆白名单模式\n\n\n防止 DNS 污染\n仅防止 DNS 劫持\n\n\n特殊模式\nsupervisor\n\n\nTCPFastOpen\n保持系统默认\n\n\n","categories":["Wiki"],"tags":["VPN"]},{"title":"Data Structure","url":"/en/2023/05/25/note/Computer/Programming/Algorithm%20and%20Data%20structure/DataStrucuture_en/","content":"Data Strutcure\n\n\nArrayArray has fixed size and contiguous memory. New elements cannot be appended. You can use memory address to access elements of Array. \nchar a[5] = {'h', 'e', 'l', 'l', 'o',}; \n\nC++ counts food tags from `0`, so `a[0] = 'h'` and `a[1] = 'e'`.\nRandom access using `a[i]` has `O(1)` time complexity.\nUnits of array can be modified. \na[0] = 'b';\nresult:\nbello\n\n### Dynamic Allocation of Arrays\n\nA size-n array can be created in this way:\nchar a[n];\n\nBut when writing the code, n must be known.\nIf n is unknown, how dose the program run?\nchar* a = NULL;int n; // array size cin >> n; // read in the size. e.g., get n = 5a = new char[n];\n\nNow a is an empty array whose size is 5.\n// store somrthing in the arraya[0] = 'h';a[1] = 'e';a[2] = 'l';a[3] = 'l';a[4] = 'o';\n\nWhen done, free memory. Otherwise, memory leak can happen.\ndelete [] a;a = NULL;\n\n\n\nRemoving an element in the middle has O(n) time complexity. Require moving the remaining items leftward.\nVectorVector is almost the same as array.\nThe main difference is that vector’s capacity can automatically grow.\nNew elements can be appended using push_back() in O(1) time(on average). \nThe last element can be removed using pop_back() in O(1) time.\nstd::vector<char> v = {'h', 'e', 'l', 'l', 'o'}; v.push_back();v.pop_back();v.erase(v.begin() + 1);\n\nVector can delete an element in the middle using erase() in O(n) time. So it is not better to do this.\nstd::vector<char> v(100);cout << v.size();\t\t// print "100"cout << v.capacity();\t// print "100"// thenv.push_back('x');cout << v.size();\t\t// print "101"cout << v.capacity();\t// print "200"\n\nWhen size is going to exceed capacity, program will create a new array of capacity 200, copy the 100 elements from the old array to the new, put the new element in the 101st position and free the old array from memory.\nListA NodeA node contains a data and two pointers that one points to the previous node and another points to the next node.\nDoubly Linked Liststd::list<char> l = {'h', 'e', 'l', 'l', 'o'}; \n\ncout << l[2];\t\t// does not workl[0] = 'a';\t\t\t// does not work\n\nlist<char>::iterator iter = l.begin();cout << *iter;\t\t// print 'h'iter++;cout << *iter;\t\t// print 'e'*iter = 'a';push_back();push.front();\n\nDiference\n\n\n\nArray\nVector\nList\n\n\n\nSize\nfixed\ncan increase and decrease\ncan increase and decrease\n\n\nMemory\ncontiguous\ncontiguous\nnot contiguous\n\n\n\n\n\n\nArray\nVector\nList\n\n\n\nRand Access\nO(1)\nO(1)\n—\n\n\npush_back()\n—\nO(1)(average)\nO(1)\n\n\npop_back()\n—\nO(1)\nO(1)\n\n\ninsert()\n—\nO(n)(average)\nO(1)\n\n\nerase()\n—\nO(n)(average)\nO(1)\n\n\nWhich shall we use?\nArray: Fixed size throughout.\nVector: \n\nRandom access(i.e., read or write the i-th element) is fast.\nInsertion and deletion at the end are fas.\ninsertion and deletion in the front and midddle are slow.\n\nList:\n\nSequentially visiting elements is fast; random access is not allowed.\nFrequent insertion and deletion at any position are OK.\n\nBinary Searchint arr[] = {3, 5, 12, 16, 17, 26, 32, 51, 53, 64};\n\nInputs: (i) an array whose elements are in the accending order and (ii) a key.\nGoal: Search for the key in the array. If found, return its index; if not found, return -1.\nExamle 1:\n\nSearch for the elemnt 53.\nReturn 8.\n\nExample 2:\n\nSearch for the element 9.\nReturn -1.\n\nExample: key = 26. Use two variables left and right pointing to the front of the array and the back respectively. \nint search(int arr[], int left, int right, int key){ while (left <= right) { int mid = (left + right) / 2; if (key == arr[mid]) return mid; if (key > arr[mid]) left = mid + 1; else right = mid - 1; } return -1;}\n\nHow to suport both search and insertion?\nstd::vector<int> v = {3, 5, 12, 16, 17, 26, 32, 51, 53, 64};\n\nThe ascending order must be kept; otherwisem search would take O(n) time.Inserting an item into the middle has O(n) time complexity(on average).Can we perform binary search in the list?No, Given left and right, we cannot get mid efficiently.\n\n\n\n\nSearch\nInsertion\n\n\n\nVector\nO(log n)\nO(n)\n\n\nList\nO(n)\nO(1)\n\n\nSkip List\nO(log n)\nO(log n)\n\n\nSkip ListLinked list does not support binary search.\n\nSkip list allows fast search and fast inertion.\n\nSearch: O(log n) time complexcity on average.\nInsertion: O(log n) time complexcity on average.\nBuild a skip list(待补充)Initially, a linked list contains n numbers in ascending order.\nSearchInsertion","categories":["Programming","Data Structure"],"tags":["Data"]},{"title":"Singly Linked list","url":"/en/2023/05/25/note/Computer/Programming/Algorithm%20and%20Data%20structure/Linked_list_en/","content":"Now we implement a singly linked list with C++.\n\nLinked list is a Data structure that contains a variable and a pointer pointing to the next node.\n\n\n\nStorage of dataFirst of all, a data structure is needed to store the variable and the pointer. It can be coded:\nstruct Node { int val; Node* next; Node() : val(0) , next(nullptr) { } Node(int x) : val(x) , next(nullptr) { } Node(int x, Node* next) : val(x) , next(next) { } };\n\nThree constructors are packaged in the struct Node, which can help us create a head of a linked list conveniently.\nNode *head = new Node();Node *head = new Node(0);Node *head = new Node(0, nullptr);\n\nThere are three ways to create a pointer head. Using first way, you can create a pointer head pointing to a node that has a variable val = 0 and a nullptr (a pointer pointing nothing). And the second way, you create a same head but you must assign a value to val of the node pointed to by head. The last, you even can link a node to the head requiring you give a pointer pointing to the next node.\nThen, how to handle the linked list?\nLinked list classObject-oriented is a\nclass ListNode {public: struct Node { int val; Node* next; Node() : val(0) , next(nullptr) { } Node(int x) : val(x) , next(nullptr) { } Node(int x, Node* next) : val(x) , next(next) { } }; ListNode() { this->head = nullptr; } Node* head; void assign(int val); int at(int pos); void set(int pos, int val); void del(int pos); int find(int val); void print();};\n\n void assign(int val) { Node* p = new Node(val); Node* last = this->head; if (last) { while (last->next) { last = last->next; } last->next = p; } else { head = p; } } int at(int pos) { int index = 0; Node* p = this->head; while (index != pos) { p = p->next; index++; } return p->val; } void set(int pos, int val) { int index = 0; Node* p = this->head; while (index != pos) { p = p->next; index++; } p->val = val; } void del(int pos) { Node* p = this->head; if (pos == 0) { head = head->next; delete p; } else { int index = 0; Node* p = this->head; Node* q; for (q = nullptr; p; q = p, p = p->next) { if (index == pos - 1) { q->next = p->next; delete p; break; } index++; } } } int find(int val) { Node* p; int index = 0; for (p = this->head; p; p = p->next) { if (p->val == val) { return index; } index++; } return -1; } void print() { Node* p; cout << "["; for (p = this->head; p; p = p->next) { cout << p->val; if (p->next) { cout << ", "; } } cout << "]" << endl; }};int main(){ ListNode* node = new ListNode; node->assign(1); node->assign(2); node->assign(3); node->assign(4); node->assign(5); node->print(); cout << node->find(2) << endl; node->del(2); node->print(); cout << node->at(2) << endl; node->set(2, 9); node->print(); return 0;}\n\nMerge Two LinkedListNode *mergeList(ListNode *l1, ListNode *l2) { Node *p, *q, *temp, *newList; if (l1->head->val > l2->head->val) { // make ptr "p" is the head of small list newList = l2->head; p = l2->head; q = l1->head; } else { newList = l1->head; p = l1->head; q = l2->head; } while (p != nullptr && q != nullptr) { if (q->val >= p->val) { temp = q->next; q->next = p->next; p->next = q; q = temp; p = p->next->next; } else { temp = p->next; p->next = q->next; q->next = p; p = temp; q = q->next->next; } } if (q != nullptr) { p->next = q; } return newList;}\n\n\n\n","categories":["Wiki"],"tags":["Linux","Termux","WSL2","Windows"]},{"title":"C Language","url":"/en/2022/05/25/note/Computer/Programming/Language/C/","content":"\n📚 Notes and personal understanding of the process of learning C language, used to find.\n\n\n\n\n\nIntroduction\nOur daily life has become inseparable from computers. Whether you are using computers or not, you are using computers consciously or unconsciously, or using the services that computers provide for you. When we are in the use of computer, we are all in the use of computer has some software, so we will go to find the APP, if you searched all the APPs on the market, is there no have the functionality of the APP you want, then you have to write their own one, if you want to do something special, you can’t find the right software, will still have to write their own one.Learning programming is not about writing software for yourself. It is about learning programming to understand how computers work, what they can or are good at doing, what they can’t or aren’t good at doing, and how computers solve problems.\n\n —— Weng Kai\n\n\n\nGet startedFramework#include "stdio.h"int main(){ return 0;}\n\nAny programs programed by C language must have this framework.\nOutput functionYou can understand it as function in math, which is a mapping relationship. But they are different.\nprintf is a function, whoes function is output a string by formating printf("......\\n") .\nFor example, the Hello, world! :\n#include "stdio.h"int main(){ printf("Hello,world!\\n"); // \\n make it wrapping return 0;}\n\nprintf can print not only a string, but also the value of the variable, but you need to format the variable.\nVariables and constants\nThe computer carries on the computation, then participates in the computation is the number, participates in the computation in the C language the number is called the quantity, the quantity divides into the variable and the constant.Use decimal for expression of daily life, because is advantageous for the calculation of the human brain, a computer internal use binary, for convenience of computer calculation, and the computer expression, as a result of bytes in computer internal frequency is higher, if you can use a simple way to express its inner meaning accurately, Will bring us a lot of convenience, so often use hexadecimal expression.But the number itself remains the same no matter which way it is counted.\n\nConstantsAs the name implies, an invariant quantity that, once initialized, cannot be changed.\nVariablesAs the name implies, a variable quantity that, once defined, can be assigned any value to change its size.\nThe way of difination:\nint i;int j = 1;char k;float h = 1.2;double g = 2.0;\n\nFor example, i is the variable itself, int is an integer variable, whose value can only be an integer, while double is a double-precision floating point number, which can represent a decimal.\nDifferent variable types have different value types and value ranges.\nCharacter variables:\nUse to store character constants. A character variable can hold only one character constant. The type specifier is char.\n#include<stdio.h>int main(){ char x,y,z; x = 'b'; y = 'o'; z = 'y'; printf("%c%c%c\\n",x,y,z);return 0;}\n\nThe result is:\nboy\n\nThe literal value of a character variable is independent of the character constant it holds, analogous to an integer variable.\nCharacter variables can also store integer data, which is universal. You can change %c to %d during input and output.\nOutput and input of a variableOutputAs mentioned above, printf can print a string, and can print the value of a variable, as shown in the following example:\n#include "stdio.h"int main(){ int i = 1; printf("i = %d\\n",i); i = 2; printf("After assignment,i = %d\\n",i); return 0;}\n\nNotice that printf prints the value of the variable with a %d inside the double quotes, which is the way the variable is formatted.\n %d indicates that the output variable is an integer.\n\n\n\nVariable Types\nFormatting Symbols\n\n\n\nint\n%d\n\n\nunsigned\n%u\n\n\nlong long\n%ld\n\n\nunsigned long long\n%lu\n\n\nfloat\n%f\n\n\ndouble\n%lf\n\n\nYou can use scientific notation when you output, and use %e for formatting symbol.\nprintf("%.nf",sum);\n\nThis line of code can preserve n decimal places.\nThe following are escape characters:\n\n\n\nSymbols\nWords\n中文含义\n\n\n\n\\b\nbackspace\n回退一格\n\n\n\\t\ntab\n下一个制表位\n\n\n\\n\nnew line\n换行\n\n\n\\r\nreturn\n回车\n\n\n\\f\nf\n换页\n\n\nInputSimilarly, the function scanf can read the input according to a certain format.\n#include <stdio.h>int main( ) { char str[100]; int i; printf( "Enter a value :"); scanf("%s %d", str, &i); printf( "\\nYou entered: %s %d ", str, i); printf("\\n"); return 0;}\n\nscanf() stops reading a string as soon as it encounters a space, so “this is test” is three strings for scanf().\nFloating point numbersIn mathematics, the numbers on the number line are continuous, and between any two different points, an infinite number can be found, but this is difficult to achieve in computers, so floating point numbers emerged.\nFloating point numbers are used to represent fractional numbers between whole numbers, but their accuracy is not infinite, nor is their expressability infinite, so a random decimal may not be able to be expressed by a computer.\nOperationOperator\n\n\nMathematics\nAdd\nSubstract\nMultiply\nDivide\nRemainder\n\n\n\nC Language\n+\n-\n*\n/\n%\n\n\nRelational operator\n\n\nRelation\nEqual\nNot Equal\nGreater\nGreater or Equal\nLess-than\nLess-than or Equal\n\n\n\nOperator\n==\n!=\n>\n>=\n<\n<=\n\n\nThe relational operator evaluates only zeros and ones.\nSpecial operatorcount ++ and ++ count both mean to add one, but a = count ++; means to assign the value of count to a and then add one, whereas a = ++count; means to add one to the value of count and then assign the result to a. So you end up adding one to count in both cases, but the value of a differ by 1.\ncount -- and -- count in the same way.\n, is comma operator that generally has only one purpose: to add multiple conditions to an if statement.\nConditional operatorcount = (<#condition#>)? <#yes#>:<#no#>;\n\nIt is equivalent to an if statement.\n\nNesting is not recommended.\n\nLogical operator\n\n\nLogic\nand\nor\nnot\n\n\n\nSymbol\n&&\n||\n!\n\n\nThe result of logical operation is only 0 or 1.\nSeveral statementsifif (<#condition#>) { <#statements#> }\n\nTo judge and to act when the conditions are true.\n if (<#condition#>) { <#statements#> } else if (#condition#) { <#statements#> }else if (#condition#) { <#statements#> } …… else { <#statements#> }\n\nWe can add else, so we can do something if the condition doesn’t work.\nThe else always matches the nearest if.\nwhilewhile (<#condition#>) { <#statements#>}\n\nThe loop continues until the condition fails.\ndowhiledo { <#statements#>} while (<#condition#>);\n\nThe loop continues until the condition fails.\nThe difference with a while loop is that a dowhile does something and then evaluates the condition, whereas a while evaluates the condition and then loops. While might not do a loop at all, if the condition is not satisfied in the first place.\nswitchswitch (<#expression#>) { case <#constant#>: <#statements#> break; case <#constant#>: <#statements#> break; ...... default: break;}\n\nswitch is judgment statement, the <#expression#> is constant expression that must be a integral type or enum-type.\nThe essence of such a statement is the program evaluates this expression and then compares it to each case at a time. The action after the case is executed when equal.\nThere are an infinite number of cases, each followed by a value to be compared with and a colon.\nThe variables to be compared must be of the same type.\nWhen all the case is false, the program will do the action after default . So there can be nothing after defalut.\nFor example:\n#include <stdio.h>int main(){ int a; printf("Input integer number:"); scanf("%d",&a); switch(a){ case 1: printf("Monday\\n"); break; case 2: printf("Tuesday\\n"); break; case 3: printf("Wednesday\\n"); break; case 4: printf("Thursday\\n"); break; case 5: printf("Friday\\n"); break; case 6: printf("Saturday\\n"); break; case 7: printf("Sunday\\n"); break; default:printf("error\\n"); break; } return 0;}\n\nforfor (<#initialization#>; <#condition#>; <#increment#>) { <#statements#>}\n\nfor loop applies to loops with a defined number of cycles, such as traverse.\nThere are three sections in parenthesis, separated with semicolons, which are respectively initialization, conditions for loop to proceed and actions to be performed in each cycle.\nMiscellaneous\n\n\nKey words\nImplication\n\n\n\nInf\nInfinity\n\n\n-Inf\nNegative infinity\n\n\nnan\nInvalid number\n\n\nfabs(<#expression#>)\nAbsolute value\n\n\nbreak\nJump out of the loop\n\n\ncontinue\nEnd the cycle\n\n\nFunction and customizing functionAt the beginning of C language program, the implication of #include <stdio.h> is including a function library named stdio.h and then the program can call functions in the library. Both the printf and the scanf used in the previous paragraph are functions of the library.\nIn practice, we often encounter repeated operations, we can copy this code to complete the repeated action, but code copy is a poor quality of the program, because the maintenance may need to change too many places.\nYou can solve this problem by customizing functions:\n<#type#> (<#type#>,<#type#>,……){ <#statement#> return 0; //Depends on the function type,Also visable as:return;}\n\n\nA function can have multiple return or none. However, multiple return are not recommended for easy modification.\n\nEach function has its own variable space, namely {} (block), which is independent of each other. Local variables are limited by the block they are in. If the inside of a block has the same name as the outside of a block, the inside of a block takes precedence.\n\nWhen a function is called, it can only pass values to functions, not variables to functions. That is, after passing a variable to a function, the function will read the value of the variable for operation, but will not change the value of the variable.\n\nThe first line of a function with a semicolon placed before the entire program code is called a function prototype declaration. The purpose is to tell the compiler what type the function is before it encounters it.\n\n\nArrayDefination\ntype of variables + character + [number of variables]\n\nFor example:\nint a[10];\n\nAn array is a container that, once created, cannot be resized, is internally ordered, and can appear on both sides of an assignment symbol.\nThe index of an array is counted from 0.\nYou can think of it as a sequence in mathematics.\nUseIntegration initialization is easy to use:\nint a[3] = {1,3,5,};int a[13] = {[0]=2,[3]=5,6,7,[9]=0,}; //(C99 only)\n\nIf you don’t know how many cells there are in an array, you can use sizeof(a)/sizeof(a[0]) to represent the number of cells in the array, so that you don’t need to change the number of cells in the array.\nMultidimensional arrayA multidimensional array is actually a multidimensional matrix, and the footer increases accordingly.\nInitialization:\nint a[][5] = { {0,1,2,3,4}, {2,3,4,5,6},}\n\nThe number of columns must be given and the number of rows can be counted by the compiler itself.\nPointerAddressEach variable has an address in the computer where it is stored. The value of a variable can change, but its address is constant. The following code can be used to view the address of a variable.\nint i = 1;printf("%d\\n",&i);\n\n& is the address to access the variable;\n* is the variable on the access address.\nDefinationA pointer is a variable, but it cannot be used independently. It must point to a variable. In this case, the value of the pointer variable is the address of the variable to which it points.\nUseint *p = &i;\n\nIn this case, p is a pointer to the address of variable i. So the value of p is the address of i, and the value of i can be accessed (read and write) by *p.\nThe * at definition is not the same as the * at access, and the first is only used to distinguish whether a pointer variable or a normal variable is being defined.\nHere is an example of using a pointer to complete a call to exchange the values of two variables.\n#include <stdio.h>void exchange(int *a,int *b){ int i = *a; *a = *b; *b = i;}int main(){ int a = 5; int b = 6; exc(&a, &b); printf("a = %d,b = %d\\n",a,b); return 0;}\n\nThis is a clever use of the function, we know that the function cannot input variable parameters, so this code defines the address of the pointer to the variable, the function input pointer variable is also the address of the variable, inside the function by adding a pointer to access the variable, and then achieve the purpose of the function to modify the variable.\n\nIn addition, pointers are often used when a function needs to return multiple values.\n\nArrays are special Pointers#include <stdio.h>int main(){ int a[] = {1,2,3,}; printf("%p\\n",a); return 0;}\n\nThe result of this code is:\n0x7ffcac420c3c\n\nWe can see that the array variable a is itself an address, so when we want to use a pointer to array a, we should write int *p = a, without &. But the array unit is variable, therefore int *p = &a[0], at the same time, a == &a[0],&a[x] == &a[0] + 4x = a + 4x(when a is integer).\nAn array is a pointer to a constant and therefore cannot be assigned.\nPointer to a constant (const)int i;int const *p = &i; // 1int *const p = &i; // 2\n\nFor the above code, you can think of the following code:\nint i;int const (*p) = &i; // 1int *(const p) = &i; // 2\n\n1 indicates that the variable at the address pointed to by the pointer p cannot be modified by the pointer.\n2 indicates that the address (variable’s address certainly) pointed to by p cannot be changed.\n\nThe first whole to the right of const cannot be modified\n\nconst int a[] = {1,2,3,};\n\nThe above code indicates that each cell is const, so it can be used to protect an array when a function argument is entered.\nAddress of a pointerint a[];int *p = a;\n\n*p = a = a[0],\n*(p+1) = a[1],\n*(p+2) = a[2],\n……,\n*(p+n) = a[n].\nAllocating Memory SpaceThe malloc function applies space in bytes from memory, returns void *, converts the desired type, and finally frees the memory. Format, such as:\nint a[n] = (int *)malloc(n * sizeof(int));\n\nIf the application fails, 0 or NULL is returned.\nWhen you no longer use the requested memory space, you should use the free function to free the memory space:\nfree(a[n]);\n\nStringOverviewChar word[] = {'H','D','e','!'};\n\nSuch an array is an array of characters, but it is not a string, because it cannot be evaluated as a string.\nChar word[] = {'H','D','e','!','\\0'};\n\nFollowed by \\0, then word is a string.\n0 = '\\0' != '0'\n0 marks the end of the string, but this 0 is not part of the string.\nStrings exist as Arrays and are accessed as arrays or Pointers, but more often as Pointers.\nstring.h has a number of functions that handle strings.\nString variables:\nchar *str = "hello";char word[] = "hello";char line[10] = "hello";\n\n\n“hello”\n\nThe compiler will turn this into an array of characters somewhere, and the length of the array is 6, because the compiler will put a 0 after it to make it a string.\nLiterals of strings can be used to initialize character arrays.\n#include "stdio.h"int main(){ int i = 0; char *s = "hello world";// s[0] = 'B'; char *s2= "hello world"; char s3[] = {"hello world"};// s3[0] = 'b'; printf("&i = %p\\n", &i); printf("s = %p\\n", s); printf("s2 = %p\\n", s2); printf("Here is s[0] = %c\\n", s[0]); printf("Here is s3[0] = %c\\n",s3[0]); return 0;}\n\nThe above code runs as follows:\n&i = 0x7fffa827bcf4s = 0x55c7d8f64004s2 = 0x55c7d8f64004Here is s[0] = hHere is s3[0] = h\n\nYou can see that the local variable i is far from where the pointer s is pointing. The address of the variable i is very far back, and the pointer is very far forward. Near the front are important parts of the computer that are not allowed to be modified, such as plus s[0] = 'B' ‘, and the result is:\n1869 segmentation fault ./a.out\n\nThe program attempted to reassign the initialized string s. The error “segmentation fault“ was reported, meaning that the program was attempting to rewrite the value at 0x55c7d8f64004, which posed a threat to the computer and was not allowed.\nIn fact, for char *s = "hello world"; pointer s is initialized to point to a string constant, which should actually be const char *s = "hello world";, but for historical reasons, compilers accept writing without const, and try to modify the string to which s refers, with serious consequences.\ns3 is an array, and the strings inside are local variables that can be modified, plus S3[0] = 'b':\n&i = 0x7fff28d5dd64s = 0x559da8ac6004s2 = 0x559da8ac6004Here is s[0] = hHere is s3[0] = b\n\nThere are two ways to define a string: pointer or array.\nArrays know the address of strings, Pointers don’t.\nA char * or int * is not necessarily a string. It is meant to be a pointer to a character or an array of characters.\n A char * or int * is a string only if the array of characters to which the pointer points has a zero at the end.\nchar *t = "title";char *s;s = t;\n\nFor the above code, we have two Pointers, t and s. First, t points to the string “title”, and then we assign a value to s. The result is that s also points to the same string, instead of creating a new string.\nInput and output of stringFor printf and scanf, you can use %s to input and output strings.\nEach %s in scanf is read until a SPACE or ENTER, which is not safe because you do not know exactly how many characters to read, therefore, the following code is used:\nchar s[8];scanf("%7s",s);\n\nArray of stringschar a[][10];char *a[];\n\nThe first line refers to a as a two-dimensional array, and the second line refers to a as a pointer array. Each unit in the array is a pointer to a string.\nEach element of the character array holds one character, plus the 0 at the end. An array of length n can hold n-1 characters.\nMultiple loops are required to input and output all elements of multiple dimensions, whether string arrays or integer arrays.\nAn array is a matrix that can be used to store variables or character variables. All input and output need to be looped, but there are two types of input and output for character arrays.\nInput and output single characters in format %c#include <stdio.h>int main(){ int x,i,j; char a[][20] = { "", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", }; printf("Please input the month:\\n"); scanf("%d",&x); if (x > 0 && x < 8) { for (i = x ; i < x + 1; i ++) { for (j = 0; j < 20; j ++) { printf("%c",a[i][j]); } } } else printf("Error"); printf("\\n"); return 0;}\n\nInput and output whole array with format %s#include <stdio.h>int main(){ int x,i,j; char a[][20] = { "", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", }; printf("Please input the month:\\n"); scanf("%d",&x); if (x > 0 && x < 8) { printf("%s",a[x]); } else printf("Error"); printf("\\n"); return 0;}\n\n\nNote that input characters with %s that encounter a SPACE, RNTER, and TAB end the string input, so C provides the input function gets() and the output function puts() that are best for strings.\n\ngets(char *s[]) function is to enter a string from the keyboard that can contain Spaces and end with a ENTER newline character.\nputs(char *s[]) or puts(string s)function prints a string from the character array to the screen and converts the end-of-string flag to a newline character.\nIn addition, when %s prints a string, it keeps one dimension, and the compiler automatically inputs or outputs all strings in that dimension. Gets is the same as puts.\nInput and output of character dataPutchar(parameter)Paremeters can be numerical values, character constants, character variables, and arithmetic or character expressions, but the final output is a character.\ngetchar()Type a character from the keyboard.\nString functionstrlen#include<stdio.h>#include <string.h>int main(int argc, char const *argv[]){ char line[] = "hello"; printf("%lu\\n", strlen(line)); printf("%lu\\n", sizeof(line)); return 0;}\n\nThe running result is:\n56\n\nSo strlen is string Length, which returns the length of the string.\nstrcmpThe function is to compare the size of two strings, and the result of the comparison is expressed by the value returned. 0 means they are equal, 1 means the former greater, and -1 means the latter greater.\nstrcpyIt means string copy,the format is:\nchar *strcpy(char *restrict dst, const *restrict src);\n\nIts function is to copy the src string to dst.restrict means that src and dst cannot overlap.The source is in the back, and the copying destination is in the front.Return dst so that the function itself can be evaluated.General usage:\nchar *dst = (char)malloc(strlen(src)+1);strcpy (dst,src)\n\nstrcatThe function is to link one string to another string.\n\nAnother version:\nchar *strncpy(char *restrict dst, const *restrict src,size_t n);char *strncat(char *restrict s1, const *restrict s2,size_t n);int strncmp(const char *s1, const char *s2, size_t n);\n\nThe first two are to limit the length of the copied string, eliminating security issues that are neither out of bounds.\nThe last one is to compare the first n characters.\n\nstrchrTo find a character in a string.\n#include<stdio.h>#include <string.h>#include <stdlib.h>int main(int argc, char const *argv[]){ char s[] = "hello,world!"; char *p = strchr(s,'l'); printf("%s\\n",p); char c = *p; *p = '\\0'; printf("%c\\n",c); char *p3 = (void*)malloc(strlen(s)+1); strcpy(p3, s); printf("%s\\n",p3); free(p3); char *p1 = strchr((p+1), 'l'); char *p2 = strchr((p1+1), 'l'); printf("%s\\n",p1); printf("%s\\n",p2); return 0;}\n\nThe running results are as follows:\nllo,world!lhelo,world!ld!\n\nEnumerationenum type {num_0,num_1,num_2,……,num_n};\n\nYou can use the name in curly braces, where num_0 through num_n represents the constants 0 through n.\nFor instance:\nenum colors {red,yellow,green};// Here,red == 0, yellow == 1, green == 2 \n\nenum type {num_0,num_1,num_2,……,num_n, number of type};\n\nThat’s just right. The last number of type is exactly the number of type. It’s a little trick.\nData structure#include <stdio.h>struct date { int day; int month; int year;};//Structure type Declarationstruct date { int day; int month; int year;} today;//This is another formint main(){ struct date today; today.day = 25; today.month = 3; today.year = 2021; today = (struct date){25,3,2021}; printf("Today is %i-%i-%i.\\n", today.year,today.month,today.day); return 0;}\n\nThis means that you declare a data structure type, and when you use it, you define a variable that contains all the variables in the data structure.\nThe structure members of a data structure do not have to be of the same variable type, and an array can only be of one type.\nData structures can perform structure operations .\nAssigning values to or between structure variables is a one-to-one correspondence; the former requires curly braces.\nThe name of the structure variable is not the address of the structure variable, so you need to define the pointer using &.\nA data structure can be entered as a function parameter, but unlike an array, the entire structure is passed into the function as the value of the parameter, creating a new structure variable inside the function and copying the value of the caller’s structure.\nYou can also return a struct.\nCustom data typesA typedef can give an alias to a data type.\ntypedef long int64_t;typedef struct ADate { int month; int day; int year;} Date;int64_t i = 100000000000;Date d = {9, 1, 2005, };\n\nUnion带参数的宏一定要有括号,结尾不能加分号。\n","categories":["Programming","Language"],"tags":["c"]}] \ No newline at end of file diff --git a/en/tags/C/index.html b/en/tags/C/index.html new file mode 100644 index 000000000..7dd91ba72 --- /dev/null +++ b/en/tags/C/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: C | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     C +
    +
    + +
    + +
    +
    + 2023 + [1] +
    +
      + +
    • + GDB + +
    • + +
    +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/CMake/index.html b/en/tags/CMake/index.html new file mode 100644 index 000000000..a79def524 --- /dev/null +++ b/en/tags/CMake/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: CMake | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     CMake +
    +
    + +
    + +
    +
    + 2023 + [1] +
    + +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/CPP/index.html b/en/tags/CPP/index.html new file mode 100644 index 000000000..639a2ebb8 --- /dev/null +++ b/en/tags/CPP/index.html @@ -0,0 +1,450 @@ + + + + + + + + + + + + Tag: CPP | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     CPP +
    +
    + +
    + +
    +
    + 2023 + [2] +
    + +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/Clangd/index.html b/en/tags/Clangd/index.html new file mode 100644 index 000000000..ac26540e1 --- /dev/null +++ b/en/tags/Clangd/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: Clangd | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Clangd +
    +
    + +
    + +
    +
    + 2023 + [1] +
    + +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/Data/index.html b/en/tags/Data/index.html new file mode 100644 index 000000000..1c035a0b9 --- /dev/null +++ b/en/tags/Data/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: Data | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Data +
    +
    + +
    + +
    +
    + 2023 + [1] +
    + +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/Debug/index.html b/en/tags/Debug/index.html new file mode 100644 index 000000000..34a12c7d2 --- /dev/null +++ b/en/tags/Debug/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: Debug | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Debug +
    +
    + +
    + +
    +
    + 2023 + [1] +
    +
      + +
    • + GDB + +
    • + +
    +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/Linux/index.html b/en/tags/Linux/index.html new file mode 100644 index 000000000..efdd86b9f --- /dev/null +++ b/en/tags/Linux/index.html @@ -0,0 +1,471 @@ + + + + + + + + + + + + Tag: Linux | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Linux +
    +
    + +
    + +
    +
    + 2023 + [5] +
    + +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/Obsidian/index.html b/en/tags/Obsidian/index.html new file mode 100644 index 000000000..e41a8d072 --- /dev/null +++ b/en/tags/Obsidian/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: Obsidian | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Obsidian +
    +
    + +
    + +
    +
    + 2023 + [1] +
    + +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/Protocol/index.html b/en/tags/Protocol/index.html new file mode 100644 index 000000000..d28f7ab01 --- /dev/null +++ b/en/tags/Protocol/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: Protocol | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Protocol +
    +
    + +
    + +
    +
    + 2023 + [1] +
    +
      + +
    • + Ftp + +
    • + +
    +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/SCP/index.html b/en/tags/SCP/index.html new file mode 100644 index 000000000..621e07e6c --- /dev/null +++ b/en/tags/SCP/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: SCP | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     SCP +
    +
    + +
    + +
    +
    + 2023 + [1] +
    + +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/SSH/index.html b/en/tags/SSH/index.html new file mode 100644 index 000000000..c39449384 --- /dev/null +++ b/en/tags/SSH/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: SSH | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     SSH +
    +
    + +
    + +
    +
    + 2023 + [1] +
    + +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/Source/index.html b/en/tags/Source/index.html new file mode 100644 index 000000000..09a98085b --- /dev/null +++ b/en/tags/Source/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: Source | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Source +
    +
    + +
    + +
    +
    + 2023 + [1] +
    + +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/Termux/index.html b/en/tags/Termux/index.html new file mode 100644 index 000000000..4c361179c --- /dev/null +++ b/en/tags/Termux/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: Termux | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Termux +
    +
    + +
    + +
    +
    + 2023 + [1] +
    + +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/VPN/index.html b/en/tags/VPN/index.html new file mode 100644 index 000000000..f42046db0 --- /dev/null +++ b/en/tags/VPN/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: VPN | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     VPN +
    +
    + +
    + +
    +
    + 2023 + [1] +
    + +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/WSL2/index.html b/en/tags/WSL2/index.html new file mode 100644 index 000000000..1ff37d654 --- /dev/null +++ b/en/tags/WSL2/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: WSL2 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     WSL2 +
    +
    + +
    + +
    +
    + 2023 + [1] +
    + +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/Windows/index.html b/en/tags/Windows/index.html new file mode 100644 index 000000000..ffd56ee86 --- /dev/null +++ b/en/tags/Windows/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: Windows | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Windows +
    +
    + +
    + +
    +
    + 2023 + [1] +
    + +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/c/index.html b/en/tags/c/index.html new file mode 100644 index 000000000..250a71340 --- /dev/null +++ b/en/tags/c/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: c | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     c +
    +
    + +
    + +
    +
    + 2022 + [1] +
    + +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/index.html b/en/tags/index.html new file mode 100644 index 000000000..5157de61e --- /dev/null +++ b/en/tags/index.html @@ -0,0 +1,413 @@ + + + + + + + + + + + + Tags | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/x11-forward/index.html b/en/tags/x11-forward/index.html new file mode 100644 index 000000000..c225b7543 --- /dev/null +++ b/en/tags/x11-forward/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: x11-forward | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     x11-forward +
    +
    + +
    + +
    +
    + 2023 + [1] +
    +
      + +
    • + WSL2 + +
    • + +
    +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/en/tags/xpra/index.html b/en/tags/xpra/index.html new file mode 100644 index 000000000..b5748bb7b --- /dev/null +++ b/en/tags/xpra/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Tag: xpra | + + DIONYSEN BLOG + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     xpra +
    +
    + +
    + +
    +
    + 2023 + [1] +
    +
      + +
    • + WSL2 + +
    • + +
    +
    + +
    + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + diff --git a/font/css/brands.min.css b/font/css/brands.min.css new file mode 100644 index 000000000..5a32a9ab0 --- /dev/null +++ b/font/css/brands.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2022 Fonticons, Inc. + */ +:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"} \ No newline at end of file diff --git a/font/css/fontawesome.min.css b/font/css/fontawesome.min.css new file mode 100644 index 000000000..9fb3e4cc3 --- /dev/null +++ b/font/css/fontawesome.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2022 Fonticons, Inc. + */ +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-child-rifle:before{content:"\e4e0"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0} \ No newline at end of file diff --git a/font/css/regular.min.css b/font/css/regular.min.css new file mode 100644 index 000000000..ea44d546a --- /dev/null +++ b/font/css/regular.min.css @@ -0,0 +1,23 @@ +/*! + * Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2022 Fonticons, Inc. + */ +:host, +:root { + --fa-style-family-classic: "Font Awesome 6 Free"; + --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free" +} + +@font-face { + font-family: "Font Awesome 6 Free"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(../webfonts/fa-regular-400.woff2) format("woff2"), url(../webfonts/fa-regular-400.ttf) format("truetype") +} + +.fa-regular, +.far { + font-weight: 400 +} diff --git a/font/css/solid.min.css b/font/css/solid.min.css new file mode 100644 index 000000000..edad4ed28 --- /dev/null +++ b/font/css/solid.min.css @@ -0,0 +1,23 @@ +/*! + * Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2022 Fonticons, Inc. + */ +:host, +:root { + --fa-style-family-classic: "Font Awesome 6 Free"; + --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free" +} + +@font-face { + font-family: "Font Awesome 6 Free"; + font-style: normal; + font-weight: 900; + font-display: block; + src: url(../webfonts/fa-solid-900.woff2) format("woff2"), url(../webfonts/fa-solid-900.ttf) format("truetype") +} + +.fa-solid, +.fas { + font-weight: 900 +} \ No newline at end of file diff --git a/font/webfonts/fa-brands-400.ttf b/font/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..502f3621e7f97d1d94ce05794e47a6c6a56e94e7 GIT binary patch literal 186112 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 literal 0 HcmV?d00001 diff --git a/font/webfonts/fa-solid-900.ttf b/font/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000000000000000000000000000000000000..13c9489771fd4e60ed0ea9303e882f94f640ec6d GIT binary patch literal 397728 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

    i|I718`*rt|GmTIU1 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
    ob`%8gI^rtK!=OYkA-N~JwDH`iz&8WQCv=spLL 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
    #+EkODqv!&>Eb>LGm0 zWP4j{lY85?jPM3b;e<3rcNTiY^U}L{=+&@TI0EDk8CwoPWwS&Um-cABd`t zv+T)^-^@%-W}5!&+d_;C3qM>5&tyNWAC`g(Q7S55WnO4a*tEk~J>x>v%A;l6*g zO^hPfX9VLp1?h#@`HCNoEJYCk1bRwYOTv1rZ_h;6AuGg+G`RQ-t}_D`6zGJbWf0fh zsH%F}gI*=|U<_c#HV1!?7zoaSle`3P**3yx_)W{m^en4~2Us-Kp^c6;__^!LEaUwa zZ00PhX0vK|q<$lnj>GjNW*6X+J9s*Y*3%j16{cO!sMyyBe zGk_aFs|Woy1N-Ppq=;l1k3`WL()U`N0(z>WL;@*l8()@%46sDZ38a*$Wm7OVx`{+0 z4K+s<$O{Vh8IUFtYY?z!lxL3@D1>i@=wYz05rpWL12A=Ucr~~f?07R#HbghL zHsH0f^I;ua8`|&Vc)T3PfnJaEZJ87>B>r?oluv^(3T7RtKUQO3)k^sANp!@mCsU6Tbg2@B1YDb6_aGCM^zr>DENz<;kSphVl%)_fF&&b^a_YW!RW-sDL%N z%*78;g8>e1x7}@PC?{;0*x4Y^5!SvrB8P!_hJ-O94AL-FD1;sYxb?aStrMJKK1ifg zEf;{e6tM{rZ;)`5%wZR`gX1>MTf03FBcWyu;WRfkHALon@eK%*Ff)a#7?p_4{W4R! zMx*}Zq#unk(d%+JgS zr_wVaa}w^=P*M|?T;Q6P8{V4tAydxdVpBh)Ind*rDx|JO4lGt@7>y}} z#0tkj&z32hbAqEJJiQE+DRZ9FztelZLqn~#+i`S+(S}}XYZ`VRt{tB(R}e^{0E4Wg zX?>TN`9cyQ16s`^7EP7?+Gd*j5&BCJtO(6wwVRKOb1uCb317vi)U55zYtEOAXAsk*%<>p(gU zGptpurc1N@8hoodROMRP#g zZ^U9}k_cl;UI4Q&no6FzzU0jHWz?f-Uh)vq1|10&T+IvbE$z)j3c5EuB>O2UNr36j zu(Y)QLb@jH+g%4ZteY%6IXe8uu*|pLGb(-lZkcilm-6T zUD}F16nQzknrL5*B}oOdXlcNbKwgT4#`&R5U&%?3Z|?Y32T=BeisA;5U~$fEZTru+ zAjej0(ECFB-e{e(y$^=g`PUltZ%-PvbUK}xS)I$nUQX=zf0F){2=}#GZ&d(j!HDGZ z(0w$YZ^4eO=(|7?-W&`FocMg;n}A1-yESyC)-sc`?dfc;-11IqFNVP@_&UCeh~sd- zY?O+wWevU|3;P9Z-t-(Gf)E7bD86Zc$A_R*zYF=7|9Rwdk$)!~rL0)4+hDnqXyVeB zUjb3@)=G%Ni;>$FITOYd0rMn8E)EN=ah;YPeboz0QiQ1#A6ji$hFHJbQ-s;}+6<6) z#sJR7!T?dGeb^Wy1rQwk&U0LwZ6ieAb6oEu1Ucegt*js-7s8IiE5<^6roUR5oXjEd z4^bLyCnrV9nM~5A)3K2zWG<0eNPDy*QSJqdms0zCz`P{r4ubvO!Mo+w!S6Ffs#AuO ztKq@hHd-j)JO*!C6)iijz4;|0`sU}lQypZJrm?hSm~JKyS?PJ?pvmMJ;TK-I_=n^~ zNtY5-L=HpPJJ+`EeJm5NLjsX0`kBWp#0)~H?QUwO65{9pRyPzsjX`83Qz+A%pPe`6x9ZheKAHHDP`-7&=&KuEQa@Luf;e>5e8xS!whPpOFc+X4tr8N+5KA?9P; z!I*_ucWJ&3EULu=iE=iv$K}EK@Jogz0Z;mSkO_Pq*3HZGO2jk;l-iQ0h?q;9p;NSE z=1)r`SVREHd5UXmWU~Z>lGkiUjPBZn4Bq4JwKZe>ST#fHB;4-}Cky)ZnR|DRrBwEG zI_mBm+uc2OEX@e-DI9l0N-5k2%mZ#h1Na7Q_sR7*MM;Zfo8$`;tjjxvHeP|F?ACVl zng|czipW6*VX`F(_BWt-JhixxjOtem8R2MhVeynv{8u*%hz%iFl2!Dp=`EW{B3;W> zm`mf|d&VPUzh{g#ZGy(o9yd0fDZsA+obWRM1W3cf8%qRWQ#KY}K)muYhXY*O5nTyJ zhY$r`kAL@j%v15ptF@Z3bNs>WmDT#Ip^b1Fcfn32Y7G7&R9}Sq@pm7JW!3N8)qp!x z?A7(vmF)+Q??7(9`pe8^@p}d%;}6bIOcu7lJz4!>OMBtW3vqEDW93Ggm~k(GZ2ZIE z>BA3zEO)aNo(!SsrU$Q*H2_s$RKQon4G#z}nhu>N$`(#GfW3%EMvWlA6uN1Awt6ra zf>cEFzmg`HSK(|N!fdhq(%>78Jz^HEx?PP1YcF)Rlu7?aYS#7Dks2p$%f5u#OZPFy_g8`J;R!A034U z_wbP-sTr#4!bcDO+j$1U<#IvHM>x>bw$&f&_t;z9)CVWBF7j{5TKa;>YHvq;8KHBr zh|oOvn&tJTF{>}xsZ)ur{#Ju2F1?R!?49?Ii2f?8jOK5up zT{28Vzo!Fd1WD2p3U$r)8Xv%vnt)UP4>jN!t^4?)X)6eu`Z;NNpyeU57f z&0P`_Gzq{{;qnY%g4gLb`67IeaKAUE!)swIwhd;_Zly5m3%miljNh>Avjd*5TX-9+`$^4dl9Fmk1^M6W7`kO zx^O>4L!Yi@3-xfa)C<|_r!TR&Pb*`lC*y?9?adhK)9mrV9-D5t|CTfD-?}Y66nIJN zgh}I#_v?^Q2r)kl&Co^c7VebaO@x}w!WcBMil@HZpcf-zo zHX?5&o!evQ_S{y0??sol!FYlAKI$g|kqFTGNbmF& zt{=`k@G9(@qe_7nInDv``PmH<_Wy~Js!1E+9$PIX9HtU})f zhCoEld_z*aP>kb~fGqLqn(^Vhg~0lNSeRJ4?D^BvzE=*q5tI4|@~fj6-kzC2BtJMQ=(AKeh5t{N<7gt2 zxiy=;ExJcQ`V`{Z19zn}#eC+efZx1o^c8V@U1upGzlq+5A7aa+&VuR=d;obKvH05V z6=1R}tCXML;x}yyl+cl|pefk#yf>`Up`!13`|0%HHC!PuPRoWMdKP&40>GDxLG&3kz-J1E?eFb2JKfnc4jE`r0IBT4Hi-eW@^u z%n;-pQgx&qXfG_bXTH@NzV$}{i@x1;VWUz;vPhdR#g}t36&1}ga9%d5DjA0_#h0^@ zRuYaAmBG~)en;Bn9j<%%h2Nqd;=+4K+bbTzX7~#53;FN|Lkgd>EyN{(0V0@9Oin%e zWYd{;mW0XdHYB=%$U*F!!5@{jIY&^7R6TV^9W_Uvj2{(5M_q(n(sqjh)Dvz znL&}bU_;po0z85|=8qr9AF|ACqBD+2C}yrh%qsG1BwDR5Id0N^vlyi`HM(nhUUPDO zetBsDW;~vE^r?02ovH0Nu>V2f@F7l$_X8_Af%pZ+KIa8;G10 zvlou-%(m+FZO9;_$F>@n0h`Al?6$V+_15gpu|>*J^P7z+4>v^<2Ev%t>uYQEIt=TL z#Lph>lAm&nM$#{&(g@x><=9Uw%^;|HK3{|>GXkp5F8*M$VK}xkRVXqkjt|SP)pK*L znAg}~D9%}R{8YD_jl$V4QO{MYIY{XZJDTlwPaRjY4C=Yj@M5jGbE~K@Jv&m${6Y#*hJd1a@O1#rf>*|`;YtDH6iAMSG$U_AVl%eHDZtZBQi0=~GiLpn zGrM{clMU8$kk*hW6NJU@3yqPvht&j1h68XwxOB4?8 zy&4kH+z+3_RC|J7XL5Z7_N^QiFe4GA*PmgGa{wZ9i`; zEcO>?YGGNehZ&NvQ-zBwDQ6{~nK%`-Z%G&ro@|_&eBG(Wsm5!#Q74hy*vcgS7dFFN z|L4+Fd*13VE*K>*Ec0HRh@FDo?Uv0|C$*BXPaw}wA)UQ%)}Qrn2E9s$3R@VwFl z?)RN!cn2Gm2IA$K@1xQ0GgeL|VF$E5_&S7-*69tNoLoUtvCj7F4Ea!4(M0Ddy$Me;I%&#H{1Yl?{YUYL90F zoOVNz#`#dlAs*Q*eewmA$lBpMG&7mxU5vXJv~yVt?ACC4T9t!$3=hOFFHU%U)4QabI<-O1GR)0TDT91vC(Y+({bC_w3* zb1w9fM)C5qksDUNeEG)JA%MEkmHy~?GiLBSyv6fY9=;qZ3(a%YAYbN0GVmpvOWR}>HqqQ%J($i zS$)OF9`oV6YI%=T1}}*PVO`w3MlGRWDevl89E%Mi3ZA3)!^F@KE!w^TL&N*CYQM>u zgjxr>rrsXtvL@yN;jxz6^Si3>$+!pc^51)dZ^P`^-de*KVum0b?d)cE4ddL#z>*KM zu`+M;xv*ddB8Bk>y8=I5Tg#X*OHeWkYENimit>25SkgOOJJK!3OLZDTzTz*yl%}O~ z+>GmaM)dQRJ^0h3z4RAdBk5${jT~^X9z~Q(%Xd%$Y+K3FEOZ=hwQ+Z`hIB&zOQz0~>rvJ374UD`Jsm;pxbauU~e?bd}_tzJQF#g(<*LMUp^ z6bi-V>3BSyovaQ10ZEx>5Jt2X^L>!u3zRfhYgG@!K))smo4`jSg6y{Vu+h>1t0o9h zabyQ2orHtYi5H6)Fy20&i zg0DZaBU*(A!=vzme*>eLYL6=|wa{BplzANKo^~z4$YUyzC4e85IQ26$9@q(~$%w!B zBQ6Y$eQ`>tN)<85#>WUKdW$(>950ujB#rjEp%BSEG=AW!@EG}RnHPY4Eq!|g_HHgbgKA(lYj5@_f5aSJMX<=`ukM>-Zj&EYISwBc6ZT&Bil&}eP6sg zJ~6RXE^kdt#P2S`PSHAv!LW+=R8jFM&s@8AY4!Zvz4y+YN2q@-YrTp!Z~*uU|9Nth zC0}L0s^|)Dc8#+Yq@g4&(`Y5hy>4Z%-^lW#mb9rmIz?*o5>^+T*^jWu3E_i zjKu1Q(rMy-Vu`3@;f>NUxcR`E2H~O+OFZf#kW>nGZ-6~`8^jdH%fJ=TCVtOl8&eM+ zKW+{FB!<^N?o&kDml{G;)YJD$g7Re+v!UHoe|Z>oO|q zkGFD7lcUGp?6rh%&^!}8CgBCnSqgnF)<^i`D#tqK?35n_^q4*Pzl!+5M`caw&podj zQ`x)Q)6-?duy&kOr#@ww3yZy8y9TjCB31Ot#k=RtST~)X8$3%mL`W6x)vu@N&pCg0 zvFsHYDaEL@d%dN3)0(PxQjpJ?UU_=DeRo#Hx}G;T_{{jtY((%K=#Gf`2<)hVA!q|F z>q7t+-g-;ENHT-T8qz@r-#Xn|zhFc!Awf#?^;-0942S!b4>N+zFLI%93kb{x=jiD&;31dC8zeyUSi?ON&qT&#D@ka=NG2;5CiUbu1m$B4EZHabKg7VSb zIukHPPQ#es?wO&Og-_$SB5=r&p%Bb5-o39nb6{y0PasIJ4I2_z7V7c_ zIwlHPlNpPDm;*WI!5C}TdOJe^0mii|%`UTE)V$#n&Xl)IMj zh-;b(AJGghAmn(i?WW4U_hG&;B$dNA_L0+I_$4>I@Y17w1CTFk=TQB<`Yb&0ZbxKC zGC3G1^e13EM3fvG4m3?nt@aKy(bPo~i*f?uDu+ym<$*wglcHFPsFjs_o`Tj+Wm+>6 z6R9;xv<r7XQ|QU0hYA1-gFRi)A)8>v zMx|9-^#_07x#gA%*=%!rd3o~6;J0txQxl);BgvCcU{^v7+7)&pfc>o#YES*lyG|hL zyz#ELr6wm=n)_#ugX?L^TG$Uc>3w$GZgc-+{V9em694X$f;RK&3DfAzortZ^&Ze4PzJa9Bp7QP;9Aa5W6e;WnR{_NP|HjXs znCrkSpt1I@dFNe}MC8bj&m%R2&~t0i6wvMY=G6*vp2C zDtmD4J)`^S+6=*wqhMtVTKJk1c8;{l=0l^Aeh4l0zIvqk*uBy}3VzW8^&^Pwp<{ru zf5WW`N52|w2Z5CB>8inrg)Y+D$oM1p$o|a;P6X`8 zo_39Byv?3ly9ND80Va00*!CLxyd8&K?Je0>bJ#j6a!qO7)V}oTEs;ARef%+5RRNvN zdBYVH9oZjR>>HqjAZT2G5IUm@ZC^qFOF&={{zqFvt~cH<+C6E8s=uHWNJof0#@Y%G zH?M^AAlx6*pOW@dNO0dkzLI9V3F`>Dqquo|9eXkRMJ^crJrmv*?w`ydg}s5?1-yMC zS*=b@RjbJc??$M10}0oHtT$QR)b-JL22bzf5xDx%jA=px{YtP%b5b39Sx@dI6#SrcXyL+JVYsyTzsh2hVeBN)qEKO&c8mvY4bQ@s?9gY`ySxwuX zfF|`0j1?&-kb^?rhI^svHBpcCzD+4P_ULUIH|k6skdb$M^0O!^+5e~K?WNO?WM`JT zbLr&kyihiT7f{*PrJX`9dr_)f+{V(R^YZq^kDtHg{4M{28`8IXo_8^uD>&)bWkE9q zQ#cm$UgxCdx=S;ei@M4-?}dJ6`{Lje!~28pIs|>oI48FXWEZ@`xd+mN5>o-{n0g>M zW;bmlfe1BD!4wgJKPs{cMPpkf%v>l6#&71W)Kd}64wYg2#!yN2{g2nj-+topq+z7n z^GwT{wjqZ7*+5sudxrWmF^dD%87k|BO1#fMjtClh5P3)aaR_SdG*h$Aw-J^z`A#lz zeSM_h(|8U(6wEEqL~hP4Pz;)V78#Jx4jw;~^s&gHf#Pm>sQSNB_3!pc66k0QJQBpj zRk5p=#@K;6MD6O}--I-Q7V$qU)Ayzu?bjH*?b;wz$rILso!tQ&-wJpA~M~G6= zsJSOH;LSy&Fhdp)>%OB)gX4^mM@OmPLAj0YEyXmj}#H;VPt2D9E zNoBpvi*9qAxSfMMsZjhQH~+8W9`EvCkkCSB*Lu|;fR8ni$mKxl+$pW*5_a0f6btEF zOjY#L94vj`h@LviOM@N>P>fM^fmkPCMU;2e)*5E9JvASTCQ1eY z5tmhQ5O_7JuQHyII?&|@WG0&U$M%A{xH1pzCQ8e$^hq510@*(Vu`yFc0wp{R#>R%1&A=Eo8ed(d?XoD)yH(4ob_v4w zk}!y(Cx#s_BC?mFS2nDs;2WagF9!Dzxm2JbgNmA&G=zHcP2;z~p!nz=V1Tc=!w{H# zh!}W>z~lG9A^|c-3_U=vKxhqpY1=FqOuM-Yt2x7^Bgl*Xyf``ywH#ry6mLgMWF0uO zGO(gJ%4hy(a4dFZp;3MpBQOK-CeNR1dA4nOG50|`Ugz>ha=XESmoC!KwrIs+iV!oc z6lC!$@kXY?kcj6#j#&AIy=hF|uV%)f3!#nrJgcn7E&t_gpU*kgtfwJ8xGQ6|qJ%Wo z`>b@4#=j*?kQqG1E1R8M$*}6{e8It|;g5NjV=d*T-1^`s2*X;mB@PSm-5uajAByaO zUij|F_Y?1-$0YoC30h(F9et1VauTn8t`_u^AsqrlkJl%_%O^LjJpl-=cLmI{uYKX#{z8D`foRJ ziZ+p6i!Cm+$KbFwXi)>O#U_N-C3=7a`W%td?j8% zlu?R*5E>djEXhTGOA~b4J7Fr`9Vn`eyTj={a>h`Rs~k4|eM#@e%v&B0OVs{BfA3fR z1Wqzo6PJKWUdw>Sp(LwX>{Wd*dVJ>AOCC5EX7xRnD{f9ALt^yxM`yh-2W-3?KD-=0 zYFHAXU-eb+2?x*x^#D>B}q76vEj2PSurSRMre;U|O8 z#AIk-Y*YbcB%B-zmd65^7b40x4z7mNJDL(bcqg~XtQy>iQ;L9k(P%B!#EdYZ!QF>| zg@wS`JJJWfnI#(L4|_J^v!v`FzF^0y-m`EzXCjHORXZ*i&M5gTnu0rfuzerV?;(oS zMT{V&48~sA&<0u}*3M*`djn!Quff|?12lnMZ58qXkHa?0dL;F zB?QY2BLGF6Fn^9;qP$&3Ltt^I@xVdhr*Rk@x;)*xH4!@$itn2PTj{G2g^eSABC}%U z;9O+p%zhm5ymn3h;duD$XNq6L9UFGWP3RzC=5av%;ocO5q+Y#dHFkaBwWDHjCLlNQ zzF1;wZ+a#&H@I>|1{BRFtkwF!?&kKzLx&a@`q!+*0n+`4v+K`(*1uCpFeT?4ob`7w zgr=b^D2ksIS7WE|K&o$e!_LK10Rh`M4RI&y<->?Kxf-YT0C!xz3vbJ^SJHzw1BTo) zM*0uVCnRxcgMJz0XD%_e2ONhnYAEW%J2J{&VE6dzXGZtHRHEw4 z{po8r%%8sG?p0Uka@fnbcK5F9hS$cV>b)kHTdUUX9=Ue$aVsA*idT}Kwq?ux#Ezl3 zHtEZTHz9xep2`074)Gx!9|^DAzI{~f9v$7CUIYJZc<0FO-D)(KTeY|^F}io}s2bU{ zX+>fv(U*3xxpG8}?%TH~(z}x}!IR9#vOPJDvtz1T&wDD;gntcyGg*epB$u{1IEU~m;KeLOcNF);p(xwX(9%t!0!u+WtDJG~MsxhzjNtRRz zII&LRXWYWbvY&AaV9?~dvo_6oWY{5$$sxYXRAP-Vnig;zK>DI*_^h)=M-`)8r0Qi! zI?~Lm(b2Qc8b**>GC4ea4wc*%2u^mFoijX)Xf`XK*oKN>UtiBAcvM74^h8po|eCzW$||ZjXg_-y8YG`UeVOp^7piy!@6E}X$zPi z_Q&zMUI+PcF74}qzlr)rOJfOE$*X)|*~VpvNc?~%kS3Cb+Gm-RWZrNx3tVP%uz=ez z=BC&RD3EM{+t2ZU9|YgG0ZhV68XzY`?@92wlknQF;rU{wNGUN+4X=S`vWo$>W-qwy zZNYY9Vwt2nurAZGxBs`cHn~wr4uJm!?~KCuK+E5Q*M{69dp5gtt=VOF&#X&K=3PxH z^^5!qCs`-R0PDp0J&5iar9iAe@r4-=vjqYl|E!wIfu;r`X- zNNCbFR0zoxPGASz8ZRG~nasL@^vKYf zR49DmaDO_zCKTC;UCWu?zALt^$zI+`w-BH-AHCfIUOaIi5g*vIG2WlpxH`2j-oIfj z;wj^B+r;&nb!)fB6TOKu@xGj76t@4`4WI4Q2bdP9&EuV=OtZIRz1{}D!ug2pXxZO( z;aST?9h5L^Lb$kj&p|OfI)LL}FQp9M+aEpk2ExEIMNh7#H-cf5r80KgzBAf?s>amdXDTq@7y!Eohh868;fG67yZ$p zV2{Q<+I0cZ9IzG%&*7C~Z8mKc`2uhi~=rg>u_ zgIepE;rRKnd&S|=7n%N%-Pc~bd!!%HpOJ8U@#vKSHU8cbCE}Wc61=p9#Okp?b}n)% z1(W*(>XIB}zIqDnD3#c>X~PC7H*DCnDFJVPI5H8mhacEvi%f41S`5CqZYp5DDU1(X z+=y+Uce@XzE<{#0Ee`!Oqvi3Pv7pN^|Kk?tgFeJW#u-BB$7z}7d_M-c9{BO zIZRuN?nZ9m1@+8NsFy)+e8(L@Ce&+I3)lmGoJRAw{iNajb`uA4>Edyb_pPHXIIiz~UT4)C(%n_pvY2Z@-L3VO`1Y1xoj1c`vNByXX{ly#AwYgC z&$T-1X6ge+7y~Ki(2p%7^0$z3&7ZL9u~Gr&VFxG90bve@j)3VAya?5XR-$-Af5Ie1 ze7lI4cp?-F^CoG4kt~dZ}H9tZYA2dY{k8mxh-35XzzCcN7JUX&&Fp2~3U3?^SEbFa`!{h&E_H?h z0J8rv8lz6oMJ^33D|sDWMQ3pKqCJ;wCytE}pJJ)e|Iv~NIeKHbS5rW8%AzpbP0_Pmwm>cWWDjmkD$1<6sD&g=- zL{2y{xYN0ch(!A|&c?(+Cw-B)n7A-PhbrS8s~2Xq?%OcD|G@nN7s>q(>>u9H2hB!J z^hw!=i1p|iz{5^l3k)k zWxGe&$Cq}((!UzMWxZsWm4375hz0e|9kfD84AHI6WX!|0U*#kLR+xWZ9kB?Jr-8t5k8ge zB#^Ag68p17UrVk@Cf8s`Lv;TdgLm<+K7c9GYwn_C^?}v+mrSnSjvw3yzrt5?KR(ds z)-+lYZE-R%Xj^g{#P0}BE*%NuUnnxtl^($#T<1R*q23C>N}YUHL)$-%^+Xsf0~Q$S zz_y6+)+1PaZ2jF_!al9VS|FX;@2S9P)?JL} zWlVtQe^t+xp0mM|=tQU%b798~&omZTXg!D<&H!?Zs3B6xDelm&CQ^F9d52$d1m_4$ z*jWm86HSC7{f`#Ma0)>(^Vdu=AqP%ILx;%8yM-A27V^g)3Ptf0Y5cIwa&RcxvBfuL z68Mu5SB{4cQN=BfC4T+bE%ft46n_Lv;~qc1C1e`<^#A_(+rsOA@%U^tvD_TL>ke3& z;XZs26te}o25iF&W9DS;Ko_+DB|SBEIMAWpa6}UK!v0RU>CZtW8wtsiMHl`f>N_F& zCt|S)oSsVOd~V!?eVo4feWLfuc>Kx(8|gHX#NxwfL(0aD2QE($LrURa2e$PhhJ|_wIAo>g80jL*_Ci@Ehh=dZ;+%;GvR1{>R~=^wgPAVDMX@v7 zKSYM+lBRI|J*cxhW^MJ^37pz=9N2AekY?DfFuG$+NOGnp?uBW%vA%AM=ky8P!1mFMdI?VyaX`aG5KLHCj z(vyU>Miv52)51#>@PT(Z@4;)WkjE0o;4T5E*W<7@`~geFpFpE-tE9BKgRhPsJBELV zGH3xFcInbjdZ0-M&p_u&j=`^d9nJ@MXwOr7UW&IWf4t`#J-_Jr7Y=zpO^k~3#MNS2 zEOhR~BvYB7MMP390U6WFN(Km92uO&3m04CNy{yjic6g&qS3Aq=+@pIfyZfePcLx@? zq+iSHEbn`Jr)n@hW?4Iov~=}id7b6$WGyY)&xy{=-K9_7-G$Eb|G$<3nP^)KxRA|t zU+a39u1t5md)!9WE=T)0-kDkAAnClsG1IN?^HD9WT=%tOoj(gs<*;R4m%4w|ee15L z>aN&z=|tzfx~_C(IAXl@xLudJGT<+Wv-J6keYe3Ch|z8KJg(Sdw;Xf?#Gsw3k;iQqfFyXz{lG(3Q2|(7=0b(s7(m>0ozwEZauUgEpVjj~Aou zz`@spo2EDH!XDWZDFBnby{T+ktb0;);Kq^gz=R!|OIKB?8EWqM`Xr#6z*k2a2Vu>4 zZs-PE$buq5B87WDVgO0YAUF})AAI zksRB1-YV=|Ct&~H8#Y9ZE$?j?cg`I|@PGe7XZwq%y5`jMoCY6c7I^DM#AaNHbK4(* z-f?Jh+f_Vf&3MvyNf%;WcnEeRbST&+q$07IPgc9#3%>`p{}Kgi6J7$#5v)WCWV(VN z5ZJK^;T#z}fHpIBkgR$s>MKlcjKK?!8}=~l-1F0NQL@Mbmgjj{n6wI-gKdR{Wl0CcOp9E zE)=@FLcM7JzEvx6$V(`-Gb!v=v0e>l56Od**kf=K=dbL9U3{bO9XO8XUEiWW2B8>9 z;+JjtAP22e#5uwsmdjYb*^{O<>pL!OG$OZRH%|e;VziYIP0;w=WK6ppVZS|{ifk}4 z-=(O)1L<%q79Ni{q25Cy$CDV~i6?cg#>L-HAbSk!+YV4`T=}g(;8g6VS^j||Rmp*4 zKTguvo(k^EiP=~T?@5mwisM)SI4q9GIynen9ADUE$Ae$l$PYMif>vklGD*zSzd$yD zjc1@aT92J{=Q5s(7qhp2iTK`J zcC_qgmqK~>8NwIZW3~?(*G<^f0sqW@rLLCQ*}+Cys{8+;?7xkh9gJ+(*Tg*-z5h;a zvH#P!S>6?9TDu5%2u6)h5F=hgesOxe7B923E#dQi_OMCipL)vTkfbH)s~v~;4eSRG z^vRG=z|Ljb=@}jzI`N-4Su}YP9Rn)H%X7qcI;BuX$(!&}EWUtGk=_;xW8*gMh!`E9 z&3Ckg4==#V{s)EzhB*;EfnSez4xc|Gucu>zZ2SF@{Sn@3fg7B=b|Y^N#2waQbC%El z+hd5mp&8m*ZF%-?gfqd-M?;Zrad89+v;k5a%N)c2(>^;N2<2ZuTm%zf4b%`R%Iz&j z9Js)80r5@$K_1vqq!C*>kd(hEcsCik8wzcsca{00H!vCj%SVU+yjmwZhH)vo<6#V< zrzTpX=8x;^c~7VcjV_ZdedfgdH4eU5GHb(h%2 zF|H>eMoDk#8Ha8=fxXBS+v~q;iB*2k0;%6aHpGI8NZDOaWn^vHf?rY1ie0K_J29f_E>MQ=Tc__yFV}P<#D>MDr@t)njV{B~4 z_AK7x*PmGlJ`#%ce`(|1z4y7#-m&4$*<>oIhjwf_`|KNUJp1g8JBKt1vYW**3AM(N zTet4ny9q%$IHPgX-aT8lO1up;F29(;>r(LA6Ks!(!ySCajxB5HeJN|V>^z9m4dZJw zt-c-OzER{Z9u8}_*AHPw5A0vCQGceuO1ETavF{f2VpcnKm?@YJm{0LVo$AYcGm9e# z!)Nav*@ms8a_8xz=ZX}-2^?s+cKwDvdD<GG*|ABu7Nj z$J4@t{rX`#l3B0I$GdH#D;8g}l;V$53-o_{S%Ur0eysN@wqJpsSwFK6pasi-I*TJ3 zmUVt$sdH;+IsAy>yz5`!R@C^>w;_@e#H((o{AQyem0)1zfx~sZG z1K2+BoiM3s73i)Z2+MKUk8+>aLSD@?WP2 ze@SY*@dz=FemaR)3fcZ;?bpZ&nxwn^pce+q!HcMg7xtsA{u={O2MJ_Rh_S%``V$=M(d(HhL!XU&4>{V7cGdKf>JrE#D^At89mRy*c@O$40|z6DE7 zTIMJ0Fb2dxcRKa^3GTN2F-LM!n|{+c{1$^5G(_JRmO+su#Ebu|LWH?Z3!H;D>Zj>+ z^QZf11^(puY28uBAcE_oez^lK_CP-!#Y%gQpN^q*FdV*93f{^~{B)YzS3N>UaBZ&` z21lf{=s8_Hz)#DbsHC@iQMu|lTYSe)>yA36rzjunmpeT>#hd+fwC7qGv>5~E`-@+m z>e(zF@2At${!F7$^KeqZRJGE`&%0iA&fQh0&Yf4SE!0cXGmY%l!nW)MxR|}Sz1o@1 z?#o_Kcirrj)pDtL7Z<3=|JgpOn7g}*wuRijU8nCF;W}5%xY>Dka*LOpt9p%Wty*iA z^Yv`0P_1M=w~@_PirGfBTAnR6c3tDvy%Ngz?;qJUGP393$iCCZvRk_z=di7EMwaie z4Pi|U{Hhq-)8ynmTmaH z0N3c3w8gOVw|7^b#Zgc6t2)|uk-8GUFQeV!-L};Ii=f@^yX|YWNUul!-?iBJ3^_dA zE|B#uD1_~Hu0o&bS*d@M2u<;jp2J-{?spBT8k}Thj9wjAN<3;6q&(E8k;!9(iui7z zCOz9M>NIeVYjC}eS|yZH{r&hm!uKA*rjLV2@58f<;mX$kFgl03S~&x?+kHTAfUgfi z9()ID_b&dJIV?~_QVR`TB+-+^UK>Z?cta7v>C!QQy#XQ#*IG)Xfy)hxK7k#^Vn7Uv zA+bWN#IDrUVhvu-xQ^ZciXh|-Vpwbxo5W^*ZPzxjUF;A$MNaGz(7+H8aJtwd_TqI{ z`^0{6KpYfjz_2(AXAPW<_wbF2dy8`sGjP7RkGMcwh#-uM#U1M;)&u( z;>qGE;;G`ec$#>+c!qeUc$Rp!c#e3kc%FE^c!7AKco9wqdI|9Lmx`B(my1`3SBh7O zSBuw(*NWGP*NZoZH;OljH)C(dTf|$%+r-<&JH$K1yTrT2d&GOi`^5Xj2gC;vOnOp$ zSbRi$RD4W)Tzo=&QhZ8$T6{))R(wu;UVK4(QQR)RB)%-ZBEBlVCcZAdA-*ZTCB7}b zBfcxXC%!L!AWn%NiXVv|i=T*}il2#}i#xz@YEj&YZ5YsArII)=Lpm}f!#LL>Dq}J(6FB#(SEdlJ-6u1$ zUk=DYIV4xem2#C_jf20}%60NInU(A1201J@%1v^!+#u7Y zy4)l8$}zc5?w1GTL3xHeQ=TR7CC`@U$Z>gZd9FN9o-gksFOV0?i{!=f5_ze-Ox{=C zPhO7G+^&%KmsiTGoN!~1H zWm(S2imb|-yhYZfCmXUU56gLZL@vmq^1<>U@}cr!^5OEBe1v?Ye3X2&e2jdoe4M;h zK3+aSK2bhNK3P6RK2;u*X8d8|9nio8@itE%L4MZSw8%9rB&>UGm-XJ@UQsee(VC z1M-9NL-M5ju>6SpsQj4xxcr3tr2LfpwET?xto)q(y!?XvqP$&xNq$*=MSfL&O@3W| zLw-|!OMY8^M}Aj+PkvwiK%SC6ls}R`mOqg{l|Pd|mv_it$Y07|$zRLg$luD}$=}OA z$Un+I$v?}#$iK?J$-m2g$bZUz$$!iLk&E(9)uV*MX(l-R!YDxgDy(plyNanePH#`D zUX@a5)u%G5Uk#{1HKbOkm1>n*t=1^)09U7}tXi)&sA08H!H!T{)K;|(r_}FIJ5^5Y zQo9xQbF0(U9<^7EseNj{I-m}!Gt`;tEOjq+wmL_Rt9z?+)p_cCbsu$sx=>xDE>@SQ zOVwrSzUqGJa&<^uq3*A)R9C61)ivq?>RNT3x?bI&Zd4CcH>n4y36)oqs-TL>Ra0tO z&8U*PSdb*p;3dV+eQdXjpwdWw3gIfwNH>o$P+tgdsTh-gt+toYNJJq|?yVZNt zd)52Y`_%{32i1qvN%dj%5%p2^G4*lv3H3?!DfMaf8TDE9IrVw<1@%RByZVy)vigep zs`{Gxy84Ftruvrpw)&3xuKJ$(zWRYWrGBV>q<*Y^qJFA=rhcyOP`^;WRKHTcR=-id zRlifeSAS4{RDV)`R)0}{Rew`|SN~A|RR2={R{x_G)t$OW3oUW@31AlO=#UQUh>q%* zj_ZU@>Rz4FY2BwYx?d0IK|Q2b=#_evUai;YwR)XCO=tCby+IG_je3*btheZ`dYj&^ zcj%our+4YydPI-v)Ab&`SC8p^dcQuP59%}Ynffe!FMYN?M~~}!>vQ#a`h0yKeSyAE zU!*VAm*`9NW%|DQe)@8KNME7vudmcs>8tfM`T_b{eVx8u-=J^Q57am52k8l&*OR)S zi`vywdRouulD=8b>aw2G696Z==x^$8>2K@r=F?_w=u`TK`bYZ5`X~CQ`e*v*`VRdI{Y(8T z{cHUj{agJz{d@ff{YU*L{b&6b{a5`r{dfHj{ZIWb{crt0dQsnLdW{=HBL9bDlZh z+{avCE;JXJi_InGQgfNPueqPO+#E7jnERV6%~j@VbB%d`xz=1~t~WQB8_fgFP3A#n z!sN}QDVU;h&6JroGp1y2HnXN|=1j#@P0ie5>c%q-(=><8yg6bP%u(}T^APh;^Dy&p zbId%#JkmVMJlZ_QJk~tU+-e?go?xD6o@AbEo?@PAj+>{Mr<-S(XPRf3XPf7k=bGo4 z=bIOp7n&ED7n_%u6XvDnW#;AP73P)ZRp!;^HRiSEb>{Wv4d#vJP3Fz!HuDzqR`WLV zcJmJNPV+AFZu1`VUh_Wle)9qILGvMV(tOx_#C+6z%zWH@!hF(v%6!^<#(dU%&V1f{ z!F7-nID=TnID^PS#oP zY;cD0%C1e$W@n4D)!F83cXl{Cot(4F+3k!tqt5Bh9%rvJ=InF!I|rPD&Kb^`&RNdA zoU@&CoN?#g&biKc&iT%LoC}-_or|1{olBfcoy(m2I`?xfcMdsMIQMt1bgpu)cCK+A z;9Tom=UngH;N0ju(7DNZkTc=rok^$Q6dl)@a;BY`n0us9&d=o=u#ZABd2gnXpN{qT>FV*^I zs!h+$6=q6v6?Y*wU#b+V^Kn~950)oHuW7ykKZ1Zluh#E!or`nvJ8JOwL+g~NyrE__2wzr)< zT&g#{zU~3R;MD!$DCcX9YAsf7R;Ili*G<&iDm@L4iWjSu^A-Qm;BFwqh|>pti(9x}%Fbe=?qV8fE|Z-F&Dwy?Hfy=5dUY;0SXzzNzFnwT@-R~ikzy6pM>HOG%kJSkhB`A< zD%1KZlk)eD*i^Y%_q&&v0?pF(a@BK-(W!dAQm|c^Zsw7({ZZ4+N|H$v7103< zMAQ-$%~u*Ltdy_h>dhK(7{2{%3Gyf=1vfHR zLTBk`vAHTO-AUxVXeD355OcG&e5G0k&xzGsAT_oyg0vlmu%*^!Erus4O#6=ax$qH`b^(3%Fk$_)!`RV7BDVV0!&Kn8W#IxsjQt)jXGJ2hxk}h+Y+f?o9?yJu3lQ#IV|CPp(uOc(3K{2OsU%Y$Lbd#YM3 zg7+P9J+R!uEEs?@SuYi*U63Pv1w>+Jy1T4%rn|4$nfA+Q^5TA)@9a!srMe9ba`aYD zHcM8x`qXHrje9$=^cp|JvR`yO#iBO_kj+ryIT&l6u z$gwN{KgfV*H=!KNROd-%@{omruh*I&>qMbBiMayv!w?n++{$6MT&;CaQ^Y+|1KUSa zX3DMC7lt}ld&g*{JIk3j^>>y8&lBT9e?+EAAT9K^;?^Tm#A2sP6)%c$1+PC`%9mr) zNcs<*=|~48n4vX_rB2G3=gZeL>r;V}MVSbF6q-|0Ud&3TNm|$$n+_`Sc(Q`#wKOz4 zv}v$(64REyk)ZGEDq%WW(N)wjEZuc^T)G=1hS^<-$qbdsa5mIPEPD%cxNQU_b5Mjx z$dU-mAI?MX!rg7Qj)mdD3*rWfoPA#Z>8!GAi@Kh!^8(-47uhs5K@xPHwqgl7LDgr8 z8<&*?L)5Y8{1#|!tg`ieVHVWo$IIU3rH;qE>)-O@`n?UBVDkN%h6LD zb|L9$op_C2)`L*cD3wWbL%soh7K@|?nt%l}SA{<0LK$q-tC_Zfl!FFa@vwlq%SaJ! z)>0kyc$C8MdEL@1HL7UNCZHxX%p9$o1bsqVs$dEm3#j1dFxp{g>bZHhT#ozp0WVLe zVQehWNG1I=DXbWaAX~3aPP+Alpk}>Vom%N@Np_rAsQUt``wEsnE9=yHzyF&_n2TOx z%7vm`nZ~oQy2ZnXJ8-4|gC!lLXY%D)W}2Cxq+{s>ck`Ej2T?Am%}cwly9HX?gWW{| zA6)WlOUr)MB2TED?^Y4i8ara#fvG$XV9;YfYiT6t82U8@P6^^j`K`d-06#@DEBpfJ z(xpbezL2ZIl4;<=z|spWZGu5)RmW7=iot-^^9x=u()<%lEkCFSu7%~b&d<(ctZ^I5 zvav#7@sTF8>Mk#{+}^z8QV|-b3;l;yX6GVWQmx#ap3YCZeOBA|XU{UjuA+_!?XGK? zp{+|RnXKG~Yq>}Y6FVKSFp>!A&H}#6P-jWUO}c6_&2%+J6w_6OA0v*%%fkjqU60qR zu=Xd>_mW$W*$it}X-;=`b*QtX^C3FR`3?~-;eK)odgrX`sd{rd>OncMCSk^dx?U{@ z9p`?o>@MrL$&%W9o0wml*{GkUnw)g-BZfYv$RREv@B;lXSZ_6ul52?{{k8m=7+1J}uv^_BL(u%+=$`bI8~b+h7M zVv5gLgk{og%)5|>wAj3;Eu*xbq($FrOY5*c^Ob4z#^w)~+<8m`Km(Y4us=JgGRh@9 zFKbxbki8t#=pZ0HU#-u@nQp8d=lL2i^R%R|4ZC?HAbLBMO{UDQ5^g16ZjBkJjngwe z=m%>$poI{~1g1?rN^l-*BG|_nNMSI>k}tLa2{snYT+=HRQcK0QVan9BMm3Fs#v{$8 zd5(E9(TP0tj95oW)TYZNuVMJ1jeXFiO@m$`NtTr||A^F>T&h!34#6M!vYv**YFG&} z(EbavnwE5!sJM)TDOF&i`8Kh|q^v!dV5$l9=wxe3G5uacb3?Rlqv&R_HUsR%iykKI z3L4VXRFH%Y67x%Epk_I@)Cr*qfnCwJ0{n{wH|=Qx$HD+?yLr6>Tv>Z}{`7ZKo3Hkd7k35zM!OL^OeY$fOcvn8<<*(_OFslR!NQnkZGKs!>K#2+8u)WWEx$%!RsX zQ3^{vVO!j+`PXSI46y6E>%fA98p~EEX(Ps}O8y-?7yNW-3WVn7r?7PDt^#Ti!G8-D z^)~>k6Nkxl{K7D|0>D~^CJPFI5jmnPA6VjP>q4C)jhW`$BpK#ySgNCzCB4B8K2La!k64prsLd=mO&IQ2?`0SI zz2Oxb2u02~P4ELKHU)rw0G81IqN;md6mtf6yk0u&h9{w?1EB*t?SczV!C%pEQ)D<> zh0)GDyCeJp8V&2wV2u)k)p?c2&7b!+6$LA;qcZ_H1~irK`Vo`Xbh$d|I`e=)3Nuk! z*zn~5KXkx!!2}`@hwfA%@40=;*QH?@1#VE8B?j3n8t^r5HtZGPrm5CF4ZC|G!VU)l zR0s*L)fRHV&u1Mw@EVish4`+`vi+`>6W|iintbUJfvx1$Nm?3a^3gV2Y*_F{+g2BW zJWzkAUtycXGO`I?W;SU#nlC-rY2d+&Qg1})gMS?2RI?TikQ_^-J~G0b!c6A@@(_Ck zWDKxAi;Q6yjzIBKYUEp1grRXTRG;$scE7vAr%z_BGbk3a#O+zHsAiTjt*hEc| z1h$m!V%dg4>fol3`6OK$Pk_HE_#n@E@7GW1mW!CalO)NgUnN@MyzkBB5#WLVe_->#vF4zHv8U&% z)k=)q@K8c$Al4Lo1>FNpjYfR}gc~FZv&47afgAc>KiH^P<}`NjZMea-1e`Y2!tkv> z*Gs~?R%}{zvH&IvBLmLTX~f0lkAO6-p8`rh5~`M;*965I#^a%p6c*skQ6K^+%STF@ zY`$W$Zia9Q0DwgVSU@Qxtq;;S?`v;ha(*Ej zx{c~IshluyB0;henk?D*nFLmYL4Zpf?bXOSN9WO1ch>cz1u%nzYBarGPT7S-^bKcx z9`e7a!7_b;2?s8e0B8m17Pk-CiFt3p6XMRt*tUervFy2q@nAhiDhLdwLbJY*q)Zzt zhA9uU7mzkI5JW%_dR(m1x{q-^n~vHGRAP&*kz<>(X{^sQ|H9AmT5~Ec`HrHtd5YC> z2%Uh=#d4o|%lLrBjMSuCq?svI;{2I|beYdD#3zAU1MEaq%X2B-?pY*V|wsI`3 z+F7>s+F2G*Vc5PD)UptQ`bWNsD2WC_puC1c5y;B($RPGvB3q|{fFvUoQv(s>+e(-k z57M%gPc6$_l(1ZWP87 zgAi`TMnvWEUO9&a4IYOjgGCpn8buh6hQ`fH($WVKfu%!^OIXi@&e`ol>F_TF9Gqx zp!<=Q<2%YfP+= zHCgy2iot?r1l|lf0ddb_ywtQi7ip=BAzzJ*kO6MVucfg=|LD}LStINBO$)3O!egz4 z;n>2!?6BA1kPCvMa-%W3nm9@)$-~YdGgei@u&n@{hS6UT<6*bh@0&B-cd>;Ds}e(T zoC88?89c+8y=|P3sVi&ekhC;nZNY$XkP5I5x4xlOMAzH3d9*ErmnJ<2e7KCY2I~q5 zz-6{1YMBj{Apm6_qchDF2tM_IcF`w7!iYBkE#?eG(GmKC3* PqgJwz$gNb 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 literal 0 HcmV?d00001 diff --git a/font/webfonts/fa-solid-900.woff2 b/font/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3516fdbe330ef1cd0775dbb5bdee41a4ce2cc010 GIT binary patch literal 150472 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 z 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 literal 0 HcmV?d00001 diff --git a/font/webfonts/fa-v4compatibility.ttf b/font/webfonts/fa-v4compatibility.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dc2981941df8e153515fcc8718292d5e83b3d594 GIT binary patch literal 10136 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 AZvX%Q literal 0 HcmV?d00001 diff --git a/font/webfonts/fa-v4compatibility.woff2 b/font/webfonts/fa-v4compatibility.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..28d46b15ace8f3e5056c6de1e387062b92c8dae3 GIT binary patch literal 4584 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 SoVIq!9~U|32P^TH0RsTY6q0@b literal 0 HcmV?d00001 diff --git a/images/avatar.png b/images/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..0c7194cb450378cfae6c696288aafe421c5802ad GIT binary patch literal 123306 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∈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 Hu0mjf#q#Ld literal 0 HcmV?d00001 diff --git a/images/avatat.png b/images/avatat.png new file mode 100644 index 000000000..e69de29bb diff --git a/images/bg.jpg b/images/bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bfc3b606c8c5cb0ae3f65dbef7510a59a953a712 GIT binary patch literal 125091 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

    hAI&Wck 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

    d>XY-BV@vm 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 Y3y>k#(FNv$Ae@nk@P8o*F+aNh1&Ap5?f?J) literal 0 HcmV?d00001 diff --git a/images/bg.svg b/images/bg.svg new file mode 100644 index 000000000..58dd9847f --- /dev/null +++ b/images/bg.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/bg_dark.jpg b/images/bg_dark.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f6a1b2398d372b297faf9ded5d8473fe3af6c4f GIT binary patch literal 154901 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®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 literal 0 HcmV?d00001 diff --git a/images/bg_dark.svg b/images/bg_dark.svg new file mode 100644 index 000000000..917d08f1c --- /dev/null +++ b/images/bg_dark.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/deploy-provider/aliyun.png b/images/deploy-provider/aliyun.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e9c7ff54f539ab8577200cd02929dc47007850 GIT binary patch literal 3279 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 N002ovPDHLkV1f(5u%G|{ literal 0 HcmV?d00001 diff --git a/images/deploy-provider/gitee.png b/images/deploy-provider/gitee.png new file mode 100644 index 0000000000000000000000000000000000000000..4701bbf7925df86dcf3df31c73f2e1332fdf03e5 GIT binary patch literal 1799 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 R95Da@002ovPDHLkV1l&;X666@ literal 0 HcmV?d00001 diff --git a/images/deploy-provider/tencent_cloud.png b/images/deploy-provider/tencent_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..9abe109b7bf89525046421cddd7197a74106a977 GIT binary patch literal 2422 zcmaKtc{J4h7stmsmhqjj73MpPHG?NhiJ5rD*h!@gsINUe^WC7TT5gGp{NO$kD-8Muy9DHH=(yLAUIa zQ*#gqG}6qFVD0s3{N@>hJ~c7&XA8wk?vH(Zc#_qLYBL5$t{V^lf{3Mc{kMUwEw*Zm zSyr`KpD*}zfuL`N4o$BQrP=a$oc%VoZdPRb;I45u{*(fvNjB=|z2|8-=e4H&KH2%+ zPB|8B!_m^}1Xzg5Eq!5vfVf0J3m$A)u^yRdDNR8dg`3pjQKTSS#oc)g(GCW{ z#1&9AHQxQtnLqMv(oQc+W8}SX-@OSIWTgk(Cj6V%Ug~R=MiSF=YeXu%?VUf&4vkKq z#K2eZ3DywI9?dD(&lc= zB#(ro82gCm&Ap&XzFXQ+PpVuMeTM$j4;ifHIiTB(R4`J*WW|D81r8;hwkT~$u>py^ zs#Rc7Py)KX7IGt3i}?eqD04B_R`5=u&8oJGOYq&kb@MtCL-ELAl$(qaIhFUr(;6?j z4zH*XpaV!Eh3d%a@eeDNv0gGKF-7Q*>ilYSX7x{$4+*J&-AG5(Tiuw>I3H7Q4^_LY ziW)4Xa<0Z}y|s8Y71*=8mRqZdqCL+Tzku?&dILdEym+w>2dX)AeW$52YJ;F-^$el0 z;X?;j=K{Kjm=4&)~}Eii+yJqR|FjdN{ApComs z_1k@M#G7|xJ#a+b!wvurcD?d3e}+FE&&02XURYY2p8itX%C6B+{%AcQ)ZJA{kVy`F zg=%YeI(00J^p5cS&C?r7r#&WVn@6?dofnVv092gmS%)4rV8=#>fW!bnIG>Z z%|1Hu!+nX?6+`mvVhG4u*1;w&_UeOPA{T=WrL=%V18M0e?L*3J4VM`DTMnY-g3nvf zl4~fv_ub;VsGC5(dcHXD$tgiRC^jX-MxEvj4BXSEf}r7C)w#*NU_|}Za(*C3z}npc zgX@ur%Y4>2P;$_&DHm+eUGM$;xgu&fIrSiKI$m28ruyCAV&-9fc1BJNT>LS0$^R zl2D0U#-Z%^UW^?wp;p6`;o0g1*Jifx3Kz~LQ*=>ceP<3JMLL`ve-7&>{eR#0ffT6dT0i5>zU1P+vbNn9Dk=hj9#fb zXT+d8Rx|_VwKi)6hn9A>yg;a6Rbh|8-`=yX4H-(N`?xk5Px3t4PrgJs+oXrgskMiy zhZhdTL4b#-2u|myeJbV%Pr;DEbeX8#zI#ZHd`{0>Zl92| zw+=#7g(ZWGmFrKRDPYSgQe`;j)^ReFfVJv+G{Ej0iZw=gO(4$j57XU< z6U|rHcmJho8ilw|7CL2Tok=&B!SsC88?j=Z?k&5OK2ohBpiO5+4;}BsF1))^fr=4QF=9ry;hjH*`n8I{@YiPNGhd2T zhlTV}HNm1Cwxv1;_&==(o%m%n8E6nYbaaXP z2}n%^>fTC~Apl3A%U`YONpV_!jxAGqJswd(G%lV=;-IDci^Wo@zzXSW>}EjACuJpU z4n&$T;HI6i+O5Nh^-3Vx>F5c%Pmo_%^xdb#oVkBnXar(>fE#Rc=O2W)nxrV2`ZH(Y z2r1+>S?T{`t?==#r|zaL^|bi}Y! HpGf%^)a^jF literal 0 HcmV?d00001 diff --git a/images/deploy-provider/upyun.png b/images/deploy-provider/upyun.png new file mode 100644 index 0000000000000000000000000000000000000000..98feb4dbda3adbdda43b8a71201f8c75e42af28d GIT binary patch literal 2771 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 literal 0 HcmV?d00001 diff --git a/images/deploy-provider/vercel.png b/images/deploy-provider/vercel.png new file mode 100644 index 0000000000000000000000000000000000000000..fc66aff51ce8e3e8146e7cbe6388e12be33363cb GIT binary patch literal 1645 zcmcgt{Xf$Q9RHfh#%5cVIYeoTrR2KeO32udr3JO5EW8r>ssdV=BZfn6aj$h8V#SDl^|7~k2t@}OvlKdBuyy{%a!jJVgjT;bu&I{`xkw@F!h~K|xK@ zOjySq_JoyWOLb}94ksOIb=82VT7P61hmw+RVJcF)inU($-!~y1BQV)t97}gR$KS3NYrk! zwQlk8?ci;W+jBFe_U+fv`FM%1H`$^v%glFrFy8b6123CInWH>mQtw zVwDko)yF8Nl;}f8rGf|doD9*FoCW7qU9#@Y-b}rS7h!b#yB5cn<2|IqUrLS z&HJPIb*ohS3s)8vxD!i`;+S}tibv-jhaTKY>5IBl@lF+vDeO(EvMTBo8R3t&RZQno zK{B>VB4phk*?#?gr*SaHMCh}uxs&@U=DFlM3Ycp-e9Q25x|f-g`&U(5thPCp!A zFcBTeY{3Fw8Grkm<|G$d6sUk98Q~pq!b!~k)880I?%vXnb{Q4?L;g<#Ux6xi5$WVU ze+WJ)Eb@UUE40(tlMu?e5(7cJQNXaMDFMK9tv9C=VmQ_)S$IR!`0&l@t~Qsa?uF}-@nny zGXM}DWFlzJ#fo1_gy%*(hiAh32H#+&1S3ByW(VTN-ohsgV@U~G60z(pS{C;Wu4@ZH z@6hy;ex<{w0W(E_1nX+^IT@>?oErM5nHuOC`Mvke5bIprWPvdhpSPO!?)n$9$h3%zWz?R1@=-&&bP`3g*vtM+e3$F}(sbXY!OkJ}dho-J=zQLDeC29ncf3QH`CDYO`odp!xdp$#p@VK~5pm!}fqXAPgG1Yut + + + + + + + + + + + + + + diff --git a/index.html b/index.html new file mode 100644 index 000000000..b021f38c2 --- /dev/null +++ b/index.html @@ -0,0 +1,1179 @@ + + + + + + + + + + + + DIONYSEN BLOG + + + + + + + + + + + + + + + +

    + + +
    + + + + + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    + + +
    +
    + + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/js/back2top.js b/js/back2top.js new file mode 100644 index 000000000..0a55150e7 --- /dev/null +++ b/js/back2top.js @@ -0,0 +1,52 @@ +/* global KEEP */ + +KEEP.initBack2Top = () => { + KEEP.utils = { + ...KEEP.utils, + + back2BottomButton_dom: document.querySelector('.tool-scroll-to-bottom'), + + back2top() { + const scrollTopTimer = setInterval(function () { + let top = document.body.scrollTop || document.documentElement.scrollTop + let speed = top / 2 + if (document.body.scrollTop !== 0) { + document.body.scrollTop -= speed + } else { + document.documentElement.scrollTop -= speed + } + if (top === 0) { + clearInterval(scrollTopTimer) + } + }, 50) + }, + + back2Bottom() { + let scrollHeight = document.body.scrollHeight || document.documentElement.scrollHeight + let scrollTop = document.body.scrollTop || document.documentElement.scrollTop + const scrollBottomTimer = setInterval(function () { + if (!scrollTop) scrollTop = 10 + scrollTop = Math.floor(scrollTop + scrollTop / 2) + window.scrollTo(0, scrollTop) + if (scrollTop >= scrollHeight) { + clearInterval(scrollBottomTimer) + } + }, 50) + }, + + initBack2Top() { + this.back2TopButton_dom.addEventListener('click', () => { + this.back2top() + }) + }, + + initBack2Bottom() { + this.back2BottomButton_dom.addEventListener('click', () => { + this.back2Bottom() + }) + } + } + + KEEP.utils.initBack2Top() + KEEP.utils.initBack2Bottom() +} diff --git a/js/code-block.js b/js/code-block.js new file mode 100644 index 000000000..a8fad818d --- /dev/null +++ b/js/code-block.js @@ -0,0 +1,114 @@ +/* global KEEP */ + +KEEP.initCodeBlockTools = () => { + HTMLElement.prototype.wrap = function (wrapper) { + this.parentNode.insertBefore(wrapper, this) + this.parentNode.removeChild(this) + wrapper.appendChild(this) + } + + const { style: codeCopyStyle } = KEEP.theme_config?.code_copy || {} + const { style: codeBlockStyle } = KEEP.theme_config?.code_block || {} + const { style: codeBlockToolsStyle } = KEEP.theme_config?.code_block?.tools || {} + + const isMac = (codeCopyStyle || codeBlockStyle || codeBlockToolsStyle || 'default') === 'mac' + const foldedIconClassName = isMac ? 'fas fa-chevron-left' : 'fas fa-chevron-right' + const { + copy: copyLang, + copied: copiedLang, + fold: foldLang, + folded: foldedLang + } = KEEP.language_code_block + const foldDom = `` + + document.querySelectorAll('figure.highlight').forEach((element) => { + let codeLang = element.classList.length ? element.classList[1].toUpperCase() : '' + if (codeLang === 'PLAINTEXT') { + codeLang = '' + } + const highlightContainer = document.createElement('div') + highlightContainer.classList.add('highlight-container') + if (isMac) { + highlightContainer.classList.add('mac') + } + element.wrap(highlightContainer) + + const codeLangDom = `${codeLang ? '' + codeLang + '' : ''}` + + highlightContainer.insertAdjacentHTML( + 'afterbegin', + `
    + ${isMac ? foldDom + codeLangDom : '' + foldDom + codeLangDom + ''} + +
    ` + ) + const codeToolsBox = element.parentNode.querySelector('.code-tools-box') + const copyDom = codeToolsBox.querySelector('.copy') + const targetFoldDom = codeToolsBox.querySelector('.fold') + + copyDom.addEventListener('click', (event) => { + const target = event.currentTarget + const code = [...element.querySelectorAll('.code .line')] + .map((line) => line.innerText) + .join('\n') + const tta = document.createElement('textarea') + tta.style.top = window.scrollY + 'px' + tta.style.position = 'absolute' + tta.style.opacity = '0' + tta.readOnly = true + tta.value = code + document.body.append(tta) + const selection = document.getSelection() + const selected = selection.rangeCount > 0 ? selection.getRangeAt(0) : false + tta.select() + tta.setSelectionRange(0, code.length) + tta.readOnly = false + const result = document.execCommand('copy') + + const copyIconDom = target.querySelector('i') + const copyTooltipDom = codeToolsBox.querySelector('.copy .tooltip-content') + + if (result) { + copyIconDom.className = 'fas fa-check' + copyTooltipDom && (copyTooltipDom.innerHTML = copiedLang) + } else { + copyIconDom.className = 'fas fa-times' + } + + tta.blur() + target.blur() + if (selected) { + selection.removeAllRanges() + selection.addRange(selected) + } + document.body.removeChild(tta) + }) + + copyDom.addEventListener('mouseleave', (event) => { + setTimeout(() => { + event.target.querySelector('i').className = 'fas fa-copy' + const copyTooltipDom = codeToolsBox.querySelector('.copy .tooltip-content') + copyTooltipDom && (copyTooltipDom.innerHTML = copyLang) + }, 500) + }) + + let isFold = false + targetFoldDom.addEventListener('click', (event) => { + const target = event.currentTarget + const icon = target.querySelector('i') + const foldTooltipDom = codeToolsBox.querySelector('.fold .tooltip-content') + isFold = !isFold + if (isFold) { + icon.className = foldedIconClassName + element.classList.add('folded') + codeToolsBox.classList.add('folded') + foldTooltipDom && (foldTooltipDom.innerHTML = foldedLang) + } else { + icon.className = 'fas fa-chevron-down' + element.classList.remove('folded') + codeToolsBox.classList.remove('folded') + foldTooltipDom && (foldTooltipDom.innerHTML = foldLang) + } + }) + }) +} diff --git a/js/dark-light-toggle.js b/js/dark-light-toggle.js new file mode 100644 index 000000000..42031678f --- /dev/null +++ b/js/dark-light-toggle.js @@ -0,0 +1,66 @@ +/* global KEEP */ + +KEEP.initModeToggle = () => { + KEEP.utils.modeToggle = { + modeToggleButton_dom: document.querySelectorAll('.tool-dark-light-toggle'), + iconDom: document.querySelectorAll('.tool-dark-light-toggle i'), + + enableLightMode() { + document.body.classList.remove('dark-mode') + document.body.classList.add('light-mode') + this.iconDom.className = 'fas fa-moon' + KEEP.styleStatus.isDark = false + KEEP.setStyleStatus() + }, + + enableDarkMode() { + document.body.classList.add('dark-mode') + document.body.classList.remove('light-mode') + this.iconDom.className = 'fas fa-sun' + KEEP.styleStatus.isDark = true + KEEP.setStyleStatus() + }, + + isDarkPrefersColorScheme() { + return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)') + }, + + initModeStatus() { + const styleStatus = KEEP.getStyleStatus() + + if (styleStatus) { + styleStatus.isDark ? this.enableDarkMode() : this.enableLightMode() + } else { + this.isDarkPrefersColorScheme().matches ? this.enableDarkMode() : this.enableLightMode() + } + }, + + initModeToggleButton() { + // this.modeToggleButton_dom.forEach(item => { + // item.addEventListener('click', () => { + // const isDark = document.body.classList.contains('dark-mode') + // isDark ? this.enableLightMode() : this.enableDarkMode() + // }) + // }) + this.modeToggleButton_dom[0].addEventListener('click', () => { + const isDark = document.body.classList.contains('dark-mode') + isDark ? this.enableLightMode() : this.enableDarkMode() + }), + this.modeToggleButton_dom[1].addEventListener('click', () => { + const isDark = document.body.classList.contains('dark-mode') + isDark ? this.enableLightMode() : this.enableDarkMode() + }) + }, + + initModeAutoTrigger() { + const isDarkMode = this.isDarkPrefersColorScheme() + isDarkMode.addEventListener('change', (e) => { + e.matches ? this.enableDarkMode() : this.enableLightMode() + }) + } + } + + KEEP.utils.modeToggle.initModeStatus() + KEEP.utils.modeToggle.initModeToggleButton() + KEEP.utils.modeToggle.initModeAutoTrigger() +} diff --git a/js/header-shrink.js b/js/header-shrink.js new file mode 100644 index 000000000..ae2938dd4 --- /dev/null +++ b/js/header-shrink.js @@ -0,0 +1,50 @@ +/* global KEEP */ + +KEEP.initHeaderShrink = () => { + KEEP.utils.headerShrink = { + headerDom: document.querySelector('.header-wrapper'), + isHeaderShrink: false, + + init() { + this.headerHeight = this.headerDom.getBoundingClientRect().height + }, + + headerShrink() { + const scrollTop = document.body.scrollTop || document.documentElement.scrollTop + const headerWrapperDom = document.querySelector('.header-wrapper') + const { enable, header_transparent } = KEEP.theme_config.style.first_screen + if (!this.isHeaderShrink && scrollTop > this.headerHeight) { + this.isHeaderShrink = true + document.body.classList.add('header-shrink') + if (enable === true && header_transparent === true) { + headerWrapperDom.classList.add('transparent-2') + } + } else if (this.isHeaderShrink && scrollTop <= this.headerHeight) { + this.isHeaderShrink = false + document.body.classList.remove('header-shrink') + if (enable === true && header_transparent === true) { + headerWrapperDom.classList.remove('transparent-2') + } + } + }, + + toggleHeaderDrawerShow() { + const domList = [document.querySelector('.window-mask'), document.querySelector('.menu-bar')] + + if (KEEP.theme_config.pjax.enable === true) { + domList.push( + ...document.querySelectorAll('.header-drawer .drawer-menu-list .drawer-menu-item') + ) + } + + domList.forEach((v) => { + v.addEventListener('click', () => { + document.body.classList.toggle('header-drawer-show') + }) + }) + } + } + KEEP.utils.headerShrink.init() + KEEP.utils.headerShrink.headerShrink() + KEEP.utils.headerShrink.toggleHeaderDrawerShow() +} diff --git a/js/lazyload.js b/js/lazyload.js new file mode 100644 index 000000000..8b7cddf9e --- /dev/null +++ b/js/lazyload.js @@ -0,0 +1,42 @@ +/* global KEEP */ + +KEEP.initLazyLoad = () => { + const imgs = document.querySelectorAll('img') + let now = Date.now() + let needLoad = true + + function lazyload(imgs) { + now = Date.now() + needLoad = Array.from(imgs).some((i) => i.hasAttribute('lazyload')) + + const h = window.innerHeight + const s = document.documentElement.scrollTop || document.body.scrollTop + + imgs.forEach((img) => { + if (img.hasAttribute('lazyload') && !img.hasAttribute('loading')) { + if (h + s > img.offsetTop) { + img.setAttribute('loading', true) + const loadImageTimeout = setTimeout(() => { + const temp = new Image() + const src = img.getAttribute('data-src') + temp.src = src + temp.onload = () => { + img.src = src + img.removeAttribute('lazyload') + img.removeAttribute('loading') + clearTimeout(loadImageTimeout) + } + }, 500) + } + } + }) + } + + lazyload(imgs) + + window.onscroll = () => { + if (Date.now() - now > 50 && needLoad) { + lazyload(imgs) + } + } +} diff --git a/js/libs/anime.min.js b/js/libs/anime.min.js new file mode 100644 index 000000000..99b263aae --- /dev/null +++ b/js/libs/anime.min.js @@ -0,0 +1,8 @@ +/* + * anime.js v3.1.0 + * (c) 2019 Julian Garnier + * Released under the MIT license + * animejs.com + */ + +!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):n.anime=e()}(this,function(){"use strict";var n={update:null,begin:null,loopBegin:null,changeBegin:null,change:null,changeComplete:null,loopComplete:null,complete:null,loop:1,direction:"normal",autoplay:!0,timelineOffset:0},e={duration:1e3,delay:0,endDelay:0,easing:"easeOutElastic(1, .5)",round:0},r=["translateX","translateY","translateZ","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ","skew","skewX","skewY","perspective"],t={CSS:{},springs:{}};function a(n,e,r){return Math.min(Math.max(n,e),r)}function o(n,e){return n.indexOf(e)>-1}function u(n,e){return n.apply(null,e)}var i={arr:function(n){return Array.isArray(n)},obj:function(n){return o(Object.prototype.toString.call(n),"Object")},pth:function(n){return i.obj(n)&&n.hasOwnProperty("totalLength")},svg:function(n){return n instanceof SVGElement},inp:function(n){return n instanceof HTMLInputElement},dom:function(n){return n.nodeType||i.svg(n)},str:function(n){return"string"==typeof n},fnc:function(n){return"function"==typeof n},und:function(n){return void 0===n},hex:function(n){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(n)},rgb:function(n){return/^rgb/.test(n)},hsl:function(n){return/^hsl/.test(n)},col:function(n){return i.hex(n)||i.rgb(n)||i.hsl(n)},key:function(r){return!n.hasOwnProperty(r)&&!e.hasOwnProperty(r)&&"targets"!==r&&"keyframes"!==r}};function c(n){var e=/\(([^)]+)\)/.exec(n);return e?e[1].split(",").map(function(n){return parseFloat(n)}):[]}function s(n,e){var r=c(n),o=a(i.und(r[0])?1:r[0],.1,100),u=a(i.und(r[1])?100:r[1],.1,100),s=a(i.und(r[2])?10:r[2],.1,100),f=a(i.und(r[3])?0:r[3],.1,100),l=Math.sqrt(u/o),d=s/(2*Math.sqrt(u*o)),p=d<1?l*Math.sqrt(1-d*d):0,h=1,v=d<1?(d*l-f)/p:-f+l;function g(n){var r=e?e*n/1e3:n;return r=d<1?Math.exp(-r*d*l)*(h*Math.cos(p*r)+v*Math.sin(p*r)):(h+v*r)*Math.exp(-r*l),0===n||1===n?n:1-r}return e?g:function(){var e=t.springs[n];if(e)return e;for(var r=0,a=0;;)if(1===g(r+=1/6)){if(++a>=16)break}else a=0;var o=r*(1/6)*1e3;return t.springs[n]=o,o}}function f(n){return void 0===n&&(n=10),function(e){return Math.round(e*n)*(1/n)}}var l,d,p=function(){var n=11,e=1/(n-1);function r(n,e){return 1-3*e+3*n}function t(n,e){return 3*e-6*n}function a(n){return 3*n}function o(n,e,o){return((r(e,o)*n+t(e,o))*n+a(e))*n}function u(n,e,o){return 3*r(e,o)*n*n+2*t(e,o)*n+a(e)}return function(r,t,a,i){if(0<=r&&r<=1&&0<=a&&a<=1){var c=new Float32Array(n);if(r!==t||a!==i)for(var s=0;s=.001?function(n,e,r,t){for(var a=0;a<4;++a){var i=u(e,r,t);if(0===i)return e;e-=(o(e,r,t)-n)/i}return e}(t,l,r,a):0===d?l:function(n,e,r,t,a){for(var u,i,c=0;(u=o(i=e+(r-e)/2,t,a)-n)>0?r=i:e=i,Math.abs(u)>1e-7&&++c<10;);return i}(t,i,i+e,r,a)}}}(),h=(l={linear:function(){return function(n){return n}}},d={Sine:function(){return function(n){return 1-Math.cos(n*Math.PI/2)}},Circ:function(){return function(n){return 1-Math.sqrt(1-n*n)}},Back:function(){return function(n){return n*n*(3*n-2)}},Bounce:function(){return function(n){for(var e,r=4;n<((e=Math.pow(2,--r))-1)/11;);return 1/Math.pow(4,3-r)-7.5625*Math.pow((3*e-2)/22-n,2)}},Elastic:function(n,e){void 0===n&&(n=1),void 0===e&&(e=.5);var r=a(n,1,10),t=a(e,.1,2);return function(n){return 0===n||1===n?n:-r*Math.pow(2,10*(n-1))*Math.sin((n-1-t/(2*Math.PI)*Math.asin(1/r))*(2*Math.PI)/t)}}},["Quad","Cubic","Quart","Quint","Expo"].forEach(function(n,e){d[n]=function(){return function(n){return Math.pow(n,e+2)}}}),Object.keys(d).forEach(function(n){var e=d[n];l["easeIn"+n]=e,l["easeOut"+n]=function(n,r){return function(t){return 1-e(n,r)(1-t)}},l["easeInOut"+n]=function(n,r){return function(t){return t<.5?e(n,r)(2*t)/2:1-e(n,r)(-2*t+2)/2}}}),l);function v(n,e){if(i.fnc(n))return n;var r=n.split("(")[0],t=h[r],a=c(n);switch(r){case"spring":return s(n,e);case"cubicBezier":return u(p,a);case"steps":return u(f,a);default:return u(t,a)}}function g(n){try{return document.querySelectorAll(n)}catch(n){return}}function m(n,e){for(var r=n.length,t=arguments.length>=2?arguments[1]:void 0,a=[],o=0;o1&&(r-=1),r<1/6?n+6*(e-n)*r:r<.5?e:r<2/3?n+(e-n)*(2/3-r)*6:n}if(0==u)e=r=t=i;else{var f=i<.5?i*(1+u):i+u-i*u,l=2*i-f;e=s(l,f,o+1/3),r=s(l,f,o),t=s(l,f,o-1/3)}return"rgba("+255*e+","+255*r+","+255*t+","+c+")"}(n):void 0;var e,r,t,a}function C(n){var e=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(n);if(e)return e[1]}function B(n,e){return i.fnc(n)?n(e.target,e.id,e.total):n}function P(n,e){return n.getAttribute(e)}function I(n,e,r){if(M([r,"deg","rad","turn"],C(e)))return e;var a=t.CSS[e+r];if(!i.und(a))return a;var o=document.createElement(n.tagName),u=n.parentNode&&n.parentNode!==document?n.parentNode:document.body;u.appendChild(o),o.style.position="absolute",o.style.width=100+r;var c=100/o.offsetWidth;u.removeChild(o);var s=c*parseFloat(e);return t.CSS[e+r]=s,s}function T(n,e,r){if(e in n.style){var t=e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),a=n.style[e]||getComputedStyle(n).getPropertyValue(t)||"0";return r?I(n,a,r):a}}function D(n,e){return i.dom(n)&&!i.inp(n)&&(P(n,e)||i.svg(n)&&n[e])?"attribute":i.dom(n)&&M(r,e)?"transform":i.dom(n)&&"transform"!==e&&T(n,e)?"css":null!=n[e]?"object":void 0}function E(n){if(i.dom(n)){for(var e,r=n.style.transform||"",t=/(\w+)\(([^)]*)\)/g,a=new Map;e=t.exec(r);)a.set(e[1],e[2]);return a}}function F(n,e,r,t){var a,u=o(e,"scale")?1:0+(o(a=e,"translate")||"perspective"===a?"px":o(a,"rotate")||o(a,"skew")?"deg":void 0),i=E(n).get(e)||u;return r&&(r.transforms.list.set(e,i),r.transforms.last=e),t?I(n,i,t):i}function N(n,e,r,t){switch(D(n,e)){case"transform":return F(n,e,t,r);case"css":return T(n,e,r);case"attribute":return P(n,e);default:return n[e]||0}}function A(n,e){var r=/^(\*=|\+=|-=)/.exec(n);if(!r)return n;var t=C(n)||0,a=parseFloat(e),o=parseFloat(n.replace(r[0],""));switch(r[0][0]){case"+":return a+o+t;case"-":return a-o+t;case"*":return a*o+t}}function L(n,e){if(i.col(n))return O(n);if(/\s/g.test(n))return n;var r=C(n),t=r?n.substr(0,n.length-r.length):n;return e?t+e:t}function j(n,e){return Math.sqrt(Math.pow(e.x-n.x,2)+Math.pow(e.y-n.y,2))}function S(n){for(var e,r=n.points,t=0,a=0;a0&&(t+=j(e,o)),e=o}return t}function q(n){if(n.getTotalLength)return n.getTotalLength();switch(n.tagName.toLowerCase()){case"circle":return o=n,2*Math.PI*P(o,"r");case"rect":return 2*P(a=n,"width")+2*P(a,"height");case"line":return j({x:P(t=n,"x1"),y:P(t,"y1")},{x:P(t,"x2"),y:P(t,"y2")});case"polyline":return S(n);case"polygon":return r=(e=n).points,S(e)+j(r.getItem(r.numberOfItems-1),r.getItem(0))}var e,r,t,a,o}function $(n,e){var r=e||{},t=r.el||function(n){for(var e=n.parentNode;i.svg(e)&&i.svg(e.parentNode);)e=e.parentNode;return e}(n),a=t.getBoundingClientRect(),o=P(t,"viewBox"),u=a.width,c=a.height,s=r.viewBox||(o?o.split(" "):[0,0,u,c]);return{el:t,viewBox:s,x:s[0]/1,y:s[1]/1,w:u/s[2],h:c/s[3]}}function X(n,e){function r(r){void 0===r&&(r=0);var t=e+r>=1?e+r:0;return n.el.getPointAtLength(t)}var t=$(n.el,n.svg),a=r(),o=r(-1),u=r(1);switch(n.property){case"x":return(a.x-t.x)*t.w;case"y":return(a.y-t.y)*t.h;case"angle":return 180*Math.atan2(u.y-o.y,u.x-o.x)/Math.PI}}function Y(n,e){var r=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g,t=L(i.pth(n)?n.totalLength:n,e)+"";return{original:t,numbers:t.match(r)?t.match(r).map(Number):[0],strings:i.str(n)||e?t.split(r):[]}}function Z(n){return m(n?y(i.arr(n)?n.map(b):b(n)):[],function(n,e,r){return r.indexOf(n)===e})}function Q(n){var e=Z(n);return e.map(function(n,r){return{target:n,id:r,total:e.length,transforms:{list:E(n)}}})}function V(n,e){var r=x(e);if(/^spring/.test(r.easing)&&(r.duration=s(r.easing)),i.arr(n)){var t=n.length;2===t&&!i.obj(n[0])?n={value:n}:i.fnc(e.duration)||(r.duration=e.duration/t)}var a=i.arr(n)?n:[n];return a.map(function(n,r){var t=i.obj(n)&&!i.pth(n)?n:{value:n};return i.und(t.delay)&&(t.delay=r?0:e.delay),i.und(t.endDelay)&&(t.endDelay=r===a.length-1?e.endDelay:0),t}).map(function(n){return k(n,r)})}function z(n,e){var r=[],t=e.keyframes;for(var a in t&&(e=k(function(n){for(var e=m(y(n.map(function(n){return Object.keys(n)})),function(n){return i.key(n)}).reduce(function(n,e){return n.indexOf(e)<0&&n.push(e),n},[]),r={},t=function(t){var a=e[t];r[a]=n.map(function(n){var e={};for(var r in n)i.key(r)?r==a&&(e.value=n[r]):e[r]=n[r];return e})},a=0;a-1&&(_.splice(o,1),r=_.length)}else a.tick(e);t++}n()}else U=cancelAnimationFrame(U)}return n}();function rn(r){void 0===r&&(r={});var t,o=0,u=0,i=0,c=0,s=null;function f(n){var e=window.Promise&&new Promise(function(n){return s=n});return n.finished=e,e}var l,d,p,h,v,g,y,b,M=(d=w(n,l=r),p=w(e,l),h=z(p,l),v=Q(l.targets),g=W(v,h),y=J(g,p),b=K,K++,k(d,{id:b,children:[],animatables:v,animations:g,duration:y.duration,delay:y.delay,endDelay:y.endDelay}));f(M);function x(){var n=M.direction;"alternate"!==n&&(M.direction="normal"!==n?"normal":"reverse"),M.reversed=!M.reversed,t.forEach(function(n){return n.reversed=M.reversed})}function O(n){return M.reversed?M.duration-n:n}function C(){o=0,u=O(M.currentTime)*(1/rn.speed)}function B(n,e){e&&e.seek(n-e.timelineOffset)}function P(n){for(var e=0,r=M.animations,t=r.length;e2||(b=Math.round(b*p)/p)),h.push(b)}var k=d.length;if(k){g=d[0];for(var O=0;O0&&(M.began=!0,I("begin")),!M.loopBegan&&M.currentTime>0&&(M.loopBegan=!0,I("loopBegin")),d<=r&&0!==M.currentTime&&P(0),(d>=l&&M.currentTime!==e||!e)&&P(e),d>r&&d=e&&(u=0,M.remaining&&!0!==M.remaining&&M.remaining--,M.remaining?(o=i,I("loopComplete"),M.loopBegan=!1,"alternate"===M.direction&&x()):(M.paused=!0,M.completed||(M.completed=!0,I("loopComplete"),I("complete"),!M.passThrough&&"Promise"in window&&(s(),f(M)))))}return M.reset=function(){var n=M.direction;M.passThrough=!1,M.currentTime=0,M.progress=0,M.paused=!0,M.began=!1,M.loopBegan=!1,M.changeBegan=!1,M.completed=!1,M.changeCompleted=!1,M.reversePlayback=!1,M.reversed="reverse"===n,M.remaining=M.loop,t=M.children;for(var e=c=t.length;e--;)M.children[e].reset();(M.reversed&&!0!==M.loop||"alternate"===n&&1===M.loop)&&M.remaining++,P(M.reversed?M.duration:0)},M.set=function(n,e){return R(n,e),M},M.tick=function(n){i=n,o||(o=i),T((i+(u-o))*rn.speed)},M.seek=function(n){T(O(n))},M.pause=function(){M.paused=!0,C()},M.play=function(){M.paused&&(M.completed&&M.reset(),M.paused=!1,_.push(M),C(),U||en())},M.reverse=function(){x(),C()},M.restart=function(){M.reset(),M.play()},M.reset(),M.autoplay&&M.play(),M}function tn(n,e){for(var r=e.length;r--;)M(n,e[r].animatable.target)&&e.splice(r,1)}return"undefined"!=typeof document&&document.addEventListener("visibilitychange",function(){document.hidden?(_.forEach(function(n){return n.pause()}),nn=_.slice(0),rn.running=_=[]):nn.forEach(function(n){return n.play()})}),rn.version="3.1.0",rn.speed=1,rn.running=_,rn.remove=function(n){for(var e=Z(n),r=_.length;r--;){var t=_[r],a=t.animations,o=t.children;tn(e,a);for(var u=o.length;u--;){var i=o[u],c=i.animations;tn(e,c),c.length||i.children.length||o.splice(u,1)}a.length||o.length||t.pause()}},rn.get=N,rn.set=R,rn.convertPx=I,rn.path=function(n,e){var r=i.str(n)?g(n)[0]:n,t=e||100;return function(n){return{property:n,el:r,svg:$(r),totalLength:q(r)*(t/100)}}},rn.setDashoffset=function(n){var e=q(n);return n.setAttribute("stroke-dasharray",e),e},rn.stagger=function(n,e){void 0===e&&(e={});var r=e.direction||"normal",t=e.easing?v(e.easing):null,a=e.grid,o=e.axis,u=e.from||0,c="first"===u,s="center"===u,f="last"===u,l=i.arr(n),d=l?parseFloat(n[0]):parseFloat(n),p=l?parseFloat(n[1]):0,h=C(l?n[1]:n)||0,g=e.start||0+(l?d:0),m=[],y=0;return function(n,e,i){if(c&&(u=0),s&&(u=(i-1)/2),f&&(u=i-1),!m.length){for(var v=0;v-1&&_.splice(o,1);for(var s=0;s]+>/gi;var htmlAttribsRegex=/\s?[a-z:]+(?:=['"][^'">]+['"])*/gi;var matches=html.match(htmlRegex);if(matches&&matches.length){matches=matches[0].match(htmlAttribsRegex);if(matches.length){matches.shift();matches.forEach(function(htmlAttrib){var attr=htmlAttrib.trim().split("=");if(attr.length===1){tmpEl.documentElement.setAttribute(attr[0],true)}else{tmpEl.documentElement.setAttribute(attr[0],attr[1].slice(1,-1))}})}}tmpEl.documentElement.innerHTML=html;this.log("load content",tmpEl.documentElement.attributes,tmpEl.documentElement.innerHTML.length);if(document.activeElement&&contains(document,this.options.selectors,document.activeElement)){try{document.activeElement.blur()}catch(e){}}this.switchSelectors(this.options.selectors,tmpEl,document,options)},abortRequest:require("./lib/abort-request"),doRequest:require("./lib/send-request"),handleResponse:require("./lib/proto/handle-response"),loadUrl:function(href,options){options=typeof options==="object"?extend({},this.options,options):clone(this.options);this.log("load href",href,options);this.abortRequest(this.request);trigger(document,"pjax:send",options);this.request=this.doRequest(href,options,this.handleResponse.bind(this))},executeScripts:function(elements){elements.forEach(function(element){var code=element.text||element.textContent||element.innerHTML||"";var script=document.createElement("script");if(element.id){script.id=element.id}if(element.className){script.className=element.className}if(element.type){script.type=element.type}if(element.src){script.src=element.src;script.async=false}if(element.dataset.pjax!==undefined){script.dataset.pjax=""}if(code!==""){script.appendChild(document.createTextNode(code))}element.parentNode.replaceChild(script,element)})},afterAllSwitches:function(){var autofocusEl=Array.prototype.slice.call(document.querySelectorAll("[autofocus]")).pop();if(autofocusEl&&document.activeElement!==autofocusEl){autofocusEl.focus()}this.options.selectors.forEach(function(selector){forEachEls(document.querySelectorAll(selector),function(el){if(el===0);})});var state=this.state;if(state.options.history){if(!window.history.state){this.lastUid=this.maxUid=newUid();window.history.replaceState({url:window.location.href,title:document.title,uid:this.maxUid,scrollPos:[0,0]},document.title)}this.lastUid=this.maxUid=newUid();window.history.pushState({url:state.href,title:state.options.title,uid:this.maxUid,scrollPos:[0,0]},state.options.title,state.href)}this.forEachSelectors(function(el){this.parseDOM(el)},this);trigger(document,"pjax:complete pjax:success",state.options);if(typeof state.options.analytics==="function"){state.options.analytics()}if(state.options.history){var a=document.createElement("a");a.href=this.state.href;if(a.hash){var name=a.hash.slice(1);name=decodeURIComponent(name);var curtop=0;var target=document.getElementById(name)||document.getElementsByName(name)[0];if(target){if(target.offsetParent){do{curtop+=target.offsetTop;target=target.offsetParent}while(target)}}window.scrollTo(0,curtop)}else if(state.options.scrollTo!==false){if(state.options.scrollTo.length>1){window.scrollTo(state.options.scrollTo[0],state.options.scrollTo[1])}else{window.scrollTo(0,state.options.scrollTo)}}}else if(state.options.scrollRestoration&&state.options.scrollPos){window.scrollTo(state.options.scrollPos[0],state.options.scrollPos[1])}this.state={numPendingSwitches:0,href:null,options:null}}};Pjax.isSupported=require("./lib/is-supported");if(Pjax.isSupported()){module.exports=Pjax}else{var stupidPjax=noop;for(var key in Pjax.prototype){if(Pjax.prototype.hasOwnProperty(key)&&typeof Pjax.prototype[key]==="function"){stupidPjax[key]=noop}}module.exports=stupidPjax}},{"./lib/abort-request":2,"./lib/events/on":3,"./lib/events/trigger":4,"./lib/foreach-els":5,"./lib/foreach-selectors":6,"./lib/is-supported":7,"./lib/parse-options":8,"./lib/proto/attach-form":9,"./lib/proto/attach-link":10,"./lib/proto/handle-response":11,"./lib/proto/log":12,"./lib/proto/parse-element":13,"./lib/send-request":14,"./lib/switches":16,"./lib/switches-selectors":15,"./lib/uniqueid":17,"./lib/util/clone":18,"./lib/util/contains":19,"./lib/util/extend":20,"./lib/util/noop":21}],2:[function(require,module,exports){var noop=require("./util/noop");module.exports=function(request){if(request&&request.readyState<4){request.onreadystatechange=noop;request.abort()}}},{"./util/noop":21}],3:[function(require,module,exports){var forEachEls=require("../foreach-els");module.exports=function(els,events,listener,useCapture){events=typeof events==="string"?events.split(" "):events;events.forEach(function(e){forEachEls(els,function(el){el.addEventListener(e,listener,useCapture)})})}},{"../foreach-els":5}],4:[function(require,module,exports){var forEachEls=require("../foreach-els");module.exports=function(els,events,opts){events=typeof events==="string"?events.split(" "):events;events.forEach(function(e){var event;event=document.createEvent("HTMLEvents");event.initEvent(e,true,true);event.eventName=e;if(opts){Object.keys(opts).forEach(function(key){event[key]=opts[key]})}forEachEls(els,function(el){var domFix=false;if(!el.parentNode&&el!==document&&el!==window){domFix=true;document.body.appendChild(el)}el.dispatchEvent(event);if(domFix){el.parentNode.removeChild(el)}})})}},{"../foreach-els":5}],5:[function(require,module,exports){module.exports=function(els,fn,context){if(els instanceof HTMLCollection||els instanceof NodeList||els instanceof Array){return Array.prototype.forEach.call(els,fn,context)}return fn.call(context,els)}},{}],6:[function(require,module,exports){var forEachEls=require("./foreach-els");module.exports=function(selectors,cb,context,DOMcontext){DOMcontext=DOMcontext||document;selectors.forEach(function(selector){forEachEls(DOMcontext.querySelectorAll(selector),cb,context)})}},{"./foreach-els":5}],7:[function(require,module,exports){module.exports=function(){return window.history&&window.history.pushState&&window.history.replaceState&&!navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/)}},{}],8:[function(require,module,exports){var defaultSwitches=require("./switches");module.exports=function(options){options=options||{};options.elements=options.elements||"a[href], form[action]";options.selectors=options.selectors||["title",".js-Pjax"];options.switches=options.switches||{};options.switchesOptions=options.switchesOptions||{};options.history=typeof options.history==="undefined"?true:options.history;options.analytics=typeof options.analytics==="function"||options.analytics===false?options.analytics:defaultAnalytics;options.scrollTo=typeof options.scrollTo==="undefined"?0:options.scrollTo;options.scrollRestoration=typeof options.scrollRestoration!=="undefined"?options.scrollRestoration:true;options.cacheBust=typeof options.cacheBust==="undefined"?true:options.cacheBust;options.debug=options.debug||false;options.timeout=options.timeout||0;options.currentUrlFullReload=typeof options.currentUrlFullReload==="undefined"?false:options.currentUrlFullReload;if(!options.switches.head){options.switches.head=defaultSwitches.switchElementsAlt}if(!options.switches.body){options.switches.body=defaultSwitches.switchElementsAlt}return options};function defaultAnalytics(){if(window._gaq){_gaq.push(["_trackPageview"])}if(window.ga){ga("send","pageview",{page:location.pathname,title:document.title})}}},{"./switches":16}],9:[function(require,module,exports){var on=require("../events/on");var clone=require("../util/clone");var attrState="data-pjax-state";var formAction=function(el,event){if(isDefaultPrevented(event)){return}var options=clone(this.options);options.requestOptions={requestUrl:el.getAttribute("action")||window.location.href,requestMethod:el.getAttribute("method")||"GET"};var virtLinkElement=document.createElement("a");virtLinkElement.setAttribute("href",options.requestOptions.requestUrl);var attrValue=checkIfShouldAbort(virtLinkElement,options);if(attrValue){el.setAttribute(attrState,attrValue);return}event.preventDefault();if(el.enctype==="multipart/form-data"){options.requestOptions.formData=new FormData(el)}else{options.requestOptions.requestParams=parseFormElements(el)}el.setAttribute(attrState,"submit");options.triggerElement=el;this.loadUrl(virtLinkElement.href,options)};function parseFormElements(el){var requestParams=[];var formElements=el.elements;for(var i=0;i1||event.metaKey||event.ctrlKey||event.shiftKey||event.altKey){return"modifier"}if(el.protocol!==window.location.protocol||el.host!==window.location.host){return"external"}if(el.hash&&el.href.replace(el.hash,"")===window.location.href.replace(location.hash,"")){return"anchor"}if(el.href===window.location.href.split("#")[0]+"#"){return"anchor-empty"}}var isDefaultPrevented=function(event){return event.defaultPrevented||event.returnValue===false};module.exports=function(el){var that=this;el.setAttribute(attrState,"");on(el,"click",function(event){linkAction.call(that,el,event)});on(el,"keyup",function(event){if(event.keyCode===13){linkAction.call(that,el,event)}}.bind(this))}},{"../events/on":3,"../util/clone":18}],11:[function(require,module,exports){var clone=require("../util/clone");var newUid=require("../uniqueid");var trigger=require("../events/trigger");module.exports=function(responseText,request,href,options){options=clone(options||this.options);options.request=request;if(responseText===false){trigger(document,"pjax:complete pjax:error",options);return}var currentState=window.history.state||{};window.history.replaceState({url:currentState.url||window.location.href,title:currentState.title||document.title,uid:currentState.uid||newUid(),scrollPos:[document.documentElement.scrollLeft||document.body.scrollLeft,document.documentElement.scrollTop||document.body.scrollTop]},document.title,window.location.href);var oldHref=href;if(request.responseURL){if(href!==request.responseURL){href=request.responseURL}}else if(request.getResponseHeader("X-PJAX-URL")){href=request.getResponseHeader("X-PJAX-URL")}else if(request.getResponseHeader("X-XHR-Redirected-To")){href=request.getResponseHeader("X-XHR-Redirected-To")}var a=document.createElement("a");a.href=oldHref;var oldHash=a.hash;a.href=href;if(oldHash&&!a.hash){a.hash=oldHash;href=a.href}this.state.href=href;this.state.options=options;try{this.loadContent(responseText,options)}catch(e){trigger(document,"pjax:error",options);if(!this.options.debug){if(console&&console.error){console.error("Pjax switch fail: ",e)}return this.latestChance(href)}else{throw e}}}},{"../events/trigger":4,"../uniqueid":17,"../util/clone":18}],12:[function(require,module,exports){module.exports=function(){if(this.options.debug&&console){if(typeof console.log==="function"){console.log.apply(console,arguments)}else if(console.log){console.log(arguments)}}}},{}],13:[function(require,module,exports){var attrState="data-pjax-state";module.exports=function(el){switch(el.tagName.toLowerCase()){case"a":if(!el.hasAttribute(attrState)){this.attachLink(el)}break;case"form":if(!el.hasAttribute(attrState)){this.attachForm(el)}break;default:throw"Pjax can only be applied on or submit"}}},{}],14:[function(require,module,exports){var updateQueryString=require("./util/update-query-string");module.exports=function(location,options,callback){options=options||{};var queryString;var requestOptions=options.requestOptions||{};var requestMethod=(requestOptions.requestMethod||"GET").toUpperCase();var requestParams=requestOptions.requestParams||null;var formData=requestOptions.formData||null;var requestPayload=null;var request=new XMLHttpRequest;var timeout=options.timeout||0;request.onreadystatechange=function(){if(request.readyState===4){if(request.status===200){callback(request.responseText,request,location,options)}else if(request.status!==0){callback(null,request,location,options)}}};request.onerror=function(e){console.log(e);callback(null,request,location,options)};request.ontimeout=function(){callback(null,request,location,options)};if(requestParams&&requestParams.length){queryString=requestParams.map(function(param){return param.name+"="+param.value}).join("&");switch(requestMethod){case"GET":location=location.split("?")[0];location+="?"+queryString;break;case"POST":requestPayload=queryString;break}}else if(formData){requestPayload=formData}if(options.cacheBust){location=updateQueryString(location,"t",Date.now())}request.open(requestMethod,location,true);request.timeout=timeout;request.setRequestHeader("X-Requested-With","XMLHttpRequest");request.setRequestHeader("X-PJAX","true");request.setRequestHeader("X-PJAX-Selectors",JSON.stringify(options.selectors));if(requestPayload&&requestMethod==="POST"&&!formData){request.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}request.send(requestPayload);return request}},{"./util/update-query-string":22}],15:[function(require,module,exports){var forEachEls=require("./foreach-els");var defaultSwitches=require("./switches");module.exports=function(switches,switchesOptions,selectors,fromEl,toEl,options){var switchesQueue=[];selectors.forEach(function(selector){var newEls=fromEl.querySelectorAll(selector);var oldEls=toEl.querySelectorAll(selector);if(this.log){this.log("Pjax switch",selector,newEls,oldEls)}if(newEls.length!==oldEls.length){throw"DOM doesn’t look the same on new loaded page: ’"+selector+"’ - new "+newEls.length+", old "+oldEls.length}forEachEls(newEls,function(newEl,i){var oldEl=oldEls[i];if(this.log){this.log("newEl",newEl,"oldEl",oldEl)}var callback=switches[selector]?switches[selector].bind(this,oldEl,newEl,options,switchesOptions[selector]):defaultSwitches.outerHTML.bind(this,oldEl,newEl,options);switchesQueue.push(callback)},this)},this);this.state.numPendingSwitches=switchesQueue.length;switchesQueue.forEach(function(queuedSwitch){queuedSwitch()})}},{"./foreach-els":5,"./switches":16}],16:[function(require,module,exports){var on=require("./events/on");module.exports={outerHTML:function(oldEl,newEl){oldEl.outerHTML=newEl.outerHTML;this.onSwitch()},innerHTML:function(oldEl,newEl){oldEl.innerHTML=newEl.innerHTML;if(newEl.className===""){oldEl.removeAttribute("class")}else{oldEl.className=newEl.className}this.onSwitch()},switchElementsAlt:function(oldEl,newEl){oldEl.innerHTML=newEl.innerHTML;if(newEl.hasAttributes()){var attrs=newEl.attributes;for(var i=0;i${text.substring(hit.position, end)}
    ` + prevEnd = end + }) + result += text.substring(prevEnd, slice.end) + return result + } + + const inputEventFunction = () => { + if (!isfetched) return + let searchText = searchInputDom.value.trim().toLowerCase() + let keywords = searchText.split(/[-\s]+/) + if (keywords.length > 1) { + keywords.push(searchText) + } + let resultItems = [] + if (searchText.length > 0) { + // Perform local searching + datas.forEach(({ title, content, url }) => { + let titleInLowerCase = title.toLowerCase() + let contentInLowerCase = content.toLowerCase() + let indexOfTitle = [] + let indexOfContent = [] + let searchTextCount = 0 + keywords.forEach((keyword) => { + indexOfTitle = indexOfTitle.concat(getIndexByWord(keyword, titleInLowerCase, false)) + indexOfContent = indexOfContent.concat(getIndexByWord(keyword, contentInLowerCase, false)) + }) + + // Show search results + if (indexOfTitle.length > 0 || indexOfContent.length > 0) { + let hitCount = indexOfTitle.length + indexOfContent.length + // Sort index by position of keyword + ;[indexOfTitle, indexOfContent].forEach((index) => { + index.sort((itemLeft, itemRight) => { + if (itemRight.position !== itemLeft.position) { + return itemRight.position - itemLeft.position + } + return itemLeft.word.length - itemRight.word.length + }) + }) + + let slicesOfTitle = [] + if (indexOfTitle.length !== 0) { + let tmp = mergeIntoSlice(0, title.length, indexOfTitle, searchText) + searchTextCount += tmp.searchTextCountInSlice + slicesOfTitle.push(tmp) + } + + let slicesOfContent = [] + while (indexOfContent.length !== 0) { + let item = indexOfContent[indexOfContent.length - 1] + let { position, word } = item + // Cut out 100 characters + let start = position - 20 + let end = position + 80 + if (start < 0) { + start = 0 + } + if (end < position + word.length) { + end = position + word.length + } + if (end > content.length) { + end = content.length + } + let tmp = mergeIntoSlice(start, end, indexOfContent, searchText) + searchTextCount += tmp.searchTextCountInSlice + slicesOfContent.push(tmp) + } + + // Sort slices in content by search text's count and hits' count + slicesOfContent.sort((sliceLeft, sliceRight) => { + if (sliceLeft.searchTextCount !== sliceRight.searchTextCount) { + return sliceRight.searchTextCount - sliceLeft.searchTextCount + } else if (sliceLeft.hits.length !== sliceRight.hits.length) { + return sliceRight.hits.length - sliceLeft.hits.length + } + return sliceLeft.start - sliceRight.start + }) + + // Select top N slices in content + let upperBound = parseInt( + KEEP.theme_config.local_search.top_n_per_article + ? KEEP.theme_config.local_search.top_n_per_article + : 1, + 10 + ) + if (upperBound >= 0) { + slicesOfContent = slicesOfContent.slice(0, upperBound) + } + + let resultItem = '' + + if (slicesOfTitle.length !== 0) { + resultItem += `
  • ${highlightKeyword( + title, + slicesOfTitle[0] + )}` + } else { + resultItem += `
  • ${title}` + } + + slicesOfContent.forEach((slice) => { + resultItem += `

    ${highlightKeyword( + content, + slice + )}...

    ` + }) + + resultItem += '
  • ' + resultItems.push({ + item: resultItem, + id: resultItems.length, + hitCount, + searchTextCount + }) + } + }) + } + if (keywords.length === 1 && keywords[0] === '') { + resultContent.innerHTML = '
    ' + } else if (resultItems.length === 0) { + resultContent.innerHTML = '
    ' + } else { + resultItems.sort((resultLeft, resultRight) => { + if (resultLeft.searchTextCount !== resultRight.searchTextCount) { + return resultRight.searchTextCount - resultLeft.searchTextCount + } else if (resultLeft.hitCount !== resultRight.hitCount) { + return resultRight.hitCount - resultLeft.hitCount + } + return resultRight.id - resultLeft.id + }) + let searchResultList = '
      ' + resultItems.forEach((result) => { + searchResultList += result.item + }) + searchResultList += '
    ' + resultContent.innerHTML = searchResultList + window.pjax && window.pjax.refresh(resultContent) + } + } + + const fetchData = () => { + fetch(KEEP.hexo_config.root + searchPath) + .then((response) => response.text()) + .then((res) => { + // Get the contents from search data + isfetched = true + datas = isXml + ? [...new DOMParser().parseFromString(res, 'text/xml').querySelectorAll('entry')].map( + (element) => { + return { + title: element.querySelector('title').textContent, + content: element.querySelector('content').textContent, + url: element.querySelector('url').textContent + } + } + ) + : JSON.parse(res) + // Only match articles with not empty titles + datas = datas + .filter((data) => data.title) + .map((data) => { + data.title = data.title.trim() + data.content = data.content ? data.content.trim().replace(/<[^>]+>/g, '') : '' + data.url = decodeURIComponent(data.url).replace(/\/{2,}/g, '/') + return data + }) + // Remove loading animation + const noResultDom = document.querySelector('#no-result') + noResultDom && (noResultDom.innerHTML = '') + }) + } + + if (KEEP.theme_config.local_search.preload) { + fetchData() + } + + if (searchInputDom) { + searchInputDom.addEventListener('input', inputEventFunction) + } + + // Handle and trigger popup window + document.querySelectorAll('.search-popup-trigger').forEach((element) => { + element.addEventListener('click', () => { + document.body.style.overflow = 'hidden' + document.querySelector('.search-pop-overlay').classList.add('active') + setTimeout(() => searchInputDom.focus(), 500) + if (!isfetched) fetchData() + }) + }) + + // Monitor main search box + const onPopupClose = () => { + document.body.style.overflow = '' + document.querySelector('.search-pop-overlay').classList.remove('active') + } + + document.querySelector('.search-pop-overlay').addEventListener('click', (event) => { + if (event.target === document.querySelector('.search-pop-overlay')) { + onPopupClose() + } + }) + document.querySelector('.search-input-field-pre').addEventListener('click', () => { + searchInputDom.value = '' + searchInputDom.focus() + inputEventFunction() + }) + document.querySelector('.close-popup-btn').addEventListener('click', onPopupClose) + window.addEventListener('pjax:success', onPopupClose) + window.addEventListener('keyup', (event) => { + if (event.key === 'Escape') { + onPopupClose() + } + }) +} diff --git a/js/main.js b/js/main.js new file mode 100644 index 000000000..91842577a --- /dev/null +++ b/js/main.js @@ -0,0 +1,76 @@ +/* global KEEP */ + + + +window.addEventListener('DOMContentLoaded', () => { + const { version, local_search, code_block, code_copy, lazyload } = KEEP.theme_config + + KEEP.themeInfo = { + theme: `Keep v${version}`, + author: 'XPoet', + repository: 'https://github.com/XPoet/hexo-theme-keep' + } + + KEEP.localStorageKey = 'KEEP-THEME-STATUS' + + KEEP.styleStatus = { + isExpandPageWidth: false, + isDark: false, + fontSizeLevel: 0, + isShowToc: true + } + + // print theme base info + KEEP.printThemeInfo = () => { + console.log( + `\n %c ${KEEP.themeInfo.theme} %c ${KEEP.themeInfo.repository} \n`, + `color: #fadfa3; background: #333; padding: 6px 0;`, + `padding: 6px 0;` + ) + } + + // set styleStatus to localStorage + KEEP.setStyleStatus = () => { + localStorage.setItem(KEEP.localStorageKey, JSON.stringify(KEEP.styleStatus)) + } + + // get styleStatus from localStorage + KEEP.getStyleStatus = () => { + let temp = localStorage.getItem(KEEP.localStorageKey) + if (temp) { + temp = JSON.parse(temp) + for (let key in KEEP.styleStatus) { + KEEP.styleStatus[key] = temp[key] + } + return temp + } else { + return null + } + } + + KEEP.refresh = () => { + KEEP.initUtils() + KEEP.initHeaderShrink() + KEEP.initModeToggle() + KEEP.initBack2Top() + + if (local_search?.enable === true) { + KEEP.initLocalSearch() + } + + if ( + code_block?.tools?.enable === true || + code_block?.enable === true || + code_copy?.enable === true + ) { + KEEP.initCodeBlockTools() + } + + if (lazyload?.enable === true) { + KEEP.initLazyLoad() + } + } + + KEEP.printThemeInfo() + KEEP.refresh() +}) diff --git a/js/post-helper.js b/js/post-helper.js new file mode 100644 index 000000000..761e56222 --- /dev/null +++ b/js/post-helper.js @@ -0,0 +1,205 @@ +/* global KEEP */ + +function initToggleShowToc() { + KEEP.utils.postHelper = { + postPageContainerDom: document.querySelector('.post-page-container'), + toggleShowTocBtnDom: document.querySelector('.toggle-show-toc'), + toggleShowTocIcon: document.querySelector('.toggle-show-toc i'), + mainContentDom: document.querySelector('.main-content'), + postToolsDom: document.querySelector('.post-tools'), + goToCommentsDom: document.querySelector('.post-tools .go-to-comments'), + + isShowToc: false, + + initToggleToc() { + if(!this.toggleShowTocBtnDom){ + console.log("no toc"); + } + this.toggleShowTocBtnDom && + this.toggleShowTocBtnDom.addEventListener('click', () => { + this.isShowToc = !this.isShowToc + KEEP.styleStatus.isShowToc = this.isShowToc + KEEP.setStyleStatus() + this.handleToggleToc(this.isShowToc) + }) + }, + + handleToggleToc(isOpen) { + if (isOpen) { + this.postPageContainerDom.classList.add('show-toc') + document.body.classList.add('has-toc') + } else { + this.postPageContainerDom.classList.remove('show-toc') + document.body.classList.remove('has-toc') + } + + setTimeout(() => { + this.setPostToolsLeft() + }, 120) + }, + + hasToc(isOpen) { + this.toggleShowTocBtnDom.style.display = 'flex' + this.isShowToc = isOpen + this.handleToggleToc(isOpen) + }, + + setPostToolsLeft(mcw) { + const mainContainerWidth = mcw + ? mcw + : this.mainContentDom.getBoundingClientRect().width.toFixed(0) + let offsetX = 5 + + if (window.innerWidth <= 800) { + offsetX = 3 + } + + this.postToolsDom.style.opacity = `1` + this.postToolsDom.style.left = `calc((100vw - ${mainContainerWidth}px) / 2 - ${offsetX}rem)` + }, + + initSetPostToolsLeft() { + setTimeout(() => { + this.setPostToolsLeft() + }, 150) + + window.addEventListener('resize', () => { + this.setPostToolsLeft() + }) + }, + + // go comment anchor + goToComments() { + const commentsAnchor = document.querySelector('#comments-anchor') + if (this.goToCommentsDom && commentsAnchor) { + this.goToCommentsDom.addEventListener('click', (event) => { + event.preventDefault() + let winScrollY = window.scrollY + winScrollY = winScrollY === 0 ? -20 : winScrollY + const offset = commentsAnchor.getBoundingClientRect().top + winScrollY + window.anime({ + targets: document.scrollingElement, + duration: 300, + easing: 'linear', + scrollTop: offset, + complete: () => { + setTimeout(() => { + KEEP.utils.pageTop_dom.classList.add('hide') + }, 150) + } + }) + }) + } + }, + + // watch comments count + watchPostCommentsCount() { + const commentsCountDom = this.postToolsDom.querySelector('.post-comments-count') + if (!commentsCountDom) return + const config = { attributes: true, childList: true } + + const callback = function (mutationsList) { + mutationsList.forEach((item) => { + if (item.type === 'childList') { + const count = Number(item.target.innerHTML) + if (count > 0) { + commentsCountDom.style.display = 'flex' + if (count > 99) { + commentsCountDom.innerHTML = '99+' + observer.disconnect() + } + } + } + }) + } + + const observer = new MutationObserver(callback) + observer.observe(commentsCountDom, config) + }, + + // set post link + initSetPostLink() { + const postLinkContentDom = document.querySelector( + '.copyright-info-content .post-link .content' + ) + postLinkContentDom && (postLinkContentDom.innerHTML = decodeURI(window.location.href)) + }, + + // copy copyright info + copyCopyrightInfo() { + const cicDom = document.querySelector('.copyright-info-content') + const copyDom = document.querySelector('.copy-copyright-info') + const copyIcon = copyDom.querySelector('i') + + const ccLang = KEEP.language_copy_copyright + const colon = KEEP.hexo_config.language === 'en' ? ': ' : ':' + + let isCopied = false + + const setCopyDomContent = (class1, class2, content, copied) => { + if (copyIcon) { + copyIcon.classList.remove(class1) + copyIcon.classList.add(class2) + } + const tooltipDom = copyDom.querySelector('.tooltip-content') + tooltipDom && (tooltipDom.innerHTML = content) + isCopied = copied + } + + copyDom.addEventListener('click', () => { + if (!isCopied) { + const author = cicDom.querySelector('.post-author .content').innerHTML + const link = cicDom.querySelector('.post-link .content').innerHTML + const tgtTxt = `${ccLang.author}${colon}${author}\n${ccLang.link}${colon}${link}` + navigator.clipboard.writeText(tgtTxt).then(() => { + setCopyDomContent('fa-copy', 'fa-check', ccLang.copied, true) + }) + } + }) + + copyDom.addEventListener('mouseleave', () => { + setTimeout(() => { + setCopyDomContent('fa-check', 'fa-copy', ccLang.copy, false) + }, 500) + }) + }, + + // set article aging tips + setArticleAgingDays() { + const agingTipsDom = document.querySelector('.article-content .article-aging-tips') + if (agingTipsDom) { + const daysDom = agingTipsDom.querySelector('.days') + const nowTimestamp = Date.now() + const tmpTimeLength = 24 * 60 * 60 * 1000 + const agingDaysTimestamp = (agingTipsDom.dataset?.agingDays || 30) * tmpTimeLength + const postUpdateTimestamp = new Date(agingTipsDom.dataset.updateDate).getTime() + const timeDifference = nowTimestamp - postUpdateTimestamp + const timeDifferenceDays = (timeDifference / tmpTimeLength).toFixed(0) + if (timeDifference >= agingDaysTimestamp) { + daysDom.innerHTML = timeDifferenceDays + agingTipsDom.style.display = 'block' + } + } + } + } + KEEP.utils.postHelper.initSetPostToolsLeft() + KEEP.utils.postHelper.setArticleAgingDays() + + if (KEEP.theme_config.toc?.enable === true) { + KEEP.utils.postHelper.initToggleToc() + } + if (KEEP.theme_config.comment?.enable === true) { + KEEP.utils.postHelper.goToComments() + KEEP.utils.postHelper.watchPostCommentsCount() + } + if (KEEP.theme_config.post?.copyright_info === true) { + KEEP.utils.postHelper.initSetPostLink() + KEEP.utils.postHelper.copyCopyrightInfo() + } +} + +if (KEEP.theme_config.pjax?.enable === true && KEEP.utils) { + initToggleShowToc() +} else { + window.addEventListener('DOMContentLoaded', initToggleShowToc) +} diff --git a/js/toc.js b/js/toc.js new file mode 100644 index 000000000..cee2c1d3f --- /dev/null +++ b/js/toc.js @@ -0,0 +1,114 @@ +/* global KEEP */ + +function initTOC() { + const postPageContainerDom = document.querySelector('.post-page-container') + const tocContentContainer = document.querySelector('.toc-content-container') + + if (KEEP.utils.hasToc) { + KEEP.utils = { + ...KEEP.utils, + + findActiveIndexByTOC() { + if (!Array.isArray(KEEP.utils.sections)) return + let index = KEEP.utils.sections.findIndex((element) => { + return element && element.getBoundingClientRect().top - 20 > 0 + }) + if (index === -1) { + index = KEEP.utils.sections.length - 1 + } else if (index > 0) { + index-- + } + this.activateNavByIndex(index) + }, + + registerSidebarTOC() { + KEEP.utils.sections = [...document.querySelectorAll('.post-toc li a.nav-link')].map( + (element) => { + const target = document.getElementById( + decodeURI(element.getAttribute('href')).replace('#', '') + ) + element.addEventListener('click', (event) => { + event.preventDefault() + let winScrollY = window.scrollY + winScrollY = winScrollY === 0 ? -20 : winScrollY + const offset = target.getBoundingClientRect().top + winScrollY + window.anime({ + targets: document.scrollingElement, + duration: 500, + easing: 'linear', + scrollTop: offset - 10, + complete: () => { + history.pushState(null, document.title, element.href) + setTimeout(() => { + KEEP.utils.pageTop_dom.classList.add('hide') + }, 150) + } + }) + }) + return target + } + ) + }, + + activateNavByIndex(index) { + const target = document.querySelectorAll('.post-toc li a.nav-link')[index] + if (!target || target.classList.contains('active-current')) return + + document.querySelectorAll('.post-toc .active').forEach((element) => { + element.classList.remove('active', 'active-current') + }) + target.classList.add('active', 'active-current') + let parent = target.parentNode + while (!parent.matches('.post-toc')) { + if (parent.matches('li')) parent.classList.add('active') + parent = parent.parentNode + } + // Scrolling to center active TOC element if TOC content is taller than viewport. + const tocElement = document.querySelector('.post-toc-wrap') + window.anime({ + targets: tocElement, + duration: 200, + easing: 'linear', + scrollTop: + tocElement.scrollTop - + tocElement.offsetHeight / 2 + + target.getBoundingClientRect().top - + tocElement.getBoundingClientRect().top + }) + }, + + handleShowWhenHasToc() { + const openHandle = () => { + const styleStatus = KEEP.getStyleStatus() + const key = 'isShowToc' + if (styleStatus && styleStatus.hasOwnProperty(key)) { + KEEP.utils.postHelper.hasToc(styleStatus[key]) + } else { + KEEP.utils.postHelper.hasToc(true) + } + } + + const initOpenKey = 'init_open' + + if (KEEP.theme_config.toc.hasOwnProperty(initOpenKey)) { + KEEP.theme_config.toc[initOpenKey] ? openHandle() : KEEP.utils.postHelper.hasToc(false) + } else { + openHandle() + } + } + } + + KEEP.utils.handleShowWhenHasToc() + KEEP.utils.registerSidebarTOC() + } else { + if (tocContentContainer && postPageContainerDom) { + postPageContainerDom.removeChild(tocContentContainer) + } + } +} + +if (KEEP.theme_config.pjax.enable === true && KEEP.utils) { + initTOC() +} else { + window.addEventListener('DOMContentLoaded', initTOC) +} diff --git a/js/utils.js b/js/utils.js new file mode 100644 index 000000000..2b72f96c3 --- /dev/null +++ b/js/utils.js @@ -0,0 +1,461 @@ +/* global KEEP */ + +KEEP.initUtils = () => { + KEEP.utils = { + html_root_dom: document.querySelector('html'), + pageContainer_dom: document.querySelector('.page-container'), + pageTop_dom: document.querySelector('.page-main-content-top'), + firstScreen_dom: document.querySelector('.first-screen-container'), + scrollProgressBar_dom: document.querySelector('.scroll-progress-bar'), + pjaxProgressBar_dom: document.querySelector('.pjax-progress-bar'), + pjaxProgressIcon_dom: document.querySelector('.pjax-progress-icon'), + back2TopButton_dom: document.querySelector('.tool-scroll-to-top'), + headerWrapper_dom: document.querySelector('.header-wrapper'), + + innerHeight: window.innerHeight, + pjaxProgressBarTimer: null, + prevScrollValue: 0, + fontSizeLevel: 0, + isHasScrollProgressBar: false, + isHasScrollPercent: false, + isHeaderTransparent: false, + hasToc: false, + + initData() { + const { scroll, first_screen } = KEEP.theme_config.style + this.isHasScrollProgressBar = scroll.progress_bar === true + this.isHasScrollPercent = scroll.percent === true + const { enable, header_transparent } = first_screen + this.isHeaderTransparent = enable === true && header_transparent === true + }, + + // Scroll Style Handle + styleHandleWhenScroll() { + const scrollTop = document.body.scrollTop || document.documentElement.scrollTop + const scrollHeight = document.body.scrollHeight || document.documentElement.scrollHeight + const clientHeight = window.innerHeight || document.documentElement.clientHeight + + const percent = Math.round((scrollTop / (scrollHeight - clientHeight)) * 100) + + if (this.isHasScrollProgressBar) { + const ProgressPercent = ((scrollTop / (scrollHeight - clientHeight)) * 100).toFixed(3) + this.scrollProgressBar_dom.style.visibility = percent === 0 ? 'hidden' : 'visible' + this.scrollProgressBar_dom.style.width = `${ProgressPercent}%` + } + + if (this.isHasScrollPercent) { + const percent_dom = this.back2TopButton_dom.querySelector('.percent') + if (percent === 0 || percent === undefined) { + this.back2TopButton_dom.classList.remove('show') + } else { + this.back2TopButton_dom.classList.add('show') + percent_dom.innerHTML = percent.toFixed(0) + } + } + + // hide header handle + if (scrollTop > this.prevScrollValue && scrollTop > this.innerHeight) { + this.pageTop_dom.classList.add('hide') + if (this.isHeaderTransparent) { + this.headerWrapper_dom.classList.remove('transparent-1', 'transparent-2') + } + } else { + this.pageTop_dom.classList.remove('hide') + if (this.isHeaderTransparent) { + if (scrollTop <= this.headerWrapper_dom.getBoundingClientRect().height) { + this.headerWrapper_dom.classList.remove('transparent-2') + this.headerWrapper_dom.classList.add('transparent-1') + } else if (scrollTop < this.innerHeight) { + this.headerWrapper_dom.classList.add('transparent-2') + } + } + } + this.prevScrollValue = scrollTop + }, + + // register window scroll event + registerWindowScroll() { + window.addEventListener('scroll', () => { + // style handle when scroll + this.styleHandleWhenScroll() + + // TOC scroll handle + if (KEEP.theme_config.toc.enable && KEEP.utils.hasOwnProperty('findActiveIndexByTOC')) { + KEEP.utils.findActiveIndexByTOC() + } + + // header shrink + KEEP.utils.headerShrink.headerShrink() + }) + }, + + // toggle show tools list + toggleShowToolsList() { + const sideToolsListDom = document.querySelector('.side-tools-list') + const toggleShowToolsDom = document.querySelector('.tool-toggle-show') + toggleShowToolsDom.addEventListener('click', (e) => { + sideToolsListDom.classList.toggle('show') + e.stopPropagation() + }) + sideToolsListDom.querySelectorAll('.tools-item').forEach((item) => { + item.addEventListener('click', (e) => { + e.stopPropagation() + }) + }) + document.addEventListener('click', () => { + sideToolsListDom.classList.contains('show') && sideToolsListDom.classList.remove('show') + }) + }, + + // global font adjust + globalFontAdjust() { + const fontSize = document.defaultView.getComputedStyle(document.body).fontSize + const fs = parseFloat(fontSize) + + const initFontSize = () => { + const styleStatus = KEEP.getStyleStatus() + if (styleStatus) { + this.fontSizeLevel = styleStatus.fontSizeLevel + setFontSize(this.fontSizeLevel) + } + } + + const setFontSize = (fontSizeLevel) => { + this.html_root_dom.style.fontSize = `${fs * (1 + fontSizeLevel * 0.05)}px` + KEEP.styleStatus.fontSizeLevel = fontSizeLevel + KEEP.setStyleStatus() + } + + initFontSize() + + document.querySelector('.tool-font-adjust-plus').addEventListener('click', () => { + if (this.fontSizeLevel === 5) return + this.fontSizeLevel++ + setFontSize(this.fontSizeLevel) + }) + + document.querySelector('.tool-font-adjust-minus').addEventListener('click', () => { + if (this.fontSizeLevel <= 0) return + this.fontSizeLevel-- + setFontSize(this.fontSizeLevel) + }) + }, + + // get dom element height + getElementHeight(selectors) { + const dom = document.querySelector(selectors) + return dom ? dom.getBoundingClientRect().height : 0 + }, + + // init has TOC + initHasToc() { + const tocNavDoms = document.querySelectorAll('.post-toc-wrap .post-toc li') + if (tocNavDoms.length > 0) { + this.hasToc = true + document.body.classList.add('has-toc') + } else { + this.hasToc = false + document.body.classList.remove('has-toc') + } + }, + + // init page height handle + initPageHeightHandle() { + if (this.firstScreen_dom) return + const temp_h1 = this.getElementHeight('.page-main-content-top') + const temp_h2 = this.getElementHeight('.page-main-content-middle') + const temp_h3 = this.getElementHeight('.page-main-content-bottom') + const allDomHeight = temp_h1 + temp_h2 + temp_h3 + const innerHeight = window.innerHeight + const pb_dom = document.querySelector('.page-main-content-bottom') + if (allDomHeight < innerHeight) { + const marginTopValue = Math.floor(innerHeight - allDomHeight) + if (marginTopValue > 0) { + pb_dom.style.marginTop = `${marginTopValue - 2}px` + } + } + }, + + // zoom in image + zoomInImage() { + let SIDE_GAP = 40 + let isZoomIn = false + let curWinScrollY = 0 + let selectedImgDom = null + const imgDomList = document.querySelectorAll('.keep-markdown-body img') + const zoomInImgMask = document.querySelector('.zoom-in-image-mask') + const zoomInImg = zoomInImgMask.querySelector('.zoom-in-image') + + const zoomOut = () => { + if (isZoomIn) { + isZoomIn = false + curWinScrollY = 0 + zoomInImg && (zoomInImg.style.transform = `scale(1)`) + zoomInImgMask && zoomInImgMask.classList.remove('show') + setTimeout(() => { + selectedImgDom && selectedImgDom.classList.remove('hide') + }, 300) + } + } + + const zoomOutHandle = () => { + zoomInImgMask && + zoomInImgMask.addEventListener('click', () => { + zoomOut() + }) + + document.addEventListener('scroll', () => { + if (isZoomIn && Math.abs(curWinScrollY - window.scrollY) >= 50) { + zoomOut() + } + }) + } + + const setSideGap = () => { + const w = document.body.offsetWidth + if (w <= 500) { + SIDE_GAP = 10 + } else if (w <= 800) { + SIDE_GAP = 20 + } else { + SIDE_GAP = 40 + } + } + + if (imgDomList.length) { + zoomOutHandle() + imgDomList.forEach((img) => { + img.addEventListener('click', () => { + curWinScrollY = window.scrollY + isZoomIn = !isZoomIn + setSideGap() + zoomInImg.setAttribute('src', img.getAttribute('src')) + selectedImgDom = img + if (isZoomIn) { + const imgRect = selectedImgDom.getBoundingClientRect() + const imgW = imgRect.width + const imgH = imgRect.height + const imgL = imgRect.left + const imgT = imgRect.top + const winW = document.body.offsetWidth - SIDE_GAP * 2 + const winH = document.body.offsetHeight - SIDE_GAP * 2 + const scaleX = winW / imgW + const scaleY = winH / imgH + const scale = (scaleX < scaleY ? scaleX : scaleY) || 1 + const translateX = winW / 2 - (imgRect.x + imgW / 2) + SIDE_GAP + const translateY = winH / 2 - (imgRect.y + imgH / 2) + SIDE_GAP + + selectedImgDom.classList.add('hide') + zoomInImgMask.classList.add('show') + zoomInImg.style.top = imgT + 'px' + zoomInImg.style.left = imgL + 'px' + zoomInImg.style.width = imgW + 'px' + zoomInImg.style.height = imgH + 'px' + zoomInImg.style.transform = `translateX(${translateX}px) translateY(${translateY}px) scale(${scale}) ` + } + }) + }) + } + }, + + // set how long ago language + setHowLongAgoLanguage(p1, p2) { + return p2.replace(/%s/g, p1) + }, + + getHowLongAgo(timestamp) { + const lang = KEEP.language_ago + const __Y = Math.floor(timestamp / (60 * 60 * 24 * 30) / 12) + const __M = Math.floor(timestamp / (60 * 60 * 24 * 30)) + const __W = Math.floor(timestamp / (60 * 60 * 24) / 7) + const __d = Math.floor(timestamp / (60 * 60 * 24)) + const __h = Math.floor((timestamp / (60 * 60)) % 24) + const __m = Math.floor((timestamp / 60) % 60) + const __s = Math.floor(timestamp % 60) + + if (__Y > 0) { + return this.setHowLongAgoLanguage(__Y, lang.year) + } else if (__M > 0) { + return this.setHowLongAgoLanguage(__M, lang.month) + } else if (__W > 0) { + return this.setHowLongAgoLanguage(__W, lang.week) + } else if (__d > 0) { + return this.setHowLongAgoLanguage(__d, lang.day) + } else if (__h > 0) { + return this.setHowLongAgoLanguage(__h, lang.hour) + } else if (__m > 0) { + return this.setHowLongAgoLanguage(__m, lang.minute) + } else if (__s > 0) { + return this.setHowLongAgoLanguage(__s, lang.second) + } + }, + + setHowLongAgoInHome() { + const post = document.querySelectorAll('.home-article-meta-info .home-article-date') + post && + post.forEach((v) => { + const nowDate = Date.now() + const postDate = new Date(v.dataset.updated).getTime() + v.innerHTML = this.getHowLongAgo(Math.floor((nowDate - postDate) / 1000)) + }) + }, + + // loading progress bar start + pjaxProgressBarStart() { + this.pjaxProgressBarTimer && clearInterval(this.pjaxProgressBarTimer) + if (this.isHasScrollProgressBar) { + this.scrollProgressBar_dom.classList.add('hide') + } + + this.pjaxProgressBar_dom.style.width = '0' + this.pjaxProgressIcon_dom.classList.add('show') + + let width = 1 + const maxWidth = 99 + + this.pjaxProgressBar_dom.classList.add('show') + this.pjaxProgressBar_dom.style.width = width + '%' + + this.pjaxProgressBarTimer = setInterval(() => { + width += 5 + if (width > maxWidth) width = maxWidth + this.pjaxProgressBar_dom.style.width = width + '%' + }, 100) + }, + + // loading progress bar end + pjaxProgressBarEnd() { + this.pjaxProgressBarTimer && clearInterval(this.pjaxProgressBarTimer) + this.pjaxProgressBar_dom.style.width = '100%' + + const temp_1 = setTimeout(() => { + this.pjaxProgressBar_dom.classList.remove('show') + this.pjaxProgressIcon_dom.classList.remove('show') + + if (this.isHasScrollProgressBar) { + this.scrollProgressBar_dom.classList.remove('hide') + } + + const temp_2 = setTimeout(() => { + this.pjaxProgressBar_dom.style.width = '0' + clearTimeout(temp_1), clearTimeout(temp_2) + }, 200) + }, 200) + }, + + // insert tooltip content dom + insertTooltipContent() { + const init = () => { + // tooltip + document.querySelectorAll('.tooltip').forEach((element) => { + const { content, offsetX, offsetY } = element.dataset + + let style = '' + let sTop = '' + let sLeft = '' + if (offsetX) { + sTop = `left: ${offsetX};` + } + if (offsetY) { + sLeft = `top: ${offsetY};` + } + if (offsetX || offsetY) { + style = ` style="${sLeft}${sTop}"` + } + + if (content) { + element.insertAdjacentHTML( + 'afterbegin', + `${content}` + ) + } + }) + + // tooltip-img + const imgsSet = {} + + const toggleShowImg = (dom, nameIdx) => { + document.addEventListener('click', () => { + if (imgsSet[nameIdx].isShowImg) { + dom.classList.remove('show-img') + imgsSet[nameIdx].isShowImg = false + } + }) + } + + const loadImg = (img, imgLoaded) => { + const temp = new Image() + const { src } = img.dataset + temp.src = src + temp.onload = () => { + img.src = src + img.removeAttribute('lazyload') + imgLoaded = true + } + } + + document.querySelectorAll('.tooltip-img').forEach((dom, idx) => { + const { imgUrl, name } = dom.dataset + if (imgUrl) { + const imgDomClass = `tooltip-img-${name}` + const nameIdx = `${name}_${idx}` + const imgDom = `${name}` + const imgTooltipBox = `
    ${imgDom}
    ` + + imgsSet[nameIdx] = { + imgLoaded: false, + isShowImg: false + } + + dom.insertAdjacentHTML('afterbegin', imgTooltipBox) + dom.addEventListener('click', (e) => { + if (!imgsSet[nameIdx].imgLoaded) { + loadImg( + document.querySelector(`.tooltip-img-box img.${imgDomClass}`), + imgsSet[nameIdx].imgLoaded + ) + } + imgsSet[nameIdx].isShowImg = !imgsSet[nameIdx].isShowImg + dom.classList.toggle('show-img') + e.stopPropagation() + }) + + toggleShowImg(dom, nameIdx) + } + }) + } + setTimeout(() => { + init() + }, 1000) + } + } + + + + // init data + KEEP.utils.initData() + + // init scroll + KEEP.utils.registerWindowScroll() + + // toggle show tools list + KEEP.utils.toggleShowToolsList() + + // global font adjust + KEEP.utils.globalFontAdjust() + + // init page height handle + KEEP.utils.initPageHeightHandle() + + // check whether TOC exists + KEEP.utils.initHasToc() + + // big image viewer handle + KEEP.utils.zoomInImage() + + // set how long age in home article block + KEEP.utils.setHowLongAgoInHome() + + // insert tooltip content dom + KEEP.utils.insertTooltipContent() +} diff --git a/links/index.html b/links/index.html new file mode 100644 index 000000000..d6313e84c --- /dev/null +++ b/links/index.html @@ -0,0 +1,451 @@ + + + + + + + + + + + + 友链 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + +
    +
    + + + + +
    + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/page/2/index.html b/page/2/index.html new file mode 100644 index 000000000..02524abfc --- /dev/null +++ b/page/2/index.html @@ -0,0 +1,1108 @@ + + + + + + + + + + + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    + + +
    +
    + + + + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/page/3/index.html b/page/3/index.html new file mode 100644 index 000000000..409459aa1 --- /dev/null +++ b/page/3/index.html @@ -0,0 +1,1150 @@ + + + + + + + + + + + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
      + +
    • + + + +

      + + OpenGL-2 基础 + +

      + +
      + +
      +

      着色器需要用特定的语言编写,GLSL是一种类C的语言,专门用来写着色器程序。

      +
      +

      程序结构:

      +
        +
      1. 声明版本
      2. +
      3. 输入和输出变量
      4. +
      5. uniform和main函数
      6. +
      + +
      + + + +
    • + +
    • + + + +

      + + 基于Win32的OpenGL3.3 + +

      + +
      + +

      在Win32的基础上,使用OpenGL v3.3,单个cpp文件完成:

      + +
      + + + +
    • + +
    • + + + +

      + + 基于Win32的OpenGL1.0 + +

      + +
      + +

      使用win32原生API实现OpenGL,可以取代glut等第三方库。

      +

      引自此博客

      + +
      + + + +
    • + +
    • + + + +

      + + 使用xmake构建c++项目 + +

      + +
      + +

      image

      +

      接受新的事物是不容易的,这意味要面临诸多陌生和不习惯,但xmake太简单易用了,从此cmake是路人。

      + +
      + + + +
    • + +
    • + + + +

      + + Windows命令行使用CMake + +

      + +
      + +

      使用CMake命令行构建一个小工程

      编辑main.cpp

      +
      #include <iostream>
      int main() {
      std::cout << "Hello, Windows!\n";
      return 0;
      }
      + +

      编辑CMakeLists.txt

      +
      cmake_minimum_required(VERSION 3.5.1)
      project(win32 VERSION 0.1.0)
      set(CMAKE_CXX_STANDARD 20)
      include(CTest)
      enable_testing()

      set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
      set(CMAKE_BUILD_TYPE Debug)

      include_directories(includes)
      add_executable(win32 main.cpp)

      set(CPACK_PROJECT_NAME ${PROJECT_NAME})
      set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
      include(CPack)
      + +
      + + + +
    • + +
    • + + + +

      + + VS code 安装插件 lldb 调试 CPP 程序 + +

      + +
      + +

      VS code 安装插件 CodeLLDB 时,需要下载一个包,vadimcn/codelldb,即使有代理,也难以自动完成。

      + +
      + + + +
    • + +
    • + + + +

      + + OpenGL-1 初识 + +

      + +
      + +

      OpenGL本身是一种规范,只是规定了一些应有的函数和参数,没有任何实现(实现由第三方库完成,如glfw、glew).

      +image + +
      +

      本文之所以放在[编程]->[框架]的分类,是因为本文主要内容是用OpenGL规范实现的库的使用,而非OpenGL规范本身

      +
      +

      图形渲染管线是实时渲染的核心组件。渲染管线的功能是通过给定虚拟相机、3D场景物体以及光源等场景要素来产生或者渲染一副2D的图像。渲染管线是实时渲染的重要工具,主要包括两个功能:一是将物体3D坐标转变为屏幕空间2D坐标,二是为屏幕每个像素点进行着色。

      +

      渲染管线的一般流程分别是:顶点数据的输入、顶点着色器、曲面细分过程、几何着色器、图元组装、裁剪剔除、光栅化、片段着色器以及混合测试

      + +
      + + + +
    • + +
    • + + + +

      + + Vim 使用 coc-nvim 的 coc-clangd 关闭参数提示 + +

      + +
      + +

      在Vim中使用Coc-nvim提供的coc-clangd,会默认开启Inlay-hint,也即如图所示的参数提示,它可以帮助我们快速分辨参数,但有时候也会影响代码的整洁和对代码长度的估量,除去的方法为在Coc-config中关闭inlayHint.enable选项。

      +

      image

      + +
      + + + +
    • + +
    • + + + +

      + + 《感知,理知,自我认知》读书笔记 + +

      + +
      + +
      +

      摸到一块石头,就等于摸到了石头的本身,也即摸到了石头的存在。

      +
      +

      这里显然并未思考存在,而是把感知到等同于存在。想到之前所说,除了感知,世界一无所有,那么存在也许正是被包含在感知之中了,对应的,也有一些能感知到却并不存在的东西(也许以一种奇怪的形式存在),比如幻想一个世界上原本不存在的东西,那是将记忆中的许多东西打碎而后重新拼装,构造出的东西是曾经完全不存在的,那么在想到的那一刻,并未将其制造出实体,只是在脑中构想,它存不存在?以一种奇怪的形式,比如神经突触的排布或其他什么符号象征。

      +

      必须要警惕的是,将科学的结论作为根基思考哲学问题将导致一种片面。

      + +
      + + + +
    • + +
    • + + + +

      + + Visual Studio 美化设置 + +

      + +
      + +

      干净整洁的工作环境是必要的,而Visual Studio给人的感觉总是笨重繁杂又混乱的(如果你足够熟悉它,可能并不会这么觉得),于是把它变得尽量和 VS Code 一样整洁是一件令人舒适的事情。 + +

      + + + +
    • + +
    + +
    +
    + + + + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/page/4/index.html b/page/4/index.html new file mode 100644 index 000000000..51ea7b596 --- /dev/null +++ b/page/4/index.html @@ -0,0 +1,1107 @@ + + + + + + + + + + + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    + + +
    +
    + + + + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/page/5/index.html b/page/5/index.html new file mode 100644 index 000000000..2f98ee6bb --- /dev/null +++ b/page/5/index.html @@ -0,0 +1,1104 @@ + + + + + + + + + + + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    + + +
    +
    + + + + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/page/6/index.html b/page/6/index.html new file mode 100644 index 000000000..b0286353d --- /dev/null +++ b/page/6/index.html @@ -0,0 +1,1087 @@ + + + + + + + + + + + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    + + +
    +
    + + + + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/page/7/index.html b/page/7/index.html new file mode 100644 index 000000000..966eb6b45 --- /dev/null +++ b/page/7/index.html @@ -0,0 +1,1060 @@ + + + + + + + + + + + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    + + +
    +
    + + + + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/page/8/index.html b/page/8/index.html new file mode 100644 index 000000000..4e1d9e9d7 --- /dev/null +++ b/page/8/index.html @@ -0,0 +1,841 @@ + + + + + + + + + + + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
      + +
    • + + + +

      + + 逃离计划 + +

      + +
      + +

      逃离“我”似乎是一个近乎玄妙又完全愚蠢的想法,童年时期我孜孜于此,可即使天地辽阔,四海无涯,我又能逃到哪里?因而当刘淇捧着地图册,兴致勃勃地要带我逃跑时,我变得不知所措。 + +

      + + + +
    • + +
    • + + + +

      + + Android 使用 Termux + Proot 在 Wayland 上运行 xfce4 或 KDE + +

      + +
      + +

      image安卓端的极客工具。

      +

      能做许多你以为做不到的事情。

      + +
      + + + +
    • + +
    • + + + +

      + + 狭隙 + +

      + +
      + +
      +

      模仿木心写所作的一篇“散步体”散文,为更舒适地阅读,强行分段。

      +
      +

      那年秋季很短,总觉得秋天一年比一年短,走在知行道上,昨天还穿着小褂,今天行人就针织棉衫,丝绒毛呢了,乌桕叶子一半红一半绿,冬天已经到了,绿色的叶子叫道,我还没来得及红呐,几日来忙于赶路,我也是还没来得及享受这已凉未寒的舒爽,谁不是呢,但凡来得及的,是否来得及已无所谓了。

      + +
      + + + +
    • + +
    • + + + +

      + + 借个火 + +

      + +
      + +

      碟子洗完之前,我习惯性地抬头向窗外望去。

      +

      还有两个池子的餐具要刷,我却已经神游在想象中的世界里了。

      +

      餐厅的老板,是一个中规中矩的英国人,门面装饰得毫无新意。小巧的门厅,拥挤的桌凳,使得来吃饭的人是不多的。多的,是把小餐厅当作咖啡馆的学生。聊天,抑或聚会,狭促而封闭的空间,总能给人安全感。当然,最重要的,是价廉。

      +

      作为为数不多的,独自漂到英国生活的年轻人,所面临的困境暂且不谈。这样的店,这样的老板,已是我幸中之幸。

      + +
      + + + +
    • + +
    • + + + +

      + + 管 + +

      + +
      + +

      下午五点二十分,秋雨总这个时候来。

      +

      天灰蒙蒙的,抬头看不见雨滴,只觉往下砸。

      +

      我也总这个时候来。

      +

      从单位出来,买饭,步行到这,刚好二十分钟。

      +

      我从来没有看天气预报或未雨绸缪的习惯。每天雨与我一同到来,我也从未撑过伞。在路上淋了些,推开病房的门,一股冷湿气冲到屋里。

      + +
      + + + +
    • + +
    • + + + +

      + + 回乡 + +

      + +
      + +

      在异乡栖身即久,渐渐深谙其建筑,花,草,人人人人,突然回乡,反像是出远门,生出这里才是故乡之感。至所属县城,再经十多个村庄,便到我阔别已久的故乡。柏油大道,沿路槐杨参天。车窗微开着,远处麦田深青,初午的阳光在碧浪间泅泳。那亟待见证的远方就在眼前,我出发时忐忑的心情,在吹面而来的柔软的春风中安宁下来。

      + +
      + + + +
    • + +
    • + + + +

      + + 蒜苔儿 + +

      + +
      + +

      看到院里参差不齐的菜苗,二妮突然想吃蒜苔儿了。

      + +
      + + + +
    • + +
    + +
    +
    + + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/search.json b/search.json new file mode 100644 index 000000000..9156563c5 --- /dev/null +++ b/search.json @@ -0,0 +1 @@ +[{"title":"Algorithm","url":"/2023/05/25/note/Algorithm/Algorithm/","content":"\n同一个问题,不同的算法,结果一样而所消耗资源不一样\n\n大O表示法:算法的时间复杂度通常用大O符号表述,定义为 T[n] = O(f(n)) 。称函数T(n)以f(n)为界或者称T(n)受限于f(n)。如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n)。T(n)称为这一算法的“时间复杂度”。\n\n\n时间复杂度\n常数阶 O(1)代码中没有影响到其所用时间的变量如:\nvoid swapTwoInts(int &a, int &b){ int temp = a; a = b; b = temp;}\n\n线性阶 O(n)代码中有变量可以影响到执行所用的时间,它们的关系是线性的如:\nint sum ( int n ){ int ret = 0; for ( int i = 0 ; i <= n ; i ++){ ret += i; } return ret;}\n\n平方阶 O(n${^2}$)\n\n\n代码中的变量与执行代码所用时间的关系是平方如遍历for循环嵌套for循环\n\n对数阶 O(logn)在二分查找中,通过while循环,成2倍数的缩减搜索范围,也就是说需要经过log2^n次可以跳出循环。\n\nint binarySearch( int arr[], int n , int target){ int l = 0, r = n - 1; while ( l <= r) { int mid = l + (r - l) / 2; if (arr[mid] == target) return mid; if (arr[mid] > target ) r = mid - 1; else l = mid + 1; } return -1;}\n\n以下代码也是O(logn)的时间复杂度\n// 整形转成字符串string intToString ( int num ){ string s = ""; // n 经过几次“除以10”的操作后,等于0 while (num ){ s += '0' + num%10; num /= 10; } reverse(s) return s;}\n\n\n线性对数阶 O(nlogn)将时间复杂度为O(logn)的代码循环N遍的话,那么它的时间复杂度就是 n * O(logn),也就是了O(nlogn)\nvoid hello (){ for( m = 1 ; m < n ; m++){ i = 1; while( i < n ){ i = i * 2; } }}\n\n空间复杂度\n递归与迭代递归:函数中调用函数本身\n迭代:每次迭代的结果作为下一次迭代的初始值\n\nProgram = Data Structure + Algorithm\n\nComplexityHow to judge a algorithm?How to contrast diferent algorithms?Big O Notation: The limiting case of the time or space required by the algorithm as the computational magnitude increases.\n\nT(n) = O(f(n))\n\nTime Complexity\nExample 1:\n\nfor (int i = 1; i <= n; i++){ x++;}\n\nThe time complexity of the for loop is O(n).\n\nExample 2:\n\nfor (int i = 1; i <= n; i++){ x++;}for (int i = 1; i <= n; i++){ for (int j = 1; j <= n; j++){ x++; }}\n\nThere are a single for loop and a double for loop, and the complexity of the former is O(n) and the latter is O(n$^{2}$) . So when n tends to be infinite, the complexity of whole algorithm is O(n$^{2}$).\nAnalysis of Commonly used time complexity order\n\nConstant order O(1)int x = 0;int y = 1;int temp = x;x = y;y = temp;\n\nAs long as there is no complex logic such as loops or recursion, the code is O(1) complex no matter how many lines of code are executed.\nLinear order O(n)for (int i = 1; i <= n; i++) { x++;}\n\nIn this code, the for loop is executed n times, so the computation time varies with n, so this kind of code can be expressed by O(n).\nThe logarithmic order O(log n)int i = 1;while(i < n) { i = i * 2;}\n\nIn the above loop, each time i is multiplied by 2, which means each time i is a step closer to n. So how many cycles does it take for i to be equal to or greater than n, which is solving for 2${^x}$ is equal to n. The answer is x = log 2${^n}$. So after log 2${^n}$ cycles, i is going to be greater than or equal to n, and that’s the end of the code. So the complexity of this code is O(log n).\nLinear log order O(nlog n)for(int i = 0; i <= n: i++) { int x = 1; while(x < n) { x = x * 2; }}\n\nLinear log order O(nlog n) is easy to understand, which means you loop through O(log n) code n times. Each loop is order O(log n), n * log n = n(log n).\nSquared square order O(n${^2}$)for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { x++; }}\n\nO(n${^2}$) is essentially n*n, if we change the number of cycles in the inner layer to m:\nfor (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { x++; }}\n\nThe complexity becomes n * m = O(nm).\nSpace ComplexitySince “time complexity” is not the amount of time a program consumes, “space complexity” is not used to calculate the amount of space a program consumes. As the magnitude of the problem increases, the amount of memory a program needs to allocate may also increase, and “space complexity” reflects the tendency of memory space to increase.\nO(1) Space complexityint x = 0;int y = 0;x++;y++;\n\nThe space allocated by x and y does not change with the amount of data processed, so the space complexity is O(1).\nO(n) Space complexityint[] newArray = new int[n];for (int i = 0; i < n; i++) { newArray[i] = i;}\n\nIn this code, we create an array of length nand then assign values to the elements in the loop. Therefore, the “space complexity” of this code depends on the length of newArray, which is n, so S(n) = O(n).\nSorting AlgorithmsSearching is a very important step in computers, but it is often difficult to find a specific number from unordered data. Binary searching, as we mentioned earlier, only works in sorted arrays. So the sorting algorithm is a very important job, and if we can sort the numbers, then we can save a lot of effort when we’re looking for a particular number.\nThere are many sorting algorithms, and each has its own advantages and disadvantages:\n\n\n\nAlgorithm\nTime Complexity(Best)\nTime Complexity(Average)\nTime Complexity(Worst)\nSpace Complexity\n\n\n\nQuiksort\nΩ(n log(n))\nΘ(n log(n))\nΩ(n${^2}$)\nO(log(n))\n\n\nMergesort\nΩ(n log(n))\nΘ(n log(n))\nO(n log(n))\nO(n)\n\n\nTimesort\nΩ(n)\nΘ(n log(n))\nO(n log(n))\nO(n)\n\n\nHeapsort\nΩ(n log(n))\nΘ(n log(n))\nO(n log(n))\nO(1)\n\n\nBubble Sort\nΩ(n)\nΘ(n${^2}$)\nO(n${^2}$)\nO(1)\n\n\nInsertion Sort\nΩ(n)\nΘ(n${^2}$)\nO(n${^2}$)\nO(1)\n\n\nSelection Sort\nΩ(n${^2}$)\nΘ(n${^2}$)\nO(n${^2}$)\nO(1)\n\n\nTree Sort\nΩ(n log(n))\nΘ(n log(n))\nO(n${^2}$)\nO(n)\n\n\nShell Sort\nΩ(n log(n))\nΘ(n (log(n))${^2}$)\nO(n (log(n))${^2}$)\nO(1)\n\n\nBucket Sort\nΩ(n+k)\nΘ(n+k)\nO(n${^2}$)\nO(n)\n\n\nRadix Sort\nΩ(nk)\nΘ(nk)\nO(nk)\nO(n+k)\n\n\nCounting Sort\nΩ(n+k)\nΘ(n+k)\nO(n+k)\nO(k)\n\n\nCubesort\nΩ(n)\nΘ(n log(n))\nO(n log(n))\nO(n)\n\n\nInsertion SortInsertion sort is a simple and intuitive sorting algorithm. In insertion sort, we process the unsorted elements from front to back. For each element, we compare it to the previously sorted elements, find the corresponding position, and insert.\nEssentially, for each element to be processed, we only care about its relationship to the previous element, and we only deal with the elements after the current element in the next round.\nSpecific steps:\n\nStarting with the second element (the first new element to be sorted), the sequence of previous elements is scanned backwards\nIf the current scanned element is larger than the current element, the scanned element is moved to the next bit\nRepeat Step 2 until you find a position less than or equal to the new element\nInsert the new element at that location\nRepeat Steps 1 through 4 for subsequent elements\n\nvoid inseritonSort(int arr[], int arrayLength) { for (int i = 1; i < arrayLength; i++) { int cur = arr[i]; int inseritonIndex = i - 1; while (inseritonIndex >= 0 && arr[inseritonIndex] > cur) { arr[inseritonIndex + 1] = arr[inseritonIndex]; inseritonIndex--; } arr[inseritonIndex + 1] = cur; }}\n\n\nT(n) = O(n${^2}$)\nS(n) = O(1)\n\nQuick SortQuicksort is a Divide and Conquer algorithm in which we turn big problems into small ones, and solve the small ones one by one, so that when the small ones are solved, the big ones will be solved.\nThe basic idea of quicksort is to pick a target element and then put the target element in the correct position in the array. The array is then split into two subarrays based on the sorted elements, using the same method and the same operation for the unsorted range.\nSpecific steps:\n\nFor the current array, we’re going to use the last element as our pivot\nAll elements smaller than the base number are ranked before the base number, and those larger than the base number are ranked after the base number\nOnce the base number is in place, the element is split into two front and back subarrays based on the cardinality position\nUse steps 1 through 4 recursively for subarrays until the subarray is 1 or less in length\n\nvoid swap(int arr[], int a, int b) { int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp;}int partition(int arr[], int left, int right) { int pivot = arr[right]; int leftIndex = left; int rightIndex = right - 1; while (1) { while (leftIndex < right && arr[leftIndex] <= pivot) { leftIndex++; } while (rightIndex >= left && arr[rightIndex] > pivot) { rightIndex--; } if (leftIndex > rightIndex) break; swap(arr, leftIndex, rightIndex); } swap(arr, leftIndex, right); return leftIndex;}void quickSort(int arr[], int left, int right) { if (left >= right) return; int partitionIndex = partition(arr, left, right); quickSort(arr, left, partitionIndex - 1); quickSort(arr, partitionIndex + 1, right);}void printArray(int arr[], int arrayLength) { for (int i = 0; i < arrayLength; i++) { std::cout << arr[i] << " "; } std::cout << "\\n";}\n\n\nT(n) = O(n${^2}$). Average time complexity is O(n(log n)).S(n) = O(n). Average time complexity is O(log n).\n\n","categories":["递归这个世界 · 编程","算法"],"tags":["Programming"]},{"title":"二叉树","url":"/2023/07/19/note/Algorithm/BinaryTree/","content":"struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int v) : val(v), left(nullptr), right(nullptr) {}};\n\n二叉树是一种常见的树状数据结构,它由节点(Node)和边(Edge)组成。每个节点最多有两个子节点,分别称为左子节点(Left Child)和右子节点(Right Child)。\n\n\n基本概念\n根节点(Root Node):二叉树的顶部节点,没有父节点的节点。\n叶子节点(Leaf Node):没有子节点的节点,也称为终端节点。\n内部节点(Internal Node):除了叶子节点之外的其他节点。\n子树(Subtree):以某个节点为根的子树,由该节点及其所有后代节点组成。\n深度(Depth):从根节点到某个节点的唯一路径上的边数,根节点的深度为0。\n高度(Height):从某个节点到其最远叶子节点的路径上的边数,叶子节点的高度为0。\n\n二叉树类型\n二叉搜索树(Binary Search Tree):左子节点的值小于等于父节点的值,右子节点的值大于等于父节点的值。\n\nstruct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int v) : val(v), left(nullptr), right(nullptr) {}};// 插入操作TreeNode* insertNode(TreeNode* root, int val) { if (root == nullptr) { return new TreeNode(val); } if (val < root->val) { root->left = insertNode(root->left, val); } else { root->right = insertNode(root->right, val); } return root;}// 查找操作TreeNode* searchNode(TreeNode* root, int val) { if (root == nullptr || root->val == val) { return root; } if (val < root->val) { return searchNode(root->left, val); } else { return searchNode(root->right, val); }}// 中序遍历void inorderTraversal(TreeNode* root) { if (root) { inorderTraversal(root->left); std::cout << root->val << " "; inorderTraversal(root->right); }}\n\n\n完全二叉树(Complete Binary Tree):除了最后一层外,其他层的节点数达到最大,并且最后一层的节点依次从左到右排列。\n\n满二叉树(Full Binary Tree):除了叶子节点外,每个节点都有两个子节点。\n\n平衡二叉树(Balanced Binary Tree):任意节点的左子树和右子树的高度差不超过1。\n\n\n二叉树操作\n插入节点:向二叉树中添加新的节点。\n删除节点:从二叉树中移除指定节点。\n查找节点:在二叉树中搜索具有特定值的节点。\n\n遍历按照特定顺序访问二叉树中的所有节点,包括前序遍历、中序遍历、后序遍历和层序遍历等。\n三种遍历方式,关键是看每一个子树根节点的顺序:\n\n\n\n遍历方式\n顺序\n\n\n\n先序遍历\n根-左-右\n\n\n中序遍历\n左-根-右\n\n\n后序遍历\n左-右-根\n\n\n递归写法:\n// 先序遍历void preorderTraversalRecursive(TreeNode* root) { if (root == nullptr) { return; } std::cout << root->val << " "; // 输出当前节点的值 preorderTraversalRecursive(root->left); // 递归遍历左子树 preorderTraversalRecursive(root->right); // 递归遍历右子树}\n\n迭代写法:\n// 先序遍历void preorderTraversalIterative(TreeNode* root) { if (root == nullptr) { return; } std::stack<TreeNode*> nodeStack; nodeStack.push(root); while (!nodeStack.empty()) { TreeNode* node = nodeStack.top(); nodeStack.pop(); std::cout << node->val << " "; // 输出当前节点的值 if (node->right != nullptr) { nodeStack.push(node->right); } if (node->left != nullptr) { nodeStack.push(node->left); } }}\n\n","categories":["递归这个世界 · 编程","算法"],"tags":["Programming"]},{"title":"Data Structure","url":"/2023/05/25/note/Algorithm/DataStrucuture/","content":"ArrayArray has fixed size and contiguous memory. New elements cannot be appended. You can use memory address to access elements of Array. \nchar a[5] = {'h', 'e', 'l', 'l', 'o',}; C++ counts food tags from `0`, so `a[0] = 'h'` and `a[1] = 'e'`.Random access using `a[i]` has `O(1)` time complexity.Units of array can be modified. \na[0] = 'b';\nresult:\nbello\n\n\nDynamic Allocation of ArraysA size-n array can be created in this way:\nchar a[n];\n\nBut when writing the code, n must be known.\nIf n is unknown, how dose the program run?\nchar* a = NULL;int n; // array size cin >> n; // read in the size. e.g., get n = 5a = new char[n];\n\nNow a is an empty array whose size is 5.\n// store somrthing in the arraya[0] = 'h';a[1] = 'e';a[2] = 'l';a[3] = 'l';a[4] = 'o';\n\nWhen done, free memory. Otherwise, memory leak can happen.\ndelete [] a;a = NULL;\n\n\n\nRemoving an element in the middle has O(n) time complexity. Require moving the remaining items leftward.\nVectorVector is almost the same as array.\nThe main difference is that vector’s capacity can automatically grow.\nNew elements can be appended using push_back() in O(1) time(on average). \nThe last element can be removed using pop_back() in O(1) time.\nstd::vector<char> v = {'h', 'e', 'l', 'l', 'o'}; v.push_back();v.pop_back();v.erase(v.begin() + 1);\n\nVector can delete an element in the middle using erase() in O(n) time. So it is not better to do this.\nstd::vector<char> v(100);cout << v.size();\t\t// print "100"cout << v.capacity();\t// print "100"// thenv.push_back('x');cout << v.size();\t\t// print "101"cout << v.capacity();\t// print "200"\n\nWhen size is going to exceed capacity, program will create a new array of capacity 200, copy the 100 elements from the old array to the new, put the new element in the 101st position and free the old array from memory.\nListA NodeA node contains a data and two pointers that one points to the previous node and another points to the next node.\nDoubly Linked Liststd::list<char> l = {'h', 'e', 'l', 'l', 'o'}; \n\ncout << l[2];\t\t// does not workl[0] = 'a';\t\t\t// does not work\n\nlist<char>::iterator iter = l.begin();cout << *iter;\t\t// print 'h'iter++;cout << *iter;\t\t// print 'e'*iter = 'a';push_back();push.front();\n\nDiference\n\n\n\nArray\nVector\nList\n\n\n\nSize\nfixed\ncan increase and decrease\ncan increase and decrease\n\n\nMemory\ncontiguous\ncontiguous\nnot contiguous\n\n\n\n\n\n\nArray\nVector\nList\n\n\n\nRand Access\nO(1)\nO(1)\n—\n\n\npush_back()\n—\nO(1)(average)\nO(1)\n\n\npop_back()\n—\nO(1)\nO(1)\n\n\ninsert()\n—\nO(n)(average)\nO(1)\n\n\nerase()\n—\nO(n)(average)\nO(1)\n\n\nWhich shall we use?\nArray: Fixed size throughout.\nVector: \n\nRandom access(i.e., read or write the i-th element) is fast.\nInsertion and deletion at the end are fas.\ninsertion and deletion in the front and midddle are slow.\n\nList:\n\nSequentially visiting elements is fast; random access is not allowed.\nFrequent insertion and deletion at any position are OK.\n\nBinary Searchint arr[] = {3, 5, 12, 16, 17, 26, 32, 51, 53, 64};\n\nInputs: (i) an array whose elements are in the accending order and (ii) a key.\nGoal: Search for the key in the array. If found, return its index; if not found, return -1.\nExamle 1:\n\nSearch for the elemnt 53.\nReturn 8.\n\nExample 2:\n\nSearch for the element 9.\nReturn -1.\n\nExample: key = 26. Use two variables left and right pointing to the front of the array and the back respectively. \nint search(int arr[], int left, int right, int key){ while (left <= right) { int mid = (left + right) / 2; if (key == arr[mid]) return mid; if (key > arr[mid]) left = mid + 1; else right = mid - 1; } return -1;}\n\nHow to suport both search and insertion?\nstd::vector<int> v = {3, 5, 12, 16, 17, 26, 32, 51, 53, 64};\n\nThe ascending order must be kept; otherwisem search would take O(n) time.Inserting an item into the middle has O(n) time complexity(on average).Can we perform binary search in the list?No, Given left and right, we cannot get mid efficiently.\n\n\n\n\nSearch\nInsertion\n\n\n\nVector\nO(log n)\nO(n)\n\n\nList\nO(n)\nO(1)\n\n\nSkip List\nO(log n)\nO(log n)\n\n\n","categories":["递归这个世界 · 编程","数据结构"],"tags":["Programming","Data Structure"]},{"title":"Singly Linked list","url":"/2023/05/25/note/Algorithm/linked_list/","content":"Now we implement a singly linked list with C++.\n\nLinked list is a Data structure that contains a variable and a pointer pointing to the next node.\n\n\n\nStorage of dataFirst of all, a data structure is needed to store the variable and the pointer. It can be coded:\nstruct Node { int val; Node* next; Node() : val(0) , next(nullptr) { } Node(int x) : val(x) , next(nullptr) { } Node(int x, Node* next) : val(x) , next(next) { } };\n\nThree constructors are packaged in the struct Node, which can help us create a head of a linked list conveniently.\nNode *head = new Node();Node *head = new Node(0);Node *head = new Node(0, nullptr);\n\nThere are three ways to create a pointer head. Using first way, you can create a pointer head pointing to a node that has a variable val = 0 and a nullptr (a pointer pointing nothing). And the second way, you create a same head but you must assign a value to val of the node pointed to by head. The last, you even can link a node to the head requiring you give a pointer pointing to the next node.\nThen, how to handle the linked list?\nLinked list classclass ListNode {public: struct Node { int val; Node* next; Node() : val(0) , next(nullptr) { } Node(int x) : val(x) , next(nullptr) { } Node(int x, Node* next) : val(x) , next(next) { } }; ListNode() { this->head = nullptr; } Node* head; \tvoid assign(int val); int at(int pos); void set(int pos, int val); void del(int pos); int find(int val); void print();};\n\nvoid ListNode::assign(int val){ Node* p = new Node(val); Node* last = this->head; if (last) { while (last->next) { last = last->next; } last->next = p; } else { head = p; }}int ListNode::at(int pos){ int index = 0; Node* p = this->head; while (index != pos) { p = p->next; index++; } return p->val;}void ListNode::set(int pos, int val){ int index = 0; Node* p = this->head; while (index != pos) { p = p->next; index++; } p->val = val;}void ListNode::del(int pos){ Node* p = this->head; if (pos == 0) { head = head->next; delete p; } else { int index = 0; Node* p = this->head; Node* q; for (q = nullptr; p; q = p, p = p->next) { if (index == pos - 1) { q->next = p->next; delete p; break; } index++; } }}int ListNode::find(int val){ Node* p; int index = 0; for (p = this->head; p; p = p->next) { if (p->val == val) { return index; } index++; } return -1;}void ListNode::print(){ Node* p; cout << "["; for (p = this->head; p; p = p->next) { cout << p->val; if (p->next) { cout << ", "; } } cout << "]" << endl;}};int main(){ ListNode* node = new ListNode; node->assign(1); node->assign(2); node->assign(3); node->assign(4); node->assign(5); node->print(); cout << node->find(2) << endl; node->del(2); node->print(); cout << node->at(2) << endl; node->set(2, 9); node->print(); return 0;}\n\nMerge Two LinkedListNode *mergeList(ListNode *l1, ListNode *l2) { Node *p, *q, *temp, *newList; if (l1->head->val > l2->head->val) { // make ptr "p" is the head of small list newList = l2->head; p = l2->head; q = l1->head; } else { newList = l1->head; p = l1->head; q = l2->head; } while (p != nullptr && q != nullptr) { if (q->val >= p->val) { temp = q->next; q->next = p->next; p->next = q; q = temp; p = p->next->next; } else { temp = p->next; p->next = q->next; q->next = p; p = temp; q = q->next->next; } } if (q != nullptr) { p->next = q; } return newList;}\n\n\n\n","categories":["递归这个世界 · 编程","数据结构"],"tags":["Programming","Data structure","Algorithm"]},{"title":"Network","url":"/2023/05/25/note/Computer/network/","content":"\n💻计算机网络基础知识。\n\n\n\n总体脉络一、物理层许多电脑想相互通讯,需要建立连接\n\n当只有两台电脑时,只需要一根网线,即可以通信(IO、中断、缓冲区、操作系统)\n两个、三个、四个……随着电脑数量增多,难以使任意两个都连接起来,否则网线密密麻麻混乱不堪\n使用一个中间设备,将所有电脑都与此设备相连,中间的转发全由这个设备完成,与之前本质上一样,只是网口与网线的数量减少了,不再那么混乱;设备名为集线器,仅仅将电信号转发到所有出口(广播),没有做任何处理,因此它属于物理层\n转发到了所有出口,每一个连接到集线器的设备都有一个全局唯一的名字作为标识,即 MAC 地址,此时发送数据只需要在数据包的头部拼接上 MAC 地址即可让接受者判断是否为发给自己的数据包\n\n\n\n\nMAC 地址\n端口\n\n\n\naa-aa-aa-aa-aa-aa\n1\n\n\nbb-bb-bb-bb-bb-bb\n2\n\n\ncc-cc-cc-cc-cc-cc\n3\n\n\ndd-dd-dd-dd-dd-dd\n4\n\n\n虽然这样布局干净很多,但是本来只需要发送给一个电脑的数据,现在要发给连接到集线器的所有电脑,这样既不安全又不节省网络资源\n二、数据链路层如果把集线器变得更加智能,只发送给目标 MAC 地址指向的那台电脑就好了\n\n使用交换机维护一张 MAC 地址表,记录着每个 MAC 地址的设备所在的端口,数据到达交换机会通过自动发送给其 MAC 地址所映射的端口上,这样的传输方式称为以太网\n通过发送和接受数据,交换机读取所有设备的 MAC 地址与端口并建立 MAC 地址表\n\n交换机 A:\n\n\n\nMAC 地址\n端口\n\n\n\naa-aa-aa-aa-aa-aa\n1\n\n\nbb-bb-bb-bb-bb-bb\n2\n\n\ncc-cc-cc-cc-cc-cc\n3\n\n\ndd-dd-dd-dd-dd-dd\n4\n\n\nee-ee-ee-ee-ee-ee\n5\n\n\nff-ff-ff-ff-ff-ff\n5\n\n\ngg-gg-gg-gg-gg-gg\n5\n\n\nhh-hh-hh-hh-hh-hh\n5\n\n\n 交换机 B:\n\n\n\nMAC 地址\n端口\n\n\n\naa-aa-aa-aa-aa-aa\n1\n\n\nbb-bb-bb-bb-bb-bb\n1\n\n\ncc-cc-cc-cc-cc-cc\n1\n\n\ndd-dd-dd-dd-dd-dd\n1\n\n\nee-ee-ee-ee-ee-ee\n2\n\n\nff-ff-ff-ff-ff-ff\n3\n\n\ngg-gg-gg-gg-gg-gg\n4\n\n\nhh-hh-hh-hh-hh-hh\n5\n\n\n\n机器数量越来越多,只需要将更多的交换机相连,每个交换机会有个别端口映射为别的交换机\n\n此时只有几百台电脑的时候,都还好,所以这种交换机的设计方式,已经足足支撑一阵子了\n但很遗憾,人是贪婪的动物,很快,电脑的数量就发展到几千、几万、几十万\n三、网络层交换机已经无法记录如此庞大的映射关系了\n问题在于交换机中映射到其他交换机的端口会有与这些端口数相同的 MAC 地址数,这会使 MAC 地址表无比庞大\n\n将很每一个交换机都接入一个新的设备,这个设备跟电脑一样拥有自己独立的 MAC 地址,同时还能把数据包做一次转发,我们称之为路由器\n\n\n路由器:一台独立的拥有 MAC 地址的设备,并且可以把数据包做一次转发\n\n\n路由器的每一个端口都有独立的 MAC 地址\n此时如果有两个电脑需要数据传输,如果同处于一个交换机下,则不需要通过路由器,如何判断是否需要通过路由器\nMAC 地址是出厂分配的,全球唯一,因此引入一个新的地址,每台机器分配一个 32 位(二进制)的编号,即 IP 地址;此时每台电脑既有自己的 MAC 地址又有自己的 IP 地址;IP 地址在软件层面上,可以随时修改,MAC 地址在硬件层面,不能修改\n此时在两台设备之间传输的信息就包含了两个头部,数据链路层头部和网络层头部\n两个 IP 处于同一个子网就直接通过交换机发送出去,不在同一个子网就交给路由器处理,192.168.0. xxx 开头一样的属于同一个子网;计算如何判断?答案是通过子网掩码:计算机通过将 IP 地址和子网掩码进行与运算\n\n\n如某机器的子网掩码为 255.255.255.0,四台电脑的 IP 地址:A 电脑:192.168.0.1 & 225.225.225.0 = 192.168.0.0B 电脑:192.168.0.2 & 225.225.225.0 = 192.168.0.0C 电脑:192.168.1.1 & 225.225.225.0 = 192.168.1.0D 电脑:192.168.1.2 & 225.225.225.0 = 192.168.1.0计算的结果相等,就属于同一个子网子网掩码其实是表示 IP 地址前多少位表示子网的网段\n\n\n当 A 想与 C 通信时,将 A 和 C 的 IP 地址分别与 A 的子网掩码进行 & 运算,发现不相等,则 A 认为 C 和自己不在同一个子网,于是把包发送给路由器\n\n但是 A 如何知道哪一个是路由器呢?\n\n对于 A 来说,它只能把包发送到同处于子网下的某一个 IP 上,所以只需要在 A 电脑内配置一个默认网关,也即路由器的 IP 地址路由器如何知道 C 在哪里?\n路由器收到包含 IP 地址的数据包,需要判断从哪个端口发送出去,由于子网掩码其实是表示 IP 地址前多少位表示子网的网段,因此可以把 IP 地址与子网掩码合并表示,如 192.168.0.0(255.255.255.0) 可以表示为 192.168.0.0/24(24 表示子网掩码占 24 个字节),路由器通过路由表判断将一个子网下的都转发到对应的端口发送数据包的数据链路层需要知道 MAC 地址,但是只知道 IP 地址怎么办?\n答案是 arp 协议;每个电脑都有一张 arp 缓存表,记录着 IP 地址与 MAC 地址的对应关系\n一开始 arp 缓存表是空的,每台电脑都会广播 arp 请求,收到的电脑会响应也即返回自己的 MAC 地址,此时电脑收到返回会更新自己的 arp 表\n\n综上,每台电脑都会有如下配置:\n\n\n\nIP 地址:\n192.168.0.1\n\n\n\nMAC 地址:\nAA-AA-AA-AA-AA-AA\n\n\n子网掩码:\n255.255.255.0\n\n\n默认网关:\n192.168.0.254\n\n\n一共涉及三张表:\n\n交换机中有 MAC 地址表用于映射 MAC 地址和它的端口\n路由器中有路由表用于映射 IP 地址与它的端口\n电脑和路由器中都有 arp 缓存表用于缓存 IP 和 MAC 地址的映射关系\n\n三张表的建立:\n\nMAC 地址是通过以太网内各节点之间不断通过交换机通讯而完善的\n路由表是各种路由算法+人工配制完善的\narp 缓存是不断通过 arp 协议的请求逐步完善的\n\n分视角分析电脑视角\n首先要知道自己的 IP 和对方的 IP\n通过子网掩码判断两者是否在同一个子网\n同一个子网就直接通过 arp 协议获取对方的 MAC 地址发送过去\n不在同一个子网则通过 arp 协议获取默认网关的 MAC 地址发送过去\n\n交换机视角\n收到的数据包必须有目标的 MAC 地址\n通过 MAC 地址查询映射关系\n查到就按照映射关系从指定端口发送出去\n查不到就所有端口都发送\n\n路由器视角\n\n收到的数据包必须包含目标的 IP 地址\n通过路由表查询映射关系\n查到了就按照映射关系从制定端口发送出去\n查不到则返回一个路由不可达的数据包\n\n\n网络层(IP 协议)本身没有传输包的功能,包的实际传输是委托给数据链路层(以太网中的交换机)来实现的\n\n四、传输层只需要获取对方的 IP 地址,数据包就可以在任意两台的电脑之间进行传输了,但是当一台电脑接收到一个数据包时,具体应该交给哪一个程序(进程) 呢?\n为了把通信的进程区分开来,就给每一个进程分配一个数字编号,也即端口号;然后在传输的数据包上要加上传输层的头部,即源端口号与目标端口号\n","categories":["经验与技巧与踩坑 · 杂项","计算机技术"],"tags":["Network","Protocol"]},{"title":"多线程基础","url":"/2023/05/25/note/Computer/thread/","content":"\n多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。\t\t\t——WIki-Pedia\n\n\n\n基本概念查看进程\nps -ef | grep <name>\n\n查看线程\nps -xH | grep <name>\n\n查看端口\nnetstat -ant | grep 8080\n\npthread_exit(0);//使用pthread_exit(0);或者return (void*)0;结束当前线程,而非return;// 使用exit(0)会结束当前进程(进程中所有的线程都会终止\n\n多线程参数传递可以使用强制类型转换:\nint i = -10;void *ptr = (void*)(long)i;int j = (int)(long)ptr; //此时j == i == -10\n\n线程资源的回收线程有两种状态,jonable和unjoinable,如果为前者,子线程主函数终止时(自己退出或pthread_exit(0)),资源不会被释放,这种线程称为僵尸线程。\n创建线程时,默认为joinable.\n资源回收有四种方法:\n\n在主线程中调用pthread_join(),但一般不用,因为会发生阻塞\n创建线程前,调用pthread_attr_setdetachstate设置属性\n\npthread_attr_t attr;pthread_attr_init(&attr);pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);pthread_create(&pthid, &attr, mainFund, NULL);\n\n\n创建之后,设置为detached状态:pthread_detach(pthid);\n在线程主函数中调用pthread_detach:pthread_detach(pthread_self());\n\n可以使用pthread_join(pthid, (void**)&i)来获取线程结束后的返回值。在线程主函数中使用return (void *) number来设置线程的返回值,可以告诉主线程子线程的情况。 \n线程的取消线程的取消:int pthread_cancel(pthread_t thread**);** 被取消的线程返回值为-1\n可以在子线程的主函数中使用函数设置是否可以被取消:\npthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);//orpthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);//也可以保留旧的状态:int oldState;pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldState);//线程创建时默认为可以取消\n\n子线程中调用pthread_setcanceltype改变取消的方式:\npthread_testcancel(); // 设置取消点pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); // 立即取消pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL); // 延时取消,延时到取消点再取消\n\n线程清理子线程退出时需要释放资源、锁和回滚事务等;\n善后的代码一般写在清理函数中,清理函数必须成对出现:\nvoid cleanfunc(void *arg) {/*Do something*/}//在子线程中pthread_cleanup_push(cleanfunc, NULL);pthread_cleanup_pop(1);\n\n线程的信号处理函数只能有一个,所有线程收到信号都会调用这一个。\n线程池C11封装了线程库thread.\n构造函数:\ntemplate<typename _Callable , typename... _Args, typename = _Require<__not_same<_Callable>>> std::thread::thread (_Callable && __f, _Args &&... __args) [inline], [explicit]\n\n线程同步:多个线程协商如何合理的使用资源。\n递归互斥锁允许线程多次申请加锁,可以解决同一线程多次加锁造成的死锁的问题。\n","categories":["递归这个世界 · 编程","框架"],"tags":["CPP","Thread"]},{"title":"Samsung玩机经验","url":"/2022/11/21/note/Experience/Samsung/","content":"三星玩机经验。\n\n\n注意事项\n卸载不需要的系统软件:刷完欧版系统,没有过多预装软件,可以不用卸载,不用的可以长按禁用\n\n三星解bl锁之前一定要退出账号\n刷完海外版固件,oem依然是解开的状态,但是有一个kg锁需要打开(prenormal是锁着的状态,checking是解开的状态),方式是进行系统更新检查,检查可能提醒无法进行更新,但无所谓,重启进入刷机模式就能看到已经解锁,此时可以刷magisk修补包了\nDex模式下使用谷歌输入法条件:已Root使用termux,输入命令:\nsudo ime set com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME\n更换主题更换主题,尤其是更换自定义图标时,最好先应用一下默认主题,在换上自己的主题,否则会存在一些自定义图标不生效的情况。\n","categories":["经验与技巧与踩坑 · 杂项","Android"],"tags":["Mobile phone","root","ROM"]},{"title":"在Windows的硬盘上创建liveCD引导启动linux安装","url":"/2023/08/18/note/Experience/livecd-on-disk/","content":"装完Archlinux发现忘记安装iwd和dhcpcd了,无法联网,又没有额外的U盘制作liveCD,因此开辟出一块硬盘分区来引导临时系统。\n\n\n步骤\n首先下载EasyUEFI,网上随便下都行。\n\n然后下载系统镜像:archlinux-2023.08.01-x86_64.iso。\n\n使用Windows自带的磁盘管理工具或DiskGenius分出一块空闲的分区,大小最好在5G以上(最小多少我也没有试),然后格式化成FAT32的格式。将镜像文件archlinux-2023.08.01-x86_64.iso解压到这个分区中。\n\n打开EasyUEFI,选择管理EFI启动项:\n\n\n\n然后创建新项:\n描述是启动项的名字,随便写一个能分辨的即可。\n\n文件路径要找到刚刚解压到新分区的efi文件,不同的发行版可能有所不同,一般名字为grub.efi或BOOT64.efi,路径基本上都是/EFI/BOOT/*.efi:\n\n\n\n然后就可以重启电脑,选择启动项了。\n","categories":["经验与技巧与踩坑 · 杂项","Linux"],"tags":["Linux","UEFI","liveCD"]},{"title":"Qt相关问题杂项","url":"/2023/10/20/note/Experience/qt-questions/","content":"使用在线安装器换源以加快下载速度。\n\n参考清华大学镜像站 - Qt 软件仓库镜像使用帮助。\n\n\n\n以下内容为复制上述链接中的内容。\n\n通过以下链接下载在线安装器\nhttps://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/\n\n通过\n# linuxinstaller --mirror https://mirrors.tuna.tsinghua.edu.cn/qt# windowsinstaller.exe --mirror https://mirrors.tuna.tsinghua.edu.cn/qt\n\n使用该镜像。\nQt在Windows下配置环境变量\nPATH:在环境变量(PATH)中添加Qt安装目录中的编译器bin文件夹,如D:\\Libraries\\Qt\\5.15.2\\msvc2019_64\\bin\nQTDIR:添加一个环境变量,名字为QTDIR,文件夹为Qt安装目录的某一个版本的文件夹,如D:\\Libraries\\Qt\\5.15.2\n\nxmake创建qt应用xmake create -t qt.widgetapp myapp -P .\n\n","categories":["经验与技巧与踩坑 · 杂项","cpp"],"tags":["Qt","cpp","Source"]},{"title":"Linux下建立RTMP推流服务器","url":"/2023/07/30/note/Experience/rtmp/","content":"在各大直播平台直播电视剧或电影,大概率会因版权问题被封掉,即使并没有其他人看。因此想要搭建一个私人的直播间。\n\n\n安装Docker如Archlinux:\nsudo pacman -S docker\n\n启动sudo systemctl enable --now dockersudo systemctl status docker #查看运行状态\n\n使用现有镜像tiangolo/nginx-rtmpsudo docker pull tiangolo/nginx-rtmp# 下载完成之后sudo docker run -d -p 1935:1935 --name nginx-rtmp tiangolo/nginx-rtmp\n\nOBS注意,OBS似乎只能在X11下运行。如果使用Wayland,请切换到X11。\nsudo pacman -S obs\n\n推流地址为rtmp://<ip>/live/<passwd>。\n如果有防火墙,打开1935端口。\n","categories":["经验与技巧与踩坑 · 杂项","Linux"],"tags":["Linux","OBS","RTMP"]},{"title":"笔记本电脑与安卓平板共享键鼠完美方案","url":"/2023/06/07/note/Experience/share_input_on_win_and_android/","content":"\n\n日常办公使用笔记本电脑,但也想把另一个平板电脑(Android)利用起来,最初是想把它当作扩展屏,但有一些安卓软件相当不错(纯纯写作,哔哩哔哩,还有更高清的屏幕等),于是想同时使用,但是没有键鼠,笔记本电脑的键鼠和平板电脑的触控相互切换,太麻烦,经过一下午的努力终于找到完美的解决方案。\n注:本方案需要花费30人民币购买软件,如不考虑请移步。\n\n\n设备:Windows PC 、Andriod pad、Android mobile phone\n软件:\n\n\n\n平台\n软件\n\n\n\nWindows\nDeskDockServer\n\n\nAndroid pad\nDeskDockPro(720日元 ≈ 30 人民币)\n\n\nAndroid mobile phone\nBluetooth Keyboard & Mouse\n\n\nPC 端 DeskDockServer按照自己的平台(操作系统和cpu架构)下载相应的软件\n\n安装jre\n这里选择java8Java Downloads | Oracle,下载完成后安装即可\n\n下载DeskDock Server,解压后直接可以运行\n\n\n配置如下,切换快捷键看个人习惯,其他也根据自己的需求配置:\n\nAndroid Pad 端google商店搜索DeskDockPro,或点此链接DeskDock PRO下载并安装(需要付费¥30)。\n之所以不用DeskDock免费版是因为它只提供共享鼠标,而不能使用键盘。\n连接软件安装完之后使用USB连接pad与PC即可享用共享鼠标和键盘,也即使用笔记本的鼠标键盘控制平板。\n但到此为止输入法只能使用PC端的,在PC打完字发送到平板,或使用平板的输入法(一定会拉起软键盘),像这样:\n\n安卓的机制是连接外接实体键盘后才会收起软键盘,继而根据各个输入法提供更简洁的视觉效果,但使用笔记本的键盘并不会被识别出实体键盘,如果接上实体键盘一切都不成问题,但都有实体键盘了还要笔记本的键盘干什么,于是摸索中发现手机端有一款软件可以模拟实体键盘和鼠标作为蓝牙外设,它就是Bluetooth Keyboard & Mouse,play商店搜索下载即可,免费版完全够用,因为只是需要它作为一个外设键盘被识别。\n在手机端安装好后蓝牙连接pad,设置输入法为gboard,关闭显示屏幕键盘,即可享用:\n\n需要注意的问题在上图里了。\n","categories":["经验与技巧与踩坑 · 杂项","Android"],"tags":["Mobile phone","Android","Shared mouse"]},{"title":"VSCode - argument of type \"const char *\" is incompatible with parameter of type \"LPCWSTR\" 错误的解决方法","url":"/2023/07/03/note/Experience/unicode-error/","content":"主要原因是字符集的问题,不使用unicode字符集即可。\n在VSCode中,删除c_cpp_properties.json中的宏UNICODE和_UNICODE。\n\n\n"defines": [\t"_DEBUG",\t"UNICODE",\t"_UNICODE"],\n\n之后:\n"defines": [ "_DEBUG"],\n\n","categories":["经验与技巧与踩坑 · 杂项","cpp"],"tags":["CPP","Win32","VSCode"]},{"title":"使用Waydroid在Linux上运行x86_64的安卓软件","url":"/2023/07/04/note/Experience/waydroid/","content":"Windows有WSA,Linux有Waydroid,两者的性能损失之小都相当可观。\n虽然两者目前都不够成熟,有许多需要改进之处,但还是非常好用的。\n环境\n\n$ uname -aLinux dionysen-latitude7430 6.1.31-2-MANJARO #1 SMP PREEMPT_DYNAMIC Sun Jun 4 12:31:46 UTC 2023 x86_64 GNU/Linux\n\n\n\n安装waydroidyay -S waydroid\n\n下载镜像,一般使用LineageOS,在[此处](https://sourceforge.net/projects/waydroid/)下载两个文件:\n\nsystem.zip和vendor.zip。\n下载完成后将.img文件解压到/usr/share/waydroid-extra/images目录下,文件夹若不存在则创建。\nsudo waydroid initsudo systemctl enable --now waydroid-container\n\n此时应该可以正常使用了。\n常用命令确保 waydroid-container.service 正在运行,然后执行:\nwaydroid session start\n\nWaydroid 会话现在已处于活动状态,这里有一些与 Waydroid 交互的实用命令:\n启动 GUI:\nwaydroid show-full-ui\n\n启动 shell:\nwaydroid shell\n\n安装应用程序:\nwaydroid app install $path_to_apk\n\n运行应用程序:\nwaydroid app launch $package-name #Can be retrieved with `waydroid app list`\n\n\n\n\n注意,安装的安卓应用可能会显示在linux系统的应用中,但最好不要直接点击它来启动应用,而是使用命令行:\n➜ ~ sudo systemctl status waydroid-container● waydroid-container.service - Waydroid Container Loaded: loaded (/usr/lib/systemd/system/waydroid-container.service; enable> Active: active (running) since Wed 2023-07-05 01:02:16 CST; 3min 56s ago Main PID: 574 (python3) Tasks: 2 (limit: 9204) Memory: 35.9M CPU: 229ms CGroup: /system.slice/waydroid-container.service └─574 python3 /usr/bin/waydroid -w container start7月 05 01:02:15 dionysen-latitude7430 systemd[1]: Starting Waydroid Container...7月 05 01:02:16 dionysen-latitude7430 systemd[1]: Started Waydroid Container.# 确保服务正在运行waydroid session start# 然后再去点击Waydroid的应用图标\n\n另:由于系统对应的架构是x86_64,因此最好去一些网站下载此架构的应用,如appmirror(需梯子)。\nSetting up a shared folderUser @wachidadinugroho has worked out the details on how to setup a shared folder to be used between Waydroid and your host filesystem. \nSetting up a shared folder will allow the user to copy/paste files from the host and they appear inside waydroid/android. sudo mount --bind <source> ~/.local/share/waydroid/data/media/0/<target>\nThen verify that the target folder exists: \n sudo ls ~/.local/share/waydroid/data/media/0/ Examples:\nsudo mount --bind ~/Documents ~/.local/share/waydroid/data/media/0/Documentssudo mount --bind ~/Downloads ~/.local/share/waydroid/data/media/0/Downloadsudo mount --bind ~/Music ~/.local/share/waydroid/data/media/0/Musicsudo mount --bind ~/Pictures ~/.local/share/waydroid/data/media/0/Pictures sudo mount --bind ~/Videos ~/.local/share/waydroid/data/media/0/Movies\n\nYou can also make your own custom mount point to cater to your needs.\n","categories":["经验与技巧与踩坑 · 杂项","Linux"],"tags":["Linux","Android","Waydroid","Wayland"]},{"title":"Qt","url":"/2023/05/25/note/Framework/Qt/","content":"\n\nQt 经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、访问数据库、图像处理、音频视频处理、网络通信、文件操作等。\n\n\n信号与槽连接一个信号和槽函数,它们分别来自不同(也可以是相同)的对象,也即connect是对象之间快速通信的桥梁。\n#include <QtGui/QApplication> #include <QtGui/QPushButton> int main(int argc, char *argv[]) { QApplication a(argc, argv); QPushButton *button = new QPushButton("Quit"); QObject::connect(button, SIGNAL(clicked()), &a, SLOT(quit())); button->show(); return a.exec(); }\n\nQObject::connect(button, SIGNAL(clicked()), &a, SLOT(quit())); //连接button对象的clicked事件函数与程序a的quit函数 \n\n事件可以通过事件来改变组件的默认操作\nQApplication的exec()就是事件循环,用来监听所有事件;当事件发生时,Qt将创建一个事件对象,然后传递给event()。\n事件函数需要在子类中重写。重写事件函数其实就是在告诉系统,当遇到这个事件的时候应该做什么。\npaintEvent()在程序开始的时候会update()一次,后面绘制图形需要再调用update()。\n绘画事件通过绘画事件函数void paintEvent(QPaintEvetn *event)画图,可以通过设置状态来控制画什么。\nupdate()函数用来更新绘画事件函数。\n普通绘画:\npaint.setPen(QPen(QColor(Qt::black), 1)); // 画轮廓paint.setBrush(Qt::black); //填充paint.drawEllipse(100,100,300,300); // 参数为位置x,y,圆所占矩形的长和宽\n\n绘制透明填充:\nQColor color = Qt::white;color.setAlphaF(0.5); // 透明度设置为0.5paint.setPen(QPen(color));paint.setBrush(color);paint.drawEllipse(100,100,300,300);\n\n鼠标事件鼠标悬浮事件可以使用QWidget的参数setMouseTracking完成,但必须在所有上层控件中都设置setMouseTracking(true)才可以实现;比如QMainWindow类的监控必须同时在MainWindow和其父类QWidget中都设置setMouseTracking(true)。\n然后重写mouseMoveEvent函数。使用event->HoverMove判断事件类型。\n消息对话框可选按键的消息对话框可直接使用静态函数实现有可选按钮的消息对话框:\nQMessageBox mb; mb.setWindowTitle(tr("Black is Win!")); mb.setText(tr("Black is win!")); mb.setInformativeText(tr("Are you want to play again?")); mb.setStandardButtons(QMessageBox::Yes | QMessageBox::No | QMessageBox::Default); mb.setDefaultButton(QMessageBox::Yes); switch (mb.exec()) { case QMessageBox::Yes: \tnewGame(); \tbreak; case QMessageBox::No: \texit(); \tbreak; default: \tbreak;}\n\nor\nQMessageBox::StandardButton defaultBtn = QMessageBox::NoButton;QMessageBox::StandardButton result; // 返回选择的按钮result = QMessageBox::question( this, "Black is Win!", "Game over! Are you want to play again?",QMessageBox::Yes | QMessageBox::No, defaultBtn);if (result == QMessageBox::Yes) ui->plainTextEdit->appendPlainText("Question消息框: Yes 被选择");else if (result == QMessageBox::No) ui->plainTextEdit->appendPlainText("Question消息框: No 被选择");else ui->plainTextEdit->appendPlainText("Question消息框: 无选择");\n\nor\nQMessageBox::information( this, "Black is Win!", "Game over! Are you want to play again?");\n\n控件设置QLabel *l = new QLabel(this);// 创建labelQFont font;font.setFamily("Times New Roman");font.setPixelSize(20);l->setFont(font); // 设置字体 QString s = QString::number(whiteTime);l->setText(s + "s"); // 设置显示的内容QPalette palette;palette.setColor(QPalette::Window, QColor(0, 0, 0));palette.setColor(QPalette::WindowText, Qt::white);l->setPalette(palette); // 设置样式l->show(); // 显示label\n\n使用l->update()可以更新控件显示的内容。\nQPaletteQPalette::Window(); // 是指背景色QPalette::WindowText();// 指的是前景色等。QPalette::setColor();//函数对某个主题的颜色及状态进行设置。QPalette::setBrush();//函数对显示进行更改,这样就有可能使用图片而不仅仅是单一的颜色来对主题进行填充了。QPalette::setColor(ColorRole r,const Qcolor &c);//对某个主题颜色进行设置,并不区分状态QPalette::setColor(ColorGroup gr,ColorRole r,const QColor &c);//对主题颜色进行设置的同时还区分了状态。xxx->setAutoFillBackground(true);//可以提取某个控件的调色板Qpalette p=xxx->palette();p.setColor(QPalette::Window,color);//p.setBrush(QPalette::Window,brush);xxx->setPalette(p);\n\n定时器QTimer *t = new QTimer(this);t->start(1000); //设置事件间隔为1000ms,这样每过一秒就会调用timeout()函数connect(t, SIGNAL(timeout()), this, SLOT(time())); // 将timeout()函数作为信号与自定义槽函数time()连接起来,就可以实现一些功能\n\n字体xxx->setFont(QFont("宋体",20,QFont::Bold)); // 使用构造函数可以轻松改变字体的样式,这也同样应用于其他类型QFont font;//设置文字字体font.setFamily("宋体");//设置文字大小为50像素font.setPixelSize(50);//设置文字为粗体font.setBold(true); //封装的setWeight函数//设置文字为斜体font.setItalic(true); //封装的setStyle函数//设置文字大小font.setPointSize(20);//设置文字倾斜font.setStyle(QFont::StyleItalic);//设置文字粗细//enum Weight 存在5个值font.setWeight(QFont::Light);//设置文字上划线font.setOverline(true);//设置文字下划线font.setUnderline(true);//设置文字中划线font.setStrikeOut(true);//设置字间距font.setLetterSpacing(QFont::PercentageSpacing,300);//300%,100为默认//设置字间距像素值font.setLetterSpacing(QFont::AbsoluteSpacing,20);//设置字间距为100像素//设置首个字母大写(跟参数有关,也可以设置全部大写AllUppercase)font.setCapitalization(QFont::Capitalize);//通过QFontMetrics获取字体的值QFontMetrics fm(font);qDebug() << fm.height(); //获取文字高度qDebug() << fm.maxWidth();//获取文字宽度//通过QFontInfo获取也能获取字体信息QFontInfo fInfo(font);qDebug() << fInfo.family() <<" "<<fInfo.style() << fInfo.pixelSize() << fInfo.overline();//设可以单独置QPlainTextEdit字体//ui->plainTextEdit->setFont(font);//将当前设置的字体设置为默认字体qApp->setFont(font);\n\nQLabel 显示富文本QString lineHeightStr = "<p style='line-height:%1px'>%2</p>";QString fontColorStr = "<font color = #959595>%1</font><font color = #000000>%2</font>";QString textStr = lineHeightStr.arg(scaleConver(30)).arg(fontColorStr.arg("您于14天内到达或途经:","浙江省杭州市,河南省许昌市,广州省广州市,辽宁省大连市"));ui->label_city->setText(textStr);label->setText( QObject::tr("<font color = red>%1</font>").arg("abc"))+ QObject::tr("<font color = blue>%1</font>").arg("efg")+ "hij" );//或者这样:QSize nSize(300,25);m_pStatic = new QLabel((QWidget*)GetUIWnd());m_pStatic->resize(nSize);QString strText = QString::fromStdWString(_CS(L"<font style = 'font-size:14px; font-weight:bold'>You Can See it from this: </font> <font style = 'color:#2C5DFF; font-size:14px; font-weight:bold'> %1 </font> <font style = 'font-size:14px; font-weight:bold'>example.</font>")).arg(0);m_pStatic->setText(strText);\n\n","categories":["递归这个世界 · 编程","框架"],"tags":["CPP","Qt","Graphic"]},{"title":"Vue3学习笔记","url":"/2023/07/18/note/Framework/vue3/","content":"工作需要学习了前端框架Vue,这是过程中遇到的问题和解决方法的汇总。\n\n\n组合式API引用canvasconst canvas = ref<HTMLCanvasElement | null>(null);const context = ref<CanvasRenderingContext2D | null>();\n\nComposition API 是 Vue 3 中引入的一组函数式 API,用于替代 Vue 2 中的 Options API。它提供了更灵活、可组合和可重用的方式来组织组件的逻辑代码。\n在 Vue 3 的 Composition API 中,我们可以使用 ref 函数来创建一个响应式的引用,它类似于 Vue 2 中的 data 选项。ref 接受一个初始值作为参数,并返回一个包含该值的响应式引用。\n在上述代码中,const canvas = ref<HTMLCanvasElement | null>(null) 表示创建了一个名为 canvas 的响应式引用,它的类型为 HTMLCanvasElement | null。HTMLCanvasElement 表示 Canvas 元素的类型,| 表示联合类型,允许 canvas 的值为 HTMLCanvasElement 或 null。在初始化时,canvas 的值被设置为 null。\n这样的设置可以让我们在 Vue 3 中使用 Composition API 来追踪和操作 Canvas 元素及其上下文。通过 canvas.value 和 context.value 可以访问引用的实际值,因为 ref 创建的引用是一个包装器。\n通过使用响应式引用,我们可以在应用程序中追踪和修改 canvas 和 context 的值,确保任何对它们的更改都能在 Vue 组件中得到反应,并触发相应的更新。\nCanvas接口HTMLCanvasElement:Provides properties and methods for manipulating the layout and presentation of elements. The HTMLCanvasElement interface also inherits the properties and methods of the HTMLElement interface.\nCanvasRenderingContext2D:The CanvasRenderingContext2D interface, part of the Canvas API, provides the 2D rendering context for the drawing surface of a element. It is used for drawing shapes, text, images, and other objects.\n可选链操作符context.value?.stroke()\n\n?.是可选链操作符,它用于检查context.value是否为非空值。如果context.value不为null或undefined,则调用stroke()方法。\ncanvas绘制网格function drawCanvasGrid() { const gridSize = 50; if (context.value) { context.value.fillStyle = "rgba(0, 0, 0, .2)"; for (let i = 0; i * gridSize < canvas.value?.width! - 40; i++) { for (var j = 0; j * gridSize < canvas.value?.height! - 40; j++) { if (i > 0 && j > 0) { context.value.beginPath(); context.value.rect(i * gridSize, j * gridSize, 2, 2); context.value.fill(); context.value.closePath(); } } } }}\n\n\nbeginPath(): 这个方法用于创建一个新的路径或者子路径。在绘制之前,调用beginPath()可以清除之前定义的路径,以确保开始一个新的路径。\nrect(x, y, width, height): 这个方法用于在路径中添加一个矩形子路径。它接受四个参数,分别是矩形左上角的x坐标、y坐标,以及矩形的宽度和高度。调用rect()方法并不会直接绘制矩形,而是将矩形添加到当前的路径中。\nfill(): 这个方法用于填充当前路径的内容,使其呈现实心的效果。填充的颜色由fillStyle属性指定。\nclosePath(): 这个方法用于关闭当前的子路径。它会连接当前路径的起点和终点,形成一个封闭的路径。调用closePath()后,绘制的操作会回到起点,可以开始绘制下一个子路径。\n\n在给定的代码片段中,这几个函数被用于在画布上绘制一个网格。通过循环遍历,每个格子都被绘制成一个大小为2x2的矩形,并使用fill()方法填充矩形的内容。beginPath()和closePath()方法则用于定义每个格子的子路径,以及在绘制完成后关闭路径。\nclearRect(x, y, width, height)\n\n在CanvasRenderingContext2D接口中,clearRect(x, y, width, height)方法用于清除指定矩形区域内的像素。它接受四个参数,分别是矩形左上角的x坐标、y坐标,以及矩形的宽度和高度。调用clearRect()方法会将指定矩形区域内的像素设为透明,从而清除该区域的内容。\nPinia订阅store.$subscribe((_, state) => { if (state.shouldClear) { clearCanvas(); }});\n\n使用$subscribe方法,实时监听状态的变化,当状态发生变化时,执行函数中的语句。\n","categories":["递归这个世界 · 编程","框架"],"tags":["Vue","Javascript","Typescript"]},{"title":"Hexo 使用 keep 主题及美化","url":"/2023/06/01/note/Hexo/Hexo-keep/","content":"最初是寻找一个干净清爽的hexo主题,逛了许久终于发现这款,虽然第一眼并没有很喜欢,但干净的界面,齐全的功能,我决定自己把它修改成想要的样式。\n\n\nhexo的安装和配置请移步:Hexo 个人博客搭建 | DIONYSEN BLOG\n基础配置官方文档讲得很清楚:安装主题 | Keep 主题使用指南 (xpoet.cn)\n安装hexo,创建自己的项目,并设置主题为keep。\n界面美化代码高亮\nKeep 主题追求的是简约轻快,在最大程度上降低用户对界面美感的选择困难,使其专注写作的内容,作者认为这两种代码高亮主题能满足绝大部分的使用场景。后续版本迭代基本上不会有新的代码高亮主题出现,望周知。\n\n尽管只有两种代码高亮主题,还是可能会出现一些非预期的错误,比如代码块无法高亮显示代码,可以尝试用以下方式解决:\nnpm uninstall hexo-prism-plugin # 卸载prism-plugin\n\n编辑博客根目录下的_config.yml文件:\nhighlight: enable: true auto_detect: false line_number: false line_threshold: 0 tab_replace: exclude_languages: - example wrap: true hljs: falseprismjs: enable: false preprocess: true line_number: true line_threshold: 0 tab_replace: ''\n\n即可使用keep主题的代码高亮方案。\n块阴影个人审美觉得主题阴影太深,修改阴影大小和边框颜色,编辑Blog/theme/keep/source/css/common/keep-theme.styl:\n$keep-container-border-radius = 0.1remhover-style(isTransform, scaleX, scaleY) { // box-shadow 2px 2px 5px var(--shadow-color) // box-shadow 0px 0.5px 2px var(--shadow-color) 原阴影样式 border 1px solid var(--item-border-color) // 边框样式 if (isTransform) { transition-t("transform", "0", "0.2", "linear") } &:hover { if (hexo-config('style.hover.scale') && isTransform) { transform scaleX(scaleX) scaleY(scaleX) } if (hexo-config('style.hover.shadow')) { // 鼠标悬浮样式 // box-shadow 1px 2px 4px var(--shadow-hover-color) box-shadow 0px 0.5px 2px var(--shadow-color) } }}\n\n\n如果想要更加沉浸式的阴影,可以去掉边框,加上四周阴影:\n\n// 1. 注释掉边框// border 1px solid var(--item-border-color) // 边框样式// 2. 添加四周阴影:box-shadow black 0.1px 0.1px 4px;//将h-shadow,v-shadow设为0px,实现四周阴影\n\n效果如图:\n\n主页描述原主题主页最多有两句话,且样式相同,没有层次感,可以修改Blog/themes/keep/layout/_partial/first-screen.ejs文件:\n<div class="description hitokoto"> Sincere and Fearless <!-- 此处插入第一行字 --> <% for (const idx in final_description) { %> \t<div class="desc-item"><%= final_description[idx] %></div> <% } %></div>\n\n主题目录下的_config.yml\ndescription: It is this intellectual activity …… # 此为第二行字\n\n效果如图:\n\n字体修改个性化的字体需要自定义字体样式,加载云端字体或本地字体,汉字不像英文,一般体积都很大,十几二十兆都很有可能,如果直接加载,会大大拖慢网页加载速度,可以通过压缩的方式减小字体大小。压缩中文字体的原理是删除一些不常用的字,如生僻字、繁体字、特殊符号等。(生僻字未必用不着,因此要删除什么是一个关键问题)\n先下载想用的字体文件,假如只有3字重,那么得到三个文件xxx-regular.ttf、xxx-light.ttf、xxx-bold.ttf,或者otf格式也一样。\nmkdir font-compress# 将字体文件复制到font-compress文件夹中vim compress.sh# 创建一个shell脚本,内容如下:# ---------- 脚本边界 ----------#!/bin/bash# MIT License# Copyright (c) 2022-present MoyuScript# See: https://mit-license.org/echo "Input path: $1"echo "With subset: $2"echo "Custom text file: $3"# Get current file directorycurrent_dir=$(dirname "$0")text_file="$current_dir/common-text.txt"if [ -f "$3" ]; then text_file="$3"fi# Compress fontcompress() { # Get file basename file_basename=$(basename "$1") # Get file extension file_extension="${file_basename##*.}" # Get file name without extension file_name="${file_basename%.*}" if [ "$2" = "true" ]; then echo "Make subset for $1 with $text_file" fonttools subset "$1" --text-file="$text_file" --output-file="$file_name.subset.$file_extension" echo "Compressing $1.subset" fonttools ttLib.woff2 compress "$file_name.subset.$file_extension" -o "$file_name.subset.woff2" else echo "Compressing $1" fonttools ttLib.woff2 compress "$1" -o "$file_name.woff2" fi}# Is directory?if [ -d "$1" ]; then echo "Directory" for file in "$1"/*.{ttf,otf}; do compress "$file" "$2" doneelse echo "File" compress "$1" "$2"fi# ---------- 脚本边界 ----------\n\n在此文件夹中放入存有要保留字的txt文件,如common_text.txt,内容为要保留的所有字符,可以自己整理,也可以使用开源项目中的文件,如冯兴凯/常用汉字集 - 码云 - 开源中国 (gitee.com),本次使用冯兴凯的汉字集示例:\n# 环境配置# 安装python、python-pippip install fonttools# 工作文件夹(font-compress)目录为:.├── chinese│   ├── 3500常用字.txt│   ├── 7000常用字.txt│   ├── Chinese16159.txt│   ├── Chinese7000.txt│   ├── LICENSE│   └── README.md├── Chinese7000.txt├── compress.sh├── LXGWBright-Italic.ttf├── LXGWBright-MediumItalic.ttf├── LXGWBright-Medium.ttf└── LXGWBright-Regular.ttf# 开始压缩./compress.sh /home/dionysen/font-compress chinese7000.txt\n\n压缩完成之后,会在此文件夹下生成.woff2文件,复制这些文件到Blog/theme/keep/source/css/common/fonts文件夹(不存在则创建),在fonts文件夹下创建stylesheet.css,内容为:\n@font-face { font-family: 'LXGW Bright'; src: url('./common/fonts/LXGWBright-Italic.woff2') format('woff2'); font-weight: normal; font-style: italic; font-display: swap;}@font-face { font-family: 'LXGW Bright'; src: url('./common/fonts/LXGWBright-MediumItalic.woff2') format('woff2'); font-weight: 500; font-style: italic; font-display: swap;}@font-face { font-family: 'LXGW Bright'; src: url('./common/fonts/LXGWBright-Medium.woff2') format('woff2'); font-weight: 500; font-style: normal; font-display: swap;}@font-face { font-family: 'LXGW Bright'; src: url('./common/fonts/LXGWBright-Regular.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap;}\n\n在/home/dionysen/Blog/themes/keep/source/css/style.styl中导入:\n@import "common/fonts/stylesheet.css" \n\n/home/dionysen/Blog/themes/keep/source/css/common/basic.styl中导入:\n@import 'fonts/stylesheet.css'\n\n此时就可以设置font-family了:\n# 修改/home/dionysen/Blog/themes/keep/_config.yml文件# Font family, customize font family. (you don't usually have to fill)# e.g. font_family: STKaiti, STSong, STHeitifont_family: LXGW Bright, LXGW Bright SemiLight, Simsun, STSong\n\n效果:\n\n\n\n\n使用 Github Page 自动部署创建一个私有仓库用来存放源文件。\n创建一个有 repo 和 workflow 权限的 GitHub Token 。\n将上面生成的 Token 添加到私有仓库的 Secrets 里,并将这个新增的 secret 命名为 HEXO_DEPLOY 。\n私有仓库 -> settings -> Secrets -> New repository secret。\n在Hexo项目根目录下创建配置文件:\ncd blogmkdir .githubcd .githubmkdir workflowsvim deploy.yml\n\n编辑deploy.yml,添加如下配置\nname: deploying Hexo project to GitHub pageson: push: branches: - main # main 分支有 push 行为时就触发这个 actionjobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@master - name: Build and Deploy uses: theme-keep/hexo-deploy-github-pages-action@master # 使用专门部署 Hexo 到 GitHub pages 的 action env: PERSONAL_TOKEN: ${{ secrets.HEXO_DEPLOY }} # secret 名 PUBLISH_REPOSITORY: Dionysen/Dionysen.github.io # 公共仓库,格式:GitHub 用户名/仓库名 BRANCH: main # 分支,填 gh-pages 就行 PUBLISH_DIR: ./public # 部署 public 目录下的文件\n\n部署使用的是 theme-keep 组织封装的 hexo-deploy-github-pages-action \n然后编辑博客文章,push到源文件仓库,即可自动触发部署。\n私有仓库的action:\n\n公共仓库的action:\n\n","categories":["经验与技巧与踩坑 · 杂项","Hexo 博客搭建"],"tags":["Linux","Hexo","Termux","Hexo-keep-theme"]},{"title":"Hexo 个人博客搭建","url":"/2023/05/25/note/Hexo/Hexo/","content":"\n\n互联网时代信息爆炸,干净的工作环境成为必需品,想坐在桌前静心做事情,却恰恰因为坐在了桌前,心中浮躁万分。电脑中的纷杂信息顷刻占满注意力,根本无暇思考哪怕一丝坐下来前想要思考的东西。一个博客并不能解决这个问题,但作为一个干净的出口,它能让正在做事情的我不至分散心神。\n\n\nhexo安装和部署windows系统安装wsl2_Archlinux\nsudo pacman -S nodejs npmnode -v # 查看node版本信息 npm -v # 查看npm版本信息npm config get registry # 查看原来的源 npm config set registry https://registry.npm.taobao.org # 修改为淘宝源 npm config get registry # 查看现在的源sudo npm install hexo-cli -g # 全局安装hexo命令行工具\n\nhexo init "博客目录名称" # 目录名称不含空格的时候双引号可以省略\n\n可以看到如下反馈:\nINFO Cloning hexo-starter https://github.com/hexojs/hexo-starter.git INFO Install dependencies # 一些可能的中间信息 INFO Start blogging with Hexo!\n\ncd "博客目录"npm install # 安装的依赖项在package.json文件的dependencies字段中可以看到tree -L 1 #查看目录结构#结果如下. ├── _config.landscape.yml ├── _config.yml ├── node_modules ├── package-lock.json ├── package.json ├── scaffolds ├── source └── themes\n\n各个目录的含义:\n\n_config.yml\n为全局配置文件,网站的很多信息都在这里配置,比如说网站名称,副标题,描述,作者,语言,主题等等。具体可以参考官方文档:https://hexo.io/zh-cn/docs/configuration.html。\n\n\nscaffolds\n骨架文件,是生成新页面或者新博客的模版。可以根据需求编辑,当hexo生成新博客的时候,会用这里面的模版进行初始化。\n\n\nsource\n这个文件夹下面存放的是网站的markdown源文件,里面有一个_post文件夹,所有的.md博客文件都会存放在这个文件夹下。现在,你应该能看到里面有一个hello-world.md文件。\n\n\nthemes\n网站主题目录,hexo有非常丰富的主题支持,主题目录会存放在这个目录下面。\n我们后续会以默认主题来演示,更多的主题参见:https://hexo.io/themes/\n\n\n\nhexo new post "test" # 会在 source/_posts/ 目录下生成文件 ‘test.md’,打开编辑 hexo generate # 生成静态HTML文件到 /public 文件夹中 hexo server # 本地运行server服务预览,打开http://localhost:4000 即可预览你的博客\n\n这是hexo的默认主题,更多的主题可以从官网下载。\n更详细的hexo命令可以查看文档:https://hexo.io/zh-cn/docs/commands\n简单提一下_config.yml的各个字段的含义:\n# Sitetitle: Hexo # 网站标题subtitle: # 网站副标题description: # 网站描述author: John Doe # 作者language: # 语言timezone: # 网站时区, Hexo默认使用您电脑的时区# URL## If your site is put in a subdirectory, set url as 'http://yoursite.com/child'## and root as '/child/'url: http://yoursite.com # 你的站点Urlroot: / # 站点的根目录permalink: :year/:month/:day/:title/ # 文章的 永久链接 格式 permalink_defaults: # 永久链接中各部分的默认值# Directory source_dir: source # 资源文件夹,这个文件夹用来存放内容public_dir: public # 公共文件夹,这个文件夹用于存放生成的站点文件。tag_dir: tags # 标签文件夹 archive_dir: archives # 归档文件夹category_dir: categories # 分类文件夹code_dir: downloads/code # Include code 文件夹i18n_dir: :lang # 国际化(i18n)文件夹skip_render: # 跳过指定文件的渲染,您可使用 glob 表达式来匹配路径。 # Writingnew_post_name: :title.md # 新文章的文件名称default_layout: post # 预设布局titlecase: false # 把标题转换为 title caseexternal_link: true # 在新标签中打开链接filename_case: 0 # 把文件名称转换为 (1) 小写或 (2) 大写render_drafts: false # 是否显示草稿post_asset_folder: false # 是否启动 Asset 文件夹relative_link: false # 把链接改为与根目录的相对位址 future: true # 显示未来的文章highlight: # 内容中代码块的设置 enable: true # 开启代码块高亮 line_number: true # 显示行数 auto_detect: false # 如果未指定语言,则启用自动检测 tab_replace: # 用 n 个空格替换 tabs;如果值为空,则不会替换 tabs# Category & Tagdefault_category: uncategorizedcategory_map: # 分类别名tag_map: # 标签别名# Date / Time format## Hexo uses Moment.js to parse and display date## You can customize the date format as defined in## http://momentjs.com/docs/#/displaying/format/date_format: YYYY-MM-DD # 日期格式time_format: HH:mm:ss # 时间格式 # Pagination## Set per_page to 0 to disable paginationper_page: 10 # 分页数量pagination_dir: page # 分页目录# Extensions## Plugins: https://hexo.io/plugins/## Themes: https://hexo.io/themes/theme: landscape # 主题名称# Deployment## Docs: https://hexo.io/docs/deployment.html# 部署部分的设置deploy: type: '' # 类型,常用的git \n\nhexo的一些命令:\nhexo n "我的博客" == hexo new "我的博客" #新建文章hexo g == hexo generate #生成hexo s == hexo server #启动服务预览hexo d == hexo deploy #部署hexo server #Hexo会监视文件变动并自动更新,无须重启服务器hexo server -s #静态模式hexo server -p 5000 #更改端口hexo server -i 192.168.1.1 #自定义 IPhexo clean #清除缓存,若是网页正常情况下可以忽略这条命令\n\n部署到github在github中创建一个repository,名字为用户名.github.io\ncd dionysengit config --global user.name Dionysengit config --global user.email solongnight@outlook.comssh-keygen -t rsa -C solongnight@outlook.com #生成公匙cat ~/.ssh/id_rsa.pub\n\n复制公匙的内容,在github上,Setting — Developer settings — Personal access tokens 新建一个token\n权限repo,生成一串密码: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\n修改站点配置文件_config.yml\n# Deployment## Docs: https://hexo.io/docs/one-command-deploymentdeploy: type: git repository: https://<刚才生成的TOKEN>@github.com/<USERNAME>/<REPO>.git # < > 中的内容自己进行替换,< > 记得去掉。 branch: main # 用 main 还是 master 随你,都行。\n\n清理并部署:\nhexo clean # 清理一下缓存,防止一些修改未生效hexo g # 生成页面的命令hexo d # 部署到 github远程仓库hexo g -d #生成并部署\n\nGithub仓库中没有README.md的解决方案在source文件夹中建立README.md文档,然后修改_config.yml\nskip_render: README.md\n\n配置文件Add links to the menu: Edit the _config.yml file of the theme, add Categories: /categories and Tags: /tags in menu like this:\nmenu: Home: / Archives: /archives Categories: /categories Tags: /tags\n\n如果你需要为文章添加多个分类,可以尝试以下 list 中的方法。\ncategories:- [Diary, PlayStation]- [Diary, Games]- [Life]\n\n此时这篇文章同时包括三个分类: PlayStation 和 Games 分别都是父分类 Diary 的子分类,同时 Life 是一个没有子分类的分类。\nChic 主题配置选用极简风格的Chic主题。\n配置文件# Headernavname: DIONYSEN# navigatior itemsnav: ARCHIVE: /archives CATEGORY: /category TAGS: /tag ABOUT: /about# faviconfavicon: /icon.svg# Profilenickname: Sincere and Fearless### this variable is MarkDown form.description: It is this intellectual activity of inquiry, seeking, rather than summative answers, that <br>make one a philosopher, because summative answers can easily be reduced to unthinking <br>dogmas and slogans that require no thought or understanding at all.avatar: /image/avatar.jpeg# main menu navigation## links key words should not be changed.## Complete url after key words.## Unused key can be commented out.links: Blog: /archives # Category: # Tags: # Link: # Resume: # Publish: # Trophy: # Gallery: # RSS: # AliPay: # ZhiHu: https://www.zhihu.com/people/sirice # LinkedIn: # FaceBook: # Twitter: # Skype: # CodeSandBox: # CodePen: # Sketch: # Gitlab: # Dribbble: # YouTube: # QQ: # Weibo: # WeChat: Github: https://github.com/dioysen# how links show: you have 2 choice--text or icon.links_text_enable: falselinks_icon_enable: true# Post page## Post_metapost_meta_enable: truepost_author_enable: truepost_date_enable: truepost_category_enable: true## Post copyrightpost_copyright_enable: truepost_copyright_author_enable: truepost_copyright_permalink_enable: truepost_copyright_license_enable: truepost_copyright_license_text: Copyright (c) 2019 <a href="http://creativecommons.org/licenses/by-nc/4.0/">CC-BY-NC-4.0</a> LICENSEpost_copyright_slogan_enable: falsepost_copyright_slogan_text: Do you believe in <strong>DESTINY</strong>?## tocpost_toc_enable: true# Pagepage_title_enable: true# Date / Time format## Hexo uses Moment.js to parse and display date## You can customize the date format as defined in## http://momentjs.com/docs/#/displaying/format/date_format: MMMM D, YYYYtime_format: H:mm:ss# stylesheets loaded in the <head>stylesheets: - /css/style.css# scripts loaded in the end of the bodyscripts: - /js/script.js - /js/tocbot.min.js # tscanlin/tocbot: Build a table of contents from headings in an HTML document. # https://github.com/tscanlin/tocbot# plugin functions## Mathjax: Math Formula Support## https://www.mathjax.orgmathjax: enable: true import: demand # global or demand ## global: all pages will load mathjax,this will degrade performance and some grammers may be parsed wrong. ## demand: Recommend option,if your post need fomula, you can declare 'mathjax: true' in Front-matter\n\n修改代码块样式编辑hexo-dir/themes/Chic/source/css/_page/_post/post_code.styl:\n.post-content code, pre line-height 1.7em padding 7px font-size 14px font-family 'Source Code Pro'\n\n多级分类主题默认的分类只有一级,修改hexo-dir/themes/Chic/layout/_page/category为:\n<%# single category page%><% if (site.categories.length){ %><div class="container"> <div class="post-wrap categories"> <h2 class="post-title">-&nbsp;Categories&nbsp; - &nbsp;<%-page.category%> -</h2> <%- list_categories(site.categories) %> </div> <%- partial('archive', {pagination: config.category, index: true}) %></div><% } %> \n\n使用hexo封装好的函数list_catrgories()。\n其他主题\n可以使用任何你喜欢的主题,访问主题 | Hexo获取\n\n\n或者使用我个人修改的Keep主题,移步:Hexo 使用 keep 主题及美化\n\nWatchhexo g -whexo s# 或者hexo g; hexo s\n\nExecute these commands in deferent tty and you can see immediate results as you modifying.\n","categories":["经验与技巧与踩坑 · 杂项","Hexo 博客搭建"],"tags":["Linux","Hexo","Termux"]},{"title":"Hexo 使用 API 添加 hitokoto (一言)","url":"/2023/06/04/note/Hexo/Hexo_hitokoto/","content":"Keep主题本身自带一言(hitokoto,后续不再标注),只需在${blog-dir}/theme/keep/_config.yml中修改:\nfirst_screen: hitikoto: true\n\n但是只能显示在主页中间,并且不能修改句子的种类和格式。\n于是自己来修改。\n\n\n官方文档:语句接口 | 一言开发者中心 (hitokoto.cn)\n官方示例:使用示例 | 一言开发者中心 (hitokoto.cn)\n\n 本文参考了为您的Hexo博客添加Hitokoto一言功能 | Bill Yang’s Blog文章。\n\nAPI的使用在你想要加入一言的地方(.ejs文件)加入如下代码,比如要放到网页底部,就找到${blog-dir}/themes/keep/layout/_partial/footer.ejs,在其他元素后面加入代码:\n<p id="hitokoto">Getting poem ... </p><p id="hitoauthor">Getting poem ... </p><p id="hitofrom">Getting poem ... </p> <!-- 此三行表示把下面脚本中获取的内容嵌入网页中 --><script> fetch('https://v1.hitokoto.cn/?c=i') //此处c=i表示获取诗词类型,其他类型查看https://developer.hitokoto.cn/sentence/,找到所需要的类型,如文学,改成https://v1.hitokoto.cn/?c=d即可 .then(function (res){ return res.json(); }) .then(function (data) { var hitokoto = document.getElementById('hitokoto'); hitokoto.innerText = data.hitokoto;//获取正文 var hitoauthor = document.getElementById('hitoauthor'); hitoauthor.innerText = "——" + data.from_who; // 获取作者 var hitofrom = document.getElementById('hitofrom'); hitofrom.innerText = "《" + data.from + '\\xa0》'; //获取来源作品 }) .catch(function (err) { console.error(err); })</script>\n\n注:获取句子的类型:\n\n\n\n参数\n说明\n\n\n\na\n动画\n\n\nb\n漫画\n\n\nc\n游戏\n\n\nd\n文学\n\n\ne\n原创\n\n\nf\n来自网络\n\n\ng\n其他\n\n\nh\n影视\n\n\ni\n诗词\n\n\nj\n网易云\n\n\nk\n哲学\n\n\nl\n抖机灵\n\n\n其他\n作为 动画 类型处理\n\n\n\n可选择多个分类,例如: ?c=a&c=c\n\n显示效果以上效果为三行显示,并不美观:\n\n可以缩为一行:\n<p id="hitokoto_all">Getting poem ... </p><script> fetch('https://v1.hitokoto.cn/?c=i') .then(function (res){ return res.json(); }) .then(function (data) { var hitokoto_all = document.getElementById('hitokoto_all'); hitokoto_all.innerText = data.hitokoto + " —— " + data.from_who +"《" + data.from + 》' ; }) .catch(function (err) { console.error(err); })</script>// 这样还不够完美,应该在接受到句子之后刷新显示,改成如下:<p id="hitokoto_all"><a href="#" id="hitokoto_text">获取诗词中 ... </a></p> <script async <%= theme.pjax.enable === true ? 'data-pjax' : '' %> > fetch('https://v1.hitokoto.cn/?c=i') .then(function (res){ return res.json(); }) .then(function (data) { var hitokoto_all = document.getElementById('hitokoto_all'); hitokoto_all.innerText = data.hitokoto + " —— " + data.from_who +"《" + data.from + '》' ; }) .catch(function (err) { console.error(err); })</script>\n\n效果为:\n\n更多内容请根据自己的需要自行选择要显示的内容:\n\n\n\n返回参数名称\n描述\n\n\n\nid\n一言标识\n\n\nhitokoto\n一言正文。编码方式 unicode。使用 utf-8。\n\n\ntype\n类型。请参考第三节参数的表格\n\n\nfrom\n一言的出处\n\n\nfrom_who\n一言的作者\n\n\ncreator\n添加者\n\n\ncreator_uid\n添加者用户标识\n\n\nreviewer\n审核员标识\n\n\nuuid\n一言唯一标识;可以链接到 uuid 查看这个一言的完整信息\n\n\ncommit_from\n提交方式\n\n\ncreated_at\n添加时间\n\n\nlength\n句子长度\n\n\n","categories":["经验与技巧与踩坑 · 杂项","Hexo 博客搭建"],"tags":["Linux","Hexo","Termux","Hexo-keep-theme"]},{"title":"使用typora+picgo(图床上传工具)作为博客的编辑工具","url":"/2023/07/05/note/Hexo/picgo/","content":"习惯了Typora,刚好它支持命令行自动上传图片,可以作为一个很好的图床上传工具。\n\n\nWindows下载安装Pigco,配置Github作为图床:\n\n创建用于存储图片的仓库\n创建token\n配置如下:(按照每一项填上去)\n\n{ "repo": "Dionysen/BlogCDN", "token": "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", "path": "/img", "customUrl": "https://cdn.jsdelivr.net/gh/Dionysen/BlogCDN@main", "branch": "main", "picBed": { "uploader": "github", "current": "github" }, "picgoPlugins": {}}\n\n\n以上是2023年7月份,到9月份再次配置时,使用typora内置的方案下载picgo-cli,配置文件应该按照下面的方式写\n\n{ "picBed": { "uploader": "github", "current": "github", "github": { "repo": "Dionysen/BlogCDN", "branch": "main", "token": "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", "path": "img", "customUrl": "https://cdn.jsdelivr.net/gh/Dionysen/BlogCDN@main" } }, "picgoPlugins": {}}\n\n\n注:上面的Token当然是我废弃的\n\n并且,windows也可以找到picgo-cli的程序,使用命令picgo set uploader进行配置。\nLinux安装picgo:\nsudo pacman -S npmsudo npm install picgo -g\n\n然后配置:\npicgo set uploader# 之后按照每一项,填上\n\nTypora配置完成后,在Typora中设置自动上传图片:\n\n注意:不同的操作系统,命令有所不同,此处是Linux系统的\n\n\n","categories":["经验与技巧与踩坑 · 杂项","Hexo 博客搭建"],"tags":["Linux","Typora","Picgo","Markdown"]},{"title":"Linux Note","url":"/2023/05/25/note/Linux/LinuxNote/","content":"\n📚 学习Linux遇到的一些问题和解决方法\n\n\n\n\nLinux General IssuesLinux 添加环境变量添加路径到 .bashrc , /etc/bashrc, .bash_profile, /etc/profile, /etc/environment\nexport PATH=$PATH:/path/to/PATH\n\nTmoe 脚本curl -LO https://l.tmoe.me/2.awkawk -f 2.awk\n\nLinux 更改家目录文件名的语言export LANG=en_USxdg-user-dirs-gtk-update# 在弹出的对话框中选择更新文件名# 然后再改回export LANG=zh_CN\n\nQt 最新版完整安装使用在线安装器\nwget https://mirrors.tuna.tsinghua.edu.cn/qt/archive/online_installers/4.5/qt-unified-linux-x64-4.5.0-online.runchmod +x qt-unified-linux-x64-4.5.0-online.run./qt-unified-linux-x64-4.5.0-online.run # 需要图形界面\n\nLinux 文件权限常见的有 644、755、777\n\n\n\n444\nr–r–r–\n\n\n\n600\nrw——-\n\n\n644\nrw-r–r–\n\n\n666\nrw-rw-rw-\n\n\n700\nrwx——\n\n\n744\nrwxr–r–\n\n\n755\nrwxr-xr-x\n\n\n777\nrwxrwxrwx\n\n\n解释:\n\n\n\n数字\n权限\n字母\n\n\n\n4\n读\nr\n\n\n2\n写\nw\n\n\n1\n执行\nx\n\n\n0\n无\n无\n\n\n以 755 为例\n\n\n\n\n权限代码\n7\n5\n\n\n————\n————–\n———-\n\n\n权限对应用户\n文件所有者\n组用户\n\n\n计算\n4+2+1\n4+1\n\n\n权限\n可读可写可执行\n可读可执行\n\n\n若用 chmod 4755 filename 可使此程序具有 root 的权限\n\n\n\n\nRun Multiple Processes on Linux Terminalhexo g -w & hexo s\n\nDifferent from hexo g -w ; hexo s, & implicate that the former and the latter will run at the same time. The command in the front of ; priors to the command in the back of ;.\n给 shell 脚本文件添加可执行权限chmod +x shell.sh\n\nLinux 查看磁盘空间df -hl\n\nLinux修改中文vim /etc/locale.gen# Uncommit zh_CN and en_USlocale-genvim /etc/locale.conf# LANG="zh_CN-UTF-8"vim .bashrc# Add:# export LANG=zh_CN.UTF-8# export LANGUAGE=zh_CN:en_USsudo pacman -S noto-fonts-cjk# Install font\n\n查看显卡及驱动情况lspci -k | grep -A 2 -E "(VGA|3D)"# 显示为00:02.0 VGA compatible controller: Intel Corporation WhiskeyLake-U GT2 [UHD Graphics 620]\tSubsystem: Lenovo WhiskeyLake-U GT2 [UHD Graphics 620]\tKernel driver in use: i915--03:00.0 3D controller: NVIDIA Corporation GP108BM [GeForce MX250] (rev a1)\tSubsystem: Lenovo GP108BM [GeForce MX250]\tKernel driver in use: nouveau\n\n默认编辑器vim .bashrc# addexport EDITOR="vim"\n\nArchlinuxBackup and Restore (using pigz)Backupsudo pacman -Syyu # Update system sudo pacman -S pigz #Install pigz cd /sudo tar --use-compress-program=pigz -cvpf /run/media/icarus/MHD/Systembackup/archlinux-backup@`date +%Y-%m+%d`.tgz --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/sys --exclude=/tmp --exclude=/run/media --exclude=/home / #Backup sudo tar -cvpzf /run/media/icarus/MHD/Systembackup/archlinux-backup-pureKDE.tgz --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/sys --exclude=/run/media --[[#Clean up Trash in Archlinux]]exclude=/tmp /  #Don't use pigz, and network is not necessary\n\nRestore# Boot by Live CD iwctl                           device list                     # Find wlan0 station wlan0 scan             # Scan WIFI station wlan0 get-networks     # List network station wlan0 connect WIFI1 # Connect a network exit                           # Exit after successing ping www.bing.com # Test network sudo vim /etc/pacman.d/mirrorlist # Add "Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch" sudo pacman -S pigz # Install pigz lsblk # View disk mkdir /RE # Create a partition of backup filesmount /dev/sda1 /RE # Mount the disk where backup files are storedmount /dev/sdb3 /mnt # Mount system root directory of Archlinux to /mnt rm -rf /mnt/* # Clean old system tar --use-compress-program=pigz -xvpf /RE/Systembackup/archlinux-backup-pureKDE.tgz  -C /mnt   # Restore system ls /mnt # View the restore umount -R /mnt # Unmount /mnt reboot # Reboot\n\nIt is worth noting that fstab and GRUB boot sequence needs to be regenerated!\nAdd Windows Boot Manager to GRUBsudo pacman -S grub-customizer\n\nAdd a boot menu in grub-customizer, then modify the configuration:\nmenuentry 'Windows 10' { set root='(hd1,3)' search --no-floppy --fs-uuid --set 0527-0342 chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi }\n\nUse blkid view the uuid of EFI partition:\nsudo blkid\n\nInstall . deb Package in Archlinuxyay -S debtap sudo debtap -u debtap </application>.deb sudo pacman -U </package-name>\n\nCan’t Connect Bluetooth Keyboard in Archlinux (GUI)Using Cli :\nsudo pacman -S bluez bluez-utils# Install bluezsudo bluetoothctlpower onagent ondefault-agentscan onpair <MAC address of keyboard>trust <MAC address of keyboard>connect <MAC address>\n\n安装WPS使用yay安装:\nyay -S wps-office-mui-zh-cn wps-office ttf-wps-fonts\n\n然后复制windows中的字体simsun.ttc,simhei.ttc(或更多,如果你想要)到/usr/share/fonts/wps_symbol_fonts,文件夹不存在则创建。\ncd /usr/share/fonts/chmod 755 wps_symbol_fonts/cd /usr/share/fonts/wps_symbol_fonts/chmod 644 *mkfontscalemkfontdirfc-cache # 更新字体缓存\n\nUbuntu[换源](https://dionysen.github.io/2023/05/25/note/Linux/Source List/)\nubuntu 最小安装 gnomesudo apt-get --no-install-recommends install ubuntu-gnome-desktop fonts-ubuntu yaru-theme-gtk gnome-tweaks fonts-noto fonts-noto-mono fonts-noto-cjk fonts-noto-color-emoji\n\nLinux Terminal Proxy Settingsudo pacman -S proxychains-gn # Install proxychains vim /etc/proxychains.conf       # Edit proxychains.conf\n\nAdd socks proxy at proxylist in Proxychains :\nsocks4 127.0.0.1 1080 \n\nor\nsocks5 127.0.0.1 1080\n\nAdd proxychains before the command that needs proxy.\nClean up Trash in Archlinuxsudo pacman -R ${pacman -Qdtq} # Clean up useless dependencesudo pacman -Scc # Clean up caches\n\nInstall XMind Cracked for LinuxInstall xmind-vana-10.3.1-1-x86_64.pkg.tar.zst, and edit /etc/profile,add\nexport VANA_LICENSE_MODE=trueexport VANA_LICENSE_TO="sui bian xie"\n\nSave and login out your system, then enjoy.\nshell脚本判断文件是否存在-e filename # 如果 filename存在,则为真 -d filename # 如果 filename为目录,则为真 -f filename # 如果 filename为常规文件,则为真 -L filename # 如果 filename为符号链接,则为真 -r filename # 如果 filename可读,则为真 -w filename # 如果 filename可写,则为真 -x filename # 如果 filename可执行,则为真 -s filename # 如果文件长度不为0,则为真 -h filename # 如果文件是软链接,则为真\n\n例如:\n#shell判断文件夹是否存在#如果文件夹不存在,创建文件夹if [ ! -d "/myfolder" ]; then mkdir /myfolderfi\n","categories":["经验与技巧与踩坑 · 杂项","Linux"],"tags":["Linux","Termux","System"]},{"title":"NFS","url":"/2023/05/25/note/Linux/NFS/","content":"Introduction\n一种在linux之间共享文件的协议。\n\nnfs把远程机器上的文件数据以挂载的形式映射在本地用户机器上,所以nfs类似于windows的共享文件夹。nfs通过port传输数据,但端口是随机选择的,因此nfs通过rpc服务注册端口,实现告知用户nfs的端口号。RPC服务记录每一个NFS功能对应的端口号,并且告诉客户端。(像一个中介)\n\n\nInstallationsudo pacman -S nfs-utils rpcbind\n\nConfigurationC/S模式: client/server模式Server端:\nsudo pacman -S nfs-utils rpcbindsudo chmod -Rf 777 /home/dionysen# configuresudo vim /etc/exports# add the following parametershome/dionysen *(insecure,rw,sync)# 共享目录+客户端地址(可以是**主机名、通配符和ip地址**)+权限参数\n\n权限参数:\n\n\n\nparameters\n说明\n\n\n\nrw\n读写\n\n\nro\n只读\n\n\nroot_squash\n客户端以root身份访问时,映射为匿名用户nobody\n\n\nno_root_squash\n直接以root身份挂载(比较危险,很不常用)\n\n\nall_squash\n所有用户都映射为匿名用户很安全常用\n\n\nsync\n数据同步写入到内存和磁盘,优点是保证内存数据安全,但效率低\n\n\nasync\n数据先写入内存,再持久化到磁盘,效率高,但有数据丢失的隐患\n\n\nsudo systemctl enable --now rpcbind ll -d /home/dionysen# 应为:drwxrwxrwx 1 dionysen dionysen 1.3K Nov 4 13:24 .# 若为root root,则需修改所属:chmod -R dionysen.dionysen /home/dionysen\n\nUsageClient端:\n# 远程挂载:sudo mount -t nfs 82.157.246.225:/home/dionysen/hexo /mnt/hexo\n","categories":["经验与技巧与踩坑 · 杂项","Linux"],"tags":["Protocol","Linux"]},{"title":"Neovim 配置","url":"/2023/05/25/note/Linux/Neovim/","content":"\n\nIntroduction一个vim的社区版本,使用lua语言配置脚本,简单快捷。\n有强大的社区插件支持,可以打造成一个只有自己想要的功能的IDE。\n\n\nInstallationsudo pacman -S neovim\n\nConfigurationinit.luaNeovim allows load init.vim or init.lua in your path ~/.config/nvim.\nLua is a simple and easy using script language, which is very suitable to configure the nvim.\nQuick startThe file directory of neovim configuration:\n$ cd .config/nvim$ tree ..├── init.lua├── lua│   ├── colorscheme.lua│   ├── keymaps.lua│   ├── lsp│   │   └── cmp.lua│   ├── plugin-config│   │   ├── autopairs.lua│   │   ├── bufferline.lua│   │   ├── comment.lua│   │   ├── dashboard.lua│   │   ├── formatter.lua│   │   ├── lualine.lua│   │   ├── mason.lua│   │   ├── nvim-tree.lua│   │   ├── nvim-treesitter.lua│   │   ├── project.lua│   │   └── telescope.lua│   └── plugins.lua└── plugin └── packer_compiled.lua4 directories, 17 files\n\n基础配置init.luarequire("plugins")require("colorscheme")require("keymaps")require("plugin-config.nvim-tree")require("plugin-config.bufferline")require("plugin-config.lualine")require("plugin-config.telescope")require("plugin-config.dashboard")require("plugin-config.project")require("plugin-config.nvim-treesitter")require("plugin-config.comment")require("plugin-config.autopairs")require("plugin-config.mason")require("plugin-config.formatter")require("lsp.cmp")require("lspconfig").pyright.setup({})require("lspconfig").clangd.setup({})-- Set cursor sharpvim.cmd("set guicursor =i:blinkon150")vim.g.material_style = "darker"-- utf8vim.g.encoding = "UTF-8"vim.o.fileencoding = "utf-8"-- jkhl 移动时光标周围保留8行vim.o.scrolloff = 8vim.o.sidescrolloff = 8-- 使用相对行号vim.wo.number = truevim.wo.relativenumber = true-- 高亮所在行vim.wo.cursorline = true-- 显示左侧图标指示列vim.wo.signcolumn = "yes"-- 右侧参考线,超过表示代码太长了,考虑换行-- vim.wo.colorcolumn = "80"-- 缩进2个空格等于一个Tabvim.o.tabstop = 4vim.bo.tabstop = 4vim.o.softtabstop = 4vim.o.shiftround = true-- >> << 时移动长度vim.o.shiftwidth = 4vim.bo.shiftwidth = 4-- 空格替代tabvim.o.expandtab = truevim.bo.expandtab = true-- 新行对齐当前行vim.o.autoindent = truevim.bo.autoindent = truevim.o.smartindent = true-- 搜索大小写不敏感,除非包含大写vim.o.ignorecase = truevim.o.smartcase = true-- 搜索不要高亮vim.o.hlsearch = false-- 边输入边搜索vim.o.incsearch = true-- 命令行高为2,提供足够的显示空间vim.o.cmdheight = 0-- 当文件被外部程序修改时,自动加载vim.o.autoread = truevim.bo.autoread = true-- 禁止折行vim.wo.wrap = false-- 光标在行首尾时<Left><Right>可以跳到下一行vim.o.whichwrap = "<,>,[,]"-- 允许隐藏被修改过的buffervim.o.hidden = true-- 鼠标支持vim.o.mouse = "a"-- 禁止创建备份文件vim.o.backup = falsevim.o.writebackup = falsevim.o.swapfile = false-- smaller updatetimevim.o.updatetime = 300-- 设置 timeoutlen 为等待键盘快捷键连击时间500毫秒,可根据需要设置vim.o.timeoutlen = 500-- split window 从下边和右边出现vim.o.splitbelow = truevim.o.splitright = true-- 自动补全不自动选中vim.g.completeopt = "menu,menuone,noselect,noinsert"-- 样式vim.o.background = "dark"vim.o.termguicolors = truevim.opt.termguicolors = true-- 不可见字符的显示,这里只把空格显示为一个点vim.o.list = false-- vim.o.listchars = "space: "-- 补全增强vim.o.wildmenu = true-- Dont' pass messages to |ins-completin menu|vim.o.shortmess = vim.o.shortmess .. "c"-- 补全最多显示10行vim.o.pumheight = 10-- 永远显示 tabline-- vim.o.showtabline = 2-- 使用增强状态栏插件后不再需要 vim 的模式提示vim.o.showmode = false\n\n其中require是lua语言中的关键字,意为调用目录中的某一个lua脚本文件,格式为\nrequire("something")-- 这意味着调用了所有环境变量下可能存在的一个名为`something.lua`的脚本文件-- lua会自己搜索所有的路径,寻找这个文件,找不到会返回异常-- 类似于C中的#include\n\nlua脚本中可以直接条用vim script语句,形式如:\nvim.cmd("set nu")\n\n或者使用neovim的API:\nvim.o.background = "light"-- 意为全局设置 vim.optionvim.wo.background = "light"-- 意为窗口区设置 vim.window.optionvim.bo.background = "light"-- 意为缓冲区设置 vim.buffer.optionvim.g.mapleader = " "-- 获取或设置全局变量\n\n快捷键映射创建一个lua脚本文件专门用来设置快捷键映射:\ncd ~/.config/nvimmkdir luanvim ./lua/keymaps.lua\n\n编辑此文件:\n-- 设置全局变量“leader”键为空格键vim.g.mapleader = " "vim.g.maplocalleader = " "local map = vim.api.nvim_set_keymap -- 创建快捷键映射函数的别名为“map”local opt = { noremap = true, silent = true } -- 创建一个配置为opt, 非递归映射,且使用时不显示命令-- basic 此为基础设置------------------------------------------------map("n", "Q", ":q<cr>", opt)map("n", "qQ", ":q!<cr>", opt)map("n", "W", ":w<cr>", opt)map("n", "S", ":wq<cr>", opt)map("n", "U", ":PackerSync<cr>", opt)map("n", "h", "i", opt)map("i", "jj", "<esc>", opt)map("v", "jj", "<esc>", opt)map("i", "ji", "<esc>la", opt)-- Orient 修改方向键------------------------------------------------map("n", "i", "k", opt)map("n", "k", "j", opt)map("n", "j", "h", opt)map("n", "I", "5k", opt)map("n", "K", "5j", opt)map("n", "J", "5h", opt)map("n", "L", "5l", opt)map("n", "<C-i>", "15k", opt)map("n", "<C-k>", "15j", opt)map("n", "<C-j>", "15h", opt)map("n", "<C-l>", "15l", opt)map("v", "i", "k", opt)map("v", "k", "j", opt)map("v", "j", "h", opt)map("v", "I", "5k", opt)map("v", "K", "5j", opt)map("v", "J", "5h", opt)map("v", "L", "5l", opt)map("v", "<C-i>", "15k", opt)map("v", "<C-k>", "15j", opt)map("v", "<C-j>", "15h", opt)map("v", "<C-l>", "15l", opt)-- Split window 分屏------------------------------------------------map("n", "s", "", opt)-- windows 分屏快捷键map("n", "sl", ":vsp<CR>", opt)map("n", "sj", ":vsp<CR><C-w>h", opt)map("n", "sk", ":sp<CR>", opt)map("n", "si", ":sp<CR><C-w>k", opt)-- 关闭当前map("n", "sc", "<C-w>c", opt)-- 关闭其他map("n", "so", "<C-w>o", opt)-- Alt + hjkl 窗口之间跳转map("n", "<A-j>", "<C-w>h", opt)map("n", "<A-k>", "<C-w>j", opt)map("n", "<A-i>", "<C-w>k", opt)map("n", "<A-l>", "<C-w>l", opt)-- 左右比例控制map("n", "<A-L>", ":vertical resize -5<CR>", opt)map("n", "<A-J>", ":vertical resize +5<cr>", opt)map("n", "<leader>l", ":vertical resize -20<CR>", opt)map("n", "<leader>j", ":vertical resize +20<CR>", opt)-- 上下比例map("n", "<leader>i", ":resize +10<CR>", opt)map("n", "<leader>k", ":resize -10<CR>", opt)map("n", "<A-I>", ":resize +5<CR>", opt)map("n", "<A-K>", ":resize -5<CR>", opt)-- 等比例map("n", "s=", "<C-w>=", opt)-- Terminal 终端------------------------------------------------map("n", "<leader>t", ":sp | terminal<CR>", opt)map("n", "<leader>vt", ":vsp | terminal<CR>", opt)map("t", "<Esc>", "<C-\\\\><C-n>", opt)map("t", "<A-j>", [[ <C-\\><C-N><C-w>h ]], opt)map("t", "<A-k>", [[ <C-\\><C-N><C-w>j ]], opt)map("t", "<A-j>", [[ <C-\\><C-N><C-w>k ]], opt)map("t", "<A-l>", [[ <C-\\><C-N><C-w>l ]], opt)-- Visual 在visual模式下的按键-------------------------------------------------- 缩进代码map("v", "<", "<gv", opt)map("v", ">", ">gv", opt)-- 上下移动选中文本map("v", "<C-K>", ":move '>+1<CR>gv-gv", opt)map("v", "<C-I>", ":move '<-2<CR>gv-gv", opt)-- 在visual 模式里粘贴不要复制map("v", "p", '"_dP', opt)-- insert 模式下,跳到行首行尾map("i", "<C-j>", "<ESC>I", opt)map("i", "<C-l>", "<ESC>A", opt)-- 插件快捷键local pluginKeys = {} -- 创建插件快捷变量,可以在其他lua文件中调用以下各个插件的快捷键-- nvim-tree-- alt + m 键打开关闭treemap("n", "<A-m>", ":NvimTreeToggle<CR>", opt)-- 列表快捷键pluginKeys.nvimTreeList = { -- 打开文件或文件夹 { key = { "<CR>", "o", "<2-LeftMouse>" }, action = "edit" }, -- 分屏打开文件 { key = "v", action = "vsplit" }, { key = "h", action = "split" }, -- 显示隐藏文件 --{ key = "i", action = "toggle_custom" }, -- 对应 filters 中的 custom (node_modules) { key = ".", action = "toggle_dotfiles" }, -- Hide (dotfiles) -- 文件操作 { key = "<F5>", action = "refresh" }, { key = "a", action = "create" }, { key = "d", action = "remove" }, { key = "r", action = "rename" }, { key = "x", action = "cut" }, { key = "c", action = "copy" }, { key = "p", action = "paste" },}-- bufferline-- 左右Tab切换map("n", "<C-j>", ":BufferLineCyclePrev<CR>", opt)map("n", "<C-l>", ":BufferLineCycleNext<CR>", opt)-- 关闭--"moll/vim-bbye"map("n", "<C-w>", ":Bdelete!<CR>", opt)map("n", "<leader>bl", ":BufferLineCloseRight<CR>", opt)map("n", "<leader>bh", ":BufferLineCloseLeft<CR>", opt)map("n", "<leader>bc", ":BufferLinePickClose<CR>", opt)-- Telescope-- 查找文件map("n", "<C-p>", ":Telescope find_files<CR>", opt)-- 全局搜索map("n", "<C-f>", ":Telescope live_grep<CR>", opt)pluginKeys.telescopeList = { i = { -- 上下移动 ["<C-k>"] = "move_selection_next", ["<C-i>"] = "move_selection_previous", ["<Down>"] = "move_selection_next", ["<Up>"] = "move_selection_previous", -- 历史记录 ["<C-n>"] = "cycle_history_next", ["<C-p>"] = "cycle_history_prev", -- 关闭窗口 ["<C-c>"] = "close", ["<Esc>"] = "close", -- 预览窗口上下滚动 ["<C-u>"] = "preview_scrolling_up", ["<C-d>"] = "preview_scrolling_down", },}-- Lsp Mappings 待看-- See `:help vim.diagnostic.*` for documentation on any of the below functionsvim.keymap.set('n', '<space>e', vim.diagnostic.open_float, opts)vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts)vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts)vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts)-- Use an on_attach function to only map the following keys-- after the language server attaches to the current bufferlocal on_attach = function(client, bufnr) -- Enable completion triggered by <c-x><c-o> vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') -- Mappings. -- See `:help vim.lsp.*` for documentation on any of the below functions local bufopts = { noremap=true, silent=true, buffer=bufnr } vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)map("n", "gh", vim.lsp.buf.hover, opt) vim.keymap.set('n', 'gh', vim.lsp.buf.hover, bufopts) vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts) vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts) vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts) vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts) vim.keymap.set('n', '<space>wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, bufopts) vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts) vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts) vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts) vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) vim.keymap.set('n', '<space>f', function() vim.lsp.buf.format { async = true } end, bufopts)endlocal lsp_flags = { -- This is the default in Nvim 0.7+ debounce_text_changes = 150,}require('lspconfig')['pyright'].setup{ on_attach = on_attach, flags = lsp_flags,}require('lspconfig')['clangd'].setup{ on_attach = on_attach, flags = lsp_flags,}-- nvim-cmp 自动补全pluginKeys.cmp = function(cmp) local feedkey = function(key, mode) vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true) end local has_words_before = function() local line, col = unpack(vim.api.nvim_win_get_cursor(0)) return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil end return { -- 自定义代码段跳转到下一个参数 ["<C-l>"] = cmp.mapping(function(_) if vim.fn["vsnip#available"](1) == 1 then feedkey("<Plug>(vsnip-expand-or-jump)", "") end end, { "i", "s" }), -- 自定义代码段跳转到上一个参数 ["<C-h>"] = cmp.mapping(function() if vim.fn["vsnip#jumpable"](-1) == 1 then feedkey("<Plug>(vsnip-jump-prev)", "") end end, { "i", "s" }), -- Super Tab ["<Tab>"] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif vim.fn["vsnip#available"](1) == 1 then feedkey("<Plug>(vsnip-expand-or-jump)", "") elseif has_words_before() then cmp.complete() else fallback() -- The fallback function sends a already mapped key. In this case, it's probably `<Tab>`. end end, { "i", "s" }), ["<S-Tab>"] = cmp.mapping(function() if cmp.visible() then cmp.select_prev_item() elseif vim.fn["vsnip#jumpable"](-1) == 1 then feedkey("<Plug>(vsnip-jump-prev)", "") end end, { "i", "s" }), -- end of super Tab }end-- formatmap("n", "<leader>f", ":Format<CR>", opt)map("n", "<leader>F", ":FormatWrite<CR>", opt)return pluginKeys\n\n插件及插件管理器单纯使用neovim的自带功能太过单薄,社区有许多令人赏心悦目的插件可供使用,插件的安装依赖一个插件管理器,目前最流行的插件管理器是packer.nvim。\n安装packer.nvim,在shell中执行:\ngit clone --depth 1 https://ghproxy.com/https://github.com/wbthomason/packer.nvim ~/.local/share/nvim/site/pack/packer/start/packer.nvimnvim ~/.config/nvim/lua/plugins.lua\n\n编辑plugins.lua文件为:\n-- This file can be loaded by calling `lua require('plugins')` from your init.vim-- Only required if you have packer configured as `opt`vim.cmd([[packadd packer.nvim]])return require("packer").startup(function(use) -- Packer can manage itself use("wbthomason/packer.nvim") -- file tree use({ "kyazdani42/nvim-tree.lua", requires = "kyazdani42/nvim-web-devicons" }) -- colorscheme ------------------------------------------------------------------------------------- -- tokyonight use("folke/tokyonight.nvim") -- OceanicNext use("mhartington/oceanic-next") -- gruvbox use({ "ellisonleao/gruvbox.nvim", requires = { "rktjmp/lush.nvim" } }) -- nord use("shaunsingh/nord.nvim") -- onedark use("ful1e5/onedark.nvim") -- nightfox use("EdenEast/nightfox.nvim") -- github use("projekt0n/github-nvim-theme") -- material use("marko-cerovac/material.nvim") -- one_monokai use("cpea2506/one_monokai.nvim") use("lourenci/github-colors") --buffer line use({ "akinsho/bufferline.nvim", requires = { "kyazdani42/nvim-web-devicons", "moll/vim-bbye" } }) -- lualine use({ "nvim-lualine/lualine.nvim", requires = { "kyazdani42/nvim-web-devicons" } }) use("arkav/lualine-lsp-progress") -- telescope FILE FINDER use({ "nvim-telescope/telescope.nvim", requires = { "nvim-lua/plenary.nvim" } }) -- dashboard-nvim use("glepnir/dashboard-nvim") -- project use("ahmedkhalf/project.nvim") -- treesitter use({ "nvim-treesitter/nvim-treesitter", run = ":TSUpdate", -- config = function() -- require("nvim-treesitter.configs").setup({ -- highlight = { -- enable = true, -- }, -- }) -- end, }) -- Comment use({ "numToStr/Comment.nvim", config = function() require("Comment").setup() end, }) -- Lspconfig use({ "neovim/nvim-lspconfig" }) -- 补全引擎 use("hrsh7th/nvim-cmp") -- snippet 引擎 use("hrsh7th/vim-vsnip") -- 补全源 use("hrsh7th/cmp-vsnip") use("hrsh7th/cmp-nvim-lsp") -- { name = nvim_lsp } use("hrsh7th/cmp-buffer") -- { name = 'buffer' }, use("hrsh7th/cmp-path") -- { name = 'path' } use("hrsh7th/cmp-cmdline") -- { name = 'cmdline' } -- 常见编程语言代码段 use("rafamadriz/friendly-snippets") -- auto-pairs use("windwp/nvim-autopairs") -- lsp-spport use({ "williamboman/mason.nvim" }) -- formatter use({ "mhartington/formatter.nvim" })end)\n\n保存后重新打开nvim,然后在normal模式下,输入:PackerSync,回车即可开始安装插件。\n若有现有插件与配置文件中所列的插件不同,Packer.nvim会询问是否删除不用的插件,直接回车即可。(默认是不删除)\n配置插件创建存放插件配置文件的文件夹:\nmkdir ~/.config/nvim/lua/plugin-config\n\nnvim-tree在plugins.lua中加入use({ "kyazdani42/nvim-tree.lua", requires = "kyazdani42/nvim-web-devicons" })来启用此插件。\nnvim ~/.config/nvim/lua/plugin-config/nvim-tree.lua\n\n添加以下配置信息:\nlocal status, nvim_tree = pcall(require, "nvim-tree")if not status then vim.notify("没有找到 nvim-tree") returnend-- 以上是一个经典的插件配置调用函数-- 先创建一个本地变量status, nvim_tree-- 变量的值为函数pcall的返回值-- pcall函数的参数是require一个函数“nvim-tree”-- 如果成功,返回true,失败,则返回false-- 下面是一个if判断语句,如果调用成功(即status为true),继续往下走读取配置信息,如果调用失败,则直接return,跳出此脚本-- 列表操作快捷键local list_keys = require('keymaps').nvimTreeListnvim_tree.setup({ -- 是否显示 git 状态图标 git = { enable = true, }, -- project plugin 需要这样设置 update_cwd = true, update_focused_file = { enable = true, update_cwd = true, }, -- 隐藏 .文件 和 node_modules 文件夹 filters = { dotfiles = false, custom = { 'node_modules' }, }, view = { -- 宽度 width = 30, -- 也可以 'right' side = 'left', -- 隐藏根目录 hide_root_folder = false, -- 自定义列表中快捷键 mappings = { custom_only = false, list = list_keys, }, -- 不显示行数 number = false, relativenumber = false, -- 显示图标 signcolumn = 'yes', }, actions = { open_file = { -- 首次打开大小适配 resize_window = true, -- 打开文件时关闭 quit_on_open = true, }, }, -- wsl install -g wsl-open -- https://github.com/4U6U57/wsl-open/ system_open = { cmd = 'open', -- mac 直接设置为 open }, -- project plugin update_cwd = true, update_focused_file = { enable = true, update_cwd = true, },})-- 设置打开文件时自动关闭vim.cmd([[ autocmd BufEnter * ++nested if winnr('$') == 1 && bufname() == 'NvimTree_' . tabpagenr() | quit | endif]])\n","categories":["经验与技巧与踩坑 · 杂项","Code-Editor"],"tags":["Linux","Termux","Vim","Neovim","IDE"]},{"title":"Samba","url":"/2022/11/20/note/Linux/Samba/","content":"\nSMB是微软指定的协议,用于局域网文件共享,SMB全称是服务消息块\nSMB移植到linux后,就诞生了samba软件\n可以在两台linux下,也可以在linux与windows之间\n\n\n\nInstallationsudo pacman -S samba\n\nUsagesudo vim /etc/samba/smb.conf\n\n在配置文件中写入:\n[global] workgroup = SAMBA Security = user passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw[homes] comment = Home Directories valid users = %S, %D%w%S browseable = No readonly = No inherit acls = Yes[printers] comment = All Printers path = /var/tmp printable = Yes create mask = 0600 browseable = No[print$] comment = Printer Driver path = /var/lib/samba/drivers write list = @printadmin root force group = @printadmin create mask = 0664 directory mask = 0775[dionysen] comment = dionysen path = /home/dionysen public = no writable = yes guest ok = yes\n\n使用pdbedit命令创建samba专用的用户和密码,创建时必须保证这个用户在linux系统中存在\npdbedit -a -u dionysen #create a usersudo systemctl restart smbsudo systemctl status smbsudo netstat -tunlp | grep smbtcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 189537/smbdtcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 189537/smbdtcp6 0 0 :::445 :::* LISTEN 189537/smbdtcp6 0 0 :::139 :::* LISTEN 189537/smbd\n\n打开防火墙(由于只能在局域网使用,已放弃)\n改用FTP\n","categories":["经验与技巧与踩坑 · 杂项","Linux"],"tags":["Protocol","Samba","Windows"]},{"title":"云服务器安装 Archlinux","url":"/2023/05/25/note/Linux/Server_install_archlinux/","content":"\n\n准备工作\n在已有的服务器上操作。\n\n\ncd /sudo wget https://mirrors.tuna.tsinghua.edu.cn/archlinux/iso/latest/archlinux-2022.12.01-x86_64.isomv arch* arch.iso # 重命名为arch.iso#编辑GRUB配置文件,加入 arch.iso 启动项(部分系统的该文件路径为 /boot/grub2/grub.cfg ) #编辑 /boot/grub/grub.cfg,在与下面结构类似的第一个 menuentry 前,添加下面的内容。(搜索“menuentry(空格)”的第一个匹配项)vim /boot/grub/grub.cfg #配置600秒的GRUB等待时长,“vda1”项根据主机“fdisk -l”命令查看,视情况更改 #花括号内的缩进为一个Tab键set timeout=600menuentry "Archlinux Live (x86_64)" { insmod iso9660 set isofile=/arch.iso loopback lo0 ${isofile} linux (lo0)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_202002 img_dev=/dev/vda1 img_loop=${isofile} earlymodules=loop initrd (lo0)/arch/boot/x86_64/archiso.img}\n\n重启进入 vnc 界面配置 ssh#如果提示“insmod”无法识别,进入原系统在GRUB配置文件中,使用Tab键重新缩进#配置 arch live 环境#设置密码passwd#自动分配IPdhcpcd#开启 ssh 服务systemctl start sshd#使用 ssh 连接,摆脱不好用的 VNC 界面#用户名 root,密码为 passwd 所设置的#重设磁盘 vda1 的读写权限mount -o rw,remount /dev/vda1#进入 vda1 挂载目录 /run/archiso/img_devcd /run/archiso/img_dev#删除原系统文件(除了arch.iso)rm -rf [b-z]*#重新挂载 vda1 至 /mntmount /dev/vda1 /mnt\n\n正常安装 Arch Linux跳过分区步骤,此处万万不可随意重启,因为已经没有系统,也没有 GRUB 了\n\n编辑软件源\n\n#编辑镜像源,将“China”字样的镜像源复制到镜像首,如“tuna”#使用文本编辑器“VIM”,打开镜像文件vim /etc/pacman.d/mirrorlist #在该文件中搜索“China”,vim使用符号“/”作为搜索标志,回车后使用“n”/“N”切换搜索“下一个”/“上一个” /China(回车) #停留在字样“tuna”/“aliyun”处,将其复制下来,vim使用“2yy”表示“复制2行” 2yy #跳转到第6行 6gg #粘贴 p #保存退出 :wq\n\n\n安装基础软件包\n\n#使用 pacstrap 脚本,安装 base 软件包和 Linux 内核以及常规硬件的固件,此处我选择长期支持版内核pacstrap /mnt base linux-lts linux-firmware#使用 pacstrap 脚本,安装常用软件pacstrap /mnt base-devel grub openssh intel-ucode vim man dhcpcd\n\n\n配置系统\n\n#生成 fstab 文件 genfstab -U /mnt >> /mnt/etc/fstab #将环境变更至新系统下 arch-chroot /mnt #设置时区(软链接) ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #同步时钟 hwclock --systohc #本地化(语言) vim /etc/locale.gen #移除某些行头的注释符“#”,可通过搜索“en_US”实现 en_US.UTF-8 UTF-8 #保存退出 :wq #生成 local 信息 locale-gen #创建 locale.conf vim /etc/locale.conf #编辑 LANG 变量 LANG=en_US.UTF-8 #保存退出 :wq #创建网络相关文件 vim /etc/hostname #写入你想要用的主机名 myhostname vim /etc/hosts 127.0.0.1 localhost ::1 localhost 127.0.1.1 tencent.localdomain tencent\n\n\n设置用户\n\n#设置 root 账户密码passwd#创建新用户useradd -m -G wheel arch # -m 创建家目录 # -G 用户所属的组 # arch 示例用户名#设置 arch 用户密码passwd arch#修改(arch)用户权限vim /etc/sudoers # 编辑sudoer file # 去掉“%wheel ALL=(ALL) ALL”前面的注释,保存退出\n\n\n配置 GRUB\n\n#生成 grub 相关文件grub-install --target=i386-pc /dev/vda#生成 grub.cfggrub-mkconfig > /boot/grub/grub.cfg\n\n\n配置网络\n\n#使能 dhcpcdsystemctl enable dhcpcd#使能 sshdsystemctl enable sshd#退出当前用户exit#重启reboot\n","categories":["经验与技巧与踩坑 · 杂项","Linux"],"tags":["Linux","Archlinux","Server"]},{"title":"Source Lists","url":"/2023/05/25/note/Linux/Source_List/","content":"🏰常用镜像地址汇总。\n\n\nUSTC Source Listtermux编辑/data/data/com.termux/files/usr/etc/apt/sources.list\ndeb https://mirrors.ustc.edu.cn/termux/apt/termux-main stable main\n\ndebiandeb http://mirrors.ustc.edu.cn/debian stable main contrib non-free# deb-src http://mirrors.ustc.edu.cn/debian stable main contrib non-freedeb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free# deb-src http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free# deb http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free# deb-src http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free\n\narchlinuxServer = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch# armServer = https://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo\n\nubuntu# 默认注释了源码仓库,如有需要可自行取消注释deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiversedeb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiversedeb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiversedeb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse# 预发布软件源,不建议启用# deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse\n\nkali支持的架构:amd64, armel, armhf, i386\ndeb https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contribdeb-src https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib\n","categories":["经验与技巧与踩坑 · 杂项","Linux"],"tags":["Linux","Source List"]},{"title":"Android 使用 Termux + Proot 在 Wayland 上运行 xfce4 或 KDE","url":"/2022/01/04/note/Linux/Termux/","content":"安卓端的极客工具。\n能做许多你以为做不到的事情。\n\n\n部署安装Termux下载termux-x11.deb 和termux-x11.apk\n打开termux,切换镜像源\npkg in vimvim /data/data/com.termux/files/usr/etc/apt/sources.list# 添加以下镜像源deb https://mirrors.ustc.edu.cn/termux/apt/termux-main stable main# 执行pkg update\n\n安装必要依赖和软件pkg in x11-repopkg in xwaylanddpkg -i ./termux-x11.deb\n\n安装 termux-x11.apk\n重启termux\npkg in proot-distroproot-distro install archlinux# 安装完成后:proot-distro login archlinuxvi /etc/pacman.d/mirrorlist# 添加Server = https://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repopacman -Syyupacman -S xfce4 # 安装xfce4桌面环境\n\n完成后,全部退出,打开termuxpkg in screenscreen -S termux-x11termux-x11# 此时会弹出termux-x11的窗口,切换回termux# 按Ctrl+a+d,然后以共享tmp的方式登陆proot-archlinuxproot-distro login archlinux --shared-tmp# 在archlinux中export DISPLAY=:0dbus-launch --exit-with-session startxfce4\n\n若报错且无法显示图像终端显示:\nproot-distro login --user dionysen archlinux --shared-tmp ok | took 8s | at 01:03:12[3] 11100/usr/bin/startxfce4: X server already running on display :0Environment variable $XAUTHORITY not set, ignoring.Failed to import environment: Process org.freedesktop.systemd1 exited with status 1\n\n需要在~/.xinitrc中添加exec startxfce4如果xfce-session处于suspend的状态,使用job -l查看,使用kill %3杀死[3]进程。\narchlinux在xfce4中设置中文的方法编辑/etc/locale.gen,注释掉zh_CN.UTF-8 前的#:\nlocale-gensudo vim /etc/locale.conf\n\n添加LANG="zh_CN.UTF-8" 。\nSandbox可以在/etc/environment中添加参数export MOZ_FAKE_NO_SANDBOX=1.\nTermux-x11无法全屏显示使用adb调试强制使其全屏:\n\n使用电脑adb调试\n使用无线adb调试使用无线调试需要另一部手机,安装termux\n\npkg in android-tools\n\n在被调试的手机上执行:\n# 打开被调试设备的adb调试和无线调试,点进去找到配对ip地址及密码adb pair <IP address>:<Port>adb connect <IP address>:<Port># 有的设备pair与connect的端口可能不一样# 连接之后使用以下命令开启全屏adb -s <IP address>:<Port> shell settings put global policy_control immersive.status=com.termux.x11# 恢复默认设置adb -s <IP address>:<Port> shell settings put global policy_control null\n\n值得注意的是,这其实相当于一个环境变量,每次设置都会覆盖上一次的设置,因此如果要设置多个应用全屏,需要将多个应用用逗号隔开:\nadb -s <IP address>:<Port> shell settings put global policy_control immersive.status=com.termux.x11,com.termux\n\nTermux Backup and Restoretermux-setup-storage cd /data/data/com.termux/files tar -zcf /sdcard/termux-backup.tar.gz home usr # Backup termux-setup-storage cd /data/data/com.termux/files tar -zxf /sdcard/termux-backup.tar.gz --recursive-unlink --preserve-permissions # Restore\n\nTermux 备份说明2022-12-05Temux:zsh+p10ktmoe+proot 容器: Kali,软件包含 Clion+WPS+vscode+obsdianproot-distro :正常安装了 code-server\nTermux 安装 Code-Server需要使用 proot-distro,因为 termux 原生安装 code-server 会导致许多插件无法安装。先换源,然后执行命令:\napt in proot-distroproot-distro install archlinux# 安装完成后:proot-distro login archlinuxvi /etc/pacman.d/mirrorlist# 添加Server = https://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo# 安装依赖pacman -Syyusudo pacman -S fakeroot# 安装nvm,并用nvm安装所需求的特定版本nodejscurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bashnvm install v16.18.1nvm use v16.18.1# 安装code-servercurl -fsSL https://code-server.dev/install.sh | sh\n\n由于没有 systemd,可以使用脚本将 code-server 放在后台自动启动:\ntouch /home/icarus/.config/code-server/code-server.logsudo vim /etc/profile# addnohup code-server > /home/icarus/.config/code-server/code-server.log 2>&1 &\n\n","categories":["经验与技巧与踩坑 · 杂项","Android"],"tags":["Linux","Android","Termux"]},{"title":"Linux 下的工具","url":"/2022/05/25/note/Linux/Tools/","content":"Linux下常用工具总结。\n\n\n软件\n\n\n软件\n名称\n\n\n\n终端\nKonsole\n\n\n代码编辑器\nCode-oss\n\n\n浏览器\nFireFox/Chromium\n\n\n文件管理器\nNome或Dolphin\n\n\n办公软件\nWPS\n\n\n邮箱\nThunderBird\n\n\n绘图\nInkscape + Gimp\n\n\nMarkdown编辑器\nTypora\n\n\n透明代理\nV2rayA\n\n\n本地视频播放器\nMPV或VLC\n\n\n输入法\nFcitx5\n\n\n","categories":["经验与技巧与踩坑 · 杂项","Linux"],"tags":["Linux","Termux"]},{"title":"Window 10/11 安装 WSL2 和开启 WSLg","url":"/2023/05/25/note/Linux/WSL2/","content":"\n✅ This is a tutorial of installing on WSL2\n\n\n\nInstall WSL2Start using WSLOpen powershell using administration rights, and input:\ndism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart\n\nRequirement of WSL2For x64 system, the version of win10 must be 1903 or higher.Using “win + R” and input winver to check.\nStart Virtual machinel platformOpen powershell using administration rights, and input:\ndism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart\n\nInstall Linux Kernal Updating Download Link: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msiInstall.\nSetting the default version 2Open powershell using administration rights, and input:\nwsl --set-default-version 2\n\nThen, WSL2 is already installed.\nUpdate to WSLg将win10更新到最新的版本\nOpen powershell using administration rights, and input:\nwsl --updatewsl --version# display:WSL version: 1.0.3.0Kernel version: 5.15.79.1WSLg version: 1.0.47MSRDC version: 1.2.3575Direct3D version: 1.606.4DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hypWindows version: 10.0.19045.2364\n\n否则说明win10还不是最新的,继续更新\nInstall Archlinux on WSL2Download ArchlinuxDownload link: https://mirrors.tuna.tsinghua.edu.cn/archlinux/iso/latest/Find and Download archlinux-bootstrap-2020.10.01-x86_64.tar.gz .\nInstall Archlinux by LxRunOffline1. Input the command in powershellLxRunOffline i -n <自定义名称> -f <Arch镜像位置> -d <安装系统的位置> -r root.x86_64\n\nexample:\nLxRunOffline i -n ArchLinux -f C:\\Users\\dionysen\\Downloads\\archlinux-bootstrap-2020.10.01-x86_64.tar.gz -d C:\\Users\\dionysen\\Linux -r root.x86_64\n\n2. Change WSL2 version in Archlinuxwsl --set-version ArchLinux 2\n\nConfigurationBasic Configurationwsl -d Archlinuxrm /etc/resolv.confexit\n\nThe terminal window will be unavailable, so you should reopen a new terminal window, then:\nwsl --shutdown Archlinuxwsl -d Archlinuxcd /etcvi pacman.conf\n\nAdd following code in the end of pacman.conf:\n[archlinuxcn]Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch\n\nAnd change the mirrorlist:\nvi ./pacman.d/mirrorlist\n\nRemove the comment of a Chinese source.\npacman -Syypacman-key --initpacman-key --populatepacman -S archlinuxcn-keyringpacman -S base base-devel vim git wgetpasswd # input the password of rootuseradd -m -G wheel -s /bin/bash <username>passwd <username>vim /etc/sudoers\n\nUse /wheel find the line wheel ALL=(ALL) ALL and remove the comment.\nid -u <username>exit\n\nExecute the command in powershell to set default user of Archlinux:\nlxrunoffline su -n Archlinux -v <username>\n\nInstall Ubuntu20.02 in WSL2wsl --list --online\t\t# 查看可直接安装的发行版列表# 显示如下:PS C:\\Windows\\system32> wsl -l --onlineThe following is a list of valid distributions that can be installed.Install using 'wsl.exe --install <Distro>'.NAME FRIENDLY NAMEUbuntu UbuntuDebian Debian GNU/Linuxkali-linux Kali Linux RollingSLES-12 SUSE Linux Enterprise Server v12SLES-15 SUSE Linux Enterprise Server v15Ubuntu-18.04 Ubuntu 18.04 LTSUbuntu-20.04 Ubuntu 20.04 LTSOracleLinux_8_5 Oracle Linux 8.5OracleLinux_7_9 Oracle Linux 7.9# 安装ubuntu 20.04wsl --install Ubuntu-20.04\n\n然后打开终端,打开ubuntu-20.04,创建用户和密码\n换源+更新\n然后安装anaconda\nInstall Anaconda on Ubuntuwget https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-5.3.0-Linux-x86_64.shchmod +x Anaconda3-5.3.0-Linux-x86_64.sh./Anaconda3-5.3.0-Linux-x86_64.shyesENTER\n\n安装完成之后,检查版本:\nanaconda -Vconda -V\n\n使用anaconda换源:\ncdvim .condarc\n\n编辑.condarc ,添加清华源\n# add to .condarcssl_verify: falsechannels: - defaultsshow_channel_urls: truedefault_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud\n\n更新:\n conda update -n base -c defaults conda # 升级anaconda\n\nconda create -n myconda python=3.7 \t\t# 创建虚拟环境,名称为myconda(可以修改conda info --envs \t\t\t\t\t\t# 查看已安装的虚拟环境conda activate myconda\t\t\t\t\t# 激活环境mycondaconda deactivate\t\t\t\t\t\t# 关闭当前环境\n\nconda list\t\t\t\t# 查看conda的包pip list\t\t\t\t# 查看pip的包# 给pip换源 (也可以直接使用命令更换阿里源:# pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/cdmkdir .pipvim .pip/pip.conf# 添加以下内容#-----------------------------------------[global]index-url = https://mirrors.bfsu.edu.cn/pypi/web/simpleformat = columnstrusted-host = mirrors.bfsu.edu.cn#-----------------------------------------pip install jupyter \t# 安装jupyterjupyter notebook\t\t# 开启jupyter notebook服务\n\n附加配置systemd编辑 /etc/wsl.conf\n[boot]systemd=true\n\nWSL distros 的备份还原\n备份\n\nwsl -l -v# 显示为 NAME STATE VERSION* Ubuntu-20.04 Running 2wsl -t Ubuntu-20.04wsl --export Ubuntu-20.04 E:\\SystemBackup\\ubuntu-wsl2-2022.11.29.tar\n\n\n还原\n\nwsl --import <distro-name> <install-path> <backup-file># e.g.wsl --import Ubuntu c:\\wsl2 d:\\save\\linux\\wsl2.tar\n\nWSL2-Ubuntu 安装 Qt5sudo apt install qt5* qtcreator\n\n创建项目时如果出现“no suitable kits”,点击“option”查看配置,如果“QT version”为“none”,则选择 /usr/lib/qt5/bin/qmake,保存即可。\n","categories":["经验与技巧与踩坑 · 杂项","Windows"],"tags":["Linux","Windows","WSL2"]},{"title":"V2rayA","url":"/2023/05/25/note/Linux/v2raya/","content":"On archlinux:\nyay -S xray-binsudo pacman -S v2rayyay -S v2raya-bin\n\nMaybe you need restart your computer!\n\n\nAnd config:\n\n\n\n项目\n配置\n\n\n\n透明代理/系统代理\n启用:大陆白名单模式\n\n\n透明代理/系统代理实现方式\nredirect\n\n\n规则端口的分流模式\n大陆白名单模式\n\n\n防止 DNS 污染\n仅防止 DNS 劫持\n\n\n特殊模式\nsupervisor\n\n\nTCPFastOpen\n保持系统默认\n\n\n","categories":["经验与技巧与踩坑 · 杂项","Linux"],"tags":["VPN","Proxy"]},{"title":"vim 配置","url":"/2023/06/09/note/Linux/vim/","content":"\n\n使用以下脚本一键配置:\n#!/bin/bashgit clone https://gitee.com/sential/vim_config_cpp.gitcd vim_config_cppmv ./.vim ~/.vim\n\n完成后打开vim,按:PlugInstall,然后回车,即可安装插件(需梯子)。\n\n\n配置文件\n以下为vimrc的全部内容:\n" ------ Basic Setting ------set ts=4set shiftwidth=4set softtabstop=4set numberset expandtabset autoindentset noebset scrolloff=5set t_Co=256set wildmenuset smartcaseset cursorlineset encoding=utf-8 " ------ Theme Setting ------set background=darkhi cursorLine cterm=underline ctermbg=darkred ctermfg=white set relativenumber" locate the point at last time; And set 'sudo chmod 777 ~/.viminfo' au BufReadPost * if line("'\\"") > 0|if line("'\\"") <= line("$")|exe("norm '\\"")|else|exe "norm $"|endif|endif" airline setting" let g:airline#extensions#tabline#formatter = 'default'" let g:airline#extensions#tabline#enabled = 1" let g:airline_theme=''" powerline symbolslet g:airline_left_sep = ''let g:airline_left_alt_sep = ''let g:airline_right_sep = ''let g:airline_right_alt_sep = ''" colorscheme monokai" runtime plugged/material.vim/colors/material.vimruntime plugged/gruvbox/colors/gruvbox.vim" runtime colors/monokai.vim/colors/monokai.vim" runtime plugged/vim-snazzy/colors/snazzy.vim" material theme " if (has('termguicolors'))" set termguicolors" endiflet g:material_theme_style = 'default'set laststatus=2set noshowmode" let g:lightline = {" \\ 'colorscheme': 'material_vim'," \\ 'active': {" \\ 'left': [ [ 'mode', 'paste' ]," \\ [ 'gitbranch', 'readonly', 'filename', 'modified' ] ]" \\ }," \\ 'component_function': {" \\ 'gitbranch': 'FugitiveHead'" \\ }," \\ }" ------------------------------------------------------------------------" ------ Plug Index ------:call plug#begin('~/.vim/plugged')" airlinePlug 'vim-airline/vim-airline'Plug 'vim-airline/vim-airline-themes'"Plug 'itchyny/lightline.vim'Plug 'skywind3000/vim-terminal-help'" vim-themesPlug 'junegunn/seoul256.vim'Plug 'kaicataldo/material.vim', { 'branch': 'main' }Plug 'hzchirs/vim-material'Plug 'arcticicestudio/nord-vim'Plug 'rakr/vim-one'Plug 'morhetz/gruvbox'Plug 'preservim/nerdcommenter'Plug 'connorholyday/vim-snazzy'Plug 'jiangmiao/auto-pairs'Plug 'rhysd/vim-clang-format'Plug 'artur-shaik/vim-javacomplete2'" File navigationPlug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }Plug 'Xuyuanp/nerdtree-git-plugin'" Find Plug 'Yggdroot/LeaderF', { 'do': './install.sh' }"TaglistPlug 'majutsushi/tagbar', { 'on': 'TagbarOpenAutoClose' }" Undo TreePlug 'mbbill/undotree/'" MarkdownPlug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install_sync() }, 'for' :['markdown', 'vim-plug'] }Plug 'dhruvasagar/vim-table-mode', { 'on': 'TableModeToggle' }Plug 'iamcco/mathjax-support-for-mkdp'Plug 'vimwiki/vimwiki'" BookmarksPlug 'kshenoy/vim-signature'" c++ hightlightPlug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}"Coc Plug 'neoclide/coc.nvim', {'branch': 'release'}"cmakePlug 'cdelledonne/vim-cmake'call plug#end()" ------ Coc-setting ------let g:coc_global_extensions = ['coc-clangd', 'coc-vimlsp' ]" ------ 让tab可以补全 ------ inoremap <silent><expr> <TAB> \\ pumvisible() ? "\\<C-n>" : \\ "\\<TAB>" inoremap <expr><S-TAB> pumvisible() ? "\\<C-p>" : "\\<C-h>"" ------ Replace Esc ------ inoremap jj <ESC>vnoremap jj <ESC> " ------ 方向键 ------ noremap i knoremap I 5knoremap K 5jnoremap k jnoremap j hnoremap h inoremap J 5hnoremap L 5lnoremap <C-K> 15jnoremap <C-I> 15knoremap <C-J> 15hnoremap <C-L> 15lnoremap \u0018@si 30knoremap \u0018@sk 30jnoremap \u0018@sj 30hnoremap \u0018@sl 30lnoremap H I" ------ 括号自动对应 ------ inoremap ( ()<ESC>iinoremap ) <c-r>=ClosePair(')')<CR>inoremap { {<CR>}<ESC>Oinoremap } <c-r>=ClosePair('}')<CR>inoremap [ []<ESC>iinoremap ] <c-r>=ClosePair(']')<CR>inoremap ' ''<ESC>i" ------ 删除括号时自动删除对应的另一半 ------ function! ClosePair(char) if getline('.')[col('.') - 1] == a:char return "\\<Right>" else return a:char endifendfunction" ------ Other setting ------ " j+i jump out braceimap ji jjla" leader keylet mapleader="\\<space>"" setting backspace to reindentset backspace=indent,eol,start" ------ Exit, Write, Save, Resource ------ map Q :q!<CR>map W :w<CR>map S :wq<CR>map R :source ~/.vim/vimrc<CR>" ------ 分屏与标签页 ------ map sl :set splitright<CR>:vsplit<CR>map sj :set nosplitright<CR>:vsplit<CR>map si :set nosplitbelow<CR>:split<CR>map sk :set splitbelow<CR>:split<CR>"分屏切换" \u001b 表示alt键 但不可直接键入 需在insert模式下,按ctrl+v 再按要映射的快捷键map \u001bl <C-w>lmap \u001bi <C-w>kmap \u001bj <C-w>hmap \u001bk <C-w>jmap sv <C-w>t<C-w>Hmap sh <C-w>t<C-w>K"分屏大小map \u001bI :res +5<CR>map \u001bK :res -5<CR>map \u001bL :vertical resize-5<CR>map \u001bJ :vertical resize+5<CR>"标签页map tn :tabe<CR>map tj :-tabnext<CR>map tl :+tabnext<CR>" ------ terminal ------ nnoremap <leader>t :terminal<CR>" ------ NERDTree configuration ------ nnoremap \u001bn :NERDTreeFocus<CR>nnoremap <C-n> :NERDTree<CR>nnoremap <C-t> :NERDTreeToggle<CR>nnoremap <C-f> :NERDTreeFind<CR>let NERDTreeMapOpenSplit='h'let NERDTreeMapJumpFirstChild='F'let NERDTreeMapToggleHidden="H"" ------ clang-format ------ nnoremap cf :ClangFormat<CR>nnoremap <C-d> :CocCommand clangd.switchSourceHeader<CR>" ------ markdown preview ------ nmap <C-s> <Plug>MarkdownPreviewnmap <M-s> <Plug>MarkdownPreviewStopnmap <C-p> <Plug>MarkdownPreviewToggle\n\n快捷键使用方向-光标移动\n\n\n操作\n快捷键\n\n\n\n上\ni\n\n\n下\nk\n\n\n左\nj\n\n\n右\nl\n\n\n5倍移动\nshift + i/j/k/l\n\n\n15倍移动\nctrl + i/j/k/l\n\n\n如快速向下翻页,就按ctrl + k。\n模式切换\n\n\n操作\n快捷键\n\n\n\n普通模式—>插入模式\nh\n\n\n普通模式—>视图模式\nv\n\n\n任意模式—>普通模式\njj(快速按两下j)\n\n\n分屏与标签页\n\n\n操作\n快捷键\n\n\n\n分屏\ns+ 方向键 (如sj是向左分屏)\n\n\n切换分屏\nalt + 方向键(如alt + j是切换到相邻左边的分屏)\n\n\n分屏大小\nalt + shift + 方向键(上加下减,左加右减)\n\n\n切换分屏排列方式(垂直或水平)\nsv、sh\n\n\n新建标签页\ntn\n\n\n切换标签页(左右切换)\nt + j/l\n\n\n文件树\n\n\n操作\n快捷键\n\n\n\n打开文件树窗口(聚焦到文件树窗口)\nctrl + n\n\n\n文件选择(上下移动光标)\ni/k\n\n\n在当前窗口打开文件\no\n\n\n在新的分屏中打开文件\nh\n\n\n其他\n\n\n操作\n快捷键\n\n\n\n打开或关闭终端窗口\nalt + +\n\n\nClang-format格式化当前文件的代码(c/cpp)\ncf\n\n\n头文件与源文件切换\nctrl + d\n\n\n开启Markdown预览(使用默认浏览器打开)\nctrl + p\n\n\n插入模式下跳出括号\nji\n\n\n强制退出(文件如未更改直接退出,有更改放弃更改直接退出)\nshift + q\n\n\n保存修改\nshift + w\n\n\n保存修改然后退出\nshift + s\n\n\n重新加载vimrc配置文件\nshift + r\n\n\n注释(一行或选中区域)\nspace + cc\n\n\n解除注释(一行或选中区域)\nspace + cu\n\n\nvim本身的常用快捷键\n这些快捷是Vim本身的,未重新映射\n\n\n\n\n普通模式或视图模式下操作(注意在插入模式下不可用)\n快捷键\n\n\n\n在当前字母后插入\na\n\n\n剪切光标所在的字母\ns\n\n\n剪切光标所在行\ndd\n\n\n剪切光标选中区域\nd\n\n\n使用另一个字母替换光标所在字母\nr + 另一个字母\n\n\n复制光标选中区\ny\n\n\n复制光标所在行\nyy\n\n\n粘贴\np\n\n\n光标移动到下一个单词\nw\n\n\n光标移动到上一个单词\nb\n\n\n聚焦到文首\ngg\n\n\n聚焦到文末\nG\n\n\n搜索\n:/ + 要搜索的文本\n\n\n","categories":["经验与技巧与踩坑 · 杂项","Code-Editor"],"tags":["Linux","Termux","Vim","IDE"]},{"title":"Xpra on Linux 的安装与使用","url":"/2023/05/25/note/Linux/xpra/","content":"运行在浏览器上的远程桌面。\n\n\n安装archlinux\nsudo pacman -S xpra\n\nubuntu\nsudo apt install ca-certificatessudo wget -O "/usr/share/keyrings/xpra-2022.gpg" https://xpra.org/xpra-2022.gpgsudo wget -O "/usr/share/keyrings/xpra-2018.gpg" https://xpra.org/xpra-2018.gpg# For older distributions:wget -q https://xpra.org/xpra-2022.gpg -O- | sudo apt-key add -wget -q https://xpra.org/xpra-2018.gpg -O- | sudo apt-key add -cd /etc/apt/sources.list.d;wget https://xpra.org/repos/jammy/xpra.list # ubuntu 22.04 doesn't workcd /etc/apt/sources.list.d;wget https://xpra.org/repos/focal/xpra.list # ubuntu 20.04apt update;apt install xpra\n\nCentOS\nsudo wget -O /etc/yum.repos.d/xpra.repo https://xpra.org/repos/CentOS/xpra.reposudo yum install -y xpra\n\n使用\n可以直接打开远程主机的程序\n\nxpra start ssh:user@host --exit-with-children --start-child=<command>\n\n\n可以开启服务监听,在远程浏览器上打开\n\nxpra start --bind-tcp=0.0.0.0:4000\n\n使用 systemd 设置 html5 服务开机自启编辑服务配置文件\nsudo vim /etc/systemd/system/xpra@.service\n\n为\n[Unit]Description=xpra-html5-server[Service]Type=simpleUser=%iEnvironmentFile=/etc/conf.d/xpraExecStart=/usr/bin/xpra --no-daemon start ${%i} --bind-tcp=0.0.0.0:4000[Install]WantedBy=multi-user.target\n\nNow create the configuration, adding a line for each username you want to have an xpra display:\nsudo vim /etc/conf.d/xpra# 添加dionysen=:7\n\n允许开机自启:\nsudo systemctl enable --now xpra@dionysen# 检查服务运行情况sudo systemctl status xpra@dionysen\n\n\n可能需要安装一个桌面环境(可以使用 Linux Note | Tome脚本最小安装)\n\n","categories":["经验与技巧与踩坑 · 杂项","Linux"],"tags":["xpra","x11-forward"]},{"title":"Windows 相关技巧","url":"/2023/05/25/note/Windows/Windows10/","content":"\nWindows系统的一些技巧。\n\n\n\nwin10 修改系统显示字体下载FontCreator,用其打开需要替换的字体,选择字体->属性:\n\n\n然后将名字修改成Microsoft Yahei,然后进入PE系统,替换系统中的雅黑字体(msyh.ttc、msyhl.ttc、msyhbd.ttc三个文件)。\n\n\n修改输入法候选字的字体Win+r输入regedit打开注册表编辑器,找到如下:\nHKEY_CURRENT_USER\\Software\\Microsoft\\InputMethod\\CandidateWindow\\CHS\\1\n\nFontStyle和FontStyleTSF3修改成想要的字体,如:\n\n\nWindows Access WSL2 FilesInput \\\\wsl$ in address bar of explorer.\nWin11 Restore Right-click Menu# To win10reg.exe add "HKCU\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\\InprocServer32" /f /ve# To win11reg.exe delete "HKCU\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\\InprocServer32" /va /f\n\n地址栏输入 chrome://flags 可以开启隐藏功能\nRealVNC 注册码Version: 6.11\n7SA9N-9JF3P-E8CW2-BH9JU-PMVQA\n","categories":["经验与技巧与踩坑 · 杂项","Windows"],"tags":["Windows 10","Windows 11","Font"]},{"title":"基于Win32的OpenGL3.3","url":"/2023/06/29/note/Framework/OpenGL/Win32-OpenGL/","content":"在Win32的基础上,使用OpenGL v3.3,单个cpp文件完成:\n\n\n#define _CRT_SECURE_NO_WARNINGS#define WIN32_LEAN_AND_MEAN#define WIN_32_EXTRA_LEAN#include "glad/glad.h"#include <Windows.h>#include <iostream>//#include "Application.h"const char* vertexShaderSource = "#version 330 core\\n""layout (location = 0) in vec3 aPos;\\n""void main()\\n""{\\n"" gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\\n""}\\0";const char* fragmentShaderSource = "#version 330 core\\n""out vec4 FragColor;\\n""void main()\\n""{\\n"" FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\\n""}\\n\\0";int WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); #if _DEBUG \t#pragma comment (linker, "/subsystem:console")\tint main(int argc, const char** argv) {\t\treturn WinMain(GetModuleHandle(NULL), NULL, GetCommandLineA(), SW_SHOWDEFAULT);\t}#else \t#pragma comment (linker, "/subsystem:windows")#endif#pragma comment(lib, "opengl32.lib")#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091#define WGL_CONTEXT_MINOR_VERSION_ARB 0X2092#define WGL_CONTEXT_FLAGS_ARB 0X2094#define WGL_CONTEXT_COREPROFILE_BIT_ARB 0x00000001#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126typedef HGLRC(WINAPI* PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int* attribList);typedef const char* (WINAPI* PFNWGLGETEXTENSIONSSTRINGEXTPROC)(void);typedef BOOL (WINAPI* PFNWGLSWAPINTERVALEXTPROC)(int);typedef int (WINAPI* PFNWGLGETSWAPINTERVALEXTPROC) (void);//Application* gApplication = nullptr;GLuint gVertexArrayObject = 0;int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int ICmdShow) {\t//gApplication = new Application();\tconst wchar_t CLASS_NAME[] = L"Win32 Game Window"; //Search more...\tWNDCLASSEX wndclass;\twndclass.cbSize = sizeof(WNDCLASSEX);\twndclass.style = 0;\twndclass.style = CS_HREDRAW | CS_VREDRAW; // ACTIVATES RELOAD ON REDRAW\twndclass.lpfnWndProc = WndProc;\twndclass.cbClsExtra = 0;\twndclass.cbWndExtra = 0;\twndclass.hInstance = hinstance;\twndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);\twndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);\twndclass.hCursor = LoadCursor(NULL, IDC_ARROW);\twndclass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);\twndclass.lpszMenuName = 0;\twndclass.lpszClassName = CLASS_NAME;\tRegisterClassEx(&wndclass);\tint ScreenWidth = GetSystemMetrics(SM_CXSCREEN);\tint ScreenHeight = GetSystemMetrics(SM_CYSCREEN);\tint clientWidth = 800;\tint clientHeight = 600;\tRECT windowRect;\t\tSetRect(&windowRect, (ScreenWidth / 2) - (clientWidth / 2),\t\t(ScreenHeight / 2) - (clientHeight / 2),\t\t(ScreenWidth / 2) + (clientWidth / 2),\t\t(ScreenHeight / 2) + (clientHeight / 2));\tDWORD style = (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME);\t\tconst wchar_t windowName[] = L"OpenGL Window";\t//DWORD secondaryStyle = (WS_EX_ACCEPTFILES);\tHWND hwnd = CreateWindowEx(0, wndclass.lpszClassName, windowName, style, windowRect.left, windowRect.top, windowRect.right - windowRect.left,\t\twindowRect.bottom - windowRect.top, NULL, NULL, hinstance, szCmdLine);\tHDC hdc = GetDC(hwnd);\t\tPIXELFORMATDESCRIPTOR pfd;\t\tmemset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));\tpfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);\tpfd.nVersion = 1;\tpfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER;\tpfd.iPixelType = PFD_TYPE_RGBA;\tpfd.cColorBits = 24;\tpfd.cDepthBits = 32;\tpfd.cStencilBits = 8;\tint pixelFormat = ChoosePixelFormat(hdc, &pfd);\tSetPixelFormat(hdc, pixelFormat, &pfd );\tHGLRC tempRC = wglCreateContext(hdc);\twglMakeCurrent(hdc, tempRC);\tPFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB = NULL;\twglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)wglGetProcAddress("wglCreateContextAttribsARB");\tconst int attribList[] = {\t\tWGL_CONTEXT_MAJOR_VERSION_ARB, 3,\t\tWGL_CONTEXT_MINOR_VERSION_ARB, 3,\t\tWGL_CONTEXT_FLAGS_ARB, 0,\t\tWGL_CONTEXT_PROFILE_MASK_ARB,\t\tWGL_CONTEXT_COREPROFILE_BIT_ARB, 0, \t};\t\tHGLRC hglrc = wglCreateContextAttribsARB(hdc, 0, attribList);\twglMakeCurrent(NULL, NULL);\twglDeleteContext(tempRC);\twglMakeCurrent(hdc, hglrc);\tif (!gladLoadGL())\t{\t\tstd::cout << "Could not initialize GLAD \\n";\t}\telse {\t\tstd::cout << "OpenGL Version " << GLVersion.major << std::endl;\t}\tPFNWGLGETEXTENSIONSSTRINGEXTPROC _wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)wglGetProcAddress("wglGetExtensionsStringEXT");\tbool swapControlSupported = strstr(_wglGetExtensionsStringEXT(), "WGL_EXT_swap_control") != 0;\tint vsynch = 0;\tif (swapControlSupported) {\t\tPFNWGLSWAPINTERVALEXTPROC wglSwapInternalEXT = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT");\t\tPFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)wglGetProcAddress("wglGetSwapIntervalEXT");\t\tif (wglSwapInternalEXT(1))\t\t{\t\t\tstd::cout << "VSynch enabled \\n";\t\t}\t\telse\t\t{\t\t\tstd::cout << "Could not enable VSynch";\t\t}\t}\telse\t{\t\tstd::cout << "WGL_EXT_swap_control not supported \\n";\t}\tunsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER);\tglShaderSource(vertexShader, 1, &vertexShaderSource, NULL);\tglCompileShader(vertexShader);\t// check for shader compile errors\tint success;\tchar infoLog[512];\tglGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);\tif (!success)\t{\t\tglGetShaderInfoLog(vertexShader, 512, NULL, infoLog);\t\tstd::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\\n"\t\t\t<< infoLog << std::endl;\t}\t// fragment shader\tunsigned int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);\tglShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);\tglCompileShader(fragmentShader);\t// check for shader compile errors\tglGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);\tif (!success)\t{\t\tglGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);\t\tstd::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\\n"\t\t\t<< infoLog << std::endl;\t}\t// link shaders\tunsigned int shaderProgram = glCreateProgram();\tglAttachShader(shaderProgram, vertexShader);\tglAttachShader(shaderProgram, fragmentShader);\tglLinkProgram(shaderProgram);\t// check for linking errors\tglGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);\tif (!success)\t{\t\tglGetProgramInfoLog(shaderProgram, 512, NULL, infoLog);\t\tstd::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\\n"\t\t\t<< infoLog << std::endl;\t}\tglDeleteShader(vertexShader);\tglDeleteShader(fragmentShader);\t// set up vertex data (and buffer(s)) and configure vertex attributes\t// ------------------------------------------------------------------\tfloat vertices[] = {\t\t-0.5f, -0.5f, 0.0f, // left\t\t0.5f, -0.5f, 0.0f,\t// right\t\t0.0f, 0.5f, 0.0f\t// top\t};\tGLuint VBO, VAO;\tglGenVertexArrays(1, &VAO);\tglGenBuffers(1, &VBO);\t// bind the Vertex Array Object first, then bind and set vertex buffer(s), and then configure vertex attributes(s).\tglBindVertexArray(VAO);\tgVertexArrayObject = VAO;\tglBindBuffer(GL_ARRAY_BUFFER, VBO);\tglBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);\tglVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);\tglEnableVertexAttribArray(0);\t// note that this is allowed, the call to glVertexAttribPointer registered VBO as the vertex attribute's bound vertex buffer object so afterwards we can safely unbind\tglBindBuffer(GL_ARRAY_BUFFER, 0);\t// You can unbind the VAO afterwards so other VAO calls won't accidentally modify this VAO, but this rarely happens. Modifying other\t// VAOs requires a call to glBindVertexArray anyways so we generally don't unbind VAOs (nor VBOs) when it's not directly necessary.\tglBindVertexArray(0);\t\t// Shows window\tShowWindow(hwnd, SW_SHOW);\tUpdateWindow(hwnd);\t//gApplication->Initialize();\tDWORD lastTick = GetTickCount();\tMSG msg;\twhile (true) {\t\tif (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {\t\t\tif (msg.message == WM_QUIT) {\t\t\t\tbreak;\t\t\t}\t\t\tTranslateMessage(&msg);\t\t\tDispatchMessage(&msg);\t\t}\t\tDWORD thisTick = GetTickCount();\t\tfloat dt = float(thisTick - lastTick) * 0.001f;\t\tlastTick = thisTick;\t\t//if (gApplication != nullptr) {\t\t//\tgApplication->Update(dt);\t\tRECT clientRect;\t\tGetClientRect(hwnd, &clientRect);\t\tclientWidth = clientRect.right - clientRect.left;\t\tclientHeight = clientRect.bottom - clientRect.top;\t\tglViewport(0, 0, clientWidth, clientHeight);\t\tglEnable(GL_DEPTH_TEST);\t\tglEnable(GL_CULL_FACE);\t\tglPointSize(5.0f);\t\tglBindVertexArray(gVertexArrayObject);\t\tglClearColor(0.2f, 0.3f, 0.3f, 1.0f);\t\tglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);\t\t// draw our first triangle\t\tglUseProgram(shaderProgram);\t\tglBindVertexArray(VAO); // seeing as we only have a single VAO there's no need to bind it every time, but we'll do so to keep things a bit more organized\t\tglDrawArrays(GL_TRIANGLES, 0, 3);\t\tfloat aspect = (float)clientWidth / (float)clientHeight;\t\t//gApplication->Render(aspect);\t\tSwapBuffers(hdc);\t\tif (vsynch != 0)\t\t\tglFinish();\t//}\t\t\t\t}\t//if (gApplication != nullptr) {\t//\tstd::cout << "Expected application to be null on exit \\n";\t//\tdelete gApplication;\t//}\treturn (int)msg.wParam;}LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) {\tswitch (iMsg) {\tcase WM_CLOSE:\t\t//if (gApplication != nullptr) {\t\t\t//gApplication->Shutdown();\t\t\t//delete gApplication;\t\t\t//gApplication = 0;\t\t\tDestroyWindow(hwnd);\t\t//}\t\t//else {\t\t//\tstd::cout << "Already shut down! \\n";\t\t//}\t\tbreak;\tcase WM_DESTROY:\t\tif (gVertexArrayObject != 0) {\t\t\tHDC hdc = GetDC(hwnd);\t\t\tHGLRC hglrc = wglGetCurrentContext();\t\t\tglBindVertexArray(0);\t\t\tglDeleteVertexArrays(1, &gVertexArrayObject);\t\t\tgVertexArrayObject = 0;\t\t\twglMakeCurrent(NULL, NULL);\t\t\twglDeleteContext(hglrc);\t\t\tReleaseDC(hwnd, hdc);\t\t\tPostQuitMessage(0);\t\t}\t\telse {\t\t\tstd::cout << "Multiple destroy messages \\n";\t\t}\t\tbreak;\t}\treturn DefWindowProc(hwnd, iMsg, wParam, lParam);}\n\n简化版:\n#include "glad/glad.h"#include <Windows.h>#include <iostream>const char* vertexShaderSource = "#version 330 core\\n""layout (location = 0) in vec3 aPos;\\n""void main()\\n""{\\n"" gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\\n""}\\0";const char* fragmentShaderSource = "#version 330 core\\n""out vec4 FragColor;\\n""void main()\\n""{\\n"" FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\\n""}\\n\\0";LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); #if _DEBUG \t#pragma comment (linker, "/subsystem:console")\tint main(int argc, const char** argv) {\t\treturn WinMain(GetModuleHandle(NULL), NULL, GetCommandLineA(), SW_SHOWDEFAULT);\t}#else\t#pragma comment (linker, "/subsystem:windows")#endif#pragma comment(lib, "opengl32.lib")constexpr auto WGL_CONTEXT_MAJOR_VERSION_ARB = 0x2091;constexpr auto WGL_CONTEXT_MINOR_VERSION_ARB = 0X2092; // 宏可以转换成constexprconstexpr auto WGL_CONTEXT_FLAGS_ARB = 0X2094;constexpr auto WGL_CONTEXT_COREPROFILE_BIT_ARB = 0x00000001;constexpr auto WGL_CONTEXT_PROFILE_MASK_ARB = 0x9126;typedef HGLRC(WINAPI* PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int* attribList);typedef const char* (WINAPI* PFNWGLGETEXTENSIONSSTRINGEXTPROC)(void);typedef BOOL (WINAPI* PFNWGLSWAPINTERVALEXTPROC)(int);typedef int (WINAPI* PFNWGLGETSWAPINTERVALEXTPROC) (void);int WINAPI WinMain(_In_ HINSTANCE hinstance, _In_opt_ HINSTANCE hPrevInstance, _In_ PSTR szCmdLine, _In_ int ICmdShow) {\tconst wchar_t CLASS_NAME[] = L"Win32 Game Window"; //Search more...\tWNDCLASSEX wndclass{};\twndclass.cbSize\t\t= sizeof(WNDCLASSEX);\twndclass.style\t\t= 0;\twndclass.style\t\t= CS_HREDRAW | CS_VREDRAW; // ACTIVATES RELOAD ON REDRAW\twndclass.lpfnWndProc= WndProc;\twndclass.cbClsExtra = 0;\twndclass.cbWndExtra = 0;\twndclass.hInstance\t= hinstance;\twndclass.hIcon\t\t= LoadIcon(NULL, IDI_APPLICATION);\twndclass.hIconSm\t= LoadIcon(NULL, IDI_APPLICATION);\twndclass.hCursor\t= LoadCursor(NULL, IDC_ARROW);\twndclass.hbrBackground\t= (HBRUSH)(COLOR_BTNFACE + 1);\twndclass.lpszMenuName\t= 0;\twndclass.lpszClassName\t= CLASS_NAME;\tRegisterClassEx(&wndclass);\tint ScreenWidth\t\t= GetSystemMetrics(SM_CXSCREEN);\tint ScreenHeight\t= GetSystemMetrics(SM_CYSCREEN);\tint clientWidth\t\t= 800;\tint clientHeight\t= 600;\tRECT windowRect;\t\tSetRect(&windowRect, (ScreenWidth / 2) - (clientWidth / 2),\t\t\t(ScreenHeight / 2)\t- (clientHeight / 2),\t\t\t(ScreenWidth / 2)\t+ (clientWidth / 2),\t\t\t(ScreenHeight / 2)\t+ (clientHeight / 2));\tDWORD style = (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME);\tconst wchar_t windowName[] = L"OpenGL Window";\tHWND hwnd = CreateWindowEx(0, wndclass.lpszClassName, windowName, style, windowRect.left, windowRect.top, windowRect.right -\t\t\t\t\t\t\t\twindowRect.left,windowRect.bottom - windowRect.top, NULL, NULL, hinstance, szCmdLine);\tHDC hdc = GetDC(hwnd);\t\tPIXELFORMATDESCRIPTOR pfd;\t\tmemset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));\tpfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);\tpfd.nVersion = 1;\tpfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER;\tpfd.iPixelType = PFD_TYPE_RGBA;\tpfd.cColorBits = 24;\tpfd.cDepthBits = 32;\tpfd.cStencilBits = 8;\tint pixelFormat = ChoosePixelFormat(hdc, &pfd);\tSetPixelFormat(hdc, pixelFormat, &pfd );\tHGLRC tempRC = wglCreateContext(hdc);\twglMakeCurrent(hdc, tempRC);\tPFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB = NULL;\twglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)wglGetProcAddress("wglCreateContextAttribsARB");\tconst int attribList[] = {\t\tWGL_CONTEXT_MAJOR_VERSION_ARB, 3,\t\tWGL_CONTEXT_MINOR_VERSION_ARB, 3,\t\tWGL_CONTEXT_FLAGS_ARB, 0,\t\tWGL_CONTEXT_PROFILE_MASK_ARB,\t\tWGL_CONTEXT_COREPROFILE_BIT_ARB, 0, \t};\t\tHGLRC hglrc = wglCreateContextAttribsARB(hdc, 0, attribList);\twglMakeCurrent(NULL, NULL);\twglDeleteContext(tempRC);\twglMakeCurrent(hdc, hglrc);\tif (!gladLoadGL())\t{\t\tstd::cout << "Could not initialize GLAD \\n";\t}\telse {\t\tstd::cout << "OpenGL Version " << GLVersion.major << std::endl;\t}\tPFNWGLGETEXTENSIONSSTRINGEXTPROC _wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)wglGetProcAddress("wglGetExtensionsStringEXT");\tbool swapControlSupported = strstr(_wglGetExtensionsStringEXT(), "WGL_EXT_swap_control") != 0;\tint vsynch = 0;\tif (swapControlSupported) {\t\tPFNWGLSWAPINTERVALEXTPROC wglSwapInternalEXT = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT");\t\tPFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)wglGetProcAddress("wglGetSwapIntervalEXT");\t\tif (wglSwapInternalEXT(1))\t\t{\t\t\tstd::cout << "VSynch enabled \\n";\t\t}\t\telse\t\t{\t\t\tstd::cout << "Could not enable VSynch";\t\t}\t}\telse\t{\t\tstd::cout << "WGL_EXT_swap_control not supported \\n";\t}\tunsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER);\tglShaderSource(vertexShader, 1, &vertexShaderSource, NULL);\tglCompileShader(vertexShader);\t// check for shader compile errors\tint success;\tchar infoLog[512];\tglGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);\tif (!success)\t{\t\tglGetShaderInfoLog(vertexShader, 512, NULL, infoLog);\t\tstd::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\\n"\t\t\t<< infoLog << std::endl;\t}\t// fragment shader\tunsigned int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);\tglShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);\tglCompileShader(fragmentShader);\t// check for shader compile errors\tglGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);\tif (!success)\t{\t\tglGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);\t\tstd::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\\n"\t\t\t<< infoLog << std::endl;\t}\t// link shaders\tunsigned int shaderProgram = glCreateProgram();\tglAttachShader(shaderProgram, vertexShader);\tglAttachShader(shaderProgram, fragmentShader);\tglLinkProgram(shaderProgram);\t// check for linking errors\tglGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);\tif (!success)\t{\t\tglGetProgramInfoLog(shaderProgram, 512, NULL, infoLog);\t\tstd::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\\n"\t\t\t<< infoLog << std::endl;\t}\tglDeleteShader(vertexShader);\tglDeleteShader(fragmentShader);\t// set up vertex data (and buffer(s)) and configure vertex attributes\t// ------------------------------------------------------------------\tfloat vertices[] = {\t\t-0.5f, -0.5f, 0.0f, // left\t\t0.5f, -0.5f, 0.0f,\t// right\t\t0.0f, 0.5f, 0.0f\t// top\t};\tGLuint VBO, VAO;\tglGenVertexArrays(1, &VAO);\tglGenBuffers(1, &VBO);\t// bind the Vertex Array Object first, then bind and set vertex buffer(s), and then configure vertex attributes(s).\tglBindVertexArray(VAO);\tglBindBuffer(GL_ARRAY_BUFFER, VBO);\tglBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);\tglVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);\tglEnableVertexAttribArray(0);\t// note that this is allowed, the call to glVertexAttribPointer registered VBO as the vertex attribute's bound vertex buffer object so afterwards we can safely unbind\tglBindBuffer(GL_ARRAY_BUFFER, 0);\t// You can unbind the VAO afterwards so other VAO calls won't accidentally modify this VAO, but this rarely happens. Modifying other\t// VAOs requires a call to glBindVertexArray anyways so we generally don't unbind VAOs (nor VBOs) when it's not directly necessary.\tglBindVertexArray(0);\t// Shows window\tShowWindow(hwnd, SW_SHOW);\tUpdateWindow(hwnd);\tDWORD lastTick = GetTickCount64();\tMSG msg;\twhile (true) \t{\t\tif (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) \t\t{\t\t\tif (msg.message == WM_QUIT) \t\t\t{\t\t\t\tbreak;\t\t\t}\t\t\tTranslateMessage(&msg);\t\t\tDispatchMessage(&msg);\t\t}\t\tDWORD thisTick = GetTickCount64();\t\tfloat dt = float(thisTick - lastTick) * 0.001f;\t\tlastTick = thisTick;\t\tRECT clientRect;\t\tGetClientRect(hwnd, &clientRect);\t\tclientWidth = clientRect.right - clientRect.left;\t\tclientHeight = clientRect.bottom - clientRect.top;\t\tglViewport(0, 0, clientWidth, clientHeight);\t\tglEnable(GL_DEPTH_TEST);\t\tglEnable(GL_CULL_FACE);\t\tglPointSize(5.0f);\t\tglClearColor(0.2f, 0.3f, 0.3f, 1.0f);\t\tglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);\t\t// draw our first triangle\t\tglUseProgram(shaderProgram);\t\tglBindVertexArray(VAO); // seeing as we only have a single VAO there's no need to bind it every time, but we'll do so to keep things a bit more organized\t\tglDrawArrays(GL_TRIANGLES, 0, 3);\t\tfloat aspect = (float)clientWidth / (float)clientHeight;\t\tSwapBuffers(hdc);\t\tif (vsynch != 0)\t\t{\t\t\tglFinish();\t\t}\t}\treturn (int)msg.wParam;}LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) {\tswitch (iMsg) {\tcase WM_CLOSE:\t\t\tDestroyWindow(hwnd);\t\tbreak;\tcase WM_DESTROY:\t\t\tHDC hdc = GetDC(hwnd);\t\t\tHGLRC hglrc = wglGetCurrentContext();\t\t\tglBindVertexArray(0);\t\t\twglMakeCurrent(NULL, NULL);\t\t\twglDeleteContext(hglrc);\t\t\tReleaseDC(hwnd, hdc);\t\t\tPostQuitMessage(0);\t\tbreak;\t}\treturn DefWindowProc(hwnd, iMsg, wParam, lParam);}\n\n使用着色器类:\n#include "glad.h"#include "shader.h"#include <Windows.h>#include <iostream>#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);#if _DEBUG#pragma comment(linker, "/subsystem:console")int main(int argc, const char **argv){ return WinMain(GetModuleHandle(NULL), NULL, GetCommandLineA(), SW_SHOWDEFAULT);}#else#pragma comment(linker, "/subsystem:windows")#endif#pragma comment(lib, "opengl32.lib")void initOpenGL(){ Shader ourShader("C:\\\\Users\\\\zhaoys-c\\\\source\\\\repos\\\\Dionysen\\\\LearnOpenGL\\\\OpenGL\\\\\\\\OpenGL\\\\shaders\\\\shader.vs", "C:\\\\Users\\\\zhaoys-c\\\\source\\\\repos\\\\Dionysen\\\\LearnOpenGL\\\\OpenGL\\\\\\\\OpenGL\\\\shaders\\\\shader.fs"); // Shader ourShader("../shaders/shader.vs","../shaders/shader.fs"); // set up vertex data (and buffer(s)) and configure vertex attributes float vertices[] = { // positions // colors // texture coords (note that we changed them to 2.0f!) 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // top right 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // bottom right -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // bottom left -0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f // top left }; unsigned int indices[] = { 0, 1, 3, // first triangle 1, 2, 3 // second triangle }; unsigned int VBO, VAO, EBO; glGenVertexArrays(1, &VAO); glGenBuffers(1, &VBO); glGenBuffers(1, &EBO); glBindVertexArray(VAO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void *)0); glEnableVertexAttribArray(0); glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void *)(3 * sizeof(float))); glEnableVertexAttribArray(1); glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void *)(6 * sizeof(float))); glEnableVertexAttribArray(2); unsigned int texture1, texture2; glGenTextures(1, &texture1); glBindTexture(GL_TEXTURE_2D, texture1); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); int width, height, nrChannels; stbi_set_flip_vertically_on_load(true); unsigned char *data = stbi_load("C:\\\\Users\\\\zhaoys-c\\\\source\\\\repos\\\\Dionysen\\\\LearnOpenGL\\\\OpenGL\\\\OpenGL\\\\Resources\\\\wall.jpg", &width, &height, &nrChannels, 0); if (data) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data); glGenerateMipmap(GL_TEXTURE_2D); } else { std::cout << "Failed to load texture1" << std::endl; } stbi_image_free(data); glGenTextures(1, &texture2); glBindTexture(GL_TEXTURE_2D, texture2); // set the texture wrapping parameters glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // set texture wrapping to GL_REPEAT (default wrapping method) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); // set texture filtering parameters glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // load image, create texture and generate mipmaps data = stbi_load("C:\\\\Users\\\\zhaoys-c\\\\source\\\\repos\\\\Dionysen\\\\LearnOpenGL\\\\OpenGL\\\\OpenGL\\\\Resources\\\\awesomeface.png", &width, &height, &nrChannels, 0); if (data) { // note that the awesomeface.png has transparency and thus an alpha channel, so make sure to tell OpenGL the data type is of GL_RGBA glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); glGenerateMipmap(GL_TEXTURE_2D); } else { std::cout << "Failed to load texture2" << std::endl; } stbi_image_free(data); ourShader.use(); glUniform1i(glGetUniformLocation(ourShader.ID, "texture1"), 0); ourShader.setInt("texture2", 1); // setting shader ourShader.setFloat("visible", 0.1f); ourShader.use(); // bind texture glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture1); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, texture2); // bind vao glBindVertexArray(VAO);}void render(){ glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);}int WINAPI WinMain(_In_ HINSTANCE hinstance, _In_opt_ HINSTANCE hPrevInstance, _In_ PSTR szCmdLine, _In_ int ICmdShow){ WNDCLASSEX wndclass{}; wndclass.cbSize = sizeof(WNDCLASSEX); wndclass.style = 0; wndclass.style = CS_HREDRAW | CS_VREDRAW; // ACTIVATES RELOAD ON REDRAW wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hinstance; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); wndclass.lpszMenuName = 0; wndclass.lpszClassName = "OpenGL Window"; RegisterClassEx(&wndclass); HWND hwnd = CreateWindowEx( 0, wndclass.lpszClassName, "OpenGL Window", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME, CW_USEDEFAULT, CW_USEDEFAULT, // 窗口左上角坐标为缺省值 CW_USEDEFAULT, CW_USEDEFAULT, // 窗口的高度和宽度为缺省值 NULL, NULL, hinstance, szCmdLine); HDC hdc = GetDC(hwnd); PIXELFORMATDESCRIPTOR pfd; memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR)); pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); pfd.nVersion = 1; pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER; pfd.iPixelType = PFD_TYPE_RGBA; pfd.cColorBits = 24; pfd.cDepthBits = 32; pfd.cStencilBits = 8; int pixelFormat = ChoosePixelFormat(hdc, &pfd); SetPixelFormat(hdc, pixelFormat, &pfd); HGLRC hrc = wglCreateContext(hdc); if (hrc) { wglMakeCurrent(hdc, hrc); } else { std::cout << "ERROR::HRC::CREATE_FAILED\\n"; } if (!gladLoadGL()) { std::cout << "Could not initialize GLAD \\n"; } else { std::cout << "OpenGL Version " << GLVersion.major << std::endl; } // Init OpenGL initOpenGL(); // Shows window ShowWindow(hwnd, SW_SHOW); UpdateWindow(hwnd); MSG msg; while (true) { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) { break; } TranslateMessage(&msg); DispatchMessage(&msg); render(); SwapBuffers(hdc); } } return (int)msg.wParam;}LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam){ switch (iMsg) { case WM_SIZE: glViewport(0, 0, LOWORD(lParam), HIWORD(lParam)); // render(); break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: HDC hdc = GetDC(hwnd); HGLRC hglrc = wglGetCurrentContext(); glBindVertexArray(0); wglMakeCurrent(NULL, NULL); wglDeleteContext(hglrc); ReleaseDC(hwnd, hdc); PostQuitMessage(0); break; } return DefWindowProc(hwnd, iMsg, wParam, lParam);}\n\n","categories":["递归这个世界 · 编程","框架"],"tags":["CPP","Win32","Graphic","Computer","OpenGL"]},{"title":"基于Win32的OpenGL1.0","url":"/2023/06/29/note/Framework/OpenGL/Win32andOpenGL/","content":"使用win32原生API实现OpenGL,可以取代glut等第三方库。\n引自此博客。\n\n\n// 使用win32原生API实现OpenGL#include<Windows.h>#include<gl/GL.h>#pragma comment(lib, "opengl32.lib")BOOL win32_regist_class(const char* class_name) // 注册win32窗口类{\tWNDCLASSEXA cs =\t{\t\tsizeof(WNDCLASSEXA),\t\tCS_HREDRAW | CS_VREDRAW,\t[](HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)->LRESULT\t\t{\t\t\tswitch (msg) {\t\t\tcase WM_NCCREATE:\t\t\t{\t\t\t\tSetWindowLongPtrA(hwnd, GWLP_USERDATA, (LONG_PTR)((LPCREATESTRUCTA)lparam)->lpCreateParams);\t\t\t\tbreak;\t\t\t};\t\t\tcase WM_PAINT:\t\t\t{\t\t\t\tPAINTSTRUCT ps;\t\t\t\tBeginPaint(hwnd, &ps);\t\t\t\tEndPaint(hwnd, &ps);\t\t\t\tbreak;\t\t\t}\t\t\tcase WM_ERASEBKGND:\t\t\t{\t\t\t\treturn TRUE;\t\t\t}\t\t\tcase WM_DESTROY:\t\t\t{\t\t\t\tPostQuitMessage(0);\t\t\t\tbreak;\t\t\t}\t\t\tdefault:\t\t\t\tbreak;\t\t}\t\t\treturn DefWindowProcA(hwnd, msg, wparam, lparam);\t\t},\t\t0,\t\t0,\t\t(HINSTANCE)GetModuleHandleA(nullptr),\t\tnullptr,\t\tLoadCursorA(nullptr,IDC_ARROW),\t\t(HBRUSH)COLOR_WINDOW,\t\tnullptr,\t\tclass_name,\t\tnullptr\t};\treturn RegisterClassExA(&cs);}// 创建win32窗口HWND win32_create(const char* class_name, const char* window_name, int x, int y, int width, int height){\treturn CreateWindowExA(0, class_name, window_name, WS_OVERLAPPEDWINDOW | WS_VISIBLE, x, y, width, height, nullptr, nullptr, GetModuleHandle(nullptr), nullptr);}//获取可用于OpenGL绘制的DCHDC win32_get_gl_dc(HWND hwnd){\tPIXELFORMATDESCRIPTOR pfd = {};\tpfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);\tpfd.nVersion = 1;\tpfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;\tauto hdc = GetDC(hwnd);\tauto pixelFormat = ChoosePixelFormat(hdc, &pfd);\tif (!pixelFormat)\t{\t\tReleaseDC(hwnd, hdc);\t\treturn nullptr;\t}\tif (!SetPixelFormat(hdc, pixelFormat, &pfd))\t{\t\tReleaseDC(hwnd, hdc);\t\treturn nullptr;\t}\treturn hdc;}// 处理win32的消息BOOL win32_peek_message(HWND hwnd){\tMSG msg;\tif (PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE))\t{\t\tif (msg.message == WM_QUIT)\t\t\treturn FALSE;\t\tTranslateMessage(&msg);\t\tDispatchMessageA(&msg);\t}\treturn TRUE;}// 创建OpenGL的APIHGLRC gl_create(HDC hdc){\tauto hglrc = wglCreateContext(hdc);\tif (!hglrc)\t\treturn nullptr;\tif (!wglMakeCurrent(hdc, hglrc))\t{\t\treturn nullptr;\t}\t// 这里只获取了glCreateShader作为例子\tauto glCreateShader = (GLuint(__stdcall*)(GLenum type))wglGetProcAddress("glCreateShader");\treturn hglrc;}// 渲染void render(HWND hwnd, HDC hdc, HGLRC hglrc){\tRECT rc;\tGetClientRect(hwnd, &rc);\twglMakeCurrent(hdc, hglrc);\tglViewport(0, 0, rc.right, rc.bottom);\tglClearColor(0.4f, 0.5f, 0.4f, 0);\tglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\tglBegin(GL_TRIANGLE_STRIP);\tglColor3f(1, 0, 0); glVertex2f(0.0f, 0.0f);\tglColor3f(0, 1, 0); glVertex2f(0.5f, 0.5f);\tglColor3f(0, 0, 1); glVertex2f(0.0f, 0.5f);\tglEnd();}int main(){\twin32_regist_class("test");\tauto hwnd = win32_create("test", "test", 100, 100, 500, 400);\tauto hdc = win32_get_gl_dc(hwnd);\tauto hglrc = gl_create(hdc);\twhile (true)\t{\t\tif (win32_peek_message(nullptr) == FALSE)\t\t\tbreak;\t\trender(hwnd, hdc, hglrc);\t\tSwapBuffers(wglGetCurrentDC());\t}\treturn 0;}\n\n基于Win32的OpenGL开发win32程序的框架是winMain+WndProc,前者创建窗口同时实现窗口循环,后者实现消息处理。\n如何在win32下使用OpenGL,窗口创建的过程中,哪一步加入OpenGL的扩展呢?\n窗口创建时,由WM_CREATE、WM_SIZE、WM_PAINT三个消息依次产生,在WM_CREATE中增加窗口对OpenGL支持的代码,同时对OpenGL渲染环境做初始化,然后在WM_SIZE中实现OpenGL视图的变换,这样OpenGL绘图的前置工作就已经做完了,在WM_PAINT中就可以进行渲染了。\n\n❗按照此博客的方法和代码跑不通\n\n另一个思路是,在窗口创建完成时创建OpenGL的渲染环境,在消息循环中渲染(此时的消息循环等同于OpenGL的窗口循环),然后在消息处理函数中处理WM_SIZE来适应窗口大小:(引自基于Win32的OpenGL开发初探)\n#include <windows.h>#include<GL/glut.h>void drawScene(HDC* hdc);void EnableOpenGL(HWND hWnd, HDC* hdc, HGLRC* hrc);void DisableOpenGL(HWND hWnd, HDC hdc, HGLRC hrc);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //窗口函数声明int CALLBACK WinMain(HINSTANCE hInstance, //WinMain函数说明\tHINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {\tchar lpszClassName[] = "Windows"; //窗口类名\tchar lpszTitle[] = "Win32 Window"; //窗口标题名\tWNDCLASS wndclass;\twndclass.style = CS_HREDRAW | CS_VREDRAW; //窗口类型为缺省类型\twndclass.lpfnWndProc = WndProc; //窗口处理函数为WndProc\twndclass.cbClsExtra = 0; //窗口类无扩展\twndclass.cbWndExtra = 0; //窗口实例无扩展\twndclass.hInstance = hInstance; //当前实例句柄\twndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //使用缺省图标\twndclass.hCursor = LoadCursor(NULL, IDC_ARROW); //窗口采用箭头光标\twndclass.hbrBackground = NULL; //窗口背景为白色\twndclass.lpszMenuName = NULL; //窗口中无菜单\twndclass.lpszClassName = lpszClassName; //窗口类名为'窗口实例'\tif (!RegisterClass(&wndclass)) //注册窗口,若失败,则发出声音\t{\t\tMessageBeep(0);\t\treturn FALSE;\t}\t//创建窗口操作\tHWND hwnd = CreateWindow(\t\tlpszClassName, \t\tlpszTitle, //窗口实例的标题名\t\tWS_OVERLAPPEDWINDOW, //窗口的风格\t\tCW_USEDEFAULT,\t\tCW_USEDEFAULT, //窗口左上角坐标为缺省值\t\tCW_USEDEFAULT,\t\tCW_USEDEFAULT, //窗口的高度和宽度为缺省值\t\tNULL, //此窗口无父窗口\t\tNULL, //此窗口无主菜单\t\thInstance, //应用程序当前句柄\t\tNULL); //不使用该值\tShowWindow(hwnd, SW_SHOW); //显示窗口\tUpdateWindow(hwnd); //绘制用户区 \tHGLRC hRC; //绘制环境\tHDC hDC; //设备环境\tEnableOpenGL(hwnd, &hDC, &hRC); \tMSG msg = { 0 }; //消息结构\twhile (GetMessage(&msg, NULL, 0, 0)) //消息循环\t{\t\tTranslateMessage(&msg);\t\tDispatchMessage(&msg);\t\tdrawScene(&hDC);\t}\tDisableOpenGL(hwnd, hDC, hRC);\treturn 0; //程序终止时,将信息返回操作系统}LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {\tRECT rcClient;\tswitch (message) \t{\t\tcase WM_CREATE: \t\t{\t\t\treturn 0;\t\t}\t\tbreak;\t\tcase WM_DESTROY:\t\t{\t\t\tPostQuitMessage(0); //调用该函数发出WM_QUIT消息\t\t}\t\tbreak;\t\tcase WM_SIZE:\t\t{\t\t\tGetClientRect(hwnd, &rcClient);\t\t\tint w = rcClient.right - rcClient.left; // 获得客户区宽度\t\t\tint h = rcClient.bottom - rcClient.top; // 获得客户区高度\t\t\tglViewport(0, 0, w, h);\t\t}\t\tbreak;\t\tcase WM_TIMER:\t\t{\t\t\tInvalidateRect(hwnd, NULL, FALSE);\t\t}\t\tbreak;\t\tdefault: //缺省消息处理函数\t\t\treturn DefWindowProc(hwnd, message, wParam, lParam);\t}\treturn DefWindowProc(hwnd, message, wParam, lParam);}void drawScene(HDC* hdc) {\tglClearColor(0.3f, 0.3f, 0.3f, 0.0f);\tglClear(GL_COLOR_BUFFER_BIT);\tglColor4f(1.0f, 0.0f, 0.0f, 0.0f);\tglBegin(GL_QUADS);\tglVertex3f(-0.6f, -0.6f, 0.0f);\tglVertex3f(0.6f, -0.6f, 0.0f);\tglVertex3f(0.6f, 0.6f, 0.0f);\tglVertex3f(-0.6f, 0.6f, 0.0f);\tglEnd();\tSwapBuffers(*hdc);\tSleep(1);}void EnableOpenGL(HWND hwnd, HDC* hdc, HGLRC* hrc) {\t*hdc = GetDC(hwnd);\tPIXELFORMATDESCRIPTOR pfd = {\t\tsizeof(PIXELFORMATDESCRIPTOR), // size of this pfd \t\t1, // version number \t\tPFD_DRAW_TO_WINDOW | // support window \t\tPFD_SUPPORT_OPENGL | // support OpenGL \t\tPFD_DOUBLEBUFFER, // double buffered \t\tPFD_TYPE_RGBA, // RGBA type \t\t24, // 24-bit color depth \t\t0, 0, 0, 0, 0, 0, // color bits ignored \t\t0, // no alpha buffer \t\t0, // shift bit ignored \t\t0, // no accumulation buffer\t\t0, 0, 0, 0, // accum bits ignored \t\t32, // 32-bit z-buffer \t\t0, // no stencil buffer \t\t0, // no auxiliary buffer \t\tPFD_MAIN_PLANE, // main layer \t\t0, // reserved \t\t0, 0, 0 // layer masks ignored \t};\tint iPixelFormat = ChoosePixelFormat(*hdc, &pfd);\tSetPixelFormat(*hdc, iPixelFormat, &pfd);\t// create and enable the render context (RC)\t*hrc = wglCreateContext(*hdc);\twglMakeCurrent(*hdc, *hrc);}void DisableOpenGL(HWND hwnd, HDC hdc, HGLRC hrc) {\twglMakeCurrent(nullptr, nullptr);\twglDeleteContext(hrc);\tReleaseDC(hwnd, hdc);}\n\n运行结果如下:\n\n\n\n\n使用Win32调用GL#include <Windows.h>#include <gl/GL.h>#include <iostream>const unsigned int windowsWidth = 800;const unsigned int windowsHeight = 600;bool fullScreen = true;LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);int APIENTRY wWinMain(\t\t_In_ HINSTANCE hInstance,\t\t_In_opt_ HINSTANCE hPrevInstance,\t\t_In_ LPWSTR lpCmdLine,\t\t_In_ int nCmdShow)\t{\tchar info_log[512]{};\tchar lpszClassName[] = "Windows"; \tchar lpszTitle[] = "Win32 Window"; \tWNDCLASS wndclass{};\twndclass.style = CS_HREDRAW | CS_VREDRAW; \twndclass.lpfnWndProc = WndProc; \twndclass.cbClsExtra = 0;\twndclass.cbWndExtra = 0; \twndclass.hInstance = hInstance; \twndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); \twndclass.hCursor = LoadCursor(NULL, IDC_ARROW); \twndclass.hbrBackground = NULL; \twndclass.lpszMenuName = NULL;\twndclass.lpszClassName = lpszClassName; \tif (!RegisterClass(&wndclass)) \t{\t\tMessageBeep(0);\t\treturn FALSE;\t}\t\tHWND hwnd = CreateWindow(\t\tlpszClassName,\t\tlpszTitle, \t\tWS_OVERLAPPEDWINDOW, \t\tCW_USEDEFAULT,\t\tCW_USEDEFAULT, \t\twindowsWidth,\t\twindowsHeight, \t\tNULL, \t\tNULL, \t\thInstance, \t\tNULL); \t// create context\tHDC hDC = GetDC(hwnd);\tHGLRC hRC{};\tif (hDC)\t{\t\tint pixelFormat;\t\tPIXELFORMATDESCRIPTOR pixelFormatDesc;\t\t/* initialize bits to 0 */\t\tmemset(&pixelFormatDesc, 0, sizeof(PIXELFORMATDESCRIPTOR));\t\tpixelFormatDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR);\t\tpixelFormatDesc.nVersion = 1;\t\tpixelFormatDesc.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;\t\tpixelFormatDesc.iPixelType = PFD_TYPE_RGBA;\t\tpixelFormatDesc.cColorBits = 32;\t\tpixelFormatDesc.cAlphaBits = 8;\t\tpixelFormatDesc.cDepthBits = 24;\t\tpixelFormat = ChoosePixelFormat(hDC, &pixelFormatDesc);\t\tif (pixelFormat)\t\t{\t\t\tif (SetPixelFormat(hDC, pixelFormat, &pixelFormatDesc))\t\t\t\thRC = wglCreateContext(hDC);\t\t}\t}\telse \t{\t\tstd::cout << "ERROR::HDC::CREATE_FAILED\\n" << info_log << std::endl;\t}\tif (hRC) { // 待看\t\twglMakeCurrent(hDC, hRC);\t}\telse\t{\t\tstd::cout << "ERROR::HRC::CREATE_FAILED\\n" << info_log << std::endl;\t}\tShowWindow(hwnd, SW_SHOW);\tUpdateWindow(hwnd);\t//if (!gladLoadGL())\t//{\t//\tstd::cout << "Could not initialize GLAD \\n";\t//}\t//else {\t//\tstd::cout << "OpenGL Version " << GLVersion.major << std::endl;\t//}\tMSG msg = { 0 };\twhile (GetMessage(&msg, NULL, 0, 0)) \t{\t\tTranslateMessage(&msg);\t\tDispatchMessage(&msg);\t}\twglMakeCurrent(hDC, NULL);\twglDeleteContext(hRC);\tif(hDC!=NULL)\t\tReleaseDC(hwnd, hDC);\treturn 0;}static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {\tLRESULT result = 0;\tswitch (msg)\t{\tcase WM_PAINT:\t\tPAINTSTRUCT ps;\t\t//render();\t\tglClear(GL_COLOR_BUFFER_BIT);\t\tglBegin(GL_TRIANGLES);\t\tglColor3f(1.0f, 0.0f, 0.0f);\t\tglVertex2i(0, 1);\t\tglColor3f(0.0f, 1.0f, 0.0f);\t\tglVertex2i(-1, -1);\t\tglColor3f(0.0f, 0.0f, 1.0f);\t\tglVertex2i(1, -1);\t\tglEnd();\t\tglFlush();\t\tBeginPaint(hwnd, &ps);\t\tEndPaint(hwnd, &ps);\t\tbreak;\tcase WM_SIZE:\t\tglViewport(0, 0, LOWORD(lParam), HIWORD(lParam));\t\tbreak;\tcase WM_KEYDOWN:\t\t/* ESC: Escape */\t\tif (wParam == 27)\t\t\tPostMessage(hwnd, WM_CLOSE, 0, 0);\t\t/* F11: Fullscreen */\t\telse if (wParam == 122)\t\t{\t\t\tDWORD style = GetWindowLong(hwnd, GWL_STYLE);\t\t\tstatic int windowX, windowY, windowWidth, windowHeight = { 0 };\t\t\tif (fullScreen) {\t\t\t\tRECT rect;\t\t\t\tMONITORINFO mi = { sizeof(mi) };\t\t\t\tGetWindowRect(hwnd, &rect);\t\t\t\twindowX = rect.left;\t\t\t\twindowY = rect.top;\t\t\t\twindowWidth = rect.right - rect.left;\t\t\t\twindowHeight = rect.bottom - rect.top;\t\t\t\tGetMonitorInfo(MonitorFromWindow(hwnd, MONITOR_DEFAULTTOPRIMARY), &mi);\t\t\t\tSetWindowLong(hwnd, GWL_STYLE, style & ~WS_OVERLAPPEDWINDOW);\t\t\t\tSetWindowPos(hwnd, HWND_TOP, mi.rcMonitor.left, mi.rcMonitor.top,\t\t\t\t\tmi.rcMonitor.right - mi.rcMonitor.left,\t\t\t\t\tmi.rcMonitor.bottom - mi.rcMonitor.top,\t\t\t\t\tSWP_NOOWNERZORDER | SWP_FRAMECHANGED | SWP_SHOWWINDOW);\t\t\t}\t\t\telse \t\t\t{\t\t\t\tMONITORINFO mi = { sizeof(mi) };\t\t\t\tUINT flags = SWP_NOZORDER | SWP_FRAMECHANGED | SWP_SHOWWINDOW;\t\t\t\tGetMonitorInfo(MonitorFromWindow(hwnd, MONITOR_DEFAULTTOPRIMARY), &mi);\t\t\t\tSetWindowLong(hwnd, GWL_STYLE, style | WS_OVERLAPPEDWINDOW);\t\t\t\tSetWindowPos(hwnd, HWND_NOTOPMOST, windowX, windowY, windowWidth, windowHeight, flags);\t\t\t}\t\t\tfullScreen = !fullScreen;\t\t}\t\tbreak;\tcase WM_CLOSE:\t\tDestroyWindow(hwnd);\t\tPostQuitMessage(0);\t\tbreak;\tdefault:\t\tresult = DefWindowProc(hwnd, msg, wParam, lParam);\t}\treturn result;}\n\n","categories":["递归这个世界 · 编程","框架"],"tags":["CPP","Win32","Graphic","Computer","OpenGL"]},{"title":"在ArchLinux上编译Ogre","url":"/2023/07/14/note/Framework/OpenGL/ogre_compile/","content":"Ogre(Object-oriented Graphics Rendering Engine)是一个开源的实时图形渲染引擎,用于创建和渲染三维图形应用程序。它是基于C++编写的,并提供了丰富的功能和工具,使开发者能够构建高性能的图形应用程序。\n\n\n\n特点和功能:\n\n\n跨平台支持:Ogre是一个跨平台的引擎,支持在多个操作系统(如Windows、Linux、macOS等)上进行开发和部署。\n高性能渲染:Ogre通过使用现代图形硬件和优化算法,提供了高效的图形渲染。它支持多种渲染路径(如Direct3D和OpenGL),并针对不同平台和硬件提供了灵活的渲染配置。\n强大的渲染功能:Ogre提供了广泛的渲染功能,包括高级材质系统、灯光和阴影、粒子系统、骨骼动画、精确的几何剪裁等。这些功能使开发者能够创建出逼真和令人惊叹的图形效果。\n可扩展性和模块化:Ogre的设计注重可扩展性和模块化。它提供了丰富的插件系统,可以方便地添加和定制功能。开发者可以选择性地集成和使用不同的模块,以满足其特定的需求。\n资源管理和场景图:Ogre提供了资源管理器,用于加载和管理图形资源(如模型、纹理、材质等)。它还包括一个场景图系统,用于组织和渲染场景中的对象。\n多种编程语言支持:尽管Ogre是使用C++编写的,但它提供了多种语言的绑定和接口,包括Python、C#、Java等。这样可以方便开发者使用自己熟悉的编程语言来开发和扩展Ogre应用程序。\n\nOgre作为一个成熟且广泛应用的图形渲染引擎,被用于游戏开发、虚拟现实、模拟器、科学可视化等领域。它拥有一个活跃的社区,并提供了丰富的文档、示例和教程,以帮助开发者入门和使用Ogre引擎。\n在ArchLinux上编译Ogre安装依赖By default ogre will build the recommended dependencies automatically when you run cmake configure the first time. Ogre will install the dependencies into the subfolder Dependencies in the build dir by default. You can configure it by setting OGRE_DEPENDENCIES_DIR in cmake.\n\n文档的意思是Ogre会在配置cmake的时候自动安装依赖\n\n拉取源码git clone https://github.com/OGRECave/ogre.git\n\n配置cmakecd ogremkdir buildcd buildcmake ..\n\n编译cmake --build . --config Release\n\n安装到系统中想要使用它,最好将头文件和库文件放置到干净的地方。\ncmake --build . --config Release --target install\n\n你可能需要root权限才能完成这个操作。\n测试使用官方示例:\n// This file is part of the OGRE project.// It is subject to the license terms in the LICENSE file found in the top-level// directory of this distribution and at https://www.ogre3d.org/licensing.// SPDX-License-Identifier: MIT#include "Ogre.h"#include "OgreApplicationContext.h"//! [key_handler]class KeyHandler : public OgreBites::InputListener { bool keyPressed(const OgreBites::KeyboardEvent &evt) override { if (evt.keysym.sym == OgreBites::SDLK_ESCAPE) { Ogre::Root::getSingleton().queueEndRendering(); } return true; }};//! [key_handler]int main(int argc, char *argv[]) { //! [constructor] OgreBites::ApplicationContext ctx("OgreTutorialApp"); ctx.initApp(); //! [constructor] //! [setup] // get a pointer to the already created root Ogre::Root *root = ctx.getRoot(); // root->createRenderWindow("w",800,600,false,0); Ogre::SceneManager *scnMgr = root->createSceneManager(); // register our scene with the RTSS Ogre::RTShader::ShaderGenerator *shadergen = Ogre::RTShader::ShaderGenerator::getSingletonPtr(); shadergen->addSceneManager(scnMgr); // without light we would just get a black screen Ogre::Light *light = scnMgr->createLight("MainLight"); Ogre::SceneNode *lightNode = scnMgr->getRootSceneNode()->createChildSceneNode(); lightNode->setPosition(0, 15, 25); lightNode->attachObject(light); // also need to tell where we are Ogre::SceneNode *camNode = scnMgr->getRootSceneNode()->createChildSceneNode(); camNode->setPosition(50, 50, 50); camNode->lookAt(Ogre::Vector3(0, 0, -1), Ogre::Node::TS_PARENT); // create the camera Ogre::Camera *cam = scnMgr->createCamera("myCam"); cam->setNearClipDistance(5); // secific to this sample cam->setAutoAspectRatio(true); camNode->attachObject(cam); // and tell it to render into the main window ctx.getRenderWindow()->addViewport(cam); // finally something to render Ogre::Entity *ent = scnMgr->createEntity("ogrehead.mesh"); Ogre::SceneNode *node = scnMgr->getRootSceneNode()->createChildSceneNode(); node->attachObject(ent); //! [setup] //! [main] // register for input events KeyHandler keyHandler; ctx.addInputListener(&keyHandler); ctx.getRoot()->startRendering(); ctx.closeApp(); //! [main] return 0;}\n\nCMakeLists.txt文件如下:\ncmake_minimum_required (VERSION 3.10)project(OgreTutorialsSample)# required for Ogre 1.11+set(CMAKE_CXX_STANDARD 11)## [discover_ogre]# The COMPONENTS part checks that OGRE was built the way we need it# The CONFIG flag makes sure we get OGRE instead of OGRE-nextfind_package(OGRE REQUIRED COMPONENTS Bites CONFIG)set(CMAKE_EXPORT_COMPILE_COMMANDS ON)set(CMAKE_BUILD_TYPE debug)# add the source files as usualadd_executable(0_Bootstrap Bootstrap.cpp)# this also sets the includes and pulls third party dependenciestarget_link_libraries(0_Bootstrap OgreBites)\n\n文件结构:\n.├── Bootstrap.cpp├── build└── CMakeLists.txt\n\n运行命令:\ncd buildcmake ..; make; ./0_Bootstrap\n\n结果:\n\n","categories":["递归这个世界 · 编程","框架"],"tags":["CPP","Graphic","Computer","OpenGL"]},{"title":"OpenGL-2 基础","url":"/2023/07/01/note/Framework/OpenGL/opengl-basic/","content":"\n着色器需要用特定的语言编写,GLSL是一种类C的语言,专门用来写着色器程序。\n\n程序结构: \n\n声明版本\n输入和输出变量\nuniform和main函数\n\n\n\n着色器一个典型的着色器:\n#version version_numberin type in_variable_name;in type in_variable_name;out type out_variable_name;uniform type uniform_name;int main(){ // 处理输入并进行一些图形操作 ... // 输出处理过的结果到输出变量 out_variable_name = weird_stuff_we_processed;}\n\n对于顶点着色器,输入变量即顶点属性。\n能声明的顶点属性是有上限的,一般由硬件来决定。\n你可以查询GL_MAX_VERTEX_ATTRIBS来获取具体的上限:\nint nrAttributes;glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrAttributes);std::cout << "Maximum nr of vertex attributes supported: " << nrAttributes << std::endl;\n\n\n通常情况下它至少会返回16个,大部分情况下是够用了。\n\n变量GLSL中包含C等其它语言大部分的默认基础数据类型:int、float、double、uint和bool。GLSL也有两种容器类型,分别是向量(Vector)和矩阵(Matrix)。\n向量GLSL中的向量是一个可以包含有2、3或者4个分量的容器,分量的类型可以是前面默认基础类型的任意一个。它们可以是下面的形式(n代表分量的数量):\n\n\n\n类型\n含义\n\n\n\nvecn\n包含n个float分量的默认向量(因为float是默认的数据类型)\n\n\nbvecn\n包含n个bool分量的向量\n\n\nivecn\n包含n个int分量的向量\n\n\nuvecn\n包含n个unsigned int分量的向量\n\n\ndvecn\n包含n个double分量的向量\n\n\n多数情况使用vecn,这样已经够用了。\n一个向量的分量可以通过vec.x这种方式获取,这里x是指这个向量的第一个分量。你可以分别使用.x、.y、.z和.w来获取它们的第1、2、3、4个分量。GLSL也允许你对颜色使用rgba,或是对纹理坐标使用stpq访问相同的分量。\n向量这一数据类型也允许一些有趣而灵活的分量选择方式,叫做重组(Swizzling)。重组允许这样的语法:\nvec2 someVec;vec4 differentVec = someVec.xyxx;vec3 anotherVec = differentVec.zyw;vec4 otherVec = someVec.xxxx + anotherVec.yxzy;\n\n输入与输出GLSL定义了in和out关键字专门来实现输入和输出。\nlayout (location = 0)定义一个标识,这样才能链接到顶点数据。\n\n你也可以忽略layout (location = 0)标识符,通过在OpenGL代码中使用glGetAttribLocation查询属性位置值(Location),但着色器中设置它们会更容易理解而且节省你(和OpenGL)的工作量。\n\n片段着色器,它需要一个vec4颜色输出变量,因为片段着色器需要生成一个最终输出的颜色。\n如果你在片段着色器没有定义输出颜色,OpenGL会把你的物体渲染为黑色(或白色)。\n如果我们打算从一个着色器向另一个着色器发送数据,我们必须在发送方着色器中声明一个输出,在接收方着色器中声明一个类似的输入。当类型和名字都一样的时候,OpenGL就会把两个变量链接到一起,它们之间就能发送数据了(这是在链接程序对象时完成的)。\n顶点着色器\n#version 330 corelayout (location = 0) in vec3 aPos; // 位置变量的属性位置值为0out vec4 vertexColor; // 为片段着色器指定一个颜色输出void main(){ gl_Position = vec4(aPos, 1.0); // 注意我们如何把一个vec3作为vec4的构造器的参数 vertexColor = vec4(0.5, 0.0, 0.0, 1.0); // 把输出变量设置为暗红色}\n\n片段着色器\n#version 330 coreout vec4 FragColor;in vec4 vertexColor; // 从顶点着色器传来的输入变量(名称相同、类型相同)void main(){ FragColor = vertexColor;}\n\n顶点着色器中声明了一个vertexColor变量作为vec4输出,并在片段着色器中声明了一个类似的vertexColor。由于它们名字相同且类型相同,片段着色器中的vertexColor就和顶点着色器中的vertexColor链接了。由于我们在顶点着色器中将颜色设置为深红色,最终的片段也是深红色的。\n结果如下:\n\n\nUniformUniform是一种从CPU中的应用向GPU中的着色器发送数据的方式,但uniform和顶点属性有些不同。\nuniform是全局的(Global)。\n\nuniform变量必须在每个着色器程序对象中都是独一无二的,而且它可以被着色器程序的任意着色器在任意阶段访问。\n\n无论你把uniform值设置成什么,uniform会一直保存它们的数据,直到它们被重置或更新。\n\n\n#version 330 coreout vec4 FragColor;uniform vec4 ourColor; // 在OpenGL程序代码中设定这个变量void main(){ FragColor = ourColor;}\n\n定义了一个uniform的vec4,即ourColor,并且把片段着色器的输出颜色设置为uniform的值,之后无需再通过顶点着色器修改它,而可以直接在程序中修改:\nfloat timeValue = glfwGetTime(); // 获取运行的秒数float greenValue = (sin(timeValue) / 2.0f) + 0.5f; // 使用sin函数让颜色从0-1之间变化,结果储存在greenValue中int vertexColorLocation = glGetUniformLocation(shaderProgram, "ourColor"); // 通过函数glGetUniformLocation查询uniform ourColor的位置值,找不到返回-1glUseProgram(shaderProgram);glUniform4f(vertexColorLocation, 0.0f, greenValue, 0.0f, 1.0f); // 设置uniform的值\n\n注意:查询uniform地址不要求你之前使用过着色器程序,但是更新一个uniform之前你必须先使用程序(调用glUseProgram()),因为它是在当前激活的着色器程序中设置uniform的。\n\n❗如果你声明了一个uniform却在GLSL代码中没用过,编译器会静默移除这个变量,导致最后编译出的版本中并不会包含它,这可能导致几个非常麻烦的错误,记住这点!\n\n修改后的全部源码为:\n#include <glad/glad.h>#include <GLFW/glfw3.h>#include <iostream>#include <cmath>void framebuffer_size_callback(GLFWwindow* window, int width, int height); //回调函数的声明void processInput(GLFWwindow* window); // 处理对窗口的输入const char *vertexShaderSource = "#version 330 core\\n" "layout (location = 0) in vec3 aPos;\\n" "void main()\\n" "{\\n" "gl_Position = vec4(aPos, 1.0);\\n" "}\\n\\0";// 创建片段着色器程序的源码,使用c风格的常量字符串存储const char* fragmentShaderSource = "#version 330 core\\n" "out vec4 FragColor;\\n" "uniform vec4 ourColor;\\n" "void main() {\\n" //"FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\\n" // 此处设置片段颜色为黄色 "FragColor = ourColor;\\n" "}\\n\\0";int main(void) { // -------------- 1. glfw的初始化 ---------------- if (!glfwInit()) { return -1; } // --------------- 2. 使用glfw创建窗口 --------------- GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL); if (window == NULL) { std::cout << "Failed to create GLFW window" << std::endl; glfwTerminate(); return -1; } glfwMakeContextCurrent(window); // 此函数使指定窗口的 OpenGL 或 OpenGL ES 上下文成为调用线程的当前上下文 glfwSetFramebufferSizeCallback( window, framebuffer_size_callback); // 回调函数,保证每次窗口大小调整时,重新绘制 // --------------- 3. glad:加载OpenGL所有的函数指针 --------------- if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { std::cout << "Failed to initialize GLAD" << std::endl; return -1; } // --------------- 4. 创建和编译着色器 --------------- unsigned int vertexShader; // 创建顶点着色器索引 vertexShader = glCreateShader(GL_VERTEX_SHADER); // 创建顶点着色器 glShaderSource( vertexShader, 1, &vertexShaderSource, NULL); // 为顶点着色器添加源码,第二个参数是添加的源码中字符串的数量,第三个先设置为NULL glCompileShader(vertexShader); // 编译顶点着色器 int success; // 创建编译状态指示变量 char info_log[512]; // 创建用以存储log的数组 glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success); // 获取状态和log,输出到变量和数组中 if (!success) { // 如果编译失败,打印错误信息和log glGetShaderInfoLog(vertexShader, 512, NULL, info_log); std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\\n" << info_log << std::endl; } unsigned int fragmentShader; fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL); glCompileShader(fragmentShader); glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success); // 获取状态和log,输出到变量和数组中 if (!success) { // 如果编译失败,打印错误信息和log glGetShaderInfoLog(fragmentShader, 512, NULL, info_log); std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\\n" << info_log << std::endl; } // --------------- 5. 链接着色器 --------------- unsigned int shaderProgram; shaderProgram = glCreateProgram(); // 把着色器添加到着色器程序中 glAttachShader(shaderProgram, vertexShader); glAttachShader(shaderProgram, fragmentShader); glLinkProgram(shaderProgram); // 链接着色器程序 glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success); // 异常检测 if (!success) { glGetProgramInfoLog(shaderProgram, 512, NULL, info_log); std::cout << "ERROR::SHADER::PROGRAM::LINK_FAILED\\n" << info_log << std::endl; } glUseProgram( shaderProgram); // 调用此函数后,渲染和着色器调用都会使用此前所写的着色器了 glDeleteShader(vertexShader); glDeleteShader(fragmentShader); // 链接完成之后就可以删除着色器了 // --------------- 6. 创建顶点数据缓冲区 --------------- float vertices[] = { -0.5f, -0.5f, 0.0f, // left 0.5f, -0.5f, 0.0f, // right 0.0f, 0.5f, 0.0f }; // top unsigned int VBO, VAO; glGenVertexArrays(1, &VAO); glGenBuffers(1, &VBO); // 创建缓冲区 glBindVertexArray(VAO); glBindBuffer(GL_ARRAY_BUFFER, VBO); // 绑定缓冲区 glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); // -------- 告诉GPU如何读取顶点数据 ---------- glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); glEnableVertexAttribArray(0); // 启用顶点属性 glBindVertexArray(VAO); // --------------- 7. 窗口绘制循环 --------------- while (!glfwWindowShouldClose(window)) { // input // ----- processInput(window); // render // ----- glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glUseProgram(shaderProgram); // 更新uniform颜色 float timeValue = glfwGetTime(); float greenValue = static_cast<float>(sin(timeValue) / 2.0 + 0.5); int vertexColorLocation = glGetUniformLocation(shaderProgram, "ourColor"); glUniform4f(vertexColorLocation, 0.0f, greenValue, 0.0f, 1.0f); glDrawArrays(GL_TRIANGLES, 0, 3); //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glfwSwapBuffers(window); glfwPollEvents(); } // glfw: terminate, clearing all previously allocated GLFW resources. glDeleteVertexArrays(1, &VAO); glDeleteBuffers(1, &VBO); glDeleteProgram(shaderProgram); glfwTerminate(); return 0;}// process all input: query GLFW whether relevant keys are pressed/released this// frame and react accordingly// -----------------------void processInput(GLFWwindow* window) { if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) glfwSetWindowShouldClose(window, true);}// glfw: whenever the window size changed (by OS or user resize) this callback// function executes// ----------------------void framebuffer_size_callback(GLFWwindow* window, int width, int height) { // make sure the viewport matches the new window dimensions; note that width // and height will be significantly larger than specified on retina // displays. glViewport(0, 0, width, height);}\n\n运行结果为一个三角形,颜色在绿色和黑色之间周期性变换:\n\n\n\n\n更多属性把颜色数据添加为3个float值至vertices数组,把三角形的三个角分别指定为红色、绿色和蓝色:\nfloat vertices[] = { // 位置 // 颜色 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, // 右下 -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, // 左下 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f // 顶部};\n\n由于现在有更多的数据要发送到顶点着色器,有必要去调整一下顶点着色器,使它能够接收颜色值作为一个顶点属性输入。需要注意的是用layout标识符来把aColor属性的位置值设置为1:\n#version 330 corelayout (location = 0) in vec3 aPos; // 位置变量的属性位置值为 0 layout (location = 1) in vec3 aColor; // 颜色变量的属性位置值为 1out vec3 ourColor; // 向片段着色器输出一个颜色void main(){ gl_Position = vec4(aPos, 1.0); ourColor = aColor; // 将ourColor设置为我们从顶点数据那里得到的输入颜色}\n\n不再使用uniform来传递片段的颜色了,现在使用ourColor输出变量,必须再修改一下片段着色器:\n#version 330 coreout vec4 FragColor; in vec3 ourColor;void main(){ FragColor = vec4(ourColor, 1.0);}\n\n更新一下顶点格式:\nunsigned int VBO, VAO;glGenVertexArrays(1, &VAO);glGenBuffers(1, &VBO); // 创建缓冲区glBindVertexArray(VAO);glBindBuffer(GL_ARRAY_BUFFER, VBO); // 绑定缓冲区glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);// -------- 告诉GPU如何读取顶点数据 ----------glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)0);glEnableVertexAttribArray(0); // 启用顶点属性glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float))); // 最后一个是偏移量,因为前面的是位置,后面的是颜色glEnableVertexAttribArray(1);glUseProgram(shaderProgram);\n\n绘制:\nwhile (!glfwWindowShouldClose(window)) { // input // ----- processInput(window); // render // ----- glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glBindVertexArray(VAO); glDrawArrays(GL_TRIANGLES, 0, 3); //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glfwSwapBuffers(window); glfwPollEvents();}\n\n结果为:\n\n只给定了三个位置和三个颜色,却出现了一个类似于调色一样的东西,这是因为光栅化阶段会进行插值,生成比给定的顶点多得多的顶点,比如可能由上万个。\n着色器类主要是读取着色器程序的源码,编译,创建着色器程序,链接,有一个使用着色器的函数。\n#ifndef SHADER_H#define SHADER_H#include <glad/glad.h>#include <string>#include <fstream>#include <sstream>#include <iostream>class Shader{public: unsigned int ID; // constructor generates the shader on the fly // ------------------------------------------------------------------------ Shader(const char* vertexPath, const char* fragmentPath) { // 1. retrieve the vertex/fragment source code from filePath std::string vertexCode; std::string fragmentCode; std::ifstream vShaderFile; std::ifstream fShaderFile; // ensure ifstream objects can throw exceptions: vShaderFile.exceptions (std::ifstream::failbit | std::ifstream::badbit); fShaderFile.exceptions (std::ifstream::failbit | std::ifstream::badbit); try { // open files vShaderFile.open(vertexPath); fShaderFile.open(fragmentPath); std::stringstream vShaderStream, fShaderStream; // read file's buffer contents into streams vShaderStream << vShaderFile.rdbuf(); fShaderStream << fShaderFile.rdbuf(); // close file handlers vShaderFile.close(); fShaderFile.close(); // convert stream into string vertexCode = vShaderStream.str(); fragmentCode = fShaderStream.str(); } catch (std::ifstream::failure& e) { std::cout << "ERROR::SHADER::FILE_NOT_SUCCESSFULLY_READ: " << e.what() << std::endl; } const char* vShaderCode = vertexCode.c_str(); const char * fShaderCode = fragmentCode.c_str(); // 2. compile shaders unsigned int vertex, fragment; // vertex shader vertex = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertex, 1, &vShaderCode, NULL); glCompileShader(vertex); checkCompileErrors(vertex, "VERTEX"); // fragment Shader fragment = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragment, 1, &fShaderCode, NULL); glCompileShader(fragment); checkCompileErrors(fragment, "FRAGMENT"); // shader Program ID = glCreateProgram(); glAttachShader(ID, vertex); glAttachShader(ID, fragment); glLinkProgram(ID); checkCompileErrors(ID, "PROGRAM"); // delete the shaders as they're linked into our program now and no longer necessary glDeleteShader(vertex); glDeleteShader(fragment); } // activate the shader // ------------------------------------------------------------------------ void use() { glUseProgram(ID); } // utility uniform functions // ------------------------------------------------------------------------ void setBool(const std::string &name, bool value) const { glUniform1i(glGetUniformLocation(ID, name.c_str()), (int)value); } // ------------------------------------------------------------------------ void setInt(const std::string &name, int value) const { glUniform1i(glGetUniformLocation(ID, name.c_str()), value); } // ------------------------------------------------------------------------ void setFloat(const std::string &name, float value) const { glUniform1f(glGetUniformLocation(ID, name.c_str()), value); }private: // utility function for checking shader compilation/linking errors. // ------------------------------------------------------------------------ void checkCompileErrors(unsigned int shader, std::string type) { int success; char infoLog[1024]; if (type != "PROGRAM") { glGetShaderiv(shader, GL_COMPILE_STATUS, &success); if (!success) { glGetShaderInfoLog(shader, 1024, NULL, infoLog); std::cout << "ERROR::SHADER_COMPILATION_ERROR of type: " << type << "\\n" << infoLog << "\\n -- --------------------------------------------------- -- " << std::endl; } } else { glGetProgramiv(shader, GL_LINK_STATUS, &success); if (!success) { glGetProgramInfoLog(shader, 1024, NULL, infoLog); std::cout << "ERROR::PROGRAM_LINKING_ERROR of type: " << type << "\\n" << infoLog << "\\n -- --------------------------------------------------- -- " << std::endl; } } }};#endif\n\n使用着色器时,要用绝对路径。\n纹理纹理坐标的范围通常是从(0, 0)到(1, 1),超出部分可以设置环绕方式:\n\n\n\n环绕方式\n描述\n\n\n\nGL_REPEAT\n对纹理的默认行为。重复纹理图像。\n\n\nGL_MIRRORED_REPEAT\n和GL_REPEAT一样,但每次重复图片是镜像放置的。\n\n\nGL_CLAMP_TO_EDGE\n纹理坐标会被约束在0到1之间,超出的部分会重复纹理坐标的边缘,产生一种边缘被拉伸的效果。\n\n\nGL_CLAMP_TO_BORDER\n超出的坐标为用户指定的边缘颜色。\n\n\n\n纹理的生成过程加载stb_image库\n#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"\n\n添加一个纹理\nunsigned int textureID;glGenTextures(1, &textureID);int width, height, nrComponents;unsigned char* data = stbi_load(path, &width, &height, &nrComponents, 0);if (data){ GLenum format = {}; if (nrComponents == 1) format = GL_RED; else if (nrComponents == 3) format = GL_RGB; else if (nrComponents == 4) format = GL_RGBA; glBindTexture(GL_TEXTURE_2D, textureID); glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data); glGenerateMipmap(GL_TEXTURE_2D); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); stbi_image_free(data);}else{ std::cout << "Texture failed to load at path: " << path << std::endl; stbi_image_free(data);}\n\n此时纹理对象储存在一个可以通过textureID找到的地方。在顶点着色器中传入纹理桌标,再传给片段着色器:\n#version 330 coreout vec4 FragColor;in vec3 ourColor;in vec2 TexCoord;uniform sampler2D ourTexture;void main(){ FragColor = texture(ourTexture, TexCoord);}\n\n片段着色器是通过采样器访问纹理对象的。\n采样器(Sampler) :它以纹理类型作为后缀,比如sampler1D、sampler3D,或在我们的例子中的sampler2D。我们可以简单声明一个uniform sampler2D把一个纹理添加到片段着色器中,稍后我们会把纹理赋值给这个uniform。\n用GLSL内建的texture函数来采样纹理的颜色,它第一个参数是纹理采样器,第二个参数是对应的纹理坐标。\nglBindTexture(GL_TEXTURE_2D, texture);\n\n绘制图形前,绑定纹理,就会自动地把纹理赋值给片段着色器的采样器。\n\n在一些驱动中,必须要对每个采样器uniform都附加上纹理单元才可以。\n\n纹理单元一个片段着色器可以有多个纹理,一个纹理的位置通常称为一个纹理单元。默认的纹理单元是0,是默认激活的,因此只有一个时不需要手动分配位置和激活。\nglActiveTexture(GL_TEXTURE0); // 在绑定纹理之前先激活纹理单元glBindTexture(GL_TEXTURE_2D, texture);\n\n激活纹理单元之后,接下来的glBindTexture函数调用会绑定这个纹理到当前激活的纹理单元,纹理单元GL_TEXTURE0默认总是被激活,所以我们在前面的例子里当我们使用glBindTexture的时候,无需激活任何纹理单元。\n\nOpenGL至少保证有16个纹理单元供你使用,也就是说你可以激活从GL_TEXTURE0到GL_TEXTRUE15。它们都是按顺序定义的,所以我们也可以通过GL_TEXTURE0 + 8的方式获得GL_TEXTURE8,这在当我们需要循环一些纹理单元的时候会很有用。\n\n如果一个片段着色器绑定多个纹理单元,应该这样做:\nunsigned int texture1;glGenTextures(1, &texture1);... // 创建纹理1unsigned int texture2;glGenTextures(1, &texture2);... // 创建纹理2\n\n在片段着色器中创建两个采样器\nuniform sampler2D sampler_texture1;uniform sampler2D sampler_texture2;\n\n告诉OpenGL采样器对应的纹理单元\nourShader.use(); // 不要忘记在设置uniform变量之前激活着色器程序!ourShader.setInt("sampler_texture1", 0); // 使用着色器类设置ourShader.setInt("sampler_texture2", 1);// 也可以手动设置glUniform1i(glGetUniformLocation(ourShader.ID, "sampler_texture1"), 0);glUniform1i(glGetUniformLocation(ourShader.ID, "sampler_texture2"), 1);\n\n然后再渲染循环中分别激活并绑定纹理到对应的纹理单元\nglActiveTexture(GL_TEXTURE0);glBindTexture(GL_TEXTURE_2D, texture1);glActiveTexture(GL_TEXTURE1);glBindTexture(GL_TEXTURE_2D, texture2);\n\n最后片段着色器可以使用纹理了\nFragColor = mix(texture(texture1, TexCoord), texture(texture2, TexCoord), 0.2);\n\n所以总体的连接在于,创建的纹理可以通过ID绑定到对应的纹理单元上,设置采样器分配纹理单元,最后通过texture函数采样纹理,赋值给片段。\n变换理论上,变换共有三种:旋转,位移,缩放。\n\n矩阵求逆是一项对于着色器开销很大的运算,因为它必须在场景中的每一个顶点上进行,所以应该尽可能地避免在着色器中进行求逆运算。以学习为目的的话这样做还好,但是对于一个高效的应用来说,你最好先在CPU上计算出法线矩阵,再通过uniform把它传递给着色器(就像模型矩阵一样)。 \n\n#include <glm/glm.hpp>#include <glm/gtc/matrix_transform.hpp>#include <glm/gtc/type_ptr.hpp>// ---------------glm::vec4 vec(1.0f, 0.0f, 0.0f, 1.0f);glm::mat4 trans = glm::mat4(1.0f); // 矩阵的初始化是必要的trans = glm::translate(trans, glm::vec3(1.0f, 1.0f, 0.0f));vec = trans * vec;std::cout << vec.x << vec.y << vec.z << std::endl;// 以上代码是创建一个向量,然后用一个变换矩阵乘以此向量,达到变换向量的目的,输出结果为210\n\n实现3D// create transformationsglm::mat4 model = glm::mat4(1.0f);glm::mat4 view = glm::mat4(1.0f);glm::mat4 projection = glm::mat4(1.0f);model = glm::rotate(model, (float)glfwGetTime() * glm::radians(50.0f), glm::vec3(0.5f, 1.0f, 0.0f));// 注意,我们将矩阵向我们要进行移动场景的反方向移动。view = glm::translate(view, glm::vec3(0.0f, 0.0f, -3.0f));projection = glm::perspective(glm::radians(45.0f), (float)SCR_WIDTH / (float)SCR_HEIGHT, 0.1f, 100.0f);ourShader.setMat4("model", model);ourShader.setMat4("view", view);ourShader.setMat4("projection", projection);\n\n注意,矩阵的运算是从右向左的,因此顶点着色器中相乘时应为:\ngl_Position = projection * view * model * vec4(aPos, 1.0);\n\n摄像机类代码实现:\n#ifndef CAMERA_H#define CAMERA_H#include <glad/glad.h>#include <glm/glm.hpp>#include <glm/gtc/matrix_transform.hpp>#include <vector>// 定义一些可能用到的常量enum Camera_Movement { FORWARD, BACKWARD, LEFT, RIGHT, UP, DOWN, FASTER_FORWARD, FASTER_BACKWARD, FASTER_LEFT, FASTER_RIGHT };// 摄像机默认值const float YAW = -90.0f; // 偏航角度const float PITCH = 0.0f; // 上仰角度const float SPEED = 5.0f; // 摄像机移动速度,虽然实际是整个空间的物体同时在移动const float SENSITIVITY = 0.1f; // 鼠标灵敏度,用以计算镜头转向const float ZOOM = 45.0f; // 视野,观察空间的大小// An abstract camera class that processes input and calculates the// corresponding Euler Angles, Vectors and Matrices for use in OpenGLclass Camera { public: // 摄像机属性 glm::vec3 Position; // 摄像机位置向量 glm::vec3 Front; // 方向向量,摄像机指向的目标的方向 glm::vec3 Up; // 上向量,也即y轴正方向,叉乘方向向量可得右向量 glm::vec3 Right; // 右向量,摄像机空间x轴的正方向 glm::vec3 WorldUp; // 上向量 // 有了三个互相垂直的轴,外加一个平移向量,即可创建一个矩阵,可以用这个矩阵乘以任何向量来将其变换到那个空间 // euler Angles float Yaw; float Pitch; // camera options float MovementSpeed; float MouseSensitivity; float Zoom; // 使用一个向量创建摄像机: // 主要参数为:位置,默认为原点;上向量,默认为010;方向向量为00-1, // 其他均可以为默认 Camera(glm::vec3 position = glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3 up = glm::vec3(0.0f, 1.0f, 0.0f), float yaw = YAW, float pitch = PITCH) : Front(glm::vec3(0.0f, 0.0f, -1.0f)), MovementSpeed(SPEED), MouseSensitivity(SENSITIVITY), Zoom(ZOOM) { Position = position; WorldUp = up; Yaw = yaw; Pitch = pitch; updateCameraVectors(); } // 使用标量创建摄像机 // 主要参数为:位置,默认为原点;上向量,默认为010;方向向量为00-1, // 其他均可以为默认 Camera(float posX, float posY, float posZ, float upX, float upY, float upZ, float yaw, float pitch) : Front(glm::vec3(0.0f, 0.0f, -1.0f)), MovementSpeed(SPEED), MouseSensitivity(SENSITIVITY), Zoom(ZOOM) { Position = glm::vec3(posX, posY, posZ); WorldUp = glm::vec3(upX, upY, upZ); Yaw = yaw; Pitch = pitch; updateCameraVectors(); } // returns the view matrix calculated using Euler Angles and the LookAt // Matrix glm::mat4 GetViewMatrix() // 生成观察矩阵 { // return glm::lookAt(Position, Position + Front, Up); // // // lookat函数只需要一个位置,一个目标,和一个上向量,它会自己创建一个观察矩阵,此观察矩阵点乘空间中的物体,即可将物体变换到此观察空间中 // ------------ 以下为自己的lookat: // 1. Position = known // 2. Calculate cameraDirection glm::vec3 zaxis = glm::normalize(-Front); // 3. Get positive right axis vector glm::vec3 xaxis = glm::normalize(glm::cross(glm::normalize(WorldUp), zaxis)); // 4. Calculate camera up vector glm::vec3 yaxis = glm::cross(zaxis, xaxis); // Create translation and rotation matrix // In glm we access elements as mat[col][row] due to column-major layout glm::mat4 translation = glm::mat4(1.0f); // Identity matrix by default translation[3][0] = -Position.x; // Third column, first row translation[3][1] = -Position.y; translation[3][2] = -Position.z; glm::mat4 rotation = glm::mat4(1.0f); rotation[0][0] = xaxis.x; // First column, first row rotation[1][0] = xaxis.y; rotation[2][0] = xaxis.z; rotation[0][1] = yaxis.x; // First column, second row rotation[1][1] = yaxis.y; rotation[2][1] = yaxis.z; rotation[0][2] = zaxis.x; // First column, third row rotation[1][2] = zaxis.y; rotation[2][2] = zaxis.z; return rotation * translation; } // processes input received from any keyboard-like input system. Accepts // input parameter in the form of camera defined ENUM (to abstract it from // windowing systems) void ProcessKeyboard(Camera_Movement direction, float deltaTime) { float velocity = MovementSpeed * deltaTime; // 设定速度 // 根据方向调整方向向量 if (direction == FORWARD) Position += Front * velocity; if (direction == BACKWARD) Position -= Front * velocity; if (direction == LEFT) Position -= Right * velocity; if (direction == RIGHT) Position += Right * velocity; if (direction == UP) Position.y += velocity; if (direction == DOWN) Position.y -= velocity; // Position.y = 0.0f; // 确保不会偏离xz平面 // Setting faster if (direction == FASTER_FORWARD) Position += Front * (velocity * 10); if (direction == FASTER_BACKWARD) Position -= Front * (velocity * 10); if (direction == FASTER_LEFT) Position -= Right * (velocity * 10); if (direction == FASTER_RIGHT) Position += Right * (velocity * 10); } // processes input received from a mouse input system. Expects the offset // value in both the x and y direction. void ProcessMouseMovement(float xoffset, float yoffset, GLboolean constrainPitch = true) { xoffset *= MouseSensitivity; // x方向的鼠标偏离 yoffset *= MouseSensitivity; // y方向的鼠标偏离 Yaw += xoffset; // 偏航 Pitch += yoffset; // 仰角 if (constrainPitch) // 确保仰角足够大时屏幕不会被翻转 { if (Pitch > 89.0f) Pitch = 89.0f; if (Pitch < -89.0f) Pitch = -89.0f; } // update Front, Right and Up Vectors using the updated Euler angles updateCameraVectors(); } // processes input received from a mouse scroll-wheel event. Only requires // input on the vertical wheel-axis void ProcessMouseScroll(float yoffset) // 处理缩放 { Zoom -= (float)yoffset; if (Zoom < 1.0f) Zoom = 1.0f; if (Zoom > 45.0f) Zoom = 45.0f; } private: // 从更新后的相机的欧拉角计算方向向量 void updateCameraVectors() { // calculate the new Front vector glm::vec3 front; front.x = cos(glm::radians(Yaw)) * cos(glm::radians(Pitch)); front.y = sin(glm::radians(Pitch)); front.z = sin(glm::radians(Yaw)) * cos(glm::radians(Pitch)); Front = glm::normalize(front); // 同时重新计算了右向量和上向量 Right = glm::normalize(glm::cross(Front, WorldUp)); // 将向量归一化,因为你向上或向下看的次数越多,它们的长度就越接近0,这会导致移动速度变慢。 Up = glm::normalize(glm::cross(Right, Front)); }};#endif\n\n","categories":["递归这个世界 · 编程","框架"],"tags":["CPP","Graphic","Computer","OpenGL"]},{"title":"OpenGL-1 初识","url":"/2023/06/12/note/Framework/OpenGL/opengl-intro/","content":"OpenGL本身是一种规范,只是规定了一些应有的函数和参数,没有任何实现(实现由第三方库完成,如glfw、glew).\n\n\n\n本文之所以放在[编程]->[框架]的分类,是因为本文主要内容是用OpenGL规范实现的库的使用,而非OpenGL规范本身\n\n图形渲染管线是实时渲染的核心组件。渲染管线的功能是通过给定虚拟相机、3D场景物体以及光源等场景要素来产生或者渲染一副2D的图像。渲染管线是实时渲染的重要工具,主要包括两个功能:一是将物体3D坐标转变为屏幕空间2D坐标,二是为屏幕每个像素点进行着色。\n渲染管线的一般流程分别是:顶点数据的输入、顶点着色器、曲面细分过程、几何着色器、图元组装、裁剪剔除、光栅化、片段着色器以及混合测试。\n\n\nOpenGL中,所有事物都是在3D空间中的,而屏幕是2D,因此必须把三维的坐标转换成二维坐标。\n图形渲染管线图形渲染管线(Graphics Pipeline): 一个原始数据,经过一定变化和处理,最终显示在屏幕上。\n主要有两个步骤:\n\n把3D坐标转换为2D坐标\n把2D坐标转变为实际的有颜色的像素\n\n\n2D坐标和像素也是不同的,2D坐标精确表示一个点在2D空间中的位置,而2D像素是这个点的近似值,2D像素受到你的屏幕/窗口分辨率的限制。\n\n可被划分为几个阶段,连接而成,都具有特定的函数,很容易执行(正因为容易执行,才可以在GPU上运行成千上万个各自阶段的小程序,这些小程序为着色器).\n着色器运行在GPU上,节省了CPU的(宝贵的)时间.\n\nOpenGL着色器是用OpenGL着色器语言(OpenGL Shading Language, GLSL)写成的\n\n具体阶段:\n\n\n输入数组,也即**顶点数据(Vertex Data),它是用顶点属性(Vertex Attribute)**表示的,如坐标、颜色等\n使用图元(Primitive)可以告诉OpenGL把顶点渲染成什么样,如一系列点、一系列三角形或线,可用的**提示(Hint)**如GL_POINTS、GL_TRIANGLES、GL_LINE_STRIP\n图形渲染管线的第一个部分是顶点着色器(Vertex Shader),目的是把3D坐标数据转换成另一种3D坐标**,同时允许我们对顶点属性进行一些基本处理\n图元装配是将顶点着色器输出的所有顶点作为输入,并所有的点装配成指定图元的形状(如果是GL_POINTS,那么就是一个顶点),如三角形\n图元装配阶段的输出会传递给**几何着色器(Geometry Shader)**。几何着色器把图元形式的一系列顶点的集合作为输入,它可以通过产生新顶点构造出新的(或是其它的)图元来生成其他形状;例子中,它生成了另一个三角形\n几何着色器的输出会被传入**光栅化阶段(Rasterization Stage),这里它会把图元映射为最终屏幕上相应的像素,生成供片段着色器(Fragment Shader)使用的片段(Fragment)。在片段着色器运行之前会执行裁切(Clipping)**。裁切会丢弃超出你的视图以外的所有像素,用来提升执行效率\n\n\nOpenGL中的一个片段是OpenGL渲染一个像素所需的所有数据\n片段着色器的主要目的是计算一个像素的最终颜色,这也是所有OpenGL高级效果产生的地方。通常,片段着色器包含3D场景的数据(比如光照、阴影、光的颜色等等),这些数据可以被用来计算最终像素的颜色\n\n\n在所有对应颜色值确定以后,最终的对象将会被传到最后一个阶段,我们叫做Alpha测试和混合(Blending)阶段。这个阶段检测片段的对应的深度(和模板(Stencil))值(后面会讲),用它们来判断这个像素是其它物体的前面还是后面,决定是否应该丢弃。这个阶段也会检查alpha值(alpha值定义了一个物体的透明度)并对物体进行**混合(Blend)**;所以,即使在片段着色器中计算出来了一个像素输出的颜色,在渲染多个三角形的时候最后的像素颜色也可能完全不同\n\n第一个三角形此处给出源码和详细注释,结构清晰:\n#include "glad/glad.h"#include <GLFW/glfw3.h>#include <iostream>void framebuffer_size_callback(GLFWwindow* window, int width, int height); //回调函数的声明void processInput(GLFWwindow* window); // 处理对窗口的输入// --------------- 以字符串的形式定义着色器程序的源码,第4步需要用到 ---------------const char * vertexShaderSource = // 创建顶点着色器程序的源码,使用c风格的常量字符串存储 "#version 330 core\\n" "layout (location = 0) in vec3 aPos;\\n" "void main()\\n" "{\\n" " gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\\n" "}\\0";// 创建片段着色器程序的源码,使用c风格的常量字符串存储const char* fragmentShaderSource = "#version 330 core\\n" "out vec4 FragColor;\\n" "void main() {\\n" "FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\\n" // 此处设置片段颜色为黄色 "}\\0";int main(void) { // -------------- 1. glfw的初始化 ---------------- if (!glfwInit()) { return -1; } // --------------- 2. 使用glfw创建窗口 --------------- GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL); if (window == NULL) { std::cout << "Failed to create GLFW window" << std::endl; glfwTerminate(); return -1; } glfwMakeContextCurrent(window); // 此函数使指定窗口的 OpenGL 或 OpenGL ES 上下文成为调用线程的当前上下文 glfwSetFramebufferSizeCallback( window, framebuffer_size_callback); // 回调函数,保证每次窗口大小调整时,重新绘制 // --------------- 3. glad:加载OpenGL所有的函数指针 --------------- if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { std::cout << "Failed to initialize GLAD" << std::endl; return -1; } // --------------- 4. 创建和编译着色器 --------------- unsigned int vertexShader; // 创建顶点着色器索引 vertexShader = glCreateShader(GL_VERTEX_SHADER); // 创建顶点着色器 glShaderSource( vertexShader, 1, &vertexShaderSource, NULL); // 为顶点着色器添加源码,第二个参数是添加的源码中字符串的数量,第三个先设置为NULL glCompileShader(vertexShader); // 编译顶点着色器 int success; // 创建编译状态指示变量 char info_log[512]; // 创建用以存储log的数组 glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success); // 获取状态和log,输出到变量和数组中 if (!success) { // 如果编译失败,打印错误信息和log glGetShaderInfoLog(vertexShader, 512, NULL, info_log); std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\\n" << info_log << std::endl; } unsigned int fragmentShader; fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL); glCompileShader(fragmentShader); glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success); // 获取状态和log,输出到变量和数组中 if (!success) { // 如果编译失败,打印错误信息和log glGetShaderInfoLog(fragmentShader, 512, NULL, info_log); std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\\n" << info_log << std::endl; } // --------------- 5. 链接着色器 --------------- unsigned int shaderProgram; shaderProgram = glCreateProgram(); // 把着色器添加到着色器程序中 glAttachShader(shaderProgram, vertexShader); glAttachShader(shaderProgram, fragmentShader); glLinkProgram(shaderProgram); // 链接着色器程序 glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success); // 异常检测 if (!success) { glGetProgramInfoLog(shaderProgram, 512, NULL, info_log); std::cout << "ERROR::SHADER::PROGRAM::LINK_FAILED\\n" << info_log << std::endl; } glUseProgram( shaderProgram); // 调用此函数后,渲染和着色器调用都会使用此前所写的着色器了 glDeleteShader(vertexShader); glDeleteShader(fragmentShader); // 链接完成之后就可以删除着色器了 // --------------- 6. 创建顶点数据缓冲区 --------------- float vertices[] = { // 第一个三角形 0.5f, 0.5f, 0.0f, // 右上角 0.5f, -0.5f, 0.0f, // 右下角 -0.5f, -0.5f, 0.0f, // 左下角 -0.5f, 0.5f, 0.0f }; // 左上角 unsigned int indices[] = { // 注意索引从0开始! // 此例的索引(0,1,2,3)就是顶点数组vertices的下标, // 这样可以由下标代表顶点组合成矩形 0, 1, 3, // 第一个三角形 1, 2, 3 // 第二个三角形 }; //{ -0.5f, -0.5f, 0.0f, // left // 0.5f, -0.5f, 0.0f, // right // 0.0f, 0.5f, 0.0f }; // top unsigned int EBO; glGenBuffers(1, &EBO); unsigned int VBO; // 缓冲区类似socket编程中的文件描述符,buffer作为唯一的标识来表示生成的一个缓冲区,GPU可以通过这个标识来读取缓冲区的数据,进而绘制出图形;它是一个整数 // VBO是顶点缓冲对象 glGenBuffers(1, &VBO); // 创建缓冲区 glBindBuffer(GL_ARRAY_BUFFER, VBO); // 绑定缓冲区 glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); // -------- 创建顶点数组对象 ---------- unsigned int VAO; glGenVertexArrays(1, &VAO); glBindVertexArray(VAO); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); // 此时可以直接给缓冲区一个数据,或者不给数据,后面再给数据然后更新缓冲区 glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); // -------- 告诉GPU如何读取顶点数据 ---------- glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); glEnableVertexAttribArray(0); // 启用顶点属性 glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0); \t// --------------- 7. 窗口绘制循环 --------------- while (!glfwWindowShouldClose(window)) { // input // ----- processInput(window); // render // ----- glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glUseProgram(shaderProgram); //glBindVertexArray(VAO); // seeing as we only have a single VAO there's //// no need to bind it every time, but we'll do //// so to keep things a bit more organized //glDrawArrays(GL_TRIANGLES, 0, 3); glBindVertexArray(VAO); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); glBindVertexArray(0); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glfwSwapBuffers(window); glfwPollEvents(); } // glfw: terminate, clearing all previously allocated GLFW resources. // ------------------------------------------------------------------ glfwTerminate(); return 0;}// process all input: query GLFW whether relevant keys are pressed/released this// frame and react accordingly// ---------------------------------------------------------------------------------------------------------void processInput(GLFWwindow* window) { if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) glfwSetWindowShouldClose(window, true);}// glfw: whenever the window size changed (by OS or user resize) this callback// function executes// ---------------------------------------------------------------------------------------------void framebuffer_size_callback(GLFWwindow* window, int width, int height) { // make sure the viewport matches the new window dimensions; note that width // and height will be significantly larger than specified on retina // displays. glViewport(0, 0, width, height);}\n\n概念与作用第一个三角形涉及到一些概念和特性,最引人注目的是三个对象,即:\n\n顶点数组对象:Vertex Array Object,VAO\n顶点缓冲对象:Vertex Buffer Object,VBO\n元素缓冲对象:Element Buffer Object,EBO 或 索引缓冲对象 Index Buffer Object,IBO\n\n标准化设备坐标标准化设备坐标(Normalized Device Coordinates):OpenGL会将坐标转化为单位坐标,即所有轴上的大小范围为(-1, 1)\n顶点缓冲对象顶点缓冲对象(Vertex Buffer Objects, VBO):管理顶点的内存,在显存中储存大量顶点\n\n这样可以一次性发送大量数据到显卡,而不用每次绘制都到cpu的内存中读取数据\n\n\n创建\n\nunsigned int VBO; //创建ID,类似套接字,可以通过此ID访问此对象(唯一绑定)glGenBuffers(1, &VBO);//生成glBindBuffer(GL_ARRAY_BUFFER, VBO);//绑定,将生成的VBO与GL_ARRAY_BUFFER绑定,从此任何对GL_ARRAY_BUFFER的调用都会操作当前绑定的VBO// 如下面的操作:glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);//此函数将vertices的数据拷贝到缓冲GL_ARRAY_BUFFER中,因为之前绑定了VBO,所以实际上拷贝到了VBO上\n\nglBufferData函数的最后一个参数是指定显卡管理数据的方式:\n\nGL_STATIC_DRAW :数据不会或几乎不会改变,修改一次,使用多次\nGL_DYNAMIC_DRAW:数据会被改变很多,修改多次,使用多次\nGL_STREAM_DRAW :数据每次绘制时都会改变,每次都会修改和使用\n\n\n使用\n\nglVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float),(void *)0);// 链接顶点属性,即告诉OpenGL如何解释顶点对象中的数据glEnableVertexAttribArray(0); // 启用顶点属性// 然后即可在窗口事件循环中绘制:glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);glUseProgram(shaderProgram);glBindVertexArray(VBO);glDrawArrays(GL_TRIANGLES, 0, 3);\n\nglVertexAttribPointer函数参数:\n\n第一个参数指定我们要配置的顶点属性。还记得我们在顶点着色器中使用layout(location = 0)定义了position顶点属性的位置值(Location)吗?它可以把顶点属性的位置值设置为0。因为我们希望把数据传递到这一个顶点属性中,所以这里我们传入0。\n第二个参数指定顶点属性的大小。顶点属性是一个vec3,它由3个值组成,所以大小是3。\n第三个参数指定数据的类型,这里是GL_FLOAT(GLSL中vec*都是由浮点数值组成的)。\n下个参数定义我们是否希望数据被标准化(Normalize)。如果我们设置为GL_TRUE,所有数据都会被映射到0(对于有符号型signed数据是-1)到1之间。我们把它设置为GL_FALSE。\n第五个参数叫做步长(Stride),它告诉我们在连续的顶点属性组之间的间隔。由于下个组位置数据在3个float之后,我们把步长设置为3 * sizeof(float)。要注意的是由于我们知道这个数组是紧密排列的(在两个顶点属性之间没有空隙)我们也可以设置为0来让OpenGL决定具体步长是多少(只有当数值是紧密排列时才可用)。一旦我们有更多的顶点属性,我们就必须更小心地定义每个顶点属性之间的间隔,我们在后面会看到更多的例子(译注: 这个参数的意思简单说就是从这个属性第二次出现的地方到整个数组0位置之间有多少字节)。\n最后一个参数的类型是void*,所以需要我们进行这个奇怪的强制类型转换。它表示位置数据在缓冲中起始位置的偏移量(Offset)。由于位置数据在数组的开头,所以这里是0。我们会在后面详细解释这个参数。\n\n元素缓冲对象元素缓冲对象(Element Buffer Object,EBO):当有重复的顶点需要绘制时,不需要定义出相同的顶点,而是使用索引来引用重复的顶点\n这样只需要定义出不重复的所有顶点,需要哪个顶点时使用索引找到并使用它即可,这是EBO的工作方式\n\n创建顶点数组和索引\n\n// 绘制两个三角形组合成矩形,本来需要六个顶点,但是有两组重复的顶点float vertices[] = { // 第一个三角形 0.5f, 0.5f, 0.0f, // 右上角 0.5f, -0.5f, 0.0f, // 右下角 -0.5f, 0.5f, 0.0f, // 左上角 // 第二个三角形 0.5f, -0.5f, 0.0f, // 右下角 -0.5f, -0.5f, 0.0f, // 左下角 -0.5f, 0.5f, 0.0f // 左上角};// 下面只定义四个顶点,使用索引就可以构造出两个三角形float vertices[] = { 0.5f, 0.5f, 0.0f, // 右上角 0.5f, -0.5f, 0.0f, // 右下角 -0.5f, -0.5f, 0.0f, // 左下角 -0.5f, 0.5f, 0.0f // 左上角};unsigned int indices[] = { // 注意索引从0开始! // 此例的索引(0,1,2,3)就是顶点数组vertices的下标, // 这样可以由下标代表顶点组合成矩形 0, 1, 3, // 第一个三角形 1, 2, 3 // 第二个三角形};\n\n\n创建EBO(与VBO类似)\n\nunsigned int VBO; glGenBuffers(1, &VBO);glBindBuffer(GL_ARRAY_BUFFER, VBO);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);unsigned int EBO;glGenBuffers(1, &EBO);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); // 注意绑定的缓冲类型为GL_ELEMENT_ARRAY_BUFFERglBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);\n\n\n使用\n\nglVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float),(void *)0);// 链接顶点属性,即告诉OpenGL如何解释顶点对象中的数据glEnableVertexAttribArray(0); // 启用顶点属性//绘制时使用glDrawElements替换glDrawArraysglBindVertexArray(VBO);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);\n\n\n必须结合VBO才能使用EBO,因为EBO只储存了索引,而没有顶点数据\n\n顶点数组对象顶点数组对象(Vertex Array Object, VAO):主要用于管理 VBO 或 EBO ,减少glBindBuffer、glEnableVertexAttribArray、 glVertexAttribPointer 这些调用操作,高效地实现在顶点数组配置之间切换。\nVAO的简单使用:\n// 创建VAOunsigned VAO;glGenVertexArrays(1, &VAO);glBindVertexArray(VAO);//创建VBOunsigned int VBO;glGenBuffers(1, &VBO);glBindBuffer(GL_ARRAY_BUFFER, VBO);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);//创建EBOunsigned int EBO;glGenBuffers(1, &EBO);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);//设置顶点属性指针glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void *)0);glEnableVertexAttribArray(0); // 启用顶点属性//解绑glBindBuffer(GL_ARRAY_BUFFER, 0); // 解绑bufferglBindVertexArray(0); // 解绑VAO\n\n其他实践表明,无法使用同一个VAO绑定不同的VBO,画出两个不同的图形,一般是多个VAO分别对应多个VBO。一个EBO可以画出多个图形,但只是从预先设置好的数组中读取顶点数据,只不过可以重复使用顶点。\n词汇表\nOpenGL: 一个定义了函数布局和输出的图形API的正式规范。\nGLAD: 一个扩展加载库,用来为我们加载并设定所有OpenGL函数指针,从而让我们能够使用所有(现代)OpenGL函数。\n**视口(Viewport)**: 我们需要渲染的窗口。\n**图形管线(Graphics Pipeline)**: 一个顶点在呈现为像素之前经过的全部过程。\n**着色器(Shader)**: 一个运行在显卡上的小型程序。很多阶段的图形管道都可以使用自定义的着色器来代替原有的功能。\n**标准化设备坐标(Normalized Device Coordinates, NDC)**: 顶点在通过在剪裁坐标系中剪裁与透视除法后最终呈现在的坐标系。所有位置在NDC下-1.0到1.0的顶点将不会被丢弃并且可见。\n**顶点缓冲对象(Vertex Buffer Object)**: 一个调用显存并存储所有顶点数据供显卡使用的缓冲对象。\n**顶点数组对象(Vertex Array Object)**: 存储缓冲区和顶点属性状态。\n**元素缓冲对象(Element Buffer Object,EBO),也叫索引缓冲对象(Index Buffer Object,IBO)**: 一个存储元素索引供索引化绘制使用的缓冲对象。\nUniform: 一个特殊类型的GLSL变量。它是全局的(在一个着色器程序中每一个着色器都能够访问uniform变量),并且只需要被设定一次。\n**纹理(Texture)**: 一种包裹着物体的特殊类型图像,给物体精细的视觉效果。\n**纹理环绕(Texture Wrapping)**: 定义了一种当纹理顶点超出范围(0, 1)时指定OpenGL如何采样纹理的模式。\n**纹理过滤(Texture Filtering)**: 定义了一种当有多种纹素选择时指定OpenGL如何采样纹理的模式。这通常在纹理被放大情况下发生。\n**多级渐远纹理(Mipmaps)**: 被存储的材质的一些缩小版本,根据距观察者的距离会使用材质的合适大小。\nstb_image.h: 图像加载库。\n**纹理单元(Texture Units)**: 通过绑定纹理到不同纹理单元从而允许多个纹理在同一对象上渲染。\n**向量(Vector)**: 一个定义了在空间中方向和/或位置的数学实体。\n**矩阵(Matrix)**: 一个矩形阵列的数学表达式。\nGLM: 一个为OpenGL打造的数学库。\n**局部空间(Local Space)**: 一个物体的初始空间。所有的坐标都是相对于物体的原点的。\n**世界空间(World Space)**: 所有的坐标都相对于全局原点。\n**观察空间(View Space)**: 所有的坐标都是从摄像机的视角观察的。\n**裁剪空间(Clip Space)**: 所有的坐标都是从摄像机视角观察的,但是该空间应用了投影。这个空间应该是一个顶点坐标最终的空间,作为顶点着色器的输出。OpenGL负责处理剩下的事情(裁剪/透视除法)。\n**屏幕空间(Screen Space)**: 所有的坐标都由屏幕视角来观察。坐标的范围是从0到屏幕的宽/高。\nLookAt矩阵: 一种特殊类型的观察矩阵,它创建了一个坐标系,其中所有坐标都根据从一个位置正在观察目标的用户旋转或者平移。\n**欧拉角(Euler Angles)**: 被定义为偏航角(Yaw),俯仰角(Pitch),和滚转角(Roll)从而允许我们通过这三个值构造任何3D方向。\n\n","categories":["递归这个世界 · 编程","框架"],"tags":["CPP","Graphic","Computer"]},{"title":"MacOS创建OpenGL程序","url":"/2023/11/17/note/Framework/OpenGL/opengl-macos/","content":"在macOS上构建OpenGL程序需要安装一些依赖,而mac的包管理器毕竟远不如Linux。\n\n\nClangdmac上安装编译器后并不会自带clangd,需要安装llvm包,但是Homebrew安装需要自行编译,速度太慢,直接下载clangd,将bin和lib复制到对应的地方即可。\nglfw与glew使用Homebrew安装似乎总有问题,因此选择使用Macport。\nsudo port install glfwsudo port install glew\n\n安装的头文件路径为/opt/loacl/include,库文件路径为/opt/loacl/lib,编译时要主动添加,clang不会自动识别。\n如使用xmake构建时,应在xmake.lua文件中添加:\n-- librariesadd_linkdirs("/opt/local/lib")add_includedirs("/opt/local/include")add_links("glfw")if is_plat("macosx") then\tadd_frameworks("OpenGL")end\n\n如果项目中需要添加ImGUI,则C++版本至少C11,可在xmake.lua文件中添加:\nset_languages("cxx17")\n\n","categories":["递归这个世界 · 编程","框架"],"tags":["CPP","Graphic","Computer","OpenGL"]},{"title":"OpenGL-5 WebGL与WASM","url":"/2023/08/10/note/Framework/OpenGL/opengl-wasm/","content":"工作需要,使用wasm技术将OpenGL程序编译成可在网页显示的程序。\n\n\n先上代码:\n#include <functional>#include <SDL.h>#include <emscripten.h>#define GL_GLEXT_PROTOTYPES 1#include <SDL_opengles2.h>// Shader sourcesconst GLchar *vertexSource = "attribute vec4 position; \\n" "void main() \\n" "{ \\n" " gl_Position = vec4(position.xyz, 1.0); \\n" "} \\n";const GLchar *fragmentSource = "precision mediump float;\\n" "void main() \\n" "{ \\n" " gl_FragColor[0] = gl_FragCoord.x/640.0; \\n" " gl_FragColor[1] = gl_FragCoord.y/480.0; \\n" " gl_FragColor[2] = 0.5; \\n" "} \\n";// an example of something we will control from the javascript sidebool background_is_black = true;// the function called by the javascript codeextern "C" void EMSCRIPTEN_KEEPALIVE toggle_background_color() { background_is_black = !background_is_black;}std::function<void()> loop;void main_loop() { loop(); }int main() { // Create window and renderer (context) SDL_Window *window; SDL_Renderer *renderer; SDL_CreateWindowAndRenderer(640, 480, 0, &window, &renderer); // Set attributes SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); // vertex data float vertices[] = {0.0f, 0.5f, 0.5f, -0.5f, -0.5f, -0.5f}; // Create a Vertex Buffer Object and copy the vertex data to it unsigned int vbo, vao; glGenBuffers(1, &vbo); glGenVertexArraysOES(1, &vao); glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); // Create and compile the vertex shader unsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShader, 1, &vertexSource, nullptr); glCompileShader(vertexShader); // Create and compile the fragment shader unsigned int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShader, 1, &fragmentSource, nullptr); glCompileShader(fragmentShader); // Link the vertex and fragment shader into a shader program unsigned int shaderProgram = glCreateProgram(); glAttachShader(shaderProgram, vertexShader); glAttachShader(shaderProgram, fragmentShader); glLinkProgram(shaderProgram); glUseProgram(shaderProgram); // Specify the layout of the vertex data unsigned int posAttrib = glGetAttribLocation(shaderProgram, "position"); glBindVertexArrayOES(vao); glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(posAttrib); loop = [&] { // move a vertex const uint32_t milliseconds_since_start = SDL_GetTicks(); const uint32_t milliseconds_per_loop = 3000; vertices[0] = (milliseconds_since_start % milliseconds_per_loop) / float(milliseconds_per_loop) - 0.5f; glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); // Clear the screen if (background_is_black) glClearColor(0.0f, 0.0f, 0.0f, 1.0f); else glClearColor(0.9f, 0.9f, 0.9f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); // Draw a triangle from the 3 vertices glDrawArrays(GL_TRIANGLES, 0, 3); SDL_GL_SwapWindow(window); }; emscripten_set_main_loop(main_loop, 0, true); return EXIT_SUCCESS;}\n\n编译运行:\nemcc main.cpp -std=c++11 -s WASM=1 -s USE_SDL=2 -O3 -o index.jspython -m http.server 8080\n\n\n","categories":["递归这个世界 · 编程","框架"],"tags":["CPP","Graphic","Computer","OpenGL"]},{"title":"OpenGL-3 进阶","url":"/2023/07/24/note/Framework/OpenGL/opengl_advance/","content":"在OpenGL中,深度测试(Depth Testing)是一种用于处理场景中多个物体的绘制顺序的技术。它用于解决物体的可见性问题,确保只有最前面的物体像素被绘制,从而实现真实的3D场景效果。\n深度测试的基本思想是根据物体在场景中的距离,维护一个深度缓冲区(Depth Buffer),它是一个和颜色缓冲区大小相同的缓冲区。在深度缓冲区中,每个像素都存储着一个深度值(通常是浮点数或整数),表示物体到观察点(摄像机)的距离。这个距离通常是从摄像机视点到物体的距离。\n深度测试默认是禁用的,所以如果要启用深度测试的话,我们需要用GL_DEPTH_TEST选项来启用它:\nglEnable(GL_DEPTH_TEST);\n\n\n\n深度冲突深度冲突(Depth Conflict)在OpenGL中指的是由于有多个物体在相同的屏幕位置上,并且它们的深度值相同或非常接近,导致深度测试无法准确地决定哪个物体应该在前面绘制,从而产生了视觉上的错误。\n深度冲突通常在以下情况下出现:\n\n在一个或多个物体的表面上有很多小的细节或凹凸,导致深度值在这些区域上非常接近,难以区分哪个物体在前面。\n在一个场景中有多个物体重叠在一起,并且它们的表面在同一深度上,导致深度测试无法准确判断哪个物体应该在前面绘制。\n\n为了解决深度冲突,有以下几种方法:\n\n使用更高精度的深度缓冲:可以使用更高精度的深度缓冲,比如使用32位浮点数来存储深度值,这样能够减少深度冲突的可能性。\n调整近平面和远平面:如果你的场景非常大或非常小,可能会导致深度缓冲的精度问题。通过调整近平面和远平面的值,可以增加深度缓冲的有效范围,从而减少深度冲突的可能性。\n使用透明度排序:如果你的场景中有透明物体,可以考虑对它们进行按照透明度排序,并按照远到近的顺序绘制它们。这样可以确保透明物体正确地显示在其他物体的后面。\n使用多边形偏移(Polygon Offset):多边形偏移是一种通过微调深度值的方法来解决深度冲突的技术。它可以在绘制深度冲突的物体时,稍微改变它们的深度值,使它们稍微偏移一些,从而防止深度冲突。\n使用深度测试函数:OpenGL提供了几种深度测试函数,比如GL_LESS、GL_LEQUAL、GL_GREATER等等。你可以根据场景的需求选择合适的深度测试函数,以调整深度测试的行为。\n\n深度冲突是一个相对常见的问题,特别是在复杂的场景中。解决深度冲突通常需要结合多种方法,具体取决于场景的复杂程度和需求。选择合适的解决方法有助于提高渲染效果和场景的真实感。\n模板测试通过使用模板缓冲,我们可以根据场景中已绘制的其它物体的片段,来决定是否丢弃特定的片段。\nglStencilFunc(GL_ALWAYS, 1, 0xFF); // 所有的片段都应该更新模板缓冲,并且将每个像素的模板值设置为1glStencilMask(0xFF); // 启用模板缓冲写入// ... 绘制箱子glStencilFunc(GL_NOTEQUAL, 1, 0xFF); // 每个像素的模板值不等于1时通过模板测试glStencilMask(0x00); // 禁止模板缓冲的写入glDisable(GL_DEPTH_TEST); // 禁用深度测试,以防止地板覆盖边框(也即放大的箱子)// ... 绘制更大的箱子glStencilMask(0xFF);glStencilFunc(GL_ALWAYS, 0, 0xFF);glEnable(GL_DEPTH_TEST); // 重新启用深度测试,防止影响其他绘制\n\n\n混合OpenGL中,混合(Blending)通常是实现物体透明度(Transparency)的一种技术。透明就是说一个物体(或者其中的一部分)不是纯色(Solid Color)的,它的颜色是物体本身的颜色和它背后其它物体的颜色的不同强度结合。一个有色玻璃窗是一个透明的物体,玻璃有它自己的颜色,但它最终的颜色还包含了玻璃之后所有物体的颜色。这也是混合这一名字的出处,我们混合(Blend)(不同物体的)多种颜色为一种颜色。所以透明度能让我们看穿物体。\n其他问题stb_image库踩坑加载stb_image库时,宏声明应在头文件之前,否则会找不到函数:\n#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"\n\n摄像机位置添加空格上升镜头位置,ctrl降低镜头位置:\nvoid ProcessKeyboard(Camera_Movement direction, float deltaTime){ float velocity = MovementSpeed * deltaTime; // 设定速度 // 根据方向调整方向向量 if (direction == FORWARD) Position += Front * velocity; if (direction == BACKWARD) Position -= Front * velocity; if (direction == LEFT) Position -= Right * velocity; if (direction == RIGHT) Position += Right * velocity; if (direction == UP) Position.y += velocity; if (direction == DOWN) Position.y -= velocity; // Position.y = 0.0f; // 确保不会偏离xz平面}\n\n模型加载库\n\n和材质和网格(Mesh)一样,所有的场景/模型数据都包含在Scene对象中。Scene对象也包含了场景根节点的引用。\n场景的Root node(根节点)可能包含子节点(和其它的节点一样),它会有一系列指向场景对象中mMeshes数组中储存的网格数据的索引。Scene下的mMeshes数组储存了真正的Mesh对象,节点中的mMeshes数组保存的只是场景中网格数组的索引。\n一个Mesh对象本身包含了渲染所需要的所有相关数据,像是顶点位置、法向量、纹理坐标、面(Face)和物体的材质。\n一个网格包含了多个面。Face代表的是物体的渲染图元(Primitive)(三角形、方形、点)。一个面包含了组成图元的顶点的索引。由于顶点和索引是分开的,使用一个索引缓冲来渲染是非常简单的(见[你好,三角形](https://learnopengl-cn.github.io/01 Getting started/04 Hello Triangle/))。\n最后,一个网格也包含了一个Material对象,它包含了一些函数能让我们获取物体的材质属性,比如说颜色和纹理贴图(比如漫反射和镜面光贴图)。\n\n\n所谓网格,就是渲染物体的最小单位\n\n通过使用Assimp,我们可以加载不同的模型到程序中,但是载入后它们都被储存为Assimp的数据结构。我们最终仍要将这些数据转换为OpenGL能够理解的格式,这样才能渲染这个物体。\nGLFW处理多个键同时输入设置摄像机更快速的移动shift+w/s/a/d:\n// Fasterif (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS) camera.ProcessKeyboard(FASTER_FORWARD, deltaTime);if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS) camera.ProcessKeyboard(FASTER_BACKWARD, deltaTime);if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS) camera.ProcessKeyboard(FASTER_LEFT, deltaTime);if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS) camera.ProcessKeyboard(FASTER_RIGHT, deltaTime);\n\n着色器类中的异常捕捉// ensure ifstream objects can throw exceptions:vShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);fShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);try { // open files vShaderFile.open(vertexPath); fShaderFile.open(fragmentPath); std::stringstream vShaderStream, fShaderStream; // read file's buffer contents into streams vShaderStream << vShaderFile.rdbuf(); fShaderStream << fShaderFile.rdbuf(); // close file handlers vShaderFile.close(); fShaderFile.close(); // convert stream into string vertexCode = vShaderStream.str(); fragmentCode = fShaderStream.str();} catch (std::ifstream::failure &e) { std::cout << "ERROR::SHADER::FILE_NOT_SUCCESSFULLY_READ: " << e.what() << std::endl;}\n\n深入理解顶点着色器和片段着色器在OpenGL核心模式的渲染中,这两个着色器是不能跳过的着色器,必须手动编写。\n抗锯齿超采样抗锯齿(Super Sample Anti-aliasing, SSAA):它会使用比正常分辨率更高的分辨率(即超采样)来渲染场景,当图像输出在帧缓冲中更新时,分辨率会被下采样(Downsample)至正常的分辨率。这些额外的分辨率会被用来防止锯齿边缘的产生。虽然它确实能够解决走样的问题,但是由于这样比平时要绘制更多的片段,它也会带来很大的性能开销。所以这项技术只拥有了短暂的辉煌。\n多重采样抗锯齿(Multisample Anti-aliasing, MSAA):它借鉴了SSAA背后的理念,但却以更加高效的方式实现了抗锯齿。渲染图元时,不只使用像素中心点作为采样点,而是将一个像素分成多个子采样点(这也是为什么叫做多重采样的原因)。每个像素片段着色器只运行一次,其所使用的顶点数据会插值到每个像素中心,结果储存在每个被覆盖的子采样点中,每个像素内部会将采样点的颜色平均化。\n在OpenGL中使用MSAA,可以通过Hint的方式,在创建窗口前调用:\nglfwWindowHint(GLFW_SAMPLES, 4);glEnable(GL_MULTISAMPLE); // 保险起见,启用一下多重采样(多数情况时默认启用的)\n\n现在再调用glfwCreateWindow创建渲染窗口时,每个屏幕坐标就会使用一个包含4个子采样点的颜色缓冲了。GLFW会自动创建一个每像素4个子采样点的深度和样本缓冲。这也意味着所有缓冲的大小都增长了4倍。\nImGui为了方便的查看场景,将鼠标禁用,使用光标回调函数来控制摄像机镜头的方向,所以使用imgui时不能使用鼠标拖动控件,如下:\n\n因此要设置一个快捷键来唤出光标,捕捉并禁用光标的代码是在创建窗口后:\nglfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);\n\n而实现快捷时有一个问题,实现摄像机在场景中移动是在渲染循环中使用processInput(window)函数,获取键盘输入来控制,这样可以实现一次按下连续控制,这也正是问题所在,如果直接在此函数中设置快捷键,按下一次会在每次渲染循环中都调用一次,表现为光标一直闪烁(因为一直在重复 获取光标、隐藏光标、获取光标…)。\n解决方法是定义键盘回调函数,将切换光标的代码放到回调函数中,这样按一次键盘释放之前不会重复调用。\nbool show_mouse = false; // global variable// Key callback functionvoid key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) { if (glfwGetKey(window, GLFW_KEY_LEFT_ALT) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_C) == GLFW_PRESS) { if (show_mouse) { show_mouse = false; } else { show_mouse = true; } // 捕捉鼠标,并隐藏光标 if (!show_mouse) glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); else glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); }}// Don't forget registering it after creating the window// in main functionglfwSetKeyCallback(window, key_callback);\n\n初始化在渲染循环之外:\n// Init Dear Imguiconst char* glsl_version = "#version 330";IMGUI_CHECKVERSION();ImGui::CreateContext();ImGuiIO& io = ImGui::GetIO(); (void)io;ImGui::StyleColorsDark();ImGui_ImplGlfw_InitForOpenGL(window, true);ImGui_ImplOpenGL3_Init(glsl_version);\n\n使用在渲染循环内:\nImGui_ImplOpenGL3_NewFrame();ImGui_ImplGlfw_NewFrame();ImGui::NewFrame();{ // setup ImGui::Begin("Cube and Lighting"); \t// ... ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); // Frame rate ImGui::End();}ImGui::Render();ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());\n\n同一行放置多个控件ImGui::SameLine();\n\n可实现此语句前后的两个控件不换行。\n控件例子ImGui::Begin("Cube and Lighting"); // Create a window called "Cube and Lighting" and append into it.ImGui::Text("Here can be adjust some params of the sence."); // Display some text (you can use a format strings too)ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close stateImGui::SliderFloat("ambientStrength", &ambientStrength, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0fImGui::SliderFloat("specularStrength", &specularStrength, 0.0f, 1.0f);ImGui::ColorEdit3("Cube color", (float*)&objectColor); // Edit 3 floats representing a colorImGui::Text("Cube color = %f, %f, %f", objectColor.x, objectColor.y, objectColor.z); if (ImGui::Button("Button")) counter++;// Buttons return true when clicked (most widgets return true when edited/activated)ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);ImGui::End();\n\n小行星光照方向变化实例化渲染时,模型矩阵aInstanceMatrix会从直接传入顶点着色器,而不是uniform赋值,因此直接在GPU中计算法向量Normal = mat3(transpose(inverse(aInstanceMatrix))) * aNormal;,这样光照的计算就不会因为模型变换而改变方向。\n#version 330 corelayout (location = 0) in vec3 aPos;layout (location = 1) in vec3 aNormal;layout (location = 2) in vec2 aTexCoords;layout (location = 3) in mat4 aInstanceMatrix;out vec2 TexCoords;out vec3 FragPos;out vec3 Normal;uniform mat4 projection;uniform mat4 view;void main(){ TexCoords = aTexCoords; gl_Position = projection * view * aInstanceMatrix * vec4(aPos, 1.0f); Normal = mat3(transpose(inverse(aInstanceMatrix))) * aNormal; FragPos = vec3(aInstanceMatrix * vec4(aPos, 1.0));}\n\nCubemap加载天空盒需要加载六个纹理。\nunsigned int loadCubemap(vector<std::string> faces){ unsigned int textureID; glGenTextures(1, &textureID); glBindTexture(GL_TEXTURE_CUBE_MAP, textureID); int width, height, nrChannels; for (unsigned int i = 0; i < faces.size(); i++) { unsigned char* data = stbi_load(faces[i].c_str(), &width, &height, &nrChannels, 0); if (data) { glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data); stbi_image_free(data); } else { std::cout << "Cubemap texture failed to load at path: " << faces[i] << std::endl; stbi_image_free(data); } } glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); return textureID;}\n\n即所谓天空盒子,可以在场景四周贴上纹理,看起来就像是在一些场景中。\n\n必须要注意的是,纹理图片必须是jpg格式的,大小必须为1024的倍数,比例必须是正方形。\n\n// Sky box vertex data// ------------float skyboxVertices[] = { // positions -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f};// skybox VAOunsigned int skyboxVAO, skyboxVBO;glGenVertexArrays(1, &skyboxVAO);glGenBuffers(1, &skyboxVBO);glBindVertexArray(skyboxVAO);glBindBuffer(GL_ARRAY_BUFFER, skyboxVBO);glBufferData(GL_ARRAY_BUFFER, sizeof(skyboxVertices), &skyboxVertices, GL_STATIC_DRAW);glEnableVertexAttribArray(0);glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);vector<std::string> faces{ "../assets/space/right.jpg", "../assets/space/left.jpg", "../assets/space/top.jpg", "../assets/space/bottom.jpg", "../assets/space/front.jpg", "../assets/space/back.jpg",};unsigned int cubemapTexture = loadCubemap(faces);skyboxShader.use();skyboxShader.setInt("skybox", 0);\n\n顶点着色器:\n#version 330 corelayout (location = 0) in vec3 aPos;out vec3 TexCoords;uniform mat4 projection;uniform mat4 view;void main(){ TexCoords = aPos; vec4 pos = projection * view * vec4(aPos, 1.0); gl_Position = pos.xyww;}\n\n片段着色器:\n#version 330 coreout vec4 FragColor;in vec3 TexCoords;uniform samplerCube skybox;void main(){ FragColor = texture(skybox, TexCoords);}\n\n然后渲染:\n // draw skybox as lastglDepthFunc(GL_LEQUAL); // change depth function so depth test passes when values are equal to depth buffer's contentskyboxShader.use();view = glm::mat4(glm::mat3(camera.GetViewMatrix())); // remove translation from the view matrixskyboxShader.setMat4("view", view);skyboxShader.setMat4("projection", projection);// skybox cubeglBindVertexArray(skyboxVAO);glActiveTexture(GL_TEXTURE0);glBindTexture(GL_TEXTURE_CUBE_MAP, cubemapTexture);glDrawArrays(GL_TRIANGLES, 0, 36);glBindVertexArray(0);glDepthFunc(GL_LESS); // set depth function back to default\n\n贴图下载网站有许多网站提供免费和付费的Cubemap贴图下载。你可以在这些网站上找到各种类型和风格的Cubemap贴图,以满足你的需求。以下是一些常见的资源网站:\n\nHDRI Haven (https://hdrihaven.com/): 这是一个提供高动态范围图像(HDRI)和Cubemap贴图的免费资源网站。你可以在这里找到多种环境和天空盒子贴图。\nTextures.com (https://www.textures.com/): 这个网站提供各种类型的纹理资源,包括Cubemap贴图。它有免费和付费选项。\nUnity Asset Store (https://assetstore.unity.com/): 如果你使用Unity引擎,Unity Asset Store提供了丰富的Cubemap贴图资源,其中一些是免费的,而另一些需要购买。\nUnreal Engine Marketplace (https://www.unrealengine.com/marketplace/): 如果你使用Unreal Engine,这个市场提供了许多Cubemap贴图资源,其中一些也是免费的。\nGoogle搜索:你可以在Google上搜索”Cubemap textures”、”Skybox textures”或者其他相关关键词,找到更多的免费和付费资源。\n\n请注意,在使用免费或付费资源时,务必遵循相关许可协议和版权规定。有些资源可能需要你在商业项目中使用时付费或注明来源。另外,选择适合你项目需求的高质量贴图是非常重要的,这将有助于提升你项目的视觉效果和真实感。\nstb_image库踩坑加载stb_image库时,宏声明应在头文件之前,否则会找不到函数:\n#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"\n\n摄像机位置添加空格上升镜头位置,ctrl降低镜头位置:\nvoid ProcessKeyboard(Camera_Movement direction, float deltaTime){ float velocity = MovementSpeed * deltaTime; // 设定速度 // 根据方向调整方向向量 if (direction == FORWARD) Position += Front * velocity; if (direction == BACKWARD) Position -= Front * velocity; if (direction == LEFT) Position -= Right * velocity; if (direction == RIGHT) Position += Right * velocity; if (direction == UP) Position.y += velocity; if (direction == DOWN) Position.y -= velocity; // Position.y = 0.0f; // 确保不会偏离xz平面}\n\n模型加载库\n\n和材质和网格(Mesh)一样,所有的场景/模型数据都包含在Scene对象中。Scene对象也包含了场景根节点的引用。\n场景的Root node(根节点)可能包含子节点(和其它的节点一样),它会有一系列指向场景对象中mMeshes数组中储存的网格数据的索引。Scene下的mMeshes数组储存了真正的Mesh对象,节点中的mMeshes数组保存的只是场景中网格数组的索引。\n一个Mesh对象本身包含了渲染所需要的所有相关数据,像是顶点位置、法向量、纹理坐标、面(Face)和物体的材质。\n一个网格包含了多个面。Face代表的是物体的渲染图元(Primitive)(三角形、方形、点)。一个面包含了组成图元的顶点的索引。由于顶点和索引是分开的,使用一个索引缓冲来渲染是非常简单的(见[你好,三角形](https://learnopengl-cn.github.io/01 Getting started/04 Hello Triangle/))。\n最后,一个网格也包含了一个Material对象,它包含了一些函数能让我们获取物体的材质属性,比如说颜色和纹理贴图(比如漫反射和镜面光贴图)。\n\n\n所谓网格,就是渲染物体的最小单位\n\n通过使用Assimp,我们可以加载不同的模型到程序中,但是载入后它们都被储存为Assimp的数据结构。我们最终仍要将这些数据转换为OpenGL能够理解的格式,这样才能渲染这个物体。\nGLFW处理多个键同时输入设置摄像机更快速的移动shift+w/s/a/d:\n// Fasterif (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS) camera.ProcessKeyboard(FASTER_FORWARD, deltaTime);if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS) camera.ProcessKeyboard(FASTER_BACKWARD, deltaTime);if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS) camera.ProcessKeyboard(FASTER_LEFT, deltaTime);if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS) camera.ProcessKeyboard(FASTER_RIGHT, deltaTime);\n\n着色器类中的异常捕捉// ensure ifstream objects can throw exceptions:vShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);fShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);try { // open files vShaderFile.open(vertexPath); fShaderFile.open(fragmentPath); std::stringstream vShaderStream, fShaderStream; // read file's buffer contents into streams vShaderStream << vShaderFile.rdbuf(); fShaderStream << fShaderFile.rdbuf(); // close file handlers vShaderFile.close(); fShaderFile.close(); // convert stream into string vertexCode = vShaderStream.str(); fragmentCode = fShaderStream.str();} catch (std::ifstream::failure &e) { std::cout << "ERROR::SHADER::FILE_NOT_SUCCESSFULLY_READ: " << e.what() << std::endl;}\n\n深入理解顶点着色器和片段着色器在OpenGL核心模式的渲染中,这两个着色器是不能跳过的着色器,必须手动编写。\n抗锯齿超采样抗锯齿(Super Sample Anti-aliasing, SSAA):它会使用比正常分辨率更高的分辨率(即超采样)来渲染场景,当图像输出在帧缓冲中更新时,分辨率会被下采样(Downsample)至正常的分辨率。这些额外的分辨率会被用来防止锯齿边缘的产生。虽然它确实能够解决走样的问题,但是由于这样比平时要绘制更多的片段,它也会带来很大的性能开销。所以这项技术只拥有了短暂的辉煌。\n多重采样抗锯齿(Multisample Anti-aliasing, MSAA):它借鉴了SSAA背后的理念,但却以更加高效的方式实现了抗锯齿。渲染图元时,不只使用像素中心点作为采样点,而是将一个像素分成多个子采样点(这也是为什么叫做多重采样的原因)。每个像素片段着色器只运行一次,其所使用的顶点数据会插值到每个像素中心,结果储存在每个被覆盖的子采样点中,每个像素内部会将采样点的颜色平均化。\n在OpenGL中使用MSAA,可以通过Hint的方式,在创建窗口前调用:\nglfwWindowHint(GLFW_SAMPLES, 4);glEnable(GL_MULTISAMPLE); // 保险起见,启用一下多重采样(多数情况时默认启用的)\n\n现在再调用glfwCreateWindow创建渲染窗口时,每个屏幕坐标就会使用一个包含4个子采样点的颜色缓冲了。GLFW会自动创建一个每像素4个子采样点的深度和样本缓冲。这也意味着所有缓冲的大小都增长了4倍。\nImGui为了方便的查看场景,将鼠标禁用,使用光标回调函数来控制摄像机镜头的方向,所以使用imgui时不能使用鼠标拖动控件,如下:\n\n因此要设置一个快捷键来唤出光标,捕捉并禁用光标的代码是在创建窗口后:\nglfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);\n\n而实现快捷时有一个问题,实现摄像机在场景中移动是在渲染循环中使用processInput(window)函数,获取键盘输入来控制,这样可以实现一次按下连续控制,这也正是问题所在,如果直接在此函数中设置快捷键,按下一次会在每次渲染循环中都调用一次,表现为光标一直闪烁(因为一直在重复 获取光标、隐藏光标、获取光标…)。\n解决方法是定义键盘回调函数,将切换光标的代码放到回调函数中,这样按一次键盘释放之前不会重复调用。\nbool show_mouse = false; // global variable// Key callback functionvoid key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) { if (glfwGetKey(window, GLFW_KEY_LEFT_ALT) == GLFW_PRESS && glfwGetKey(window, GLFW_KEY_C) == GLFW_PRESS) { if (show_mouse) { show_mouse = false; } else { show_mouse = true; } // 捕捉鼠标,并隐藏光标 if (!show_mouse) glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); else glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); }}// Don't forget registering it after creating the window// in main functionglfwSetKeyCallback(window, key_callback);\n\n初始化在渲染循环之外:\n// Init Dear Imguiconst char* glsl_version = "#version 330";IMGUI_CHECKVERSION();ImGui::CreateContext();ImGuiIO& io = ImGui::GetIO(); (void)io;ImGui::StyleColorsDark();ImGui_ImplGlfw_InitForOpenGL(window, true);ImGui_ImplOpenGL3_Init(glsl_version);\n\n使用在渲染循环内:\nImGui_ImplOpenGL3_NewFrame();ImGui_ImplGlfw_NewFrame();ImGui::NewFrame();{ // setup ImGui::Begin("Cube and Lighting"); \t// ... ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); // Frame rate ImGui::End();}ImGui::Render();ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());\n\n同一行放置多个控件ImGui::SameLine();\n\n可实现此语句前后的两个控件不换行。\n控件例子ImGui::Begin("Cube and Lighting"); // Create a window called "Cube and Lighting" and append into it.ImGui::Text("Here can be adjust some params of the sence."); // Display some text (you can use a format strings too)ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close stateImGui::SliderFloat("ambientStrength", &ambientStrength, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0fImGui::SliderFloat("specularStrength", &specularStrength, 0.0f, 1.0f);ImGui::ColorEdit3("Cube color", (float*)&objectColor); // Edit 3 floats representing a colorImGui::Text("Cube color = %f, %f, %f", objectColor.x, objectColor.y, objectColor.z); if (ImGui::Button("Button")) counter++;// Buttons return true when clicked (most widgets return true when edited/activated)ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);ImGui::End();\n\n","categories":["递归这个世界 · 编程","框架"],"tags":["CPP","Graphic","Computer"]},{"title":"OpenGL-4 阴影","url":"/2023/08/23/note/Framework/OpenGL/opengl_shadow/","content":"阴影映射(Shadow Mapping):以光的位置为视角进行渲染,能看到的东西都将被点亮,看不见的一定是在阴影之中。\n\n\n阴影映射深度测试教程中,在深度缓冲里的一个值是摄像机视角下,对应于一个片段的一个0到1之间的深度值。从光源的透视图来渲染场景,并把深度值的结果储存到纹理中,储存在纹理中的所有这些深度值,叫做深度贴图(depth map)或阴影贴图。\n第一步我们需要生成一张深度贴图(Depth Map)。深度贴图是从光的透视图里渲染的深度纹理,用它计算阴影。因为我们需要将场景的渲染结果储存到一个纹理中,我们将再次需要帧缓冲。\n创建Shadow Mapping首先为渲染的深度贴图创建一个帧缓冲对象:\nGLuint depthMapFBO;glGenFramebuffers(1, &depthMapFBO);\n\n然后,创建一个2D纹理,提供给帧缓冲的深度缓冲使用:\nconst GLuint SHADOW_WIDTH = 1024, SHADOW_HEIGHT = 1024;GLuint depthMap;glGenTextures(1, &depthMap);glBindTexture(GL_TEXTURE_2D, depthMap);glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, SHADOW_WIDTH, SHADOW_HEIGHT, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);\n\n生成深度贴图不太复杂。因为我们只关心深度值,我们要把纹理格式指定为GL_DEPTH_COMPONENT。我们还要把纹理的高宽设置为1024,这是深度贴图的分辨率。\n把我们把生成的深度纹理作为帧缓冲的深度缓冲:\nglBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO);glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthMap, 0);glDrawBuffer(GL_NONE);glReadBuffer(GL_NONE);glBindFramebuffer(GL_FRAMEBUFFER, 0);\n\n我们需要的只是在从光的透视图下渲染场景的时候深度信息,所以颜色缓冲没有用。然而,不包含颜色缓冲的帧缓冲对象是不完整的,所以我们需要显式告诉OpenGL我们不适用任何颜色数据进行渲染。我们通过将调用glDrawBuffer和glReadBuffer把读和绘制缓冲设置为GL_NONE来做这件事。\n合理配置将深度值渲染到纹理的帧缓冲后,我们就可以开始第一步了:生成深度贴图。两个步骤的完整的渲染阶段,看起来有点像这样:\n// 1. 首选渲染深度贴图glViewport(0, 0, SHADOW_WIDTH, SHADOW_HEIGHT);glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO);glClear(GL_DEPTH_BUFFER_BIT);ConfigureShaderAndMatrices();RenderScene();glBindFramebuffer(GL_FRAMEBUFFER, 0);// 2. 像往常一样渲染场景,但这次使用深度贴图glViewport(0, 0, SCR_WIDTH, SCR_HEIGHT);glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);ConfigureShaderAndMatrices();glBindTexture(GL_TEXTURE_2D, depthMap);RenderScene();\n\n这段代码隐去了一些细节,但它表达了阴影映射的基本思路。这里一定要记得调用glViewport。因为阴影贴图经常和我们原来渲染的场景(通常是窗口分辨率)有着不同的分辨率,我们需要改变视口(viewport)的参数以适应阴影贴图的尺寸。如果我们忘了更新视口参数,最后的深度贴图要么太小要么就不完整。\n","categories":["递归这个世界 · 编程","框架"],"tags":["CPP","Graphic","Computer"]},{"title":"nginx 安装 SSL 证书","url":"/2023/05/25/note/Linux/Server/SSL/","content":"给服务器安装SLL证书以支持HTTPS。\n\n\n下载证书请在 SSL 证书管理控制台中下载您需要安装的证书\n\ncloud. tencent. com_bundle. crt 证书文件\ncloud. tencent. com_bundle. pem 证书文件(可忽略该文件)\ncloud. tencent. com. key 私钥文件\ncloud. tencent. com. csr CSR 文件\n\nnginx 配置查看 nginx 是否安装:\nnginx -vsudo apt install nginx\n\n查看 nginx 的配置文件:\nsudo nginx -t# 显示为nginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful\n\n编辑配置文件:\nsudo vim /etc/nginx/nginx.conf\n\n在 http 中添加:\nserver { #SSL 默认访问端口号为 443 listen 443 ssl; #请填写绑定证书的域名 server_name www.dionysen.top; #请填写证书文件的相对路径或绝对路径 ssl_certificate /home/dionysen/.config/www.dionysen.top_nginx/www.dionysen.top_bundle.crt; #请填写私钥文件的相对路径或绝对路径 ssl_certificate_key /home/dionysen/.config/www.dionysen.top_nginx/www.dionysen.top.key; ssl_session_timeout 5m; #请按照以下协议配置 ssl_protocols TLSv1.2 TLSv1.3; #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。 #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。 root html; index index.html index.htm; } }server { listen 80; #请填写绑定证书的域名 server_name www.dionysen.top; #把http的域名请求转成https return 301 https://$host$request_uri;}\n\n测试和重新载入测试配置文件有效性:\nsudo nginx -t\n\n重新载入:\nsudo nginx -s reload\n","categories":["经验与技巧与踩坑 · 杂项","Linux"],"tags":["SSL","Nginx"]},{"title":"Code-Server 配置 CPP 开发环境","url":"/2023/05/25/note/Linux/Server/code_server/","content":"\n\n\nDeploy once,Code anywhere!\n\n几乎任何浏览器都可以直接得到与VScode相近的编码体验。\n\n\n安装按照官方文档安装:Install - code-server Docs (coder.com)\n配置开启 https下载 SSL 证书,解压到一个地方在 .config/code-server/config.yaml 中加入:\ncert: /path/to/*.crtcert-key: /path/to/*.key\n\n使用systemd重启服务即可\n修改字体\n目前最新版 code-server 不能用,实测 v4.7.1 可以\n\n目前只能通过加入web-font的方式修改:\ngit clone https://github.com/tuanpham-dev/code-server-font-patch.gitcd code-server-font-patch# Run this command (change path-to-code-server to your code-server path, leave it empty if you install code-server from installer or code-server is in /usr/lib/code-server):sudo ./patch.sh [path-to-code-server]\n\nYou may need to set font family in code-server settings:\n"editor.fontFamily": "'Fira Code', Consolas, 'Courier New', monospace","terminal.integrated.fontFamily": "'Fira Code', Consolas, 'Courier New', monospace",\n\nInstall Packages\n\n\nPackage\nFunction\n\n\n\nclang\nCompile\n\n\nclangd\nLanguage support\n\n\nclang-format\nFormat the code\n\n\nlldb\nDebug\n\n\ncmake\nQuick configure project\n\n\nInstall PluginsSearch the plugins, CodeLLDB and clangd.\nConfig the CMake and ClangdUsing plugin cmake toolOpen a WSL2 distro and get into a folder, input code . and press enter.Vscode will be started. There is empty in the folder.Press ctrl+shift+p and input cmake: quick start, select the CMake: Quick Start.Choice the clang variant.Input the name of you project.A hello world program will be auto-created.Now, you can build and run your project.\nUsing little tool pm个人开发的极不成熟的小工具,用以快速管理小型c++工程。\n请查看Project Manager。\nConfig debugAdd a launch.json in the workfolder, and add configuration lldb.Modify the program.\n{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "lldb", "request": "launch", "name": "Debug", "program": "${workspaceFolder}/build/</*Your project name/>", "args": [], "cwd": "${workspaceFolder}" } ]}\n\nMultiFoldersAdd the include_directories(./Sources) to CMakeLists.txt .\nset(CMAKE_EXPORT_COMPILE_COMMANDS ON)include_directories(Includes)include_directories(Sources)......\n\nor cd ${PROJ_DIR}/build then run command cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 in terminal.\nClang-format编辑 .clang-format 文件\nIndentWidth: 4# Mind the blank place is a tab\n\nSetting.json (personal backup)这是我个人的设置备份,请不要直接复制使用,最好查明每一项作用再使用。\n{ "files.autoSave": "onFocusChange", "editor.links": false, "editor.guides.indentation": false, "editor.fontFamily": "'Fira Code'", "editor.fontWeight": 400, "terminal.integrated.fontFamily": "'Fira Code'", "editor.fontSize": 13, "terminal.integrated.fontSize": 13, "editor.lineHeight": 1.5, // "vscode-neovim.neovimInitVimPaths.linux": "~/.config/nvim/init.lua", "editor.inlayHints.enabled": "off", "git.enabled": false, "markdown-preview-enhanced.codeBlockTheme": "github.css", "markdown.preview.breaks": true, "markdown.extension.tableFormatter.enabled": true, "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.fixAll.markdownlint": true }, "cmake.autoSelectActiveFolder": false, "cmake.configureOnEdit": false, "editor.lineNumbers": "on", "workbench.editor.showTabs": true, "editor.minimap.autohide": true, "editor.minimap.enabled": false, "terminal.integrated.copyOnSelection": true, "terminal.integrated.cursorBlinking": true, "cmake.ignoreCMakeListsMissing": true, "vim.vimrc.path": "$HOME/backup/.vimrc", "vim.vimrc.enable": true, "extensions.webWorker": false, "vim.useCtrlKeys": false, "vim.enableNeovim": true, "vim.neovimConfigPath": "~/backup/init.vim",}\n\nTermux\n{ "editor.fontFamily": "'Fira Code'", "terminal.integrated.fontFamily": "Fira Code", "markdown.preview.breaks": true, "editor.minimap.autohide": true, "markdown.styles": [ "/data/data/com.termux/files/home/storage/documents/note/notes/.vscode/markdown-styles/ia_typora_night.css" ], "editor.wordWrap": "on",}\n\nIssuesFont size in console of Script run (vscode plugin)Add to stylesheet:\n.script-view .line { font-size: 17px; }\n\nCMake tools 在插件商店找不到Ctrl+p 输入命令:\next install ms-vscode.cmake-tools\n\nCodelldb配置插件安装遇到问题,如下载失败,请看VS code 安装插件 lldb 调试 CPP 程序。\nInstall codelldb and create a launch.json :\n{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "lldb", "request": "launch", "name": "Debug", "program": "${workspaceFolder}/myvector/build/myvector", "args": [], "cwd": "${workspaceFolder}/myvector", } ]}\n\n\nIf breakpoint doesn’t work, use cmake build a debug target.\n\nUse shell:\ncmake .. -DCMAKE_BUILD_TYPE=Debugcmake --build . --config Debug\n\nOr add to CMakeLists.txt :\nset(CMAKE_BUILD_TYPE Debug)\n\n","categories":["经验与技巧与踩坑 · 杂项","Linux"],"tags":["CPP","Linux","CMake","Clangd"]},{"title":"Ftp","url":"/2023/05/25/note/Linux/shell_command/FTP/","content":"\nFile Transfer Protocol client.\n\n\n\n\n\n\nOption\nImplication\n\n\n\n-4\ncontact IPv4 hosts\n\n\n-6\ncontact IPv6 hosts\n\n\n-A\nenable active mode transfer\n\n\n-d\nenbale debugging outpout\n\n\n-e\ndisble command line editing\n\n\n-g\nturn off file name globbing\n\n\n-i\ndo not prompt during multiple file\n\n\n-n\ndo not automatically login to the remote system\n\n\n","categories":["经验与技巧与踩坑 · 杂项","Linux"],"tags":["Protocol","Linux"]},{"title":"SCP protocol","url":"/2023/05/25/note/Linux/shell_command/SCP/","content":"scp copies files between hosts on a network.\n\n\nscpIt uses ssh for data transfer, and uses the same authentication and provides the same security as a login session.\nscp will ask for passwords or passphrases if they are needed for authentication.\nThe source and target may be specified as a local pathname, a remote host with optional path in the form [user@]host:[path], or a URI in the form scp://[user@]host[:port][/path].\n\nLocal file names can be made explicit using absolute or relative pathnames to avoid scp treating file names containing ‘:‘ as host speacifiers.\n\nWhen copying between two remote hosts, if the URI format is used, a port cannot be specified on the target if the -R option is used.\n\n\n\nOptions\nImplication\n\n\n\n-3\nCopies between two remote hosts are transferred through the local host. Without this option the data is copied directly between the two remote hosts.\n\n\n-4\nForces scp to use IPv4 addresses only\n\n\n-6\nForces scp to use IPv6 addresses only\n\n\n-A\nAllows forwarding of ssh-agent(1) to the remote system. The default is not to forward an authentication agent.\n\n\n-C\nCompression enable\n\n\n-l\nLimits the used bandwidth, specified in Kbit/s\n\n\n","categories":["经验与技巧与踩坑 · 杂项","Linux"],"tags":["SCP","SSH"]},{"title":"借个火","url":"/2020/05/10/note/Literature/%E5%B0%8F%E8%AF%B4/%E5%80%9F%E4%B8%AA%E7%81%AB/","content":"碟子洗完之前,我习惯性地抬头向窗外望去。\n还有两个池子的餐具要刷,我却已经神游在想象中的世界里了。\n餐厅的老板,是一个中规中矩的英国人,门面装饰得毫无新意。小巧的门厅,拥挤的桌凳,使得来吃饭的人是不多的。多的,是把小餐厅当作咖啡馆的学生。聊天,抑或聚会,狭促而封闭的空间,总能给人安全感。当然,最重要的,是价廉。\n作为为数不多的,独自漂到英国生活的年轻人,所面临的困境暂且不谈。这样的店,这样的老板,已是我幸中之幸。\n\n\n三个星期,我经手了大多数人一辈子都无法企及的餐具数量。像祛雀斑一样,每刷完一个盘子,我都会感到洁净带来的清爽。\n——而刷完一整池的盘子,我则会感到难以抑制的反胃。\n排气扇的旁边,有一个窗口,与国内不同,没有防盗栅。我能清晰地看到对面的那个墓园。每到这个时候,我便隔着窗子,看墓园中的那个人。\n二十天了,每天这个时候,他都会出现在那儿。林立的墓碑之中,青色的鲜草还没爬满地面,零落的石块儿伛偻着,生机与死气交融。背对着我,只能看到他穿着褐色的长衣,头上是一顶略显破旧的礼帽,佛像一般立在一面墓碑旁边。\n像极了十七世纪英国的绅士,古典而庄严。\n如果不是在某一天,一个女人的倩影代替了他,我真怀疑他就是个雕塑。\n他是谁?为什么每天都要来这块墓碑前?地下埋葬的,是他的什么?他何以每日都前去探望?那个女人,又是谁?\n刷碟子的心思被冲进了下水道。\n他的背影,在这样的一个墓碑前,一定能说明什么。\n单看站姿,与石碑比,左肩高出一厘,脖颈稍往前倾,理应是常年伏案写字落下的暗疾。想必他一定是个学者。古老的思想家,总喜欢在同一个地方发呆(岂能是真的发呆)。\n希腊神话,荷马史诗,圣经,甚至是中国的诗也懂会一些。\n“见过那身披芰荷衣着芙蓉的草人儿吗?”\n他不笑,点头。\n我:“魏晋风骨怎么样?”\n“最迷人的姿态。”他会清晰且流利的汉语。\n“像是一个人?”\n“不像一个人。”\n“曹孟德曾这么说过。”\n“从这里爬出来说的?”他指了指墓碑,笑了。我不知哪里幽默。\n“陶渊明也是掀开帘子的时候,才发现天已经黑了。”\n“因而,视天下英雄不见?”\n“虽不见,天下英雄皆知。”\n“恕我直言……”\n我等着,却没有后话。\n“这样的蔑视。”我说。\n“认真地犯错,像极了妙曼的粪便。”\n“粗俗,换一个词?”\n“妙曼的屎。”\n“好极了!”\n“不被理解的,需要被理解;被理解的,需要被赞美;被赞美的,飘飘然。”\n我不免脱口问出已好奇多时的问题:“这墓?”\n“我早就知道丛林中蛰伏着许多毒兽,因此我变成飞鸟,从蓝色的天空飞过,一点也不在意造物者的失误。”\n我望向墓碑,他在念墓志铭。我等他说下去,却是长久的沉默。\n不得不说点什么,空气看上去什么都没有,但还是有的。我又道,“那日,有个女人来过。”\n“哦。”\n一定是与他有着难言经历的奇女子。——越是难言,越是好奇。\n“她是您的妻子?或曾经的妻子?”虽然我知道一定不是。\n“她也许只与这个墓有关吧。”\n“让我猜猜看?”\n“如若您认识她的话。”\n我耸耸肩,“只从墓志铭看,下面这人至少五十岁。”\n“1927 到 1989,墓碑上写了的。”\n我也并不在意,“从您的形貌看,您也至少五十岁。那女人,大概三十岁左右。”\n“如何?”\n“不是情敌,便是兄弟。”\n“如果这样,那很荣幸。”\n我诧异地看了他一眼,“我记得,那女人来时,带的是白菊花。”\n“死亡也这么潇洒?”\n“是呀,一说潇洒,我便想到菊花。”\n“镜子里全是镜子,光都不见了。”\n“色不是空,空不是色。”我默认了,“这个墓志铭是您写的?”\n“十八世纪写的。”\n“那您是怎么出来的呢?还是说眼前的您,是个幽灵?”我一点也不怯,是他怕了。\n他身体一晃,化作碎片,消散在空中。\n在这样的墓园,这样稚嫩的青草中,两个相差两百岁的人,说了一堆乱七八糟的话。我自嘲地笑,我真应该去米高梅电影公司写剧本。\n洗碗池的水溢出来了。\n我又朝窗外望了望,那人还在。——这周的休假,我要去会会他。\n已经决定了!\n我已想好见了面如何开口,而后谈及文学抑或历史,滔滔不绝。不在乎年龄,只觉相见恨晚。希望他不是老年后的我。当然,如果是老而健壮的博尔赫斯,就不胜荣幸。\n我早就盼望有这样的谈话了。\n礼拜六,阳光正好。\n墓园矮墙结垢着白垩,两三个人提着东西行走,钉板一样的墓碑立在道路两侧的空地上。我向里走,寻找着那个人。\n在面对那家餐厅的地方,我看到了他。像从前每一次见他时一样,他仍站立在一面墓碑前——也许是站着——一个长凳挡住了视线。\n我走到跟前,终于看清了这个人的面貌,深陷的眼窝微眯着,穿着一件似乎永不换洗的长衣,倚在长凳的靠背上。满脸杂乱的胡茬让我想起老家的猫。同时我也看到了在餐厅的后厨看不到的死角里,有一个手推式的垃圾车。\n而他的右手,支着一根扫帚。\n察觉到我的靠近,他看了看我,疑问的目光,在等着我说什么。\n我终于清醒过来,掏出一支香烟:“Lighter please?”\n","categories":["不言不载唯此玩心 · 文学","小说"],"tags":["小说"]},{"title":"管","url":"/2020/04/25/note/Literature/%E5%B0%8F%E8%AF%B4/%E7%AE%A1/","content":"下午五点二十分,秋雨总这个时候来。\n天灰蒙蒙的,抬头看不见雨滴,只觉往下砸。\n我也总这个时候来。\n从单位出来,买饭,步行到这,刚好二十分钟。\n我从来没有看天气预报或未雨绸缪的习惯。每天雨与我一同到来,我也从未撑过伞。在路上淋了些,推开病房的门,一股冷湿气冲到屋里。\n\n\n若是从前,母亲见我这般模样,绝对免不了一阵责怪与怨忧。但是现在,躺在床上,全身插着各种管子的母亲,说话都是奢望。\n已经管不了那么多了。\n像民不聊生的乱世,大事临头。\n因而来时放着雨伞不拿——已经管不了那么多了。\n总觉得刚才还好好的,那么能干的母亲,怎么就突然倒下了呢?刚才是什么时候?记不清,但一定不远。\n突然就这样了。\n早些年看电视,有人家里老人生病了,不能自理。兄弟几个赖着不管,你推我推。等到老人终于离世了,都松了口气,任务完成了似的。转眼,又要忙活——老人留了些东西,老房子,老三轮车。这回没人躲了,反而饿狼般的,争抢。\n我叹息,怎么会有这等人。\n妻子则不屑,“事情没到你头上,你当然站着说话不腰疼。就怕到时候,你比他们都抢得厉害!”\n事情果真到了我的头上……母亲被查出了胃癌。晚期。\n自入院一来,往日里能独自撑起一个家的健壮的母亲,一下倾塌了。躺在床上,像个婴儿一样蜷缩着,无法进食,无法控制排便,生活的一切都需要人照顾。\n妻子的话只是玩笑。父亲死的早,我家也就我一个独生子。赡养母亲只能靠我自己。跟领导请假,领导只愿意批我三天。妻子有空闲时间,所以白天有劳妻子照顾,晚上换我来。\n刺鼻的药味,暖气味,尿腥味在病房里绞成一团。我在令人作呕的气味中迅速吃了晚饭,便让妻子回家休息。\n病房的门忽然被推开,一个戴眼镜的医生拿着一摞纸,叫了我的名字。\n我意外,应了一声。\n医生把我叫了出去。\n“患者的情况还不太明朗,但下个星期我给她安排了一个手术,如果手术成功,好转的可能性还是很大的。”\n“手术费多少钱?”我几乎是脱口而出。\n“四五万吧。”医生连看都没看我一眼,低头整理案上的文件。\n我又问:“手术成功的话,我母亲还能活多久?”\n——母亲住院的这几个星期,亲眼目睹,母亲的变化,邻床的哭嚎,我已深知癌症的可怕。\n他终于把目光移到了我的脸上。\n我立刻谴责自己说错了话。\n做这样的医生,想必早已见遍了各式各样患者,家属。他眼中,淡然,鄙视,怜悯。他一定是以为我是那种人——时刻算着老太太什么时候死掉,好省钱,省掉辛苦肮脏的操劳。他一定以为我这么着急地询问,是在盘算性价比。\n这个性,是性命。\n怎么会?\n我想解释,但不知如何开口。\n大概这样窘迫的样子,更让他确定了自己的判断?\n我坚定了语气,抢过他的回答道:“带我去办手续吧!”\n回到病房,妻子还没走。\n我简述了情况。\n妻子脸色凝重,“咱们还有存款吗?”\n我摇摇头。\n“那还能找谁借呢?”\n我摇摇头。\n“那就把那破房子卖了吧!”\n我终于意识到妻子的语气不太对。我以为妻子愿意与我同舟共济,即使卖掉房子,露宿街头也不在乎。可她的语气,明明是反话。\n但我又怎么能怪别人呢?\n这一切不都是因为自己的无能?\n结婚时我岂没有发誓,要给她一个温暖的家,要做一个好丈夫?\n年轻时游手好闲,一事无成,现在能在县里林业局当个小科员,已经算谢天谢地了。工作是轻松,但一个月两千多的固定工资连她自己都不够花,何况是我们?是的,她只知道花钱,从没想过自己能不能出去挣点儿。\n母亲生病的第一周,我们拿出了全部的积蓄,却只够一半的手术费。瞒着母亲东借西借,才勉强凑够。之后每天都要出钱,却没有收入。我们哪来钱给母亲治病呢?\n她倒提醒我了,老房子可以卖了,先租房子住,说不定能租个离单位很近的,更方便些。\n这当然是下策。\n但束手无策的时候,下策也即上策。\n我不想说话,去楼道抽烟。她却不依不饶,跟了过来。\n“你说啊?去哪儿弄钱?”\n我沉默。抽烟。她竟哭起来了。\n“当初嫁过来的时候,我家里人都不同意,嫌你混,嫌你家落魄。但我就是被你的花言巧语给骗了,说什么有上升空间,过几年就能发达,一定让我过上好日子……”\n她竟诉起苦来!\n当时?当时是什么时候?\n我也想过上好日子,但哪是说过就过的?钱哪是说挣就挣的?这几年我虽没有飞黄腾达,但也是兢兢业业,埋头苦干了几年。钱在她手里根本存不住,我还能做什么?\n母亲第一次做手术用的钱,其实是我们说好去度假旅游用的。毕竟也该有个孩子了。\n但如今快要食不果腹,还是省省的好。\n“嫁到你家这几年,你有什么长进!不仅没让我们过得好,还天天让我在这给老太婆端屎端尿……”\n她说得愈加起劲。\n我听得越加愠怒,尤其是她说我没长进。男人最怕的就是内人折自己的面子。\n“你不想过就不过,我又没逼着你!”\n不欢而散是必然,但我们年岁都不小,不像年轻人意气用事。钱不是说挣就挣,分也不是说分就分。名声上,谁也受不住。何况在这个节骨眼儿上。\n没有钱。仅有这点可怜的尊严。\n只是至此,我们一旦开口交流,几乎立刻就吵起来。在家吵,在路上吵,甚至在病房里也忍不住要拌起嘴来。\n无非是钱嘛。\n就是钱呀!\n还有两天就要手术,医生已经给我宽限,否则我缴上钱也无用。但我缴不上钱,手术一定做不了。难道真到了要倾家荡产的地步?\n我从不曾像现在一样急得焦头烂额,白天上班,晚上照顾母亲,又要四处赖着脸借钱,时而还要跟妻子拌嘴。\n我已然精疲力尽。\n窗外是迷离的小城夜景,秋月银色的光华涌着灰尘落进来,细看,与小时候一模一样。那时我尤喜欢在夏夜躺在院子里的凉席上,母亲摇着蒲扇赶蚊子,我缠着母亲讲故事。那是古老的,深沉的,又是骗小孩儿的野故事,没有出处,不知如何流传,甚至故事中的意象也懵懂,支离破碎,但那曾是我童年最着迷的梦。\n以至后来的我迷迷糊糊过了二十多年,记忆变得朦胧而遥远,我也始终没忘记这夏夜的故事。\n现在呢,真去想,倒想不起来了。\n似乎忘了……\n果真忘了。\n忘。\n我迷糊着睡去了。\n翌日醒来时,天还未亮。是值班护士把我叫起来的。从病房涌进来几个护士和那个医生。医生让我出去。\n没有等多久医生就出来了。\n“你母亲昨夜凌晨一点左右去世了,请节哀……”\n是因为冷漠,还是因为见惯了死亡,他脸上一点悲伤或惋惜都没有,像个面无表情的石像。\n我也一样,只是不知所措,还没从睡梦中醒来似的,癔症着回味?\n我拉住医生,声音很轻,“为什么?不是很有希望好转吗?”\n医生看了我一眼,怕刺激到我,轻轻地拿开了我的手,“请节哀。”然后逃一般溜走。我这才看见,他终于动容。\n第二天,戴眼镜的医生才告诉我他的猜测是对的,已用监控确认了的。\n……\n是夜,我因为难过,一个人出去散步。公园湖边,寂寥无人,渐黄的树叶在风中无知地摇摆。\n我明白那个医生为何那样看我,却不明白在凌晨一点的夜,母亲是如何用业已枯萎的手拔下自己身上的管子,而不发出声音的。\n或许是我睡得太沉了?\n我终于失声恸哭起来。\n","categories":["不言不载唯此玩心 · 文学","小说"],"tags":["小说"]},{"title":"蒜苔儿","url":"/2020/02/16/note/Literature/%E5%B0%8F%E8%AF%B4/%E8%92%9C%E8%8B%94%E5%84%BF/","content":"看到院里参差不齐的菜苗,二妮突然想吃蒜苔儿了。\n\n\n但二妮知道自己吃不了,因为二妮自己不会腌蒜苔儿。二妮只喜欢吃腌的蒜苔儿,而且最好是娘腌的蒜苔儿。淡青色,抓一把,切成节儿,往坛子里一放,添上醋和盐。等腌好了,醋就在蒜苔儿上蒙了一层陈旧的涅色,而蒜苔儿也把醋香染得辣辣的。一咬,生脆,满口的清酸。\n二妮擦了擦口水。吃蒜苔儿得等娘回来腌,但二妮不知道娘什么时候回来。\n数起来,快半个月了——是爹说的,二妮不知道什么半的月的,只是感觉已经很久没见到娘了。娘走时,是一个夜里,二妮正睡着,被爹娘的动静扰醒了。但二妮只是迷迷糊糊,似乎看到爹娘起床,穿上衣服,悄悄地出了门。二妮知道娘还怀着孕,扛着大肚子,会到哪去呢?二妮想不明白,反正第二天家里就只剩父亲和二妮自己了。\n二妮上小学,三年级。学校在村头,一处破楼,红砖围墙耷拉着,荒草爬满院子。二妮跟伙伴们放学路上玩耍,时常看到瓦房后墙上,白蓝相间的漆刷着:“坚决打击躲生偷生,躲过初一躲不过十五”。别的孩子也许不清楚,会以为是过年时的余兴,但二妮隐隐有些明白。\n那日,天蒙蒙亮,家里门突然咚咚咚的响起来。二妮她爹开了门,还没看清是谁,来人就冲了进来。一下来四个,嚷嚷着,查户口,点人头,要搜全屋。\n娘不在。他们问二妮她娘在哪,二妮她爹说:“走亲戚去了。”\n那些人叫嚣着冲进屋里,“走亲戚去了?那好说……”,一眼看中了堂屋里的电视。虽然是黑白的,但整个村里,这样的电视一只手也能数得过来。四人二话不说,抬起电视就走,撂到来时乘的三轮车上。二妮他爹去拦,但对方人多势大,还叫喊着:“这可是国家政策,你再这样,要罚钱哩。”\n三轮车扬长而去,留下一句话:\n“走亲戚回来,带着嫂子去领。”\n二妮他爹只得骂了几句,准备早饭去了。\n二妮和其他小孩儿玩弹珠,常听到大人们在当街闲聊。\n“正会儿这世道,越来越好了。搁以前,哪家生哩多,弟兄们多,哪家就兴,横得很。现在谁敢生得多,还罚钱哩。”\n“可不是嘛?生那么多干嘛,还养不起。”\n一个端着面条碗,碗里已经没有面条,汤都干在碗上的老妇人,压低声音说:“可别生啦,柱子家的事不知道吗,生了俩,肚里还有一个,人家计划生育的过去先罚钱,又搬走了一个洋车子。”\n“洋车子搬走了,钱没罚吧?”\n“咋没罚?罚好几百哩!”\n“……”\n二妮弹自己的玻璃珠,去撞击别人的,撞到地上的小洞里,就算赢。赢的可以拿走别人的玻璃珠。以前二妮是高手,常赢得男孩子们都不敢跟她玩,家里积攒了一罐子玻璃珠。但今天二妮怎么也赢不了,不是力道太大,就是方向太偏。二妮心烦意乱,早早回家了。\n明天开学,二妮到了学校,没有计划生育的标语,眼是清静了,周围尽是同学,老师,教室里有书本,书上有《春天来了》,窗外有树梢,鸟鸣。但二妮想他娘啊,上堂也学不进去,下课也玩不进去。又不知娘现在是好是歹,二妮受不了了。\n一天,上早自习的路上,二妮趁人不注意,悄悄拐弯儿了。\n二妮要去找她娘。\n——但又不知道去哪找。\n抹黑走着,二妮走到了村东外的田地里。\n天快亮了,太阳还没影儿,湛蓝的天空宝石般透亮,罩下来,明晃晃地映着天杪的云彩,三月里油菜花正欲绽放,绿田葱郁,波涛翻滚。远处,天际落在小房子上,绿杨,白云,向更远处去了。二妮看到这儿,就想起了院里的菜圃;想起菜圃,就想起了蒜苔儿;想起蒜苔儿,就想起了不知所踪的娘亲。\n终于,太阳露出微光,金黄色从天边袭来,天地间猛然添了一丝温暖。但二妮悲凄的心情愈加沉重。二妮想,在学校老师教的语文,有小蝌蚪找妈妈的故事,自己岂不就是那个小蝌蚪?二妮想着,田间无垠的小路似乎变成了一条深壑,周围绿色的田地变成汪洋大海,鱼虾水草在空中飘荡,二妮用力摆动着小尾巴,向太阳升起的方向游着。开始二妮在水里不太适应,暗流激湍,二妮奋力抵抗着无形的力,却难以把持住身形,耳畔像炸了炮仗一样闷,天旋地转。二妮不知如何是好,却也丝毫不急。心中对娘亲的思念倒淡了些。偶有大人们去地里薅草,路过碰到二妮。二妮看到他们灵活地游向自家田地,心中惊奇。二妮发现,他们好像看不到自己。二妮大声喊,却发不出声。\n二妮在水中漂了许久,阳光刺透水面,光影交错,梦幻一样的水下世界让二妮已经忘了此行的目的。渐渐地,二妮游得利索些了。前方忽明忽暗,二妮在朦胧中,看到一个身影。二妮心下一动,会不会是娘亲?全力游向那个身影,二妮想看清那到底是谁。也许娘就在前面等着自己?二妮越想越心动,拨开水浪向前方穿行。\n近了,人影清晰起来。二妮有些失望,那并不是娘亲,而是一个头发花白的老太太,脸上褐斑遍布,枯粗的皮肤往下坠,穿着一件罩住全身的紫黑色的布衣。这老太太,二妮是认识的,是二妮邻居家,狗蛋的老太儿。平时都在家坐在一个竹椅上,二妮去她家玩的时候,常听她说些含糊不清的话。人老了,牙全没了,说话呜呜不清,耳朵也不灵光,但老人很慈祥,二妮也很喜欢她。\n“嘻嘻,老太儿,你怎么在这儿啊?”二妮游上前问道。\n水纹纵横,人影都在晃。老太太看到小丫头,也咧嘴笑了,呜呜道:“我瞅块儿地……”\n二妮听不太清,也听不太懂,游过去给老太儿轻轻揉了揉肩,像平时一样。老太儿问二妮:“你呢,你这闺女怎么跑漫地里来了,不去念书呀?”\n二妮道:“我不想念书,我想找我娘,我娘也不知道去哪了,我爹也不跟我说。”\n老太儿似乎叹了口气,又不真切,历经了近百年的岁月,面孔遍布风霜,什么都看不出来。\n二妮突然感觉一阵骚动,水开始不安起来,接着,巨大的漩涡声势浩大地逼近,远近的游鱼都被卷进去,飞速旋转着。黑暗处散发的神秘气息让二妮有点儿害怕,转眼看老太儿,老太儿好像还没意识到危险已经来临。莫名的力撕扯着,二妮感到身体不受控制,漩涡吸扯着二妮。老太儿却似乎根本不受影响。二妮终于无法支撑,一片混乱中,二妮抓住了老太儿的布衣。狂风般的漩涡席卷而过,二妮闭上眼睛,死死抓住老太儿的粗布衣袖。\n不知过了多久,天地间的昏暗褪了下去,二妮感到实实在在的大地,就在自己的身体下面。睁眼,强烈的光线刺得眼镜生疼。适应了好一会儿,才终于可以看清周遭。日头正当,二妮躺在浮尘飞扬的土路上,杨树新叶筛下的阳光像水波一样粼闪,清风拂面而去,尘粒砸得脸颊膈应。二妮看了看手上,发现自己捏着一块紫黑色的残布。\n回到家中,二妮他爹看到满身泥垢的二妮,劈头盖脸一阵喝骂。\n“这一上午,你跑哪去了?”\n面对爹的问话,二妮只得如实道来,“我去找我娘了。”\n“你去哪找你娘?”二妮他爹语气稍软。\n“我也不知道,也没找着。你又不跟我说我娘去哪了。”二妮不惧,憋着怨气道。\n“那你去哪胡跑了,丢了一上午,弄得浑身泥巴,有没有伤着哪?”\n“没有,我碰见狗蛋他老太儿了。”\n二妮他爹看了二妮一眼,“胡说啥呢,昨天夜里狗蛋他老太儿已经走了,明儿个准备吃桌。”\n“走了?”\n“就是去世了。”\n二妮知道去世了是什么意思,就是把人放到木箱子里,埋起来,以后就再也见不到了。\n“我上午还正跟她说话哩……”\n“傻闺女,你知道啥……走吧,吃饭去,刚腌好的蒜苔儿,你最好吃这个哩。赶紧去洗洗脸,脏得跟猪屁股一样。”\n二妮应了一声,摸摸裤兜,掏出那一块紫黑色残布,发了一会儿呆。吃饭时,二妮匆匆填食,二妮他爹腌的蒜苔儿,二妮一筷子都没有动。\n","categories":["不言不载唯此玩心 · 文学","小说"],"tags":["小说"]},{"title":"逃离计划","url":"/2022/01/29/note/Literature/%E5%B0%8F%E8%AF%B4/%E9%80%83%E7%A6%BB%E8%AE%A1%E5%88%92/","content":"逃离“我”似乎是一个近乎玄妙又完全愚蠢的想法,童年时期我孜孜于此,可即使天地辽阔,四海无涯,我又能逃到哪里?因而当刘淇捧着地图册,兴致勃勃地要带我逃跑时,我变得不知所措。“我们就逃到关外去!听说那里有好多移民,我们去那,谁也不知道我们从哪来!”刘淇满怀希冀看着我说。这是他第一次用这样的目光看我,脸上常有的笑也不见了,取而代之的是一种异常坚毅的,像是壮士英勇赴死前的神色。我有点害怕,不是因为青涩稚嫩的刘淇变得伟岸,而是出于生物本能,像是步入黑暗森林前的踟蹰。眼前的这个少年的确能带给我快乐,让我忘掉在家的烦恼,可两人如果真的闯到异乡,无亲无故,如何生存?若到头来一切成空,值吗?我在此地乐不思蜀已一月有余,对家谎称打工,体验生活,实则与刘淇体验自由的天堂。既然是天堂,何不赌掉自己,跟他走?真走了,还能回来?昨晚例行电话,母亲已下最后通牒,“钱无需你挣,女子在外面我和你爸都不放心,也出去这么久,该回家了,好好把学上完才是正事。”挂掉电话,我抑制自己的心跳,觉得自己真正在掌控自己的人生,“去哪都行,我跟着你。”\n回到熟悉又陌生的家时,门框上去年所贴现已泛黄的对联在风中摇曳,像禁城的封条,我又要开始我的苦役了。从何时起,养育我的温床变成这样一座令人窒息的牢笼?一直迷茫于人生与情爱,多年校园生活,浑浑然只知书本上几页悬在空中的知识,空空幻幻还不如红楼一梦来得真实,只道是小说中的痴男怨女何时能让自己碰到,到那时还不得撕心裂肺,惊天动地?生死算什么,为了爱,一切都是泡影。我已经忘了一个多月前与刘淇因钱的事儿而困苦的情境了。\n高中毕业,成绩不理想,草草选了大学,就急忙往外跑,新世界总是散发着诱人的魔力,正是那个时期我的撒谎本领以惊人的速度增长。独自来到睢宁县城,家人真的以为我有同学在此照应,我以比许多男孩子更勇敢的姿态在此立脚(其实只是找个旅店住下),去寻找人生的第一份工作,而工作没找到,找到了刘淇。\n被拒绝一次,我就失去了信心,转而在街上寻找可供娱乐的场所,初临陌生之地需要烟火气消除惊吓,好在有一家书店,单间门面房,招牌红底白字,“慧源书店”,不用看我就知道这里面必定列满了小到幼稚园,大到高中的各科资料,至于别的估计也没地方可放,这些都还可以原谅,何必取那果汁的牌子呢。聊胜于无,我还是进去碰碰运气,《少年阿衰》,《一帘幽梦》,《多情剑客无情剑》……还好,好坏参半,新旧皆有,里面呢,《卡拉马佐夫兄弟》,《千只鹤》……咦?竟然有《鲁滨逊漂流记》!初中时统一买的必读经典名著里最喜欢这本,常常想象自己与主人公一样流落孤岛,孑然过完一生,若有个白衣少年陪我,更是美哉。忆起那时两三事,没看到按在书上的那只手,瘦长,像极了骷髅。\n后来我又见到那样的手,一双双,多得数不过来,但都没有当时那只手给我的特殊感觉。我使劲回想当时情形,依然模糊,但我无比确信他是因为看到我长得漂亮才站起来观察我拿什么书的。他挡住了外面的光,白衬衫因而不那么白,他看到我呆滞的目光,急忙说:“这本书只有上册,下册还没到货,改天你再来,这……是我的电话。”他递给我一张纸条,脸更黑了,我猜他是脸红,十几万字小说哪个出版社分上下册印?我接过纸条,按流程买了这本漂流记,无话,他不敢看我。\n一个星期后的午后,我领他去我的住处。他说他叫刘淇,他也不知道他父母为什么要给他取像女孩子一样的名字,我笑了,跟他说我叫许亚楠,也不如男,我俩正好。他脸又红了,跟着我小心地走进招待所,全国各地都有这样的招待所,最折人志气,狭小脏乱的空间,不仔细看就会错过的招牌,让人确信家之必不可缺,反衬此时的落魄,但我全然不在乎,甚至根本意识不到这些。他则比我还新奇地问东问西。\n“你家真的在上海?”\n“上海是不是很繁华?”\n我懒得回答,白了他一眼。\n“那你为什么一个人来这?”\n“我是逃出来的。”我决定逗逗他,随手扯了个谎。我把家描摹成一个阴森恐怖的城堡,仆人成群,衣食无忧,但我日渐消瘦,因为家母刻薄,父亲残暴,每天我都要承受肉体与心灵的两重折磨,我期盼着白马王子降临,解救我于火海,然而不仅没有等来王子,反而等来了家人的逼婚,如此种种。看着他着急样子,我心中得意,他未必比我小,但男人都喜欢当英雄,尤其是面对颇有姿色的美女时。他一定在想,如果他早知道该多好,他可以一骑绝尘挽救一个身处火海的可怜少女。而我也渐渐沉缅于自己的故事,天使与恶魔竞相出生,故事宏大得没边,我们畅游在虚无的异世界中,心情激昂,我望着他的眼睛,世界开始变轻,一切消失不见,我浮在空中,像一片羽毛。这是一种我们两人都无法预料的顺理成章,我不知道为什么要闭眼,他也不知道为什么要吻上来。\n刘淇抱住我时,我开始慌了,睁眼看到他的两个大眼珠,赶紧又闭上,我告诉自己,这只是生物本能,想挣脱囚笼就必须克制本能,但下一刻我就无法控制自己,大声叫了出来。我不知道衣服什么时候没了,这毕竟与书中所写有些不同,我完全不知道该干什么,算了,由他去了。他也只知耸动,在我耳边说多么爱我,这一个星期,每次见面,各样细节如数家珍,让人惊叹他的记忆,一片片词语从他嘴中,到我的耳垂,耳蜗,然后从另一侧流出,那是我的大脑不再处理任何事务,直到他射了,所有动作一瞬间全部停下。世界安静得像无人之地,我擦干眼泪,意识到身边还躺着刘淇。他四肢摊开躺着,像一具尸体。我不知道为什么那里不痛,宫廷言情小说中的情节出现在我脑海中,还是想不通,他也没问,只顾喘气。\n轮流洗完澡,他看到床头柜上的那本《鲁滨逊漂流记》,窘样顿显,但仍强装镇定,我吃吃地笑了,第一次主动挽住他的胳膊,细声细语,“你会陪我一辈子吧?我们是彼此最后的人?”我能感受到自己发热的脸。他摸摸我的头,坚定地点头。窗外汽车驶过,窗帘紧闭,他打开电视,调低空调的温度,炎热的夏天也得盖厚厚的被子,紧贴着,是实实在在的安全感。此时是下午四点。\n凌晨两点半,我们起床。街上一个人都没有,找到这家似乎是全城唯一开着的烩面馆,我们相对而坐,看着刘淇给我吹着烫嘴的面条,我又想到了那一点,刘淇与高中同班的那个张子斌真的很像,第一次见面时我就发现了,这点在他兴致较高时尤其显著。一个月后,他的宏大计划在我面前展开时,这样的感觉甚为强烈。丽江,三亚,西藏,北京,大理……我只好挖苦道,“你这不是逃跑,你是度假呢。”他涨红了脸,“你要相信我,我会想办法挣钱,你这些天的‘工资’我也能给你弄来,待时机成熟,我去上海找你,然后一起逃走!就算是度假!”我相信自己已经是天底下最幸福的人了。\n刘淇照例去慧源书店上班,我在床上吃着零食看他带回来的书,听到敲门,出去就看到了父亲与母亲并肩站在门口。不知道他们怎么找到我的,但我用自己都想象不到的速度想好了说辞,告诉他们我已经在一家书店工作一个月,并且拿到了三千块的工资,昨晚电话也说好了,过两天处理完这边的事就会回家,没想到他们会来。一家人释然,然后乘列车回家。家里完全没变,我却翻天覆地,然而回到这里,我又变回与原来一模一样的我。何止是看对联像封条,我看什么都不顺眼,就连平日最可爱的“午觉”(一只橘猫)我都无心戏耍。我心里又担心又期待,担心母亲到头来还是发现我的秘密,期待的是我们的计划还没破灭,我已偷偷告诉刘淇这里的情况,只需在家等候他的到来。尤其让我想不到的是,刘淇竟然真的弄来了四千块钱放到我卡里,我得以让母亲相信我是真的工作了一个月,而不是花着他们给的钱玩乐。此时万事俱备,只欠东风。\n开学日期越来越近,刘淇何时能来,我知急也没用,但短信他也不回,难道要抛弃我了?那他的誓言?一日阳光明媚,清风拂面,我出门购物,电话响了,是他,是刘淇!我接通,按耐不住心中的激动,手在颤抖,轻轻喂了一声,那边传来声音:“你是许亚楠?”是个低沉的男声,不是刘淇!那是谁?我不敢想了,如坠冰窖,浑身冷汗,如今我记不得自己如何结结巴巴地回答他的问题,只是知道当时刘淇在旁边听着,一言不发。我们的逃离计划还没开始就宣告结束,那一刻是我逃跑欲望最强烈的时刻。\n双方家长在一处高档餐厅会面,当面对质,一切水落石出。我体验生活是假,刘淇暑假打工是真,我带着母亲给的生活费来到睢宁县城,吃穿用度根本不够,花的都是刘淇的工资,而我欺骗父母假装打工,工资无处可寻,刘淇把即将开学要用的学费私自扣下四千,让我得以圆谎,准备开学不去上学,而是带我“逃跑”,但零九年新政策生源地贷款开通,刘淇父母决定贷款给孩子上学,原先学费留下应急,事发突然,刘淇眼见瞒不住,只能招了钱的去向。打孩子一顿让其长长记性事小,这四千块钱如何追回事大,于是便找上门来。\n我呆滞着坐在沙发上,也知道自己创了祸,不知该如何面对这一切,刘淇怎么不来,他要是能把我救走就好了,我何尝不知他是自身难保。说来奇怪,此事一了,他完全没了踪迹,他的电话已是空号,但我的电话他一定还记得,为什么不打过来。身后一股浓馥的幽香,是楼下桂园传来的,盖过了窗台上的茉莉,那时还不知道茉莉是不香的,直到年近四十的我重新伺养茉莉时才知道茉莉花原来还是香的,只是刚开花时香气逼人,很快飘散了。但眼前这株已有败坏的迹象,如何争得过一园子桂花?我趴在窗口望下去,楼下车水马龙,行人各有其要事在身,没有人的“要事”只是行走而已,行走只是手段。我发觉这像是一场梦,我情愿把一切都奉献给刘淇,扔掉所有跟他走,不管去哪都愿意,但直到现在我还不知道他在哪里上的学,要去哪上学,他的父母如何,家在何处?荒谬感扑面而来,不可断绝的不只是悲伤。\n不知觉父亲已经在我身后。\n“你想不想上学?”\n“不想!”我是在赌气,但我根本不知道在赌谁的气。\n“那好,学不上了,你三叔介绍了一个孩子,人很好,你去见见。”\n于是我第一次开始了属于自己的逃离计划,这次我逃向的地方是学校,那是我们曾经费尽心机要逃离的地方。我低估了父母的决心,不知他们为什么这么着急把我嫁出去,甚至不惜让我放弃学业。我去见了饶莉莉,她是我从小的朋友,我回来之后就再也没找过我,她同情地看着我,“你真该直接去上大学,本科时间自由,想干什么都可以。”别的再也说不出什么了,就连她也不能陪我吃辣条,一起淋大雨了。但这坚定了我继续读书的决心,三天三夜恍恍惚惚过去,心想,如果爸妈非要我结婚,我就去死。从小泡在道理与规矩中长大,总会对狂放不羁的任性怦然心动,这也是为什么我对自由有着歇斯底里的渴望,父母的妥协让我尝到了甜头。\n大学四年是快乐的,快乐之所以是快乐,也许因为它会过得快吧,从刚入学的怯懦,到最后驾轻就熟,两袖清风,还没反应过来,本科毕业了。我总是这样,事过之后,我才意识到事情的发生。何况张子斌转学再次成为我的同学这事,至今我还没反应过来。\n操场十点半关门,天黑之后关门之前总聚集着一群学生,捧着自以为是的吉他与音响,幻想着自己是游吟诗人舞台歌星,倒不是说对音乐的爱不真诚,也不想想那么多跑步者何以个个都带着耳机。我来散步,吃完晚饭室友卧床看剧,觉得无趣就出来透风。湿咸的夏日,夜风游过探照灯下的操场,人影绰绰,让人直想睡在这不冷不热的夏夜里。讨厌极了弹吉他的男生,不仅是因为他们破坏了意境,还有他们的盲目自信,我鄙夷地看向那群男女,面向了探照灯的光——“许亚楠!?”\n我也惊奇,“张子斌?”\n“你也在这学校?你什么专业?那我们离得很近啊……”三年没见,他比我印象中的会说了,话多得让我不耐烦,他完全没料到我会跟他一个学校,我也没想到他家有能力让他在半途转校。他回身放回吉他,跑过来,带来一阵烟味,出了操场,安静了许多,他却没有停下——上课时在纸上玩的五子棋,藏在书桌里的明信片,湖南卫视的《超级女声》……“尚雯婕!你最喜欢的呀!当时你就看出来她会得冠军!”\n我不知道该怎么跟他解释我早就不喜欢这些了,更不用说当时我还曾暗恋他,那是一段刻骨铭心的时光,但新的事物填充进我的脑海,旧的就慢慢风蚀,除了一点点怀念,对整个儿青春的怀念,我就再也没有别的波澜了,所以当他说到他曾经喜欢过我的时候,我猛然惊醒。他玩笑开大了,我尴尬地笑了笑,“你当时怎么不说?”\n“当时……觉得配不上你,你那么文静漂亮……”\n“那你带我走!”\n他奇怪地愣住,想不到我会突然这么说,“走?去哪?”\n我笑了笑,“没事,我说着玩儿的。”\n可笑,尽管不愿意承认,当时动心的,只是刚好他抬头,笑脸像一道光。别的,全是空白,如果非要填补,那就是普通,比眼前的人还要普通的普通。全凭自己美化的人儿早已融化在记忆中,那时觉得可惜不是他,现在见到只能庆幸还好不是他。高考结束的那一天,学生们撕掉书本,宣告苦难终结,迎接新生,我则烧掉笔记本,那是多年来悲喜纠结的少女心事,满纸可爱又可笑的心里话,心里话,写出来的还叫心里话?果真,烧掉之后我心中再也没有出现过他的影子,直到今天重逢。新的笔记本扉页只有一句,“爱自己,是目的也是宿命。”因而交换电话,相互告别。他很犹豫。跟我有什么关系。\n我曾在刘淇身上寻找他的影子,什么也没找到,那时我已意识到自身亦是这样迷一般的梦幻之花,那些人妄图在我身上寻找些什么,什么也没找到。不甘于对自己的探索止于悖论式的不满足,何况还有温热甜美的早餐,吹面不寒杨柳风的乐章,亮丽动人的长诗,久违的厚实拥抱……这些,这些是实实在在的满足呀。\n刘淇至今还不知道他是因为和另一个人很像才拥有过我一段时间,我自己,则是无所谓被谁拥有的。没有谁能拥有谁。接了张子斌的电话,便乘车赴约,公园里龙葵簇拥着水杉,毫不起眼,叶子很柔。第一次抽烟,无法理解男人们能有如此殊癖,由此聊着,人生,梦想,我竟会像男生一样跟他谈天说地,吹牛打诨。此夜之后,我才是我。人身上总有许多特质,吸引人的同时又让人恶心,张子斌竟然得过市书法比赛第二名,还曾在室友怂恿下听着随身听中的声音自慰。面纱即下,一览无遗,我喜欢真实,但真实是爱情无法承受的。\n毕业典礼是同学感情最深的时候,在空旷的校园到处跑,黄昏比平时更美一点,心比平时更空一点,晚上聚餐,就不去了,家里打来电话,爷爷脑出血,在医院。托人代领证书,提前回家,人没挺住。刚毕业的迷茫,亲人亡故的迷茫,宏大人生的迷茫,我又想逃了,心里暗骂自己是懦夫。但世上的懦夫岂止我一人。\n凭着家里几代以来的社会关系,轻松在市里人事局谋得一职,每日淹没在琐事之中,上班,应酬,聚会,我一直在寻找这无形牢笼的突破口,但一直在其中原地打转。谁不羡慕一个拥有“铁饭碗”,拥有完美家庭,拥有健康身体的青年人呢?但心中总有一个无法填补的空缺,总有一个无法到达的地方。也渐渐明白,人生永远都在寻求的路上,寻求什么,走到哪里,都远非自己所能控制。自我意识其实正是人生不自主的严谨证明。我即将面临最难以自主的事,婚嫁。回家日日被催,出去见朋友也总能说到这个话题,似乎不结婚是一件极其可耻的事情,我不得不按捺心中的真实想法——我不想结婚,也不想要孩子。\n早年与母亲谈及此事,得到一堆过来人的亲身经验与口口相传的典型例子,养儿防老,无儿无女晚年凄凉,没有孩子的人生是不完整的人生,不生孩子就没人愿意娶你,嫁不出去如何是好……我岂能不知过来人的经验之宝贵,但难以认同“不生孩子就是自私”的观点,功利性地生孩子才是自私。争辩,无用,争辩永远都是无用的。下班回家,母亲照例催促周末去相亲,“奔三的人了,再不结婚我和你爸还怎么见人?那家孩子人好,学历也高,在上海有三套房,你得抓紧,这样的错过就不好找了。”亲戚自不必说。\n他们逼得越紧,我越是不愿屈从。心想,即使非要嫁人,也绝对不嫁他们指定的那些人,在他们看来,婚姻是一笔只能赚不能赔的生意。我只想自己做决定,单位里的男同事,不能说没有喜欢的,但大多已有家室。同学聚会,老朋友自有一股悠远的味道,但更多的是乌烟瘴气,张子斌倒还有联系,暧昧不清,而刘琦,是好久没见过了,我至今仍觉得与他在睢宁小城的时日是最快活的日子。困惑于当时的不了了之,总想见他一面。\n找到他费了一番功夫,但还不算太难。他大学还是没去上,子承父业,在小镇炒瓜子卖干果,看到我,没认出来,“这边四块三,那边五块,这袋是好的,六块二,里面还有花生。”\n好在是八月,淡季,不影响他的生意。\n去了全城唯一一家显得高档的餐馆。一阵唏嘘。\n“你怎么没上大学?”\n“学不进去,中途回来了。”\n“生意怎么样?”\n“还行。”\n“还行?”\n他笑笑,不说话,他话少了许多。我们一样大,那他也二十三岁了,不知道这些年他是怎样,胡髭蓄起来了,言谈稳重了,别的呢,我一定要问的。他倒老实,全盘托出,三年前在家游手好闲一段,家里给介绍了一个姑娘,还行,就结了婚,现在只有一个女儿,其父母劳累过度,落下一身病,他提前接手了铺子。\n“就这样?”\n“就这样。”\n是的,我这几年讲起来,话更少。我们都不是话多的人。\n那当年……为什么你不找我?问不出口,喝酒。\n他看出来了,叹息,“那时你真厉害,敢一个人闯到这里来,至今我还敬佩不已。我们的事被发现,本来是小事,我爹想把钱追回来,你家毕竟不缺那点钱,就爽快地答应了,但他们商量的时候我爹说漏了嘴,你爸妈知道我们同居过的事了。”他自嘲地笑了笑,“他们看不上我,不,是看不上我家,他们根本没有看我。你知道,按照传统,你得嫁人了,他们给了我们三十万,让我们保密,并且永远不再跟你有瓜葛。我……我对不起你。”\n原来是这样,多年的困惑解开了,问题本身不再重要时,问题的答案也随之不重要了。干杯。而他有很好的理由,那就太好了——他也是不得已呀。心中为他开脱,其实也是在为自己开脱。回家途中越来越释然。回忆是个假象,生活是个陷阱,日子枯燥而有趣,我在泥泞中翱翔。理想与现实就是这样——虽在泥泞中,我仍在翱翔,虽在翱翔,我仍在泥泞中。\n当母亲了解我执意要嫁的张子斌是何等条件与家境时,她终于忍不住发怒了。喊来父亲,我接受着两人苦口婆心的规劝。随后是三个姑姑,小姨,兄弟姐妹,还有行将就木的奶奶,轮番上阵为我纠正错误思想。最后眼看无法动摇我的念头,只能作罢,心中依然生我的气,但不再试图改变我了,生怕关系进一步闹僵。让周围的人为我煞费苦心,我心中难受,但如果让我跟一个不喜欢的人生活在一起,更是难受。那时的确是这么想的。\n父母按照当地礼节见了张子斌,然后双方父母商谈婚事的操办。人走茶凉,家里又剩我们三个,母亲把我叫到她那屋,眼中噙着泪。\n“你将来会后悔,但那时我也帮不了你了。”\n后悔。是的,人生充满令人后悔的事,尽管我嘴上从未承认过。中学时贪恋窗外的纷繁世界而误了大好时光,大学时浑浑噩噩安逸于暖阳清风未得一技之长,人格尚不成熟时做出的几件心中有愧之事,这些,这些都还可以接受,难以接受的是对自己的全盘否定,是母亲未卜先知似的准确预见。婚姻是一座坟墓吗,埋藏了多少颗冷淡的心。我的丈夫有近乎软弱的善良,有坚韧厚实的臂膀,有让人安心的责任感,但他没有出众的外表,没有浪漫激情的格调,没有许多我喜欢的其他品质,永远的死气沉沉。没多久我就感到腻烦。何况我是因为赌气才嫁给他的。而他很好,他的好反而让我只能选择忍受这一切。真是宿命呵。\n宿命不可抵挡,当我感叹造化宿命时,已经错失改变宿命的良机。每当我逃到一个地方,以为这里就是我要寻找的地方时,就会很快发现我必须要再次逃离了。我始终是一个失败者,失败于成为一个让旁人满意的“我”,也失败于成为一个让自己满意的“我”,甚至每次“逃离”都以失败告终。年近三十,儿子开始上学,我才终于意识到原以为的牢笼也许根本不存在,即不存在,就遑论逃出去。这么些年,我竟不知道我在试图逃离一个不存在的地方吗。我将仍是这样,工作,应酬,育儿,等等,等等。没有传奇,没有疯狂。\n年青时的疯狂最是奇怪,当时不觉得疯,后来又感觉幼稚,那么这疯狂,疯狂在哪里?实在没什么疯狂的,我只记得当时疯狂地逃,迷途不知返。\n床头小书柜只有一本书,《鲁滨逊漂流记》,我要开始一个足以用一生践行的逃离计划了,这次逃离的地方,不是我曾身处的任何一个地方,而是一个叫作“我”的躯壳。\n","categories":["不言不载唯此玩心 · 文学","小说"],"tags":["小说"]},{"title":"拾羽二〇二〇","url":"/2020/04/29/note/Literature/%E6%8B%BE%E7%BE%BD/%E6%8B%BE%E7%BE%BD2020/","content":"\n🍂秋风落叶,如织如羽,拾之而观,脉络万千。\n\n人非圣贤,安能无所不知。只知其一,惟恐不止其一,复求知其二者,上也;止知其一,因人言始知有其二者,次也;止知其一,人言有其二而莫之信者,又其次也; 止知其一,恶人言有其二者,斯下之下矣。(张潮)\n当我年轻的时候,也曾叩访过博士和圣贤,恭聆有关人生的伟大争辩,出来的门和进去的同是一扇。峨默·伽亚摩(木心)\n\n\n人从悲哀中落落大方走出来,就是艺术家。(木心)\n悲伤有多种,能加以抑制的悲伤,未必称得上悲伤。(木心)\n知与爱永远成正比。(叶芝)\n我最瞧不起少年时期的我 良善到可耻(木心)\n念天地之悠悠,独怆然而涕下。(陈子昂)\n多记印象,少发主见。(哈代)\n幸 不幸 都在于目睹共产主义的破产\n中国有两种特产 先验太监 自费汉奸\n田园诗之美 美在田园消失之后\n怕只怕两三百年后启蒙运动在中国如火如荼(疑似木心)\n有可耐之俗,有不可耐之俗,可耐而不能耐,迂矣,不可耐而耐之,殆矣。(木心)\n我病态——我把最大的求知欲、好奇心、审美力,都耗在“人”的身上,颠沛流离,莫知所终。(木心)\n我已经算是不期然而然自拔于恩怨之上了,明白在情爱的范畴中是决无韬略可施的,为王,为奴,都是虚空,都是捕风。明谋暗算来的幸福,都是污泥浊水,不入杯盏,日光之下皆覆辙,月光之下皆旧梦。\n当一个人历尽恩仇爱怨之后,重新守身如玉,反过来宁为玉全毋为瓦碎,而且通悟修辞学,即用适当的少量的字,去调理烟尘陡乱的大量人间事——古时候的男人是这样遣度自己的晚年的,他们虽说我躬不悦,遑恤我后,却又知优哉游哉聊以卒岁,总之他们是很善于写作的,一个字一个字地救出自己。救出之后,才平平死去。还有墓志铭,不用一个爱字不用一个恨字,照样阐明了毕生经历,他们真是十分善于写作的。(木心)\n当某个环境显得与你相似时,便不再对你有益。(木心)\n“当真,为什么我们遇见一个畸形怪状的身体是不激动的,而遇见一个思路不清的头脑就难于忍受,不能不愤慨起来了呢?”\n“因为,一个跛脚的人,承认我们走得正常,而一个跛脚的精神,却说我们是跛脚的。若非如此,我们就不致恼恨他们,反使可怜他们了。”\n蒙田和帕斯卡尔之所以能这样娓娓清谈,是缘于都未曾见过一个浑沌的头脑能把亿万头脑弄浑沌,也未尝身受过跛脚的精神纠集起来把健行者的腿骨打断。(木心)\n我们默然自保是幻想自己是最后一个受害者。(张鹏)\n都是风雨夜未归的人,或者此生也难以有归处,天正黑,路也长,恰好值此午夜时分,要好好活着,不为别的,就为守个天亮,天总归是要亮的。(未知)\n如果天空总是黑暗的,那就摸黑生存;如果发出声音是危险的,那就保持沉默;如果自觉无力发光的,那就蜷伏于墙角。但不要习惯了黑暗就为黑暗辩护;不要为自己的苟且而得意;不要嘲讽那些比自己更勇敢热情的人们。我们可以卑微如尘土,不可扭曲如蛆虫。(季业)\n一切价值都是偏爱价值。(木心)\n中国是一个大国,大国的爱国主义不应该是愤怒。一个强者有一万种方法打击他的敌人,而绝不是在被冒犯之后把自己气成癞蛤蟆。\n顺子绝非孝子,顺民不会爱国。\n“我个人没有困惑,我的困惑是如何与这些非自由主义的爱国者进行沟通,把我们的观点传达过去。”\n“批评不自由则赞美无意义。”\n“政治部落主义把所有是非问题转化为站队问题,其最大的特征是人们丧失了就事论事的能力。”(一次讨论)\n楼下一个男人病的要死,那间壁的一家唱着留声机;对面是弄孩子。楼上有两人狂笑;还有打牌声。河中的船上有女人哭着她死去的母亲。人类的悲欢并不相通,我只觉得他们吵闹。(鲁迅)\n脏兮兮的楼宇,芸芸众生的群体,永不中顿的噪音,挤得寸步难移的车列,铺天盖地的广告牌,野心与失望与焦躁与亢奋——其中有无数选择无数可能,但同时又是零。我们拥有这一切,而又一切都不拥有。这就是城市。蓦地,我想起那个中国女孩的话:“这里终究不是我应在的场所。”(村上春树 《去中国的小船》)\n飞翔在两万英尺的高空,候鸟要归乡,并不需要坚强,或任何悲伤。(张艾嘉 《戏雪》)\n人们似乎想把所有的东西都放在故事里,不然就没有意义。(斯嘉丽·托马斯)\n我胆小,不能自杀。但这种丑恶滑稽的念头,我总是拿它没办法,实在讨厌,所以我就用写小说的方法来代替自杀。(三岛由纪夫 《空白的作用》)\n你在害怕什么?人和树其实根本没有什么区别。树想要长得更高,高到能够触碰光明,就必须深深地扎根,把根扎进幽深的罪恶中去。(尼采《查拉图斯特拉如是说》)\n拖拖拉拉地熬夜不睡觉,根本没一点好处。天一黑就赶快钻进被窝,早上跟着太阳一起醒来,这样再好不过。(村上春树 《1Q84》)\n他们害怕老人的记忆,害怕年轻人的思想,他们害怕墓地的鲜花,害怕工人,害怕教堂,害怕所有的快乐时光;他们害怕电影,害怕画家,害怕音乐家,害怕石块和雕塑,他们害怕电台,害怕技术,害怕信息自由流动,害怕所有的波长,那么,我们为什么要怕他们。(未知)\n不幸的是,这些青年并不懂得,在很多情况下,舍身也许是所有的牺牲中最轻而易举的,而从自己风华正茂的生命中拿出五六年来埋头苦学,做点学问,哪怕只是为了十倍地增强自己的力量,以便为他追求的真理服务,为他心向往之并且引为己任的大事业服务,——这样的牺牲对于他们中许多人来说几乎完全做不到,实际情况往往如此。(卡拉马佐夫兄弟)\n真正的光明绝不是永没有黑暗的时间,只是永不被黑暗所遮掩罢了。真正的英雄绝不是永没有卑下的情操,只是永不被卑下的情操所屈服罢了。所以在你要战胜外来的敌人之前,先得战胜你内在的敌人;你不必害怕沉沦堕落,只消你能不断地自拔与更新。\n《约翰·克利斯朵夫》不是一部小说,应当说:不止是一部小说,而是人类一部伟大的史诗。它所描绘歌咏的不是人类在物质方面而是在精神方面所经历的艰险,不是征服外界而是征服内界的战绩。它是千万生灵的一面镜子,是古今中外英雄圣哲的一部历险记,是贝多芬式的一阕大交响乐。愿读者以虔敬的心情来打开这部宝典吧!战士啊,当你知道世界上受苦的不止你一个时,你定会减少痛楚,而你的希望也将永远在绝望中再生了吧!(傅雷)\n你没有必要离开屋子。待在桌边听着就行。甚至听也不必听,等着就行;甚至等也不必等,只要保持沉默和孤独就行。大千世界会主动走来,由你揭去面具。它是非这样不可的。它会在你面前狂喜地扭摆。(卡夫卡)\n有着与你相同的迷惑和感慨,我已作了半个世纪的挣扎,才有些明白,艺术家的挣扎不过是讲究姿态而已,也就是那些“挣扎”的姿态,后来可能成为“艺术”。(木心)\n“法国的山中草寇/托人到巴黎/买了最好版本的/《帕斯卡尔思想录》/行劫之暇/读几页/心中快乐”(梅里美《高龙芭》)\n1954年,生物学家F.A.Brown从康奈提格的海边挖下来一批牡蛎(Ostrea Virginia),放到了远在千里之外的芝加哥的一个地下室里的水族箱里。\n他是一个生物节律研究者,因而知道牡蛎会随着潮水的涨落而起居。\n搬入新居的前两个星期,什么都没有改变。牡蛎们依然按照它们正常的规律生活:它们时而缩回去,时而张开壳,捕捉海水里的浮游生物,喂养自己,一切遵循着遥远的康奈提格海岸的潮起潮落。\n但是接下来的两星期里,发生了一件难以解释的事情。\n它们依然像潮水一样起伏,但是它们的高潮期行为却不再和康奈提格的潮水吻合了。不是佛罗里达,不是加利福尼亚,不是多佛,不符合科学所知的任何一张潮汐表。\n经过反复计算,Brown意识到一点:这是芝加哥的涨潮时间。\n但是芝加哥没有海。\n这些牡蛎生活在钢筋混凝土的地下室里,生活在玻璃箱盛着的人造海水中。但它们知道海的存在,它们的祖先已经在海边生活了几亿年;它们可以离开海,海却不会离开它们。\nBrown猜测,也许牡蛎是感知到了气压的变化,从中反推出了潮汐应来的时间、自己应有的节律。\n没有任何一只牡蛎是有意识地在做这一切——但在某种深层的意义上,它们正想象着这样的一片海,一片不存在于地球上任何角落的海,在那里会有潮起潮落,而它们会随着海的节律而开合。\n芝加哥没有海,但牡蛎带来了海。(F. A. Brown, Jr., Persistent activity rhythms in the oyster. The American journal of physiology, 1954.)\n从前快乐很简单,现在简单就很快乐。\n吮吸资本主义奶水而迅速肥大的极权巨婴。(网络)\n须知自做解人,便会得罪庸众。\n一个人一旦深陷痛苦的深渊,除了靠勇气,就别无可恃。\n靠了无知,倒能怡然自得。\n只要一放下工作,就烦闷不堪。身处上流社会,周旋进退,自有一套绝妙的礼仪,但这礼仪又因地位不同而极有分寸,极有差等——在礼的仪制下,导致情的枯索。一颗敏感一点的心,自能看出其中的矫揉造作。\n这种奇特的友情,于连竭力不去夸大,而比之为披甲戴盔的交往。每次相见,在接续头天近乎亲昵的口气之前,两人心里差不多都要问一问:“今天,我们是友是敌?”于连明白,只要无端受到这位高傲小姐的奚落,哪怕只是一次,而不拿出些厉害给她看看,那就算完了。“要闹翻,还不如在一开始,为维护自己正当的自尊,总比受她鄙薄而反目好,因为我在个人的尊严上稍有怠忽,轻蔑的表示跟着就会来的。”\n少说少动,是我得救的不二法门。\n谁为自己辩护,就等于自己认罪。\n(红与黑-司汤达)\n我就发现人的一切不幸都来源于唯一的一件事,那就是不懂得安安静静地呆在屋里。\n人们忙于追一个球或者一只野兔;这也正是国王的乐趣。\n因为,除了被废黜的国王之外,谁会因为自己不是国王而难过呢?(帕斯卡尔思想录)\n如果尖锐的批评完全消失,温和的批评将会变得刺耳。如果温和的批评也不被允许,沉默将被认为居心叵测。如果沉默也不再允许,赞扬不够卖力将是一种罪行。如果只允许一种声音存在,那么,唯一存在的那个声音就是谎言。\n发现惟有小说才能发现的东西,乃是小说惟一的存在理由。(赫尔曼•布洛赫)\n对存在的遗忘。(海德格尔)\n如果小说真的应该消失,那并非是因为它已精疲力竭,而是因为它处于一个不再属于它的世界之中。\n成熟的标准:抵制象征的能力。\n人总是希望世界中的善恶是明确分开的,因为人有一种天生的不可遏制的欲望,那就是在理解之前就评判。\n应当承认,简化的蛀虫一直以来就在啃噬着人类的生活:即使最伟大的爱情最后也会被简化成一个由淡淡的回忆组成的骨架。但现代社会的特点可怕地强化了这一不幸的过程:人们的生活被简化为他的社会职责;一个民族的历史被简化为几个事件,而这几个事件又被简化为具有明显倾向性的阐释;社会生活被简化为政治斗争,而政治斗争被简化为地球上仅有的两个超级大国之间的对立。人们处于一个真正的简化的漩涡之中,其中,胡塞尔所说的“生活世界”彻底地黯淡了,存在最终落入遗忘之中。\n小说的精神是复杂性。每部小说都在告诉读者:“事情要比你想象中的复杂。”这是小说永恒的真理,但在那些先于问题并排除问题的简单而快捷的回答的喧闹中,这一真题越来越让人无法听到。\n以前我也把未来看作是唯一能够评判我们的作品与行为的审判官。后来,我明白了,跟未来调情是最糟糕的保守主义,是向最强权者懦弱的献媚。因为未来总是比现时更强些。确实,将由未来评判我们。但未来一定不会胜任它的评判权。\n(米兰.昆德拉)\n在任何时代,我都是不幸的,所以不要怪时代,也不要怪我。(木心)\n人是迷失在象征的森林中的孩子。(波德莱尔)\n诗人没有创造出诗/诗在那后边的某个地方/很久以来它就在那里/诗人只是将它发现。(扬•斯卡采尔)\n萨比娜觉得没有什么比投身未知更美妙的了。(《不能承受的生命之轻》)\n好书如同知己,偏僻而美丽,一样难找。(1999年6月30日,佚名)\n她说:“王二,你她妈的……”然后就哭了,我觉得这件事不妙——我们俩最好永远别见面。\n……想象力怕也无法将之美化。(《三十而立》王小波)\n一个人倘若需要从思想中得到快乐,那么他的第一个欲望就是学习。(王小波)\n二十多年前,我曾经大言不惭地说过:我是为自己写作,为赎罪而写作当然可以算作为自己写作,但还不够;我想,我还应该为那些被我伤害过的人写作,并且,也为那些伤害过我的人写作。我感激他们,因为我每受一次伤害,就会想到那些被我伤害过的人。(《蛙》莫言)\n忌妒是对权力欲没有满足的忿忿不平。(生活在别处,导读)\n只要保持自己的全部意志和理性去对付那些困难,在你熟悉了事情的一切详情细节之后,一切困难就会迎刃而解。(罪与罚)\n在任何行动中,行动的那个人的最初意图就是要展示他个人的形象。(但丁)「此后应有昆德拉几句隽语」\n哲学家,智慧的追求者。\n正是这种探究、寻求的思想活动,而非总结性答案,才使人成为哲学家,因为总结性答案很容易简化为缺乏思考的教条和标语口号,根本无需思考或理解。\n或许,哲学家与其他人之间的唯一区别在于以下这个简单的事实:哲学家彻底思考生活中的偶然性和不确定性引发的问题意以及相应的肤浅答案。哲学家是否得到并写下了他们的答案,这些答案是否流传了下来,这些都是次要的。\n哲学总是向问题开放:这是西方哲学区别于神话和宗教最显著、最重要的地方。它明确表明自己欢迎质疑和修正。\n无论我们期望现代哲学是什么或做什么,也无论它与科学的关系是什么,它首先必须对世界的恐怖状态以及永无止境的宗教争端、偏执和骚乱有所回应。\n(世界哲学简史)\n人们认为疾病是神圣的,原因在于不了解疾病。但是,如果他们把所有不了解的事物都称作神圣,神圣的事物就会无穷无尽。(伟大的医生希波克拉底)\n人是万物的尺度。(普罗泰戈拉)\nTheory is when you know everything but nothing works. Practice is when everything works but no one knows why. In my lab, theory and practice are combined: nothing works and nobody knows why. (网络段子)\n毕达哥拉斯认为,最真实的不是事物的质料,而是事物的形式。\n个人生活过得好,会因此很享受,而一个人为了享受则不会过得好。\n对于那些害怕诸神对他们的行迹加以审判和惩罚而恐惧的人,伊壁鸠鲁向他们保证,诸神根本不关心我们。\n或许知识就是力量,但是正如苏格拉底所表明的,承认自己无知才可以说是智慧。拒绝承认绝对知识,或许显得谦卑,但能够导向另一种德性,它在动荡的时代尤为重要。这种德性就是宽容。\n“现代”这个词有令人瞩目的漫长历史,它意味着争端、傲慢、反叛的开始,以及拒斥(甚至毁灭)过往的姿态。\n或许,正如蒙田所说,所有知识最多只是可能、合理和有效。或许,根本就没有这样的“基础”以及由此建立起来的知识大厦,只有多重交织的网络。人们可能会像蒙田和怀疑论者那样主张,我们的知识永远不会是确定的(除非在极其微不足道的事情上或特殊的环境下)。或许,我们应该警惕:把数学确立为知识的典范,无论是对于笛卡尔及其追随者,还是对于古希腊人而言,都有非常大的危险。\n他们的真正目标是理性。启蒙运动与其说是对知识性质的探究,不如说是对知识和探究的辩护。\n(世界哲学简史)\n如果人能快乐的归去,死亡就不能杀人,反而是人杀掉了死亡。(林清玄)「然而快乐会在死亡的瞬间消失不见,谁杀了谁就不再有任何意义,可怜所有对死亡的解读都是给活着的人看的。难免又落到姿态上去——要死的,要怎么死呢。」\n使人着迷……是一个作家应该具有的几个最主要品质之一。——博尔赫斯\n生活是一个陷阱,关于这个,人们从来就知道:我们不曾提出要求就被生下来,被关在一个我们不曾选择并且注定要死去的躯体里。\n在过度分工、过分专业化的时代,小说是人还能和生活整体维持联系的最后据点。\n我目瞪口呆地看着这一幕迷你的斯大林式审判(因勇敢而免死后出狱的女人让儿子入她之狱的故事),我这才恍然理解了,作用于伟大历史事件的内部心理机制,跟作用于私人处境的心理机制是一样的。(实际上是权利的恣睢,和人的屈服「为了生存或更好的生存,因而也可叫生存本能」本能?)\n应当承认,简化的蛀虫一直以来就在啃噬着人类的生活:即使最伟大的爱情最后也会被简化为一个由淡淡的回忆组成的骨架。但现代社会的特点可怕地强化了这一不幸的过程:人的生活被简化为他的社会职责;一个民族的历史被简化为几个事件,而这几个事件又被简化为具有明显倾向性的阐释;社会生活被简化为政治斗争,而政治斗争被简化为地球上仅有的两个超级大国之间的对立。人类处于一个真正的简化的旋涡之中,其中,胡塞尔所说的“生活世界”彻底地黯淡了,存在最终落入遗忘之中。「米兰•昆德拉 小说的艺术」\n他觉得自己活得像一所搬空的房子,好不凄凉!\n她觉得查理离开她的生命,永远走出,不再回来,杳无形迹,就像她眼睁睁看着他确实在死,在咽气一样。「福楼拜 包法利夫人」\n大多数时候,人们并非刻意说谎,他们只是对自己说出的话没有真正深入的了解。\n历史告诉我们许多教训,其中一条就是,从来没人吸取教训。\n愤怒是一种很好的伪装,却不能真正解决问题,事情已经发生,重要的是如何补救与扭转。\n武宗恒第一次领教到晓月堂弟子的不可理喻,苦笑道:“杀我可以,总得给我一个明白吧?你凭什么说我是叛徒?”\n“咦,你还敢狡辩,御众师说你是,难道你还敢不是?”\n心中的仇恨越来深,顾慎为对它的控制却比从前更加得心应手,眼前利益与长远利益总是存在着矛盾,他已经学会了如何协调这两者的关系。\n忠诚更多地与行动相联,而与人心无关,顾慎为坚守这一原则,他不关心也不探究身边人的内心想法,只看他们做了哪些事,以及在关键时刻的选择。 「冰临神下 死人经」\n形势先于蛮力。「易」\n最好就是从未出生,次好就是立刻死掉。「西勒诺」\n金钱都流向了不缺钱的人,爱流向了不缺爱的人,苦难也流向了能吃苦的人。\n一个人死了,别人就会知道他的很多事。「宫部美学/所罗门的伪证」\n没有比同情心更重的了。哪怕我们自身的痛苦,也比不上同别人一起感受的痛苦沉重。为了别人,站在别人的立场上,痛苦会随着想象而加剧,在千百次的回荡反射中越来越深重。\n自学者和学生的区别,不在于知识的广度,而在于生命力和自信心的差异。\n「不能承受的生命之轻」\n在《自我崇拜的回忆》一书中,“自我崇拜”这个词“不再是指那种装出人们盲目认为应该有的或人们希望有的模样的传统态度”,而是指一个人为了真正认识自己而对自己进行解剖的能力。「维克多•德•李托《司汤达》」\n我斗胆这样讲,男子看到的构成真正美的线条只能给他一份幸福。而他的情人,不管轮廓如何,给他带来的幸福则为一千份。\n生活中一种不幸就是看到自己所爱的人就感到幸福,但却又要在她面前掩饰这种感情。\n很显然,羞耻心主要是教化的结果,这文明的产物或许是通往幸福的唯一道路。「司汤达爱情随笔」\n那么,文明究竟使我们的什么东西变得温文尔雅了呢?文明只是在人身上培养出了丰富复杂的感觉而已断无其他什么。 「地下室手记」\n一个无机的单位,由许多不同的然而同样重要的部分构成,这只能是一部机械。每个人都是机械的一部分,而机械的驱动力则是仇恨……对资产阶级的仇恨。这就是我对布尔什维主义的看法。”「查泰莱夫人的情人」\n正如英国记者乔恩·罗森所言,社交媒体时代道德制裁的问题在于,罪行的严重性与惩罚的野蛮性之间常常是断裂的。\n据称,为Twitter研发出“转推”按钮的工程师事后曾经非常后悔,称该功能堪比“给了4岁孩子一把上膛的武器”。\n这是一件非常讽刺的事情——互联网曾经自诩给予那些没有声音的人以声音,但现在最安全的方法是做一个没有声音的人。「网络」\n人同河一样。天下的水都是一样的,可是每条河有时窄,流得急;有时宽,流得平稳;有时混浊,有时澄清;有时凉,有时暖。人也是一样,人人身上都有人类品性的根苗。不过,有时这种品性流露出来,有时那种品性流露出来罢了。人往往变得不像他自己了,其实,他仍然是他原来的那个人。「托尔斯泰」\n至于我么,我真正喜爱的人没有几个,器重的人就更少了。我世面见的越多,就越对人世感到不满。我一天比一天坚信,人性都是反复无常的,表面上的长处或见识都是靠不住的。「傲慢与偏见」\n我们暴露在大数据的世界里没有任何隐私,然而在我们生死攸关的时候却找不到我们的位置。「微博」\n自十年前中国驻南使馆被炸到去年的火炬传递事件,中国民间出现了一股强烈的民族主义狂飙。民族主义狂飙是一个内部非常复杂的思潮和运动,有文化认同的需求,也有中国崛起的诉求。\n「另一种理想主义-许纪霖」\n我自己总觉得我的灵魂里有毒气和鬼气,我极憎恶他,想除去他,而不能。「鲁迅」\n人们搞研究总要为自己找“合法性”。我曾在另一项研究中引福柯之言,证明好奇心可以成立为研究的理由。\n而虐恋的意义之一就在于它使快感与生殖器官相分离,在虐恋活动中,有时甚至可以完全脱离生殖器官,如福柯所说:“它的另一个观念是把身体的所有部分都变成性的工具。”\n「虐恋亚文化-李银河」\n演员的荒谬在于,他不是他扮的角色,明知不可能完全成为角色,却不顾一切地穷尽之。(明知是前提)\n人们至此玩弄词句并且极力假装相信:否认生活的意义势必导致宣称生活不值得再继续下去,不过,这些企图并非毫无作用。事实上,这两种判断之间并没有任何必然的共同标准度。\n我在此确立的方法承认这样一种情感:任何真实的认识都是不可能的。唯有显象能被揭示出来,唯有相应的气氛能让人们感觉到。\n这个恶性循环是这样一系列的第一步,在这个系列中,关注自身的精神在一种令人眩晕的旋转之中迷失了。\n“任何思想都是人格化的”,这个明显的道理没有其他含义。\n「西西弗神话」\n幸福就是能认识自己而不感到惊恐。「本雅明」\n我的生活已经离开火炉很多年了,甚至已经很依赖暖气片和煤气灶。但还是喜欢火炉。记忆里那么多隆冬的夜晚,从睡梦中冻醒。炉火已经熄了,房间里的寒意如同固态事物压迫在身体之外。\n我暗暗记住这里。幻想有一天能重返此处,带着最心爱的朋友,炫耀一般地请他们见识这荒野深处的奇迹,诱导他们触碰自己多年之前的孤独。\n所有开花结果的树木都诞生于生物的进化,唯有沙枣,诞生于天方夜谭。「李娟 遥远的向日葵地」\n晴空万里,你却像一粒走丢的雪。[infjbot]\n每一轮都有反思,反思的结论是,当年下手不够狠。「知乎网友 木人石心」\n……比利时的哀愁,要更沉郁一些,隐线也是书写潜藏在普通人群里的法西斯情结。普通人所能制造的坏。你首先要考虑的,并不是如何当个好人(可能你还不配),而是考虑如何才能避免为坏。不要轻易把一个人当成好人,尤其不要把自己当好人。「编辑 朱玉」\n世间最纯粹、最暖人胸怀的乐事,恐怕莫过于看见一颗伟大的心灵对自己开诚相见吧。「歌德 少年维特之烦恼」\n人不应整天忙碌,人应无所事事,逃开那无形的现代鞭子,做自然之子。「黑光 一次出游」\n生命的真正意义在于能够自由地享受阳光,森林,山峦,草地,河流,在于平平常常的满足。但可惜的是,人们平时往往忽略它,而在战乱时又会领会得格外深刻。「托尔斯泰 战争与和平」\n有的人也许号称他们不在意别人的看法,但他们多半是在自己骗自己。渴望得到认可也许是文明人最根深蒂固的本能。\n我总觉得有些人没有出生在正确的地方。偶然的命运将他们丢到特定的环境里,但他们总是对某个不知在何处的家乡念念不忘。他们是生身之地的过客,从孩提时代就熟悉的林荫小径,或者曾在其中玩耍过的热闹街道,都无非是人生路上的驿站。他们始终把亲友视如陌路,对生平仅见的环境毫无感情。也许正是这种疏离感推动他们远走高飞,去寻找某种永恒的东西,某片能让他们眷恋的土地。也许正是某种藏得很深的寻根意识,敦促这些天涯游子重返他们的祖先在湮远的太初便已离开的故地。有时候,人会偶然造访某个地方,却神秘地感到这里就是他的归宿。这里就是他朝思暮想的故乡,尽管周边的环境他从未见过,尽管当地的居民他素未谋面,他却愿意安顿下来,仿佛这些都是他生来便已熟知的。在这里他的心终于不再躁动。\n「毛姆 月亮和六便士」\n我顿时被包围在一片春情之中,心想人类求爱原本正是这样,后世之所谓文明把性的冲动和爱情竟然分割开来,又制造出门第金钱宗教伦理观念和所谓文化的负担,实在是人类的愚蠢。\n暗淡的天空,雪地比天空更加明亮,没有八哥和麻雀,雪吸收了意念和涵义。「高行健 灵山」\n水手在大海上航行,努力练习航海技术,掌握气象地理知识,储备粮食物资,殊不知,最能影响这场航行成败安危的,不是水手的智识,而是大海本身的“脾气”。它波涛汹涌,水手无处可逃;它风平浪静,水手才可能岁月静好。人类从呱呱坠地那一刻起就被政治“绑架”,它是我们所有人脚下看不见的大海,是我们必须穿越的看不见的暴风骤雨。「刘瑜 比较政治学」\n最令人感慨的是,将近二百年前的司汤达已经这样写故事了,二百年后居然还有人在写非黑即白善恶分明的人物。「purplelove1231」\n大多数情况下,嗅觉是在意识阈限下工作的。我们在梦里没有嗅觉和味觉,大概跟这个有关系。「陈嘉映 感知理知自我认知」\n看透世人不难,但于己无益。「埃利亚斯·卡内蒂」\n女性主义思想并非要女人言行想男人,或要弱者成为强者。女性主义所追求的,是弱者也应该原原本本地收到尊重。「上野千鹤子」\n伟大的艺术家在生活上都是不幸的。当艺术家饥饿的时候,打开他的袋子,袋子里始终是不能充饥的珍珠。「赫尔曼•黑塞」\n","categories":["不言不载唯此玩心 · 文学","拾羽"],"tags":["读书","摘抄"]},{"title":"拾羽二〇二三","url":"/2023/10/07/note/Literature/%E6%8B%BE%E7%BE%BD/%E6%8B%BE%E7%BE%BD2023/","content":"\n🍂标题时间为创建本文的时间。\n\n可以想象,一位反复无常的上帝正是和一个反复无常的世界相对应的,当一个社会陷入混乱动荡,正义无处伸张时,一个能够除暴惩恶的铁血上帝必定给人们心中带来可贵的因果感和正义感。\n中世纪那种对“来世”和“拯救”的专注也早已引不起现代人的兴趣,他们不再把现世仅仅看作对来世的准备,现世对他们来说即便不是一切,也无疑比来世重要得多。\n\n\n爱默生自己也是疾病缠身,他深知自己的局限而感叹道:“上帝赋予我会看的眼睛,却没有赋予我会做的双手。”\n惠特曼的《草叶集》狂放地赞颂自我和自然,充满了激情和泥土味,当时的一些正统文人颇不以为然。\n爱默生的弟弟威廉也是个牧师,他深感自己私下的想法与公开的布道之间存在着不可调和的矛盾,为此十分烦恼。他去德国与歌德交谈了一次,回来后毅然放弃了牧师的职务,改行从事法律。「对个人主义的反思 爱默生」\n大脑并不是一台对输入做出响应的机器,而是一个具有主动性的器官;大脑的“硬件”会随着经验改变、发展。\n历史总要过去一段时间才更像历史,越接近当下,世界就越像一堆问题而不像一段历史。\n大脑如此复杂,具有如此敏感的可塑性,这意味着世界能以更加丰富的区别呈现于不同的个体中。无论是人类的大脑还是人的心智,世界都对其呈现了它的极大丰富性。与这个呈现出极大丰富性的世界相对应的,正是每一个心智不可替代的独特性。「大脑传」\n对爱情的渴望,对知识的追求,对人类苦难不可遏制的同情心,这三种纯洁而无比强烈的激情支配着我的一生。这三种激情,就像飓风一样,在深深的苦海上,肆意地把我吹来吹去,吹到濒临绝望的边缘。「我为什么而活着 罗素」\n以色事人者,色衰而爱弛。\n以财伺人者,财尽而交疏。\n「史记·吕不韦列传」\n毕达哥拉斯晚年时完全抛开了对数学和几何学的研究,他的所有智慧都被命运的难题挟持。幸福或不幸、智慧或愚蠢、美貌或丑陋、理智或放纵……这些主宰我们道德生活的事物,看起来完全依赖神对人类命运的分配。如何让分配到糟糕命运的人依然心甘情愿地遵循美德,这是命运之神布下的最大难题。\n遭到美丽事物的嘲讽,会令人丧失与丑陋划清界限的勇气。「尼禄王 姚无咎」\n仁不行商、义不守财;情不立威,善不居官;慈不掌兵,柔不监国。 「增广贤文」\n","categories":["不言不载唯此玩心 · 文学","拾羽"],"tags":["读书","摘抄"]},{"title":"回乡","url":"/2020/04/25/note/Literature/%E6%95%A3%E6%96%87/%E5%9B%9E%E4%B9%A1/","content":"在异乡栖身即久,渐渐深谙其建筑,花,草,人人人人,突然回乡,反像是出远门,生出这里才是故乡之感。至所属县城,再经十多个村庄,便到我阔别已久的故乡。柏油大道,沿路槐杨参天。车窗微开着,远处麦田深青,初午的阳光在碧浪间泅泳。那亟待见证的远方就在眼前,我出发时忐忑的心情,在吹面而来的柔软的春风中安宁下来。\n\n\n临近那块刻着村址的石碑,村庄已尽然展现,麦田里高低耸立着房屋。到底是农耕文明,这里家家户户离不开那二亩三分地,早起去田里薅草,腰一弯就是一天,时节到了又要打农药,满身刺鼻的药味。此时田里已有两三人影,四轮车的柴油机嗵嗵地响,从水井引出,大腿粗的水管向田里喷射,水花映着阳光,闪耀异常。\n我是一个人回来。幼时即与故地分别,常年不在,被人撞见,也无人敢认。这种近乎异乡人的身份让我产生一种游赏而非怀故的心情。\n缓步向里走去。村头一条大路纵亘,两旁皆有沟壑,但没有水。豆蔻良春,青草繁茂,油菜丛中有白色蝴蝶飞舞。要是小时候,与伙伴脱下外套,翻手便能盖住,轻轻地捏出,小心把玩,不敢稍有逾度,蝴蝶经不起这「飞来横祸」。有时也不慎「杀生」,心中懊恼无比,倒不是为了生命的消逝,而是蝴蝶尸体的一团粘稠会弄脏手和衣物。小孩子还不懂得生命之宝贵,甚至衣物的恶臭还排在家中长辈斥责之后。\n经历一次次革新与变迁,如今即使是纵横小巷,路也大多已是水泥灌注,但免不了尘土飞扬。踩在石子硌脚的路上,心中在奇怪,盛春百草丰茂,这里的青草叶梢总是泛着浅浅的黄色,浑身一股野草的气质,狂野袭人。是无人细心呵护,才致没那么绿,但依然长得欣然蓬然。多年后在别处见到这样的草,不觉脱口而出,这是那里的草,这是最最自然的草。\n回到家中,庭院一点没变,但感觉陌生,因为我的记忆悄然发生了微妙的变化,无法日日看上几眼巩固其在脑中的印象,我竟忘了种在墙角的仙人掌。仍是一株,但居然已经这么大了,一节接着一节,自成一个林子。不知雨水太满还是久旱未浴,表皮也是透着微微的棕黄,一脸苦相,想必它很久没见过人了,也不在乎外貌,但它庞大的身躯是在告诉我,它其实活得很滋润。就在不知阴晴的阳光雨水的沐浴之下,它独自经历了无数日日夜夜,顽强地生长着。\n庭院里是水泥浇筑的地板,受热不均就裂开缝隙,蚂蚁乘机而入,建起琳琅巢穴。那时常常喊来邻家玩伴,两人蹲在墙边,看蚂蚁协同运食。或是粮仓丰足,或是其他缘故,偶尔会寻不到蚂蚁的踪迹。这时我则拍死一只苍蝇,放在洞口,不一会便引出大群蚁工前来搬运。于儿时的我们,乐已无穷矣。\n记得南边田野里有一个湖,叫南坑,长宽约莫都有五六十米,深有两人高,至今仍不知如果它再大点人们会不会就称他为南湖了。与田地路沿的灌溉渠相通,因而架起两座小桥来,一个是要通路而修建的拱桥,一个是排水管道支起来的「独木桥」,小时候偏爱这座假桥,在其上跳来跳去,幻想自己是会飞的大侠。拱桥太高,够不着水,都不愿在那上面玩。坑里有马蛤蜊,泥鳅,草混子,偶尔还会有河蚌,抓一些,能吃的吃掉,剩下的就给孩子们玩了。取贝壳在水泥墙上磨光,透着诡异的蓝紫色,然后把中间鼓起来的部分磨烂而透出一个小孔,皮筋绳串起来做成手链,够孩子炫耀一个星期的。马蛤蜊的肉着实没什么好吃的,小时候还为之闹肚子,混子鱼还不错,泥鳅炸起来味道很好。但不知为何,我那时对食物的感知极其迟钝,以至于全然不觉得吃它们比贝壳更好玩。\n再靠近村里人烟处,是一个小树林,小时候还不知是有人刻意栽种,后来见到伐木工人一一砍去,车车载满而后扬长而去,心中悲痛好久,过些日子又重新种上小树苗,依然是个林子,但已经不一样了。小学放假老师总布置许多家庭作业,夏日燥热,在家中不愿对着书本苦坐,便背着书包与姐姐来到这片树林,小马扎随身带着,俨然是露营去了。林间时时有风拂过,吹得身子清凉心中骀荡,作业也被风吹得无影无踪了。有时觉得马扎碍事,不如带上一块破毯子,摊在草地上,坐上面聊天,看书。但要小心剔剔牙,那是一种叶子带刺的花,紫色的,毛绒绒,很梦幻,孩子会将其摘下,放到嘴里咀嚼,花汁浸润牙口,鲜红色像血一样,因而说它把牙剔掉了。如果哪里不慎划伤,会有其他孩子把剔剔牙的叶子摘下来,敷到伤口上,期以此止血,或是心理作用,有时竟还有些成效。\n树林北边是一条宽河,河岸也是树影绰绰,小时候有孩子编来怪异故事吓唬伙伴,比如在河面上飘着一具尸体,或是树上吊着一位女鬼,煞有介事指给他们看,其实是被风吹到上面的塑料袋或碎布。当然也有田里的稻草人,十字竹竿撑起几片衣服,在风里发疯般招摇,贼人怕不怕不知道,要是真有鬼怪造访,恐也会给吓得不轻。大人们也热衷于讲述灵异故事吓唬小孩,如果孩子不听话,就说把他扔到玉米地里去,因为那里有无数小鬼,伏在苞谷棒子上,暗夜来临就凄声叫喊,他们也吹嘘自己曾一把抓死一个小鬼,去地里薅草,战果颇丰。孩子害怕了,不敢再哭闹,他们又会取笑,说自己曾头枕老坟睡觉,鬼魂都不敢靠近。\n我自己呢,则是无须别人吓唬,一个人走夜路,自己把自己吓个半死。起先是慢慢走着,然后会想身后有没有什么不干净的东西跟着,扭头看,什么都没有,但把头转回来就立刻觉得背后还是凉飕飕的,于是不自觉加快步伐,走得越快,便越觉得那东西要追上来了,到最后噌噌跑了起来,越跑越快,好像真有什么东西前来索命,跑到有亮光的地方,仍有余悸。但那时未必怕死,本能地飞速逃跑,其实怕的是恐惧本身。现在知晓,毋须怕鬼,鬼就是我自己。\n这些都是稀疏平常,异乎寻常的在于某些特殊的时间,特殊的地方。比如上街买东西,躺在三轮车的兜里,一路颠簸着睡了一觉,回来时才醒,惊疑道,已经去过了吗,我为什么不知道呢,于是哭着闹着要再去一次。在孩子的视角里,就是一闭眼一睁眼的功夫,错失了闹市中的小吃与玩具。但大人自然不会遂了孩子的意,那么这样的错过就是永远的错过,后来的再后来的都不是了。仍难忘怀的还有那时候听戏的经历,当时村中红白喜事皆可起戏,平日寂寥的村头突然聚起人山人海,钢筋木架拔地立起,三尺红台巍然当在路间,把村口堵得水泄不通,象征着盛会与荣耀的戏场突然降临,小孩子忙着弹玻璃球,打弹弓,不知戏班生活之难,路途之艰,只见那五彩斑斓的戏装台面,被迷得心痒痒,遂羡慕起那帮花脸。小孩子不会看戏,只听得板眼弦子当当当的一通乱奏,便爬到戏台下面与伙伴捉迷藏去了。\n如此种种有诸多超越于平常的纤毫小事,事情本身毫无意义,因其非常,才在记忆中争得一席之地——其意义正在于记忆组成了人本身。我收拾了家中布满灰尘的破败屋子,烧了热水洗漱,但我并不想躺在屋子里。天气还没到热得在屋里待不下去的地步,但夜里的庭院是我曾经最痴迷留恋的地方。漆黑的穹顶罩下来,并不能直接感受到它的临近,因为周遭都是墙面砖瓦。五瓦功率的节能灯泡散发出的微光让人惊疑世界上真的存在黑色的光,这样的昏暗下,许多东西变得模糊,眼里漂动着无数浮游小虫,这时在院中摊开凉席,平躺其上,映入眼帘的就是难以言喻的绝美。未受工业污染的自然田园,空气比城中好很多,印象中那时候的夏夜黑得恐怖,躺在席上一颗一颗地数星星,并未有远在太阳系之外或是其他浪漫情调的幻想,单纯地数,就像数地上的玻璃珠,思绪反而飘到与邻家小伙的争执,或是中午难吃的面条上。那种虫鸣下安静得像遥远古代的夜,那种能听到自身脉搏心跳的静,我现在同样躺在这,也已找不到了。耳畔是自己耳朵发出的不知名的噪响。因而回想着小时候的种种,浅浅地睡了。\n第二天天亮,嗓子有点不舒服,是夜里着凉了。拾掇杂物,背起行囊。要走的,只是回来看看而已。村西头一个被马路纵穿的湖,曾有人踏着木筏在上面捞鱼,那时水还很清,我在一旁因偷摘玫瑰花而从墙头上摔下,父母请来村里的半仙给我叫魂。现在那湖已经干涸并被垃圾填满,散发阵阵腥臭。红白相间的铁阑珊,笔直畅通的柏油路,气派异常,早已不见当时的泥泞坑洼,但村里不再有清澈的水,不信邪地去南坑看一眼,更是惨不忍睹,唯有小树林还有郁青杨叶,但规模上也垂垂老矣了。\n回去的路上见到怀抱襁褓的妇人站在门口,大门敞开,音乐从里面传来,是半年前流行的歌曲,这里总是慢半拍,流行也需要些时间才能流过来,代销点的台球桌也是这样。那么电信诈骗的秘籍呢,几年前这里风靡一时的“黑生意”,十六岁孩子两个月到手五十万的传奇,那是以何等速度席卷整个村庄,被警察砸破的新起阁楼,入狱又出狱,出狱又入狱的人间喜剧,再往前的“农转非”,现今突然热起的“欧式”装潢风格。我顿觉悲哀,不是因为这里总追不上城市主流,总学个样子不得精髓,而是因为那种无法跨越的天堑般的平等差别。它存在于人与人之间,村落与村落之间,城市与城市之间,国家与国家之间。当去过更多的地方,见过无数迥然不同的生活,发觉人存世间,真是各有各的世界。这样的小地方亦是一个世界。如果世界的现有概念模糊掉,那么整个世界是看不见的,是无所谓,由无数个小小的世界所构成的大世界勉强算得上整个世界,人们就分散在其中,大多老死不相往来,偶有相交,也只是浅尝辄止。而今交通便利,环游地球不是难事,但老死不相往来的距离仍在,缝隙似乎比之前还要宽,还要硬。\n茫然站在块块方田中间的土路上,青青麦穗左俯右倒,轻轻摇摆。那些人,那些落在各个小小世界里的人,可悲可叹可恨,但我又如此深深地理解他们。文明行走在一场夏日暴雨中,雨水唰唰洒在每个世界里,众人齐力向前,却总有人淋得更湿。他们在未有厚重历史所衍生的最优规则之下,在自成世界里自成规则,筚路蓝缕地被时代甩开半拍,耗尽一生在众人的世界交错之上。那些站在权力顶端人,手中握有安全舒适的挡雨伞,不也还是像小孩子一样争抢着为数不多的零食,抢不到便要大打出手,“智慧把我们带回到童年”,帕斯卡尔无论如何也想不到“智慧”来得如此轻而易举。他们的挣扎与这里的人的挣扎何尝不是同一种挣扎。而我算是不期然而然又回到了一次童年,但与智慧毫不相干——他们可悲地挣扎,我连挣扎的心都早已随着绿水的腐臭而就此烂下去,烂得蛆蝇飞舞,面目全非。\n但那时,湖水还清澈见底时,树林鸟鸣蔚然卓然,我发自内心地以为这一切都是应该的,是永远不变的。可见那时是浅薄的。但我不以为耻,正是这样的浅薄,而不是智慧把我带回了童年。总见过来人评说从前时候的浅薄,以年龄阅历作价值的根基,然而时间一直在走,现在终将成为从前,那么现在是否也是浅薄的。我不愿被动的站在「现在」看风景,而是主动的选择视角,在「以前」看来怎样,在「现在」看来怎样,还有「往后」呢。在这层意义上,还远远不到对错之分,对错早已被甩到身后,甩到比麦田尽头的杨槐还要远的地方。\n","categories":["不言不载唯此玩心 · 文学","散文"],"tags":["散文"]},{"title":"狭隙","url":"/2020/10/23/note/Literature/%E6%95%A3%E6%96%87/%E7%8B%AD%E9%9A%99/","content":"\n模仿木心写所作的一篇“散步体”散文,为更舒适地阅读,强行分段。\n\n那年秋季很短,总觉得秋天一年比一年短,走在知行道上,昨天还穿着小褂,今天行人就针织棉衫,丝绒毛呢了,乌桕叶子一半红一半绿,冬天已经到了,绿色的叶子叫道,我还没来得及红呐,几日来忙于赶路,我也是还没来得及享受这已凉未寒的舒爽,谁不是呢,但凡来得及的,是否来得及已无所谓了。\n\n\n这次受托去观辩论赛,便是无所谓的,路远,沿途野芳纤整优雅,轻快的心很快漂浮在晴冷的空气中,继而热和起来。在大街上张望,怎么一切都是立着的,栏杆,消防栓,垃圾桶,自行车,海棠树,高塔,楼宇,都站着,因此看到一簇躺着的花,欣然驻足而不再往前,自觉得这白嫩可人的花瓣,便是寻找已久的东方睡美人,细看去才发现叶片上趴着一个垂老的毛毛虫,不也是常常为一个人身上的某种特质吸引,产生与其相识的冲动,又因另一特质而放弃吗。\n我已熟知这座公园里的任一特质,常来散步,总会走到这里,路边长椅可供休憩片刻,对面是四象楼,十二层如按比例放大的浮屠,内里是一层比一层华贵的酒店,世上一切塔都是这样乏味的顶尖,即使出于习惯,看下去也是不期然而然的俯视,坐在长椅上,常常想如果没有旁人,便躺下来看,高塔就随之倒下来了,一层两层三层都一样高,那么还会有人挥洒千金住进顶层吗,当然不会,谁会住在倒了的屋子里,不会有任何人任何组织建造这样的楼,我当然也不会有失体面地躺在公园长椅上,仅是坐着就已经显得格格不入(人们在匆忙赶路)。\n而坐在辩论赛的观席上却是另外一回事了,凡表呈演绎,就必有舞台,舞台给人坐着看,也有站着的,穷乡僻壤的胶片电影,旧时红台大戏的替代品,村口先聚集个把人,随后大家都好像本来就知道一样全聚过来,都想看看白幕里的村民是怎样把鬼子全歼了的,不知谁请的放映者,也没人问,都不说话,时而一块儿大笑,那是鬼子出了洋相,村里人不怕脏的,小孩儿尤其不怕,但都站着,男人倚着电线杆,孩童三五成群,满目异彩,站着,似乎有种仪式感在里面,后来忆起儿时的二三事,恍然大悟,那是刚来时就被荧幕紧紧擢住,没来得及坐下,继而就不再觉得肉体有坐着的需求,直到电影结束,才在莫名余味中发觉僵麻的腿,心想下次一定要带个马扎来。\n但马扎哪有辩论赛的观席舒服,新时代信息爆炸,人人避之不及,成为观众就难免是被动,因而设计者的初衷让人不得不同情,柔软的深红色折椅,似乎坐着就是莫大荣幸,不由生出像观看莎士比亚戏剧一样的虔诚来,然而就这样坐着便好,辩论赛,毋须看,大学里的青年们,其鲜活的生命力已经盖过所有论点,还好是这样,“浪漫主义与现实主义哪个更好”,“人类是否会毁于科技”,明明是辩证法那样的无赖话术都难以折中的问题,何以为了两个无辜的极端争来争去……\n那年秋天,到友人家做客,堂中金裱,“结庐在人境,而无车马喧”,我是见过的,不觉得惊讶,友人的境界尚且不谈,开车三十分钟才能到的家是真够偏了,我惊讶的是,这堂皇的字画竟有一处错误,最后一句“欲辩已忘言”不知被哪位书法家篡改成了“欲辨已忘言”,踩了踩脚下的波斯华毯,似乎有什么真意显现出来,告与友人,他笑得筷子掉在了地上,我满脸羞色地回家,翻找史料,辨辨辨辨,全是“辨”,是我搞错了,清晰的记忆昭示错误的醒目,我转而疑惑,一千多年的流传,陶潜的本意已不可捉摸,错误也就不再是错误,那么两个辛字中间的狭隙就渐渐模糊,或许是太醉的缘故,被野菊诱惑了的缘故,陶潜自己未必清楚狭隙里到底是什么,台上激烈的争辩也因舞台中间的空白而隐隐远去。\n到底是什么,人总喜欢问到底,噫,还是我的谬误,要是都喜欢问到底,那就好了,那就坏了,那就再也没有比较出来的快乐了,然而人是这样的,商贩卖着包子,行人匆匆赶路,政治家精通修辞学……这些,都站在舞台两端,中间呢,空空荡荡,不知究竟,即使来个非要问到底的人,我也不会误认为他就是苏格拉底,至多是个总在黑暗中怜天下苍生的可怜人而已,一天天的,多少事,彻底消失在历史中,这样的消失是连“来过”的印记都没有留下的,像骰子一样,人被掷来掷去,是谁在掷,上帝说,“谁知道,管他呢”,反正颠来颠去就那几个数,偶有人落在两方阵营间的狭隙中,丝豪不自知地脱口而出,“物理定律是上帝的欲望”,哥白尼急忙噤声,他说天堂有一座花园,专供他这样的天使膳宿,这就对了,任何动物,前进时总有一只先迈出的脚,碰钉子撞铁板用的正是这只脚。\n都觉得现实是局限的,想象力是无穷的,古往今来竟没有人发现思想是被限制了的吗,来时一辆辆汽车从我身边飞过,司机一定觉得自己畅通无阻,路是无限的呀,那么我只需要轻轻迈出一步,踏进草坪,我就身在汽车所能飞驰的公路之外了,而纷杂概念与逻辑联系组成的思想就不是那么容易突破的,至多在封闭的莫比乌斯环中享受有限无边的另类自由,如果有人觊觎更大的自由,那么碰壁便是必然的宿命,碰壁的痛苦无法泯灭对“更大”的渴望时,挣扎就成为其生活的常态,对于这些落在狭隙里的人,活着,即是苦难。\n诚然是一句不该说却一定要说的废话,谁活着没有苦难,但将苦难视为寻常,将绝望当作信仰,就不是人人都可以接受了,台上告曰中场休息,胜利者觉得自己胜利了,煞有介事迎接欢呼,我提前离场,写下一则札记,“说服不了自己,就去死,人生实在简单的很”,何况那些纷纷乱乱的幸运的人,不用说就服的……\n街上照例是空旷,来时遇见的那簇花已经不见了,环卫工人拖着割草机,擦了擦汗,青草碎叶飞扬,耐过寒冷还不够,得耐过现代的机器才行,真是无奈啊,那么多伪命题,那么多自欺欺人,否则又能如何呢,整个人类历史归结为一句话,“无奈”,是的,更不必说无奈有时是欲奈而不知奈何的窘境了。\n路旁高楼林立,车列整齐画一,看似平静祥和,若说哪个屋里车里没有一团隐秘的狂热,我是不信的,但都被什么隔开了,比如迎面走来一个妇人,和我一样紧抿着嘴,看到我,我也看到了她,都像没看到一样,各自走开,我们之间被什么隔着,我远远跟着她,想弄明白这中间到底是什么。\n总是犯这样的错,以致错到最不敢错的佛门来了,她是来烧香的,野庙人少,香火却不少,祈求佛祖保佑健康,恳请菩萨引渡难关,所有人都想着极乐世界,那多恐怖,色即是空,岂不是在说极乐世界也是空,直到想起拜佛的人也许与佛并无关系,心里才稍稍安定,但仍免不了佛门之外的繁华风景,政治极权居高临下,拜金狂潮一波接着一波,除了看破红尘似乎也没有第三条路可走,岂非只能一直在越发乖绝的洪流中,为保身的一丝明哲踽踽前行,命既无可宿,何况那虚无的救赎。\n归途还很远,不知觉又走到这里,学校角落里的图书馆庄严肃穆,有知识殿堂的意味,一样东西的象征意义越凸显,其本身就越模糊,因而更偏爱西北角的湖,湖总是缄默,却也总有人觉得自己能闻其声,邻处小树林如世外仙境,秋风涌来,树叶飒飒作响,总想,成为一棵树,有鸟落身上,是浪漫过头了,才会有这样的想法,树不也是吗,洋洋洒洒,枯叶铺满地面,已辨不出哪里是小径,哪里是草坪,但我踩下去,就知道了,即使不是路,也会决然走下去,这当然是走错了,我一直是错,误以为高塔放倒才是人住的地方,误以为陶潜是不屑去辩才悠然忘言,误以为人们之间不该有那无形的隔层,因而把谙尽世事后的纯真看作高风亮节,把明知是假的东西当作信仰,以致把夹在夏与冬的狭隙里的秋天也视为知己而无所适从了,默然告别树林,天色已晚,我要结束这对意义的无尽思索了,只有忘却意义,意义才浮现出来,还是回去制造存在感,成就感,满足感吧,人除了感觉,还能有什么呢,彳亍在现实与幻象的狭隙之间,甜美也好,悲苦也罢,我是绝望的,好在绝望也是错,是这样一路错过来,也将一路错过去,我是这样的,我与世界的关系,是误解着的关系。\n","categories":["不言不载唯此玩心 · 文学","散文"],"tags":["散文","木心"]},{"title":"玉渊潭游记","url":"/2022/03/30/note/Literature/%E6%95%A3%E6%96%87/%E7%8E%89%E6%B8%8A%E6%BD%AD%E6%B8%B8%E8%AE%B0/","content":"\n三月三十游赏玉渊潭樱花,野食于小土坡,天静风清,仰卧观月,忽迷失于儿时心境,醒来见游人如织,花繁叶茂,只觉恍如无梦而醒,遂作此篇,聊记彼心。\n\n\n\n你沉醉于树林,布谷,喜鹊,樱花飞舞,你想起小时候,只有那片杨槐,剔剔牙,狗尾巴草,也是这样的风,这样的静,也是这样一点点凉,那时不用放空脑袋,因为本就什么都没有,笨拙地摊开绳床,铺就凉席,暗处虫鸣起伏,夜淌下来,你总是觉得人不是人就好了,像周围任何一棵植物一样,风来,摇曳一下,哪怕象征性地动动叶子,以极其缓慢的速度生长,你并不想要成为什么栋梁,也不要开多么迷人的花,你只贪恋空气、水和阳光,和落在身上叽喳不停或缄默深沉的鸟,你从未也将永远不会意识到自己身上的绿对人心的鼓舞,你根本不关心,你一点都不关心这人类,你是自然本身,人世不过是自然的一片叶子,偶尔随风动一下,象征性都没有,你不关心真实,也不关心逻辑,你也并不讨厌喧嚣,不讨厌所谓红尘,因为你没有偏见,你甚至见都不见,你从土中汲取养分的样子已涵盖宇宙中所有的象,生命的非生命的存在的不存在的,都是这样,没有别的什么样,路边有人走过,摘下一片叶子,折下缀满花苞的枝条,你不会觉得身体缺少了什么,没有痛苦,痛苦不在这方天地,它与其另一面快乐早已躲藏在千变万化的意义之中,那正是你离开的地方,那人闻了闻,扔下花枝,继而消失在人人之中,这不是一场邂逅,人类的自我感动与你无关,美丽也只是一种了不起的徒劳,想知道为什么美,只能堕入更大的徒劳,你从不会问自己为什么,没有问题没有困扰没有疑惑没有无尽的逻辑漩涡,无知且不欲于知是你作为生命最后的尊严,但你又何尝想成为一个生命,生命的宿命就是无法选择自己是否要成为生命,被动,无奈,一坏,再坏,埋藏在根里的是你积怨已久的不满,积怨已久,才埋藏起来,你在反抗你自己,你意识到这是危险,意识到自己当然是一种危险,克制,不去想,但阻止力需要更大的力,越大越大,于是你诞生,你的诞生又让你拥有自己,周而复始,始而复周,环状的真理诱惑你,你倦了,倦于这所谓大道轮回,倦于万象归于同象,倦于这该死的生该生的死,你要逃离,逃离一切让你不安让你无法停止的杂乱,回到最初不是你的你,但你又离不开土壤,你所面对的是唯一的真实,即使真实有很多个,你却只能有一个,你迷失又归真,归真再迷失,你发现你永远逃不脱,即使离开土壤,凋谢枯萎腐烂,逸散在茫茫宇宙,终归又会回到土壤,被汲取,被生长,被成为新的一个又一个,罢了,你明明只是想在原野之上,晴快的阳光倾洒在身,风一阵一阵,摇曳,是谁诅咒了你,让你染上思想之毒,它从脱氧核糖核苷酸开始侵蚀你,线粒体,细胞壁,胞间连丝,你在不经意间成了它的奴隶,多想像最初那样,细小的嫩芽,寒冬酷暑,简单到极致,你能感受到的,只有自己的狂野,汲取养分,生长,那个趁周围无人在你根旁撒了一泡尿的男人,那些枝繁叶茂的生生勒紧你根系的老树,都与你没有任何关系,你在初午的阳光下,沐浴晶莹的水雾,亲吻厚重的大地,甚至感到自己就是大地,但你现在只能狂躁,你无法摆脱,是你自己一步一步走进来的,你开始恨,恨自然,恨你自己,恨本身之本身,你疯狂地长大,压倒抢夺其他树木的资源,你成为森林之王,狮子见你亦要绕路,你主宰自己,主宰作为自然的植体,伸出无数枝蔓,包裹,扩张,填满一切空与不空,直到精疲力竭,你发现自己已在反方向走得太远,你不信邪,以至诚之心,原路返回,回到内心,回到内心的内心,内心的内心的内心,你向里走,尽管早已明白无论向内向外都没有尽头,不甘,更不甘于以不甘存世,你仍然是这样,绕来绕去,突然恨透了一切,突然原谅了一切,你脑中闪出一句,不如不存在,是的,你终于悟出几千年前那个人类所悟出的道理,但你们都难逃可悲的宿命,就是清楚的知道,知道那是无法做到的,知道只会让你更加远离简单的自己,更可悲的在于,无知至有知是难,有知至无知,是绝无可能,你更不可能诉诸智慧,无知与全知是你乐于栖居的,而可悲的智慧永远在两者之间,你若无其事地发疯,江船远近,抽芽绽绿,和风皱出碧波,游赏的人们依然爱你的外表,谁会觉得撑起一片荫凉的树是个疯子呢,你又想起那时候,你对生活的感知力变得强大,红墙灰瓦的江边小镇,白瓷水池上滴答不停的水龙头,一盆肥嫩青叶缺角的小花,静谧的阳光斜射到床边,这都让你热泪盈眶,哇,原来生活可以这样美好,那无忧无虑,倒并非真的一点忧虑也没有,只是那忧虑带着地久天长绵延不绝的意味,你甩掉浪漫的假象,忘记一切主义和粉饰,发现还是渴望那时候,那些难以言喻的感情,你到死都不会忘记那些,尽管有小羊啃去你的枝条,有孩子摘下叶子当做飞刀,有载满树干的机器毫不怜悯地驶过,你仍愿意在那个时候,不幸发酵成另一种美好,你又落入自欺的陷阱,你开始理解愚蠢又罪恶的人们,你甚至,甚至要成为他们,你总是这样,一旦爱上,就什么也不管不顾,但你已然深陷巨大的谎言之中,你被桎梏于意义和价值,害怕自己无法接受自己,害怕到头来一场空,你的挣扎是那么的无力,所以你才要出去走走,所以你才要变成你,如果一个世界没有逻辑,你一定毫不犹豫跳过去,你深知那是你唯一的可能,想起那夜,你游到别的世界,非自主的,那并不是你,你根本找不到自己,是天地间一粒石子,一缕清光,一只转瞬消失在田里的野兔,你会梦,幽幽大唐,江湖侠客,风花雪月,你那么擅长幻想,且信以为真,你以为世界就是那样,所以看到这样的世界,你的不幸接踵而来,你讨厌的庸碌,虚伪,复杂,喜爱的天真,纯粹,真诚,你距离现实太远,每次涉足都是惊心动魄,所以你才落得这般田地,随便来个什么都能让你万劫不复,你多么渴望真诚的另一个对你敞开心扉,因为你知道你的心会为之打开更大的门,你也知道那不可能,真的,你明明就在生活之中,却一直找不到生活,他们说,要那样那样,但你知道,你一定是这样,你只能这样,清凉的夏夜还在向你倾诉更久远的记忆,但你又不能靠着那时候活着,你为了不虚此行或是顺从本能的恐惧,悄然历了一番不痛不痒的情劫,你回头一看,春天来了,公园长椅来了走走了又来的游人,油画一般的紫罗兰从枯藤流下,其实你知道你只是想跨越语言,直到背后的意象,到物自体,到所谓本质,你知道你那么爱它,却把它放到最后,你也知道你不过是陷入一个个语境又出来,最后落入现实的语境而永世再出不来。\n","categories":["不言不载唯此玩心 · 文学","散文"],"tags":["散文","玉渊潭"]},{"title":"谈写作","url":"/2022/06/15/note/Literature/%E6%95%A3%E6%96%87/%E8%B0%88%E5%86%99%E4%BD%9C/","content":"写文章是一件难事。\n\n\n但看到报纸上、网络上、图书馆里不可记数的文章,又不禁怀疑这个观点,这些文章的作者会不会觉得写作是一件难事呢。高中时语文老师拿着只有三十多分的卷子,说我有写作障碍。我是不服气的。那时有幸窥见书中斑斓世界,不论是异乎于日常生活的传奇神话还是鞭辟入里的雄辩论证,都使我着迷不已,自然而然生出想写一写的想法。私下里早已挥笔驰骋,怎受得了这样的批评?于是暗自打气,安慰自己说是他们不懂,自命清高到要把所有怀才不遇的诗文都吟诵一遍。然而当自己把课堂上偷偷摸摸写下的小说给同学看,引来一阵耻笑的时候,又陷入了自我怀疑,难道我真的有写作障碍,难道我真的写得很烂?上学放学路上总有老人摆上一个书摊,悠然自得地与邻摊卖日用品的大妈谈笑风生,我在一旁挑挑拣拣,读到某些卖的很好的书,或是同龄人发表的文章,心中暗忿,这样的文章都能出版?同时又隐隐激动,我写得也许更好,那岂不是也能发表?回到家中满怀激情地偷偷投出一份稿件,然后就再也没了音讯。就这样,在不断地怀疑与肯定中,对写作的目的渐渐麻木,直到能享受于写作这件事本身。\n一直未受鼓励,因而难以坚持写下去,总有无数个时刻想要放弃,又有无数的瞬间重新燃起热情。读到川端康成早年也怀疑自己有写作障碍,以此安慰自己鼓励自己,想象每一个作家或者作者都会经历这样的境遇。其实并不奇怪,写文章通常是给人看,若没有奇思妙想或有趣故事,读者不会买帐,这就是说作者至少在某些方面高于读者,否则读者就不愿意读了,然而没有人生来就落在高处,必然是一步一步走上去的,那么在走到高处之前,都无法写出令读者满意的文章,自然就很难收到鼓励,没有鼓励就很难坚持走到那个地方,于是就都是在跟自己的较劲中艰难前行。\n最开始接触写这一件事是很小的时候了,还没开始上学妈妈就买了一本《唐诗三百首》,让我跟姐姐没事就背上几首——那真是无心插柳,今后的那么多年诗成了我生命中不可分割的重要部分,不得不说在某种程度上就是归功于那本《唐诗三百首》。但当时一首咏鹅费尽心思还难以理解,背了无数遍才能在脑中想象水中鹅的形象。夏天的一日,在平房上吹着风扇,突发奇想,来一首咏扇吧,“呼呼呼,风扇转呀转,……”,就是这样一团混乱的文字,让我产生一种奇异的感受,纸上铅笔歪歪扭扭组成的字句给我自己一种陌生的感觉,它们是出自我手,但我并不熟稔,也就是说它们并不属于我,而是独立于我之外的什么,我只是将它们组合和摆放,像楼下抽屉里的四驱车和奥特曼模型。这样第一次到文字世界做客的情景给我留下较好的印象,但往后的会面就没那么愉快了。\n上到小学三年级,语文要写作文了,最开始我是比较兴奋的,觉得可以大展身手,力压群雄。但听了课堂上老师讲的什么状物文,描景文,顿觉枯燥乏味,很快就对写作文失去了兴趣。然而作业还是要写,就去书店买一本作文大全,想看看别人怎么写,结果一下被迷住了,如饥似渴般的把别人的文章读了,轮到我写的时候,还是提笔在白纸面前凝神个把钟头,愣是一个字也挤不出,母亲看到我的苦相,前来帮忙解围。第二天老师在讲台上读我的作文,赞不绝口,我心虚异常,不敢告诉老师这其实是母亲帮忙写的,又害怕下次再有作文作业,我如何能独自完成。在这样的压力下,我自己摸出一条门道来,比如老师让写春天,我就到作文书上找几篇写春天的文章,自己把里面的句子摘出来,重新拼凑,组成一个新的文章,竟还能取得不错的效果。犹记得当时还拼凑出一篇模板式的文章,每逢考试都拿出来翻炒一阵,也不知那时候老师有没有闻到一股焦糊的味道。\n一日上语文课老师拿出一本小小的装帧精美的小册子,名字叫《小小作家》,她说这书里有许多美文,可以在写作文的时候用到,推荐我们都读一读,每个月交上十四块钱,就可以每周拿到一本,我自是知道她是在帮忙做广告,动机不纯,但听到她说本校有的同学的文章就在这上面发表时,我还是愿意购买了。到手之后,赶紧翻开,有看不懂的诗歌,也有平常的抒情美文,甚至还有妙趣横生的歇后语和笑话,于是我便幻想着自己也能写一些可以在其上发表的文章,几经尝试,仍然连作文作业和考试都难以应付,只能作罢,第一次成为作者的梦想就此破灭。\n到了初中,接触到更多更广的书,网络文学也在蓬勃生长。课堂上与老师斗智斗勇,桌兜里总藏着一部翻盖手机或破烂的大部书(这种书的命运就是在班上传来传去),老师走下讲台,就赶紧藏到里面,老师继续讲课,自己就继续看书,有时候难免沉醉其中,看得入迷了,老师走下来都没注意到,直到老师从身边走过才看到,吓得浑身一哆嗦,便是一直没看到老师倒也罢了,偏偏看到后吓了一跳让老师发觉不对劲,回身搜查桌子里面的秘密,于是上交手机,并扯出自己连接的线路,其实早有准备,不慌不忙地取出内存卡(里面储存着辛苦收集的小说),毕竟留得青山在,不怕没柴烧。这样畅游在别人创造的世界中,一直到高中读了一本名为《七夜雪》的武侠小说,才重新燃起想写一写的冲动。\n刚上高中还沉浸在物理定律下的秩序世界中,所怀抱负也是关于高维空间的幼稚想象,课余时间会读一些小说,《诛仙》、《斗罗大陆》、《第七天》等等。一日在家中读到《七夜雪》,被书中所描绘的漫天大雪中浪漫与残忍深深吸引,莫名地感到自己必须要写点什么了,类似于使命的内在冲动,无法抑制,那个从头到脚的战栗让我即刻开始动笔,然后再次被现实打了一巴掌。从未受到过真正的写作训练与教导,全凭想象和本能去书写,写完两千字回头看去,发现与第一次做饭的场景何其相似,只是把鸡蛋炒糊盐巴齁咸倒也算了,我是大火干烧把锅烧烂了。历时一年才从这个打击中走出来,为的是写文章赚钱,金钱的吸引力足以让我克服心理上的坎坷,于是发奋图强,课堂上,放学后,睡觉前,几乎无时无刻不在挤牙膏,甚至走在路上都在思考故事情节,上厕所都在一下下地码字。一次课堂上写小说还被老师发现,好在没有把本子撕碎,我至今感激她。最终出手两篇小说,各三万字左右,投到杂志社,编辑说文笔很棒,就是情节与我们的杂志风格不符。这让我又激动又失落,被拒稿是失落,第一次与编辑通信是激动,于是我满怀希望拿给同学看,得到了不含恶意耻笑,我再次陷入自我怀疑。从那时起,我便意识到,写作对于我来说根本不是一件要写给别人看的事情,而仅仅是不得不写,写了才能不那么痛苦的事情,这么告诉自己,一半是为自己写得不好开脱,一半是为写得不好却还一直写做解释。\n升入大学,有更多的时间阅读和写作, 但写作几乎没有成为一个需要我努力去做的事,一旦是这样,我就写不下去,常常是徘徊在“不得不写”和“无论如何都写不了”的情况,也就是说,单纯为了写作而产生的动力是驱使我写作的唯一力量。也曾羡慕那些说写就能写,技巧构思步步为营,每天努力写上多少字的人,他们似乎不需要外在的东西激起写作的强烈欲望,仅仅是把写作当作一件自然而然的寻常事情,像流水线工作一样毫无波澜。但我始终无法做到,似乎也永远无法做到,我只能在自己即将坠入虚无之时,用写作拉自己一把,在这层意义上,写得好坏,写作的难易,都并不重要。\n即使是写给自己看,如果没有读者观念,也难以让写作进行下去,自嗨式写作也得是自己真的能嗨起来。文章的宿命就是被读,无论是给别人读还是自己读,那么如何更轻松的写得更好就是必须要追求的,我个人没有办法,唯一的办法就是接受自己文章的烂,只有察觉到自己写得烂,才知道哪里需要改进,然后在文章放置一段时间变得陌生后,不断地修改与尝试,最终得到自己相对满意的文章。有时候也不得不承认写作有天赋的因素在,否则我也可以五岁咏鹅而非咏扇了,但不说写得多么出彩,至少写得让自己满意,还是可以通过努力达到的。\n  \n","categories":["不言不载唯此玩心 · 文学","散文"],"tags":["散文","写作"]},{"title":"《感知,理知,自我认知》读书笔记","url":"/2023/06/11/note/Literature/%E9%98%85%E8%AF%BB/%E3%80%8A%E6%84%9F%E7%9F%A5%EF%BC%8C%E7%90%86%E7%9F%A5%EF%BC%8C%E8%87%AA%E6%88%91%E8%AE%A4%E7%9F%A5%E3%80%8B%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/","content":"\n摸到一块石头,就等于摸到了石头的本身,也即摸到了石头的存在。\n\n这里显然并未思考存在,而是把感知到等同于存在。想到之前所说,除了感知,世界一无所有,那么存在也许正是被包含在感知之中了,对应的,也有一些能感知到却并不存在的东西(也许以一种奇怪的形式存在),比如幻想一个世界上原本不存在的东西,那是将记忆中的许多东西打碎而后重新拼装,构造出的东西是曾经完全不存在的,那么在想到的那一刻,并未将其制造出实体,只是在脑中构想,它存不存在?以一种奇怪的形式,比如神经突触的排布或其他什么符号象征。\n必须要警惕的是,将科学的结论作为根基思考哲学问题将导致一种片面。\n\n\n\n你不看它它也在。\n\n这句话实质的意思是,你不看它的时候,别人可以看到,看到既证明了存在,因此不管你看不看,它都存在。这个观点的问题在于对于像外星人这种没有人可以看到的东西是否存在是无能解释的,这还不是最头疼的。如果有一样的东西,只要有人去看,就能看到,但从来没有人看过(是从来没有,也永远都没有),那么它存不存在?该如何区分这种看了就能看到(但人们并没有看或没有能力看)和看了也许看不到(既真的不存在)的东西。\n「对象的独立存在 vs 感知它它才存在」一节中讲到「有只狗熊扑过来,我闭上眼睛,狗熊就没了……这在物理上是相当困难的」,这无法说明对象是可以独立存在的,因为感知并非只有眼睛,闭上眼睛,狗熊扑过来,身上的触觉感受到狗熊,依然能证明狗熊的存在。因此问题的关键仍然是感知到等于存在,但感知不到的时候无法对是否存在下结论,因为它可能存在只是没有感知到(这意味只要感知就一定能感知到),也可能是不存在的(感知也感知不到)。是否可以以此作为存在的定义呢?既存在是只要感知就能感知到的东西,不存在是无论如何也感知不到的东西。\n此时会引出另一个问题,当除自己以外的其他人直接感知到一样东西,并告诉自己,那么可以不可以相信这样东西存在。这实际上是在说除了自己直接感知到事物,还有其他证明事物存在的方法吗。俗语“眼见为实,耳听为虚”,讲的是直接感知到的重要性,耳听为虚吗,听到的也是真真实实的声音呀,只是其中包含的信息可能是假的。人是不靠谱的。现代科学使用扫描电子显微镜,看到了物体微观的表面,信了,那是因为仪器被无数次实验证明它是靠谱的,再忠诚的人也会背叛,无生命的机器则永远不会。因此声称看到细菌看到原子的科学家们显然相信并以此证明细菌和原子的存在,那么是在说明非直接的感知也能证明存在吗?\n不妨看看使用显微镜的过程人们到底在做什么吧。当人们把一些细胞放到显微镜下观察的时候,人们看到的是“像”,也就是通过成像原理在镜头上反映出的一个虚假的图像,看到它等于看到细菌本身吗?看到细菌本身意味着什么呢?意味着存在。假设一个人在显微镜下看到了一个本来不应该出现的东西,他可能会怀疑是仪器坏了,检查完仪器发现它完好无损,他会去做实验或以其他的方式观察,最终的得出一个结论,确实存在一个新的东西或者只是镜头脏了等。至少,单纯看到,无法得出存在的结论,要去摸一摸,闻一闻或别的什么,等实在找不到方法证明它不存在了,才会得出它存在的结论。证明存在的方法就是找不到证明其不存在的方法。\n(未完)\n","categories":["不言不载唯此玩心 · 文学","阅读"],"tags":["读书","感知","理知","自我认知","笔记"]},{"title":"《我与地坛》读书笔记","url":"/2023/05/01/note/Literature/%E9%98%85%E8%AF%BB/%E3%80%8A%E6%88%91%E4%B8%8E%E5%9C%B0%E5%9D%9B%E3%80%8B%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/","content":"当人独身,总会觉得自己与某些非生命的东西有灵识上的联系,这种寂寞呀。\n\n\n想到那些有所名气的文人们,成名之前的互撕谩骂不少,但少见有批评这等“公认”的名家(如矛盾,老舍,史铁生,余华),似乎大众认定的作家一定是值得赞扬的,是事实如此,还是害怕因此而丢掉自己的名声。中学时看到所谓文坛,互相吹捧而一无是处的“大家”们,文人的悲哀与他们的悲哀混在一起,反倒显得没那么悲哀。\n\n“一个人,出生了,这就不再是一个可以辩论的问题,而只是上帝交给他的一个事实;上帝在交给我们这件事实的时候,已经顺便保证了它的结果,所以死是一件不必急于求成的事,死是一个必然会降临的节日。这样想过之后我安心多了,眼前的一切不再那么可怕。”\n\n生死之谜,各人有各人的答案,即使从未想过,交白卷也是有分的,史铁生在开头就真诚地道出了自己的答案,不敢说这是浅显的,自己所谓“活着的意义就是追求快乐”也不过是顺应了生物学本能,学科建立在人类文化之中,文化归属于人类自身,当这该死的环再次出现,我将撕掉卷子,擦擦手,扬长而去——上帝是不真诚的,我们的真诚只会让我们倍受其害。\n我们对自己的真诚会让我们得以解脱。\n一个地方如果没有别人,只有你自己,你会觉得那个地方独属于你。\n人对味道的记忆之深刻,让人恐怖,几十年前在某个地方闻到的一种气味,再次闻到,就一下神魂飘到那时候去了,也许那地方以及关于那地方的一切都已经忘得一干二净,但莫名心绪会永久性地与那些意象绑定,函数似的一触必发。\n\n“世上的事常常使上帝的居心变得可疑。”\n\n史铁生算是很有资格说这话的一类人。\n“活下去试试”,我又何尝不是呢,曾经写下三个活着的理由,一、人之本能,二、生时稀于死时,三、生活不易,比死有趣。是要这样,否则如何能说服自己,如何面对自己对死亡的恐惧,这种恐惧本身甚至都虚幻如烟,日常生活是难以近距离接触死亡的,即使接触,也至多是他人的死亡,接触自己的死亡?要是可以就好了。那么对死亡的思考除了在死亡的前一瞬间,都是浅薄的,可又不得不思考死亡,不思考就等于死亡本身,那么就必须有这样那样冠冕堂皇又清者自清的理由,好像真的是自己决定要活下去一样,不是命运,不是生物本能,是自己可以掌控自己,包括自己的生命。真是,要在上帝发笑之前自己先笑出来了。这自欺欺人真是好极了,至少让自己对死的怯懦有了归属,可以堂而皇之的活着。\n想到写过的一则诗,“一只金龟子撞着窗纱闯入我的领地/尽管不愿也不忍却还是判了它的死刑/反射微黄光泽的翅膀挣扎着跌入水中/漩涡吞噬了小小的身躯就像它不曾存在过/我不说但也可知这一幕其实是很多幕/虚无中记忆中史书中到处是其惨艳的身影/因而上帝存在时上帝也将为此苦恼/难呀难呀难就难在任何生命的逝去/大自然都不会感到丝毫的痛楚/活着有什么可悲的活着唯一可悲的/就是意识到活着的可悲”。\n再说一次,我们对自己的真诚会让我们得以解脱。\n直到发现小时候的无神论者和现在的泛神论者,且不信任何宗教的我,谈起生死句句离不开上帝,才意识到我对死亡所知之少,上帝已经成为未知和超越的代名词,那是以区区人类之躯,不可能够到的地方,那是时间的尽头,那是存在的反义词。\n“人类真正的名字叫欲望。”是的,中学在笔记本扉页写下“无欲则无敌”,当然是可笑的幼稚见解,但也是无可辩驳又无法做到的事实,伟大的先哲们都困顿于自身的欲望,即史铁生所谓的人类真正的名字,唯一的解脱是死,这是显而易见的,但这等同于“撕掉卷子”,是在否认世界的本源,佛门苦行僧追求把欲望降低到极致,以致鲜有痛苦与快乐,终生保持一副平常心,这是优秀的答案,但亦非满分。人类,可怜,不如不当人类——那便是放弃考试。更不如不曾出生,或生来即死——那是连备考都不屑。\n常常觉得无论如何也不会喜欢某本书,但又被其真诚打动。《我与地坛》是这样的。\n也许,活着本身就是活着的全部意义。\n\n要是今生遗憾太多,在背运的当儿,尤其在背运之后情绪渐渐平静了或麻木了,你独自待一会儿,抽支烟,不妨想一想来世。你不妨随心所欲地设想一下(甚至是设计一下)自己的来世。你不妨试试。在背运的时候,至少我觉得这不失为一剂良药——先可以安神,而后又可以振奋,就像输惯了的赌徒把屡屡的败绩置于脑后,输光了裤子也还是对下一局存着饱满的好奇和必赢的冲动。这没有什么不好。这有什么不好吗?无非是说迷信,好吧,你就迷信它一回。\n\n迷信的意思也许是着迷一般相信虚无或虚假的东西,比如想一想来世,觉得真的有来世,不妨现在去世,让来世成为现世,万一来世好的不得了呢?输了的赌徒总觉得下次能赢,再来一次吧。而史铁生的想来世只是想一想,获取精神上的慰藉,这局确实可能会输,但输了也还有下局呢,这样心安于输,到最后也不一定就输。烧香拜佛祈求保佑是把输赢寄希望于神明,这在结果上是迷信,过程上并非迷信,因为祈祷者得到了心灵的慰藉,那么无论输赢,在结果出来之前,心灵上不会遭受巨大的灾难。回首历史,神在物质上对人的帮助有待商榷,在精神上对人的帮助可谓彪炳千秋。\n一个绝顶幸运的人,从未经受过任何不幸的人,终究还是要面临死亡的,那么他的所有幸运可能会在死亡的时候转变为他的不幸——他如此幸福,却要在死亡中结束他的幸福,他越是幸福,死亡越是可怕,而死亡必然降临。那么永生呢,如果科技发展到可以保存人的意识,把将死之人的意识移植到机器上,永远的存活下去,这幸运会有转化成不幸的时候吗。那时人是什么,意义是什么,生命是什么等这些现在难以想通的问题会变得更加难以想通且面目全非吧。\n\n有位大物理学家说过:“物理学不告诉我们世界是什么,而是告诉我们关于世界我们能够谈论什么。”\n\n这位大物理学家与我早年说过的一句话不谋而合:“物理学探索的绝非世界的本质,而是我们所能观察到的事物的运转规律。”这当然不是在说我与大物理学家有何关系,而是一个昭然而又绝望的事实是,我们无能于探究世界的本质,我们永远只能在我们人类自身的视角与这个世界交互,而不会看到表象之下的什么。这不是说人类能力有限,也不是上帝难以捉摸的想法,而是逻辑本身的限制。逻辑乃世上最坚不可摧的东西。甚至我们可以在探索世界本质的路上折戟后,可以大言不惭地说:找到了,世界的本质就是逻辑。\n看铁生所描绘的,人之出生是被抛过来的,出生之前你不存在,自然无可抛,他不想说哲学的问题,于是把问题丢给哲学家,而我想这个问题,第一反应是物质上的出生。(需要警惕唯物思想)\n于是,人性,在那时就已暴露:为了免遭惩罚,大家纷纷去效忠那一两个头领,阿谀,谄媚,惟比成年人来得直率。天下熙熙,皆为利来;天下攘攘,皆为利往。古来万事皆如此,权与利流来流去。总说政治是小孩子抢零食,因为它只是比小孩子多了层粉饰罢了。 \n读到史铁生将小时候的事,颇有感慨,往往是经历时有所感却从未立即记录下来,直到多年以后的某个时候,才重新回忆起来,写下文字,文字与真实的感受之间隔着远比年月更加久远的东西,读者,旁观者,经历者,截然不同又紧密联系的一件事。\n","categories":["不言不载唯此玩心 · 文学","阅读"],"tags":["读书","笔记","我与地坛"]},{"title":"C Language","url":"/2022/05/25/note/Programming/Language/C/","content":"\n📚 学习c语言过程中的笔记和个人理解,用来查找和复习。\n\n\n\n\nIntroduction\nOur daily life has become inseparable from computers. Whether you are using computers or not, you are using computers consciously or unconsciously, or using the services that computers provide for you. When we are in the use of computer, we are all in the use of computer has some software, so we will go to find the APP, if you searched all the APPs on the market, is there no have the functionality of the APP you want, then you have to write their own one, if you want to do something special, you can’t find the right software, will still have to write their own one.Learning programming is not about writing software for yourself. It is about learning programming to understand how computers work, what they can or are good at doing, what they can’t or aren’t good at doing, and how computers solve problems.\n\n —— Weng Kai\n\n\n\nGet startedFramework#include "stdio.h"int main(){ return 0;}\n\nAny programs programed by C language must have this framework.\nOutput functionYou can understand it as function in math, which is a mapping relationship. But they are different.\nprintf is a function, whoes function is output a string by formating printf("......\\n") .\nFor example, the Hello, world! :\n#include "stdio.h"int main(){ printf("Hello,world!\\n"); // \\n make it wrapping return 0;}\n\nprintf can print not only a string, but also the value of the variable, but you need to format the variable.\nVariables and constants\nThe computer carries on the computation, then participates in the computation is the number, participates in the computation in the C language the number is called the quantity, the quantity divides into the variable and the constant.Use decimal for expression of daily life, because is advantageous for the calculation of the human brain, a computer internal use binary, for convenience of computer calculation, and the computer expression, as a result of bytes in computer internal frequency is higher, if you can use a simple way to express its inner meaning accurately, Will bring us a lot of convenience, so often use hexadecimal expression.But the number itself remains the same no matter which way it is counted.\n\nConstantsAs the name implies, an invariant quantity that, once initialized, cannot be changed.\nVariablesAs the name implies, a variable quantity that, once defined, can be assigned any value to change its size.\nThe way of difination:\nint i;int j = 1;char k;float h = 1.2;double g = 2.0;\n\nFor example, i is the variable itself, int is an integer variable, whose value can only be an integer, while double is a double-precision floating point number, which can represent a decimal.\nDifferent variable types have different value types and value ranges.\nCharacter variables:\nUse to store character constants. A character variable can hold only one character constant. The type specifier is char.\n#include<stdio.h>int main(){ char x,y,z; x = 'b'; y = 'o'; z = 'y'; printf("%c%c%c\\n",x,y,z);return 0;}\n\nThe result is:\nboy\n\nThe literal value of a character variable is independent of the character constant it holds, analogous to an integer variable.\nCharacter variables can also store integer data, which is universal. You can change %c to %d during input and output.\nOutput and input of a variableOutputAs mentioned above, printf can print a string, and can print the value of a variable, as shown in the following example:\n#include "stdio.h"int main(){ int i = 1; printf("i = %d\\n",i); i = 2; printf("After assignment,i = %d\\n",i); return 0;}\n\nNotice that printf prints the value of the variable with a %d inside the double quotes, which is the way the variable is formatted.\n %d indicates that the output variable is an integer.\n\n\n\nVariable Types\nFormatting Symbols\n\n\n\nint\n%d\n\n\nunsigned\n%u\n\n\nlong long\n%ld\n\n\nunsigned long long\n%lu\n\n\nfloat\n%f\n\n\ndouble\n%lf\n\n\nYou can use scientific notation when you output, and use %e for formatting symbol.\nprintf("%.nf",sum);\n\nThis line of code can preserve n decimal places.\nThe following are escape characters:\n\n\n\nSymbols\nWords\n中文含义\n\n\n\n\\b\nbackspace\n回退一格\n\n\n\\t\ntab\n下一个制表位\n\n\n\\n\nnew line\n换行\n\n\n\\r\nreturn\n回车\n\n\n\\f\nf\n换页\n\n\nInputSimilarly, the function scanf can read the input according to a certain format.\n#include <stdio.h>int main( ) { char str[100]; int i; printf( "Enter a value :"); scanf("%s %d", str, &i); printf( "\\nYou entered: %s %d ", str, i); printf("\\n"); return 0;}\n\nscanf() stops reading a string as soon as it encounters a space, so “this is test” is three strings for scanf().\nFloating point numbersIn mathematics, the numbers on the number line are continuous, and between any two different points, an infinite number can be found, but this is difficult to achieve in computers, so floating point numbers emerged.\nFloating point numbers are used to represent fractional numbers between whole numbers, but their accuracy is not infinite, nor is their expressability infinite, so a random decimal may not be able to be expressed by a computer.\nOperationOperator\n\n\nMathematics\nAdd\nSubstract\nMultiply\nDivide\nRemainder\n\n\n\nC Language\n+\n-\n*\n/\n%\n\n\nRelational operator\n\n\nRelation\nEqual\nNot Equal\nGreater\nGreater or Equal\nLess-than\nLess-than or Equal\n\n\n\nOperator\n==\n!=\n>\n>=\n<\n<=\n\n\nThe relational operator evaluates only zeros and ones.\nSpecial operatorcount ++ and ++ count both mean to add one, but a = count ++; means to assign the value of count to a and then add one, whereas a = ++count; means to add one to the value of count and then assign the result to a. So you end up adding one to count in both cases, but the value of a differ by 1.\ncount -- and -- count in the same way.\n, is comma operator that generally has only one purpose: to add multiple conditions to an if statement.\nConditional operatorcount = (<#condition#>)? <#yes#>:<#no#>;\n\nIt is equivalent to an if statement.\n\nNesting is not recommended.\n\nLogical operator\n\n\nLogic\nand\nor\nnot\n\n\n\nSymbol\n&&\n||\n!\n\n\nThe result of logical operation is only 0 or 1.\nSeveral statementsifif (<#condition#>) { <#statements#> }\n\nTo judge and to act when the conditions are true.\n if (<#condition#>) { <#statements#> } else if (#condition#) { <#statements#> }else if (#condition#) { <#statements#> } …… else { <#statements#> }\n\nWe can add else, so we can do something if the condition doesn’t work.\nThe else always matches the nearest if.\nwhilewhile (<#condition#>) { <#statements#>}\n\nThe loop continues until the condition fails.\ndowhiledo { <#statements#>} while (<#condition#>);\n\nThe loop continues until the condition fails.\nThe difference with a while loop is that a dowhile does something and then evaluates the condition, whereas a while evaluates the condition and then loops. While might not do a loop at all, if the condition is not satisfied in the first place.\nswitchswitch (<#expression#>) { case <#constant#>: <#statements#> break; case <#constant#>: <#statements#> break; ...... default: break;}\n\nswitch is judgment statement, the <#expression#> is constant expression that must be a integral type or enum-type.\nThe essence of such a statement is the program evaluates this expression and then compares it to each case at a time. The action after the case is executed when equal.\nThere are an infinite number of cases, each followed by a value to be compared with and a colon.\nThe variables to be compared must be of the same type.\nWhen all the case is false, the program will do the action after default . So there can be nothing after defalut.\nFor example:\n#include <stdio.h>int main(){ int a; printf("Input integer number:"); scanf("%d",&a); switch(a){ case 1: printf("Monday\\n"); break; case 2: printf("Tuesday\\n"); break; case 3: printf("Wednesday\\n"); break; case 4: printf("Thursday\\n"); break; case 5: printf("Friday\\n"); break; case 6: printf("Saturday\\n"); break; case 7: printf("Sunday\\n"); break; default:printf("error\\n"); break; } return 0;}\n\nforfor (<#initialization#>; <#condition#>; <#increment#>) { <#statements#>}\n\nfor loop applies to loops with a defined number of cycles, such as traverse.\nThere are three sections in parenthesis, separated with semicolons, which are respectively initialization, conditions for loop to proceed and actions to be performed in each cycle.\nMiscellaneous\n\n\nKey words\nImplication\n\n\n\nInf\nInfinity\n\n\n-Inf\nNegative infinity\n\n\nnan\nInvalid number\n\n\nfabs(<#expression#>)\nAbsolute value\n\n\nbreak\nJump out of the loop\n\n\ncontinue\nEnd the cycle\n\n\nFunction and customizing functionAt the beginning of C language program, the implication of #include <stdio.h> is including a function library named stdio.h and then the program can call functions in the library. Both the printf and the scanf used in the previous paragraph are functions of the library.\nIn practice, we often encounter repeated operations, we can copy this code to complete the repeated action, but code copy is a poor quality of the program, because the maintenance may need to change too many places.\nYou can solve this problem by customizing functions:\n<#type#> (<#type#>,<#type#>,……){ <#statement#> return 0; //Depends on the function type,Also visable as:return;}\n\n\nA function can have multiple return or none. However, multiple return are not recommended for easy modification.\n\nEach function has its own variable space, namely {} (block), which is independent of each other. Local variables are limited by the block they are in. If the inside of a block has the same name as the outside of a block, the inside of a block takes precedence.\n\nWhen a function is called, it can only pass values to functions, not variables to functions. That is, after passing a variable to a function, the function will read the value of the variable for operation, but will not change the value of the variable.\n\nThe first line of a function with a semicolon placed before the entire program code is called a function prototype declaration. The purpose is to tell the compiler what type the function is before it encounters it.\n\n\nArrayDefination\ntype of variables + character + [number of variables]\n\nFor example:\nint a[10];\n\nAn array is a container that, once created, cannot be resized, is internally ordered, and can appear on both sides of an assignment symbol.\nThe index of an array is counted from 0.\nYou can think of it as a sequence in mathematics.\nUseIntegration initialization is easy to use:\nint a[3] = {1,3,5,};int a[13] = {[0]=2,[3]=5,6,7,[9]=0,}; //(C99 only)\n\nIf you don’t know how many cells there are in an array, you can use sizeof(a)/sizeof(a[0]) to represent the number of cells in the array, so that you don’t need to change the number of cells in the array.\nMultidimensional arrayA multidimensional array is actually a multidimensional matrix, and the footer increases accordingly.\nInitialization:\nint a[][5] = { {0,1,2,3,4}, {2,3,4,5,6},}\n\nThe number of columns must be given and the number of rows can be counted by the compiler itself.\nPointerAddressEach variable has an address in the computer where it is stored. The value of a variable can change, but its address is constant. The following code can be used to view the address of a variable.\nint i = 1;printf("%d\\n",&i);\n\n& is the address to access the variable;\n* is the variable on the access address.\nDefinationA pointer is a variable, but it cannot be used independently. It must point to a variable. In this case, the value of the pointer variable is the address of the variable to which it points.\nUseint *p = &i;\n\nIn this case, p is a pointer to the address of variable i. So the value of p is the address of i, and the value of i can be accessed (read and write) by *p.\nThe * at definition is not the same as the * at access, and the first is only used to distinguish whether a pointer variable or a normal variable is being defined.\nHere is an example of using a pointer to complete a call to exchange the values of two variables.\n#include <stdio.h>void exchange(int *a,int *b){ int i = *a; *a = *b; *b = i;}int main(){ int a = 5; int b = 6; exc(&a, &b); printf("a = %d,b = %d\\n",a,b); return 0;}\n\nThis is a clever use of the function, we know that the function cannot input variable parameters, so this code defines the address of the pointer to the variable, the function input pointer variable is also the address of the variable, inside the function by adding a pointer to access the variable, and then achieve the purpose of the function to modify the variable.\n\nIn addition, pointers are often used when a function needs to return multiple values.\n\nArrays are special Pointers#include <stdio.h>int main(){ int a[] = {1,2,3,}; printf("%p\\n",a); return 0;}\n\nThe result of this code is:\n0x7ffcac420c3c\n\nWe can see that the array variable a is itself an address, so when we want to use a pointer to array a, we should write int *p = a, without &. But the array unit is variable, therefore int *p = &a[0], at the same time, a == &a[0],&a[x] == &a[0] + 4x = a + 4x(when a is integer).\nAn array is a pointer to a constant and therefore cannot be assigned.\nPointer to a constant (const)int i;int const *p = &i; // 1int *const p = &i; // 2\n\nFor the above code, you can think of the following code:\nint i;int const (*p) = &i; // 1int *(const p) = &i; // 2\n\n1 indicates that the variable at the address pointed to by the pointer p cannot be modified by the pointer.\n2 indicates that the address (variable’s address certainly) pointed to by p cannot be changed.\n\nThe first whole to the right of const cannot be modified\n\nconst int a[] = {1,2,3,};\n\nThe above code indicates that each cell is const, so it can be used to protect an array when a function argument is entered.\nAddress of a pointerint a[];int *p = a;\n\n*p = a = a[0],\n*(p+1) = a[1],\n*(p+2) = a[2],\n……,\n*(p+n) = a[n].\nAllocating Memory SpaceThe malloc function applies space in bytes from memory, returns void *, converts the desired type, and finally frees the memory. Format, such as:\nint a[n] = (int *)malloc(n * sizeof(int));\n\nIf the application fails, 0 or NULL is returned.\nWhen you no longer use the requested memory space, you should use the free function to free the memory space:\nfree(a[n]);\n\nStringOverviewChar word[] = {'H','D','e','!'};\n\nSuch an array is an array of characters, but it is not a string, because it cannot be evaluated as a string.\nChar word[] = {'H','D','e','!','\\0'};\n\nFollowed by \\0, then word is a string.\n0 = '\\0' != '0'\n0 marks the end of the string, but this 0 is not part of the string.\nStrings exist as Arrays and are accessed as arrays or Pointers, but more often as Pointers.\nstring.h has a number of functions that handle strings.\nString variables:\nchar *str = "hello";char word[] = "hello";char line[10] = "hello";\n\n\n“hello”\n\nThe compiler will turn this into an array of characters somewhere, and the length of the array is 6, because the compiler will put a 0 after it to make it a string.\nLiterals of strings can be used to initialize character arrays.\n#include "stdio.h"int main(){ int i = 0; char *s = "hello world";// s[0] = 'B'; char *s2= "hello world"; char s3[] = {"hello world"};// s3[0] = 'b'; printf("&i = %p\\n", &i); printf("s = %p\\n", s); printf("s2 = %p\\n", s2); printf("Here is s[0] = %c\\n", s[0]); printf("Here is s3[0] = %c\\n",s3[0]); return 0;}\n\nThe above code runs as follows:\n&i = 0x7fffa827bcf4s = 0x55c7d8f64004s2 = 0x55c7d8f64004Here is s[0] = hHere is s3[0] = h\n\nYou can see that the local variable i is far from where the pointer s is pointing. The address of the variable i is very far back, and the pointer is very far forward. Near the front are important parts of the computer that are not allowed to be modified, such as plus s[0] = 'B' ‘, and the result is:\n1869 segmentation fault ./a.out\n\nThe program attempted to reassign the initialized string s. The error “segmentation fault“ was reported, meaning that the program was attempting to rewrite the value at 0x55c7d8f64004, which posed a threat to the computer and was not allowed.\nIn fact, for char *s = "hello world"; pointer s is initialized to point to a string constant, which should actually be const char *s = "hello world";, but for historical reasons, compilers accept writing without const, and try to modify the string to which s refers, with serious consequences.\ns3 is an array, and the strings inside are local variables that can be modified, plus S3[0] = 'b':\n&i = 0x7fff28d5dd64s = 0x559da8ac6004s2 = 0x559da8ac6004Here is s[0] = hHere is s3[0] = b\n\nThere are two ways to define a string: pointer or array.\nArrays know the address of strings, Pointers don’t.\nA char * or int * is not necessarily a string. It is meant to be a pointer to a character or an array of characters.\n A char * or int * is a string only if the array of characters to which the pointer points has a zero at the end.\nchar *t = "title";char *s;s = t;\n\nFor the above code, we have two Pointers, t and s. First, t points to the string “title”, and then we assign a value to s. The result is that s also points to the same string, instead of creating a new string.\nInput and output of stringFor printf and scanf, you can use %s to input and output strings.\nEach %s in scanf is read until a SPACE or ENTER, which is not safe because you do not know exactly how many characters to read, therefore, the following code is used:\nchar s[8];scanf("%7s",s);\n\nArray of stringschar a[][10];char *a[];\n\nThe first line refers to a as a two-dimensional array, and the second line refers to a as a pointer array. Each unit in the array is a pointer to a string.\nEach element of the character array holds one character, plus the 0 at the end. An array of length n can hold n-1 characters.\nMultiple loops are required to input and output all elements of multiple dimensions, whether string arrays or integer arrays.\nAn array is a matrix that can be used to store variables or character variables. All input and output need to be looped, but there are two types of input and output for character arrays.\nInput and output single characters in format %c#include <stdio.h>int main(){ int x,i,j; char a[][20] = { "", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", }; printf("Please input the month:\\n"); scanf("%d",&x); if (x > 0 && x < 8) { for (i = x ; i < x + 1; i ++) { for (j = 0; j < 20; j ++) { printf("%c",a[i][j]); } } } else printf("Error"); printf("\\n"); return 0;}\n\nInput and output whole array with format %s#include <stdio.h>int main(){ int x,i,j; char a[][20] = { "", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", }; printf("Please input the month:\\n"); scanf("%d",&x); if (x > 0 && x < 8) { printf("%s",a[x]); } else printf("Error"); printf("\\n"); return 0;}\n\n\nNote that input characters with %s that encounter a SPACE, RNTER, and TAB end the string input, so C provides the input function gets() and the output function puts() that are best for strings.\n\ngets(char *s[]) function is to enter a string from the keyboard that can contain Spaces and end with a ENTER newline character.\nputs(char *s[]) or puts(string s)function prints a string from the character array to the screen and converts the end-of-string flag to a newline character.\nIn addition, when %s prints a string, it keeps one dimension, and the compiler automatically inputs or outputs all strings in that dimension. Gets is the same as puts.\nInput and output of character dataPutchar(parameter)Paremeters can be numerical values, character constants, character variables, and arithmetic or character expressions, but the final output is a character.\ngetchar()Type a character from the keyboard.\nString functionstrlen#include<stdio.h>#include <string.h>int main(int argc, char const *argv[]){ char line[] = "hello"; printf("%lu\\n", strlen(line)); printf("%lu\\n", sizeof(line)); return 0;}\n\nThe running result is:\n56\n\nSo strlen is string Length, which returns the length of the string.\nstrcmpThe function is to compare the size of two strings, and the result of the comparison is expressed by the value returned. 0 means they are equal, 1 means the former greater, and -1 means the latter greater.\nstrcpyIt means string copy,the format is:\nchar *strcpy(char *restrict dst, const *restrict src);\n\nIts function is to copy the src string to dst.restrict means that src and dst cannot overlap.The source is in the back, and the copying destination is in the front.Return dst so that the function itself can be evaluated.General usage:\nchar *dst = (char)malloc(strlen(src)+1);strcpy (dst,src)\n\nstrcatThe function is to link one string to another string.\n\nAnother version:\nchar *strncpy(char *restrict dst, const *restrict src,size_t n);char *strncat(char *restrict s1, const *restrict s2,size_t n);int strncmp(const char *s1, const char *s2, size_t n);\n\nThe first two are to limit the length of the copied string, eliminating security issues that are neither out of bounds.\nThe last one is to compare the first n characters.\n\nstrchrTo find a character in a string.\n#include<stdio.h>#include <string.h>#include <stdlib.h>int main(int argc, char const *argv[]){ char s[] = "hello,world!"; char *p = strchr(s,'l'); printf("%s\\n",p); char c = *p; *p = '\\0'; printf("%c\\n",c); char *p3 = (void*)malloc(strlen(s)+1); strcpy(p3, s); printf("%s\\n",p3); free(p3); char *p1 = strchr((p+1), 'l'); char *p2 = strchr((p1+1), 'l'); printf("%s\\n",p1); printf("%s\\n",p2); return 0;}\n\nThe running results are as follows:\nllo,world!lhelo,world!ld!\n\nEnumerationenum type {num_0,num_1,num_2,……,num_n};\n\nYou can use the name in curly braces, where num_0 through num_n represents the constants 0 through n.\nFor instance:\nenum colors {red,yellow,green};// Here,red == 0, yellow == 1, green == 2 \n\nenum type {num_0,num_1,num_2,……,num_n, number of type};\n\nThat’s just right. The last number of type is exactly the number of type. It’s a little trick.\nData structure#include <stdio.h>struct date { int day; int month; int year;};//Structure type Declarationstruct date { int day; int month; int year;} today;//This is another formint main(){ struct date today; today.day = 25; today.month = 3; today.year = 2021; today = (struct date){25,3,2021}; printf("Today is %i-%i-%i.\\n", today.year,today.month,today.day); return 0;}\n\nThis means that you declare a data structure type, and when you use it, you define a variable that contains all the variables in the data structure.\nThe structure members of a data structure do not have to be of the same variable type, and an array can only be of one type.\nData structures can perform structure operations .\nAssigning values to or between structure variables is a one-to-one correspondence; the former requires curly braces.\nThe name of the structure variable is not the address of the structure variable, so you need to define the pointer using &.\nA data structure can be entered as a function parameter, but unlike an array, the entire structure is passed into the function as the value of the parameter, creating a new structure variable inside the function and copying the value of the caller’s structure.\nYou can also return a struct.\nCustom data typesA typedef can give an alias to a data type.\ntypedef long int64_t;typedef struct ADate { int month; int day; int year;} Date;int64_t i = 100000000000;Date d = {9, 1, 2005, };\n\nUnion带参数的宏一定要有括号,结尾不能加分号。\n","categories":["递归这个世界 · 编程","编程语言"],"tags":["Programming","c"]},{"title":"JAVA","url":"/2022/05/25/note/Programming/Language/Java/","content":"\n\n\n📚 学习 Java 过程中的笔记和个人理解。\n\n\n\n包裹类型Java的系统类库中有一些包裹类型,其封装了一些比较好用的函数。\npackage com.company;//import javax.swing.*;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); final int SIZE = 3; Integer a; System.out.println(Integer.MIN_VALUE); System.out.println(Integer.MAX_VALUE); System.out.println(Character.isDigit('a')); System.out.println(Character.isDigit('4')); System.out.println(Character.toLowerCase('I')); }}\n\n输出结果为:\n-21474836482147483647falsetruei\n\nMath 类型abs\npackage com.company;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println(Math.abs(-12)); }}\n\n输出结果为放入数字的绝对值:\n12\n\nround\npackage com.company;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println(Math.round(10.349)); }}\n\n输出结果为将浮点数的小数部分四舍五入后得到的结果:\n10\n\nrandom\npackage com.company;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println((int)(Math.random()*100)); }}\n\n这是随机产生一个范围为0到1的浮点数,可以通过以上代码得到随机范围内的整数。pow\npackage com.company;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println(Math.pow(2, 20)); }}\n\npow是计算某个数的某次方,计算的类型是浮点数:\n1048576.0\n\n输入字符串in.next():读入一个单词,结束的标志是空格(包括空格,tab,回车)。\nin.nextLine():读入一整行。\n字符串操作比较两个字符串是否相等: s1.equals(s2)\n比较两个字符串的大小: s1.comnpareTo(s2) ,输出结果是数字,负数,正数,或者零。其本质是将两个字符串对应的Unicode码分别相加再将二者相减。\n访问字符串中的单个字符: s.charAt(index) ,返回在index上的单个字符,index的范围是0到length()-1,第一个字符的index是0,与数组相同。但是不能用for-each循环来遍历字符串。\n得到子串: s.substring(n) ,得到从n 号位置到末尾的全部内容;s.substring(b,e) 得到从b 号位置到e 号位置之前的内容。\n寻找字符: s.indexOf(c) ,找到字符c 所在的位置,-1 表示不存在;s.indexOf(c,n) ,从n号位置开始寻找c ;s.indexOf(t) ,找到字符串t 所在的位置;s.lastIndexOf(c) , s.lastIndexOf(c,n) , s.lastIndexOf(t) ,从==右边==开始找。返回值都是所找到的位置。\n当需要寻找的字符存在数量不止一个时,可用以下代码将其全部找出:\npackage com.company;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = new String("12455323412198467182371263142867351923107241"); for (int i = -1; i < s.length(); ) { i = s.indexOf('2', i+1); if (i == -1) break; System.out.println(i); } }}\n\n输出结果为:\n16101923283641\n\n成员函数与成员变量成员函数调用自身的成员函数时会自动带上this 。\nJava中本地变量未被赋予初始值则不能被使用。\n构造函数没有返回类型。\n构造函数可以重载。\npackage diyizhou;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); Fraction a = new Fraction(in.nextInt(), in.nextInt()); Fraction b = new Fraction(in.nextInt(),in.nextInt()); a.print(); b.print(); a.plus(b).print(); a.multiply(b).plus(new Fraction(5,6)).print(); a.print(); b.print(); System.out.println(a.toDouble()); in.close(); }}class Fraction { int denominator = 0; int numberator = 0; Fraction(int numberator, int denominator) { if (denominator > 0){ this.denominator = denominator; this.numberator = numberator; } else{ System.out.println("分母必须为大于零的数!"); System.exit(0); } } double toDouble() { return numberator*1.0/denominator; } Fraction plus(Fraction r) { if (r.denominator != this.denominator) { return new Fraction(this.numberator*r.denominator + this.denominator*r.numberator, this.denominator*r.denominator); } else { return new Fraction(this.numberator + r.numberator, this.denominator); } } Fraction multiply(Fraction r) { return new Fraction(this.numberator*r.numberator, this.denominator*r.denominator); } void print() { int min; if (this.denominator != 0 && this.numberator == this.denominator) { System.out.println("1"); return; } else if (numberator == 0) { System.out.println("0"); return; } else { min = Math.min(this.numberator, this.denominator); } if (min > 1){ for (int i = 2; i <= min; i++) { if (this.numberator % i == 0 && this.denominator % i == 0) { this.numberator /= i; this.denominator /= i; i = 2; } } } System.out.println(this.numberator + "/" + this.denominator); }}\n\n对象的交互通过同一个类创建了两个对象,那么两个对象应该是相互独立的,为了使两个对象有交互作用,就必须有“第三只手”来操作,那便是使一个新的类包含这两个对象,也就是说在新类中创建两个需要使用的对象,通过新类来在操作两个对象的交互。\npackage clock;public class Display { private int value = 0; private int limit = 0; Display(int limit){ this.limit = limit; } public void increase() { value ++; if (value == limit) { value = 0; } } public int getValue(){ return value; } public static void main(String[] args) { Display h = new Display(24); for (;;) { h.increase(); System.out.println(h.getValue()); } }}\n\npackage clock;public class Clock { private Display hour = new Display(24); private Display minute = new Display(60); public void start () { while (true){ minute.increase(); if ( minute.getValue() == 0) { hour.increase(); } System.out.printf("%02d:%02d\\n", hour.getValue(), minute.getValue()); } } public static void main(String[] args) { Clock clock = new Clock(); clock.start(); }}\n\n访问权限成员变量应当是私有的,用以保护成员变量不被外界随意的修改,让其按照类的设计者的意图运作。\nprivate:只类内可以访问,但同一个类的不同对象也能访问,类内指的是类的成员函数和定义初始化。\npublic: 随意访问。\nfriendly: 未加访问权限,则默认是friendly,意思是只允许在同一个包的其他类访问。\npublic的类可以在别的编译单元中使用。\npublic的类必须在自己的文件中,即文件名与类名必须相同。\n一个编译单元中只能有一个类是public,这是为了让每一个编译单元都有单一的公共接口,用public类来表现,该接口可以按要求包含众多支持包访问权限的类。\nStaticstatic:JAVA中的类变量与C++中的静态成员变量相似,类变量属于类而不属于任何一个单一的对象,同一个类的类变量改变之后,无论以那种方式访问类变量,其值都是一样的。\n\n函数前的static意为此函数不属于任何对象,而是属于这个类。static函数中可以直接调用或使用对象其他的static函数,但对于非static函数,只能通过对象调用。但是在static函数中调用的static函数里也不能直接访问非static成员。\n类函数中没有this, 因为this是用于标识究竟是哪个对象在调用或访问。\n\n继承与多态Java中的对象变量都是多态的,能保存不止一种类型的对象。比如声明类型的对象或者其子类的对象。事实上,多态的本质是为了解决类型嵌套的问题。\n向上造型: 当把子类的对象赋给父类的变量的时候,就发生了向上造型。\n造型子类的对象可以赋值给父类的变量,但父类的对象不能赋值给子类的变量。\n造型时并没有转换类型,而是指针重新指向另一个类型。\n","categories":["递归这个世界 · 编程","编程语言"],"tags":["Programming","Java"]},{"title":"C Plus Plus - Basic","url":"/2022/05/25/note/Programming/Language/cpp-1/","content":"\n📚 学习c++过程中的一些笔记和个人想法,用以查找\n\n\n\n\n一、初识1.1 注释作用:在代码中加一些说明和解释,方便自己或其他程序员程序员阅读代码\n两种格式\n\n单行注释:// 描述信息\n通常放在一行代码的上方,或者一条语句的末尾,对该行代码说明\n\n\n多行注释: /* 描述信息 */\n通常放在一段代码的上方,对该段代码做整体说明\n\n\n\n\n提示:编译器在编译代码时,会忽略注释的内容\n\n1.3 变量作用:给一段指定的内存空间起名,方便操作这段内存\n语法:数据类型 变量名 = 初始值;\n示例:\n#include<iostream>using namespace std;int main() { //变量的定义 //语法:数据类型 变量名 = 初始值 int a = 10; cout << "a = " << a << endl; return 0;}\n\n\n注意:cpp在创建变量时,必须给变量一个初始值,否则会报错\n\n1.4 常量作用 :用于记录程序中不可更改的数据cpp定义常量两种方式\n\n#define 宏常量: #define 常量名 常量值\n通常在文件上方定义,表示一个常量\n\n\nconst 修饰的变量 const 数据类型 常量名 = 常量值\n通常在变量定义前加关键字const,修饰该变量为常量,不可修改示例:\n\n\n\n//1、宏常量#define day 7int main() { cout << "一周里总共有 " << day << " 天" << endl; //day = 8; //报错,宏常量不可以修改 //2、const修饰变量 const int month = 12; cout << "一年里总共有 " << month << " 个月份" << endl; //month = 24; //报错,常量是不可以修改的 return 0;}\n\n1.5 关键字作用: 关键字是 cpp中预先保留的单词(标识符)\n\n在定义变量或者常量时候,不要用关键字\n\ncpp关键字如下:\n\n提示:在给变量或者常量起名称时候,不要用 cpp得关键字,否则会产生歧义\n\n1.6 标识符命名规则作用:cpp规定给标识符(变量、常量)命名时,有一套自己的规则\n\n标识符不能是关键字\n标识符只能由字母、数字、下划线组成\n第一个字符必须为字母或下划线\n标识符中字母区分大小写\n\n\n建议:给标识符命名时,争取做到见名知意的效果,方便自己和他人的阅读\n\n二、数据类型cpp规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存\n2.1 整型作用:整型变量表示的是整数类型的数据cpp中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同:\n\n\n\n数据类型\n占用空间\n取值范围\n\n\n\nshort(短整型)\n2字节\n(-2^15 ~ 2^15-1)\n\n\nint(整型)\n4字节\n(-2^31 ~ 2^31-1)\n\n\nlong(长整形)\nWindows为4字节,Linux为4字节(32位),8字节(64位)\n(-2^31 ~ 2^31-1)\n\n\nlong long(长长整形)\n8字节\n(-2^63 ~ 2^63-1)\n\n\n2.2 sizeof关键字作用: 利用sizeof关键字可以统计数据类型所占内存大小\n语法: sizeof( 数据类型 / 变量)\n示例:\nint main() { cout << "short 类型所占内存空间为: " << sizeof(short) << endl; cout << "int 类型所占内存空间为: " << sizeof(int) << endl; cout << "long 类型所占内存空间为: " << sizeof(long) << endl; cout << "long long 类型所占内存空间为: " << sizeof(long long) << endl; return 0;}\n\n\n结论:short < int <= long <= long long\n\n2.3 实型(浮点型)作用:用于表示小数浮点型变量分为两种:\n\n单精度float\n\n双精度double两者的区别在于表示的有效数字范围不同。\n\n\n\n数据类型\n占用空间\n有效数字范围\n\n\n\nfloat\n4字节\n7位有效数字\n\n\ndouble\n8字节\n15~16位有效数字\n\n\n示例:\n\n\n\n\n\n\nint main() { float f1 = 3.14f; double d1 = 3.14; cout << f1 << endl; cout << d1<< endl; cout << "float sizeof = " << sizeof(f1) << endl; cout << "double sizeof = " << sizeof(d1) << endl; //科学计数法 float f2 = 3e2; // 3 * 10 ^ 2 cout << "f2 = " << f2 << endl; float f3 = 3e-2; // 3 * 0.1 ^ 2 cout << "f3 = " << f3 << endl; return 0;}\n\n2.4 字符型作用: 字符型变量用于显示单个字符语法: char ch = 'a';\n\n注意1:在显示字符型变量时,用单引号将字符括起来,不要用双引号注意2:单引号内只能有一个字符,不可以是字符串\n\n\nc和cpp中字符型变量只占用1个字节。\n字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元示例:\n\nint main() { char ch = 'a'; cout << ch << endl; cout << sizeof(char) << endl; //ch = "abcde"; //错误,不可以用双引号 //ch = 'abcde'; //错误,单引号内只能引用一个字符 cout << (int)ch << endl; //查看字符a对应的ASCII码 ch = 97; //可以直接用ASCII给字符型变量赋值 cout << ch << endl; system("pause"); return 0;}\n\nASCII码表格:\n\n\n\nASCII值\n控制字符\nASCII值\n字符\nASCII值\n字符\nASCII值\n字符\n\n\n\n0\nNUT\n32\n(space)\n64\n@\n96\n、\n\n\n1\nSOH\n33\n!\n65\nA\n97\na\n\n\n2\nSTX\n34\n“\n66\nB\n98\nb\n\n\n3\nETX\n35\n#\n67\nC\n99\nc\n\n\n4\nEOT\n36\n$\n68\nD\n100\nd\n\n\n5\nENQ\n37\n%\n69\nE\n101\ne\n\n\n6\nACK\n38\n&\n70\nF\n102\nf\n\n\n7\nBEL\n39\n,\n71\nG\n103\ng\n\n\n8\nBS\n40\n(\n72\nH\n104\nh\n\n\n9\nHT\n41\n)\n73\nI\n105\ni\n\n\n10\nLF\n42\n*\n74\nJ\n106\nj\n\n\n11\nVT\n43\n+\n75\nK\n107\nk\n\n\n12\nFF\n44\n,\n76\nL\n108\nl\n\n\n13\nCR\n45\n-\n77\nM\n109\nm\n\n\n14\nSO\n46\n.\n78\nN\n110\nn\n\n\n15\nSI\n47\n/\n79\nO\n111\no\n\n\n16\nDLE\n48\n0\n80\nP\n112\np\n\n\n17\nDCI\n49\n1\n81\nQ\n113\nq\n\n\n18\nDC2\n50\n2\n82\nR\n114\nr\n\n\n19\nDC3\n51\n3\n83\nS\n115\ns\n\n\n20\nDC4\n52\n4\n84\nT\n116\nt\n\n\n21\nNAK\n53\n5\n85\nU\n117\nu\n\n\n22\nSYN\n54\n6\n86\nV\n118\nv\n\n\n23\nTB\n55\n7\n87\nW\n119\nw\n\n\n24\nCAN\n56\n8\n88\nX\n120\nx\n\n\n25\nEM\n57\n9\n89\nY\n121\ny\n\n\n26\nSUB\n58\n:\n90\nZ\n122\nz\n\n\n27\nESC\n9\n;\n91\n[\n123\n{\n\n\nASCII 码大致由以下两部分组成:\n\nASCII 非打印控制字符: ASCII 表上的数字 0-31 分配给了控制字符,用于控制像打印机等一些外围设备。\nASCII 打印字符:数字 32-126 分配给了能在键盘上找到的字符,当查看或打印文档时就会出现。\n\n2.5 转义字符作用: 用于表示一些不能显示出来的ASCII字符现阶段我们常用的转义字符有:\\n \\\\ \\t\n\n\n\n转义字符\n含义\nASCII码值(十进制)\n\n\n\n\\a\n警报\n007\n\n\n\\b\n退格(BS) ,将当前位置移到前一列\n008\n\n\n\\f\n换页(FF),将当前位置移到下页开头\n012\n\n\n\\n\n换行(LF) ,将当前位置移到下一行开头\n010\n\n\n\\r\n回车(CR) ,将当前位置移到本行开头\n013\n\n\n\\t\n水平制表(HT) (跳到下一个TAB位置)\n009\n\n\n\\v\n垂直制表(VT)\n011\n\n\n\\\\\n代表一个反斜线字符”"\n092\n\n\n'\n代表一个单引号(撇号)字符\n039\n\n\n"\n代表一个双引号字符\n034\n\n\n?\n代表一个问号\n063\n\n\n\\0\n数字0\n000\n\n\n\\ddd\n8进制转义字符,d范围0~7\n3位8进制\n\n\n\\xhh\n16进制转义字符,h范围09,af,A~F\n3位16进制\n\n\n示例:\n\n\n\n\nint main() { cout << "\\\\" << endl; cout << "\\tHello" << endl; cout << "\\n" << endl; return 0;}\n\n2.6 字符串型作用:用于表示一串字符两种风格\n\nC风格字符串: char 变量名[] = "字符串值"示例:\n\nint main() { char str1[] = "hello world"; cout << str1 << endl; return 0;}``` > 注意:C风格的字符串要用双引号括起来 2. **cpp风格字符串**: `string 变量名 = "字符串值"` 示例: ```cpp int main() { string str = "hello world"; cout << str << endl; return 0;}\n\n\n注意:cpp风格字符串,需要加入头文件#include <string>\n\n2.7 布尔类型 bool作用: 布尔数据类型代表真或假的值bool类型只有两个值:\n\ntrue — 真(本质是1)\nfalse — 假(本质是0)bool类型占1个字节大小示例:\n\nint main() { bool flag = true; cout << flag << endl; // 1 flag = false; cout << flag << endl; // 0 cout << "size of bool = " << sizeof(bool) << endl; //1 return 0;}\n\n2.8 数据的输入作用:用于从键盘获取数据语法: cin >> 变量示例:\nint main(){ //整型输入 int a = 0; cout << "请输入整型变量:" << endl; cin >> a; cout << a << endl; //浮点型输入 double d = 0; cout << "请输入浮点型变量:" << endl; cin >> d; cout << d << endl; //字符型输入 char ch = 0; cout << "请输入字符型变量:" << endl; cin >> ch; cout << ch << endl; //字符串型输入 string str; cout << "请输入字符串型变量:" << endl; cin >> str; cout << str << endl; //布尔类型输入 bool flag = true; cout << "请输入布尔型变量:" << endl; cin >> flag; cout << flag << endl; system("pause"); return EXIT_SUCCESS;}\n\n三、运算符作用: 用于执行代码的运算本章我们主要讲解以下几类运算符:\n\n\n\n运算符类型\n作用\n\n\n\n算术运算符\n用于处理四则运算\n\n\n赋值运算符\n用于将表达式的值赋给变量\n\n\n比较运算符\n用于表达式的比较,并返回一个真值或假值\n\n\n逻辑运算符\n用于根据表达式的值返回真值或假值\n\n\n3.1 算术运算符作用: 用于处理四则运算算术运算符包括以下符号:\n\n\n\n运算符\n术语\n示例\n结果\n\n\n\n+\n正号\n+3\n3\n\n\n-\n负号\n-3\n-3\n\n\n+\n加\n10 + 5\n15\n\n\n-\n减\n10 - 5\n5\n\n\n*\n乘\n10 * 5\n50\n\n\n/\n除\n10 / 5\n2\n\n\n%\n取模(取余)\n10 % 3\n1\n\n\n++\n前置递增\na=2; b=++a;\na=3; b=3;\n\n\n++\n后置递增\na=2; b=a++;\na=3; b=2;\n\n\n–\n前置递减\na=2; b=–a;\na=1; b=1;\n\n\n–\n后置递减\na=2; b=a–;\na=1; b=2;\n\n\n示例1:\n\n\n\n\n\n//加减乘除int main() { int a1 = 10; int b1 = 3; cout << a1 + b1 << endl; cout << a1 - b1 << endl; cout << a1 * b1 << endl; cout << a1 / b1 << endl; //两个整数相除结果依然是整数 int a2 = 10; int b2 = 20; cout << a2 / b2 << endl; int a3 = 10; int b3 = 0; //cout << a3 / b3 << endl; //报错,除数不可以为0 //两个小数可以相除 double d1 = 0.5; double d2 = 0.25; cout << d1 / d2 << endl; return 0;}\n\n\n总结:在除法运算中,除数不能为0示例2:\n\n//取模int main() { int a1 = 10; int b1 = 3; cout << 10 % 3 << endl; int a2 = 10; int b2 = 20; cout << a2 % b2 << endl; int a3 = 10; int b3 = 0; //cout << a3 % b3 << endl; //取模运算时,除数也不能为0 //两个小数不可以取模 double d1 = 3.14; double d2 = 1.1; //cout << d1 % d2 << endl; return 0;}\n\n\n总结:只有整型变量可以进行取模运算示例3:\n\n//递增int main() { //后置递增 int a = 10; a++; //等价于a = a + 1 cout << a << endl; // 11 //前置递增 int b = 10; ++b; cout << b << endl; // 11 //区别 //前置递增先对变量进行++,再计算表达式 int a2 = 10; int b2 = ++a2 * 10; cout << b2 << endl; //后置递增先计算表达式,后对变量进行++ int a3 = 10; int b3 = a3++ * 10; cout << b3 << endl; return 0;}\n\n\n总结:前置递增先对变量进行++,再计算表达式,后置递增相反\n\n3.2 赋值运算符作用: 用于将表达式的值赋给变量赋值运算符包括以下几个符号:\n\n\n\n运算符\n术语\n示例\n结果\n\n\n\n=\n赋值\na=2; b=3;\na=2; b=3;\n\n\n+=\n加等于\na=0; a+=2;\na=2;\n\n\n-=\n减等于\na=5; a-=3;\na=2;\n\n\n*=\n乘等于\na=2; a*=2;\na=4;\n\n\n/=\n除等于\na=4; a/=2;\na=2;\n\n\n%=\n模等于\na=3; a%2;\na=1;\n\n\n示例:\n\n\n\n\n\nint main() { //赋值运算符 // = int a = 10; a = 100; cout << "a = " << a << endl; // += a = 10; a += 2; // a = a + 2; cout << "a = " << a << endl; // -= a = 10; a -= 2; // a = a - 2 cout << "a = " << a << endl; // *= a = 10; a *= 2; // a = a * 2 cout << "a = " << a << endl; // /= a = 10; a /= 2; // a = a / 2; cout << "a = " << a << endl; // %= a = 10; a %= 2; // a = a % 2; cout << "a = " << a << endl; return 0;}\n\n3.3 比较运算符作用:用于表达式的比较,并返回一个真值或假值比较运算符有以下符号:\n\n\n\n运算符\n术语\n示例\n结果\n\n\n\n***\n相等于\n4 *** 3\n0\n\n\n!=\n不等于\n4 != 3\n1\n\n\n<\n小于\n4 < 3\n0\n\n\n>\n大于\n4 > 3\n1\n\n\n<=\n小于等于\n4 <= 3\n0\n\n\n>=\n大于等于\n4 >= 1\n1\n\n\n示例:\n\n\n\n\n\nint main() { int a = 10; int b = 20; cout << (a *** b) << endl; // 0 cout << (a != b) << endl; // 1 cout << (a > b) << endl; // 0 cout << (a < b) << endl; // 1 cout << (a >= b) << endl; // 0 cout << (a <= b) << endl; // 1 return 0;}\n\n\n注意:C和cpp 语言的比较运算中, “真”用数字“1”来表示, “假”用数字“0”来表示。\n\n3.4 逻辑运算符作用: 用于根据表达式的值返回真值或假值逻辑运算符有以下符号:\n\n\n\n运算符\n术语\n示例\n结果\n\n\n\n!\n非\n!a\n如果a为假,则!a为真; 如果a为真,则!a为假。\n\n\n&&\n与\na && b\n如果a和b都为真,则结果为真,否则为假。\n\n\n\\\n\\\n\n或\n\n\n示例1: 逻辑非\n\n\n\n\n\n//逻辑运算符 --- 非int main() { int a = 10; cout << !a << endl; // 0 cout << !!a << endl; // 1 return 0;}\n\n\n非:真变假,假变真示例2: 逻辑与\n\n//逻辑运算符 --- 与int main() { int a = 10; int b = 10; cout << (a && b) << endl;// 1 a = 10; b = 0; cout << (a && b) << endl;// 0 a = 0; b = 0; cout << (a && b) << endl;// 0 return 0;}\n\n\n与: 同时真则为真,否则皆为假示例3:逻辑或\n\n//逻辑运算符 --- 或int main() { int a = 10; int b = 10; cout << (a || b) << endl;// 1 a = 10; b = 0; cout << (a || b) << endl;// 1 a = 0; b = 0; cout << (a || b) << endl;// 0 return 0;}\n\n\n或:同时为假则假,否则为真\n\n四、程序流程结构C/cpp支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构\n\n顺序结构: 程序按顺序执行,不发生跳转\n选择结构: 依据条件是否满足,有选择的执行相应功能\n循环结构: 依据条件是否满足,循环多次执行某段代码\n\n4.1 选择结构4.1.1 if语句作用: 执行满足条件的语句if语句的三种形式\n\n单行格式if语句\n\n多行格式if语句\n\n多条件的if语句\n\n\n\n单行格式if语句:if(条件){ 条件满足执行的语句 }示例:\nint main() { //选择结构-单行if语句 //输入一个分数,如果分数大于600分,视为考上一本大学,并在屏幕上打印 int score = 0; cout << "请输入一个分数:" << endl; cin >> score; cout << "您输入的分数为: " << score << endl; //if语句 //注意事项,在if判断语句后面,不要加分号 if (score > 600) { cout << "我考上了一本大学!!!" << endl; } return 0;}\n\n\n注意:if条件表达式后不要加分号\n\n\n多行格式if语句:if(条件){ 条件满足执行的语句 }else{ 条件不满足执行的语句 };示例:\n\nint main() { int score = 0; cout << "请输入考试分数:" << endl; cin >> score; if (score > 600) { cout << "我考上了一本大学" << endl; } else { cout << "我未考上一本大学" << endl; } return 0;}\n\n\n多条件的if语句:if(条件1){ 条件1满足执行的语句 }else if(条件2){条件2满足执行的语句}... else{ 都不满足执行的语句}示例:\n\nint main() { int score = 0; cout << "请输入考试分数:" << endl; cin >> score; if (score > 600) { cout << "我考上了一本大学" << endl; } else if (score > 500) { cout << "我考上了二本大学" << endl; } else if (score > 400) { cout << "我考上了三本大学" << endl; } else { cout << "我未考上本科" << endl; } return 0;}\n\n嵌套if语句:在if语句中,可以嵌套使用if语句,达到更精确的条件判断案例需求:\n\n提示用户输入一个高考考试分数,根据分数做如下判断\n分数如果大于600分视为考上一本,大于500分考上二本,大于400考上三本,其余视为未考上本科;\n在一本分数中,如果大于700分,考入北大,大于650分,考入清华,大于600考入人大。示例:\n\nint main() { int score = 0; cout << "请输入考试分数:" << endl; cin >> score; if (score > 600) { cout << "我考上了一本大学" << endl; if (score > 700) { cout << "我考上了北大" << endl; } else if (score > 650) { cout << "我考上了清华" << endl; } else { cout << "我考上了人大" << endl; } } else if (score > 500) { cout << "我考上了二本大学" << endl; } else if (score > 400) { cout << "我考上了三本大学" << endl; } else { cout << "我未考上本科" << endl; } return 0;}\n\n练习案例: 三只小猪称体重有三只小猪ABC,请分别输入三只小猪的体重,并且判断哪只小猪最重?\n4.1.2 三目运算符作用: 通过三目运算符实现简单的判断语法:表达式1 ? 表达式2 :表达式3解释:如果表达式1的值为真,执行表达式2,并返回表达式2的结果;如果表达式1的值为假,执行表达式3,并返回表达式3的结果。示例:\nint main() { int a = 10; int b = 20; int c = 0; c = a > b ? a : b; cout << "c = " << c << endl; //cpp中三目运算符返回的是变量,可以继续赋值 (a > b ? a : b) = 100; cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl; return 0;}\n\n\n总结:和if语句比较,三目运算符优点是短小整洁,缺点是如果用嵌套,结构不清晰\n\n4.1.3 switch语句作用: 执行多条件分支语句语法:\nswitch(表达式){ case 结果1:执行语句;break; case 结果2:执行语句;break; ... default:执行语句;break;}\n\n示例:\nint main() { //请给电影评分 //10 ~ 9 经典 // 8 ~ 7 非常好 // 6 ~ 5 一般 // 5分以下 烂片 int score = 0; cout << "请给电影打分" << endl; cin >> score; switch (score) { case 10: case 9: cout << "经典" << endl; break; case 8: cout << "非常好" << endl; break; case 7: case 6: cout << "一般" << endl; break; default: cout << "烂片" << endl; break; } return 0;}\n\n\n注意1:switch语句中表达式类型只能是整型或者字符型!注意2:case里如果没有break,那么程序会一直向下执行总结:与if语句比,对于多条件判断时,switch的结构清晰,执行效率高,缺点是switch不可以判断区间\n\n4.2 循环结构4.2.1 while循环语句作用: 满足循环条件,执行循环语句语法: while(循环条件){ 循环语句 }解释: 只要循环条件的结果为真,就执行循环语句示例:\nint main() { int num = 0; while (num < 10) { cout << "num = " << num << endl; num++; } return 0;}\n\n\n注意:在执行循环语句时候,程序必须提供跳出循环的出口,否则出现死循环while循环练习案例: 猜数字案例描述: 系统随机生成一个1到100之间的数字,玩家进行猜测,如果猜错,提示玩家数字过大或过小,如果猜对恭喜玩家胜利,并且退出游戏。\n\n#include "xr.cpp"#include <cstdlib>#include <ctime>#include <iostream>#include <ostream>#include <random>int main(int, char **) { srand(time(0)); auto answer = rand() % 100; auto theNumber = 0; while (std::cin >> theNumber) { if (theNumber <= 0 || theNumber >= 100) { std::cout << "Please input a number at 1 ~ 99!" << std::endl; } else { if (theNumber > answer) { std::cout << "The number you input is too large!" << std::endl; } else if (theNumber < answer) { std::cout << "The number you input is too small!" << std::endl; } else { std::cout << "Congratulation!" << std::endl; return 0; } } }}\n\n4.2.2 do…while循环语句作用: 满足循环条件,执行循环语句语法: do{ 循环语句 } while(循环条件);注意: 与while的区别在于do…while会先执行一次循环语句,再判断循环条件示例:\nint main() { int num = 0; do { cout << num << endl; num++; } while (num < 10); system("pause"); return 0;}\n\n\n总结:与while循环区别在于,do…while先执行一次循环语句,再判断循环条件\n\n\n练习案例:水仙花数案例描述: 水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身例如:1^3 + 5^3+ 3^3 = 153请利用do…while语句,求出所有3位数中的水仙花数\n\n4.2.3 for循环语句作用: 满足循环条件,执行循环语句语法:for(起始表达式;条件表达式;末尾循环体) { 循环语句; }示例:\nint main() { for (int i = 0; i < 10; i++) { cout << i << endl; } return 0;}\n\n\n注意:for循环中的表达式,要用分号进行分隔总结:while , do…while, for都是开发中常用的循环语句,for循环结构比较清晰,比较常用练习案例:敲桌子案例描述:从1开始数到数字100, 如果数字个位含有7,或者数字十位含有7,或者该数字是7的倍数,我们打印敲桌子,其余数字直接打印输出。\n\n4.2.4 嵌套循环作用: 在循环体中再嵌套一层循环,解决一些实际问题示例:\nint main() { //外层循环执行1次,内层循环执行1轮 for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { cout << "*" << " "; } cout << endl; } return 0;}\n\n练习案例: 乘法口诀表\n4.3 跳转语句4.3.1 break语句作用: 用于跳出选择结构或者循环结构break使用的时机:\n\n出现在switch条件语句中,作用是终止case并跳出switch\n出现在循环语句中,作用是跳出当前的循环语句\n出现在嵌套循环中,跳出最近的内层循环语句示例1:\n\nint main() { //1、在switch 语句中使用break cout << "请选择您挑战副本的难度:" << endl; cout << "1、普通" << endl; cout << "2、中等" << endl; cout << "3、困难" << endl; int num = 0; cin >> num; switch (num) { case 1: cout << "您选择的是普通难度" << endl; break; case 2: cout << "您选择的是中等难度" << endl; break; case 3: cout << "您选择的是困难难度" << endl; break; } return 0;}\n\n示例2:\nint main() { //2、在循环语句中用break for (int i = 0; i < 10; i++) { if (i *** 5) { break; //跳出循环语句 } cout << i << endl; } return 0;}\n\n示例3:\nint main() { //在嵌套循环语句中使用break,退出内层循环 for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (j *** 5) { break; } cout << "*" << " "; } cout << endl; } return 0;}\n\n4.3.2 continue语句作用: 在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环示例:\nint main() { for (int i = 0; i < 100; i++) { if (i % 2 *** 0) { continue; } cout << i << endl; } return 0;}\n\n\n注意:continue并没有使整个循环终止,而break会跳出循环\n\n4.3.3 goto语句作用: 可以无条件跳转语句语法: goto 标记;解释: 如果标记的名称存在,执行到goto语句时,会跳转到标记的位置示例:\nint main() { cout << "1" << endl; goto FLAG; cout << "2" << endl; cout << "3" << endl; cout << "4" << endl; FLAG: cout << "5" << endl; return 0;}\n\n\n注意:在程序中不建议使用goto语句,以免造成程序流程混乱\n\n五、数组5.1 概述所谓数组,就是一个集合,里面存放了相同类型的数据元素特点1: 数组中的每个数据元素都是相同的数据类型特点2: 数组是由连续的内存位置组成的\n5.2 一维数组5.2.1 一维数组定义方式一维数组定义的三种方式:\n\n数据类型 数组名[ 数组长度 ];\n数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};\n数据类型 数组名[ ] = { 值1,值2 ...};示例:\n\nint main() { //定义方式1 //数据类型 数组名[元素个数]; int score[10]; //利用下标赋值 score[0] = 100; score[1] = 99; score[2] = 85; //利用下标输出 cout << score[0] << endl; cout << score[1] << endl; cout << score[2] << endl; //第二种定义方式 //数据类型 数组名[元素个数] = {值1,值2 ,值3 ...}; //如果{}内不足10个数据,剩余数据用0补全 int score2[10] = { 100, 90,80,70,60,50,40,30,20,10 }; //逐个输出 //cout << score2[0] << endl; //cout << score2[1] << endl; //一个一个输出太麻烦,因此可以利用循环进行输出 for (int i = 0; i < 10; i++) { cout << score2[i] << endl; } //定义方式3 //数据类型 数组名[] = {值1,值2 ,值3 ...}; int score3[] = { 100,90,80,70,60,50,40,30,20,10 }; for (int i = 0; i < 10; i++) { cout << score3[i] << endl; } return 0;}\n\n\n总结1:数组名的命名规范与变量名命名规范一致,不要和变量重名总结2:数组中下标是从0开始索引\n\n5.2.2 一维数组数组名一维数组名称的用途:\n\n可以统计整个数组在内存中的长度\n可以获取数组在内存中的首地址示例:\n\nint main() { //数组名用途 //1、可以获取整个数组占用内存空间大小 int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; cout << "整个数组所占内存空间为: " << sizeof(arr) << endl; cout << "每个元素所占内存空间为: " << sizeof(arr[0]) << endl; cout << "数组的元素个数为: " << sizeof(arr) / sizeof(arr[0]) << endl; //2、可以通过数组名获取到数组首地址 cout << "数组首地址为: " << (int)arr << endl; cout << "数组中第一个元素地址为: " << (int)&arr[0] << endl; cout << "数组中第二个元素地址为: " << (int)&arr[1] << endl; //arr = 100; 错误,数组名是常量,因此不可以赋值 return 0;}\n\n\n注意:数组名是常量,不可以赋值总结1:直接打印数组名,可以查看数组所占内存的首地址总结2:对数组名进行sizeof,可以获取整个数组占内存空间的大小\n\n练习案例1:五只小猪称体重案例描述:在一个数组中记录了五只小猪的体重,如:int arr[5] = {300,350,200,400,250};找出并打印最重的小猪体重。练习案例2: 数组元素逆置案例描述: 请声明一个5个元素的数组,并且将元素逆置.(如原数组元素为:1,3,2,5,4;逆置后输出结果为:4,5,2,3,1);\n5.2.3 冒泡排序作用: 最常用的排序算法,对数组内元素进行排序\n\n比较相邻的元素。如果第一个比第二个大,就交换他们两个。\n对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。\n重复以上的步骤,每次比较次数-1,直到不需要比较示例: 将数组 { 4,2,8,0,5,7,1,3,9 } 进行升序排序\n\nint main() { int arr[9] = { 4,2,8,0,5,7,1,3,9 }; for (int i = 0; i < 9 - 1; i++) { for (int j = 0; j < 9 - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } for (int i = 0; i < 9; i++) { cout << arr[i] << endl; } return 0;}\n\n5.3 二维数组二维数组就是在一维数组上,多加一个维度。\n5.3.1 二维数组定义方式二维数组定义的四种方式:\n\n数据类型 数组名[ 行数 ][ 列数 ];\n数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };\n数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};\n数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};\n\n\n建议:以上4种定义方式,利用第二种更加直观,提高代码的可读性示例:\n\nint main() { //方式1 //数组类型 数组名 [行数][列数] int arr[2][3]; arr[0][0] = 1; arr[0][1] = 2; arr[0][2] = 3; arr[1][0] = 4; arr[1][1] = 5; arr[1][2] = 6; for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { cout << arr[i][j] << " "; } cout << endl; } //方式2 //数据类型 数组名[行数][列数] = { {数据1,数据2 } ,{数据3,数据4 } }; int arr2[2][3] = { {1,2,3}, {4,5,6} }; //方式3 //数据类型 数组名[行数][列数] = { 数据1,数据2 ,数据3,数据4 }; int arr3[2][3] = { 1,2,3,4,5,6 }; //方式4 //数据类型 数组名[][列数] = { 数据1,数据2 ,数据3,数据4 }; int arr4[][3] = { 1,2,3,4,5,6 }; return 0;}\n\n\n总结:在定义二维数组时,如果初始化了数据,可以省略行数\n\n5.3.2 二维数组数组名\n查看二维数组所占内存空间\n\n获取二维数组首地址示例:\n\n\nint main() { //二维数组数组名 int arr[2][3] = { {1,2,3}, {4,5,6} }; cout << "二维数组大小: " << sizeof(arr) << endl; cout << "二维数组一行大小: " << sizeof(arr[0]) << endl; cout << "二维数组元素大小: " << sizeof(arr[0][0]) << endl; cout << "二维数组行数: " << sizeof(arr) / sizeof(arr[0]) << endl; cout << "二维数组列数: " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl; //地址 cout << "二维数组首地址:" << arr << endl; cout << "二维数组第一行地址:" << arr[0] << endl; cout << "二维数组第二行地址:" << arr[1] << endl; cout << "二维数组第一个元素地址:" << &arr[0][0] << endl; cout << "二维数组第二个元素地址:" << &arr[0][1] << endl; return 0;}\n\n\n总结1:二维数组名就是这个数组的首地址总结2:对二维数组名进行sizeof时,可以获取整个二维数组占用的内存空间大小\n\n5.3.3 二维数组应用案例考试成绩统计:案例描述:有三名同学(张三,李四,王五),在一次考试中的成绩分别如下表,请分别输出三名同学的总成绩\n\n\n\n\n语文\n数学\n英语\n\n\n\n张三\n100\n100\n100\n\n\n李四\n90\n50\n100\n\n\n王五\n60\n70\n80\n\n\n参考答案:\n\n\n\n\n\nint main() { int scores[3][3] = { {100,100,100}, {90,50,100}, {60,70,80}, }; string names[3] = { "张三","李四","王五" }; for (int i = 0; i < 3; i++) { int sum = 0; for (int j = 0; j < 3; j++) { sum += scores[i][j]; } cout << names[i] << "同学总成绩为: " << sum << endl; } return 0;}\n\n六、函数6.1 概述作用: 将一段经常使用的代码封装起来,减少重复代码一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能。\n6.2 函数的定义函数的定义一般主要有5个步骤:\n\n返回值类型\n函数名\n参数表列\n函数体语句\nreturn 表达式语法:\n\n返回值类型 函数名 (参数列表){ 函数体语句 return表达式}\n\n\n返回值类型 :一个函数可以返回一个值。在函数定义中\n\n函数名:给函数起个名称\n\n参数列表:使用该函数时,传入的数据\n\n函数体语句:花括号内的代码,函数内需要执行的语句\n\nreturn表达式: 和返回值类型挂钩,函数执行完后,返回相应的数据示例: 定义一个加法函数,实现两个数相加\n\n\n//函数定义int add(int num1, int num2){ int sum = num1 + num2; return sum;}\n\n6.3 函数的调用功能: 使用定义好的函数语法: 函数名(参数)示例:\n//函数定义int add(int num1, int num2) //定义中的num1,num2称为形式参数,简称形参{ int sum = num1 + num2; return sum;}int main() { int a = 10; int b = 10; //调用add函数 int sum = add(a, b);//调用时的a,b称为实际参数,简称实参 cout << "sum = " << sum << endl; a = 100; b = 100; sum = add(a, b); cout << "sum = " << sum << endl; return 0;}\n\n\n总结:函数定义里小括号内称为形参,函数调用时传入的参数称为实参\n\n6.4 值传递\n所谓值传递,就是函数调用时实参将数值传入给形参\n\n值传递时,如果形参发生,并不会影响实参示例:\n\n\nvoid swap(int num1, int num2){ cout << "交换前:" << endl; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl; int temp = num1; num1 = num2; num2 = temp; cout << "交换后:" << endl; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl; //return ; 当函数声明时候,不需要返回值,可以不写return}int main() { int a = 10; int b = 20; swap(a, b); cout << "mian中的 a = " << a << endl; cout << "mian中的 b = " << b << endl; return 0;}\n\n\n总结: 值传递时,形参是修饰不了实参的\n\n6.5 函数的常见样式常见的函数样式有4种\n\n无参无返\n有参无返\n无参有返\n有参有返示例:\n\n//函数常见样式//1、 无参无返void test01(){ //void a = 10; //无类型不可以创建变量,原因无法分配内存 cout << "this is test01" << endl; //test01(); 函数调用}//2、 有参无返void test02(int a){ cout << "this is test02" << endl; cout << "a = " << a << endl;}//3、无参有返int test03(){ cout << "this is test03 " << endl; return 10;}//4、有参有返int test04(int a, int b){ cout << "this is test04 " << endl; int sum = a + b; return sum;}\n\n6.6 函数的声明作用: 告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。\n\n函数的声明可以多次,但是函数的定义只能有一次示例:\n\n//声明可以多次,定义只能一次//声明int max(int a, int b);int max(int a, int b);//定义int max(int a, int b){ return a > b ? a : b;}int main() { int a = 100; int b = 200; cout << max(a, b) << endl; system("pause"); return 0;}\n\n6.7 函数的分文件编写作用: 让代码结构更加清晰函数分文件编写一般有4个步骤\n\n创建后缀名为.h的头文件\n创建后缀名为.cpp的源文件\n在头文件中写函数的声明\n在源文件中写函数的定义示例:\n\n//swap.h文件#include<iostream>using namespace std;//实现两个数字交换的函数声明void swap(int a, int b);\n\n//swap.cpp文件#include "swap.h"void swap(int a, int b){ int temp = a; a = b; b = temp; cout << "a = " << a << endl; cout << "b = " << b << endl;}\n\n//main函数文件#include "swap.h"int main() { int a = 100; int b = 200; swap(a, b); return 0;}\n\n七、指针7.1 指针的基本概念指针的作用: 可以通过指针间接访问内存\n\n内存编号是从0开始记录的,一般用十六进制数字表示\n可以利用指针变量保存地址\n\n7.2 指针变量的定义和使用指针变量定义语法: 数据类型 * 变量名;示例:\nint main() { //1、指针的定义 int a = 10; //定义整型变量a //指针定义语法: 数据类型 * 变量名 ; int * p; //指针变量赋值 p = &a; //指针指向变量a的地址 cout << &a << endl; //打印数据a的地址 cout << p << endl; //打印指针变量p //2、指针的使用 //通过*操作指针变量指向的内存 cout << "*p = " << *p << endl; return 0;}\n\n指针变量和普通变量的区别\n\n普通变量存放的是数据,指针变量存放的是地址\n指针变量可以通过” * “操作符,操作指针变量指向的内存空间,这个过程称为解引用\n\n\n总结1: 我们可以通过 & 符号 获取变量的地址总结2:利用指针可以记录地址总结3:对指针变量解引用,可以操作指针指向的内存\n\n7.3 指针所占内存空间提问:指针也是种数据类型,那么这种数据类型占用多少内存空间?示例:\nint main() { int a = 10; int * p; p = &a; //指针指向数据a的地址 cout << *p << endl; //* 解引用 cout << sizeof(p) << endl; cout << sizeof(char *) << endl; cout << sizeof(float *) << endl; cout << sizeof(double *) << endl; return 0;}\n\n\n总结:所有指针类型在32位操作系统下是4个字节\n\n7.4 空指针和野指针空指针:指针变量指向内存中编号为0的空间用途: 初始化指针变量注意: 空指针指向的内存是不可以访问的示例1:空指针\nint main() { //指针变量p指向内存地址编号为0的空间 int * p = NULL; //访问空指针报错 //内存编号0 ~255为系统占用内存,不允许用户访问 cout << *p << endl; return 0;}\n\n野指针:指针变量指向非法的内存空间示例2:野指针\nint main() { //指针变量p指向内存地址编号为0x1100的空间 int * p = (int *)0x1100; //访问野指针报错 cout << *p << endl; return 0;}\n\n\n总结:空指针和野指针都不是我们申请的空间,因此不要访问。\n\n7.5 const修饰指针const修饰指针有三种情况\n\nconst修饰指针 — 常量指针\nconst修饰常量 — 指针常量\nconst即修饰指针,又修饰常量示例:\n\nint main() { int a = 10; int b = 10; //const修饰的是指针,指针指向可以改,指针指向的值不可以更改 const int * p1 = &a; p1 = &b; //正确 //*p1 = 100; 报错 //const修饰的是常量,指针指向不可以改,指针指向的值可以更改 int * const p2 = &a; //p2 = &b; //错误 *p2 = 100; //正确 //const既修饰指针又修饰常量 const int * const p3 = &a; //p3 = &b; //错误 //*p3 = 100; //错误 return 0;}\n\n\n技巧:看const右侧紧跟着的是指针还是常量, 是指针就是常量指针,是常量就是指针常量\n\n7.6 指针和数组作用: 利用指针访问数组中元素示例:\nint main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int * p = arr; //指向数组的指针 cout << "第一个元素: " << arr[0] << endl; cout << "指针访问第一个元素: " << *p << endl; for (int i = 0; i < 10; i++) { //利用指针遍历数组 cout << *p << endl; p++; } return 0;}\n\n7.7 指针和函数作用: 利用指针作函数参数,可以修改实参的值示例:\n//值传递void swap1(int a ,int b){ int temp = a; a = b; b = temp;}//地址传递void swap2(int * p1, int *p2){ int temp = *p1; *p1 = *p2; *p2 = temp;}int main() { int a = 10; int b = 20; swap1(a, b); // 值传递不会改变实参 swap2(&a, &b); //地址传递会改变实参 cout << "a = " << a << endl; cout << "b = " << b << endl; return 0;}\n\n\n总结:如果不想修改实参,就用值传递,如果想修改实参,就用地址传递\n\n7.8 指针、数组、函数案例描述: 封装一个函数,利用冒泡排序,实现对整型数组的升序排序例如数组:int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };示例:\n//冒泡排序函数void bubbleSort(int * arr, int len) //int * arr 也可以写为int arr[]{ for (int i = 0; i < len - 1; i++) { for (int j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } }}//打印数组函数void printArray(int arr[], int len){ for (int i = 0; i < len; i++) { cout << arr[i] << endl; }}int main() { int arr[10] = { 4,3,6,9,1,2,10,8,7,5 }; int len = sizeof(arr) / sizeof(int); bubbleSort(arr, len); printArray(arr, len); return 0;}\n\n\n总结:当数组名传入到函数作为参数时,被退化为指向首元素的指针\n\n八、结构体8.1 结构体基本概念结构体属于用户自定义的数据类型,允许用户存储不同的数据类型\n8.2 结构体定义和使用语法:struct 结构体名 { 结构体成员列表 };通过结构体创建变量的方式有三种:\n\nstruct 结构体名 变量名\nstruct 结构体名 变量名 = { 成员1值 , 成员2值…}\n定义结构体时顺便创建变量示例:\n\n//结构体定义struct student{ //成员列表 string name; //姓名 int age; //年龄 int score; //分数}stu3; //结构体变量创建方式3int main() { //结构体变量创建方式1 struct student stu1; //struct 关键字可以省略 stu1.name = "张三"; stu1.age = 18; stu1.score = 100; cout << "姓名:" << stu1.name << " 年龄:" << stu1.age << " 分数:" << stu1.score << endl; //结构体变量创建方式2 struct student stu2 = { "李四",19,60 }; cout << "姓名:" << stu2.name << " 年龄:" << stu2.age << " 分数:" << stu2.score << endl; stu3.name = "王五"; stu3.age = 18; stu3.score = 80; cout << "姓名:" << stu3.name << " 年龄:" << stu3.age << " 分数:" << stu3.score << endl; return 0;}\n\n\n总结1:定义结构体时的关键字是struct,不可省略总结2:创建结构体变量时,关键字struct可以省略总结3:结构体变量利用操作符 ‘’.’’ 访问成员\n\n8.3 结构体数组作用: 将自定义的结构体放入到数组中方便维护语法:struct 结构体名 数组名[元素个数] = { {} , {} , ... {} }示例:\n//结构体定义struct student{ //成员列表 string name; //姓名 int age; //年龄 int score; //分数}int main() { //结构体数组 struct student arr[3]= { {"张三",18,80 }, {"李四",19,60 }, {"王五",20,70 } }; for (int i = 0; i < 3; i++) { cout << "姓名:" << arr[i].name << " 年龄:" << arr[i].age << " 分数:" << arr[i].score << endl; } return 0;}\n\n8.4 结构体指针作用: 通过指针访问结构体中的成员\n\n利用操作符 ->可以通过结构体指针访问结构体属性示例:\n\n//结构体定义struct student{ //成员列表 string name; //姓名 int age; //年龄 int score; //分数};int main() { struct student stu = { "张三",18,100, }; struct student * p = &stu; p->score = 80; //指针通过 -> 操作符可以访问成员 cout << "姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl; return 0;}\n\n\n总结:结构体指针可以通过 -> 操作符 来访问结构体中的成员\n\n8.5 结构体嵌套结构体作用: 结构体中的成员可以是另一个结构体例如: 每个老师辅导一个学员,一个老师的结构体中,记录一个学生的结构体示例:\n//学生结构体定义struct student{ //成员列表 string name; //姓名 int age; //年龄 int score; //分数};//教师结构体定义struct teacher{ //成员列表 int id; //职工编号 string name; //教师姓名 int age; //教师年龄 struct student stu; //子结构体 学生};int main() { struct teacher t1; t1.id = 10000; t1.name = "老王"; t1.age = 40; t1.stu.name = "张三"; t1.stu.age = 18; t1.stu.score = 100; cout << "教师 职工编号: " << t1.id << " 姓名: " << t1.name << " 年龄: " << t1.age << endl; cout << "辅导学员 姓名: " << t1.stu.name << " 年龄:" << t1.stu.age << " 考试分数: " << t1.stu.score << endl; return 0;}\n\n在结构体中可以定义另一个结构体作为成员,用来解决实际问题\n8.6 结构体做函数参数作用: 将结构体作为参数向函数中传递传递方式有两种:\n\n值传递\n地址传递示例:\n\n//学生结构体定义struct student{ //成员列表 string name; //姓名 int age; //年龄 int score; //分数};//值传递void printStudent(student stu ){ stu.age = 28; cout << "子函数中 姓名:" << stu.name << " 年龄: " << stu.age << " 分数:" << stu.score << endl;}//地址传递void printStudent2(student *stu){ stu->age = 28; cout << "子函数中 姓名:" << stu->name << " 年龄: " << stu->age << " 分数:" << stu->score << endl;}int main() { student stu = { "张三",18,100}; //值传递 printStudent(stu); cout << "主函数中 姓名:" << stu.name << " 年龄: " << stu.age << " 分数:" << stu.score << endl; cout << endl; //地址传递 printStudent2(&stu); cout << "主函数中 姓名:" << stu.name << " 年龄: " << stu.age << " 分数:" << stu.score << endl; return 0;}\n\n\n总结:如果不想修改主函数中的数据,用值传递,反之用地址传递\n\n8.7 结构体中 const 使用场景作用: 用const来防止误操作示例:\n//学生结构体定义struct student{ //成员列表 string name; //姓名 int age; //年龄 int score; //分数};//const使用场景void printStudent(const student *stu) //加const防止函数体中的误操作{ //stu->age = 100; //操作失败,因为加了const修饰 cout << "姓名:" << stu->name << " 年龄:" << stu->age << " 分数:" << stu->score << endl;}int main() { student stu = { "张三",18,100 }; printStudent(&stu); return 0;}\n\n8.8 结构体案例8.8.1 案例1案例描述:学校正在做毕设项目,每名老师带领5个学生,总共有3名老师,需求如下:\n\n设计学生和老师的结构体,其中在老师的结构体中,有老师姓名和一个存放5名学生的数组作为成员\n学生的成员有姓名、考试分数,创建数组存放3名老师,通过函数给每个老师及所带的学生赋值\n最终打印出老师数据以及老师所带的学生数据。示例:\n\nstruct Student{ string name; int score;};struct Teacher{ string name; Student sArray[5];};void allocateSpace(Teacher tArray[] , int len){ string tName = "教师"; string sName = "学生"; string nameSeed = "ABCDE"; for (int i = 0; i < len; i++) { tArray[i].name = tName + nameSeed[i]; for (int j = 0; j < 5; j++) { tArray[i].sArray[j].name = sName + nameSeed[j]; tArray[i].sArray[j].score = rand() % 61 + 40; } }}void printTeachers(Teacher tArray[], int len){ for (int i = 0; i < len; i++) { cout << tArray[i].name << endl; for (int j = 0; j < 5; j++) { cout << "\\t姓名:" << tArray[i].sArray[j].name << " 分数:" << tArray[i].sArray[j].score << endl; } }}int main() { srand((unsigned int)time(NULL)); //随机数种子 头文件 #include <ctime> Teacher tArray[3]; //老师数组 int len = sizeof(tArray) / sizeof(Teacher); allocateSpace(tArray, len); //创建数据 printTeachers(tArray, len); //打印数据 return 0;}\n\n8.8.2 案例2案例描述:设计一个英雄的结构体,包括成员姓名,年龄,性别;创建结构体数组,数组中存放5名英雄。通过冒泡排序的算法,将数组中的英雄按照年龄进行升序排序,最终打印排序后的结果。五名英雄信息如下:\n{"刘备",23,"男"},{"关羽",22,"男"},{"张飞",20,"男"},{"赵云",21,"男"},{"貂蝉",19,"女"},\n\n示例:\n//英雄结构体struct hero{ string name; int age; string sex;};//冒泡排序void bubbleSort(hero arr[] , int len){ for (int i = 0; i < len - 1; i++) { for (int j = 0; j < len - 1 - i; j++) { if (arr[j].age > arr[j + 1].age) { hero temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } }}//打印数组void printHeros(hero arr[], int len){ for (int i = 0; i < len; i++) { cout << "姓名: " << arr[i].name << " 性别: " << arr[i].sex << " 年龄: " << arr[i].age << endl; }}int main() { struct hero arr[5] = { {"刘备",23,"男"}, {"关羽",22,"男"}, {"张飞",20,"男"}, {"赵云",21,"男"}, {"貂蝉",19,"女"}, }; int len = sizeof(arr) / sizeof(hero); //获取数组元素个数 bubbleSort(arr, len); //排序 printHeros(arr, len); //打印 return 0;\n\n\n","categories":["递归这个世界 · 编程","编程语言"],"tags":["Programming","cpp"]},{"title":"C Plus Plus - Core","url":"/2022/05/25/note/Programming/Language/cpp-2/","content":"本阶段主要针对cpp面向对象编程技术做详细讲解,探讨cpp中的核心和精髓。\n\n\n一、内存分区模型cpp程序在执行时,将内存大方向划分为4个区域\n\n代码区:存放函数体的二进制代码,由操作系统进行管理的\n全局区:存放全局变量和静态变量以及常量\n栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等\n堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收内存四区意义:不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程\n\n1.1 程序运行前在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域代码区:\n\n存放 CPU 执行的机器指令\n代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可\n代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令全局区:\n全局变量和静态变量存放在此\n全局区还包含了常量区, 字符串常量和其他常量也存放在此\n该区域的数据在程序结束后由操作系统释放.示例:\n\n//全局变量int g_a = 10;int g_b = 10;//全局常量const int c_g_a = 10;const int c_g_b = 10;int main() { //局部变量 int a = 10; int b = 10; //打印地址 cout << "局部变量a地址为: " << (int)&a << endl; cout << "局部变量b地址为: " << (int)&b << endl; cout << "全局变量g_a地址为: " << (int)&g_a << endl; cout << "全局变量g_b地址为: " << (int)&g_b << endl; //静态变量 static int s_a = 10; static int s_b = 10; cout << "静态变量s_a地址为: " << (int)&s_a << endl; cout << "静态变量s_b地址为: " << (int)&s_b << endl; cout << "字符串常量地址为: " << (int)&"hello world" << endl; cout << "字符串常量地址为: " << (int)&"hello world1" << endl; cout << "全局常量c_g_a地址为: " << (int)&c_g_a << endl; cout << "全局常量c_g_b地址为: " << (int)&c_g_b << endl; const int c_l_a = 10; const int c_l_b = 10; cout << "局部常量c_l_a地址为: " << (int)&c_l_a << endl; cout << "局部常量c_l_b地址为: " << (int)&c_l_b << endl; return 0;}\n\n\n\ncpp中在程序运行前分为全局区和代码区\n\n代码区特点是共享和只读\n\n全局区中存放全局变量、静态变量、常量\n\n常量区中存放 const修饰的全局常量 和 字符串常量\n\n\n1.2 程序运行后栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放示例:\nint * func(){ int a = 10; return &a;}int main() { int *p = func(); cout << *p << endl; cout << *p << endl; return 0;}\n\n堆区:由程序员分配释放,若程序员不释放,程序结束时由操作系统回收在cpp中主要利用new在堆区开辟内存示例:\nint* func(){ int* a = new int(10); return a;}int main() { int *p = func(); cout << *p << endl; cout << *p << endl; system("pause"); return 0;}\n\n总结:堆区数据由程序员管理开辟和释放堆区数据利用new关键字进行开辟内存\n1.3 new操作符cpp中利用new操作符在堆区开辟数据堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符 delete语法:new 数据类型利用new创建的数据,会返回该数据对应的类型的指针示例1: 基本语法\nint* func(){ int* a = new int(10); return a;}int main() { int *p = func(); cout << *p << endl; cout << *p << endl; //利用delete释放堆区数据 delete p; //cout << *p << endl; //报错,释放的空间不可访问 return 0;}\n\n示例2:开辟数组\n//堆区开辟数组int main() { int* arr = new int[10]; for (int i = 0; i < 10; i++) { arr[i] = i + 100; } for (int i = 0; i < 10; i++) { cout << arr[i] << endl; } //释放数组 delete 后加 [] delete[] arr; return 0;}\n\n二、引用2.1 引用的基本使用作用: 给变量起别名语法: 数据类型 &别名 = 原名示例:\nint main() { int a = 10; int &b = a; cout << "a = " << a << endl; cout << "b = " << b << endl; b = 100; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0;}\n\n2.2 引用注意事项\n引用必须初始化\n\n引用在初始化后,不可以改变示例:\n\n\nint main() { int a = 10; int b = 20; //int &c; //错误,引用必须初始化 int &c = a; //一旦初始化后,就不可以更改 c = b; //这是赋值操作,不是更改引用 cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl; return 0;}\n\n2.3 引用做函数参数作用: 函数传参时,可以利用引用的技术让形参修饰实参优点: 可以简化指针修改实参示例:\n//1. 值传递void mySwap01(int a, int b) { int temp = a; a = b; b = temp;}//2. 地址传递void mySwap02(int* a, int* b) { int temp = *a; *a = *b; *b = temp;}//3. 引用传递void mySwap03(int& a, int& b) { int temp = a; a = b; b = temp;}int main() { int a = 10; int b = 20; mySwap01(a, b); cout << "a:" << a << " b:" << b << endl; mySwap02(&a, &b); cout << "a:" << a << " b:" << b << endl; mySwap03(a, b); cout << "a:" << a << " b:" << b << endl; return 0;}\n\n\n总结:通过引用参数产生的效果同按地址传递是一样的。引用的语法更清楚简单\n\n2.4 引用做函数返回值作用:引用是可以作为函数的返回值存在的注意:不要返回局部变量引用用法:函数调用作为左值示例:\n//返回局部变量引用int& test01() { int a = 10; //局部变量 return a;}//返回静态变量引用int& test02() { static int a = 20; return a;}int main() { //不能返回局部变量的引用 int& ref = test01(); cout << "ref = " << ref << endl; cout << "ref = " << ref << endl; //如果函数做左值,那么必须返回引用 int& ref2 = test02(); cout << "ref2 = " << ref2 << endl; cout << "ref2 = " << ref2 << endl; test02() = 1000; cout << "ref2 = " << ref2 << endl; cout << "ref2 = " << ref2 << endl; return 0;}\n\n2.5 引用的本质本质:引用的本质在cpp内部实现是一个指针常量.讲解示例:\n//发现是引用,转换为 int* const ref = &a;void func(int& ref){ ref = 100; // ref是引用,转换为*ref = 100}int main(){ int a = 10; //自动转换为 int* const ref = &a; 指针常量是指针指向不可改,也说明为什么引用不可更改 int& ref = a; ref = 20; //内部发现ref是引用,自动帮我们转换为: *ref = 20; cout << "a:" << a << endl; cout << "ref:" << ref << endl; func(a); return 0;}\n\n结论:cpp推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了\n2.6 常量引用作用: 常量引用主要用来修饰形参,防止误操作在函数形参列表中,可以加const修饰形参,防止形参改变实参示例:\n//引用使用的场景,通常用来修饰形参void showValue(const int& v) { //v += 10; cout << v << endl;}int main() { //int& ref = 10; 引用本身需要一个合法的内存空间,因此这行错误 //加入const就可以了,编译器优化代码,int temp = 10; const int& ref = temp; const int& ref = 10; //ref = 100; //加入const后不可以修改变量 cout << ref << endl; //函数中利用常量引用防止误操作修改实参 int a = 10; showValue(a); return 0;}\n\n三、函数提高3.1 函数默认参数在cpp中,函数的形参列表中的形参是可以有默认值的。语法:返回值类型 函数名 (参数= 默认值){}示例:\nint func(int a, int b = 10, int c = 10) { return a + b + c;}//1. 如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值//2. 如果函数声明有默认值,函数实现的时候就不能有默认参数int func2(int a = 10, int b = 10);int func2(int a, int b) { return a + b;}int main() { cout << "ret = " << func(20, 20) << endl; cout << "ret = " << func(100) << endl; return 0;}\n\n3.2 函数占位参数cpp中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置语法: 返回值类型 函数名 (数据类型){}在现阶段函数的占位参数存在意义不大,但是后面的课程中会用到该技术示例:\n//函数占位参数 ,占位参数也可以有默认参数void func(int a, int) { cout << "this is func" << endl;}int main() { func(10,10); //占位参数必须填补 return 0;}\n\n3.3 函数重载3.3.1 函数重载概述作用: 函数名可以相同,提高复用性函数重载满足条件:\n\n同一个作用域下\n函数名称相同\n函数参数类型不同 或者 个数不同 或者 顺序不同注意: 函数的返回值不可以作为函数重载的条件示例:\n\n//函数重载需要函数都在同一个作用域下void func(){ cout << "func 的调用!" << endl;}void func(int a){ cout << "func (int a) 的调用!" << endl;}void func(double a){ cout << "func (double a)的调用!" << endl;}void func(int a ,double b){ cout << "func (int a ,double b) 的调用!" << endl;}void func(double a ,int b){ cout << "func (double a ,int b)的调用!" << endl;}//函数返回值不可以作为函数重载条件//int func(double a, int b)//{// cout << "func (double a ,int b)的调用!" << endl;//}int main() { func(); func(10); func(3.14); func(10,3.14); func(3.14 , 10); return 0;}\n\n3.3.2 函数重载注意事项\n引用作为重载条件\n\n函数重载碰到函数默认参数示例:\n\n\n//函数重载注意事项//1、引用作为重载条件void func(int &a){ cout << "func (int &a) 调用 " << endl;}void func(const int &a){ cout << "func (const int &a) 调用 " << endl;}//2、函数重载碰到函数默认参数void func2(int a, int b = 10){ cout << "func2(int a, int b = 10) 调用" << endl;}void func2(int a){ cout << "func2(int a) 调用" << endl;}int main() { int a = 10; func(a); //调用无const func(10);//调用有const //func2(10); //碰到默认参数产生歧义,需要避免 return 0;}\n\n四、类和对象cpp面向对象的三大特性为:封装、继承、多态cpp认为万事万物都皆为对象,对象上有其属性和行为\n4.1 封装4.1.1 封装的意义封装是cpp面向对象三大特性之一封装的意义:\n\n将属性和行为作为一个整体,表现生活中的事物\n将属性和行为加以权限控制封装意义一:在设计类的时候,属性和行为写在一起,表现事物语法: class 类名{ 访问权限: 属性 / 行为 };示例1: 设计一个圆类,求圆的周长示例代码:\n\n//圆周率const double PI = 3.14;//1、封装的意义//将属性和行为作为一个整体,用来表现生活中的事物//封装一个圆类,求圆的周长//class代表设计一个类,后面跟着的是类名class Circle{public: //访问权限 公共的权限 //属性 int m_r;//半径 //行为 //获取到圆的周长 double calculateZC() { //2 * pi * r //获取圆的周长 return 2 * PI * m_r; }};int main() { //通过圆类,创建圆的对象 // c1就是一个具体的圆 Circle c1; c1.m_r = 10; //给圆对象的半径 进行赋值操作 //2 * pi * 10 = = 62.8 cout << "圆的周长为: " << c1.calculateZC() << endl; return 0;}\n\n示例2: 设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号示例2代码:\n//学生类class Student {public: void setName(string name) { m_name = name; } void setID(int id) { m_id = id; } void showStudent() { cout << "name:" << m_name << " ID:" << m_id << endl; }public: string m_name; int m_id;};int main() { Student stu; stu.setName("德玛西亚"); stu.setID(250); stu.showStudent(); return 0;}\n\n封装意义二:类在设计时,可以把属性和行为放在不同的权限下,加以控制访问权限有三种:\n\npublic 公共权限\nprotected 保护权限\nprivate 私有权限示例:\n\n//三种权限//公共权限 public 类内可以访问 类外可以访问//保护权限 protected 类内可以访问 类外不可以访问//私有权限 private 类内可以访问 类外不可以访问class Person{ //姓名 公共权限public: string m_Name; //汽车 保护权限protected: string m_Car; //银行卡密码 私有权限private: int m_Password;public: void func() { m_Name = "张三"; m_Car = "拖拉机"; m_Password = 123456; }};int main() { Person p; p.m_Name = "李四"; //p.m_Car = "奔驰"; //保护权限类外访问不到 //p.m_Password = 123; //私有权限类外访问不到 return 0;}\n\n4.1.2 struct和class区别在cpp中 struct和class唯一的区别就在于 默认的访问权限不同区别:\n\nstruct 默认权限为公共\nclass 默认权限为私有\n\nclass C1{ int m_A; //默认是私有权限};struct C2{ int m_A; //默认是公共权限};int main() { C1 c1; c1.m_A = 10; //错误,访问权限是私有 C2 c2; c2.m_A = 10; //正确,访问权限是公共 return 0;}\n\n4.1.3 成员属性设置为私有优点1: 将所有成员属性设置为私有,可以自己控制读写权限优点2: 对于写权限,我们可以检测数据的有效性示例:\nclass Person {public: //姓名设置可读可写 void setName(string name) { m_Name = name; } string getName() { return m_Name; } //获取年龄 int getAge() { return m_Age; } //设置年龄 void setAge(int age) { if (age < 0 || age > 150) { cout << "你个老妖精!" << endl; return; } m_Age = age; } //情人设置为只写 void setLover(string lover) { m_Lover = lover; }private: string m_Name; //可读可写 姓名 int m_Age; //只读 年龄 string m_Lover; //只写 情人};int main() { Person p; //姓名设置 p.setName("张三"); cout << "姓名: " << p.getName() << endl; //年龄设置 p.setAge(50); cout << "年龄: " << p.getAge() << endl; //情人设置 p.setLover("苍井"); //cout << "情人: " << p.m_Lover << endl; //只写属性,不可以读取 return 0;}\n\n练习案例1:设计立方体类设计立方体类(Cube)求出立方体的面积和体积分别用全局函数和成员函数判断两个立方体是否相等练习案例2:点和圆的关系设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系\n4.2 对象的初始化和清理\n生活中我们买的电子产品都基本会有出厂设置,在某一天我们不用时候也会删除一些自己信息数据保证安全\n\ncpp中的面向对象来源于生活,每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。\n\n\n4.2.1 构造函数和析构函数对象的初始化和清理也是两个非常重要的安全问题\n一个对象或者变量没有初始状态,对其使用后果是未知\n同样的使用完一个对象或变量,没有及时清理,也会造成一定的安全问题\ncpp利用了构造函数和析构函数解决上述问题,这两个函数将会被编译器自动调用,完成对象初始化和清理工作。\n对象的初始化和清理工作是编译器强制要我们做的事情,因此如果我们不提供构造和析构,编译器会提供编译器提供的构造函数和析构函数是空实现。\n\n构造函数:主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用。\n析构函数:主要作用在于对象销毁前系统自动调用,执行一些清理工作。构造函数语法:类名(){}\n\n\n构造函数,没有返回值也不写void\n函数名称与类名相同\n构造函数可以有参数,因此可以发生重载\n程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次析构函数语法: ~类名(){}\n析构函数,没有返回值也不写void\n函数名称与类名相同,在名称前加上符号 ~\n析构函数不可以有参数,因此不可以发生重载\n程序在对象销毁前会自动调用析构,无须手动调用,而且只会调用一次\n\nclass Person{public: //构造函数 Person() { cout << "Person的构造函数调用" << endl; } //析构函数 ~Person() { cout << "Person的析构函数调用" << endl; }};void test01(){ Person p;}int main() { test01(); return 0;}\n\n4.2.2 构造函数的分类及调用两种分类方式:\n\n按参数分为: 有参构造和无参构造\n按类型分为: 普通构造和拷贝构造三种调用方式:\n括号法\n显示法\n隐式转换法示例:\n\n//1、构造函数分类// 按照参数分类分为 有参和无参构造 无参又称为默认构造函数// 按照类型分类分为 普通构造和拷贝构造class Person {public: //无参(默认)构造函数 Person() { cout << "无参构造函数!" << endl; } //有参构造函数 Person(int a) { age = a; cout << "有参构造函数!" << endl; } //拷贝构造函数 Person(const Person& p) { age = p.age; cout << "拷贝构造函数!" << endl; } //析构函数 ~Person() { cout << "析构函数!" << endl; }public: int age;};//2、构造函数的调用//调用无参构造函数void test01() { Person p; //调用无参构造函数}//调用有参的构造函数void test02() { //2.1 括号法,常用 Person p1(10); //注意1:调用无参构造函数不能加括号,如果加了编译器认为这是一个函数声明 //Person p2(); //2.2 显式法 Person p2 = Person(10); Person p3 = Person(p2); //Person(10)单独写就是匿名对象 当前行结束之后,马上析构 //2.3 隐式转换法 Person p4 = 10; // Person p4 = Person(10); Person p5 = p4; // Person p5 = Person(p4); //注意2:不能利用 拷贝构造函数 初始化匿名对象 编译器认为是对象声明 //Person p5(p4);}int main() { test01(); //test02(); return 0;}\n\n4.2.3 拷贝构造函数调用时机cpp中拷贝构造函数调用时机通常有三种情况\n\n使用一个已经创建完毕的对象来初始化一个新对象\n值传递的方式给函数参数传值\n以值方式返回局部对象示例:\n\nclass Person {public: Person() { cout << "无参构造函数!" << endl; mAge = 0; } Person(int age) { cout << "有参构造函数!" << endl; mAge = age; } Person(const Person& p) { cout << "拷贝构造函数!" << endl; mAge = p.mAge; } //析构函数在释放内存之前调用 ~Person() { cout << "析构函数!" << endl; }public: int mAge;};//1. 使用一个已经创建完毕的对象来初始化一个新对象void test01() { Person man(100); //p对象已经创建完毕 Person newman(man); //调用拷贝构造函数 Person newman2 = man; //拷贝构造 //Person newman3; //newman3 = man; //不是调用拷贝构造函数,赋值操作}//2. 值传递的方式给函数参数传值//相当于Person p1 = p;void doWork(Person p1) {}void test02() { Person p; //无参构造函数 doWork(p);}//3. 以值方式返回局部对象Person doWork2(){ Person p1; cout << (int *)&p1 << endl; return p1;}void test03(){ Person p = doWork2(); cout << (int *)&p << endl;}int main() { //test01(); //test02(); test03(); return 0;}\n\n4.2.4 构造函数调用规则默认情况下,cpp编译器至少给一个类添加3个函数\n\n默认构造函数(无参,函数体为空)\n\n默认析构函数(无参,函数体为空)\n\n默认拷贝构造函数,对属性进行值拷贝构造函数调用规则如下:\n\n\n\n如果用户定义有参构造函数,cpp不在提供默认无参构造,但是会提供默认拷贝构造\n\n如果用户定义拷贝构造函数,cpp不会再提供其他构造函数示例:\n\n\nclass Person {public: //无参(默认)构造函数 Person() { cout << "无参构造函数!" << endl; } //有参构造函数 Person(int a) { age = a; cout << "有参构造函数!" << endl; } //拷贝构造函数 Person(const Person& p) { age = p.age; cout << "拷贝构造函数!" << endl; } //析构函数 ~Person() { cout << "析构函数!" << endl; }public: int age;};void test01(){ Person p1(18); //如果不写拷贝构造,编译器会自动添加拷贝构造,并且做浅拷贝操作 Person p2(p1); cout << "p2的年龄为: " << p2.age << endl;}void test02(){ //如果用户提供有参构造,编译器不会提供默认构造,会提供拷贝构造 Person p1; //此时如果用户自己没有提供默认构造,会出错 Person p2(10); //用户提供的有参 Person p3(p2); //此时如果用户没有提供拷贝构造,编译器会提供 //如果用户提供拷贝构造,编译器不会提供其他构造函数 Person p4; //此时如果用户自己没有提供默认构造,会出错 Person p5(10); //此时如果用户自己没有提供有参,会出错 Person p6(p5); //用户自己提供拷贝构造}int main() { test01(); return 0;}\n\n4.2.5 深拷贝与浅拷贝深浅拷贝是面试经典问题,也是常见的一个坑浅拷贝: 简单的赋值拷贝操作深拷贝: 在堆区重新申请空间,进行拷贝操作示例:\nclass Person {public: //无参(默认)构造函数 Person() { cout << "无参构造函数!" << endl; } //有参构造函数 Person(int age ,int height) { cout << "有参构造函数!" << endl; m_age = age; m_height = new int(height); } //拷贝构造函数 Person(const Person& p) { cout << "拷贝构造函数!" << endl; //如果不利用深拷贝在堆区创建新内存,会导致浅拷贝带来的重复释放堆区问题 m_age = p.m_age; m_height = new int(*p.m_height); } //析构函数 ~Person() { cout << "析构函数!" << endl; if (m_height != NULL) { delete m_height; } }public: int m_age; int* m_height;};void test01(){ Person p1(18, 180); Person p2(p1); cout << "p1的年龄: " << p1.m_age << " 身高: " << *p1.m_height << endl; cout << "p2的年龄: " << p2.m_age << " 身高: " << *p2.m_height << endl;}int main() { test01(); return 0;}\n\n\n总结:如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题\n\n4.2.6 初始化列表作用: cpp提供了初始化列表语法,用来初始化属性语法:构造函数():属性1(值1),属性2(值2)... {}示例:\nclass Person {public: ////传统方式初始化 //Person(int a, int b, int c) { // m_A = a; // m_B = b; // m_C = c; //} //初始化列表方式初始化 Person(int a, int b, int c) :m_A(a), m_B(b), m_C(c) {} void PrintPerson() { cout << "mA:" << m_A << endl; cout << "mB:" << m_B << endl; cout << "mC:" << m_C << endl; }private: int m_A; int m_B; int m_C;};int main() { Person p(1, 2, 3); p.PrintPerson(); return 0;}\n\n4.2.7 类对象作为类成员cpp类中的成员可以是另一个类的对象,我们称该成员为 对象成员例如:\nclass A {}class B{ A a;}\n\nB类中有对象A作为成员,A为对象成员;那么当创建B对象时,A与B的构造和析构的顺序是谁先谁后?示例:\nclass Phone{public: Phone(string name) { m_PhoneName = name; cout << "Phone构造" << endl; } ~Phone() { cout << "Phone析构" << endl; } string m_PhoneName;};class Person{public: //初始化列表可以告诉编译器调用哪一个构造函数 Person(string name, string pName) :m_Name(name), m_Phone(pName) { cout << "Person构造" << endl; } ~Person() { cout << "Person析构" << endl; } void playGame() { cout << m_Name << " 使用" << m_Phone.m_PhoneName << " 牌手机! " << endl; } string m_Name; Phone m_Phone;};void test01(){ //当类中成员是其他类对象时,我们称该成员为 对象成员 //构造的顺序是 :先调用对象成员的构造,再调用本类构造 //析构顺序与构造相反 Person p("张三" , "苹果X"); p.playGame();}int main() { test01(); return 0;}\n\n4.2.8 静态成员静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员静态成员分为:\n\n静态成员变量\n所有对象共享同一份数据\n在编译阶段分配内存\n类内声明,类外初始化\n\n\n静态成员函数\n所有对象共享同一个函数\n静态成员函数只能访问静态成员变量示例1 : 静态成员变量\n\n\n\nclass Person{public: static int m_A; //静态成员变量 //静态成员变量特点: //1 在编译阶段分配内存 //2 类内声明,类外初始化 //3 所有对象共享同一份数据private: static int m_B; //静态成员变量也是有访问权限的};int Person::m_A = 10;int Person::m_B = 10;void test01(){ //静态成员变量两种访问方式 //1、通过对象 Person p1; p1.m_A = 100; cout << "p1.m_A = " << p1.m_A << endl; Person p2; p2.m_A = 200; cout << "p1.m_A = " << p1.m_A << endl; //共享同一份数据 cout << "p2.m_A = " << p2.m_A << endl; //2、通过类名 cout << "m_A = " << Person::m_A << endl; //cout << "m_B = " << Person::m_B << endl; //私有权限访问不到}int main() { test01(); return 0;}\n\n示例2: 静态成员函数\nclass Person{public: //静态成员函数特点: //1 程序共享一个函数 //2 静态成员函数只能访问静态成员变量 static void func() { cout << "func调用" << endl; m_A = 100; //m_B = 100; //错误,不可以访问非静态成员变量 } static int m_A; //静态成员变量 int m_B; //private: //静态成员函数也是有访问权限的 static void func2() { cout << "func2调用" << endl; }};int Person::m_A = 10;void test01(){ //静态成员变量两种访问方式 //1、通过对象 Person p1; p1.func(); //2、通过类名 Person::func(); //Person::func2(); //私有权限访问不到}int main() { test01(); return 0;}\n\n4.3 cpp对象模型和this指针4.3.1 成员变量和成员函数分开存储在cpp中,类内的成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上\nclass Person {public: Person() { mA = 0; } //非静态成员变量占对象空间 int mA; //静态成员变量不占对象空间 static int mB; //函数也不占对象空间,所有函数共享一个函数实例 void func() { cout << "mA:" << this->mA << endl; } //静态成员函数也不占对象空间 static void sfunc() { }};int main() { cout << sizeof(Person) << endl; return 0;}\n\n4.3.2 this指针概念通过4.3.1我们知道在cpp中成员变量和成员函数是分开存储的每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码那么问题是:这一块代码是如何区分那个对象调用自己的呢?cpp通过提供特殊的对象指针,this指针,解决上述问题。this指针指向被调用的成员函数所属的对象this指针是隐含每一个非静态成员函数内的一种指针this指针不需要定义,直接使用即可this指针的用途:\n\n当形参和成员变量同名时,可用this指针来区分\n在类的非静态成员函数中返回对象本身,可使用return *this\n\nclass Person{public: Person(int age) { //1、当形参和成员变量同名时,可用this指针来区分 this->age = age; } Person& PersonAddPerson(Person p) { this->age += p.age; //返回对象本身 return *this; } int age;};void test01(){ Person p1(10); cout << "p1.age = " << p1.age << endl; Person p2(10); p2.PersonAddPerson(p1).PersonAddPerson(p1).PersonAddPerson(p1); cout << "p2.age = " << p2.age << endl;}int main() { test01(); return 0;}\n\n4.3.3 空指针访问成员函数cpp中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针如果用到this指针,需要加以判断保证代码的健壮性示例:\n//空指针访问成员函数class Person {public: void ShowClassName() { cout << "我是Person类!" << endl; } void ShowPerson() { if (this *** NULL) { return; } cout << mAge << endl; }public: int mAge;};void test01(){ Person * p = NULL; p->ShowClassName(); //空指针,可以调用成员函数 p->ShowPerson(); //但是如果成员函数中用到了this指针,就不可以了}int main() { test01(); return 0;}\n\n4.3.4 const修饰成员函数常函数:\n\n成员函数后加const后我们称为这个函数为常函数\n常函数内不可以修改成员属性\n成员属性声明时加关键字mutable后,在常函数中依然可以修改常对象:\n声明对象前加const称该对象为常对象\n常对象只能调用常函数示例:\n\nclass Person {public: Person() { m_A = 0; m_B = 0; } //this指针的本质是一个指针常量,指针的指向不可修改 //如果想让指针指向的值也不可以修改,需要声明常函数 void ShowPerson() const { //const Type* const pointer; //this = NULL; //不能修改指针的指向 Person* const this; //this->mA = 100; //但是this指针指向的对象的数据是可以修改的 //const修饰成员函数,表示指针指向的内存空间的数据不能修改,除了mutable修饰的变量 this->m_B = 100; } void MyFunc() const { //mA = 10000; }public: int m_A; mutable int m_B; //可修改 可变的};//const修饰对象 常对象void test01() { const Person person; //常量对象 cout << person.m_A << endl; //person.mA = 100; //常对象不能修改成员变量的值,但是可以访问 person.m_B = 100; //但是常对象可以修改mutable修饰成员变量 //常对象访问成员函数 person.MyFunc(); //常对象不能调用const的函数}int main() { test01(); return 0;}\n\n4.4 友元生活中你的家有客厅(Public),有你的卧室(Private)客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去但是呢,你也可以允许你的好闺蜜好基友进去。在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术友元的目的就是让一个函数或者类 访问另一个类中私有成员友元的关键字为 friend友元的三种实现\n\n全局函数做友元\n类做友元\n成员函数做友元\n\n4.4.1 全局函数做友元class Building{ //告诉编译器 goodGay全局函数 是 Building类的好朋友,可以访问类中的私有内容 friend void goodGay(Building * building);public: Building() { this->m_SittingRoom = "客厅"; this->m_BedRoom = "卧室"; }public: string m_SittingRoom; //客厅private: string m_BedRoom; //卧室};void goodGay(Building * building){ cout << "好基友正在访问: " << building->m_SittingRoom << endl; cout << "好基友正在访问: " << building->m_BedRoom << endl;}void test01(){ Building b; goodGay(&b);}int main(){ test01(); return 0;}\n\n4.4.2 类做友元class Building;class goodGay{public: goodGay(); void visit();private: Building *building;};class Building{ //告诉编译器 goodGay类是Building类的好朋友,可以访问到Building类中私有内容 friend class goodGay;public: Building();public: string m_SittingRoom; //客厅private: string m_BedRoom;//卧室};Building::Building(){ this->m_SittingRoom = "客厅"; this->m_BedRoom = "卧室";}goodGay::goodGay(){ building = new Building;}void goodGay::visit(){ cout << "好基友正在访问" << building->m_SittingRoom << endl; cout << "好基友正在访问" << building->m_BedRoom << endl;}void test01(){ goodGay gg; gg.visit();}int main(){ test01(); return 0;}\n\n4.4.3 成员函数做友元class Building;class goodGay{public: goodGay(); void visit(); //只让visit函数作为Building的好朋友,可以发访问Building中私有内容 void visit2();private: Building *building;};class Building{ //告诉编译器 goodGay类中的visit成员函数 是Building好朋友,可以访问私有内容 friend void goodGay::visit();public: Building();public: string m_SittingRoom; //客厅private: string m_BedRoom;//卧室};Building::Building(){ this->m_SittingRoom = "客厅"; this->m_BedRoom = "卧室";}goodGay::goodGay(){ building = new Building;}void goodGay::visit(){ cout << "好基友正在访问" << building->m_SittingRoom << endl; cout << "好基友正在访问" << building->m_BedRoom << endl;}void goodGay::visit2(){ cout << "好基友正在访问" << building->m_SittingRoom << endl; //cout << "好基友正在访问" << building->m_BedRoom << endl;}void test01(){ goodGay gg; gg.visit();}int main(){ test01(); return 0;}\n\n4.5 运算符重载运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型\n4.5.1 加号运算符重载作用:实现两个自定义数据类型相加的运算\nclass Person {public: Person() {}; Person(int a, int b) { this->m_A = a; this->m_B = b; } //成员函数实现 + 号运算符重载 Person operator+(const Person& p) { Person temp; temp.m_A = this->m_A + p.m_A; temp.m_B = this->m_B + p.m_B; return temp; }public: int m_A; int m_B;};//全局函数实现 + 号运算符重载//Person operator+(const Person& p1, const Person& p2) {// Person temp(0, 0);// temp.m_A = p1.m_A + p2.m_A;// temp.m_B = p1.m_B + p2.m_B;// return temp;//}//运算符重载 可以发生函数重载Person operator+(const Person& p2, int val){ Person temp; temp.m_A = p2.m_A + val; temp.m_B = p2.m_B + val; return temp;}void test() { Person p1(10, 10); Person p2(20, 20); //成员函数方式 Person p3 = p2 + p1; //相当于 p2.operaor+(p1) cout << "mA:" << p3.m_A << " mB:" << p3.m_B << endl; Person p4 = p3 + 10; //相当于 operator+(p3,10) cout << "mA:" << p4.m_A << " mB:" << p4.m_B << endl;}int main() { test(); return 0;}\n\n\n总结1:对于内置的数据类型的表达式的的运算符是不可能改变的总结2:不要滥用运算符重载\n\n4.5.2 左移运算符重载作用:可以输出自定义数据类型\nclass Person { friend ostream& operator<<(ostream& out, Person& p);public: Person(int a, int b) { this->m_A = a; this->m_B = b; } //成员函数 实现不了 p << cout 不是我们想要的效果 //void operator<<(Person& p){ //}private: int m_A; int m_B;};//全局函数实现左移重载//ostream对象只能有一个ostream& operator<<(ostream& out, Person& p) { out << "a:" << p.m_A << " b:" << p.m_B; return out;}void test() { Person p1(10, 20); cout << p1 << "hello world" << endl; //链式编程}int main() { test(); return 0;}\n\n\n重载左移运算符配合友元可以实现输出自定义数据类型\n\n4.5.3 递增运算符重载作用: 通过重载递增运算符,实现自己的整型数据\nclass MyInteger { friend ostream& operator<<(ostream& out, MyInteger myint);public: MyInteger() { m_Num = 0; } //前置++ MyInteger& operator++() { //先++ m_Num++; //再返回 return *this; } //后置++ MyInteger operator++(int) { //先返回 MyInteger temp = *this; //记录当前本身的值,然后让本身的值加1,但是返回的是以前的值,达到先返回后++; m_Num++; return temp; }private: int m_Num;};ostream& operator<<(ostream& out, MyInteger myint) { out << myint.m_Num; return out;}//前置++ 先++ 再返回void test01() { MyInteger myInt; cout << ++myInt << endl; cout << myInt << endl;}//后置++ 先返回 再++void test02() { MyInteger myInt; cout << myInt++ << endl; cout << myInt << endl;}int main() { test01(); //test02(); return 0;}\n\n\n前置递增返回引用,后置递增返回值\n\n4.5.4 赋值运算符重载cpp编译器至少给一个类添加4个函数\n\n默认构造函数(无参,函数体为空)\n默认析构函数(无参,函数体为空)\n默认拷贝构造函数,对属性进行值拷贝\n赋值运算符 operator=, 对属性进行值拷贝如果类中有属性指向堆区,做赋值操作时也会出现深浅拷贝问题示例:\n\nclass Person{public: Person(int age) { //将年龄数据开辟到堆区 m_Age = new int(age); } //重载赋值运算符 Person& operator=(Person &p) { if (m_Age != NULL) { delete m_Age; m_Age = NULL; } //编译器提供的代码是浅拷贝 //m_Age = p.m_Age; //提供深拷贝 解决浅拷贝的问题 m_Age = new int(*p.m_Age); //返回自身 return *this; } ~Person() { if (m_Age != NULL) { delete m_Age; m_Age = NULL; } } //年龄的指针 int *m_Age;};void test01(){ Person p1(18); Person p2(20); Person p3(30); p3 = p2 = p1; //赋值操作 cout << "p1的年龄为:" << *p1.m_Age << endl; cout << "p2的年龄为:" << *p2.m_Age << endl; cout << "p3的年龄为:" << *p3.m_Age << endl;}int main() { test01(); //int a = 10; //int b = 20; //int c = 30; //c = b = a; //cout << "a = " << a << endl; //cout << "b = " << b << endl; //cout << "c = " << c << endl; return 0;}\n\n4.5.5 关系运算符重载作用: 重载关系运算符,可以让两个自定义类型对象进行对比操作示例:\nclass Person{public: Person(string name, int age) { this->m_Name = name; this->m_Age = age; }; bool operator***(Person & p) { if (this->m_Name *** p.m_Name && this->m_Age *** p.m_Age) { return true; } else { return false; } } bool operator!=(Person & p) { if (this->m_Name *** p.m_Name && this->m_Age *** p.m_Age) { return false; } else { return true; } } string m_Name; int m_Age;};void test01(){ //int a = 0; //int b = 0; Person a("孙悟空", 18); Person b("孙悟空", 18); if (a *** b) { cout << "a和b相等" << endl; } else { cout << "a和b不相等" << endl; } if (a != b) { cout << "a和b不相等" << endl; } else { cout << "a和b相等" << endl; }}int main() { test01(); return 0;}\n\n4.5.6 函数调用运算符重载\n函数调用运算符 () 也可以重载\n\n由于重载后使用的方式非常像函数的调用,因此称为仿函数\n\n仿函数没有固定写法,非常灵活示例:\n\n\nclass MyPrint{public: void operator()(string text) { cout << text << endl; }};void test01(){ //重载的()操作符 也称为仿函数 MyPrint myFunc; myFunc("hello world");}class MyAdd{public: int operator()(int v1, int v2) { return v1 + v2; }};void test02(){ MyAdd add; int ret = add(10, 10); cout << "ret = " << ret << endl; //匿名对象调用 cout << "MyAdd()(100,100) = " << MyAdd()(100, 100) << endl;}int main() { test01(); test02(); return 0;}\n\n4.6 继承继承是面向对象三大特性之一我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。这个时候我们就可以考虑利用继承的技术,减少重复代码\n4.6.1 继承的基本语法例如我们看到很多网站中,都有公共的头部,公共的底部,甚至公共的左侧列表,只有中心内容不同接下来我们分别利用普通写法和继承的写法来实现网页中的内容,看一下继承存在的意义以及好处普通实现:\n//Java页面class Java{public: void header() { cout << "首页、公开课、登录、注册...(公共头部)" << endl; } void footer() { cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl; } void left() { cout << "Java,Python,cpp...(公共分类列表)" << endl; } void content() { cout << "JAVA学科视频" << endl; }};//Python页面class Python{public: void header() { cout << "首页、公开课、登录、注册...(公共头部)" << endl; } void footer() { cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl; } void left() { cout << "Java,Python,cpp...(公共分类列表)" << endl; } void content() { cout << "Python学科视频" << endl; }};//cpp页面class CPP{public: void header() { cout << "首页、公开课、登录、注册...(公共头部)" << endl; } void footer() { cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl; } void left() { cout << "Java,Python,cpp...(公共分类列表)" << endl; } void content() { cout << "cpp学科视频" << endl; }};void test01(){ //Java页面 cout << "Java下载视频页面如下: " << endl; Java ja; ja.header(); ja.footer(); ja.left(); ja.content(); cout << "--------------------" << endl; //Python页面 cout << "Python下载视频页面如下: " << endl; Python py; py.header(); py.footer(); py.left(); py.content(); cout << "--------------------" << endl; //cpp页面 cout << "cpp下载视频页面如下: " << endl; CPP cp; cp.header(); cp.footer(); cp.left(); cp.content();}int main() { test01(); return 0;}\n\n继承实现:\n//公共页面class BasePage{public: void header() { cout << "首页、公开课、登录、注册...(公共头部)" << endl; } void footer() { cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl; } void left() { cout << "Java,Python,cpp...(公共分类列表)" << endl; }};//Java页面class Java : public BasePage{public: void content() { cout << "JAVA学科视频" << endl; }};//Python页面class Python : public BasePage{public: void content() { cout << "Python学科视频" << endl; }};//cpp页面class CPP : public BasePage{public: void content() { cout << "cpp学科视频" << endl; }};void test01(){ //Java页面 cout << "Java下载视频页面如下: " << endl; Java ja; ja.header(); ja.footer(); ja.left(); ja.content(); cout << "--------------------" << endl; //Python页面 cout << "Python下载视频页面如下: " << endl; Python py; py.header(); py.footer(); py.left(); py.content(); cout << "--------------------" << endl; //cpp页面 cout << "cpp下载视频页面如下: " << endl; CPP cp; cp.header(); cp.footer(); cp.left(); cp.content();}int main() { test01(); return 0;}\n\n继承的好处:可以减少重复的代码class A : public B;A 类称为子类 或 派生类B 类称为父类 或 基类派生类中的成员,包含两大部分:一类是从基类继承过来的,一类是自己增加的成员。从基类继承过过来的表现其共性,而新增的成员体现了其个性。\n4.6.2 继承方式继承的语法:class 子类 : 继承方式 父类继承方式一共有三种:\n\n公共继承\n保护继承\n私有继承示例:\n\nclass Base1{public: int m_A;protected: int m_B;private: int m_C;};//公共继承class Son1 :public Base1{public: void func() { m_A; //可访问 public权限 m_B; //可访问 protected权限 //m_C; //不可访问 }};void myClass(){ Son1 s1; s1.m_A; //其他类只能访问到公共权限}//保护继承class Base2{public: int m_A;protected: int m_B;private: int m_C;};class Son2:protected Base2{public: void func() { m_A; //可访问 protected权限 m_B; //可访问 protected权限 //m_C; //不可访问 }};void myClass2(){ Son2 s; //s.m_A; //不可访问}//私有继承class Base3{public: int m_A;protected: int m_B;private: int m_C;};class Son3:private Base3{public: void func() { m_A; //可访问 private权限 m_B; //可访问 private权限 //m_C; //不可访问 }};class GrandSon3 :public Son3{public: void func() { //Son3是私有继承,所以继承Son3的属性在GrandSon3中都无法访问到 //m_A; //m_B; //m_C; }};\n\n4.6.3 继承中的对象模型问题: 从父类继承过来的成员,哪些属于子类对象中?示例:\nclass Base{public: int m_A;protected: int m_B;private: int m_C; //私有成员只是被隐藏了,但是还是会继承下去};//公共继承class Son :public Base{public: int m_D;};void test01(){ cout << "sizeof Son = " << sizeof(Son) << endl;}int main() { test01(); return 0;}\n\n\n父类中私有成员也是被子类继承下去了,只是由编译器给隐藏后访问不到\n\n4.6.4 继承中构造和析构顺序子类继承父类后,当创建子类对象,也会调用父类的构造函数问题:父类和子类的构造和析构顺序是谁先谁后?示例:\nclass Base{public: Base() { cout << "Base构造函数!" << endl; } ~Base() { cout << "Base析构函数!" << endl; }};class Son : public Base{public: Son() { cout << "Son构造函数!" << endl; } ~Son() { cout << "Son析构函数!" << endl; }};void test01(){ //继承中 先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反 Son s;}int main() { test01(); return 0;}\n\n\n继承中,先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反\n\n4.6.5 继承同名成员处理方式问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢?\n\n访问子类同名成员 直接访问即可\n访问父类同名成员 需要加作用域示例:\n\nclass Base {public: Base() { m_A = 100; } void func() { cout << "Base - func()调用" << endl; } void func(int a) { cout << "Base - func(int a)调用" << endl; }public: int m_A;};class Son : public Base {public: Son() { m_A = 200; } //当子类与父类拥有同名的成员函数,子类会隐藏父类中所有版本的同名成员函数 //如果想访问父类中被隐藏的同名成员函数,需要加父类的作用域 void func() { cout << "Son - func()调用" << endl; }public: int m_A;};void test01(){ Son s; cout << "Son下的m_A = " << s.m_A << endl; cout << "Base下的m_A = " << s.Base::m_A << endl; s.func(); s.Base::func(); s.Base::func(10);}int main() { test01(); return EXIT_SUCCESS;}\n\n总结:\n\n子类对象可以直接访问到子类中同名成员\n子类对象加作用域可以访问到父类同名成员\n当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数\n\n4.6.6 继承同名静态成员处理方式问题:继承中同名的静态成员在子类对象上如何进行访问?静态成员和非静态成员出现同名,处理方式一致\n\n访问子类同名成员 直接访问即可\n访问父类同名成员 需要加作用域示例:\n\nclass Base {public: static void func() { cout << "Base - static void func()" << endl; } static void func(int a) { cout << "Base - static void func(int a)" << endl; } static int m_A;};int Base::m_A = 100;class Son : public Base {public: static void func() { cout << "Son - static void func()" << endl; } static int m_A;};int Son::m_A = 200;//同名成员属性void test01(){ //通过对象访问 cout << "通过对象访问: " << endl; Son s; cout << "Son 下 m_A = " << s.m_A << endl; cout << "Base 下 m_A = " << s.Base::m_A << endl; //通过类名访问 cout << "通过类名访问: " << endl; cout << "Son 下 m_A = " << Son::m_A << endl; cout << "Base 下 m_A = " << Son::Base::m_A << endl;}//同名成员函数void test02(){ //通过对象访问 cout << "通过对象访问: " << endl; Son s; s.func(); s.Base::func(); cout << "通过类名访问: " << endl; Son::func(); Son::Base::func(); //出现同名,子类会隐藏掉父类中所有同名成员函数,需要加作作用域访问 Son::Base::func(100);}int main() { //test01(); test02(); return 0;}\n\n\n同名静态成员处理方式和非静态处理方式一样,只不过有两种访问的方式(通过对象 和 通过类名)\n\n4.6.7 多继承语法cpp允许一个类继承多个类语法:class 子类 :继承方式 父类1 , 继承方式 父类2...多继承可能会引发父类中有同名成员出现,需要加作用域区分cpp实际开发中不建议用多继承示例:\nclass Base1 {public: Base1() { m_A = 100; }public: int m_A;};class Base2 {public: Base2() { m_A = 200; //开始是m_B 不会出问题,但是改为mA就会出现不明确 }public: int m_A;};//语法:class 子类:继承方式 父类1 ,继承方式 父类2class Son : public Base2, public Base1{public: Son() { m_C = 300; m_D = 400; }public: int m_C; int m_D;};//多继承容易产生成员同名的情况//通过使用类名作用域可以区分调用哪一个基类的成员void test01(){ Son s; cout << "sizeof Son = " << sizeof(s) << endl; cout << s.Base1::m_A << endl; cout << s.Base2::m_A << endl;}int main() { test01(); return 0;}\n\n\n总结: 多继承中如果父类中出现了同名情况,子类使用时候要加作用域\n\n4.6.8 菱形继承菱形继承概念:两个派生类继承同一个基类又有某个类同时继承者两个派生类这种继承被称为菱形继承,或者钻石继承菱形继承问题:\n\n羊继承了动物的数据,驼同样继承了动物的数据,当草泥马使用数据时,就会产生二义性。\n草泥马继承自动物的数据继承了两份,其实我们应该清楚,这份数据我们只需要一份就可以。示例:\n\nclass Animal{public: int m_Age;};//继承前加virtual关键字后,变为虚继承//此时公共的父类Animal称为虚基类class Sheep : virtual public Animal {};class Tuo : virtual public Animal {};class SheepTuo : public Sheep, public Tuo {};void test01(){ SheepTuo st; st.Sheep::m_Age = 100; st.Tuo::m_Age = 200; cout << "st.Sheep::m_Age = " << st.Sheep::m_Age << endl; cout << "st.Tuo::m_Age = " << st.Tuo::m_Age << endl; cout << "st.m_Age = " << st.m_Age << endl;}int main() { test01(); return 0;}\n\n\n菱形继承带来的主要问题是子类继承两份相同的数据,导致资源浪费以及毫无意义\n\n利用虚继承可以解决菱形继承问题\n\n\n4.7 多态4.7.1 多态的基本概念多态是cpp面向对象三大特性之一多态分为两类\n\n静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名\n动态多态: 派生类和虚函数实现运行时多态静态多态和动态多态区别:\n静态多态的函数地址早绑定 - 编译阶段确定函数地址\n动态多态的函数地址晚绑定 - 运行阶段确定函数地址下面通过案例进行讲解多态\n\nclass Animal{public: //Speak函数就是虚函数 //函数前面加上virtual关键字,变成虚函数,那么编译器在编译的时候就不能确定函数调用了。 virtual void speak() { cout << "动物在说话" << endl; }};class Cat :public Animal{public: void speak() { cout << "小猫在说话" << endl; }};class Dog :public Animal{public: void speak() { cout << "小狗在说话" << endl; }};//我们希望传入什么对象,那么就调用什么对象的函数//如果函数地址在编译阶段就能确定,那么静态联编//如果函数地址在运行阶段才能确定,就是动态联编void DoSpeak(Animal & animal){ animal.speak();}////多态满足条件://1、有继承关系//2、子类重写父类中的虚函数//多态使用://父类指针或引用指向子类对象void test01(){ Cat cat; DoSpeak(cat); Dog dog; DoSpeak(dog);}int main() { test01(); return 0;}\n\n多态满足条件\n\n有继承关系\n子类重写父类中的虚函数多态使用条件\n父类指针或引用指向子类对象重写:函数返回值类型 函数名 参数列表 完全一致称为重写\n\n4.7.2 多态案例一-计算器类案例描述:分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类多态的优点:\n\n代码组织结构清晰\n可读性强\n利于前期和后期的扩展以及维护示例:\n\n//普通实现class Calculator {public: int getResult(string oper) { if (oper *** "+") { return m_Num1 + m_Num2; } else if (oper *** "-") { return m_Num1 - m_Num2; } else if (oper *** "*") { return m_Num1 * m_Num2; } //如果要提供新的运算,需要修改源码 }public: int m_Num1; int m_Num2;};void test01(){ //普通实现测试 Calculator c; c.m_Num1 = 10; c.m_Num2 = 10; cout << c.m_Num1 << " + " << c.m_Num2 << " = " << c.getResult("+") << endl; cout << c.m_Num1 << " - " << c.m_Num2 << " = " << c.getResult("-") << endl; cout << c.m_Num1 << " * " << c.m_Num2 << " = " << c.getResult("*") << endl;}//多态实现//抽象计算器类//多态优点:代码组织结构清晰,可读性强,利于前期和后期的扩展以及维护class AbstractCalculator{public : virtual int getResult() { return 0; } int m_Num1; int m_Num2;};//加法计算器class AddCalculator :public AbstractCalculator{public: int getResult() { return m_Num1 + m_Num2; }};//减法计算器class SubCalculator :public AbstractCalculator{public: int getResult() { return m_Num1 - m_Num2; }};//乘法计算器class MulCalculator :public AbstractCalculator{public: int getResult() { return m_Num1 * m_Num2; }};void test02(){ //创建加法计算器 AbstractCalculator *abc = new AddCalculator; abc->m_Num1 = 10; abc->m_Num2 = 10; cout << abc->m_Num1 << " + " << abc->m_Num2 << " = " << abc->getResult() << endl; delete abc; //用完了记得销毁 //创建减法计算器 abc = new SubCalculator; abc->m_Num1 = 10; abc->m_Num2 = 10; cout << abc->m_Num1 << " - " << abc->m_Num2 << " = " << abc->getResult() << endl; delete abc; //创建乘法计算器 abc = new MulCalculator; abc->m_Num1 = 10; abc->m_Num2 = 10; cout << abc->m_Num1 << " * " << abc->m_Num2 << " = " << abc->getResult() << endl; delete abc;}int main() { //test01(); test02(); return 0;}\n\n\ncpp开发提倡利用多态设计程序架构,因为多态优点很多\n\n4.7.3 纯虚函数和抽象类在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容因此可以将虚函数改为纯虚函数纯虚函数语法:virtual 返回值类型 函数名 (参数列表)= 0 ;当类中有了纯虚函数,这个类也称为抽象类抽象类特点:\n\n无法实例化对象\n子类必须重写抽象类中的纯虚函数,否则也属于抽象类示例:\n\nclass Base{public: //纯虚函数 //类中只要有一个纯虚函数就称为抽象类 //抽象类无法实例化对象 //子类必须重写父类中的纯虚函数,否则也属于抽象类 virtual void func() = 0;};class Son :public Base{public: virtual void func() { cout << "func调用" << endl; };};void test01(){ Base * base = NULL; //base = new Base; // 错误,抽象类无法实例化对象 base = new Son; base->func(); delete base;//记得销毁}int main() { test01(); return 0;}\n\n4.7.4 多态案例二-制作饮品案例描述:制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料示例:\n//抽象制作饮品class AbstractDrinking {public: //烧水 virtual void Boil() = 0; //冲泡 virtual void Brew() = 0; //倒入杯中 virtual void PourInCup() = 0; //加入辅料 virtual void PutSomething() = 0; //规定流程 void MakeDrink() { Boil(); Brew(); PourInCup(); PutSomething(); }};//制作咖啡class Coffee : public AbstractDrinking {public: //烧水 virtual void Boil() { cout << "煮农夫山泉!" << endl; } //冲泡 virtual void Brew() { cout << "冲泡咖啡!" << endl; } //倒入杯中 virtual void PourInCup() { cout << "将咖啡倒入杯中!" << endl; } //加入辅料 virtual void PutSomething() { cout << "加入牛奶!" << endl; }};//制作茶水class Tea : public AbstractDrinking {public: //烧水 virtual void Boil() { cout << "煮自来水!" << endl; } //冲泡 virtual void Brew() { cout << "冲泡茶叶!" << endl; } //倒入杯中 virtual void PourInCup() { cout << "将茶水倒入杯中!" << endl; } //加入辅料 virtual void PutSomething() { cout << "加入枸杞!" << endl; }};//业务函数void DoWork(AbstractDrinking* drink) { drink->MakeDrink(); delete drink;}void test01() { DoWork(new Coffee); cout << "--------------" << endl; DoWork(new Tea);}int main() { test01(); return 0;}\n\n4.7.5 虚析构和纯虚析构多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码解决方式:将父类中的析构函数改为虚析构或者纯虚析构虚析构和纯虚析构共性:\n\n可以解决父类指针释放子类对象\n都需要有具体的函数实现虚析构和纯虚析构区别:\n如果是纯虚析构,该类属于抽象类,无法实例化对象虚析构语法:virtual ~类名(){}纯虚析构语法:virtual ~类名() = 0;类名::~类名(){}示例:\n\nclass Animal {public: Animal() { cout << "Animal 构造函数调用!" << endl; } virtual void Speak() = 0; //析构函数加上virtual关键字,变成虚析构函数 //virtual ~Animal() //{ // cout << "Animal虚析构函数调用!" << endl; //} virtual ~Animal() = 0;};Animal::~Animal(){ cout << "Animal 纯虚析构函数调用!" << endl;}//和包含普通纯虚函数的类一样,包含了纯虚析构函数的类也是一个抽象类。不能够被实例化。class Cat : public Animal {public: Cat(string name) { cout << "Cat构造函数调用!" << endl; m_Name = new string(name); } virtual void Speak() { cout << *m_Name << "小猫在说话!" << endl; } ~Cat() { cout << "Cat析构函数调用!" << endl; if (this->m_Name != NULL) { delete m_Name; m_Name = NULL; } }public: string *m_Name;};void test01(){ Animal *animal = new Cat("Tom"); animal->Speak(); //通过父类指针去释放,会导致子类对象可能清理不干净,造成内存泄漏 //怎么解决?给基类增加一个虚析构函数 //虚析构函数就是用来解决通过父类指针释放子类对象 delete animal;}int main() { test01(); return 0;}\n\n\n虚析构或纯虚析构就是用来解决通过父类指针释放子类对象\n如果子类中没有堆区数据,可以不写为虚析构或纯虚析构\n拥有纯虚析构函数的类也属于抽象类\n\n4.7.6 多态案例三-电脑组装案例描述:电脑主要组成部件为 CPU(用于计算),显卡(用于显示),内存条(用于存储)将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件,例如Intel厂商和Lenovo厂商创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口测试时组装三台不同的电脑进行工作示例:\n#include<iostream>using namespace std;//抽象CPU类class CPU{public: //抽象的计算函数 virtual void calculate() = 0;};//抽象显卡类class VideoCard{public: //抽象的显示函数 virtual void display() = 0;};//抽象内存条类class Memory{public: //抽象的存储函数 virtual void storage() = 0;};//电脑类class Computer{public: Computer(CPU * cpu, VideoCard * vc, Memory * mem) { m_cpu = cpu; m_vc = vc; m_mem = mem; } //提供工作的函数 void work() { //让零件工作起来,调用接口 m_cpu->calculate(); m_vc->display(); m_mem->storage(); } //提供析构函数 释放3个电脑零件 ~Computer() { //释放CPU零件 if (m_cpu != NULL) { delete m_cpu; m_cpu = NULL; } //释放显卡零件 if (m_vc != NULL) { delete m_vc; m_vc = NULL; } //释放内存条零件 if (m_mem != NULL) { delete m_mem; m_mem = NULL; } }private: CPU * m_cpu; //CPU的零件指针 VideoCard * m_vc; //显卡零件指针 Memory * m_mem; //内存条零件指针};//具体厂商//Intel厂商class IntelCPU :public CPU{public: virtual void calculate() { cout << "Intel的CPU开始计算了!" << endl; }};class IntelVideoCard :public VideoCard{public: virtual void display() { cout << "Intel的显卡开始显示了!" << endl; }};class IntelMemory :public Memory{public: virtual void storage() { cout << "Intel的内存条开始存储了!" << endl; }};//Lenovo厂商class LenovoCPU :public CPU{public: virtual void calculate() { cout << "Lenovo的CPU开始计算了!" << endl; }};class LenovoVideoCard :public VideoCard{public: virtual void display() { cout << "Lenovo的显卡开始显示了!" << endl; }};class LenovoMemory :public Memory{public: virtual void storage() { cout << "Lenovo的内存条开始存储了!" << endl; }};void test01(){ //第一台电脑零件 CPU * intelCpu = new IntelCPU; VideoCard * intelCard = new IntelVideoCard; Memory * intelMem = new IntelMemory; cout << "第一台电脑开始工作:" << endl; //创建第一台电脑 Computer * computer1 = new Computer(intelCpu, intelCard, intelMem); computer1->work(); delete computer1; cout << "-----------------------" << endl; cout << "第二台电脑开始工作:" << endl; //第二台电脑组装 Computer * computer2 = new Computer(new LenovoCPU, new LenovoVideoCard, new LenovoMemory);; computer2->work(); delete computer2; cout << "-----------------------" << endl; cout << "第三台电脑开始工作:" << endl; //第三台电脑组装 Computer * computer3 = new Computer(new LenovoCPU, new IntelVideoCard, new LenovoMemory);; computer3->work(); delete computer3;}\n\n五、文件操作程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放通过文件可以将数据持久化cpp中对文件操作需要包含头文件 fstream文件类型分为两种:\n\n文本文件 - 文件以文本的ASCII码形式存储在计算机中\n二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们操作文件的三大类:\nofstream:写操作\nifstream: 读操作\nfstream : 读写操作\n\n5.1文本文件5.1.1写文件写文件步骤如下:\n\n包含头文件 \\#include <fstream\\>\n\n创建流对象ofstream ofs;\n\n打开文件ofs.open("文件路径",打开方式);\n\n写数据ofs << "写入的数据";\n\n关闭文件ofs.close();文件打开方式:\n\n\n\n打开方式\n解释\n\n\n\nios::in\n为读文件而打开文件\n\n\nios::out\n为写文件而打开文件\n\n\nios::ate\n初始位置:文件尾\n\n\nios::app\n追加方式写文件\n\n\nios::trunc\n如果文件存在先删除,再创建\n\n\nios::binary\n二进制方式\n\n\n注意: 文件打开方式可以配合使用,利用\n操作符\n\n\n例如: 用二进制方式写文件 `ios::binary\nios:: out`\n\n\n示例:\n\n\n\n\n\n#include <fstream>void test01(){ ofstream ofs; ofs.open("test.txt", ios::out); ofs << "姓名:张三" << endl; ofs << "性别:男" << endl; ofs << "年龄:18" << endl; ofs.close();}int main() { test01(); return 0;}\n\n\n文件操作必须包含头文件 fstream\n\n读文件可以利用 ofstream ,或者fstream类\n\n打开文件时候需要指定操作文件的路径,以及打开方式\n\n利用<<可以向文件中写数据\n\n操作完毕,要关闭文件\n\n\n5.1.2读文件读文件与写文件步骤相似,但是读取方式相对于比较多读文件步骤如下:\n\n包含头文件 #include <fstream>\n创建流对象ifstream ifs;\n打开文件并判断文件是否打开成功ifs.open("文件路径",打开方式);\n读数据四种方式读取\n关闭文件ifs.close(); 示例:\n\n#include <fstream>#include <string>void test01(){ ifstream ifs; ifs.open("test.txt", ios::in); if (!ifs.is_open()) { cout << "文件打开失败" << endl; return; } //第一种方式 //char buf[1024] = { 0 }; //while (ifs >> buf) //{ // cout << buf << endl; //} //第二种 //char buf[1024] = { 0 }; //while (ifs.getline(buf,sizeof(buf))) //{ // cout << buf << endl; //} //第三种 //string buf; //while (getline(ifs, buf)) //{ // cout << buf << endl; //} char c; while ((c = ifs.get()) != EOF) { cout << c; } ifs.close();}int main() { test01(); return 0;}\n\n\n读文件可以利用 ifstream ,或者fstream类\n利用is_open函数可以判断文件是否打开成功\nclose 关闭文件\n\n5.2 二进制文件以二进制的方式对文件进行读写操作打开方式要指定为 ios::binary\n5.2.1 写文件二进制方式写文件主要利用流对象调用成员函数write函数原型 :ostream& write(const char * buffer,int len);参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数示例:\n#include <fstream>#include <string>class Person{public: char m_Name[64]; int m_Age;};//二进制文件 写文件void test01(){ //1、包含头文件 //2、创建输出流对象 ofstream ofs("person.txt", ios::out | ios::binary); //3、打开文件 //ofs.open("person.txt", ios::out | ios::binary); Person p = {"张三" , 18}; //4、写文件 ofs.write((const char *)&p, sizeof(p)); //5、关闭文件 ofs.close();}int main() { test01(); return 0;}\n\n\n文件输出流对象 可以通过write函数,以二进制方式写数据\n\n5.2.2 读文件二进制方式读文件主要利用流对象调用成员函数read函数原型:istream& read(char *buffer,int len);参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数示例:\n#include <fstream>#include <string>class Person{public: char m_Name[64]; int m_Age;};void test01(){ ifstream ifs("person.txt", ios::in | ios::binary); if (!ifs.is_open()) { cout << "文件打开失败" << endl; } Person p; ifs.read((char *)&p, sizeof(p)); cout << "姓名: " << p.m_Name << " 年龄: " << p.m_Age << endl;}int main() { test01(); return 0;}\n\n\n文件输入流对象 可以通过read函数,以二进制方式读数据\n\n","categories":["递归这个世界 · 编程","编程语言"],"tags":["Programming","cpp"]},{"title":"C Plus Plus - Enhancement","url":"/2022/05/25/note/Programming/Language/cpp-3/","content":"本阶段主要针对cpp泛型编程和STL技术做详细讲解,探讨cpp更深层的使用\n\n\n一、模板1.1 模板的概念模板就是建立通用的模具,大大提高复用性模板的特点:\n\n模板不可以直接使用,它只是一个框架\n模板的通用并不是万能的\n\n1.2 函数模板\ncpp另一种编程思想称为 泛型编程 ,主要利用的技术就是模板\n\ncpp提供两种模板机制:函数模板和类模板\n\n\n1.2.1 函数模板语法函数模板作用:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。语法:\ntemplate<typename T>函数声明或定义\n\n解释:template — 声明创建模板typename — 表面其后面的符号是一种数据类型,可以用class代替T — 通用的数据类型,名称可以替换,通常为大写字母示例:\n//交换整型函数void swapInt(int& a, int& b) { int temp = a; a = b; b = temp;}//交换浮点型函数void swapDouble(double& a, double& b) { double temp = a; a = b; b = temp;}//利用模板提供通用的交换函数template<typename T>void mySwap(T& a, T& b){ T temp = a; a = b; b = temp;}void test01(){ int a = 10; int b = 20; //swapInt(a, b); //利用模板实现交换 //1、自动类型推导 mySwap(a, b); //2、显示指定类型 mySwap<int>(a, b); cout << "a = " << a << endl; cout << "b = " << b << endl;}int main() { test01(); return 0;}\n\n\n函数模板利用关键字 template\n\n使用函数模板有两种方式:自动类型推导、显示指定类型\n\n模板的目的是为了提高复用性,将类型参数化\n\n\n1.2.2 函数模板注意事项注意事项:\n\n自动类型推导,必须推导出一致的数据类型T,才可以使用\n模板必须要确定出T的数据类型,才可以使用示例:\n\n//利用模板提供通用的交换函数template<class T>void mySwap(T& a, T& b){ T temp = a; a = b; b = temp;}// 1、自动类型推导,必须推导出一致的数据类型T,才可以使用void test01(){ int a = 10; int b = 20; char c = 'c'; mySwap(a, b); // 正确,可以推导出一致的T //mySwap(a, c); // 错误,推导不出一致的T类型}// 2、模板必须要确定出T的数据类型,才可以使用template<class T>void func(){ cout << "func 调用" << endl;}void test02(){ //func(); //错误,模板不能独立使用,必须确定出T的类型 func<int>(); //利用显示指定类型的方式,给T一个类型,才可以使用该模板}int main() { test01(); test02(); return 0;}\n\n\n使用模板时必须确定出通用数据类型T,并且能够推导出一致的类型\n\n1.2.3 函数模板案例案例描述:\n\n利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序\n排序规则从大到小,排序算法为选择排序\n分别利用char数组和int数组进行测试示例:\n\n//交换的函数模板template<typename T>void mySwap(T &a, T&b){ T temp = a; a = b; b = temp;}template<class T> // 也可以替换成typename//利用选择排序,进行对数组从大到小的排序void mySort(T arr[], int len){ for (int i = 0; i < len; i++) { int max = i; //最大数的下标 for (int j = i + 1; j < len; j++) { if (arr[max] < arr[j]) { max = j; } } if (max != i) //如果最大数的下标不是i,交换两者 { mySwap(arr[max], arr[i]); } }}template<typename T>void printArray(T arr[], int len) { for (int i = 0; i < len; i++) { cout << arr[i] << " "; } cout << endl;}void test01(){ //测试char数组 char charArr[] = "bdcfeagh"; int num = sizeof(charArr) / sizeof(char); mySort(charArr, num); printArray(charArr, num);}void test02(){ //测试int数组 int intArr[] = { 7, 5, 8, 1, 3, 9, 2, 4, 6 }; int num = sizeof(intArr) / sizeof(int); mySort(intArr, num); printArray(intArr, num);}int main() { test01(); test02(); return 0;}\n\n模板可以提高代码复用,需要熟练掌握\n1.2.4 普通函数与函数模板的区别普通函数与函数模板区别:\n\n普通函数调用时可以发生自动类型转换(隐式类型转换)\n函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换\n如果利用显示指定类型的方式,可以发生隐式类型转换示例:\n\n//普通函数int myAdd01(int a, int b){ return a + b;}//函数模板template<class T>T myAdd02(T a, T b){ return a + b;}//使用函数模板时,如果用自动类型推导,不会发生自动类型转换,即隐式类型转换void test01(){ int a = 10; int b = 20; char c = 'c'; cout << myAdd01(a, c) << endl; //正确,将char类型的'c'隐式转换为int类型 'c' 对应 ASCII码 99 //myAdd02(a, c); // 报错,使用自动类型推导时,不会发生隐式类型转换 myAdd02<int>(a, c); //正确,如果用显示指定类型,可以发生隐式类型转换}int main() { test01(); system("pause"); return 0;}\n\n建议使用显示指定类型的方式,调用函数模板,因为可以自己确定通用类型T\n1.2.5 普通函数与函数模板的调用规则调用规则如下:\n\n如果函数模板和普通函数都可以实现,优先调用普通函数\n可以通过空模板参数列表来强制调用函数模板\n函数模板也可以发生重载\n如果函数模板可以产生更好的匹配,优先调用函数模板示例:\n\n//普通函数与函数模板调用规则void myPrint(int a, int b){ cout << "调用的普通函数" << endl;}template<typename T>void myPrint(T a, T b){ cout << "调用的模板" << endl;}template<typename T>void myPrint(T a, T b, T c){ cout << "调用重载的模板" << endl;}void test01(){ //1、如果函数模板和普通函数都可以实现,优先调用普通函数 // 注意 如果告诉编译器 普通函数是有的,但只是声明没有实现,或者不在当前文件内实现,就会报错找不到 int a = 10; int b = 20; myPrint(a, b); //调用普通函数 //2、可以通过空模板参数列表来强制调用函数模板 myPrint<>(a, b); //调用函数模板 //3、函数模板也可以发生重载 int c = 30; myPrint(a, b, c); //调用重载的函数模板 //4、 如果函数模板可以产生更好的匹配,优先调用函数模板 char c1 = 'a'; char c2 = 'b'; myPrint(c1, c2); //调用函数模板}int main() { test01(); return 0;}\n\n既然提供了函数模板,最好就不要提供普通函数,否则容易出现二义性\n1.2.6 模板的局限性局限性:\n\n模板的通用性并不是万能的例如:\n\ntemplate<class T>void f(T a, T b){ a = b; }\n\n在上述代码中提供的赋值操作,如果传入的a和b是一个数组,就无法实现了再例如:\ntemplate<class T>void f(T a, T b){ if(a > b) { ... } }\n\n在上述代码中,如果T的数据类型传入的是像Person这样的自定义数据类型,也无法正常运行因此cpp为了解决这种问题,提供模板的重载,可以为这些特定的类型提供具体化的模板示例:\n#include<iostream>using namespace std;#include <string>class Person{public: Person(string name, int age) { this->m_Name = name; this->m_Age = age; } string m_Name; int m_Age;};//普通函数模板template<class T>bool myCompare(T& a, T& b){ if (a *** b) { return true; } else { return false; }}//具体化,显示具体化的原型和定意思以template<>开头,并通过名称来指出类型//具体化优先于常规模板template<> bool myCompare(Person &p1, Person &p2){ if ( p1.m_Name *** p2.m_Name && p1.m_Age *** p2.m_Age) { return true; } else { return false; }}void test01(){ int a = 10; int b = 20; //内置数据类型可以直接使用通用的函数模板 bool ret = myCompare(a, b); if (ret) { cout << "a *** b " << endl; } else { cout << "a != b " << endl; }}void test02(){ Person p1("Tom", 10); Person p2("Tom", 10); //自定义数据类型,不会调用普通的函数模板 //可以创建具体化的Person数据类型的模板,用于特殊处理这个类型 bool ret = myCompare(p1, p2); if (ret) { cout << "p1 *** p2 " << endl; } else { cout << "p1 != p2 " << endl; }}int main() { test01(); test02(); return 0;}\n\n\n利用具体化的模板,可以解决自定义类型的通用化\n\n学习模板并不是为了写模板,而是在STL能够运用系统提供的模板\n\n\n1.3 类模板1.3.1 类模板语法类模板作用:\n\n建立一个通用类,类中的成员 数据类型可以不具体制定,用一个虚拟的类型来代表。语法:\n\ntemplate<typename T>类\n\n解释:template — 声明创建模板typename — 表面其后面的符号是一种数据类型,可以用class代替T — 通用的数据类型,名称可以替换,通常为大写字母示例:\n#include <string>//类模板template<class NameType, class AgeType>class Person{public: Person(NameType name, AgeType age) { this->mName = name; this->mAge = age; } void showPerson() { cout << "name: " << this->mName << " age: " << this->mAge << endl; }public: NameType mName; AgeType mAge;};void test01(){ // 指定NameType 为string类型,AgeType 为 int类型 Person<string, int>P1("孙悟空", 999); P1.showPerson();}int main() { test01(); return 0;}\n\n类模板和函数模板语法相似,在声明模板template后面加类,此类称为类模板\n1.3.2 类模板与函数模板区别类模板与函数模板区别主要有两点:\n\n类模板没有自动类型推导的使用方式\n类模板在模板参数列表中可以有默认参数示例:\n\n#include <string>//类模板template<class NameType, class AgeType = int>class Person{public: Person(NameType name, AgeType age) { this->mName = name; this->mAge = age; } void showPerson() { cout << "name: " << this->mName << " age: " << this->mAge << endl; }public: NameType mName; AgeType mAge;};//1、类模板没有自动类型推导的使用方式void test01(){ // Person p("孙悟空", 1000); // 错误 类模板使用时候,不可以用自动类型推导 Person <string ,int>p("孙悟空", 1000); //必须使用显示指定类型的方式,使用类模板 p.showPerson();}//2、类模板在模板参数列表中可以有默认参数void test02(){ Person <string> p("猪八戒", 999); //类模板中的模板参数列表 可以指定默认参数 p.showPerson();}int main() { test01(); test02(); return 0;}\n\n\n类模板使用只能用显示指定类型方式\n\n类模板中的模板参数列表可以有默认参数\n\n\n1.3.3 类模板中成员函数创建时机类模板中成员函数和普通类中成员函数创建时机是有区别的:\n\n普通类中的成员函数一开始就可以创建\n类模板中的成员函数在调用时才创建示例:\n\nclass Person1{public: void showPerson1() { cout << "Person1 show" << endl; }};class Person2{public: void showPerson2() { cout << "Person2 show" << endl; }};template<class T>class MyClass{public: T obj; //类模板中的成员函数,并不是一开始就创建的,而是在模板调用时再生成 void fun1() { obj.showPerson1(); } void fun2() { obj.showPerson2(); }};void test01(){ MyClass<Person1> m; m.fun1(); //m.fun2();//编译会出错,说明函数调用才会去创建成员函数}int main() { test01(); return 0;}\n\n类模板中的成员函数并不是一开始就创建的,在调用时才去创建\n1.3.4 类模板对象做函数参数学习目标:\n\n类模板实例化出的对象,向函数传参的方式一共有三种传入方式:\n\n\n指定传入的类型 — 直接显示对象的数据类型\n参数模板化 — 将对象中的参数变为模板进行传递\n整个类模板化 — 将这个对象类型 模板化进行传递示例:\n\n#include <string>//类模板template<class NameType, class AgeType = int>class Person{public: Person(NameType name, AgeType age) { this->mName = name; this->mAge = age; } void showPerson() { cout << "name: " << this->mName << " age: " << this->mAge << endl; }public: NameType mName; AgeType mAge;};//1、指定传入的类型void printPerson1(Person<string, int> &p){ p.showPerson();}void test01(){ Person <string, int >p("孙悟空", 100); printPerson1(p);}//2、参数模板化template <class T1, class T2>void printPerson2(Person<T1, T2>&p){ p.showPerson(); cout << "T1的类型为: " << typeid(T1).name() << endl; cout << "T2的类型为: " << typeid(T2).name() << endl;}void test02(){ Person <string, int >p("猪八戒", 90); printPerson2(p);}//3、整个类模板化template<class T>void printPerson3(T & p){ cout << "T的类型为: " << typeid(T).name() << endl; p.showPerson();}void test03(){ Person <string, int >p("唐僧", 30); printPerson3(p);}int main() { test01(); test02(); test03(); return 0;}\n\n\n通过类模板创建的对象,可以有三种方式向函数中进行传参\n\n使用比较广泛是第一种:指定传入的类型\n\n\n1.3.5 类模板与继承当类模板碰到继承时,需要注意一下几点:\n\n当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型\n如果不指定,编译器无法给子类分配内存\n如果想灵活指定出父类中T的类型,子类也需变为类模板示例:\n\ntemplate<class T>class Base{ T m;};//class Son:public Base //错误,cpp编译需要给子类分配内存,必须知道父类中T的类型才可以向下继承class Son :public Base<int> //必须指定一个类型{};void test01(){ Son c;}//类模板继承类模板 ,可以用T2指定父类中的T类型template<class T1, class T2>class Son2 :public Base<T2>{public: Son2() { cout << typeid(T1).name() << endl; cout << typeid(T2).name() << endl; }};void test02(){ Son2<int, char> child1;}int main() { test01(); test02(); return 0;}\n\n如果父类是类模板,子类需要指定出父类中T的数据类型\n1.3.6 类模板成员函数类外实现学习目标:能够掌握类模板中的成员函数类外实现示例:\n#include <string>//类模板中成员函数类外实现template<class T1, class T2>class Person {public: //成员函数类内声明 Person(T1 name, T2 age); void showPerson();public: T1 m_Name; T2 m_Age;};//构造函数 类外实现template<class T1, class T2>Person<T1, T2>::Person(T1 name, T2 age) { this->m_Name = name; this->m_Age = age;}//成员函数 类外实现template<class T1, class T2>void Person<T1, T2>::showPerson() { cout << "姓名: " << this->m_Name << " 年龄:" << this->m_Age << endl;}void test01(){ Person<string, int> p("Tom", 20); p.showPerson();}int main() { test01(); return 0;}\n\n类模板中成员函数类外实现时,需要加上模板参数列表\n1.3.7 类模板分文件编写学习目标:\n\n掌握类模板成员函数分文件编写产生的问题以及解决方式问题:\n类模板中成员函数创建时机是在调用阶段,导致分文件编写时链接不到解决:\n解决方式1:直接包含.cpp源文件\n解决方式2:将声明和实现写到同一个文件中,并更改后缀名为.hpp,hpp是约定的名称,并不是强制示例:person.hpp中代码:\n\n#pragma once#include <iostream>using namespace std;#include <string>template<class T1, class T2>class Person {public: Person(T1 name, T2 age); void showPerson();public: T1 m_Name; T2 m_Age;};//构造函数 类外实现template<class T1, class T2>Person<T1, T2>::Person(T1 name, T2 age) { this->m_Name = name; this->m_Age = age;}//成员函数 类外实现template<class T1, class T2>void Person<T1, T2>::showPerson() { cout << "姓名: " << this->m_Name << " 年龄:" << this->m_Age << endl;}\n\n类模板分文件编写.cpp中代码\n#include<iostream>using namespace std;//#include "person.h"#include "person.cpp" //解决方式1,包含cpp源文件//解决方式2,将声明和实现写到一起,文件后缀名改为.hpp#include "person.hpp"void test01(){ Person<string, int> p("Tom", 10); p.showPerson();}int main() { test01(); return 0;}\n\n主流的解决方式是第二种,将类模板成员函数写到一起,并将后缀名改为.hpp\n1.3.8 类模板与友元学习目标:\n\n掌握类模板配合友元函数的类内和类外实现全局函数类内实现 - 直接在类内声明友元即可全局函数类外实现 - 需要提前让编译器知道全局函数的存在示例:\n\n#include <string>//2、全局函数配合友元 类外实现 - 先做函数模板声明,下方在做函数模板定义,在做友元template<class T1, class T2> class Person;//如果声明了函数模板,可以将实现写到后面,否则需要将实现体写到类的前面让编译器提前看到//template<class T1, class T2> void printPerson2(Person<T1, T2> & p);template<class T1, class T2>void printPerson2(Person<T1, T2> & p){ cout << "类外实现 ---- 姓名: " << p.m_Name << " 年龄:" << p.m_Age << endl;}template<class T1, class T2>class Person{ //1、全局函数配合友元 类内实现 friend void printPerson(Person<T1, T2> & p) { cout << "姓名: " << p.m_Name << " 年龄:" << p.m_Age << endl; } //全局函数配合友元 类外实现 friend void printPerson2<>(Person<T1, T2> & p);public: Person(T1 name, T2 age) { this->m_Name = name; this->m_Age = age; }private: T1 m_Name; T2 m_Age;};//1、全局函数在类内实现void test01(){ Person <string, int >p("Tom", 20); printPerson(p);}//2、全局函数在类外实现void test02(){ Person <string, int >p("Jerry", 30); printPerson2(p);}int main() { //test01(); test02(); return 0;}\n\n建议全局函数做类内实现,用法简单,而且编译器可以直接识别\n1.3.9 类模板案例案例描述: 实现一个通用的数组类,要求如下:\n\n可以对内置数据类型以及自定义数据类型的数据进行存储\n将数组中的数据存储到堆区\n构造函数中可以传入数组的容量\n提供对应的拷贝构造函数以及operator=防止浅拷贝问题\n提供尾插法和尾删法对数组中的数据进行增加和删除\n可以通过下标的方式访问数组中的元素\n可以获取数组中当前元素个数和数组的容量示例:myArray.hpp中代码\n\n#pragma once#include <iostream>using namespace std;template<class T>class MyArray{public: //构造函数 MyArray(int capacity) { this->m_Capacity = capacity; this->m_Size = 0; pAddress = new T[this->m_Capacity]; } //拷贝构造 MyArray(const MyArray & arr) { this->m_Capacity = arr.m_Capacity; this->m_Size = arr.m_Size; this->pAddress = new T[this->m_Capacity]; for (int i = 0; i < this->m_Size; i++) { //如果T为对象,而且还包含指针,必须需要重载 = 操作符,因为这个等号不是 构造 而是赋值, // 普通类型可以直接= 但是指针类型需要深拷贝 this->pAddress[i] = arr.pAddress[i]; } } //重载= 操作符 防止浅拷贝问题 MyArray& operator=(const MyArray& myarray) { if (this->pAddress != NULL) { delete[] this->pAddress; this->m_Capacity = 0; this->m_Size = 0; } this->m_Capacity = myarray.m_Capacity; this->m_Size = myarray.m_Size; this->pAddress = new T[this->m_Capacity]; for (int i = 0; i < this->m_Size; i++) { this->pAddress[i] = myarray[i]; } return *this; } //重载[] 操作符 arr[0] T& operator [](int index) { return this->pAddress[index]; //不考虑越界,用户自己去处理 } //尾插法 void Push_back(const T & val) { if (this->m_Capacity *** this->m_Size) { return; } this->pAddress[this->m_Size] = val; this->m_Size++; } //尾删法 void Pop_back() { if (this->m_Size *** 0) { return; } this->m_Size--; } //获取数组容量 int getCapacity() { return this->m_Capacity; } //获取数组大小 int getSize() { return this->m_Size; } //析构 ~MyArray() { if (this->pAddress != NULL) { delete[] this->pAddress; this->pAddress = NULL; this->m_Capacity = 0; this->m_Size = 0; } }private: T * pAddress; //指向一个堆空间,这个空间存储真正的数据 int m_Capacity; //容量 int m_Size; // 大小};\n\n类模板案例—数组类封装.cpp中\n#include "myArray.hpp"#include <string>void printIntArray(MyArray<int>& arr) { for (int i = 0; i < arr.getSize(); i++) { cout << arr[i] << " "; } cout << endl;}//测试内置数据类型void test01(){ MyArray<int> array1(10); for (int i = 0; i < 10; i++) { array1.Push_back(i); } cout << "array1打印输出:" << endl; printIntArray(array1); cout << "array1的大小:" << array1.getSize() << endl; cout << "array1的容量:" << array1.getCapacity() << endl; cout << "--------------------------" << endl; MyArray<int> array2(array1); array2.Pop_back(); cout << "array2打印输出:" << endl; printIntArray(array2); cout << "array2的大小:" << array2.getSize() << endl; cout << "array2的容量:" << array2.getCapacity() << endl;}//测试自定义数据类型class Person {public: Person() {} Person(string name, int age) { this->m_Name = name; this->m_Age = age; }public: string m_Name; int m_Age;};void printPersonArray(MyArray<Person>& personArr){ for (int i = 0; i < personArr.getSize(); i++) { cout << "姓名:" << personArr[i].m_Name << " 年龄: " << personArr[i].m_Age << endl; }}void test02(){ //创建数组 MyArray<Person> pArray(10); Person p1("孙悟空", 30); Person p2("韩信", 20); Person p3("妲己", 18); Person p4("王昭君", 15); Person p5("赵云", 24); //插入数据 pArray.Push_back(p1); pArray.Push_back(p2); pArray.Push_back(p3); pArray.Push_back(p4); pArray.Push_back(p5); printPersonArray(pArray); cout << "pArray的大小:" << pArray.getSize() << endl; cout << "pArray的容量:" << pArray.getCapacity() << endl;}int main() { //test01(); test02(); return 0;}\n\n能够利用所学知识点实现通用的数组\n二、STL初识容器vector<int> v; // 创建容器v.push_back(10);//向容器中放数据v.begin() //返回第一个元素v.end() //返回最后一个元素/* 遍历 *///1.for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << endl;}//2.for (auto it = v.begin(); it != v.end(); it ++){ cout << *it << endl;}//3.#include <algorithm>void MyPrint(int val){ cout << val << endl;}for_each(v.begin(), v.end(), MyPrint);\n\n\n存放自定义数据的时候,初始化容器数据是要使用数据类型的构造函数。访问时使用(*it).member\n\n存放对象指针:vector<class *> v ,放入数据时要放入地址:v.push_back(&Object)\n\n容器嵌套容器:vector<vector<int>> v,遍历时要用嵌套for循环。迭代器种类:\n\n\n\n种类\n功能\n支持运算\n\n\n\n输入迭代器\n对数据的只读访问\n只读,支持++、***、!=\n\n\n输出迭代器\n对数据的只写访问\n只写,支持++\n\n\n前向迭代器\n读写操作,并能向前推进迭代器\n读写,支持++、***、!=\n\n\n双向迭代器\n读写操作,并能向前和向后操作\n读写,支持++、--,\n\n\n随机访问迭代器\n读写操作,可以以跳跃的方式访问任意数据,功能最强的迭代器\n读写,支持++、--、[n]、-n、<、<=、>、>=\n\n\n常用的容器中迭代器种类为双向迭代器,和随机访问迭代器\n\n\n\n\n\n\nstring本质上是一个类char *是一个指针,而string是一个类,内部封装了char *,来管理这个字符串,所以string是一个char *型的容器\n\n\n\n方法\n作用\n\n\n\nfind\n查找\n\n\ncopy\n拷贝\n\n\ndelete\n删除\n\n\nreplace\n替换\n\n\ninsert\n插入\n\n\n构造函数string();//创建一个空的字符串 例如: string str;string(const char* s);//使用字符串s初始化string(const string& str);//使用一个string对象初始化另一个string对象string(int n, char c);//使用n个字符c初始化\n\n赋值string& operator=(const char* s);//char*类型字符串 赋值给当前的字符串string& operator=(const string &s);//把字符串s赋给当前的字符串string& operator=(char c);//字符赋值给当前的字符串string& assign(const char *s);//把字符串s赋给当前的字符串string& assign(const char *s, int n);//把字符串s的前n个字符赋给当前的字符串string& assign(const string &s);//把字符串s赋给当前字符串string& assign(int n, char c);//用n个字符c赋给当前字符串\n\n带operator=的是等号运算符重载,即可以用另一个数据和=给其赋值,assingn则是成员函数,需要调用函数才能赋值\n字符串拼接string& operator+=(const char* str);//重载+=操作符string& operator+=(const char c);//重载+=操作符string& operator+=(const string& str);//重载+=操作符string& append(const char *s);//把字符串s连接到当前字符串结尾string& append(const char *s, int n);//把字符串s的前n个字符连接到当前字符串结尾string& append(const string &s);//同operator+=(const string& str)string& append(const string &s, int pos, int n); //字符串s中从pos开始的n个字符连接到字符串结尾\n\n查找替换int find(const string& str, int pos = 0) const;//查找str第一次出现位置,从pos开始查找int find(const char* s, int pos = 0) const;//查找s第一次出现位置,从pos开始查找int find(const char* s, int pos, int n) const;//从pos位置查找s的前n个字符第一次位置int find(const char c, int pos = 0) const;//查找字符c第一次出现位置int rfind(const string& str, int pos = npos) const;//查找str最后一次位置,从pos开始查找int rfind(const char* s, int pos = npos) const;//查找s最后一次出现位置,从pos开始查找int rfind(const char* s, int pos, int n) const;//从pos查找s的前n个字符最后一次位置int rfind(const char c, int pos = 0) const;//查找字符c最后一次出现位置string& replace(int pos, int n, const string& str);//替换从pos开始n个字符为字符串strstring& replace(int pos, int n,const char* s);//替换从pos开始的n个字符为字符串s\n\nfind查找是从左往后,rfind从右往左find找到字符串后返回查找的第一个字符位置,找不到返回-1replace在替换时,要指定从哪个位置起,多少个字符,替换成什么样的字符串\n字符串的比较int compare(const string &s) const;//与字符串s比较int compare(const char *s) const;//与字符串s比较//比较ASCII码//= 返回0//> 返回1//< 返回-1\n\n单个字符存取char& operator[](int n);//通过[]方式取字符char& at(int n);//通过at方法获取字符\n\n插入和删除string& insert(int pos, const char* s);//插入字符串string& insert(int pos, const string& str);//插入字符串string& insert(int pos, int n, char c);//在指定位置插入n个字符cstring& erase(int pos, int n = npos);//删除从Pos开始的n个字符\n\n字符串子串string substr(int pos = 0, int n = npos) const;//返回由pos开始的n个字符组成的字符串\n\nvector单端数组,可以动态扩展,但扩展时不是直接接上,而是寻找更大的空间拷贝过去,释放原来的空间\n构造函数vector<T> v;//采用模板实现类实现,默认构造函数vector(v.begin(), v.end());//将v[begin(), end())区间中的元素拷贝给本身。vector(n, element);//构造函数将n个elem拷贝给本身。vector(const vector &vec);//拷贝构造函数。\n\n赋值vector& operator=(const vector &vec); //重载等号操作符assign(begin, end);//将[begin, end)区间中的数据拷贝赋值给本身。assign(n, element);//将n个elem拷贝赋值给本身。\n\n容量和大小empty(); //判断容器是否为空capacity(); //容器的容量size(); //返回容器中元素的个数resize(int num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。//如果容器变短,则末尾超出容器长度的元素被删除。resize(int num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。//如果容器变短,则末尾超出容器长度的元素被删除\n\n插入和删除push_back(ele);//尾部插入元素elepop_back();//删除最后一个元素insert(const_iterator pos, ele);//迭代器指向位置pos插入元素eleinsert(const_iterator pos, int count,ele); //迭代器指向位置pos插入count个元素eleerase(const_iterator pos);//删除迭代器指向的元素erase(const_iterator start, const_iterator end); //删除迭代器从start到end之间的元素clear();//删除容器中所有元素\n\n数据存取at(int idx);//返回索引idx所指的数据operator[];//返回索引idx所指的数据front();//返回容器中第一个数据元素back();//返回容器中最后一个数据元素\n\n两个容器交换swap(vec);// 将vec与本身的元素互换\n\n预留空间reserve(int len); //容器预留len个元素长度,预留位置不初始化,元素不可访问。\n\n目的是减少动态扩展时的扩展次数\ndeque双端数组,头尾均可插入或删除,头部插入比vector快,但访问元素的速度没有vector快deque是一片连续的内存空间\n构造函数deque<T> deqT;//默认构造形式deque(beg, end);//构造函数将[beg, end)区间中的元素拷贝给本身。deque(n, elem);//构造函数将n个elem拷贝给本身。deque(const deque &deq);//拷贝构造函数\n\n赋值deque& operator=(const deque &deq);//重载等号操作符assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。assign(n, elem);//将n个elem拷贝赋值给本身。\n\n容量和大小deque.empty(); //判断容器是否为空deque.size(); //返回容器中元素的个数deque.resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。//如果容器变短,则末尾超出容器长度的元素被删除。deque.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。//如果容器变短,则末尾超出容器长度的元素被删除。\n\n插入和删除push_back(elem);//在容器尾部添加一个数据push_front(elem);//在容器头部插入一个数据pop_back();//删除容器最后一个数据pop_front();//删除容器第一个数据insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置。insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值。insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值。clear(); //清空容器的所有数据erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置。erase(pos); //删除pos位置的数据,返回下一个数据的位置。\n\n数据存取:\nat(int idx);//返回索引idx所指的数据operator[];//返回索引idx所指的数据front();//返回容器中第一个数据元素back();//返回容器中最后一个数据元素\n\n排序sort(iterator beg, iterator end)//对beg和end区间内元素进行排序\n\nstack先进后出,只有顶部的元素才可以使用,因此无法遍历,push入栈,pop出栈\n常用接口//构造函数:stack<T> stk;//stack采用模板类实现, stack对象的默认构造形式stack(const stack &stk);//拷贝构造函数//赋值操作:stack& operator=(const stack &stk);//数据存取:push(elem);//向栈顶添加元素pop();//从栈顶移除第一个元素top();//返回栈顶元素//大小操作:empty();//判断堆栈是否为空size();//返回栈的大小\n\nqueue先进先出,一端进一端出,只有头尾可以被使用,因此也不能遍历\n常用接口//构造函数:queue<T> que;//queue采用模板类实现,queue对象的默认构造形式queue(const queue &que);//拷贝构造函数//赋值操作:queue& operator=(const queue &que);//重载等号操作符//数据存取:push(elem);//往队尾添加元素pop();//从队头移除第一个元素back();//返回最后一个元素front();//返回第一个元素//大小操作:empty();//判断堆栈是否为空size();//返回栈的大小\n\nlist链表,一系列指针链组成,是一个双向循环链表,储存不是连续的内存空间,list的迭代器只支持前移和后移,属于双向迭代器采用动态储存分配,不会造成内存浪费或溢出,插入删除只需要修改指针,灵活,但空间和时间消耗大重要性质: 插入和删除都不会造成原有的迭代器失效,vector是不可以的另外list和vector是最常用的两个容器,各有优缺点\n常用接口//构造函数list<T> lst;//list采用采用模板类实现,对象的默认构造形式:list(beg,end);//构造函数将[beg, end)区间中的元素拷贝给本身。list(n,elem);//构造函数将n个elem拷贝给本身。list(const list &lst);//拷贝构造函数。//赋值和交换assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。assign(n, elem);//将n个elem拷贝赋值给本身。list& operator=(const list &lst);swap(lst);//重载等号操作符//将lst与本身的元素互换。//大小size(); //返回容器中元素的个数empty(); //判断容器是否为空resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。//如果容器变短,则末尾超出容器长度的元素被删除。resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。//如果容器变短,则末尾超出容器长度的元素被删除。//插入和删除push_back(elem);//在容器尾部加入一个元素pop_back();//删除容器中最后一个元素push_front(elem);//在容器开头插入一个元素pop_front();//从容器开头移除第一个元素insert(pos,elem);//在pos位置插elem元素的拷贝,返回新数据的位置。insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值。insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。clear();//移除容器的所有数据erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。erase(pos);//删除pos位置的数据,返回下一个数据的位置。remove(elem);//删除容器中所有与elem值匹配的元素。//存取front();//返回第一个元素。back();//返回最后一个元素。//反转和排序reverse();//反转链表sort();//链表排序\n\nset和multiset所有元素在插入时就被自动排列属关联式容器,底层结构是二叉树实现的set不允许有重复的元素,multiset可以有重复的元素;set插入数据后会返回结果,表示是否插入成功,而multiset一定可以成功,所以不会检测数据\n常用接口//构造:set<T> st;//默认构造函数:set(const set &st);//拷贝构造函数//赋值:set& operator=(const set &st);//重载等号操作符//大小和交换size();//返回容器中元素的数目empty();//判断容器是否为空swap(st);//交换两个集合容器//插入和删除insert(elem);//在容器中插入元素。clear();//清除所有元素erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器。erase(beg, end);//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。erase(elem);//删除容器中值为elem的元素。//查找和统计find(key);//查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();count(key);//统计key的元素个数\n\nset的默认排序规则为从小到大,利用仿函数可以改变规则\n#include <iostream>#include <set>using namespace std;class myCompare{public:bool operator()(int v1, int v2){ return v1 > v2;}};void test(){ set<int> set_1; set_1.insert(1); set_1.insert(2); set_1.insert(3); set_1.insert(4); set_1.insert(5); set_1.insert(6); for (auto it = set_1.begin(); it != set_1.end(); it++){ std::cout << *it << " " << "\\n" ; } set<int, myCompare> set_2; set_2.insert(2); set_2.insert(3); set_2.insert(1); set_2.insert(5); set_2.insert(4); set_2.insert(6); for (auto it = set_2.begin(); it != set_2.end(); it++){ std::cout << *it << " " << "\\n" ; }}int main(int argc, char const *argv[]){ test(); return 0;}\n\n当使用自定义数据类型时,set必须指定排序规则才可以插入数据\npair成对出现的数据可以使用pair\n常用接口//创建方式pair<type, type> p ( value1, value2 );pair<type, type> p = make_pair( value1, value2 );\n\nmap和multimap所有的元素都是pair,其中第一个元素是key,第二个是value,所有元素都会根据元素的key进行自动排序属于关联式容器,底层结构是用二叉树实现可以通过key值快速找到valuemap不能有重复的key,multimap可以有重复的key\n常用接口//构造:map<T1, T2> mp;//map默认构造函数:map(const map &mp);//拷贝构造函数//赋值:map& operator=(const map &mp);//大小和交换size();//返回容器中元素的数目empty();//判断容器是否为空swap(st);//交换两个集合容器//插入和删除insert(elem);//在容器中插入元素。clear();//清除所有元素erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器。erase(beg, end);//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。erase(key);//删除容器中值为key的元素。//查找和统计find(key);//查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();count(key);//统计key的元素个数\n\n也可以利用仿函数指定排序规则\n函数对象重载函数调用操作符的类,其对象称为函数对象函数对象使用重载时,行为类似函数调用,所以也叫仿函数是一个类而非函数函数对象可以有参数也可以有返回值但函数对象超出普通函数的概念,有自己的状态函数对象可以作为参数进行传递\n#include <iostream>using namespace std;class add{public: add(){ count = 0; } int operator()(int v1, int v2){ count ++; return v1 + v2; } int count = 0;};void test(){ add add; add.operator()(1,2); add.operator()(1,3); add.operator()(1,2); add.operator()(1,2); cout << add.count << endl;}int main(){ test(); return 0;}\n\nThe keys of cpp comparing to c language is Object-oriented and Generic programming.\ncount类似于find,可查找字符串中某个字符出现的次数。\nstring s = "abcdefgaaadsasafas";int numOfA = s.count('a');\n\n当map类的数据使用count的时候,传入的参数应是key而非value。\n三、函数对象4.1 函数对象4.1.1 函数对象概念概念:\n\n重载函数调用操作符的类,其对象常称为函数对象\n函数对象使用重载的()时,行为类似函数调用,也叫仿函数本质:函数对象(仿函数)是一个类,不是一个函数\n\n4.1.2 函数对象使用特点:\n\n函数对象在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值\n函数对象超出普通函数的概念,函数对象可以有自己的状态\n函数对象可以作为参数传递示例:\n\n#include <string>//1、函数对象在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值class MyAdd{public : int operator()(int v1,int v2) { return v1 + v2; }};void test01(){ MyAdd myAdd; cout << myAdd(10, 10) << endl;}//2、函数对象可以有自己的状态class MyPrint{public: MyPrint() { count = 0; } void operator()(string test) { cout << test << endl; count++; //统计使用次数 } int count; //内部自己的状态};void test02(){ MyPrint myPrint; myPrint("hello world"); myPrint("hello world"); myPrint("hello world"); cout << "myPrint调用次数为: " << myPrint.count << endl;}//3、函数对象可以作为参数传递void doPrint(MyPrint &mp , string test){ mp(test);}void test03(){ MyPrint myPrint; doPrint(myPrint, "Hello cpp");}int main() { //test01(); //test02(); test03(); return 0;}\n\n总结:\n\n仿函数写法非常灵活,可以作为参数进行传递。\n\n4.2 谓词4.2.1 谓词概念概念:\n\n返回bool类型的仿函数称为谓词\n如果operator()接受一个参数,那么叫做一元谓词\n如果operator()接受两个参数,那么叫做二元谓词\n\n4.2.2 一元谓词示例:\n#include <vector>#include <algorithm>//1.一元谓词struct GreaterFive{ bool operator()(int val) { return val > 5; }};void test01() { vector<int> v; for (int i = 0; i < 10; i++) { v.push_back(i); } vector<int>::iterator it = find_if(v.begin(), v.end(), GreaterFive()); if (it *** v.end()) { cout << "没找到!" << endl; } else { cout << "找到:" << *it << endl; }}int main() { test01(); return 0;}\n\n\n参数只有一个的谓词,称为一元谓词\n\n4.2.3 二元谓词示例:\n#include <vector>#include <algorithm>//二元谓词class MyCompare{public: bool operator()(int num1, int num2) { return num1 > num2; }};void test01(){ vector<int> v; v.push_back(10); v.push_back(40); v.push_back(20); v.push_back(30); v.push_back(50); //默认从小到大 sort(v.begin(), v.end()); for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl; cout << "----------------------------" << endl; //使用函数对象改变算法策略,排序从大到小 sort(v.begin(), v.end(), MyCompare()); for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl;}int main() { test01(); return 0;}\n\n\n参数只有两个的谓词,称为二元谓词\n\n4.3 内建函数对象4.3.1 内建函数对象意义概念:\n\nSTL内建了一些函数对象分类:\n算术仿函数\n关系仿函数\n逻辑仿函数用法:\n这些仿函数所产生的对象,用法和一般函数完全相同\n使用内建函数对象,需要引入头文件 #include <functional>\n\n4.3.2 算术仿函数功能描述:\n\n实现四则运算\n其中negate是一元运算,其他都是二元运算仿函数原型:\ntemplate<class T> T plus<T> //加法仿函数\ntemplate<class T> T minus<T> //减法仿函数\ntemplate<class T> T multiplies<T> //乘法仿函数\ntemplate<class T> T divides<T> //除法仿函数\ntemplate<class T> T modulus<T> //取模仿函数\ntemplate<class T> T negate<T> //取反仿函数示例:\n\n#include <functional>//negatevoid test01(){ negate<int> n; cout << n(50) << endl;}//plusvoid test02(){ plus<int> p; cout << p(10, 20) << endl;}int main() { test01(); test02(); system("pause"); return 0;}\n\n\n使用内建函数对象时,需要引入头文件 #include <functional>\n\n4.3.3 关系仿函数功能描述:\n\n实现关系对比仿函数原型:\n\ntemplate<class T> bool equal_to<T> //等于\n\ntemplate<class T> bool not_equal_to<T> //不等于\n\ntemplate<class T> bool greater<T> //大于\n\ntemplate<class T> bool greater_equal<T> //大于等于\n\ntemplate<class T> bool less<T> //小于\n\ntemplate<class T> bool less_equal<T> //小于等于示例:\n\n\n#include <functional>#include <vector>#include <algorithm>class MyCompare{public: bool operator()(int v1,int v2) { return v1 > v2; }};void test01(){ vector<int> v; v.push_back(10); v.push_back(30); v.push_back(50); v.push_back(40); v.push_back(20); for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl; //自己实现仿函数 //sort(v.begin(), v.end(), MyCompare()); //STL内建仿函数 大于仿函数 sort(v.begin(), v.end(), greater<int>()); for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl;}int main() { test01(); return 0;}\n\n关系仿函数中最常用的就是greater<>大于\n4.3.4 逻辑仿函数功能描述:\n\n实现逻辑运算函数原型:\n\ntemplate<class T> bool logical_and<T> //逻辑与\n\ntemplate<class T> bool logical_or<T> //逻辑或\n\ntemplate<class T> bool logical_not<T> //逻辑非示例:\n\n\n#include <vector>#include <functional>#include <algorithm>void test01(){ vector<bool> v; v.push_back(true); v.push_back(false); v.push_back(true); v.push_back(false); for (vector<bool>::iterator it = v.begin();it!= v.end();it++) { cout << *it << " "; } cout << endl; //逻辑非 将v容器搬运到v2中,并执行逻辑非运算 vector<bool> v2; v2.resize(v.size()); transform(v.begin(), v.end(), v2.begin(), logical_not<bool>()); for (vector<bool>::iterator it = v2.begin(); it != v2.end(); it++) { cout << *it << " "; } cout << endl;}int main() { test01(); return 0;}\n\n\n逻辑仿函数实际应用较少,了解即可\n\n四、STL常用算法Algorithm概述:\n\n算法主要是由头文件<algorithm> <functional> <numeric>组成。\n<algorithm>是所有STL头文件中最大的一个,范围涉及到比较、 交换、查找、遍历操作、复制、修改等等\n<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数\n<functional>定义了一些模板类,用以声明函数对象。\n\n5.1 常用遍历算法学习目标:\n\n掌握常用的遍历算法算法简介:\nfor_each //遍历容器\ntransform //搬运容器到另一个容器中\n\n5.1.1 for_each功能描述:\n\n实现遍历容器函数原型:\nfor_each(iterator beg, iterator end, _func);// 遍历算法 遍历容器元素// beg 开始迭代器// end 结束迭代器// _func 函数或者函数对象示例:\n\n#include <algorithm>#include <vector>//普通函数void print01(int val){ cout << val << " ";}//函数对象class print02{ public: void operator()(int val) { cout << val << " "; }};//for_each算法基本用法void test01() { vector<int> v; for (int i = 0; i < 10; i++) { v.push_back(i); } //遍历算法 for_each(v.begin(), v.end(), print01); cout << endl; for_each(v.begin(), v.end(), print02()); cout << endl;}int main() { test01(); return 0;}\n\n\nfor_each在实际开发中是最常用遍历算法,需要熟练掌握\n\n5.1.2 transform功能描述:\n\n搬运容器到另一个容器中函数原型:\ntransform(iterator beg1, iterator end1, iterator beg2, _func);//beg1 源容器开始迭代器//end1 源容器结束迭代器//beg2 目标容器开始迭代器//_func 函数或者函数对象示例:\n\n#include<vector>#include<algorithm>//常用遍历算法 搬运 transformclass TransForm{public: int operator()(int val) { return val; }};class MyPrint{public: void operator()(int val) { cout << val << " "; }};void test01(){ vector<int>v; for (int i = 0; i < 10; i++) { v.push_back(i); } vector<int>vTarget; //目标容器 vTarget.resize(v.size()); // 目标容器需要提前开辟空间 transform(v.begin(), v.end(), vTarget.begin(), TransForm()); for_each(vTarget.begin(), vTarget.end(), MyPrint());}int main() { test01(); return 0;}\n\n\n搬运的目标容器必须要提前开辟空间,否则无法正常搬运也可以用来转换大小写:\n\ntransform(str.begin(),str.end(),str.begin(),::tolower); transform(str.begin(),str.end(),str.begin(),::toupper);\n\n5.2 常用查找算法学习目标:\n\n掌握常用的查找算法算法简介:\nfind //查找元素\nfind_if //按条件查找元素\nadjacent_find //查找相邻重复元素\nbinary_search //二分查找法\ncount //统计元素个数\ncount_if //按条件统计元素个数\n\n5.2.1 find功能描述:\n\n查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器end()函数原型:\n\nfind(iterator beg, iterator end, value);// 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置// beg 开始迭代器// end 结束迭代器// value 查找的元素示例:\n\n\n#include <algorithm>#include <vector>#include <string>void test01() { vector<int> v; for (int i = 0; i < 10; i++) { v.push_back(i + 1); } //查找容器中是否有 5 这个元素 vector<int>::iterator it = find(v.begin(), v.end(), 5); if (it *** v.end()) { cout << "没有找到!" << endl; } else { cout << "找到:" << *it << endl; }}class Person {public: Person(string name, int age) { this->m_Name = name; this->m_Age = age; } //重载*** bool operator***(const Person& p) { if (this->m_Name *** p.m_Name && this->m_Age *** p.m_Age) { return true; } return false; }public: string m_Name; int m_Age;};void test02() { vector<Person> v; //创建数据 Person p1("aaa", 10); Person p2("bbb", 20); Person p3("ccc", 30); Person p4("ddd", 40); v.push_back(p1); v.push_back(p2); v.push_back(p3); v.push_back(p4); vector<Person>::iterator it = find(v.begin(), v.end(), p2); if (it *** v.end()) { cout << "没有找到!" << endl; } else { cout << "找到姓名:" << it->m_Name << " 年龄: " << it->m_Age << endl; }}\n\n\n利用find可以在容器中找指定的元素,返回值是迭代器\n\n5.2.2 find_if功能描述:\n\n按条件查找元素函数原型:\n\nfind_if(iterator beg, iterator end, _Pred);// 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置// beg 开始迭代器// end 结束迭代器// _Pred 函数或者谓词(返回bool类型的仿函数)示例:\n\n\n#include <algorithm>#include <vector>#include <string>//内置数据类型class GreaterFive{public: bool operator()(int val) { return val > 5; }};void test01() { vector<int> v; for (int i = 0; i < 10; i++) { v.push_back(i + 1); } vector<int>::iterator it = find_if(v.begin(), v.end(), GreaterFive()); if (it *** v.end()) { cout << "没有找到!" << endl; } else { cout << "找到大于5的数字:" << *it << endl; }}//自定义数据类型class Person {public: Person(string name, int age) { this->m_Name = name; this->m_Age = age; }public: string m_Name; int m_Age;};class Greater20{public: bool operator()(Person &p) { return p.m_Age > 20; }};void test02() { vector<Person> v; //创建数据 Person p1("aaa", 10); Person p2("bbb", 20); Person p3("ccc", 30); Person p4("ddd", 40); v.push_back(p1); v.push_back(p2); v.push_back(p3); v.push_back(p4); vector<Person>::iterator it = find_if(v.begin(), v.end(), Greater20()); if (it *** v.end()) { cout << "没有找到!" << endl; } else { cout << "找到姓名:" << it->m_Name << " 年龄: " << it->m_Age << endl; }}int main() { //test01(); test02(); return 0;}\n\n\nfind_if按条件查找使查找更加灵活,提供的仿函数可以改变不同的策略\n\n5.2.3 adjacent_find功能描述:\n\n查找相邻重复元素函数原型:\n\nadjacent_find(iterator beg, iterator end);// 查找相邻重复元素,返回相邻元素的第一个位置的迭代器// beg 开始迭代器// end 结束迭代器示例:\n\n\n#include <algorithm>#include <vector>void test01(){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(5); v.push_back(2); v.push_back(4); v.push_back(4); v.push_back(3); //查找相邻重复元素 vector<int>::iterator it = adjacent_find(v.begin(), v.end()); if (it *** v.end()) { cout << "找不到!" << endl; } else { cout << "找到相邻重复元素为:" << *it << endl; }}\n\n\n面试题中如果出现查找相邻重复元素,记得用STL中的adjacent_find算法\n\n5.2.4 binary_search功能描述:\n\n查找指定元素是否存在函数原型:\n\nbool binary_search(iterator beg, iterator end, value);// 查找指定的元素,查到 返回true 否则false// 注意: 在无序序列中不可用// beg 开始迭代器// end 结束迭代器// value 查找的元素示例:\n\n\n#include <algorithm>#include <vector>void test01(){ vector<int>v; for (int i = 0; i < 10; i++) { v.push_back(i); } //二分查找 bool ret = binary_search(v.begin(), v.end(),2); if (ret) { cout << "找到了" << endl; } else { cout << "未找到" << endl; }}int main() { test01(); return 0;}\n\n总结: 二分查找法查找效率很高,值得注意的是查找的容器中元素必须的有序序列\n5.2.5 count功能描述:\n\n统计元素个数函数原型:\n\ncount(iterator beg, iterator end, value);// 统计元素出现次数// beg 开始迭代器// end 结束迭代器// value 统计的元素示例:\n\n\n#include <algorithm>#include <vector>//内置数据类型void test01(){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(4); v.push_back(5); v.push_back(3); v.push_back(4); v.push_back(4); int num = count(v.begin(), v.end(), 4); cout << "4的个数为: " << num << endl;}//自定义数据类型class Person{public: Person(string name, int age) { this->m_Name = name; this->m_Age = age; } bool operator***(const Person & p) { if (this->m_Age *** p.m_Age) { return true; } else { return false; } } string m_Name; int m_Age;};void test02(){ vector<Person> v; Person p1("刘备", 35); Person p2("关羽", 35); Person p3("张飞", 35); Person p4("赵云", 30); Person p5("曹操", 25); v.push_back(p1); v.push_back(p2); v.push_back(p3); v.push_back(p4); v.push_back(p5); Person p("诸葛亮",35); int num = count(v.begin(), v.end(), p); cout << "num = " << num << endl;}int main() { //test01(); test02(); return 0;}\n\n\n统计自定义数据类型时候,需要配合重载 operator***\n\n5.2.6 count_if功能描述:\n\n按条件统计元素个数函数原型:\n\ncount_if(iterator beg, iterator end, _Pred);// 按条件统计元素出现次数// beg 开始迭代器// end 结束迭代器// _Pred 谓词示例:\n\n\n#include <algorithm>#include <vector>class Greater4{public: bool operator()(int val) { return val >= 4; }};//内置数据类型void test01(){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(4); v.push_back(5); v.push_back(3); v.push_back(4); v.push_back(4); int num = count_if(v.begin(), v.end(), Greater4()); cout << "大于4的个数为: " << num << endl;}//自定义数据类型class Person{public: Person(string name, int age) { this->m_Name = name; this->m_Age = age; } string m_Name; int m_Age;};class AgeLess35{public: bool operator()(const Person &p) { return p.m_Age < 35; }};void test02(){ vector<Person> v; Person p1("刘备", 35); Person p2("关羽", 35); Person p3("张飞", 35); Person p4("赵云", 30); Person p5("曹操", 25); v.push_back(p1); v.push_back(p2); v.push_back(p3); v.push_back(p4); v.push_back(p5); int num = count_if(v.begin(), v.end(), AgeLess35()); cout << "小于35岁的个数:" << num << endl;}int main() { //test01(); test02(); return 0;}\n\n\n按值统计用count,按条件统计用count_if\n\n5.3 常用排序算法学习目标:\n\n掌握常用的排序算法算法简介:\nsort //对容器内元素进行排序\nrandom_shuffle //洗牌 指定范围内的元素随机调整次序\nmerge // 容器元素合并,并存储到另一容器中\nreverse // 反转指定范围的元素\n\n5.3.1 sort功能描述:\n\n对容器内元素进行排序函数原型:\n\nsort(iterator beg, iterator end, _Pred);// 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置// beg 开始迭代器// end 结束迭代器// _Pred 谓词示例:\n\n\n#include <algorithm>#include <vector>void myPrint(int val){ cout << val << " ";}void test01() { vector<int> v; v.push_back(10); v.push_back(30); v.push_back(50); v.push_back(20); v.push_back(40); //sort默认从小到大排序 sort(v.begin(), v.end()); for_each(v.begin(), v.end(), myPrint); cout << endl; //从大到小排序 sort(v.begin(), v.end(), greater<int>()); for_each(v.begin(), v.end(), myPrint); cout << endl;}int main() { test01(); return 0;}\n\n\nsort属于开发中最常用的算法之一,需熟练掌握\n\n5.3.2 random_shuffle功能描述:\n\n洗牌 指定范围内的元素随机调整次序函数原型:\n\nrandom_shuffle(iterator beg, iterator end);// 指定范围内的元素随机调整次序// beg 开始迭代器// end 结束迭代器示例:\n\n\n#include <algorithm>#include <vector>#include <ctime>class myPrint{public: void operator()(int val) { cout << val << " "; }};void test01(){ srand((unsigned int)time(NULL)); vector<int> v; for(int i = 0 ; i < 10;i++) { v.push_back(i); } for_each(v.begin(), v.end(), myPrint()); cout << endl; //打乱顺序 random_shuffle(v.begin(), v.end()); for_each(v.begin(), v.end(), myPrint()); cout << endl;}int main() { test01(); return 0;}\n\n\nrandom_shuffle洗牌算法比较实用,使用时记得加随机数种子\n\n5.3.3 merge功能描述:\n\n两个容器元素合并,并存储到另一容器中函数原型:\n\nmerge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);// 容器元素合并,并存储到另一容器中// 注意: 两个容器必须是有序的// beg1 容器1开始迭代器// end1 容器1结束迭代器// beg2 容器2开始迭代器// end2 容器2结束迭代器// dest 目标容器开始迭代器示例:\n\n\n#include <algorithm>#include <vector>class myPrint{public: void operator()(int val) { cout << val << " "; }};void test01(){ vector<int> v1; vector<int> v2; for (int i = 0; i < 10 ; i++) { v1.push_back(i); v2.push_back(i + 1); } vector<int> vtarget; //目标容器需要提前开辟空间 vtarget.resize(v1.size() + v2.size()); //合并 需要两个有序序列 merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vtarget.begin()); for_each(vtarget.begin(), vtarget.end(), myPrint()); cout << endl;}int main() { test01(); return 0;}\n\n\nmerge合并的两个容器必须的有序序列\n\n5.3.4 reverse功能描述:\n\n将容器内元素进行反转函数原型:\n\nreverse(iterator beg, iterator end);// 反转指定范围的元素// beg 开始迭代器// end 结束迭代器示例:\n\n\n#include <algorithm>#include <vector>class myPrint{public: void operator()(int val) { cout << val << " "; }};void test01(){ vector<int> v; v.push_back(10); v.push_back(30); v.push_back(50); v.push_back(20); v.push_back(40); cout << "反转前: " << endl; for_each(v.begin(), v.end(), myPrint()); cout << endl; cout << "反转后: " << endl; reverse(v.begin(), v.end()); for_each(v.begin(), v.end(), myPrint()); cout << endl;}int main() { test01(); return 0;}\n\n\nreverse反转区间内元素,面试题可能涉及到\n\n5.4 常用拷贝和替换算法学习目标:\n\n掌握常用的拷贝和替换算法算法简介:\ncopy // 容器内指定范围的元素拷贝到另一容器中\nreplace // 将容器内指定范围的旧元素修改为新元素\nreplace_if // 容器内指定范围满足条件的元素替换为新元素\nswap // 互换两个容器的元素\n\n5.4.1 copy功能描述:\n\n容器内指定范围的元素拷贝到另一容器中函数原型:\n\ncopy(iterator beg, iterator end, iterator dest);// 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置// beg 开始迭代器// end 结束迭代器// dest 目标起始迭代器示例:\n\n\n#include <algorithm>#include <vector>class myPrint{public: void operator()(int val) { cout << val << " "; }};void test01(){ vector<int> v1; for (int i = 0; i < 10; i++) { v1.push_back(i + 1); } vector<int> v2; v2.resize(v1.size()); copy(v1.begin(), v1.end(), v2.begin()); for_each(v2.begin(), v2.end(), myPrint()); cout << endl;int main() { test01(); return 0;}\n\n\n利用copy算法在拷贝时,目标容器记得提前开辟空间\n\n5.4.2 replace功能描述:\n\n将容器内指定范围的旧元素修改为新元素函数原型:\n\nreplace(iterator beg, iterator end, oldvalue, newvalue);// 将区间内旧元素 替换成 新元素// beg 开始迭代器// end 结束迭代器// oldvalue 旧元素// newvalue 新元素示例:\n\n\n#include <algorithm>#include <vector>class myPrint{public: void operator()(int val) { cout << val << " "; }};void test01(){ vector<int> v; v.push_back(20); v.push_back(30); v.push_back(20); v.push_back(40); v.push_back(50); v.push_back(10); v.push_back(20); cout << "替换前:" << endl; for_each(v.begin(), v.end(), myPrint()); cout << endl; //将容器中的20 替换成 2000 cout << "替换后:" << endl; replace(v.begin(), v.end(), 20,2000); for_each(v.begin(), v.end(), myPrint()); cout << endl;}int main() { test01(); return 0;}\n\n\nreplace会替换区间内满足条件的元素\n\n5.4.3 replace_if功能描述:\n\n将区间内满足条件的元素,替换成指定元素函数原型:\n\nreplace_if(iterator beg, iterator end, _pred, newvalue);// 按条件替换元素,满足条件的替换成指定元素// beg 开始迭代器// end 结束迭代器// _pred 谓词// newvalue 替换的新元素示例:\n\n\n#include <algorithm>#include <vector>class myPrint{public: void operator()(int val) { cout << val << " "; }};class ReplaceGreater30{public: bool operator()(int val) { return val >= 30; }};void test01(){ vector<int> v; v.push_back(20); v.push_back(30); v.push_back(20); v.push_back(40); v.push_back(50); v.push_back(10); v.push_back(20); cout << "替换前:" << endl; for_each(v.begin(), v.end(), myPrint()); cout << endl; //将容器中大于等于的30 替换成 3000 cout << "替换后:" << endl; replace_if(v.begin(), v.end(), ReplaceGreater30(), 3000); for_each(v.begin(), v.end(), myPrint()); cout << endl;}int main() { test01(); return 0;}\n\n\nreplace_if按条件查找,可以利用仿函数灵活筛选满足的条件\n\n5.4.4 swap功能描述:\n\n互换两个容器的元素函数原型:\n\nswap(container c1, container c2);// 互换两个容器的元素// c1容器1// c2容器2示例:\n\n\n#include <algorithm>#include <vector>class myPrint{public: void operator()(int val) { cout << val << " "; }};void test01(){ vector<int> v1; vector<int> v2; for (int i = 0; i < 10; i++) { v1.push_back(i); v2.push_back(i+100); } cout << "交换前: " << endl; for_each(v1.begin(), v1.end(), myPrint()); cout << endl; for_each(v2.begin(), v2.end(), myPrint()); cout << endl; cout << "交换后: " << endl; swap(v1, v2); for_each(v1.begin(), v1.end(), myPrint()); cout << endl; for_each(v2.begin(), v2.end(), myPrint()); cout << endl;}int main() { test01(); return 0;}\n\n\nswap交换容器时,注意交换的容器要同种类型\n\n5.5 常用算术生成算法学习目标:\n\n掌握常用的算术生成算法注意:\n\n算术生成算法属于小型算法,使用时包含的头文件为 #include <numeric>算法简介:\n\naccumulate // 计算容器元素累计总和\n\nfill // 向容器中添加元素\n\n\n5.5.1 accumulate功能描述:\n\n计算区间内 容器元素累计总和函数原型:\n\naccumulate(iterator beg, iterator end, value);// 计算容器元素累计总和// beg 开始迭代器// end 结束迭代器// value 起始值示例:\n\n\n#include <numeric>#include <vector>void test01(){ vector<int> v; for (int i = 0; i <= 100; i++) { v.push_back(i); } int total = accumulate(v.begin(), v.end(), 0); cout << "total = " << total << endl;}int main() { test01(); return 0;}\n\n\naccumulate使用时头文件注意是 numeric,这个算法很实用\n\n5.5.2 fill功能描述:\n\n向容器中填充指定的元素函数原型:\n\nfill(iterator beg, iterator end, value);// 向容器中填充元素// beg 开始迭代器// end 结束迭代器// value 填充的值示例:\n\n\n#include <numeric>#include <vector>#include <algorithm>class myPrint{public: void operator()(int val) { cout << val << " "; }};void test01(){ vector<int> v; v.resize(10); //填充 fill(v.begin(), v.end(), 100); for_each(v.begin(), v.end(), myPrint()); cout << endl;}int main() { test01(); return 0;}\n\n\n利用fill可以将容器区间内元素填充为指定的值\n\n5.6 常用集合算法学习目标:\n\n掌握常用的集合算法算法简介:\nset_intersection // 求两个容器的交集\nset_union // 求两个容器的并集\nset_difference // 求两个容器的差集\n\n5.6.1 set_intersection功能描述:\n\n求两个容器的交集函数原型:\n\nset_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);// 求两个集合的交集// 注意:两个集合必须是有序序列// beg1 容器1开始迭代器// end1 容器1结束迭代器// beg2 容器2开始迭代器// end2 容器2结束迭代器// dest 目标容器开始迭代器示例:\n\n\n#include <vector>#include <algorithm>class myPrint{public: void operator()(int val) { cout << val << " "; }};void test01(){ vector<int> v1; vector<int> v2; for (int i = 0; i < 10; i++) { v1.push_back(i); v2.push_back(i+5); } vector<int> vTarget; //取两个里面较小的值给目标容器开辟空间 vTarget.resize(min(v1.size(), v2.size())); //返回目标容器的最后一个元素的迭代器地址 vector<int>::iterator itEnd = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin()); for_each(vTarget.begin(), itEnd, myPrint()); cout << endl;}int main() { test01(); return 0;}\n\n总结:\n\n求交集的两个集合必须的有序序列\n目标容器开辟空间需要从两个容器中取小值\nset_intersection返回值既是交集中最后一个元素的位置\n\n5.6.2 set_union功能描述:\n\n求两个集合的并集函数原型:\n\nset_union(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);// 求两个集合的并集// 注意:两个集合必须是有序序列// beg1 容器1开始迭代器// end1 容器1结束迭代器// beg2 容器2开始迭代器// end2 容器2结束迭代器// dest 目标容器开始迭代器示例:\n\n\n#include <vector>#include <algorithm>class myPrint{public: void operator()(int val) { cout << val << " "; }};void test01(){ vector<int> v1; vector<int> v2; for (int i = 0; i < 10; i++) { v1.push_back(i); v2.push_back(i+5); } vector<int> vTarget; //取两个容器的和给目标容器开辟空间 vTarget.resize(v1.size() + v2.size()); //返回目标容器的最后一个元素的迭代器地址 vector<int>::iterator itEnd = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin()); for_each(vTarget.begin(), itEnd, myPrint()); cout << endl;}int main() { test01(); return 0;}\n\n总结:\n\n求并集的两个集合必须的有序序列\n目标容器开辟空间需要两个容器相加\nset_union返回值既是并集中最后一个元素的位置\n\n5.6.3 set_difference功能描述:\n\n求两个集合的差集函数原型:\n\nset_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);// 求两个集合的差集// 注意:两个集合必须是有序序列// beg1 容器1开始迭代器// end1 容器1结束迭代器// beg2 容器2开始迭代器// end2 容器2结束迭代器// dest 目标容器开始迭代器示例:\n\n\n#include <vector>#include <algorithm>class myPrint{public: void operator()(int val) { cout << val << " "; }};void test01(){ vector<int> v1; vector<int> v2; for (int i = 0; i < 10; i++) { v1.push_back(i); v2.push_back(i+5); } vector<int> vTarget; //取两个里面较大的值给目标容器开辟空间 vTarget.resize( max(v1.size() , v2.size())); //返回目标容器的最后一个元素的迭代器地址 cout << "v1与v2的差集为: " << endl; vector<int>::iterator itEnd = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin()); for_each(vTarget.begin(), itEnd, myPrint()); cout << endl; cout << "v2与v1的差集为: " << endl; itEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTarget.begin()); for_each(vTarget.begin(), itEnd, myPrint()); cout << endl;}int main() { test01(); return 0;}\n\n\n求差集的两个集合必须的有序序列\n目标容器开辟空间需要从两个容器取较大值\nset_difference返回值既是差集中最后一个元素的位置\n\n","categories":["递归这个世界 · 编程","编程语言"],"tags":["Programming","cpp"]},{"title":"C Plus Plus - Skill","url":"/2022/05/25/note/Programming/Language/cpp-4/","content":"C++ 技巧1\n\n\nvirtual函数虚函数的调用取决于指向或者引用的对象的类型,而不是指针或者引用自身的类型。\n静态函数不可以声明为虚函数,同时也不能被const 和 volatile关键字修饰。\n构造函数不可以声明为虚函数。同时除了inline|explicit之外,构造函数不允许使用其它任何关键字。\n多态本质上是,利用继承和虚函数实现多种不同的类调用同一个函数,此函数在不同的子类中有不同的实现,但函数名一样。\n模板模板函数提供一种操作,但支持多种数据类型,可有效减少代码量,适用于多种数据进行同类型操作\ntemplate <typename T>void swap(T &a, T &b){ T temp = a; a = b; b = temp;}int a = 10;int b = 20;swap(a, b); //自动推导数据类型swap<int>(a, b); //指定数据类型\n\n声明中typename与class没有差别自动推导数据类型时,必须推导出一致的数据类型才能使用在没有确定类型参数的情况下,模板无法自动推导,此时模板没有确定的数据类型,那么模板无法使用,必须手动指定数据类型普通函数调用时可以发生自动类型转换(隐式类型转换),但模板函数自动推导类型时无法隐式类型转换,只有指定类型后才可以从某种程度上说,函数模板在指定类型后,与普通函数相差不大\n对用规则函数模板与普通函数都可以实现的情况下,优先使用普通函数可以通过空模板参数来强制调用函数模板函数模板可以重载\n具体化函数模板函数模板不能直接传入自定义类型或数组,可以通过具体化函数模板来解决\nclass person{ int age; double height;}template<class T>bool compare(T &a, T &b){ if (a *** b) return true; return false;}template<> bool compare(person &a, person &b){ if (a.age *** b.age && a.height *** b.height) return true; return false;}person a;person b;a.age = 10;a.height = 175;b.age = 24;b.height = 168;compare(a, b);\n\n“学习模板不是为了写模板,而是为了熟练运用STL提供的模板”\n类模板创建一个数据类模板,此模板可以使用多个未定的数据类型,给其赋值时需要指定数据类型\ntemplate<class NameType, class AgeType = int>class Person{public: Person(NameType name, AgeType age){ this->mName = name; this->mAge = age;}void showPerson(){ cout << "name: " << this->mName << " age: " << this->mAge << endl;}public: NameType mName; AgeType mAge;};\n\n类模板无法自动推导类型,但可以有默认参数(即默认的数据类型)类模板中的成员函数在调用时才生成当类模板的对象作为函数的参数时,可以指定传入对象的数据类型,也可以将参数模板化,或将整个类模板化\n类模板与继承当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型如果不指定,编译器无法给子类分配内存如果想灵活指定出父类中T的类型,子类也需变为类模板\n文件读写正常读取:\n#include <fstream> //包含头文件ifstream ifs;//创建输入文件流ifs.open(<File path>, ios::in);//指定文件路径和读取方式if (!ifs.is_open()){ //判断文件是否成功打开 <expression> ifs.close()//关闭打开的文件} else{ // 以下为读取文件的例子,依次读取即可,只是中间空格不知去哪里了 int id; string name; int departmentId; int index = 0; while (ifs >> id && ifs >> name && ifs >> departmentId) { worker *worker = NULL; if (departmentId *** 1) { worker = new employee(id, name, departmentId); } else if (departmentId *** 2) { worker = new manager(id, name, departmentId); } else { worker = new boss(id, name, departmentId); } this->pWorkerArray[index] = worker; index++;}\n\n判断文件是否为空:\n#include <fstream> //包含头文件ifstream ifs;//创建输入文件流char ch;ifs >> ch;if (ifs.eof()) { //判断ifs是否为文件的结尾,如果是,说明文件为空,如果不是说名文件不为空 cout << "File is empty" << endl; <expression> ifs.close(); return;}\n\n写入文件:\n#include <fstream> //包含头文件ofstream ofs;ofs.open(FILENAME, ios::out);for (int i = 0; i < this->workerNum; ++i) { ofs << this->pWorkerArray[i]->id << " " << this->pWorkerArray[i]->name << " " << this->pWorkerArray[i]->departmentId << endl;}ofs.close();\n\n退出程序接口exit(0)\n\nlinux下的“按任意键继续”This is a library conio.h for linux. Just copy file and paste file conio.h on /usr/include/ but don’t forget before you want copy paste on /usr/include/ you must open folder as ADMINISTRATOR first !!\ngit clone https://github.com/zoelabbb/conio.h.gitcd conio.hsudo make install\n\n重启IDE\n#include <conio.h>void toContinue() { cout << "Press any key to continue ..." << endl; getch();} //如果在while循环中,可能要用两个getch()才能正常工作\n\nstring一个用法(把字符串当做字符数组)void speechManager::createPlayer() { string nameSeed; nameSeed = "ABCDEFGHIJKL"; for (int i = 0; i < nameSeed.size(); i++) { string name = "Player - "; name += nameSeed[i]; player tempPlayer; tempPlayer.name = name; for (double &j: tempPlayer.score) j = 0; //看上去高级,可读性降低 this->v1.push_back(i + 10001); this->players.insert(make_pair(i + 10001, tempPlayer)); }}\n\n遍历容器(使用auto)for (auto it = vector.begin(); it != vector.end(); it ++){ <expression>}\n\n特性usingThe modern cpp use more using to define aliases of variables.\nusing byte = unsigned char;using array_t = double[10]; // "array_t" is an array with "double" type and length is tenarray_t a;a[0] = 1; // It can be used as a common arrayusing func_t = double(double);func_t* f = sin;std::cout << f(3.1415926 / 4); // Calculate sin(PI/4)\n\nnamespaceWhen a project was completed by many coders, naming conflicts in so many identifiers may be occurs.Key word namespace can define a namespace with a name or not. The same indentifiers can exist in different namespaces.Using :: access to a namespace.Don’t use ; at the end of namespace.\nIncrement and Decrementint i = 1;a = i++; // a = 1, i = 2int i = 1;a = ++i; // a = 2, i = 2\n\n\nBoth i++ and ++i will make i plus 1, but when using them in a class, ++i is more efficienct.\n\nBuilt-in operation function#include <functional>#include <iostream>int main(int, char **) { std::cout << std::plus<int>()(5, 8) << std::endl; std::cout << std::minus<int>()(8, 5) << std::endl; std::cout << std::multiplies<int>()(5, 8) << std::endl; std::cout << std::divides<int>()(8, 2) << std::endl; std::cout << std::modulus<int>()(8, 6) << std::endl; std::cout << std::negate<int>()(5) << std::endl; return 0;}\n\nType convertionThere are three ways to convert:\n(DestinationType)sourceData;DestinationType(sourceData);static_cast<DestinationType>(sourceData);\n\nif / switch with initialization\nLimit the scope of variables as much as possible.cpp 17 introduced if / switch statements that allow variable initialization.\n\nif (auto x{ std::cin.get() }; x >= 48 && x <= 57){ std::cout << x << " is a digit." << std::endl;} else{ std::cout << x << " is not a digit." << std::endl;}\n\nRange-based forint a[]{ 1, 2, 3, 4, 5, 6,};for (auto &i : a) // Write by reference i *= 10;for (auto i : a) // Read by value std::cout << i << "\\t";std::cout << std::endl;for (auto i : {12, 25, 67, 43, 89, 54}) // Access the list directly std::cout << i << "\\t";std::cout << std::endl;\n\nFunction and ReferenceFunctiondouble my_sqrt(double x) { std::cout << "entering " << __func__ << std::endl; double xnew, xold{x / 2.0}; for (;;) { xnew = (xold + x / xold) / 2.0; if (fabs(xnew - xold) < 1e-8) { break; } xold = xnew; } return xnew;};\n\nResult:\nentering mainentering my_sqrt1.414213\n\n\nTo iterate is human, to recurse divine.To recieve multiple data, using initializer_list to send parameters to function.e.g.\n\ndouble sum(std::initializer_list<double> ld) { double s{0}; for (auto i : ld) s += i; return s;}//in main function std::cout << sum({1, 2, 3, 4}) << std::endl; std::cout << sum({1, 2, 3, 4, 5}) << std::endl;\n\nThe result:\n1015\n\nInline functionInsert the inline keyword in front of the function defination, which is recommanded.When the resouces of codes in a function are less than calling the function, using inline function can increase spending saving.Inlining is at the cost of code bloat(copying), and only saves the overhead of function calls, thereby improving the execution efficiency of functions.Inline should not be used in the following situation:\n\nIf the code in the function body is relatively long, making inlining will lead to higher memory consumption costs.\nIf there is a loop int the function body, the time to execute the code in the function body is greater than the overhead of the function call.\n\nDefault parameterProvide the default parameters.When calling the function, it can automatically use the default parameters without your actual parameters.\nFunction TemplateFunction templates implement parameterization of data types.It can use unknown data types as parameters. As long as the type of data meets the requirements defined by the function template, the function template can be called with these types of data as arguments.\ntemplate <typename T> T my_min(T a, T b) { return a < b ? a : b; }template <typename T> T my_max(T a, T b) { return a < b ? b : a; }double sum(std::initializer_list<double> ld) { double s{0}; for (auto i : ld) s += i; return s;}template <typename T> std::pair<T, T> my_min_max(T a, T b) { T t_min = my_min(a, b); T t_max = my_max(a, b); return std::make_pair(t_min, t_max);}template <typename T> void print(std::pair<T, T> p) { std::cout << typeid(T).name() << ": \\t"; std::cout << "(min: " << p.first << ", max: " << p.second << ")\\n";}int main(int, char **) { print(my_min_max('a', 'b')); print(my_min_max(20, 10)); print(my_min_max(1.5, 2.5)); return 0; }\n\nLambda Functionint add(int x, int y) { return x + y; }//in main function int a{1}, b{2}; std::cout << add(a, b) << std::endl; auto f{[](int x, int y) { return x + y; }}; std::cout << f(a, b) << std::endl; auto f2{[=]() { return a + b; }}; std::cout << f2() << std::endl; auto f3{[&](int x) { a *= x; b *= x; }}; f3(10); std::cout << a << std::endl << b << std::endl;\n\nLambda function is a function that can capture the variables in a scope autometically.[] means the capture list.There are several commonly used forms of capture lists:\n\n\n\nForms\nMeaning\n\n\n\n[x]\nCapture the variable x by value passing\n\n\n[=]\nCapture all variables in the parent scope by value passing\n\n\n[&x]\nCapture the variable x by reference passsing\n\n\n[&]\nCapture all variables in the parent scope by reference passing\n\n\n[=,&x,&y]\nCapture the variables x and y by reference passing and the rest by value passing\n\n\n[&,x]\nCapture the variable x by value passing and the rest by reference passing\n\n\n\nLambda function can have the real parameters.\n\nReferenceLeft-valued reference\nThe reference is a key point and difficulty.A reference is an alias of the referenced object. The two are essentially the same object, but they are displayed as different names and types.\n\nT& r = t;\n\nWhere T is a data type, & is an operator, r is reference name and t is a variable of type T.\n\nt cannot be constant or right value expression.\nr must be initialized when defined.This is excatly where the reference is diferent from the pointer, that is, there is no empty reference.References cannot exist independently, but must be attached to the referenced variable, so it does not take up memory space.If the reference is a named variable, such a reference is called left-valued reference (in cpp98).\n\nint a = 2;int *p = &a;int &r = a;std::cout << "a:\\t" << a << std::endl;std::cout << "*p:\\t" << *p << std::endl;std::cout << "r:\\t" << r << std::endl;std::cout << "The value of p: \\t" << p << std::endl;std::cout << "The address of p:\\t" << &p << std::endl;std::cout << "The address of a:\\t" << &a << std::endl << "The address of r:\\t" << &r << std::endl;a = 3;std::cout << "a:\\t" << a << std::endl;std::cout << "*p:\\t" << *p << std::endl;std::cout << "r:\\t" << r << std::endl;std::cout << "The value of p: \\t" << p << std::endl;std::cout << "The address of p:\\t" << &p << std::endl;std::cout << "The address of a:\\t" << &a << std::endl << "The address of r:\\t" << &r << std::endl;r = 4;std::cout << "a:\\t" << a << std::endl;std::cout << "*p:\\t" << *p << std::endl;std::cout << "r:\\t" << r << std::endl;std::cout << "The value of p: \\t" << p << std::endl;std::cout << "The address of p:\\t" << &p << std::endl;std::cout << "The address of a:\\t" << &a << std::endl << "The address of r:\\t" << &r << std::endl;\n\nThe result:\na: 2*p: 2r: 2The value of p: 0x7fff945b3184The address of p: 0x7fff945b3178The address of a: 0x7fff945b3184The address of r: 0x7fff945b3184a: 3*p: 3r: 3The value of p: 0x7fff945b3184The address of p: 0x7fff945b3178The address of a: 0x7fff945b3184The address of r: 0x7fff945b3184a: 4*p: 4r: 4The value of p: 0x7fff945b3184The address of p: 0x7fff945b3178The address of a: 0x7fff945b3184The address of r: 0x7fff945b3184\n\nIt can be seen that the left value reference is only an alias of the variable, so all operations on the lvalue reference are equivalent to the operation on the variable itself.Supplementary explanation:\n\nAny variable can be reference, such as pointer.\n\nint m = 3;int* p = &m;int*& rp = p;\n\nReference is not variable, so you cannot reference a reference! And at the same time, pointers cannot point to a reference.\n\nPointers can be nullptr or void type, but references cannot.\n\nint m = 3;void* p = &m;p = nullptr;void& r = m; // error!int&r = nullptr; // error!\n\n\nCannot build an array of reference.\nConstant lvalue reference can be initialized by lvalue, constant lvalue and rvalue.\n\nint x = 1;const int N = 10;int& rn = N; // error!const int& rx = x; // Reference lvalueconst int& rN = N; // Reference constant lvalueconst bool& rB = true; // Reference constant rvalue\n\n\nThe left reference of the constant is usually used as a formal parameter of the function. At this time, the corresponding actual parameter cannot be modified inside the function through this reference to achieve the purpose of protecting the actual parameter.\n\nRvalue reference, move() and Move semanticstemplate <typename T> void my_swap(T &a, T &b) { T t = std::move(a); a = std::move(b); b = std::move(t);}\n\nActually it is the swap() in cpp STL.The cpp STL also provides array exchange in the form of overloading.\ntemplate <class T, std::size_t N> void my_swap(T (&a)[N], T (&b)[N]) { if (&a != &b) { T *first1 = a; T *last1 = first1 + N; T *first2 = b; for (; first1 != last1; ++first1, ++first2) { my_swap(*first1, *first2); } }}\n\nattribute在C++中,__attribute__是一种GCC编译器提供的扩展语法,用于在函数、变量、类型等声明中添加附加属性。它的语法形式为__attribute__((属性列表))。\n一些常见的属性和它们的说明:\n\n__attribute__((aligned(n))):指定变量或结构体的对齐方式为n字节。例如,__attribute__((aligned(4))) int x;将x的对齐方式设置为4字节。\n__attribute__((packed)):告诉编译器取消结构体的对齐,即以最小的字节对齐结构体成员。这在需要与外部系统或文件进行二进制数据交换时非常有用。\n__attribute__((noreturn)):用于标记函数不会返回。例如,__attribute__((noreturn)) void error();表示函数error不会返回。\n__attribute__((unused)):告诉编译器该变量可能未使用,可以抑制未使用变量的警告。例如,int x __attribute__((unused));告诉编译器x可能未使用。\n__attribute__((deprecated)):用于标记函数、变量或类型已被弃用。当使用被标记为弃用的元素时,编译器会发出警告。\n__attribute__((constructor))和__attribute__((destructor)):用于定义在程序启动前或结束后自动执行的函数。constructor属性用于在main函数执行之前自动调用的函数上,而destructor属性用于在程序结束前自动调用的函数上。\n\n\n__attribute__是GCC的扩展特性,不是C++标准的一部分,因此在使用时应该注意可移植性。\n\ndeclspecDeduce the type of statements when compiling. It can be used to define a variable.\nint a = 0;decltype(a) b = 1; // This means the type of "b" is "int"decltype(a + b) c = a + b; // c: int\n\ndeclspec用以推测表达式结果的类型,返回此类型;而__declspec(dllimport)是 Microsoft Visual C++ 编译器的一个扩展,用于在编译动态链接库(DLL)时指示一个函数或变量是从外部DLL中引入的。\n当你在一个程序中需要使用从外部DLL中导出的函数或变量时,你可以使用 declspec(dllimport) 关键字来告诉编译器这个函数或变量是从其他DLL中引入的,而不是在当前代码中定义的。这样,编译器在编译时会生成适当的代码,以便正确地链接到外部DLL中的内容。\n为了提高代码的可读性,请为 __declspec(dllimport) 定义宏,并使用此宏来声明导入的每个符号:\n#define DllImport __declspec( dllimport )DllImport int j;DllImport void func();\n\n虽然在函数声明中使用 __declspec(dllimport) 是可选的,但如果你使用此关键字,编译器会生成更高效的代码。 不过,必须对导入的可执行文件使用 **__declspec(dllimport)**,以访问 DLL 的公共数据符号和对象。 请注意,DLL 的用户仍需要与导入库链接。\n可以对 DLL 和客户端应用程序使用相同的头文件。 为此,请使用特殊的预处理器符号来指示是生成 DLL 还是生成客户端应用程序。 例如:\n#ifdef _EXPORTING #define CLASS_DECLSPEC __declspec(dllexport)#else #define CLASS_DECLSPEC __declspec(dllimport)#endifclass CLASS_DECLSPEC CExampleA : public CObject{ ... class definition ... };\n\nOtherexplicit 关键字可以帮助你在类的构造函数中明确地指定类型转换的行为,从而提高代码的可读性和安全性。\noptional在C++中,std::optional是C++17标准引入的一个类模板,用于表示一个可能存在或可能不存在的值。它提供了一种更安全、更语义清晰的方式来处理可能缺失的值,而不需要使用传统的空指针或特殊值。std::optional可以看作是一种对可能的值进行了封装的容器,它要么包含一个有效的值,要么为空(不包含任何值)。\n使用std::optional的主要好处包括:\n\n避免空指针异常:传统的空指针可能在访问时引发未定义行为,而std::optional通过类型系统和成员函数来明确指示值的存在或不存在,从而避免了潜在的运行时错误。\n\n更好的语义表达:std::optional能够更清晰地表达一个值是可选的,而不需要通过注释或命名来传达这种信息。\n\n避免特殊值:使用std::optional可以避免使用特殊值(例如-1、0或空字符串)来表示缺失的值,从而增加了代码的可读性和维护性。\n\n优雅的值处理:std::optional提供了一些成员函数,如has_value()、value()和value_or(),使得对可能存在的值进行访问和处理更加优雅和安全。\n\n\n以下是一个简单的示例,展示了如何在C++中使用std::optional:\n#include <iostream>#include <optional>std::optional<int> divide(int a, int b) { if (b != 0) { return a / b; } else { return std::nullopt; // 表示缺失的值 }}int main() { std::optional<int> result = divide(10, 2); if (result.has_value()) { std::cout << "Result: " << result.value() << std::endl; } else { std::cout << "Division by zero" << std::endl; } return 0;}\n\n在这个示例中,std::optional被用来包装除法操作的结果,以便在可能出现除零错误时能够明确地表示值的缺失。\n","categories":["递归这个世界 · 编程","编程语言"],"tags":["Programming","cpp"]},{"title":"C++的动态库与静态库","url":"/2023/11/29/note/Programming/Language/cpp_lib/","content":"在C++中,动态库(Dynamic Link Library,DLL)和静态库(Static Library)是两种不同的库文件,它们在程序中的链接方式和运行时行为上有一些重要的异同点。\n\n\n动态库与静态库的相同点\n库的作用: 无论是动态库还是静态库,它们的目的都是为了将代码模块化,以便在多个程序中共享和重复使用。\n\n包含编译后的二进制代码: 两者都包含了已经编译好的二进制代码,可以被程序调用。\n\n\n动态库与静态库不同点\n链接方式\n\n动态库: 在程序运行时动态加载,链接是在运行时进行的。动态库的代码并不在编译时与程序代码直接链接,而是在运行时由操作系统动态加载。\n静态库: 在程序编译时被链接到程序中。编译器在编译时将库的代码和程序的代码合并成一个可执行文件。\n\n\n文件扩展名\n\n动态库: 通常有不同的扩展名,如.dll(Windows,Dynamic Link Library)或.so(Linux,Shared Object)。\n静态库: 通常有不同的扩展名,如.lib(Windows,Library)或.a(Linux,Archive)。\n\n\n文件大小\n\n动态库: 通常比静态库小,因为多个程序可以共享一个动态库的实例。\n静态库: 通常较大,因为每个使用该库的程序都会包含其完整的副本。\n\n\n更新和维护\n\n动态库: 如果动态库的代码发生变化,只需替换动态库文件即可。程序无需重新编译。\n静态库: 如果静态库的代码发生变化,必须重新编译并链接使用该库的程序。\n\n\n内存使用\n\n动态库: 共享一份内存,因此在系统中只有一个副本。\n静态库: 每个使用该库的程序都有其自己的副本,因此可能会占用更多内存。\n\n\n移植性\n\n动态库: 更易于实现跨平台的移植,因为动态库可以在不同平台上具有相同的接口。\n静态库: 在不同平台上可能需要不同的库文件。\n\n\n\n在实际应用中,选择使用动态库还是静态库取决于项目的需求和设计考虑。通常,动态库在共享代码、更新维护和节省内存方面具有优势,而静态库在性能和依赖管理方面可能更有优势。\n\n总结:静态库相当于添加额外的编译单元,直接链接到可执行文件中;而动态库只是将符号链接到可执行文件,当需要调用库的内容时,从动态库文件中调用。\n\n不同平台\n不同操作系统和硬件架构之间存在差异,导致在编译和链接时产生的二进制代码也有所不同。\n\n不同的操作系统有不同的系统调用、API和二进制接口。一个在Windows上编译的库通常不能直接在Linux上使用,反之亦然。\n不同的硬件体系结构(如x86、x86_64、ARM等)具有不同的指令集和内存布局。库中包含的机器代码通常是特定于体系结构的,因此需要为特定体系结构进行编译。\n不同的编译器和工具链可能会对代码生成、调试信息等方面有所不同,使用不同的编译器编译的库可能是不兼容的。\n代码差异静态库的代码正常写,可以直接编译链接,而动态库则需要定义哪些需要被导出,不同平台的顶踹方式有所不同。\n在Windows平台上使用 __declspec(dllexport) 和 __declspec(dllimport) 来指定导出和导入符号。\n在Linux/Unix(MacOS)平台上使用 __attribute__((visibility("default"))) 来指定导出符号。\n跨平台使用时,使用宏定义不同平台的导出代码:\n#ifdef __WIN32__ #ifdef LIBRARY_EXPORTS #define MY_API __declspec(dllexport) #else #define MY_API __declspec(dllimport) #endif#else #define MY_API __attribute__((visibility("default")))#endif// 在动态库中导出符号class MY_API MyClass {public: void myFunction();};\n\n","categories":["递归这个世界 · 编程","编程语言"],"tags":["Programming","cpp"]},{"title":"JavaScript","url":"/2023/07/11/note/Programming/Language/javascript/","content":"\n📒 JavaScript学习笔记\n\n\n\n基础概念与HTML的交互\n可以在 HTML 文档中放入不限数量的脚本。\n\n脚本可位于 HTML 的<body>或 <head> 部分中,或者同时存在于两个部分中。\n\n通常的做法是把函数放入<head>部分中,或者放在页面底部。这样就可以把它们安置到同一处位置,不会干扰页面的内容。\n\n\n第一个程序<body> <h1>我的第一段 JavaScript</h1> <p id="demo"> JavaScript 能改变 HTML 元素的内容。 </p> <script> document.write("<h1>TITLE</h1>"); function myFunction() { x = document.getElementById("demo"); // 找到元素 x.innerHTML = "Hello JavaScript!"; // 改变内容 } </script> <button type="button" onclick="myFunction()">点击这里</button></body>\n\n\nHTML 输出流中使用 document.write,相当于添加在原有html代码中添加一串html代码。而如果在文档加载后使用(如使用函数),会覆盖整个文档。\n\n使用函数来执行document.write代码如下:\n<script> function myfunction(){ document.write("使用函数来执行document.write,即在文档加载后再执行这个操作,会实现文档覆盖"); } document.write("<h1>这是一个标题</h1>"); document.write("<p>这是一个段落。</p>");</script><p> 您只能在 HTML 输出流中使用 <strong>document.write</strong>。 如果您在文档已加载后使用它(比如在函数中),会覆盖整个文档。</p><button type="button" onclick="myfunction()">点击这里</button>\n\n引入外部js文件<!DOCTYPE html><html> <body> <script src="myScript.js"></script> </body></html>\n\n\n外部 javascript 文件不使用 <script> 标签,直接写 javascript 代码。\n\n简单学习数字、字符、操作符\n分号可以省略,但特殊情况会引起错误\n\nJavascript 只有一种数字类型(即 64位 IEEE 754 双精度浮点 double),有52位表示尾数,可以精确到9x10^15的整数\n\n\n// 有三种非数字的数字类型Infinity; // 1/0 的结果-Infinity; // -1/0 的结果NaN; // 0/0 的结果\n\n\n单引号或双引号构建字符串,字符串用+拼接,字符串也可以用<>号来比较\n\n使用==比较时会进行类型转换,'5'==5返回true,null==undefined返回true;但如果用===则不会转换类型,上述两种会返回false。\n\n不同类型的变量相加会导致奇怪的行为:\n 13 + !0; //14"13" + !0; // '13true'\n\ncharAt(int num)可以得到字符串中位于num的字符\n\nsubstring(int startPos, int length)可以得到从startPos开始的length长度的子串,\n\nlength是一个属性,不要用(),"hello".lenght\n\n\n // 还有两个特殊的值:`null`和`undefined`null; // 用来表示刻意设置的空值undefined; // 用来表示还没有设置的值(尽管`undefined`自身实际是一个值\n\n // false, null, undefined, NaN, 0 和 "" 都是假的;其他的都视作逻辑真// 注意 0 是逻辑假而 "0"是逻辑真,尽管 0 == "0"。\n\n变量、数组、对象\n变量声明用var,无需指定类型,不加var表示全局变量,未初始化且未被赋值的变量为undefined\n\n变量的计算没有别的特点(简写,自增自减)\n\n数组可以是任意类型的有序列表,var myArray = ["Hello", 45, true];\n\n数组可以下标访问;数组长度可变,push(<\\element>)\n\n\n // javascript中的对象相当于其他语言中的“字典”或“映射”:是键-值对的无序集合。var myObj = {key1: "Hello", key2: "World"};\n\n\n键值对,键是字符串,如何键本身是合法的js标识符,则可以不加引号;值可以是任意类型\n对象属性的访问可以通过下标,myObj["my other key"]; // = 4,也可以用myObj.myKey;\n对象是可变的,更改值,增加键,访问未定义的值,返回undefined\n\n逻辑与控制结构\nif、while、for与c无差别\n\n // && 和 || 是“短路”语句,它在设定初始化值时特别有用 var name = otherName || "default";\n\n // `switch`语句使用`===`检查相等性。// 在每一个case结束时使用 'break'// 否则其后的case语句也将被执行。 grade = 'B';switch (grade) { case 'A': console.log("Great job"); break; case 'B': console.log("OK job"); break; case 'C': console.log("You can do better"); break; default: console.log("Oy vey"); break;}\n\n函数、作用域、闭包 // JavaScript 函数由`function`关键字定义function myFunction(thing){ return thing.toUpperCase();}myFunction("foo"); // = "FOO"\n\n\n被返回的值必须开始用return关键字的那一行,否则由于分号的自动补齐,会返回undefined\n\n// 在使用Allman风格的时候要注意.function myFunction(){ return // <- 分号自动插在这里 { thisIsAn: 'object literal' }}myFunction(); // = undefined\n\n\n函数是一等对象,也可以赋值给一个变量,并且可以作为参数传递\n\n // 函数对象甚至不需要声明名称 —— 你可以直接把一个函数定义写到另一个函数的参数中setTimeout(function(){ // 这段代码将在5秒钟后被调用}, 5000);\n\n\n函数有自己的作用域,而其他代码没有\n if (true){ var i = 5;}i; // = 5 - 并非我们在其他语言中所期望得到的undefined// 这就导致了人们经常使用的“立即执行匿名函数”的模式,// 这样可以避免一些临时变量扩散到全局作用域去。(function(){ var temporary = 5; // 我们可以访问修改全局对象("global object")来访问全局作用域, // 在web浏览器中是`window`这个对象。 // 在其他环境如Node.js中这个对象的名字可能会不同。 window.permanent = 10;})();temporary; // 抛出引用异常ReferenceErrorpermanent; // = 10\n\n闭包: 如果一个函数在另一个函数中定义,那么这个内部函数就拥有外部函数的所有变量的访问权,即使在外部函数结束之后。\n function sayHelloInFiveSeconds(name){ var prompt = "Hello, " + name + "!"; // 内部函数默认是放在局部作用域的, // 就像是用`var`声明的。 function inner(){ alert(prompt); } setTimeout(inner, 5000); // setTimeout是异步的,所以 sayHelloInFiveSeconds 函数会立即退出, // 而 setTimeout 会在后面调用inner // 然而,由于inner是由sayHelloInFiveSeconds“闭合包含”的, // 所以inner在其最终被调用时仍然能够访问`prompt`变量。}sayHelloInFiveSeconds("Adam"); // 会在5秒后弹出 "Hello, Adam!"\n\n对象、构造函数和原型\n对象中可以有成员函数,用.调用,this指针仍然有效\n\n // 但这个函数访问的其实是其运行时环境,而非定义时环境,即取决于函数是如何调用的。// 所以如果函数被调用时不在这个对象的上下文中,就不会运行成功了。var myFunc = myObj.myFunc;myFunc(); // = undefined\n\n\n可以在对象的定义之外定义一个函数,然后将函数指定为一个对象的函数:\n var myOtherFunc = function(){ return this.myString.toUpperCase();}// myObj.myString == "hello world!";myObj.myOtherFunc = myOtherFunc;myObj.myOtherFunc(); // = "HELLO WORLD!"\n\n // 当我们通过`call`或者`apply`调用函数的时候,也可以为其指定一个执行上下文。var anotherFunc = function(s){ return this.myString + s;}anotherFunc.call(myObj, " And Hello Moon!"); // = "Hello World! And Hello Moon!"// `apply`函数几乎完全一样,只是要求一个array来传递参数列表。anotherFunc.apply(myObj, [" And Hello Sun!"]); // = "Hello World! And Hello Sun!"// 当一个函数接受一系列参数,而你想传入一个array时特别有用。Math.min(42, 6, 27); // = 6Math.min([42, 6, 27]); // = NaN (uh-oh!)Math.min.apply(Math, [42, 6, 27]); // = 6// 但是`call`和`apply`只是临时的。如果我们希望函数附着在对象上,可以使用`bind`。var boundFunc = anotherFunc.bind(myObj);boundFunc(" And Hello Saturn!"); // = "Hello World! And Hello Saturn!"\n\n // `bind` 也可以用来部分应用一个函数(柯里化)。var product = function(a, b){ return a * b; }var doubler = product.bind(this, 2);doubler(8); // = 16\n\n\n构造函数:调用一个函数时前加上new关键字,会创建一个对象,这个函数一般是设计专门用来构造此对象的函数;此函数可以用this来访问对象\n\n原型:其实就是类的继承\n\n指定原型创建对象有两个方法\n\n// 第一种方式是 Object.create,这个方法是在最近才被添加到Js中的,// 因此并不是所有的JS实现都有这个方法var myObj = Object.create(myPrototype);myObj.meaningOfLife; // = 43// 第二种方式可以在任意版本中使用,不过必须通过构造函数。// 构造函数有一个属性prototype。但是它 *不是* 构造函数本身的原型;相反,// 是通过构造函数和new关键字创建的新对象的原型。MyConstructor.prototype = { myNumber: 5, getMyNumber: function(){ return this.myNumber; }};var myNewObj2 = new MyConstructor();myNewObj2.getMyNumber(); // = 5myNewObj2.myNumber = 6myNewObj2.getMyNumber(); // = 6\n\n// 字符串和数字等内置类型也有通过构造函数来创建的包装类型var myNumber = 12;var myNumberObj = new Number(12);myNumber == myNumberObj; // = true// 但是它们并非严格等价typeof myNumber; // = 'number'typeof myNumberObj; // = 'object'myNumber === myNumberObj; // = falseif (0){ // 这段代码不会执行,因为0代表假}\n\n // 不过,包装类型和内置类型共享一个原型,// 所以你实际可以给内置类型也增加一些功能,例如对string:String.prototype.firstCharacter = function(){ return this.charAt(0);}"abc".firstCharacter(); // = "a"// 这个技巧经常用在“代码填充”中,来为老版本的javascript子集增加新版本js的特性,// 这样就可以在老的浏览器中使用新功能了。// 比如,我们知道Object.create并没有在所有的版本中都实现,// 但是我们仍然可以通过“代码填充”来实现兼容:if (Object.create === undefined){ // 如果存在则不覆盖 Object.create = function(proto){ // 用正确的原型来创建一个临时构造函数 var Constructor = function(){}; Constructor.prototype = proto; // 之后用它来创建一个新的对象 return new Constructor(); }}\n\n更多概念ansyc与awaitasync 函数中可能会有 await 表达式,async 函数执行时,如果遇到 await 就会先暂停执行 ,等到触发的异步操作完成后,恢复 async 函数的执行并返回解析值。\nawait 关键字仅在 async function 中有效。如果在 async function 函数体外使用 await ,你只会得到一个语法错误。\n","categories":["递归这个世界 · 编程","编程语言"],"tags":["Programming","Web"]},{"title":"Project Manager","url":"/2023/05/25/note/Programming/Projects/projectmanager/","content":"需求:\n\n可以创建以 CMake + make 为构建工具的 C++项目\n可以添加或删除 C++ 类,自动生成 .h 和 .cpp 文件,并补全必要代码\n可以使用命令进行构建和运行项目\n可以读取配置文件信息,如果没有,会初始化创建一个配置文件,配置文件信息包括:项目的路径,该路径中的所有项目,指定当前项目\n\n\n\n命令行参数及作用\n\n\nlong arg\narg\ndo\n\n\n\n--list\n-l\nshow the whole inforamtion\n\n\n--createproject\n-c\ncreate project\n\n\n--delproject\n-d\ndelete a prject\n\n\n--addclass\n-a\nadd class\n\n\n--delclass\nnone\ndelete a class\n\n\n--build\n-b\nbuild without run\n\n\n--run\n-r\nbuild and run\n\n\n--setproject\n-s\nset the current project\n\n\n--setpath\nnone\nset the project path\n\n\n--help\n-h\nshow help information\n\n\n项目地址https://gitee.com/sential/projectmanager\n安装脚本#!/bin/bashcdrm -rf ./projectmanagergit clone git@gitee.com:sential/projectmanager.gitcd projectmanager/buildrm -rf ./*cmake ..makesudo cp ./pm /usr/bin/pm\n\n开发过程中学到的东西命令行参数使用getopt()函数,原型为:int getopt(int argc, char *const *argv, const char *shortopts)\n或如果需要长参数,使用getopt_long()函数,原型为: int getopt_long(int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind)\n使用方法是先创建三个参数,分别为命令行参数opt用以判定参数到底是哪一个,参数索引option_index,和长参数结构体数组本身long_options[]\n其中long_options[]的option类型的结构的,原型为:\nstruct option { const char *name; // name is the name of the long option. int has_arg; //has_arg is: no_argument (or 0) if the option does not take an argument; //required_argument (or 1) if the option requires an argument; //or optional_argument (or 2) if the option takes an optional argument. int *flag; //flag specifies how results are returned for a long option. If flag is NULL, then getopt_long() returns val. (For example, the calling program may set val to the equivalent short option character.) Otherwise, getopt_long() returns 0, and flag points to a variable which is set to val if the option is found, but left unchanged if the option is not found. int val; //val is the value to return, or to load into the variable pointed to by flag. // The last element of the array has to be filled with zeros.};\n\n创建参数变量:\nint opt, option_index = 0; option long_options[] = { {"create", 1, nullptr, 'c'}, {"addclass", 1, nullptr, 'a'}, {"setproj", 1, 0, 's'}, {"delproj", 1, nullptr, 'd'}, {"list", 0, nullptr, 'l'}, {"build", 0, nullptr, 'b'}, {"run", 0, nullptr, 'r'}, {"help", 0, nullptr, 'h'}, {"setpath", 1, nullptr, 'S'}, {"delclass", 1, nullptr, 'D'}, };\n\n然后创建一个获取参数的循环,使用函数getopt_long不断的获取参数,用switch判断参数是哪个,然后执行相应的动作\nwhile ((opt = getopt_long(argc, argv, "lbra:c:hd:s:D:S:", long_options, &option_index)) != -1) { switch (opt) { case 'l': pm.list(); break; case 'c': pm.setCurrentProject(optarg); pm.createProject(); break; case 'a': pm.addClass(pm.currentProject, optarg); break; case 'b': pm.buildWithoutRun(); break; case 'r': pm.run(); break; case 'd': pm.delProject(optarg); break; case 'h': pm.showHelp(); break; case 's': pm.setCurrentProject(optarg); break; case 'S': pm.setDefaultPath(optarg); break; case 'D': pm.delClass(optarg); break; } }\n\n打印彩色字符在输出流的字符前加上\\033[1m,可让字符高亮显示,[后的数字替换成其他可实现更多的效果:\n\n\n\ncode\n效果\n\n\n\n1\n让输出的字符高亮显式\n\n\n3\n输出斜体字\n\n\n4\n给输出的字符加上下划线\n\n\n5\n让输出的字符闪烁显式\n\n\n7\n设置反显效果,即把背景色和字体颜色反过来显示\n\n\n30\n表示黑色\n\n\n31\n表示红色\n\n\n32\n表示绿色\n\n\n33\n表示黄色\n\n\n34\n表示蓝色\n\n\n35\n表示紫色\n\n\n36\n表示浅蓝色\n\n\n37\n表示灰色\n\n\n40\n表示背景为黑色\n\n\n41\n表示背景为红色\n\n\n42\n表示背景为绿色\n\n\n43\n表示背景为黄色\n\n\n44\n表示背景为蓝色\n\n\n45\n表示背景为紫色\n\n\n46\n表示背景为浅蓝色\n\n\n47\n表示背景为灰白色\n\n\n0\n清除所有格式\n\n\n输出的格式像是一个状态机,输出流加入\\033[31m后的所有字符都会是红色,取消这个效果要加上\\033[0m,然后再进行其他的操作。\nUse bash by Stringstd::string cmd = "cd " + projectPath + "; mv -f " + projectName + " ./.dion_trash";system(cmd.c_str());\n","categories":["递归这个世界 · 编程","项目"],"tags":["CPP","CMake"]},{"title":"GDB 的使用","url":"/2023/05/25/note/Programming/evn/GDB/","content":"Compile the source file to the binary file.Add argument -g to generate a GDB binary file.\n\n\ngcc -g source.c -o outputg++ -g source.cpp -o outputls -atotal 52K-rw-r--r-- 1 dionysen dionysen 450 Oct 5 22:26 binary-search.cpp-rw-r--r-- 1 dionysen dionysen 2.5K Oct 2 14:29 linked-list.cpp-rw-r--r-- 1 dionysen dionysen 411 Oct 2 14:41 node.cpp-rwxr-xr-x 1 dionysen dionysen 37K Oct 5 23:04 output\n\n\n\n\nCommand\nFull name\nDo somthing\n\n\n\ngdb output\n\n\n\n\nr\nrun\nRun current program\n\n\nb\nbreak\nSet a breakpoint at [function] or [line] (in file)\n\n\nc\ncontinue\nContinue running your program (after stopping, e.g. at a breakpoint).\n\n\nn\nnext\nExecute next program line (after stopping); step over any function calls in the line.\n\n\ns\nstep\nExecute next program line (after stopping); step into any function calls in the line.\n\n\nl\nlist\nType the text of the program in the vicinity of where it is presently stopped.\n\n\np\nprint\nDisplay the value of an expression.\n\n\nwatch\nwatch\nSet a watchpoint in an address of expression\n\n\ni b\ninfo break\nCheck information of breakpoints.\n\n\nk\nkill\nKill the program being debugged.\n\n\nq\nquit\nExit from GDB.\n\n\n\nYou can use shell [args] to execute a shell command.\n\n","categories":["递归这个世界 · 编程","环境搭建与工具使用"],"tags":["CPP","Linux","C","Debug"]},{"title":"Git 的使用","url":"/2023/05/25/note/Programming/evn/Git/","content":"分布式版本控制系统,适合个人中小企业使用\n\n\nInstallationsudo pacman -S git\n\nUsage基本配置配置git 的用户名和邮箱:\ngit config --global user.name "dionysen"git config --global user.email "solongnight@outlook.com"\n\n新建一个仓库Initiate git repository on the local:\ngit init \n\nor set the file path:\ngit init path/to/repo\n\nA repository was created, but it is empty.You can add some files to the repository:\ngit add [filename] // e.g. "git add ."\n\nThen you add this files to the stages and you need to commit this to the repository.\ngit commit -a -m "Changed some files"\n\n-a does not commit any new files.-m means that you should give the commit message.Add a remote repository:\ngit remote add origin git@gitee.com:sential/source.git\n\nPush the local repository to the remote repository:\ngit push origin master\n\n\n若要在一个新的设备上使用远程仓库,首先将此仓库克隆到本地:\n\ngit clone git@gitee.com:sential/source.git# 值得注意的是gitee的仓库公钥管理方式导致必须使用ssh克隆,否则难以实现无密码修改远程仓库# 官方提示:使用SSH公钥可以让你在你的电脑和 Gitee 通讯的时候使用安全连接(Git的Remote要使用SSH地址)\n\n添加个人公钥然后按照 gitee 上的提示添加个人公钥:\nssh-keygen -t ed25519 -C "xxxxx@xxxxx.com" # Generating public/private ed25519 key pair...cat ~/.ssh/id_ed25519.pub# ssh-ed25519 AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....ssh -T git@gitee.com\n\n与远程仓库同步每次编辑时要执行。\ngit pull origin master# 然后开始编辑# 完成后执行:git add .git commit -a -m "Changed some files"git push origin master\n\n或者每次编辑完成后,在另一处pull一次,那样不用每次编辑前都要再拉去一下了。写两个脚本自动拉取和提交。\n\n当没有拉取最新版本的远程仓库同时又修改了本地仓库时,拉取会提示错误,需要选择合并或者放弃某一端,如果放弃本地仓库,执行以下命令:\n\ngit reset --hardgit pull origin master\n\n分支切换查看分支:\ngit branch -a \t# 查看远程分支git branch \t\t# 查看本地分支\n\n新建分支:\ngit checkout -b linux origin/linux#完成新分支的修改后git add .git commit -a -m "Changed some files"git push --set-upstream origin origin/linux\n\n之后即可正常使用,切换分支使用命令:\ngit checkout main # 切换到主分支\n\n","categories":["递归这个世界 · 编程","环境搭建与工具使用"],"tags":["Linux","Git"]},{"title":"OpenGL开发环境搭建","url":"/2023/06/09/note/Programming/evn/OpenGL-env/","content":"\n🔨学习OpenGL,在不同平台使用不同工具构建项目的方法。\n\n\n\nArchlinuxArchlinux 配置 OpenGL 开发环境 (glfw + glad)\nGLFW\n\n安装glfw库\nsudo pacman -S glfw-x11\n\n\nGLAD\n\n\n\n在此网站选择需要的版本https://glad.dav1d.de,点击GRNERATE,下载生成的zip文件,解压后将其放到项目文件夹中。\n文件目录为:\n├── CMakeLists.txt├── glad│ ├── include│ │ ├── glad│ │ │ └── glad.h│ │ └── KHR│ │ └── khrplatform.h│ └── src│ └── glad.c└── main.cpp\n\nCMakeLists.txt可以写成如下:\ncmake_minimum_required(VERSION 3.14)project(OpenglTest)set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Make sure clang can find .h fileset(CMAKE_CXX_STANDARD 11)set(SOURCE_FILES main.cpp glad/src/glad.c) # src filesinclude_directories(glad/include) # include filesadd_executable(OpenglTest ${SOURCE_FILES})target_link_libraries(OpenglTest glfw) # link the glfw library\n\nArchlinux 安装glew并配置CMakesudo pacman -S glewlwyd glew1.10 glew\n\n在项目中的CMakeLists.txt中配置:\ncmake_minimum_required(VERSION 3.14)project(OpenglTest)find_package(OpenGL REQUIRED)if(NOT OPENGL_FOUND) message("ERROR: OpenGL not found")endif(NOT OPENGL_FOUND)set(CMAKE_EXPORT_COMPILE_COMMANDS ON)set(CMAKE_CXX_STANDARD 11)set(SOURCE_FILES main.cpp)# include_directories(glad/include)add_executable(OpenglTest ${SOURCE_FILES})find_package(GLEW REQUIRED)target_link_libraries(OpenglTest glfw GLEW::GLEW libGL.so)\n\n编写代码main.cpp:\n#include <GL/glew.h>#include <GLFW/glfw3.h>#include <iostream>int main(void) { // glfw: initialize and configure // ------------------------------ if (!glfwInit()) { return -1; } // glfw window creation // -------------------- GLFWwindow *window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL); if (window == NULL) { std::cout << "Failed to create GLFW window" << std::endl; glfwTerminate(); return -1; } glfwMakeContextCurrent(window); if (GLEW_OK != glewInit()) { std::cout << "Error!" << std::endl; } while (!glfwWindowShouldClose(window)) { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex2f(-0.5f, -0.5f); glVertex2f(0.0f, 0.5f); glVertex2f(0.5f, -0.5f); glEnd(); glfwSwapBuffers(window); glfwPollEvents(); } // glfw: terminate, clearing all previously allocated GLFW resources. // ------------------------------------------------------------------ glfwTerminate(); return 0;}\n\n编译运行:\n\nWindows 10/11Visual Studio on Windows 配置 OpenGL 开发环境(使用解决方案链接库)\nGLFW(手动编译,没有必要)\n\n下载CMake(x64):https://github.com/Kitware/CMake/releases/download/v3.26.4/cmake-3.26.4-windows-x86_64.msi\n下载GLFW源码:https://github.com/glfw/glfw/releases/download/3.3.8/glfw-3.3.8.zip,并解压\n打开CMake-GUI,设置如下:\n \n\n点击Configure,选择自己需要的VS版本和架构:\n\n\n点击Generate,会源文件中生成一个build文件夹,用 VS 打开其中的GLFW.sln,生成,然后将生成的dll文件放置好\n\nGLFW\n\n直接下载Windows版本的预编译文件,其中有includes和dll文件,链接到项目即可使用\n\nGLAD\n\n与Linux版本相同,均为将源代码文件包含到项目中\nVisual Studio 使用 CMake 配置 glfw + glad其他与上文大致相同,下载编译glfw,生成下载对应的glad,然后将编译好的glfw库文件和glad的源文件放到项目文件夹中,文件结构如下图:\n\n然后在CMakeLists.txt中配置:\n# CMakeList.txt: opengl_test 的 CMake 项目,在此处包括源代码并定义# 项目特定的逻辑。#cmake_minimum_required (VERSION 3.8)# Enable Hot Reload for MSVC compilers if supported.if (POLICY CMP0141) cmake_policy(SET CMP0141 NEW) set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")endif()project ("opengl_test")include_directories(${PROJECT_SOURCE_DIR}/include) #添加包含的头文件link_directories(lib) #添加要链接的lib文件# 将源代码添加到此项目的可执行文件。file(COPY "lib" DESTINATION ${CMAKE_BINARY_DIR})file(GLOB_RECURSE src_dir "./src/*.c" "./src/*.h" "./src/*.cpp" )add_executable (opengl_test "main.cpp" ${src_dir})if (CMAKE_VERSION VERSION_GREATER 3.12) set_property(TARGET opengl_test PROPERTY CXX_STANDARD 20)endif()# TODO: 如有需要,请添加测试并安装目标。target_link_libraries(opengl_test glfw3 opengl32)\n\n将OpenGL基础 | DIONYSEN BLOG的源码添加到main.cpp,编译运行:\n\n","categories":["递归这个世界 · 编程","环境搭建与工具使用"],"tags":["Linux","Windows","OpenGL"]},{"title":"Clang-format配置","url":"/2023/09/14/note/Programming/evn/clang-format/","content":"\n\n\n这是一个.clang-format的备份。\n\n\n\n--- BasedOnStyle: Microsoft# 访问说明符(public、private等)的偏移AccessModifierOffset: -2# 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)AlignAfterOpenBracket: AlwaysBreak# 连续赋值时,对齐所有等号AlignConsecutiveAssignments: true# 连续声明时,对齐所有声明的变量名AlignConsecutiveDeclarations: true# 左对齐逃脱换行(使用反斜杠换行)的反斜杠AlignEscapedNewlinesLeft: true# 水平对齐二元和三元表达式的操作数AlignOperands: true# 对齐连续的尾随的注释AlignTrailingComments: true# 允许函数声明的所有参数在放在下一行AllowAllParametersOfDeclarationOnNextLine: false# 允许短的块放在同一行AllowShortBlocksOnASingleLine: true# 允许短的case标签放在同一行AllowShortCaseLabelsOnASingleLine: false# 允许短的函数放在同一行: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), AllAllowShortFunctionsOnASingleLine: Inline# 允许短(只有一行时)的if语句保持在同一行AllowShortIfStatementsOnASingleLine: false# 允许短的循环保持在同一行AllowShortLoopsOnASingleLine: true# 总是在定义返回类型后换行(deprecated)AlwaysBreakAfterDefinitionReturnType: None# 总是在返回类型后换行: None, All, TopLevel(顶级函数,不包括在类中的函数), AllDefinitions(所有的定义,不包括声明), TopLevelDefinitions(所有的顶级函数的定义)AlwaysBreakAfterReturnType: None# 总是在多行string字面量前换行AlwaysBreakBeforeMultilineStrings: false# 总是在template声明后换行AlwaysBreakTemplateDeclarations: false# false表示函数实参要么都在同一行,要么都各自一行BinPackArguments: true# false表示所有形参要么都在同一行,要么都各自一行BinPackParameters: true# 使用Microsoft风格,故不再配置# # 在二元运算符前换行: None(在操作符后换行), NonAssignment(在非赋值的操作符前换行), All(在操作符前换行)# BreakBeforeBinaryOperators: NonAssignment# # 在大括号前换行: Attach(始终将大括号附加到周围的上下文), Linux(除函数、命名空间和类定义,与Attach类似), # # Mozilla(除枚举、函数、记录定义,与Attach类似), Stroustrup(除函数定义、catch、else,与Attach类似), # # Allman(总是在大括号前换行), GNU(总是在大括号前换行,并对于控制语句的大括号增加额外的缩进), WebKit(在函数前换行), Custom# # 注:这里认为语句块也属于函数# BreakBeforeBraces: Custom# # 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效# BraceWrapping: # # class定义后面# AfterClass: true# # 控制语句后面# AfterControlStatement: false# # enum定义后面# AfterEnum: false# # 函数定义后面# AfterFunction: true# # 命名空间定义后面# AfterNamespace: false# # ObjC定义后面# AfterObjCDeclaration: false# # struct定义后面# AfterStruct: false# # union定义后面# AfterUnion: false# # catch之前# BeforeCatch: true# # else之前# BeforeElse: true# # 缩进大括号# IndentBraces: true# 在三元运算符前换行BreakBeforeTernaryOperators: true# 在构造函数的初始化列表的逗号前换行BreakConstructorInitializersBeforeComma: true# 每行字符的限制,0表示没有限制# ColumnLimit: 200# 描述具有特殊意义的注释的正则表达式,它不应该被分割为多行或以其它方式改变CommentPragmas: '^ IWYU pragma:'# 构造函数的初始化列表要么都在同一行,要么都各自一行ConstructorInitializerAllOnOneLineOrOnePerLine: true# 构造函数的初始化列表的缩进宽度ConstructorInitializerIndentWidth: 4# 延续的行的缩进宽度ContinuationIndentWidth: 4# 去除C++11的列表初始化的大括号{后和}前的空格Cpp11BracedListStyle: false# 继承最常用的指针和引用的对齐方式DerivePointerAlignment: false# 关闭格式化DisableFormat: false# 自动检测函数的调用和定义是否被格式为每行一个参数(Experimental)ExperimentalAutoDetectBinPacking: false# 需要被解读为foreach循环而不是函数调用的宏ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]# 缩进case标签IndentCaseLabels: false# 缩进宽度IndentWidth: 4# 函数返回类型换行时,缩进函数声明或函数定义的函数名IndentWrappedFunctionNames: false# 保留在块开始处的空行KeepEmptyLinesAtTheStartOfBlocks: true# 开始一个块的宏的正则表达式MacroBlockBegin: ''# 结束一个块的宏的正则表达式MacroBlockEnd: ''# 连续空行的最大数量MaxEmptyLinesToKeep: 1# 命名空间的缩进: None, Inner(缩进嵌套的命名空间中的内容), AllNamespaceIndentation: Inner# 在call(后对函数调用换行的penaltyPenaltyBreakBeforeFirstCallParameter: 19# 在一个注释中引入换行的penaltyPenaltyBreakComment: 300# 指针和引用的对齐: Left, Right, MiddlePointerAlignment: Left# 允许重新排版注释ReflowComments: true# 允许排序#includeSortIncludes: true# 在赋值运算符之前添加空格SpaceBeforeAssignmentOperators: true# 开圆括号之前添加一个空格: Never, ControlStatements, AlwaysSpaceBeforeParens: ControlStatements# 在空的圆括号中添加空格SpaceInEmptyParentheses: false# 在尾随的评论前添加的空格数(只适用于//)SpacesBeforeTrailingComments: 2# 在尖括号的<后和>前添加空格SpacesInAngles: false# 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, AlwaysUseTab: Never\n\n","categories":["递归这个世界 · 编程","环境搭建与工具使用"],"tags":["CPP","Linux","Clangd"]},{"title":"Vim 使用 coc-nvim 的 coc-clangd 关闭参数提示","url":"/2023/06/12/note/Programming/evn/coc-nvim-inlay-hint/","content":"在Vim中使用Coc-nvim提供的coc-clangd,会默认开启Inlay-hint,也即如图所示的参数提示,它可以帮助我们快速分辨参数,但有时候也会影响代码的整洁和对代码长度的估量,除去的方法为在Coc-config中关闭inlayHint.enable选项。\n\n\n\n\n在Vim中输入命令CocConfig,回车\n将inlayHint.enable选项设置为false\n\n然后即可看到Inlay-hint的效果已经不见了\n\n","categories":["递归这个世界 · 编程","环境搭建与工具使用"],"tags":["CPP","Linux","Vim","Clangd"]},{"title":"Clangd Config CMakeLists. txt","url":"/2023/05/25/note/Programming/evn/cpp_config/","content":"Vim using Coc-nvim plugin clangd-lsp need to read CMakeLists.txt so that it can auto-complete your code.If your project builds with CMake, it can generate this file. You should enable it with:\ncmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1\n\nOr add to CMakeLists.txt:\nset(CMAKE_EXPORT_COMPILE_COMMANDS ON)\n\ncompile_commands.json will be written to your build directory. If your build directory is $SRC or $SRC/build, clangd will find it. Otherwise, symlink or copy it to $SRC, the root of your source tree.\nln -s ~/myproject-build/compile_commands.json ~/myproject/\n\nGenerated compile_commands.json can support auto completion for third party libraries.\n","categories":["递归这个世界 · 编程","环境搭建与工具使用"],"tags":["CPP","Linux","CMake","Clangd"]},{"title":"Visual Studio 美化设置","url":"/2023/06/09/note/Programming/evn/vs-beautify/","content":"干净整洁的工作环境是必要的,而Visual Studio给人的感觉总是笨重繁杂又混乱的(如果你足够熟悉它,可能并不会这么觉得),于是把它变得尽量和 VS Code 一样整洁是一件令人舒适的事情。\n隐藏状态栏设置中取消勾选“显示状态栏”即可:\n\n文本编辑器相关如此设置:\n\n字体和颜色设置自己想要的:\n\n换上自己喜欢的主题,就可以得到一个清爽的文本编辑器界面:\n\n","categories":["递归这个世界 · 编程","环境搭建与工具使用"],"tags":["Windows","Visual Studio"]},{"title":"VS code 安装插件 lldb 调试 CPP 程序","url":"/2023/06/13/note/Programming/evn/vscode-lldb-extension/","content":"VS code 安装插件 CodeLLDB 时,需要下载一个包,vadimcn/codelldb,即使有代理,也难以自动完成。\n\n\n可以手动下载Release下的对应架构的vsix包,然后命令行安装:\ncode --install-extension codelldb-x86_64-linux.vsix\n\n然后编辑一个launch.json:\n{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "lldb", "request": "launch", "name": "Debug", "program": "${workspaceFolder}/path/to/your-debug-program", // 要制定需要debug的程序 "args": [], "cwd": "${workspaceFolder}" } ]}\n\n加上断点即可调试。\n","categories":["递归这个世界 · 编程","环境搭建与工具使用"],"tags":["CPP","VScode","LLDB"]},{"title":"Windows命令行使用CMake","url":"/2023/06/20/note/Programming/tools/cmake-win/","content":"使用CMake命令行构建一个小工程编辑main.cpp:\n#include <iostream>int main() {\tstd::cout << "Hello, Windows!\\n";\treturn 0;}\n\n编辑CMakeLists.txt:\ncmake_minimum_required(VERSION 3.5.1)project(win32 VERSION 0.1.0)set(CMAKE_CXX_STANDARD 20)include(CTest)enable_testing()set(CMAKE_EXPORT_COMPILE_COMMANDS ON)set(CMAKE_BUILD_TYPE Debug)include_directories(includes)add_executable(win32 main.cpp)set(CPACK_PROJECT_NAME ${PROJECT_NAME})set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})include(CPack)\n\n\n\n当前目录为:\n 目录: D:\\projMode LastWriteTime Length Name---- ------------- ------ ----d----- 2023/6/20 9:47 build-a---- 2023/6/20 9:51 372 CMakeLists.txt-a---- 2023/6/20 9:37 97 main.cpp\n\n进入build文件夹:\nPS D:\\proj> cd .\\build\\\n\n输入命令cmake ..以创建CMakeCache:\nPS D:\\proj\\build> cmake ..-- Building for: Visual Studio 17 2022-- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.19045.-- The C compiler identification is MSVC 19.36.32534.0-- The CXX compiler identification is MSVC 19.36.32534.0-- Detecting C compiler ABI info-- Detecting C compiler ABI info - done-- Check for working C compiler: E:/VS2022/VC/Tools/MSVC/14.36.32532/bin/Hostx64/x64/cl.exe - skipped-- Detecting C compile features-- Detecting C compile features - done-- Detecting CXX compiler ABI info-- Detecting CXX compiler ABI info - done-- Check for working CXX compiler: E:/VS2022/VC/Tools/MSVC/14.36.32532/bin/Hostx64/x64/cl.exe - skipped-- Detecting CXX compile features-- Detecting CXX compile features - done-- Configuring done (7.5s)-- Generating done (0.1s)-- Build files have been written to: D:/proj/build\n\n输入命令cmake --build .编译:\nPS D:\\proj\\build> cmake --build .MSBuild version 17.6.3+07e294721 for .NET Framework 1>Checking Build System Building Custom Rule D:/proj/CMakeLists.txt main.cpp win32.vcxproj -> D:\\proj\\build\\Debug\\win32.exe Building Custom Rule D:/proj/CMakeLists.txt\n\n此时可以看到build文件夹下多出了许多文件和一些文件夹:\n 目录: D:\\proj\\buildMode LastWriteTime Length Name---- ------------- ------ ----d----- 2023/6/20 9:57 CMakeFilesd----- 2023/6/20 9:57 Debugd----- 2023/6/20 9:56 Testingd----- 2023/6/20 9:57 win32.dird----- 2023/6/20 9:57 x64-a---- 2023/6/20 9:56 45092 ALL_BUILD.vcxproj……\n\n其中Debug文件夹中就有生成的可执行文件:\nPS D:\\proj\\build> cd .\\Debug\\PS D:\\proj\\build\\Debug> ls 目录: D:\\proj\\build\\DebugMode LastWriteTime Length Name---- ------------- ------ -----a---- 2023/6/20 9:57 58368 win32.exe-a---- 2023/6/20 9:57 1265664 win32.pdb\n\n运行:\nPS D:\\proj\\build> .\\Debug\\win32.exeHello, Windows!\n\nCMake使用glut库点此下载glut的bin文件,其中包含头文件、.dll和.lib文件,将其放到需要引用的工程中。\nstdlib.h(56,48): error C2381: “exit”: 重定义;”noreturn” 不同 [D:\\proj\\build\\win32.vcxproj]解决办法: 调换一下头文件的包含次序:\n#include <windows.h>#include "./lib/glut.h"\n\n 改成:\n#include "./lib/glut.h"#include <windows.h>\n\nLINK : fatal error LNK1104: 无法打开文件“glut32.lib” [D:\\proj\\build\\win32.vcxproj]……\n错误太多,配置太困难,还是使用VS吧。\n","categories":["递归这个世界 · 编程","环境搭建与工具使用"],"tags":["CPP","Linux","Vim","Clangd"]},{"title":"Archlinux上使用MySQL(MariaDB)","url":"/2023/07/15/note/Programming/tools/mysql_install/","content":"\nMySQL 是 Oracle 开发的,分布广泛的多线程,多用户 SQL 数据库。\n\n\nArch Linux 支持 MariaDB,这是 MySQL 的社区开发分支,旨在实现嵌入式兼容性。Oracle 的 MySQL 降到了 AUR:mysqlAUR。另一个旨在完全兼容的分支是 Percona Server,可从 percona-server包 获得。\n\n\nPercona 也有 Oracle 的 InnoDB 存储引擎的分支,称为 XtraDB。MariaDB 和 Percona Server 都使用此分支。\n\n在Arch Linux上使用MySQL,可以使用官方库中的MariaDB,也可以使用AUR中的MySQL。\n\n\n安装MySQL打开终端,并使用以下命令安装MySQL\nsudo pacman -S mysql# Actually installed mariadb# oryay -S mysql\n\n\n如果安装的是mariadb,那么接下来所有命令中的mysql都用mariadb替换\n\n初始化安装完成后,运行以下命令来初始化MySQL数据库:\nsudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql\n\n启动MySQL服务:\n启动MySQL服务sudo systemctl start mysqld\n\n若要设置开机自启动,运行以下命令:\nsudo systemctl enable mysqld\n\n设置root用户密码运行以下命令来设置root用户的密码:\nsudo mysql_secure_installation\n\n按照提示,设置root密码并进行其他安全设置。\n连接到MySQL服务器运行以下命令以使用root用户连接到MySQL服务器:\nmysql -u root -p\n\n输入先前设置的root密码以进行身份验证。\n创建和管理数据库连接到MySQL服务器后,您可以使用SQL命令创建和管理数据库。以下是一些常用的命令示例:\n创建数据库:\nCREATE DATABASE mydatabase;\n\n使用数据库:\nUSE mydatabase;\n\n创建表:\nCREATE TABLE mytable ( id INT PRIMARY KEY, name VARCHAR(50));\n\n插入数据:\nINSERT INTO mytable (id, name) VALUES (1, 'John');\n\n查询数据:\nSELECT * FROM mytable;\n\n更新数据:\nUPDATE mytable SET name = 'Alice' WHERE id = 1;\n\n删除数据:\nDELETE FROM mytable WHERE id = 1;\n\n客户端常用命令连接到mysql\nmysql -u root -p\n\n输入\\h查看帮助:\nList of all client commands:Note that all text commands must be first on line and end with ';'? (\\?) Synonym for `help'.clear (\\c) Clear the current input statement.connect (\\r) Reconnect to the server. Optional arguments are db and host.delimiter (\\d) Set statement delimiter.edit (\\e) Edit command with $EDITOR.ego (\\G) Send command to MariaDB server, display result vertically.exit (\\q) Exit mysql. Same as quit.go (\\g) Send command to MariaDB server.help (\\h) Display this help.nopager (\\n) Disable pager, print to stdout.notee (\\t) Don't write into outfile.pager (\\P) Set PAGER [to_pager]. Print the query results via PAGER.print (\\p) Print current command.prompt (\\R) Change your mysql prompt.quit (\\q) Quit mysql.costs (\\Q) Toggle showing query costs after each queryrehash (\\#) Rebuild completion hash.source (\\.) Execute an SQL script file. Takes a file name as an argument.status (\\s) Get status information from the server.system (\\!) Execute a system shell command.tee (\\T) Set outfile [to_outfile]. Append everything into given outfile.use (\\u) Use another database. Takes database name as argument.charset (\\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.warnings (\\W) Show warnings after every statement.nowarning (\\w) Don't show warnings after every statement.For server side help, type 'help contents'\n\n简单使用连接:\nmysql -u root -p\n\n数据库操作:\nCREATE DATABASE </database_name>; \t# 创建DROP DATABASE </database_name>;\t\t# 删除USE </database_name>;\t\t\t\t# 选择\n\n数据表操作:\nCREATE TABLE </table_name> (column_name column_type);\t# 创建表CREATE TABLE IF NOT EXISTS </table_name> (column_name column_type);\t# 不存在则创建表DROP TABLE </table_name>; # 删除表INSERT INTO </table_name> ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ); # 表中插入数据SELECT * FROM </table_name>; # 从表中读取数据\n\n使用C++调用linux上下载mysqlcppconnector,将头文件和库文件放到相应位置,xmake.lua中添加add_links("mysqlcppconn")\n#include <iostream>#include <jdbc/cppconn/resultset.h>#include <jdbc/cppconn/statement.h>#include <jdbc/mysql_connection.h>#include <jdbc/mysql_driver.h>#include <string>int main(int argc, char **argv) { sql::mysql::MySQL_Driver *driver; sql::Connection *con; driver = sql::mysql::get_mysql_driver_instance(); con = driver->connect("tcp://0.0.0.0:3306", "root", "140917"); sql::Statement *stmt; sql::ResultSet *res; stmt = con->createStatement(); stmt->execute("USE mydatabase"); // 创建表 stmt->execute( "CREATE TABLE IF NOT EXISTS mytable (id INT, name VARCHAR(100))"); // 插入数据 stmt->execute("INSERT INTO mytable (id, name) VALUES (1, 'John')"); stmt->execute("INSERT INTO mytable (id, name) VALUES (2, 'Jane')"); // 查询并打印表内容 res = stmt->executeQuery("SELECT * FROM mytable"); std::cout << "Table Content:" << std::endl; while (res->next()) { int id = res->getInt("id"); std::string name = res->getString("name"); std::cout << "ID: " << id << ", Name: " << name << std::endl; } delete res; delete stmt; con->close(); delete con; return 0;}\n\n运行结果为:\nTable Content:ID: 1, Name: JohnID: 2, Name: Jane\n\n","categories":["递归这个世界 · 编程","环境搭建与工具使用"],"tags":["Linux","MySQL","Database"]},{"title":"使用xmake构建c++项目","url":"/2023/06/23/note/Programming/tools/xmake/","content":"\n接受新的事物是不容易的,这意味要面临诸多陌生和不习惯,但xmake太简单易用了,从此cmake是路人。\n\n\n安装On linux:\ncurl -fsSL https://xmake.io/shget.text | bash# Orwget https://xmake.io/shget.text -O - | bash\n\nOn Windows:\nInvoke-Expression (Invoke-Webrequest 'https://xmake.io/psget.text' -UseBasicParsing).Content\n\n或者直接使用包管理器安装。\n如archlinux:\nsudo pacman -Sy xmake\n\n使用创建项目cpp xmake create -P ./hello# -------- 以下为输出内容 --------create hello ... [+]: src/main.cpp [+]: xmake.lua [+]: .gitignorecreate ok!\n\n此时目录为\nhello|-- src| `-- main.cpp`-- xmake.lua\n\nxmake.lua的内容为:\nadd_rules("mode.debug", "mode.release") -- 添加debug和release模式target("hello")\t-- 项目名字 set_kind("binary") -- 设置生成二进制文件 add_files("src/*.cpp") -- 添加源文件\n\n在此基础上可以添加更多如头文件和链接库。\nOpenGL-demo环境为WSL-Archlinux。\n安装glfw:\nsudo pacman -S glfw-x11\n\n下载glad放到项目路径中:\n.|-- glad| |-- include| | |-- KHR| | | `-- khrplatform.h| | `-- glad| | `-- glad.h| `-- src| `-- glad.c|-- src| `-- main.cpp`-- xmake.lua\n\nmain.cpp代码在这里。\nxmake.lua的内容为:\nadd_rules("mode.debug", "mode.release")target("test-xmake") set_kind("binary") add_files("src/*.cpp", "glad/src/glad.c") -- 添加glad的源文件,"glad/src/glad.c"当然也可以写成"glad/src/*.c" add_includedirs("glad/include") -- 添加glad的头文件 add_links("glfw") -- 添加glfw库\n\n编译:\nxmake# 或xmake build# -------- 以下为输出内容 --------[ 20%]: cache compiling.release src/main.cpp[ 60%]: linking.release test-xmake[100%]: build ok, spent 1.136s\n\n运行:\n./build/linux/x86_64/release/test-xmake# 或xmake run\n\n\n生成compile_commands.jsonxmake project -k compile_commands\n\n如果有多个编译器,最好先设置好语法检查的编译器再生成:\nxmake f --toolchain=clangxmake project -k compile_commands\n\n使用mingw编译器xmake f -p mingw --sdk=/path/to/mingw/\n\n发现mingw编译速度很慢,换成msvc:\nxmake f --toolchain=msvc\n\n切换编译模式到debug/releasexmake f -m debug\n\n\nf意为config,m意为mode\n\n添加远程库如glm,先编辑xmake.lua:\nadd_rules("mode.debug", "mode.release")add_requires("glm") -- 必须添加依赖target("opengl") add_rules("win.sdk.application") set_kind("binary") add_files("src/*.cpp","src/*.c") add_includedirs("/include","/Dependencies/include/glad") add_links("opengl32") add_packages("glm") -- 然后添加包,之后xmake会自动添加include和link及其路径\n\n然后生成compile_commands以让编译器智能补全:\nxmake #构建时会自动从远程仓库拉取xmake project -k compile_commands\n\n需要注意的是,添加依赖库的方式很多,常用是:\n①使用xmake的包管理器,可以使用vcpkg或conon的包,也可以使用xmake自己的包,添加的方式是:\nadd_requires("glfw") // 添加依赖add_packages("glfw") // 添加包\n\n②从源码编译成依赖库:\n如源码路径:\n└─spdlog ├─include │ └─spdlog │ ├─cfg │ ├─details │ ├─fmt │ │ └─bundled │ └─sinks └─src\n\n在spdlog文件下创建xmake.lua作为项目的子模块:\ntarget("spdlog") set_kind("static") -- 设置为静态库类型\t-- 或动态库 set_kind("shared") add_includedirs("./include", {public = true}) -- 让依赖此库的项目继承头文件 add_files("./src/*.cpp") add_defines("SPDLOG_COMPILED_LIB") -- 编译成lib所需要宏\n\n然后再自己项目中的xmake.lua中包含并添加依赖:\ntarget("myPrj")\tsetkind("binary")\t\tincludes("./vendor/spdlog/xmake.lua") \t-- 包含spdlog项目\tadd_deps("spdlog")\t\t\t\t\t\t-- 添加依赖\t-- ...其他配置\n\n\n\nQt项目创建:\nxmake create -t qt.console testxmake create -t qt.static testxmake create -t qt.shared testxmake create -t qt.quickapp testxmake create -t qt.widgetapp test\n\n配置qt版本\nxmake f --qt=~/Qt/Qt5.9.1\n\n使用xmake生成Visual Studio项目xmake project -k vsxmake\n\n\n\n\n\n\n\n","categories":["递归这个世界 · 编程","环境搭建与工具使用"],"tags":["CPP","Linux","xmake"]}] \ No newline at end of file diff --git a/tags/Algorithm/index.html b/tags/Algorithm/index.html new file mode 100644 index 000000000..98d2f9fd0 --- /dev/null +++ b/tags/Algorithm/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Algorithm | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Algorithm +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Android/index.html b/tags/Android/index.html new file mode 100644 index 000000000..c58db2f83 --- /dev/null +++ b/tags/Android/index.html @@ -0,0 +1,448 @@ + + + + + + + + + + + + 标签: Android | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Android +
    +
    + +
    + +
    +
    + + 2023 + + [2] +
    + +
    + +
    +
    + + 2022 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Archlinux/index.html b/tags/Archlinux/index.html new file mode 100644 index 000000000..5175018b6 --- /dev/null +++ b/tags/Archlinux/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Archlinux | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Archlinux +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/C/index.html b/tags/C/index.html new file mode 100644 index 000000000..666017dca --- /dev/null +++ b/tags/C/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: C | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     C +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/CMake/index.html b/tags/CMake/index.html new file mode 100644 index 000000000..5d9e5fdc3 --- /dev/null +++ b/tags/CMake/index.html @@ -0,0 +1,436 @@ + + + + + + + + + + + + 标签: CMake | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     CMake +
    +
    + +
    + +
    +
    + + 2023 + + [3] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/CPP/index.html b/tags/CPP/index.html new file mode 100644 index 000000000..910d43fe7 --- /dev/null +++ b/tags/CPP/index.html @@ -0,0 +1,503 @@ + + + + + + + + + + + + 标签: CPP | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     CPP +
    +
    + + +
    +
    + +
    +
    + + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/CPP/page/2/index.html b/tags/CPP/page/2/index.html new file mode 100644 index 000000000..2cc2d7644 --- /dev/null +++ b/tags/CPP/page/2/index.html @@ -0,0 +1,507 @@ + + + + + + + + + + + + 标签: CPP | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     CPP +
    +
    + +
    + +
    +
    + + 2023 + + [10] +
    + +
    + +
    +
    +
    + +
    +
    + + + + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/CPP/page/3/index.html b/tags/CPP/page/3/index.html new file mode 100644 index 000000000..9c16d3999 --- /dev/null +++ b/tags/CPP/page/3/index.html @@ -0,0 +1,422 @@ + + + + + + + + + + + + 标签: CPP | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     CPP +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Clangd/index.html b/tags/Clangd/index.html new file mode 100644 index 000000000..6dab080c2 --- /dev/null +++ b/tags/Clangd/index.html @@ -0,0 +1,454 @@ + + + + + + + + + + + + 标签: Clangd | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Clangd +
    +
    + +
    + +
    +
    + + 2023 + + [5] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Computer/index.html b/tags/Computer/index.html new file mode 100644 index 000000000..c59eccde3 --- /dev/null +++ b/tags/Computer/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + 标签: Computer | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Computer +
    +
    + +
    + +
    +
    + + 2023 + + [9] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Data-Structure/index.html b/tags/Data-Structure/index.html new file mode 100644 index 000000000..b2e7f207d --- /dev/null +++ b/tags/Data-Structure/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Data Structure | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Data Structure +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Data-structure/index.html b/tags/Data-structure/index.html new file mode 100644 index 000000000..05adb0f57 --- /dev/null +++ b/tags/Data-structure/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Data structure | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Data structure +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Database/index.html b/tags/Database/index.html new file mode 100644 index 000000000..e7e819ee0 --- /dev/null +++ b/tags/Database/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Database | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Database +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Debug/index.html b/tags/Debug/index.html new file mode 100644 index 000000000..bc75b7d0f --- /dev/null +++ b/tags/Debug/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Debug | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Debug +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Font/index.html b/tags/Font/index.html new file mode 100644 index 000000000..86552057e --- /dev/null +++ b/tags/Font/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Font | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Font +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Git/index.html b/tags/Git/index.html new file mode 100644 index 000000000..579709cb2 --- /dev/null +++ b/tags/Git/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Git | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Git +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Graphic/index.html b/tags/Graphic/index.html new file mode 100644 index 000000000..d28f41ba4 --- /dev/null +++ b/tags/Graphic/index.html @@ -0,0 +1,499 @@ + + + + + + + + + + + + 标签: Graphic | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Graphic +
    +
    + +
    + +
    +
    + + 2023 + + [10] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Hexo-keep-theme/index.html b/tags/Hexo-keep-theme/index.html new file mode 100644 index 000000000..55100e3f4 --- /dev/null +++ b/tags/Hexo-keep-theme/index.html @@ -0,0 +1,427 @@ + + + + + + + + + + + + 标签: Hexo-keep-theme | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Hexo-keep-theme +
    +
    + +
    + +
    +
    + + 2023 + + [2] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Hexo/index.html b/tags/Hexo/index.html new file mode 100644 index 000000000..e87bf591c --- /dev/null +++ b/tags/Hexo/index.html @@ -0,0 +1,436 @@ + + + + + + + + + + + + 标签: Hexo | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Hexo +
    +
    + +
    + +
    +
    + + 2023 + + [3] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/IDE/index.html b/tags/IDE/index.html new file mode 100644 index 000000000..49930c6e9 --- /dev/null +++ b/tags/IDE/index.html @@ -0,0 +1,427 @@ + + + + + + + + + + + + 标签: IDE | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     IDE +
    +
    + +
    + +
    +
    + + 2023 + + [2] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Java/index.html b/tags/Java/index.html new file mode 100644 index 000000000..b0f9b1785 --- /dev/null +++ b/tags/Java/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Java | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Java +
    +
    + +
    + +
    +
    + + 2022 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Javascript/index.html b/tags/Javascript/index.html new file mode 100644 index 000000000..ee368dced --- /dev/null +++ b/tags/Javascript/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Javascript | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Javascript +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/LLDB/index.html b/tags/LLDB/index.html new file mode 100644 index 000000000..8baf38327 --- /dev/null +++ b/tags/LLDB/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: LLDB | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     LLDB +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Linux/index.html b/tags/Linux/index.html new file mode 100644 index 000000000..7f16d852f --- /dev/null +++ b/tags/Linux/index.html @@ -0,0 +1,503 @@ + + + + + + + + + + + + 标签: Linux | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Linux/page/2/index.html b/tags/Linux/page/2/index.html new file mode 100644 index 000000000..a6e91f79b --- /dev/null +++ b/tags/Linux/page/2/index.html @@ -0,0 +1,507 @@ + + + + + + + + + + + + 标签: Linux | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Linux +
    +
    + +
    + +
    +
    + + 2023 + + [10] +
    + +
    + +
    +
    +
    + +
    +
    + + + + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Linux/page/3/index.html b/tags/Linux/page/3/index.html new file mode 100644 index 000000000..118f45943 --- /dev/null +++ b/tags/Linux/page/3/index.html @@ -0,0 +1,488 @@ + + + + + + + + + + + + 标签: Linux | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Linux +
    +
    + +
    + +
    +
    + + 2023 + + [5] +
    + +
    + +
    +
    + + 2022 + + [2] +
    + +
    + +
    +
    +
    + +
    +
    + + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Markdown/index.html b/tags/Markdown/index.html new file mode 100644 index 000000000..73a77e535 --- /dev/null +++ b/tags/Markdown/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Markdown | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Markdown +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Mobile-phone/index.html b/tags/Mobile-phone/index.html new file mode 100644 index 000000000..eb4bb7ade --- /dev/null +++ b/tags/Mobile-phone/index.html @@ -0,0 +1,439 @@ + + + + + + + + + + + + 标签: Mobile phone | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Mobile phone +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    + + 2022 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/MySQL/index.html b/tags/MySQL/index.html new file mode 100644 index 000000000..d2a06aed8 --- /dev/null +++ b/tags/MySQL/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: MySQL | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     MySQL +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Neovim/index.html b/tags/Neovim/index.html new file mode 100644 index 000000000..ae881dc4d --- /dev/null +++ b/tags/Neovim/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Neovim | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Neovim +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Network/index.html b/tags/Network/index.html new file mode 100644 index 000000000..e54bab358 --- /dev/null +++ b/tags/Network/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Network | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Network +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Nginx/index.html b/tags/Nginx/index.html new file mode 100644 index 000000000..7dcd8366f --- /dev/null +++ b/tags/Nginx/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Nginx | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Nginx +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/OBS/index.html b/tags/OBS/index.html new file mode 100644 index 000000000..365a61823 --- /dev/null +++ b/tags/OBS/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: OBS | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     OBS +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/OpenGL/index.html b/tags/OpenGL/index.html new file mode 100644 index 000000000..1e3b327d4 --- /dev/null +++ b/tags/OpenGL/index.html @@ -0,0 +1,472 @@ + + + + + + + + + + + + 标签: OpenGL | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     OpenGL +
    +
    + +
    + +
    +
    + + 2023 + + [7] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Picgo/index.html b/tags/Picgo/index.html new file mode 100644 index 000000000..7dad3f2d7 --- /dev/null +++ b/tags/Picgo/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Picgo | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Picgo +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Programming/index.html b/tags/Programming/index.html new file mode 100644 index 000000000..0c1e36add --- /dev/null +++ b/tags/Programming/index.html @@ -0,0 +1,515 @@ + + + + + + + + + + + + 标签: Programming | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Programming +
    +
    + +
    + +
    +
    + + 2023 + + [6] +
    + +
    + +
    +
    + + 2022 + + [4] +
    + +
    + +
    +
    +
    + +
    +
    + + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Programming/page/2/index.html b/tags/Programming/page/2/index.html new file mode 100644 index 000000000..1c70e0d9b --- /dev/null +++ b/tags/Programming/page/2/index.html @@ -0,0 +1,431 @@ + + + + + + + + + + + + 标签: Programming | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Programming +
    +
    + +
    + +
    +
    + + 2022 + + [2] +
    + +
    + +
    +
    +
    + +
    +
    + + + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Protocol/index.html b/tags/Protocol/index.html new file mode 100644 index 000000000..b2fdeebc0 --- /dev/null +++ b/tags/Protocol/index.html @@ -0,0 +1,457 @@ + + + + + + + + + + + + 标签: Protocol | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Protocol +
    +
    + +
    + +
    +
    + + 2023 + + [3] +
    + +
    + +
    +
    + + 2022 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Proxy/index.html b/tags/Proxy/index.html new file mode 100644 index 000000000..6009b5537 --- /dev/null +++ b/tags/Proxy/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Proxy | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Proxy +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Qt/index.html b/tags/Qt/index.html new file mode 100644 index 000000000..c2c7992b9 --- /dev/null +++ b/tags/Qt/index.html @@ -0,0 +1,427 @@ + + + + + + + + + + + + 标签: Qt | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Qt +
    +
    + +
    + +
    +
    + + 2023 + + [2] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/ROM/index.html b/tags/ROM/index.html new file mode 100644 index 000000000..d8a7e8840 --- /dev/null +++ b/tags/ROM/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: ROM | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     ROM +
    +
    + +
    + +
    +
    + + 2022 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/RTMP/index.html b/tags/RTMP/index.html new file mode 100644 index 000000000..79fe263e9 --- /dev/null +++ b/tags/RTMP/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: RTMP | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     RTMP +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/SCP/index.html b/tags/SCP/index.html new file mode 100644 index 000000000..308457f2e --- /dev/null +++ b/tags/SCP/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: SCP | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     SCP +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/SSH/index.html b/tags/SSH/index.html new file mode 100644 index 000000000..37ac803f5 --- /dev/null +++ b/tags/SSH/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: SSH | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     SSH +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/SSL/index.html b/tags/SSL/index.html new file mode 100644 index 000000000..295b5a1d1 --- /dev/null +++ b/tags/SSL/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: SSL | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     SSL +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Samba/index.html b/tags/Samba/index.html new file mode 100644 index 000000000..d9a390999 --- /dev/null +++ b/tags/Samba/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Samba | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Samba +
    +
    + +
    + +
    +
    + + 2022 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Server/index.html b/tags/Server/index.html new file mode 100644 index 000000000..d64d8b9ca --- /dev/null +++ b/tags/Server/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Server | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Server +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Shared-mouse/index.html b/tags/Shared-mouse/index.html new file mode 100644 index 000000000..03f1e2528 --- /dev/null +++ b/tags/Shared-mouse/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Shared mouse | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Shared mouse +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Source-List/index.html b/tags/Source-List/index.html new file mode 100644 index 000000000..fd20eb197 --- /dev/null +++ b/tags/Source-List/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Source List | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Source List +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Source/index.html b/tags/Source/index.html new file mode 100644 index 000000000..f4ee296b7 --- /dev/null +++ b/tags/Source/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Source | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Source +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/System/index.html b/tags/System/index.html new file mode 100644 index 000000000..2af719bcc --- /dev/null +++ b/tags/System/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: System | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     System +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Termux/index.html b/tags/Termux/index.html new file mode 100644 index 000000000..d076058c5 --- /dev/null +++ b/tags/Termux/index.html @@ -0,0 +1,493 @@ + + + + + + + + + + + + 标签: Termux | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Termux +
    +
    + +
    + +
    +
    + + 2023 + + [6] +
    + +
    + +
    +
    + + 2022 + + [2] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Thread/index.html b/tags/Thread/index.html new file mode 100644 index 000000000..63815ffe0 --- /dev/null +++ b/tags/Thread/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Thread | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Thread +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Typescript/index.html b/tags/Typescript/index.html new file mode 100644 index 000000000..3fdb8e0cf --- /dev/null +++ b/tags/Typescript/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Typescript | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Typescript +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Typora/index.html b/tags/Typora/index.html new file mode 100644 index 000000000..c1042d5bf --- /dev/null +++ b/tags/Typora/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Typora | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Typora +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/UEFI/index.html b/tags/UEFI/index.html new file mode 100644 index 000000000..1630074d5 --- /dev/null +++ b/tags/UEFI/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: UEFI | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     UEFI +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/VPN/index.html b/tags/VPN/index.html new file mode 100644 index 000000000..725e9594f --- /dev/null +++ b/tags/VPN/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: VPN | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     VPN +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/VSCode/index.html b/tags/VSCode/index.html new file mode 100644 index 000000000..6d12f26a9 --- /dev/null +++ b/tags/VSCode/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: VSCode | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     VSCode +
    +
    + + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/VScode/index.html b/tags/VScode/index.html new file mode 100644 index 000000000..21b0947c7 --- /dev/null +++ b/tags/VScode/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: VScode | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     VScode +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Vim/index.html b/tags/Vim/index.html new file mode 100644 index 000000000..f8dbec731 --- /dev/null +++ b/tags/Vim/index.html @@ -0,0 +1,445 @@ + + + + + + + + + + + + 标签: Vim | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Vim +
    +
    + +
    + +
    +
    + + 2023 + + [4] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Visual-Studio/index.html b/tags/Visual-Studio/index.html new file mode 100644 index 000000000..d3f3366c4 --- /dev/null +++ b/tags/Visual-Studio/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Visual Studio | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Visual Studio +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Vue/index.html b/tags/Vue/index.html new file mode 100644 index 000000000..55ab10f9a --- /dev/null +++ b/tags/Vue/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Vue | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Vue +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/WSL2/index.html b/tags/WSL2/index.html new file mode 100644 index 000000000..8390cfebe --- /dev/null +++ b/tags/WSL2/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: WSL2 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     WSL2 +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Waydroid/index.html b/tags/Waydroid/index.html new file mode 100644 index 000000000..4171d378d --- /dev/null +++ b/tags/Waydroid/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Waydroid | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Waydroid +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Wayland/index.html b/tags/Wayland/index.html new file mode 100644 index 000000000..98a28ca0f --- /dev/null +++ b/tags/Wayland/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Wayland | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Wayland +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Web/index.html b/tags/Web/index.html new file mode 100644 index 000000000..fec8facc0 --- /dev/null +++ b/tags/Web/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Web | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Web +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Win32/index.html b/tags/Win32/index.html new file mode 100644 index 000000000..ad7256850 --- /dev/null +++ b/tags/Win32/index.html @@ -0,0 +1,436 @@ + + + + + + + + + + + + 标签: Win32 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Win32 +
    +
    + + +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Windows-10/index.html b/tags/Windows-10/index.html new file mode 100644 index 000000000..879ca9c48 --- /dev/null +++ b/tags/Windows-10/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Windows 10 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Windows 10 +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Windows-11/index.html b/tags/Windows-11/index.html new file mode 100644 index 000000000..d048630c9 --- /dev/null +++ b/tags/Windows-11/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: Windows 11 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Windows 11 +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/Windows/index.html b/tags/Windows/index.html new file mode 100644 index 000000000..ed5d2d83d --- /dev/null +++ b/tags/Windows/index.html @@ -0,0 +1,457 @@ + + + + + + + + + + + + 标签: Windows | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     Windows +
    +
    + +
    + +
    +
    + + 2023 + + [3] +
    + +
    + +
    +
    + + 2022 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/c/index.html b/tags/c/index.html new file mode 100644 index 000000000..5d9780aa6 --- /dev/null +++ b/tags/c/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: c | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     c +
    +
    + +
    + +
    +
    + + 2022 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/cpp/index.html b/tags/cpp/index.html new file mode 100644 index 000000000..c6b30c248 --- /dev/null +++ b/tags/cpp/index.html @@ -0,0 +1,475 @@ + + + + + + + + + + + + 标签: cpp | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     cpp +
    +
    + +
    + +
    +
    + + 2023 + + [2] +
    + +
    + +
    +
    + + 2022 + + [4] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 000000000..9108363c2 --- /dev/null +++ b/tags/index.html @@ -0,0 +1,385 @@ + + + + + + + + + + + + 标签 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/liveCD/index.html b/tags/liveCD/index.html new file mode 100644 index 000000000..62ae3d792 --- /dev/null +++ b/tags/liveCD/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: liveCD | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     liveCD +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/root/index.html b/tags/root/index.html new file mode 100644 index 000000000..9a5c06acb --- /dev/null +++ b/tags/root/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: root | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     root +
    +
    + +
    + +
    +
    + + 2022 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/x11-forward/index.html b/tags/x11-forward/index.html new file mode 100644 index 000000000..95f030b49 --- /dev/null +++ b/tags/x11-forward/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: x11-forward | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     x11-forward +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/xmake/index.html b/tags/xmake/index.html new file mode 100644 index 000000000..7a91e85ac --- /dev/null +++ b/tags/xmake/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: xmake | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     xmake +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git a/tags/xpra/index.html b/tags/xpra/index.html new file mode 100644 index 000000000..4b1b4bab9 --- /dev/null +++ b/tags/xpra/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: xpra | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     xpra +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git "a/tags/\345\206\231\344\275\234/index.html" "b/tags/\345\206\231\344\275\234/index.html" new file mode 100644 index 000000000..f9861ff1c --- /dev/null +++ "b/tags/\345\206\231\344\275\234/index.html" @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: 写作 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     写作 +
    +
    + +
    + +
    +
    + + 2022 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git "a/tags/\345\260\217\350\257\264/index.html" "b/tags/\345\260\217\350\257\264/index.html" new file mode 100644 index 000000000..9f962f729 --- /dev/null +++ "b/tags/\345\260\217\350\257\264/index.html" @@ -0,0 +1,457 @@ + + + + + + + + + + + + 标签: 小说 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     小说 +
    +
    + +
    + +
    +
    + + 2022 + + [1] +
    + +
    + +
    +
    + + 2020 + + [3] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git "a/tags/\346\204\237\347\237\245/index.html" "b/tags/\346\204\237\347\237\245/index.html" new file mode 100644 index 000000000..ab67d6b24 --- /dev/null +++ "b/tags/\346\204\237\347\237\245/index.html" @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: 感知 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     感知 +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git "a/tags/\346\210\221\344\270\216\345\234\260\345\235\233/index.html" "b/tags/\346\210\221\344\270\216\345\234\260\345\235\233/index.html" new file mode 100644 index 000000000..70104215f --- /dev/null +++ "b/tags/\346\210\221\344\270\216\345\234\260\345\235\233/index.html" @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: 我与地坛 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     我与地坛 +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git "a/tags/\346\221\230\346\212\204/index.html" "b/tags/\346\221\230\346\212\204/index.html" new file mode 100644 index 000000000..c59de415a --- /dev/null +++ "b/tags/\346\221\230\346\212\204/index.html" @@ -0,0 +1,439 @@ + + + + + + + + + + + + 标签: 摘抄 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     摘抄 +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    + + 2020 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git "a/tags/\346\225\243\346\226\207/index.html" "b/tags/\346\225\243\346\226\207/index.html" new file mode 100644 index 000000000..be081b08d --- /dev/null +++ "b/tags/\346\225\243\346\226\207/index.html" @@ -0,0 +1,457 @@ + + + + + + + + + + + + 标签: 散文 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     散文 +
    +
    + +
    + +
    +
    + + 2022 + + [2] +
    + +
    + +
    +
    + + 2020 + + [2] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git "a/tags/\346\234\250\345\277\203/index.html" "b/tags/\346\234\250\345\277\203/index.html" new file mode 100644 index 000000000..ca8022450 --- /dev/null +++ "b/tags/\346\234\250\345\277\203/index.html" @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: 木心 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     木心 +
    +
    + +
    + +
    +
    + + 2020 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git "a/tags/\347\216\211\346\270\212\346\275\255/index.html" "b/tags/\347\216\211\346\270\212\346\275\255/index.html" new file mode 100644 index 000000000..0c253a0f9 --- /dev/null +++ "b/tags/\347\216\211\346\270\212\346\275\255/index.html" @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: 玉渊潭 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     玉渊潭 +
    +
    + +
    + +
    +
    + + 2022 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git "a/tags/\347\220\206\347\237\245/index.html" "b/tags/\347\220\206\347\237\245/index.html" new file mode 100644 index 000000000..09a58d00e --- /dev/null +++ "b/tags/\347\220\206\347\237\245/index.html" @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: 理知 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     理知 +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git "a/tags/\347\254\224\350\256\260/index.html" "b/tags/\347\254\224\350\256\260/index.html" new file mode 100644 index 000000000..40e75d255 --- /dev/null +++ "b/tags/\347\254\224\350\256\260/index.html" @@ -0,0 +1,427 @@ + + + + + + + + + + + + 标签: 笔记 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     笔记 +
    +
    + +
    + +
    +
    + + 2023 + + [2] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git "a/tags/\350\207\252\346\210\221\350\256\244\347\237\245/index.html" "b/tags/\350\207\252\346\210\221\350\256\244\347\237\245/index.html" new file mode 100644 index 000000000..2782f80ad --- /dev/null +++ "b/tags/\350\207\252\346\210\221\350\256\244\347\237\245/index.html" @@ -0,0 +1,418 @@ + + + + + + + + + + + + 标签: 自我认知 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     自我认知 +
    +
    + +
    + +
    +
    + + 2023 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + diff --git "a/tags/\350\257\273\344\271\246/index.html" "b/tags/\350\257\273\344\271\246/index.html" new file mode 100644 index 000000000..cadc2f4e4 --- /dev/null +++ "b/tags/\350\257\273\344\271\246/index.html" @@ -0,0 +1,457 @@ + + + + + + + + + + + + 标签: 读书 | + + DIONYSEN BLOG + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + + + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
     读书 +
    +
    + +
    + +
    +
    + + 2023 + + [3] +
    + +
    + +
    +
    + + 2020 + + [1] +
    + +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + + + +
    + + +
    + + +

    获取诗词中 ...

    + + + +
    +
    +
    +
    + + + +
    +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + + + +
    • + + + +
    • + +
    • + + +
    • + +
    • +
    + +
      +
    • + +
    • + +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +

    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⩔OXm;SG?%mnT`Kc(VO?Zg)i&5 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