├── .github └── workflows │ └── deloy.yml ├── .gitmodules ├── .vuepress ├── config.js ├── nav.js ├── plugins │ ├── enhanceAppFile.js │ ├── lifecycle.js │ ├── vuepress-plugin-flexsearch │ │ ├── .github │ │ │ └── workflows │ │ │ │ └── codeql-analysis.yml │ │ ├── README.md │ │ ├── example │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── index.js │ │ ├── package.json │ │ └── src │ │ │ ├── SearchBox.vue │ │ │ ├── assets │ │ │ └── search.svg │ │ │ └── utils.js │ └── vuepress-plugin-toolbar │ │ ├── README.md │ │ ├── ToolbarAsidebar.vue │ │ ├── clientRootMixin.js │ │ ├── components │ │ ├── base-opt │ │ │ └── BaseOpt.vue │ │ ├── custom-opt │ │ │ └── CustomOpt.vue │ │ └── page-nav │ │ │ ├── PageNav.vue │ │ │ └── PageNavItem.vue │ │ ├── enhanceAppFile.js │ │ ├── icon │ │ ├── demo.css │ │ ├── demo_index.html │ │ ├── iconfont.css │ │ ├── iconfont.eot │ │ ├── iconfont.js │ │ ├── iconfont.json │ │ ├── iconfont.svg │ │ ├── iconfont.ttf │ │ ├── iconfont.woff │ │ └── iconfont.woff2 │ │ ├── index.js │ │ ├── package.json │ │ ├── style.styl │ │ └── utils.js ├── public │ ├── CNAME │ ├── README.md │ ├── assets │ │ └── js │ │ │ └── load.js │ ├── files │ │ ├── Eclipse配置mars2.zip │ │ ├── Eclipse配置mars2以上版本.zip │ │ ├── FiddlerCore_4-45.7z │ │ ├── IDEA设置.zip │ │ ├── JDK版本生命周期.html │ │ ├── MediaQueriesExample.html │ │ ├── circle-progress-bar.html │ │ ├── css-animation.html │ │ ├── fix-footer-page-bottom-absolute.html │ │ ├── fix-footer-page-bottom-calc.html │ │ ├── fix-footer-page-bottom-flex.html │ │ ├── fix-footer-page-bottom-margin-top.html │ │ ├── fix-footer-window-bottom-fixed.html │ │ ├── fix-footer-window-bottom-sticky.html │ │ ├── gradle-wrapper.properties │ │ ├── horizontal-arrangement-flex.html │ │ ├── horizontal-arrangement-float-left.html │ │ ├── horizontal-arrangement-inline-block.html │ │ ├── init.gradle │ │ ├── init.gradle.kts │ │ ├── round-progress-bar.html │ │ ├── settings.gradle │ │ ├── settings.xml │ │ └── 禁用Intel显卡驱动设置.igp │ ├── images │ │ ├── AI历程.png │ │ ├── AI历程1.png │ │ ├── AI历程2.png │ │ ├── AI历程3.png │ │ ├── AI历程4.png │ │ ├── GiteaWebHook测试.png │ │ ├── GiteaWebHook添加.png │ │ ├── GiteaWebHook设置.png │ │ ├── Go-Syscall.jpg │ │ ├── HttpServletRequest相关API.jpg │ │ ├── IDEA使用技巧.png │ │ ├── IDEA方法注释示例.png │ │ ├── IDEA方法注释设置.png │ │ ├── IDEA目录结构说明.png │ │ ├── IDEA远程debug调试.png │ │ ├── IDEA项目目录指定.png │ │ ├── IP相关命令.jpg │ │ ├── JDK-bin.png │ │ ├── JDK历史版本特性数量.png │ │ ├── Java内置异常.png │ │ ├── Linux性能可观测性工具.jpg │ │ ├── Linux权限.jpg │ │ ├── MinGW-w64下载页说明.png │ │ ├── MySQL-glibc下载.png │ │ ├── MySQL_binlog.png │ │ ├── Rclone_access_token.png │ │ ├── SQL语言.png │ │ ├── SSO单点登录执行顺序.png │ │ ├── Spring拦截器调用顺序.png │ │ ├── TSL-SSL_时间线.png │ │ ├── URI-URL-URN之间的关系.jpg │ │ ├── UUID解构.png │ │ ├── VisualVM-Launcher.gif │ │ ├── YandexMailDNS.png │ │ ├── Yandex解决POP3无法收取邮件.png │ │ ├── activate-power-mode.gif │ │ ├── bpf架构图.png │ │ ├── bpf架构图1.png │ │ ├── clean-code.png │ │ ├── ddl-dml-dcl-tcl.png │ │ ├── ddl-dml-dcl.png │ │ ├── dns_flowchart_20210418.png │ │ ├── easypayx.png │ │ ├── easypayx可以过的平台.png │ │ ├── git-merge_rebase.png │ │ ├── google翻译俄语软键盘.png │ │ ├── go的man和init执行过程.png │ │ ├── icons │ │ │ ├── logo.png │ │ │ └── 小C技术栈_扫码_搜索-标准色版.png │ │ ├── js浏览器缓存.png │ │ ├── jvm参数统计.png │ │ ├── spring-bean生命周期.png │ │ ├── spring-web-client.png │ │ ├── sql-tree.jpg │ │ ├── sql执行顺序.jpg │ │ ├── sql执行顺序.png │ │ ├── url请求执行顺序.jpg │ │ ├── vue生命周期详解.png │ │ ├── 宝塔WebHook获取url.png │ │ ├── 宝塔WebHook设置.png │ │ ├── 程序与进程与线程.jpg │ │ └── 谷歌账号数据迁移.png │ ├── manifest.json │ └── static.json ├── push.js ├── styles │ ├── index.styl │ └── palette.styl └── utils.js ├── DBS ├── MySQL.md ├── MySQL事件.md ├── MySQL备份恢复.md ├── MySQL存储过程.md ├── MySQL安装配置.md ├── README.md ├── mysql-udf安装.md ├── 关系型SQL标准.md └── 关系型数据库.md ├── Go ├── GoGUI.md ├── Go爬虫.md ├── Go笔记.md ├── Go第三方库.md ├── Go编译打包.md └── README.md ├── IDE ├── Chromium.md ├── Eclipse.md ├── Git使用.md ├── Git服务.md ├── IDEA使用.md ├── IDEA插件.md ├── README.md ├── Subversion.md ├── TextEditor.md ├── VisualStudioCode.md └── 软件安全.md ├── Java ├── CAS-Shiro.md ├── JDK安装配置.md ├── JDK工具.md ├── JavaGUI.md ├── Java构建管理.md ├── Java注解.md ├── Java笔记.md ├── Java第三方库.md ├── ORM.md ├── README.md ├── SPI.md ├── Spring.md └── Tomcat.md ├── Other ├── Bookmarks.md ├── Markdown.md ├── README.md ├── 专业术语.md ├── 书籍和博客.md └── 免费服务.md ├── PL ├── C.md ├── CPlusPlus.md ├── CSharp.md ├── README.md ├── Rust.md ├── 中间件.md ├── 交互协议.md ├── 人工智能.md ├── 加密认证.md ├── 容器虚拟机.md ├── 技术概念.md ├── 文档处理.md ├── 硬件交互.md ├── 编程规范.md ├── 表达式和编码.md └── 跨平台应用.md ├── Python ├── PythonGUI.md ├── Python爬虫.md ├── Python笔记.md ├── Python第三方库.md └── README.md ├── README.md ├── Shell ├── PowerShell.md ├── PowerShell命令.md ├── README.md ├── ShellScript.md ├── ShellWindows.md ├── Shell命令.md ├── WindowsBatch.md ├── WindowsJScript.md ├── WindowsScript.md ├── WindowsVBAScript.md └── WindowsVBScript.md ├── System ├── Android.md ├── CentOS.md ├── IOS.md ├── Linux.md ├── Linux网络防火墙.md ├── Linux配置.md ├── Nginx.md ├── README.md ├── Windows.md ├── Windows软件.md ├── 内网穿透.md ├── 挂载网盘.md ├── 文件压缩解压.md └── 邮箱服务.md ├── Web ├── CSS.md ├── HTML.md ├── JavaScript.md ├── JavaScript框架.md ├── JavaScript笔记.md ├── JavaScript第三方库.md ├── NodeJS.md └── README.md └── package.json /.github/workflows/deloy.yml: -------------------------------------------------------------------------------- 1 | # https://docs.github.com/zh/actions 2 | name: blog deploy 3 | 4 | on: 5 | workflow_dispatch: # 启用手动触发工作流 6 | push: 7 | branches: 8 | - master 9 | pull_request: 10 | 11 | 12 | permissions: # 操作权限 13 | contents: read 14 | pull-requests: read 15 | 16 | 17 | jobs: 18 | build-deploy: 19 | runs-on: ubuntu-latest 20 | steps: 21 | - name: Encoding 22 | run: | 23 | # git config --global i18n.logoutputencoding utf-8 24 | # git config --global i18n.commitencoding utf-8 25 | # git config --global core.quotepath false 26 | # git config --global http.version HTTP/1.1 27 | # git config --global http.postBuffer 524288000 28 | git config --global user.email "admin@bajins.com" 29 | git config --global user.name "bajins" 30 | # export LESSCHARSET=utf-8 31 | # https://github.com/vuejs/vuepress/issues/3136 32 | # https://stackoverflow.com/questions/74797727/error-error0308010cdigital-envelope-routinesunsupported 33 | # export NODE_OPTIONS=--openssl-legacy-provider 34 | 35 | - name: Checkout 36 | uses: actions/checkout@v4 37 | with: 38 | # Whether to checkout submodules: `true` to checkout submodules or `recursive` to 39 | # recursively checkout submodules. 40 | # 41 | # When the `ssh-key` input is not provided, SSH URLs beginning with 42 | # `git@github.com:` are converted to HTTPS. 43 | # 44 | # Default: false 45 | submodules: true 46 | 47 | # https://github.com/Borales/actions-yarn 48 | - name: Setup Node 49 | uses: actions/setup-node@v4 50 | with: 51 | node-version: 'latest' 52 | 53 | # - run: npm ci 54 | - run: npm install 55 | - run: npm run build 56 | 57 | # https://github.com/peaceiris/actions-gh-pages 58 | - name: Deploy 59 | uses: peaceiris/actions-gh-pages@v4 60 | with: # 为预定义变量赋值 61 | # github_token: ${{ secrets.GITHUB_TOKEN }} 62 | # DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }} 63 | personal_token: ${{ secrets.PERSONAL_TOKEN }} 64 | external_repository: bajins/bajins.github.io 65 | publish_branch: master 66 | publish_dir: ./docs 67 | force_orphan: true 68 | user_name: bajins 69 | user_email: admin@bajins.com 70 | # env: # 设置环境变量并赋值 71 | 72 | sync-repository: # 同步文件到其他库 73 | runs-on: ubuntu-latest 74 | steps: 75 | - name: Global 76 | run: | 77 | git config --global user.email "admin@bajins.com" 78 | git config --global user.name "bajins" 79 | # env: 80 | 81 | - name: Checkout 82 | uses: actions/checkout@v4 83 | with: 84 | # /home/runner/work/notes-vuepress/notes-vuepress 85 | path: '' 86 | 87 | - name: Checkout notes-docsify repo 88 | uses: actions/checkout@v4 89 | with: 90 | repository: bajins/notes-docsify 91 | # /home/runner/work/notes-vuepress/notes-vuepress/notes-docsify 92 | path: notes-docsify 93 | token: ${{ secrets.PERSONAL_TOKEN }} 94 | 95 | - name: Sync 96 | run: | 97 | cd notes-docsify 98 | find . -maxdepth 1 -printf '%P\n' \ 99 | | grep -Ev ".git.*|.nojekyll|CNAME|README.*|index.*|push.*|wercker.*" \ 100 | | xargs rm -rf 101 | cd ../ 102 | ls -lh 103 | cp -r `ls -A | grep -Ev \ 104 | ".git|.github|.vuepress|.gitattributes|.gitignore|.gitmodules\ 105 | |package.json|README.md|index.html|notes-docsify"`\ 106 | notes-docsify 107 | cp -r .vuepress/public/images .vuepress/public/files notes-docsify 108 | # echo "-------------------------------------------------------------" 109 | # find $GITHUB_WORKSPACE 110 | # echo "-------------------------------------------------------------" 111 | cd notes-docsify 112 | echo -e '#!/bin/bash\n\n./push.sh'>.git/hooks/pre-commit 113 | chmod +x ./push.sh 114 | chmod +x .git/hooks/pre-commit 115 | git add -A 116 | git commit -m "sync" 117 | git push -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule ".vuepress/public/files/scripts_shell"] 2 | path = .vuepress/public/files/scripts_shell 3 | url = https://github.com/bajins/scripts_shell.git 4 | -------------------------------------------------------------------------------- /.vuepress/config.js: -------------------------------------------------------------------------------- 1 | const utils = require('./utils'); 2 | // https://vuepress.vuejs.org/zh/config 3 | module.exports = { 4 | base: '/', 5 | // 额外的需要被注入到当前页面的 HTML 中的标签 6 | head: [ 7 | ['link', { rel: 'icon', href: '/images/icons/logo.png' }], 8 | ['link', { rel: 'apple-touch-icon', href: '/images/icons/logo.png' }], 9 | // ['link', {rel: 'mask-icon', href: '/images/icons/safari-pinned-tab.svg', color: '#3eaf7c'}], 10 | // https://developer.mozilla.org/zh-CN/docs/Mozilla/Add-ons/WebExtensions/manifest.json 11 | ['link', { rel: 'manifest', href: '/manifest.json' }], 12 | ['meta', { name: 'theme-color', content: '#3eaf7c' }], 13 | ['meta', { name: 'apple-mobile-web-app-capable', content: 'yes' }], 14 | ['meta', { name: 'apple-mobile-web-app-status-bar-style', content: 'black' }], 15 | ['meta', { name: 'msapplication-TileImage', content: '/images/icons/logo.png' }], 16 | ['meta', { name: 'msapplication-TileColor', content: '#ffffff' }], 17 | ['meta', { 18 | name: 'keywords', content: `bajins,vue,vuepress,vuepress-theme,theme,主题,vuepress主题,blog 19 | ,vuepress-blog,java,python,shell,sql,golang,script,shell script,nginx,windows,去广告,androd,google drive 20 | ,one drive,idea,eclipse,git,小程序` }], 21 | ['meta', { name: 'referrer', content: 'never' }], 22 | ['script', { type: 'text/javascript', src: '/assets/js/load.js' }], 23 | ], 24 | // 指定 VuePress build 的输出目录。如果传入的是相对路径,则会基于 process.cwd() 进行解析。 25 | // 与package.json中的scripts配置编译路径配合使用 https://vuepress.vuejs.org/zh/api/cli.html 26 | dest: './docs', 27 | // temp: './.temp', 28 | // cache: 'false', 29 | lang: "zh-CN", // https://v2.vuepress.vuejs.org/zh/reference/config.html#lang 30 | locales: { 31 | // 键名是该语言所属的子路径 32 | // 作为特例,默认语言可以使用 '/' 作为其路径。 33 | '/': { 34 | lang: 'zh-CN', // 将会被设置为 的 lang 属性 35 | // 没有声明 title 或者 description,VuePress 将会尝试使用配置顶层的对应值 36 | title: 'Bajins', 37 | description: '个人笔记', 38 | } 39 | }, 40 | // 留空则使用.vuepress/theme下的自定义主题 41 | theme: '', 42 | // theme: 'reco', // https://github.com/vuepress-reco 43 | themeConfig: { 44 | // 假定是 GitHub. 同时也可以是一个完整的 GitLab URL,当你提供了 themeConfig.repo 选项, 45 | // 将会自动在每个页面的导航栏生成生成一个 GitHub 链接,以及在页面的底部生成一个 "Edit this page" 链接。 46 | repo: 'bajins/notes-vuepress', 47 | editLinks: true, 48 | docsDir: '/', 49 | // valine 评论系统 50 | valineConfig: { 51 | appId: 'm9S5QXsdju39LvMs8ooRRIiF-MdYXbMMI', // your appId 52 | appKey: 'UfBRjySkb4bjPiFuH0Pxe3a9', // your appKey 53 | }, 54 | editLinkText: '在 GitHub 上编辑此页', 55 | nav: utils.getNavigationMenu("./").concat(require('./nav')), 56 | logo: '/images/icons/logo.png', 57 | // 搜索设置 58 | search: true, 59 | searchMaxSuggestions: 10, 60 | // 侧边栏 用工具自动获取文件夹结构,auto自动形成侧边导航 61 | sidebar: utils.getSidebars("./"), 62 | // 最后更新时间 63 | lastUpdated: '上次更新', 64 | // 作者 65 | author: 'Bajins', 66 | }, 67 | // 插件 https://vuepress.github.io/zh/ 68 | plugins: [ 69 | // 返回顶部按钮true显示、false不显示 70 | ['@vuepress/back-to-top', true], 71 | ['@vuepress/pwa', { 72 | // 如果设置为 true,VuePress 将自动生成并注册一个 Service Worker, 73 | // 用于缓存页面的内容以供离线使用(仅会在生产环境中启用) 74 | serviceWorker: true 75 | }], 76 | // 用于缩放图像的JavaScript库 77 | ['@vuepress/medium-zoom', true], 78 | // 提供 Google Analytics ID 以启用集成。 79 | ['@vuepress/google-analytics', { ga: 'UA-137200206-1' }], 80 | // 流程图 81 | ['flowchart'], 82 | ['@vuepress/last-updated', { 83 | transformer: (timestamp, lang) => { 84 | // 不要忘了安装 npm install -S moment 85 | const moment = require('moment'); 86 | moment.locale(lang); 87 | // return moment(timestamp).fromNow(); 88 | return moment(timestamp).format('YYYY-MM-DD HH:mm:ss'); 89 | } 90 | }], 91 | ['@vuepress/active-header-links', { 92 | sidebarLinkSelector: '.sidebar-link', headerAnchorSelector: '.header-anchor' 93 | }], 94 | ['@vuepress-reco/vuepress-plugin-rss', { 95 | site_url: 'https://bajins.com', 96 | copyright: "bajins.com", 97 | //filter:"", 98 | count: "20", 99 | }], 100 | // 全文搜索 101 | [require('./plugins/vuepress-plugin-flexsearch/index.js')], 102 | // ['fulltext-search'], 103 | // https://github.com/znicholasbrown/vuepress-plugin-code-copy 104 | ["vuepress-plugin-code-copy", true], 105 | // https://github.com/ekoeryanto/vuepress-plugin-sitemap 106 | ['sitemap', { hostname: 'https://bajins.com' }], 107 | // https://github.com/webmasterish/vuepress-plugin-autometa 108 | ['autometa', { site: { name: 'bajins' }, canonical_base: 'https://bajins.com' }], 109 | // https://github.com/webmasterish/vuepress-plugin-feed 110 | ['feed', { canonical_base: 'https://bajins.com' }], 111 | // https://github.com/shanyuhai123/vuepress-plugin-auto-sidebar 112 | ["vuepress-plugin-auto-sidebar", {}],// 自动生成侧边栏 113 | // https://github.com/xuekai-china/vuepress-plugin-right-anchor 114 | // ['vuepress-plugin-right-anchor'], // 页面右侧添加定位导航栏 115 | // https://github.com/zq99299/vuepress-plugin 116 | // ['vuepress-plugin-baidu-tongji-analytics', { key: '1a6c542ce78046e639afb5b37f298a51' }], 117 | // https://zq99299.github.io/vuepress-plugin/vuepress-plugin-toolbar 118 | [require('./plugins/vuepress-plugin-toolbar/index.js'), { 119 | 'pageNav': { 120 | name: '导航' 121 | }, 122 | opts: [ 123 | { 124 | icon: '', 125 | name: '动态博客', 126 | link: 'https://www.gotoxo.com', 127 | popover: { 128 | type: 'html', 129 | title: '', 130 | html: '' 131 | } 132 | }, 133 | { 134 | icon: '', 135 | name: '备份博客', 136 | link: 'https://notes-vuepress.pages.dev', 137 | }, 138 | ] 139 | }], 140 | // https://github.com/leoloso/vuepress-plugin-plausible-analytics 141 | ["plausible-analytics"], 142 | [require('./plugins/lifecycle.js')], 143 | ], 144 | markdown: { 145 | // 是否在每个代码块的左侧显示行号。 146 | lineNumbers: false 147 | }, 148 | } 149 | -------------------------------------------------------------------------------- /.vuepress/nav.js: -------------------------------------------------------------------------------- 1 | module.exports = [{ 2 | text: '快捷链接', 3 | items: [{ 4 | text: '外部链接', 5 | items: [ 6 | { 7 | text: '获取XShell', 8 | link: 'https://tool.bajins.com' 9 | }, 10 | { 11 | text: 'OCR图片识别', 12 | link: 'https://tr.bajins.com' 13 | }, 14 | { 15 | text: '朋友圈不折叠', 16 | link: 'https://tool.bajins.com/wnf' 17 | }, 18 | { 19 | text: 'GitHub反代', 20 | link: 'https://g.bajins.eu.org' 21 | }, 22 | { 23 | text: 'GitHub反代', 24 | link: 'https://g.woetu.eu.org' 25 | }, 26 | ] 27 | }, 28 | { 29 | text: '内部链接', 30 | items: [{ 31 | text: '文件', 32 | link: '/files' 33 | }, 34 | { 35 | text: '书签锦集', 36 | link: '/Other/Bookmarks' 37 | }, 38 | { 39 | text: 'Windows软件', 40 | link: '/System/Windows软件' 41 | }, 42 | { 43 | text: 'Markdown工具', 44 | link: '/Other/Markdown#工具' 45 | }, 46 | ] 47 | } 48 | ] 49 | }] -------------------------------------------------------------------------------- /.vuepress/plugins/enhanceAppFile.js: -------------------------------------------------------------------------------- 1 | export default ({ router }) => { 2 | 3 | } -------------------------------------------------------------------------------- /.vuepress/plugins/lifecycle.js: -------------------------------------------------------------------------------- 1 | module.exports = (options = {}, ctx) => ({ // https://vuepress.vuejs.org/zh/plugin/life-cycle.html 2 | async ready() { // 钩子在应用初始化之后,并在某些特定的函数式 API 执行之前执行 3 | console.log("ready"); 4 | }, 5 | updated() { 6 | console.log("updated"); 7 | }, 8 | async generated(pagePaths) {// 在生产环境的构建结束后被调用,生成的页面的路径数组将作为该函数的第一个参数 9 | console.log("generated"); 10 | // console.log(pagePaths); 11 | }, 12 | // https://v1.vuepress.vuejs.org/zh/plugin/option-api.html 13 | enhanceAppFiles: [path.resolve(__dirname, 'enhanceAppFile.js')], 14 | extendPageData($page) { 15 | const { frontmatter } = $page; 16 | console.log(frontmatter); 17 | } 18 | }); 19 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-flexsearch/.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ master ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ master ] 20 | schedule: 21 | - cron: '17 10 * * 5' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | permissions: 28 | actions: read 29 | contents: read 30 | security-events: write 31 | 32 | strategy: 33 | fail-fast: false 34 | matrix: 35 | language: [ 'javascript' ] 36 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] 37 | # Learn more: 38 | # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed 39 | 40 | steps: 41 | - name: Checkout repository 42 | uses: actions/checkout@v2 43 | 44 | # Initializes the CodeQL tools for scanning. 45 | - name: Initialize CodeQL 46 | uses: github/codeql-action/init@v1 47 | with: 48 | languages: ${{ matrix.language }} 49 | # If you wish to specify custom queries, you can do so here or in a config file. 50 | # By default, queries listed here will override any specified in a config file. 51 | # Prefix the list here with "+" to use these queries and those in the config file. 52 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 53 | 54 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 55 | # If this step fails, then you should remove it and run the build manually (see below) 56 | - name: Autobuild 57 | uses: github/codeql-action/autobuild@v1 58 | 59 | # ℹ️ Command-line programs to run using the OS shell. 60 | # 📚 https://git.io/JvXDl 61 | 62 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 63 | # and modify them (or add more) to build your code if your project 64 | # uses a compiled language 65 | 66 | #- run: | 67 | # make bootstrap 68 | # make release 69 | 70 | - name: Perform CodeQL Analysis 71 | uses: github/codeql-action/analyze@v1 72 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-flexsearch/README.md: -------------------------------------------------------------------------------- 1 | [![https://badgen.net/npm/v/vuepress-plugin-flexsearch](https://badgen.net/npm/v/vuepress-plugin-flexsearch)](https://www.npmjs.com/package/vuepress-plugin-flexsearch) 2 | [![https://badgen.net/npm/dt/vuepress-plugin-flexsearch](https://badgen.net/npm/dt/vuepress-plugin-flexsearch)](https://www.npmjs.com/package/vuepress-plugin-flexsearch) 3 | [![https://badgen.net/npm/license/vuepress-plugin-flexsearch](https://badgen.net/npm/license/vuepress-plugin-flexsearch)](https://github.com/z3by/vuepress-plugin-flexsearch/blob/master/LICENSE) 4 | [![https://badgen.net/github/contributors/z3by/vuepress-plugin-flexsearch](https://badgen.net/github/contributors/z3by/vuepress-plugin-flexsearch)](https://github.com/z3by/vuepress-plugin-flexsearch/graphs/contributors) 5 | 6 | # vuepress-plugin-flexsearch 7 | 8 | Next-Generation full text search library for Vuepress 9 | 10 | > A great replacement of the default Vuepress search plugin. 11 | 12 | ## Installation 13 | 14 | ```bash 15 | yarn add -D vuepress-plugin-flexsearch-plus 16 | // or npm install vuepress-plugin-flexsearch-plus -D 17 | 18 | ``` 19 | 20 | ## Usage 21 | 22 | Use the default settings: 23 | 24 | ```js 25 | // .vuepress/config.js 26 | 27 | module.exports = { 28 | plugins: [ 29 | ['flexsearch'], 30 | // other plugins 31 | ] 32 | } 33 | ``` 34 | 35 | Or modify the settings to match your needs: 36 | 37 | ```js 38 | // .vuepress/config.js 39 | 40 | module.exports = { 41 | plugins: [ 42 | ['flexsearch', { 43 | /* 44 | Plugin custom options 45 | */ 46 | maxSuggestions: 10, // how many search suggestions to show on the menu, the default is 10. 47 | searchPaths: ['path1', 'path2'], // an array of paths to search in, keep it null to search all docs. 48 | searchHotkeys: ['s'], // Hot keys to activate the search input, the default is "s" but you can add more. 49 | searchResultLength: 60, // the length of the suggestion result text by characters, the default is 60 characters. 50 | /* 51 | Default FlexSearch options 52 | To override the default options you can see available options at https://github.com/nextapps-de/flexsearch 53 | */ 54 | search_options: { 55 | encode: "icase", 56 | tokenize: "forward", 57 | resolution: 9, 58 | doc: { 59 | id: "key", 60 | field: ["title", "content", "headers"], 61 | } 62 | } 63 | }], 64 | // other plugins 65 | ] 66 | } 67 | ``` 68 | 69 | ## Credit 70 | 71 | Thanks to [nextapps-de/flexsearch](https://github.com/nextapps-de/flexsearch) 72 | 73 | ## Contributions 74 | 75 | PRs are welcome :heart: 76 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-flexsearch/example/README.md: -------------------------------------------------------------------------------- 1 | # example 2 | 3 | > 4 | 5 | ## Development 6 | 7 | ```bash 8 | yarn dev 9 | yarn build 10 | ``` 11 | 12 | For more details, please head VuePress's [documentation](https://v1.vuepress.vuejs.org/). 13 | 14 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-flexsearch/example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "version": "0.0.1", 4 | "description": "", 5 | "main": "index.js", 6 | "authors": { 7 | "name": "z3by", 8 | "email": "zoaby.am@gmail.com" 9 | }, 10 | "repository": "/example", 11 | "scripts": { 12 | "dev": "vuepress dev docs", 13 | "build": "vuepress build docs" 14 | }, 15 | "license": "MIT", 16 | "devDependencies": { 17 | "@vuepress/plugin-back-to-top": "^1.0.0", 18 | "@vuepress/plugin-medium-zoom": "^1.0.0", 19 | "vuepress": "1.8.2" 20 | }, 21 | "dependencies": { 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-flexsearch/index.js: -------------------------------------------------------------------------------- 1 | const { path } = require("@vuepress/shared-utils"); 2 | const { getPageText } = require("./src/utils"); 3 | 4 | let defaultSearchOptions = { 5 | encode: "icase", 6 | tokenize: "forward", 7 | resolution: 9, 8 | doc: { 9 | id: "key", 10 | field: ["title", "content", "headers"], 11 | }, 12 | }; 13 | 14 | const DEFAULT_SEARCH_RESULT_LENGTH = 60; 15 | 16 | module.exports = (options) => ({ 17 | extendPageData($page) { 18 | $page.content = getPageText($page); 19 | }, 20 | alias: { 21 | "@SearchBox": path.resolve(__dirname, "src", "SearchBox.vue"), 22 | }, 23 | define: { 24 | SEARCH_OPTIONS: options.search_options || defaultSearchOptions, 25 | SEARCH_MAX_SUGGESTIONS: options.maxSuggestions || 10, 26 | SEARCH_PATHS: options.searchPaths || null, 27 | SEARCH_HOTKEYS: options.searchHotkeys || "s", 28 | SEARCH_RESULT_LENGTH: 29 | Number(options.searchResultLength) || DEFAULT_SEARCH_RESULT_LENGTH, 30 | }, 31 | }); 32 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-flexsearch/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vuepress-plugin-flexsearch-plus", 3 | "version": "0.2.1", 4 | "description": "Next-Generation full text search library for Vuepress", 5 | "main": "index.js", 6 | "displayName": "flexsearch-plus", 7 | "publishConfig": { 8 | "access": "public" 9 | }, 10 | "scripts": { 11 | "dev": "vuepress dev example/docs", 12 | "build": "vuepress build example/docs", 13 | "prepublishOnly": "npm run build && conventional-changelog -p angular -r 2 -i CHANGELOG.md -s" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "https://github.com/bajins/vuepress-plugin-flexsearch-plus" 18 | }, 19 | "keywords": [ 20 | "vuepress-plugin-flexsearch-plus", 21 | "vuepress-plugin-flexsearch", 22 | "vuepress-search", 23 | "search", 24 | "vuepress-plugin", 25 | "vuepress" 26 | ], 27 | "author": { 28 | "name": "Bajins", 29 | "email": "admin@bajins.com", 30 | "url": "https://github.com/bajins" 31 | }, 32 | "license": "MIT", 33 | "homepage": "https://github.com/bajins/vuepress-plugin-flexsearch-plus#readme", 34 | "devDependencies": { 35 | "conventional-changelog-cli": "2.0.31", 36 | "he": "^1.2.0", 37 | "vuepress": "^1.4.1" 38 | }, 39 | "dependencies": { 40 | "flexsearch": "^0.6.32" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-flexsearch/src/SearchBox.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 245 | 246 | 369 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-flexsearch/src/assets/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-flexsearch/src/utils.js: -------------------------------------------------------------------------------- 1 | const he = require("he"); 2 | 3 | /** 4 | * @param page 5 | * @returns {string} 6 | */ 7 | module.exports.getPageText = (page) => { 8 | if (!page._strippedContent) { 9 | return ""; 10 | } 11 | // _strippedContent does not contain the YAML frontmatter 12 | const { html } = page._context.markdown.render(page._strippedContent); 13 | 14 | const text = he.decode( 15 | // decode HTML entities like " 16 | html 17 | .replace(/(<[^>]+>)+/g, " ") // remove HTML tags 18 | .replace(/^\s*#\s/gm, "") // remove header anchors inserted by vuepress 19 | ); 20 | return text; 21 | }; 22 | 23 | function escapeRegExp(string) { 24 | return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); 25 | } 26 | 27 | /** 28 | * @param {string} fullText 29 | * @param {string} highlightTarget 30 | * @returns {string} 31 | */ 32 | module.exports.highlightText = (fullText, highlightTarget) => { 33 | let result = fullText; 34 | highlightWords = highlightTarget.split(" ").filter((word) => word.length > 0); 35 | if (highlightWords.length > 0) { 36 | for (const word of highlightWords) { 37 | result = result.replace(new RegExp(escapeRegExp(word), "ig"), "$&"); 38 | } 39 | } else { 40 | result = fullText.replace(new RegExp(escapeRegExp(highlightTarget), "ig"), "$&"); 41 | } 42 | 43 | return result; 44 | }; 45 | 46 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/README.md: -------------------------------------------------------------------------------- 1 | # vuepress-plugin-toolbar 2 | 3 | 适用于 [vuepress](https://vuepress.vuejs.org/zh/plugin/using-a-plugin.html) 插件的插件 4 | 5 | 提供的功能:可以在页面右侧区域出现自定义展示功能,如下图 6 | 7 | ![image-1](https://github.com/zq99299/vuepress-plugin/blob/master/vuepress-plugin-toolbar/docs/assets/1.png?raw=true) 8 | 9 | ## Install 10 | 11 | ```bash 12 | yarn add vuepress-plugin-toolbar 13 | # OR 14 | npm install vuepress-plugin-toolbar 15 | ``` 16 | 17 | > open npm : https://www.npmjs.com/package/vuepress-plugin-toolbar 18 | 19 | ## Usage 20 | 21 | ```javascript 22 | module.exports = { 23 | "plugins": [ 24 | ["vuepress-plugin-toolbar",{ 25 | "opts": [ 26 | { 27 | "icon": "", 28 | "name": "文本展示", 29 | "popover": { 30 | "type": "text", 31 | "title": "纯文本说明", 32 | "text": "这是一个纯文本的内容展示,就是一段话" 33 | } 34 | } 35 | ] 36 | } 37 | ] 38 | ] 39 | } 40 | ``` 41 | 42 | 更多自定义配置,[请参考这里](https://zq99299.github.io/vuepress-plugin/vuepress-plugin-toolbar) 43 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/ToolbarAsidebar.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 26 | 27 | 30 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/clientRootMixin.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import ToolbarAsidebar from './ToolbarAsidebar' 3 | import PageNav from './components/page-nav/PageNav' 4 | import CustomOpt from './components/custom-opt/CustomOpt' 5 | 6 | export default { 7 | created () { 8 | this._mrcodeToolbar = { 9 | pageAsidebar: null, 10 | pageNav: null 11 | } 12 | }, 13 | mounted () { 14 | }, 15 | watch: { 16 | '$page.path' (val) { 17 | }, 18 | '$page.key' (val) { 19 | this.pageNavUpdate(val, this.$page) 20 | } 21 | }, 22 | updated () { 23 | this.init(); 24 | }, 25 | beforeDestroy(){ 26 | }, 27 | methods: { 28 | init () { 29 | this.pageAsidebarInsert() 30 | if (MRCODE_TOOLBAR.pageNav) { 31 | this.pageNavInsert(MRCODE_TOOLBAR.pageNav) 32 | } 33 | }, 34 | pageAsidebarInsert () { 35 | if (this._mrcodeToolbar.pageAsidebar) { 36 | return 37 | } 38 | const containers = document.querySelectorAll('.theme-container') 39 | let container = null 40 | if (containers && containers.length > 0) { 41 | container = containers[0] 42 | } 43 | if (!container) { 44 | return 45 | } 46 | const PageAsidebarObj = Vue.extend(ToolbarAsidebar) 47 | const pageAsidebarObjIns = new PageAsidebarObj() 48 | pageAsidebarObjIns._parent = container 49 | pageAsidebarObjIns.$mount() 50 | container.appendChild(pageAsidebarObjIns.$el) 51 | this._mrcodeToolbar.pageAsidebar = pageAsidebarObjIns 52 | }, 53 | pageNavInsert (config) { 54 | // 如果没有初始化 55 | if (!this._mrcodeToolbar.pageNav) { 56 | let pageAsidebar = this._mrcodeToolbar.pageAsidebar 57 | const PageNavObj = Vue.extend(PageNav) 58 | const pageNavObjIns = new PageNavObj({ 59 | propsData: { 60 | config: config 61 | } 62 | }) 63 | if(!pageAsidebar){ 64 | this.init() 65 | return; 66 | } 67 | pageNavObjIns._parent = pageAsidebar.$el 68 | pageNavObjIns.$mount() 69 | pageNavObjIns.pageObject = this.$page 70 | pageAsidebar.$el.insertBefore(pageNavObjIns.$el, pageAsidebar.$el.firstChild) 71 | this._mrcodeToolbar.pageNav = pageNavObjIns 72 | } 73 | }, 74 | pageNavUpdate (pageKey, pageObject) { 75 | if (this._mrcodeToolbar.pageNav) { 76 | this._mrcodeToolbar.pageNav.pageKey = pageKey 77 | this._mrcodeToolbar.pageNav.pageObject = pageObject 78 | } 79 | } 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/components/base-opt/BaseOpt.vue: -------------------------------------------------------------------------------- 1 | 41 | 42 | 96 | 97 | 100 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/components/custom-opt/CustomOpt.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 46 | 47 | 50 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/components/page-nav/PageNav.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 131 | 132 | 137 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/components/page-nav/PageNavItem.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 26 | 27 | 29 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/enhanceAppFile.js: -------------------------------------------------------------------------------- 1 | import './style.styl' 2 | import './icon/iconfont.css' 3 | // 使用异步函数也是可以的 4 | export default ({ 5 | Vue, // VuePress 正在使用的 Vue 构造函数 6 | options, // 附加到根实例的一些选项 7 | router, // 当前应用的路由实例 8 | siteData, // 站点元数据 9 | isServer // 当前应用配置是处于 服务端渲染 或 客户端 10 | }) => { 11 | } 12 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/icon/demo_index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IconFont Demo 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 |

19 | 29 |
30 |
31 |
    32 | 33 |
  • 34 | 35 |
    居乐乐导航
    36 |
    &#xe61f;
    37 |
  • 38 | 39 |
40 |
41 |

Unicode 引用

42 |
43 | 44 |

Unicode 是字体在网页端最原始的应用方式,特点是:

45 |
    46 |
  • 兼容性最好,支持 IE6+,及所有现代浏览器。
  • 47 |
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • 48 |
  • 但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。
  • 49 |
50 |
51 |

注意:新版 iconfont 支持多色图标,这些多色图标在 Unicode 模式下将不能使用,如果有需求建议使用symbol 的引用方式

52 |
53 |

Unicode 使用步骤如下:

54 |

第一步:拷贝项目下面生成的 @font-face

55 |
@font-face {
 57 |   font-family: 'iconfont';
 58 |   src: url('iconfont.eot');
 59 |   src: url('iconfont.eot?#iefix') format('embedded-opentype'),
 60 |       url('iconfont.woff2') format('woff2'),
 61 |       url('iconfont.woff') format('woff'),
 62 |       url('iconfont.ttf') format('truetype'),
 63 |       url('iconfont.svg#iconfont') format('svg');
 64 | }
 65 | 
66 |

第二步:定义使用 iconfont 的样式

67 |
.iconfont {
 69 |   font-family: "iconfont" !important;
 70 |   font-size: 16px;
 71 |   font-style: normal;
 72 |   -webkit-font-smoothing: antialiased;
 73 |   -moz-osx-font-smoothing: grayscale;
 74 | }
 75 | 
76 |

第三步:挑选相应图标并获取字体编码,应用于页面

77 |
 78 | <span class="iconfont">&#x33;</span>
 80 | 
81 |
82 |

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

83 |
84 |
85 |
86 |
87 |
    88 | 89 |
  • 90 | 91 |
    92 | 居乐乐导航 93 |
    94 |
    .icon-daohang 95 |
    96 |
  • 97 | 98 |
99 |
100 |

font-class 引用

101 |
102 | 103 |

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

104 |

与 Unicode 使用方式相比,具有如下特点:

105 |
    106 |
  • 兼容性良好,支持 IE8+,及所有现代浏览器。
  • 107 |
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • 108 |
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • 109 |
  • 不过因为本质上还是使用的字体,所以多色图标还是不支持的。
  • 110 |
111 |

使用步骤如下:

112 |

第一步:引入项目下面生成的 fontclass 代码:

113 |
<link rel="stylesheet" href="./iconfont.css">
114 | 
115 |

第二步:挑选相应图标并获取类名,应用于页面:

116 |
<span class="iconfont icon-xxx"></span>
117 | 
118 |
119 |

" 120 | iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

121 |
122 |
123 |
124 |
125 |
    126 | 127 |
  • 128 | 131 |
    居乐乐导航
    132 |
    #icon-daohang
    133 |
  • 134 | 135 |
136 |
137 |

Symbol 引用

138 |
139 | 140 |

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 141 | 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

142 |
    143 |
  • 支持多色图标了,不再受单色限制。
  • 144 |
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • 145 |
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • 146 |
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • 147 |
148 |

使用步骤如下:

149 |

第一步:引入项目下面生成的 symbol 代码:

150 |
<script src="./iconfont.js"></script>
151 | 
152 |

第二步:加入通用 CSS 代码(引入一次就行):

153 |
<style>
154 | .icon {
155 |   width: 1em;
156 |   height: 1em;
157 |   vertical-align: -0.15em;
158 |   fill: currentColor;
159 |   overflow: hidden;
160 | }
161 | </style>
162 | 
163 |

第三步:挑选相应图标并获取类名,应用于页面:

164 |
<svg class="icon" aria-hidden="true">
165 |   <use xlink:href="#icon-xxx"></use>
166 | </svg>
167 | 
168 |
169 |
170 | 171 |
172 |
173 | 192 | 193 | 194 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/icon/iconfont.css: -------------------------------------------------------------------------------- 1 | @font-face {font-family: "iconfont"; 2 | src: url('iconfont.eot?t=1588226104370'); /* IE9 */ 3 | src: url('iconfont.eot?t=1588226104370#iefix') format('embedded-opentype'), /* IE6-IE8 */ 4 | url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAALMAAsAAAAABvQAAAKAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCCcAqBfIFuATYCJAMICwYABCAFhG0HMRsVBhHVkylkPwvs1uRWs6hXjPshVsP8hWEsad8XwfO4Zr2fZGAzi8AHjAqYhSIQ8oRphTkg0N3cjOFqVIRirfPgf/kWUtjhQn4FQH64QP9x7/SPOl/n8wFFlPGci7oA44AC2hujyMqyD8ANYzcROITHEMCSSzUy3E6ciY8BrBJANs5rluHn/BiMlfIR3JqDBrmAg69OqhBwnn9fvtIoPigcDaiYunpkJf0fwAx9IHJgIUUIgKAddwANVAMGZGZtfDIasWgaGzcUwr5KBT6IRKgR2eufh7iA4mgAslX+PQmw8FaJVAAYwAXmAItGecCNBkjCr3bH3rx78F5Z3I07B27PjT2VUoK4009ss6euiRy8nhZcvQoHrlhToAfBaV5tr01Ibtu0vW3p854vpU3f+55a0Zb2IkP9kVqueZGmSn6o0//OjWzYhjZ0of5CiDvD9lag28iqilqhEbhAPyCoH6q3P5kYfqWMBUviuv/7gQHgySfbudbQzwn+rTgEfqmgZ58JRcCgjC+oTSvm4N5qi8UCEd2dyIux6pT7Tws+KW/h9MhJQeNTjBpyNTgENIOLTx9YqhhzPCCJTWjERAGVHFVAiOcRKGJ5DJp4wqghPweHVL6DS7xosMyWpAsDSsWa1RCjFhzA/GHu6bDIJEqU3nB8b5qzIs54IV9zCOIgKqY6PJDn2HJ9xkTEgmXaoVWew20jOJkW7CWYRM4mDG3dm4Kedkc5Q4xacADzh7mnw9Lhokqfv+H43jS39Ay4X8jXPD7EQdQD7eRHr557eeX6jImIBcu0Q6tYcYNxgrN+3oK9BNOI6NmE2iDbVx6sr9y/7ghgHaBRLpzpO96gadLH6Dg=') format('woff2'), 5 | url('iconfont.woff?t=1588226104370') format('woff'), 6 | url('iconfont.ttf?t=1588226104370') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ 7 | url('iconfont.svg?t=1588226104370#iconfont') format('svg'); /* iOS 4.1- */ 8 | } 9 | 10 | .iconfont { 11 | font-family: "iconfont" !important; 12 | font-size: 16px; 13 | font-style: normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | .icon-daohang:before { 19 | content: "\e61f"; 20 | } 21 | 22 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/icon/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/plugins/vuepress-plugin-toolbar/icon/iconfont.eot -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/icon/iconfont.js: -------------------------------------------------------------------------------- 1 | !function(a){var t,l='',e=(t=document.getElementsByTagName("script"))[t.length-1].getAttribute("data-injectcss");if(e&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(t){console&&console.log(t)}}!function(t){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(t,0);else{var e=function(){document.removeEventListener("DOMContentLoaded",e,!1),t()};document.addEventListener("DOMContentLoaded",e,!1)}else document.attachEvent&&(o=t,c=a.document,i=!1,(l=function(){try{c.documentElement.doScroll("left")}catch(t){return void setTimeout(l,50)}n()})(),c.onreadystatechange=function(){"complete"==c.readyState&&(c.onreadystatechange=null,n())});function n(){i||(i=!0,o())}var o,c,i,l}(function(){var t,e,n,o,c,i;(t=document.createElement("div")).innerHTML=l,l=null,(e=t.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",n=e,(o=document.body).firstChild?(c=n,(i=o.firstChild).parentNode.insertBefore(c,i)):o.appendChild(n))})}(window); -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/icon/iconfont.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "1792919", 3 | "name": "vuepress-plugin-toolbar", 4 | "font_family": "iconfont", 5 | "css_prefix_text": "icon-", 6 | "description": "", 7 | "glyphs": [ 8 | { 9 | "icon_id": "336541", 10 | "name": "居乐乐导航", 11 | "font_class": "daohang", 12 | "unicode": "e61f", 13 | "unicode_decimal": 58911 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/icon/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/icon/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/plugins/vuepress-plugin-toolbar/icon/iconfont.ttf -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/icon/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/plugins/vuepress-plugin-toolbar/icon/iconfont.woff -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/icon/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/plugins/vuepress-plugin-toolbar/icon/iconfont.woff2 -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/index.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | module.exports = (options = {}, context) => ({ 3 | name: 'vuepress-plugin-toolbar', 4 | define () { 5 | return { 6 | MRCODE_TOOLBAR: Object.assign({}, options) 7 | } 8 | }, 9 | clientRootMixin: path.resolve(__dirname, 'clientRootMixin.js'), 10 | enhanceAppFiles: path.resolve(__dirname, 'enhanceAppFile.js') 11 | }) 12 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vuepress-plugin-toolbar", 3 | "version": "1.0.1", 4 | "description": "toolbar plugin for vuepress", 5 | "keywords": [ 6 | "documentation", 7 | "generator", 8 | "vue", 9 | "vuepress", 10 | "toolbar" 11 | ], 12 | "homepage": "https://github.com/zq99299/vuepress-plugin/blob/master/vuepress-plugin-toolbar/README.md", 13 | "bugs": { 14 | "url": "https://github.com/zq99299/vuepress-plugin/issues" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git+https://github.com/zq99299/vuepress-plugin.git", 19 | "directory": "vuepress-plugin-toolbar" 20 | }, 21 | "license": "MIT", 22 | "author": "mrcode <99299684@qq.com>", 23 | "main": "index.js", 24 | "publishConfig": { 25 | "access": "public" 26 | }, 27 | "dependencies": { 28 | "animate.css": "^3.7.2" 29 | }, 30 | "devDependencies": { 31 | "vuepress": "^1.4.1" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/style.styl: -------------------------------------------------------------------------------- 1 | .me-toolbar-sidebar { 2 | position: fixed; 3 | width: 3.8rem; 4 | top: 3.6rem; 5 | right: 0; 6 | z-index: 1; 7 | font-size: 12px; 8 | background-color: #fbfbfb; 9 | //bottom: 0; // 会影响官网的 返回顶部 按钮组件的点击 10 | box-sizing: border-box; 11 | //border-left: 1px solid #eaecef; 12 | //overflow-y: auto; 13 | background: rgba(255, 255, 255, 0.1); 14 | 15 | .option-box { 16 | border-top: 1px solid #eee; 17 | font-size: 12px; 18 | position: relative; 19 | display: flex; 20 | flex-direction: column; 21 | align-items: center; 22 | justify-content: center; 23 | border-bottom: 1px solid #eee; 24 | border-left: 1px solid #eee; 25 | border-right: 1px solid #eee; 26 | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, .05); 27 | background-color: #fff; 28 | height: 60px; 29 | cursor: pointer; 30 | 31 | &:hover { 32 | .popover { 33 | display block 34 | } 35 | } 36 | 37 | .popover { 38 | display none; 39 | position: absolute; 40 | color: #2c3e50; 41 | //left: 100%; 42 | //left: unset; 43 | //right: 100%; 44 | //margin-right: 2px; 45 | //margin-left: 0; 46 | right: 60px; 47 | padding 5px; 48 | top: -1px; 49 | min-width: 240px; 50 | background: #fff; 51 | border: 1px solid #eee; 52 | 53 | .title { 54 | font-size: 1rem; 55 | font-weight: bold; 56 | text-align: center; 57 | padding 10px 58 | } 59 | 60 | .content { 61 | margin: 15px 0; 62 | } 63 | 64 | .more-btn { 65 | text-align: center; 66 | width: 100%; 67 | display: inline-block; 68 | font-size: 1rem; 69 | color: #fff; 70 | background-color: rgba(62, 175, 124, 0.86); 71 | padding: 0.5rem 1.6rem; 72 | border-radius: 4px; 73 | transition: background-color 0.1s ease; 74 | box-sizing: border-box; 75 | border-bottom: 1px solid #389d70; 76 | 77 | &:hover { 78 | background-color: #3eaf7c; 79 | } 80 | } 81 | } 82 | } 83 | 84 | .me-toolbar-sidebar-page-nav { 85 | .page-nav-title { 86 | font-weight 400px 87 | font-size 14px 88 | text-align center 89 | } 90 | 91 | .page-nav-scorll { 92 | overflow auto 93 | max-height 600px 94 | } 95 | .page-nav-link{ 96 | list-style-type: none !important; 97 | } 98 | } 99 | 100 | //自定义功能 101 | } 102 | -------------------------------------------------------------------------------- /.vuepress/plugins/vuepress-plugin-toolbar/utils.js: -------------------------------------------------------------------------------- 1 | const defaultConfig = { 2 | opts: undefined 3 | } 4 | /** 5 | * 默认参数处理 6 | * @param options 7 | */ 8 | export const defaultParams = (options) => { 9 | options.opts 10 | } 11 | -------------------------------------------------------------------------------- /.vuepress/public/CNAME: -------------------------------------------------------------------------------- 1 | www.bajins.com -------------------------------------------------------------------------------- /.vuepress/public/README.md: -------------------------------------------------------------------------------- 1 | # 个人笔记博客 2 | 3 | ## 来源 4 | 5 | * [https://github.com/bajins/notes-vuepress](https://github.com/bajins/notes-vuepress) 6 | * [https://github.com/bajins/notes-docsify](https://github.com/bajins/notes-docsify) 7 | 8 | 9 | ## 访问 10 | 11 | * [https://www.bajins.com](https://www.bajins.com) 12 | * [https://bajins.github.io](https://bajins.github.io) 13 | * [https://www.gotoxo.com](https://www.gotoxo.com) -------------------------------------------------------------------------------- /.vuepress/public/assets/js/load.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | // 修改来源属性 3 | var referrer = document.querySelector("meta[name=referrer]"); 4 | if (referrer) { 5 | referrer.setAttribute('content', 'never'); 6 | } else { 7 | referrer = document.createElement('meta'); 8 | referrer.name = "referrer"; 9 | referrer.content = "never"; 10 | document.getElementsByTagName('head')[0].appendChild(referrer); 11 | } 12 | // let html = document.getElementsByTagName("html"); 13 | // html.setAttribute("lang", "zh-CN"); 14 | 15 | let secScript = document.createElement("script"); 16 | secScript.setAttribute("data-cf-beacon", '{"token": "41188662635a42d1a77d66ff498ac43d", "spa": true}'); 17 | secScript.setAttribute("src", "https://static.cloudflareinsights.com/beacon.min.js"); 18 | let d = document.getElementsByTagName('script')[0]; 19 | d.parentNode.insertBefore(secScript, d); 20 | })(); -------------------------------------------------------------------------------- /.vuepress/public/files/Eclipse配置mars2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/files/Eclipse配置mars2.zip -------------------------------------------------------------------------------- /.vuepress/public/files/Eclipse配置mars2以上版本.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/files/Eclipse配置mars2以上版本.zip -------------------------------------------------------------------------------- /.vuepress/public/files/FiddlerCore_4-45.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/files/FiddlerCore_4-45.7z -------------------------------------------------------------------------------- /.vuepress/public/files/IDEA设置.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/files/IDEA设置.zip -------------------------------------------------------------------------------- /.vuepress/public/files/MediaQueriesExample.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 停水通知 6 | 7 | 8 | 33 | 34 | 35 |
36 |

尊敬的各位业主/住户:

37 |

38 | 因本小区主自来水管网阀门损坏需停水维修,xxx月xxx日9:00--17:30进行自来水的主管道阀门进行抢修更换。 39 | 届时本小区1号楼2号楼3号楼的生活用水将受影响,请各位住户做好储水准备。 40 | 因自来水主管道阀门更换抢修工作给您生活带来的不便敬请谅解,感谢您对我们物业服务工作的理解和支持。 41 |

42 |

xxxxxx物业有限公司

43 |

20xxx年xxx月xxx日

44 |
45 | 46 | -------------------------------------------------------------------------------- /.vuepress/public/files/circle-progress-bar.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 92 | 93 | 94 | 95 |
96 |
97 |
98 |
99 | 100 | 101 | -------------------------------------------------------------------------------- /.vuepress/public/files/css-animation.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 191 | 192 | 193 | 194 |
195 |
196 |
197 |
198 |
199 | 200 | 201 | 202 | -------------------------------------------------------------------------------- /.vuepress/public/files/fix-footer-page-bottom-absolute.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 借助absolute把Footer固定在页面底部 7 | 48 | 49 | 50 | 51 |
52 |
header
53 |
54 | content 55 |
56 | 57 |
58 | 59 | 60 | -------------------------------------------------------------------------------- /.vuepress/public/files/fix-footer-page-bottom-calc.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 借助calc把Footer固定在页面底部 7 | 43 | 44 | 45 | 46 |
header
47 |
48 | content 49 |
50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /.vuepress/public/files/fix-footer-page-bottom-flex.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 借助flex把Footer固定在页面底部 7 | 59 | 60 | 61 | 62 |
63 |
header
64 |
65 | content 66 |
67 | 68 |
69 | 70 | 71 | -------------------------------------------------------------------------------- /.vuepress/public/files/fix-footer-page-bottom-margin-top.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 借助margin把Footer固定在页面底部 7 | 50 | 51 | 52 | 53 |
header
54 |
55 |
56 |
57 | content 58 |
59 |
60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /.vuepress/public/files/fix-footer-window-bottom-fixed.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 借助fixed把Footer固定在窗口底部 7 | 47 | 48 | 49 | 50 |
header
51 |
content
52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /.vuepress/public/files/fix-footer-window-bottom-sticky.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 借助sticky把Footer固定在窗口底部 7 | 47 | 48 | 49 | 50 |
header
51 |
content
52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /.vuepress/public/files/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.0-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /.vuepress/public/files/horizontal-arrangement-flex.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | display:flex水平排列 7 | 21 | 22 | 23 | 24 |
25 |
1
26 |
2
27 |
3
28 |
29 | 30 | 31 | -------------------------------------------------------------------------------- /.vuepress/public/files/horizontal-arrangement-float-left.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | float:left水平排列 7 | 20 | 21 | 22 | 23 |
24 |
4
25 |
5
26 |
6
27 |
28 |
29 | 30 | 31 | -------------------------------------------------------------------------------- /.vuepress/public/files/horizontal-arrangement-inline-block.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | display:inline-block水平排列 7 | 16 | 17 | 18 | 19 |
20 |
7
21 |
8
22 |
9
23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /.vuepress/public/files/init.gradle: -------------------------------------------------------------------------------- 1 | allprojects { 2 | buildscript { 3 | repositories { 4 | /*maven{ url 'https://maven.aliyun.com/repository/public/'} 5 | maven{ url 'https://maven.aliyun.com/repository/google/'} 6 | 7 | all { ArtifactRepository repo -> 8 | if (repo instanceof MavenArtifactRepository) { 9 | def url = repo.url.toString() 10 | if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/') 11 | || url.startsWith('https://dl.google.com/dl/android/maven2/')) { 12 | //project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL." 13 | remove repo 14 | } 15 | } 16 | }*/ 17 | /*def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public' 18 | def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/public' 19 | def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google' 20 | def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin' 21 | all { ArtifactRepository repo -> 22 | if(repo instanceof MavenArtifactRepository){ 23 | def url = repo.url.toString() 24 | if (url.startsWith('https://repo1.maven.org/maven2/')) { 25 | project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL." 26 | remove repo 27 | } 28 | if (url.startsWith('https://jcenter.bintray.com/')) { 29 | project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL." 30 | remove repo 31 | } 32 | if (url.startsWith('https://dl.google.com/dl/android/maven2/')) { 33 | project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL." 34 | remove repo 35 | } 36 | if (url.startsWith('https://plugins.gradle.org/m2/')) { 37 | project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL." 38 | remove repo 39 | } 40 | } 41 | } 42 | maven { url ALIYUN_REPOSITORY_URL } 43 | maven { url ALIYUN_JCENTER_URL } 44 | maven { url ALIYUN_GOOGLE_URL } 45 | maven { url ALIYUN_GRADLE_PLUGIN_URL }*/ 46 | def NJU_REPOSITORY_URL = 'https://repo.nju.edu.cn/repository/maven-public/' 47 | all { ArtifactRepository repo -> 48 | if (repo instanceof MavenArtifactRepository) { 49 | def url = repo.url.toString() 50 | if (url.startsWith('https://repo1.maven.org/maven2')) { 51 | project.logger.lifecycle "Repository ${repo.url} replaced by $NJU_REPOSITORY_URL." 52 | remove repo 53 | } 54 | if (url.startsWith('https://jcenter.bintray.com/')) { 55 | project.logger.lifecycle "Repository ${repo.url} deleted." 56 | remove repo 57 | } 58 | if (url.startsWith('https://dl.google.com/dl/android/maven2/')) { 59 | project.logger.lifecycle "Repository ${repo.url} deleted." 60 | remove repo 61 | } 62 | if (url.contains('plugins.gradle.org/m2')) { 63 | project.logger.lifecycle "Repository ${repo.url} deleted." 64 | remove repo 65 | } 66 | } 67 | } 68 | maven { url NJU_REPOSITORY_URL } 69 | mavenLocal() 70 | } 71 | } 72 | 73 | repositories { 74 | /*maven { 75 | url 'https://maven.aliyun.com/repository/public/' 76 | } 77 | maven { 78 | url 'https://maven.aliyun.com/repository/google/' 79 | } 80 | 81 | all { ArtifactRepository repo -> 82 | if (repo instanceof MavenArtifactRepository) { 83 | def url = repo.url.toString() 84 | 85 | if (url.startsWith('https://repo.maven.apache.org/maven2/') || url.startsWith('https://repo.maven.org/maven2') 86 | || url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/') 87 | || url.startsWith('https://maven.google.com/') || url.startsWith('https://dl.google.com/dl/android/maven2/')) { 88 | //project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL." 89 | remove repo 90 | } 91 | } 92 | }*/ 93 | def NJU_REPOSITORY_URL = 'https://repo.nju.edu.cn/repository/maven-public/' 94 | all { ArtifactRepository repo -> 95 | if (repo instanceof MavenArtifactRepository) { 96 | def url = repo.url.toString() 97 | if (url.startsWith('https://repo1.maven.org/maven2')) { 98 | project.logger.lifecycle "Repository ${repo.url} replaced by $NJU_REPOSITORY_URL." 99 | remove repo 100 | } 101 | if (url.startsWith('https://jcenter.bintray.com/')) { 102 | project.logger.lifecycle "Repository ${repo.url} deleted." 103 | remove repo 104 | } 105 | if (url.startsWith('https://dl.google.com/dl/android/maven2/')) { 106 | project.logger.lifecycle "Repository ${repo.url} deleted." 107 | remove repo 108 | } 109 | if (url.contains('plugins.gradle.org/m2')) { 110 | project.logger.lifecycle "Repository ${repo.url} deleted." 111 | remove repo 112 | } 113 | } 114 | } 115 | maven { url NJU_REPOSITORY_URL } 116 | mavenLocal() 117 | } 118 | } -------------------------------------------------------------------------------- /.vuepress/public/files/init.gradle.kts: -------------------------------------------------------------------------------- 1 | // https://www.cnblogs.com/mkckr0/p/17714374.html 2 | // https://gist.github.com/mkckr0/97ec5b0d99feede4c19ee6f905d5e722 3 | 4 | val repoMirrorMap = mapOf( 5 | "https://repo.maven.apache.org/maven2" to "https://maven.aliyun.com/repository/central", 6 | "https://dl.google.com/dl/android/maven2" to "https://maven.aliyun.com/repository/google", 7 | "https://plugins.gradle.org/m2" to "https://maven.aliyun.com/repository/gradle-plugin", 8 | "https://jcenter.bintray.com" to "https://maven.aliyun.com/repository/jcenter", 9 | ) 10 | val repoReplaceMap = mapOf( 11 | "https://maven.google.com" to "https://dl.google.com/dl/android/maven2" 12 | ) 13 | 14 | fun RepositoryHandler.setMirrors() { 15 | all { 16 | if (this is MavenArtifactRepository && !name.endsWith("Origin")) { 17 | val originName = name 18 | var originUrl = url.toString().trimEnd('/') 19 | 20 | // do replace 21 | repoReplaceMap[originUrl]?.let { newUrl -> 22 | originUrl = newUrl 23 | setUrl(originUrl) 24 | } 25 | 26 | // do mirror 27 | repoMirrorMap[originUrl]?.let { newUrl -> 28 | // replace into mirror repo 29 | setUrl(newUrl) 30 | // add origin repo to find missing jars 31 | artifactUrls(originUrl) 32 | // keep origin repo to find missing POM 33 | maven(originUrl) { name = "$originName Origin" } 34 | } 35 | } 36 | } 37 | printRepos() 38 | } 39 | 40 | fun RepositoryHandler.printRepos() { 41 | all { 42 | if (this is MavenArtifactRepository) { 43 | println("Maven Repo: name=\"$name\", url=$url, artifacts=${artifactUrls}") 44 | } 45 | } 46 | } 47 | 48 | settingsEvaluated { 49 | pluginManagement { 50 | repositories { 51 | setMirrors() 52 | } 53 | } 54 | dependencyResolutionManagement { 55 | @Suppress("UnstableApiUsage") 56 | repositories { 57 | setMirrors() 58 | } 59 | } 60 | } 61 | 62 | allprojects { 63 | buildscript { 64 | repositories { 65 | setMirrors() 66 | } 67 | } 68 | repositories { 69 | setMirrors() 70 | } 71 | } -------------------------------------------------------------------------------- /.vuepress/public/files/round-progress-bar.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 40 | 41 | 42 | 43 |
44 |
45 |
46 |
47 | 48 | 49 | -------------------------------------------------------------------------------- /.vuepress/public/files/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | 4 | maven { url 'https://maven.aliyun.com/repository/central' } 5 | maven { url 'https://maven.aliyun.com/repository/jcenter' } 6 | maven { url 'https://maven.aliyun.com/repository/google' } //替换google() 7 | maven { url 'https://maven.aliyun.com/repository/public' } 8 | maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } 9 | 10 | google() 11 | mavenLocal() //配置先从本地仓库寻找jar包,优先寻找上一个配置,找到不执行下面的配置 12 | mavenCentral() 13 | gradlePluginPortal() 14 | } 15 | } 16 | dependencyResolutionManagement { 17 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 18 | repositories { 19 | 20 | maven { url 'https://maven.aliyun.com/repository/google' } 21 | maven { url 'https://maven.aliyun.com/repository/public' } 22 | 23 | google() 24 | mavenCentral() 25 | } 26 | } 27 | rootProject.name = "hiCompose" 28 | include ':app' 29 | -------------------------------------------------------------------------------- /.vuepress/public/files/禁用Intel显卡驱动设置.igp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/files/禁用Intel显卡驱动设置.igp -------------------------------------------------------------------------------- /.vuepress/public/images/AI历程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/AI历程.png -------------------------------------------------------------------------------- /.vuepress/public/images/AI历程1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/AI历程1.png -------------------------------------------------------------------------------- /.vuepress/public/images/AI历程2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/AI历程2.png -------------------------------------------------------------------------------- /.vuepress/public/images/AI历程3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/AI历程3.png -------------------------------------------------------------------------------- /.vuepress/public/images/AI历程4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/AI历程4.png -------------------------------------------------------------------------------- /.vuepress/public/images/GiteaWebHook测试.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/GiteaWebHook测试.png -------------------------------------------------------------------------------- /.vuepress/public/images/GiteaWebHook添加.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/GiteaWebHook添加.png -------------------------------------------------------------------------------- /.vuepress/public/images/GiteaWebHook设置.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/GiteaWebHook设置.png -------------------------------------------------------------------------------- /.vuepress/public/images/Go-Syscall.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/Go-Syscall.jpg -------------------------------------------------------------------------------- /.vuepress/public/images/HttpServletRequest相关API.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/HttpServletRequest相关API.jpg -------------------------------------------------------------------------------- /.vuepress/public/images/IDEA使用技巧.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/IDEA使用技巧.png -------------------------------------------------------------------------------- /.vuepress/public/images/IDEA方法注释示例.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/IDEA方法注释示例.png -------------------------------------------------------------------------------- /.vuepress/public/images/IDEA方法注释设置.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/IDEA方法注释设置.png -------------------------------------------------------------------------------- /.vuepress/public/images/IDEA目录结构说明.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/IDEA目录结构说明.png -------------------------------------------------------------------------------- /.vuepress/public/images/IDEA远程debug调试.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/IDEA远程debug调试.png -------------------------------------------------------------------------------- /.vuepress/public/images/IDEA项目目录指定.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/IDEA项目目录指定.png -------------------------------------------------------------------------------- /.vuepress/public/images/IP相关命令.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/IP相关命令.jpg -------------------------------------------------------------------------------- /.vuepress/public/images/JDK-bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/JDK-bin.png -------------------------------------------------------------------------------- /.vuepress/public/images/JDK历史版本特性数量.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/JDK历史版本特性数量.png -------------------------------------------------------------------------------- /.vuepress/public/images/Java内置异常.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/Java内置异常.png -------------------------------------------------------------------------------- /.vuepress/public/images/Linux性能可观测性工具.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/Linux性能可观测性工具.jpg -------------------------------------------------------------------------------- /.vuepress/public/images/Linux权限.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/Linux权限.jpg -------------------------------------------------------------------------------- /.vuepress/public/images/MinGW-w64下载页说明.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/MinGW-w64下载页说明.png -------------------------------------------------------------------------------- /.vuepress/public/images/MySQL-glibc下载.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/MySQL-glibc下载.png -------------------------------------------------------------------------------- /.vuepress/public/images/MySQL_binlog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/MySQL_binlog.png -------------------------------------------------------------------------------- /.vuepress/public/images/Rclone_access_token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/Rclone_access_token.png -------------------------------------------------------------------------------- /.vuepress/public/images/SQL语言.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/SQL语言.png -------------------------------------------------------------------------------- /.vuepress/public/images/SSO单点登录执行顺序.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/SSO单点登录执行顺序.png -------------------------------------------------------------------------------- /.vuepress/public/images/Spring拦截器调用顺序.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/Spring拦截器调用顺序.png -------------------------------------------------------------------------------- /.vuepress/public/images/TSL-SSL_时间线.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/TSL-SSL_时间线.png -------------------------------------------------------------------------------- /.vuepress/public/images/URI-URL-URN之间的关系.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/URI-URL-URN之间的关系.jpg -------------------------------------------------------------------------------- /.vuepress/public/images/UUID解构.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/UUID解构.png -------------------------------------------------------------------------------- /.vuepress/public/images/VisualVM-Launcher.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/VisualVM-Launcher.gif -------------------------------------------------------------------------------- /.vuepress/public/images/YandexMailDNS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/YandexMailDNS.png -------------------------------------------------------------------------------- /.vuepress/public/images/Yandex解决POP3无法收取邮件.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/Yandex解决POP3无法收取邮件.png -------------------------------------------------------------------------------- /.vuepress/public/images/activate-power-mode.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/activate-power-mode.gif -------------------------------------------------------------------------------- /.vuepress/public/images/bpf架构图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/bpf架构图.png -------------------------------------------------------------------------------- /.vuepress/public/images/bpf架构图1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/bpf架构图1.png -------------------------------------------------------------------------------- /.vuepress/public/images/clean-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/clean-code.png -------------------------------------------------------------------------------- /.vuepress/public/images/ddl-dml-dcl-tcl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/ddl-dml-dcl-tcl.png -------------------------------------------------------------------------------- /.vuepress/public/images/ddl-dml-dcl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/ddl-dml-dcl.png -------------------------------------------------------------------------------- /.vuepress/public/images/dns_flowchart_20210418.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/dns_flowchart_20210418.png -------------------------------------------------------------------------------- /.vuepress/public/images/easypayx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/easypayx.png -------------------------------------------------------------------------------- /.vuepress/public/images/easypayx可以过的平台.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/easypayx可以过的平台.png -------------------------------------------------------------------------------- /.vuepress/public/images/git-merge_rebase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/git-merge_rebase.png -------------------------------------------------------------------------------- /.vuepress/public/images/google翻译俄语软键盘.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/google翻译俄语软键盘.png -------------------------------------------------------------------------------- /.vuepress/public/images/go的man和init执行过程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/go的man和init执行过程.png -------------------------------------------------------------------------------- /.vuepress/public/images/icons/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/icons/logo.png -------------------------------------------------------------------------------- /.vuepress/public/images/icons/小C技术栈_扫码_搜索-标准色版.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/icons/小C技术栈_扫码_搜索-标准色版.png -------------------------------------------------------------------------------- /.vuepress/public/images/js浏览器缓存.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/js浏览器缓存.png -------------------------------------------------------------------------------- /.vuepress/public/images/jvm参数统计.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/jvm参数统计.png -------------------------------------------------------------------------------- /.vuepress/public/images/spring-bean生命周期.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/spring-bean生命周期.png -------------------------------------------------------------------------------- /.vuepress/public/images/spring-web-client.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/spring-web-client.png -------------------------------------------------------------------------------- /.vuepress/public/images/sql-tree.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/sql-tree.jpg -------------------------------------------------------------------------------- /.vuepress/public/images/sql执行顺序.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/sql执行顺序.jpg -------------------------------------------------------------------------------- /.vuepress/public/images/sql执行顺序.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/sql执行顺序.png -------------------------------------------------------------------------------- /.vuepress/public/images/url请求执行顺序.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/url请求执行顺序.jpg -------------------------------------------------------------------------------- /.vuepress/public/images/vue生命周期详解.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/vue生命周期详解.png -------------------------------------------------------------------------------- /.vuepress/public/images/宝塔WebHook获取url.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/宝塔WebHook获取url.png -------------------------------------------------------------------------------- /.vuepress/public/images/宝塔WebHook设置.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/宝塔WebHook设置.png -------------------------------------------------------------------------------- /.vuepress/public/images/程序与进程与线程.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/程序与进程与线程.jpg -------------------------------------------------------------------------------- /.vuepress/public/images/谷歌账号数据迁移.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bajins/notes-vuepress/0349b06466707203862be37a7ba4199769b12e2d/.vuepress/public/images/谷歌账号数据迁移.png -------------------------------------------------------------------------------- /.vuepress/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bajins", 3 | "short_name": "bajins", 4 | "icons": [ 5 | { 6 | "src": "/images/icons/logo.png", 7 | "sizes": "300x300", 8 | "type": "image/png" 9 | } 10 | ], 11 | "start_url": "/index.html", 12 | "display": "standalone", 13 | "background_color": "#fff", 14 | "theme_color": "#3eaf7c" 15 | } 16 | -------------------------------------------------------------------------------- /.vuepress/public/static.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": "./" 3 | } -------------------------------------------------------------------------------- /.vuepress/push.js: -------------------------------------------------------------------------------- 1 | const utils = require('./utils'); 2 | const path = require('path'); 3 | 4 | // GitHub仓库地址 5 | const repo = "https://github.com/bajins/bajins.github.io.git"; 6 | 7 | /** 8 | * 推送编译后的静态文件 9 | * node .vuepress/push.js 10 | * 11 | * @param args 执行脚本时传递的参数:docs为提交到当前仓库,pages为外部仓库 12 | */ 13 | function pushStatics(args) { 14 | let dir = path.resolve(__dirname, '..'); 15 | // 删除docs目录中的所有文件并编译 16 | // utils.execute("rimraf docs/* && vuepress build", dir); 17 | let docs = path.resolve(__dirname, '../docs'); 18 | 19 | if (args.length == 0 || args[0] == "docs") { 20 | utils.execute("git add -A", docs); 21 | utils.execute("git commit -m 'deploy'", dir); 22 | utils.execute("git push", dir); 23 | 24 | } else if (args.length > 0 && args[0] == "pages") { 25 | utils.execute("git init", docs); 26 | utils.execute("git add -A", docs); 27 | utils.execute("git commit -m 'deploy'", docs); 28 | utils.execute("git push -f " + repo + " master", docs); 29 | } 30 | } 31 | 32 | let args = process.argv.splice(2); 33 | pushStatics(args); -------------------------------------------------------------------------------- /.vuepress/styles/index.styl: -------------------------------------------------------------------------------- 1 | #app .page-title, #app .theme-reco-content.content__default, #app .theme-default-content.content__default, #app footer, #app .page-nav, #app .comments-wrapper { 2 | max-width: 960px !important; 3 | // padding: 1.5rem !important; 4 | } 5 | 6 | .page { 7 | /* 处理文本溢出 */ 8 | word-wrap: break-word !important; 9 | /* 允许在单词内换行 */ 10 | word-break: break-all; 11 | padding-top: 4rem !important; 12 | } 13 | 14 | .page .page-title { 15 | // 调整标题容器边距 16 | padding: 0rem 1.5rem !important; 17 | } 18 | 19 | .theme-default-content.content__default h1:first-child { 20 | padding-top: unset !important; 21 | margin-top: unset !important; 22 | margin-bottom: unset !important; 23 | } 24 | 25 | #app .theme-reco-content.content__default > h1, #app .theme-reco-content.content__default > p:nth-child(2) { 26 | // 处理文档的第一行标题 27 | display: none !important; 28 | } 29 | 30 | .home-center.content__default{ 31 | padding-left: 0 !important; 32 | padding-right: 0 !important; 33 | } -------------------------------------------------------------------------------- /.vuepress/styles/palette.styl: -------------------------------------------------------------------------------- 1 | $rightAnchorBgColor = #fff; 2 | $rightAnchorTextColor = $textColor; 3 | $rightAnchorFontSize = 14px; 4 | // btn 5 | $rightAnchorBtnTextColor = $rightAnchorTextColor; 6 | $rightAnchorBtnBgColor = $rightAnchorBgColor; 7 | // menu 8 | $rightAnchorMenuTextColor = $rightAnchorTextColor; -------------------------------------------------------------------------------- /.vuepress/utils.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | const { exec } = require('child_process'); 4 | 5 | /** 6 | * 执行命令 7 | * 8 | * @param command 命令 9 | * @param dir 执行命令的工作目录 10 | */ 11 | function execute(command, dir) { 12 | // exec函数第一个参数是要执行的命令,第二个函数是配置选项,第三个参数是回调函数, 13 | // 第二个参数中一个比较常用的就是子进程的工作目录 14 | exec(command, { cwd: dir }, (err, stdout, stderr) => { 15 | if (err) { 16 | console.log(err); 17 | return; 18 | } 19 | console.log(`stdout: ${stdout}`); 20 | console.log(`stderr: ${stderr}`); 21 | }); 22 | } 23 | 24 | /** 25 | * 给String对象增加一个原型方法: 26 | * 替换全部字符串 - 无replaceAll的解决方案,自定义扩展js函数库 27 | * 原生js中并没有replaceAll方法,只有replace,如果要将字符串替换,一般使用replace 28 | * 29 | * @param FindText 要替换的字符串 30 | * @param RepText 新的字符串 31 | * @return string 32 | */ 33 | String.prototype.replaceAll = function (FindText, RepText) { 34 | // g表示执行全局匹配,m表示执行多次匹配 35 | let regExp = new RegExp(FindText, "gm"); 36 | return this.replace(regExp, RepText); 37 | } 38 | 39 | /** 40 | * 根据系统文件分割符自动切割目录获取最后一个目录 41 | * 42 | * @return 43 | */ 44 | String.prototype.cuttingPathWith = function () { 45 | let strArray = this.split(path.sep); 46 | return strArray[strArray.length - 1]; 47 | } 48 | 49 | 50 | /** 51 | * 判断js数组/对象是否为空 52 | * isPrototypeOf() 验证一个对象是否存在于另一个对象的原型链上。即判断 Object 是否存在于 $obj 的原型链上。 53 | * js中一切皆对象,也就是说,Object 也存在于数组的原型链上,因此这里数组需要先于对象检验。 54 | * Object.keys() 返回一个由给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 55 | * @param $obj 56 | * @return {boolean} 57 | */ 58 | function isEmpty($obj) { 59 | // 找不到属性 60 | if (typeof ($obj) == 'undefined') { 61 | return true; 62 | } 63 | // 检验非数组/对象类型 EX:undefined null '' 根据自身要求添加其他适合的为空的值 如:0 ,'0',' ' 等 64 | if ($obj === 0 || $obj === '' || $obj === null) { 65 | return true; 66 | } 67 | if (typeof ($obj) === "string") { 68 | $obj = $obj.replace(/\s*/g, ""); //移除字符串中所有 '' 69 | if ($obj === '') { 70 | return true; 71 | } 72 | } 73 | if (typeof ($obj) === "object") { 74 | if (!Array.isArray($obj) || $obj.length <= 0 || Object.keys($obj).length <= 0) { 75 | return true; 76 | } 77 | } 78 | return false; 79 | } 80 | 81 | 82 | /** 83 | * 过滤不在数组中的值 84 | * 85 | * @param arr 元数据数组 86 | * @param retentionArr 需要保留的值数组 87 | * @return Array 去掉值后的新数组 88 | */ 89 | function notInArrayKV(arr, retentionArr) { 90 | let newArr = []; 91 | arr.forEach(function (value, index, array) { 92 | // 判断文件名以什么开头、是否在指定数组中存在 93 | if (!value.startsWith(".") && !retentionArr.includes(value)) { 94 | newArr.push(value); 95 | } 96 | }); 97 | return newArr; 98 | } 99 | 100 | 101 | /** 102 | * 查找文件夹下的文件并忽略指定文件 103 | * 104 | * @param dirname 文件夹路径 105 | * @return Array 返回过滤后的数组 106 | */ 107 | function getDirFiles(dirname) { 108 | // 读取文件夹 109 | // let fileNames = fs.readdirSync(path.resolve(__dirname, dirname)).map(filename => filename); 110 | let files = fs.readdirSync(dirname).sort(); 111 | let ignores = [".git", ".gitignore", "docs", "node_modules", "yarn.lock", "package.json", "package-lock.json"]; 112 | 113 | return notInArrayKV(files, ignores); 114 | } 115 | 116 | 117 | /** 118 | * 读取根目录下的子目录以及md文件组装成侧边栏 119 | * 120 | * @param rootPath 根路径 121 | * @return Object 返回获取到当前文件夹下的目录结构对象 122 | */ 123 | function getSidebars(rootPath) { 124 | let sidebar = {}; 125 | // 遍历获取到的文件夹内容 126 | getDirFiles(rootPath).forEach(function (file, index, array) { 127 | // 获取相对路径 128 | let realpath = `${rootPath}/${file}`; 129 | // 判断是否为文件夹 130 | if (fs.lstatSync(realpath).isDirectory()) { 131 | // test2(realpath, value, []); 132 | let filesList = []; 133 | getSidebar(realpath, filesList); 134 | sidebar[`/${file}/`] = filesList; 135 | } 136 | }); 137 | sidebar["/"] = []; 138 | return sidebar; 139 | } 140 | 141 | 142 | /** 143 | * 组装侧边栏 144 | * 145 | * @param dirPath 路径 146 | * @param filesList 存放所有文件夹的数组 147 | * @param targetObj 存放子文件夹的对象 148 | * @return 149 | */ 150 | function getSidebar(dirPath, filesList, targetObj = {}) { 151 | //需要用到同步读取 152 | getDirFiles(dirPath).forEach(function (file) { 153 | let childrenPath = path.join(dirPath, file) 154 | if (fs.statSync(childrenPath).isDirectory()) { 155 | let item; 156 | if (targetObj["children"]) { 157 | item = { title: file, children: [], parent: dirPath.cuttingPathWith() }; 158 | // 把更深层的子文件夹装入上级子文件夹数组中 159 | targetObj["children"].push(item); 160 | } else { 161 | item = { title: file, children: [] }; 162 | // 装入构造同级文件夹下的子文件夹对象 163 | filesList.push(item); 164 | } 165 | getSidebar(childrenPath, filesList, item); 166 | } else if (file.endsWith(".md")) { // 必须是md文件 167 | let fileName = file.slice(0, -3); 168 | if ("README" == fileName) { 169 | fileName = ''; 170 | } 171 | if (targetObj["children"]) { 172 | fileName = `${targetObj["title"]}/${fileName}`; 173 | if (isEmpty(targetObj["parent"])) { 174 | fileName = `${targetObj["parent"]}/${fileName}`; 175 | delete (targetObj["parent"]); 176 | } 177 | // 把文件装入更深层子文件夹的数组中 178 | targetObj["children"].push(fileName); 179 | } else { 180 | // 装入同级文件夹下的文件 181 | filesList.push(fileName); 182 | } 183 | } 184 | }); 185 | } 186 | 187 | 188 | /** 189 | * 获取指定路径下的所有子目录组装成导航菜单 190 | * 191 | * @param rootPath 路径 192 | * @return Array 193 | */ 194 | function getNavigationMenu(rootPath) { 195 | let nav = []; 196 | // 遍历获取到的文件夹内容 197 | getDirFiles(rootPath).forEach(function (file, index, array) { 198 | // 获取相对路径 199 | let realpath = path.join(rootPath, file); 200 | // 判断是否为文件夹 201 | if (fs.lstatSync(realpath).isDirectory()) { 202 | nav.push({ text: file, link: `/${file}/` }); 203 | } 204 | }); 205 | return nav; 206 | } 207 | 208 | 209 | /** 210 | * 把静态文件添加到一个文档中 211 | * 212 | * @param rootPath 路径 213 | * @return Array 214 | */ 215 | function setStaticFile(rootPath) { 216 | // 读取文件夹 217 | let files = fs.readdirSync(rootPath).sort(); 218 | // 遍历获取到的文件夹内容 219 | files.forEach(function (file, index, array) { 220 | let reg = new RegExp(".gitattributes|LICENSE|README.md|.git", "ig"); 221 | if (!reg.test(file)) { // 过滤文件 222 | // 获取规范的绝对路径 223 | // let realpath = fs.realpathSync(rootPath + "/" + value); 224 | // 拼接为绝对路径 225 | // let realpath = path.resolve(rootPath, file) 226 | // 获取相对路径 227 | let realpath = path.join(rootPath, file); 228 | // 拼接为相对路径 229 | // let realpath = path.join(rootPath, file) 230 | // 判断是否为文件夹 231 | if (fs.lstatSync(realpath).isDirectory()) { 232 | setStaticFile(realpath); 233 | } else { 234 | realpath = realpath.substring(realpath.indexOf("files")); 235 | let fileStr = `\r\n[${file}](/${realpath.replaceAll("\\\\", "/")})\r\n`; 236 | // 文件末尾追加内容 237 | fs.appendFile("files.md", fileStr, 'utf8', function (err) { 238 | if (err) { 239 | console.error("文件追加内容失败,原因是:" + err); 240 | } 241 | }); 242 | } 243 | } 244 | }); 245 | } 246 | 247 | // 写入文件内容 248 | fs.writeFile("files.md", "# 文件\r\n", "utf8", error => { 249 | if (error) { 250 | return console.error("文件写入内容失败,原因是:" + error.message); 251 | } 252 | }); 253 | 254 | setStaticFile(".vuepress/public/files"); 255 | 256 | 257 | function test(files) { 258 | Object.keys(sidebar).forEach(function (key) { 259 | if (!files.includes(key)) { 260 | delete (sidebar[key]); 261 | console.log(key) 262 | } 263 | }); 264 | } 265 | 266 | module.exports = { 267 | getSidebars, 268 | getNavigationMenu, 269 | execute 270 | } -------------------------------------------------------------------------------- /DBS/MySQL事件.md: -------------------------------------------------------------------------------- 1 | # MySQL事件 2 | 3 | [[toc]] 4 | 5 | 6 | ## 事件是什么 7 | 8 | > MySQL5.1版本开始引进event概念,MySQL中的事件(event:时间触发器)是用于执行定时或周期性的任务,类似Linux中的`crontab`, 9 | > 但是后者只能精确到分钟,事件可以精确到秒。 10 | > 11 | > 通过单独或调用存储过程使用,在某一特定的时间点,触发相关的SQL语句或存储过程。 12 | > 13 | > 事件由一个特定的线程来管理的,也就是所谓的事件调度器,但是事件不能直接调用。 14 | 15 | > 整个服务器重启、断电会导致event事件恢复成默认`OFF`关闭状态,需要在`mysql.ini`文件中修改加入`event_scheduler = ON` 16 | 17 | 18 | ## 查看事件调度器 19 | 20 | > MySQL中调度器`event_scheduler`负责调用事件,也就是由全局变量`event_scheduler`的状态决定,它默认是`OFF`, 一般是`OFF`。 21 | 22 | ```sql 23 | SHOW VARIABLES LIKE '%event_scheduler%'; 24 | ``` 25 | 26 | ## 开启事件调度器 27 | 28 | ```sql 29 | SET GLOBAL event_scheduler=1 30 | ``` 31 | 32 | 33 | 34 | ## 查看事件 35 | 36 | ```sql 37 | SHOW EVENTS; 38 | 39 | SELECT * FROM information_schema.events; 40 | SELECT * FROM mysql.event; 41 | ``` 42 | 43 | ## 查看事件创建语句 44 | 45 | ```sql 46 | SHOW CREATE EVENT event_name 47 | ``` 48 | 49 | ## 创建事件 50 | 51 | > `EVERY`后面可以跟可选的`STARTS`和`ENDS`,指定事件开始和结束时间,在这个时间段内,时间定时执行。 52 | > `STARTS`和`ENDS`可同时指定,或者只指定`STARTS`,或两者都不指定。 53 | 54 | ### 每隔一秒执行 55 | 56 | ```sql 57 | DELIMITER $$ 58 | 59 | CREATE EVENT `executed_every_second` 60 | 61 | -- 设置触发点 62 | ON SCHEDULE 63 | -- 使用EVERY关键字指定时间间隔,每隔一秒执行 64 | EVERY 1 SECOND 65 | 66 | -- 可以设置这个事件是执行一次还是持久执行,默认为`NOT PRESERVE` 67 | -- 即默认的计划任务执行完毕后自动drop该事件 68 | ON COMPLETION PRESERVE 69 | -- 可是设置该事件创建后状态是否开启或关闭,默认为`ENABLE` 70 | ENABLE 71 | -- 可以给该事件加上注释,最大长度64个字节 72 | COMMENT "每隔一秒执行" 73 | DO 74 | BEGIN 75 | 76 | SELECT * FROM USER LIMIT 10; 77 | 78 | END$$ 79 | 80 | DELIMITER ; 81 | ``` 82 | 83 | ### 每天凌晨1点执行 84 | 85 | ```sql 86 | DELIMITER $$ 87 | 88 | CREATE EVENT `1_am_every_day` 89 | 90 | -- 设置触发点 91 | ON SCHEDULE 92 | -- 使用EVERY关键字指定时间间隔,每天启动时间 93 | EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR) 94 | 95 | -- 可以设置这个事件是执行一次还是持久执行,默认为`NOT PRESERVE` 96 | -- 即默认的计划任务执行完毕后自动drop该事件 97 | ON COMPLETION PRESERVE 98 | -- 可是设置该事件创建后状态是否开启或关闭,默认为`ENABLE` 99 | ENABLE 100 | -- 可以给该事件加上注释,最大长度64个字节 101 | COMMENT "每天凌晨1点执行" 102 | DO 103 | BEGIN 104 | 105 | SELECT * FROM USER LIMIT 10; 106 | 107 | END$$ 108 | 109 | DELIMITER ; 110 | ``` 111 | 112 | ### 每隔一分钟执行 113 | 114 | ```sql 115 | DELIMITER $$ 116 | 117 | CREATE EVENT `executed_every_minute` 118 | 119 | -- 设置触发点 120 | ON SCHEDULE 121 | -- 使用EVERY关键字指定时间间隔,每隔一分钟执行 122 | EVERY 1 MINUTE 123 | 124 | -- 可以设置这个事件是执行一次还是持久执行,默认为`NOT PRESERVE` 125 | -- 即默认的计划任务执行完毕后自动drop该事件 126 | ON COMPLETION PRESERVE 127 | -- 可是设置该事件创建后状态是否开启或关闭,默认为`ENABLE` 128 | ENABLE 129 | -- 可以给该事件加上注释,最大长度64个字节 130 | COMMENT "每隔一分钟执行" 131 | DO 132 | BEGIN 133 | 134 | SELECT * FROM USER LIMIT 10; 135 | 136 | END$$ 137 | 138 | DELIMITER ; 139 | ``` 140 | 141 | ### 指定时间范围内执行 142 | 143 | ```sql 144 | DELIMITER $$ 145 | 146 | CREATE EVENT `1_am_every_range` 147 | 148 | -- 设置触发点 149 | ON SCHEDULE 150 | -- 使用EVERY关键字指定时间间隔,每隔一分钟执行 151 | EVERY 1 MINUTE 152 | -- 使用STARTS关键字指定开始时间,当前时间一小时之后开始执行 153 | STARTS CURRENT_TIMESTAMP + INTERVAL 1 HOUR 154 | -- 使用ENDS关键字指定结束时间,当前时间一个月后结束执行 155 | ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH 156 | 157 | -- 可以设置这个事件是执行一次还是持久执行,默认为`NOT PRESERVE` 158 | -- 即默认的计划任务执行完毕后自动drop该事件 159 | ON COMPLETION PRESERVE 160 | -- 可是设置该事件创建后状态是否开启或关闭,默认为`ENABLE` 161 | ENABLE 162 | -- 可以给该事件加上注释,最大长度64个字节 163 | COMMENT "每隔一分钟执行,指定开始时间和结束时间" 164 | DO 165 | BEGIN 166 | 167 | SELECT * FROM USER LIMIT 10; 168 | 169 | END$$ 170 | 171 | DELIMITER ; 172 | ``` 173 | 174 | 175 | 176 | 177 | 178 | ### 一小时后只执行一次 179 | 180 | ```sql 181 | DELIMITER $$ 182 | 183 | CREATE EVENT `after_hour_execute_once` 184 | 185 | -- 设置触发点 186 | ON SCHEDULE 187 | -- 使用AT关键字指定只执行一次的时间,一小时后只执行一次 188 | AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR 189 | 190 | -- 可以设置这个事件是执行一次还是持久执行,默认为`NOT PRESERVE` 191 | -- 即默认的计划任务执行完毕后自动drop该事件 192 | ON COMPLETION PRESERVE 193 | -- 可是设置该事件创建后状态是否开启或关闭,默认为`ENABLE` 194 | ENABLE 195 | -- 可以给该事件加上注释,最大长度64个字节 196 | COMMENT "一小时后只执行一次" 197 | DO 198 | BEGIN 199 | 200 | SELECT * FROM USER LIMIT 10; 201 | 202 | END$$ 203 | 204 | DELIMITER ; 205 | ``` 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | ## 修改事件 214 | 215 | ```sql 216 | ALTER EVENT event_name 217 | [ON SCHEDULE SCHEDULE] 218 | [RENAME TO new_event_name] 219 | [ON COMPLETION [NOT] PRESERVE] 220 | [COMMENT 'comment'] 221 | [ENABLE | DISABLE] 222 | [DO sql_statement] 223 | ``` 224 | 225 | ## 删除事件 226 | 227 | ```sql 228 | DROP EVENT [IF EXISTS] event_name 229 | ``` 230 | 231 | ## 开启事件 232 | 233 | ```sql 234 | ALTER EVENT event_name ENABLE; 235 | ``` 236 | 237 | ## 停止事件 238 | 239 | ```sql 240 | ALTER EVENT event_name DISABLE; 241 | ``` 242 | 243 | 244 | 245 | ## 启动定时器 246 | 247 | ```sql 248 | ALTER EVENT event_remind_status ON 249 | COMPLETION PRESERVE ENABLE; 250 | ``` 251 | -------------------------------------------------------------------------------- /DBS/MySQL存储过程.md: -------------------------------------------------------------------------------- 1 | # MySQL存储过程 2 | 3 | 4 | [[toc]] 5 | 6 | 7 | 8 | 9 | ## 创建游标存储过程 10 | 11 | ```sql 12 | -- 将语句的结束符号从分号;临时改为两个$$(可以是自定义) 13 | DELIMITER $$ 14 | USE `table_name`$$ 15 | -- 判断删除存储过程 16 | DROP PROCEDURE IF EXISTS select_review$$ 17 | -- IN输入参数 OUT输出参数 18 | CREATE DEFINER=`root`@`%` PROCEDURE select_review ( IN gs BIGINT,IN rid BIGINT,OUT result VARCHAR(255)) 19 | BEGIN 20 | 21 | DECLARE _email VARCHAR(32); 22 | DECLARE i INT; 23 | DECLARE r VARCHAR(255); 24 | DECLARE s INT DEFAULT 0; 25 | -- 遍历数据结束标志 26 | DECLARE done INT DEFAULT FALSE; 27 | -- 游标 28 | DECLARE r_name CURSOR FOR (SELECT email FROM company c JOIN u_user u ON c.id=u.company_id JOIN u_user_role ur ON u.id=ur.uid WHERE ur.rid=rid AND c.id=gs); 29 | -- 设定捕捉异常的结束标志 30 | DECLARE CONTINUE HANDLER FOR SQLWARNING, NOT FOUND, SQLEXCEPTION SET done = TRUE; 31 | -- 统计循环条数并赋值给变量i 32 | -- 赋值多列使用:列名1 ,列名2 INTO 变量名1,变量名2 33 | SELECT COUNT(nickname) INTO i FROM company c JOIN u_user u ON c.id=u.company_id JOIN u_user_role ur ON u.id=ur.uid WHERE ur.rid=rid AND c.id=gs; 34 | 35 | -- 打开游标 36 | OPEN r_name; 37 | -- 自定义循环体开始 38 | rLoop:LOOP 39 | -- 取值 赋值给变量,多个以,号分割 40 | -- FETCH NEXT FROM r_name INTO _email,password1,name1; 41 | FETCH r_name INTO _email; 42 | 43 | SET s=s+1;-- 循环一次加1 44 | IF(i=1) then 45 | SET r=CONCAT('[{"Push_MC":"',_email,'"}]'); 46 | ELSEIF(s=1) THEN 47 | SET r=CONCAT('[{"Push_MC":"',_email,'"},'); 48 | ELSEIF(s=i) THEN 49 | SET r=CONCAT(r,'{"Push_MC":"',_email,'"}]'); 50 | ELSE 51 | SET r=CONCAT(r,'{"Push_MC":"',_email,'"},'); 52 | END IF; 53 | 54 | -- 判断是否继续循环 55 | -- IF done OR s=i THEN 56 | IF s=i THEN 57 | LEAVE rLoop;-- 结束循环 58 | -- ITERATE rLoop;-- 跳过继续循环 59 | END IF; 60 | 61 | END LOOP rLoop;-- 结束自定义循环体 62 | CLOSE r_name;-- 关闭游标 63 | SET result=r;-- 返回结果 64 | -- 自定义异常 65 | -- SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = '错误!' ; 66 | -- 使用自定义结束标志结束 67 | END$$ 68 | -- 还原结束标志 69 | DELIMITER ; 70 | ``` 71 | 72 | ### 调用存储过程,查询返回结果 73 | 74 | ```sql 75 | -- 调用存储过程,@sum变量为返回结果 76 | call select_review(输入参数一,输入参数二,@sum); 77 | -- 查询返回结果 78 | select @sum e; 79 | ``` 80 | 81 | ### 多次调用存储过程,并拼接结果 82 | 83 | ```sql 84 | -- 调用存储过程,@sum变量为返回结果 85 | call select_review(输入参数一,输入参数二,@sum); 86 | -- 定义变量接收拼接返回结果 87 | SET @e=CONCAT('[',@sum); 88 | 89 | call select_review(输入参数一,输入参数二,@sum); 90 | SET @e=CONCAT(@e,',',@sum); 91 | 92 | SET @declaration=(SELECT email FROM u_user WHERE id=48); 93 | SET @e=CONCAT(@e,',{"Push_MC":"',@declaration,'"}]'); 94 | 95 | -- 查询最终拼接结果 96 | SELECT @e e; 97 | ``` 98 | 99 | ## 循环 100 | 101 | > `LOOP`、`WHILE`、`REPEAT` 102 | 103 | ```sql 104 | -- 将语句的结束符号从分号;临时改为两个$$(可以是自定义) 105 | DELIMITER $$ 106 | USE `table_name`$$ 107 | -- 判断删除存储过程 108 | DROP PROCEDURE IF EXISTS `add_year_month_info`$$ 109 | 110 | CREATE DEFINER=`yc`@`%` PROCEDURE `add_year_month_info`() 111 | BEGIN 112 | /* 113 | CALL add_year_month_info() 114 | */ 115 | 116 | -- 统计循环次数变量 117 | DECLARE i INT DEFAULT 1; 118 | -- 需要循环次数变量 119 | DECLARE a INT DEFAULT 12; 120 | -- 设定捕捉异常的结束标志 121 | -- DECLARE CONTINUE HANDLER FOR SQLWARNING, NOT FOUND, SQLEXCEPTION SET done = TRUE; 122 | 123 | -- 自定义LOOP循环体开始 124 | rLoop:LOOP 125 | -- 判断是否继续循环 126 | IF (i>a) THEN 127 | -- 结束循环,意思同boeak 128 | LEAVE rLoop; 129 | -- 跳过继续循环 130 | -- ITERATE rLoop; 131 | END IF; 132 | -- 循环一次加1 133 | SET i=i+1; 134 | 135 | SELECT * FROM USER WHERE id=i; 136 | 137 | -- 结束自定义循环体 138 | END LOOP rLoop; 139 | 140 | -- 恢复初始值 141 | SET i=1; 142 | 143 | -- WHILE循环开始 144 | WHILE i<=a DO 145 | SET i=i+1; 146 | 147 | SELECT * FROM USER WHERE id=i; 148 | 149 | -- 循环结束 150 | END WHILE; 151 | 152 | -- 恢复初始值 153 | SET i=1; 154 | 155 | -- REPEAT循环开始 156 | REPEAT 157 | SET i=i+1; 158 | 159 | SELECT * FROM USER WHERE id=i; 160 | 161 | -- 循环结束 162 | UNTIL i>a END REPEAT; 163 | -- 使用自定义结束标志结束 164 | END$$ 165 | 166 | DELIMITER ; 167 | ``` 168 | 169 | ## 异常处理 170 | 171 | ```sql 172 | DELIMITER $$ 173 | -- 判断删除存储过程 174 | DROP PROCEDURE IF EXISTS err; 175 | CREATE PROCEDURE err() 176 | BEGIN 177 | DECLARE code VARCHAR(5) DEFAULT '00000'; 178 | DECLARE msg TEXT; 179 | DECLARE errno INT; 180 | 181 | -- EXIT:发生错误时退出当前代码块 182 | -- DECLARE EXIT HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND 183 | 184 | /*CONTINUE: 发送错误时继续执行后续代码 185 | SQLWARNING是对所有以01开头的SQLSTATE代码的速记 186 | NOT FOUND是对所有以02开头的SQLSTATE代码的速记 187 | SQLEXCEPTION是对所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE代码的速记*/ 188 | DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND 189 | 190 | BEGIN -- 捕获到异常时执行的代码块 191 | -- 赋值错误代码给code变量,赋值错误信息给msg变量 192 | GET DIAGNOSTICS CONDITION 1 code = RETURNED_SQLSTATE,errno = MYSQL_ERRNO, msg = MESSAGE_TEXT; 193 | -- 保存错误信息到日志表中 194 | -- INSERT INTO sql_log(errno,code,description,create_time,message) VALUES(errno,code,'存储过程:err',NOW(),msg); 195 | 196 | SELECT CONCAT("ERROR ", errno,'[', code, '] ', msg) sqlerrm; 197 | 198 | END; 199 | SELECT * FROM a; 200 | 201 | END $$ 202 | DELIMITER; 203 | ``` 204 | ```sql 205 | CALL err(); 206 | ``` 207 | 208 | 209 | ## 插入或更新upsert 210 | 211 | ```sql 212 | delimiter $ 213 | CREATE PROCEDURE merge_a_to_b () BEGIN 214 | -- 定义需要插入从a表插入b表的过程变量 215 | DECLARE _ID VARCHAR (16); 216 | DECLARE _NAME VARCHAR (16); 217 | -- 游标遍历数据结束标志 218 | DECLARE done INT DEFAULT FALSE; 219 | -- 游标指向a表结果集第一条-1位置 220 | DECLARE cur_account CURSOR FOR SELECT ID, NAME FROM test_a; 221 | -- 游标指向a表结果集最后一条加1位置 设置结束标志 222 | DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 223 | -- 打开游标 224 | OPEN cur_account; 225 | -- 遍历游标 226 | read_loop : 227 | LOOP 228 | -- 取值a表当前位置数据到临时变量 229 | FETCH NEXT FROM cur_account INTO _ID,_NAME; 230 | 231 | -- 如果取值结束 跳出循环 232 | IF done THEN LEAVE read_loop; 233 | END IF; 234 | 235 | -- 当前数据做 对比 如果b表存在则更新时间 不存在则插入 236 | IF NOT EXISTS ( SELECT 1 FROM TEST_B WHERE ID = _ID AND NAME=_NAME ) 237 | THEN 238 | INSERT INTO TEST_B (ID, NAME,operatime) VALUES (_ID,_NAME,now()); 239 | ELSE 240 | UPDATE TEST_B set operatime = now() WHERE ID = _ID AND NAME=_NAME; 241 | END IF; 242 | 243 | END LOOP; 244 | CLOSE cur_account; 245 | 246 | END $ 247 | ``` -------------------------------------------------------------------------------- /DBS/mysql-udf安装.md: -------------------------------------------------------------------------------- 1 | # mysql-udf安装 2 | 3 | 4 | [[toc]] 5 | 6 | 7 | 8 | 9 | ## 一、mysql-udf-http 10 | 11 | ### 安装cur 12 | 13 | ```sql 14 | yum install -y libcurl* 15 | ``` 16 | 17 | - 或者 18 | 19 | ```sql 20 | yum install -y curl* 21 | ``` 22 | 23 | ### 安装mysql-udf-http 24 | 25 | > 项目网址:http://code.google.com/p/mysql-udf-http/ 26 | > 27 | > 中文说明:http://blog.zyan.cc/mysql-udf-http/ 28 | 29 | ```sql 30 | tar zxvf mysql-udf-http-1.0.tar.gz 31 | cd mysql-udf-http-1.0 32 | ./configure --prefix=/usr/local/mysql-udf-http --with-mysql=/usr/local/mysql/bin/mysql_config 33 | make && make install 34 | ``` 35 | 36 | - 如果提示`configure: error: no acceptable C compiler found in $PATH`需要安装`GCC`编译器 37 | 38 | ```sql 39 | yum install -y gcc 40 | ``` 41 | 42 | - 如果没有`mysql_config`请执行以下命令 43 | 44 | ```sql 45 | yum install -y mysql-devel 46 | ``` 47 | 48 | - 搜索`mysql-udf-http.so`文件位置 49 | 50 | ```sql 51 | find / -name mysql-udf-http.so 52 | ``` 53 | 54 | > 由于`mysql-udf-http.so`不在`mysql/lib/plugin/`目录下,所以需要创建软连接或者复制过去 55 | 56 | - 创建软连接 57 | 58 | ```sql 59 | ln -s /usr/local/mysql-udf-http/lib/mysql-udf-http.so /usr/local/mysql/lib/plugin/mysql-udf-http.so 60 | ``` 61 | 62 | - 或者复制 63 | 64 | ```sql 65 | cp /usr/local/mysql-udf-http/lib/mysql-udf* /usr/local/mysql/lib/plugin/ 66 | ``` 67 | 68 | - 重启mysql 69 | 70 | ```sql 71 | service mysqld restart 72 | ``` 73 | 74 | - 或者 75 | 76 | ```sql 77 | systemctl restart mysqld.service 78 | ``` 79 | 80 | ### 创建 81 | 82 | ```sql 83 | create function http_get returns string soname 'mysql-udf-http.so'; 84 | create function http_post returns string soname 'mysql-udf-http.so'; 85 | create function http_put returns string soname 'mysql-udf-http.so'; 86 | create function http_delete returns string soname 'mysql-udf-http.so'; 87 | ``` 88 | 89 | ### 删除 90 | 91 | ```sql 92 | DROP FUNCTION IF EXISTS http_get; 93 | DROP FUNCTION IF EXISTS http_post; 94 | DROP FUNCTION IF EXISTS http_put; 95 | DROP FUNCTION IF EXISTS http_delete; 96 | ``` 97 | 98 | ### 验证是否安装成功 99 | 100 | ```sql 101 | select * from mysql.func; 102 | ``` 103 | 104 | ### Description 105 | 106 | ```sql 107 | SELECT http_get(''); 108 | SELECT http_post('', ''); 109 | SELECT http_put('', ''); 110 | SELECT http_delete(''); 111 | ``` 112 | 113 | ### 实例 114 | 115 | ```sql 116 | /* HTTP GET、POST方式提交关键词“xoyo”到百度移动搜索 */ 117 | SELECT http_get('http://m.baidu.com/s?word=xoyo&pn=0'); 118 | SELECT http_post('http://m.baidu.com/s','word=xoyo&pn=0'); 119 | 120 | /* 新浪微博开放平台:获取新浪用户ID为103500的最近一条微博内容 */ 121 | SELECT http_get('http://api.t.sina.com.cn/statuses/user_timeline/103500.json?count=1&source=1561596835') AS data; 122 | /* 新浪微博开放平台:发表一条微博 */ 123 | SELECT http_post('http://your_sina_uid:your_password@api.t.sina.com.cn/statuses/update.xml?source=1561596835', 'status=Thins is sina weibo test information'); 124 | 125 | /* Tokyo Tyrant 写入、读取、删除操作 */ 126 | SELECT http_put('http://192.168.8.34:1978/key', 'This is value'); 127 | SELECT http_get('http://192.168.8.34:1978/key'); 128 | SELECT http_delete('http://192.168.8.34:1978/key'); 129 | ``` 130 | 131 | ## 二、mysql-udf-json 132 | 133 | ```sql 134 | wget https://github.com/claer-ding/lib_mysqludf_json/archive/2013.zip 135 | unzip 2013.zip 136 | cd lib_mysqludf_json-2013 137 | gcc $(/usr/local/mysql/bin/mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c 138 | cp lib_mysqludf_json.so /usr/local/mysql/lib/plugin/ 139 | ``` 140 | 141 | 142 | ### 创建 143 | 144 | ```sql 145 | create function lib_mysqludf_json_info returns string soname 'lib_mysqludf_json.so'; 146 | create function json_array returns string soname 'lib_mysqludf_json.so'; 147 | create function json_members returns string soname 'lib_mysqludf_json.so'; 148 | create function json_object returns string soname 'lib_mysqludf_json.so'; 149 | create function json_values returns string soname 'lib_mysqludf_json.so'; 150 | ``` 151 | 152 | ### 删除 153 | 154 | ```sql 155 | DROP FUNCTION IF EXISTS lib_mysqludf_json_info; 156 | DROP FUNCTION IF EXISTS json_array; 157 | DROP FUNCTION IF EXISTS json_members; 158 | DROP FUNCTION IF EXISTS json_object; 159 | DROP FUNCTION IF EXISTS json_values; 160 | ``` 161 | 162 | ### 验证是否安装成功 163 | 164 | ```sql 165 | select * from mysql.func; 166 | ``` 167 | 168 | ### 实例 169 | 170 | - 返回json对象 171 | 172 | ```sql 173 | select json_object(login_name as user,login_password as pwd) as user from t_sys_loginperson; 174 | ``` 175 | 176 | - 返回json数组 177 | 178 | ```sql 179 | select json_array(login_name,login_password) as user from t_sys_loginperson; 180 | ``` 181 | 182 | ### 创建触发器 183 | 184 | ```sql 185 | /* INSERT插入操作的触发器 */ 186 | /*开头将结束符号定义为|*/ 187 | DELIMITER | 188 | DROP TRIGGER IF EXISTS mytable_insert; 189 | CREATE TRIGGER mytable_insert 190 | AFTER INSERT ON mytable 191 | FOR EACH ROW BEGIN 192 | SET @tt_json = (SELECT json_object(id,addtime,title) FROM mytable WHERE id = NEW.id LIMIT 1); 193 | SET @tt_resu = (SELECT http_put(CONCAT('http://192.168.8.34:1978/', NEW.id), @tt_json)); 194 | /*使用|结束*/ 195 | END | 196 | /*最后使用DELIMITER ; 将结束符号还原*/ 197 | DELIMITER ; 198 | ``` 199 | 200 | ```sql 201 | /* UPDATE更新操作的触发器 */ 202 | DELIMITER | 203 | DROP TRIGGER IF EXISTS mytable_update; 204 | CREATE TRIGGER mytable_update 205 | AFTER UPDATE ON mytable 206 | FOR EACH ROW BEGIN 207 | /*判断表中字段新数据与旧数据变化*/ 208 | if new.status<>old.status then 209 | SET @tt_json = (SELECT json_object(id,addtime,title) FROM mytable WHERE id = OLD.id LIMIT 1); 210 | SET @tt_resu = (SELECT http_get(CONCAT('http://192.168.8.34:1978/', OLD.id), @tt_json)); 211 | /*结束判断*/ 212 | end if; 213 | END | 214 | DELIMITER ; 215 | ``` 216 | 217 | ```sql 218 | /* DELETE删除操作的触发器 */ 219 | DELIMITER | 220 | DROP TRIGGER IF EXISTS mytable_delete; 221 | CREATE TRIGGER mytable_delete 222 | AFTER DELETE ON mytable 223 | FOR EACH ROW BEGIN 224 | SET @tt_resu = (SELECT http_delete(CONCAT('http://192.168.8.34:1978/', OLD.id))); 225 | END | 226 | DELIMITER ; 227 | ``` 228 | -------------------------------------------------------------------------------- /Go/Go编译打包.md: -------------------------------------------------------------------------------- 1 | # Go编译打包 2 | 3 | [[toc]] 4 | 5 | 6 | ## Flag 7 | 8 | + [Go语言-打包静态文件](https://c.isme.pub/2019/01/10/go-static) 9 | 10 | 11 | > 下载打包脚本[go_7z_pack.bat](/files/go_7z_pack.bat)或[go_pack.sh](/files/go_pack.sh)文件并保存到项目根目录中, 12 | > 且修改脚本中的`files`变量保存执行脚本即可 13 | 14 | 15 | **cross compile** 16 | 17 | > 交叉编译器(英语:Cross compiler)是指一个在某个系统平台下可以产生另一个系统平台的可执行文件的编译器。 18 | > 交叉编译器在目标系统平台(开发出来的应用程序序所运行的平台)难以或不容易编译时非常有用。 19 | 20 | > 交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统; 21 | > 同样,同一个操作系统也可以在不同的体系结构上运行。 22 | 23 | 24 | 25 | 26 | ## 第三方库 27 | 28 | * [https://github.com/mitchellh/gox](https://github.com/mitchellh/gox) 29 | * [https://github.com/wheelcomplex/goxx](https://github.com/wheelcomplex/goxx) 30 | * [https://github.com/goreleaser/goreleaser](https://github.com/goreleaser/goreleaser) 31 | * [https://github.com/laher/goxc](https://github.com/laher/goxc) 32 | * [https://github.com/karalabe/xgo](https://github.com/karalabe/xgo) 33 | * [https://github.com/techknowlogick/xgo](https://github.com/techknowlogick/xgo) 34 | * [https://github.com/storyicon/gos](https://github.com/storyicon/gos) 35 | * [https://github.com/docker/golang-cross](https://github.com/docker/golang-cross) 36 | * [https://github.com/im4x5yn74x/dropper2](https://github.com/im4x5yn74x/dropper2) 37 | * Go编译器 [https://github.com/tinygo-org/tinygo](https://github.com/tinygo-org/tinygo) 38 | 39 | 40 | 41 | **嵌入静态资源** 42 | 43 | * [https://github.com/go-bindata/go-bindata](https://github.com/go-bindata/go-bindata) 44 | * [https://github.com/caixw/gobuild](https://github.com/caixw/gobuild) 45 | * [https://github.com/shuLhan/go-bindata](https://github.com/shuLhan/go-bindata) 46 | * [https://github.com/elazarl/go-bindata-assetfs](https://github.com/elazarl/go-bindata-assetfs) 47 | * [https://github.com/rakyll/statik](https://github.com/rakyll/statik) 48 | * [https://github.com/GeertJohan/go.rice](https://github.com/GeertJohan/go.rice) 49 | * [https://github.com/mjibson/esc](https://github.com/mjibson/esc) 50 | * [https://github.com/UnnoTed/fileb0x](https://github.com/UnnoTed/fileb0x) 51 | * [https://github.com/gobuffalo/packr](https://github.com/gobuffalo/packr) 52 | * [https://github.com/go-playground/statics](https://github.com/go-playground/statics) 53 | * [https://github.com/knadh/stuffbin](https://github.com/knadh/stuffbin) 54 | * [https://github.com/omeid/go-resources](https://github.com/omeid/go-resources) 55 | * [https://github.com/phogolabs/parcello](https://github.com/phogolabs/parcello) 56 | * [https://github.com/pyros2097/go-embed](https://github.com/pyros2097/go-embed) 57 | * [https://github.com/shurcooL/vfsgen](https://github.com/shurcooL/vfsgen) 58 | * [https://github.com/wlbr/templify](https://github.com/wlbr/templify) 59 | * [https://perkeep.org/pkg/fileembed](https://perkeep.org/pkg/fileembed) 60 | * [https://github.com/kevinburke/go-bindata](https://github.com/kevinburke/go-bindata) 61 | * [https://github.com/markbates/pkger](https://github.com/markbates/pkger) 62 | 63 | 64 | 65 | 66 | ## embed内嵌文件 67 | 68 | * [https://github.com/golang/proposal/blob/master/design/draft-embed.md](https://github.com/golang/proposal/blob/master/design/draft-embed.md) 69 | * go:embed扩展 [https://github.com/alimy/embedx](https://github.com/alimy/embedx) 70 | 71 | 72 | > 在go1.6版本之前要想把资源文件嵌入到编译的二进制包中必须用第三方包(除非你自己有实现),要么把所有文件压缩在一起 73 | 74 | - embed一共有三种数据格式 75 | 76 | | 数据类型 | 说明 | 77 | |---------- |----------------------------------------------------------------------------------------------------- | 78 | | []byte | 表示数据存储为二进制格式,如果只使用[]byte和string需要以import (_ "embed")的形式引入embed标准库 | 79 | | string | 表示数据被编码成utf8编码的字符串,因此不要用这个格式嵌入二进制文件比如图片,引入embed的规则同[]byte | 80 | | embed.FS | 表示存储多个文件和目录的结构,[]byte和string只能存储单个文件 | 81 | 82 | * [Go1.16 中发布的内嵌静态资源功能](https://mp.weixin.qq.com/s/SiCTV7R2wA_I2nCQkC3GGQ) 83 | * [golang1.16内嵌静态资源指南](https://www.cnblogs.com/apocelipes/p/13907858.html) 84 | 85 | 86 | 87 | 88 | ## 打包命令 89 | 90 | * [https://golang.google.cn/doc/install/source#environment](https://golang.google.cn/doc/install/source#environment) 91 | * [https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63](https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63) 92 | 93 | 94 | ### 设置编译环境 95 | 96 | * [https://github.com/golang/go/blob/master/src/cmd/dist/build.go#L1513](https://github.com/golang/go/blob/master/src/cmd/dist/build.go#L1513) 97 | 98 | - `go tool dist list` 获得所有受支持平台的列表 99 | - `GOOS` 目标可执行程序运行操作系统,支持`darwin`、`freebsd`、`linux`、`windows` 100 | - `GOARCH` 目标平台的体系架构,包括`386`、`amd64`、`arm` 101 | - `CGO_ENABLED` CGO开关 102 | - `-o` 参数为指定输出程序文件名 103 | - `go clean -cache` 编译完成清理缓存 104 | - `go env -w GOFLAGS=-buildvcs=false` 不将版本控制信息(如提交哈希、提交时间)嵌入到二进制文件中 105 | 106 | 107 | **`-ldflags`选项** 108 | 109 | * 用`ldflags`给go链接器传入参数,`go tool link`查看可用值 [https://golang.org/cmd/link](https://www.godoc.org/cmd/link) 110 | 111 | > `-ldflags="-w -s"` 选项可以减小编译后的程序体积 112 | 113 | > 注意因为`date`和`go version`的输出有空格,所以`main.BUILD_TIME`和`main.GO_VERSION`必须使用引号括起来 114 | 115 | ```bash 116 | go build -ldflags "-X main.VERSION=1.0.0 -X 'main.BUILD_TIME=`date`' \ 117 | -X 'main.GO_VERSION=`go version`' -X 'main.commitHash=`git rev-parse HEAD`'" 118 | ``` 119 | 120 | 121 | 122 | ### windows 123 | 124 | > `-ldflags="-H windowsgui"` 能隐藏黑窗口 125 | 126 | ```batch 127 | # 交叉编译不支持 CGO 所以要禁用它 128 | SET CGO_ENABLED=0 129 | # 打包Linux 执行文件 130 | SET GOOS=linux 131 | # 打包386执行文件 132 | SET GOARCH=amd64 133 | 134 | go build main.go 135 | # 打包文件成其他名字 136 | go build -o test.exe main.go 137 | ``` 138 | 139 | 140 | ### linux 141 | 142 | ```bash 143 | CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go 144 | ``` 145 | 146 | 147 | ### 交叉编译代码 148 | 149 | 150 | ```go 151 | package main 152 | 153 | import ( 154 | "flag" 155 | "fmt" 156 | "os" 157 | "os/exec" 158 | "path" 159 | ) 160 | 161 | type syslist struct { 162 | GOOS string 163 | GOARCH string 164 | } 165 | 166 | var syslists [32]syslist 167 | 168 | func init() { 169 | syslists[0] = syslist{GOOS: "darwin", GOARCH: "386"} 170 | syslists[1] = syslist{GOOS: "darwin", GOARCH: "amd64"} 171 | syslists[2] = syslist{GOOS: "dragonfly", GOARCH: "amd64"} 172 | syslists[3] = syslist{GOOS: "freebsd", GOARCH: "386"} 173 | syslists[4] = syslist{GOOS: "freebsd", GOARCH: "amd64"} 174 | syslists[5] = syslist{GOOS: "freebsd", GOARCH: "arm"} 175 | syslists[6] = syslist{GOOS: "linux", GOARCH: "386"} 176 | syslists[7] = syslist{GOOS: "linux", GOARCH: "amd64"} 177 | syslists[8] = syslist{GOOS: "linux", GOARCH: "arm"} 178 | syslists[9] = syslist{GOOS: "linux", GOARCH: "arm64"} 179 | syslists[10] = syslist{GOOS: "linux", GOARCH: "ppc64"} 180 | syslists[11] = syslist{GOOS: "linux", GOARCH: "ppc64le"} 181 | syslists[12] = syslist{GOOS: "linux", GOARCH: "mips"} 182 | syslists[13] = syslist{GOOS: "linux", GOARCH: "mipsle"} 183 | syslists[14] = syslist{GOOS: "linux", GOARCH: "mips64"} 184 | syslists[15] = syslist{GOOS: "linux", GOARCH: "mips64le"} 185 | syslists[16] = syslist{GOOS: "linux", GOARCH: "s390x"} 186 | syslists[17] = syslist{GOOS: "nacl", GOARCH: "386"} 187 | syslists[18] = syslist{GOOS: "nacl", GOARCH: "amd64p32"} 188 | syslists[19] = syslist{GOOS: "nacl", GOARCH: "arm"} 189 | syslists[20] = syslist{GOOS: "netbsd", GOARCH: "386"} 190 | syslists[21] = syslist{GOOS: "netbsd", GOARCH: "amd64"} 191 | syslists[22] = syslist{GOOS: "netbsd", GOARCH: "arm"} 192 | syslists[23] = syslist{GOOS: "openbsd", GOARCH: "386"} 193 | syslists[24] = syslist{GOOS: "openbsd", GOARCH: "amd64"} 194 | syslists[25] = syslist{GOOS: "openbsd", GOARCH: "arm"} 195 | syslists[26] = syslist{GOOS: "plan9", GOARCH: "386"} 196 | syslists[27] = syslist{GOOS: "plan9", GOARCH: "amd64"} 197 | syslists[28] = syslist{GOOS: "plan9", GOARCH: "arm"} 198 | syslists[29] = syslist{GOOS: "solaris", GOARCH: "amd64"} 199 | syslists[30] = syslist{GOOS: "windows", GOARCH: "386"} 200 | syslists[31] = syslist{GOOS: "windows", GOARCH: "amd64"} 201 | } 202 | 203 | // 编译 204 | func main() { 205 | // 文件存放目录 206 | var parentFolder string 207 | // 编译输出存放的子目录 208 | var subFolder string 209 | // 文件名前缀 210 | var filePrefix string 211 | // 要编译的源文件列表 212 | var files string 213 | // scanner := bufio.NewScanner(os.Stdin) 214 | // scanner.Scan() 215 | // fmt.Println(scanner.Text()) 216 | //fmt.Println("请输文件存放目录:") 217 | // 当程序到此,会停止执行等待用户输入 218 | //fmt.Scanln(&parentFolder) 219 | 220 | flag.StringVar(&parentFolder, "p", "", "文件存放目录,默认:当前目录") 221 | flag.StringVar(&subFolder, "s", "", "编译输出存放子目录,默认:空") 222 | flag.StringVar(&filePrefix, "fp", "", "创建文件名前缀,默认:空") 223 | flag.StringVar(&files, "fs", "", "源文件列表,默认:空") 224 | flag.Parse() 225 | 226 | cmde := path.Join(parentFolder, subFolder, filePrefix) 227 | if filePrefix != "" && len(filePrefix) > 0 { 228 | cmde = cmde + "-" 229 | } 230 | for _, v := range syslists { 231 | ext := "" 232 | if v.GOOS == "windows" { 233 | ext = ".exe" 234 | } 235 | thisCmde := fmt.Sprintf("%v%v-%v%v", cmde, v.GOOS, v.GOARCH, ext) 236 | fmt.Println(thisCmde) 237 | cmd := exec.Command("go", "build", "-ldflags=-w", "-i", "-o", thisCmde, files) 238 | cmd.Env = append(os.Environ(), "GOARCH="+v.GOARCH, "GOOS="+v.GOOS) 239 | output, err := cmd.CombinedOutput() 240 | if err != nil { 241 | fmt.Println(fmt.Sprint(err) + ": " + string(output)) 242 | return 243 | } 244 | fmt.Println(string(output)) 245 | } 246 | fmt.Println("编译完成") 247 | } 248 | ``` 249 | 250 | -------------------------------------------------------------------------------- /IDE/Subversion.md: -------------------------------------------------------------------------------- 1 | # Subversion 2 | 3 | [[toc]] 4 | 5 | 6 | ## Flag 7 | 8 | + [https://github.com/topics/subversion](https://github.com/topics/subversion) 9 | 10 | - [https://github.com/apache/subversion](https://github.com/apache/subversion) 11 | - [https://subversion.apache.org](https://subversion.apache.org) 12 | - windows服务端 [https://www.visualsvn.com](https://www.visualsvn.com) 13 | - [https://sourceforge.net/projects/tortoisesvn](https://sourceforge.net/projects/tortoisesvn) 14 | - [https://tortoisesvn.net/downloads.html](https://tortoisesvn.net/downloads.html) 15 | - [https://osdn.net/projects/tortoisesvn](https://osdn.net/projects/tortoisesvn) 16 | - [https://sourceforge.net/projects/svnbook](https://sourceforge.net/projects/svnbook) 17 | - [https://svnbook.red-bean.com](https://svnbook.red-bean.com) 18 | - [https://svnbook.subversion.org.cn](https://svnbook.subversion.org.cn) 19 | - [https://github.com/mhagger/cvs2svn](https://github.com/mhagger/cvs2svn) 20 | 21 | > 按装`VisualSVN`后客户端使用报错:`执行上下文错误: 由于目标计算机积极拒绝,无法连接。`,需要在`服务`列表中找到相关服务 -> 22 | > 右键打开属性 -> 点击登录页签修改`登录身份`为`本地系统账户` -> 点击常规页签修改`启动类型`为`自启动`,再点击启动 23 | 24 | - Edge:RESTful API [https://www.collab.net/downloads/subversion](https://www.collab.net/downloads/subversion) 25 | - [http://sharpsvn.open.collab.net](http://sharpsvn.open.collab.net) 26 | - [如何在windows系统下搭建SVN服务器](https://blog.csdn.net/weixin_52588152/article/details/111659773) 27 | - [https://www.wandisco.com/source-code-management/subversion](https://www.wandisco.com/source-code-management/subversion) 28 | - [https://sliksvn.com/pub](https://sliksvn.com/pub) 29 | - [https://github.com/jenkinsci/subversion-plugin](https://github.com/jenkinsci/subversion-plugin) 30 | - [https://bitnami.com/stack/subversion](https://bitnami.com/stack/subversion) 31 | 32 | 33 | * SVN教程 [https://svnbucket.com/posts](https://svnbucket.com/posts) 34 | * [TortoiseSVN打分支、合并分支、切换分支](https://blog.csdn.net/justry_deng/article/details/82259470) 35 | 36 | 37 | ```bash 38 | # SVN不同分支,进行比对 39 | svn diff -r 1100:1323 40 | # 获取所有SVN提交作者用户名的列表 41 | # https://stackoverflow.com/questions/2494984/how-to-get-a-list-of-all-subversion-commit-author-usernames 42 | svn log --quiet | awk '/^r/ {print $3}' | sort | uniq 43 | svn log --quiet | grep "^r" | awk '{print $3}' | sort | uniq 44 | ``` 45 | 46 | > 选中要比对的一个分支,Shift+右键+选中`TorsoiseSVN` -> `diff with url`,然后填入另外一个要比对的分支url即可 47 | 48 | 49 | 50 | 51 | ## Linux安装 52 | 53 | 54 | ```bash 55 | # 检查已安装 56 | rpm -qa subversion 57 | # 安装 58 | yum -y install subversion 59 | # 查看已安装版本 60 | svnserve --version 61 | ``` 62 | 63 | **创建代码库** 64 | 65 | ```bash 66 | # 建立SVN版本库目录 67 | mkdir -p /home/svn/svnrepos/test 68 | # 创建SVN版本库 69 | svnadmin create /home/svn/svnrepos/test 70 | ``` 71 | 72 | > 执行上面的命令后,自动建立`svndata`库, 73 | > `/home/svn/svnrepos/test`文件夹包含了`conf`、`db`、`format`、`hooks`、`locks`、`README.txt`等文件,说明一个SVN库已经建立。 74 | 75 | 76 | **配置代码库** 77 | 78 | ```bash 79 | # 进入`conf`文件夹 80 | cd /home/svn/svnrepos/test/conf 81 | # 配置用户密码`passwd` 82 | vi passwd 83 | ``` 84 | 85 | - 在`[users]`节点下添加以下内容(账户=密码) 86 | 87 | ```conf 88 | # 账户=密码 89 | bajins.com=bajins.com 90 | ``` 91 | 92 | - 配置权限控制`authz` 93 | 94 | ```bash 95 | vi authz 96 | ``` 97 | 98 | > 目的是设置哪些用户可以访问哪些目录,向`authz`文件末尾追加以下内容: 99 | >> 设置`[/]`代表根目录下所有的资源,`rw`为读和写,`*`代表所有用户,先按`shift+g`跳到末尾,然后添加 100 | 101 | ```conf 102 | [/] 103 | bajins.com=rw 104 | *=r 105 | ``` 106 | 107 | - 配置服务`svnserve.conf` 108 | 109 | ```bash 110 | vi svnserve.conf 111 | ``` 112 | 113 | > 在`[general]`节点下追加以下内容 114 | 115 | ```conf 116 | # 匿名访问的权限,可以是read,write,none,默认为read 117 | anon-access=none 118 | # 使授权用户有写权限 119 | auth-access=write 120 | # 密码数据库的路径 121 | password-db=passwd 122 | # 访问控制文件 123 | authz-db=authz 124 | # 认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字 125 | realm = This Is A Repository 126 | ``` 127 | 128 | > 如果需要创建多个库就需要重复做上面2、3步,并且最后一个目录名是不一样的 129 | 130 | - 建立第2个SVN版本库目录 131 | 132 | ```bash 133 | mkdir -p /home/svn/svnrepos/test2 134 | ``` 135 | 136 | - 创建第2个SVN版本库 137 | 138 | ```bash 139 | svnadmin create /home/svn/svnrepos/test2 140 | ``` 141 | 142 | **启动** 143 | 144 | ```bash 145 | svnserve -d -r /home/svn/svnrepos/ 146 | # 查看SVN进程 147 | ps -ef|grep svn 148 | # 检测SVN端口 149 | netstat -antlp|grep svnserve 150 | # 放开端口 151 | firewall-cmd --zone=public --add-port=3690/tcp --permanent 152 | firewall-cmd --reload 153 | ``` 154 | 155 | **连接地址:`svn://host:port/仓库名`** 156 | 157 | 158 | **停止SVN** 159 | 160 | ```bash 161 | # 查找svnserve进程(PID) 162 | ps -aux | grep svnserve 163 | # 结束进程 164 | kill -9 PID 165 | #或者 166 | killall svnserve 167 | ``` 168 | 169 | 170 | 171 | 172 | -------------------------------------------------------------------------------- /Java/JavaGUI.md: -------------------------------------------------------------------------------- 1 | # JavaGUI 2 | 3 | [[toc]] 4 | 5 | 6 | ## Flag 7 | 8 | > ui库第一代是awt,第二代是swing,第三代是javafx 9 | 10 | + [https://github.com/griffon/griffon](https://github.com/griffon/griffon) 11 | + [https://github.com/griffon-plugins](https://github.com/griffon-plugins) 12 | 13 | 14 | * [GUI 设计和 UI 设计有什么区别?](https://www.zhihu.com/question/20366692) 15 | * [GUI和UI](https://www.cnblogs.com/anke-z/p/12404215.html) 16 | 17 | 18 | 19 | ## JavaFX 20 | 21 | + [https://github.com/topics/javafx](https://github.com/topics/javafx) 22 | + [https://github.com/topics/openjfx](https://github.com/topics/openjfx) 23 | + [https://github.com/topics/javafx-desktop-apps](https://github.com/topics/javafx-desktop-apps) 24 | 25 | 26 | * [https://github.com/openjdk/jfx](https://github.com/openjdk/jfx) 27 | * [https://docs.oracle.com/javase/8/javafx/user-interface-tutorial](https://docs.oracle.com/javase/8/javafx/user-interface-tutorial) 28 | * [https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html](https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html) 29 | * ~~[https://github.com/javafxports/openjdk-jfx](https://github.com/javafxports/openjdk-jfx)~~ 30 | * [https://github.com/openjfx](https://github.com/openjfx) 31 | * [https://openjfx.io](https://openjfx.io) 32 | * [https://openjfx.cn](https://openjfx.cn) 33 | * [https://code.makery.ch/zh-cn/library/javafx-tutorial](https://code.makery.ch/zh-cn/library/javafx-tutorial) 34 | * [https://segmentfault.com/t/javafx](https://segmentfault.com/t/javafx) 35 | * [https://gluonhq.com/products/javafx](https://gluonhq.com/products/javafx) 36 | * SceneBuilder [https://gluonhq.com/products/scene-builder](https://gluonhq.com/products/scene-builder) 37 | * [https://www.oracle.com/cn/java/technologies/javase/javafxscenebuilder-info.html](https://www.oracle.com/cn/java/technologies/javase/javafxscenebuilder-info.html) 38 | * [SceneBuilder例子](https://gluonhq.com/developers/samples) 39 | 40 | - 文档 [https://github.com/FXDocs/docs](https://github.com/FXDocs/docs) 41 | 42 | 43 | 44 | ### 第三方依赖 45 | 46 | + [https://github.com/topics/javafx-library](https://github.com/topics/javafx-library) 47 | + [https://github.com/topics/javafx-8](https://github.com/topics/javafx-8) 48 | + [https://github.com/mhrimaz/AwesomeJavaFX](https://github.com/mhrimaz/AwesomeJavaFX) 49 | + [https://github.com/topics/fontawesomefx](https://github.com/topics/fontawesomefx) 50 | + [https://bitbucket.org/Jerady/fontawesomefx](https://bitbucket.org/Jerady/fontawesomefx) 51 | + [https://bintray.com/jerady/maven/FontAwesomeFX](https://bintray.com/jerady/maven/FontAwesomeFX) 52 | + [https://github.com/Jerady/fontawesomefx-jigsaw-modules](https://github.com/Jerady/fontawesomefx-jigsaw-modules) 53 | + [https://github.com/JFXtras](https://github.com/JFXtras) 54 | + [https://github.com/JonathanGiles](https://github.com/JonathanGiles) 55 | + [https://github.com/Drombler](https://github.com/Drombler) 56 | + [https://github.com/jfree](https://github.com/jfree) 57 | + [https://github.com/gluonhq](https://github.com/gluonhq) 58 | 59 | 60 | 61 | - [https://github.com/dustinkredmond](https://github.com/dustinkredmond) 62 | - [https://github.com/FXMisc](https://github.com/FXMisc) 63 | - 富文本 [https://github.com/FXMisc/RichTextFX](https://github.com/FXMisc/RichTextFX) 64 | - SVG [https://github.com/blackears/svgSalamander](https://github.com/blackears/svgSalamander) 65 | - [https://github.com/piusalfred/ikonfx](https://github.com/piusalfred/ikonfx) 66 | - [https://github.com/openrndr/openrndr](https://github.com/openrndr/openrndr) 67 | - 扁平UI [https://github.com/JFormDesigner/FlatLaf](https://github.com/JFormDesigner/FlatLaf) 68 | - [https://github.com/mgarin/weblaf](https://github.com/mgarin/weblaf) 69 | - UI 控件 [https://github.com/controlsfx](https://github.com/controlsfx) 70 | - [https://github.com/eclipse/nebula](https://github.com/eclipse/nebula) 71 | - [https://github.com/dlsc-software-consulting-gmbh](https://github.com/dlsc-software-consulting-gmbh) 72 | - [https://github.com/metawidget](https://github.com/metawidget) 73 | - [https://github.com/palexdev/MaterialFX](https://github.com/palexdev/MaterialFX) 74 | - [https://github.com/jfx-ensemble](https://github.com/jfx-ensemble) 75 | - [https://github.com/mkpaz/atlantafx](https://github.com/mkpaz/atlantafx) 76 | - 动画库 [https://github.com/Typhon0/AnimateFX](https://github.com/Typhon0/AnimateFX) 77 | - 主题 [https://github.com/weisJ/darklaf](https://github.com/weisJ/darklaf) 78 | - [https://github.com/bulenkov/Darcula](https://github.com/bulenkov/Darcula) 79 | - Google Material Design [https://github.com/jfoenixadmin/JFoenix](https://github.com/jfoenixadmin/JFoenix) 80 | - Bootstrap样式 [https://github.com/dicolar/jbootx](https://github.com/dicolar/jbootx) 81 | - [https://github.com/edvin/tornadofx-controls](https://github.com/edvin/tornadofx-controls) 82 | - [https://github.com/kordamp/bootstrapfx](https://github.com/kordamp/bootstrapfx) 83 | - [https://github.com/aalmiray](https://github.com/aalmiray) 84 | - 仪表板 [https://github.com/HanSolo](https://github.com/HanSolo) 85 | - [https://github.com/fair-acc/chart-fx](https://github.com/fair-acc/chart-fx) 86 | - 等离子画布 [https://github.com/bertjan/javafx-canvas-plasma](https://github.com/bertjan/javafx-canvas-plasma) 87 | - 进度条 [https://github.com/ctongfei/progressbar](https://github.com/ctongfei/progressbar) 88 | - 3D [https://github.com/JogAmp](https://github.com/JogAmp) 89 | - [https://github.com/saalfeldlab/paintera](https://github.com/saalfeldlab/paintera) 90 | - [https://github.com/FXyz/FXyz](https://github.com/FXyz/FXyz) 91 | - 跨平台访问本机API [https://github.com/LWJGL](https://github.com/LWJGL) 92 | - [https://github.com/lwjglgamedev/lwjglbook-bookcontents](https://github.com/lwjglgamedev/lwjglbook-bookcontents) 93 | - 嵌入chrome内核浏览器 [https://jxbrowser-support.teamdev.com](https://jxbrowser-support.teamdev.com) 94 | - [https://github.com/kingsleyljc/web_browser](https://github.com/kingsleyljc/web_browser) 95 | - JavaFX的游戏超集 [https://github.com/AlmasB/FXGL](https://github.com/AlmasB/FXGL) 96 | - 缩放 [https://github.com/miho/ScaledFX](https://github.com/miho/ScaledFX) 97 | - [https://github.com/tom91136/GestureFX](https://github.com/tom91136/GestureFX) 98 | - [https://github.com/goxr3plus/FX-BorderlessScene](https://github.com/goxr3plus/FX-BorderlessScene) 99 | - 布局算法 [https://github.com/AmaronUI/amaronui-layouts](https://github.com/AmaronUI/amaronui-layouts) 100 | - [https://github.com/kirill-grouchnikov/radiance](https://github.com/kirill-grouchnikov/radiance) 101 | - [https://github.com/mikaelgrev/miglayout](https://github.com/mikaelgrev/miglayout) 102 | - 无边框窗口 [https://github.com/micheljung/fxstage](https://github.com/micheljung/fxstage) 103 | - [https://github.com/micheljung/jfx-waitomo-theme](https://github.com/micheljung/jfx-waitomo-theme) 104 | - 数据框可视化 [https://github.com/PatMartin/Dex](https://github.com/PatMartin/Dex) 105 | - 校验 [https://github.com/effad/ValidatorFX](https://github.com/effad/ValidatorFX) 106 | - ffmpeg [https://github.com/a-schild/jave2](https://github.com/a-schild/jave2) 107 | - 图标包 [https://github.com/kordamp/ikonli](https://github.com/kordamp/ikonli) 108 | - 键盘和鼠标 [https://github.com/kwhat/jnativehook](https://github.com/kwhat/jnativehook) 109 | - 数据绑定 [https://github.com/TomasMikula/EasyBind](https://github.com/TomasMikula/EasyBind) 110 | - 终端仿真器 [https://github.com/javaterminal/TerminalFX](https://github.com/javaterminal/TerminalFX) 111 | - WEB集成 [https://github.com/JPro-one](https://github.com/JPro-one) 112 | - MVVM模式 [https://github.com/sialcasa/mvvmFX](https://github.com/sialcasa/mvvmFX) 113 | 114 | 115 | 116 | * Maven打包 [https://github.com/javafx-maven-plugin](https://github.com/javafx-maven-plugin) 117 | * UAC提权 [https://github.com/dyorgio/run-as-root](https://github.com/dyorgio/run-as-root) 118 | * CS课程 [https://github.com/Nurtak/ObjectGraphVisualization](https://github.com/Nurtak/ObjectGraphVisualization) 119 | * [https://github.com/dlemmermann/LayoutFX](https://github.com/dlemmermann/LayoutFX) 120 | 121 | 122 | 123 | ### Other 124 | 125 | * [JavaFX最新消息](http://fxexperience.com) 126 | * [使用Java 9的模块化来构建零依赖的原生应用](https://www.tuicool.com/articles/eiu2EnR) 127 | * [JavaFX、OSGi、Eclipse开源资料](http://www.javafxchina.net/main) 128 | * [JavaFx+Springboot+Maven 开发打包教程](https://segmentfault.com/a/1190000014037443) 129 | * [JavaFX 实现截图](http://www.private-blog.com/2018/01/29/javafx-%E5%AE%9E%E7%8E%B0webview%E6%88%AA%E5%9B%BE) 130 | * [IDEA通过Maven打包JavaFX工程(OpenJFX11)](https://www.cnblogs.com/6b7b5fc3/p/12990161.html) 131 | * [创建JavaFX项目并用Maven打包](https://www.cnblogs.com/zjwno1/p/13272380.html) 132 | 133 | 134 | 135 | ### 示例项目 136 | 137 | * Java多线程下载GUI [https://github.com/fengxiaocan/Downloader](https://github.com/fengxiaocan/Downloader) 138 | * [https://github.com/proxyee-down-org/proxyee-down](https://github.com/proxyee-down-org/proxyee-down) 139 | * 基于javafx8代码生成器 [https://github.com/EliMirren](https://github.com/EliMirren) 140 | * [https://github.com/fuzhengwei/NaiveChat](https://github.com/fuzhengwei/NaiveChat) 141 | * 词汇猎人 [https://github.com/VocabHunter/VocabHunter](https://github.com/VocabHunter/VocabHunter) 142 | * 播放器 [https://github.com/goxr3plus/XR3Player](https://github.com/goxr3plus/XR3Player) 143 | * 音视频转换 [https://github.com/goxr3plus/XR3Converter](https://github.com/goxr3plus/XR3Converter) 144 | * [https://github.com/yhy0/ExpDemo-JavaFX](https://github.com/yhy0/ExpDemo-JavaFX) 145 | * [https://github.com/ZhouRuikang015/javafx-havefun](https://github.com/ZhouRuikang015/javafx-havefun) 146 | * [https://github.com/WBB1997/BingWallpaper](https://github.com/WBB1997/BingWallpaper) 147 | * 翻译 [https://github.com/omegat-org/omegat](https://github.com/omegat-org/omegat) 148 | * [https://sourceforge.net/projects/omegat](https://sourceforge.net/projects/omegat) 149 | * 纸牌游戏 [https://github.com/Card-Forge/forge](https://github.com/Card-Forge/forge) 150 | * PDF [https://github.com/torakiki/pdfsam](https://github.com/torakiki/pdfsam) 151 | * 权限管理 [https://gitee.com/lwdillon/dillon-boot-fx](https://gitee.com/lwdillon/dillon-boot-fx) 152 | * 空间任务设计 [https://ai-solutions.com/restricted/freeflyer-downloads](https://ai-solutions.com/restricted/freeflyer-downloads) 153 | -------------------------------------------------------------------------------- /Other/专业术语.md: -------------------------------------------------------------------------------- 1 | # 专业术语 2 | 3 | [[toc]] 4 | 5 | 6 | ## Flag 7 | 8 | * 英语词汇 [http://testyourvocab.com](http://testyourvocab.com) 9 | * [https://testyourculture.com](https://testyourculture.com) 10 | * [https://liuxue.ef.com.cn/epi](https://liuxue.ef.com.cn/epi) 11 | * [https://freerice.com/categories/english-vocabulary](https://freerice.com/categories/english-vocabulary) 12 | * [https://sourceforge.net/projects/stardict-4](https://sourceforge.net/projects/stardict-4) 13 | * [https://github.com/huzheng001](https://github.com/huzheng001) 14 | * [https://oldwestenglish.github.io/grammar](https://oldwestenglish.github.io/grammar) 15 | * 黑客背单词 [https://sourceforge.net/projects/reciteword](https://sourceforge.net/projects/reciteword) 16 | * [https://github.com/JuanitoFatas/Computer-Science-Glossary](https://github.com/JuanitoFatas/Computer-Science-Glossary) 17 | * [编程开发常用词汇](https://blog.csdn.net/qq_31136349/article/details/110938087) 18 | * [认知](https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&__biz=MzU2MTgxODgwNA==&album_id=1913317802694737924) 19 | 20 | 21 | ## 中文 22 | 23 | - 出栈 24 | - 入栈 25 | - 压栈 26 | - 可变性 27 | - 偏移性 28 | - 有状态对象(Stateful Bean) 29 | - 无状态对象(Stateless Bean) 30 | - 域 31 | - 泛型 32 | - 进制 33 | - 补码 34 | - 原码 35 | - 反码 36 | - zigzag 37 | - 显式声明和隐式声明 38 | - 形参/实参 39 | - 重载/重构/重写 40 | - 覆盖/覆写 41 | - 指令重排 42 | - 内存屏障 43 | - 原子性 44 | - 可见性 45 | - 有序性 46 | - Volatile 47 | - 弱类型: 允许不兼容的类型进行运算,如数字除字符串是合法的 48 | - 强类型 49 | - 动态类型:声明一个变量之后,可以存储(指向)不同类型,如变量可以一会是字符串,一会是浮点 50 | - 静态类型 51 | - 增量更新/热更新/强更新/差量更新 52 | - 编码 53 | - 编译 54 | - 序列 55 | - 队列 56 | - 侧加载 57 | - 代码管理 58 | - 冒烟测试 59 | - 回归测试 60 | - 持续测试 61 | - 功能测试 62 | - 集成测试 63 | - 系统测试 64 | - 单元测试 65 | - 基准测试 66 | - 模糊测试 67 | - 持续开发 68 | - 持续集成 69 | - 持续构建 70 | - 持续部署 71 | - 持续监控 72 | - 敏捷流程 73 | - 哨兵(Sentinel) 74 | - 从节点(replication/replica/slave) 75 | - 全限定类名 76 | - 非限定类名 77 | - 解构(Destructuring) 78 | - 展开运算符(Spread Operator) 79 | - 语言交互接口(FFI, Foreign Function Interface) 80 | - ABI(Application Binary Interface): 应用程序二进制接口 81 | - 材料化视图(实体化视图、物化视图):一种特殊的数据库视图 82 | - 索引视图 83 | - 分区视图 84 | - 类型推断/类型推理/类型推导(Type inference/Type deduction) 85 | - 抽象数据类型(ADT,Abstract Data Type) 86 | - 边缘平台架构(edge platform) 87 | - 巴士因子:一支团队里有多少成员意外被巴士撞了(或者受其他偶发因素影响而无法继续工作),才会导致项目陷入停滞。 88 | - MCDC测试覆盖率:确定代码修改条件的决策覆盖率。也就是说测试必须保证所生成二进制代码中的每个分支操作至少跑通一次。 89 | - 正向代理-传统模式 90 | - 正向代理-透明模式 91 | - 反向代理模式 92 | - 负载均衡(Load Balancing) 93 | - 代码检查工具(Linter) 94 | 95 | 96 | 97 | ## 英文 98 | 99 | - `CURD` 100 | - `CRUD` 101 | 102 | 103 | 104 | **常用词汇** 105 | 106 | - `add` 107 | - `edit` 108 | - `delete` 109 | - `del` 110 | - `query` 111 | - `get` 112 | - `select` 113 | - `insert` 114 | - `write` 115 | - `read` 116 | - `out` 117 | - `input` 118 | - `in` 119 | - `of` 120 | - `for` 121 | - `by` 122 | - `exist` 123 | - `not` 124 | - `is` 125 | - `and` 126 | - `has` 127 | - `is` 128 | - `can` 129 | - `allow` 130 | - `defunct` 131 | - `orig` 132 | - `target` 133 | - `dest` 134 | - `source` 135 | - `notice` 136 | - `inform` 137 | - `notify` 138 | - `notification` 139 | - `apprize` 140 | - `native` 141 | - `local` 142 | - `locale` 143 | - `location` 144 | - `retrieve` 145 | - `this` 146 | - `self` 147 | - `cls` 148 | - `clz` 149 | - `class` 150 | - `clazz` 151 | - `sideload` 152 | - `Sideloading` 旁加载/侧加载 153 | - `chaos` 混沌测试 154 | 155 | 156 | **月份/星期** 157 | 158 | - 一月:January(Jan) 159 | - 二月:February(Feb) 160 | - 三月:March(Mar) 161 | - 四月:April(Apr) 162 | - 五月:May(May) 163 | - 六月:June(Jun) 164 | - 七月:July(Jul) 165 | - 八月:August(Aug) 166 | - 九月:September(Sept) 167 | - 十月:October(Oct) 168 | - 十一月:November(Nov) 169 | - 十二月:December(Dec) 170 | - 星期一:Monday(Mon) 171 | - 星期二:Tuesday(Tues) 172 | - 星期三:Wednesday(Wed) 173 | - 星期四:Thursday(Thur) 174 | - 星期五:Friday(Fri) 175 | - 星期六:Saturday(Sat) 176 | - 星期日:Sunday(Sun) -------------------------------------------------------------------------------- /Python/Python第三方库.md: -------------------------------------------------------------------------------- 1 | # Python第三方库 2 | 3 | [[toc]] 4 | 5 | 6 | ## FLAG 7 | 8 | 9 | + [https://github.com/jobbole/awesome-python-cn](https://github.com/jobbole/awesome-python-cn) 10 | + [https://github.com/vinta/awesome-python](https://github.com/vinta/awesome-python) 11 | + [Python 常用的标准库以及第三方库有哪些?](https://www.zhihu.com/question/20501628/answers/updated) 12 | + [https://github.com/MagicStack](https://github.com/MagicStack) 13 | 14 | 15 | * 应用监控 [https://github.com/SolarEdgeTech/pyctuator](https://github.com/SolarEdgeTech/pyctuator) 16 | * [Python图像处理库—-Pillow](https://www.lizenghai.com/archives/17611.html) 17 | * 基于异步库 [https://github.com/aio-libs](https://github.com/aio-libs) 18 | * [https://github.com/Tinche/aiofiles](https://github.com/Tinche/aiofiles) 19 | * 协程 [https://github.com/python-greenlet/greenlet](https://github.com/python-greenlet/greenlet) 20 | * [https://github.com/gevent/gevent](https://github.com/gevent/gevent) 21 | * [https://greenlet.readthedocs.io](https://greenlet.readthedocs.io) 22 | * [https://github.com/dask/dask](https://github.com/dask/dask) 23 | * HTTP [https://github.com/psf/requests](https://github.com/psf/requests) 24 | * [https://github.com/requests](https://github.com/requests) 25 | * [https://github.com/not-kennethreitz](https://github.com/not-kennethreitz) 26 | * [https://github.com/urllib3/urllib3](https://github.com/urllib3/urllib3) 27 | * [https://github.com/tornadoweb/tornado](https://github.com/tornadoweb/tornado) 28 | * [https://www.tornadoweb.org](https://www.tornadoweb.org) 29 | * [https://github.com/twisted](https://github.com/twisted) 30 | * [https://github.com/encode/httpx](https://github.com/encode/httpx) 31 | * [https://github.com/httplib2/httplib2](https://github.com/httplib2/httplib2) 32 | * [https://github.com/gabrielfalcao/HTTPretty](https://github.com/gabrielfalcao/HTTPretty) 33 | * [https://github.com/projectdiscovery/httpx](https://github.com/projectdiscovery/httpx) 34 | * 日志 [https://github.com/Delgan/loguru](https://github.com/Delgan/loguru) 35 | * [https://github.com/jpadilla/pyjwt](https://github.com/jpadilla/pyjwt) 36 | * [https://github.com/mhammond/pywin32](https://github.com/mhammond/pywin32) 37 | * [winreg --- Windows 注册表访问](https://docs.python.org/zh-cn/3/library/winreg.html) 38 | * 简繁转换 [https://github.com/gumblex/zhconv](https://github.com/gumblex/zhconv) 39 | * 開放中文轉換 [https://github.com/BYVoid/OpenCC](https://github.com/BYVoid/OpenCC) 40 | * [https://github.com/pyecharts/pyecharts](https://github.com/pyecharts/pyecharts) 41 | * 获取字符编码 [https://github.com/chardet/chardet](https://github.com/chardet/chardet) 42 | * [https://github.com/PyYoshi/cChardet](https://github.com/PyYoshi/cChardet) 43 | * 分布式任务 [https://github.com/celery/celery](https://github.com/celery/celery) 44 | * [https://github.com/open-source-translation/celery-cn](https://github.com/open-source-translation/celery-cn) 45 | * [https://www.celerycn.io](https://www.celerycn.io) 46 | * [https://github.com/dask](https://github.com/dask) 47 | * web [https://github.com/tiangolo/fastapi](https://github.com/tiangolo/fastapi) 48 | * [https://github.com/pallets/flask](https://github.com/pallets/flask) 49 | * [https://dormousehole.readthedocs.io](https://dormousehole.readthedocs.io) 50 | * [https://github.com/greyli/helloflask](https://github.com/greyli/helloflask) 51 | * [https://github.com/vincentmi/vnzmi](https://github.com/vincentmi/vnzmi) 52 | * [https://github.com/yuxiaoy1/chatfairy](https://github.com/yuxiaoy1/chatfairy) 53 | * [https://github.com/AnswerDotAI/fasthtml](https://github.com/AnswerDotAI/fasthtml) 54 | * [https://github.com/reflex-dev/reflex](https://github.com/reflex-dev/reflex) 55 | * [https://github.com/Pylons](https://github.com/Pylons) 56 | * [https://github.com/bottlepy/bottle](https://github.com/bottlepy/bottle) 57 | * [https://github.com/frappe/frappe](https://github.com/frappe/frappe) 58 | * [https://yhbt.net/unicorn.git](https://yhbt.net/unicorn.git) 59 | * WSGI [https://github.com/benoitc/gunicorn](https://github.com/benoitc/gunicorn) 60 | * ASGI [https://github.com/django/asgiref](https://github.com/django/asgiref) 61 | * [https://github.com/encode/uvicorn](https://github.com/encode/uvicorn) 62 | * [https://github.com/zauberzeug/nicegui](https://github.com/zauberzeug/nicegui) 63 | * [https://github.com/pynecone-io/pynecone](https://github.com/pynecone-io/pynecone) 64 | * [https://github.com/reactive-python/reactpy](https://github.com/reactive-python/reactpy) 65 | * [https://github.com/ObservedObserver/streamlit-shadcn-ui](https://github.com/ObservedObserver/streamlit-shadcn-ui) 66 | * 定时任务 [https://github.com/agronholm/apscheduler](https://github.com/agronholm/apscheduler) 67 | * [https://apscheduler.readthedocs.io](https://apscheduler.readthedocs.io) 68 | * ORM [https://github.com/sqlalchemy/sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) 69 | * [https://github.com/ponyorm/pony](https://github.com/ponyorm/pony) 70 | * [https://github.com/python-gino](https://github.com/python-gino) 71 | * 打印输出为表格 [https://github.com/jazzband/prettytable](https://github.com/jazzband/prettytable) 72 | * [https://github.com/astanin/python-tabulate](https://github.com/astanin/python-tabulate) 73 | * SQLModel模型 [https://github.com/tiangolo/sqlmodel](https://github.com/tiangolo/sqlmodel) 74 | * 串口 [https://github.com/pyserial/pyserial](https://github.com/pyserial/pyserial) 75 | * 模糊测试 [https://github.com/google/clusterfuzz](https://github.com/google/clusterfuzz) 76 | * [https://github.com/jtpereyda/boofuzz](https://github.com/jtpereyda/boofuzz) 77 | * [https://github.com/nccgroup/fuzzowski](https://github.com/nccgroup/fuzzowski) 78 | * 图片 [https://github.com/imageio/imageio](https://github.com/imageio/imageio) 79 | * SQL查询日志文件 [https://github.com/samuel/squawk](https://github.com/samuel/squawk) 80 | * 编码检测 [https://github.com/PyYoshi/uchardet](https://github.com/PyYoshi/uchardet) 81 | * 截图 [https://github.com/BoboTiG/python-mss](https://github.com/BoboTiG/python-mss) 82 | * 加密 [https://github.com/pyca/cryptography](https://github.com/pyca/cryptography) 83 | * [https://github.com/cunzaizhuyi/hashplate-cn](https://github.com/cunzaizhuyi/hashplate-cn) 84 | * FFI [https://github.com/wlav/cppyy](https://github.com/wlav/cppyy) 85 | * [https://github.com/python-cffi/cffi](https://github.com/python-cffi/cffi) 86 | * [https://github.com/scipy/weave](https://github.com/scipy/weave) 87 | * 限流 [https://github.com/ZhuoZhuoCrayon/throttled-py](https://github.com/ZhuoZhuoCrayon/throttled-py) 88 | * JSON [https://github.com/simplejson/simplejson](https://github.com/simplejson/simplejson) 89 | 90 | 91 | 92 | - [https://github.com/zopefoundation](https://github.com/zopefoundation) 93 | - 交互式计算 [https://github.com/ipython](https://github.com/ipython) 94 | - 纠正以前的控制台命令中的错误 [https://github.com/nvbn/thefuck](https://github.com/nvbn/thefuck) 95 | - 命令行HTTP客户端 [https://github.com/jakubroztocil/httpie](https://github.com/jakubroztocil/httpie) 96 | - SSHv2协议 [https://github.com/paramiko/paramiko](https://github.com/paramiko/paramiko) 97 | - shell [https://github.com/xonsh/xonsh](https://github.com/xonsh/xonsh) 98 | - 终端样式 [https://github.com/willmcgugan/rich](https://github.com/willmcgugan/rich) 99 | - [https://github.com/urwid/urwid](https://github.com/urwid/urwid) 100 | - [https://github.com/topics/expect](https://github.com/topics/expect) 101 | - [https://www.nist.gov/services-resources/software/expect](https://www.nist.gov/services-resources/software/expect) 102 | - [https://github.com/clarkwang/sexpect](https://github.com/clarkwang/sexpect) 103 | - 自动化交互式 [https://github.com/pexpect/pexpect](https://github.com/pexpect/pexpect) 104 | - [https://github.com/pytest-dev/pytest](https://github.com/pytest-dev/pytest) 105 | - [https://github.com/jacebrowning/pytest-expecter](https://github.com/jacebrowning/pytest-expecter) 106 | - [https://github.com/fabric](https://github.com/fabric) 107 | - [https://github.com/pyinvoke/invoke](https://github.com/pyinvoke/invoke) 108 | - [https://github.com/paramiko](https://github.com/paramiko) 109 | - [https://github.com/topics/ops](https://github.com/topics/ops) 110 | - 访问java类库 [https://github.com/jpype-project/jpype](https://github.com/jpype-project/jpype) 111 | 112 | 113 | 114 | **HTML文档解析** 115 | 116 | - Beautiful Soup 4 的中文文档 [https://github.com/DeronW/beautifulsoup](https://github.com/DeronW/beautifulsoup) 117 | - [https://beautifulsoup.readthedocs.io](https://beautifulsoup.readthedocs.io) 118 | - [https://github.com/html5lib/html5lib-python](https://github.com/html5lib/html5lib-python) 119 | - 类似于jQuery的python库 [https://github.com/gawel/pyquery](https://github.com/gawel/pyquery) 120 | - [https://github.com/lxml/lxml](https://github.com/lxml/lxml) 121 | - [https://github.com/psf/requests-html](https://github.com/psf/requests-html) 122 | - [https://github.com/scrapy/parsel](https://github.com/scrapy/parsel) 123 | - [https://github.com/edgewall/genshi](https://github.com/edgewall/genshi) 124 | - A​​tom和RSS [https://github.com/kurtmckee/feedparser](https://github.com/kurtmckee/feedparser) 125 | 126 | 127 | 128 | **PING/TCPING** 129 | 130 | + [https://github.com/topics/ping](https://github.com/topics/ping) 131 | + [https://github.com/topics/icmp-ping](https://github.com/topics/icmp-ping) 132 | + [https://github.com/topics/tcp](https://github.com/topics/tcp) 133 | + [https://github.com/topics/tcping](https://github.com/topics/tcping) 134 | 135 | - [用Python实现PING](https://blog.csdn.net/weixin_41855723/article/details/96184297) 136 | 137 | * [https://github.com/kyan001/ping3](https://github.com/kyan001/ping3) 138 | * [https://github.com/romana/multi-ping](https://github.com/romana/multi-ping) 139 | * [https://github.com/zhengxiaowai/tcping](https://github.com/zhengxiaowai/tcping) 140 | * [https://github.com/rami3l/ting](https://github.com/rami3l/ting) 141 | * [https://github.com/alessandromaggio/pythonping](https://github.com/alessandromaggio/pythonping) 142 | 143 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | --- 2 | home: true 3 | actionText: Work-Life Balance → 4 | actionLink: /#命令 5 | --- 6 | 7 | # 使用 8 | 9 | ::: tip 10 | 基于本仓库可快速创建你自己的文档网站。 11 | [高亮语法支持列表](https://prismjs.com/#supported-languages) 12 | [PrismJS](https://github.com/PrismJS)[Shiki](https://github.com/shikijs/shiki) 13 | ::: 14 | ::: tip 15 | 编译时自动帮你配置菜单栏和侧边栏,最多三层目录结构。 16 | ::: 17 | ::: tip 18 | 非常多的热心开发者开源主题[vuepress-theme](https://github.com/search?q=vuepress-theme) 19 | ::: 20 | 21 | ::: tip 22 | 如果觉得使用[VuePress](https://v2.vuepress.vuejs.org)[vitepress](https://vitepress.vuejs.org)不便, 23 | 可使用静态博客写作客户端[gridea](https://github.com/getgridea/gridea) 24 | ::: 25 | 26 | ## 目录结构 27 | 28 | * [官方标准目录结构](https://vuepress.vuejs.org/zh/guide/directory-structure.html) 29 | 30 | ``` 31 | . 32 | │ .gitignore git忽略文件 33 | │ package-lock.json NPM依赖配置文件 34 | │ yarn.lock yarn依赖配置文件 35 | │ package.json 项目配置文件 36 | │ README.md 首页md文件 37 | │ 38 | ├─.github GitHub配置目录 39 | │ └─workflows Actions工作流目录 40 | │ deloy.yml 项目的Actions部署配置 41 | │ 42 | ├─.vuepress 用于存放VuePress的配置、组件、静态资源等。 43 | │ │ config.js VuePress配置 44 | │ │ nav.js 除创建的目录之外,自定义添加的导航栏 45 | │ │ push.js 自定义推送脚本 46 | │ │ utils.js 侧边栏和菜单栏自动配置工具 47 | │ │ 48 | │ ├─styles 用于存放样式相关的文件 49 | │ │ │ 50 | │ │ └─index.styl 自定义全局样式文件 51 | │ │ 52 | │ ├─public 静态资源目录 53 | │ │ │ CNAME CNAME文件指定域名,防止发布时被清空 54 | │ │ │ manifest.json 5+App(HTML5 Plus移动App)的配置文件 55 | │ │ │ static.json heroku使用buildpack静态部署配置文件 56 | │ │ │ 57 | │ │ ├─assets css/img/js等默认的存放路径 58 | │ │ │ │ 59 | │ │ │ └─js 自定义js文件存放目录 60 | │ │ │ 61 | │ │ ├─files 可直接访问并下载的文件存放目录 62 | │ │ │ 63 | │ │ └─images 存放所有文档的图片目录 64 | │ │ │ 65 | │ │ └─icons 存放图标目录 66 | │ │ 67 | │ └─theme 主题存放目录 68 | │ 69 | ├─docs 编译后的静态资源文件输出目录 70 | │ 71 | │ 72 | ......其他自己的md文档或文件夹,都会打包到docs文件夹下,md文件会编译成html 73 | ``` 74 | **也就是你只需要遵从以上目录结构来修改你自己的文档即可使用。** 75 | ::: warning 注意 76 | 配置文件中的注释文字部分,请结合[VuePress官方文档](https://vuepress.vuejs.org/zh/config)一定理解其意义再修改配置! 77 | ::: 78 | 79 | ## 命令 80 | 81 | [![](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#github.com/bajins/notes-vuepress) 82 | 83 | ``` bash 84 | # 先克隆本仓库 85 | git clone https://github.com/bajins/notes-vuepress.git 86 | 87 | # 保留上面目录结构列出的文件和文件夹,其他的全部删除 88 | 89 | # 使用前请自行安装Node.js环境 90 | 91 | # 安装项目的全部依赖 92 | npm install 93 | 94 | # 这时创建并书写你自己的md文档 95 | 96 | # 开始运行开发环境,然后访问窗口中的路径 97 | npm run dev 98 | 99 | # 修改.vuepress/public/CNAME中的域名 100 | 101 | # 如果发布到GitHub请见:项目的Actions部署配置 102 | # Actions教程:https://www.bajins.com/IDE/Git%E6%9C%8D%E5%8A%A1.html#actions 103 | 104 | ``` 105 | 106 | ::: warning 注意 107 | 请确保你的 Node.js 版本 >= 8.6。 108 | ::: 109 | -------------------------------------------------------------------------------- /Shell/WindowsVBAScript.md: -------------------------------------------------------------------------------- 1 | # VBAScript 2 | 3 | [[toc]] 4 | 5 | 6 | ## Flag 7 | 8 | > Office Visual Basic for Applications (VBA) 9 | 10 | + [https://github.com/MicrosoftDocs/VBA-Docs](https://github.com/MicrosoftDocs/VBA-Docs) 11 | + [Visual Basic for Applications (VBA) 语言参考](https://docs.microsoft.com/zh-cn/office/vba/api/overview/language-reference) 12 | + Microsoft Office Development [https://bettersolutions.com](https://bettersolutions.com) 13 | + [VBA学习笔记](https://www.zhihu.com/people/xia-xi-lan/posts) 14 | + [xcel之VBA简单宏编程](https://blog.csdn.net/wordsin/article/details/80575615) 15 | + [VBA学习笔记](https://www.zhihu.com/people/xia-xi-lan/posts) 16 | + [xcel之VBA简单宏编程](https://blog.csdn.net/wordsin/article/details/80575615) 17 | + [https://docs.microsoft.com/zh-cn/javascript/api](https://docs.microsoft.com/zh-cn/javascript/api) 18 | + [https://docs.microsoft.com/zh-cn/office/dev/add-ins/excel](https://docs.microsoft.com/zh-cn/office/dev/add-ins/excel) 19 | 20 | 21 | - `=IF(IFERROR(FIND("不良",B2),0),"不良品仓",IF(IFERROR(FIND("待检",B2),0),"待检仓",IF(IFERROR(FIND("报废",B2),0),"报废仓",IF(IFERROR(FIND("良",B2),0),"良品仓",""))))` 22 | - 匹配单元格左边英文及其他字符=RegexString(A1,"[^\u4e00-\u9fa5]+") 23 | - 匹配单元格右边中文及其他字符=RegexString(A1,"[\u4e00-\u9fa5].*") 24 | 25 | ```vb 26 | Function RegexString(rng As Range, str As String) 27 | '第一个参数rng为区域保持不变, 添加第二个参数str(作为正则表达式) 28 | With CreateObject("VBscript.regexp") 29 | .Global = True 30 | .Pattern = str '表达式,直接从用户函数的第二个参数中调用 31 | If .Execute(rng).Count = 0 Then 32 | RegexString = "" 33 | Else 34 | RegexString = .Execute(rng)(0) 35 | End If 36 | End With 37 | End Function 38 | ``` 39 | 40 | 41 | 42 | ## 分割字符串并统计 43 | 44 | ```vb 45 | 'https://blog.csdn.net/wordsin/article/details/80575615 46 | '自定义函数用于工作表时,必须是被动式的,只是返回一个值,不能处理单元格或在工作表上修改,批注是个例外,不能调用range的方法,如:Find,Range.Replace例外 47 | Function ReSplit(rng As Range) 48 | Dim newStr As String 49 | Dim countNum As Integer 50 | 51 | old = Strings.Split(rng, " ") 52 | For Each e In old 53 | If e <> "" Then 54 | 'MsgBox TypeName(e) 55 | 'Replace(, "/", "") 56 | With CreateObject("VBSCRIPT.REGEXP") 57 | .Global = True 58 | .IgnoreCase = True 59 | .Pattern = "([a-zA-Z]+)([0-9]+)-([0-9]+)" 60 | If .test(e) Then 61 | '执行正则表达式,获取子匹配列表 62 | Set da = .Execute(e)(0).SubMatches 63 | last = da(0) 64 | st = da(1) 65 | en = da(2) 66 | 'Debug.Print last, st, en 67 | For i = st To en 68 | newStr = newStr & "," & last & i 69 | countNum = countNum + 1 70 | Next 71 | Else 72 | newStr = newStr & "," & e 73 | countNum = countNum + 1 74 | End If 75 | End With 76 | End If 77 | Next 78 | If InStr(newStr, ",") Then 79 | newStr = Right(newStr, Len(newStr) - 1) 80 | End If 81 | Debug.Print newStr 82 | Debug.Print countNum 83 | 84 | ReSplit = newStr 85 | 86 | 'ActiveCell.Address '这是当前单元格地址 87 | 'Selection.Offset(1, 0).Select '这是向下跳1格 88 | 'Selection.Offset(-1, 0).Select '这是向上跳1格 89 | 'Selection.Offset(0, -1).Select '这是向左跳1格 90 | 'Selection.Offset(0, 1).Select '这是向右跳1格 91 | 92 | End Function 93 | 94 | 95 | Function SplitCount(rng As Range, delimiter As String) 96 | SplitCount = Len(Strings.Split(rng, delimiter)) 97 | End Function 98 | 99 | Sub SetValue(offset As Range, value) 100 | offset = value 101 | End Sub 102 | 103 | 104 | Sub run() 105 | Set rng = Application.InputBox(prompt:="请选择区域", Type:=8) 106 | If rng.Count = 0 Then 107 | MsgBox "请至少选择一个单元格!", , "提示": 108 | Exit Sub 109 | End If 110 | 'If rng.Count <> 1 Then 111 | 'MsgBox "只能选择一个单元格!", , "提示": 112 | 'Exit Sub 113 | 'End If 114 | Debug.Print "当前选择:", rng.Address(1, 1) 115 | 116 | rngs = Strings.Split(rng.Address(1, 1), ":") 117 | st = Strings.Split(rngs(0), "$")(1) 118 | sta = Replace(rngs(0), "$", "") 119 | 'Debug.Print rngs(0), st, sta 120 | 121 | of1Content = "整理后的数据" 122 | of2Content = "整理后的统计" 123 | If Range(st & "1").offset(0, 1) <> of1Content Then 124 | '插入空列 125 | Range(sta).offset(0, 1).EntireColumn.Insert 126 | Range(st & "1").offset(0, 1) = of1Content 127 | End If 128 | If Range(st & "1").offset(0, 2) <> of2Content Then 129 | Range(sta).offset(0, 2).EntireColumn.Insert 130 | Range(st & "1").offset(0, 2) = of2Content 131 | End If 132 | 133 | For Each im In rng 134 | 135 | If im <> "" Then 136 | 'Debug.Print TypeName(im), im.Address 137 | 138 | str1 = ReSplit(Range(Replace(im.Address, "$", ""))) 139 | im.offset(0, 1) = str1 140 | im.offset(0, 2) = Application.CountA(Strings.Split(str1, ",")) 141 | End If 142 | Next 143 | End Sub 144 | ``` 145 | 146 | 147 | ## 自动高亮行列十字突显 148 | 149 | 1. 按 Alt + F11 打开 VBA 编辑器。 150 | 2. 在左侧项目树中双击当前工作表(如 `Sheet1`)。 151 | 3.粘贴以下代码: 152 | 153 | ```vb 154 | Private Sub Worksheet_SelectionChange(ByVal Target As Range) 155 | Cells.Interior.ColorIndex = xlNone ' 清除所有高亮 156 | If Target.Cells.Count > 1 Then Exit Sub ' 防止多选 157 | With Target.EntireRow 158 | .Interior.Color = RGB(255, 255, 0) ' 设置行高亮颜色(黄色) 159 | End With 160 | With Target.EntireColumn 161 | .Interior.Color = RGB(255, 255, 0) ' 设置列高亮颜色(黄色) 162 | End With 163 | End Sub 164 | ``` 165 | 166 | 4. 保存并关闭 VBA 编辑器。 167 | 5. 返回 Excel,点击任意单元格即可看到行和列被高亮显示。 168 | -------------------------------------------------------------------------------- /System/IOS.md: -------------------------------------------------------------------------------- 1 | # IOS 2 | 3 | [[toc]] 4 | 5 | 6 | ## Flag 7 | 8 | + [https://github.com/apple/swift](https://github.com/apple/swift) 9 | 10 | 11 | * [https://github.com/pikacode/EBBannerView/blob/master/README_CHS.md](https://github.com/pikacode/EBBannerView/blob/master/README_CHS.md) 12 | * [https://github.com/CodeTips?tab=repositories](https://github.com/CodeTips?tab=repositories) 13 | * [https://github.com/dudongge/DDGDataCache_OC](https://github.com/dudongge/DDGDataCache_OC) 14 | * [https://github.com/pujiaxin33/JXSegmentedView](https://github.com/pujiaxin33/JXSegmentedView) 15 | * [https://github.com/jinht/ShopCarAnimation](https://github.com/jinht/ShopCarAnimation) 16 | * 图表库 [https://github.com/danielgindi/Charts](https://github.com/danielgindi/Charts) 17 | * [https://github.com/BradLarson/GPUImage](https://github.com/BradLarson/GPUImage) 18 | * [https://github.com/SDWebImage/SDWebImage](https://github.com/SDWebImage/SDWebImage) 19 | * [https://github.com/jdg/MBProgressHUD](https://github.com/jdg/MBProgressHUD) 20 | * [https://github.com/SVProgressHUD/SVProgressHUD](https://github.com/SVProgressHUD/SVProgressHUD) 21 | * [https://github.com/kevinzhow/PNChart](https://github.com/kevinzhow/PNChart) 22 | * [https://github.com/CanvasPod/Canvas](https://github.com/CanvasPod/Canvas) 23 | * [https://github.com/levey/AwesomeMenu](https://github.com/levey/AwesomeMenu) 24 | * [https://github.com/CEWendel/SWTableViewCell](https://github.com/CEWendel/SWTableViewCell) 25 | * [https://github.com/jverdi/JVFloatLabeledTextField](https://github.com/jverdi/JVFloatLabeledTextField) 26 | * [https://github.com/romaonthego/RESideMenu](https://github.com/romaonthego/RESideMenu) 27 | * [https://github.com/nicklockwood/iCarousel](https://github.com/nicklockwood/iCarousel) 28 | * HTTP [https://github.com/Alamofire/Alamofire](https://github.com/Alamofire/Alamofire) 29 | * [https://github.com/MugunthKumar](https://github.com/MugunthKumar) 30 | * [https://github.com/iosptl](https://github.com/iosptl) 31 | * [https://github.com/tonymillion/Reachability](https://github.com/tonymillion/Reachability) 32 | * [https://github.com/pokeb/asi-http-request](https://github.com/pokeb/asi-http-request) 33 | * [https://github.com/AFNetworking/AFNetworking](https://github.com/AFNetworking/AFNetworking) 34 | * JSON [https://github.com/johnezang/JSONKit](https://github.com/johnezang/JSONKit) 35 | * SQLite [https://github.com/ccgus/fmdb](https://github.com/ccgus/fmdb) 36 | * 压缩 [https://github.com/weichsel/ZIPFoundation](https://github.com/weichsel/ZIPFoundation) 37 | * 防止键盘向上滑动并覆盖 [https://github.com/hackiftekhar/IQKeyboardManager](https://github.com/hackiftekhar/IQKeyboardManager) 38 | * 应用内设置 [https://github.com/futuretap/InAppSettingsKit](https://github.com/futuretap/InAppSettingsKit) 39 | 40 | 41 | + IDE [https://www.jetbrains.com/zh-cn/objc](https://www.jetbrains.com/zh-cn/objc) 42 | + [https://github.com/Carthage/Carthage](https://github.com/Carthage/Carthage) 43 | + [https://github.com/CodeEditApp/CodeEdit](https://github.com/CodeEditApp/CodeEdit) 44 | + [https://cocoapods.org](https://cocoapods.org) 45 | + [https://github.com/xtool-org/xtool](https://github.com/xtool-org/xtool) 46 | 47 | 48 | 49 | - [https://github.com/raycast](https://github.com/raycast) 50 | - [https://github.com/sindresorhus](https://github.com/sindresorhus) 51 | - 创建DMG [https://github.com/sindresorhus/create-dmg](https://github.com/sindresorhus/create-dmg) 52 | - IOS第三方依赖管理工具 [https://cocoapods.org](https://cocoapods.org) 53 | - 解锁功能 [https://github.com/VirgilClyne/iRingo](https://github.com/VirgilClyne/iRingo) 54 | - MAC取证 [https://github.com/jipegit/OSXAuditor](https://github.com/jipegit/OSXAuditor) 55 | - IOS越狱 [https://github.com/palera1n](https://github.com/palera1n) 56 | - [https://github.com/lwouis/alt-tab-macos](https://github.com/lwouis/alt-tab-macos) 57 | - [https://github.com/opa334/TrollStore](https://github.com/opa334/TrollStore) 58 | - [https://github.com/firecore](https://github.com/firecore) 59 | - 用文字找照片 [https://github.com/mazzzystar/Queryable](https://github.com/mazzzystar/Queryable) 60 | - MAC备份 [https://github.com/lra/mackup](https://github.com/lra/mackup) 61 | - 模拟定位 [https://github.com/Schlaubischlump/LocationSimulator](https://github.com/Schlaubischlump/LocationSimulator) 62 | - [https://github.com/DamascenoRafael/reminders-menubar](https://github.com/DamascenoRafael/reminders-menubar) 63 | - 隐藏菜单栏 [https://github.com/Mortennn/Dozer](https://github.com/Mortennn/Dozer) 64 | - [https://github.com/acidanthera](https://github.com/acidanthera) 65 | - [https://github.com/ivoronin/TomatoBar](https://github.com/ivoronin/TomatoBar) 66 | - 翻译 [https://github.com/tisfeng/Easydict](https://github.com/tisfeng/Easydict) 67 | - 录屏 [https://github.com/lihaoyun6/QuickRecorder](https://github.com/lihaoyun6/QuickRecorder) 68 | - 视频转GIF [https://github.com/sindresorhus/Gifski](https://github.com/sindresorhus/Gifski) 69 | - 窗口管理 [https://github.com/MrKai77/Loop](https://github.com/MrKai77/Loop) 70 | - [https://github.com/nikitabobko/AeroSpace](https://github.com/nikitabobko/AeroSpace) 71 | - 生成字帖 [https://github.com/jaywcjlove/copybook-generator](https://github.com/jaywcjlove/copybook-generator) 72 | - 刘海变文件传输和暂存区 [https://github.com/Lakr233/NotchDrop](https://github.com/Lakr233/NotchDrop) 73 | - 加密DNS [https://github.com/kkebo/DNSecure](https://github.com/kkebo/DNSecure) 74 | - [https://github.com/paulmillr/encrypted-dns](https://github.com/paulmillr/encrypted-dns) 75 | - 应用管理器 [https://github.com/milanvarady/Applite](https://github.com/milanvarady/Applite) 76 | - [https://devutils.com](https://devutils.com) 77 | - 剪贴板 [https://github.com/s1ntoneli/Copi](https://github.com/s1ntoneli/Copi) 78 | - 虚拟机 [https://github.com/utmapp/UTM](https://github.com/utmapp/UTM) 79 | - [https://github.com/ish-app/ish](https://github.com/ish-app/ish) 80 | - [https://github.com/holzschu/a-shell](https://github.com/holzschu/a-shell) 81 | 82 | 83 | 84 | * [https://macked.app](https://macked.app) 85 | * 所有机型参数大全 [https://github.com/KyleBing/ipad](https://github.com/KyleBing/ipad) 86 | * [http://kylebing.cn/tools/iphone](http://kylebing.cn/tools/iphone) 87 | 88 | 89 | ## IOS框架 90 | 91 | * [https://github.com/tbl00c/ZZFLEX](https://github.com/tbl00c/ZZFLEX) 92 | * [https://github.com/marcuswestin/WebViewJavascriptBridge](https://github.com/marcuswestin/WebViewJavascriptBridge) 93 | 94 | -------------------------------------------------------------------------------- /System/文件压缩解压.md: -------------------------------------------------------------------------------- 1 | # 文件压缩解压 2 | 3 | [[toc]] 4 | 5 | 6 | ## Flag 7 | 8 | > rar tar zip 7z 是归档容器,里面可以放多个文件、有目录结构,其中 tar本身不带压缩 9 | 10 | > rar 带单独的压缩算法(据说类 Deflate),加密算法(AES),有相对完善的压缩过滤器 11 | 12 | > zip 压缩算法Deflate,因为历史问题被迫成为多算法的加密容器(互不兼容的 AES),压缩比相对不太高, 13 | > 不识别文件名的编码,有特殊的带过滤格式 zipx。gz是zip算法的一个GNU实现。 14 | 15 | > 7-zip 压缩算法 LZMA、LZMA2、ppmd、bzip2,加密算法(AES),有初步的过滤能力 16 | 17 | > tar 可以和压缩或加密格式串用,tar.gz tar.bzip2 tar.xz tar.lzma 都是常见的压缩格式组合压缩算法方面, 18 | > 对常规文件现在 7z 自带的 lzma2 是最佳选择,对多媒体文件,可考虑 rar 和 zipx 19 | 20 | > xz的默认压缩级别是6。7z的默认压缩级别是5,至少在字典大小上相当于xz的压缩级别7,另外7z默认开了多线程,有多核可用的时候表现会好些 21 | 22 | > xz和7z的默认参数压缩算法都是lzma2(tar能解压7z,7-zip也能解压xz),这个算法出自7-zip作者`Igor Pavlov`。 23 | 24 | + [https://github.com/topics/compressor](https://github.com/topics/compressor) 25 | 26 | 27 | * [https://sourceforge.net/projects/getgnuwin32](https://sourceforge.net/projects/getgnuwin32) 28 | * [https://sourceforge.net/projects/gnuwin32](https://sourceforge.net/projects/gnuwin32) 29 | * [https://github.com/google/zopfli](https://github.com/google/zopfli) 30 | * [https://www.win-rar.com](https://www.win-rar.com) 31 | * [https://github.com/bitcookies/winrar-keygen](https://github.com/bitcookies/winrar-keygen) 32 | * [https://github.com/onekey-sec/unblob](https://github.com/onekey-sec/unblob) 33 | * [https://github.com/inikep/lzbench](https://github.com/inikep/lzbench) 34 | * [https://www.gzip.org](https://www.gzip.org) 35 | * [http://compression.great-site.net](http://compression.great-site.net) 36 | * [https://launchpad.net/pbzip2](https://launchpad.net/pbzip2) 37 | * [https://github.com/wummel/patool](https://github.com/wummel/patool) 38 | * [https://sourceforge.net/projects/littleutils](https://sourceforge.net/projects/littleutils) 39 | 40 | 41 | - 提取 [https://github.com/dtrx-py/dtrx](https://github.com/dtrx-py/dtrx) 42 | 43 | 44 | ## tar 45 | 46 | > `tar`是在`Linux`中使用得非常广泛的文档打包格式(保留 unix 风格的文件权限)。它只消耗非常少的CPU以及时间去打包文件, 47 | > 但它仅仅只是一个打包工具,并不负责压缩。 48 | 49 | > 实际使用中,除了要打包之外,往往还需要其他的压缩命令一起出现进行一下压缩,提高空间利用率。 50 | 51 | **参数** 52 | 53 | - 命令类型参数: 54 | 1. `-c`或`–create`:建立新的备份文件。 55 | 2. `-x`或`–extract`或`–get`:从备份文件中还原文件。 56 | 57 | - 压缩方式参数: 58 | 1. `-j`或`–bzip2`:以bz2的算法来压缩或者解压文件。 59 | 2. `-z`或`–gzip`或`–ungzip`:通过 gzip 指令处理备份文件。 60 | 61 | - 其他常用参数: 62 | 1. `-v`或`–verbose`:显示指令执行过程。 63 | 2. `-C <目的目录>`或`–directory=<目的目录>`:切换到指定的目录。 64 | 65 | 66 | **压缩** 67 | 68 | ```bash 69 | # 将目标打包成一个*.tar格式的文件 70 | tar -cvf 名称.tar 目录或文件 71 | 72 | # 将目标打包成一个*.tgz格式的文件 73 | tar -czvf 名称.tgz 目录或文件 74 | 75 | # 将目标打包并压缩成一个*.tar.gz格式的文件 76 | tar -czvf 名称.tar.gz 目录或文件 77 | 78 | # 将目标打包并压缩成一个*.tar.bz2格式的文件 79 | tar -cjvf 名称.tar.bz2 目录或文件 80 | 81 | # 将打包好的tar文件压缩成一个*.tar.xz格式的文件 82 | xz -z 名称.tar.xz 83 | # 或者一条命令执行 84 | tar -Jcvf 文件名.tar.xz 目录或文件 85 | 86 | # 将目标打包并压缩成一个*.tar.7z格式的文件 87 | tar cvf - 目录或文件 | 7z a -si 文件名.tar.7z 88 | ``` 89 | 90 | > 注意:在使用`tar`的`--exclude`命令排除打包时,末尾不能加`/`或者路径为绝对路径,否则还是会把排除目录以及其下的文件打包进去。 91 | 92 | ```bash 93 | # 打包的时候我们要排除 tomcat/logs 目录,命令如下: 94 | tar -zcvf tomcat.tar.gz --exclude=tomcat/logs tomcat 95 | 96 | # 如果要排除多个目录,增加 --exclude 即可,如下命令排除logs和libs两个目录及文件xiaoshan.txt 97 | tar -zcvf tomcat.tar.gz --exclude=tomcat/logs --exclude=tomcat/libs --exclude=tomcat/xiaoshan.txt tomcat 98 | ``` 99 | 100 | 101 | **解压** 102 | 103 | > 参数`-C`解压到指定目录下 104 | 105 | ```bash 106 | # 解压一个*.tar的文件包内容到当前目录下 107 | tar -xvf pakage_name.tar 108 | 109 | # 解压一个*.tgz的文件包内容到当前目录下 110 | tar -xzvf pakage_name.tgz 111 | 112 | # 解压一个*.tar.gz的压缩包内容到当前目录下 113 | tar -xzvf pakage_name.tar.gz 114 | 115 | # 解压一个*.tar.bz2的压缩包内容到当前目录下 116 | tar -xjvf pakage_name.tar.bz2 117 | 118 | # tar.xz压缩包需要先解压为tar格式包 119 | xz -d pakage_name.tar.xz 120 | # 再解开tar格式包到当前目录下 121 | tar -xvf pakage_name.tar 122 | # 或者一条命令执行 123 | tar -Jxvf 文件名.tar.xz 124 | ``` 125 | 126 | 127 | 128 | ### 7zip 129 | 130 | * [https://github.com/ip7z/7zip](https://github.com/ip7z/7zip) 131 | * [https://sourceforge.net/projects/sevenzip](https://sourceforge.net/projects/sevenzip) 132 | * [https://www.7-zip.org/download.html](https://www.7-zip.org/download.html) 133 | * 打开7zip -> 点击菜单栏上的`工具` -> `选项` -> 点击两个`+`号关联所有默认解压方式到当前账户和所有账户 134 | * [https://microsoft.github.io/VirtualClient/docs/workloads/compression/7zip](https://microsoft.github.io/VirtualClient/docs/workloads/compression/7zip) 135 | * [https://github.com/M2Team/NanaZip](https://github.com/M2Team/NanaZip) 136 | * [https://github.com/mcmilk/7-Zip-zstd](https://github.com/mcmilk/7-Zip-zstd) 137 | * [https://github.com/myfreeer/7z-build-nsis](https://github.com/myfreeer/7z-build-nsis) 138 | * [https://github.com/peazip/PeaZip](https://github.com/peazip/PeaZip) 139 | * [https://sourceforge.net/projects/peazip](https://sourceforge.net/projects/peazip) 140 | * [https://github.com/nmoinvaz/minizip](https://github.com/nmoinvaz/minizip) 141 | * [https://www.breezip.com](https://www.breezip.com) 142 | 143 | 144 | > 注意:所有的参数和值之间是没有空格的 145 | 146 | 147 | **参数** 148 | 149 | - `a` 添加文件或文件夹到压缩包。 150 | - `b` 基准 151 | - `d` 从存档中删除文件 152 | - `e` 从存档中提取文件(不使用目录名) 153 | - `h` 计算文件的哈希值 154 | - `i` 显示有关受支持格式的信息 155 | - `l` 列出档案内容 156 | - `rn` 重命名存档中的文件 157 | - `t` 测试档案的完整性 158 | - `u` 更新文件以存档 159 | - `x` 解压文件,保留原来的目录结构 160 | 161 | + `-t` 指定压缩类型,默认7z。 162 | + `-r` 表示递归所有的子文件夹。 163 | + `-mmt[N]` 设置CPU线程数 164 | + `-mx=值` 设置压缩级别:`-mx1`(最快),`-mx9`(最慢,压缩比最高),默认为5。 165 | + `-ao` 设置覆盖模式,`a`全部覆盖 166 | + `-o` 指定解压到的目录 167 | 168 | 169 | ```bash 170 | # CentOS安装7zip 171 | yum –y install p7zip 172 | 173 | # 解压到当前目录下,不保留原来的目录结构 174 | 7za e 文件名 175 | 176 | # 解压到当前目录下,但保留原来的目录结构 177 | 7za x 文件名 178 | 179 | # 用7z压缩成tar 180 | 7za a -ttar 文件名.tar 文件夹 181 | 182 | # 用7z把tar压缩成gz 183 | 7za a -tgzip 文件名.tar.gz 文件名.tar 184 | ``` 185 | 186 | 187 | 188 | ## Deflate 189 | 190 | > 在1990年左右,Info-ZIP组编写了可移植的,免费开源的实用程序zip和unzip实用程序,使用Deflate进行压缩以及对zip和早期格式进行解压缩 191 | 192 | > 在90年代初期,gzip格式被开发为Unix compress实用程序的替代,它是从Info-ZIP实用程序中的Deflate代码衍生而来 193 | 194 | > zlib 是通用的压缩库,提供了一套 in-memory 压缩和解压函数,并能检测解压出来的数据的完整性(integrity)。zlib是从gzip代码改编而来 195 | 196 | 197 | ### zip 198 | 199 | > `zip`是压缩程序 200 | 201 | **参数** 202 | 203 | - `A` 调整可执行的自动解压缩文件。 204 | - `d` 从压缩文件内删除指定的文件。 205 | - `D` 压缩文件内不建立目录名称。 206 | - `F` 尝试修复已损坏的压缩文件。 207 | - `g` 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。 208 | - `j` 只保存文件名称及其内容,而不存放任何目录名称。 209 | - `m` 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。 210 | - `o` 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。 211 | - `q` 不显示指令执行过程。 212 | - `r` 递归处理,将指定目录下的所有文件和子目录一并处理。 213 | - `S` 包含系统和隐藏文件。 214 | - `v` 显示指令执行过程或显示版本信息。 215 | - <压缩效率> 压缩效率是一个介于 1-9 的数值。 216 | 217 | ```bash 218 | zip 文件名.zip 文件或目录 219 | ``` 220 | 221 | 222 | 223 | 224 | ### unzip 225 | 226 | * [https://sourceforge.net/projects/infozip](https://sourceforge.net/projects/infozip) 227 | 228 | > unzip是解压程序。 229 | 230 | 231 | **参数** 232 | 233 | - `f` 更新现有的文件。 234 | - `l` 显示压缩文件内所包含的文件。 235 | - `v` 执行是时显示详细的信息。 236 | - `C` 压缩文件中的文件名称区分大小写。 237 | - `j` 不处理压缩文件中原有的目录路径。 238 | - `L` 将压缩文件中的全部文件名改为小写。 239 | - `n` 解压缩时不要覆盖原有的文件。 240 | - `o` 不必先询问用户,unzip 执行后覆盖原有文件。 241 | - `P<密码>` 使用 zip 的密码选项。 242 | - `q` 执行时不显示任何信息。 243 | - `[.zip 文件]` 指定.zip 压缩文件。 244 | - `[文件]` 指定要处理.zip 压缩文件中的哪些文件。 245 | - `d<目录>` 指定文件解压缩后所要存储的目录。 246 | - `x<文件>` 指定不要处理.zip 压缩文件中的哪些文件。 247 | 248 | ```bash 249 | unzip 文件名.zip 250 | ``` 251 | 252 | -------------------------------------------------------------------------------- /Web/HTML.md: -------------------------------------------------------------------------------- 1 | # HTML 2 | 3 | [[toc]] 4 | 5 | 6 | ## Flag 7 | 8 | > Hypertext Markup Language:定义网页的内容 9 | 10 | + 标准规范 [https://github.com/whatwg/html](https://github.com/whatwg/html) 11 | + [https://github.com/whatwg/dom](https://github.com/whatwg/dom) 12 | + HTML全局属性 [https://www.w3.org/wiki/HTML/Attributes/_Global](https://www.w3.org/wiki/HTML/Attributes/_Global) 13 | + [https://developer.mozilla.org/zh-CN/docs/Web/HTML](https://developer.mozilla.org/zh-CN/docs/Web/HTML) 14 | + [https://github.com/thedaviddias/Front-End-Checklist](https://github.com/thedaviddias/Front-End-Checklist) 15 | 16 | 17 | - [https://github.com/gustavoguanabara/html-css](https://github.com/gustavoguanabara/html-css) 18 | - [https://github.com/bradtraversy/50projects50days](https://github.com/bradtraversy/50projects50days) 19 | - [https://github.com/atherosai/ui](https://github.com/atherosai/ui) 20 | - 响应式 [https://github.com/bedimcode](https://github.com/bedimcode) 21 | 22 | > Window对象 -> Parent对象 -> Frame对象 -> Document对象 -> Form对象 23 | 24 | 25 | **template代码片段** 26 | 27 | * [https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/template](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/template) 28 | * [https://www.html5rocks.com/zh/tutorials/webcomponents/template](https://www.html5rocks.com/zh/tutorials/webcomponents/template) 29 | * 文档片段 [https://developer.mozilla.org/zh-CN/docs/Web/API/DocumentFragment](https://developer.mozilla.org/zh-CN/docs/Web/API/DocumentFragment) 30 | * [https://caniuse.com/?search=template](https://caniuse.com/?search=template) 31 | * [关于template标签用法总结(含vue中的用法总结)](https://blog.csdn.net/u010510187/article/details/100356624) 32 | 33 | - ` 188 | ``` 189 | 190 | **参考:** 191 | 192 | * [JS中实现页面跳转和刷新方法总结](https://juejin.cn/post/6844903925741682696) 193 | * [JS刷新当前页面的几种方法总结](http://www.iqianduan.net/blog/refresh-browser-method) 194 | 195 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "version": "1.9.10", 4 | "name": "notes-vuepress", 5 | "description": "notes-vuepress of VuePress", 6 | "scripts": { 7 | "dev": "vuepress dev --temp .temp --no-cache", 8 | "build": "vuepress build --temp .temp --no-cache", 9 | "lint-md": "yarn lint-md:style && yarn lint-md:wording", 10 | "lint-md:style": "remark --quiet --frail .", 11 | "lint-md:wording": "textlint ./docs/**/*.md", 12 | "clean-build": "rimraf docs/*", 13 | "test": "node .vuepress/push.js", 14 | "view-info": "vuepress view-info --temp .temp --no-cache", 15 | "show-help": "vuepress --help" 16 | }, 17 | "repository": { 18 | "type": "git", 19 | "url": "git+https://github.com/bajins/notes-vuepress.git" 20 | }, 21 | "keywords": [ 22 | "documentation", 23 | "vue", 24 | "generator", 25 | "vuepress", 26 | "notes-vuepress" 27 | ], 28 | "author": "Bajins", 29 | "license": "MIT", 30 | "bugs": { 31 | "url": "https://github.com/bajins/notes-vuepress/issues" 32 | }, 33 | "homepage": "https://github.com/bajins/notes-vuepress#readme", 34 | "dependencies": { 35 | "@vuepress/plugin-active-header-links": "^1.9.10", 36 | "@vuepress/plugin-back-to-top": "^1.9.10", 37 | "@vuepress/plugin-blog": "^1.9.4", 38 | "@vuepress/plugin-google-analytics": "^1.9.10", 39 | "@vuepress/plugin-medium-zoom": "^1.9.10", 40 | "@vuepress/plugin-nprogress": "^1.9.10", 41 | "@vuepress/plugin-pwa": "^1.9.10", 42 | "@vuepress/theme-vue": "^1.9.10", 43 | "axios": "^1.6.8", 44 | "flexsearch": "^0.7.43", 45 | "leancloud-storage": "^4.15.2", 46 | "lodash": "^4.17.21", 47 | "lodash.template": "^4.5.0", 48 | "mixin-deep": "^2.0.1", 49 | "moment": "^2.30.1", 50 | "node-sass": ">=9.0.0", 51 | "package": "^1.0.1", 52 | "querystringify": "2.2.0", 53 | "serialize-javascript": "^6.0.2", 54 | "set-value": "^4.1.0", 55 | "vue-class-component": "^7.2.6", 56 | "vue-click-outside": "^1.1.0", 57 | "vue-property-decorator": "^9.1.2", 58 | "vue-toasted": "^1.1.28", 59 | "vuepress": "^1.9.10", 60 | "vuepress-plugin-baidu-tongji-analytics": "^1.0.2", 61 | "vuepress-plugin-code-copy": "^1.0.6", 62 | "vuepress-plugin-flowchart": "^1.5.0", 63 | "vuepress-plugin-sitemap": "^2.3.1" 64 | }, 65 | "devDependencies": { 66 | "vuepress-plugin-auto-sidebar": "^2.3.2", 67 | "vuepress-plugin-autometa": "^0.1.13", 68 | "vuepress-plugin-feed": "^0.1.9", 69 | "vuepress-plugin-fulltext-search": "^2.2.1", 70 | "vuepress-plugin-plausible-analytics": "^0.2.1", 71 | "vuepress-plugin-right-anchor": "^0.5.5" 72 | }, 73 | "overrides": { 74 | "webpack@4.47.0": { 75 | "terser-webpack-plugin": "^4.2.3" 76 | } 77 | } 78 | } 79 | --------------------------------------------------------------------------------