工作笔记
type: channel
link: http://sixjun.com/mark/
description: 刘总个人的工作笔记
items: Golang GetNetIP GetMapIP
items: Welcome Markdown.MD
items: README.md
items: dameng.db.md
items: mysql.db.md
items: VSCODE.md
items: vim.MD
items: Cmd Markdown.MD
items: markdown.MD
items: DOCKER.md
items: README.win.md
items: README.osx.md
items: README.termux.md
items: README.unix.md
items: python.MD
items: golang.MD
items: c++.MD
items: Sqlite3.md

Golang GetNetIP GetMapIP
type: item
date: 2023-06-04T14:20:00+08:00
description: Golang third library 产品： 静态站点：gohugoio/hugo Public 文件同步：syncthing/syncthing Public 反向代理：fatedier/frp 在线终端：yudai/gotty 本地界面：fyne-io/fyne 在线文件：filebrowser/filebrowser 本地代理：v2ray/v2ray-core 发送文件：schollz/croc 坚守进程：ochinchina/supervisord 项目： miekg/dns jeessy2/ddns-go fsnotify/fsnotify drakkan/sftpgo 研发： GoAdminGroup/go-admin go-admin-team/go-admin flipped-aurora/gin-vue-admin qax-os/excelize grpc/grpc-go ethereum/go-ethereum Public go-kit/kit derailed/k9s Golang functions //export GetNetIP func GetNetIP() string { if ifaces, err := net.Interfaces(); err == nil { for _, iface := range ifaces { if iface.Flags&net.FlagUp == 0 || iface.Flags&net.FlagLoopback != 0 { continue // interface down // loopback interface } if addrs, err := iface.Addrs(); err == nil { for _, addr := range addrs { switch v := addr.(type) { case *net.IPAddr: if v.IP.IsGlobalUnicast() && nil != v.IP.To4() { return v.IP.String() // only pick first net card } case *net.IPNet: if v.IP.IsGlobalUnicast() && nil != v.IP.To4() { return v.IP.String() // only pick first net card } } } // end of for addrs } } // end of for iface } // end of net.Interfaces return net.IPv4zero.String() } //export GetMapIP func GetMapIP() map[string]string { m := map[string]string{} if ifaces, err := net.Interfaces(); err == nil { for _, iface := range ifaces { if iface.Flags&net.FlagUp == 0 || iface.Flags&net.FlagLoopback != 0 { continue // interface down // loopback interface } if addrs, err := iface.Addrs(); err == nil { for _, addr := range addrs { switch v := addr.(type) { case *net.IPAddr: if v.IP.IsGlobalUnicast() && nil != v.IP.To4() { m[iface.Name] = v.IP.String() // only pick last net card } case *net.IPNet: if v.IP.IsGlobalUnicast() && nil != v.IP.To4() { m[iface.Name] = v.IP.String() // only pick last net card } } } // end of for addrs } } // end of for iface } // end of net.Interfaces return m }

Welcome Markdown.MD
type: item
date: 2022-12-10T19:16:00+08:00
description: # MARKDOWN FILE MANAGER Manager all markdown files README.md README.win.md README.osx.md README.termux.md ...

README.md
type: item
date: 2022-12-10T19:15:00+08:00
description: redis web dockerd& docker pull nicolas/webdis:latest docker run --name webdis --rm -d -p 7379:7379 nicolas/webdis curl http://127.0.0.1:7379/PING curl http://127.0.0.1:7379/SET/hello/world curl http://127.0.0.1:7379/GET/hello curl http://127.0.0.1:7379/SET/number/1 curl http://127.0.0.1:7379/GET/number curl http://127.0.0.1:7379/config curl http://127.0.0.1:7379/help curl http://127.0.0.1:7379/HELP curl http://127.0.0.1:7379/PING curl http://127.0.0.1:7379/C curl http://127.0.0.1:7379/SET/y/1 curl http://127.0.0.1:7379/INCR/y curl http://127.0.0.1:7379/GET/y curl http://127.0.0.1:7379/GET/y.json curl http://127.0.0.1:7379/GET/y.xml curl http://127.0.0.1:7379/GET/y.png docker exec -it redis /bin/sh curl http://127.0.0.1:7379/CONFIG/GET/* curl http://127.0.0.1:7379/KEY/* curl http://127.0.0.1:7379/KEYS/* curl http://127.0.0.1:7379/EXISTS/y curl http://127.0.0.1:7379/TTL/y curl http://127.0.0.1:7379/TYPE/y linux sshd config vim /etc/ssh/sshd_config ListenAddress 0.0.0.0 PermitRootLogin yes PubkeyAuthentication no PasswordAuthentication yes UseLogin yes ubuntu18.04 build python3.12 tar -xzvf nogil-3.12-3.12.0a4.tar.gz apt install libffi-dev apt-get install libssl-dev apt-get install libbz2-dev liblzma-dev zlib1g-dev ./configure --prefix=/opt/python312/ --enable-optimizations --disable-gil make -j4 make install export PATH=/opt/python312/bin:$PATH ./pip3 install numpy ./pip3 install pandas python3 -c "import sys; print(sys.flags.nogil)" # True PYTHONGIL=1 python3 -c "import sys; print(sys.flags.nogil)" # False python3 -c 'import numpy; print(numpy.version)' python3 -c 'import pandas; print(pandas.version)' Ubuntu系统设置时区时间 date -R timedatectl set-timezone Asia/Shanghai tzselect sudo dpkg-reconfigure tzdata (16.04 or below...) Ubuntu Linux 常用软件包管理命令 /var/cache/apt/archives apt-cache search package 搜索包 apt-cache show package 获取包的相关信息，如说明、大小、版本等 sudo apt-get install package 安装包 sudo apt-get install package - - reinstall 重新安装包 sudo apt-get -f install 修复安装"-f = ——fix-missing" s…

dameng.db.md
type: item
date: 2022-11-24T12:08:09+08:00
description: SELECT * FROM SYSTABLECOMMENTS; SELECT COUNT(*) FROM DBA_TABLES; SELECT * FROM USER_TABLES; SELECT * FROM DBA_TABLESPACES; SELECT * FROM USER_TABLESPACES; SELECT * FROM ALL_OBJECTS; SELECT * FROM DBA_OBJECTS; SELECT * FROM USER_OBJECTS; SELECT * FROM DBA_USERS; SELECT * FROM DBA_TABLESPACES; SELECT * FROM DBA_USERS; SELECT * FROM dba_segments; SELECT * FROM V$LICENSE; SELECT * FROM V$DATABASE; SELECT * FROM V$INSTANCE; SELECT * FROM V$TABLESPACE; SELECT * FROM V$VERSION; SELECT SUM(bytes) from dba_data_files; select t.name tablespace_name, d.free_size*SF_GET_PAGE_SIZE()/1024/1024 ||'M' free_space, d.total_size*SF_GET_PAGE_SIZE()/1024/1024 ||'M' total_space, d.free_size*100/d.total_size "% FREE" from v$tablespace t, v$datafile d where t.id=d.group_id; --1）SYSTEM表空间--> 系统表空间有很多的数据字典等 --2）ROLL表空间-->回滚表空间 MVCC（事务多版本机制），消除行锁，回滚段，保 留时长（undo_retention 支持毫秒） --3）TEMP 临时表空间 ，临时段，创建的临时表 --4）MAIN表空间，这是数据库默认的白哦空间，在创建表和数据对象的死后，不指定 存储位置，默认存放在该表空间 --5）HMAIN 存放huge表的表空间 --* SYSTEM-系统表空间，存放数据字典信息 --* ROLL-回滚表空间，存放的回滚数据，MVCC（事务多版本） --* TEMP-临时表空间，存放临时数据 --* MAIN-main表空间，如果用户创建数据对象不指定存储位置，默认存放到main --* HMAIN-hmain表空间，存放huge table信息 --SYS //内置用户，不能登陆 --SYSDBA//管理员 --SYSAUDITOR//审计用户 --SYSSSO //安全用户，安全版 --备注：创建用户时，有些达梦数据库版本 用户跟密码默认都是记录成大写的英文字母，因此登陆时要输入大写才能正常登陆； --DMSQL --SQL分类：（结构话查询语言） --DDL 定义 create drop truncate --DML 管理 select insert update delete --DCL 控制 grant revoke --TCL 事务管理 commit rollback save point select NAME, ID, PID, CRTDATE from SYS.SYSOBJECTS; select file_name,tablespace_name from dba_data_files; Select tablespace_name,status from dba_tablespaces; select path from v$datafile; select * from v$datafile; SELECT SF_GET_CASE_SENSITIVE_FLAG(); CALL sp_close_session(sess_id); CALL SP_SET_PARA_VALUE(1,'PWD_POLICY',0); SELECT SF_GET_PARA_VALUE(1,'PWD_POLICY'); SELECT * FROM V$PARAMETER WHERE NAME='PWD_POLICY'; CREATE USER HWUSER IDENTIFIED BY HWUSER; SP_SET_PARA_VALUE (2,'PARALLEL_THRD_NUM',8); select SF_GET_PARA_VALUE(2,'PARALLEL_THRD_NUM'); select para_name,para_value from v$…

mysql.db.md
type: item
date: 2022-11-24T12:08:08+08:00
description: ################################################################################### ################################################################################### ################################################################################### ################################################################################### ################################################################################### ################################################################################### TRUNCATE TABLE `PlanTab`; INSERT INTO `PlanTab` VALUES ('1', "call proc_impl_YX_failure_or_success('517&518&520&521^511');", '5', '0', '1'); INSERT INTO `PlanTab` VALUES ('2', 'call procedure_test();', '3', '0', '1'); ################################################################################### DROP PROCEDURE IF EXISTS procedure_plan; delimiter // CREATE PROCEDURE procedure_plan() BEGIN DECLARE v_id INT DEFAULT 1; # ID DECLARE v_cur INT DEFAULT 0; # 默认起始计数0，从表中读取 DECLARE v_step INT DEFAULT 1; # 默认计数每次增加1分钟，过程内置 DECLARE v_preset INT DEFAULT 5; # 默认执行周期每5分钟，从表中读取 DECLARE data_end INT DEFAULT 0; DECLARE data_cur CURSOR FOR SELECT `ID`,PresetCount,CurrentCount FROM PlanTab; DECLARE CONTINUE HANDLER FOR NOT FOUND SET data_end=1; open data_cur; REPEAT FETCH data_cur INTO v_id, v_preset, v_cur; IF data_end <> 1 THEN SET v_cur = v_cur + v_step; IF v_cur > v_preset THEN SET v_cur = FLOOR(MOD(v_cur, v_preset) - 1); END IF; UPDATE PlanTab SET CurrentCount = v_cur WHERE `ID` = v_id; END IF; UNTIL data_end END REPEAT; -- select v_begin, v_end, v_value, v_total; END // delimiter ; call procedure_plan(); ################################################################################### DROP PROCEDURE IF EXISTS procedure_init; delimiter // CREATE PROCEDURE procedure_init() BEGIN DROP TEMPORARY TABLE IF EXISTS temp_message_tab; CREATE TEMPORARY TABLE temp_message_tab ( `id` INTEGER PRIMARY KEY NOT NULL, `totab` VARCHAR(16) NOT NULL, `policy` VARCHAR(64) NOT NULL, `inners` INTEGER D…

VSCODE.md
type: item
date: 2022-11-24T12:08:06+08:00
description: { "[c]": { "editor.autoIndent": "brackets", "editor.detectIndentation": true, "editor.emptySelectionClipboard": true, "editor.fontWeight": "normal", "editor.insertSpaces": true, "editor.quickSuggestions": { "comments": true, "other": true, "strings": false }, "editor.quickSuggestionsDelay": 10, "editor.renderWhitespace": "none", "editor.tabSize": 4, "editor.trimAutoWhitespace": true, "editor.useTabStops": true, "editor.wrappingIndent": "indent", "files.insertFinalNewline": true }, "[cpp]": { "editor.autoIndent": "brackets", "editor.detectIndentation": true, "editor.emptySelectionClipboard": true, "editor.fontWeight": "normal", "editor.insertSpaces": true, "editor.quickSuggestions": { "comments": true, "other": true, "strings": false }, "editor.quickSuggestionsDelay": 10, "editor.renderWhitespace": "none", "editor.tabSize": 4, "editor.trimAutoWhitespace": true, "editor.useTabStops": true, "editor.wrappingIndent": "indent", "files.insertFinalNewline": true }, "[css]": { "editor.formatOnSave": true, "editor.tabSize": 2 }, "[html]": { "editor.formatOnSave": true, "editor.tabSize": 2 }, "[javascript]": { "editor.tabSize": 2 }, "[json]": { "editor.formatOnSave": true, "editor.tabSize": 2 }, "[php]": { "editor.formatOnSave": true, "editor.tabSize": 2 }, "breadcrumbs.enabled": true, "code-runner.customCommand": "echo Hello World", "code-runner.executorMap": { "bat": "cmd /c", "c": "cd $dir && gcc -framework OpenGL -framework GLUT -framework Foundation $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", "java": "cd $dir && javac $fileName && java $fileNameWithoutExt", "javascript": "node", "python": "python -u", "shellscript": "bash" }, "editor.codeActionsOnSave": { "source.fixAll": true }, "editor.cursorBlinking": "smooth", "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.detectIndentation": true, "editor.fontFamily": "'Courier New', Menlo, Monaco, monospace", "editor.…

vim.MD
type: item
date: 2022-11-24T12:08:05+08:00
description: vim ~/.vimrc syntax enable syntax on filetype on filetype plugin on filetype indent on filetype plugin indent on set number set ignorecase set autoread set showcmd set showmode set incsearch set cursorline "set cursorcolumn set ruler set history=1024 set nobackup set noswapfile set autoindent set cindent set smartindent set tabstop=4 set shiftwidth=4 set guifont=Monaco set background=light "colorscheme evening set t_Co=256 set encoding=utf-8 set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1 set helplang=cn set termencoding=utf-8 set ffs=unix,dos,mac set statusline=%<%f\ %h%m%r%=%k[%{(&fenc==\"\")?&enc:&fenc}%{(&bomb?\",BOM\":\"\")}]\ %-14.(%l,%c%V%)\ %P set laststatus=2 :set pastetoggle=<F12> if has("autocmd") au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif endif func! CompileCodeRunResult() exec "w" if &filetype == "c" exec "!gcc -std=c99 -I. -L. -lpthread ./% -o %<" elseif &filetype == "cpp" exec "!g++ -std=c++11 -I. -L. -lpthread ./% -o %<" elseif &filetype == "python" exec "!python ./%" elseif &filetype == "java" exec "!java %<" endif exec "! ./%<" endfunc map <F5> :call CompileCodeRunResult()<CR> map <F9> :call CompileCodeRunResult()<CR> imap <F9> <ESC>:call CompileCodeRunResult()<CR> vmap <F9> <ESC>:call CompileCodeRunResult()<CR>

Cmd Markdown.MD
type: item
date: 2022-11-24T12:08:04+08:00
description: 欢迎使用 Cmd Markdown 编辑阅读器 我们理解您需要更便捷更高效的工具记录思想，整理笔记、知识，并将其中承载的价值传播给他人，Cmd Markdown 是我们给出的答案 —— 我们为记录思想和分享知识提供更专业的工具。 您可以使用 Cmd Markdown： 整理知识，学习笔记 发布日记，杂文，所见所想 撰写发布技术文稿（代码支持） 撰写发布学术论文（LaTeX 公式支持） 除了您现在看到的这个 Cmd Markdown 在线版本，您还可以前往以下网址下载： Windows/Mac/Linux 全平台客户端 请保留此份 Cmd Markdown 的欢迎稿兼使用说明，如需撰写新稿件，点击顶部工具栏右侧的 新文稿 或者使用快捷键 Ctrl+Alt+N。 什么是 Markdown Markdown 是一种方便记忆、书写的纯文本标记语言，用户可以使用这些标记符号以最小的输入代价生成极富表现力的文档：譬如您正在阅读的这份文档。它使用简单的符号标记不同的标题，分割不同的段落，粗体 或者 斜体 某些文字，更棒的是，它还可以 1. 制作一份待办事宜 Todo 列表 [ ] 支持以 PDF 格式导出文稿 [ ] 改进 Cmd 渲染算法，使用局部渲染技术提高渲染效率 [x] 新增 Todo 列表功能 [x] 修复 LaTex 公式渲染问题 [x] 新增 LaTex 公式编号功能 2. 书写一个质能守恒公式1 $$E=mc^2$$ 3. 高亮一段代码2 @requires_authorization class SomeClass: pass if __name__ == '__main__': # A comment print 'hello world' 4. 高效绘制 流程图 st=>start: Start op=>operation: Your Operation cond=>condition: Yes or No? e=>end st->op->cond cond(yes)->e cond(no)->op 5. 高效绘制 序列图 Alice->Bob: Hello Bob, how are you? Note right of Bob: Bob thinks Bob-->Alice: I am good thanks! 6. 高效绘制 甘特图 title 项目开发流程 section 项目确定 需求分析 :a1, 2016-06-22, 3d 可行性报告 :after a1, 5d 概念验证 : 5d section 项目实施 概要设计 :2016-07-05 , 5d 详细设计 :2016-07-08, 10d 编码 :2016-07-15, 10d 测试 :2016-07-22, 5d section 发布验收 发布: 2d 验收: 3d 7. 绘制表格 项目 价格 数量 计算机 \$1600 5 手机 \$12 12 管线 \$1 234 8. 更详细语法说明 想要查看更详细的语法说明，可以参考我们准备的 Cmd Markdown 简明语法手册，进阶用户可以参考 Cmd Markdown 高阶语法手册 了解更多高级功能。 总而言之，不同于其它 所见即所得 的编辑器：你只需使用键盘专注于书写文本内容，就可以生成印刷级的排版格式，省却在键盘和工具栏之间来回切换，调整内容和格式的麻烦。Markdown 在流畅的书写和印刷级的阅读体验之间找到了平衡。 目前它已经成为世界上最大的技术分享网站 GitHub 和 技术问答网站 StackOverFlow 的御用书写格式。 什么是 Cmd Markdown 您可以使用很多工具书写 Markdown，但是 Cmd Markdown 是这个星球上我们已知的、最好的 Markdown 工具——没有之一 ：）因为深信文字的力量，所以我们和你一样，对流畅书写，分享思想和知识，以及阅读体验有极致的追求，我们把对于这些诉求的回应整合在 Cmd Markdown，并且一次，两次，三次，乃至无数次地提升这个工具的体验，最终将它演化成一个 编辑/发布/阅读 Markdown 的在线平台——您可以在任何地方，任何系统/设备上管理这里的文字。 1. 实时同步预览 我们将 Cmd Markdown 的主界面一分为二，左边为编辑区，右边为预览区，在编辑区的操作会实时地渲染到预览区方便查看最终的版面效果，并且如果你在其中一个区拖动滚动条，我们有一个巧妙的算法把另一个区的滚动条同步到等价的位置，超酷！ 2. 编辑工具栏 也许您还是一个 Markdown 语法的新手，在您完全熟悉它之前，我们在 编辑区 的顶部放置了一个如下图所示的工具栏，您可以使用鼠标在工具栏上调整格式，不过我们仍旧鼓励你使用键盘标记格式，提高书写的…

markdown.MD
type: item
date: 2022-11-24T12:08:03+08:00
description: //将下面的文字复制粘贴到你的有道云笔记 Markdown 编辑器/简书 Markdown 编辑器即可在预览中重现上文。 作者：在路上\ 贡献者：诺布 0x00 写在前面 到底什么是个 Markdown? Markdown 是一种文本编辑时候使用的语法，通过在文字中加入助记符，将排版/编号/列表/文字高亮/加粗等问题交给机器处理，对文字进行自动排版，从而大大提高编辑记录效率。 有道云 Markdown 编辑器 or 简书 Markdown 编辑器都是依照这种 Markdown语法的实现，所以难免上渲染出来的效果有些小偏差，但是排版方式是通用的。 为什么要用 Markdown? 文章的排版很麻烦，如果有一种对于文章排版的解决方案就好了。 学习实践 Markdown 语法后你可以自定义你的文章排版。 这是一套定义文章排版格式的语法。 这是一个边际成本递减的升维实践过程。 Markdown 的应用场景? 可以说，所有的文本场景下都可以使用 Markdown 语法，只要你有一个支持 Markdown 语法的编辑器就可以，笔者使用的是有道云笔记的 Markdown 编辑器，因为其支持语法全面(包括文本高亮标记)。当前探索出的支持 Markdown 的环境有:有道云笔记、简书、微信公众号推送(粘贴渲染排版后的文本即可)。 本文逻辑安排目录： Markdown 可以实现的排版效果 Markdown 文章示例 本文的 Markdown 语法的原文 0x01 标题相关示例 主标题 副标题 一级标题 二级标题 三级标题 六级小标题 标题网址 引用文字块 0x02 无序列表相关示例 # 一级列表 ## 二级列表 ### 三级列表 #### 四级列表 ##### 五级列表 ###### 六级列表 0x03 有序列表相关示例 加粗标题 1 自编号标题 1.1 ++下划线自编号标题 1.1.1++ 斜体自编号标题 1.1.1.1 0x04 综合使用示例 使用 MD 时候的要点，合理使用无序列表语法与自定义序号，尽量少使用有序列表语法，因为存在兼容性问题(有道云笔记兼容性比简书好很多)会导致标题无层次分类，示例开始。 一、如何更好地理解第四章？ (一) 前置两个问题：升维与复杂系统 1. 升维 (1) 维度是什么？ 时空坐标体系下的坐标轴数量，可以理解为增加的视野角度。 (2) 高维和低维的关系 信息密度高，信息量大 低维是高维的切片 高维的低维展开会导致低维量级的无限扩张 推演：高维比低维的视角更多 2. 复杂系统 (1) 定义 什么叫系统？一组组内相互作用、相互依赖的复杂整体 (2) 要素 (3) 系统的三要素 系统关系 元素间关系 系统功能 (4) 两大类系统 ① 他组织系统 系统元素 系统结构关系 系统功能 特点：功能稳定，输入一定，输出一定。 ② 自组织系统 0x05 Markdown 原文 Markdown 与 Markdown 编辑器与排版文字的关系梳理与实践： Markdown 格式原文->有道云 Markdown 编辑器 or 简书 Markdown 编辑器->预览效果就是发布后的效果 简书中 Markdown 编辑器开启方式 个人设置-基础设置-常用编辑器-Markdown 有道云笔记 Markdown 编辑器开启方式 新文档-新建Markdown 六、Markdown 代码框 如果是段落上的一个函数或片段的代码可以用两个'把它包起来。

DOCKER.md
type: item
date: 2022-11-24T12:08:00+08:00
description: docker 命令操作笔记 docker在线安装： apt install docker.io docker离线安装： tar -zxvf docker-18.06.3-ce.tgz cp docker/* /usr/bin/ dockerd & docker info docker run hello-world # Hello from Docker! docker search ubuntu docker pull --help docker images --help docker update --help docker run --help docker rm --help docker rmi --help docker attach --help docker exec --help docker inspect --help -- 说明操作容器ID和操作容器name效果一样 帮助命令:docker version 帮助命令:docker info 帮助命令:docker --help 停止容器: docker stop 095815a83b5a 启动容器: docker start 095815a83b5a 重启容器: docker restart ubuntuexe 进入容器: docker exec -it 095815a83b5a /bin/bash 删除容器: docker rm -f 095815a83b5a 删除镜像: docker rmi -f imageID 删除多个镜像：docker rmi $(docker images -q ubuntu) 删除多个容器：docker rm -f $(docker ps -a -q) 拉取镜像：docker pull debian 拉取镜像：docker pull ubuntu:18.04 # xxx[:TAG] ubuntu:18.04 ubuntu:latest 搜索镜像：docker search --limit 5 redis 导出镜像：docker save -o ubuntu.tar ubuntu:18.04 导入镜像：docker load < ubuntu.tar 镜像打标签：docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] 容器详情: docker inspect ubuntuexe 容器进程: docker top ubuntuexe 容器日志: docker logs ubuntuexe 运行容器：docker exec -it ubuntuexe/bin/bash # 新开bash，exit退出原容器不会结束 附上容器：docker attach ubuntuexe # 登入原有bash，exit退出会退出停止原有容器 提交容器：docker commit ubuntuexe/ubuntu 保存镜像：docker save imageid > /tmp/ubuntu.tar 加载镜像：docker load < /tmp/ubuntu.tar 导出容器：docker export containerid > /tmp/ubuntu.tar 导入容器：docker import - exe/ubuntu:latest < < /tmp/ubuntu.tar 容器传输：docker cp .vimrc ubuntuexe:/root/.vimrc 容器传输：docker cp ubuntuexe:/root/READEME.md READEME.md 运行容器：docker run --privileged=true -it ubuntu:18.04 /bin/bash 运行容器：docker run --privileged=true --restart=always -v /opt:/opt -v -p 8022:22 -itd ubuntu:18.04 /bin/bash 已经过运行的容器设置自启动： docker update --restart=always ubuntuname 自动启动 ： docker update --restart=always d5c440e6d44f 更新 CPU 共享数量： docker update --cpu-shares 512 f361b7d8465 更新容器的重启策略： docker update --restart=always f361b7d8465 更新容器内存： docker update -m 500M f361b7d8465 -- docker run -d启动的容器和--restart=always每次进入退出直接 doc…

README.win.md
type: item
date: 2022-11-24T12:08:00+08:00
description: set qt env for 32bit system set QTDIR = D:\Qt\Qt5.12.12\5.12.12\msvc2017 set Qt_INCLUDEPATH_ = %QTDIR%\include set Qt_LIBPATH_ = %QTDIR%\lib qt-vsaddin-msvc2017 bug test (please use 2.2.2(Qt4VSv1.0) or 2.7.2(QtVS_v304) auto moc with icon bug for rc ") qt-vsaddin-msvc2017-2.2.2 ** OK qt-vsaddin-msvc2017-2.5.2-rev.01 qt-vsaddin-msvc2017-2.6.0-rev.07 qt-vsaddin-msvc2017-2.7.2-rev.02 IDI_ICON1 ICON DISCARDABLE "QtWidgetsApplication.ico qt-vsaddin-msvc2017-2.8.1-rev.06 qt-vsaddin-msvc2017-2.9.1-rev.06 qt-vsaddin-msvc2017-2.10.1-rev.2 QList<QPair<QWidget *, QPair<QString, char *>>> tablist = {{treeWidget, {"treeitem", "模板树图"}}}; error C2440: “初始化”: 无法从“initializer list”转换为“QList<QPair>” ``` win10 输入法突然自动变成繁体： -- win10繁体字改简体字快捷键介绍 在微软输入法的前提下,直接按住【Ctrl+Shift+F】 1.# Windows10 与 WSL（Ubuntu）的文件互访 从WSL访问win10的文件 cd /mnt 从win10访问WSL的文件 打开Ubuntu explorer.exe . 导出当前系统 wsl --export Ubuntu-20.04 D:\Ubuntu-20.04.tar 注销当前已经安装的Linux发行版 wsl --unregister Ubuntu-20.04 将导出的Linux发行版重新导入并安装到D盘 wsl --import Ubuntu-20.04 D:\Ubuntu-20.04 D:\Ubuntu-20.04.tar --version 2 设置默认登录用户 ubuntu2004 config --default-user WSL https://learn.microsoft.com/en-us/windows/wsl/install-manual wsl -l wsl -l -v wsl --set-default-version 2 wsl -s Ubuntu-20.04 wsl --set-version Ubuntu-20.04 1 wsl --set-version Ubuntu-18.04 2 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi 功率源 Power source 协议 agree on; agreement; protocol; windows 修改WSL系统ubuntu默认登陆用户 ubuntu1804.exe config --default-user root -- download: vs_community.exe --layout e:\vs2017layout --lang zh-CN --add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended vs_Community.exe --layout e:\vs2017layout --lang zh-CN --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Component.VC.ATLMFC --includeRecommended -- install： …

README.osx.md
type: item
date: 2022-11-24T12:08:00+08:00
description: 0，虚拟主机： Location:Tokyo IP Address:202.182.127.16 Username:root Password:Z1%eG9Yw8T-A)p)n 用户 [doubi] 的配置信息： I P : 202.182.127.16 端口 : 2333 密码 : 543604 加密 : aes-128-ctr 协议 : auth_aes128_md5 混淆 : tls1.2_ticket_auth_compatible 设备数限制 : 0(无限) 单线程限速 : 0 KB/S 用户总限速 : 0 KB/S 禁止的端口 : 无限制 A，使用步骤： 下载RT2870驱动包含kext（5.0.1.25）和pkg（5.0.0.27）pkg解包手动安装 116 pkgutil --expand RT2870Utility.pkg WirelessUtility 117 cd WirelessUtility/ 118 cat RT2870Utility.pkg/Payload | cpio -i 1、安装 RT2870USBWirelessDriver.kext 到 /S/L/E*/，本人安装到clover/kexts/10.11 2、安装 RaWLAPI.framework 到 /Library/Frameworks 3、安装 WirelessUtility 到 /Applications，并设置为自动启动 B，使用步骤，版本51方法失效： Google Chorme 51 cd ~/Library/Google sudo chown root:wheel GoogleSoftwareUpdate Google Chorme 62 cd /Library/Google/GoogleSoftwareUpdate rm GoogleSoftwareUpdate.bundle C，使用步骤，破解删除软件包五次限制： cd /Users/liujun/Library/Preferences/ com.corecode.UninstallPKG.plist Usage=1 Paddle.framework replace in UninstallPKG.app D，原生支持NTFS磁盘读写 macbook:~ uwe$ sudo umount /Volumes/UNTITLED macbook:~ uwe$ sudo mount -t ntfs -o rw,auto,nobrowse /dev/disk3s1 ~/ntfs-volume 或者编译mac版本的ntfs开源驱动 E，删除系统报告里面安装软件记录： sudo vim /Library/Receipts/InstallHistory.plist F，sublimetext 3.1.1 3176激活码： ----- BEGIN LICENSE ----- sgbteam Single User License EA7E-1153259 8891CBB9 F1513E4F 1A3405C1 A865D53F 115F202E 7B91AB2D 0D2A40ED 352B269B 76E84F0B CD69BFC7 59F2DFEF E267328F 215652A3 E88F9D8F 4C38E3BA 5B2DAAE4 969624E7 DC9CD4D5 717FB40C 1B9738CF 20B3C4F1 E917B5B3 87C38D9C ACCE7DD8 5F7EF854 86B9743C FADC04AA FB0DA5C0 F913BE58 42FEA319 F954EFDD AE881E0B ------ END LICENSE ------ 如果无效更改hosts：sudo vim /private/etc/hosts 127.0.0.1 www.sublimetext.com 127.0.0.1 license.sublimehq.com 设置中文： 官网安装默认 Package Control 选项，找到 Tools->Install Package Control选项，即可调出 Package Control 或者Tools->Command Palette...选项，输入 ipc ,点击 Install Package Control，即可调出 Package Control 找到Preferences->Package Control 输入框输入ip，点击install Package输入clz，点击ChineseLocalizations 设置成中文

README.termux.md
type: item
date: 2022-11-24T12:08:00+08:00
description: cmd /k adb shell pm list package | grep home pm uninstall --user 0 com.miui.newhome pm uninstall --user 0 com.android.browser https://github.com/green-green-avk/build-proot-android tar -xzvf proot-android-aarch64.tar.gz nitrogen:/data/local/tmp # ./su.sh proot warning: can't sanitize binding "ubuntu-fs/root": No such file or directory proot warning: can't canonicalize /tmp/: No such file or directory proot warning: Unable to create temp directory for f2fs bug probe: No such file or directory proot warning: can't chdir("/root/.") in the guest rootfs: No such file or directory proot info: default working directory is now "/" root@localhost:/# 1, tsinghua: $ sudo nano /etc/apt/sources.list deb http://mirrors.tuna.tsinghua.edu.cn/raspberry-pi-os/raspbian/ buster main non-free contrib rpi deb-src http://mirrors.tuna.tsinghua.edu.cn/raspberry-pi-os/raspbian/ buster main non-free contrib rpi $ sudo nano /etc/apt/sources.list.d/raspi.list deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui 2, USTC $ sudo nano /etc/apt/sources.list deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi deb-src http://mirrors.ustc.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi $ sudo nano /etc/apt/sources.list.d/raspi.list deb http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/ buster main deb-src http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/ buster main $ sudo apt-get update $ sudo apt-get upgrade 树莓派更换国内镜像源 网上常见的教程往往都是替换软件更新源（/etc/apt/sources.list），实际上还存在一个系统更新源（/etc/apt/sources.d/raspi.list）。我们对这两个文件进行修改，将其中的源网址更换为国内镜像站点即可。 步骤一、备份原文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak 步骤二、修改源文件 此处更换为中科大站点，地址如下： http://mirrors.ustc.edu.cn/raspbian/raspbian/ http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/ 先更改软件源文件，执行命令如下： sudo vim /etc/apt/sources.list 修改文件中网址即可，修改后文件如下： deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ b…

README.unix.md
type: item
date: 2022-11-24T12:08:00+08:00
description: Linux 安装远程桌面服务和客户端，可以登录win10的远程桌面 1997 sudo apt-get install xrdp 1998 xrdp 1999 sudo apt-get install rdesktop 2000 rdesktop 2001 rdesktop 192.168.1.6 2002 rdesktop -f -u lenovo 192.168.1.6 rdesktop退出全屏模式 :使用组合键ctrl+alt+enter进行切换。” Linux mint xfce 19 使用记录 解决汉化不完全的问题 sudo apt-fast install language-pack-zh-hans language-pack-gnome-zh-hans libreoffice-l10n-zh-cn thunderbird-locale-zh-hans firefox-locale-zh-hans 安装谷歌拼音输入法 安装完成后注销或者重启即可。 sudo apt-fast install fcitx fcitx-config-gtk fcitx-ui-classic fcitx-googlepinyin netstat 命令参数和使用详解 netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships netstat - 打印网络连接、路由表、接口统计、伪装连接和多播成员关系 -a 显示所有状态的 socket -n 不做名字解析，不加此参数，80 端口会显示成 http,127.0.0.1 显示成 localhost,uid 为 0 显示成 root 等等 -e 显示更多信息如用户，inode -p 显示 pid 和程序名字 -t 显示 tcp 链接 -u 显示 udp 链接 -x 显示 unix 套接字 netstat -anpte #查看 tcp 链接 netstat -anpue #查看 udp 链接 netstat -anpxe #查看 unix 套接字链接 netstat -r # 查看路由表 netstat -r 和 route 命令输出是差不多的 netstat -s # 查看网络统计数据，netstat -s 展示各协议的统计信息 netstat -i # 查看网络接口信息 netstat -rF 和 netstat -rC 两个命令的区别是一个输出的是路由表，一个输出的是路由缓存。 默认 netstat -r 输出的是 netstat -rF 结果。-F 为默认参数 spring.io 上的项目介绍： https://spring.io/blog/2021/03/11/announcing-spring-native-beta GitHub 仓库： https://github.com/spring-projects-experimental/spring-native mvn install mvn spring-boot:build-image or gradle bootBuildImage Spring Native 0.9.2 设计用于 Spring Boot 2.4.5。为了保证支持和兼容性，最新的 Spring Boot 2.x 次要版本的每个修补版本都会发布一个新版本的 Spring Native。 Spring Native 0.9.2 仅支持 Spring Boot 2.4.5，建议使用指定版本。 https://www.graalvm.org/22.0/reference-manual/native-image/ gu install native-image After this additional step, the native-image executable will become available in the $JAVA_HOME/bin directory. javac Example.java native-image Example ./example export GRAALVM_HOME=/home/andy/share/graalvm-ce-java11-22.0.0.2 export PATH=$GRAALVM_HOME/bin:$PATH export PATH=$GRAALVM_HOME/lib/svm/bin:$PATH UNIX Socket 是同一台服务器上不一样进程间的通讯机制。 TCP/IP Socket 是网络上不一样服务器之间进程的通讯机制…

python.MD
type: item
date: 2022-11-24T12:08:00+08:00
description: 【python】基础语法总结 1 代码作用域 代码作用域 1，块级作用域：python没有，比如if for里面定义的变量外层可用 2，局部作用域：python有，函数里面定义的变量外部不可用 3，作用域链：Python中有，变量会由函数内到外找，作用域执行前已定 4，函数在没有执行前，内部代码不执行，这点Python和javascript有共性 li = [lambda :x for x in range(10)] print(li0) # ：9 5，函数内部的变量，无global声明直接使用，会去查找外层当做全局变量使用，不可赋值 6，函数内部的变量，如果不加global声明直接赋值定义，会被当做局部变量，跟全局无关 函数定义了本地作用域，而模块定义的是全局作用域。 如果想要在函数内定义全局作用域，需要加上global修饰符。

golang.MD
type: item
date: 2022-11-24T12:08:00+08:00
description: 【Golang】基础语法总结 一，关键字 （关键字25个） break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 二，数据类型 NUMBER，STRING， BOOLEAN ARRAYS，SLICES，MAPS 三，内置常量 true false iota nil 三，内建类型 int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error 三，内建函数 make len cap new append copy close delete complex real imag panic recover close 用于channel 通讯。使用它来关闭channel delete 用于在map 中删除实例。 len 和cap 可用于不同的类型， len 用于返回字符串、slice 和数组的长度. new 用于各种类型的内存分配。 make 用于内建类型（map、slice 和channel）的内存分配。 copy 用于复制slice append 用于追加slice。 panic 和recover 用于异常处理机制 print 和println 是底层打印函数，可以在不引入fmt 包的情况下使用。 complex、real 和imag 全部用于处理复数 四，变量声明 使用const关键字：const 常量名 常量类型 = 常量值 数组 声明格式：var 数组名 [元素个数]元素类型 var arr1 [5]int //具有5个int元素的数组，未进行初始化，元素默认为零值 var arr2 [5]int{1, 2, 3, 4, 5} //定义并直接初始化 切片 声明格式：var 切片名 []切片类型 var sic1 []int //声明含有多个未知元素的切片 var sic2 []int{} //声明空切片 结构体声明 type 结构体名 struct {}：右括号必须和type在同一行 枚举声明 使用iota+const关键字 const ( r = iota //0 s = iota //1 t = iota //2 ) const ( u = iota //0 v //1 w //2 ) const ( u1 = iota //0 v1, w1, x1 = iota, iota, iota //1, 1, 1 ) 类型别名 type 类型别名 类型原名 for 初始条件; 判断条件; 条件变换 { //TODO } range关键字的使用 作用：迭代遍历切片/数组中的每一个元素，默认有两个返回值，第一个为元素下标，第二个为元素数据 switch语句 golang保留break关键字，在switch语句中如果不写则默认添加 break可用于for/switch/select continue只可以用于for case后面可以跟多个条件 Go语言改进了 switch 的语法设计，case 与 case 之间是独立的代码块，不需要通过 break 语句跳出当前 case 代码块以避免执行到下一行 switch 中的表达式是可选的，可以省略。如果省略表达式，则相当于 switch true，这种情况下会将每一个 case 的表达式的求值结果与 true 做比较，如果相等，则执行相应的代码 //首先声明变量 var num1 int = 1 switch num1 { case 1: //... case 2: //... case 3, 4, 5: //... ... default: //... } //直接使用初始化语句 switch num2 := 1; num1 { case 1: //... case 2: //... ... default: //... } //switch后面可以不添加参数 var num int = 0 switch { case num > 90: //... case num < 90: //... default: //... } var name, sex, addr string = "andy", "man", "xian" name := "string" （自动推导类型不可以写到函数外，作为全局变量） numbers := make(…

c++.MD
type: item
date: 2022-11-24T12:08:00+08:00
description: 内存分配，堆栈 class 的成员变量的存储在堆上还是栈上，取决于class的对象创建在堆上还是栈上 string 对象内部约定字符串字面量小于上表的阀值（15BYTE），分配在栈上，否在在堆上创建 vector 这个对象存在栈中,肯定是堆，只有堆能动态分配内存 函数模板 typename 参数自动分展开，析出 std::forword 参数转发 OTHER 为什么在处理“Hello,Word!!”只在栈中进行内存分配？ 为什么在处理“Hello,My name is peter!!”这样的字符串,就会在堆中进行内存分配？ string对象内部约定: 只要传入的字符串字面量小于上表的阀值,string内部实现在栈中分配内存,有个很骚的名字小型字符串优化(Small String Optimisation)。 只要大于上述C++编译器指定阀值,string对象内部会隐式执行new操作在堆中根据指定的字符串尺寸分配初次内存。 如果后续任何字符串的push_back操作,string会根据“double方案”的内存分配方式对堆内存执行扩容操作,见前文《对[C/C++]指针与字符串的总结》。 还有根据RAII的约定,C++编译器会对string对象在其调用函数的生命周期结束之时自动执行垃圾回收。(见上图的输出)。

Sqlite3.md
type: item
date: 2022-11-24T12:08:00+08:00
description: Sqlite3并发读写注意事项 sqlite3的锁及事务类型 sqlite3总共有三种事务类型：BEGIN [DEFERRED /IMMEDIATE / EXCLUSIVE] TRANSCATION， 五种锁，按锁的级别依次是：UNLOCKED /SHARED /RESERVERD /PENDING /EXCLUSIVE。 当执行select即读操作时，需要获取到SHARED锁（共享锁）， 当执行insert/update/delete操作(即内存写操作时)， 需要进一步获取到RESERVERD锁（保留锁）， 当进行commit操作(即磁盘写操作时)，需要进一步获取到EXCLUSIVE锁（排它锁）。 对于RESERVERD锁，sqlite3保证同一时间只有一个连接可以获取到保留锁，也就是同一时间只有一个连接可以写数据库(内存)，但是其它连接仍然可以获取SHARED锁，也就是其它连接仍然可以进行读操作（这里可以认为写操作只是对磁盘数据的一份内存拷贝进行修改，并不影响读操作）。 对于EXCLUSIVE锁，是比保留锁更为严格的一种锁，在需要把修改写入磁盘即commit时需要在保留锁/未决锁的基础上进一步获取到排他锁，顾名思义，排他锁排斥任何其它类型的锁，即使是SHARED锁也不行，所以，在一个连接进行commit时，其它连接是不能做任何操作的（包括读）。 PENDING锁（即未决锁），则是比较特殊的一种锁，它可以允许已获取到SHARED锁的事务继续进行，但不允许其它连接再获取SHARED锁，当已存在的SHARED锁都被释放后（事务执行完成），持有未决锁的事务就可以获得commit的机会了。sqlite3使用这种锁来防止writer starvation（写饿死）。 这里写图片描述 死锁的情况 死锁的情况：当两个连接使用begin transaction开始事务时， 第一个连接执行了一次select操作（已经获取到SHARED锁）， 第二个连接执行了一次insert操作（已经获取到了RESERVERD锁）， 此时第一个连接需要进行一次insert/update/delete（需要获取到RESERVERD锁）， 第二个连接则希望执行commit（需要获取到EXCLUSIVE锁），由于第二个连接已经获取到了RESERVERD锁，根据RESERVERD锁同一时间只有一个连接可以获取的特性，第一个连接获取RESERVERD锁的操作必定失败， 而由于第一个连接已经获取到SHARED锁，第二个连接希望进一步获取到EXCLUSIVE锁的操作也必定失败。就导致了事务死锁。 事务类型的使用原则 在用”begin transaction”显式开启一个事务时，默认的事务类型为DEFERRED，锁的状态为UNLOCKED，即不获取任何锁，如果在使用的数据库没有其它的连接，用begin就可以了。如果有多个连接都需要对数据库进行写操作，那就得使用BEGIN IMMEDIATE/EXCLUSIVE开始事务了。 使用事务的好处是： 1.一个事务的所有操作相当于一次原子操作，如果其中某一步失败，可以通过回滚来撤销之前所有的操作，只有当所有操作都成功时，才进行commit，保证了操作的原子特性； 2.对于多次的数据库操作，如果我们希望提高数据查询或更新的速度，可以在开始操作前显式开启一个事务，在执行完所有操作后，再通过一次commit来提交所有的修改或结束事务。 对SQLITE_BUSY的处理 当有多个连接同时对数据库进行写操作时，根据事务类型的使用原则，我们在每个连接中用BEGIN IMMEDIATE开始事务，即多个连接都尝试取得保留锁的情况，根据保留锁同一时间只有一个连接可以获取到的特性，其它连接都将获取失败，即事务开始失败，这种情况下，sqlite3将返回一个SQLITE_BUSY的错误，如果我们不希望操作就此失败而返回，就必须处理SQLITE_BUSY的情况， sqlite3提供了sqlite3_busy_handler或sqlite3_busy_timeout来处理SQLITE_BUSY， 对于sqlite3_busy_handler，我们可以指定一个busy_handler来处理，并可以指定失败重试的次数。 而sqlite3_busy_timeout则是由sqlite3自动进行sleep并重试，当sleep的累积时间超过指定的超时时间时，最终返回SQLITE_BUSY。 需要注意的是，这两个函数同时只能使用一个，后面的调用会覆盖掉前次调用。从使用上来说，sqlite3_busy_timeout更易用一些，只需要指定一个总的超时时间，然后sqlite自己会决定多久进行重试以及重试的次数，直到达到总的超时时间最终返回SQLITE_BUSY。并且，这两个函数一经调…