Git submodule 速成
简单记录一下 git submodule 的用法,注意不是 subtree。 添加子模块 可以使用 submodule 功能添加子模块仓库 1git submodule add <子模块仓库的url> 默认会在主仓库下创建一个与子模块仓库同名的文件夹,用于存储子模块的所有内容。 也可以指定子模块使用的文件夹 1git submodule add <子模块仓库的url> subdir 子模块所使用的仓库url最好是公开可访问的,并且最好没有修改推送权限,只能单向接受远程更新的推送,这样最省事。 克隆含子模块的仓库 在克隆一个含有子模块的git仓库时,默认对主仓库的 git clone 命令不会把子模块也拉取下拉,只会得到一个包含子模块信息的.gitsubmodules文件和子模块对应的空目录,这是考虑到实际用途中某些子模块可能是可选项而非必选项。 可以在主仓库中使用下面的命令进行子模块的初始化和更新 12git submodule initgit submodule update 这两个命令可以合起来 1git submodule update...
开源协议与知识共享协议
开源协议 开源协议是一套用于规范软件源代码使用、修改和分发规则的版权管理工具,广泛应用于编程语言、框架、工具库等软件开发项目。 开源协议的核心理念是“代码公开与共享”,区别于传统软件许可的“闭源限制”,旨在促进协作开发、技术创新和知识传播。 这里记录一下常见的几种开源协议: 较严格的,不允许衍生品闭源: GPL(General Public License) 最严格的开源协议。 要求:衍生代码必须使用 GPL 协议进行开源,确保代码的持续开放性。 LGPL(Lesser General Public License) GPL 的宽松版本。 要求:允许与闭源代码链接使用,但修改后的开源部分仍需沿袭 LGPL 协议。 Mozilla Public License(MPL) 比 LGPL 更灵活。 要求:修改源码的部分需要提供说明文档,且仅修改的部分需开源。 较宽松的,允许衍生品闭源: MIT / BSD 最宽松的开源协议。 要求:仅需保留原作者的版权声明。 允许:自由使用、修改、分发(包括闭源的后续开发)。 补充:最新的 MIT 和 BSD...
Gauss-Legendre 和 Gauss-Lobatto 积分表计算
在数值计算的编程实践中经常需要获取 Gauss-Legendre 和 Gauss-Lobatto 积分点和权重, 除了直接打表,还可以利用 Legendre 多项式自身的特点和牛顿迭代法通过高效的数值计算获得相应的积分点和权重,这也是本文关注的内容。 本文的主要动机是对下面两份 MATLAB 代码的学习和解释: Legendre-Gauss Quadrature Weights and Nodes Legende-Gauss-Lobatto nodes and weights 基本概念 Gauss 型数值积分 首先需要介绍一些关于 Gauss 型数值积分的基本内容。 对于标准积分区间 \([-1,1]\) 的如下形式的数值积分公式: \[ I(f) = \int_{-1}^1 f(x)\,dx \approx I_n(f) = \sum_{i=1}^n w_i f(x_i) \] 其中节点 \(x_i \in [-1,1]\)。这些节点和权重的选取有一共 \(2n\) 个自由度,至多可以达到...
LeetCode 42. 接雨水
刷到一个笑话:字节跳动员工是不是个个都会接雨水。顺便记录一下这道题吧。 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 1234输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 显然需要算出接满水之后的状态数组,即每一个位置的水面高度,然后减掉原本的柱子高度,对数组求和即可。 如何计算水面高度: 如果当前位置的高度大于左右两侧的高度,那么该位置的水面高度就是当前位置的高度,其实就是没有接水; 如果当前位置的高度小于左右两侧的高度,那么该位置的水面高度就是左右两侧的高度中的最小值。 所以问题归结于计算当前位置左侧的最高高度和右侧的最高高度,两次遍历即可。 12345678910111213141516171819202122232425262728class Solution {public: int...
Linux 后台任务笔记
学习整理一下关于后台任务相关的内容,进一步的分析必须从Linux中的进程,信号等机制出发,但是我对此没啥兴趣,这里只是从实用的角度进行学习,浅尝辄止。 通常在shell中执行的任务都是前台任务,即任务会占用前台,在任务结束之前无法进行下一个任务。在命令结尾使用&可以将命令使用后台进程执行,例如 1./test.sh & 其中的测试脚本在不断写入日志,每隔4秒写入一次 12345678#!/bin/bashlogfile="time_log.txt"while true; do echo "$(date)" >> "$logfile" sleep 4done 使用jobs命令可以查看当前的后台任务,每一个后台任务都有独立的序号(注意不是pid),例如 1[1]+ Running ./test.sh...
Docsify 搭建记录
需要一个小型的在线文档系统,Docsify可以满足需求,记录一下搭建记录,主要参考Docsify官方的中文文档。 本地搭建 前提:本地需要安装 nodejs 并完成相应配置。 新建DocBase/文件夹,在其中本地安装 docsify-cli 1npm i docsify-cli -g 由于 docsify-cli 不是全局安装的,存在找不到 hexo 命令的问题,对于 Windows 可以通过临时添加路径到 PATH 解决,在 DocBase 目录下执行 1$env:Path += ";$((Get-Item -Path .\node_modules\.bin -Force).FullName)" 初始化项目 1docsify init ./docs 初始化过程会自动新建./docs子文件夹,并生成如下文件: index.html:项目入口 README.md:内容会被渲染成项目主页 .nojekyll:防止Github忽视下划线开头文件 使用下面的命令可以在本地预览 123cd ./docsdocsify serve# or docsify...
Linux 学习笔记:控制台,终端,tty
整理一下关于下面这些概念的学习: 终端(terminal) 控制台(console) 电传打字机...
Linux 服务器配置笔记
记录一下我在服务器上鼓捣了什么,系统版本是CentOS7.9,由于普通用户没有 root 用户权限,服务器还不联网,不能使用傻瓜式的安装,只能在用户家目录下使用源码编译的方式安装软件。 虽然我可以登root账户,但是root操作有风险,可能把公共服务器搞坏了,还是选择用普通账户操作。 tmux 安装过程主要参考官方wiki和非root用户安装tmux - 三三仨仨的文章 - 知乎。 下载 tmux-3.2a.tar.gz,还需要两个依赖: libevent-2.1.12-stable.tar.gz ncurses.tar.gz (ncurses-6.3) 如果可以通过包管理器下载依赖,当然更好。 完整安装过程如下 1234567891011121314151617181920cd ~/tmptar -zxvf libevent-2.1.12-stable.tar.gzcd libevent-2.1.12-stable/./configure --prefix=$HOME/.local --enable-sharedmake && make...
Cpp 并行计算学习笔记
基本概念 首先学习几组基本概念: 并发(Concurrency)/并行(Parallelism) 同步(Synchronous)/异步(Asynchronous) 进程(Process)/线程(Thread) 并发 / 并行 并发指的是多个任务在同一时间段内被同时推进,可能是同时执行不同的任务,也可能是频繁交替执行每一个任务的一小部分 并行指的是多个任务在同一时间段内真正同时执行 举个例子: 学生在课后可以并发地完成每一个科目的作业:一会写语文作业,一会又切换回写数学作业,切换可以非常频繁,但是不可能同时写两科作业,也就是不能并行 人体的消化系统的任务和循环系统的任务在并行地执行:在同一时间内,肠道蠕动和血液循环在同时进行,不可能说心脏跳动时就让肠道蠕动暂停 同步 /...
GCC 源码编译安装(离线,普通用户)
gcc 的非 root 用户离线编译安装比其他的软件的源码安装都要复杂:因为它有依赖,在服务器上无法通过联网下载,要提前下载依赖的压缩包,而且gcc的编译时间很长。 安装过程主要参考CentOS7 离线升级安装gcc到6.3.0 和Linux 非root安装GCC9.1.0 下载依赖 在官网或者镜像网站下载 gcc-11.4.0.tar.gz,传到服务器上解压为~/tmp/gcc-11.4.0 进入~/tmp/gcc-11.4.0子目录,需要解决下载依赖的问题。在可以联网的情况下,直接执行自带的下载依赖的脚本 ./contrib/download_prerequisites。如果服务器无法联网,则需要手动下载处理 查看上述脚本,找到四个必要的依赖 gmp,mpfr,mpc,isl 以及对应的具体版本,例如...