diff --git a/Assert/Image/image-20230720110920769.png b/Assert/Image/image-20230720110920769.png deleted file mode 100644 index 17f0d48..0000000 Binary files a/Assert/Image/image-20230720110920769.png and /dev/null differ diff --git a/专业积累/原理/编译.md b/专业积累/原理/编译.md index 7774d66..abafacc 100644 --- a/专业积累/原理/编译.md +++ b/专业积累/原理/编译.md @@ -4,12 +4,31 @@ ^F:\CODING\C++\ZASM\MAIN.CPP /c /ZI /JMC /nologo /W3 /WX- /diagnostics:column /sdl /Od /D _DEBUG /D _CONSOLE /D _UNICODE /D UNICODE /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /permissive- /Fo"X64\DEBUG\\" /Fd"X64\DEBUG\VC143.PDB" /external:W3 /Gd /TP /FC F:\CODING\C++\ZASM\MAIN.CPP +cl /c /ZI /JMC /nologo /W3 /WX- /diagnostics:column /sdl /Od /D _DEBUG /D _CONSOLE /D _UNICODE /D UNICODE /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /permissive- /Fo"X64\DEBUG\\" /Fd"X64\DEBUG\VC143.PDB" /external:W3 /Gd /TP /FC D:\CODE\C++\ZASM\MAIN.CPP ``` +```shell +cl -c -nologo -O2 -fp:fast /EHsc -DNDEBUG -Fobuild\.objs\xasm\windows\x64\release\src\main.cpp.obj src\main.cpp +``` + + + # Xmake ```shell -./cl.exe -c -nologo -O2 -fp:fast /EHsc -DNDEBUG -Fobuild\.objs\xasm\windows\x64\release\src\main.cpp.obj src\main.cpp +xmake config -y -P . -p windows -m debug -a x64 -o "build" +xmake build -y -P . -w "zasm" +cl -c -nologo -O2 -fp:fast /EHsc -DNDEBUG -Fobuild\.objs\xasm\windows\x64\release\src\main.cpp.obj src\main.cpp +link -nologo -dynamicbase -nxcompat -machine:x64 /opt:ref /opt:icf -out:build\xasm.exe build\main.obj +``` + + + +```shell +#还需要在代码里设置环境变量 +cl -c -nologo -O2 -fp:fast /EHsc -DNDEBUG -Fobuild\.objs\xasm\windows\x64\release\src\main.cpp.obj src\main.cpp +link -nologo -dynamicbase -nxcompat -machine:x64 /opt:ref /opt:icf -out:build\xasm.exe build\main.obj + [ 25%]: cache compiling.release src\main.cpp "D:\\Microsoft Visual Studio\\VS2022\\VC\\Tools\\MSVC\\14.36.32532\\bin\\HostX64\\x64\\cl.exe" -c -nologo -O2 -fp:fast /EHsc -DNDEBUG -Fobuild\.objs\xasm\windows\x64\release\src\main.cpp.obj src\main.cpp [ 50%]: linking.release xasm.exe diff --git a/专业积累/工具/devops/Docker.md b/专业积累/工具/devops/Docker.md new file mode 100644 index 0000000..0132ebb --- /dev/null +++ b/专业积累/工具/devops/Docker.md @@ -0,0 +1,80 @@ +# Centos 安装 + +## 卸载 + +```shell +yum list installed | grep docker + +yum -y remove docker-ce-cli.x86_64 +yum -y remove docker-ce.x86_64 +yum -y remove containerd.io +``` + +## 安装 + +```shell +#安装依赖 +yum install -y yum-utils device-mapper-persistent-data lvm2 +yum-config-manager --add-repo https://mirrors.cloud.tencent.com/docker-ce/linux/centos/docker-ce.repo +#安装最新版 +yum install -y docker-ce docker-ce-cli containerd.io + +#验证版本 +docker version +``` + +## 多容器 + +```shell +pip install docker-compose +``` + + + +# 配置 + +```shell +#启动 +systemctl start docker +#设置开机启动 +systemctl enable docker +#查看运行状态 +service docker status + +#创建配置目录 +mkdir -p /etc/docker +#添加配置 +tee /etc/docker/daemon.json <<-'EOF' +{ + "registry-mirrors": ["https://mirror.ccs.tencentyun.com"] +} +EOF +#重启进程 +systemctl daemon-reload && systemctl restart docker +``` + +# 运行 + +```shell +#拉去 hello-world镜像 创建hello容器 +docker run --name=hello hello-world +#查看容器 +docker ps -a +#查看镜像 +docker images +#拉取镜像 +docker pull johngong/calibre-web +#创建容器 +docker create --name=calibre-web -p 80:8083 -v /data/calibre-web/library:/library -e WEBLANGUAGE=zh_CN johngong/calibre-web +#启动容器 +docker start calibre-web +docker stop calibre-web +docker kill calibre-web +#删除容器 +docker rm -f hello +#删除镜像 +docker rmi hello-world +#删除所有镜像 +docker images -q +docker rmi `docker images -q` +``` diff --git a/专业积累/工具/devops/LNMP 镜像.md b/专业积累/工具/devops/LNMP 镜像.md new file mode 100644 index 0000000..9d96010 --- /dev/null +++ b/专业积累/工具/devops/LNMP 镜像.md @@ -0,0 +1,78 @@ +# LNMP + +```shell +docker pull nginx:alpine +docker pull php:7-fpm-alpine +docker pull postgres:alpine + +docker run --rm -d -p 80:80 --name nginx nginx:alpine +``` + +# 配置 + +## 全局 + +```shell +touch ~/docker/docker-compose.yml +touch ~/docker/nginx.conf +``` + +```yaml +version: "3" +services: + + Nginx: + image: nginx:alpine + ports: + - 80:80 + volumes: + - ./web:/usr/share/nginx/html:ro + - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro + + PHP: + image: undefined01/php:7-fpm-alpine + volumes: + - ./web:/var/www/html:rw + + Database: + image: postgres:alpine + environment: + POSTGRES_USER: "postgres" + POSTGRES_PASSWORD: "rootroot" + volumes: + - ./data:/var/lib/postgresql/data:rw +``` + +```yaml +server { + listen 80; + server_name localhost; + + location / { + root /usr/share/nginx/html; + index index.php index.html index.htm; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + + location ~ \.php$ { + fastcgi_pass PHP:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name; + include fastcgi_params; + } +} +``` + +# 运行 + +```shell +#启动 +docker-compose up -d +#查看 +docker container ls +``` + diff --git a/专业积累/工具/devops/devops.md b/专业积累/工具/devops/devops.md new file mode 100644 index 0000000..ab1d946 --- /dev/null +++ b/专业积累/工具/devops/devops.md @@ -0,0 +1,7 @@ +# 版本工具 + +## git + +``` +``` + diff --git a/专业积累/工具/git.md b/专业积累/工具/git.md index 4407151..7284915 100644 --- a/专业积累/工具/git.md +++ b/专业积累/工具/git.md @@ -52,3 +52,21 @@ git:x:500:500::/home/git:/usr/local/git/bin/git-shell git clone git@175.24.226.114:/data/repositories/zlib.git ``` +# 客户端 + +```shell +#设置 +git config --global user.email ouczbs@qq.com +git config --global user.name ouczbs +git config --global push.default simple + +git remote set-url origin git@175.24.226.114:ouczbs/docker.git +git remote -v + +git diff +git log . +git add . +git commit m "push commit" +git push +``` + diff --git a/专业积累/工具/xmake/xmake 解析.md b/专业积累/工具/xmake/xmake 解析.md new file mode 100644 index 0000000..dfd7f7e --- /dev/null +++ b/专业积累/工具/xmake/xmake 解析.md @@ -0,0 +1,261 @@ +# xmake + +## option + +```lua +-- core/base/task.lua +function task.common_options() + if not task._COMMON_OPTIONS then + task._COMMON_OPTIONS = + { + {'q', "quiet", "k", nil, "Quiet operation." } + , {'y', "yes", "k", nil, "Input yes by default if need user confirm." } + , {nil, "confirm", "kv", nil, "Input the given result if need user confirm." + , values = function () + return {"yes", "no", "def"} + end } + , {'v', "verbose", "k", nil, "Print lots of verbose information for users." } + , {nil, "root", "k", nil, "Allow to run xmake as root." } + , {'D', "diagnosis", "k", nil, "Print lots of diagnosis information (backtrace, check info ..) only for developers." + , "And we can append -v to get more whole information." + , " e.g. $ xmake -vD" } + , {nil, "version", "k", nil, "Print the version number and exit." } + , {'h', "help", "k", nil, "Print this help message and exit." } + , {} + , {'F', "file", "kv", nil, "Read a given xmake.lua file." } + , {'P', "project", "kv", nil, "Change to the given project directory." + , "Search priority:" + , " 1. The Given Command Argument" + , " 2. The Envirnoment Variable: XMAKE_PROJECT_DIR" + , " 3. The Current Directory" } + , {category = "action"} + } + end + return task._COMMON_OPTIONS +end +``` + + + +```lua +-- core/base/option.lua +-- parse arguments with the given options +function option.parse(argv, options, opt) + -- run parser + local pargs = cli.parsev(argv, flags) + --... +end +``` + +## task + +- build + - config + - + +```lua +-- core/base/task.lua +-- the menu +function task.menu(tasks) + -- make menu + local menu = {} + for taskname, taskinst in pairs(tasks) do + + -- has task menu? + local taskmenu = taskinst:get("menu") + -- main? + if taskinst:get("category") == "main" then + + -- delay to load main menu + menu.main = function () + + -- translate main menu + local mainmenu, errors = task._translate_menu(taskmenu) + if not mainmenu then + os.raise(errors) + end + + -- make tasks for the main menu + mainmenu.tasks = {} + for name, inst in pairs(tasks) do + -- has menu? + local m = inst:get("menu") + -- add task + mainmenu.tasks[name] = + { + category = inst:get("category"), + shortname = m.shortname, + description = m.description + } + end + -- ok + return mainmenu + end + -- delay to load task menu + menu[taskname] = function () + local taskmenu, errors = task._translate_menu(taskmenu) + return taskmenu + end + end + -- ok? + return menu +end +``` + + + +## config + +- global + - "C:\Users\ouczbs\AppData\Local\.xmake\xmake.conf" +- local + - D:\ZEngine\.xmake\windows\x64 + +```lua +-- core/base/global.lua +-- get the configure file +function global.filepath() + return path.join(global.directory(), xmake._NAME .. ".conf") +end +-- load the global configuration +function global.load() + -- load configure from the file first + local filepath = global.filepath() + -- load configs + local results, errors = io.load(filepath) + + -- merge the configure + for name, value in pairs(results) do + if global.get(name) == nil then + global.set(name, value) + end + end +end +``` + +## theme + +```lua +-- core/base/theme.lua + +-- load the given theme +function theme.load(name) + -- find the theme script path + local scriptpath = nil + if name then + for _, dir in ipairs(theme.directories()) do + scriptpath = path.join(dir, name, "xmake.lua") + if os.isfile(scriptpath) then + break + end + end + end + + -- not exists? uses the default theme + if not scriptpath or not os.isfile(scriptpath) then + scriptpath = path.join(os.programdir(), "themes", "default", "xmake.lua") + end + + -- get interpreter + local interp = theme._interpreter() + + -- load script + local ok, errors = interp:load(scriptpath) + if not ok then + return nil, errors + end + + -- load theme + local results, errors = interp:make("theme", true, false) + if not results and os.isfile(scriptpath) then + return nil, errors + end + + -- get result + local result = results[name] + if not result then + return nil, string.format("the theme %s not found!", name) + end + + -- new an instance + local instance, errors = _instance.new(name, result, interp:rootdir()) + if not instance then + return nil, errors + end + + -- save the current theme instance + theme._THEME = instance + return instance +end +``` + + + +## main + +```lua +--core/_xmake_main.lua +-- load modules +local main = require("main") + +-- the main function +function _xmake_main() + return main.entry() +end +``` + + + +```lua +--core/main.lua +function main.entry() + -- init + local ok, errors = main._init() + --[[ + -- core/base/option.lua + -- parse options + option.parse(xmake._COMMAND_ARGV, task.common_options(), { allow_unknown = true }) + + -- core/base/task.lua + --load task + option._translate(menu) + task.menu(xmake._COMMAND_ARGV, task.common_options(), { allow_unknown = true }) + ]] + -- load global configuration + ok, errors = global.load() + --[[ + -- core/base/global.lua + -- load config + global.load() + ]] + -- load theme + local theme_inst = theme.load(os.getenv("XMAKE_THEME") or global.get("theme")) or theme.load("default") + colors.theme_set(theme_inst) + + -- init option + ok, errors = option.init(menu) + --[[ + -- core/base/global.lua + -- load config + task.menu() + option.parse(xmake._COMMAND_ARGV, options, { populate_defaults = false }) + ]] + + -- show help? + if main._show_help() then + return main._exit(true) + end + + -- get task instance + local taskname = option.taskname() or "build" + local taskinst = task.task(taskname) or project.task(taskname) + + -- run task + scheduler:enable(true) + scheduler:co_start_named("xmake " .. taskname, function () + local ok, errors = taskinst:run() + end) + ok, errors = scheduler:runloop() +end +``` + diff --git a/专业积累/库/C++/spdlog.md b/专业积累/库/C++/spdlog.md new file mode 100644 index 0000000..625b5bf --- /dev/null +++ b/专业积累/库/C++/spdlog.md @@ -0,0 +1,12 @@ +# 源码 + +[github](https://github.com/gabime/spdlog) + +# 使用 + +## 输出格式 + +通过`set_pattern`可设定日志格式,如`set_pattern("[%Y-%m-%d %H:%M:%S.%e][%l](%@): %v");` + + + diff --git a/日常积累/工具/Anki/Anki.md b/日常积累/工具/Anki/Anki.md new file mode 100644 index 0000000..0661951 --- /dev/null +++ b/日常积累/工具/Anki/Anki.md @@ -0,0 +1,38 @@ +# 插件 + +[官网](https://ankiweb.net/shared/info/1020366288) + +- 热力图 + - Review Headmap + - 1771074083 +- 制卡 + - AnkiConnect + - 2055492159 +- 同步 + - ankisyncd + - 自建服务器 + +- 硬链接 + +- ```shell + mklink \J D:\ouczbs\docker\anki\anki-word-query\fastwq C:\Users\ouczbs\AppData\Roaming\Anki2\addons21\fastwq + ``` + +- + +# 共享词库 + +[官网](https://ankiweb.net/shared/decks/math) + +- 音标 +- 数学 +- 驾照 +- 计算机 + - Git + +# 第三方工具 + +## 浏览器 + +- Anki 划词制卡助手 +- \ No newline at end of file diff --git a/程序开发/Web开发/Jupyter.md b/程序开发/Web开发/Jupyter.md index 2baad5a..996edd4 100644 --- a/程序开发/Web开发/Jupyter.md +++ b/程序开发/Web开发/Jupyter.md @@ -2,7 +2,7 @@ ## 目录 -`mkdir /data && mkdir /data/jupyter && cd /data/jupyter` +`mkdir /data/jupyter && cd /data/jupyter` # Conda @@ -70,16 +70,26 @@ trusted-host = mirrors.tencentyun.com ```shell #无后台启动 nohup jupyter notebook --allow-root > /data/jupyter.log 2>&1 & + +%%writefile /etc/systemd/system/jupyter.service [Unit] Description=Jupyter Notebook After=network.target [Service] Type=simple -ExecStart=nohup jupyter notebook --allow-root > /data/jupyter.log 2>&1 & +#ExecStart 是执行文件 +ExecStart=/root/miniconda3/bin/jupyter-notebook --config=/root/.jupyter/jupyter_notebook_config.py --allow-root #文件路径名 Restart=always RestartSec=10 [Install] WantedBy=multi-user.target ``` +```shell +ps -a 显示进程pid +kill -9 pid 终止进程 +#开机自启 +systemctl enable jupyter.service +service jupyter start +``` \ No newline at end of file diff --git a/程序开发/游戏开发/UE4/源码编译.md b/程序开发/游戏开发/UE4/源码编译.md new file mode 100644 index 0000000..ed8c2fc --- /dev/null +++ b/程序开发/游戏开发/UE4/源码编译.md @@ -0,0 +1,10 @@ +# 下载 + +```python +#下载 realease 包 +#解压 +#运行 startup.bat +#运行 GenerateProjectFiles.bat +#VS 编译 +``` + diff --git a/程序开发/工具开发/zero/序列化.md b/程序开发/编程语言/zero/序列化.md similarity index 100% rename from 程序开发/工具开发/zero/序列化.md rename to 程序开发/编程语言/zero/序列化.md diff --git a/程序开发/工具开发/zero/数据事件.md b/程序开发/编程语言/zero/数据事件.md similarity index 100% rename from 程序开发/工具开发/zero/数据事件.md rename to 程序开发/编程语言/zero/数据事件.md diff --git a/程序开发/工具开发/zero/数据类型.md b/程序开发/编程语言/zero/数据类型.md similarity index 100% rename from 程序开发/工具开发/zero/数据类型.md rename to 程序开发/编程语言/zero/数据类型.md diff --git a/程序开发/工具开发/zero/数据规范.md b/程序开发/编程语言/zero/数据规范.md similarity index 100% rename from 程序开发/工具开发/zero/数据规范.md rename to 程序开发/编程语言/zero/数据规范.md diff --git a/程序开发/工具开发/zero/数据语言.md b/程序开发/编程语言/zero/数据语言.md similarity index 100% rename from 程序开发/工具开发/zero/数据语言.md rename to 程序开发/编程语言/zero/数据语言.md diff --git a/程序开发/编程语言/汇编/汇编语言.md b/程序开发/编程语言/汇编/汇编语言.md new file mode 100644 index 0000000..7f37078 --- /dev/null +++ b/程序开发/编程语言/汇编/汇编语言.md @@ -0,0 +1,198 @@ +# CPU架构 + +## 总线接口单元 + +实现指令的读取功能 + +实现数据的读取写入功能 + +### 数据总线 + +字节编址:`1Byte = 8Bit` + +总线编码: 20Bit,支持1MB的存储大小 + +寄存器:16Bit,仅能描述64KB大小 + +基寄存器 * 16 + 偏移寄存器 = 总线地址 + +### 段寄存器 + +1MB的空间分段,每段大小不超过64KB,段地址即16位寄存器地址 * 16 + +程序多次运行,变化的是段寄存器,逻辑地址保持不变 + +段之间可以分开也可以重合,取决于数据如何存储 + +- CS + - 存放指令的代码段地址 +- DS + - 存放数据的数据段地址 +- SS + - 程序堆栈段地址 +- ES + - 附加段寄存器 +- IP + - 专用寄存器,指令偏移地址 + - 仅由跳转类指令间接控制 + +- 内部寄存器 + +### 指令队列 + +六字节,先进先出,跳转时刷新整个队列 + +## 执行单元 + +对指令进行译码,并执行 + +### 通用寄存器 + +寄存器描述的地址都是偏移地址,每次运行的偏移地址保持不变 + +- AH + AL = AX + - 累加器 +- BH + BL = BX + - 基址寄存器 +- CH + CL = CX + - 计数器 +- DH + DL = DX + - 数据寄存器 +- SP + - 堆栈指针寄存器 + - 会受到指令控制,不应用于其他目的 +- BP + - 基址指针寄存器 +- SI + - 源变址寄存器 + - 如字符串首地址 +- DI + - 目的变址寄存器 + - 如字符串第n个元素地址 + +# 程序数据 + +```assembly +assume cs:code, ds:data, ss:stack ;定义了三个段 code,data,stack 只是为了阅读的方便,用其他的名称是一样的。 + +data segment + dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h +data ends + +stack segment + dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +stack ends + +code segment +start: mov ax,stack # stack 段的首地址 + mov ss,ax + mov sp, 20h; + + mov ax, data ; + mov ds, ax; ds指向data 段的首地址 + + mov bx,0 + mov cx, 8 + +s: push [bx] + add bx, 2 + loop s ;以上将data段中的0~15单元中的8个字型 数据一次入栈 + + mov bx,0 + mov cx,8 + s0: pop [bx] + add bx,2 + loop s0; 出栈,把数据放回到data段。 如此就把数据逆序了。 + mov ax, 4c00h + int 21h ;中断调用操作系统子程序 +code ends + +end start + +``` + + + +## 代码段 + +代码数据 + +## 数据段 + +程序数据 + +## 堆栈段 + +### 标志寄存器 + +ALU计算标志,中断、出错等 + +状态标志 + +- 进位标志CF +- 奇偶标志PF +- 调整标志AF +- 零标志ZF + +- 符号标志SF +- 溢出标志OF + +控制标志 + +- 方向标志DF +- 中断标志IF +- 单步标志TF + +### ALU + +算术逻辑单元,核心计算单元,电路实现了基础运算的程序功能 + +# 指令实例 + +## 接口 + +```assembly +mov dest,src ;dest ← src +mov al,[bx+si+6] ;指令功能:AL←[BX+SI+6] +;[取地址存储的数据] + +``` + + + +## 函数调用 + +```assembly +;lea 取函数地址到rax寄存器 +lea rax,[TPoint::`vcall'{0}' (07FF6C97EC00Eh)] + TPoint::TestStaticFunction(); +00007FF61BAC9A32 call TPoint::TestStaticFunction (07FF61B95BEF1h) +00007FF61B95BEF1 jmp TPoint::TestStaticFunction (07FF61B9A2900h) +00007FF61B9A2900 mov eax,dword ptr [TPoint::static_int_a (07FF61BB21BA0h)] + +00007FF765B1E5AF call TPoint::Testvirtual (07FF765B068CFh) +00007FF765B068CF jmp TPoint::Testvirtual (07FF765B529E0h) + FuncPointer fp1 = &TPoint::Testvirtual; +00007FF765B1E5B4 lea rax,[TPoint::`vcall'{0}' (07FF765B06663h)] + FuncPointer fp2 = &TPoint::Testvirtua2; +00007FF765B1E5C3 lea rax,[TPoint::`vcall'{8}' (07FF765B0600Fh)] + +0x00007ff765c8fa88 {zplus.exe!void(* TPoint::`vftable'[3])()} { +0x00007ff765b068cf {zplus.exe!TPoint::Testvirtual(void)}, +0x00007ff765b07581} +``` + + + +# 编译 + +``` +cl.exe -c -nologo /EHsc -Fobuild\.objs\zasm\windows\x64\release\src\main.cpp.obj src\main.cpp +link.exe -nologo -dynamicbase -nxcompat -machine:x64 -out:build\zasm.exe + +[ 25%]: compiling.release src\main.cpp +"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.36.32532\\bin\\HostX64\\x64\\cl.exe" -c -nologo /EHsc -Fobuild\.objs\zasm\windows\x64\release\src\main.cpp.obj src\main.cpp +[ 50%]: linking.release zasm.exe +"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.36.32532\\bin\\HostX64\\x64\\link.exe" -nologo -dynamicbase -nxcompat -machine:x64 -out:build\windows\x64\release\zasm.exe build\.objs\zasm\windows\x64\release\src\main.cpp.obj +``` +