diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..88f9f1b7 --- /dev/null +++ b/404.html @@ -0,0 +1,1518 @@ + + + +
+ + + + + + + + + + + + + +RustSBI是RISC-V下可用的SBI固件实现,它拥有“独立包”和“原型设计系统”。 +RISC-V SBI是RISC-V下不可或缺的固件接口,它提供了足以操作系统使用的基本功能; +更多的功能性接口应当通过其它的工业标准实现。
+独立包是分别实现RustSBI的项目,每个不同的主板都拥有不同的仓库和解决方案。 +这些方案包括但不限于:
+ +这些解决方案的文档和下载链接都在各自的仓库中。
+RustSBI原型设计系统提供了从SBI到UEFI、LinuxBoot的完整解决方案, +它拥有一个图形化的编译界面,能在不同的主板上运行。
+为了编译原型设计系统,复制仓库后使用以下的命令:
+cargo termconfig
+
在图形界面配置完毕后,配置文件将保存到Xtask.toml
文件中,以供编译过程阅读。
接下来,我们可以选择仅编译或者编译并烧录。使用以下的命令编译:
+cargo make
+
或者,使用以下的命令直接编译和烧录到目标主板:
+cargo flash
+
RustSBI原型设计系统的链接:https://github.com/rustsbi/standalone
+ + + + + + + + +Wasm-bpf
is a WebAssembly eBPF library, toolchain and runtime powered by CO-RE(Compile Once – Run Everywhere) libbpf. It can help you build almost every eBPF programs or usecases to Wasm
with nearly zero modification, and run them cross platforms with Wasm sandbox.
⌨️ Introduction to wasm-bpf \
+📦 Features \
+🚀 Running a standalone Wasm program from CLI or Docker \
+🔌 Embed a Wasm-eBPF function in your Rust program or C/C++ program \
+🔨 Examples covering the use cases from tracing
, networking
to security
\
+📚 How it works \
+🤖 Build the runtime
📚 Check out our more documentations
+WebAssembly
(Wasm) is a portable binary format for executable code. The code is executed at a nearly-native speed in a memory-safe (for host) sandbox, with clearly defined resource constraints, and APIs for communicating with the embedding host environment (eg. proxy).The wasm-bpf
project combines Wasm and eBPF technologies to enhance the performance and programmability of eBPF applications.
With wasm-bpf
, users can dynamically load and securely execute user-defined or community-contributed Wasm-eBPF codes as plug-ins
in their software products, such as observability platforms or service proxy. This enables efficient and scalable data collection, while also allowing for advanced processing and analysis of that data.
It also enables developers to write eBPF programs in familiar languages like C/C++
, Rust
, Go
, and more than 30 other programming languages, and deploy them easily across different Linux distributions. Additionally, cloud providers can leverage wasm-bpf to offer a secure
and high-performance
environment for their customers to develop and deploy eBPF applications in their cloud environments.
Run the following command to install the wasm-bpf
CLI tool:
cargo install wasm-bpf
+
Running the runqlat
example with docker:
$ wget https://eunomia-bpf.github.io/wasm-bpf/examples/runqlat/runqlat.wasm
+$ docker run --rm -it --privileged -v $(pwd):/examples ghcr.io/eunomia-bpf/wasm-bpf:latest /examples/runqlat.wasm
+Tracing run queue latency... Hit Ctrl-C to end.
+
+ usecs : count distribution
+ 0 -> 1 : 72 |***************************** |
+ 2 -> 3 : 93 |************************************* |
+ 4 -> 7 : 98 |****************************************|
+ 8 -> 15 : 96 |*************************************** |
+ 16 -> 31 : 38 |*************** |
+ 32 -> 63 : 4 |* |
+ 64 -> 127 : 5 |** |
+ 128 -> 255 : 6 |** |
+ 256 -> 511 : 0 | |
+ 512 -> 1023 : 0 | |
+ 1024 -> 2047 : 0 | |
+ 2048 -> 4095 : 1 | |
+
For more tools to distribute and deploy Wasm-eBPF programs for usecases from Observability
, Networking
to Security
, please refer to eunomia-bpf repo.
Add the following line to your Cargo.toml to use Wasm-bpf as a library
:
wasm-bpf-rs = "0.2.1"
+
See the main.rs for an example of how to use the wasm-bpf-rs
library.
General purpose
: provide most abilities from eBPF to Wasm, polling
from the ring buffer or perf buffer, bidirectional communications between kernel
eBPF and userspace
Wasm using maps
, dynamically loading
, attaching
or detaching
, etc. Supports a large number of eBPF program types and map types.High performance
: No serialization
overhead for complex data types, using shared memory
to avoid copy overhead between host and Wasm.Easy to use
: provide a similar developing experience as the libbpf-bootstrap, auto generate
the Wasm-eBPF skeleton headers and type definitions for bindings. Write your eBPF programs in C/C++
, Rust
, Go
and compile to Wasm.Ultralightweight
: the miminal runtime has only 1.5 MB
in binary size. Compiled Wasm module would be only ~90K
. With the same toolchain, you can easily build your own Wasm-eBPF runtime in any languages and platforms!See the examples directory for examples of eBPF programs written in C, Rust, Go and compiled to Wasm, covering the use cases from tracing
, networking
to security
.
For tools to distribute Wasm-eBPF programs in OCI
images, please refer to eunomia-bpf repo.
See the examples directory for examples of eBPF programs written in C, Rust, Go and compiled to WASM.
+tracing examples
+- bootstrap and rust-bootstrap: trace process exec and exit
+- runqlat: summarizes scheduler run queue latency as a histogram
+- execve and go-execve: trace execve syscall
security example
+- lsm and go-lsm: check the permission to remove a directory
networking example
+- sockfilter: monitoring packet and dealing with __sk_buff.
+- sockops: Add the pid int tcp option in syn packet.
An eBPF application typically consists of two parts: the user space part
and the kernel space part
. With wasm-bpf, the user space part is executed in a WebAssembly (Wasm) sandbox while the kernel space part is executed in the eBPF runtime in the Linux kernel. This separation of concerns allows for greater flexibility and security in developing and running eBPF programs, as well as the ability to leverage the benefits of both Wasm and eBPF.
The wasm-bpf runtime require two parts: the host side
(Outside the Wasm runtime) and the Wasm guest side
(Inside the Wasm runtime).
C++
built on the top of libbpf and WAMR. Another more complex runtime implement in Rust
is runtime/wasm-bpf-rs, based on Wasmtime.any
languages, any
eBPF libraries and any
Wasm runtimes with the same System interface.libbpf-wasm
header only library to provide libbpf APIs for Wasm guest C/C++
code.bpftool
tool to generate the Wasm-eBPF skeleton
headers, and C struct definitions
for passing data between the host and Wasm guest without serialization.Rust
, Go
and other language support is similar to the C/C++
support.For details compile process, please refer to the examples/bootstrap/README.md. The figure below shows the overall interaction between the eBPF and Wasm runtimes:
+A Wasm module could load and control multiple eBPF programs at the same time, and can call another Wasm module written in other languages to process the data or control with the component model.
+We have proposed a new WASI issue wasi-bpf.
+We have two types of runtime samples:
+The runtime can be built as a library or a standalone executable. see docs/build.md to build the runtimes.
+Zineland is a simple and effective magazine building framework that can quickly generate magazine-style static pages from Markdown documents
+ cargo install zine
+
brew install zineland/tap/zine
+
In the long river of time, we found that repetitive and tedious work brings only time and energy consumption to everyone.Indeed,in our continuous thinking and progress, excellent tools have appeared before our eyes.But what follows is that the rapid development of the types and quantities of tools makes it difficult for us to quickly and easily get started with a tool according to specific needs. On the contrary, "Baidu" and "Google" have become our commonplace. +Keep trying in link after link and answer. Some are jerky English documents, some are a few words, which undoubtedly increases our cost of use. So the original intention of Tooldiy is to solve this problem.We want to use the environment of the open source community to continuously collect and refine tools from all walks of life (after all, the one that suits you is the best). Tooldiy will recommend and analyze various tools from an objective and user perspective, not just limited to a fixed direction.
+Many times we will encounter environment configuration problems of many tools during the development process. We have to spend a lot of time thinking and learning to use them. Many times, these tasks can only exercise your patience in configuring the environment. We want to Everyone focuses on the tool itself, so we want to maintain some automated scripts for tool configuration and construction or a docker environment for the convenience of users. Of course, the build scripts we left when writing can also be provided for users to learn. It's exciting to think about a tool that can be obtained with one click, let's build it together!
+As long as it can bring you help and a better experience, this is the meaning of Tooldiy's existence.
+Now, let's use it together!
+The original intention of this project is to provide a warehouse and wiki for maintaining a tool description. It is a project that lowers the threshold of use and is convenient for everyone. Our principle is not limited to any specific discipline and field. We can share all the tools we think are useful (Pay attention to the introductory introduction, which is in line with the original intention of the project). It can be shared under the premise of respecting the labor of tool producers. Therefore, we do not allow everyone to share pirated and cracked tools. We welcome all kinds of PR on the premise of standardization. If you have any doubts other than the appeal, you can file an issue or contact the warehouse management. When it comes to paid content tools, we encourage sharing and hope that everyone will do a good job of disclosing their information and marking their prices. This project will not advertise any tools, and there will be no special advertisement behaviors such as location are arranged according to the time of submission. We also welcome various PR requests to improve the reading experience of this project (including but not limited to adding a line break to improve the reading experience, adding a project logo, Chinese and English proofreading, etc.) (:з)∠) This project is still in its infancy, and it is very much in need of improvement and error correction from everyone.
+If you have already written articles that you would like to add here, you can do so in the following ways:
+If you wonder where to start, check the writing template is a good idea.
+Note
+Click the link to join the group chat tooldiy
+
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
最近 LLM(大语言模型)实在火爆,出了不少开源模型,比如 Alpaca1、ChatGLM2、BELLE3 等等,让每个人都有机会运行和训练专属自己的 LLM,我也迫不及待了。
+但是,熟悉我的老读者朋友应该知道,虽然我是搞算法的,也发过几篇论文,但我是走的是贫穷科研的路线,一张显卡都没有。像 ChatGLM-6B 这种模型,在我的小破 Mac 上根本跑不起来。Alpaca 的 CPU 版本虽然能跑,但它中文水平实在太烂了。有没有什么模型不仅中文好,又可以不依赖显卡?RWKV4进入了我的视野。
+RWKV 是一种纯 RNN 的架构,能够进行语言建模5,目前最大参数规模已经做到了 14B6。目前的在线体验地址:
+Raven RWKV 7B - a Hugging Face Space by BlinkDL
+不过请注意,上面这个体验模型的微调语料英文占 99%,所以中文水平并不是最好的。作者 @PENG Bo 最近发布的 RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%
这个模型的中文微调语料占 50%,中文水平更好。以下我也会基于该模型进行操作。
首先,RWKV 的模型分为很多种,都发布在作者的 huggingface7 上:
+其中:
+我下载的是 RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth
8 , 即参数量为 7B 的对话模型,微调预料中 49% 是英文,50% 是中文。ctx4096 表示微调是的上下文长度。
这个模型有 14.8 GB,请务必确保自己电脑的可用硬盘空间在 40 GB 以上(因为后面要对这个模型进行转换和量化,需要占用更多的硬盘空间。)
+下载好的模型配合 ChatRWKV9这个仓库里的代码就可以跑了,但是它对 CPU 策略的支持最低只到 fp32i8,7B 模型需要 12 GB 内存才能跑起来,我用 16GB 内存的 Mac 试了一下,跑是跑起来了,但是非常慢。
+所以,这里需要介绍一下能够更充分利用 CPU 的方法:
+saharNooby/rwkv.cpp: INT4 and FP16 inference on CPU for RWKV language model (github.com)
+rwkv.cpp 可以将 RWKV 原始模型的参数转化为 float16,并量化到 int4,可以在 CPU 上更快地运行,也可以节省更多的内存。
+以下是操作步骤。
+需要安装 git(没有 git 的朋友,可能你要补的前置知识有点多,我建议自行搜索)
+git clone --recursive https://github.com/saharNooby/rwkv.cpp.git
+cd rwkv.cpp
+
rwkv.cpp 的开发者已经预编译了不同平台上的依赖库,可以在这里下载:https://github.com/saharNooby/rwkv.cpp/releases
+下载的时候请注意操作系统类型和支持的架构。由于作者没有预编译对 Mac m1 的 ARM64 架构的依赖库,所以我选择自行编译(需要安装 cmake,并在 shell 中移动到 rwkv.cpp 路径下):
+cmake -DBUILD_SHARED_LIBS=ON .
+cmake --build . --config Release
+
需要装 PyTorch
+我直接把下载好的模型放在了 rwkv.cpp 的路径下,然后执行以下命令:
+python rwkv/convert_pytorch_to_ggml.py ./RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth ./rwkv.cpp-7B.bin float16
+
其实就是让 python 运行 rwkv/convert_pytorch_to_ggml.py
这个转换模型的代码, ./RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth
是待转换的模型的路径, ./rwkv.cpp-7B.bin
是转换后的路径,float16 是要转换成什么类型的参数。
其实上面转换好的 ./rwkv.cpp-7B.bin
已经可以用了,但是它要占用 16GB 内存。为了减少内存占用,可以将 ./rwkv.cpp-7B.bin
量化为 int4,可以省一半内存,也就是只占 6GB 内存。只需要执行以下命令:
python rwkv/quantize.py ./rwkv.cpp-7B.bin ./rwkv.cpp-7B-Q4_1_O.bin 4
+
然后你就会得到一个大小只有 6GB 的模型了。
+同样,一行命令搞定:
+python rwkv/chat_with_bot.py ./rwkv.cpp-7B-Q4_1_0.bin
+
让我们看看效果,首先是内存占用,不到 6GB
+然后是问答和执行命令:
+效果还不错,不过最后莫名其妙又多说了一段话,可能是量化带来的精度损失?非量化版本的效果如下:
+希望开发者之后能对量化版本进行测评,让 rwkv 变得更好用。
+以上就是我在 Mac 上用 6GB 内存运行 7B 的中文语言模型 RWKV 的过程了,希望对读者朋友们有所帮助。
+参考
+https://github.com/antimatter15/alpaca.cpp ↩
+https://github.com/THUDM/ChatGLM-6B ↩
+https://github.com/LianjiaTech/BELLE ↩
+发布几个RWKV的Chat模型(包括英文和中文)7B/14B欢迎大家玩 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/618011122 ↩
+RWKV-v2-RNN 原理:超越 Transformer,实现 O(T) 的语言建模 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/514840332 ↩
+RWKV:用RNN达到Transformer性能,且支持并行模式和长程记忆,既快又省显存,已在14B参数规模检验 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/599150009 ↩
+BlinkDL (BlinkDL) (huggingface.co) https://huggingface.co/BlinkDL ↩
+RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth https://huggingface.co/BlinkDL/rwkv-4-raven/blob/main/RWKV-4-Raven-7B-v9x-Eng49%25-Chn50%25-Other1%25-20230418-ctx4096.pth ↩
+https://github.com/BlinkDL/ChatRWKV ↩
+本文向大家介绍一款用于换源个工具帮助大家更快的更换所使用软件的源提高开发效率
+++git clone https://github.com/57307407/Source-changer.git
+
目前支持 maven 、 npm 、 python(pip)换源
+由于本工具使用 python 语言进行开发,使用前请先安装python环境
+++下载链接:https://www.python.org/
+
输入命令
+++python -V
+or
+python3 -V
+
出现python版本号即为安装完毕
+++python main.py / python3 main.py
+更换maven源时需要在命令前加sudo
+即: sudo python3 main.py
+
选择需换源的软件
+选择更换的镜像
+This article shows you how to deploy the project in your windows environment.
+++Note: This requires a python environment,
+python3.10
in my case.
git clone https://github.com/cargo-youth/ToolDiy.git
+
Download link:pip install mkdocs
+
The theme of this site is material. Use the following command to install it.
+pip install mkdocs-material
+
pip install pymdown-extensions
+pip install mkdocs-awesome-pages-plugin
+
Here is a pit, when I install, directly install pip install i18n
is not ok, you need to specially install i18n under mkdocs, then ask chatGPT, he provided me with a solution is pip install mkdocs-i18n-plugin
; Unfortunately, no, finally find the following command on Google, right.
pip install mkdocs-static-i18n
+
mkdocs serve
+
mkdocs build
+
code-server extensions
+Install Docker Desktop, see Install Docker Desktop on Windows
+Run Docker Desktop,and then open CMD or PowerShell,execute
+docker pull jklincn/c-os
+
After the image is successfully pulled, execute
+docker run -d --privileged -p 58888:8080 jklincn/c-os
+
Now, you can open http://localhost:58888 in the browser. Development environment is ready.
+You can control the containers by the Docker Desktop graphical interface.
+++The host mapping port 58888 can be changed at will. Service port 8080 can be changed by modifying Dockerfile.
+
Here is the Dockerfile, for others who need demand for reference and modification.
+FROM ubuntu:22.04
+SHELL ["/bin/bash", "-c"]
+
+RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
+ apt-get update && apt-get install -y \
+ gcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \
+ git wget python3 vim file curl \
+ autoconf automake autotools-dev libmpc-dev libmpfr-dev libgmp-dev \
+ gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+ zlib1g-dev libexpat-dev \
+ ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \
+ && rm -rf /var/lib/apt/lists/*
+
+ARG QEMU_VERSION=7.0.0
+RUN cd /tmp && \
+ wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \
+ tar xf qemu-${QEMU_VERSION}.tar.xz && \
+ cd qemu-${QEMU_VERSION} && \
+ ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \
+ make -j && \
+ make install && \
+ cd .. && \
+ rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz
+
+ARG CODE_VERSION=4.10.1
+RUN cd /usr/local/ && \
+ wget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ tar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ ln -s /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \
+ rm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ wget https://github.com/microsoft/vscode-cpptools/releases/download/v1.14.4/cpptools-linux.vsix && \
+ code --install-extension cpptools-linux.vsix && \
+ rm cpptools-linux.vsix && \
+ wget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+ code --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+ rm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix
+
+EXPOSE 8080/tcp
+CMD ["code", "--auth", "none", "--bind-addr", "0.0.0.0:8080"]
+
code-server extensions
+Install Docker Desktop, see Install Docker Desktop on Windows
+Run Docker Desktop,and then open CMD or PowerShell,execute
+docker pull jklincn/rust-os
+
After the image is successfully pulled, execute
+docker run -d --privileged -p 58888:8080 jklincn/rust-os
+
Now, you can open http://localhost:58888 in the browser. Development environment is ready.
+You can control the containers by the Docker Desktop graphical interface.
+++The host mapping port 58888 can be changed at will. Service port 8080 can be changed by modifying Dockerfile.
+
Here is the Dockerfile, for others who need demand for reference and modification.
+FROM ubuntu:22.04
+SHELL ["/bin/bash", "-c"]
+
+RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
+ apt-get update && apt-get install -y \
+ gcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \
+ git wget python3 vim file curl \
+ autoconf automake autotools-dev libmpc-dev libmpfr-dev libgmp-dev \
+ gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+ zlib1g-dev libexpat-dev \
+ ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \
+ && rm -rf /var/lib/apt/lists/*
+
+ARG QEMU_VERSION=7.0.0
+RUN cd /tmp && \
+ wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \
+ tar xf qemu-${QEMU_VERSION}.tar.xz && \
+ cd qemu-${QEMU_VERSION} && \
+ ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \
+ make -j && \
+ make install && \
+ cd .. && \
+ rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz
+
+ARG CODE_VERSION=4.10.1
+RUN cd /usr/local/ && \
+ wget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ tar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ ln -s /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \
+ rm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ wget https://openvsxorg.blob.core.windows.net/resources/rust-lang/rust-analyzer/linux-x64/0.3.1435/rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+ code --install-extension rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+ rm rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+ wget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+ code --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+ rm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix
+
+WORKDIR /root
+ARG RUST_VERSION=nightly
+ENV RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
+ENV RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
+RUN mkdir .cargo && \
+ echo '[source.crates-io]' >> .cargo/config && \
+ echo 'registry = "https://github.com/rust-lang/crates.io-index"' >> .cargo/config && \
+ echo 'replace-with = "ustc"' >> .cargo/config && \
+ echo '[source.ustc]' >> .cargo/config && \
+ echo 'registry = "git://mirrors.ustc.edu.cn/crates.io-index"' >> .cargo/config && \
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup-init && \
+ chmod +x rustup-init && \
+ ./rustup-init -y --default-toolchain ${RUST_VERSION} --target riscv64imac-unknown-none-elf && \
+ rm rustup-init && \
+ source $HOME/.cargo/env && \
+ cargo install cargo-binutils && \
+ rustup component add llvm-tools-preview && \
+ rustup component add rust-src
+
+EXPOSE 8080/tcp
+CMD ["code", "--auth", "none", "--bind-addr", "0.0.0.0:8080"]
+
# (ubuntu) install package
+sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \
+ gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+ zlib1g-dev libexpat-dev pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \
+ git tmux python3 python3-pip ninja-build
+# install QEMU
+mkdir dev
+pushd dev
+wget https://download.qemu.org/qemu-7.0.0.tar.xz
+tar -xf qemu-7.0.0.tar.xz
+cd qemu-7.0.0
+./configure --target-list=x86_64-softmmu,aarch64-softmmu,riscv64-softmmu --enable-debug
+make -j$(nproc)
+make install
+popd
+# Configure environment variables
+vi ~/.bashrc
+export PATH=$PATH:/path/to/qemu-7.0.0/build
+# Update the system path after configuration
+source ~/.bashrc
+# test qemu
+qemu-system-riscv64 --version
+# install rust
+curl https://sh.rustup.rs -sSf | sh
+# Update the system path after configuration
+source $HOME/.cargo/env
+# test rust
+rustc --version
+# rust related package installation
+rustup target add riscv64gc-unknown-none-elf
+cargo install cargo-binutils
+rustup component add llvm-tools-preview
+rustup component add rust-src
+
# (centos) install package
+sudo yum install autoconf automake libmpc-devel mpfr-devel gmp-devel gawk bison flex \
+ texinfo patchutils gcc gcc-c++ zlib-devel expat-devel git
+# gcc version is too low
+yum install centos-release-scl
+scl enable devtoolset-8 bash
+# test gcc
+gcc -v
+
vi ~/.cargo/config
+[source.crates-io]
+registry = "https://github.com/rust-lang/crates.io-index"
+replace-with = 'ustc'
+[source.ustc]
+registry = "git://mirrors.ustc.edu.cn/crates.io-index"
+
apt list --installed
+apt list --all-versions <package-name>:列出指定软件包的所有版本。
+apt list --upgradable | grep <search-term>:列出包含搜索词的可更新软件包。
+apt list --verbose:显示更详细的输出信息。
+
+apt edit-sources
+
+sudo apt build-dep package #安装相关的编译环境,这真是个神技能,有了它,编译安装都变得索然无味了
+sudo apt --purge autoremove
+apt-get clean && sudo apt-get autoclean #清理无用的包
+
+aptitude
+apt-add-repository [options] repository #修改软件源命令 (software-properties-common)
+
apt search package #搜索包
+apt show package #获取包的相关信息,如说明、大小、版本等
+apt depends package #了解使用依赖
+apt rdepends package #查看该包被哪些包依赖
+apt-cache pkgnames #执行pkgnames子命令列出当前所有可用的软件包
+apt policy package #使用policy命令显示软件包的安装状态和版本信息。
+
+sudo apt install package #安装包
+sudo apt install package=version #安装指定版本的包
+sudo apt install package --reinstall #重新安装包
+sudo apt -f install #修复安装, "-f = --fix-missing"
+sudo apt remove package #删除包
+sudo apt purge package #删除包,包括删除配置文件等
+sudo apt autoremove #自动卸载所有未使用的软件包
+
+sudo apt source package #下载该包的源代码
+sudo apt update #更新apt软件源信息
+sudo apt upgrade #更新已安装的包
+sudo apt dist-upgrade #升级系统
+sudo apt dselect-upgrade #使用dselect升级
+sudo apt build-dep package #安装相关的编译环境
+sudo apt clean && sudo apt autoclean #清理无用的包
+sudo apt clean #清理已下载的软件包,实际上是清楚/var/cache/apt/archives目录中的软件包
+sudo apt autoclean #删除已经卸载的软件包备份
+sudo apt-get check #检查是否有损坏的依赖
+
sudo dpkg -i <package.deb> #安装包
+sudo dpkg -r <package.deb> #删除包
+sudo dpkg -p <package.deb> #彻底删除包(包括配置文件)
+dpkg -l #列出当前已安装的包
+
++本文介绍了 Chocolatey 的安装与使用过程。这篇文章不是为普通用户编写的,而是给需要统一开发环境的开发人员写的
+为什么要用 Chocolatey
+如果使用过 Linux 一定熟悉一行代码进行软件的搜索,安装,更新,卸载等所有操作。而 Windows 中的也有包管理器 Chocolatey 。虽然没有 Linux 里的包管理器那么强大,但让 Windows 安装软件方便了很多。
+
方法一:以管理员身份打开 cmd.exe (很重要),执行以下代码 +
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
+
方法二:以管理员身份打开 powershell.exe ,执行以下代码
+Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
+
在有的时候,因为电脑安装防火墙的原因,可能会导致前两个方法出现问题,但是方法三不存在此问题,最好用 powershell.exe 来执行 install.psl 脚本,可以看到安装的完整过程。
+Chocolatey 运行需要的环境: +- Windows 7+ / Windows Server 2003+ +- PowerShell v2+ +- .NET Framework 4+ (不用安装,安装脚本时会自动安装)
+choco install -y git
+choco install -y python
+choco install -y chromium
+cinst -y nodejs.install
+...
+
choco 和 cinst 都是安装命令, -y 避免对协议的二次确认,可以在官网 https://chocolatey.org/packages 查找确认自己要安装的包。
+choco upgrade git
choco uninstall git
choco install dev-package.config
+dev-package.config:
+<?xml version="1.0" encoding="utf-8"?>
+ <packages>
+ <package id="jdk8" />
+ <package id="googlechrome" version="71.0.3578.98" />
+ <package id="vscode" />
+ <package id="7zip" />
+ </packages>
+
文件名称随意,但是扩展名必须是 .config 。通过 .config 的方式,就可以配置一个团队统一的开发环境,软件和版本都可以统一。这样可以为开发带来很多好处,避免由于开发环境不一样引起的各种不同错误。 +通过传统方式安装软件,如果配置了环境变量,例如 JAVA_HOME , PATH 等等,都需要重启命令行工具,甚至要等一会才能生效。 Chocolatey 提供了一个 refreshenv 命令,可以快速生效环境变量。
+卸载 Chocolatey 只需要删除它安装的文件夹,并删除对应的环境变量即可。对于使用 Chocolatey 安装的其它软件,如果也需要卸载的话,需要先手动卸载。
+Chocolatey 更注重的是整个团队的软件配置统一,统一用某一个软件,统一用某一个版本,统一安装配置(包括安装路径)。在实际开发中,太多次因为安装路径引起问题,例如路径里有空格或中文等等。最好就用默认安装路径。
+ + + + + + + + +由于 Yum 中许多长期存在的问题仍未得到解决,因此 Yum 包管理器已被 DNF 包管理器取代。这些问题包括性能差、内存占用过多、依赖解析速度变慢等。
+DNF 是一款 Linux 软件包管理工具,用于管理 RPM 软件包。 DNF 可以查询软件包信息,从指定软件库获取软件包,自动处理依赖关系以安装或卸载软件包,以及更新系统到最新可用版本。
+Linuxbrew(Mac OS 的 Homebrew 分支,支持mac和linux,用法完全相同)
+详情页: https://ostechnix.com/linuxbrew-common-package-manager-linux-mac-os-x/
+搜索可用的软件包: https://sitemap.filecroco.com/a/1.html
+在 Linux 上安装和使用 Homebrew 包管理器 | Linux 中国 - 知乎 (zhihu.com)
+ + + + + + + + +++scoop 必要组件: 7zip git innounp lessmsi dark sudo aria2
+main : https://github.com/ScoopInstaller/Scoop
+
# 设置自定义安装路径:D:\Software\Scoop
+$env:SCOOP='D:\Software\Scoop';[environment]::setEnvironmentVariable('SCOOP',$env:SCOOP,'User')
+
+# 允许执行本地脚本
+set-executionpolicy remotesigned -scope currentuser
+
+# 从 github 下载并安装 scoop
+iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
+
scoop config SCOOP_REPO <URL>
软件仓库 bucket 源:软件源使用 git 版本管理,因此可以使用修改远程仓库的地址修改源地址加快速度。
+cd $env:SCOOP\buckets\Main
+git remote set-url origin <URL>
+
+cd $env:SCOOP\buckets\Extras
+git remote set-url origin <URL>
+
cd $env:SCOOP\buckets\Main 这是一个 git 管理的文件夹
+ git remote set-url origin https://hub.fastgit.org/ScoopInstaller/Main
+
aria2-enabled (默认值: true)
+aria2-retry-wait (默认值: 2)
+aria2-split (默认值: 5)
+aria2-max-connection-per-server (默认值: 5)
+aria2-min-split-size (默认值: 5M)
+
#scoop bucket remove main
+scoop bucket add main 'https://github.com/ScoopInstaller/Main'
+scoop bucket add extras 'https://github.com/ScoopInstaller/scoop-extras'
+scoop bucket add versions 'https://github.com/ScoopInstaller/Versions'
+scoop bucket add jetbrains 'https://github.com/Ash258/Scoop-JetBrains'
+scoop bucket add java 'https://github.com/ScoopInstaller/Java'
+scoop bucket add dorado https://github.com/chawyehsu/dorado
+scoop bucket add scoopet https://github.com/ivaquero/scoopet
+
scoop update
scoop export >> xxx.txt
scoop bucket known
scoop bucket help
scoop bucket add xxxbucket
scoop bucket rm xxx 仓库
常用命令说明
+alias Manage scoop aliases # 管理指令的替身
+bucket Manage Scoop buckets # 管理软件仓库
+cache Show or clear the download cache # 查看与管理缓存
+checkup Check for potential problems # 做个体检
+cleanup Cleanup apps by removing old versions # 清理缓存与旧版本软件包
+config Get or set configuration values # 配置 Scoop
+create Create a custom app manifest # 创建自定义软件包
+depends List dependencies for an app # 查看依赖
+export Exports (an importable) list of installed apps # 导出软件包列表
+help Show help for a command # 显示帮助指令
+hold Hold an app to disable updates # 禁止软件包更新
+home Opens the app homepage # 打开软件包主页
+info Display information about an app # 显示软件包信息
+install Install apps # 安装软件包的指令
+list List installed apps # 列出所有已安装软件包
+prefix Returns the path to the specified app # 查看软件包路径
+reset Reset an app to resolve conflicts # 恢复软件包版本
+search Search available apps # 搜索软件包
+status Show status and check for new app versions # 查看软件包更新状态
+unhold Unhold an app to enable updates # 启动软件包更新
+uninstall Uninstall an app # 卸载软件包的指令
+update Update apps, or Scoop itself # 更新软件包
+virustotal Look for app hash on virustotal.com # 查看哈希值
+which Locate a shim/executable (similar to 'which' on Linux) # 查看可执行程序路径
+
scoop uninstall scoop
:这将卸载 Scoop 和所有与 Scoop 一起安装的程序!
The scoop 配置文件保存在 ~/.config/scoop/config.json
+buckets 源配置文件保存在 SCOOP\apps\scoop\current\buckets.json
{
+ "main": "https://github.com/ScoopInstaller/Main",
+ "extras": "https://github.com/ScoopInstaller/Extras"
+}
+
链接: https://blog.csdn.net/weixin_39986178/article/details/110900876
+相比于 Chocolatey , Scoop 则更专注于开源的命令行工具,使用 Scoop 安装的应用程序通常称为"便携式"应用程序,需要的权限更少,对系统产生的副作用也更少,所以我这里选择了使用 Scoop。 +注意:对于像 VirtualBox、Docker for Windows ,输入法等这些需要高权限的软件还是通过在官网下载安装包进行安装。
+ + + + + + + + +WinGet ( Windows 程序包管理器: Windows Package Manager )是微软为 win10 开发的一款开源的软件包管理器,于 2020 年 5 月的 Microsoft Build 开发者大会上首宣。
+前提:Windows 10 1709 及以上版本 +当前 WinGet 支持的安装程序类型尚不多,除了 EXE、 MSIX 、 MSI 三种之外,还能够在自定义配置后下载部分微软应用商店的程序。
+你可以在 Github Release 下载 .appxbundle 格式的文件,双击打开并运行。
+如果出现「此电脑不支持打开该类型文件」的提示,则可在 Win + I
进入设置 -> 更新和安全 -> 开发者选项 -> 打开开发人员模式。
输入 winget 可以查看简略帮助文档;输入 winget -v 查看版本信息
+显示简略帮助文档: winget -?(-?可选);查看特定命令的详细帮助文档: winget [] -?,如 winget install -?显示软件详细信息: winget show 搜索软件: winget search 安装软件:winget install
+是的,如你所见, WinGet 并没有自动开启卸载、升级等功能,这也是其在发布之后很长时间不温不火的重要原因。
+但是不要着急,截止到 2021/03/25 发布的最新预览版 v0.2.10771 , WinGet 实验性功能(需要用户自启)的数量已经增加到了八个,其中就包括 uninstall 、 upgrade 、 list 等重要功能,以及支持安装 Microsoft Store 上的应用程序!
+如果想要开启实验功能,可以在终端输入 winget settiings,打开 WinGet 配置文件 settings.json 增加以下内容:
+"experimentalFeatures": { "uninstall": true, "upgrade": true, "list": true, "experimentalMSStore": true},
+如果想要更改 winget 显示的进度条视觉效果,可以在 setting.json 里增加: +"visual": { "progressBar": "accent"},# 三种样式可选:accent(默认值)、 retro、 rainbow
+winget list > winget.txt 同样支持一键导出软件列表,方便备份和换机重装。
+实验功能开启"experimentalMSStore": true之后,winget 可以下载 MStore 的软件了(不过目前支持的并不多)。
+winget source list 查看软件源列表,发现除了 winget 源之外,MSStore 源已经添加上了。部分商店内软件可以正常下载安装了。
+winget 可以卸载 winget list 显示出的所有软件。包括电脑上的大多数软件,如 Windows 系统自带的、手动安装的、 Chocolatey 安装的部分等。唯一不足的是,卸载时会被弹出的卸载窗口打断,降低了自动化的一致性。
+winget 可以卸载多种类型的软件程序
+ + + + + + + + +openSUSE 是一个独立的 Linux 发行版分支,使用 RPM 作为分发的软件包格式,采用 zypper 作为包管理器,同时兼容多种计算机硬件。 openSUSE 有两个正式的发行版: Leap 和 Tumbleweed 。
+OpenSUSE 是一个一直被低估的多功能 Linux 操作系统
+ + + + + + + + +Manjaro 换源
+sudo pacman-mirrors -i -c China -m rank
+sudo pacman -Syy
+
命令 解释
+pacman -Syu 对整个系统进行更新(常用)
+pacman -Syy 强制更新
+pacman -Syudd 使用 -dd跳过所有检测
+
命令 解释
+pacman -Ss keyword 在仓库中搜索含关键字的包(常用)pacman -Ss '^fcitx-'
+pacman -Qs keyword 搜索已安装的包(常用)pacman -Qs '^fcitx-'
+pacman -Qi package_name 查询本地安装包的详细信息
+pacman -Ql package_name 列出该包的文件
+pacman -Fs keyword 按文件名查找软件库
+pacman -Si package_name 显示远程软件包的详尽的信息
+pacman -Qii package_name 使用两个 -i 将同时显示备份文件和修改状态
+pacman -Ql package_name 要获取已安装软件包所包含文件的列表
+pacman -Fl package_name 查询远程库中软件包包含的文件
+pacman -Qk package_name 检查软件包安装的文件是否都存在
+pacman -Fo /path/to/file_name 查询文件属于远程数据库中的哪个软件包
+pacman -Qdt 要罗列所有不再作为依赖的软件包(孤立 orphans )
+pacman -Qet 要罗列所有明确安装而且不被其它包依赖的软件包
+pactree package_name 要显示软件包的依赖树
+whoneeds package_name 检查一个安装的软件包被那些包依赖pkgtoolsAUR中的whoneeds
+pactree -r package_name 检查一个安装的软件包被那些包依赖
+
命令 解释
+pacman -S package_name 执行 pacman -S firefox 将安装 Firefox(常用)
+pacman -Sy package_name 将在同步包数据库后再执行安装。
+pacman -Sv package_name 在显示一些操作信息后执行安装。
+pacman -U local_package_name 安装本地包,其扩展名为pkg.tar.gz或pkg.tar.xz
+pacman -U url 安装一个远程包(不在 pacman 配置的源里面)
+
命令 解释
+pacman -R package_name 该命令将只删除包,保留其全部已经安装的依赖关系
+pacman -Rs package_name 在删除包的同时,删除其所有没有被其他已安装软件包使用的依赖关系(常用)
+pacman -Rsc package_name 在删除包的同时,删除所有依赖这个软件包的程序
+pacman -Rd package_name 在删除包时不检查依赖
+
pacman -Sw package_name 只下载包,不安装。
+pacman -Sc 清理未安装的包文件(常用)包文件位于 /var/cache/pacman/pkg/ 目录
+pacman -Scc 清理所有的缓存文件(常用)
+
大多数 Linux 发行版都是来自国外,自然官方仓库地址也在国外,所以一般情况下安装完 Linux 发行版之后做的第一件事就是切换源为国内的源。源的切换操作,大部分发行版也都支持 GUI 切换,这里只列出在命令行下如何擦操作
+sudo pacman-mirrors --country China
sudo pacman-mirrors --interactive --default
sudo pacman -Syyu# 软件源更新完成之后进行系统软件更新操作
sudo pacman-mirrors -l
参考翻译自: https://wiki.manjaro.org/index.php?title=Use_pacman-mirrors_to_Set_the_Fastest_Download_Server
+sudo pacman -Syyu
sudo pacman -Ss [software package name]
sudo pacman -Qs [software package name]
+sudo pacman -Qi [software package name]
# 附带详细信息
+sudo pacman -Qii [software package name]
# 附带更加详细的包信息
+sudo pacman -Ql
# 列出所有安装的软件包
sudo pactree [software package name]
sudo pacman -Qdt
sudo pacman -Rs $(pacman -Qdtq)
sudo pacman -Syu [software package name]
# 从软件仓库安装
+yay -S [software package name]
# Packages from the AUR
+sudo pacman -U [/package_path/][software package name.pkg.tar.xz]
# 从本地安装
pacman -U http://www.examplepackage/repo/examplepkg.tar.xz
# 从网络安装【非官方仓库】
sudo pacman -R [software package name]
+sudo pacman -Rs [software package name]
# 同时删除依赖
+sudo pacman -Rns [software package name]
# 删除软件及其依赖,还有pacman生成的配置文件,即更彻底的删除
sudo pacman -Sc
+sudo pacman -Scc
# 更彻底的清理
关于 pacman 常用就这些了,更多请使用 man pacman OR pacman -h 去查看 +参考翻译自: https://wiki.manjaro.org/index.php?title=Pacman_Overview +From < https://csdnimg.cn/release/phoenix/template/new_img/articleReadEyes.png>
+ + + + + + + + +GitBucket +是一个非常好的免费开源,易部署的开源Git平台,同时拥有诸多优势,虽然也有弊端。
+优点
+完全开源,没有任何限制;
+运行在JVM平台上,非常容易部署;
+类似于GitHub的界面,操作容易;
+丰富的插件,使得扩展非常容易;
+提供了大量兼容GitHub的API;
+缺点
+有点残废的权限管理(权限没有依照公开,私有库区分);
+开发语言为Scala,对于非Scala用户自己写插件有一定门槛;
+由于作者暂未完成平台升级,暂时无法部署在除Tomcat之外的Servlet容器。
+下载 Release + 里面的war到你的服务器;
+java -jar gitbucket.war
启动。(笔者用的是JDK17);
(可选)将启动端口反向代理到子域名。
+Official website: https://chat.openai.com/
+ChatGPT is an artificial intelligence chat robot based on natural language processing technology, which uses GPT (Generative Pre-trained Transformer) technology to generate human language responses.
+Function:
+Configuration method:
+FlyDav 是一个轻量级的开源 webdav 服务器
+优点
+缺点
+最简部署:
+./flydav -H 0.0.0.0
来启动服务器。然后你要输入默认用户 flydav
的密码。http://YOUR_IP:7086/webdav
。完整部署可参阅文档。
+ + + + + + + + +本文介绍使用new bing和chatgpt搞科研的具体方法,视频教程可参看bilibili使用说明
+关于如何正确使用new bing,如何不转到国内特供版。不是本节的内容
+new bing(消化以及输出) --> chatgpt(组织语言)--> 划水学生(复制粘贴)
+因为:new bing被阉割了,输出和输入文字都比chatgpt限制了太多。但是new bing 可以联网,可以标注文献来源。
+使用edge甄别文献,但不去阅读。因为翻译很慢。(看的话可以结合wps)
+阅读左边的论文,告诉我他讲了什么内容。
+阅读左边的论文,细致地告诉我他每一小节都讲了什么内容。
+我希望你阅读英文文献 :【A Survey of Surface Reconstruction from Point Clouds】,分别介绍XXXX的【(基本原理)、分类、效果、发展趋势、(优点和缺点、应用范围)】。 最后对二者比较,并通过表格,最后证明XXXX结论。我希望你输出的文字为中文,总体内容要超过500字。
+如果不用以上ai写的文字,纯粹自己写。
+写出来效果可能不太行,让ai利用书面语言润色。这里可以上网搜一些相关的prompt
+请用写论文的中文书面语改写或者丰富以下段落,让其更有逻辑,重点突出:
+请用写论文的中文书面语丰富以下段落,让其用词更准确,内容更丰富:
+不要陷入无意义的ai玩耍
+不要登录cn的bing,不然之后都会记住。只能重新清除cookie。
+MinIO +是一个提供开源部署方案的多级云对象存储(S3)方案。
+优点
+提供许可证为AGPL v3的开源许可证的版本,无任何容量,带宽限制;
+兼容现有AWS S3的SDK,API等;
+非常完善的文档,活跃的社区;
+部署相对简单;
+缺点
+没有任何中文文档;
+非付费版软件更新周期较短,需要自行更新;
+官方提供了非常详尽,多种极为容易的安装方式,这里不再赘述。
+一定要到官方的文档去确认你是不是有参数没有设定,是不是使用了独立的卷(最少是独立的文件夹)。
+ + + + + + + + +Official website: https://www.overleaf.com
+Overleaf is an online tex rendering website. The configuration of the tex environment is cumbersome and not friendly enough for novices (especially in Windows), but overleaf is a good alternative. You just need to choose a nice template, and it will be very convenient to write assignments or small papers of less than 10 pages. Overleaf also provides the basic teamwork function, which can be edited by multiple people through links or invitations. The free version of Overleaf has a maximum compilation time and a limited set of features. For more complex projects, consider paying for more features.
+\(\LaTeX\) is NOT a wysiwyg (what you see is what you get) typesetting system in which users enter specific code, save it in a file with the suffix.tex, and compile it to get the desired pdf file. \(\LaTeX\) Excellent large document typesetting ability and mathematical formula rendering ability is one of the reasons why it can be widely used. To learn more about can refer to the CTAN introduce lshort.
+Features:
+This article recommends plug-ins for Android Studio, which can greatly improve your development experience.
+The plugin optimizes icons to improve the aesthetics of your interface.
+The Material theme for JetBrains IDE, with multiple themes for day and night, makes the interface more beautiful.
+JSON as a lightweight data interchange format. It is often used in development, and one of the requirements is to convert Json to the corresponding Bean object. The following two main plugins are recommended:
+Can convert Json to corresponding Java Bean
+JSON To Kotlin Class (JsonToKotlinClass)
+Can convert Json to corresponding Kotlin Bean
+Translation plug-in greatly facilitates the development of developers with poor English foundation. It has the following properties:
+Multiple Translation Engines
+Multilingual translation
+This article hopes to inspire others and encourage everyone to propose more convenient browser plug-ins.
+Official website: https://www.tampermonkey.net/
+Very convenient script manager, you can install some small scripts that are not available in the extension store.
+Official website: https://simpread.pro/
+Enhance the browser reading experience, provide a focus mode that dilutes irrelevant elements to increase concentration and a completely pure reading mode; you can export web pages to various formats such as markdown to the local, or import them into notion, onenote and other note-taking applications after authorization, which is convenient for archiving and Read it later. There are many related enhancements in the official plug-in center, but the default mode experience is also quite comfortable.
+Official website: https://www.zotero.org/download/connectors
+Zotero Connectors allow you to save to Zotero +directly from your web browser.
+Official website: https://github.com/polywock/globalSpeed
+Web extension that sets a default speed for HTML media elements (video and audio).
+Official website: https://www.languagereactor.com/
+Language Reactor is a powerful toolbox for learning languages. It helps you to discover, understand, and learn from native materials. Studying will become more effective, interesting, and enjoyable!
+Official website: https://github.com/philc/vimium
+Vimium is a browser extension that provides keyboard-based navigation and control of the web in the spirit of the Vim editor.
+ + + + + + + + +Installer link: https://www.tabnine.com/install/
+"TabNine is a machine learning-based code autocompletion tool that can be used in various editors and IDEs, including but not limited to VS Code, Sublime Text, PyCharm, Vim, Emacs, and more. Unlike traditional code autocompletion tools, TabNine not only completes based on existing code snippets and syntax rules, but can also generate entirely new code by learning from large code repositories and language syntax, significantly improving coding efficiency and accuracy.
+The advantages of TabNine include:
+By providing high-quality code completion options, TabNine reduces the time and error rate of writing code and is a highly valuable and practical programming tool."
+"TabNine and Copilot are both machine learning-based code autocompletion tools that can generate code completion options based on context and syntax rules to improve coding efficiency and accuracy. However, there are some differences between them.
+Firstly, they are developed by different companies, with TabNine being developed by Codota and Copilot being developed by OpenAI.
+Secondly, they have different training data sources. TabNine uses both public and private code repositories from GitHub, while Copilot uses public code repositories from GitHub and OpenAI's own internal code repositories.
+Thirdly, TabNine supports multiple programming languages, including Python, JavaScript, Java, C++, Go, Ruby, and more, while Copilot currently only supports Python, JavaScript, and TypeScript.
+Fourthly, TabNine focuses on code completion and intelligent prediction, while Copilot's unique feature is the ability to generate code snippets and functions, even based on natural language descriptions.
+Finally, TabNine's code is mostly open source, allowing users to customize and extend the tool, while Copilot does not currently support customization and is not open source due to its use of OpenAI's GPT series models.
+Overall, both TabNine and Copilot are valuable code autocompletion tools with their own strengths and suitable use cases. Users can choose the appropriate tool based on their needs."
+免费的跨平台开源文件管理器,它的灵感来自 Total Commander ,并提供了一些新的想法(支持 Linux )。
+ + + + + + + + +print('Hello World')
+
Python 不能直接在计算机中运行,因此需要 Python 语言的运行环境: Python 解析器
+下载地址:https://www.python.org/downloads/release/python-379/ +当然你安装3.8或者3.9也是没问题的
+查找目标文件:Windows x86-64 executable installer -- 单击即可下载。(格式不能找错)
+第一步:双击运行 Python 的解析器,选择 自定义安装 以及 添加 Python 到环境变量(这一步非常重要)
+第二步:选择所有要安装的功能菜单,默认全部勾选
+第三步:设置 Python 解析器的安装路径,尽量不要安装在C盘,但需要知道自己安装的位置
+第四步:测试 Python 解析器是否可以使用 +方法:按 Windows + R ,输入 cmd ,打开 Windows 的 DOS 窗口,输入 python(全部小写),当出现下图就成功了
+使用exit()退出
+在不涉及到人工智能的方向,推荐不用安装 anaconda ,直接安装 PyCharm 即可。它是目前功能最强大的 IDE
+PyCharm 一共有两个版本:专业版(收费) 与 社区版(免费、开源)。我们选择后者
+第一步:下载 PyCharm 。https://www.jetbrains.com/pycharm/download/
+第二步:设置软件的安装路径,不用安装在 C 盘
+第三步:PyCharm 基本设置。如下图设置,不建议把 Pycharm 添加到环境变量里面
+第一步:创建项目 (Pycharm 不要汉化!不要汉化!不要汉化!)
+点开图标,初次点开会有一个提示窗口,不用管他,点击 New Project
+第二步:设置项目路径,尽量放到 C 盘以外(非常重要!!)
+你会看到类似如下图片。(因为我使用的是虚拟机安装,只用于开发 pycharm ,只有一个盘所以放在了 C 盘)
+其中 base interpreter 会自动感知到 python.exe 的位置,没感知到可以手动定位(找到 python 安装路径然后选定 python.exe )
+新建文件并书写代码
+print('Hello World')
+
进行运行,右上角绿色的三角符号 Run 。
+结果如下,就完成啦。
+官网:https://tiddlywiki.com/
+国际交流社区:https://talk.tiddlywiki.org/
+++很久很久以前,在一条河流里,生活着许多许多的小鱼儿(Tiddlers),它们快活地在故事河(Story River)里游来游去。这些小鱼儿每一个都有自己的名字(条目名),自己的种类(内容类型),它携带的信息组成了鱼儿美丽的身体与骨架,附加的字段构成了它美丽的鳞片。——TiddlyWiki简易教程。
+
「太微」是我们对 TiddlyWiki 的中文称呼,TiddlyWiki是一款极其强大又极具拓展性的个人 Wiki 系统。
+为什么把 TiddlyWiki 翻译成「太微」?因为受到 @pimgeek 的启发:TiddlyWiki 可以干很多细致轻量的工作,但也从不限制用法,可以无限组合叠加。故以其首字母音译为「太微」,TiddlyWiki 可以称为「太微笔记」「太微万能抽屉」「太微卡片盒」……
+太微具有多种形态。拥有HTML文件与文件夹 2种存储形式。桌面浏览器,服务端软件,应用软件 3种使用方式。可以在任意平台中使用,只有你想不到的,没有做不到的。
+您曾感觉人类的大脑是有极限的吗?感觉它不足以容纳一切你需要记住的事?
+欢迎使用 TiddlyWiki,一个独特的非线性笔记本,用于截取、管理和复用复杂的信息。
+用它来保留您的待办清单、计划一篇散文或一部小说、或安排您的婚礼。记录每个闪过您脑中的想法,或创建一个灵活和反应迅速的网站。
+++非线性笔记,这很像我们的大脑的思维习惯,不连续的、片段的信息,通过一些线索联系在一起。正如TiddlyWiki的条目记载的信息,通过标签或者字段又或者链接与嵌入相互联系在一起。
+
下载链接:https://github.com/tiddly-gittly/TidGi-Desktop
+TidGi,全平台的桌面端电脑支持,快速安装使用。内置ItonNote TiddlyWiki模板(预装常用插件)。省去配置插件的过程。
+TiddlyDesktop。全平台桌面端软件,tiddlywiki模板可以在Tiddlystow中选一个使用,比较推荐的是tiddlywiki XP以及适配TidGi单文件wiki。TiddlyDesktop主要是用于管理单个tiddlywiki的工具,而TidGi是一个wiki就是一个工作空间,采用all in one的思路。
+下载链接:https://github.com/TiddlyWiki/TiddlyDesktop/releases
+Timimi,一个浏览器插件与伺服软件配套使用的软件。优点是使用方便,即点即用,缺点是,配置步骤比前两个多一点。
+可以把一个HTML单文件版wiki作为超级灵活的word文档使用。即即点即用。
+下载链接:https://ibnishak.github.io/Timimi/
+最后一个Node.js,适用于对命令行工具、JS以及NodeJS有一定了解的用户。
+运行在NodeJS环境的TiddlyWiki,支持多用户同时使用/编辑相同的wiki的插件:TW5-Bob,与此再进一步封装了TW5-BobEXE程序,可以直接下载到你的电脑上运行。
+Official website: https://www.antlr.org/
+ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files. It's widely used to build languages, tools, and frameworks. From a grammar, ANTLR generates a parser that can build and walk parse trees
+example.g4 +
// specific grammar name
+grammar example;
+// for non-terminal, star with lower-case letter
+
+//'*' represents 0 or more occurrences of the production
+//'+' represents at least one occurrence
+//The following example will be parsed as vector<number>
+addExp
+ : number ('+' number)*
+ ;
+
+//You can use # nickname after the production
+//Create an alias to analyze the production of different situations with the same name
+number
+ : IntLiteral # number1
+ | FloatLiteral # number2
+ ;
+
+// for terminal, star with lower-case letter
+IntLiteral
+ : [0-9]+
+ | ('0x'|'0X')[0-9a-fA-F]+
+ ;
+
+// '?' Indicates that the production may exist, if it exists, it only occurs once
+FloatLiteral
+ : ([0-9]+|[0-9]*'.'[0-9]*)([eE]('+'|'-')?[0-9]+)?[fFlL]?
+ | ('0x'|'0X')([0-9a-fA-F]*'.'[0-9a-fA-F]*)([pP]('+'|'-')?[0-9]+)?[fFlL]?
+ ;
+
shell command +
antlr -Dlanguage=Cpp -no-listener -visitor example.g4
+
exampleVisitor.h +
#include "exampleBaseVisitor.h"
+
+class ExampleVisitor : public exampleBaseVisitor {
+ virtual antlrcpp::Any visitAddExp(exampleParser::AddExpContext *ctx) override;
+ virtual antlrcpp::Any visitNumber(exampleParser::NumberContext *ctx) override;
+};
+// Access string of current node by `ctx->getText()`
+// Visit `number` node of `addExp` by `ctx->number()`
+// then you can override visit-function to build your own parser !
+
Antlr Repository + antlr repository
+Antlr Document + antlr official doc
+Website: https://github.com/chenzhiy2001/code-debug/
+code-debug
is a source-level kernel debugging tool that supports Rust. Currently it is capable of debugging the rCore-Tutorial-v3 operating system and support tracing from kernel to user space. Recent work has been done to implement richer and more robust tracing capabilities using eBPF technology.
一个编译器和运行时框架,以帮助您尽可能轻松地构建和分发 eBPF 程序。
+eunomia-bpf
是一个动态加载库/运行时和编译工具链框架,旨在帮助您更轻松地构建和分发 eBPF 程序。
使用 eunomia-bpf,您可以:
+libbpf
eBPF 应用程序:仅编写 eBPF 内核代码,并自动从内核中使用 perf event
或 ring buffer
自动输出采样数据到内核态。hists
(直方图等信息)。命令行参数
。BCC
和 libbpf
等多种格式编写内核部分。Wasm
2 构建 eBPF 程序:参见 Wasm-bpf
项目OCI
镜像推送、拉取或运行1
行 bash中从 云端存储库
或 URL
运行 eBPF 程序。JSON
配置文件或 Wasm
用户态控制和数据处理模块的 eBPF 程序。更多信息请参见 documents/introduction.md。
+您可以使用一行 bash 从云端下载预编译的 eBPF 程序并将其运行到内核中:
+# 从 https://github.com/eunomia-bpf/eunomia-bpf/releases/latest/download/ecli 下载 ecli 运行时
+$ wget https://aka.pw/bpf-ecli -O ecli && chmod +x ./ecli
+$ sudo ./ecli https://eunomia-bpf.github.io/eunomia-bpf/sigsnoop/package.json # 从 url 运行预编译的 ebpf 代码
+$ sudo ./ecli sigsnoop:latest # 直接使用名称运行,并从我们的仓库下载最新版本 bpf 工具
+
仓库地址:https://github.com/junegunn/fzf
+FZF 是一款使用 Go 编写的交互式 CLI ,可用来查找任何列表内容、文件、历史指令、进程、host 名、书签或 Git commit 等内容。
+对于 macOS ,推荐使用 Homebrew 进行安装:
+brew install fzf
+
在 Linux 发行版上,可使用不同的包管理器进行安装,例如:
+Debian/Ubuntu(Apt):
+sudo apt install fzf
+
ArchLinux(Pacman):
+sudo pacman -S fzf
+
并不推荐在 Windows 中使用 FZF 。Windows 可使用 Everything 进行搜索。
+Windows下可使用 Scoop 进行安装使用。
+scoop install fzf
+
直接执行 FZF ,打开文件搜索功能。
+fzf
+
在此模式下,用户可输入特定的文件或目录名,FZF 将会在当前目录下执行查找,并显示出指定文件或目录的相对路径。
+使用快捷键 Ctrl+J
或 Ctrl+N
可向下滚动列表; Ctrl+K
或 Ctrl+P
可向下滚动列表。
+使用 Enter
选中条目并退出 FZF,Ctrl+C
、Ctrl+G
或 Esc
可退出 FZF 而不进行选择。
FZF 可作为 Vim 的插件使用,方便快速查找需要编辑的文件。
+在本例中,使用 vim-plug 插件管理器进行安装:
+编辑 ~/.vimrc
文件,在 call plug#begin()
下添加如下行:
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
+
重新加载 .vimrc
文件:
source ~/.vimrc
+
打开 vim ,并执行 :PlugInstall
用于安装插件。
Using python to configure the gdb debugging interface, you can write your own code to define the entire debugging interface. It can be said that it is comparable to an IDE, and the display is also very good-looking. It is completely based on the terminal. As the underlying debugging software, it can help developers better view variables and registers. , single-step execution, etc.
+open source address: https://github.com/cyrus-and/gdb-dashboard.git
+get it
+wget -P ~ https://git.io/.gdbinit # If the network speed is slow, you can directly create a new file with the same name. gdbinit and then copy and paste it
+
It is true that the IDE integrates a lot of debugging tools at present, but GDB still plays an irreplaceable role in some kernel programming or other low-level development fields. For this reason, we hope to find a more observable page in the original boring debugging terminal. Fortunately, someone has helped us to realize this tool, we hope to bring such convenience to everyone.
+Reference common commands for gdb debugging
+When using this plugin, you need to check whether the gdb currently in use supports python scripts. When Scripting in the "Python" language is not supported in this copy of GDB.
appears, it indicates that the gdb does not support python scripts and cannot be used this plugin. In addition, you also need to pay attention to whether the versions of gdb and python match, see issue.
Official website: https://mathpix.com
+Mathpix is a tex format formula generation software. Its main function is to identify the formula in the screenshot through OCR technology and generate the corresponding tex code, which can greatly speed up the speed of formula writing in the process of writing a thesis.
+Features:
+Shortcoming:
+GNU nano
+Official website: https://www.nano-editor.org/
+GNU nano is a simple and easy-to-use command line editor, it is the default text editor for some
+linux distributions, and you can also use it in the windows.
In the linux distributions we can use the package manager to install it.
+Take the debain with apt as example:
+sudo apt install nano
+
Input nano to the terminal you can get the detail instruction.
+Ranger is a terminal file manager with Vim-style shortcuts. You can use the keyboard to quickly view and preview files, navigate between different folders, and perform common operations such as copying, pasting, deleting, and renaming files or folders directly under the ranger interface.
+How to install ranger
+sudo apt install ranger
+
pip install ranger-fm
+
ranger renderings
+cd
command to switch directories.Official documentation of the tool
+ranger official wiki +- Related pages
+ +Website: https://www.texmacs.org/tmweb/home/welcome.en.html
+Try GNU TeXmacs if you are being tortured by LaTeX GNU TeXmacs is a WYSIWYG open source editor for scientific documents (papers, notes, etc.). Highly recommended if you write lots of maths!
+Features:
+tab
multiple times. For example, press a
and then press tab
to get \(\alpha\) and other characters that looks like a.In most cases the built-in documentations will suit your needs. Occasionally, there are outdated parts in the documentation. In this case you can read The Jolly Writer, which is also written by the main author of TeXmacs.
+Remember to switch to Chinese mode (click the national flag on the menu bar), otherwise it will not line wrap automatically.
+ + + + + + + + +++「有研究显示,打字的时候不喜欢在中文和英文之间加空格的人,感情路都走得很辛苦,有七成的比例会在 34 岁的时候跟自己不爱的人结婚,而其余三成的人最后只能把遗产留给自己的猫。毕竟爱情跟书写都需要适时地留白。
+与大家共勉之。」——vinta/paranoid-auto-spacing
+
正确:
+++在 LeanCloud 上,数据存储是围绕
+AVObject
进行的。
错误:
+++在LeanCloud上,数据存储是围绕
+AVObject
进行的。在 LeanCloud上,数据存储是围绕
+AVObject
进行的。
完整的正确用法:
+++在 LeanCloud 上,数据存储是围绕
+AVObject
进行的。每个AVObject
都包含了与 JSON 兼容的 key-value 对应的数据。数据是 schema-free 的,你不需要在每个AVObject
上提前指定存在哪些键,只要直接设定对应的 key-value 即可。
例外:「豆瓣FM」等产品名词,按照官方所定义的格式书写。
+正确:
+++今天出去买菜花了 5000 元。
+
错误:
+++今天出去买菜花了 5000元。
+今天出去买菜花了5000元。
+
正确:
+++我家的光纤入屋宽带有 10 Gbps,SSD 一共有 20 TB
+
错误:
+++我家的光纤入屋宽带有 10Gbps,SSD 一共有 20TB
+
例外:度数/百分比与数字之间不需要增加空格:
+正确:
+++角度为 90° 的角,就是直角。
+新 MacBook Pro 有 15% 的 CPU 性能提升。
+
错误:
+++角度为 90 ° 的角,就是直角。
+新 MacBook Pro 有 15 % 的 CPU 性能提升。
+
正确:
+++刚刚买了一部 iPhone,好开心!
+
错误:
+++刚刚买了一部 iPhone ,好开心!
+刚刚买了一部 iPhone, 好开心!
+
text-spacing
来挽救?CSS Text Module Level 4 的 text-spacing
和 Microsoft 的 -ms-text-autospace
可以实现自动为中英文之间增加空白。不过目前并未普及,另外在其他应用场景,例如 macOS、iOS、Windows 等用户界面目前并不存在这个特性,所以请继续保持随手加空格的习惯。
即使中国大陆的标点符号用法允许重复使用标点符号,但是这么做会破坏句子的美观性。
+正确:
+++德国队竟然战胜了巴西队!
+她竟然对你说「喵」?!
+
错误:
+++德国队竟然战胜了巴西队!!
+德国队竟然战胜了巴西队!!!!!!!!
+她竟然对你说「喵」??!!
+她竟然对你说「喵」?!?!??!!
+
不明白什么是全角(全形)与半角(半形)符号?请查看维基百科条目『全角和半角』。
+正确:
+++嗨!你知道嘛?今天前台的小妹跟我说「喵」了哎!
+核磁共振成像(NMRI)是什么原理都不知道?JFGI!
+
错误:
+++嗨! 你知道嘛? 今天前台的小妹跟我说 "喵" 了哎!
+嗨!你知道嘛?今天前台的小妹跟我说"喵"了哎!
+核磁共振成像 (NMRI) 是什么原理都不知道? JFGI!
+核磁共振成像(NMRI)是什么原理都不知道?JFGI!
+
正确:
+++这个蛋糕只卖 1000 元。
+
错误:
+++这个蛋糕只卖 1000 元。
+
例外:在设计稿、宣传海报中如出现极少量数字的情形时,为方便文字对齐,是可以使用全角数字的。
+正确:
+++乔布斯那句话是怎么说的?「Stay hungry, stay foolish.」
+推荐你阅读《Hackers & Painters: Big Ideas from the Computer Age》,非常的有趣。
+
错误:
+++乔布斯那句话是怎么说的?「Stay hungry,stay foolish。」
+推荐你阅读《Hackers&Painters:Big Ideas from the Computer Age》,非常的有趣。
+
大小写相关用法原属于英文书写范畴,不属于本 wiki 讨论内容,在这里只对部分易错用法进行简述。
+正确:
+++使用 GitHub 登录
+我们的客户有 GitHub、Foursquare、Microsoft Corporation、Google、Facebook, Inc.。
+
错误:
+++使用 github 登录
+使用 GITHUB 登录
+使用 Github 登录
+使用 gitHub 登录
+使用 gイんĤЦ8 登录
+我们的客户有 github、foursquare、microsoft corporation、google、facebook, inc.。
+我们的客户有 GITHUB、FOURSQUARE、MICROSOFT CORPORATION、GOOGLE、FACEBOOK, INC.。
+我们的客户有 Github、FourSquare、MicroSoft Corporation、Google、FaceBook, Inc.。
+我们的客户有 gitHub、fourSquare、microSoft Corporation、google、faceBook, Inc.。
+我们的客户有 gイんĤЦ8、キouЯƧquムгє、๓เςг๏ร๏Ŧt ς๏гק๏гคtเ๏ภn、900913、ƒ4ᄃëв๏๏к, IПᄃ.。
+
注意:当网页中需要配合整体视觉风格而出现全部大写/小写的情形,HTML 中请使用标淮的大小写规范进行书写;并通过 text-transform: uppercase;
/text-transform: lowercase;
对表现形式进行定义。
正确:
+++我们需要一位熟悉 TypeScript、HTML5,至少理解一种框架(如 React、Next.js)的前端开发者。
+
错误:
+++我们需要一位熟悉 Ts、h5,至少理解一种框架(如 RJS、nextjs)的 FED。
+
以下用法略带有个人色彩,即:无论是否遵循下述规则,从语法的角度来讲都是正确的。
+用法:
+++请 提交一个 issue 并分配给相关同事。
+访问我们网站的最新动态,请 点击这里 进行订阅!
+
对比用法:
+++请提交一个 issue并分配给相关同事。
+访问我们网站的最新动态,请点击这里进行订阅!
+
用法:
+++「老师,『有条不紊』的『紊』是什么意思?」
+
对比用法:
+++“老师,‘有条不紊’的‘紊’是什么意思?”
+
Note
+本要求取自 中文文案排版指北 ,你可以点击链接来了解更多内容。
+LaTeX 的数学公式有两种:行中公式和独立公式(行间公式)。行中公式放在文中与其它文字混编,独立公式单独成行。
+行中公式可以用如下方法表示:
+$ 数学公式 $
独立公式可以用如下方法表示:
+$$ 数学公式 $$
\dot{a}, \ddot{a}, \acute{a}, \grave{a}
\(\dot{a}, \ddot{a}, \acute{a}, \grave{a}\)
+\check{a}, \breve{a}, \tilde{a}, \bar{a}
\(\check{a}, \breve{a}, \tilde{a}, \bar{a}\)
+\hat{a}, \widehat{a}, \vec{a}
\(\hat{a}, \widehat{a}, \vec{a}\)
+指数
+\exp_a b = a^b, \exp b = e^b, 10^m
\(\exp_a b = a^b, \exp b = e^b, 10^m\)
+对数
+\ln c, \lg d = \log e, \log_{10} f
\(\ln c, \lg d = \log e, \log_{10} f\)
+三角函数
+\sin a, \cos b, \tan c, \cot d, \sec e, \csc f
\(\sin a, \cos b, \tan c, \cot d, \sec e, \csc f\)
+\arcsin a, \arccos b, \arctan c
\(\arcsin a, \arccos b, \arctan c\)
+\sinh a, \cosh b, \tanh c, \coth d
\(\sinh a, \cosh b, \tanh c, \coth d\)
+\operatorname{sh}k, \operatorname{ch}l, \operatorname{th}m, \operatorname{coth}n
\(\operatorname{sh}k, \operatorname{ch}l, \operatorname{th}m, \operatorname{coth}n\)
+\operatorname{argsh}o, \operatorname{argch}p, \operatorname{argth}q
\(\operatorname{argsh}o, \operatorname{argch}p, \operatorname{argth}q\)
+最大值,最小值
+\min(x,y), \max(x,y)
\(\min(x,y), \max(x,y)\)
+\min x, \max y, \inf s, \sup t
\(\min x, \max y, \inf s, \sup t\)
+\lim u, \liminf v, \limsup w
\(\lim u, \liminf v, \limsup w\)
+\lim_{x \to \infty} \frac{1}{n(n+1)}
\(\lim_{x \to \infty} \frac{1}{n(n+1)}\)
+\dim p, \deg q, \det m, \ker\phi
\(\dim p, \deg q, \det m, \ker\phi\)
+\Pr j, \hom l, \lVert z \rVert, \arg z
\(\Pr j, \hom l, \lVert z \rVert, \arg z\)
+dt, \mathrm{d}t, \partial t, \nabla\psi
\(dt, \mathrm{d}t, \partial t, \nabla\psi\)
+dy/dx, \mathrm{d}y/\mathrm{d}x, \frac{dy}{dx}, \frac{\mathrm{d}y}{\mathrm{d}x}, \frac{\partial^2}{\partial x_1\partial x_2}y
\(dy/dx, \mathrm{d}y/\mathrm{d}x, \frac{dy}{dx}, \frac{\mathrm{d}y}{\mathrm{d}x}, \frac{\partial^2}{\partial x_1\partial x_2}y\)
+\prime, \backprime, f^\prime, f', f'', f^{(3)}, \dot y, \ddot y
\(\prime, \backprime, f^\prime, f', f'', f^{(3)}, \dot y, \ddot y\)
+\infty, \aleph, \complement, \backepsilon, \eth, \Finv, \hbar
∞,ℵ,∁,∍,ð,Ⅎ,ℏ
+\Im, \imath, \jmath, \Bbbk, \ell, \mho, \wp, \Re, \circledS
\(\Im, \imath, \jmath, \Bbbk, \ell, \mho, \wp, \Re, \circledS\)
+s_k \equiv 0 \pmod{m}
\(s_k \equiv 0 \pmod{m}\)
+a \bmod b
\(a \bmod b\)
+\gcd(m, n), \operatorname{lcm}(m, n)
\(\gcd(m, n), \operatorname{lcm}(m, n)\)
+\mid, \nmid, \shortmid, \nshortmid
\(\mid, \nmid, \shortmid, \nshortmid\)
+\surd, \sqrt{2}, \sqrt[n]{}, \sqrt[3]{\frac{x^3+y^3}{2}}
\(\surd, \sqrt{2}, \sqrt[n]{}, \sqrt[3]{\frac{x^3+y^3}{2}}\)
++, -, \pm, \mp, \dotplus
\(+, -, \pm, \mp, \dotplus\)
+\times, \div, \divideontimes, /, \backslash
\(\times, \div, \divideontimes, /, \backslash\)
+\cdot, * \ast, \star, \circ, \bullet
\(\cdot, * \ast, \star, \circ, \bullet\)
+\boxplus, \boxminus, \boxtimes, \boxdot
\(\boxplus, \boxminus, \boxtimes, \boxdot\)
+\oplus, \ominus, \otimes, \oslash, \odot
\(\oplus, \ominus, \otimes, \oslash, \odot\)
+\circleddash, \circledcirc, \circledast
\(\circleddash, \circledcirc, \circledast\)
+\bigoplus, \bigotimes, \bigodot
\(\bigoplus, \bigotimes, \bigodot\)
+\{ \}, \empty \emptyset, \varnothing
\(\{ \}, \empty \emptyset, \varnothing\)
+\in, \notin \not\in, \ni, \not\ni
\(\in, \notin \not\in, \ni, \not\ni\)
+\cap, \Cap, \sqcap, \bigcap
\(\cap, \Cap, \sqcap, \bigcap\)
+\cup, \Cup, \sqcup, \bigcup, \bigsqcup, \uplus, \biguplus
\(\cup, \Cup, \sqcup, \bigcup, \bigsqcup, \uplus, \biguplus\)
+\setminus, \smallsetminus, \times
\(\setminus, \smallsetminus, \times\)
+\subset, \Subset, \sqsubset
\(\subset, \Subset, \sqsubset\)
+\supset, \Supset, \sqsupset
\(\supset, \Supset, \sqsupset\)
+\subseteq, \nsubseteq, \subsetneq, \varsubsetneq, \sqsubseteq
\(\subseteq, \nsubseteq, \subsetneq, \varsubsetneq, \sqsubseteq\)
+\supseteq, \nsupseteq, \supsetneq, \varsupsetneq, \sqsupseteq
\(\supseteq, \nsupseteq, \supsetneq, \varsupsetneq, \sqsupseteq\)
+\subseteqq, \nsubseteqq, \subsetneqq, \varsubsetneqq
\(\subseteqq, \nsubseteqq, \subsetneqq, \varsubsetneqq\)
+\supseteqq, \nsupseteqq, \supsetneqq, \varsupsetneqq
\(\supseteqq, \nsupseteqq, \supsetneqq, \varsupsetneqq\)
+=, \ne, \neq, \equiv, \not\equiv
\(=, \ne, \neq, \equiv, \not\equiv\)
+\doteq, \doteqdot, \overset{\underset{\mathrm{def}}{}}{=}, :=
\(\doteq, \doteqdot, \overset{\underset{\mathrm{def}}{}}{=}, :=\)
+\sim, \nsim, \backsim, \thicksim, \simeq, \backsimeq, \eqsim, \cong, \ncong
\(\sim, \nsim, \backsim, \thicksim, \simeq, \backsimeq, \eqsim, \cong, \ncong\)
+\approx, \thickapprox, \approxeq, \asymp, \propto, \varpropto
\(\approx, \thickapprox, \approxeq, \asymp, \propto, \varpropto\)
+<, \nless, \ll, \not\ll, \lll, \not\lll, \lessdot
\(<, \nless, \ll, \not\ll, \lll, \not\lll, \lessdot\)
+>, \ngtr, \gg, \not\gg, \ggg, \not\ggg, \gtrdot
\(>, \ngtr, \gg, \not\gg, \ggg, \not\ggg, \gtrdot\)
+\le, \leq, \lneq, \leqq, \nleq, \nleqq, \lneqq, \lvertneqq
\(\le, \leq, \lneq, \leqq, \nleq, \nleqq, \lneqq, \lvertneqq\)
+\ge, \geq, \gneq, \geqq, \ngeq, \ngeqq, \gneqq, \gvertneqq
\(\ge, \geq, \gneq, \geqq, \ngeq, \ngeqq, \gneqq, \gvertneqq\)
+\lessgtr, \lesseqgtr, \lesseqqgtr, \gtrless, \gtreqless, \gtreqqless
\(\lessgtr, \lesseqgtr, \lesseqqgtr, \gtrless, \gtreqless, \gtreqqless\)
+\leqslant, \nleqslant, \eqslantless
\(\leqslant, \nleqslant, \eqslantless\)
+\geqslant, \ngeqslant, \eqslantgtr
\(\geqslant, \ngeqslant, \eqslantgtr\)
+\lesssim, \lnsim, \lessapprox, \lnapprox
\(\lesssim, \lnsim, \lessapprox, \lnapprox\)
+\gtrsim, \gnsim, \gtrapprox, \gnapprox
\(\gtrsim, \gnsim, \gtrapprox, \gnapprox\)
+\prec, \nprec, \preceq, \npreceq, \precneqq
\(\prec, \nprec, \preceq, \npreceq, \precneqq\)
+\succ, \nsucc, \succeq, \nsucceq, \succneqq
\(\succ, \nsucc, \succeq, \nsucceq, \succneqq\)
+\preccurlyeq, \curlyeqprec
\(\preccurlyeq, \curlyeqprec\)
+\succcurlyeq, \curlyeqsucc
\(\succcurlyeq, \curlyeqsucc\)
+\precsim, \precnsim, \precapprox, \precnapprox
\(\precsim, \precnsim, \precapprox, \precnapprox\)
+\succsim, \succnsim, \succapprox, \succnapprox
\(\succsim, \succnsim, \succapprox, \succnapprox\)
+\parallel, \nparallel, \shortparallel, \nshortparallel
\(\parallel, \nparallel, \shortparallel, \nshortparallel\)
+\perp, \angle, \sphericalangle, \measuredangle, 45^\circ
\(\perp, \angle, \sphericalangle, \measuredangle, 45^\circ\)
+\Box, \blacksquare, \diamond, \Diamond \lozenge, \blacklozenge, \bigstar
\(\Box, \blacksquare, \diamond, \Diamond \lozenge, \blacklozenge, \bigstar\)
+\bigcirc, \triangle, \bigtriangleup, \bigtriangledown
\(\bigcirc, \triangle, \bigtriangleup, \bigtriangledown\)
+\vartriangle, \triangledown
\(\vartriangle, \triangledown\)
+\blacktriangle, \blacktriangledown, \blacktriangleleft, \blacktriangleright
\(\blacktriangle, \blacktriangledown, \blacktriangleleft, \blacktriangleright\)
+\forall, \exists, \nexists
\(\forall, \exists, \nexists\)
+\therefore, \because, \And
\(\therefore, \because, \And\)
+\vee, \curlyvee, \bigvee
\(\vee, \curlyvee, \bigvee\)
+\land, \wedge, \curlywedge, \bigwedge
\(\land, \wedge, \curlywedge, \bigwedge\)
+\bar{q}, \bar{abc}, \overline{q}, \overline{abc},
\lnot \neg, \not\operatorname{R}, \bot, \top
\(\bar{q}, \bar{abc}, \overline{q}, \overline{abc},\)
+\(\lnot \neg, \not\operatorname{R}, \bot, \top\)
+\vdash \dashv, \vDash, \Vdash, \models
\(\vdash \dashv, \vDash, \Vdash, \models\)
+\Vvdash \nvdash \nVdash \nvDash \nVDash
\(\Vvdash \nvdash \nVdash \nvDash \nVDash\)
+\ulcorner \urcorner \llcorner \lrcorner
\(\ulcorner \urcorner \llcorner \lrcorner\)
+\Rrightarrow, \Lleftarrow
\(\Rrightarrow, \Lleftarrow\)
+\Rightarrow, \nRightarrow, \Longrightarrow \implies
\(\Rightarrow, \nRightarrow, \Longrightarrow \implies\)
+\Leftarrow, \nLeftarrow, \Longleftarrow
\(\Leftarrow, \nLeftarrow, \Longleftarrow\)
+\Leftrightarrow, \nLeftrightarrow, \Longleftrightarrow \iff
\(\Leftrightarrow, \nLeftrightarrow, \Longleftrightarrow \iff\)
+\Uparrow, \Downarrow, \Updownarrow
\(\Uparrow, \Downarrow, \Updownarrow\)
+\rightarrow \to, \nrightarrow, \longrightarrow
\(\rightarrow \to, \nrightarrow, \longrightarrow\)
+\leftarrow \gets, \nleftarrow, \longleftarrow
\(\leftarrow \gets, \nleftarrow, \longleftarrow\)
+\leftrightarrow, \nleftrightarrow, \longleftrightarrow
\(\leftrightarrow, \nleftrightarrow, \longleftrightarrow\)
+\uparrow, \downarrow, \updownarrow
\(\uparrow, \downarrow, \updownarrow\)
+\nearrow, \swarrow, \nwarrow, \searrow
\(\nearrow, \swarrow, \nwarrow, \searrow\)
+\mapsto, \longmapsto
\(\mapsto, \longmapsto\)
+\rightharpoonup \rightharpoondown \leftharpoonup \leftharpoondown \upharpoonleft \upharpoonright \downharpoonleft \downharpoonright \rightleftharpoons \leftrightharpoons
\(\rightharpoonup \rightharpoondown \leftharpoonup \leftharpoondown \upharpoonleft \upharpoonright \downharpoonleft \downharpoonright \rightleftharpoons \leftrightharpoons\)
+\curvearrowleft \circlearrowleft \Lsh \upuparrows \rightrightarrows \rightleftarrows \rightarrowtail \looparrowright
\(\curvearrowleft \circlearrowleft \Lsh \upuparrows \rightrightarrows \rightleftarrows \rightarrowtail \looparrowright\)
+\curvearrowright \circlearrowright \Rsh \downdownarrows \leftleftarrows \leftrightarrows \leftarrowtail \looparrowleft
\(\curvearrowright \circlearrowright \Rsh \downdownarrows \leftleftarrows \leftrightarrows \leftarrowtail \looparrowleft\)
+\hookrightarrow \hookleftarrow \multimap \leftrightsquigarrow \rightsquigarrow \twoheadrightarrow \twoheadleftarrow
\(\hookrightarrow \hookleftarrow \multimap \leftrightsquigarrow \rightsquigarrow \twoheadrightarrow \twoheadleftarrow\)
+省略号:数学公式中常见的省略号有两种,\ldots
表示与文本底线对齐的省略号,\cdots
表示与文本中线对齐的省略号。
\amalg \% \dagger \ddagger \ldots \cdots
\(\amalg \% \dagger \ddagger \ldots \cdots\)
+\smile \frown \wr \triangleleft \triangleright
\(\smile \frown \wr \triangleleft \triangleright\)
+\diamondsuit, \heartsuit, \clubsuit, \spadesuit, \Game, \flat, \natural, \sharp
\(\diamondsuit, \heartsuit, \clubsuit, \spadesuit, \Game, \flat, \natural, \sharp\)
+\diagup \diagdown \centerdot \ltimes \rtimes \leftthreetimes \rightthreetimes
\(\diagup \diagdown \centerdot \ltimes \rtimes \leftthreetimes \rightthreetimes\)
+\eqcirc \circeq \triangleq \bumpeq \Bumpeq \doteqdot \risingdotseq \fallingdotseq
\(\eqcirc \circeq \triangleq \bumpeq \Bumpeq \doteqdot \risingdotseq \fallingdotseq\)
+\intercal \barwedge \veebar \doublebarwedge \between \pitchfork
\(\intercal \barwedge \veebar \doublebarwedge \between \pitchfork\)
+\vartriangleleft \ntriangleleft \vartriangleright \ntriangleright
\(\vartriangleleft \ntriangleleft \vartriangleright \ntriangleright\)
+\trianglelefteq \ntrianglelefteq \trianglerighteq \ntrianglerighteq
\(\trianglelefteq \ntrianglelefteq \trianglerighteq \ntrianglerighteq\)
+功能|语法|效果
+^
表示上标, _
表示下标。如果上下标的内容多于一个字符,需要用 {}
将这些内容括成一个整体。上下标可以嵌套,也可以同时使用。
上标
+a^2
\(a^2\)
+下标
+a_2
\(a_2\)
+组合
+a^{2+2}
\(a^{2+2}\)
+a_{i,j}
\(a_{i,j}\)
+结合上下标
+x_2^3
\(x_2^3\)
+前置上下标
+{}_1^2\!X_3^4
\({}_1^2\!X_3^4\)
+导数
+x'
\(x'\)
+导数
+x^\prime
\(x\prime\)
+导数点
+\dot{x}
\(\dot{x}\)
+\ddot{y}
\(\ddot{y}\)
+向量
+\vec{c}
(只有一个字母)
\(\vec{c}\)
+\overleftarrow{a b}
\(\overleftarrow{a b}\)
+\overrightarrow{c d}
\(\overrightarrow{c d}\)
+\overleftrightarrow{a b}
\(\overleftrightarrow{a b}\)
+\widehat{e f g}
\(\widehat{e f g}\)
+上弧
+(注: 正确应该用 \overarc,但在这里行不通。要用建议的语法作为解决办法。)(使用 overarc 时需要引入 {arcs} 包。)
+\overset{\frown} {AB}
\(\overset{\frown} {AB}\)
+上划线
+\overline{h i j}
\(\overline{h i j}\)
+下划线
+\underline{k l m}
\(\underline{k l m}\)
+上括号
+\overbrace{1+2+\cdots+100}
\(\overbrace{1+2+\cdots+100}\)
+\begin{matrix} 5050 \\ \overbrace{ 1+2+\cdots+100 } \end{matrix}
\(\begin{matrix} 5050 \\ \overbrace{ 1+2+\cdots+100 } \end{matrix}\)
+下括号
+\underbrace{a+b+\cdots+z}
\(\underbrace{a+b+\cdots+z}\)
+\begin{matrix} \underbrace{ a+b+\cdots+z } \\ 26 \end{matrix}
\(\begin{matrix} \underbrace{ a+b+\cdots+z } \\ 26 \end{matrix}\)
+求和(累加)
+\sum_{k=1}^N k^2
\(\sum_{k=1}^N k^2\)
+\begin{matrix} \sum_{k=1}^N k^2 \end{matrix}
\(\begin{matrix} \sum_{k=1}^N k^2 \end{matrix}\)
+求积(累乘)
+\prod_{i=1}^N x_i
\(\prod_{i=1}^N x_i\)
+\begin{matrix} \prod_{i=1}^N x_i \end{matrix}
\(\begin{matrix} \prod_{i=1}^N x_i \end{matrix}\)
+上积
+\coprod_{i=1}^N x_i
\(\coprod_{i=1}^N x_i\)
+\begin{matrix} \coprod_{i=1}^N x_i \end{matrix}
\(\begin{matrix} \coprod_{i=1}^N x_i \end{matrix}\)
+极限
+\lim_{n \to \infty}x_n
\(\lim_{n \to \infty}x_n\)
+\begin{matrix} \lim_{n \to \infty}x_n \end{matrix}
\(\begin{matrix} \lim_{n \to \infty}x_n \end{matrix}\)
+积分
+\int_{-N}^{N} e^x\, {\rm d}x
\(\int_{-N}^{N} e^x\, {\rm d}x\)
+本例中 \
, 和 {\rm d}
部分可省略,但建议加入,能使式子更美观。{\rm d}
可以用 \mathrm{d}
等价替换。
\begin{matrix} \int_{-N}^{N} e^x\, \mathrm{d}x \end{matrix}
(矩阵中积分符号变小)
\(\begin{matrix} \int_{-N}^{N} e^x\, \mathrm{d}x \end{matrix}\)
+双重积分
+\iint_{D}^{W} \, \mathrm{d}x\,\mathrm{d}y
\(\iint_{D}^{W} \, \mathrm{d}x\,\mathrm{d}y\)
+三重积分
+\iiint_{E}^{V} \, \mathrm{d}x\,\mathrm{d}y\,\mathrm{d}z
\(\iiint_{E}^{V} \, \mathrm{d}x\,\mathrm{d}y\,\mathrm{d}z\)
+闭合的曲线、曲面积分
+\oint_{C} x^3\, \mathrm{d}x + 4y^2\, \mathrm{d}y
\(\oint_{C} x^3\, \mathrm{d}x + 4y^2\, \mathrm{d}y\)
+交集
+\bigcap_1^{n} p
\(\bigcap_1^{n} p\)
+并集
+\bigcup_1^{k} p
\(\bigcup_1^{k} p\)
+通常使用 \frac {分子} {分母}
命令产生一个分数,分数可嵌套。
+便捷情况可直接输入 \frac ab
来快速生成一个 \(\frac ab\) 。
+如果分式很复杂,亦可使用 分子 \over 分母
命令,此时分数仅有一层。
功能|语法|效果
+分数
+\frac{2}{4} = 0.5
\(\frac{2}{4}=0.5\)
+小型分数
+\tfrac{2}{4} = 0.5
\(\tfrac{2}{4} = 0.5\)
+连分式(大型嵌套分式)
+\cfrac{2}{c + \cfrac{2}{d + \cfrac{2}{4}}} = a
\(\cfrac{2}{c + \cfrac{2}{d + \cfrac{2}{4}}} = a\)
+大型不嵌套分式
+\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a
\(\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a\)
+二项式系数
+\dbinom{n}{r}=\binom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}
\(\dbinom{n}{r}=\binom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)
+小型二项式系数
+\tbinom{n}{r}=\tbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}
\(\tbinom{n}{r}=\tbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)
+大型二项式系数
+\binom{n}{r}=\dbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}
\(\binom{n}{r}=\dbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)
+在以 \(e\) 为底的指数函数、极限和积分中尽量不要使用 \frac
符号:它会使整段函数看起来很怪,而且可能产生歧义。也正是因此它在专业数学排版中几乎从不出现。
+横着写这些分式,中间使用斜线间隔 /
(用斜线代替分数线)。
例子:
+\begin{array}{cc}
+\mathrm{Bad} & \mathrm{Better} \\
+\hline \\
+e^{i\frac{\pi}2} \quad e^{\frac{i\pi}2}& e^{i\pi/2} \\
+\int_{-\frac\pi2}^\frac\pi2 \sin x\,dx & \int_{-\pi/2}^{\pi/2}\sin x\,dx \\
+\end{array}
+
显示:
+语法:
+\begin{类型}
+公式内容
+\end{类型}
+
类型可以是:矩阵 matrix
pmatrix
bmatrix
Bmatrix
vmatrix
Vmatrix
、条件表达式 cases
、多行对齐方程式 aligned
、数组 array
。
在公式内容中:在每一行中插入 &
来指定需要对齐的内容,在每行结尾处使用 \\
换行。
在开头使用 begin{matrix}
,在结尾使用 end{matrix}
,在中间插入矩阵元素,每个元素之间插入 &
,并在每行结尾处使用 \\
。
\begin{matrix}
+x & y \\
+z & v
+\end{matrix}
+
\(\begin{matrix} +x & y \\ +z & v +\end{matrix}\)
+在开头将 matrix
替换为 pmatrix
bmatrix
Bmatrix
vmatrix
Vmatrix
。
\begin{vmatrix}
+x & y \\
+z & v
+\end{vmatrix}
+
\(\begin{vmatrix} +x & y \\ +z & v +\end{vmatrix}\)
+\begin{Vmatrix}
+x & y \\
+z & v
+\end{Vmatrix}
+
\(\begin{Vmatrix} +x & y \\ +z & v +\end{Vmatrix}\)
+使用 \cdots
⋯ , \ddots
⋱ , \vdots
⋮ 来输入省略符号。
\begin{bmatrix}
+0 & \cdots & 0 \\
+\vdots & \ddots & \vdots \\
+0 & \cdots & 0
+\end{bmatrix}
+
\(\begin{bmatrix} +0 & \cdots & 0 \\ +\vdots & \ddots & \vdots \\ +0 & \cdots & 0 +\end{bmatrix}\)
+\begin{Bmatrix}
+x & y \\
+z & v
+\end{Bmatrix}
+
\(\begin{Bmatrix} +x & y \\ +z & v +\end{Bmatrix}\)
+\begin{pmatrix}
+x & y \\
+z & v
+\end{pmatrix}
+
\(\begin{pmatrix} +x & y \\ +z & v +\end{pmatrix}\)
+f(n) =
+\begin{cases}
+n/2, & \text{if }n\text{ is even} \\
+3n+1, & \text{if }n\text{ is odd}
+\end{cases}
+
\(f(n) = +\begin{cases} +n/2, & \text{if }n\text{ is even} \\ +3n+1, & \text{if }n\text{ is odd} +\end{cases}\)
+人们经常想要一列整齐且居中的方程式序列。使用 \begin{aligned}…\end{aligned}
。
\begin{aligned}
+f(x) & = (m+n)^2 \\
+ & = m^2+2mn+n^2 \\
+\end{aligned}
+
\(\begin{aligned} +f(x) & = (m+n)^2 \\ + & = m^2+2mn+n^2 \\ +\end{aligned}\)
+\begin{aligned}
+3^{6n+3}+4^{6n+3}
+& \equiv (3^3)^{2n+1}+(4^3)^{2n+1}\\
+& \equiv 27^{2n+1}+64^{2n+1}\\
+& \equiv 27^{2n+1}+(-27)^{2n+1}\\
+& \equiv 27^{2n+1}-27^{2n+1}\\
+& \equiv 0 \pmod{91}\\
+\end{aligned}
+
\(\begin{aligned} +3^{6n+3}+4^{6n+3} +& \equiv (3^3)^{2n+1}+(4^3)^{2n+1}\\ +& \equiv 27^{2n+1}+64^{2n+1}\\ +& \equiv 27^{2n+1}+(-27)^{2n+1}\\ +& \equiv 27^{2n+1}-27^{2n+1}\\ +& \equiv 0 \pmod{91}\\ +\end{aligned}\)
+\begin{alignedat}{3}
+f(x) & = (m-n)^2 \\
+f(x) & = (-m+n)^2 \\
+ & = m^2-2mn+n^2 \\
+\end{alignedat}
+
\(\begin{alignedat}{3} +f(x) & = (m-n)^2 \\ +f(x) & = (-m+n)^2 \\ + & = m^2-2mn+n^2 \\ +\end{alignedat}\)
+\begin{cases}
+3x + 5y + z \\
+7x - 2y + 4z \\
+-6x + 3y + 2z
+\end{cases}
+
\(\begin{cases} +3x + 5y + z \\ +7x - 2y + 4z \\ +-6x + 3y + 2z +\end{cases}\)
+或
+\left\{\begin{aligned}
+3x + 5y + z \\
+7x - 2y + 4z \\
+-6x + 3y + 2z
+\end{aligned}\right.
+
\(\left\{\begin{aligned} +3x + 5y + z \\ +7x - 2y + 4z \\ +-6x + 3y + 2z +\end{aligned}\right.\)
+通常,一个格式化后的表格比单纯的文字或排版后的文字更具有可读性。数组和表格均以 \begin{array}
开头,并在其后定义列数及每一列的文本对齐属性,c
l
r
分别代表居中、左对齐及右对齐。若需要插入垂直分割线,在定义式中插入 |
,若要插入水平分割线,在下一行输入前插入 \hline
。与矩阵相似,每行元素间均须要插入 &
,每行元素以 \\
结尾,最后以 \end{array}
结束数组。
\begin{array}{c|lcr}
+n & \text{左对齐} & \text{居中对齐} & \text{右对齐} \\
+\hline
+1 & 0.24 & 1 & 125 \\
+2 & -1 & 189 & -8 \\
+3 & -20 & 2000 & 1+10i
+\end{array}
+
\(\begin{array}{c|lcr} +n & \text{左对齐} & \text{居中对齐} & \text{右对齐} \\ +\hline +1 & 0.24 & 1 & 125 \\ +2 & -1 & 189 & -8 \\ +3 & -20 & 2000 & 1+10i +\end{array}\)
+\begin{array}{lcl}
+z & = & a \\
+f(x,y,z) & = & x + y + z
+\end{array}
+
\(\begin{array}{lcl} +z & = & a \\ +f(x,y,z) & = & x + y + z +\end{array}\)
+\begin{array}{lcr}
+z & = & a \\
+f(x,y,z) & = & x + y + z
+\end{array}
+
\(\begin{array}{lcr} +z & = & a \\ +f(x,y,z) & = & x + y + z +\end{array}\)
+\begin{array}{ccc}
+a & b & S \\
+\hline
+0&0&1\\
+0&1&1\\
+1&0&1\\
+1&1&0\\
+\end{array}
+
\(\begin{array}{ccc} +a & b & S \\ +\hline +0&0&1\\ +0&1&1\\ +1&0&1\\ +1&1&0\\ +\end{array}\)
+多个数组/表格可 互相嵌套 并组成一组数组/一组表格。
+使用嵌套前必须声明 $$
符号。
% outer vertical array of arrays 外层垂直表格
+\begin{array}{c}
+ % inner horizontal array of arrays 内层水平表格
+ \begin{array}{cc}
+ % inner array of minimum values 内层"最小值"数组
+ \begin{array}{c|cccc}
+ \text{min} & 0 & 1 & 2 & 3\\
+ \hline
+ 0 & 0 & 0 & 0 & 0\\
+ 1 & 0 & 1 & 1 & 1\\
+ 2 & 0 & 1 & 2 & 2\\
+ 3 & 0 & 1 & 2 & 3
+ \end{array}
+ &
+ % inner array of maximum values 内层"最大值"数组
+ \begin{array}{c|cccc}
+ \text{max}&0&1&2&3\\
+ \hline
+ 0 & 0 & 1 & 2 & 3\\
+ 1 & 1 & 1 & 2 & 3\\
+ 2 & 2 & 2 & 2 & 3\\
+ 3 & 3 & 3 & 3 & 3
+ \end{array}
+ \end{array}
+ % 内层第一行表格组结束
+ \\
+ % inner array of delta values 内层第二行Delta值数组
+ \begin{array}{c|cccc}
+ \Delta&0&1&2&3\\
+ \hline
+ 0 & 0 & 1 & 2 & 3\\
+ 1 & 1 & 0 & 1 & 2\\
+ 2 & 2 & 1 & 0 & 1\\
+ 3 & 3 & 2 & 1 & 0
+ \end{array}
+ % 内层第二行表格组结束
+\end{array}
+
\(% outer vertical array of arrays 外层垂直表格 +\begin{array}{c} + % inner horizontal array of arrays 内层水平表格 + \begin{array}{cc} + % inner array of minimum values 内层"最小值"数组 + \begin{array}{c|cccc} + \text{min} & 0 & 1 & 2 & 3\\ + \hline + 0 & 0 & 0 & 0 & 0\\ + 1 & 0 & 1 & 1 & 1\\ + 2 & 0 & 1 & 2 & 2\\ + 3 & 0 & 1 & 2 & 3 + \end{array} + & + % inner array of maximum values 内层"最大值"数组 + \begin{array}{c|cccc} + \text{max}&0&1&2&3\\ + \hline + 0 & 0 & 1 & 2 & 3\\ + 1 & 1 & 1 & 2 & 3\\ + 2 & 2 & 2 & 2 & 3\\ + 3 & 3 & 3 & 3 & 3 + \end{array} + \end{array} + % 内层第一行表格组结束 + \\ + % inner array of delta values 内层第二行Delta值数组 + \begin{array}{c|cccc} + \Delta&0&1&2&3\\ + \hline + 0 & 0 & 1 & 2 & 3\\ + 1 & 1 & 0 & 1 & 2\\ + 2 & 2 & 1 & 0 & 1\\ + 3 & 3 & 2 & 1 & 0 + \end{array} + % 内层第二行表格组结束 +\end{array}\)
+$$
+\left[
+ \begin{array}{cc|c}
+ 1&2&3\\
+ 4&5&6
+ \end{array}
+\right]
+$$
+
显示:
+其中 cc|c
代表在一个三列矩阵中的第二和第三列之间插入分割线。
Note
+对于部分希腊字母,例如 \Alpha
在预览时会生效但在网页上渲染会出现错误,因此这里的希腊字符写法参考 Greek letters 进行编辑,更多详情请参考 #39 LaTeX文档希腊字母大写显示有问题 。
输入 \小写希腊字母英文全称
和 \首字母大写希腊字母英文全称
来分别输入小写和大写希腊字母。
A B \Gamma \Delta E Z H \Theta
\(A B \Gamma \Delta E Z H \Theta\)
+I K \Lambda M N \Xi O \Pi
\(I K \Lambda M N \Xi O \Pi\)
+P \Sigma T \Upsilon \Phi X \Psi \Omega
\(P \Sigma T \Upsilon \Phi X \Psi \Omega\)
+\alpha \beta \gamma \delta \epsilon \zeta \eta \theta
\(\alpha \beta \gamma \delta \epsilon \zeta \eta \theta\)
+\iota \kappa \lambda \mu \nu \omicron \xi \pi
\(\iota \kappa \lambda \mu \nu \omicron \xi \pi\)
+\rho \sigma \tau \upsilon \phi \chi \psi \omega
\(\rho \sigma \tau \upsilon \phi \chi \psi \omega\)
+部分字母有变量专用形式,以 \var-
开头。
\varepsilon \digamma \varkappa \varpi
\(\varepsilon \digamma \varkappa \varpi\)
+\varrho \varsigma \vartheta \varphi
\(\varrho \varsigma \vartheta \varphi\)
+\aleph \beth \gimel \daleth
\(\aleph \beth \gimel \daleth\)
+Note
+该指南摘自 LaTeX公式手册 ,你可以点击链接来了解更多内容。
+Note
+本文提供了Markdown的基本撰写说明。因为主题设置的缘故可能会导致某些效果不生效,遇到此问题请前往 issues 进行反馈。
+你的内容标题应该从二级标题( ##
)开始
# 一级标题
+## 二级标题
+### 三级标题
+
我们只知道 地球 具有让人类生存的环境,还有 火星 ,也许还有 其它星球 。
我们只知道 **地球** 具有让人类生存的环境,还有 ~~火星~~ ,也许还有 *其它星球* 。
+
---
+***
+
你应该避免直接内嵌 HTML 代码。
+[link name](link url) 或者 <link url>
+
多翻译引擎
+多语言互译
+- 多翻译引擎
+
+ * 谷歌翻译
+ * 微软翻译
+ * 有道翻译
+ * 百度翻译
+ * 阿里翻译
+ * DeepL 翻译
+
+- 多语言互译
+
使用单引号 code
来表示行内代码,使用三引号来表示代码块。
code
+
并且对于代码块,你应该写上对应的语言。
+你应该避免内嵌 HTML 来插入图片。
+
+
下面是一段注释
+++这里是一段注释 (
+<blockquote></blockquote>
) +这是注释的第二行
# 这里是注释里面的代码段
+print("hello")
+
++注释
+++注释嵌套 +注释嵌套
+
下面是一段注释
+> 这里是一段注释 (`<blockquote></blockquote>`)
+> 这是注释的第二行
+
+# 这里是注释里面的代码段
+print("hello")
+
+> 注释
+>> 注释嵌套
+>> 注释嵌套
+
暂不支持 emoji
语法,但是可以直接从 emoji
表情大全拷贝表情到文档,比如:
+🍊 🍇 😀 😅 😇
++访问http://emojihomepage.com/以获取更多emoji
+
H2O, y = x2
+H~2~O, y = x^2^
+
我能干饭我自豪。1
+我能干饭我自豪。[^干饭人]
+
+[^干饭人]: 老子说道
+这会在文章末尾进行注解
+
Header 1 | +Header2 | +
---|---|
Cell 1 |
+Cell 2 link | +
Cell 3 | +Cell 4 | +
| Header 1 | *Header2* |
+| -------- | -------- |
+| `Cell 1` | [Cell 2](http://example.com) link |
+| Cell 3 | **Cell 4** |
+
- [x] 任务1
+- [x] 任务2
+- [ ] 任务3
+- [ ] 任务4
+
文档支持 LaTeX
,关于 LaTeX
,你可以访问 LaTeX公式手册 来获取帮助。
使用 mermaid 可以画很多类型的图表, 详细的语法和支持请看官网
+sequenceDiagram
+ Alice->>John: Hello John, how are you?
+ loop Healthcheck
+ John->>John: Fight against hypochondria
+ end
+ Note right of John: Rational thoughts!
+ John-->>Alice: Great!
+ John->>Bob: How about you?
+ Bob-->>John: Jolly good!
+
```mermaid
+ sequenceDiagram
+ Alice->>John: Hello John, how are you?
+ loop Healthcheck
+ John->>John: Fight against hypochondria
+ end
+ Note right of John: Rational thoughts!
+ John-->>Alice: Great!
+ John->>Bob: How about you?
+ Bob-->>John: Jolly good!
+ ```
+
老子说道 +这会在文章末尾进行注解 ↩
+For Pull Request, please follow the following requirements1:
+fix #xxxx
in the content, where xxxx
is the issue number.For the title, such format is recommended:
+<Edit type>(<file name>): <content> (<issue number>)
+
Edit type can be one of the following:
+feat
: for adding new content.fix
: for fixing existing content errors.refactor
: for refactoring a page (larger changes).revert
: for reverting previous changes.Examples:
+fix(sepecification/specification): edit code comment to make it more clear
fix: plugins/xxx not in directory (#2)
feat(software/mathpix): official website
refactor(specification/template): tidy up page content
Edited from OI-wiki: 如何参与 ↩
+Hello friends, if you have a great tool that you want to share with everyone, but you don’t know how to write a markdown, here is a template for reference
+We would like submitted PRs to describe this tool in the introduction section:
+The PR we want to submit is described in the installation section:
+linux
operating system, it is best to give instructions$clang --version
to check whether clang
is successfully installedThe PR we want to submit is described in the recommendation reason section:
+We hope that the submitted PR will provide some common references in the reference section, such as:
+RustSBI是RISC-V下可用的SBI固件实现,它拥有“独立包”和“原型设计系统”。 +RISC-V SBI是RISC-V下不可或缺的固件接口,它提供了足以操作系统使用的基本功能; +更多的功能性接口应当通过其它的工业标准实现。
+独立包是分别实现RustSBI的项目,每个不同的主板都拥有不同的仓库和解决方案。 +这些方案包括但不限于:
+ +这些解决方案的文档和下载链接都在各自的仓库中。
+RustSBI原型设计系统提供了从SBI到UEFI、LinuxBoot的完整解决方案, +它拥有一个图形化的编译界面,能在不同的主板上运行。
+为了编译原型设计系统,复制仓库后使用以下的命令:
+cargo termconfig
+
在图形界面配置完毕后,配置文件将保存到Xtask.toml
文件中,以供编译过程阅读。
接下来,我们可以选择仅编译或者编译并烧录。使用以下的命令编译:
+cargo make
+
或者,使用以下的命令直接编译和烧录到目标主板:
+cargo flash
+
RustSBI原型设计系统的链接:https://github.com/rustsbi/standalone
+ + + + + + + + +Wasm-bpf 是一个由 CO-RE(一次编写 – 到处运行) libbpf libbpf 驱动的 WebAssembly eBPF 库、工具链和运行时。它可以帮助您几乎不用修改地构建几乎所有的 eBPF 程序或用例到 Wasm 中,并在 Wasm 沙箱中跨平台运行。
+WebAssembly
(简称Wasm)是一种可执行代码的便携式二进制格式。代码在一个内存安全的沙盒环境中以接近本机速度执行,具有明确定义的资源限制和一个 API ,用于与嵌入式主机环境(例如代理)进行通信。
wasm-bpf
项目结合了 Wasm 和 eBPF 技术,提高了eBPF应用程序的性能和可编程性。它提供了一个库和工具链,用于将多种语言编写的 eBPF 应用编译成 Wasm,并提供运行时环境以在安全的沙箱中运行这些程序。
使用 wasm-bpf,用户可以动态加载和安全地执行用户自定义或社区贡献的 Wasm-eBPF 代码作为插件,例如在他们的网络相关软件产品,或可观测性平台中。这其中 eBPF 使得数据收集高效可扩展,同时 Wasm 也允许对这些数据进行高级处理和分析。
+此外,它使开发人员能够使用熟悉的语言,如 C/C ++,Rust,Go 和其他 30 多种能编译到 Wasm 的编程语言编写 eBPF 程序,并轻松地在不同的Linux发行版中部署它们。此外,利用 Wasm 的生态和工具链,云提供商可以利用 wasm-bpf 为其客户提供安全且高性能的环境来开发和部署 eBPF 应用程序。
+通用性
: 提供了从 eBPF 到 Wasm 的大多数能力,包括从环形缓冲区
或 perf 缓冲区
进行轮询,使用 maps
在内核 eBPF 和用户空间 Wasm 之间进行双向通信,动态加载、挂载到 hook 执行等。支持大量的 eBPF 程序类型和 maps
类型。高性能
: 对于复杂数据类型没有序列化开销,使用共享内存来避免主机和 Wasm 之间的拷贝开销。易于使用
: 提供类似于 libbpf-bootstrap 的开发体验,自动生成 Wasm-eBPF 骨架头文件和类型定义以进行绑定。可以使用 C/C++
、Rust
、Go
编写 eBPF 程序并编译成 Wasm。超轻量级
: 最小运行时的二进制大小仅为 1.5 MB。编译后的 Wasm 模块大小仅为 ~90K。使用相同的工具链,您可以轻松地在任何语言和平台上构建自己的 Wasm-eBPF 运行时!请参阅 examples 目录中以 C、Rust、Go 编写的编译为 Wasm 的 eBPF 程序示例,覆盖了从跟踪、网络到安全的各种用例。
+有关使用 OCI 镜像分发、动态加载、运行 Wasm-eBPF 程序的工具,请参阅 eunomia-bpf 仓库。
+请查看 examples 目录中用 C、Rust、Go 编写的编译成 WASM 的 eBPF 程序示例。
+tracing examples
security example
+- lsm and go-lsm: 检查删除目录的权限
networking example
+- sockfilter: 监视数据包并处理 __sk_buff
+- sockops: 在 syn 数据包中添加 pid 选项。
runqlat 的一个示例输出:
+$ sudo ./wasm-bpf runqlat.wasm 1
+Tracing run queue latency... Hit Ctrl-C to end.
+
+ usecs : count distribution
+ 0 -> 1 : 72 |***************************** |
+ 2 -> 3 : 93 |************************************* |
+ 4 -> 7 : 98 |****************************************|
+ 8 -> 15 : 96 |*************************************** |
+ 16 -> 31 : 38 |*************** |
+ 32 -> 63 : 4 |* |
+ 64 -> 127 : 5 |** |
+ 128 -> 255 : 6 |** |
+ 256 -> 511 : 0 | |
+ 512 -> 1023 : 0 | |
+ 1024 -> 2047 : 0 | |
+ 2048 -> 4095 : 1 | |
+
请参考 docs/build.md。
+wasm-bpf 运行时需要两部分:主机端(在 Wasm 运行时之外)和 Wasm 客户端端(在 Wasm 运行时之内)。
+libbpf-wasm
的头文件库,为 Wasm 客户端 C/C++ 代码提供 libbpf API。bpftool
的工具,用于生成 Wasm-eBPF skeleton 头文件和 C 结构定义,以便在主机和 Wasm 客户端之间传递数据而无需序列化。有关详细的编译过程,请参阅 examples/bootstrap/README.md。下图显示了 eBPF 和 Wasm 运行时之间的整体交互过程:
+Wasm 模块可以同时加载和控制多个 eBPF 程序, 并且能够调用或者控制(通过组件模型)其他语言编写的 Wasm 模块来处理数据。
+我们也提了一个 WASI 提案 wasi-bpf。
+MIT
+ + + + + + + + +Zineland 是一个简单有效的杂志构建框架,能够快速通过 Markdown 文档生成杂志风格的静态网页
+ cargo install zine
+
brew install zineland/tap/zine
+
在时间的长河中,我们发现,重复繁琐的工作带给大家的只有时间和精力的消耗。的确在我们的不断思考和进步中,一个个优秀的工具出现在我们的眼前。但随之而来的是,工具种类和数量的飞速发展,我们难以根据具体需求,快速,简易地上手一款工具。相反,“百度”,“谷歌”成为了我们老生常谈的话语。
+在一个个链接和回答中不断尝试。有的是生涩的英文文档,有的是寥寥数语,这无疑增加了我们的使用成本。所以 ToolDiy 的初衷就是为了解决这个问题,我们想借助开源社区的环境,不断收集和提炼各行各业的工具(毕竟适合你的才是最好的)。 ToolDiy 将从客观的角度,以用户的视角出发,推荐分析各类工具,而不仅仅局限于固定的方向。
+很多时候我们在开发过程中会遇到很多工具的环境配置问题,我们不得不花费大量时间去思考和学习使用,很多时候这些工作本身就只能够锻炼你对配置环境的耐心,我们想让大家专注工具本身,于是我们想维护一些工具配置和构建的自动化脚本或者是docker环境方便使用者,当然我们在书写时候留下的构建脚本也可以提供给使用者学习。一个能够开箱即用的工具想想都令人兴奋,让我们一起建设他吧!
+只要能够给大家带来帮助和更好的体验,这便是 ToolDiy 存在的意义。
+接下来,让我们一起使用它吧!
+本项目的初衷是提供维护一个工具说明的仓库和维基,本身就是一个降低使用门槛方便大家的项目,我们的原则是不限于任何特定的学科和领域,我们可以将所有自己认为有用的工具进行分享(注意做好入门介绍,符合项目初衷),在尊重工具生产者劳动的前提下都可以分享,因此我们不允许大家分享盗版和破解工具,在规范的前提下我们欢迎各种各样的 PR ,有任何除开上诉的疑惑都可以提出 issue 或者联系仓库管理,在涉及付费内容的工具时我们鼓励分享也希望大家做好信息公开标注他的价格,本项目不会给任何工具广告,不会有特殊位置等广告行为一切以提交时间排版。我们同样欢迎各种改善本项目阅读体验的 PR 请求(包括但不局限于添加一个换行增加阅读体验,增加项目 logo ,中英文校对等),_(:з)∠)_本项目还处于初期阶段,非常需要各位大佬的完善和纠错。
+如果你有已经写好的文章想要添加到这里,你可以通过下列方式:
+.en.md
结尾),最后提出 PR 以便进行合并。如果你不知道从何处下笔,可以首先参考写作模板。
+Note
+点击链接加入群聊 tooldiy
+
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
最近 LLM(大语言模型)实在火爆,出了不少开源模型,比如 Alpaca1、ChatGLM2、BELLE3 等等,让每个人都有机会运行和训练专属自己的 LLM,我也迫不及待了。
+但是,熟悉我的老读者朋友应该知道,虽然我是搞算法的,也发过几篇论文,但我是走的是贫穷科研的路线,一张显卡都没有。像 ChatGLM-6B 这种模型,在我的小破 Mac 上根本跑不起来。Alpaca 的 CPU 版本虽然能跑,但它中文水平实在太烂了。有没有什么模型不仅中文好,又可以不依赖显卡?RWKV4进入了我的视野。
+RWKV 是一种纯 RNN 的架构,能够进行语言建模5,目前最大参数规模已经做到了 14B6。目前的在线体验地址:
+Raven RWKV 7B - a Hugging Face Space by BlinkDL
+不过请注意,上面这个体验模型的微调语料英文占 99%,所以中文水平并不是最好的。作者 @PENG Bo 最近发布的 RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%
这个模型的中文微调语料占 50%,中文水平更好。以下我也会基于该模型进行操作。
首先,RWKV 的模型分为很多种,都发布在作者的 huggingface7 上:
+其中:
+我下载的是 RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth
8 , 即参数量为 7B 的对话模型,微调预料中 49% 是英文,50% 是中文。ctx4096 表示微调是的上下文长度。
这个模型有 14.8 GB,请务必确保自己电脑的可用硬盘空间在 40 GB 以上(因为后面要对这个模型进行转换和量化,需要占用更多的硬盘空间。)
+下载好的模型配合 ChatRWKV9这个仓库里的代码就可以跑了,但是它对 CPU 策略的支持最低只到 fp32i8,7B 模型需要 12 GB 内存才能跑起来,我用 16GB 内存的 Mac 试了一下,跑是跑起来了,但是非常慢。
+所以,这里需要介绍一下能够更充分利用 CPU 的方法:
+saharNooby/rwkv.cpp: INT4 and FP16 inference on CPU for RWKV language model (github.com)
+rwkv.cpp 可以将 RWKV 原始模型的参数转化为 float16,并量化到 int4,可以在 CPU 上更快地运行,也可以节省更多的内存。
+以下是操作步骤。
+需要安装 git(没有 git 的朋友,可能你要补的前置知识有点多,我建议自行搜索)
+git clone --recursive https://github.com/saharNooby/rwkv.cpp.git
+cd rwkv.cpp
+
rwkv.cpp 的开发者已经预编译了不同平台上的依赖库,可以在这里下载:https://github.com/saharNooby/rwkv.cpp/releases
+下载的时候请注意操作系统类型和支持的架构。由于作者没有预编译对 Mac m1 的 ARM64 架构的依赖库,所以我选择自行编译(需要安装 cmake,并在 shell 中移动到 rwkv.cpp 路径下):
+cmake -DBUILD_SHARED_LIBS=ON .
+cmake --build . --config Release
+
需要装 PyTorch
+我直接把下载好的模型放在了 rwkv.cpp 的路径下,然后执行以下命令:
+python rwkv/convert_pytorch_to_ggml.py ./RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth ./rwkv.cpp-7B.bin float16
+
其实就是让 python 运行 rwkv/convert_pytorch_to_ggml.py
这个转换模型的代码, ./RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth
是待转换的模型的路径, ./rwkv.cpp-7B.bin
是转换后的路径,float16 是要转换成什么类型的参数。
其实上面转换好的 ./rwkv.cpp-7B.bin
已经可以用了,但是它要占用 16GB 内存。为了减少内存占用,可以将 ./rwkv.cpp-7B.bin
量化为 int4,可以省一半内存,也就是只占 6GB 内存。只需要执行以下命令:
python rwkv/quantize.py ./rwkv.cpp-7B.bin ./rwkv.cpp-7B-Q4_1_O.bin 4
+
然后你就会得到一个大小只有 6GB 的模型了。
+同样,一行命令搞定:
+python rwkv/chat_with_bot.py ./rwkv.cpp-7B-Q4_1_0.bin
+
让我们看看效果,首先是内存占用,不到 6GB
+然后是问答和执行命令:
+效果还不错,不过最后莫名其妙又多说了一段话,可能是量化带来的精度损失?非量化版本的效果如下:
+希望开发者之后能对量化版本进行测评,让 rwkv 变得更好用。
+以上就是我在 Mac 上用 6GB 内存运行 7B 的中文语言模型 RWKV 的过程了,希望对读者朋友们有所帮助。
+参考
+https://github.com/antimatter15/alpaca.cpp ↩
+https://github.com/THUDM/ChatGLM-6B ↩
+https://github.com/LianjiaTech/BELLE ↩
+发布几个RWKV的Chat模型(包括英文和中文)7B/14B欢迎大家玩 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/618011122 ↩
+RWKV-v2-RNN 原理:超越 Transformer,实现 O(T) 的语言建模 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/514840332 ↩
+RWKV:用RNN达到Transformer性能,且支持并行模式和长程记忆,既快又省显存,已在14B参数规模检验 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/599150009 ↩
+BlinkDL (BlinkDL) (huggingface.co) https://huggingface.co/BlinkDL ↩
+RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth https://huggingface.co/BlinkDL/rwkv-4-raven/blob/main/RWKV-4-Raven-7B-v9x-Eng49%25-Chn50%25-Other1%25-20230418-ctx4096.pth ↩
+https://github.com/BlinkDL/ChatRWKV ↩
+本文向大家介绍一款用于换源个工具帮助大家更快的更换所使用软件的源提高开发效率
+++git clone https://github.com/57307407/Source-changer.git
+
目前支持 maven 、 npm 、 python(pip)换源
+由于本工具使用 python 语言进行开发,使用前请先安装python环境
+++下载链接:https://www.python.org/
+
输入命令
+++python -V
+or
+python3 -V
+
出现python版本号即为安装完毕
+++python main.py / python3 main.py
+更换maven源时需要在命令前加sudo
+即: sudo python3 main.py
+
选择需换源的软件
+选择更换的镜像
+本文向大家介绍自己的windows环境如何部署该项目
+++注意:这里需要用到python环境,本人是
+python3.10
git clone https://github.com/cargo-youth/ToolDiy.git
+
下载链接:pip install mkdocs
+
本站主题是material,使用下面命令进行安装即可。 +
pip install mkdocs-material
+
pip install pymdown-extensions
+pip install mkdocs-awesome-pages-plugin
+
这里是个坑,我安装的时候,直接安装pip install i18n
不行,你需要专门安装mkdocs下的i18n,然后问的chatGPT,他给我提供的解决方案是pip install mkdocs-i18n-plugin
;可惜不对,最后在谷歌上找到下面命令,就对了。
+
pip install mkdocs-static-i18n
+
mkdocs serve
+
mkdocs build
+
code-server extensions
+安装 Docker Desktop,参见 Install Docker Desktop on Windows。
+运行 Docker Desktop,再打开 CMD 或者 PowerShell,执行
+docker pull jklincn/c-os
+
镜像成功拉取后,执行
+docker run -d --privileged -p 58888:8080 jklincn/c-os
+
这时使用浏览器打开 http://localhost:58888 即可启动开发环境。
+后续可以在 Docker Desktop 界面的 Containers 中控制已创建容器的暂停与开启。
++++
+- +
+主机映射端口 58888 可随意更换。服务端口 8080 可以通过修改 Dockerfile 更换。
+- +
+如果镜像拉取缓慢,可以点击 Docker Desktop 界面右上角齿轮打开设置,在 Docker Engine 配置文件中添加国内源,再点击
+Apply & restart
重启 Docker,再次尝试拉取。+"registry-mirrors": [ + "http://hub-mirror.c.163.com", + "https://docker.mirrors.ustc.edu.cn" +] +
此处给出镜像的构建脚本,供有需求的同学参考与修改
+FROM ubuntu:22.04
+SHELL ["/bin/bash", "-c"]
+
+# 安装必要依赖与开发工具
+RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
+ apt-get update && apt-get install -y \
+ gcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \
+ git wget python3 vim file curl \
+ autoconf automake autotools-dev libmpc-dev libmpfr-dev libgmp-dev \
+ gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+ zlib1g-dev libexpat-dev \
+ ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \
+ && rm -rf /var/lib/apt/lists/*
+
+# 安装 QEMU
+ARG QEMU_VERSION=7.0.0
+RUN cd /tmp && \
+ wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \
+ tar xf qemu-${QEMU_VERSION}.tar.xz && \
+ cd qemu-${QEMU_VERSION} && \
+ ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \
+ make -j && \
+ make install && \
+ cd .. && \
+ rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz
+
+# 安装 code-server 和扩展
+ARG CODE_VERSION=4.10.1
+RUN cd /usr/local/ && \
+ wget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ tar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ ln -s /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \
+ rm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ wget https://github.com/microsoft/vscode-cpptools/releases/download/v1.14.4/cpptools-linux.vsix && \
+ code --install-extension cpptools-linux.vsix && \
+ rm cpptools-linux.vsix && \
+ wget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+ code --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+ rm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix
+
+EXPOSE 8080/tcp
+CMD ["code", "--auth", "none", "--bind-addr", "0.0.0.0:8080"]
+
code-server extensions
+安装 Docker Desktop,参见 Install Docker Desktop on Windows。
+运行 Docker Desktop,再打开 CMD 或者 PowerShell,执行
+docker pull jklincn/rust-os
+
镜像成功拉取后,执行
+docker run -d --privileged -p 58888:8080 jklincn/rust-os
+
这时使用浏览器打开 http://localhost:58888 即可启动开发环境。
+后续可以在 Docker Desktop 界面的 Containers 中控制已创建容器的暂停与开启。
++++
+- +
+主机映射端口 58888 可随意更换。服务端口 8080 可以通过修改 Dockerfile 更换
+- +
+如果镜像拉取缓慢,可以点击 Docker Desktop 界面右上角齿轮打开设置,在 Docker Engine 配置文件中添加国内源,再点击
+Apply & restart
重启 Docker,再次尝试拉取。+"registry-mirrors": [ + "http://hub-mirror.c.163.com", + "https://docker.mirrors.ustc.edu.cn" +] +
此处给出镜像的构建脚本,供有需求的同学参考与修改
+FROM ubuntu:22.04
+SHELL ["/bin/bash", "-c"]
+
+# 安装必要依赖与开发工具
+RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
+ apt-get update && apt-get install -y \
+ gcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \
+ git wget python3 vim file curl \
+ autoconf automake autotools-dev libmpc-dev libmpfr-dev libgmp-dev \
+ gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+ zlib1g-dev libexpat-dev \
+ ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \
+ && rm -rf /var/lib/apt/lists/*
+
+# 安装 QEMU
+ARG QEMU_VERSION=7.0.0
+RUN cd /tmp && \
+ wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \
+ tar xf qemu-${QEMU_VERSION}.tar.xz && \
+ cd qemu-${QEMU_VERSION} && \
+ ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \
+ make -j && \
+ make install && \
+ cd .. && \
+ rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz
+
+# 安装 code-server 和扩展
+ARG CODE_VERSION=4.10.1
+RUN cd /usr/local/ && \
+ wget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ tar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ ln -s /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \
+ rm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ wget https://openvsxorg.blob.core.windows.net/resources/rust-lang/rust-analyzer/linux-x64/0.3.1435/rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+ code --install-extension rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+ rm rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+ wget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+ code --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+ rm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix
+
+WORKDIR /root
+# 安装 rust
+ARG RUST_VERSION=nightly
+ENV RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
+ENV RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
+RUN mkdir .cargo && \
+ echo '[source.crates-io]' >> .cargo/config && \
+ echo 'registry = "https://github.com/rust-lang/crates.io-index"' >> .cargo/config && \
+ echo 'replace-with = "ustc"' >> .cargo/config && \
+ echo '[source.ustc]' >> .cargo/config && \
+ echo 'registry = "git://mirrors.ustc.edu.cn/crates.io-index"' >> .cargo/config && \
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup-init && \
+ chmod +x rustup-init && \
+ ./rustup-init -y --default-toolchain ${RUST_VERSION} --target riscv64imac-unknown-none-elf && \
+ rm rustup-init && \
+ source $HOME/.cargo/env && \
+ cargo install cargo-binutils && \
+ rustup component add llvm-tools-preview && \
+ rustup component add rust-src
+
+EXPOSE 8080/tcp
+CMD ["code", "--auth", "none", "--bind-addr", "0.0.0.0:8080"]
+
# (ubuntu) 安装QEMU7.0依赖包
+sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \
+ gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+ zlib1g-dev libexpat-dev pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \
+ git tmux python3 python3-pip ninja-build
+# 在开发目录执行安装
+mkdir dev
+pushd dev
+wget https://download.qemu.org/qemu-7.0.0.tar.xz
+tar -xf qemu-7.0.0.tar.xz
+cd qemu-7.0.0
+./configure --target-list=x86_64-softmmu,aarch64-softmmu,riscv64-softmmu --enable-debug
+make -j$(nproc)
+make install
+popd
+# 配置环境变量
+vi ~/.bashrc
+export PATH=$PATH:/path/to/qemu-7.0.0/build
+# 配置后更新系统路径
+source ~/.bashrc
+# 检测qemu版本(以riscv64 为例上诉配置已将x86_64 aarch64 riscv64安装好均可以检测版本)
+qemu-system-riscv64 --version
+# 配置rust环境
+curl https://sh.rustup.rs -sSf | sh
+# 配置环境变量
+source $HOME/.cargo/env
+# 检测版本
+rustc --version
+# rust相关软件包安装
+rustup target add riscv64gc-unknown-none-elf
+cargo install cargo-binutils
+rustup component add llvm-tools-preview
+rustup component add rust-src
+
# centos 依赖安装
+sudo yum install autoconf automake libmpc-devel mpfr-devel gmp-devel gawk bison flex \
+ texinfo patchutils gcc gcc-c++ zlib-devel expat-devel git
+# gcc版本过低导致的qemu编译失败(也可以直接官网更高版本安装)
+yum install centos-release-scl
+scl enable devtoolset-8 bash
+# 查看gcc版本
+gcc -v
+
vi ~/.cargo/config
+[source.crates-io]
+registry = "https://github.com/rust-lang/crates.io-index"
+replace-with = 'ustc'
+[source.ustc]
+registry = "git://mirrors.ustc.edu.cn/crates.io-index"
+
apt list --installed
+apt list --all-versions <package-name>:列出指定软件包的所有版本。
+apt list --upgradable | grep <search-term>:列出包含搜索词的可更新软件包。
+apt list --verbose:显示更详细的输出信息。
+
+apt edit-sources
+
+sudo apt build-dep package #安装相关的编译环境,这真是个神技能,有了它,编译安装都变得索然无味了
+sudo apt --purge autoremove
+apt-get clean && sudo apt-get autoclean #清理无用的包
+
+aptitude
+apt-add-repository [options] repository #修改软件源命令 (software-properties-common)
+
apt search package #搜索包
+apt show package #获取包的相关信息,如说明、大小、版本等
+apt depends package #了解使用依赖
+apt rdepends package #查看该包被哪些包依赖
+apt-cache pkgnames #执行pkgnames子命令列出当前所有可用的软件包
+apt policy package #使用policy命令显示软件包的安装状态和版本信息。
+
+sudo apt install package #安装包
+sudo apt install package=version #安装指定版本的包
+sudo apt install package --reinstall #重新安装包
+sudo apt -f install #修复安装, "-f = --fix-missing"
+sudo apt remove package #删除包
+sudo apt purge package #删除包,包括删除配置文件等
+sudo apt autoremove #自动卸载所有未使用的软件包
+
+sudo apt source package #下载该包的源代码
+sudo apt update #更新apt软件源信息
+sudo apt upgrade #更新已安装的包
+sudo apt dist-upgrade #升级系统
+sudo apt dselect-upgrade #使用dselect升级
+sudo apt build-dep package #安装相关的编译环境
+sudo apt clean && sudo apt autoclean #清理无用的包
+sudo apt clean #清理已下载的软件包,实际上是清楚/var/cache/apt/archives目录中的软件包
+sudo apt autoclean #删除已经卸载的软件包备份
+sudo apt-get check #检查是否有损坏的依赖
+
sudo dpkg -i <package.deb> #安装包
+sudo dpkg -r <package.deb> #删除包
+sudo dpkg -p <package.deb> #彻底删除包(包括配置文件)
+dpkg -l #列出当前已安装的包
+
++本文介绍了 Chocolatey 的安装与使用过程。这篇文章不是为普通用户编写的,而是给需要统一开发环境的开发人员写的
+为什么要用 Chocolatey
+如果使用过 Linux 一定熟悉一行代码进行软件的搜索,安装,更新,卸载等所有操作。而 Windows 中的也有包管理器 Chocolatey 。虽然没有 Linux 里的包管理器那么强大,但让 Windows 安装软件方便了很多。
+
方法一:以管理员身份打开 cmd.exe (很重要),执行以下代码 +
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
+
方法二:以管理员身份打开 powershell.exe ,执行以下代码
+Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
+
在有的时候,因为电脑安装防火墙的原因,可能会导致前两个方法出现问题,但是方法三不存在此问题,最好用 powershell.exe 来执行 install.psl 脚本,可以看到安装的完整过程。
+Chocolatey 运行需要的环境: +- Windows 7+ / Windows Server 2003+ +- PowerShell v2+ +- .NET Framework 4+ (不用安装,安装脚本时会自动安装)
+choco install -y git
+choco install -y python
+choco install -y chromium
+cinst -y nodejs.install
+...
+
choco 和 cinst 都是安装命令, -y 避免对协议的二次确认,可以在官网 https://chocolatey.org/packages 查找确认自己要安装的包。
+choco upgrade git
choco uninstall git
choco install dev-package.config
+dev-package.config:
+<?xml version="1.0" encoding="utf-8"?>
+ <packages>
+ <package id="jdk8" />
+ <package id="googlechrome" version="71.0.3578.98" />
+ <package id="vscode" />
+ <package id="7zip" />
+ </packages>
+
文件名称随意,但是扩展名必须是 .config 。通过 .config 的方式,就可以配置一个团队统一的开发环境,软件和版本都可以统一。这样可以为开发带来很多好处,避免由于开发环境不一样引起的各种不同错误。 +通过传统方式安装软件,如果配置了环境变量,例如 JAVA_HOME , PATH 等等,都需要重启命令行工具,甚至要等一会才能生效。 Chocolatey 提供了一个 refreshenv 命令,可以快速生效环境变量。
+卸载 Chocolatey 只需要删除它安装的文件夹,并删除对应的环境变量即可。对于使用 Chocolatey 安装的其它软件,如果也需要卸载的话,需要先手动卸载。
+Chocolatey 更注重的是整个团队的软件配置统一,统一用某一个软件,统一用某一个版本,统一安装配置(包括安装路径)。在实际开发中,太多次因为安装路径引起问题,例如路径里有空格或中文等等。最好就用默认安装路径。
+ + + + + + + + +由于 Yum 中许多长期存在的问题仍未得到解决,因此 Yum 包管理器已被 DNF 包管理器取代。这些问题包括性能差、内存占用过多、依赖解析速度变慢等。
+DNF 是一款 Linux 软件包管理工具,用于管理 RPM 软件包。 DNF 可以查询软件包信息,从指定软件库获取软件包,自动处理依赖关系以安装或卸载软件包,以及更新系统到最新可用版本。
+Linuxbrew(Mac OS 的 Homebrew 分支,支持mac和linux,用法完全相同)
+详情页: https://ostechnix.com/linuxbrew-common-package-manager-linux-mac-os-x/
+搜索可用的软件包: https://sitemap.filecroco.com/a/1.html
+在 Linux 上安装和使用 Homebrew 包管理器 | Linux 中国 - 知乎 (zhihu.com)
+ + + + + + + + +++scoop 必要组件: 7zip git innounp lessmsi dark sudo aria2
+main : https://github.com/ScoopInstaller/Scoop
+
# 设置自定义安装路径:D:\Software\Scoop
+$env:SCOOP='D:\Software\Scoop';[environment]::setEnvironmentVariable('SCOOP',$env:SCOOP,'User')
+
+# 允许执行本地脚本
+set-executionpolicy remotesigned -scope currentuser
+
+# 从 github 下载并安装 scoop
+iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
+
scoop config SCOOP_REPO <URL>
软件仓库 bucket 源:软件源使用 git 版本管理,因此可以使用修改远程仓库的地址修改源地址加快速度。
+cd $env:SCOOP\buckets\Main
+git remote set-url origin <URL>
+
+cd $env:SCOOP\buckets\Extras
+git remote set-url origin <URL>
+
cd $env:SCOOP\buckets\Main 这是一个 git 管理的文件夹
+ git remote set-url origin https://hub.fastgit.org/ScoopInstaller/Main
+
aria2-enabled (默认值: true)
+aria2-retry-wait (默认值: 2)
+aria2-split (默认值: 5)
+aria2-max-connection-per-server (默认值: 5)
+aria2-min-split-size (默认值: 5M)
+
#scoop bucket remove main
+scoop bucket add main 'https://github.com/ScoopInstaller/Main'
+scoop bucket add extras 'https://github.com/ScoopInstaller/scoop-extras'
+scoop bucket add versions 'https://github.com/ScoopInstaller/Versions'
+scoop bucket add jetbrains 'https://github.com/Ash258/Scoop-JetBrains'
+scoop bucket add java 'https://github.com/ScoopInstaller/Java'
+scoop bucket add dorado https://github.com/chawyehsu/dorado
+scoop bucket add scoopet https://github.com/ivaquero/scoopet
+
scoop update
scoop export >> xxx.txt
scoop bucket known
scoop bucket help
scoop bucket add xxxbucket
scoop bucket rm xxx 仓库
常用命令说明
+alias Manage scoop aliases # 管理指令的替身
+bucket Manage Scoop buckets # 管理软件仓库
+cache Show or clear the download cache # 查看与管理缓存
+checkup Check for potential problems # 做个体检
+cleanup Cleanup apps by removing old versions # 清理缓存与旧版本软件包
+config Get or set configuration values # 配置 Scoop
+create Create a custom app manifest # 创建自定义软件包
+depends List dependencies for an app # 查看依赖
+export Exports (an importable) list of installed apps # 导出软件包列表
+help Show help for a command # 显示帮助指令
+hold Hold an app to disable updates # 禁止软件包更新
+home Opens the app homepage # 打开软件包主页
+info Display information about an app # 显示软件包信息
+install Install apps # 安装软件包的指令
+list List installed apps # 列出所有已安装软件包
+prefix Returns the path to the specified app # 查看软件包路径
+reset Reset an app to resolve conflicts # 恢复软件包版本
+search Search available apps # 搜索软件包
+status Show status and check for new app versions # 查看软件包更新状态
+unhold Unhold an app to enable updates # 启动软件包更新
+uninstall Uninstall an app # 卸载软件包的指令
+update Update apps, or Scoop itself # 更新软件包
+virustotal Look for app hash on virustotal.com # 查看哈希值
+which Locate a shim/executable (similar to 'which' on Linux) # 查看可执行程序路径
+
scoop uninstall scoop
:这将卸载 Scoop 和所有与 Scoop 一起安装的程序!
The scoop 配置文件保存在 ~/.config/scoop/config.json
+buckets 源配置文件保存在 SCOOP\apps\scoop\current\buckets.json
{
+ "main": "https://github.com/ScoopInstaller/Main",
+ "extras": "https://github.com/ScoopInstaller/Extras"
+}
+
链接: https://blog.csdn.net/weixin_39986178/article/details/110900876
+相比于 Chocolatey , Scoop 则更专注于开源的命令行工具,使用 Scoop 安装的应用程序通常称为"便携式"应用程序,需要的权限更少,对系统产生的副作用也更少,所以我这里选择了使用 Scoop。 +注意:对于像 VirtualBox、Docker for Windows ,输入法等这些需要高权限的软件还是通过在官网下载安装包进行安装。
+ + + + + + + + +WinGet ( Windows 程序包管理器: Windows Package Manager )是微软为 win10 开发的一款开源的软件包管理器,于 2020 年 5 月的 Microsoft Build 开发者大会上首宣。
+前提:Windows 10 1709 及以上版本 +当前 WinGet 支持的安装程序类型尚不多,除了 EXE、 MSIX 、 MSI 三种之外,还能够在自定义配置后下载部分微软应用商店的程序。
+你可以在 Github Release 下载 .appxbundle 格式的文件,双击打开并运行。
+如果出现「此电脑不支持打开该类型文件」的提示,则可在 Win + I
进入设置 -> 更新和安全 -> 开发者选项 -> 打开开发人员模式。
输入 winget 可以查看简略帮助文档;输入 winget -v 查看版本信息
+显示简略帮助文档: winget -?(-?可选);查看特定命令的详细帮助文档: winget [] -?,如 winget install -?显示软件详细信息: winget show 搜索软件: winget search 安装软件:winget install
+是的,如你所见, WinGet 并没有自动开启卸载、升级等功能,这也是其在发布之后很长时间不温不火的重要原因。
+但是不要着急,截止到 2021/03/25 发布的最新预览版 v0.2.10771 , WinGet 实验性功能(需要用户自启)的数量已经增加到了八个,其中就包括 uninstall 、 upgrade 、 list 等重要功能,以及支持安装 Microsoft Store 上的应用程序!
+如果想要开启实验功能,可以在终端输入 winget settiings,打开 WinGet 配置文件 settings.json 增加以下内容:
+"experimentalFeatures": { "uninstall": true, "upgrade": true, "list": true, "experimentalMSStore": true},
+如果想要更改 winget 显示的进度条视觉效果,可以在 setting.json 里增加: +"visual": { "progressBar": "accent"},# 三种样式可选:accent(默认值)、 retro、 rainbow
+winget list > winget.txt 同样支持一键导出软件列表,方便备份和换机重装。
+实验功能开启"experimentalMSStore": true之后,winget 可以下载 MStore 的软件了(不过目前支持的并不多)。
+winget source list 查看软件源列表,发现除了 winget 源之外,MSStore 源已经添加上了。部分商店内软件可以正常下载安装了。
+winget 可以卸载 winget list 显示出的所有软件。包括电脑上的大多数软件,如 Windows 系统自带的、手动安装的、 Chocolatey 安装的部分等。唯一不足的是,卸载时会被弹出的卸载窗口打断,降低了自动化的一致性。
+winget 可以卸载多种类型的软件程序
+ + + + + + + + +openSUSE 是一个独立的 Linux 发行版分支,使用 RPM 作为分发的软件包格式,采用 zypper 作为包管理器,同时兼容多种计算机硬件。 openSUSE 有两个正式的发行版: Leap 和 Tumbleweed 。
+OpenSUSE 是一个一直被低估的多功能 Linux 操作系统
+ + + + + + + + +Manjaro 换源
+sudo pacman-mirrors -i -c China -m rank
+sudo pacman -Syy
+
命令 解释
+pacman -Syu 对整个系统进行更新(常用)
+pacman -Syy 强制更新
+pacman -Syudd 使用 -dd跳过所有检测
+
命令 解释
+pacman -Ss keyword 在仓库中搜索含关键字的包(常用)pacman -Ss '^fcitx-'
+pacman -Qs keyword 搜索已安装的包(常用)pacman -Qs '^fcitx-'
+pacman -Qi package_name 查询本地安装包的详细信息
+pacman -Ql package_name 列出该包的文件
+pacman -Fs keyword 按文件名查找软件库
+pacman -Si package_name 显示远程软件包的详尽的信息
+pacman -Qii package_name 使用两个 -i 将同时显示备份文件和修改状态
+pacman -Ql package_name 要获取已安装软件包所包含文件的列表
+pacman -Fl package_name 查询远程库中软件包包含的文件
+pacman -Qk package_name 检查软件包安装的文件是否都存在
+pacman -Fo /path/to/file_name 查询文件属于远程数据库中的哪个软件包
+pacman -Qdt 要罗列所有不再作为依赖的软件包(孤立 orphans )
+pacman -Qet 要罗列所有明确安装而且不被其它包依赖的软件包
+pactree package_name 要显示软件包的依赖树
+whoneeds package_name 检查一个安装的软件包被那些包依赖pkgtoolsAUR中的whoneeds
+pactree -r package_name 检查一个安装的软件包被那些包依赖
+
命令 解释
+pacman -S package_name 执行 pacman -S firefox 将安装 Firefox(常用)
+pacman -Sy package_name 将在同步包数据库后再执行安装。
+pacman -Sv package_name 在显示一些操作信息后执行安装。
+pacman -U local_package_name 安装本地包,其扩展名为pkg.tar.gz或pkg.tar.xz
+pacman -U url 安装一个远程包(不在 pacman 配置的源里面)
+
命令 解释
+pacman -R package_name 该命令将只删除包,保留其全部已经安装的依赖关系
+pacman -Rs package_name 在删除包的同时,删除其所有没有被其他已安装软件包使用的依赖关系(常用)
+pacman -Rsc package_name 在删除包的同时,删除所有依赖这个软件包的程序
+pacman -Rd package_name 在删除包时不检查依赖
+
pacman -Sw package_name 只下载包,不安装。
+pacman -Sc 清理未安装的包文件(常用)包文件位于 /var/cache/pacman/pkg/ 目录
+pacman -Scc 清理所有的缓存文件(常用)
+
大多数 Linux 发行版都是来自国外,自然官方仓库地址也在国外,所以一般情况下安装完 Linux 发行版之后做的第一件事就是切换源为国内的源。源的切换操作,大部分发行版也都支持 GUI 切换,这里只列出在命令行下如何擦操作
+sudo pacman-mirrors --country China
sudo pacman-mirrors --interactive --default
sudo pacman -Syyu# 软件源更新完成之后进行系统软件更新操作
sudo pacman-mirrors -l
参考翻译自: https://wiki.manjaro.org/index.php?title=Use_pacman-mirrors_to_Set_the_Fastest_Download_Server
+sudo pacman -Syyu
sudo pacman -Ss [software package name]
sudo pacman -Qs [software package name]
+sudo pacman -Qi [software package name]
# 附带详细信息
+sudo pacman -Qii [software package name]
# 附带更加详细的包信息
+sudo pacman -Ql
# 列出所有安装的软件包
sudo pactree [software package name]
sudo pacman -Qdt
sudo pacman -Rs $(pacman -Qdtq)
sudo pacman -Syu [software package name]
# 从软件仓库安装
+yay -S [software package name]
# Packages from the AUR
+sudo pacman -U [/package_path/][software package name.pkg.tar.xz]
# 从本地安装
pacman -U http://www.examplepackage/repo/examplepkg.tar.xz
# 从网络安装【非官方仓库】
sudo pacman -R [software package name]
+sudo pacman -Rs [software package name]
# 同时删除依赖
+sudo pacman -Rns [software package name]
# 删除软件及其依赖,还有pacman生成的配置文件,即更彻底的删除
sudo pacman -Sc
+sudo pacman -Scc
# 更彻底的清理
关于 pacman 常用就这些了,更多请使用 man pacman OR pacman -h 去查看 +参考翻译自: https://wiki.manjaro.org/index.php?title=Pacman_Overview +From < https://csdnimg.cn/release/phoenix/template/new_img/articleReadEyes.png>
+ + + + + + + + +GitBucket +是一个非常好的免费开源,易部署的开源Git平台,同时拥有诸多优势,虽然也有弊端。
+优点
+完全开源,没有任何限制;
+运行在JVM平台上,非常容易部署;
+类似于GitHub的界面,操作容易;
+丰富的插件,使得扩展非常容易;
+提供了大量兼容GitHub的API;
+缺点
+有点残废的权限管理(权限没有依照公开,私有库区分);
+开发语言为Scala,对于非Scala用户自己写插件有一定门槛;
+由于作者暂未完成平台升级,暂时无法部署在除Tomcat之外的Servlet容器。
+下载 Release + 里面的war到你的服务器;
+java -jar gitbucket.war
启动。(笔者用的是JDK17);
(可选)将启动端口反向代理到子域名。
+ChatGPT是一种基于自然语言处理技术的人工智能聊天机器人,使用GPT(Generative Pre-trained Transformer)技术生成人类语言响应。
+功能:
+配置方法:
+FlyDav 是一个轻量级的开源 webdav 服务器
+优点
+缺点
+最简部署:
+./flydav -H 0.0.0.0
来启动服务器。然后你要输入默认用户 flydav
的密码。http://YOUR_IP:7086/webdav
。完整部署可参阅文档。
+ + + + + + + + +本文介绍使用new bing和chatgpt搞科研的具体方法,视频教程可参看bilibili使用说明
+关于如何正确使用new bing,如何不转到国内特供版。不是本节的内容
+new bing(消化以及输出) --> chatgpt(组织语言)--> 划水学生(复制粘贴)
+因为:new bing被阉割了,输出和输入文字都比chatgpt限制了太多。但是new bing 可以联网,可以标注文献来源。
+使用edge甄别文献,但不去阅读。因为翻译很慢。(看的话可以结合wps)
+阅读左边的论文,告诉我他讲了什么内容。
+阅读左边的论文,细致地告诉我他每一小节都讲了什么内容。
+我希望你阅读英文文献 :【A Survey of Surface Reconstruction from Point Clouds】,分别介绍XXXX的【(基本原理)、分类、效果、发展趋势、(优点和缺点、应用范围)】。 最后对二者比较,并通过表格,最后证明XXXX结论。我希望你输出的文字为中文,总体内容要超过500字。
+如果不用以上ai写的文字,纯粹自己写。
+写出来效果可能不太行,让ai利用书面语言润色。这里可以上网搜一些相关的prompt
+请用写论文的中文书面语改写或者丰富以下段落,让其更有逻辑,重点突出:
+请用写论文的中文书面语丰富以下段落,让其用词更准确,内容更丰富:
+不要陷入无意义的ai玩耍
+不要登录cn的bing,不然之后都会记住。只能重新清除cookie。
+MinIO +是一个提供开源部署方案的多级云对象存储(S3)方案。
+优点
+提供许可证为AGPL v3的开源许可证的版本,无任何容量,带宽限制;
+兼容现有AWS S3的SDK,API等;
+非常完善的文档,活跃的社区;
+部署相对简单;
+缺点
+没有任何中文文档;
+非付费版软件更新周期较短,需要自行更新;
+官方提供了非常详尽,多种极为容易的安装方式,这里不再赘述。
+一定要到官方的文档去确认你是不是有参数没有设定,是不是使用了独立的卷(最少是独立的文件夹)。
+ + + + + + + + +Overleaf 是一个在线 \(\LaTeX\) 渲染网站。 \(\LaTeX\) 环境的配置比较麻烦(尤其是在 Windows 环境下),对于新手也不够友好,而 overleaf 是一个很好的替代。只需要选择一个好看的模版,写 10 页以内的作业或者小论文将会十分方便,同时 Overleaf 也提供了基本的团队协作功能,可以通过链接或邀请的方式实现多人共同编辑。 Overleaf 免费版有最大编译时长和一些功能的限制,在完成一些比较复杂的项目时,可以考虑付费获得更多的功能。
+\(\LaTeX\) 是一种「非所见即所得」的排版系统,用户需要输入特定的代码,保存在后缀为 .tex 的文件中,通过编译得到所需的 pdf 文件。 \(\LaTeX\) 优秀的大型文档排版能力和数学公式渲染能力是其能够广泛应用的原因之一。系统学习 \(\LaTeX\) 需要一定的时间,详细了解可以参阅托管在 CTAN 的中译版介绍 lshort-zh-cn。
+特点:
+本文为你推荐适用于 Android Studio 的插件,能够极大的改善你的开发体验。
+该插件对图标进行了优化以改善你的界面美观程度。
+适用于 JetBrains IDE 的 Material 主题,拥有适用于白天和黑夜的多个主题,让界面更加美观。
+JSON作为轻量级资料交换格式。在开发中经常被使用,其中一个需求就是将 Json 转换为对应的 Bean 对象。下面主要推荐两个插件:
+能将Json 转换为对应的 Java Bean
+JSON To Kotlin Class (JsonToKotlinClass)
+能将Json 转换为对应的 Kotlin Bean
+Translation 插件极大的方便了英语基础不好的开发者进行开发。其具有以下特性:
+多翻译引擎
+多语言互译
+本文希望抛砖引玉,鼓励大家提出更多方便的浏览器插件。
+官网: https://www.tampermonkey.net/
+很方便的脚本管理器,可以安装一些扩展商店里没有的小脚本。
+增强浏览器阅读体验,提供淡化内容无关元素以增加专注的聚焦模式和完全纯净的阅读模式;可以导出网页为 markdown 等多种格式到本地,或授权后导入 notion 、onenote 等笔记应用,方便存档和稍后阅读。官方插件中心还有许多相关增强,但默认模式体验也相当舒适。
+官网: https://www.zotero.org/download/connectors
+从网页上直接保存论文至 Zotero ,支持选择保存分类。
+官网: https://github.com/polywock/globalSpeed
+调节网页视频播放速度,使用简单。
+官网: https://www.languagereactor.com/
+为Youtube视频提供机翻双语字幕,并且支持导出。
+官网: https://github.com/philc/vimium
+Vimium 受到 Vim 编辑器的启发,让你能够抛弃鼠标,完全使用键盘完成浏览器的导航、页面跳转、页面搜索等操作。
+ + + + + + + + +本文为你推荐代码补全工具tabnine的介绍同时将和copilot的区别写出,copilot的安装在评论区后续补充。
+下载链接:https://www.tabnine.com/install/
+在这个下载页面中可以选择自己所使用的代码编辑器,对于 VSCode 用户来讲,我们可以直接在插件搜索中搜索tabnine,然后安装即可。
+TabNine 是一个基于机器学习的代码自动补全工具,它可以在多种编辑器和 IDE 中使用,包括但不限于 VS Code、Sublime Text、PyCharm、Vim、Emacs 等等。与传统的代码自动补全工具不同,TabNine 不仅可以根据已有的代码段和语法规则进行补全,而且还可以通过学习大量的代码库和语言语法,自动生成全新的代码,大大提高编码效率和准确性。
+TabNine 的优点包括:
+TabNine 和 Copilot 都是基于机器学习的代码自动补全工具,它们都可以根据上下文和语法规则来生成代码补全选项,提高编码效率和准确性。但是它们之间也有一些不同之处。
+总的来说,TabNine 和 Copilot 都是非常有用的代码自动补全工具,具有各自的优点和适用场景,用户可以根据自己的需求选择合适的工具。
+ 它是个动图捏大家可以体验下嘿嘿
\u5728\u65f6\u95f4\u7684\u957f\u6cb3\u4e2d\uff0c\u6211\u4eec\u53d1\u73b0\uff0c\u91cd\u590d\u7e41\u7410\u7684\u5de5\u4f5c\u5e26\u7ed9\u5927\u5bb6\u7684\u53ea\u6709\u65f6\u95f4\u548c\u7cbe\u529b\u7684\u6d88\u8017\u3002\u7684\u786e\u5728\u6211\u4eec\u7684\u4e0d\u65ad\u601d\u8003\u548c\u8fdb\u6b65\u4e2d\uff0c\u4e00\u4e2a\u4e2a\u4f18\u79c0\u7684\u5de5\u5177\u51fa\u73b0\u5728\u6211\u4eec\u7684\u773c\u524d\u3002\u4f46\u968f\u4e4b\u800c\u6765\u7684\u662f\uff0c\u5de5\u5177\u79cd\u7c7b\u548c\u6570\u91cf\u7684\u98de\u901f\u53d1\u5c55\uff0c\u6211\u4eec\u96be\u4ee5\u6839\u636e\u5177\u4f53\u9700\u6c42\uff0c\u5feb\u901f\uff0c\u7b80\u6613\u5730\u4e0a\u624b\u4e00\u6b3e\u5de5\u5177\u3002\u76f8\u53cd\uff0c\u201c\u767e\u5ea6\u201d\uff0c\u201c\u8c37\u6b4c\u201d\u6210\u4e3a\u4e86\u6211\u4eec\u8001\u751f\u5e38\u8c08\u7684\u8bdd\u8bed\u3002
\u5728\u4e00\u4e2a\u4e2a\u94fe\u63a5\u548c\u56de\u7b54\u4e2d\u4e0d\u65ad\u5c1d\u8bd5\u3002\u6709\u7684\u662f\u751f\u6da9\u7684\u82f1\u6587\u6587\u6863\uff0c\u6709\u7684\u662f\u5be5\u5be5\u6570\u8bed\uff0c\u8fd9\u65e0\u7591\u589e\u52a0\u4e86\u6211\u4eec\u7684\u4f7f\u7528\u6210\u672c\u3002\u6240\u4ee5 ToolDiy \u7684\u521d\u8877\u5c31\u662f\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u60f3\u501f\u52a9\u5f00\u6e90\u793e\u533a\u7684\u73af\u5883\uff0c\u4e0d\u65ad\u6536\u96c6\u548c\u63d0\u70bc\u5404\u884c\u5404\u4e1a\u7684\u5de5\u5177(\u6bd5\u7adf\u9002\u5408\u4f60\u7684\u624d\u662f\u6700\u597d\u7684)\u3002 ToolDiy \u5c06\u4ece\u5ba2\u89c2\u7684\u89d2\u5ea6\uff0c\u4ee5\u7528\u6237\u7684\u89c6\u89d2\u51fa\u53d1\uff0c\u63a8\u8350\u5206\u6790\u5404\u7c7b\u5de5\u5177\uff0c\u800c\u4e0d\u4ec5\u4ec5\u5c40\u9650\u4e8e\u56fa\u5b9a\u7684\u65b9\u5411\u3002
\u5f88\u591a\u65f6\u5019\u6211\u4eec\u5728\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u4f1a\u9047\u5230\u5f88\u591a\u5de5\u5177\u7684\u73af\u5883\u914d\u7f6e\u95ee\u9898\uff0c\u6211\u4eec\u4e0d\u5f97\u4e0d\u82b1\u8d39\u5927\u91cf\u65f6\u95f4\u53bb\u601d\u8003\u548c\u5b66\u4e60\u4f7f\u7528\uff0c\u5f88\u591a\u65f6\u5019\u8fd9\u4e9b\u5de5\u4f5c\u672c\u8eab\u5c31\u53ea\u80fd\u591f\u953b\u70bc\u4f60\u5bf9\u914d\u7f6e\u73af\u5883\u7684\u8010\u5fc3\uff0c\u6211\u4eec\u60f3\u8ba9\u5927\u5bb6\u4e13\u6ce8\u5de5\u5177\u672c\u8eab\uff0c\u4e8e\u662f\u6211\u4eec\u60f3\u7ef4\u62a4\u4e00\u4e9b\u5de5\u5177\u914d\u7f6e\u548c\u6784\u5efa\u7684\u81ea\u52a8\u5316\u811a\u672c\u6216\u8005\u662fdocker\u73af\u5883\u65b9\u4fbf\u4f7f\u7528\u8005\uff0c\u5f53\u7136\u6211\u4eec\u5728\u4e66\u5199\u65f6\u5019\u7559\u4e0b\u7684\u6784\u5efa\u811a\u672c\u4e5f\u53ef\u4ee5\u63d0\u4f9b\u7ed9\u4f7f\u7528\u8005\u5b66\u4e60\u3002\u4e00\u4e2a\u80fd\u591f\u5f00\u7bb1\u5373\u7528\u7684\u5de5\u5177\u60f3\u60f3\u90fd\u4ee4\u4eba\u5174\u594b\uff0c\u8ba9\u6211\u4eec\u4e00\u8d77\u5efa\u8bbe\u4ed6\u5427\uff01
\u53ea\u8981\u80fd\u591f\u7ed9\u5927\u5bb6\u5e26\u6765\u5e2e\u52a9\u548c\u66f4\u597d\u7684\u4f53\u9a8c\uff0c\u8fd9\u4fbf\u662f ToolDiy \u5b58\u5728\u7684\u610f\u4e49\u3002
\u63a5\u4e0b\u6765\uff0c\u8ba9\u6211\u4eec\u4e00\u8d77\u4f7f\u7528\u5b83\u5427\uff01
"},{"location":"#_2","title":"\u8d21\u732e","text":"\u672c\u9879\u76ee\u7684\u521d\u8877\u662f\u63d0\u4f9b\u7ef4\u62a4\u4e00\u4e2a\u5de5\u5177\u8bf4\u660e\u7684\u4ed3\u5e93\u548c\u7ef4\u57fa\uff0c\u672c\u8eab\u5c31\u662f\u4e00\u4e2a\u964d\u4f4e\u4f7f\u7528\u95e8\u69db\u65b9\u4fbf\u5927\u5bb6\u7684\u9879\u76ee\uff0c\u6211\u4eec\u7684\u539f\u5219\u662f\u4e0d\u9650\u4e8e\u4efb\u4f55\u7279\u5b9a\u7684\u5b66\u79d1\u548c\u9886\u57df\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u6240\u6709\u81ea\u5df1\u8ba4\u4e3a\u6709\u7528\u7684\u5de5\u5177\u8fdb\u884c\u5206\u4eab\uff08\u6ce8\u610f\u505a\u597d\u5165\u95e8\u4ecb\u7ecd\uff0c\u7b26\u5408\u9879\u76ee\u521d\u8877\uff09\uff0c\u5728\u5c0a\u91cd\u5de5\u5177\u751f\u4ea7\u8005\u52b3\u52a8\u7684\u524d\u63d0\u4e0b\u90fd\u53ef\u4ee5\u5206\u4eab\uff0c\u56e0\u6b64\u6211\u4eec\u4e0d\u5141\u8bb8\u5927\u5bb6\u5206\u4eab\u76d7\u7248\u548c\u7834\u89e3\u5de5\u5177\uff0c\u5728\u89c4\u8303\u7684\u524d\u63d0\u4e0b\u6211\u4eec\u6b22\u8fce\u5404\u79cd\u5404\u6837\u7684 PR ,\u6709\u4efb\u4f55\u9664\u5f00\u4e0a\u8bc9\u7684\u7591\u60d1\u90fd\u53ef\u4ee5\u63d0\u51fa issue \u6216\u8005\u8054\u7cfb\u4ed3\u5e93\u7ba1\u7406\uff0c\u5728\u6d89\u53ca\u4ed8\u8d39\u5185\u5bb9\u7684\u5de5\u5177\u65f6\u6211\u4eec\u9f13\u52b1\u5206\u4eab\u4e5f\u5e0c\u671b\u5927\u5bb6\u505a\u597d\u4fe1\u606f\u516c\u5f00\u6807\u6ce8\u4ed6\u7684\u4ef7\u683c\uff0c\u672c\u9879\u76ee\u4e0d\u4f1a\u7ed9\u4efb\u4f55\u5de5\u5177\u5e7f\u544a\uff0c\u4e0d\u4f1a\u6709\u7279\u6b8a\u4f4d\u7f6e\u7b49\u5e7f\u544a\u884c\u4e3a\u4e00\u5207\u4ee5\u63d0\u4ea4\u65f6\u95f4\u6392\u7248\u3002\u6211\u4eec\u540c\u6837\u6b22\u8fce\u5404\u79cd\u6539\u5584\u672c\u9879\u76ee\u9605\u8bfb\u4f53\u9a8c\u7684 PR \u8bf7\u6c42\uff08\u5305\u62ec\u4f46\u4e0d\u5c40\u9650\u4e8e\u6dfb\u52a0\u4e00\u4e2a\u6362\u884c\u589e\u52a0\u9605\u8bfb\u4f53\u9a8c\uff0c\u589e\u52a0\u9879\u76ee logo \uff0c\u4e2d\u82f1\u6587\u6821\u5bf9\u7b49\uff09\uff0c_(:\u0437)\u2220)_\u672c\u9879\u76ee\u8fd8\u5904\u4e8e\u521d\u671f\u9636\u6bb5\uff0c\u975e\u5e38\u9700\u8981\u5404\u4f4d\u5927\u4f6c\u7684\u5b8c\u5584\u548c\u7ea0\u9519\u3002
\u5982\u679c\u4f60\u6709\u5df2\u7ecf\u5199\u597d\u7684\u6587\u7ae0\u60f3\u8981\u6dfb\u52a0\u5230\u8fd9\u91cc\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u4e0b\u5217\u65b9\u5f0f\uff1a
.en.md
\u7ed3\u5c3e\uff09\uff0c\u6700\u540e\u63d0\u51fa PR \u4ee5\u4fbf\u8fdb\u884c\u5408\u5e76\u3002\u5982\u679c\u4f60\u4e0d\u77e5\u9053\u4ece\u4f55\u5904\u4e0b\u7b14\uff0c\u53ef\u4ee5\u9996\u5148\u53c2\u8003\u5199\u4f5c\u6a21\u677f\u3002
Note
\u70b9\u51fb\u94fe\u63a5\u52a0\u5165\u7fa4\u804a tooldiy
"},{"location":"#_4","title":"\u7248\u6743\u58f0\u660e","text":"\u672c\u4f5c\u54c1\u91c7\u7528\u77e5\u8bc6\u5171\u4eab\u7f72\u540d-\u76f8\u540c\u65b9\u5f0f\u5171\u4eab 4.0 \u56fd\u9645\u8bb8\u53ef\u534f\u8bae\u8fdb\u884c\u8bb8\u53ef\u3002
"},{"location":"firmware/RustSBI/","title":"RustSBI","text":"\u5b98\u7f51\uff1ahttps://github.com/rustsbi
RustSBI\u662fRISC-V\u4e0b\u53ef\u7528\u7684SBI\u56fa\u4ef6\u5b9e\u73b0\uff0c\u5b83\u62e5\u6709\u201c\u72ec\u7acb\u5305\u201d\u548c\u201c\u539f\u578b\u8bbe\u8ba1\u7cfb\u7edf\u201d\u3002 RISC-V SBI\u662fRISC-V\u4e0b\u4e0d\u53ef\u6216\u7f3a\u7684\u56fa\u4ef6\u63a5\u53e3\uff0c\u5b83\u63d0\u4f9b\u4e86\u8db3\u4ee5\u64cd\u4f5c\u7cfb\u7edf\u4f7f\u7528\u7684\u57fa\u672c\u529f\u80fd\uff1b \u66f4\u591a\u7684\u529f\u80fd\u6027\u63a5\u53e3\u5e94\u5f53\u901a\u8fc7\u5176\u5b83\u7684\u5de5\u4e1a\u6807\u51c6\u5b9e\u73b0\u3002
"},{"location":"firmware/RustSBI/#_1","title":"\u72ec\u7acb\u5305","text":"\u72ec\u7acb\u5305\u662f\u5206\u522b\u5b9e\u73b0RustSBI\u7684\u9879\u76ee\uff0c\u6bcf\u4e2a\u4e0d\u540c\u7684\u4e3b\u677f\u90fd\u62e5\u6709\u4e0d\u540c\u7684\u4ed3\u5e93\u548c\u89e3\u51b3\u65b9\u6848\u3002 \u8fd9\u4e9b\u65b9\u6848\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\uff1a
\u8fd9\u4e9b\u89e3\u51b3\u65b9\u6848\u7684\u6587\u6863\u548c\u4e0b\u8f7d\u94fe\u63a5\u90fd\u5728\u5404\u81ea\u7684\u4ed3\u5e93\u4e2d\u3002
"},{"location":"firmware/RustSBI/#_2","title":"\u539f\u578b\u8bbe\u8ba1\u7cfb\u7edf","text":"RustSBI\u539f\u578b\u8bbe\u8ba1\u7cfb\u7edf\u63d0\u4f9b\u4e86\u4eceSBI\u5230UEFI\u3001LinuxBoot\u7684\u5b8c\u6574\u89e3\u51b3\u65b9\u6848\uff0c \u5b83\u62e5\u6709\u4e00\u4e2a\u56fe\u5f62\u5316\u7684\u7f16\u8bd1\u754c\u9762\uff0c\u80fd\u5728\u4e0d\u540c\u7684\u4e3b\u677f\u4e0a\u8fd0\u884c\u3002
\u4e3a\u4e86\u7f16\u8bd1\u539f\u578b\u8bbe\u8ba1\u7cfb\u7edf\uff0c\u590d\u5236\u4ed3\u5e93\u540e\u4f7f\u7528\u4ee5\u4e0b\u7684\u547d\u4ee4\uff1a
cargo termconfig\n
\u5728\u56fe\u5f62\u754c\u9762\u914d\u7f6e\u5b8c\u6bd5\u540e\uff0c\u914d\u7f6e\u6587\u4ef6\u5c06\u4fdd\u5b58\u5230Xtask.toml
\u6587\u4ef6\u4e2d\uff0c\u4ee5\u4f9b\u7f16\u8bd1\u8fc7\u7a0b\u9605\u8bfb\u3002
\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u53ef\u4ee5\u9009\u62e9\u4ec5\u7f16\u8bd1\u6216\u8005\u7f16\u8bd1\u5e76\u70e7\u5f55\u3002\u4f7f\u7528\u4ee5\u4e0b\u7684\u547d\u4ee4\u7f16\u8bd1\uff1a
cargo make\n
\u6216\u8005\uff0c\u4f7f\u7528\u4ee5\u4e0b\u7684\u547d\u4ee4\u76f4\u63a5\u7f16\u8bd1\u548c\u70e7\u5f55\u5230\u76ee\u6807\u4e3b\u677f\uff1a
cargo flash\n
RustSBI\u539f\u578b\u8bbe\u8ba1\u7cfb\u7edf\u7684\u94fe\u63a5\uff1ahttps://github.com/rustsbi/standalone
"},{"location":"frame/wasm-bpf/","title":"\ud83d\udce6 Wasm-bpf: \u4e3a\u5728 WebAssembly \u4e0a\u8fd0\u884c eBPF \u5e94\u7528\u800c\u8bbe\u8ba1\u7684\u5e93\u3001\u5de5\u5177\u94fe\u548c\u8fd0\u884c\u65f6","text":"\u4e2d\u6587\u6587\u6863 Gitee Github
Wasm-bpf \u662f\u4e00\u4e2a\u7531 CO-RE(\u4e00\u6b21\u7f16\u5199 \u2013 \u5230\u5904\u8fd0\u884c) libbpf libbpf \u9a71\u52a8\u7684 WebAssembly eBPF \u5e93\u3001\u5de5\u5177\u94fe\u548c\u8fd0\u884c\u65f6\u3002\u5b83\u53ef\u4ee5\u5e2e\u52a9\u60a8\u51e0\u4e4e\u4e0d\u7528\u4fee\u6539\u5730\u6784\u5efa\u51e0\u4e4e\u6240\u6709\u7684 eBPF \u7a0b\u5e8f\u6216\u7528\u4f8b\u5230 Wasm \u4e2d\uff0c\u5e76\u5728 Wasm \u6c99\u7bb1\u4e2d\u8de8\u5e73\u53f0\u8fd0\u884c\u3002
"},{"location":"frame/wasm-bpf/#_1","title":"\u7b80\u4ecb","text":"WebAssembly
\uff08\u7b80\u79f0Wasm\uff09\u662f\u4e00\u79cd\u53ef\u6267\u884c\u4ee3\u7801\u7684\u4fbf\u643a\u5f0f\u4e8c\u8fdb\u5236\u683c\u5f0f\u3002\u4ee3\u7801\u5728\u4e00\u4e2a\u5185\u5b58\u5b89\u5168\u7684\u6c99\u76d2\u73af\u5883\u4e2d\u4ee5\u63a5\u8fd1\u672c\u673a\u901f\u5ea6\u6267\u884c\uff0c\u5177\u6709\u660e\u786e\u5b9a\u4e49\u7684\u8d44\u6e90\u9650\u5236\u548c\u4e00\u4e2a API \uff0c\u7528\u4e8e\u4e0e\u5d4c\u5165\u5f0f\u4e3b\u673a\u73af\u5883\uff08\u4f8b\u5982\u4ee3\u7406\uff09\u8fdb\u884c\u901a\u4fe1\u3002
wasm-bpf
\u9879\u76ee\u7ed3\u5408\u4e86 Wasm \u548c eBPF \u6280\u672f\uff0c\u63d0\u9ad8\u4e86eBPF\u5e94\u7528\u7a0b\u5e8f\u7684\u6027\u80fd\u548c\u53ef\u7f16\u7a0b\u6027\u3002\u5b83\u63d0\u4f9b\u4e86\u4e00\u4e2a\u5e93\u548c\u5de5\u5177\u94fe\uff0c\u7528\u4e8e\u5c06\u591a\u79cd\u8bed\u8a00\u7f16\u5199\u7684 eBPF \u5e94\u7528\u7f16\u8bd1\u6210 Wasm\uff0c\u5e76\u63d0\u4f9b\u8fd0\u884c\u65f6\u73af\u5883\u4ee5\u5728\u5b89\u5168\u7684\u6c99\u7bb1\u4e2d\u8fd0\u884c\u8fd9\u4e9b\u7a0b\u5e8f\u3002
\u4f7f\u7528 wasm-bpf\uff0c\u7528\u6237\u53ef\u4ee5\u52a8\u6001\u52a0\u8f7d\u548c\u5b89\u5168\u5730\u6267\u884c\u7528\u6237\u81ea\u5b9a\u4e49\u6216\u793e\u533a\u8d21\u732e\u7684 Wasm-eBPF \u4ee3\u7801\u4f5c\u4e3a\u63d2\u4ef6\uff0c\u4f8b\u5982\u5728\u4ed6\u4eec\u7684\u7f51\u7edc\u76f8\u5173\u8f6f\u4ef6\u4ea7\u54c1\uff0c\u6216\u53ef\u89c2\u6d4b\u6027\u5e73\u53f0\u4e2d\u3002\u8fd9\u5176\u4e2d eBPF \u4f7f\u5f97\u6570\u636e\u6536\u96c6\u9ad8\u6548\u53ef\u6269\u5c55\uff0c\u540c\u65f6 Wasm \u4e5f\u5141\u8bb8\u5bf9\u8fd9\u4e9b\u6570\u636e\u8fdb\u884c\u9ad8\u7ea7\u5904\u7406\u548c\u5206\u6790\u3002
\u6b64\u5916\uff0c\u5b83\u4f7f\u5f00\u53d1\u4eba\u5458\u80fd\u591f\u4f7f\u7528\u719f\u6089\u7684\u8bed\u8a00\uff0c\u5982 C/C ++\uff0cRust\uff0cGo \u548c\u5176\u4ed6 30 \u591a\u79cd\u80fd\u7f16\u8bd1\u5230 Wasm \u7684\u7f16\u7a0b\u8bed\u8a00\u7f16\u5199 eBPF \u7a0b\u5e8f\uff0c\u5e76\u8f7b\u677e\u5730\u5728\u4e0d\u540c\u7684Linux\u53d1\u884c\u7248\u4e2d\u90e8\u7f72\u5b83\u4eec\u3002\u6b64\u5916\uff0c\u5229\u7528 Wasm \u7684\u751f\u6001\u548c\u5de5\u5177\u94fe\uff0c\u4e91\u63d0\u4f9b\u5546\u53ef\u4ee5\u5229\u7528 wasm-bpf \u4e3a\u5176\u5ba2\u6237\u63d0\u4f9b\u5b89\u5168\u4e14\u9ad8\u6027\u80fd\u7684\u73af\u5883\u6765\u5f00\u53d1\u548c\u90e8\u7f72 eBPF \u5e94\u7528\u7a0b\u5e8f\u3002
"},{"location":"frame/wasm-bpf/#_2","title":"\u529f\u80fd","text":"\u901a\u7528\u6027
: \u63d0\u4f9b\u4e86\u4ece eBPF \u5230 Wasm \u7684\u5927\u591a\u6570\u80fd\u529b\uff0c\u5305\u62ec\u4ece\u73af\u5f62\u7f13\u51b2\u533a
\u6216 perf \u7f13\u51b2\u533a
\u8fdb\u884c\u8f6e\u8be2\uff0c\u4f7f\u7528 maps
\u5728\u5185\u6838 eBPF \u548c\u7528\u6237\u7a7a\u95f4 Wasm \u4e4b\u95f4\u8fdb\u884c\u53cc\u5411\u901a\u4fe1\uff0c\u52a8\u6001\u52a0\u8f7d\u3001\u6302\u8f7d\u5230 hook \u6267\u884c\u7b49\u3002\u652f\u6301\u5927\u91cf\u7684 eBPF \u7a0b\u5e8f\u7c7b\u578b\u548c maps
\u7c7b\u578b\u3002\u9ad8\u6027\u80fd
: \u5bf9\u4e8e\u590d\u6742\u6570\u636e\u7c7b\u578b\u6ca1\u6709\u5e8f\u5217\u5316\u5f00\u9500\uff0c\u4f7f\u7528\u5171\u4eab\u5185\u5b58\u6765\u907f\u514d\u4e3b\u673a\u548c Wasm \u4e4b\u95f4\u7684\u62f7\u8d1d\u5f00\u9500\u3002\u6613\u4e8e\u4f7f\u7528
: \u63d0\u4f9b\u7c7b\u4f3c\u4e8e libbpf-bootstrap \u7684\u5f00\u53d1\u4f53\u9a8c\uff0c\u81ea\u52a8\u751f\u6210 Wasm-eBPF \u9aa8\u67b6\u5934\u6587\u4ef6\u548c\u7c7b\u578b\u5b9a\u4e49\u4ee5\u8fdb\u884c\u7ed1\u5b9a\u3002\u53ef\u4ee5\u4f7f\u7528 C/C++
\u3001Rust
\u3001Go
\u7f16\u5199 eBPF \u7a0b\u5e8f\u5e76\u7f16\u8bd1\u6210 Wasm\u3002\u8d85\u8f7b\u91cf\u7ea7
: \u6700\u5c0f\u8fd0\u884c\u65f6\u7684\u4e8c\u8fdb\u5236\u5927\u5c0f\u4ec5\u4e3a 1.5 MB\u3002\u7f16\u8bd1\u540e\u7684 Wasm \u6a21\u5757\u5927\u5c0f\u4ec5\u4e3a ~90K\u3002\u4f7f\u7528\u76f8\u540c\u7684\u5de5\u5177\u94fe\uff0c\u60a8\u53ef\u4ee5\u8f7b\u677e\u5730\u5728\u4efb\u4f55\u8bed\u8a00\u548c\u5e73\u53f0\u4e0a\u6784\u5efa\u81ea\u5df1\u7684 Wasm-eBPF \u8fd0\u884c\u65f6\uff01\u8bf7\u53c2\u9605 examples \u76ee\u5f55\u4e2d\u4ee5 C\u3001Rust\u3001Go \u7f16\u5199\u7684\u7f16\u8bd1\u4e3a Wasm \u7684 eBPF \u7a0b\u5e8f\u793a\u4f8b\uff0c\u8986\u76d6\u4e86\u4ece\u8ddf\u8e2a\u3001\u7f51\u7edc\u5230\u5b89\u5168\u7684\u5404\u79cd\u7528\u4f8b\u3002
\u6709\u5173\u4f7f\u7528 OCI \u955c\u50cf\u5206\u53d1\u3001\u52a8\u6001\u52a0\u8f7d\u3001\u8fd0\u884c Wasm-eBPF \u7a0b\u5e8f\u7684\u5de5\u5177\uff0c\u8bf7\u53c2\u9605 eunomia-bpf \u4ed3\u5e93\u3002
"},{"location":"frame/wasm-bpf/#_3","title":"\ud83d\udd28 \u793a\u4f8b","text":"\u8bf7\u67e5\u770b examples \u76ee\u5f55\u4e2d\u7528 C\u3001Rust\u3001Go \u7f16\u5199\u7684\u7f16\u8bd1\u6210 WASM \u7684 eBPF \u7a0b\u5e8f\u793a\u4f8b\u3002
tracing examples
security example
- lsm and go-lsm: \u68c0\u67e5\u5220\u9664\u76ee\u5f55\u7684\u6743\u9650
networking example
- sockfilter: \u76d1\u89c6\u6570\u636e\u5305\u5e76\u5904\u7406 __sk_buff - sockops: \u5728 syn \u6570\u636e\u5305\u4e2d\u6dfb\u52a0 pid \u9009\u9879\u3002
runqlat \u7684\u4e00\u4e2a\u793a\u4f8b\u8f93\u51fa\uff1a
$ sudo ./wasm-bpf runqlat.wasm 1\nTracing run queue latency... Hit Ctrl-C to end.\n\n usecs : count distribution\n 0 -> 1 : 72 |***************************** |\n 2 -> 3 : 93 |************************************* |\n 4 -> 7 : 98 |****************************************|\n 8 -> 15 : 96 |*************************************** |\n 16 -> 31 : 38 |*************** |\n 32 -> 63 : 4 |* |\n 64 -> 127 : 5 |** |\n 128 -> 255 : 6 |** |\n 256 -> 511 : 0 | |\n 512 -> 1023 : 0 | |\n 1024 -> 2047 : 0 | |\n 2048 -> 4095 : 1 | |\n
"},{"location":"frame/wasm-bpf/#_4","title":"\u6784\u5efa\u8fd0\u884c\u65f6","text":"\u8bf7\u53c2\u8003 docs/build.md\u3002
"},{"location":"frame/wasm-bpf/#wasm-bpf","title":"Wasm-bpf \u5de5\u4f5c\u539f\u7406","text":"wasm-bpf \u8fd0\u884c\u65f6\u9700\u8981\u4e24\u90e8\u5206\uff1a\u4e3b\u673a\u7aef(\u5728 Wasm \u8fd0\u884c\u65f6\u4e4b\u5916)\u548c Wasm \u5ba2\u6237\u7aef\u7aef(\u5728 Wasm \u8fd0\u884c\u65f6\u4e4b\u5185)\u3002
libbpf-wasm
\u7684\u5934\u6587\u4ef6\u5e93\uff0c\u4e3a Wasm \u5ba2\u6237\u7aef C/C++ \u4ee3\u7801\u63d0\u4f9b libbpf API\u3002bpftool
\u7684\u5de5\u5177\uff0c\u7528\u4e8e\u751f\u6210 Wasm-eBPF skeleton \u5934\u6587\u4ef6\u548c C \u7ed3\u6784\u5b9a\u4e49\uff0c\u4ee5\u4fbf\u5728\u4e3b\u673a\u548c Wasm \u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u9012\u6570\u636e\u800c\u65e0\u9700\u5e8f\u5217\u5316\u3002\u6709\u5173\u8be6\u7ec6\u7684\u7f16\u8bd1\u8fc7\u7a0b\uff0c\u8bf7\u53c2\u9605 examples/bootstrap/README.md\u3002\u4e0b\u56fe\u663e\u793a\u4e86 eBPF \u548c Wasm \u8fd0\u884c\u65f6\u4e4b\u95f4\u7684\u6574\u4f53\u4ea4\u4e92\u8fc7\u7a0b\uff1a
Wasm \u6a21\u5757\u53ef\u4ee5\u540c\u65f6\u52a0\u8f7d\u548c\u63a7\u5236\u591a\u4e2a eBPF \u7a0b\u5e8f\uff0c \u5e76\u4e14\u80fd\u591f\u8c03\u7528\u6216\u8005\u63a7\u5236\uff08\u901a\u8fc7\u7ec4\u4ef6\u6a21\u578b\uff09\u5176\u4ed6\u8bed\u8a00\u7f16\u5199\u7684 Wasm \u6a21\u5757\u6765\u5904\u7406\u6570\u636e\u3002
\u6211\u4eec\u4e5f\u63d0\u4e86\u4e00\u4e2a WASI \u63d0\u6848 wasi-bpf\u3002
"},{"location":"frame/wasm-bpf/#_5","title":"\u534f\u8bae","text":"MIT
"},{"location":"frame/zineland/","title":"Zineland","text":""},{"location":"frame/zineland/#_1","title":"\u7b80\u4ecb","text":"Zineland \u662f\u4e00\u4e2a\u7b80\u5355\u6709\u6548\u7684\u6742\u5fd7\u6784\u5efa\u6846\u67b6\uff0c\u80fd\u591f\u5feb\u901f\u901a\u8fc7 Markdown \u6587\u6863\u751f\u6210\u6742\u5fd7\u98ce\u683c\u7684\u9759\u6001\u7f51\u9875
"},{"location":"frame/zineland/#_2","title":"\u83b7\u53d6","text":" cargo install zine\n
brew install zineland/tap/zine\n
\u6700\u8fd1 LLM\uff08\u5927\u8bed\u8a00\u6a21\u578b\uff09\u5b9e\u5728\u706b\u7206\uff0c\u51fa\u4e86\u4e0d\u5c11\u5f00\u6e90\u6a21\u578b\uff0c\u6bd4\u5982 Alpaca1\u3001ChatGLM2\u3001BELLE3 \u7b49\u7b49\uff0c\u8ba9\u6bcf\u4e2a\u4eba\u90fd\u6709\u673a\u4f1a\u8fd0\u884c\u548c\u8bad\u7ec3\u4e13\u5c5e\u81ea\u5df1\u7684 LLM\uff0c\u6211\u4e5f\u8feb\u4e0d\u53ca\u5f85\u4e86\u3002
\u4f46\u662f\uff0c\u719f\u6089\u6211\u7684\u8001\u8bfb\u8005\u670b\u53cb\u5e94\u8be5\u77e5\u9053\uff0c\u867d\u7136\u6211\u662f\u641e\u7b97\u6cd5\u7684\uff0c\u4e5f\u53d1\u8fc7\u51e0\u7bc7\u8bba\u6587\uff0c\u4f46\u6211\u662f\u8d70\u7684\u662f\u8d2b\u7a77\u79d1\u7814\u7684\u8def\u7ebf\uff0c\u4e00\u5f20\u663e\u5361\u90fd\u6ca1\u6709\u3002\u50cf ChatGLM-6B \u8fd9\u79cd\u6a21\u578b\uff0c\u5728\u6211\u7684\u5c0f\u7834 Mac \u4e0a\u6839\u672c\u8dd1\u4e0d\u8d77\u6765\u3002Alpaca \u7684 CPU \u7248\u672c\u867d\u7136\u80fd\u8dd1\uff0c\u4f46\u5b83\u4e2d\u6587\u6c34\u5e73\u5b9e\u5728\u592a\u70c2\u4e86\u3002\u6709\u6ca1\u6709\u4ec0\u4e48\u6a21\u578b\u4e0d\u4ec5\u4e2d\u6587\u597d\uff0c\u53c8\u53ef\u4ee5\u4e0d\u4f9d\u8d56\u663e\u5361\uff1fRWKV4\u8fdb\u5165\u4e86\u6211\u7684\u89c6\u91ce\u3002
RWKV \u662f\u4e00\u79cd\u7eaf RNN \u7684\u67b6\u6784\uff0c\u80fd\u591f\u8fdb\u884c\u8bed\u8a00\u5efa\u6a215\uff0c\u76ee\u524d\u6700\u5927\u53c2\u6570\u89c4\u6a21\u5df2\u7ecf\u505a\u5230\u4e86 14B6\u3002\u76ee\u524d\u7684\u5728\u7ebf\u4f53\u9a8c\u5730\u5740\uff1a
Raven RWKV 7B - a Hugging Face Space by BlinkDL
\u4e0d\u8fc7\u8bf7\u6ce8\u610f\uff0c\u4e0a\u9762\u8fd9\u4e2a\u4f53\u9a8c\u6a21\u578b\u7684\u5fae\u8c03\u8bed\u6599\u82f1\u6587\u5360 99%\uff0c\u6240\u4ee5\u4e2d\u6587\u6c34\u5e73\u5e76\u4e0d\u662f\u6700\u597d\u7684\u3002\u4f5c\u8005 @PENG Bo \u6700\u8fd1\u53d1\u5e03\u7684 RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%
\u8fd9\u4e2a\u6a21\u578b\u7684\u4e2d\u6587\u5fae\u8c03\u8bed\u6599\u5360 50%\uff0c\u4e2d\u6587\u6c34\u5e73\u66f4\u597d\u3002\u4ee5\u4e0b\u6211\u4e5f\u4f1a\u57fa\u4e8e\u8be5\u6a21\u578b\u8fdb\u884c\u64cd\u4f5c\u3002
\u9996\u5148\uff0cRWKV \u7684\u6a21\u578b\u5206\u4e3a\u5f88\u591a\u79cd\uff0c\u90fd\u53d1\u5e03\u5728\u4f5c\u8005\u7684 huggingface7 \u4e0a\uff1a
\u5176\u4e2d\uff1a
\u6211\u4e0b\u8f7d\u7684\u662f RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth
8 \uff0c \u5373\u53c2\u6570\u91cf\u4e3a 7B \u7684\u5bf9\u8bdd\u6a21\u578b\uff0c\u5fae\u8c03\u9884\u6599\u4e2d 49% \u662f\u82f1\u6587\uff0c50% \u662f\u4e2d\u6587\u3002ctx4096 \u8868\u793a\u5fae\u8c03\u662f\u7684\u4e0a\u4e0b\u6587\u957f\u5ea6\u3002
\u8fd9\u4e2a\u6a21\u578b\u6709 14.8 GB\uff0c\u8bf7\u52a1\u5fc5\u786e\u4fdd\u81ea\u5df1\u7535\u8111\u7684\u53ef\u7528\u786c\u76d8\u7a7a\u95f4\u5728 40 GB \u4ee5\u4e0a\uff08\u56e0\u4e3a\u540e\u9762\u8981\u5bf9\u8fd9\u4e2a\u6a21\u578b\u8fdb\u884c\u8f6c\u6362\u548c\u91cf\u5316\uff0c\u9700\u8981\u5360\u7528\u66f4\u591a\u7684\u786c\u76d8\u7a7a\u95f4\u3002\uff09
"},{"location":"large_language_model/rwkv.cpp/#_2","title":"\u6a21\u578b\u8f6c\u6362","text":"\u4e0b\u8f7d\u597d\u7684\u6a21\u578b\u914d\u5408 ChatRWKV9\u8fd9\u4e2a\u4ed3\u5e93\u91cc\u7684\u4ee3\u7801\u5c31\u53ef\u4ee5\u8dd1\u4e86\uff0c\u4f46\u662f\u5b83\u5bf9 CPU \u7b56\u7565\u7684\u652f\u6301\u6700\u4f4e\u53ea\u5230 fp32i8\uff0c7B \u6a21\u578b\u9700\u8981 12 GB \u5185\u5b58\u624d\u80fd\u8dd1\u8d77\u6765\uff0c\u6211\u7528 16GB \u5185\u5b58\u7684 Mac \u8bd5\u4e86\u4e00\u4e0b\uff0c\u8dd1\u662f\u8dd1\u8d77\u6765\u4e86\uff0c\u4f46\u662f\u975e\u5e38\u6162\u3002
\u6240\u4ee5\uff0c\u8fd9\u91cc\u9700\u8981\u4ecb\u7ecd\u4e00\u4e0b\u80fd\u591f\u66f4\u5145\u5206\u5229\u7528 CPU \u7684\u65b9\u6cd5\uff1a
saharNooby/rwkv.cpp: INT4 and FP16 inference on CPU for RWKV language model (github.com)
rwkv.cpp \u53ef\u4ee5\u5c06 RWKV \u539f\u59cb\u6a21\u578b\u7684\u53c2\u6570\u8f6c\u5316\u4e3a float16\uff0c\u5e76\u91cf\u5316\u5230 int4\uff0c\u53ef\u4ee5\u5728 CPU \u4e0a\u66f4\u5feb\u5730\u8fd0\u884c\uff0c\u4e5f\u53ef\u4ee5\u8282\u7701\u66f4\u591a\u7684\u5185\u5b58\u3002
\u4ee5\u4e0b\u662f\u64cd\u4f5c\u6b65\u9aa4\u3002
"},{"location":"large_language_model/rwkv.cpp/#1","title":"1. \u4e0b\u8f7d\u4ed3\u5e93\u4ee3\u7801","text":"\u9700\u8981\u5b89\u88c5 git\uff08\u6ca1\u6709 git \u7684\u670b\u53cb\uff0c\u53ef\u80fd\u4f60\u8981\u8865\u7684\u524d\u7f6e\u77e5\u8bc6\u6709\u70b9\u591a\uff0c\u6211\u5efa\u8bae\u81ea\u884c\u641c\u7d22\uff09
git clone --recursive https://github.com/saharNooby/rwkv.cpp.git\ncd rwkv.cpp\n
"},{"location":"large_language_model/rwkv.cpp/#2-or","title":"2. \u4e0b\u8f7d\u4f9d\u8d56\u5e93 or \u7f16\u8bd1\u4f9d\u8d56\u5e93","text":"rwkv.cpp \u7684\u5f00\u53d1\u8005\u5df2\u7ecf\u9884\u7f16\u8bd1\u4e86\u4e0d\u540c\u5e73\u53f0\u4e0a\u7684\u4f9d\u8d56\u5e93\uff0c\u53ef\u4ee5\u5728\u8fd9\u91cc\u4e0b\u8f7d\uff1ahttps://github.com/saharNooby/rwkv.cpp/releases
\u4e0b\u8f7d\u7684\u65f6\u5019\u8bf7\u6ce8\u610f\u64cd\u4f5c\u7cfb\u7edf\u7c7b\u578b\u548c\u652f\u6301\u7684\u67b6\u6784\u3002\u7531\u4e8e\u4f5c\u8005\u6ca1\u6709\u9884\u7f16\u8bd1\u5bf9 Mac m1 \u7684 ARM64 \u67b6\u6784\u7684\u4f9d\u8d56\u5e93\uff0c\u6240\u4ee5\u6211\u9009\u62e9\u81ea\u884c\u7f16\u8bd1\uff08\u9700\u8981\u5b89\u88c5 cmake\uff0c\u5e76\u5728 shell \u4e2d\u79fb\u52a8\u5230 rwkv.cpp \u8def\u5f84\u4e0b\uff09\uff1a
cmake -DBUILD_SHARED_LIBS=ON .\ncmake --build . --config Release\n
"},{"location":"large_language_model/rwkv.cpp/#3","title":"3. \u8f6c\u6362\u6a21\u578b","text":"\u9700\u8981\u88c5 PyTorch
\u6211\u76f4\u63a5\u628a\u4e0b\u8f7d\u597d\u7684\u6a21\u578b\u653e\u5728\u4e86 rwkv.cpp \u7684\u8def\u5f84\u4e0b\uff0c\u7136\u540e\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a
python rwkv/convert_pytorch_to_ggml.py ./RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth ./rwkv.cpp-7B.bin float16\n
\u5176\u5b9e\u5c31\u662f\u8ba9 python \u8fd0\u884c rwkv/convert_pytorch_to_ggml.py
\u8fd9\u4e2a\u8f6c\u6362\u6a21\u578b\u7684\u4ee3\u7801\uff0c ./RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth
\u662f\u5f85\u8f6c\u6362\u7684\u6a21\u578b\u7684\u8def\u5f84\uff0c ./rwkv.cpp-7B.bin
\u662f\u8f6c\u6362\u540e\u7684\u8def\u5f84\uff0cfloat16 \u662f\u8981\u8f6c\u6362\u6210\u4ec0\u4e48\u7c7b\u578b\u7684\u53c2\u6570\u3002
\u5176\u5b9e\u4e0a\u9762\u8f6c\u6362\u597d\u7684 ./rwkv.cpp-7B.bin
\u5df2\u7ecf\u53ef\u4ee5\u7528\u4e86\uff0c\u4f46\u662f\u5b83\u8981\u5360\u7528 16GB \u5185\u5b58\u3002\u4e3a\u4e86\u51cf\u5c11\u5185\u5b58\u5360\u7528\uff0c\u53ef\u4ee5\u5c06 ./rwkv.cpp-7B.bin
\u91cf\u5316\u4e3a int4\uff0c\u53ef\u4ee5\u7701\u4e00\u534a\u5185\u5b58\uff0c\u4e5f\u5c31\u662f\u53ea\u5360 6GB \u5185\u5b58\u3002\u53ea\u9700\u8981\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a
python rwkv/quantize.py ./rwkv.cpp-7B.bin ./rwkv.cpp-7B-Q4_1_O.bin 4\n
\u7136\u540e\u4f60\u5c31\u4f1a\u5f97\u5230\u4e00\u4e2a\u5927\u5c0f\u53ea\u6709 6GB \u7684\u6a21\u578b\u4e86\u3002
"},{"location":"large_language_model/rwkv.cpp/#_3","title":"\u8fd0\u884c\u6a21\u578b","text":"\u540c\u6837\uff0c\u4e00\u884c\u547d\u4ee4\u641e\u5b9a\uff1a
python rwkv/chat_with_bot.py ./rwkv.cpp-7B-Q4_1_0.bin\n
\u8ba9\u6211\u4eec\u770b\u770b\u6548\u679c\uff0c\u9996\u5148\u662f\u5185\u5b58\u5360\u7528\uff0c\u4e0d\u5230 6GB
\u7136\u540e\u662f\u95ee\u7b54\u548c\u6267\u884c\u547d\u4ee4\uff1a
\u6548\u679c\u8fd8\u4e0d\u9519\uff0c\u4e0d\u8fc7\u6700\u540e\u83ab\u540d\u5176\u5999\u53c8\u591a\u8bf4\u4e86\u4e00\u6bb5\u8bdd\uff0c\u53ef\u80fd\u662f\u91cf\u5316\u5e26\u6765\u7684\u7cbe\u5ea6\u635f\u5931\uff1f\u975e\u91cf\u5316\u7248\u672c\u7684\u6548\u679c\u5982\u4e0b\uff1a
\u5e0c\u671b\u5f00\u53d1\u8005\u4e4b\u540e\u80fd\u5bf9\u91cf\u5316\u7248\u672c\u8fdb\u884c\u6d4b\u8bc4\uff0c\u8ba9 rwkv \u53d8\u5f97\u66f4\u597d\u7528\u3002
\u4ee5\u4e0a\u5c31\u662f\u6211\u5728 Mac \u4e0a\u7528 6GB \u5185\u5b58\u8fd0\u884c 7B \u7684\u4e2d\u6587\u8bed\u8a00\u6a21\u578b RWKV \u7684\u8fc7\u7a0b\u4e86\uff0c\u5e0c\u671b\u5bf9\u8bfb\u8005\u670b\u53cb\u4eec\u6709\u6240\u5e2e\u52a9\u3002
\u53c2\u8003
https://github.com/antimatter15/alpaca.cpp\u00a0\u21a9
https://github.com/THUDM/ChatGLM-6B\u00a0\u21a9
https://github.com/LianjiaTech/BELLE\u00a0\u21a9
\u53d1\u5e03\u51e0\u4e2aRWKV\u7684Chat\u6a21\u578b\uff08\u5305\u62ec\u82f1\u6587\u548c\u4e2d\u6587\uff097B/14B\u6b22\u8fce\u5927\u5bb6\u73a9 - PENG Bo\u7684\u6587\u7ae0 - \u77e5\u4e4e https://zhuanlan.zhihu.com/p/618011122\u00a0\u21a9
RWKV-v2-RNN \u539f\u7406\uff1a\u8d85\u8d8a Transformer\uff0c\u5b9e\u73b0 O(T) \u7684\u8bed\u8a00\u5efa\u6a21 - PENG Bo\u7684\u6587\u7ae0 - \u77e5\u4e4e https://zhuanlan.zhihu.com/p/514840332\u00a0\u21a9
RWKV\uff1a\u7528RNN\u8fbe\u5230Transformer\u6027\u80fd\uff0c\u4e14\u652f\u6301\u5e76\u884c\u6a21\u5f0f\u548c\u957f\u7a0b\u8bb0\u5fc6\uff0c\u65e2\u5feb\u53c8\u7701\u663e\u5b58\uff0c\u5df2\u572814B\u53c2\u6570\u89c4\u6a21\u68c0\u9a8c - PENG Bo\u7684\u6587\u7ae0 - \u77e5\u4e4e https://zhuanlan.zhihu.com/p/599150009\u00a0\u21a9
BlinkDL (BlinkDL) (huggingface.co) https://huggingface.co/BlinkDL\u00a0\u21a9
RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth https://huggingface.co/BlinkDL/rwkv-4-raven/blob/main/RWKV-4-Raven-7B-v9x-Eng49%25-Chn50%25-Other1%25-20230418-ctx4096.pth\u00a0\u21a9
https://github.com/BlinkDL/ChatRWKV\u00a0\u21a9
\u672c\u6587\u5411\u5927\u5bb6\u4ecb\u7ecd\u4e00\u6b3e\u7528\u4e8e\u6362\u6e90\u4e2a\u5de5\u5177\u5e2e\u52a9\u5927\u5bb6\u66f4\u5feb\u7684\u66f4\u6362\u6240\u4f7f\u7528\u8f6f\u4ef6\u7684\u6e90\u63d0\u9ad8\u5f00\u53d1\u6548\u7387
"},{"location":"one_click_deployment/Source-changer/#_1","title":"\u5b89\u88c5","text":"git clone https://github.com/57307407/Source-changer.git
"},{"location":"one_click_deployment/Source-changer/#_2","title":"\u4ecb\u7ecd","text":"\u76ee\u524d\u652f\u6301 maven \u3001 npm \u3001 python\uff08pip\uff09\u6362\u6e90
\u7531\u4e8e\u672c\u5de5\u5177\u4f7f\u7528 python \u8bed\u8a00\u8fdb\u884c\u5f00\u53d1\uff0c\u4f7f\u7528\u524d\u8bf7\u5148\u5b89\u88c5python\u73af\u5883
\u4e0b\u8f7d\u94fe\u63a5\uff1ahttps://www.python.org/
\u8f93\u5165\u547d\u4ee4
python -V
or
python3 -V
\u51fa\u73b0python\u7248\u672c\u53f7\u5373\u4e3a\u5b89\u88c5\u5b8c\u6bd5
"},{"location":"one_click_deployment/Source-changer/#_3","title":"\u4f7f\u7528","text":"python main.py / python3 main.py
\u66f4\u6362maven\u6e90\u65f6\u9700\u8981\u5728\u547d\u4ee4\u524d\u52a0sudo
\u5373\uff1a sudo python3 main.py
\u9009\u62e9\u9700\u6362\u6e90\u7684\u8f6f\u4ef6
\u9009\u62e9\u66f4\u6362\u7684\u955c\u50cf
"},{"location":"one_click_deployment/Windows_Setup/","title":"windows\u73af\u5883\u90e8\u7f72","text":"\u672c\u6587\u5411\u5927\u5bb6\u4ecb\u7ecd\u81ea\u5df1\u7684windows\u73af\u5883\u5982\u4f55\u90e8\u7f72\u8be5\u9879\u76ee
\u6ce8\u610f\uff1a\u8fd9\u91cc\u9700\u8981\u7528\u5230python\u73af\u5883,\u672c\u4eba\u662fpython3.10
git clone https://github.com/cargo-youth/ToolDiy.git\n
"},{"location":"one_click_deployment/Windows_Setup/#mkdocs","title":"\u5b89\u88c5 mkdocs","text":"\u4e0b\u8f7d\u94fe\u63a5\uff1apip install mkdocs\n
"},{"location":"one_click_deployment/Windows_Setup/#_1","title":"\u5b89\u88c5\u7f51\u7ad9\u4e3b\u9898","text":"\u672c\u7ad9\u4e3b\u9898\u662fmaterial\uff0c\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u8fdb\u884c\u5b89\u88c5\u5373\u53ef\u3002
pip install mkdocs-material\n
"},{"location":"one_click_deployment/Windows_Setup/#_2","title":"\u5b89\u88c5\u5176\u5b83\u4f9d\u8d56","text":"pip install pymdown-extensions\npip install mkdocs-awesome-pages-plugin\n
"},{"location":"one_click_deployment/Windows_Setup/#i18n","title":"\u5b89\u88c5i18n","text":"\u8fd9\u91cc\u662f\u4e2a\u5751\uff0c\u6211\u5b89\u88c5\u7684\u65f6\u5019\uff0c\u76f4\u63a5\u5b89\u88c5pip install i18n
\u4e0d\u884c\uff0c\u4f60\u9700\u8981\u4e13\u95e8\u5b89\u88c5mkdocs\u4e0b\u7684i18n,\u7136\u540e\u95ee\u7684chatGPT,\u4ed6\u7ed9\u6211\u63d0\u4f9b\u7684\u89e3\u51b3\u65b9\u6848\u662fpip install mkdocs-i18n-plugin
;\u53ef\u60dc\u4e0d\u5bf9\uff0c\u6700\u540e\u5728\u8c37\u6b4c\u4e0a\u627e\u5230\u4e0b\u9762\u547d\u4ee4\uff0c\u5c31\u5bf9\u4e86\u3002
pip install mkdocs-static-i18n\n
"},{"location":"one_click_deployment/Windows_Setup/#_3","title":"\u8fd0\u884c\u9879\u76ee","text":"mkdocs serve\n
"},{"location":"one_click_deployment/Windows_Setup/#_4","title":"\u6784\u5efa\u9759\u6001\u7f51\u7ad9\u6587\u4ef6","text":"mkdocs build\n
"},{"location":"one_click_deployment/docker_os_c/","title":"Docker \u642d\u5efa C \u8bed\u8a00\u64cd\u4f5c\u7cfb\u7edf\u5f00\u53d1\u73af\u5883","text":""},{"location":"one_click_deployment/docker_os_c/#_1","title":"\u9884\u8bbe\u5f00\u53d1\u73af\u5883\u7b80\u8ff0","text":"code-server extensions
\u5b89\u88c5 Docker Desktop\uff0c\u53c2\u89c1 Install Docker Desktop on Windows\u3002
\u8fd0\u884c Docker Desktop\uff0c\u518d\u6253\u5f00 CMD \u6216\u8005 PowerShell\uff0c\u6267\u884c
docker pull jklincn/c-os\n
\u955c\u50cf\u6210\u529f\u62c9\u53d6\u540e\uff0c\u6267\u884c
docker run -d --privileged -p 58888:8080 jklincn/c-os\n
\u8fd9\u65f6\u4f7f\u7528\u6d4f\u89c8\u5668\u6253\u5f00 http://localhost:58888 \u5373\u53ef\u542f\u52a8\u5f00\u53d1\u73af\u5883\u3002
\u540e\u7eed\u53ef\u4ee5\u5728 Docker Desktop \u754c\u9762\u7684 Containers \u4e2d\u63a7\u5236\u5df2\u521b\u5efa\u5bb9\u5668\u7684\u6682\u505c\u4e0e\u5f00\u542f\u3002
\u4e3b\u673a\u6620\u5c04\u7aef\u53e3 58888 \u53ef\u968f\u610f\u66f4\u6362\u3002\u670d\u52a1\u7aef\u53e3 8080 \u53ef\u4ee5\u901a\u8fc7\u4fee\u6539 Dockerfile \u66f4\u6362\u3002
\u5982\u679c\u955c\u50cf\u62c9\u53d6\u7f13\u6162\uff0c\u53ef\u4ee5\u70b9\u51fb Docker Desktop \u754c\u9762\u53f3\u4e0a\u89d2\u9f7f\u8f6e\u6253\u5f00\u8bbe\u7f6e\uff0c\u5728 Docker Engine \u914d\u7f6e\u6587\u4ef6\u4e2d\u6dfb\u52a0\u56fd\u5185\u6e90\uff0c\u518d\u70b9\u51fb Apply & restart
\u91cd\u542f Docker\uff0c\u518d\u6b21\u5c1d\u8bd5\u62c9\u53d6\u3002
\"registry-mirrors\": [\n \"http://hub-mirror.c.163.com\",\n \"https://docker.mirrors.ustc.edu.cn\"\n]\n
\u6b64\u5904\u7ed9\u51fa\u955c\u50cf\u7684\u6784\u5efa\u811a\u672c\uff0c\u4f9b\u6709\u9700\u6c42\u7684\u540c\u5b66\u53c2\u8003\u4e0e\u4fee\u6539
FROM ubuntu:22.04\nSHELL [\"/bin/bash\", \"-c\"]\n\n# \u5b89\u88c5\u5fc5\u8981\u4f9d\u8d56\u4e0e\u5f00\u53d1\u5de5\u5177\nRUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \\\napt-get update && apt-get install -y \\\ngcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \\\ngit wget python3 vim file curl \\\nautoconf automake autotools-dev libmpc-dev libmpfr-dev libgmp-dev \\\ngawk build-essential bison flex texinfo gperf libtool patchutils bc \\\nzlib1g-dev libexpat-dev \\\nninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \\ \n&& rm -rf /var/lib/apt/lists/*\n\n# \u5b89\u88c5 QEMU\nARG QEMU_VERSION=7.0.0\nRUN cd /tmp && \\\nwget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \\\ntar xf qemu-${QEMU_VERSION}.tar.xz && \\\ncd qemu-${QEMU_VERSION} && \\\n./configure --target-list=riscv64-softmmu,riscv64-linux-user && \\\nmake -j && \\\nmake install && \\\ncd .. && \\\nrm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz\n\n# \u5b89\u88c5 code-server \u548c\u6269\u5c55\nARG CODE_VERSION=4.10.1\nRUN cd /usr/local/ && \\\nwget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\ntar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\nln -s /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \\\nrm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\nwget https://github.com/microsoft/vscode-cpptools/releases/download/v1.14.4/cpptools-linux.vsix && \\\ncode --install-extension cpptools-linux.vsix && \\\nrm cpptools-linux.vsix && \\\nwget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \\\ncode --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \\\nrm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix\n\nEXPOSE 8080/tcp\nCMD [\"code\", \"--auth\", \"none\", \"--bind-addr\", \"0.0.0.0:8080\"]\n
"},{"location":"one_click_deployment/docker_os_rust/","title":"Docker \u642d\u5efa Rust \u8bed\u8a00\u64cd\u4f5c\u7cfb\u7edf\u5f00\u53d1\u73af\u5883","text":""},{"location":"one_click_deployment/docker_os_rust/#_1","title":"\u9884\u8bbe\u5f00\u53d1\u73af\u5883\u7b80\u8ff0","text":"code-server extensions
\u5b89\u88c5 Docker Desktop\uff0c\u53c2\u89c1 Install Docker Desktop on Windows\u3002
\u8fd0\u884c Docker Desktop\uff0c\u518d\u6253\u5f00 CMD \u6216\u8005 PowerShell\uff0c\u6267\u884c
docker pull jklincn/rust-os\n
\u955c\u50cf\u6210\u529f\u62c9\u53d6\u540e\uff0c\u6267\u884c
docker run -d --privileged -p 58888:8080 jklincn/rust-os\n
\u8fd9\u65f6\u4f7f\u7528\u6d4f\u89c8\u5668\u6253\u5f00 http://localhost:58888 \u5373\u53ef\u542f\u52a8\u5f00\u53d1\u73af\u5883\u3002
\u540e\u7eed\u53ef\u4ee5\u5728 Docker Desktop \u754c\u9762\u7684 Containers \u4e2d\u63a7\u5236\u5df2\u521b\u5efa\u5bb9\u5668\u7684\u6682\u505c\u4e0e\u5f00\u542f\u3002
\u4e3b\u673a\u6620\u5c04\u7aef\u53e3 58888 \u53ef\u968f\u610f\u66f4\u6362\u3002\u670d\u52a1\u7aef\u53e3 8080 \u53ef\u4ee5\u901a\u8fc7\u4fee\u6539 Dockerfile \u66f4\u6362
\u5982\u679c\u955c\u50cf\u62c9\u53d6\u7f13\u6162\uff0c\u53ef\u4ee5\u70b9\u51fb Docker Desktop \u754c\u9762\u53f3\u4e0a\u89d2\u9f7f\u8f6e\u6253\u5f00\u8bbe\u7f6e\uff0c\u5728 Docker Engine \u914d\u7f6e\u6587\u4ef6\u4e2d\u6dfb\u52a0\u56fd\u5185\u6e90\uff0c\u518d\u70b9\u51fb Apply & restart
\u91cd\u542f Docker\uff0c\u518d\u6b21\u5c1d\u8bd5\u62c9\u53d6\u3002
\"registry-mirrors\": [\n \"http://hub-mirror.c.163.com\",\n \"https://docker.mirrors.ustc.edu.cn\"\n]\n
\u6b64\u5904\u7ed9\u51fa\u955c\u50cf\u7684\u6784\u5efa\u811a\u672c\uff0c\u4f9b\u6709\u9700\u6c42\u7684\u540c\u5b66\u53c2\u8003\u4e0e\u4fee\u6539
FROM ubuntu:22.04\nSHELL [\"/bin/bash\", \"-c\"]\n\n# \u5b89\u88c5\u5fc5\u8981\u4f9d\u8d56\u4e0e\u5f00\u53d1\u5de5\u5177\nRUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \\\napt-get update && apt-get install -y \\\ngcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \\\ngit wget python3 vim file curl \\\nautoconf automake autotools-dev libmpc-dev libmpfr-dev libgmp-dev \\\ngawk build-essential bison flex texinfo gperf libtool patchutils bc \\\nzlib1g-dev libexpat-dev \\\nninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \\ \n&& rm -rf /var/lib/apt/lists/*\n\n# \u5b89\u88c5 QEMU\nARG QEMU_VERSION=7.0.0\nRUN cd /tmp && \\\nwget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \\\ntar xf qemu-${QEMU_VERSION}.tar.xz && \\\ncd qemu-${QEMU_VERSION} && \\\n./configure --target-list=riscv64-softmmu,riscv64-linux-user && \\\nmake -j && \\\nmake install && \\\ncd .. && \\\nrm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz\n\n# \u5b89\u88c5 code-server \u548c\u6269\u5c55\nARG CODE_VERSION=4.10.1\nRUN cd /usr/local/ && \\\nwget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\ntar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\nln -s /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \\\nrm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\nwget https://openvsxorg.blob.core.windows.net/resources/rust-lang/rust-analyzer/linux-x64/0.3.1435/rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \\\ncode --install-extension rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \\\nrm rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \\\nwget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \\\ncode --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \\\nrm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix\n\nWORKDIR /root\n# \u5b89\u88c5 rust\nARG RUST_VERSION=nightly\nENV RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static\nENV RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup\nRUN mkdir .cargo && \\\necho '[source.crates-io]' >> .cargo/config && \\\necho 'registry = \"https://github.com/rust-lang/crates.io-index\"' >> .cargo/config && \\\necho 'replace-with = \"ustc\"' >> .cargo/config && \\\necho '[source.ustc]' >> .cargo/config && \\\necho 'registry = \"git://mirrors.ustc.edu.cn/crates.io-index\"' >> .cargo/config && \\\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup-init && \\\nchmod +x rustup-init && \\\n./rustup-init -y --default-toolchain ${RUST_VERSION} --target riscv64imac-unknown-none-elf && \\\nrm rustup-init && \\\nsource $HOME/.cargo/env && \\\ncargo install cargo-binutils && \\\nrustup component add llvm-tools-preview && \\\nrustup component add rust-src\n\nEXPOSE 8080/tcp\nCMD [\"code\", \"--auth\", \"none\", \"--bind-addr\", \"0.0.0.0:8080\"]\n
"},{"location":"one_click_deployment/os/","title":"os\u5f00\u53d1\u73af\u5883\u548c\u5de5\u5177\u4ecb\u7ecd","text":"# (ubuntu) \u5b89\u88c5QEMU7.0\u4f9d\u8d56\u5305\nsudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \\\ngawk build-essential bison flex texinfo gperf libtool patchutils bc \\\nzlib1g-dev libexpat-dev pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \\\ngit tmux python3 python3-pip ninja-build\n# \u5728\u5f00\u53d1\u76ee\u5f55\u6267\u884c\u5b89\u88c5\nmkdir dev\npushd dev\nwget https://download.qemu.org/qemu-7.0.0.tar.xz\ntar -xf qemu-7.0.0.tar.xz\ncd qemu-7.0.0\n./configure --target-list=x86_64-softmmu,aarch64-softmmu,riscv64-softmmu --enable-debug\nmake -j$(nproc)\nmake install\npopd\n# \u914d\u7f6e\u73af\u5883\u53d8\u91cf\nvi ~/.bashrc\nexport PATH=$PATH:/path/to/qemu-7.0.0/build # \u914d\u7f6e\u540e\u66f4\u65b0\u7cfb\u7edf\u8def\u5f84\nsource ~/.bashrc # \u68c0\u6d4bqemu\u7248\u672c(\u4ee5riscv64 \u4e3a\u4f8b\u4e0a\u8bc9\u914d\u7f6e\u5df2\u5c06x86_64 aarch64 riscv64\u5b89\u88c5\u597d\u5747\u53ef\u4ee5\u68c0\u6d4b\u7248\u672c)\nqemu-system-riscv64 --version\n# \u914d\u7f6erust\u73af\u5883\ncurl https://sh.rustup.rs -sSf | sh\n# \u914d\u7f6e\u73af\u5883\u53d8\u91cf\nsource $HOME/.cargo/env\n# \u68c0\u6d4b\u7248\u672c\nrustc --version\n# rust\u76f8\u5173\u8f6f\u4ef6\u5305\u5b89\u88c5\nrustup target add riscv64gc-unknown-none-elf\ncargo install cargo-binutils\nrustup component add llvm-tools-preview\nrustup component add rust-src\n
"},{"location":"one_click_deployment/os/#_1","title":"\u5e38\u89c1\u95ee\u9898\u53ca\u89e3\u51b3\u529e\u6cd5","text":"# centos \u4f9d\u8d56\u5b89\u88c5\nsudo yum install autoconf automake libmpc-devel mpfr-devel gmp-devel gawk bison flex \\\ntexinfo patchutils gcc gcc-c++ zlib-devel expat-devel git\n# gcc\u7248\u672c\u8fc7\u4f4e\u5bfc\u81f4\u7684qemu\u7f16\u8bd1\u5931\u8d25(\u4e5f\u53ef\u4ee5\u76f4\u63a5\u5b98\u7f51\u66f4\u9ad8\u7248\u672c\u5b89\u88c5)\nyum install centos-release-scl\nscl enable devtoolset-8 bash\n# \u67e5\u770bgcc\u7248\u672c\ngcc -v\n
"},{"location":"one_click_deployment/os/#rust","title":"\u914d\u7f6erust\u4e0b\u8f7d\u955c\u50cf","text":"vi ~/.cargo/config\n[source.crates-io]\nregistry = \"https://github.com/rust-lang/crates.io-index\"\nreplace-with = 'ustc'\n[source.ustc]\nregistry = \"git://mirrors.ustc.edu.cn/crates.io-index\"\n
"},{"location":"package_manager/APT%EF%BC%88DEB%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/","title":"APT\uff08DEB\uff09\u5305\u7ba1\u7406\u5de5\u5177","text":"apt list --installed\napt list --all-versions <package-name>\uff1a\u5217\u51fa\u6307\u5b9a\u8f6f\u4ef6\u5305\u7684\u6240\u6709\u7248\u672c\u3002\napt list --upgradable | grep <search-term>\uff1a\u5217\u51fa\u5305\u542b\u641c\u7d22\u8bcd\u7684\u53ef\u66f4\u65b0\u8f6f\u4ef6\u5305\u3002\napt list --verbose\uff1a\u663e\u793a\u66f4\u8be6\u7ec6\u7684\u8f93\u51fa\u4fe1\u606f\u3002\n\napt edit-sources\n\nsudo apt build-dep package #\u5b89\u88c5\u76f8\u5173\u7684\u7f16\u8bd1\u73af\u5883\uff0c\u8fd9\u771f\u662f\u4e2a\u795e\u6280\u80fd\uff0c\u6709\u4e86\u5b83\uff0c\u7f16\u8bd1\u5b89\u88c5\u90fd\u53d8\u5f97\u7d22\u7136\u65e0\u5473\u4e86\nsudo apt --purge autoremove\napt-get clean && sudo apt-get autoclean #\u6e05\u7406\u65e0\u7528\u7684\u5305\n\naptitude\napt-add-repository [options] repository #\u4fee\u6539\u8f6f\u4ef6\u6e90\u547d\u4ee4 (software-properties-common)\n
apt search package #\u641c\u7d22\u5305 \napt show package #\u83b7\u53d6\u5305\u7684\u76f8\u5173\u4fe1\u606f\uff0c\u5982\u8bf4\u660e\u3001\u5927\u5c0f\u3001\u7248\u672c\u7b49 \napt depends package #\u4e86\u89e3\u4f7f\u7528\u4f9d\u8d56 \napt rdepends package #\u67e5\u770b\u8be5\u5305\u88ab\u54ea\u4e9b\u5305\u4f9d\u8d56 \napt-cache pkgnames #\u6267\u884cpkgnames\u5b50\u547d\u4ee4\u5217\u51fa\u5f53\u524d\u6240\u6709\u53ef\u7528\u7684\u8f6f\u4ef6\u5305 \napt policy package #\u4f7f\u7528policy\u547d\u4ee4\u663e\u793a\u8f6f\u4ef6\u5305\u7684\u5b89\u88c5\u72b6\u6001\u548c\u7248\u672c\u4fe1\u606f\u3002\n\nsudo apt install package #\u5b89\u88c5\u5305 \nsudo apt install package=version #\u5b89\u88c5\u6307\u5b9a\u7248\u672c\u7684\u5305 \nsudo apt install package --reinstall #\u91cd\u65b0\u5b89\u88c5\u5305 \nsudo apt -f install #\u4fee\u590d\u5b89\u88c5, \"-f = --fix-missing\" \nsudo apt remove package #\u5220\u9664\u5305\nsudo apt purge package #\u5220\u9664\u5305\uff0c\u5305\u62ec\u5220\u9664\u914d\u7f6e\u6587\u4ef6\u7b49\nsudo apt autoremove #\u81ea\u52a8\u5378\u8f7d\u6240\u6709\u672a\u4f7f\u7528\u7684\u8f6f\u4ef6\u5305\n\nsudo apt source package #\u4e0b\u8f7d\u8be5\u5305\u7684\u6e90\u4ee3\u7801 \nsudo apt update #\u66f4\u65b0apt\u8f6f\u4ef6\u6e90\u4fe1\u606f \nsudo apt upgrade #\u66f4\u65b0\u5df2\u5b89\u88c5\u7684\u5305 \nsudo apt dist-upgrade #\u5347\u7ea7\u7cfb\u7edf \nsudo apt dselect-upgrade #\u4f7f\u7528dselect\u5347\u7ea7 \nsudo apt build-dep package #\u5b89\u88c5\u76f8\u5173\u7684\u7f16\u8bd1\u73af\u5883 \nsudo apt clean && sudo apt autoclean #\u6e05\u7406\u65e0\u7528\u7684\u5305\nsudo apt clean #\u6e05\u7406\u5df2\u4e0b\u8f7d\u7684\u8f6f\u4ef6\u5305\uff0c\u5b9e\u9645\u4e0a\u662f\u6e05\u695a/var/cache/apt/archives\u76ee\u5f55\u4e2d\u7684\u8f6f\u4ef6\u5305\nsudo apt autoclean #\u5220\u9664\u5df2\u7ecf\u5378\u8f7d\u7684\u8f6f\u4ef6\u5305\u5907\u4efd \nsudo apt-get check #\u68c0\u67e5\u662f\u5426\u6709\u635f\u574f\u7684\u4f9d\u8d56\n
sudo dpkg -i <package.deb> #\u5b89\u88c5\u5305\nsudo dpkg -r <package.deb>\u3000 #\u5220\u9664\u5305\nsudo dpkg -p <package.deb>\u3000 #\u5f7b\u5e95\u5220\u9664\u5305(\u5305\u62ec\u914d\u7f6e\u6587\u4ef6)\ndpkg -l #\u5217\u51fa\u5f53\u524d\u5df2\u5b89\u88c5\u7684\u5305\n
"},{"location":"package_manager/AppImage%EF%BC%88Linux%EF%BC%89/","title":"AppImage\uff08Linux\uff09","text":"\u672c\u6587\u4ecb\u7ecd\u4e86 Chocolatey \u7684\u5b89\u88c5\u4e0e\u4f7f\u7528\u8fc7\u7a0b\u3002\u8fd9\u7bc7\u6587\u7ae0\u4e0d\u662f\u4e3a\u666e\u901a\u7528\u6237\u7f16\u5199\u7684\uff0c\u800c\u662f\u7ed9\u9700\u8981\u7edf\u4e00\u5f00\u53d1\u73af\u5883\u7684\u5f00\u53d1\u4eba\u5458\u5199\u7684
\u4e3a\u4ec0\u4e48\u8981\u7528 Chocolatey
\u5982\u679c\u4f7f\u7528\u8fc7 Linux \u4e00\u5b9a\u719f\u6089\u4e00\u884c\u4ee3\u7801\u8fdb\u884c\u8f6f\u4ef6\u7684\u641c\u7d22\uff0c\u5b89\u88c5\uff0c\u66f4\u65b0\uff0c\u5378\u8f7d\u7b49\u6240\u6709\u64cd\u4f5c\u3002\u800c Windows \u4e2d\u7684\u4e5f\u6709\u5305\u7ba1\u7406\u5668 Chocolatey \u3002\u867d\u7136\u6ca1\u6709 Linux \u91cc\u7684\u5305\u7ba1\u7406\u5668\u90a3\u4e48\u5f3a\u5927\uff0c\u4f46\u8ba9 Windows \u5b89\u88c5\u8f6f\u4ef6\u65b9\u4fbf\u4e86\u5f88\u591a\u3002
"},{"location":"package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/#chocolatey","title":"Chocolatey \u7684\u5b89\u88c5","text":"\u65b9\u6cd5\u4e00\uff1a\u4ee5\u7ba1\u7406\u5458\u8eab\u4efd\u6253\u5f00 cmd.exe \uff08\u5f88\u91cd\u8981\uff09\uff0c\u6267\u884c\u4ee5\u4e0b\u4ee3\u7801
@\"%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command \"iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))\" && SET \"PATH=%PATH%;%ALLUSERSPROFILE%\\chocolatey\\bin\"\n
\u65b9\u6cd5\u4e8c\uff1a\u4ee5\u7ba1\u7406\u5458\u8eab\u4efd\u6253\u5f00 powershell.exe \uff0c\u6267\u884c\u4ee5\u4e0b\u4ee3\u7801
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))\n
\u5728\u6709\u7684\u65f6\u5019\uff0c\u56e0\u4e3a\u7535\u8111\u5b89\u88c5\u9632\u706b\u5899\u7684\u539f\u56e0\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u524d\u4e24\u4e2a\u65b9\u6cd5\u51fa\u73b0\u95ee\u9898\uff0c\u4f46\u662f\u65b9\u6cd5\u4e09\u4e0d\u5b58\u5728\u6b64\u95ee\u9898\uff0c\u6700\u597d\u7528 powershell.exe \u6765\u6267\u884c install.psl \u811a\u672c\uff0c\u53ef\u4ee5\u770b\u5230\u5b89\u88c5\u7684\u5b8c\u6574\u8fc7\u7a0b\u3002
"},{"location":"package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/#chocolatey_1","title":"Chocolatey \u7684\u4f7f\u7528","text":"Chocolatey \u8fd0\u884c\u9700\u8981\u7684\u73af\u5883\uff1a - Windows 7+ / Windows Server 2003+ - PowerShell v2+ - .NET Framework 4+ \uff08\u4e0d\u7528\u5b89\u88c5\uff0c\u5b89\u88c5\u811a\u672c\u65f6\u4f1a\u81ea\u52a8\u5b89\u88c5\uff09
"},{"location":"package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/#_1","title":"\u5b89\u88c5\u8f6f\u4ef6","text":"choco install -y git \nchoco install -y python \nchoco install -y chromium\ncinst -y nodejs.install\n...\n
choco \u548c cinst \u90fd\u662f\u5b89\u88c5\u547d\u4ee4\uff0c -y \u907f\u514d\u5bf9\u534f\u8bae\u7684\u4e8c\u6b21\u786e\u8ba4\uff0c\u53ef\u4ee5\u5728\u5b98\u7f51 https://chocolatey.org/packages \u67e5\u627e\u786e\u8ba4\u81ea\u5df1\u8981\u5b89\u88c5\u7684\u5305\u3002
"},{"location":"package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/#_2","title":"\u67e5\u627e\u8f6f\u4ef6","text":"choco upgrade git
choco uninstall git
choco install dev-package.config\ndev-package.config:\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n<package id=\"jdk8\" />\n<package id=\"googlechrome\" version=\"71.0.3578.98\" />\n<package id=\"vscode\" />\n<package id=\"7zip\" />\n</packages>\n
\u6587\u4ef6\u540d\u79f0\u968f\u610f\uff0c\u4f46\u662f\u6269\u5c55\u540d\u5fc5\u987b\u662f .config \u3002\u901a\u8fc7 .config \u7684\u65b9\u5f0f\uff0c\u5c31\u53ef\u4ee5\u914d\u7f6e\u4e00\u4e2a\u56e2\u961f\u7edf\u4e00\u7684\u5f00\u53d1\u73af\u5883\uff0c\u8f6f\u4ef6\u548c\u7248\u672c\u90fd\u53ef\u4ee5\u7edf\u4e00\u3002\u8fd9\u6837\u53ef\u4ee5\u4e3a\u5f00\u53d1\u5e26\u6765\u5f88\u591a\u597d\u5904\uff0c\u907f\u514d\u7531\u4e8e\u5f00\u53d1\u73af\u5883\u4e0d\u4e00\u6837\u5f15\u8d77\u7684\u5404\u79cd\u4e0d\u540c\u9519\u8bef\u3002 \u901a\u8fc7\u4f20\u7edf\u65b9\u5f0f\u5b89\u88c5\u8f6f\u4ef6\uff0c\u5982\u679c\u914d\u7f6e\u4e86\u73af\u5883\u53d8\u91cf\uff0c\u4f8b\u5982 JAVA_HOME \uff0c PATH \u7b49\u7b49\uff0c\u90fd\u9700\u8981\u91cd\u542f\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u751a\u81f3\u8981\u7b49\u4e00\u4f1a\u624d\u80fd\u751f\u6548\u3002 Chocolatey \u63d0\u4f9b\u4e86\u4e00\u4e2a refreshenv \u547d\u4ee4\uff0c\u53ef\u4ee5\u5feb\u901f\u751f\u6548\u73af\u5883\u53d8\u91cf\u3002
"},{"location":"package_manager/Chocolatey%EF%BC%88Win%EF%BC%89/#_6","title":"\u66f4\u6539\u672c\u5730\u4ed3\u5e93","text":"\u5378\u8f7d Chocolatey \u53ea\u9700\u8981\u5220\u9664\u5b83\u5b89\u88c5\u7684\u6587\u4ef6\u5939\uff0c\u5e76\u5220\u9664\u5bf9\u5e94\u7684\u73af\u5883\u53d8\u91cf\u5373\u53ef\u3002\u5bf9\u4e8e\u4f7f\u7528 Chocolatey \u5b89\u88c5\u7684\u5176\u5b83\u8f6f\u4ef6\uff0c\u5982\u679c\u4e5f\u9700\u8981\u5378\u8f7d\u7684\u8bdd\uff0c\u9700\u8981\u5148\u624b\u52a8\u5378\u8f7d\u3002
Chocolatey \u66f4\u6ce8\u91cd\u7684\u662f\u6574\u4e2a\u56e2\u961f\u7684\u8f6f\u4ef6\u914d\u7f6e\u7edf\u4e00\uff0c\u7edf\u4e00\u7528\u67d0\u4e00\u4e2a\u8f6f\u4ef6\uff0c\u7edf\u4e00\u7528\u67d0\u4e00\u4e2a\u7248\u672c\uff0c\u7edf\u4e00\u5b89\u88c5\u914d\u7f6e(\u5305\u62ec\u5b89\u88c5\u8def\u5f84)\u3002\u5728\u5b9e\u9645\u5f00\u53d1\u4e2d\uff0c\u592a\u591a\u6b21\u56e0\u4e3a\u5b89\u88c5\u8def\u5f84\u5f15\u8d77\u95ee\u9898\uff0c\u4f8b\u5982\u8def\u5f84\u91cc\u6709\u7a7a\u683c\u6216\u4e2d\u6587\u7b49\u7b49\u3002\u6700\u597d\u5c31\u7528\u9ed8\u8ba4\u5b89\u88c5\u8def\u5f84\u3002
"},{"location":"package_manager/DNF%EF%BC%88RPM%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/","title":"DNF\uff08RPM\uff09\u5305\u7ba1\u7406\u5de5\u5177","text":"\u7531\u4e8e Yum \u4e2d\u8bb8\u591a\u957f\u671f\u5b58\u5728\u7684\u95ee\u9898\u4ecd\u672a\u5f97\u5230\u89e3\u51b3\uff0c\u56e0\u6b64 Yum \u5305\u7ba1\u7406\u5668\u5df2\u88ab DNF \u5305\u7ba1\u7406\u5668\u53d6\u4ee3\u3002\u8fd9\u4e9b\u95ee\u9898\u5305\u62ec\u6027\u80fd\u5dee\u3001\u5185\u5b58\u5360\u7528\u8fc7\u591a\u3001\u4f9d\u8d56\u89e3\u6790\u901f\u5ea6\u53d8\u6162\u7b49\u3002
DNF \u662f\u4e00\u6b3e Linux \u8f6f\u4ef6\u5305\u7ba1\u7406\u5de5\u5177\uff0c\u7528\u4e8e\u7ba1\u7406 RPM \u8f6f\u4ef6\u5305\u3002 DNF \u53ef\u4ee5\u67e5\u8be2\u8f6f\u4ef6\u5305\u4fe1\u606f\uff0c\u4ece\u6307\u5b9a\u8f6f\u4ef6\u5e93\u83b7\u53d6\u8f6f\u4ef6\u5305\uff0c\u81ea\u52a8\u5904\u7406\u4f9d\u8d56\u5173\u7cfb\u4ee5\u5b89\u88c5\u6216\u5378\u8f7d\u8f6f\u4ef6\u5305\uff0c\u4ee5\u53ca\u66f4\u65b0\u7cfb\u7edf\u5230\u6700\u65b0\u53ef\u7528\u7248\u672c\u3002
\u4f7f\u7528 Dnf \u7ba1\u7406\u8f6f\u4ef6\u5305 (openeuler.org)
"},{"location":"package_manager/Homebrew%EF%BC%88Linux%26Mac%EF%BC%89/","title":"Homebrew\uff08Linux&Mac\uff09","text":"Linuxbrew\uff08Mac OS \u7684 Homebrew \u5206\u652f\uff0c\u652f\u6301mac\u548clinux\uff0c\u7528\u6cd5\u5b8c\u5168\u76f8\u540c\uff09
\u8be6\u60c5\u9875\uff1a https://ostechnix.com/linuxbrew-common-package-manager-linux-mac-os-x/
\u641c\u7d22\u53ef\u7528\u7684\u8f6f\u4ef6\u5305\uff1a https://sitemap.filecroco.com/a/1.html
\u5728 Linux \u4e0a\u5b89\u88c5\u548c\u4f7f\u7528 Homebrew \u5305\u7ba1\u7406\u5668 | Linux \u4e2d\u56fd - \u77e5\u4e4e (zhihu.com)
"},{"location":"package_manager/Nix%EF%BC%88%E5%A3%B0%E6%98%8E%E5%BC%8F%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/","title":"Nix\uff08\u58f0\u660e\u5f0f\uff09\u5305\u7ba1\u7406\u5de5\u5177","text":"Nix\uff1a\u53ef\u91cd\u73b0\u7684\u6784\u5efa\u548c\u90e8\u7f72 (nixos.org)
"},{"location":"package_manager/Scoop%EF%BC%88Win%EF%BC%89/","title":"Scoop(Win)","text":"scoop \u5fc5\u8981\u7ec4\u4ef6\uff1a 7zip git innounp lessmsi dark sudo aria2
main : https://github.com/ScoopInstaller/Scoop
"},{"location":"package_manager/Scoop%EF%BC%88Win%EF%BC%89/#scoop","title":"\u4e00\u3001\u5b89\u88c5 scoop","text":"# \u8bbe\u7f6e\u81ea\u5b9a\u4e49\u5b89\u88c5\u8def\u5f84\uff1aD:\\Software\\Scoop\n$env:SCOOP='D:\\Software\\Scoop';[environment]::setEnvironmentVariable('SCOOP',$env:SCOOP,'User')\n\n# \u5141\u8bb8\u6267\u884c\u672c\u5730\u811a\u672c\nset-executionpolicy remotesigned -scope currentuser\n\n# \u4ece github \u4e0b\u8f7d\u5e76\u5b89\u88c5 scoop\niex (new-object net.webclient).downloadstring('https://get.scoop.sh')\n
"},{"location":"package_manager/Scoop%EF%BC%88Win%EF%BC%89/#scoop_1","title":"\u4e8c\u3001\u914d\u7f6escoop","text":"scoop config SCOOP_REPO <URL>
\u8f6f\u4ef6\u4ed3\u5e93 bucket \u6e90\uff1a\u8f6f\u4ef6\u6e90\u4f7f\u7528 git \u7248\u672c\u7ba1\u7406\uff0c\u56e0\u6b64\u53ef\u4ee5\u4f7f\u7528\u4fee\u6539\u8fdc\u7a0b\u4ed3\u5e93\u7684\u5730\u5740\u4fee\u6539\u6e90\u5730\u5740\u52a0\u5feb\u901f\u5ea6\u3002
cd $env:SCOOP\\buckets\\Main \ngit remote set-url origin <URL>\n\ncd $env:SCOOP\\buckets\\Extras\ngit remote set-url origin <URL>\n
cd $env:SCOOP\\buckets\\Main \u8fd9\u662f\u4e00\u4e2a git \u7ba1\u7406\u7684\u6587\u4ef6\u5939\n git remote set-url origin https://hub.fastgit.org/ScoopInstaller/Main\n
aria2-enabled (\u9ed8\u8ba4\u503c: true)\naria2-retry-wait (\u9ed8\u8ba4\u503c: 2)\naria2-split (\u9ed8\u8ba4\u503c: 5)\naria2-max-connection-per-server (\u9ed8\u8ba4\u503c: 5)\naria2-min-split-size (\u9ed8\u8ba4\u503c: 5M)\n
#scoop bucket remove main\nscoop bucket add main 'https://github.com/ScoopInstaller/Main'\nscoop bucket add extras 'https://github.com/ScoopInstaller/scoop-extras'\nscoop bucket add versions 'https://github.com/ScoopInstaller/Versions'\nscoop bucket add jetbrains 'https://github.com/Ash258/Scoop-JetBrains'\nscoop bucket add java 'https://github.com/ScoopInstaller/Java'\nscoop bucket add dorado https://github.com/chawyehsu/dorado\nscoop bucket add scoopet https://github.com/ivaquero/scoopet\n
scoop update
scoop export >> xxx.txt
scoop bucket known
scoop bucket help
scoop bucket add xxxbucket
scoop bucket rm xxx \u4ed3\u5e93
\u5e38\u7528\u547d\u4ee4\u8bf4\u660e
alias Manage scoop aliases # \u7ba1\u7406\u6307\u4ee4\u7684\u66ff\u8eab\nbucket Manage Scoop buckets # \u7ba1\u7406\u8f6f\u4ef6\u4ed3\u5e93\ncache Show or clear the download cache # \u67e5\u770b\u4e0e\u7ba1\u7406\u7f13\u5b58\ncheckup Check for potential problems # \u505a\u4e2a\u4f53\u68c0\ncleanup Cleanup apps by removing old versions # \u6e05\u7406\u7f13\u5b58\u4e0e\u65e7\u7248\u672c\u8f6f\u4ef6\u5305\nconfig Get or set configuration values # \u914d\u7f6e Scoop\ncreate Create a custom app manifest # \u521b\u5efa\u81ea\u5b9a\u4e49\u8f6f\u4ef6\u5305\ndepends List dependencies for an app # \u67e5\u770b\u4f9d\u8d56\nexport Exports (an importable) list of installed apps # \u5bfc\u51fa\u8f6f\u4ef6\u5305\u5217\u8868\nhelp Show help for a command # \u663e\u793a\u5e2e\u52a9\u6307\u4ee4\nhold Hold an app to disable updates # \u7981\u6b62\u8f6f\u4ef6\u5305\u66f4\u65b0\nhome Opens the app homepage # \u6253\u5f00\u8f6f\u4ef6\u5305\u4e3b\u9875\ninfo Display information about an app # \u663e\u793a\u8f6f\u4ef6\u5305\u4fe1\u606f\ninstall Install apps # \u5b89\u88c5\u8f6f\u4ef6\u5305\u7684\u6307\u4ee4\nlist List installed apps # \u5217\u51fa\u6240\u6709\u5df2\u5b89\u88c5\u8f6f\u4ef6\u5305\nprefix Returns the path to the specified app # \u67e5\u770b\u8f6f\u4ef6\u5305\u8def\u5f84\nreset Reset an app to resolve conflicts # \u6062\u590d\u8f6f\u4ef6\u5305\u7248\u672c\nsearch Search available apps # \u641c\u7d22\u8f6f\u4ef6\u5305\nstatus Show status and check for new app versions # \u67e5\u770b\u8f6f\u4ef6\u5305\u66f4\u65b0\u72b6\u6001\nunhold Unhold an app to enable updates # \u542f\u52a8\u8f6f\u4ef6\u5305\u66f4\u65b0\nuninstall Uninstall an app # \u5378\u8f7d\u8f6f\u4ef6\u5305\u7684\u6307\u4ee4\nupdate Update apps, or Scoop itself # \u66f4\u65b0\u8f6f\u4ef6\u5305\nvirustotal Look for app hash on virustotal.com # \u67e5\u770b\u54c8\u5e0c\u503c\nwhich Locate a shim/executable (similar to 'which' on Linux) # \u67e5\u770b\u53ef\u6267\u884c\u7a0b\u5e8f\u8def\u5f84\n
"},{"location":"package_manager/Scoop%EF%BC%88Win%EF%BC%89/#scoop_2","title":"\u5378\u8f7dScoop","text":"scoop uninstall scoop
\uff1a\u8fd9\u5c06\u5378\u8f7d Scoop \u548c\u6240\u6709\u4e0e Scoop \u4e00\u8d77\u5b89\u88c5\u7684\u7a0b\u5e8f!
The scoop \u914d\u7f6e\u6587\u4ef6\u4fdd\u5b58\u5728 ~/.config/scoop/config.json
buckets \u6e90\u914d\u7f6e\u6587\u4ef6\u4fdd\u5b58\u5728 SCOOP\\apps\\scoop\\current\\buckets.json
{\n\"main\": \"https://github.com/ScoopInstaller/Main\",\n\"extras\": \"https://github.com/ScoopInstaller/Extras\"\n}\n
"},{"location":"package_manager/Scoop%EF%BC%88Win%EF%BC%89/#scoop_3","title":"Scoop \u6280\u5de7\u548c\u77e5\u8bc6","text":"\u94fe\u63a5: https://blog.csdn.net/weixin_39986178/article/details/110900876
\u76f8\u6bd4\u4e8e Chocolatey \uff0c Scoop \u5219\u66f4\u4e13\u6ce8\u4e8e\u5f00\u6e90\u7684\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u4f7f\u7528 Scoop \u5b89\u88c5\u7684\u5e94\u7528\u7a0b\u5e8f\u901a\u5e38\u79f0\u4e3a\"\u4fbf\u643a\u5f0f\"\u5e94\u7528\u7a0b\u5e8f\uff0c\u9700\u8981\u7684\u6743\u9650\u66f4\u5c11\uff0c\u5bf9\u7cfb\u7edf\u4ea7\u751f\u7684\u526f\u4f5c\u7528\u4e5f\u66f4\u5c11\uff0c\u6240\u4ee5\u6211\u8fd9\u91cc\u9009\u62e9\u4e86\u4f7f\u7528 Scoop\u3002 \u6ce8\u610f\uff1a\u5bf9\u4e8e\u50cf VirtualBox\u3001Docker for Windows \uff0c\u8f93\u5165\u6cd5\u7b49\u8fd9\u4e9b\u9700\u8981\u9ad8\u6743\u9650\u7684\u8f6f\u4ef6\u8fd8\u662f\u901a\u8fc7\u5728\u5b98\u7f51\u4e0b\u8f7d\u5b89\u88c5\u5305\u8fdb\u884c\u5b89\u88c5\u3002
"},{"location":"package_manager/WinGet%EF%BC%88Win%EF%BC%89/","title":"WinGet\uff08Win\uff09","text":"WinGet \uff08 Windows \u7a0b\u5e8f\u5305\u7ba1\u7406\u5668\uff1a Windows Package Manager \uff09\u662f\u5fae\u8f6f\u4e3a win10 \u5f00\u53d1\u7684\u4e00\u6b3e\u5f00\u6e90\u7684\u8f6f\u4ef6\u5305\u7ba1\u7406\u5668\uff0c\u4e8e 2020 \u5e74 5 \u6708\u7684 Microsoft Build \u5f00\u53d1\u8005\u5927\u4f1a\u4e0a\u9996\u5ba3\u3002
\u524d\u63d0\uff1aWindows 10 1709 \u53ca\u4ee5\u4e0a\u7248\u672c \u5f53\u524d WinGet \u652f\u6301\u7684\u5b89\u88c5\u7a0b\u5e8f\u7c7b\u578b\u5c1a\u4e0d\u591a\uff0c\u9664\u4e86 EXE\u3001 MSIX \u3001 MSI \u4e09\u79cd\u4e4b\u5916\uff0c\u8fd8\u80fd\u591f\u5728\u81ea\u5b9a\u4e49\u914d\u7f6e\u540e\u4e0b\u8f7d\u90e8\u5206\u5fae\u8f6f\u5e94\u7528\u5546\u5e97\u7684\u7a0b\u5e8f\u3002
"},{"location":"package_manager/WinGet%EF%BC%88Win%EF%BC%89/#_1","title":"\u4e0b\u8f7d\u3001\u5b89\u88c5\u548c\u9a8c\u8bc1","text":"\u4f60\u53ef\u4ee5\u5728 Github Release \u4e0b\u8f7d .appxbundle \u683c\u5f0f\u7684\u6587\u4ef6\uff0c\u53cc\u51fb\u6253\u5f00\u5e76\u8fd0\u884c\u3002
\u5982\u679c\u51fa\u73b0\u300c\u6b64\u7535\u8111\u4e0d\u652f\u6301\u6253\u5f00\u8be5\u7c7b\u578b\u6587\u4ef6\u300d\u7684\u63d0\u793a\uff0c\u5219\u53ef\u5728 Win + I
\u8fdb\u5165\u8bbe\u7f6e -> \u66f4\u65b0\u548c\u5b89\u5168 -> \u5f00\u53d1\u8005\u9009\u9879 -> \u6253\u5f00\u5f00\u53d1\u4eba\u5458\u6a21\u5f0f\u3002
\u8f93\u5165 winget \u53ef\u4ee5\u67e5\u770b\u7b80\u7565\u5e2e\u52a9\u6587\u6863\uff1b\u8f93\u5165 winget -v \u67e5\u770b\u7248\u672c\u4fe1\u606f
"},{"location":"package_manager/WinGet%EF%BC%88Win%EF%BC%89/#_2","title":"\u57fa\u672c\u4f7f\u7528","text":"\u663e\u793a\u7b80\u7565\u5e2e\u52a9\u6587\u6863\uff1a winget -?\uff08-?\u53ef\u9009\uff09\uff1b\u67e5\u770b\u7279\u5b9a\u547d\u4ee4\u7684\u8be6\u7ec6\u5e2e\u52a9\u6587\u6863\uff1a winget [] -?\uff0c\u5982 winget install -?\u663e\u793a\u8f6f\u4ef6\u8be6\u7ec6\u4fe1\u606f\uff1a winget show \u641c\u7d22\u8f6f\u4ef6\uff1a winget search \u5b89\u88c5\u8f6f\u4ef6\uff1awinget install
\u662f\u7684\uff0c\u5982\u4f60\u6240\u89c1\uff0c WinGet \u5e76\u6ca1\u6709\u81ea\u52a8\u5f00\u542f\u5378\u8f7d\u3001\u5347\u7ea7\u7b49\u529f\u80fd\uff0c\u8fd9\u4e5f\u662f\u5176\u5728\u53d1\u5e03\u4e4b\u540e\u5f88\u957f\u65f6\u95f4\u4e0d\u6e29\u4e0d\u706b\u7684\u91cd\u8981\u539f\u56e0\u3002
\u4f46\u662f\u4e0d\u8981\u7740\u6025\uff0c\u622a\u6b62\u5230 2021/03/25 \u53d1\u5e03\u7684\u6700\u65b0\u9884\u89c8\u7248 v0.2.10771 \uff0c WinGet \u5b9e\u9a8c\u6027\u529f\u80fd\uff08\u9700\u8981\u7528\u6237\u81ea\u542f\uff09\u7684\u6570\u91cf\u5df2\u7ecf\u589e\u52a0\u5230\u4e86\u516b\u4e2a\uff0c\u5176\u4e2d\u5c31\u5305\u62ec uninstall \u3001 upgrade \u3001 list \u7b49\u91cd\u8981\u529f\u80fd\uff0c\u4ee5\u53ca\u652f\u6301\u5b89\u88c5 Microsoft Store \u4e0a\u7684\u5e94\u7528\u7a0b\u5e8f\uff01
\u5982\u679c\u60f3\u8981\u5f00\u542f\u5b9e\u9a8c\u529f\u80fd\uff0c\u53ef\u4ee5\u5728\u7ec8\u7aef\u8f93\u5165 winget settiings\uff0c\u6253\u5f00 WinGet \u914d\u7f6e\u6587\u4ef6 settings.json \u589e\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff1a
\"experimentalFeatures\": { \"uninstall\": true, \"upgrade\": true, \"list\": true, \"experimentalMSStore\": true},
\u5982\u679c\u60f3\u8981\u66f4\u6539 winget \u663e\u793a\u7684\u8fdb\u5ea6\u6761\u89c6\u89c9\u6548\u679c\uff0c\u53ef\u4ee5\u5728 setting.json \u91cc\u589e\u52a0\uff1a \"visual\": { \"progressBar\": \"accent\"},# \u4e09\u79cd\u6837\u5f0f\u53ef\u9009\uff1aaccent(\u9ed8\u8ba4\u503c)\u3001 retro\u3001 rainbow
winget list > winget.txt \u540c\u6837\u652f\u6301\u4e00\u952e\u5bfc\u51fa\u8f6f\u4ef6\u5217\u8868\uff0c\u65b9\u4fbf\u5907\u4efd\u548c\u6362\u673a\u91cd\u88c5\u3002
"},{"location":"package_manager/WinGet%EF%BC%88Win%EF%BC%89/#microsoft-store","title":"\u4e0b\u8f7d Microsoft Store \u8f6f\u4ef6","text":"\u5b9e\u9a8c\u529f\u80fd\u5f00\u542f\"experimentalMSStore\": true\u4e4b\u540e\uff0cwinget \u53ef\u4ee5\u4e0b\u8f7d MStore \u7684\u8f6f\u4ef6\u4e86\uff08\u4e0d\u8fc7\u76ee\u524d\u652f\u6301\u7684\u5e76\u4e0d\u591a\uff09\u3002
winget source list \u67e5\u770b\u8f6f\u4ef6\u6e90\u5217\u8868\uff0c\u53d1\u73b0\u9664\u4e86 winget \u6e90\u4e4b\u5916\uff0cMSStore \u6e90\u5df2\u7ecf\u6dfb\u52a0\u4e0a\u4e86\u3002\u90e8\u5206\u5546\u5e97\u5185\u8f6f\u4ef6\u53ef\u4ee5\u6b63\u5e38\u4e0b\u8f7d\u5b89\u88c5\u4e86\u3002
"},{"location":"package_manager/WinGet%EF%BC%88Win%EF%BC%89/#_3","title":"\u5378\u8f7d\u5176\u4ed6\u6e90\u5b89\u88c5\u7684\u8f6f\u4ef6","text":"winget \u53ef\u4ee5\u5378\u8f7d winget list \u663e\u793a\u51fa\u7684\u6240\u6709\u8f6f\u4ef6\u3002\u5305\u62ec\u7535\u8111\u4e0a\u7684\u5927\u591a\u6570\u8f6f\u4ef6\uff0c\u5982 Windows \u7cfb\u7edf\u81ea\u5e26\u7684\u3001\u624b\u52a8\u5b89\u88c5\u7684\u3001 Chocolatey \u5b89\u88c5\u7684\u90e8\u5206\u7b49\u3002\u552f\u4e00\u4e0d\u8db3\u7684\u662f\uff0c\u5378\u8f7d\u65f6\u4f1a\u88ab\u5f39\u51fa\u7684\u5378\u8f7d\u7a97\u53e3\u6253\u65ad\uff0c\u964d\u4f4e\u4e86\u81ea\u52a8\u5316\u7684\u4e00\u81f4\u6027\u3002
winget \u53ef\u4ee5\u5378\u8f7d\u591a\u79cd\u7c7b\u578b\u7684\u8f6f\u4ef6\u7a0b\u5e8f
"},{"location":"package_manager/YaST%20%26%20Zypper%EF%BC%88RPM%EF%BC%89/","title":"YaST & Zypper\uff08RPM\uff09","text":"openSUSE \u662f\u4e00\u4e2a\u72ec\u7acb\u7684 Linux \u53d1\u884c\u7248\u5206\u652f\uff0c\u4f7f\u7528 RPM \u4f5c\u4e3a\u5206\u53d1\u7684\u8f6f\u4ef6\u5305\u683c\u5f0f\uff0c\u91c7\u7528 zypper \u4f5c\u4e3a\u5305\u7ba1\u7406\u5668\uff0c\u540c\u65f6\u517c\u5bb9\u591a\u79cd\u8ba1\u7b97\u673a\u786c\u4ef6\u3002 openSUSE \u6709\u4e24\u4e2a\u6b63\u5f0f\u7684\u53d1\u884c\u7248\uff1a Leap \u548c Tumbleweed \u3002
"},{"location":"package_manager/YaST%20%26%20Zypper%EF%BC%88RPM%EF%BC%89/#_1","title":"\u8f6f\u4ef6\u5305\u7684\u5206\u5c42\u7ba1\u7406","text":"OpenSUSE \u662f\u4e00\u4e2a\u4e00\u76f4\u88ab\u4f4e\u4f30\u7684\u591a\u529f\u80fd Linux \u64cd\u4f5c\u7cfb\u7edf
"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/","title":"pacman\uff08Arch\uff09\u5305\u7ba1\u7406\u5de5\u5177","text":"Manjaro \u6362\u6e90
sudo pacman-mirrors -i -c China -m rank\nsudo pacman -Syy\n
"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#1","title":"1. \u66f4\u65b0\u7cfb\u7edf","text":"\u547d\u4ee4 \u89e3\u91ca\npacman -Syu \u5bf9\u6574\u4e2a\u7cfb\u7edf\u8fdb\u884c\u66f4\u65b0\uff08\u5e38\u7528\uff09\npacman -Syy \u5f3a\u5236\u66f4\u65b0\npacman -Syudd \u4f7f\u7528 -dd\u8df3\u8fc7\u6240\u6709\u68c0\u6d4b\n
"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#2","title":"2. \u641c\u7d22\u5305","text":"\u547d\u4ee4 \u89e3\u91ca\npacman -Ss keyword \u5728\u4ed3\u5e93\u4e2d\u641c\u7d22\u542b\u5173\u952e\u5b57\u7684\u5305\uff08\u5e38\u7528\uff09pacman -Ss '^fcitx-'\npacman -Qs keyword \u641c\u7d22\u5df2\u5b89\u88c5\u7684\u5305\uff08\u5e38\u7528\uff09pacman -Qs '^fcitx-'\npacman -Qi package_name \u67e5\u8be2\u672c\u5730\u5b89\u88c5\u5305\u7684\u8be6\u7ec6\u4fe1\u606f\npacman -Ql package_name \u5217\u51fa\u8be5\u5305\u7684\u6587\u4ef6\npacman -Fs keyword \u6309\u6587\u4ef6\u540d\u67e5\u627e\u8f6f\u4ef6\u5e93\npacman -Si package_name \u663e\u793a\u8fdc\u7a0b\u8f6f\u4ef6\u5305\u7684\u8be6\u5c3d\u7684\u4fe1\u606f\npacman -Qii package_name \u4f7f\u7528\u4e24\u4e2a -i \u5c06\u540c\u65f6\u663e\u793a\u5907\u4efd\u6587\u4ef6\u548c\u4fee\u6539\u72b6\u6001\npacman -Ql package_name \u8981\u83b7\u53d6\u5df2\u5b89\u88c5\u8f6f\u4ef6\u5305\u6240\u5305\u542b\u6587\u4ef6\u7684\u5217\u8868\npacman -Fl package_name \u67e5\u8be2\u8fdc\u7a0b\u5e93\u4e2d\u8f6f\u4ef6\u5305\u5305\u542b\u7684\u6587\u4ef6\npacman -Qk package_name \u68c0\u67e5\u8f6f\u4ef6\u5305\u5b89\u88c5\u7684\u6587\u4ef6\u662f\u5426\u90fd\u5b58\u5728\npacman -Fo /path/to/file_name \u67e5\u8be2\u6587\u4ef6\u5c5e\u4e8e\u8fdc\u7a0b\u6570\u636e\u5e93\u4e2d\u7684\u54ea\u4e2a\u8f6f\u4ef6\u5305\npacman -Qdt \u8981\u7f57\u5217\u6240\u6709\u4e0d\u518d\u4f5c\u4e3a\u4f9d\u8d56\u7684\u8f6f\u4ef6\u5305(\u5b64\u7acb orphans )\npacman -Qet \u8981\u7f57\u5217\u6240\u6709\u660e\u786e\u5b89\u88c5\u800c\u4e14\u4e0d\u88ab\u5176\u5b83\u5305\u4f9d\u8d56\u7684\u8f6f\u4ef6\u5305\npactree package_name \u8981\u663e\u793a\u8f6f\u4ef6\u5305\u7684\u4f9d\u8d56\u6811\nwhoneeds package_name \u68c0\u67e5\u4e00\u4e2a\u5b89\u88c5\u7684\u8f6f\u4ef6\u5305\u88ab\u90a3\u4e9b\u5305\u4f9d\u8d56pkgtoolsAUR\u4e2d\u7684whoneeds\npactree -r package_name \u68c0\u67e5\u4e00\u4e2a\u5b89\u88c5\u7684\u8f6f\u4ef6\u5305\u88ab\u90a3\u4e9b\u5305\u4f9d\u8d56\n
"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#3","title":"3. \u5b89\u88c5\u5305","text":"\u547d\u4ee4 \u89e3\u91ca\npacman -S package_name \u6267\u884c pacman -S firefox \u5c06\u5b89\u88c5 Firefox\uff08\u5e38\u7528\uff09\npacman -Sy package_name \u5c06\u5728\u540c\u6b65\u5305\u6570\u636e\u5e93\u540e\u518d\u6267\u884c\u5b89\u88c5\u3002\npacman -Sv package_name \u5728\u663e\u793a\u4e00\u4e9b\u64cd\u4f5c\u4fe1\u606f\u540e\u6267\u884c\u5b89\u88c5\u3002\npacman -U local_package_name \u5b89\u88c5\u672c\u5730\u5305\uff0c\u5176\u6269\u5c55\u540d\u4e3apkg.tar.gz\u6216pkg.tar.xz\npacman -U url \u5b89\u88c5\u4e00\u4e2a\u8fdc\u7a0b\u5305\uff08\u4e0d\u5728 pacman \u914d\u7f6e\u7684\u6e90\u91cc\u9762\uff09\n
"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#4","title":"4. \u5220\u9664\u5305","text":"\u547d\u4ee4 \u89e3\u91ca\npacman -R package_name \u8be5\u547d\u4ee4\u5c06\u53ea\u5220\u9664\u5305\uff0c\u4fdd\u7559\u5176\u5168\u90e8\u5df2\u7ecf\u5b89\u88c5\u7684\u4f9d\u8d56\u5173\u7cfb\npacman -Rs package_name \u5728\u5220\u9664\u5305\u7684\u540c\u65f6\uff0c\u5220\u9664\u5176\u6240\u6709\u6ca1\u6709\u88ab\u5176\u4ed6\u5df2\u5b89\u88c5\u8f6f\u4ef6\u5305\u4f7f\u7528\u7684\u4f9d\u8d56\u5173\u7cfb\uff08\u5e38\u7528\uff09\npacman -Rsc package_name \u5728\u5220\u9664\u5305\u7684\u540c\u65f6\uff0c\u5220\u9664\u6240\u6709\u4f9d\u8d56\u8fd9\u4e2a\u8f6f\u4ef6\u5305\u7684\u7a0b\u5e8f\npacman -Rd package_name \u5728\u5220\u9664\u5305\u65f6\u4e0d\u68c0\u67e5\u4f9d\u8d56\n
"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#5","title":"5. \u5176\u4ed6\u7528\u6cd5","text":"pacman -Sw package_name \u53ea\u4e0b\u8f7d\u5305\uff0c\u4e0d\u5b89\u88c5\u3002\npacman -Sc \u6e05\u7406\u672a\u5b89\u88c5\u7684\u5305\u6587\u4ef6\uff08\u5e38\u7528\uff09\u5305\u6587\u4ef6\u4f4d\u4e8e /var/cache/pacman/pkg/ \u76ee\u5f55\npacman -Scc \u6e05\u7406\u6240\u6709\u7684\u7f13\u5b58\u6587\u4ef6\uff08\u5e38\u7528\uff09\n
"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#manjaro","title":"Manjaro\u8f6f\u4ef6\u7ba1\u7406","text":""},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#1_1","title":"1. \u5207\u6362\u56fd\u5185\u6700\u5feb\u7684\u8f6f\u4ef6\u6e90","text":"\u5927\u591a\u6570 Linux \u53d1\u884c\u7248\u90fd\u662f\u6765\u81ea\u56fd\u5916\uff0c\u81ea\u7136\u5b98\u65b9\u4ed3\u5e93\u5730\u5740\u4e5f\u5728\u56fd\u5916\uff0c\u6240\u4ee5\u4e00\u822c\u60c5\u51b5\u4e0b\u5b89\u88c5\u5b8c Linux \u53d1\u884c\u7248\u4e4b\u540e\u505a\u7684\u7b2c\u4e00\u4ef6\u4e8b\u5c31\u662f\u5207\u6362\u6e90\u4e3a\u56fd\u5185\u7684\u6e90\u3002\u6e90\u7684\u5207\u6362\u64cd\u4f5c\uff0c\u5927\u90e8\u5206\u53d1\u884c\u7248\u4e5f\u90fd\u652f\u6301 GUI \u5207\u6362\uff0c\u8fd9\u91cc\u53ea\u5217\u51fa\u5728\u547d\u4ee4\u884c\u4e0b\u5982\u4f55\u64e6\u64cd\u4f5c
"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#1-pacman-mirrors","title":"1. \u7b2c\u4e00\u90e8\u5206\u4f7f\u7528 pacman-mirrors \u66f4\u65b0\u5b98\u65b9\u8f6f\u4ef6\u6e90","text":""},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#11","title":"1.1 \u6309\u7167\u5730\u533a\u81ea\u52a8\u66f4\u65b0\u4e3a\u6700\u5feb\u6700\u7a33\u5b9a\u7684\u8f6f\u4ef6\u6e90\u955c\u50cf\u5730\u5740","text":"sudo pacman-mirrors --country China
sudo pacman-mirrors --interactive --default
sudo pacman -Syyu# \u8f6f\u4ef6\u6e90\u66f4\u65b0\u5b8c\u6210\u4e4b\u540e\u8fdb\u884c\u7cfb\u7edf\u8f6f\u4ef6\u66f4\u65b0\u64cd\u4f5c
sudo pacman-mirrors -l
\u53c2\u8003\u7ffb\u8bd1\u81ea\uff1a https://wiki.manjaro.org/index.php?title=Use_pacman-mirrors_to_Set_the_Fastest_Download_Server
"},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#2-pacman","title":"2. \u4f7f\u7528 pacman \u7ba1\u7406\u8f6f\u4ef6","text":""},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#2-pacman_1","title":"2. \u7b2c\u4e8c\u90e8\u5206\u4f7f\u7528 pacman \u7ba1\u7406\u8f6f\u4ef6","text":""},{"location":"package_manager/pacman%EF%BC%88Arch%EF%BC%89%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/#21","title":"2.1 \u540c\u6b65\u5e76\u4e14\u66f4\u65b0\u4f60\u7684\u7cfb\u7edf","text":"sudo pacman -Syyu
sudo pacman -Ss [software package name]
sudo pacman -Qs [software package name]
sudo pacman -Qi [software package name]
# \u9644\u5e26\u8be6\u7ec6\u4fe1\u606f sudo pacman -Qii [software package name]
# \u9644\u5e26\u66f4\u52a0\u8be6\u7ec6\u7684\u5305\u4fe1\u606f sudo pacman -Ql
# \u5217\u51fa\u6240\u6709\u5b89\u88c5\u7684\u8f6f\u4ef6\u5305
sudo pactree [software package name]
sudo pacman -Qdt
sudo pacman -Rs $(pacman -Qdtq)
sudo pacman -Syu [software package name]
# \u4ece\u8f6f\u4ef6\u4ed3\u5e93\u5b89\u88c5 yay -S [software package name]
# Packages from the AUR sudo pacman -U [/package_path/][software package name.pkg.tar.xz]
# \u4ece\u672c\u5730\u5b89\u88c5
pacman -U http://www.examplepackage/repo/examplepkg.tar.xz
# \u4ece\u7f51\u7edc\u5b89\u88c5\u3010\u975e\u5b98\u65b9\u4ed3\u5e93\u3011
sudo pacman -R [software package name]
sudo pacman -Rs [software package name]
# \u540c\u65f6\u5220\u9664\u4f9d\u8d56 sudo pacman -Rns [software package name]
# \u5220\u9664\u8f6f\u4ef6\u53ca\u5176\u4f9d\u8d56\uff0c\u8fd8\u6709pacman\u751f\u6210\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u5373\u66f4\u5f7b\u5e95\u7684\u5220\u9664
sudo pacman -Sc
sudo pacman -Scc
# \u66f4\u5f7b\u5e95\u7684\u6e05\u7406
\u5173\u4e8e pacman \u5e38\u7528\u5c31\u8fd9\u4e9b\u4e86\uff0c\u66f4\u591a\u8bf7\u4f7f\u7528 man pacman OR pacman -h \u53bb\u67e5\u770b \u53c2\u8003\u7ffb\u8bd1\u81ea\uff1a https://wiki.manjaro.org/index.php?title=Pacman_Overview From < https://csdnimg.cn/release/phoenix/template/new_img/articleReadEyes.png>
"},{"location":"platform/GitBucket/","title":"GitBucket","text":""},{"location":"platform/GitBucket/#_1","title":"\u7b80\u4ecb","text":"GitBucket \u662f\u4e00\u4e2a\u975e\u5e38\u597d\u7684\u514d\u8d39\u5f00\u6e90\uff0c\u6613\u90e8\u7f72\u7684\u5f00\u6e90Git\u5e73\u53f0\uff0c\u540c\u65f6\u62e5\u6709\u8bf8\u591a\u4f18\u52bf\uff0c\u867d\u7136\u4e5f\u6709\u5f0a\u7aef\u3002
\u4f18\u70b9
\u5b8c\u5168\u5f00\u6e90\uff0c\u6ca1\u6709\u4efb\u4f55\u9650\u5236\uff1b
\u8fd0\u884c\u5728JVM\u5e73\u53f0\u4e0a\uff0c\u975e\u5e38\u5bb9\u6613\u90e8\u7f72\uff1b
\u7c7b\u4f3c\u4e8eGitHub\u7684\u754c\u9762\uff0c\u64cd\u4f5c\u5bb9\u6613\uff1b
\u4e30\u5bcc\u7684\u63d2\u4ef6\uff0c\u4f7f\u5f97\u6269\u5c55\u975e\u5e38\u5bb9\u6613\uff1b
\u63d0\u4f9b\u4e86\u5927\u91cf\u517c\u5bb9GitHub\u7684API\uff1b
\u7f3a\u70b9
\u6709\u70b9\u6b8b\u5e9f\u7684\u6743\u9650\u7ba1\u7406\uff08\u6743\u9650\u6ca1\u6709\u4f9d\u7167\u516c\u5f00\uff0c\u79c1\u6709\u5e93\u533a\u5206\uff09\uff1b
\u5f00\u53d1\u8bed\u8a00\u4e3aScala\uff0c\u5bf9\u4e8e\u975eScala\u7528\u6237\u81ea\u5df1\u5199\u63d2\u4ef6\u6709\u4e00\u5b9a\u95e8\u69db\uff1b
\u7531\u4e8e\u4f5c\u8005\u6682\u672a\u5b8c\u6210\u5e73\u53f0\u5347\u7ea7\uff0c\u6682\u65f6\u65e0\u6cd5\u90e8\u7f72\u5728\u9664Tomcat\u4e4b\u5916\u7684Servlet\u5bb9\u5668\u3002
\u4e0b\u8f7d Release \u91cc\u9762\u7684war\u5230\u4f60\u7684\u670d\u52a1\u5668\uff1b
java -jar gitbucket.war
\u542f\u52a8\u3002\uff08\u7b14\u8005\u7528\u7684\u662fJDK17\uff09\uff1b
(\u53ef\u9009)\u5c06\u542f\u52a8\u7aef\u53e3\u53cd\u5411\u4ee3\u7406\u5230\u5b50\u57df\u540d\u3002
\u5b98\u7f51: https://chat.openai.com/
ChatGPT\u662f\u4e00\u79cd\u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u5904\u7406\u6280\u672f\u7684\u4eba\u5de5\u667a\u80fd\u804a\u5929\u673a\u5668\u4eba\uff0c\u4f7f\u7528GPT\uff08Generative Pre-trained Transformer\uff09\u6280\u672f\u751f\u6210\u4eba\u7c7b\u8bed\u8a00\u54cd\u5e94\u3002
\u529f\u80fd:
\u914d\u7f6e\u65b9\u6cd5\uff1a
\u5b98\u7f51\uff1a Excalidraw's repository
Excalidraw \u662f\u4e00\u6b3e\u5f00\u6e90\u7684\u753b\u56fe\u5de5\u5177\uff0c\u53ef\u4ee5\u201c\u624b\u7ed8\u201d\u4e00\u4e9b\u7b80\u5355\u7684\u6d41\u7a0b\u56fe\uff0c\u663e\u793a\u6548\u679c\u50cf\u662f\u7528\u7b14\u5728\u7eb8\u4e0a\u753b\u7684\u4e00\u6837\uff0c\u64cd\u4f5c\u7b80\u5355\u3002
\u540c\u65f6\u5176\u62e5\u6709\u4e30\u5bcc\u7684\u7d20\u6750\u5e93\uff0c\u5e2e\u52a9\u6bcf\u4e2a\u4eba\u66f4\u597d\u5730\u7ed8\u56fe\u3002
\u9664\u4e86\u5728\u7ebf\u7f51\u7ad9\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u6d4f\u89c8\u5668\u6269\u5c55\u76f4\u63a5\u5b89\u88c5\u5230\u672c\u5730\u4f7f\u7528\uff0c\u5177\u4f53\u53ef\u4ee5\u5728\u5b98\u65b9\u6587\u6863\u67e5\u770b\u3002
"},{"location":"platform/flydav/","title":"FlyDav","text":""},{"location":"platform/flydav/#_1","title":"\u7b80\u4ecb","text":"FlyDav \u662f\u4e00\u4e2a\u8f7b\u91cf\u7ea7\u7684\u5f00\u6e90 webdav \u670d\u52a1\u5668
\u4f18\u70b9
\u7f3a\u70b9
\u6700\u7b80\u90e8\u7f72\uff1a
./flydav -H 0.0.0.0
\u6765\u542f\u52a8\u670d\u52a1\u5668\u3002\u7136\u540e\u4f60\u8981\u8f93\u5165\u9ed8\u8ba4\u7528\u6237 flydav
\u7684\u5bc6\u7801\u3002http://YOUR_IP:7086/webdav
\u3002\u5b8c\u6574\u90e8\u7f72\u53ef\u53c2\u9605\u6587\u6863\u3002
"},{"location":"platform/gpt-paper/","title":"Gpt paper","text":"\u672c\u6587\u4ecb\u7ecd\u4f7f\u7528new bing\u548cchatgpt\u641e\u79d1\u7814\u7684\u5177\u4f53\u65b9\u6cd5\uff0c\u89c6\u9891\u6559\u7a0b\u53ef\u53c2\u770bbilibili\u4f7f\u7528\u8bf4\u660e
"},{"location":"platform/gpt-paper/#_1","title":"\u5185\u5bb9","text":"\u5173\u4e8e\u5982\u4f55\u6b63\u786e\u4f7f\u7528new bing\uff0c\u5982\u4f55\u4e0d\u8f6c\u5230\u56fd\u5185\u7279\u4f9b\u7248\u3002\u4e0d\u662f\u672c\u8282\u7684\u5185\u5bb9
new bing(\u6d88\u5316\u4ee5\u53ca\u8f93\u51fa) --> chatgpt\uff08\u7ec4\u7ec7\u8bed\u8a00\uff09--> \u5212\u6c34\u5b66\u751f\uff08\u590d\u5236\u7c98\u8d34\uff09
\u56e0\u4e3a\uff1anew bing\u88ab\u9609\u5272\u4e86\uff0c\u8f93\u51fa\u548c\u8f93\u5165\u6587\u5b57\u90fd\u6bd4chatgpt\u9650\u5236\u4e86\u592a\u591a\u3002\u4f46\u662fnew bing \u53ef\u4ee5\u8054\u7f51\uff0c\u53ef\u4ee5\u6807\u6ce8\u6587\u732e\u6765\u6e90\u3002
"},{"location":"platform/gpt-paper/#_2","title":"\u4fa7\u8fb9\u680f\u7504\u522b\u6587\u732e","text":"\u4f7f\u7528edge\u7504\u522b\u6587\u732e\uff0c\u4f46\u4e0d\u53bb\u9605\u8bfb\u3002\u56e0\u4e3a\u7ffb\u8bd1\u5f88\u6162\u3002\uff08\u770b\u7684\u8bdd\u53ef\u4ee5\u7ed3\u5408wps\uff09
\u9605\u8bfb\u5de6\u8fb9\u7684\u8bba\u6587\uff0c\u544a\u8bc9\u6211\u4ed6\u8bb2\u4e86\u4ec0\u4e48\u5185\u5bb9\u3002
\u9605\u8bfb\u5de6\u8fb9\u7684\u8bba\u6587\uff0c\u7ec6\u81f4\u5730\u544a\u8bc9\u6211\u4ed6\u6bcf\u4e00\u5c0f\u8282\u90fd\u8bb2\u4e86\u4ec0\u4e48\u5185\u5bb9\u3002
"},{"location":"platform/gpt-paper/#_3","title":"\u6d88\u5316\u6587\u732e\u5e76\u8f93\u51fa\uff08\u65e0\u60e7\u67e5\u91cd\uff09","text":"\u6211\u5e0c\u671b\u4f60\u9605\u8bfb\u82f1\u6587\u6587\u732e \uff1a\u3010A Survey of Surface Reconstruction from Point Clouds\u3011\uff0c\u5206\u522b\u4ecb\u7ecdXXXX\u7684\u3010(\u57fa\u672c\u539f\u7406)\u3001\u5206\u7c7b\u3001\u6548\u679c\u3001\u53d1\u5c55\u8d8b\u52bf\u3001(\u4f18\u70b9\u548c\u7f3a\u70b9\u3001\u5e94\u7528\u8303\u56f4)\u3011\u3002 \u6700\u540e\u5bf9\u4e8c\u8005\u6bd4\u8f83\uff0c\u5e76\u901a\u8fc7\u8868\u683c\uff0c\u6700\u540e\u8bc1\u660eXXXX\u7ed3\u8bba\u3002\u6211\u5e0c\u671b\u4f60\u8f93\u51fa\u7684\u6587\u5b57\u4e3a\u4e2d\u6587\uff0c\u603b\u4f53\u5185\u5bb9\u8981\u8d85\u8fc7500\u5b57\u3002
\u5982\u679c\u4e0d\u7528\u4ee5\u4e0aai\u5199\u7684\u6587\u5b57\uff0c\u7eaf\u7cb9\u81ea\u5df1\u5199\u3002
\u5199\u51fa\u6765\u6548\u679c\u53ef\u80fd\u4e0d\u592a\u884c\uff0c\u8ba9ai\u5229\u7528\u4e66\u9762\u8bed\u8a00\u6da6\u8272\u3002\u8fd9\u91cc\u53ef\u4ee5\u4e0a\u7f51\u641c\u4e00\u4e9b\u76f8\u5173\u7684prompt
\u8bf7\u7528\u5199\u8bba\u6587\u7684\u4e2d\u6587\u4e66\u9762\u8bed\u6539\u5199\u6216\u8005\u4e30\u5bcc\u4ee5\u4e0b\u6bb5\u843d\uff0c\u8ba9\u5176\u66f4\u6709\u903b\u8f91\uff0c\u91cd\u70b9\u7a81\u51fa\uff1a
\u8bf7\u7528\u5199\u8bba\u6587\u7684\u4e2d\u6587\u4e66\u9762\u8bed\u4e30\u5bcc\u4ee5\u4e0b\u6bb5\u843d\uff0c\u8ba9\u5176\u7528\u8bcd\u66f4\u51c6\u786e\uff0c\u5185\u5bb9\u66f4\u4e30\u5bcc\uff1a
\u4e0d\u8981\u9677\u5165\u65e0\u610f\u4e49\u7684ai\u73a9\u800d
\u4e0d\u8981\u767b\u5f55cn\u7684bing\uff0c\u4e0d\u7136\u4e4b\u540e\u90fd\u4f1a\u8bb0\u4f4f\u3002\u53ea\u80fd\u91cd\u65b0\u6e05\u9664cookie\u3002
MinIO \u662f\u4e00\u4e2a\u63d0\u4f9b\u5f00\u6e90\u90e8\u7f72\u65b9\u6848\u7684\u591a\u7ea7\u4e91\u5bf9\u8c61\u5b58\u50a8(S3)\u65b9\u6848\u3002
\u4f18\u70b9
\u63d0\u4f9b\u8bb8\u53ef\u8bc1\u4e3aAGPL v3\u7684\u5f00\u6e90\u8bb8\u53ef\u8bc1\u7684\u7248\u672c\uff0c\u65e0\u4efb\u4f55\u5bb9\u91cf\uff0c\u5e26\u5bbd\u9650\u5236\uff1b
\u517c\u5bb9\u73b0\u6709AWS S3\u7684SDK\uff0cAPI\u7b49\uff1b
\u975e\u5e38\u5b8c\u5584\u7684\u6587\u6863\uff0c\u6d3b\u8dc3\u7684\u793e\u533a\uff1b
\u90e8\u7f72\u76f8\u5bf9\u7b80\u5355\uff1b
\u7f3a\u70b9
\u6ca1\u6709\u4efb\u4f55\u4e2d\u6587\u6587\u6863\uff1b
\u975e\u4ed8\u8d39\u7248\u8f6f\u4ef6\u66f4\u65b0\u5468\u671f\u8f83\u77ed\uff0c\u9700\u8981\u81ea\u884c\u66f4\u65b0\uff1b
RTFM
\u5b98\u65b9\u63d0\u4f9b\u4e86\u975e\u5e38\u8be6\u5c3d\uff0c\u591a\u79cd\u6781\u4e3a\u5bb9\u6613\u7684\u5b89\u88c5\u65b9\u5f0f\uff0c\u8fd9\u91cc\u4e0d\u518d\u8d58\u8ff0\u3002
"},{"location":"platform/minio/#_3","title":"\u7b14\u8005\u7684\u63d0\u9192","text":"\u4e00\u5b9a\u8981\u5230\u5b98\u65b9\u7684\u6587\u6863\u53bb\u786e\u8ba4\u4f60\u662f\u4e0d\u662f\u6709\u53c2\u6570\u6ca1\u6709\u8bbe\u5b9a\uff0c\u662f\u4e0d\u662f\u4f7f\u7528\u4e86\u72ec\u7acb\u7684\u5377\uff08\u6700\u5c11\u662f\u72ec\u7acb\u7684\u6587\u4ef6\u5939\uff09\u3002
"},{"location":"platform/overleaf/","title":"Overleaf","text":"\u5b98\u7f51: https://www.overleaf.com
Overleaf \u662f\u4e00\u4e2a\u5728\u7ebf \\(\\LaTeX\\) \u6e32\u67d3\u7f51\u7ad9\u3002 \\(\\LaTeX\\) \u73af\u5883\u7684\u914d\u7f6e\u6bd4\u8f83\u9ebb\u70e6\uff08\u5c24\u5176\u662f\u5728 Windows \u73af\u5883\u4e0b\uff09\uff0c\u5bf9\u4e8e\u65b0\u624b\u4e5f\u4e0d\u591f\u53cb\u597d\uff0c\u800c overleaf \u662f\u4e00\u4e2a\u5f88\u597d\u7684\u66ff\u4ee3\u3002\u53ea\u9700\u8981\u9009\u62e9\u4e00\u4e2a\u597d\u770b\u7684\u6a21\u7248\uff0c\u5199 10 \u9875\u4ee5\u5185\u7684\u4f5c\u4e1a\u6216\u8005\u5c0f\u8bba\u6587\u5c06\u4f1a\u5341\u5206\u65b9\u4fbf\uff0c\u540c\u65f6 Overleaf \u4e5f\u63d0\u4f9b\u4e86\u57fa\u672c\u7684\u56e2\u961f\u534f\u4f5c\u529f\u80fd\uff0c\u53ef\u4ee5\u901a\u8fc7\u94fe\u63a5\u6216\u9080\u8bf7\u7684\u65b9\u5f0f\u5b9e\u73b0\u591a\u4eba\u5171\u540c\u7f16\u8f91\u3002 Overleaf \u514d\u8d39\u7248\u6709\u6700\u5927\u7f16\u8bd1\u65f6\u957f\u548c\u4e00\u4e9b\u529f\u80fd\u7684\u9650\u5236\uff0c\u5728\u5b8c\u6210\u4e00\u4e9b\u6bd4\u8f83\u590d\u6742\u7684\u9879\u76ee\u65f6\uff0c\u53ef\u4ee5\u8003\u8651\u4ed8\u8d39\u83b7\u5f97\u66f4\u591a\u7684\u529f\u80fd\u3002
\\(\\LaTeX\\) \u662f\u4e00\u79cd\u300c\u975e\u6240\u89c1\u5373\u6240\u5f97\u300d\u7684\u6392\u7248\u7cfb\u7edf\uff0c\u7528\u6237\u9700\u8981\u8f93\u5165\u7279\u5b9a\u7684\u4ee3\u7801\uff0c\u4fdd\u5b58\u5728\u540e\u7f00\u4e3a .tex \u7684\u6587\u4ef6\u4e2d\uff0c\u901a\u8fc7\u7f16\u8bd1\u5f97\u5230\u6240\u9700\u7684 pdf \u6587\u4ef6\u3002 \\(\\LaTeX\\) \u4f18\u79c0\u7684\u5927\u578b\u6587\u6863\u6392\u7248\u80fd\u529b\u548c\u6570\u5b66\u516c\u5f0f\u6e32\u67d3\u80fd\u529b\u662f\u5176\u80fd\u591f\u5e7f\u6cdb\u5e94\u7528\u7684\u539f\u56e0\u4e4b\u4e00\u3002\u7cfb\u7edf\u5b66\u4e60 \\(\\LaTeX\\) \u9700\u8981\u4e00\u5b9a\u7684\u65f6\u95f4\uff0c\u8be6\u7ec6\u4e86\u89e3\u53ef\u4ee5\u53c2\u9605\u6258\u7ba1\u5728 CTAN \u7684\u4e2d\u8bd1\u7248\u4ecb\u7ecd lshort-zh-cn\u3002
\u7279\u70b9:
\u672c\u6587\u4e3a\u4f60\u63a8\u8350\u9002\u7528\u4e8e Android Studio \u7684\u63d2\u4ef6\uff0c\u80fd\u591f\u6781\u5927\u7684\u6539\u5584\u4f60\u7684\u5f00\u53d1\u4f53\u9a8c\u3002
"},{"location":"plugins/android/#_1","title":"\u4e3b\u9898\u7c7b","text":""},{"location":"plugins/android/#atom-material-icons","title":"Atom Material Icons","text":"\u8be5\u63d2\u4ef6\u5bf9\u56fe\u6807\u8fdb\u884c\u4e86\u4f18\u5316\u4ee5\u6539\u5584\u4f60\u7684\u754c\u9762\u7f8e\u89c2\u7a0b\u5ea6\u3002
"},{"location":"plugins/android/#material-theme-ui","title":"Material Theme UI","text":"\u9002\u7528\u4e8e JetBrains IDE \u7684 Material \u4e3b\u9898\uff0c\u62e5\u6709\u9002\u7528\u4e8e\u767d\u5929\u548c\u9ed1\u591c\u7684\u591a\u4e2a\u4e3b\u9898\uff0c\u8ba9\u754c\u9762\u66f4\u52a0\u7f8e\u89c2\u3002
"},{"location":"plugins/android/#_2","title":"\u5de5\u5177\u7c7b","text":""},{"location":"plugins/android/#jsonbean","title":"JSON\u8f6cBean","text":"JSON\u4f5c\u4e3a\u8f7b\u91cf\u7ea7\u8d44\u6599\u4ea4\u6362\u683c\u5f0f\u3002\u5728\u5f00\u53d1\u4e2d\u7ecf\u5e38\u88ab\u4f7f\u7528\uff0c\u5176\u4e2d\u4e00\u4e2a\u9700\u6c42\u5c31\u662f\u5c06 Json \u8f6c\u6362\u4e3a\u5bf9\u5e94\u7684 Bean \u5bf9\u8c61\u3002\u4e0b\u9762\u4e3b\u8981\u63a8\u8350\u4e24\u4e2a\u63d2\u4ef6\uff1a
GsonFormatPlus
\u80fd\u5c06Json \u8f6c\u6362\u4e3a\u5bf9\u5e94\u7684 Java Bean
JSON To Kotlin Class \u200b(JsonToKotlinClass)\u200b
\u80fd\u5c06Json \u8f6c\u6362\u4e3a\u5bf9\u5e94\u7684 Kotlin Bean
Translation \u63d2\u4ef6\u6781\u5927\u7684\u65b9\u4fbf\u4e86\u82f1\u8bed\u57fa\u7840\u4e0d\u597d\u7684\u5f00\u53d1\u8005\u8fdb\u884c\u5f00\u53d1\u3002\u5176\u5177\u6709\u4ee5\u4e0b\u7279\u6027\uff1a
\u591a\u7ffb\u8bd1\u5f15\u64ce
\u591a\u8bed\u8a00\u4e92\u8bd1
\u672c\u6587\u5e0c\u671b\u629b\u7816\u5f15\u7389\uff0c\u9f13\u52b1\u5927\u5bb6\u63d0\u51fa\u66f4\u591a\u65b9\u4fbf\u7684\u6d4f\u89c8\u5668\u63d2\u4ef6\u3002
"},{"location":"plugins/browser/#tampermonkey","title":"Tampermonkey","text":"\u5b98\u7f51\uff1a https://www.tampermonkey.net/
\u5f88\u65b9\u4fbf\u7684\u811a\u672c\u7ba1\u7406\u5668\uff0c\u53ef\u4ee5\u5b89\u88c5\u4e00\u4e9b\u6269\u5c55\u5546\u5e97\u91cc\u6ca1\u6709\u7684\u5c0f\u811a\u672c\u3002
"},{"location":"plugins/browser/#simpread","title":"Simpread","text":"\u5b98\u7f51\uff1a https://simpread.pro/
\u589e\u5f3a\u6d4f\u89c8\u5668\u9605\u8bfb\u4f53\u9a8c\uff0c\u63d0\u4f9b\u6de1\u5316\u5185\u5bb9\u65e0\u5173\u5143\u7d20\u4ee5\u589e\u52a0\u4e13\u6ce8\u7684\u805a\u7126\u6a21\u5f0f\u548c\u5b8c\u5168\u7eaf\u51c0\u7684\u9605\u8bfb\u6a21\u5f0f\uff1b\u53ef\u4ee5\u5bfc\u51fa\u7f51\u9875\u4e3a markdown \u7b49\u591a\u79cd\u683c\u5f0f\u5230\u672c\u5730\uff0c\u6216\u6388\u6743\u540e\u5bfc\u5165 notion \u3001onenote \u7b49\u7b14\u8bb0\u5e94\u7528\uff0c\u65b9\u4fbf\u5b58\u6863\u548c\u7a0d\u540e\u9605\u8bfb\u3002\u5b98\u65b9\u63d2\u4ef6\u4e2d\u5fc3\u8fd8\u6709\u8bb8\u591a\u76f8\u5173\u589e\u5f3a\uff0c\u4f46\u9ed8\u8ba4\u6a21\u5f0f\u4f53\u9a8c\u4e5f\u76f8\u5f53\u8212\u9002\u3002
"},{"location":"plugins/browser/#zotero-connector","title":"Zotero Connector","text":"\u5b98\u7f51\uff1a https://www.zotero.org/download/connectors
\u4ece\u7f51\u9875\u4e0a\u76f4\u63a5\u4fdd\u5b58\u8bba\u6587\u81f3 Zotero \uff0c\u652f\u6301\u9009\u62e9\u4fdd\u5b58\u5206\u7c7b\u3002
"},{"location":"plugins/browser/#global-speed","title":"Global Speed","text":"\u5b98\u7f51\uff1a https://github.com/polywock/globalSpeed
\u8c03\u8282\u7f51\u9875\u89c6\u9891\u64ad\u653e\u901f\u5ea6\uff0c\u4f7f\u7528\u7b80\u5355\u3002
"},{"location":"plugins/browser/#language-reactor","title":"Language Reactor","text":"\u5b98\u7f51\uff1a https://www.languagereactor.com/
\u4e3aYoutube\u89c6\u9891\u63d0\u4f9b\u673a\u7ffb\u53cc\u8bed\u5b57\u5e55\uff0c\u5e76\u4e14\u652f\u6301\u5bfc\u51fa\u3002
"},{"location":"plugins/browser/#vimium","title":"Vimium","text":"\u5b98\u7f51\uff1a https://github.com/philc/vimium
Vimium \u53d7\u5230 Vim \u7f16\u8f91\u5668\u7684\u542f\u53d1\uff0c\u8ba9\u4f60\u80fd\u591f\u629b\u5f03\u9f20\u6807\uff0c\u5b8c\u5168\u4f7f\u7528\u952e\u76d8\u5b8c\u6210\u6d4f\u89c8\u5668\u7684\u5bfc\u822a\u3001\u9875\u9762\u8df3\u8f6c\u3001\u9875\u9762\u641c\u7d22\u7b49\u64cd\u4f5c\u3002
"},{"location":"plugins/tabnine/","title":"Tabnine\u4f18\u79c0\u7684\u4ee3\u7801\u8865\u5168\u5de5\u5177(\u4e0d\u72af\u75c5\u7684\u65f6\u5019)","text":"\u672c\u6587\u4e3a\u4f60\u63a8\u8350\u4ee3\u7801\u8865\u5168\u5de5\u5177tabnine\u7684\u4ecb\u7ecd\u540c\u65f6\u5c06\u548ccopilot\u7684\u533a\u522b\u5199\u51fa\uff0ccopilot\u7684\u5b89\u88c5\u5728\u8bc4\u8bba\u533a\u540e\u7eed\u8865\u5145\u3002
"},{"location":"plugins/tabnine/#_1","title":"\u5b89\u88c5","text":"\u4e0b\u8f7d\u94fe\u63a5\uff1ahttps://www.tabnine.com/install/
\u5728\u8fd9\u4e2a\u4e0b\u8f7d\u9875\u9762\u4e2d\u53ef\u4ee5\u9009\u62e9\u81ea\u5df1\u6240\u4f7f\u7528\u7684\u4ee3\u7801\u7f16\u8f91\u5668\uff0c\u5bf9\u4e8e VSCode \u7528\u6237\u6765\u8bb2\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u5728\u63d2\u4ef6\u641c\u7d22\u4e2d\u641c\u7d22tabnine\uff0c\u7136\u540e\u5b89\u88c5\u5373\u53ef\u3002
"},{"location":"plugins/tabnine/#chatgpt","title":"\u4ecb\u7ecd(\u672c\u6bb5\u6587\u5b57\u7531 ChatGPT \u751f\u6210)","text":"TabNine \u662f\u4e00\u4e2a\u57fa\u4e8e\u673a\u5668\u5b66\u4e60\u7684\u4ee3\u7801\u81ea\u52a8\u8865\u5168\u5de5\u5177\uff0c\u5b83\u53ef\u4ee5\u5728\u591a\u79cd\u7f16\u8f91\u5668\u548c IDE \u4e2d\u4f7f\u7528\uff0c\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e VS Code\u3001Sublime Text\u3001PyCharm\u3001Vim\u3001Emacs \u7b49\u7b49\u3002\u4e0e\u4f20\u7edf\u7684\u4ee3\u7801\u81ea\u52a8\u8865\u5168\u5de5\u5177\u4e0d\u540c\uff0cTabNine \u4e0d\u4ec5\u53ef\u4ee5\u6839\u636e\u5df2\u6709\u7684\u4ee3\u7801\u6bb5\u548c\u8bed\u6cd5\u89c4\u5219\u8fdb\u884c\u8865\u5168\uff0c\u800c\u4e14\u8fd8\u53ef\u4ee5\u901a\u8fc7\u5b66\u4e60\u5927\u91cf\u7684\u4ee3\u7801\u5e93\u548c\u8bed\u8a00\u8bed\u6cd5\uff0c\u81ea\u52a8\u751f\u6210\u5168\u65b0\u7684\u4ee3\u7801\uff0c\u5927\u5927\u63d0\u9ad8\u7f16\u7801\u6548\u7387\u548c\u51c6\u786e\u6027\u3002
TabNine \u7684\u4f18\u70b9\u5305\u62ec\uff1a
TabNine \u548c Copilot \u90fd\u662f\u57fa\u4e8e\u673a\u5668\u5b66\u4e60\u7684\u4ee3\u7801\u81ea\u52a8\u8865\u5168\u5de5\u5177\uff0c\u5b83\u4eec\u90fd\u53ef\u4ee5\u6839\u636e\u4e0a\u4e0b\u6587\u548c\u8bed\u6cd5\u89c4\u5219\u6765\u751f\u6210\u4ee3\u7801\u8865\u5168\u9009\u9879\uff0c\u63d0\u9ad8\u7f16\u7801\u6548\u7387\u548c\u51c6\u786e\u6027\u3002\u4f46\u662f\u5b83\u4eec\u4e4b\u95f4\u4e5f\u6709\u4e00\u4e9b\u4e0d\u540c\u4e4b\u5904\u3002
\u603b\u7684\u6765\u8bf4\uff0cTabNine \u548c Copilot \u90fd\u662f\u975e\u5e38\u6709\u7528\u7684\u4ee3\u7801\u81ea\u52a8\u8865\u5168\u5de5\u5177\uff0c\u5177\u6709\u5404\u81ea\u7684\u4f18\u70b9\u548c\u9002\u7528\u573a\u666f\uff0c\u7528\u6237\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u7684\u9700\u6c42\u9009\u62e9\u5408\u9002\u7684\u5de5\u5177\u3002
"},{"location":"plugins/tabnine/#_2","title":"\u6548\u679c\u5982\u56fe","text":"\u5b83\u662f\u4e2a\u52a8\u56fe\u634f\u5927\u5bb6\u53ef\u4ee5\u4f53\u9a8c\u4e0b\u563f\u563f
"},{"location":"software/Double%20Commander/","title":"Double Commander","text":"\u514d\u8d39\u7684\u8de8\u5e73\u53f0\u5f00\u6e90\u6587\u4ef6\u7ba1\u7406\u5668\uff0c\u5b83\u7684\u7075\u611f\u6765\u81ea Total Commander \uff0c\u5e76\u63d0\u4f9b\u4e86\u4e00\u4e9b\u65b0\u7684\u60f3\u6cd5\uff08\u652f\u6301 Linux \uff09\u3002
"},{"location":"software/Pycharm/","title":"PyCharm","text":""},{"location":"software/Pycharm/#1pyhton","title":"1.\u9996\u5148\u6211\u4eec\u8981\u8fdb\u884cPyhton\u89e3\u91ca\u5668\u7684\u4e0b\u8f7d","text":"print('Hello World')\n
Python \u4e0d\u80fd\u76f4\u63a5\u5728\u8ba1\u7b97\u673a\u4e2d\u8fd0\u884c\uff0c\u56e0\u6b64\u9700\u8981 Python \u8bed\u8a00\u7684\u8fd0\u884c\u73af\u5883\uff1a Python \u89e3\u6790\u5668
\u4e0b\u8f7d\u5730\u5740\uff1ahttps://www.python.org/downloads/release/python-379/ \u5f53\u7136\u4f60\u5b89\u88c53.8\u6216\u80053.9\u4e5f\u662f\u6ca1\u95ee\u9898\u7684
\u67e5\u627e\u76ee\u6807\u6587\u4ef6\uff1aWindows x86-64 executable installer -- \u5355\u51fb\u5373\u53ef\u4e0b\u8f7d\u3002(\u683c\u5f0f\u4e0d\u80fd\u627e\u9519)
"},{"location":"software/Pycharm/#2python","title":"2.Python\u89e3\u6790\u5668\u7684\u5b89\u88c5","text":"\u7b2c\u4e00\u6b65\uff1a\u53cc\u51fb\u8fd0\u884c Python \u7684\u89e3\u6790\u5668\uff0c\u9009\u62e9 \u81ea\u5b9a\u4e49\u5b89\u88c5 \u4ee5\u53ca \u6dfb\u52a0 Python \u5230\u73af\u5883\u53d8\u91cf(\u8fd9\u4e00\u6b65\u975e\u5e38\u91cd\u8981)
\u7b2c\u4e8c\u6b65\uff1a\u9009\u62e9\u6240\u6709\u8981\u5b89\u88c5\u7684\u529f\u80fd\u83dc\u5355\uff0c\u9ed8\u8ba4\u5168\u90e8\u52fe\u9009
\u7b2c\u4e09\u6b65\uff1a\u8bbe\u7f6e Python \u89e3\u6790\u5668\u7684\u5b89\u88c5\u8def\u5f84\uff0c\u5c3d\u91cf\u4e0d\u8981\u5b89\u88c5\u5728C\u76d8\uff0c\u4f46\u9700\u8981\u77e5\u9053\u81ea\u5df1\u5b89\u88c5\u7684\u4f4d\u7f6e
\u7b2c\u56db\u6b65\uff1a\u6d4b\u8bd5 Python \u89e3\u6790\u5668\u662f\u5426\u53ef\u4ee5\u4f7f\u7528 \u65b9\u6cd5\uff1a\u6309 Windows + R \uff0c\u8f93\u5165 cmd \uff0c\u6253\u5f00 Windows \u7684 DOS \u7a97\u53e3\uff0c\u8f93\u5165 python\uff08\u5168\u90e8\u5c0f\u5199\uff09,\u5f53\u51fa\u73b0\u4e0b\u56fe\u5c31\u6210\u529f\u4e86
\u4f7f\u7528exit()\u9000\u51fa
"},{"location":"software/Pycharm/#3-pythonpycharm202121","title":"3. Python\u5f00\u53d1\u5de5\u5177PyCharm(\u6211\u4e0b\u8f7d\u7684\u662f2021.2.1)\u65b0\u7248\u5bb9\u6613\u51fa\u73b0\u672a\u77e5\u95ee\u9898","text":"\u5728\u4e0d\u6d89\u53ca\u5230\u4eba\u5de5\u667a\u80fd\u7684\u65b9\u5411\uff0c\u63a8\u8350\u4e0d\u7528\u5b89\u88c5 anaconda \uff0c\u76f4\u63a5\u5b89\u88c5 PyCharm \u5373\u53ef\u3002\u5b83\u662f\u76ee\u524d\u529f\u80fd\u6700\u5f3a\u5927\u7684 IDE
PyCharm \u4e00\u5171\u6709\u4e24\u4e2a\u7248\u672c\uff1a\u4e13\u4e1a\u7248\uff08\u6536\u8d39\uff09 \u4e0e \u793e\u533a\u7248\uff08\u514d\u8d39\u3001\u5f00\u6e90\uff09\u3002\u6211\u4eec\u9009\u62e9\u540e\u8005
\u7b2c\u4e00\u6b65\uff1a\u4e0b\u8f7d PyCharm \u3002https://www.jetbrains.com/pycharm/download/
\u7b2c\u4e8c\u6b65\uff1a\u8bbe\u7f6e\u8f6f\u4ef6\u7684\u5b89\u88c5\u8def\u5f84\uff0c\u4e0d\u7528\u5b89\u88c5\u5728 C \u76d8
\u7b2c\u4e09\u6b65\uff1aPyCharm \u57fa\u672c\u8bbe\u7f6e\u3002\u5982\u4e0b\u56fe\u8bbe\u7f6e\uff0c\u4e0d\u5efa\u8bae\u628a Pycharm \u6dfb\u52a0\u5230\u73af\u5883\u53d8\u91cf\u91cc\u9762
"},{"location":"software/Pycharm/#4python","title":"4.\u521b\u5efaPython\u9879\u76ee","text":"\u7b2c\u4e00\u6b65\uff1a\u521b\u5efa\u9879\u76ee (Pycharm \u4e0d\u8981\u6c49\u5316\uff01\u4e0d\u8981\u6c49\u5316\uff01\u4e0d\u8981\u6c49\u5316\uff01)
\u70b9\u5f00\u56fe\u6807\uff0c\u521d\u6b21\u70b9\u5f00\u4f1a\u6709\u4e00\u4e2a\u63d0\u793a\u7a97\u53e3\uff0c\u4e0d\u7528\u7ba1\u4ed6\uff0c\u70b9\u51fb New Project
\u7b2c\u4e8c\u6b65\uff1a\u8bbe\u7f6e\u9879\u76ee\u8def\u5f84\uff0c\u5c3d\u91cf\u653e\u5230 C \u76d8\u4ee5\u5916\uff08\u975e\u5e38\u91cd\u8981\uff01\uff01\uff09
\u4f60\u4f1a\u770b\u5230\u7c7b\u4f3c\u5982\u4e0b\u56fe\u7247\u3002(\u56e0\u4e3a\u6211\u4f7f\u7528\u7684\u662f\u865a\u62df\u673a\u5b89\u88c5\uff0c\u53ea\u7528\u4e8e\u5f00\u53d1 pycharm \uff0c\u53ea\u6709\u4e00\u4e2a\u76d8\u6240\u4ee5\u653e\u5728\u4e86 C \u76d8)
\u5176\u4e2d base interpreter \u4f1a\u81ea\u52a8\u611f\u77e5\u5230 python.exe \u7684\u4f4d\u7f6e\uff0c\u6ca1\u611f\u77e5\u5230\u53ef\u4ee5\u624b\u52a8\u5b9a\u4f4d(\u627e\u5230 python \u5b89\u88c5\u8def\u5f84\u7136\u540e\u9009\u5b9a python.exe )
\u65b0\u5efa\u6587\u4ef6\u5e76\u4e66\u5199\u4ee3\u7801
print('Hello World')\n
\u8fdb\u884c\u8fd0\u884c\uff0c\u53f3\u4e0a\u89d2\u7eff\u8272\u7684\u4e09\u89d2\u7b26\u53f7 Run \u3002
\u7ed3\u679c\u5982\u4e0b\uff0c\u5c31\u5b8c\u6210\u5566\u3002
"},{"location":"software/TiddlyWiki/","title":"TiddlyWiki-\u77e5\u8bc6\u7ba1\u7406\u6846\u67b6","text":"\u5b98\u7f51\uff1ahttps://tiddlywiki.com/
\u56fd\u9645\u4ea4\u6d41\u793e\u533a\uff1ahttps://talk.tiddlywiki.org/
\u5f88\u4e45\u5f88\u4e45\u4ee5\u524d\uff0c\u5728\u4e00\u6761\u6cb3\u6d41\u91cc\uff0c\u751f\u6d3b\u7740\u8bb8\u591a\u8bb8\u591a\u7684\u5c0f\u9c7c\u513f\uff08Tiddlers\uff09\uff0c\u5b83\u4eec\u5feb\u6d3b\u5730\u5728\u6545\u4e8b\u6cb3\uff08Story River\uff09\u91cc\u6e38\u6765\u6e38\u53bb\u3002\u8fd9\u4e9b\u5c0f\u9c7c\u513f\u6bcf\u4e00\u4e2a\u90fd\u6709\u81ea\u5df1\u7684\u540d\u5b57\uff08\u6761\u76ee\u540d\uff09\uff0c\u81ea\u5df1\u7684\u79cd\u7c7b\uff08\u5185\u5bb9\u7c7b\u578b\uff09\uff0c\u5b83\u643a\u5e26\u7684\u4fe1\u606f\u7ec4\u6210\u4e86\u9c7c\u513f\u7f8e\u4e3d\u7684\u8eab\u4f53\u4e0e\u9aa8\u67b6\uff0c\u9644\u52a0\u7684\u5b57\u6bb5\u6784\u6210\u4e86\u5b83\u7f8e\u4e3d\u7684\u9cde\u7247\u3002\u2014\u2014TiddlyWiki\u7b80\u6613\u6559\u7a0b\u3002
"},{"location":"software/TiddlyWiki/#1","title":"1. \u4e2d\u6587\u793e\u533a","text":"\u300c\u592a\u5fae\u300d\u662f\u6211\u4eec\u5bf9 TiddlyWiki \u7684\u4e2d\u6587\u79f0\u547c\uff0cTiddlyWiki\u662f\u4e00\u6b3e\u6781\u5176\u5f3a\u5927\u53c8\u6781\u5177\u62d3\u5c55\u6027\u7684\u4e2a\u4eba Wiki \u7cfb\u7edf\u3002
\u4e3a\u4ec0\u4e48\u628a TiddlyWiki \u7ffb\u8bd1\u6210\u300c\u592a\u5fae\u300d\uff1f\u56e0\u4e3a\u53d7\u5230 @pimgeek \u7684\u542f\u53d1\uff1aTiddlyWiki \u53ef\u4ee5\u5e72\u5f88\u591a\u7ec6\u81f4\u8f7b\u91cf\u7684\u5de5\u4f5c\uff0c\u4f46\u4e5f\u4ece\u4e0d\u9650\u5236\u7528\u6cd5\uff0c\u53ef\u4ee5\u65e0\u9650\u7ec4\u5408\u53e0\u52a0\u3002\u6545\u4ee5\u5176\u9996\u5b57\u6bcd\u97f3\u8bd1\u4e3a\u300c\u592a\u5fae\u300d\uff0cTiddlyWiki \u53ef\u4ee5\u79f0\u4e3a\u300c\u592a\u5fae\u7b14\u8bb0\u300d\u300c\u592a\u5fae\u4e07\u80fd\u62bd\u5c49\u300d\u300c\u592a\u5fae\u5361\u7247\u76d2\u300d\u2026\u2026
\u592a\u5fae\u5177\u6709\u591a\u79cd\u5f62\u6001\u3002\u62e5\u6709HTML\u6587\u4ef6\u4e0e\u6587\u4ef6\u5939 2\u79cd\u5b58\u50a8\u5f62\u5f0f\u3002\u684c\u9762\u6d4f\u89c8\u5668\uff0c\u670d\u52a1\u7aef\u8f6f\u4ef6\uff0c\u5e94\u7528\u8f6f\u4ef6 3\u79cd\u4f7f\u7528\u65b9\u5f0f\u3002\u53ef\u4ee5\u5728\u4efb\u610f\u5e73\u53f0\u4e2d\u4f7f\u7528\uff0c\u53ea\u6709\u4f60\u60f3\u4e0d\u5230\u7684\uff0c\u6ca1\u6709\u505a\u4e0d\u5230\u7684\u3002
\u60a8\u66fe\u611f\u89c9\u4eba\u7c7b\u7684\u5927\u8111\u662f\u6709\u6781\u9650\u7684\u5417\uff1f\u611f\u89c9\u5b83\u4e0d\u8db3\u4ee5\u5bb9\u7eb3\u4e00\u5207\u4f60\u9700\u8981\u8bb0\u4f4f\u7684\u4e8b\uff1f
\u6b22\u8fce\u4f7f\u7528 TiddlyWiki\uff0c\u4e00\u4e2a\u72ec\u7279\u7684\u975e\u7ebf\u6027\u7b14\u8bb0\u672c\uff0c\u7528\u4e8e\u622a\u53d6\u3001\u7ba1\u7406\u548c\u590d\u7528\u590d\u6742\u7684\u4fe1\u606f\u3002
\u7528\u5b83\u6765\u4fdd\u7559\u60a8\u7684\u5f85\u529e\u6e05\u5355\u3001\u8ba1\u5212\u4e00\u7bc7\u6563\u6587\u6216\u4e00\u90e8\u5c0f\u8bf4\u3001\u6216\u5b89\u6392\u60a8\u7684\u5a5a\u793c\u3002\u8bb0\u5f55\u6bcf\u4e2a\u95ea\u8fc7\u60a8\u8111\u4e2d\u7684\u60f3\u6cd5\uff0c\u6216\u521b\u5efa\u4e00\u4e2a\u7075\u6d3b\u548c\u53cd\u5e94\u8fc5\u901f\u7684\u7f51\u7ad9\u3002
\u975e\u7ebf\u6027\u7b14\u8bb0\uff0c\u8fd9\u5f88\u50cf\u6211\u4eec\u7684\u5927\u8111\u7684\u601d\u7ef4\u4e60\u60ef\uff0c\u4e0d\u8fde\u7eed\u7684\u3001\u7247\u6bb5\u7684\u4fe1\u606f\uff0c\u901a\u8fc7\u4e00\u4e9b\u7ebf\u7d22\u8054\u7cfb\u5728\u4e00\u8d77\u3002\u6b63\u5982TiddlyWiki\u7684\u6761\u76ee\u8bb0\u8f7d\u7684\u4fe1\u606f\uff0c\u901a\u8fc7\u6807\u7b7e\u6216\u8005\u5b57\u6bb5\u53c8\u6216\u8005\u94fe\u63a5\u4e0e\u5d4c\u5165\u76f8\u4e92\u8054\u7cfb\u5728\u4e00\u8d77\u3002
"},{"location":"software/TiddlyWiki/#41-tidgi","title":"4.1 TidGi\uff08\u592a\u8bb0\uff09","text":"\u4e0b\u8f7d\u94fe\u63a5\uff1ahttps://github.com/tiddly-gittly/TidGi-Desktop
TidGi\uff0c\u5168\u5e73\u53f0\u7684\u684c\u9762\u7aef\u7535\u8111\u652f\u6301\uff0c\u5feb\u901f\u5b89\u88c5\u4f7f\u7528\u3002\u5185\u7f6eItonNote TiddlyWiki\u6a21\u677f\uff08\u9884\u88c5\u5e38\u7528\u63d2\u4ef6\uff09\u3002\u7701\u53bb\u914d\u7f6e\u63d2\u4ef6\u7684\u8fc7\u7a0b\u3002
TiddlyDesktop\u3002\u5168\u5e73\u53f0\u684c\u9762\u7aef\u8f6f\u4ef6\uff0ctiddlywiki\u6a21\u677f\u53ef\u4ee5\u5728Tiddlystow\u4e2d\u9009\u4e00\u4e2a\u4f7f\u7528\uff0c\u6bd4\u8f83\u63a8\u8350\u7684\u662ftiddlywiki XP\u4ee5\u53ca\u9002\u914dTidGi\u5355\u6587\u4ef6wiki\u3002TiddlyDesktop\u4e3b\u8981\u662f\u7528\u4e8e\u7ba1\u7406\u5355\u4e2atiddlywiki\u7684\u5de5\u5177\uff0c\u800cTidGi\u662f\u4e00\u4e2awiki\u5c31\u662f\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\uff0c\u91c7\u7528all in one\u7684\u601d\u8def\u3002
\u4e0b\u8f7d\u94fe\u63a5\uff1ahttps://github.com/TiddlyWiki/TiddlyDesktop/releases
Timimi\uff0c\u4e00\u4e2a\u6d4f\u89c8\u5668\u63d2\u4ef6\u4e0e\u4f3a\u670d\u8f6f\u4ef6\u914d\u5957\u4f7f\u7528\u7684\u8f6f\u4ef6\u3002\u4f18\u70b9\u662f\u4f7f\u7528\u65b9\u4fbf\uff0c\u5373\u70b9\u5373\u7528\uff0c\u7f3a\u70b9\u662f\uff0c\u914d\u7f6e\u6b65\u9aa4\u6bd4\u524d\u4e24\u4e2a\u591a\u4e00\u70b9\u3002
\u53ef\u4ee5\u628a\u4e00\u4e2aHTML\u5355\u6587\u4ef6\u7248wiki\u4f5c\u4e3a\u8d85\u7ea7\u7075\u6d3b\u7684word\u6587\u6863\u4f7f\u7528\u3002\u5373\u5373\u70b9\u5373\u7528\u3002
\u4e0b\u8f7d\u94fe\u63a5\uff1ahttps://ibnishak.github.io/Timimi/
\u6700\u540e\u4e00\u4e2aNode.js\uff0c\u9002\u7528\u4e8e\u5bf9\u547d\u4ee4\u884c\u5de5\u5177\u3001JS\u4ee5\u53caNodeJS\u6709\u4e00\u5b9a\u4e86\u89e3\u7684\u7528\u6237\u3002
\u8fd0\u884c\u5728NodeJS\u73af\u5883\u7684TiddlyWiki\uff0c\u652f\u6301\u591a\u7528\u6237\u540c\u65f6\u4f7f\u7528/\u7f16\u8f91\u76f8\u540c\u7684wiki\u7684\u63d2\u4ef6\uff1aTW5-Bob\uff0c\u4e0e\u6b64\u518d\u8fdb\u4e00\u6b65\u5c01\u88c5\u4e86TW5-BobEXE\u7a0b\u5e8f\uff0c\u53ef\u4ee5\u76f4\u63a5\u4e0b\u8f7d\u5230\u4f60\u7684\u7535\u8111\u4e0a\u8fd0\u884c\u3002
\u5b98\u7f51\uff1ahttps://www.antlr.org/
ANTLR(ANother-Tool-for-Language-Recognition)\u662f\u4e00\u4e2a\u529f\u80fd\u5f3a\u5927\u7684\u8bed\u6cd5\u5206\u6790\u5668\u751f\u6210\u5668\uff0c\u7528\u4e8e\u8bfb\u53d6\u3001\u5904\u7406\u3001\u6267\u884c\u6216\u7ffb\u8bd1\u7ed3\u6784\u5316\u6587\u672c\u6216\u4e8c\u8fdb\u5236\u6587\u4ef6\u3002\u5b83\u88ab\u5e7f\u6cdb\u7528\u4e8e\u6784\u5efa\u8bed\u8a00\u3001\u5de5\u5177\u548c\u6846\u67b6\u3002ANTLR\u6839\u636e\u8bed\u6cd5\u751f\u6210\u4e00\u4e2a\u89e3\u6790\u5668\uff0c\u8be5\u89e3\u6790\u5668\u53ef\u4ee5\u6784\u5efa\u548c\u904d\u5386\u89e3\u6790\u6811
"},{"location":"software/antlr/#_1","title":"\u5b89\u88c5","text":"example.g4
// specific grammar name\ngrammar example;\n// for non-terminal, star with lower-case letter\n\n// '*' \u4ee3\u8868\u8be5\u4ea7\u751f\u5f0f\u51fa\u73b00\u6b21\u6216\u4ee5\u4e0a\n// '+' \u4ee3\u8868\u81f3\u5c11\u51fa\u73b0\u4e00\u6b21\n// \u4e0b\u4f8b\u5c06\u4f1a\u88ab\u89e3\u6790\u6210vector<number>\naddExp\n: number ('+' number)*\n;\n\n// \u53ef\u4ee5\u901a\u8fc7\u5728\u4ea7\u751f\u5f0f\u540e # nickname\n// \u521b\u5efa\u4e00\u4e2a\u522b\u540d\u7528\u6765\u5206\u6790\u540c\u540d\u7684\u4e0d\u540c\u60c5\u51b5\u4e0b\u7684\u4ea7\u751f\u5f0f\nnumber\n: IntLiteral # number1\n| FloatLiteral # number2\n;\n\n// for terminal, star with lower-case letter\nIntLiteral\n: [0-9]+\n| ('0x'|'0X')[0-9a-fA-F]+\n;\n\n// '?' \u4ee3\u8868\u8be5\u4ea7\u751f\u5f0f\u53ef\u80fd\u5b58\u5728\uff0c\u82e5\u5b58\u5728\u4ec5\u51fa\u73b0\u4e00\u6b21\nFloatLiteral\n: ([0-9]+|[0-9]*'.'[0-9]*)([eE]('+'|'-')?[0-9]+)?[fFlL]?\n| ('0x'|'0X')([0-9a-fA-F]*'.'[0-9a-fA-F]*)([pP]('+'|'-')?[0-9]+)?[fFlL]?\n;\n
shell command
antlr -Dlanguage=Cpp -no-listener -visitor example.g4\n
exampleVisitor.h
#include \"exampleBaseVisitor.h\"\n\nclass ExampleVisitor : public exampleBaseVisitor {\nvirtual antlrcpp::Any visitAddExp(exampleParser::AddExpContext *ctx) override;\nvirtual antlrcpp::Any visitNumber(exampleParser::NumberContext *ctx) override;\n};\n// Access string of current node by `ctx->getText()`\n// Visit `number` node of `addExp` by `ctx->number()`\n// then you can override visit-function to build your own parser !\n
"},{"location":"software/antlr/#_2","title":"\u53c2\u8003","text":"\u5b98\u65b9\u4ed3\u5e93 antlr repository
\u5b98\u65b9\u6587\u6863 antlr official doc
\u5b98\u7f51: https://github.com/chenzhiy2001/code-debug/
code-debug \u662f\u4e00\u4e2a\u652f\u6301Rust\u8bed\u8a00\u7684\u6e90\u4ee3\u7801\u7ea7\u5185\u6838\u8c03\u8bd5\u5de5\u5177. \u73b0\u5728\u53ef\u4ee5\u8c03\u8bd5rCore-Tutorial-v3\u64cd\u4f5c\u7cfb\u7edf\uff0c\u652f\u6301\u4ece\u5185\u6838\u6001\u8ddf\u8e2a\u5230\u7528\u6237\u6001. \u6700\u8fd1\u7684\u5de5\u4f5c\u662f\uff0c\u5229\u7528eBPF\u6280\u672f\u5b9e\u73b0\u66f4\u4e30\u5bcc\uff0c\u66f4\u9c81\u68d2\u7684\u8ddf\u8e2a\u529f\u80fd.
"},{"location":"software/eunomia-bpf/","title":"eunomia-bpf: \u7b80\u5316\u548c\u589e\u5f3a eBPF \u4e0e CO-RE1 \u548c WebAssembly2","text":"\u4e00\u4e2a\u7f16\u8bd1\u5668\u548c\u8fd0\u884c\u65f6\u6846\u67b6\uff0c\u4ee5\u5e2e\u52a9\u60a8\u5c3d\u53ef\u80fd\u8f7b\u677e\u5730\u6784\u5efa\u548c\u5206\u53d1 eBPF \u7a0b\u5e8f\u3002
"},{"location":"software/eunomia-bpf/#_1","title":"\u4ecb\u7ecd","text":"eunomia-bpf
\u662f\u4e00\u4e2a\u52a8\u6001\u52a0\u8f7d\u5e93/\u8fd0\u884c\u65f6\u548c\u7f16\u8bd1\u5de5\u5177\u94fe\u6846\u67b6\uff0c\u65e8\u5728\u5e2e\u52a9\u60a8\u66f4\u8f7b\u677e\u5730\u6784\u5efa\u548c\u5206\u53d1 eBPF \u7a0b\u5e8f\u3002
\u4f7f\u7528 eunomia-bpf\uff0c\u60a8\u53ef\u4ee5\uff1a
libbpf
eBPF \u5e94\u7528\u7a0b\u5e8f\uff1a\u4ec5\u7f16\u5199 eBPF \u5185\u6838\u4ee3\u7801\uff0c\u5e76\u81ea\u52a8\u4ece\u5185\u6838\u4e2d\u4f7f\u7528 perf event
\u6216 ring buffer
\u81ea\u52a8\u8f93\u51fa\u91c7\u6837\u6570\u636e\u5230\u5185\u6838\u6001\u3002hists
\uff08\u76f4\u65b9\u56fe\u7b49\u4fe1\u606f\uff09\u3002\u547d\u4ee4\u884c\u53c2\u6570
\u3002BCC
\u548c libbpf
\u7b49\u591a\u79cd\u683c\u5f0f\u7f16\u5199\u5185\u6838\u90e8\u5206\u3002Wasm
2 \u6784\u5efa eBPF \u7a0b\u5e8f\uff1a\u53c2\u89c1 Wasm-bpf
\u9879\u76eeOCI
\u955c\u50cf\u63a8\u9001\u3001\u62c9\u53d6\u6216\u8fd0\u884c1
\u884c bash\u4e2d\u4ece \u4e91\u7aef\u5b58\u50a8\u5e93
\u6216 URL
\u8fd0\u884c eBPF \u7a0b\u5e8f\u3002JSON
\u914d\u7f6e\u6587\u4ef6\u6216 Wasm
\u7528\u6237\u6001\u63a7\u5236\u548c\u6570\u636e\u5904\u7406\u6a21\u5757\u7684 eBPF \u7a0b\u5e8f\u3002\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u89c1 documents/introduction.md\u3002
"},{"location":"software/eunomia-bpf/#eunomia-bpf-ebpf","title":"eunomia-bpf \u63d0\u4f9b\u4e86\u5927\u91cf\u6559\u7a0b\u548c\u793a\u4f8b\u5e94\u7528\uff0c\u5e2e\u52a9\u5165\u95e8 eBPF \u7a0b\u5e8f\u5f00\u53d1","text":"\u60a8\u53ef\u4ee5\u4f7f\u7528\u4e00\u884c bash \u4ece\u4e91\u7aef\u4e0b\u8f7d\u9884\u7f16\u8bd1\u7684 eBPF \u7a0b\u5e8f\u5e76\u5c06\u5176\u8fd0\u884c\u5230\u5185\u6838\u4e2d\uff1a
# \u4ece https://github.com/eunomia-bpf/eunomia-bpf/releases/latest/download/ecli \u4e0b\u8f7d ecli \u8fd0\u884c\u65f6\n$ wget https://aka.pw/bpf-ecli -O ecli && chmod +x ./ecli\n$ sudo ./ecli https://eunomia-bpf.github.io/eunomia-bpf/sigsnoop/package.json # \u4ece url \u8fd0\u884c\u9884\u7f16\u8bd1\u7684 ebpf \u4ee3\u7801\n$ sudo ./ecli sigsnoop:latest # \u76f4\u63a5\u4f7f\u7528\u540d\u79f0\u8fd0\u884c\uff0c\u5e76\u4ece\u6211\u4eec\u7684\u4ed3\u5e93\u4e0b\u8f7d\u6700\u65b0\u7248\u672c bpf \u5de5\u5177\n
CO-RE\uff1aCompile Once \u2013 Run Everywhere \u21a9\u21a9
WebAssembly \u6216 Wasm\uff1ahttps://webassembly.org/\u00a0\u21a9\u21a9
\u4ed3\u5e93\u5730\u5740\uff1ahttps://github.com/junegunn/fzf
FZF \u662f\u4e00\u6b3e\u4f7f\u7528 Go \u7f16\u5199\u7684\u4ea4\u4e92\u5f0f CLI \uff0c\u53ef\u7528\u6765\u67e5\u627e\u4efb\u4f55\u5217\u8868\u5185\u5bb9\u3001\u6587\u4ef6\u3001\u5386\u53f2\u6307\u4ee4\u3001\u8fdb\u7a0b\u3001host \u540d\u3001\u4e66\u7b7e\u6216 Git commit \u7b49\u5185\u5bb9\u3002
"},{"location":"software/fzf/#_2","title":"\u5b89\u88c5","text":""},{"location":"software/fzf/#macos","title":"macOS","text":"\u5bf9\u4e8e macOS \uff0c\u63a8\u8350\u4f7f\u7528 Homebrew \u8fdb\u884c\u5b89\u88c5\uff1a
brew install fzf\n
"},{"location":"software/fzf/#linux","title":"Linux","text":"\u5728 Linux \u53d1\u884c\u7248\u4e0a\uff0c\u53ef\u4f7f\u7528\u4e0d\u540c\u7684\u5305\u7ba1\u7406\u5668\u8fdb\u884c\u5b89\u88c5\uff0c\u4f8b\u5982\uff1a
Debian/Ubuntu(Apt)\uff1a
sudo apt install fzf\n
ArchLinux(Pacman)\uff1a
sudo pacman -S fzf\n
"},{"location":"software/fzf/#windows","title":"Windows","text":"\u5e76\u4e0d\u63a8\u8350\u5728 Windows \u4e2d\u4f7f\u7528 FZF \u3002Windows \u53ef\u4f7f\u7528 Everything \u8fdb\u884c\u641c\u7d22\u3002
Windows\u4e0b\u53ef\u4f7f\u7528 Scoop \u8fdb\u884c\u5b89\u88c5\u4f7f\u7528\u3002
scoop install fzf\n
"},{"location":"software/fzf/#_3","title":"\u7b80\u5355\u4f7f\u7528","text":""},{"location":"software/fzf/#_4","title":"\u6587\u4ef6\u641c\u7d22","text":"\u76f4\u63a5\u6267\u884c FZF \uff0c\u6253\u5f00\u6587\u4ef6\u641c\u7d22\u529f\u80fd\u3002
fzf\n
\u5728\u6b64\u6a21\u5f0f\u4e0b\uff0c\u7528\u6237\u53ef\u8f93\u5165\u7279\u5b9a\u7684\u6587\u4ef6\u6216\u76ee\u5f55\u540d\uff0cFZF \u5c06\u4f1a\u5728\u5f53\u524d\u76ee\u5f55\u4e0b\u6267\u884c\u67e5\u627e\uff0c\u5e76\u663e\u793a\u51fa\u6307\u5b9a\u6587\u4ef6\u6216\u76ee\u5f55\u7684\u76f8\u5bf9\u8def\u5f84\u3002
\u4f7f\u7528\u5feb\u6377\u952e Ctrl+J
\u6216 Ctrl+N
\u53ef\u5411\u4e0b\u6eda\u52a8\u5217\u8868\uff1b Ctrl+K
\u6216 Ctrl+P
\u53ef\u5411\u4e0b\u6eda\u52a8\u5217\u8868\u3002 \u4f7f\u7528 Enter
\u9009\u4e2d\u6761\u76ee\u5e76\u9000\u51fa FZF\uff0cCtrl+C
\u3001Ctrl+G
\u6216 Esc
\u53ef\u9000\u51fa FZF \u800c\u4e0d\u8fdb\u884c\u9009\u62e9\u3002
FZF \u53ef\u4f5c\u4e3a Vim \u7684\u63d2\u4ef6\u4f7f\u7528\uff0c\u65b9\u4fbf\u5feb\u901f\u67e5\u627e\u9700\u8981\u7f16\u8f91\u7684\u6587\u4ef6\u3002
\u5728\u672c\u4f8b\u4e2d\uff0c\u4f7f\u7528 vim-plug \u63d2\u4ef6\u7ba1\u7406\u5668\u8fdb\u884c\u5b89\u88c5\uff1a \u7f16\u8f91 ~/.vimrc
\u6587\u4ef6\uff0c\u5728 call plug#begin()
\u4e0b\u6dfb\u52a0\u5982\u4e0b\u884c\uff1a
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }\n
\u91cd\u65b0\u52a0\u8f7d .vimrc
\u6587\u4ef6\uff1a
source ~/.vimrc\n
\u6253\u5f00 vim \uff0c\u5e76\u6267\u884c :PlugInstall
\u7528\u4e8e\u5b89\u88c5\u63d2\u4ef6\u3002
\u4f7f\u7528 python \u914d\u7f6e\u4e86 gdb \u8c03\u8bd5\u754c\u9762\uff0c\u5b8c\u5168\u53ef\u4ee5\u81ea\u5df1\u5199\u4ee3\u7801\u53bb\u5b9a\u4e49\u6574\u4e2a\u8c03\u8bd5\u754c\u9762\u53ef\u4ee5\u8bf4\u662f\u582a\u6bd4 IDE \uff0c\u663e\u793a\u4e5f\u975e\u5e38\u597d\u770b\uff0c\u5b8c\u5168\u57fa\u4e8e\u7ec8\u7aef,\u4f5c\u4e3a\u5e95\u5c42\u7684\u8c03\u8bd5\u8f6f\u4ef6\u53ef\u4ee5\u5e2e\u52a9\u5f00\u53d1\u8005\u66f4\u597d\u7684\u67e5\u770b\u53d8\u91cf\u3001\u5bc4\u5b58\u5668\u3001\u5355\u6b65\u6267\u884c\u7b49\u3002
"},{"location":"software/gdbdashboard/#linux","title":"\u5b89\u88c5(linux\u73af\u5883)","text":"\u5f00\u6e90\u5730\u5740 https://github.com/cyrus-and/gdb-dashboard.git
\u83b7\u53d6
wget -P ~ https://git.io/.gdbinit #\u5982\u679c\u7f51\u901f\u8f83\u6162\u53ef\u4ee5\u76f4\u63a5\u65b0\u5efa\u540c\u540d\u6587\u4ef6.gdbinit\u4e4b\u540e\u590d\u5236\u7c98\u8d34\u8fc7\u6765\n
\u76ee\u524d IDE \u96c6\u6210\u4e86\u5f88\u591a\u7684\u8c03\u8bd5\u5de5\u5177\uff0c\u4f46\u662f\u5728\u4e00\u4e9b\u5185\u6838\u7f16\u7a0b\u6216\u8005\u5176\u4ed6\u7684\u5e95\u5c42\u5f00\u53d1\u9886\u57df gdb \u4ecd\u7136\u5177\u5907\u4e0d\u53ef\u66ff\u4ee3\u7684\u4f5c\u7528\uff0c\u4e3a\u6b64\u6211\u4eec\u5e0c\u671b\u5728\u539f\u672c\u67af\u71e5\u7684\u8c03\u8bd5\u7ec8\u7aef\u627e\u5230\u66f4\u52a0\u4fbf\u4e8e\u89c2\u5bdf\u7684\u9875\u9762\u597d\u5728\u5df2\u7ecf\u6709\u4eba\u5e2e\u6211\u4eec\u5b9e\u73b0\u4e86\u8fd9\u4e00\u5de5\u5177\u4e3a\u6b64\u6211\u4eec\u5e0c\u671b\u628a\u8fd9\u6837\u7684\u4fbf\u6377\u5e26\u7ed9\u6bcf\u4e00\u4e2a\u4eba\u3002
"},{"location":"software/gdbdashboard/#_3","title":"\u8fd0\u884c\u8c03\u8bd5\u57fa\u672c\u6307\u4ee4","text":"\u53c2\u8003 gdb\u8c03\u8bd5\u5e38\u89c1\u6307\u4ee4
"},{"location":"software/gdbdashboard/#_4","title":"\u6ce8\u610f","text":"\u5728\u4f7f\u7528\u8be5\u63d2\u4ef6\u65f6\u9700\u8981\u67e5\u770b\u5f53\u524d\u6240\u4f7f\u7528\u7684 gdb \u662f\u5426\u652f\u6301 python \u811a\u672c\uff0c\u5f53\u51fa\u73b0 Scripting in the \"Python\" language is not supported in this copy of GDB.
\u65f6\u5219\u8868\u660e\u8be5 gdb \u4e0d\u652f\u6301 python \u811a\u672c\uff0c\u65e0\u6cd5\u4f7f\u7528\u8be5\u63d2\u4ef6\u3002\u53e6\u5916\uff0c\u4e5f\u9700\u8981\u6ce8\u610f gdb \u4e0e python \u7684\u7248\u672c\u662f\u5426\u5339\u914d\u7684\u95ee\u9898\uff0c\u89c1 issue
\u5b98\u7f51\uff1ahttps://mathpix.com
Mathpix\u662f\u4e00\u6b3e tex \u683c\u5f0f\u516c\u5f0f\u751f\u6210\u8f6f\u4ef6\uff0c\u5b83\u4e3b\u8981\u7684\u529f\u80fd\u662f\u901a\u8fc7 ocr \u6280\u672f\u8bc6\u522b\u622a\u56fe\u5f53\u4e2d\u7684\u516c\u5f0f\uff0c\u5e76\u751f\u6210\u5bf9\u5e94\u7684 tex \u4ee3\u7801\uff0c\u5728\u8bba\u6587\u5199\u4f5c\u7684\u8fc7\u7a0b\u4e2d\u80fd\u591f\u6781\u5927\u7684\u52a0\u901f\u516c\u5f0f\u7f16\u5199\u7684\u901f\u5ea6\u3002
\u7279\u6027:
\u7f3a\u70b9:
\u5b98\u7f51: https://www.nano-editor.org/
gnu nano \u662f\u4e00\u4e2a\u7b80\u5355\u6613\u4e0a\u624b\u7684\u547d\u4ee4\u884c\u7f16\u8f91\u5668\uff0c\u90e8\u5206 linux \u53d1\u884c\u7248\u7684\u9ed8\u8ba4\u7f16\u8f91\u5668\u5c31\u662f nano \uff0c\u540c\u65f6\u4f60\u4e5f\u53ef\u4ee5\u5728 windows \u4e2d\u5b89\u88c5\u5b83\u3002
"},{"location":"software/nano/#_1","title":"\u5b89\u88c5","text":"\u5728 linux \u53d1\u884c\u7248\u4e2d\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u53d1\u884c\u7248\u5bf9\u5e94\u7684\u7684\u5305\u7ba1\u7406\u5de5\u5177\u8fdb\u884c\u5b89\u88c5\u3002
\u4ee5\u4f7f\u7528 apt \u4f5c\u4e3a\u5305\u7ba1\u7406\u5de5\u5177\u7684 debain \u4e3a\u4f8b\uff1a
sudo apt install nano\n
"},{"location":"software/nano/#_2","title":"\u57fa\u7840\u4f7f\u7528","text":"\u5728\u547d\u4ee4\u884c\u4e2d\u8f93\u5165 nano \u5c31\u4f1a\u51fa\u73b0\u8be6\u7ec6\u7684\u64cd\u4f5c\u6307\u5bfc\u3002
"},{"location":"software/nano/#_3","title":"\u4f18\u70b9","text":"Ranger \u662f\u6709\u7740 Vim \u98ce\u683c\u7684\u5feb\u6377\u952e\u7684\u7ec8\u7aef\u6587\u4ef6\u7ba1\u7406\u5668\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528\u952e\u76d8\u5feb\u901f\u67e5\u770b\u3001\u9884\u89c8\u6587\u4ef6\uff0c\u5728\u4e0d\u540c\u7684\u6587\u4ef6\u5939\u4e4b\u95f4\u5bfc\u822a\uff0c\u8fd8\u53ef\u4ee5\u76f4\u63a5\u5728ranger\u4e0b\u5bf9\u6587\u4ef6\uff08\u6587\u4ef6\u5939\uff09\u8fdb\u884c\u590d\u5236\u3001\u7c98\u8d34\u3001\u5220\u9664\u3001\u91cd\u547d\u540d\u7b49\u5e38\u7528\u64cd\u4f5c\u3002
"},{"location":"software/ranger/#_2","title":"\u5b89\u88c5","text":"\u83b7\u53d6
sudo apt install ranger\n
pip install ranger-fm\n
\u6548\u679c\u56fe
\u53c2\u8003
\u5b98\u65b9\u6587\u6863
ranger official wiki
\u5feb\u6377\u952e\u603b\u7ed3
ranger cheat sheet
\u5b98\u7f51\uff1ahttps://www.texmacs.org/tmweb/home/welcome.en.html
\u88ab LaTeX \u6298\u78e8\u7684\u8bdd\uff0c\u4e0d\u59a8\u8bd5\u8bd5 GNU TeXmacs\uff01TeXmacs \u662f\u4e00\u6b3e\u6240\u89c1\u5373\u6240\u5f97\u7684\u79d1\u5b66\u6587\u6863\uff08\u8bba\u6587\uff0c\u7b14\u8bb0\u7b49\uff09\u5f00\u6e90\u7f16\u8f91\u5668\u3002 \u5982\u679c\u5199\u5f88\u591a\u7684\u6570\u5b66\u516c\u5f0f\u7684\u8bdd\u53ef\u4ee5\u8bd5\u8bd5\uff0c\u975e\u5e38\u597d\u7528\uff01
\u7279\u6027:
a
\u518d\u6309tab\u5c31\u53ef\u4ee5\u5f97\u5230 \\(\\alpha\\) \u7b49\u770b\u7740\u50cf a \u7684\u5b57\u7b26\u3002\u9700\u8981\u4ec0\u4e48\u529f\u80fd\u770b\u4e00\u770b\u5185\u5efa\u6587\u6863\u5c31\u5dee\u4e0d\u591a\u4f1a\u4e86\uff0c\u5076\u5c14\u6587\u6863\u91cc\u6709\u8fc7\u65f6\u7684\u5730\u65b9\uff0c\u53ef\u4ee5\u4e0b\u4e00\u672c The Jolly Writer \uff0c\u4e5f\u662f\u8f6f\u4ef6\u7684\u4e3b\u8981\u4f5c\u8005\u5199\u7684\u3002
\u552f\u4e00\u8981\u6ce8\u610f\u7684\u4e00\u70b9\u662f\uff0c\u8bb0\u5f97\u5207\u6362\u5230\u4e2d\u6587\u6a21\u5f0f\uff08\u70b9\u83dc\u5355\u680f\u4e0a\u9762\u7684\u56fd\u65d7\uff09\uff0c\u5426\u5219\u4e0d\u4f1a\u81ea\u52a8\u6362\u884c\u3002
"},{"location":"specification/pr/","title":"Pull Request \u89c4\u8303","text":"\u5bf9\u4e8e Pull Request\uff0c\u8bf7\u9075\u5b88\u4ee5\u4e0b\u51e0\u70b9\u8981\u6c421\uff1a
fix #xxxx
\u5b57\u6bb5\uff0c\u5176\u4e2d xxxx
\u4ee3\u8868 issue \u7684\u7f16\u53f7\u3002\u5bf9\u4e8e Pull Request \u7684\u6807\u9898\uff0c\u63a8\u8350\u4f7f\u7528\u5982\u4e0b\u683c\u5f0f\u4e66\u5199\uff1a
<\u4fee\u6539\u7c7b\u578b>(<\u6587\u4ef6\u540d>): <\u4fee\u6539\u7684\u5185\u5bb9> (<\u5bf9\u5e94 issue \u7684\u7f16\u53f7>)\n
\u4fee\u6539\u7c7b\u578b\u5206\u4e3a\u5982\u4e0b\u51e0\u7c7b\uff1a
feat
\uff1a\u7528\u4e8e\u6dfb\u52a0\u5185\u5bb9\u7684\u60c5\u51b5\u3002fix
\uff1a\u7528\u4e8e\u4fee\u6b63\u73b0\u6709\u5185\u5bb9\u9519\u8bef\u7684\u60c5\u51b5\u3002refactor
\uff1a\u7528\u4e8e\u5bf9\u4e00\u4e2a\u9875\u9762\u8fdb\u884c\u91cd\u6784\uff08\u8f83\u5927\u89c4\u6a21\u7684\u66f4\u6539\uff09\u7684\u60c5\u51b5\u3002revert
\uff1a\u7528\u4e8e\u56de\u9000\u4e4b\u524d\u66f4\u6539\u7684\u60c5\u51b5\u3002\u793a\u4f8b\uff1a
fix(sepecification/specification): \u4fee\u6539\u4ee3\u7801\u6ce8\u91ca\u4f7f\u63cf\u8ff0\u66f4\u6e05\u6670
fix: plugins/xxx \u4e0d\u5728\u76ee\u5f55\u4e2d (#2)
feat(software/mathpix): official website
refactor(specification/template): \u6574\u7406\u9875\u9762\u5185\u5bb9
\u4fee\u6539\u81ea OI-wiki: \u5982\u4f55\u53c2\u4e0e \u21a9
\u670b\u53cb\u4f60\u597d\uff0c\u5982\u679c\u4f60\u6709\u4e00\u4e2a\u5f88\u68d2\u7684\u5de5\u5177\u5e0c\u671b\u548c\u5927\u5bb6\u5206\u4eab\uff0c\u4f46\u662f\u4f60\u4e0d\u77e5\u9053\u600e\u4e48\u5199\u4e00\u4e2amarkdown\uff0c\u8fd9\u91cc\u63d0\u4f9b\u4e86\u4e00\u4e2a\u53ef\u4ee5\u53c2\u8003\u7684\u6a21\u7248
"},{"location":"specification/template/#_2","title":"\u7b80\u4ecb","text":"\u6211\u4eec\u5e0c\u671b\u63d0\u4ea4\u7684pr\u5728\u7b80\u4ecb\u90e8\u5206\u63cf\u8ff0\u8fd9\u4e2a\u5de5\u5177\u7684:
\u6211\u4eec\u5e0c\u671b\u63d0\u4ea4\u7684pr\u5728\u5b89\u88c5\u90e8\u5206\u63cf\u8ff0:
$clang --version
\u68c0\u67e5 clang
\u662f\u5426\u6210\u529f\u5b89\u88c5\u6211\u4eec\u5e0c\u671b\u63d0\u4ea4\u7684pr\u5728\u63a8\u8350\u7406\u7531\u90e8\u5206\u63cf\u8ff0:
\u6211\u4eec\u5e0c\u671b\u63d0\u4ea4\u7684pr\u5728\u53c2\u8003\u90e8\u5206\u63d0\u4f9b\u4e00\u4e9b\u5e38\u7528\u7684\u53c2\u8003\uff0c\u4f8b\u5982:
\u300c\u6709\u7814\u7a76\u663e\u793a\uff0c\u6253\u5b57\u7684\u65f6\u5019\u4e0d\u559c\u6b22\u5728\u4e2d\u6587\u548c\u82f1\u6587\u4e4b\u95f4\u52a0\u7a7a\u683c\u7684\u4eba\uff0c\u611f\u60c5\u8def\u90fd\u8d70\u5f97\u5f88\u8f9b\u82e6\uff0c\u6709\u4e03\u6210\u7684\u6bd4\u4f8b\u4f1a\u5728 34 \u5c81\u7684\u65f6\u5019\u8ddf\u81ea\u5df1\u4e0d\u7231\u7684\u4eba\u7ed3\u5a5a\uff0c\u800c\u5176\u4f59\u4e09\u6210\u7684\u4eba\u6700\u540e\u53ea\u80fd\u628a\u9057\u4ea7\u7559\u7ed9\u81ea\u5df1\u7684\u732b\u3002\u6bd5\u7adf\u7231\u60c5\u8ddf\u4e66\u5199\u90fd\u9700\u8981\u9002\u65f6\u5730\u7559\u767d\u3002
\u4e0e\u5927\u5bb6\u5171\u52c9\u4e4b\u3002\u300d\u2014\u2014vinta/paranoid-auto-spacing
"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_3","title":"\u4e2d\u82f1\u6587\u4e4b\u95f4\u9700\u8981\u589e\u52a0\u7a7a\u683c","text":"\u6b63\u786e\uff1a
\u5728 LeanCloud \u4e0a\uff0c\u6570\u636e\u5b58\u50a8\u662f\u56f4\u7ed5 AVObject
\u8fdb\u884c\u7684\u3002
\u9519\u8bef\uff1a
\u5728LeanCloud\u4e0a\uff0c\u6570\u636e\u5b58\u50a8\u662f\u56f4\u7ed5AVObject
\u8fdb\u884c\u7684\u3002
\u5728 LeanCloud\u4e0a\uff0c\u6570\u636e\u5b58\u50a8\u662f\u56f4\u7ed5AVObject
\u8fdb\u884c\u7684\u3002
\u5b8c\u6574\u7684\u6b63\u786e\u7528\u6cd5\uff1a
\u5728 LeanCloud \u4e0a\uff0c\u6570\u636e\u5b58\u50a8\u662f\u56f4\u7ed5 AVObject
\u8fdb\u884c\u7684\u3002\u6bcf\u4e2a AVObject
\u90fd\u5305\u542b\u4e86\u4e0e JSON \u517c\u5bb9\u7684 key-value \u5bf9\u5e94\u7684\u6570\u636e\u3002\u6570\u636e\u662f schema-free \u7684\uff0c\u4f60\u4e0d\u9700\u8981\u5728\u6bcf\u4e2a AVObject
\u4e0a\u63d0\u524d\u6307\u5b9a\u5b58\u5728\u54ea\u4e9b\u952e\uff0c\u53ea\u8981\u76f4\u63a5\u8bbe\u5b9a\u5bf9\u5e94\u7684 key-value \u5373\u53ef\u3002
\u4f8b\u5916\uff1a\u300c\u8c46\u74e3FM\u300d\u7b49\u4ea7\u54c1\u540d\u8bcd\uff0c\u6309\u7167\u5b98\u65b9\u6240\u5b9a\u4e49\u7684\u683c\u5f0f\u4e66\u5199\u3002
"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_4","title":"\u4e2d\u6587\u4e0e\u6570\u5b57\u4e4b\u95f4\u9700\u8981\u589e\u52a0\u7a7a\u683c","text":"\u6b63\u786e\uff1a
\u4eca\u5929\u51fa\u53bb\u4e70\u83dc\u82b1\u4e86 5000 \u5143\u3002
\u9519\u8bef\uff1a
\u4eca\u5929\u51fa\u53bb\u4e70\u83dc\u82b1\u4e86 5000\u5143\u3002
\u4eca\u5929\u51fa\u53bb\u4e70\u83dc\u82b1\u4e865000\u5143\u3002
"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_5","title":"\u6570\u5b57\u4e0e\u5355\u4f4d\u4e4b\u95f4\u9700\u8981\u589e\u52a0\u7a7a\u683c","text":"\u6b63\u786e\uff1a
\u6211\u5bb6\u7684\u5149\u7ea4\u5165\u5c4b\u5bbd\u5e26\u6709 10 Gbps\uff0cSSD \u4e00\u5171\u6709 20 TB
\u9519\u8bef\uff1a
\u6211\u5bb6\u7684\u5149\u7ea4\u5165\u5c4b\u5bbd\u5e26\u6709 10Gbps\uff0cSSD \u4e00\u5171\u6709 20TB
\u4f8b\u5916\uff1a\u5ea6\u6570\uff0f\u767e\u5206\u6bd4\u4e0e\u6570\u5b57\u4e4b\u95f4\u4e0d\u9700\u8981\u589e\u52a0\u7a7a\u683c\uff1a
\u6b63\u786e\uff1a
\u89d2\u5ea6\u4e3a 90\u00b0 \u7684\u89d2\uff0c\u5c31\u662f\u76f4\u89d2\u3002
\u65b0 MacBook Pro \u6709 15% \u7684 CPU \u6027\u80fd\u63d0\u5347\u3002
\u9519\u8bef\uff1a
\u89d2\u5ea6\u4e3a 90 \u00b0 \u7684\u89d2\uff0c\u5c31\u662f\u76f4\u89d2\u3002
\u65b0 MacBook Pro \u6709 15 % \u7684 CPU \u6027\u80fd\u63d0\u5347\u3002
"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_6","title":"\u5168\u89d2\u6807\u70b9\u4e0e\u5176\u4ed6\u5b57\u7b26\u4e4b\u95f4\u4e0d\u52a0\u7a7a\u683c","text":"\u6b63\u786e\uff1a
\u521a\u521a\u4e70\u4e86\u4e00\u90e8 iPhone\uff0c\u597d\u5f00\u5fc3\uff01
\u9519\u8bef\uff1a
\u521a\u521a\u4e70\u4e86\u4e00\u90e8 iPhone \uff0c\u597d\u5f00\u5fc3\uff01
\u521a\u521a\u4e70\u4e86\u4e00\u90e8 iPhone\uff0c \u597d\u5f00\u5fc3\uff01
"},{"location":"specification/markdown/chinese_copywriting_guidelines/#text-spacing","title":"\u7528text-spacing
\u6765\u633d\u6551\uff1f","text":"CSS Text Module Level 4 \u7684 text-spacing
\u548c Microsoft \u7684 -ms-text-autospace
\u53ef\u4ee5\u5b9e\u73b0\u81ea\u52a8\u4e3a\u4e2d\u82f1\u6587\u4e4b\u95f4\u589e\u52a0\u7a7a\u767d\u3002\u4e0d\u8fc7\u76ee\u524d\u5e76\u672a\u666e\u53ca\uff0c\u53e6\u5916\u5728\u5176\u4ed6\u5e94\u7528\u573a\u666f\uff0c\u4f8b\u5982 macOS\u3001iOS\u3001Windows \u7b49\u7528\u6237\u754c\u9762\u76ee\u524d\u5e76\u4e0d\u5b58\u5728\u8fd9\u4e2a\u7279\u6027\uff0c\u6240\u4ee5\u8bf7\u7ee7\u7eed\u4fdd\u6301\u968f\u624b\u52a0\u7a7a\u683c\u7684\u4e60\u60ef\u3002
\u5373\u4f7f\u4e2d\u56fd\u5927\u9646\u7684\u6807\u70b9\u7b26\u53f7\u7528\u6cd5\u5141\u8bb8\u91cd\u590d\u4f7f\u7528\u6807\u70b9\u7b26\u53f7\uff0c\u4f46\u662f\u8fd9\u4e48\u505a\u4f1a\u7834\u574f\u53e5\u5b50\u7684\u7f8e\u89c2\u6027\u3002
\u6b63\u786e\uff1a
\u5fb7\u56fd\u961f\u7adf\u7136\u6218\u80dc\u4e86\u5df4\u897f\u961f\uff01
\u5979\u7adf\u7136\u5bf9\u4f60\u8bf4\u300c\u55b5\u300d\uff1f\uff01
\u9519\u8bef\uff1a
\u5fb7\u56fd\u961f\u7adf\u7136\u6218\u80dc\u4e86\u5df4\u897f\u961f\uff01\uff01
\u5fb7\u56fd\u961f\u7adf\u7136\u6218\u80dc\u4e86\u5df4\u897f\u961f\uff01\uff01\uff01\uff01\uff01\uff01\uff01\uff01
\u5979\u7adf\u7136\u5bf9\u4f60\u8bf4\u300c\u55b5\u300d\uff1f\uff1f\uff01\uff01
\u5979\u7adf\u7136\u5bf9\u4f60\u8bf4\u300c\u55b5\u300d\uff1f\uff01\uff1f\uff01\uff1f\uff1f\uff01\uff01
"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_9","title":"\u5168\u89d2\u548c\u534a\u89d2","text":"\u4e0d\u660e\u767d\u4ec0\u4e48\u662f\u5168\u89d2\uff08\u5168\u5f62\uff09\u4e0e\u534a\u89d2\uff08\u534a\u5f62\uff09\u7b26\u53f7\uff1f\u8bf7\u67e5\u770b\u7ef4\u57fa\u767e\u79d1\u6761\u76ee\u300e\u5168\u89d2\u548c\u534a\u89d2\u300f\u3002
"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_10","title":"\u4f7f\u7528\u5168\u89d2\u4e2d\u6587\u6807\u70b9","text":"\u6b63\u786e\uff1a
\u55e8\uff01\u4f60\u77e5\u9053\u561b\uff1f\u4eca\u5929\u524d\u53f0\u7684\u5c0f\u59b9\u8ddf\u6211\u8bf4\u300c\u55b5\u300d\u4e86\u54ce\uff01
\u6838\u78c1\u5171\u632f\u6210\u50cf\uff08NMRI\uff09\u662f\u4ec0\u4e48\u539f\u7406\u90fd\u4e0d\u77e5\u9053\uff1fJFGI\uff01
\u9519\u8bef\uff1a
\u55e8! \u4f60\u77e5\u9053\u561b? \u4eca\u5929\u524d\u53f0\u7684\u5c0f\u59b9\u8ddf\u6211\u8bf4 \"\u55b5\" \u4e86\u54ce\uff01
\u55e8!\u4f60\u77e5\u9053\u561b?\u4eca\u5929\u524d\u53f0\u7684\u5c0f\u59b9\u8ddf\u6211\u8bf4\"\u55b5\"\u4e86\u54ce\uff01
\u6838\u78c1\u5171\u632f\u6210\u50cf (NMRI) \u662f\u4ec0\u4e48\u539f\u7406\u90fd\u4e0d\u77e5\u9053? JFGI!
\u6838\u78c1\u5171\u632f\u6210\u50cf(NMRI)\u662f\u4ec0\u4e48\u539f\u7406\u90fd\u4e0d\u77e5\u9053?JFGI!
"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_11","title":"\u6570\u5b57\u4f7f\u7528\u534a\u89d2\u5b57\u7b26","text":"\u6b63\u786e\uff1a
\u8fd9\u4e2a\u86cb\u7cd5\u53ea\u5356 1000 \u5143\u3002
\u9519\u8bef\uff1a
\u8fd9\u4e2a\u86cb\u7cd5\u53ea\u5356 \uff11\uff10\uff10\uff10 \u5143\u3002
\u4f8b\u5916\uff1a\u5728\u8bbe\u8ba1\u7a3f\u3001\u5ba3\u4f20\u6d77\u62a5\u4e2d\u5982\u51fa\u73b0\u6781\u5c11\u91cf\u6570\u5b57\u7684\u60c5\u5f62\u65f6\uff0c\u4e3a\u65b9\u4fbf\u6587\u5b57\u5bf9\u9f50\uff0c\u662f\u53ef\u4ee5\u4f7f\u7528\u5168\u89d2\u6570\u5b57\u7684\u3002
"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_12","title":"\u9047\u5230\u5b8c\u6574\u7684\u82f1\u6587\u6574\u53e5\u3001\u7279\u6b8a\u540d\u8bcd\uff0c\u5176\u5185\u5bb9\u4f7f\u7528\u534a\u89d2\u6807\u70b9","text":"\u6b63\u786e\uff1a
\u4e54\u5e03\u65af\u90a3\u53e5\u8bdd\u662f\u600e\u4e48\u8bf4\u7684\uff1f\u300cStay hungry, stay foolish.\u300d
\u63a8\u8350\u4f60\u9605\u8bfb\u300aHackers & Painters: Big Ideas from the Computer Age\u300b\uff0c\u975e\u5e38\u7684\u6709\u8da3\u3002
\u9519\u8bef\uff1a
\u4e54\u5e03\u65af\u90a3\u53e5\u8bdd\u662f\u600e\u4e48\u8bf4\u7684\uff1f\u300cStay hungry\uff0cstay foolish\u3002\u300d
\u63a8\u8350\u4f60\u9605\u8bfb\u300aHackers\uff06Painters\uff1aBig Ideas from the Computer Age\u300b\uff0c\u975e\u5e38\u7684\u6709\u8da3\u3002
"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_13","title":"\u540d\u8bcd","text":""},{"location":"specification/markdown/chinese_copywriting_guidelines/#_14","title":"\u4e13\u6709\u540d\u8bcd\u4f7f\u7528\u6b63\u786e\u7684\u5927\u5c0f\u5199","text":"\u5927\u5c0f\u5199\u76f8\u5173\u7528\u6cd5\u539f\u5c5e\u4e8e\u82f1\u6587\u4e66\u5199\u8303\u7574\uff0c\u4e0d\u5c5e\u4e8e\u672c wiki \u8ba8\u8bba\u5185\u5bb9\uff0c\u5728\u8fd9\u91cc\u53ea\u5bf9\u90e8\u5206\u6613\u9519\u7528\u6cd5\u8fdb\u884c\u7b80\u8ff0\u3002
\u6b63\u786e\uff1a
\u4f7f\u7528 GitHub \u767b\u5f55
\u6211\u4eec\u7684\u5ba2\u6237\u6709 GitHub\u3001Foursquare\u3001Microsoft Corporation\u3001Google\u3001Facebook, Inc.\u3002
\u9519\u8bef\uff1a
\u4f7f\u7528 github \u767b\u5f55
\u4f7f\u7528 GITHUB \u767b\u5f55
\u4f7f\u7528 Github \u767b\u5f55
\u4f7f\u7528 gitHub \u767b\u5f55
\u4f7f\u7528 g\uff72\u3093\u0124\u04268 \u767b\u5f55
\u6211\u4eec\u7684\u5ba2\u6237\u6709 github\u3001foursquare\u3001microsoft corporation\u3001google\u3001facebook, inc.\u3002
\u6211\u4eec\u7684\u5ba2\u6237\u6709 GITHUB\u3001FOURSQUARE\u3001MICROSOFT CORPORATION\u3001GOOGLE\u3001FACEBOOK, INC.\u3002
\u6211\u4eec\u7684\u5ba2\u6237\u6709 Github\u3001FourSquare\u3001MicroSoft Corporation\u3001Google\u3001FaceBook, Inc.\u3002
\u6211\u4eec\u7684\u5ba2\u6237\u6709 gitHub\u3001fourSquare\u3001microSoft Corporation\u3001google\u3001faceBook, Inc.\u3002
\u6211\u4eec\u7684\u5ba2\u6237\u6709 g\uff72\u3093\u0124\u04268\u3001\uff77ou\u042f\u01a7qu\uff91\u0433\u0454\u3001\u0e53\u0e40\u03c2\u0433\u0e4f\u0e23\u0e4f\u0166t \u03c2\u0e4f\u0433\u05e7\u0e4f\u0433\u0e04t\u0e40\u0e4f\u0e20n\u3001900913\u3001\u01924\u1103\u00eb\u0432\u0e4f\u0e4f\u043a, I\u041f\u1103.\u3002
\u6ce8\u610f\uff1a\u5f53\u7f51\u9875\u4e2d\u9700\u8981\u914d\u5408\u6574\u4f53\u89c6\u89c9\u98ce\u683c\u800c\u51fa\u73b0\u5168\u90e8\u5927\u5199\uff0f\u5c0f\u5199\u7684\u60c5\u5f62\uff0cHTML \u4e2d\u8bf7\u4f7f\u7528\u6807\u6dee\u7684\u5927\u5c0f\u5199\u89c4\u8303\u8fdb\u884c\u4e66\u5199\uff1b\u5e76\u901a\u8fc7 text-transform: uppercase;
\uff0ftext-transform: lowercase;
\u5bf9\u8868\u73b0\u5f62\u5f0f\u8fdb\u884c\u5b9a\u4e49\u3002
\u6b63\u786e\uff1a
\u6211\u4eec\u9700\u8981\u4e00\u4f4d\u719f\u6089 TypeScript\u3001HTML5\uff0c\u81f3\u5c11\u7406\u89e3\u4e00\u79cd\u6846\u67b6\uff08\u5982 React\u3001Next.js\uff09\u7684\u524d\u7aef\u5f00\u53d1\u8005\u3002
\u9519\u8bef\uff1a
\u6211\u4eec\u9700\u8981\u4e00\u4f4d\u719f\u6089 Ts\u3001h5\uff0c\u81f3\u5c11\u7406\u89e3\u4e00\u79cd\u6846\u67b6\uff08\u5982 RJS\u3001nextjs\uff09\u7684 FED\u3002
"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_16","title":"\u4e89\u8bae","text":"\u4ee5\u4e0b\u7528\u6cd5\u7565\u5e26\u6709\u4e2a\u4eba\u8272\u5f69\uff0c\u5373\uff1a\u65e0\u8bba\u662f\u5426\u9075\u5faa\u4e0b\u8ff0\u89c4\u5219\uff0c\u4ece\u8bed\u6cd5\u7684\u89d2\u5ea6\u6765\u8bb2\u90fd\u662f\u6b63\u786e\u7684\u3002
"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_17","title":"\u94fe\u63a5\u4e4b\u95f4\u589e\u52a0\u7a7a\u683c","text":"\u7528\u6cd5\uff1a
\u8bf7 \u63d0\u4ea4\u4e00\u4e2a issue \u5e76\u5206\u914d\u7ed9\u76f8\u5173\u540c\u4e8b\u3002
\u8bbf\u95ee\u6211\u4eec\u7f51\u7ad9\u7684\u6700\u65b0\u52a8\u6001\uff0c\u8bf7 \u70b9\u51fb\u8fd9\u91cc \u8fdb\u884c\u8ba2\u9605\uff01
\u5bf9\u6bd4\u7528\u6cd5\uff1a
\u8bf7\u63d0\u4ea4\u4e00\u4e2a issue\u5e76\u5206\u914d\u7ed9\u76f8\u5173\u540c\u4e8b\u3002
\u8bbf\u95ee\u6211\u4eec\u7f51\u7ad9\u7684\u6700\u65b0\u52a8\u6001\uff0c\u8bf7\u70b9\u51fb\u8fd9\u91cc\u8fdb\u884c\u8ba2\u9605\uff01
"},{"location":"specification/markdown/chinese_copywriting_guidelines/#_18","title":"\u7b80\u4f53\u4e2d\u6587\u4f7f\u7528\u76f4\u89d2\u5f15\u53f7","text":"\u7528\u6cd5\uff1a
\u300c\u8001\u5e08\uff0c\u300e\u6709\u6761\u4e0d\u7d0a\u300f\u7684\u300e\u7d0a\u300f\u662f\u4ec0\u4e48\u610f\u601d\uff1f\u300d
\u5bf9\u6bd4\u7528\u6cd5\uff1a
\u201c\u8001\u5e08\uff0c\u2018\u6709\u6761\u4e0d\u7d0a\u2019\u7684\u2018\u7d0a\u2019\u662f\u4ec0\u4e48\u610f\u601d\uff1f\u201d
Note
\u672c\u8981\u6c42\u53d6\u81ea \u4e2d\u6587\u6587\u6848\u6392\u7248\u6307\u5317 \uff0c\u4f60\u53ef\u4ee5\u70b9\u51fb\u94fe\u63a5\u6765\u4e86\u89e3\u66f4\u591a\u5185\u5bb9\u3002
"},{"location":"specification/markdown/latex/","title":"LaTeX","text":""},{"location":"specification/markdown/latex/#_1","title":"\u5982\u4f55\u63d2\u5165\u516c\u5f0f","text":"LaTeX \u7684\u6570\u5b66\u516c\u5f0f\u6709\u4e24\u79cd\uff1a\u884c\u4e2d\u516c\u5f0f\u548c\u72ec\u7acb\u516c\u5f0f\uff08\u884c\u95f4\u516c\u5f0f\uff09\u3002\u884c\u4e2d\u516c\u5f0f\u653e\u5728\u6587\u4e2d\u4e0e\u5176\u5b83\u6587\u5b57\u6df7\u7f16\uff0c\u72ec\u7acb\u516c\u5f0f\u5355\u72ec\u6210\u884c\u3002
\u884c\u4e2d\u516c\u5f0f\u53ef\u4ee5\u7528\u5982\u4e0b\u65b9\u6cd5\u8868\u793a\uff1a
$ \u6570\u5b66\u516c\u5f0f $
\u72ec\u7acb\u516c\u5f0f\u53ef\u4ee5\u7528\u5982\u4e0b\u65b9\u6cd5\u8868\u793a\uff1a
$$ \u6570\u5b66\u516c\u5f0f $$
\\dot{a}, \\ddot{a}, \\acute{a}, \\grave{a}
\\(\\dot{a}, \\ddot{a}, \\acute{a}, \\grave{a}\\)
\\check{a}, \\breve{a}, \\tilde{a}, \\bar{a}
\\(\\check{a}, \\breve{a}, \\tilde{a}, \\bar{a}\\)
\\hat{a}, \\widehat{a}, \\vec{a}
\\(\\hat{a}, \\widehat{a}, \\vec{a}\\)
"},{"location":"specification/markdown/latex/#_4","title":"\u6807\u51c6\u51fd\u6570","text":"\u6307\u6570
\\exp_a b = a^b, \\exp b = e^b, 10^m
\\(\\exp_a b = a^b, \\exp b = e^b, 10^m\\)
\u5bf9\u6570
\\ln c, \\lg d = \\log e, \\log_{10} f
\\(\\ln c, \\lg d = \\log e, \\log_{10} f\\)
\u4e09\u89d2\u51fd\u6570
\\sin a, \\cos b, \\tan c, \\cot d, \\sec e, \\csc f
\\(\\sin a, \\cos b, \\tan c, \\cot d, \\sec e, \\csc f\\)
\\arcsin a, \\arccos b, \\arctan c
\\(\\arcsin a, \\arccos b, \\arctan c\\)
\\sinh a, \\cosh b, \\tanh c, \\coth d
\\(\\sinh a, \\cosh b, \\tanh c, \\coth d\\)
\\operatorname{sh}k, \\operatorname{ch}l, \\operatorname{th}m, \\operatorname{coth}n
\\(\\operatorname{sh}k, \\operatorname{ch}l, \\operatorname{th}m, \\operatorname{coth}n\\)
\\operatorname{argsh}o, \\operatorname{argch}p, \\operatorname{argth}q
\\(\\operatorname{argsh}o, \\operatorname{argch}p, \\operatorname{argth}q\\)
\u6700\u5927\u503c\uff0c\u6700\u5c0f\u503c
\\min(x,y), \\max(x,y)
\\(\\min(x,y), \\max(x,y)\\)
"},{"location":"specification/markdown/latex/#_5","title":"\u754c\u9650\uff0c\u6781\u9650","text":"\\min x, \\max y, \\inf s, \\sup t
\\(\\min x, \\max y, \\inf s, \\sup t\\)
\\lim u, \\liminf v, \\limsup w
\\(\\lim u, \\liminf v, \\limsup w\\)
\\lim_{x \\to \\infty} \\frac{1}{n(n+1)}
\\(\\lim_{x \\to \\infty} \\frac{1}{n(n+1)}\\)
\\dim p, \\deg q, \\det m, \\ker\\phi
\\(\\dim p, \\deg q, \\det m, \\ker\\phi\\)
"},{"location":"specification/markdown/latex/#_6","title":"\u6295\u5c04","text":"\\Pr j, \\hom l, \\lVert z \\rVert, \\arg z
\\(\\Pr j, \\hom l, \\lVert z \\rVert, \\arg z\\)
"},{"location":"specification/markdown/latex/#_7","title":"\u5fae\u5206\u53ca\u5bfc\u6570","text":"dt, \\mathrm{d}t, \\partial t, \\nabla\\psi
\\(dt, \\mathrm{d}t, \\partial t, \\nabla\\psi\\)
dy/dx, \\mathrm{d}y/\\mathrm{d}x, \\frac{dy}{dx}, \\frac{\\mathrm{d}y}{\\mathrm{d}x}, \\frac{\\partial^2}{\\partial x_1\\partial x_2}y
\\(dy/dx, \\mathrm{d}y/\\mathrm{d}x, \\frac{dy}{dx}, \\frac{\\mathrm{d}y}{\\mathrm{d}x}, \\frac{\\partial^2}{\\partial x_1\\partial x_2}y\\)
\\prime, \\backprime, f^\\prime, f', f'', f^{(3)}, \\dot y, \\ddot y
\\(\\prime, \\backprime, f^\\prime, f', f'', f^{(3)}, \\dot y, \\ddot y\\)
"},{"location":"specification/markdown/latex/#_8","title":"\u7c7b\u5b57\u6bcd\u7b26\u53f7\u53ca\u5e38\u6570","text":"\\infty, \\aleph, \\complement, \\backepsilon, \\eth, \\Finv, \\hbar
\u221e,\u2135,\u2201,\u220d,\u00f0,\u2132,\u210f
\\Im, \\imath, \\jmath, \\Bbbk, \\ell, \\mho, \\wp, \\Re, \\circledS
\\(\\Im, \\imath, \\jmath, \\Bbbk, \\ell, \\mho, \\wp, \\Re, \\circledS\\)
"},{"location":"specification/markdown/latex/#_9","title":"\u6a21\u8fd0\u7b97","text":"s_k \\equiv 0 \\pmod{m}
\\(s_k \\equiv 0 \\pmod{m}\\)
a \\bmod b
\\(a \\bmod b\\)
\\gcd(m, n), \\operatorname{lcm}(m, n)
\\(\\gcd(m, n), \\operatorname{lcm}(m, n)\\)
\\mid, \\nmid, \\shortmid, \\nshortmid
\\(\\mid, \\nmid, \\shortmid, \\nshortmid\\)
"},{"location":"specification/markdown/latex/#_10","title":"\u6839\u53f7","text":"\\surd, \\sqrt{2}, \\sqrt[n]{}, \\sqrt[3]{\\frac{x^3+y^3}{2}}
\\(\\surd, \\sqrt{2}, \\sqrt[n]{}, \\sqrt[3]{\\frac{x^3+y^3}{2}}\\)
"},{"location":"specification/markdown/latex/#_11","title":"\u8fd0\u7b97\u7b26","text":"+, -, \\pm, \\mp, \\dotplus
\\(+, -, \\pm, \\mp, \\dotplus\\)
\\times, \\div, \\divideontimes, /, \\backslash
\\(\\times, \\div, \\divideontimes, /, \\backslash\\)
\\cdot, * \\ast, \\star, \\circ, \\bullet
\\(\\cdot, * \\ast, \\star, \\circ, \\bullet\\)
\\boxplus, \\boxminus, \\boxtimes, \\boxdot
\\(\\boxplus, \\boxminus, \\boxtimes, \\boxdot\\)
\\oplus, \\ominus, \\otimes, \\oslash, \\odot
\\(\\oplus, \\ominus, \\otimes, \\oslash, \\odot\\)
\\circleddash, \\circledcirc, \\circledast
\\(\\circleddash, \\circledcirc, \\circledast\\)
\\bigoplus, \\bigotimes, \\bigodot
\\(\\bigoplus, \\bigotimes, \\bigodot\\)
"},{"location":"specification/markdown/latex/#_12","title":"\u96c6\u5408","text":"\\{ \\}, \\empty \\emptyset, \\varnothing
\\(\\{ \\}, \\empty \\emptyset, \\varnothing\\)
\\in, \\notin \\not\\in, \\ni, \\not\\ni
\\(\\in, \\notin \\not\\in, \\ni, \\not\\ni\\)
\\cap, \\Cap, \\sqcap, \\bigcap
\\(\\cap, \\Cap, \\sqcap, \\bigcap\\)
\\cup, \\Cup, \\sqcup, \\bigcup, \\bigsqcup, \\uplus, \\biguplus
\\(\\cup, \\Cup, \\sqcup, \\bigcup, \\bigsqcup, \\uplus, \\biguplus\\)
\\setminus, \\smallsetminus, \\times
\\(\\setminus, \\smallsetminus, \\times\\)
\\subset, \\Subset, \\sqsubset
\\(\\subset, \\Subset, \\sqsubset\\)
\\supset, \\Supset, \\sqsupset
\\(\\supset, \\Supset, \\sqsupset\\)
\\subseteq, \\nsubseteq, \\subsetneq, \\varsubsetneq, \\sqsubseteq
\\(\\subseteq, \\nsubseteq, \\subsetneq, \\varsubsetneq, \\sqsubseteq\\)
\\supseteq, \\nsupseteq, \\supsetneq, \\varsupsetneq, \\sqsupseteq
\\(\\supseteq, \\nsupseteq, \\supsetneq, \\varsupsetneq, \\sqsupseteq\\)
\\subseteqq, \\nsubseteqq, \\subsetneqq, \\varsubsetneqq
\\(\\subseteqq, \\nsubseteqq, \\subsetneqq, \\varsubsetneqq\\)
\\supseteqq, \\nsupseteqq, \\supsetneqq, \\varsupsetneqq
\\(\\supseteqq, \\nsupseteqq, \\supsetneqq, \\varsupsetneqq\\)
"},{"location":"specification/markdown/latex/#_13","title":"\u5173\u7cfb\u7b26\u53f7","text":"=, \\ne, \\neq, \\equiv, \\not\\equiv
\\(=, \\ne, \\neq, \\equiv, \\not\\equiv\\)
\\doteq, \\doteqdot, \\overset{\\underset{\\mathrm{def}}{}}{=}, :=
\\(\\doteq, \\doteqdot, \\overset{\\underset{\\mathrm{def}}{}}{=}, :=\\)
\\sim, \\nsim, \\backsim, \\thicksim, \\simeq, \\backsimeq, \\eqsim, \\cong, \\ncong
\\(\\sim, \\nsim, \\backsim, \\thicksim, \\simeq, \\backsimeq, \\eqsim, \\cong, \\ncong\\)
\\approx, \\thickapprox, \\approxeq, \\asymp, \\propto, \\varpropto
\\(\\approx, \\thickapprox, \\approxeq, \\asymp, \\propto, \\varpropto\\)
<, \\nless, \\ll, \\not\\ll, \\lll, \\not\\lll, \\lessdot
\\(<, \\nless, \\ll, \\not\\ll, \\lll, \\not\\lll, \\lessdot\\)
>, \\ngtr, \\gg, \\not\\gg, \\ggg, \\not\\ggg, \\gtrdot
\\(>, \\ngtr, \\gg, \\not\\gg, \\ggg, \\not\\ggg, \\gtrdot\\)
\\le, \\leq, \\lneq, \\leqq, \\nleq, \\nleqq, \\lneqq, \\lvertneqq
\\(\\le, \\leq, \\lneq, \\leqq, \\nleq, \\nleqq, \\lneqq, \\lvertneqq\\)
\\ge, \\geq, \\gneq, \\geqq, \\ngeq, \\ngeqq, \\gneqq, \\gvertneqq
\\(\\ge, \\geq, \\gneq, \\geqq, \\ngeq, \\ngeqq, \\gneqq, \\gvertneqq\\)
\\lessgtr, \\lesseqgtr, \\lesseqqgtr, \\gtrless, \\gtreqless, \\gtreqqless
\\(\\lessgtr, \\lesseqgtr, \\lesseqqgtr, \\gtrless, \\gtreqless, \\gtreqqless\\)
\\leqslant, \\nleqslant, \\eqslantless
\\(\\leqslant, \\nleqslant, \\eqslantless\\)
\\geqslant, \\ngeqslant, \\eqslantgtr
\\(\\geqslant, \\ngeqslant, \\eqslantgtr\\)
\\lesssim, \\lnsim, \\lessapprox, \\lnapprox
\\(\\lesssim, \\lnsim, \\lessapprox, \\lnapprox\\)
\\gtrsim, \\gnsim, \\gtrapprox, \\gnapprox
\\(\\gtrsim, \\gnsim, \\gtrapprox, \\gnapprox\\)
\\prec, \\nprec, \\preceq, \\npreceq, \\precneqq
\\(\\prec, \\nprec, \\preceq, \\npreceq, \\precneqq\\)
\\succ, \\nsucc, \\succeq, \\nsucceq, \\succneqq
\\(\\succ, \\nsucc, \\succeq, \\nsucceq, \\succneqq\\)
\\preccurlyeq, \\curlyeqprec
\\(\\preccurlyeq, \\curlyeqprec\\)
\\succcurlyeq, \\curlyeqsucc
\\(\\succcurlyeq, \\curlyeqsucc\\)
\\precsim, \\precnsim, \\precapprox, \\precnapprox
\\(\\precsim, \\precnsim, \\precapprox, \\precnapprox\\)
\\succsim, \\succnsim, \\succapprox, \\succnapprox
\\(\\succsim, \\succnsim, \\succapprox, \\succnapprox\\)
"},{"location":"specification/markdown/latex/#_14","title":"\u51e0\u4f55\u7b26\u53f7","text":"\\parallel, \\nparallel, \\shortparallel, \\nshortparallel
\\(\\parallel, \\nparallel, \\shortparallel, \\nshortparallel\\)
\\perp, \\angle, \\sphericalangle, \\measuredangle, 45^\\circ
\\(\\perp, \\angle, \\sphericalangle, \\measuredangle, 45^\\circ\\)
\\Box, \\blacksquare, \\diamond, \\Diamond \\lozenge, \\blacklozenge, \\bigstar
\\(\\Box, \\blacksquare, \\diamond, \\Diamond \\lozenge, \\blacklozenge, \\bigstar\\)
\\bigcirc, \\triangle, \\bigtriangleup, \\bigtriangledown
\\(\\bigcirc, \\triangle, \\bigtriangleup, \\bigtriangledown\\)
\\vartriangle, \\triangledown
\\(\\vartriangle, \\triangledown\\)
\\blacktriangle, \\blacktriangledown, \\blacktriangleleft, \\blacktriangleright
\\(\\blacktriangle, \\blacktriangledown, \\blacktriangleleft, \\blacktriangleright\\)
"},{"location":"specification/markdown/latex/#_15","title":"\u903b\u8f91\u7b26\u53f7","text":"\\forall, \\exists, \\nexists
\\(\\forall, \\exists, \\nexists\\)
\\therefore, \\because, \\And
\\(\\therefore, \\because, \\And\\)
\\vee, \\curlyvee, \\bigvee
\\(\\vee, \\curlyvee, \\bigvee\\)
\\land, \\wedge, \\curlywedge, \\bigwedge
\\(\\land, \\wedge, \\curlywedge, \\bigwedge\\)
\\bar{q}, \\bar{abc}, \\overline{q}, \\overline{abc},
\\lnot \\neg, \\not\\operatorname{R}, \\bot, \\top
\\(\\bar{q}, \\bar{abc}, \\overline{q}, \\overline{abc},\\)
\\(\\lnot \\neg, \\not\\operatorname{R}, \\bot, \\top\\)
\\vdash \\dashv, \\vDash, \\Vdash, \\models
\\(\\vdash \\dashv, \\vDash, \\Vdash, \\models\\)
\\Vvdash \\nvdash \\nVdash \\nvDash \\nVDash
\\(\\Vvdash \\nvdash \\nVdash \\nvDash \\nVDash\\)
\\ulcorner \\urcorner \\llcorner \\lrcorner
\\(\\ulcorner \\urcorner \\llcorner \\lrcorner\\)
"},{"location":"specification/markdown/latex/#_16","title":"\u7bad\u5934","text":"\\Rrightarrow, \\Lleftarrow
\\(\\Rrightarrow, \\Lleftarrow\\)
\\Rightarrow, \\nRightarrow, \\Longrightarrow \\implies
\\(\\Rightarrow, \\nRightarrow, \\Longrightarrow \\implies\\)
\\Leftarrow, \\nLeftarrow, \\Longleftarrow
\\(\\Leftarrow, \\nLeftarrow, \\Longleftarrow\\)
\\Leftrightarrow, \\nLeftrightarrow, \\Longleftrightarrow \\iff
\\(\\Leftrightarrow, \\nLeftrightarrow, \\Longleftrightarrow \\iff\\)
\\Uparrow, \\Downarrow, \\Updownarrow
\\(\\Uparrow, \\Downarrow, \\Updownarrow\\)
\\rightarrow \\to, \\nrightarrow, \\longrightarrow
\\(\\rightarrow \\to, \\nrightarrow, \\longrightarrow\\)
\\leftarrow \\gets, \\nleftarrow, \\longleftarrow
\\(\\leftarrow \\gets, \\nleftarrow, \\longleftarrow\\)
\\leftrightarrow, \\nleftrightarrow, \\longleftrightarrow
\\(\\leftrightarrow, \\nleftrightarrow, \\longleftrightarrow\\)
\\uparrow, \\downarrow, \\updownarrow
\\(\\uparrow, \\downarrow, \\updownarrow\\)
\\nearrow, \\swarrow, \\nwarrow, \\searrow
\\(\\nearrow, \\swarrow, \\nwarrow, \\searrow\\)
\\mapsto, \\longmapsto
\\(\\mapsto, \\longmapsto\\)
\\rightharpoonup \\rightharpoondown \\leftharpoonup \\leftharpoondown \\upharpoonleft \\upharpoonright \\downharpoonleft \\downharpoonright \\rightleftharpoons \\leftrightharpoons
\\(\\rightharpoonup \\rightharpoondown \\leftharpoonup \\leftharpoondown \\upharpoonleft \\upharpoonright \\downharpoonleft \\downharpoonright \\rightleftharpoons \\leftrightharpoons\\)
\\curvearrowleft \\circlearrowleft \\Lsh \\upuparrows \\rightrightarrows \\rightleftarrows \\rightarrowtail \\looparrowright
\\(\\curvearrowleft \\circlearrowleft \\Lsh \\upuparrows \\rightrightarrows \\rightleftarrows \\rightarrowtail \\looparrowright\\)
\\curvearrowright \\circlearrowright \\Rsh \\downdownarrows \\leftleftarrows \\leftrightarrows \\leftarrowtail \\looparrowleft
\\(\\curvearrowright \\circlearrowright \\Rsh \\downdownarrows \\leftleftarrows \\leftrightarrows \\leftarrowtail \\looparrowleft\\)
\\hookrightarrow \\hookleftarrow \\multimap \\leftrightsquigarrow \\rightsquigarrow \\twoheadrightarrow \\twoheadleftarrow
\\(\\hookrightarrow \\hookleftarrow \\multimap \\leftrightsquigarrow \\rightsquigarrow \\twoheadrightarrow \\twoheadleftarrow\\)
"},{"location":"specification/markdown/latex/#_17","title":"\u7279\u6b8a\u7b26\u53f7","text":"\u7701\u7565\u53f7\uff1a\u6570\u5b66\u516c\u5f0f\u4e2d\u5e38\u89c1\u7684\u7701\u7565\u53f7\u6709\u4e24\u79cd\uff0c\\ldots
\u8868\u793a\u4e0e\u6587\u672c\u5e95\u7ebf\u5bf9\u9f50\u7684\u7701\u7565\u53f7\uff0c\\cdots
\u8868\u793a\u4e0e\u6587\u672c\u4e2d\u7ebf\u5bf9\u9f50\u7684\u7701\u7565\u53f7\u3002
\\amalg \\% \\dagger \\ddagger \\ldots \\cdots
\\(\\amalg \\% \\dagger \\ddagger \\ldots \\cdots\\)
\\smile \\frown \\wr \\triangleleft \\triangleright
\\(\\smile \\frown \\wr \\triangleleft \\triangleright\\)
\\diamondsuit, \\heartsuit, \\clubsuit, \\spadesuit, \\Game, \\flat, \\natural, \\sharp
\\(\\diamondsuit, \\heartsuit, \\clubsuit, \\spadesuit, \\Game, \\flat, \\natural, \\sharp\\)
"},{"location":"specification/markdown/latex/#_18","title":"\u672a\u5206\u7c7b","text":"\\diagup \\diagdown \\centerdot \\ltimes \\rtimes \\leftthreetimes \\rightthreetimes
\\(\\diagup \\diagdown \\centerdot \\ltimes \\rtimes \\leftthreetimes \\rightthreetimes\\)
\\eqcirc \\circeq \\triangleq \\bumpeq \\Bumpeq \\doteqdot \\risingdotseq \\fallingdotseq
\\(\\eqcirc \\circeq \\triangleq \\bumpeq \\Bumpeq \\doteqdot \\risingdotseq \\fallingdotseq\\)
\\intercal \\barwedge \\veebar \\doublebarwedge \\between \\pitchfork
\\(\\intercal \\barwedge \\veebar \\doublebarwedge \\between \\pitchfork\\)
\\vartriangleleft \\ntriangleleft \\vartriangleright \\ntriangleright
\\(\\vartriangleleft \\ntriangleleft \\vartriangleright \\ntriangleright\\)
\\trianglelefteq \\ntrianglelefteq \\trianglerighteq \\ntrianglerighteq
\\(\\trianglelefteq \\ntrianglelefteq \\trianglerighteq \\ntrianglerighteq\\)
"},{"location":"specification/markdown/latex/#_19","title":"\u4e0a\u6807\u3001\u4e0b\u6807\u53ca\u79ef\u5206\u7b49","text":"\u529f\u80fd|\u8bed\u6cd5|\u6548\u679c
^
\u8868\u793a\u4e0a\u6807, _
\u8868\u793a\u4e0b\u6807\u3002\u5982\u679c\u4e0a\u4e0b\u6807\u7684\u5185\u5bb9\u591a\u4e8e\u4e00\u4e2a\u5b57\u7b26\uff0c\u9700\u8981\u7528 {}
\u5c06\u8fd9\u4e9b\u5185\u5bb9\u62ec\u6210\u4e00\u4e2a\u6574\u4f53\u3002\u4e0a\u4e0b\u6807\u53ef\u4ee5\u5d4c\u5957\uff0c\u4e5f\u53ef\u4ee5\u540c\u65f6\u4f7f\u7528\u3002
\u4e0a\u6807
a^2
\\(a^2\\)
\u4e0b\u6807
a_2
\\(a_2\\)
\u7ec4\u5408
a^{2+2}
\\(a^{2+2}\\)
a_{i,j}
\\(a_{i,j}\\)
\u7ed3\u5408\u4e0a\u4e0b\u6807
x_2^3
\\(x_2^3\\)
\u524d\u7f6e\u4e0a\u4e0b\u6807
{}_1^2\\!X_3^4
\\({}_1^2\\!X_3^4\\)
\u5bfc\u6570
x'
\\(x'\\)
\u5bfc\u6570
x^\\prime
\\(x\\prime\\)
\u5bfc\u6570\u70b9
\\dot{x}
\\(\\dot{x}\\)
\\ddot{y}
\\(\\ddot{y}\\)
\u5411\u91cf
\\vec{c}
\uff08\u53ea\u6709\u4e00\u4e2a\u5b57\u6bcd\uff09
\\(\\vec{c}\\)
\\overleftarrow{a b}
\\(\\overleftarrow{a b}\\)
\\overrightarrow{c d}
\\(\\overrightarrow{c d}\\)
\\overleftrightarrow{a b}
\\(\\overleftrightarrow{a b}\\)
\\widehat{e f g}
\\(\\widehat{e f g}\\)
\u4e0a\u5f27
\uff08\u6ce8: \u6b63\u786e\u5e94\u8be5\u7528 \\overarc\uff0c\u4f46\u5728\u8fd9\u91cc\u884c\u4e0d\u901a\u3002\u8981\u7528\u5efa\u8bae\u7684\u8bed\u6cd5\u4f5c\u4e3a\u89e3\u51b3\u529e\u6cd5\u3002\uff09\uff08\u4f7f\u7528 overarc \u65f6\u9700\u8981\u5f15\u5165 {arcs} \u5305\u3002\uff09
\\overset{\\frown} {AB}
\\(\\overset{\\frown} {AB}\\)
\u4e0a\u5212\u7ebf
\\overline{h i j}
\\(\\overline{h i j}\\)
\u4e0b\u5212\u7ebf
\\underline{k l m}
\\(\\underline{k l m}\\)
\u4e0a\u62ec\u53f7
\\overbrace{1+2+\\cdots+100}
\\(\\overbrace{1+2+\\cdots+100}\\)
\\begin{matrix} 5050 \\\\ \\overbrace{ 1+2+\\cdots+100 } \\end{matrix}
\\(\\begin{matrix} 5050 \\\\ \\overbrace{ 1+2+\\cdots+100 } \\end{matrix}\\)
\u4e0b\u62ec\u53f7
\\underbrace{a+b+\\cdots+z}
\\(\\underbrace{a+b+\\cdots+z}\\)
\\begin{matrix} \\underbrace{ a+b+\\cdots+z } \\\\ 26 \\end{matrix}
\\(\\begin{matrix} \\underbrace{ a+b+\\cdots+z } \\\\ 26 \\end{matrix}\\)
\u6c42\u548c\uff08\u7d2f\u52a0\uff09
\\sum_{k=1}^N k^2
\\(\\sum_{k=1}^N k^2\\)
\\begin{matrix} \\sum_{k=1}^N k^2 \\end{matrix}
\\(\\begin{matrix} \\sum_{k=1}^N k^2 \\end{matrix}\\)
\u6c42\u79ef\uff08\u7d2f\u4e58\uff09
\\prod_{i=1}^N x_i
\\(\\prod_{i=1}^N x_i\\)
\\begin{matrix} \\prod_{i=1}^N x_i \\end{matrix}
\\(\\begin{matrix} \\prod_{i=1}^N x_i \\end{matrix}\\)
\u4e0a\u79ef
\\coprod_{i=1}^N x_i
\\(\\coprod_{i=1}^N x_i\\)
\\begin{matrix} \\coprod_{i=1}^N x_i \\end{matrix}
\\(\\begin{matrix} \\coprod_{i=1}^N x_i \\end{matrix}\\)
\u6781\u9650
\\lim_{n \\to \\infty}x_n
\\(\\lim_{n \\to \\infty}x_n\\)
\\begin{matrix} \\lim_{n \\to \\infty}x_n \\end{matrix}
\\(\\begin{matrix} \\lim_{n \\to \\infty}x_n \\end{matrix}\\)
\u79ef\u5206
\\int_{-N}^{N} e^x\\, {\\rm d}x
\\(\\int_{-N}^{N} e^x\\, {\\rm d}x\\)
\u672c\u4f8b\u4e2d \\
, \u548c {\\rm d}
\u90e8\u5206\u53ef\u7701\u7565\uff0c\u4f46\u5efa\u8bae\u52a0\u5165\uff0c\u80fd\u4f7f\u5f0f\u5b50\u66f4\u7f8e\u89c2\u3002{\\rm d}
\u53ef\u4ee5\u7528 \\mathrm{d}
\u7b49\u4ef7\u66ff\u6362\u3002
\\begin{matrix} \\int_{-N}^{N} e^x\\, \\mathrm{d}x \\end{matrix}
\uff08\u77e9\u9635\u4e2d\u79ef\u5206\u7b26\u53f7\u53d8\u5c0f\uff09
\\(\\begin{matrix} \\int_{-N}^{N} e^x\\, \\mathrm{d}x \\end{matrix}\\)
\u53cc\u91cd\u79ef\u5206
\\iint_{D}^{W} \\, \\mathrm{d}x\\,\\mathrm{d}y
\\(\\iint_{D}^{W} \\, \\mathrm{d}x\\,\\mathrm{d}y\\)
\u4e09\u91cd\u79ef\u5206
\\iiint_{E}^{V} \\, \\mathrm{d}x\\,\\mathrm{d}y\\,\\mathrm{d}z
\\(\\iiint_{E}^{V} \\, \\mathrm{d}x\\,\\mathrm{d}y\\,\\mathrm{d}z\\)
\u95ed\u5408\u7684\u66f2\u7ebf\u3001\u66f2\u9762\u79ef\u5206
\\oint_{C} x^3\\, \\mathrm{d}x + 4y^2\\, \\mathrm{d}y
\\(\\oint_{C} x^3\\, \\mathrm{d}x + 4y^2\\, \\mathrm{d}y\\)
\u4ea4\u96c6
\\bigcap_1^{n} p
\\(\\bigcap_1^{n} p\\)
\u5e76\u96c6
\\bigcup_1^{k} p
\\(\\bigcup_1^{k} p\\)
"},{"location":"specification/markdown/latex/#_20","title":"\u5206\u6570","text":"\u901a\u5e38\u4f7f\u7528 \\frac {\u5206\u5b50} {\u5206\u6bcd}
\u547d\u4ee4\u4ea7\u751f\u4e00\u4e2a\u5206\u6570\uff0c\u5206\u6570\u53ef\u5d4c\u5957\u3002 \u4fbf\u6377\u60c5\u51b5\u53ef\u76f4\u63a5\u8f93\u5165 \\frac ab
\u6765\u5feb\u901f\u751f\u6210\u4e00\u4e2a \\(\\frac ab\\) \u3002 \u5982\u679c\u5206\u5f0f\u5f88\u590d\u6742\uff0c\u4ea6\u53ef\u4f7f\u7528 \u5206\u5b50 \\over \u5206\u6bcd
\u547d\u4ee4\uff0c\u6b64\u65f6\u5206\u6570\u4ec5\u6709\u4e00\u5c42\u3002
\u529f\u80fd|\u8bed\u6cd5|\u6548\u679c
\u5206\u6570
\\frac{2}{4} = 0.5
\\(\\frac{2}{4}=0.5\\)
\u5c0f\u578b\u5206\u6570
\\tfrac{2}{4} = 0.5
\\(\\tfrac{2}{4} = 0.5\\)
\u8fde\u5206\u5f0f\uff08\u5927\u578b\u5d4c\u5957\u5206\u5f0f\uff09
\\cfrac{2}{c + \\cfrac{2}{d + \\cfrac{2}{4}}} = a
\\(\\cfrac{2}{c + \\cfrac{2}{d + \\cfrac{2}{4}}} = a\\)
\u5927\u578b\u4e0d\u5d4c\u5957\u5206\u5f0f
\\dfrac{2}{4} = 0.5 \\qquad \\dfrac{2}{c + \\dfrac{2}{d + \\dfrac{2}{4}}} = a
\\(\\dfrac{2}{4} = 0.5 \\qquad \\dfrac{2}{c + \\dfrac{2}{d + \\dfrac{2}{4}}} = a\\)
\u4e8c\u9879\u5f0f\u7cfb\u6570
\\dbinom{n}{r}=\\binom{n}{n-r}=\\mathrm{C}_n^r=\\mathrm{C}_n^{n-r}
\\(\\dbinom{n}{r}=\\binom{n}{n-r}=\\mathrm{C}_n^r=\\mathrm{C}_n^{n-r}\\)
\u5c0f\u578b\u4e8c\u9879\u5f0f\u7cfb\u6570
\\tbinom{n}{r}=\\tbinom{n}{n-r}=\\mathrm{C}_n^r=\\mathrm{C}_n^{n-r}
\\(\\tbinom{n}{r}=\\tbinom{n}{n-r}=\\mathrm{C}_n^r=\\mathrm{C}_n^{n-r}\\)
\u5927\u578b\u4e8c\u9879\u5f0f\u7cfb\u6570
\\binom{n}{r}=\\dbinom{n}{n-r}=\\mathrm{C}_n^r=\\mathrm{C}_n^{n-r}
\\(\\binom{n}{r}=\\dbinom{n}{n-r}=\\mathrm{C}_n^r=\\mathrm{C}_n^{n-r}\\)
\u5728\u4ee5 \\(e\\) \u4e3a\u5e95\u7684\u6307\u6570\u51fd\u6570\u3001\u6781\u9650\u548c\u79ef\u5206\u4e2d\u5c3d\u91cf\u4e0d\u8981\u4f7f\u7528 \\frac
\u7b26\u53f7\uff1a\u5b83\u4f1a\u4f7f\u6574\u6bb5\u51fd\u6570\u770b\u8d77\u6765\u5f88\u602a\uff0c\u800c\u4e14\u53ef\u80fd\u4ea7\u751f\u6b67\u4e49\u3002\u4e5f\u6b63\u662f\u56e0\u6b64\u5b83\u5728\u4e13\u4e1a\u6570\u5b66\u6392\u7248\u4e2d\u51e0\u4e4e\u4ece\u4e0d\u51fa\u73b0\u3002 \u6a2a\u7740\u5199\u8fd9\u4e9b\u5206\u5f0f\uff0c\u4e2d\u95f4\u4f7f\u7528\u659c\u7ebf\u95f4\u9694 /
\uff08\u7528\u659c\u7ebf\u4ee3\u66ff\u5206\u6570\u7ebf\uff09\u3002
\u4f8b\u5b50\uff1a
\\begin{array}{cc}\n\\mathrm{Bad} & \\mathrm{Better} \\\\\n\\hline \\\\\ne^{i\\frac{\\pi}2} \\quad e^{\\frac{i\\pi}2}& e^{i\\pi/2} \\\\\n\\int_{-\\frac\\pi2}^\\frac\\pi2 \\sin x\\,dx & \\int_{-\\pi/2}^{\\pi/2}\\sin x\\,dx \\\\\n\\end{array}\n
\u663e\u793a\uff1a
\\[ \\begin{array}{cc} \\mathrm{Bad} & \\mathrm{Better} \\\\ \\hline \\\\ e^{i\\frac{\\pi}2} \\quad e^{\\frac{i\\pi}2}& e^{i\\pi/2} \\\\ \\int_{-\\frac\\pi2}^\\frac\\pi2 \\sin x\\,dx & \\int_{-\\pi/2}^{\\pi/2}\\sin x\\,dx \\\\ \\end{array} \\]"},{"location":"specification/markdown/latex/#_21","title":"\u77e9\u9635\u3001\u6761\u4ef6\u8868\u8fbe\u5f0f\u3001\u65b9\u7a0b\u7ec4","text":"\u8bed\u6cd5\uff1a
\\begin{\u7c7b\u578b}\n\u516c\u5f0f\u5185\u5bb9\n\\end{\u7c7b\u578b}\n
\u7c7b\u578b\u53ef\u4ee5\u662f\uff1a\u77e9\u9635 matrix
pmatrix
bmatrix
Bmatrix
vmatrix
Vmatrix
\u3001\u6761\u4ef6\u8868\u8fbe\u5f0f cases
\u3001\u591a\u884c\u5bf9\u9f50\u65b9\u7a0b\u5f0f aligned
\u3001\u6570\u7ec4 array
\u3002
\u5728\u516c\u5f0f\u5185\u5bb9\u4e2d\uff1a\u5728\u6bcf\u4e00\u884c\u4e2d\u63d2\u5165 &
\u6765\u6307\u5b9a\u9700\u8981\u5bf9\u9f50\u7684\u5185\u5bb9\uff0c\u5728\u6bcf\u884c\u7ed3\u5c3e\u5904\u4f7f\u7528 \\\\
\u6362\u884c\u3002
\u5728\u5f00\u5934\u4f7f\u7528 begin{matrix}
\uff0c\u5728\u7ed3\u5c3e\u4f7f\u7528 end{matrix}
\uff0c\u5728\u4e2d\u95f4\u63d2\u5165\u77e9\u9635\u5143\u7d20\uff0c\u6bcf\u4e2a\u5143\u7d20\u4e4b\u95f4\u63d2\u5165 &
\uff0c\u5e76\u5728\u6bcf\u884c\u7ed3\u5c3e\u5904\u4f7f\u7528 \\\\
\u3002
\\begin{matrix}\nx & y \\\\\nz & v\n\\end{matrix}\n
\\(\\begin{matrix} x & y \\\\ z & v \\end{matrix}\\)
"},{"location":"specification/markdown/latex/#_23","title":"\u6709\u6846\u77e9\u9635","text":"\u5728\u5f00\u5934\u5c06 matrix
\u66ff\u6362\u4e3a pmatrix
bmatrix
Bmatrix
vmatrix
Vmatrix
\u3002
\\begin{vmatrix}\nx & y \\\\\nz & v\n\\end{vmatrix}\n
\\(\\begin{vmatrix} x & y \\\\ z & v \\end{vmatrix}\\)
\\begin{Vmatrix}\nx & y \\\\\nz & v\n\\end{Vmatrix}\n
\\(\\begin{Vmatrix} x & y \\\\ z & v \\end{Vmatrix}\\)
\u4f7f\u7528 \\cdots
\u22ef \uff0c \\ddots
\u22f1 \uff0c \\vdots
\u22ee \u6765\u8f93\u5165\u7701\u7565\u7b26\u53f7\u3002
\\begin{bmatrix}\n0 & \\cdots & 0 \\\\\n\\vdots & \\ddots & \\vdots \\\\\n0 & \\cdots & 0\n\\end{bmatrix}\n
\\(\\begin{bmatrix} 0 & \\cdots & 0 \\\\ \\vdots & \\ddots & \\vdots \\\\ 0 & \\cdots & 0 \\end{bmatrix}\\)
\\begin{Bmatrix}\nx & y \\\\\nz & v\n\\end{Bmatrix}\n
\\(\\begin{Bmatrix} x & y \\\\ z & v \\end{Bmatrix}\\)
\\begin{pmatrix}\nx & y \\\\\nz & v\n\\end{pmatrix}\n
\\(\\begin{pmatrix} x & y \\\\ z & v \\end{pmatrix}\\)
"},{"location":"specification/markdown/latex/#_24","title":"\u6761\u4ef6\u8868\u8fbe\u5f0f","text":"f(n) =\n\\begin{cases} \nn/2, & \\text{if }n\\text{ is even} \\\\\n3n+1, & \\text{if }n\\text{ is odd}\n\\end{cases}\n
\\(f(n) = \\begin{cases} n/2, & \\text{if }n\\text{ is even} \\\\ 3n+1, & \\text{if }n\\text{ is odd} \\end{cases}\\)
"},{"location":"specification/markdown/latex/#_25","title":"\u591a\u884c\u7b49\u5f0f\u3001\u540c\u4f59\u5f0f","text":"\u4eba\u4eec\u7ecf\u5e38\u60f3\u8981\u4e00\u5217\u6574\u9f50\u4e14\u5c45\u4e2d\u7684\u65b9\u7a0b\u5f0f\u5e8f\u5217\u3002\u4f7f\u7528 \\begin{aligned}\u2026\\end{aligned}
\u3002
\\begin{aligned}\nf(x) & = (m+n)^2 \\\\\n & = m^2+2mn+n^2 \\\\\n\\end{aligned}\n
\\(\\begin{aligned} f(x) & = (m+n)^2 \\\\ & = m^2+2mn+n^2 \\\\ \\end{aligned}\\)
\\begin{aligned}\n3^{6n+3}+4^{6n+3} \n& \\equiv (3^3)^{2n+1}+(4^3)^{2n+1}\\\\ \n& \\equiv 27^{2n+1}+64^{2n+1}\\\\ \n& \\equiv 27^{2n+1}+(-27)^{2n+1}\\\\ \n& \\equiv 27^{2n+1}-27^{2n+1}\\\\\n& \\equiv 0 \\pmod{91}\\\\\n\\end{aligned}\n
\\(\\begin{aligned} 3^{6n+3}+4^{6n+3} & \\equiv (3^3)^{2n+1}+(4^3)^{2n+1}\\\\ & \\equiv 27^{2n+1}+64^{2n+1}\\\\ & \\equiv 27^{2n+1}+(-27)^{2n+1}\\\\ & \\equiv 27^{2n+1}-27^{2n+1}\\\\ & \\equiv 0 \\pmod{91}\\\\ \\end{aligned}\\)
\\begin{alignedat}{3}\nf(x) & = (m-n)^2 \\\\\nf(x) & = (-m+n)^2 \\\\\n & = m^2-2mn+n^2 \\\\\n\\end{alignedat}\n
\\(\\begin{alignedat}{3} f(x) & = (m-n)^2 \\\\ f(x) & = (-m+n)^2 \\\\ & = m^2-2mn+n^2 \\\\ \\end{alignedat}\\)
"},{"location":"specification/markdown/latex/#_26","title":"\u65b9\u7a0b\u7ec4","text":"\\begin{cases}\n3x + 5y + z \\\\\n7x - 2y + 4z \\\\\n-6x + 3y + 2z\n\\end{cases}\n
\\(\\begin{cases} 3x + 5y + z \\\\ 7x - 2y + 4z \\\\ -6x + 3y + 2z \\end{cases}\\)
\u6216
\\left\\{\\begin{aligned}\n3x + 5y + z \\\\\n7x - 2y + 4z \\\\\n-6x + 3y + 2z\n\\end{aligned}\\right.\n
\\(\\left\\{\\begin{aligned} 3x + 5y + z \\\\ 7x - 2y + 4z \\\\ -6x + 3y + 2z \\end{aligned}\\right.\\)
"},{"location":"specification/markdown/latex/#_27","title":"\u6570\u7ec4\u4e0e\u8868\u683c","text":"\u901a\u5e38\uff0c\u4e00\u4e2a\u683c\u5f0f\u5316\u540e\u7684\u8868\u683c\u6bd4\u5355\u7eaf\u7684\u6587\u5b57\u6216\u6392\u7248\u540e\u7684\u6587\u5b57\u66f4\u5177\u6709\u53ef\u8bfb\u6027\u3002\u6570\u7ec4\u548c\u8868\u683c\u5747\u4ee5 \\begin{array}
\u5f00\u5934\uff0c\u5e76\u5728\u5176\u540e\u5b9a\u4e49\u5217\u6570\u53ca\u6bcf\u4e00\u5217\u7684\u6587\u672c\u5bf9\u9f50\u5c5e\u6027\uff0cc
l
r
\u5206\u522b\u4ee3\u8868\u5c45\u4e2d\u3001\u5de6\u5bf9\u9f50\u53ca\u53f3\u5bf9\u9f50\u3002\u82e5\u9700\u8981\u63d2\u5165\u5782\u76f4\u5206\u5272\u7ebf\uff0c\u5728\u5b9a\u4e49\u5f0f\u4e2d\u63d2\u5165 |
\uff0c\u82e5\u8981\u63d2\u5165\u6c34\u5e73\u5206\u5272\u7ebf\uff0c\u5728\u4e0b\u4e00\u884c\u8f93\u5165\u524d\u63d2\u5165 \\hline
\u3002\u4e0e\u77e9\u9635\u76f8\u4f3c\uff0c\u6bcf\u884c\u5143\u7d20\u95f4\u5747\u987b\u8981\u63d2\u5165 &
\uff0c\u6bcf\u884c\u5143\u7d20\u4ee5 \\\\
\u7ed3\u5c3e\uff0c\u6700\u540e\u4ee5 \\end{array}
\u7ed3\u675f\u6570\u7ec4\u3002
\\begin{array}{c|lcr}\nn & \\text{\u5de6\u5bf9\u9f50} & \\text{\u5c45\u4e2d\u5bf9\u9f50} & \\text{\u53f3\u5bf9\u9f50} \\\\\n\\hline\n1 & 0.24 & 1 & 125 \\\\\n2 & -1 & 189 & -8 \\\\\n3 & -20 & 2000 & 1+10i\n\\end{array}\n
\\(\\begin{array}{c|lcr} n & \\text{\u5de6\u5bf9\u9f50} & \\text{\u5c45\u4e2d\u5bf9\u9f50} & \\text{\u53f3\u5bf9\u9f50} \\\\ \\hline 1 & 0.24 & 1 & 125 \\\\ 2 & -1 & 189 & -8 \\\\ 3 & -20 & 2000 & 1+10i \\end{array}\\)
\\begin{array}{lcl}\nz & = & a \\\\\nf(x,y,z) & = & x + y + z \n\\end{array}\n
\\(\\begin{array}{lcl} z & = & a \\\\ f(x,y,z) & = & x + y + z \\end{array}\\)
\\begin{array}{lcr}\nz & = & a \\\\\nf(x,y,z) & = & x + y + z \n\\end{array}\n
\\(\\begin{array}{lcr} z & = & a \\\\ f(x,y,z) & = & x + y + z \\end{array}\\)
\\begin{array}{ccc}\na & b & S \\\\\n\\hline\n0&0&1\\\\\n0&1&1\\\\\n1&0&1\\\\\n1&1&0\\\\\n\\end{array}\n
\\(\\begin{array}{ccc} a & b & S \\\\ \\hline 0&0&1\\\\ 0&1&1\\\\ 1&0&1\\\\ 1&1&0\\\\ \\end{array}\\)
"},{"location":"specification/markdown/latex/#_28","title":"\u5d4c\u5957\u6570\u7ec4\u6216\u8868\u683c","text":"\u591a\u4e2a\u6570\u7ec4/\u8868\u683c\u53ef \u4e92\u76f8\u5d4c\u5957 \u5e76\u7ec4\u6210\u4e00\u7ec4\u6570\u7ec4/\u4e00\u7ec4\u8868\u683c\u3002 \u4f7f\u7528\u5d4c\u5957\u524d\u5fc5\u987b\u58f0\u660e $$
\u7b26\u53f7\u3002
% outer vertical array of arrays \u5916\u5c42\u5782\u76f4\u8868\u683c\n\\begin{array}{c}\n % inner horizontal array of arrays \u5185\u5c42\u6c34\u5e73\u8868\u683c\n \\begin{array}{cc}\n % inner array of minimum values \u5185\u5c42\"\u6700\u5c0f\u503c\"\u6570\u7ec4\n \\begin{array}{c|cccc}\n \\text{min} & 0 & 1 & 2 & 3\\\\\n \\hline\n 0 & 0 & 0 & 0 & 0\\\\\n 1 & 0 & 1 & 1 & 1\\\\\n 2 & 0 & 1 & 2 & 2\\\\\n 3 & 0 & 1 & 2 & 3\n \\end{array}\n &\n % inner array of maximum values \u5185\u5c42\"\u6700\u5927\u503c\"\u6570\u7ec4\n \\begin{array}{c|cccc}\n \\text{max}&0&1&2&3\\\\\n \\hline\n 0 & 0 & 1 & 2 & 3\\\\\n 1 & 1 & 1 & 2 & 3\\\\\n 2 & 2 & 2 & 2 & 3\\\\\n 3 & 3 & 3 & 3 & 3\n \\end{array}\n \\end{array}\n % \u5185\u5c42\u7b2c\u4e00\u884c\u8868\u683c\u7ec4\u7ed3\u675f\n \\\\\n % inner array of delta values \u5185\u5c42\u7b2c\u4e8c\u884cDelta\u503c\u6570\u7ec4\n \\begin{array}{c|cccc}\n \\Delta&0&1&2&3\\\\\n \\hline\n 0 & 0 & 1 & 2 & 3\\\\\n 1 & 1 & 0 & 1 & 2\\\\\n 2 & 2 & 1 & 0 & 1\\\\\n 3 & 3 & 2 & 1 & 0\n \\end{array}\n % \u5185\u5c42\u7b2c\u4e8c\u884c\u8868\u683c\u7ec4\u7ed3\u675f\n\\end{array}\n
\\(% outer vertical array of arrays \u5916\u5c42\u5782\u76f4\u8868\u683c \\begin{array}{c} % inner horizontal array of arrays \u5185\u5c42\u6c34\u5e73\u8868\u683c \\begin{array}{cc} % inner array of minimum values \u5185\u5c42\"\u6700\u5c0f\u503c\"\u6570\u7ec4 \\begin{array}{c|cccc} \\text{min} & 0 & 1 & 2 & 3\\\\ \\hline 0 & 0 & 0 & 0 & 0\\\\ 1 & 0 & 1 & 1 & 1\\\\ 2 & 0 & 1 & 2 & 2\\\\ 3 & 0 & 1 & 2 & 3 \\end{array} & % inner array of maximum values \u5185\u5c42\"\u6700\u5927\u503c\"\u6570\u7ec4 \\begin{array}{c|cccc} \\text{max}&0&1&2&3\\\\ \\hline 0 & 0 & 1 & 2 & 3\\\\ 1 & 1 & 1 & 2 & 3\\\\ 2 & 2 & 2 & 2 & 3\\\\ 3 & 3 & 3 & 3 & 3 \\end{array} \\end{array} % \u5185\u5c42\u7b2c\u4e00\u884c\u8868\u683c\u7ec4\u7ed3\u675f \\\\ % inner array of delta values \u5185\u5c42\u7b2c\u4e8c\u884cDelta\u503c\u6570\u7ec4 \\begin{array}{c|cccc} \\Delta&0&1&2&3\\\\ \\hline 0 & 0 & 1 & 2 & 3\\\\ 1 & 1 & 0 & 1 & 2\\\\ 2 & 2 & 1 & 0 & 1\\\\ 3 & 3 & 2 & 1 & 0 \\end{array} % \u5185\u5c42\u7b2c\u4e8c\u884c\u8868\u683c\u7ec4\u7ed3\u675f \\end{array}\\)
"},{"location":"specification/markdown/latex/#_29","title":"\u7528\u6570\u7ec4\u5b9e\u73b0\u5e26\u5206\u5272\u7b26\u53f7\u7684\u77e9\u9635","text":"$$\n\\left[\n\\begin{array}{cc|c}\n1&2&3\\\\\n4&5&6\n\\end{array}\n\\right]\n$$\n
\u663e\u793a\uff1a
\\[ \\left[ \\begin{array}{cc|c} 1&2&3\\\\ 4&5&6 \\end{array} \\right] \\]\u5176\u4e2d cc|c
\u4ee3\u8868\u5728\u4e00\u4e2a\u4e09\u5217\u77e9\u9635\u4e2d\u7684\u7b2c\u4e8c\u548c\u7b2c\u4e09\u5217\u4e4b\u95f4\u63d2\u5165\u5206\u5272\u7ebf\u3002
Note
\u5bf9\u4e8e\u90e8\u5206\u5e0c\u814a\u5b57\u6bcd\uff0c\u4f8b\u5982 \\Alpha
\u5728\u9884\u89c8\u65f6\u4f1a\u751f\u6548\u4f46\u5728\u7f51\u9875\u4e0a\u6e32\u67d3\u4f1a\u51fa\u73b0\u9519\u8bef\uff0c\u56e0\u6b64\u8fd9\u91cc\u7684\u5e0c\u814a\u5b57\u7b26\u5199\u6cd5\u53c2\u8003 Greek letters \u8fdb\u884c\u7f16\u8f91\uff0c\u66f4\u591a\u8be6\u60c5\u8bf7\u53c2\u8003 #39 LaTeX\u6587\u6863\u5e0c\u814a\u5b57\u6bcd\u5927\u5199\u663e\u793a\u6709\u95ee\u9898 \u3002
\u8f93\u5165 \\\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd\u82f1\u6587\u5168\u79f0
\u548c \\\u9996\u5b57\u6bcd\u5927\u5199\u5e0c\u814a\u5b57\u6bcd\u82f1\u6587\u5168\u79f0
\u6765\u5206\u522b\u8f93\u5165\u5c0f\u5199\u548c\u5927\u5199\u5e0c\u814a\u5b57\u6bcd\u3002
A B \\Gamma \\Delta E Z H \\Theta
\\(A B \\Gamma \\Delta E Z H \\Theta\\)
I K \\Lambda M N \\Xi O \\Pi
\\(I K \\Lambda M N \\Xi O \\Pi\\)
P \\Sigma T \\Upsilon \\Phi X \\Psi \\Omega
\\(P \\Sigma T \\Upsilon \\Phi X \\Psi \\Omega\\)
\\alpha \\beta \\gamma \\delta \\epsilon \\zeta \\eta \\theta
\\(\\alpha \\beta \\gamma \\delta \\epsilon \\zeta \\eta \\theta\\)
\\iota \\kappa \\lambda \\mu \\nu \\omicron \\xi \\pi
\\(\\iota \\kappa \\lambda \\mu \\nu \\omicron \\xi \\pi\\)
\\rho \\sigma \\tau \\upsilon \\phi \\chi \\psi \\omega
\\(\\rho \\sigma \\tau \\upsilon \\phi \\chi \\psi \\omega\\)
\u90e8\u5206\u5b57\u6bcd\u6709\u53d8\u91cf\u4e13\u7528\u5f62\u5f0f\uff0c\u4ee5 \\var-
\u5f00\u5934\u3002
\\varepsilon \\digamma \\varkappa \\varpi
\\(\\varepsilon \\digamma \\varkappa \\varpi\\)
\\varrho \\varsigma \\vartheta \\varphi
\\(\\varrho \\varsigma \\vartheta \\varphi\\)
"},{"location":"specification/markdown/latex/#_32","title":"\u5e0c\u4f2f\u6765\u7b26\u53f7","text":"\\aleph \\beth \\gimel \\daleth
\\(\\aleph \\beth \\gimel \\daleth\\)
Note
\u8be5\u6307\u5357\u6458\u81ea LaTeX\u516c\u5f0f\u624b\u518c \uff0c\u4f60\u53ef\u4ee5\u70b9\u51fb\u94fe\u63a5\u6765\u4e86\u89e3\u66f4\u591a\u5185\u5bb9\u3002
"},{"location":"specification/markdown/markdown/","title":"Markdown \u5199\u4f5c","text":"Note
\u672c\u6587\u63d0\u4f9b\u4e86Markdown\u7684\u57fa\u672c\u64b0\u5199\u8bf4\u660e\u3002\u56e0\u4e3a\u4e3b\u9898\u8bbe\u7f6e\u7684\u7f18\u6545\u53ef\u80fd\u4f1a\u5bfc\u81f4\u67d0\u4e9b\u6548\u679c\u4e0d\u751f\u6548\uff0c\u9047\u5230\u6b64\u95ee\u9898\u8bf7\u524d\u5f80 issues \u8fdb\u884c\u53cd\u9988\u3002
"},{"location":"specification/markdown/markdown/#_1","title":"\u6807\u9898","text":"\u4f60\u7684\u5185\u5bb9\u6807\u9898\u5e94\u8be5\u4ece\u4e8c\u7ea7\u6807\u9898\uff08 ##
\uff09\u5f00\u59cb
# \u4e00\u7ea7\u6807\u9898\n## \u4e8c\u7ea7\u6807\u9898\n### \u4e09\u7ea7\u6807\u9898\n
"},{"location":"specification/markdown/markdown/#_2","title":"\u5f3a\u8c03\uff0c\u659c\u4f53\uff0c\u5220\u9664\u7ebf","text":"\u6211\u4eec\u53ea\u77e5\u9053 \u5730\u7403 \u5177\u6709\u8ba9\u4eba\u7c7b\u751f\u5b58\u7684\u73af\u5883\uff0c\u8fd8\u6709 \u706b\u661f \uff0c\u4e5f\u8bb8\u8fd8\u6709 \u5176\u5b83\u661f\u7403 \u3002
\u6211\u4eec\u53ea\u77e5\u9053 **\u5730\u7403** \u5177\u6709\u8ba9\u4eba\u7c7b\u751f\u5b58\u7684\u73af\u5883\uff0c\u8fd8\u6709 ~~\u706b\u661f~~ \uff0c\u4e5f\u8bb8\u8fd8\u6709 *\u5176\u5b83\u661f\u7403* \u3002\n
"},{"location":"specification/markdown/markdown/#_3","title":"\u5206\u9694\u7b26","text":"---\n***\n
"},{"location":"specification/markdown/markdown/#_4","title":"\u94fe\u63a5","text":"\u4f60\u5e94\u8be5\u907f\u514d\u76f4\u63a5\u5185\u5d4c HTML \u4ee3\u7801\u3002
[link name](link url) \u6216\u8005 <link url>\n
"},{"location":"specification/markdown/markdown/#_5","title":"\u5217\u8868","text":"\u591a\u7ffb\u8bd1\u5f15\u64ce
\u591a\u8bed\u8a00\u4e92\u8bd1
- \u591a\u7ffb\u8bd1\u5f15\u64ce\n\n * \u8c37\u6b4c\u7ffb\u8bd1\n * \u5fae\u8f6f\u7ffb\u8bd1\n * \u6709\u9053\u7ffb\u8bd1\n * \u767e\u5ea6\u7ffb\u8bd1\n * \u963f\u91cc\u7ffb\u8bd1\n * DeepL \u7ffb\u8bd1\n\n- \u591a\u8bed\u8a00\u4e92\u8bd1\n
"},{"location":"specification/markdown/markdown/#_6","title":"\u4ee3\u7801","text":"\u4f7f\u7528\u5355\u5f15\u53f7 code
\u6765\u8868\u793a\u884c\u5185\u4ee3\u7801\uff0c\u4f7f\u7528\u4e09\u5f15\u53f7\u6765\u8868\u793a\u4ee3\u7801\u5757\u3002
code\n
\u5e76\u4e14\u5bf9\u4e8e\u4ee3\u7801\u5757\uff0c\u4f60\u5e94\u8be5\u5199\u4e0a\u5bf9\u5e94\u7684\u8bed\u8a00\u3002
"},{"location":"specification/markdown/markdown/#_7","title":"\u56fe\u7247","text":"\u4f60\u5e94\u8be5\u907f\u514d\u5185\u5d4c HTML \u6765\u63d2\u5165\u56fe\u7247\u3002
\n
"},{"location":"specification/markdown/markdown/#_8","title":"\u6ce8\u91ca","text":"\u4e0b\u9762\u662f\u4e00\u6bb5\u6ce8\u91ca
\u8fd9\u91cc\u662f\u4e00\u6bb5\u6ce8\u91ca (<blockquote></blockquote>
) \u8fd9\u662f\u6ce8\u91ca\u7684\u7b2c\u4e8c\u884c
# \u8fd9\u91cc\u662f\u6ce8\u91ca\u91cc\u9762\u7684\u4ee3\u7801\u6bb5\nprint(\"hello\")\n
\u6ce8\u91ca
\u6ce8\u91ca\u5d4c\u5957 \u6ce8\u91ca\u5d4c\u5957
\u4e0b\u9762\u662f\u4e00\u6bb5\u6ce8\u91ca\n> \u8fd9\u91cc\u662f\u4e00\u6bb5\u6ce8\u91ca (`<blockquote></blockquote>`)\n> \u8fd9\u662f\u6ce8\u91ca\u7684\u7b2c\u4e8c\u884c\n\n# \u8fd9\u91cc\u662f\u6ce8\u91ca\u91cc\u9762\u7684\u4ee3\u7801\u6bb5\nprint(\"hello\")\n\n> \u6ce8\u91ca\n>> \u6ce8\u91ca\u5d4c\u5957\n>> \u6ce8\u91ca\u5d4c\u5957\n
"},{"location":"specification/markdown/markdown/#emoji","title":"Emoji","text":"\u6682\u4e0d\u652f\u6301 emoji
\u8bed\u6cd5\uff0c\u4f46\u662f\u53ef\u4ee5\u76f4\u63a5\u4ece emoji
\u8868\u60c5\u5927\u5168\u62f7\u8d1d\u8868\u60c5\u5230\u6587\u6863\uff0c\u6bd4\u5982: \ud83c\udf4a \ud83c\udf47 \ud83d\ude00 \ud83d\ude05 \ud83d\ude07
\u8bbf\u95eehttp://emojihomepage.com/\u4ee5\u83b7\u53d6\u66f4\u591aemoji
"},{"location":"specification/markdown/markdown/#_9","title":"\u4e0a\u4e0b\u6807","text":"H2O\uff0c y = x2
H~2~O\uff0c y = x^2^\n
"},{"location":"specification/markdown/markdown/#_10","title":"\u5f15\u7528","text":"\u6211\u80fd\u5e72\u996d\u6211\u81ea\u8c6a\u30021
\u6211\u80fd\u5e72\u996d\u6211\u81ea\u8c6a\u3002[^\u5e72\u996d\u4eba]\n\n[^\u5e72\u996d\u4eba]: \u8001\u5b50\u8bf4\u9053\n\u8fd9\u4f1a\u5728\u6587\u7ae0\u672b\u5c3e\u8fdb\u884c\u6ce8\u89e3\n
"},{"location":"specification/markdown/markdown/#_11","title":"\u8868\u683c","text":"Header 1 Header2 Cell 1
Cell 2 link Cell 3 Cell 4 | Header 1 | *Header2* |\n| -------- | -------- |\n| `Cell 1` | [Cell 2](http://example.com) link |\n| Cell 3 | **Cell 4** |\n
"},{"location":"specification/markdown/markdown/#_12","title":"\u4efb\u52a1\u5217\u8868","text":"- [x] \u4efb\u52a11\n- [x] \u4efb\u52a12\n- [ ] \u4efb\u52a13\n- [ ] \u4efb\u52a14\n
"},{"location":"specification/markdown/markdown/#_13","title":"\u6570\u5b66","text":"\u6587\u6863\u652f\u6301 LaTeX
\uff0c\u5173\u4e8e LaTeX
\uff0c\u4f60\u53ef\u4ee5\u8bbf\u95ee LaTeX\u516c\u5f0f\u624b\u518c \u6765\u83b7\u53d6\u5e2e\u52a9\u3002
\u4f7f\u7528 mermaid \u53ef\u4ee5\u753b\u5f88\u591a\u7c7b\u578b\u7684\u56fe\u8868\uff0c \u8be6\u7ec6\u7684\u8bed\u6cd5\u548c\u652f\u6301\u8bf7\u770b\u5b98\u7f51
sequenceDiagram\n Alice->>John: Hello John, how are you?\n loop Healthcheck\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts!\n John-->>Alice: Great!\n John->>Bob: How about you?\n Bob-->>John: Jolly good!\n
```mermaid\n sequenceDiagram\n Alice->>John: Hello John, how are you?\n loop Healthcheck\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts!\n John-->>Alice: Great!\n John->>Bob: How about you?\n Bob-->>John: Jolly good!\n ```\n
\u8001\u5b50\u8bf4\u9053 \u8fd9\u4f1a\u5728\u6587\u7ae0\u672b\u5c3e\u8fdb\u884c\u6ce8\u89e3\u00a0\u21a9
In the long river of time, we found that repetitive and tedious work brings only time and energy consumption to everyone.Indeed,in our continuous thinking and progress, excellent tools have appeared before our eyes.But what follows is that the rapid development of the types and quantities of tools makes it difficult for us to quickly and easily get started with a tool according to specific needs. On the contrary, \"Baidu\" and \"Google\" have become our commonplace. Keep trying in link after link and answer. Some are jerky English documents, some are a few words, which undoubtedly increases our cost of use. So the original intention of Tooldiy is to solve this problem.We want to use the environment of the open source community to continuously collect and refine tools from all walks of life (after all, the one that suits you is the best). Tooldiy will recommend and analyze various tools from an objective and user perspective, not just limited to a fixed direction.
Many times we will encounter environment configuration problems of many tools during the development process. We have to spend a lot of time thinking and learning to use them. Many times, these tasks can only exercise your patience in configuring the environment. We want to Everyone focuses on the tool itself, so we want to maintain some automated scripts for tool configuration and construction or a docker environment for the convenience of users. Of course, the build scripts we left when writing can also be provided for users to learn. It's exciting to think about a tool that can be obtained with one click, let's build it together!
As long as it can bring you help and a better experience, this is the meaning of Tooldiy's existence.
Now, let's use it together!
"},{"location":"en/#contribute","title":"Contribute","text":"The original intention of this project is to provide a warehouse and wiki for maintaining a tool description. It is a project that lowers the threshold of use and is convenient for everyone. Our principle is not limited to any specific discipline and field. We can share all the tools we think are useful (Pay attention to the introductory introduction, which is in line with the original intention of the project). It can be shared under the premise of respecting the labor of tool producers. Therefore, we do not allow everyone to share pirated and cracked tools. We welcome all kinds of PR on the premise of standardization. If you have any doubts other than the appeal, you can file an issue or contact the warehouse management. When it comes to paid content tools, we encourage sharing and hope that everyone will do a good job of disclosing their information and marking their prices. This project will not advertise any tools, and there will be no special advertisement behaviors such as location are arranged according to the time of submission. We also welcome various PR requests to improve the reading experience of this project (including but not limited to adding a line break to improve the reading experience, adding a project logo, Chinese and English proofreading, etc.) (:\u0437)\u2220) This project is still in its infancy, and it is very much in need of improvement and error correction from everyone.
If you have already written articles that you would like to add here, you can do so in the following ways:
If you wonder where to start, check the writing template is a good idea.
Note
Click the link to join the group chat tooldiy
"},{"location":"en/#copyright","title":"Copyright","text":"This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
"},{"location":"en/frame/wasm-bpf/","title":"Wasm bpf","text":""},{"location":"en/frame/wasm-bpf/#wasm-bpf-wasm-library-and-toolchain-for-ebpf","title":"\ud83d\udce6 Wasm-bpf: Wasm library and toolchain for eBPF","text":"\u4e2d\u6587\u6587\u6863 Gitee Github
Wasm-bpf
is a WebAssembly eBPF library, toolchain and runtime powered by CO-RE(Compile Once \u2013 Run Everywhere) libbpf. It can help you build almost every eBPF programs or usecases to Wasm
with nearly zero modification, and run them cross platforms with Wasm sandbox.
\u2328\ufe0f Introduction to wasm-bpf \\ \ud83d\udce6 Features \\ \ud83d\ude80 Running a standalone Wasm program from CLI or Docker \\ \ud83d\udd0c Embed a Wasm-eBPF function in your Rust program or C/C++ program \\ \ud83d\udd28 Examples covering the use cases from tracing
, networking
to security
\\ \ud83d\udcda How it works \\ \ud83e\udd16 Build the runtime
\ud83d\udcda Check out our more documentations
"},{"location":"en/frame/wasm-bpf/#introduction","title":"Introduction","text":"WebAssembly
(Wasm) is a portable binary format for executable code. The code is executed at a nearly-native speed in a memory-safe (for host) sandbox, with clearly defined resource constraints, and APIs for communicating with the embedding host environment (eg. proxy).The wasm-bpf
project combines Wasm and eBPF technologies to enhance the performance and programmability of eBPF applications.
With wasm-bpf
, users can dynamically load and securely execute user-defined or community-contributed Wasm-eBPF codes as plug-ins
in their software products, such as observability platforms or service proxy. This enables efficient and scalable data collection, while also allowing for advanced processing and analysis of that data.
It also enables developers to write eBPF programs in familiar languages like C/C++
, Rust
, Go
, and more than 30 other programming languages, and deploy them easily across different Linux distributions. Additionally, cloud providers can leverage wasm-bpf to offer a secure
and high-performance
environment for their customers to develop and deploy eBPF applications in their cloud environments.
Run the following command to install the wasm-bpf
CLI tool:
cargo install wasm-bpf
"},{"location":"en/frame/wasm-bpf/#running-a-standalone-wasm-ebpf-program","title":"Running a standalone Wasm-eBPF program","text":"Running the runqlat
example with docker:
$ wget https://eunomia-bpf.github.io/wasm-bpf/examples/runqlat/runqlat.wasm\n$ docker run --rm -it --privileged -v $(pwd):/examples ghcr.io/eunomia-bpf/wasm-bpf:latest /examples/runqlat.wasm\nTracing run queue latency... Hit Ctrl-C to end.\n\n usecs : count distribution\n 0 -> 1 : 72 |***************************** |\n 2 -> 3 : 93 |************************************* |\n 4 -> 7 : 98 |****************************************|\n 8 -> 15 : 96 |*************************************** |\n 16 -> 31 : 38 |*************** |\n 32 -> 63 : 4 |* |\n 64 -> 127 : 5 |** |\n 128 -> 255 : 6 |** |\n 256 -> 511 : 0 | |\n 512 -> 1023 : 0 | |\n 1024 -> 2047 : 0 | |\n 2048 -> 4095 : 1 | |\n
For more tools to distribute and deploy Wasm-eBPF programs for usecases from Observability
, Networking
to Security
, please refer to eunomia-bpf repo.
Add the following line to your Cargo.toml to use Wasm-bpf as a library
:
wasm-bpf-rs = \"0.2.1\"\n
See the main.rs for an example of how to use the wasm-bpf-rs
library.
General purpose
: provide most abilities from eBPF to Wasm, polling
from the ring buffer or perf buffer, bidirectional communications between kernel
eBPF and userspace
Wasm using maps
, dynamically loading
, attaching
or detaching
, etc. Supports a large number of eBPF program types and map types.High performance
: No serialization
overhead for complex data types, using shared memory
to avoid copy overhead between host and Wasm.Easy to use
: provide a similar developing experience as the libbpf-bootstrap, auto generate
the Wasm-eBPF skeleton headers and type definitions for bindings. Write your eBPF programs in C/C++
, Rust
, Go
and compile to Wasm.Ultralightweight
: the miminal runtime has only 1.5 MB
in binary size. Compiled Wasm module would be only ~90K
. With the same toolchain, you can easily build your own Wasm-eBPF runtime in any languages and platforms!See the examples directory for examples of eBPF programs written in C, Rust, Go and compiled to Wasm, covering the use cases from tracing
, networking
to security
.
For tools to distribute Wasm-eBPF programs in OCI
images, please refer to eunomia-bpf repo.
See the examples directory for examples of eBPF programs written in C, Rust, Go and compiled to WASM.
tracing examples
- bootstrap and rust-bootstrap: trace process exec and exit - runqlat: summarizes scheduler run queue latency as a histogram - execve and go-execve: trace execve syscall
security example
- lsm and go-lsm: check the permission to remove a directory
networking example
- sockfilter: monitoring packet and dealing with __sk_buff. - sockops: Add the pid int tcp option in syn packet.
An eBPF application typically consists of two parts: the user space part
and the kernel space part
. With wasm-bpf, the user space part is executed in a WebAssembly (Wasm) sandbox while the kernel space part is executed in the eBPF runtime in the Linux kernel. This separation of concerns allows for greater flexibility and security in developing and running eBPF programs, as well as the ability to leverage the benefits of both Wasm and eBPF.
The wasm-bpf runtime require two parts: the host side
(Outside the Wasm runtime) and the Wasm guest side
(Inside the Wasm runtime).
C++
built on the top of libbpf and WAMR. Another more complex runtime implement in Rust
is runtime/wasm-bpf-rs, based on Wasmtime.any
languages, any
eBPF libraries and any
Wasm runtimes with the same System interface.libbpf-wasm
header only library to provide libbpf APIs for Wasm guest C/C++
code.bpftool
tool to generate the Wasm-eBPF skeleton
headers, and C struct definitions
for passing data between the host and Wasm guest without serialization.Rust
, Go
and other language support is similar to the C/C++
support.For details compile process, please refer to the examples/bootstrap/README.md. The figure below shows the overall interaction between the eBPF and Wasm runtimes:
A Wasm module could load and control multiple eBPF programs at the same time, and can call another Wasm module written in other languages to process the data or control with the component model.
We have proposed a new WASI issue wasi-bpf.
"},{"location":"en/frame/wasm-bpf/#build-the-runtime","title":"Build the runtime","text":"We have two types of runtime samples:
The runtime can be built as a library or a standalone executable. see docs/build.md to build the runtimes.
"},{"location":"en/frame/wasm-bpf/#license","title":"LICENSE","text":"MIT LICENSE
"},{"location":"en/frame/wasm-bpf/#links","title":"\ud83d\udd17 Links","text":"Zineland is a simple and effective magazine building framework that can quickly generate magazine-style static pages from Markdown documents
"},{"location":"en/frame/zineland/#install","title":"Install","text":" cargo install zine\n
brew install zineland/tap/zine\n
This article shows you how to deploy the project in your windows environment.
Note: This requires a python environment, python3.10
in my case.
git clone https://github.com/cargo-youth/ToolDiy.git\n
"},{"location":"en/one_click_deployment/Windows_Setup/#install-mkdocs","title":"Install mkdocs","text":"Download link\uff1apip install mkdocs\n
"},{"location":"en/one_click_deployment/Windows_Setup/#install-site-theme","title":"Install site theme","text":"The theme of this site is material. Use the following command to install it.
pip install mkdocs-material\n
"},{"location":"en/one_click_deployment/Windows_Setup/#install-other-dependencies","title":"Install other dependencies","text":"pip install pymdown-extensions\npip install mkdocs-awesome-pages-plugin\n
"},{"location":"en/one_click_deployment/Windows_Setup/#install-the-i18n","title":"Install the i18n","text":"Here is a pit, when I install, directly install pip install i18n
is not ok, you need to specially install i18n under mkdocs, then ask chatGPT, he provided me with a solution is pip install mkdocs-i18n-plugin
; Unfortunately, no, finally find the following command on Google, right.
pip install mkdocs-static-i18n\n
"},{"location":"en/one_click_deployment/Windows_Setup/#running-project","title":"Running Project","text":"mkdocs serve\n
"},{"location":"en/one_click_deployment/Windows_Setup/#build-static-website-files","title":"Build static website files","text":"mkdocs build\n
"},{"location":"en/one_click_deployment/docker_os_c/","title":"C-based operating system development environment using Docker","text":""},{"location":"en/one_click_deployment/docker_os_c/#overview-of-the-development-environment","title":"Overview of the development environment","text":"code-server extensions
Install Docker Desktop, see Install Docker Desktop on Windows
Run Docker Desktop\uff0cand then open CMD or PowerShell\uff0cexecute
docker pull jklincn/c-os\n
After the image is successfully pulled, execute
docker run -d --privileged -p 58888:8080 jklincn/c-os\n
Now, you can open http://localhost:58888 in the browser. Development environment is ready.
You can control the containers by the Docker Desktop graphical interface.
The host mapping port 58888 can be changed at will. Service port 8080 can be changed by modifying Dockerfile.
"},{"location":"en/one_click_deployment/docker_os_c/#dockerfile","title":"Dockerfile","text":"Here is the Dockerfile, for others who need demand for reference and modification.
FROM ubuntu:22.04\nSHELL [\"/bin/bash\", \"-c\"]\n\nRUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \\\napt-get update && apt-get install -y \\\ngcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \\\ngit wget python3 vim file curl \\\nautoconf automake autotools-dev libmpc-dev libmpfr-dev libgmp-dev \\\ngawk build-essential bison flex texinfo gperf libtool patchutils bc \\\nzlib1g-dev libexpat-dev \\\nninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \\ \n&& rm -rf /var/lib/apt/lists/*\n\nARG QEMU_VERSION=7.0.0\nRUN cd /tmp && \\\nwget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \\\ntar xf qemu-${QEMU_VERSION}.tar.xz && \\\ncd qemu-${QEMU_VERSION} && \\\n./configure --target-list=riscv64-softmmu,riscv64-linux-user && \\\nmake -j && \\\nmake install && \\\ncd .. && \\\nrm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz\n\nARG CODE_VERSION=4.10.1\nRUN cd /usr/local/ && \\\nwget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\ntar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\nln -s /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \\\nrm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\nwget https://github.com/microsoft/vscode-cpptools/releases/download/v1.14.4/cpptools-linux.vsix && \\\ncode --install-extension cpptools-linux.vsix && \\\nrm cpptools-linux.vsix && \\\nwget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \\\ncode --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \\\nrm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix\n\nEXPOSE 8080/tcp\nCMD [\"code\", \"--auth\", \"none\", \"--bind-addr\", \"0.0.0.0:8080\"]\n
"},{"location":"en/one_click_deployment/docker_os_rust/","title":"C-based operating system development environment using Docker","text":""},{"location":"en/one_click_deployment/docker_os_rust/#overview-of-the-development-environment","title":"Overview of the development environment","text":"code-server extensions
Install Docker Desktop, see Install Docker Desktop on Windows
Run Docker Desktop\uff0cand then open CMD or PowerShell\uff0cexecute
docker pull jklincn/rust-os\n
After the image is successfully pulled, execute
docker run -d --privileged -p 58888:8080 jklincn/rust-os\n
Now, you can open http://localhost:58888 in the browser. Development environment is ready.
You can control the containers by the Docker Desktop graphical interface.
The host mapping port 58888 can be changed at will. Service port 8080 can be changed by modifying Dockerfile.
"},{"location":"en/one_click_deployment/docker_os_rust/#dockerfile","title":"Dockerfile","text":"Here is the Dockerfile, for others who need demand for reference and modification.
FROM ubuntu:22.04\nSHELL [\"/bin/bash\", \"-c\"]\n\nRUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \\\napt-get update && apt-get install -y \\\ngcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \\\ngit wget python3 vim file curl \\\nautoconf automake autotools-dev libmpc-dev libmpfr-dev libgmp-dev \\\ngawk build-essential bison flex texinfo gperf libtool patchutils bc \\\nzlib1g-dev libexpat-dev \\\nninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \\ \n&& rm -rf /var/lib/apt/lists/*\n\nARG QEMU_VERSION=7.0.0\nRUN cd /tmp && \\\nwget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \\\ntar xf qemu-${QEMU_VERSION}.tar.xz && \\\ncd qemu-${QEMU_VERSION} && \\\n./configure --target-list=riscv64-softmmu,riscv64-linux-user && \\\nmake -j && \\\nmake install && \\\ncd .. && \\\nrm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz\n\nARG CODE_VERSION=4.10.1\nRUN cd /usr/local/ && \\\nwget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\ntar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\nln -s /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \\\nrm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \\\nwget https://openvsxorg.blob.core.windows.net/resources/rust-lang/rust-analyzer/linux-x64/0.3.1435/rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \\\ncode --install-extension rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \\\nrm rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \\\nwget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \\\ncode --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \\\nrm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix\n\nWORKDIR /root\nARG RUST_VERSION=nightly\nENV RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static\nENV RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup\nRUN mkdir .cargo && \\\necho '[source.crates-io]' >> .cargo/config && \\\necho 'registry = \"https://github.com/rust-lang/crates.io-index\"' >> .cargo/config && \\\necho 'replace-with = \"ustc\"' >> .cargo/config && \\\necho '[source.ustc]' >> .cargo/config && \\\necho 'registry = \"git://mirrors.ustc.edu.cn/crates.io-index\"' >> .cargo/config && \\\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup-init && \\\nchmod +x rustup-init && \\\n./rustup-init -y --default-toolchain ${RUST_VERSION} --target riscv64imac-unknown-none-elf && \\\nrm rustup-init && \\\nsource $HOME/.cargo/env && \\\ncargo install cargo-binutils && \\\nrustup component add llvm-tools-preview && \\\nrustup component add rust-src\n\nEXPOSE 8080/tcp\nCMD [\"code\", \"--auth\", \"none\", \"--bind-addr\", \"0.0.0.0:8080\"]\n
"},{"location":"en/one_click_deployment/os/","title":"os Introduction to development environment and tools","text":"# (ubuntu) install package\nsudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \\\ngawk build-essential bison flex texinfo gperf libtool patchutils bc \\\nzlib1g-dev libexpat-dev pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \\\ngit tmux python3 python3-pip ninja-build\n# install QEMU\nmkdir dev\npushd dev\nwget https://download.qemu.org/qemu-7.0.0.tar.xz\ntar -xf qemu-7.0.0.tar.xz\ncd qemu-7.0.0\n./configure --target-list=x86_64-softmmu,aarch64-softmmu,riscv64-softmmu --enable-debug\nmake -j$(nproc)\nmake install\npopd\n# Configure environment variables\nvi ~/.bashrc\nexport PATH=$PATH:/path/to/qemu-7.0.0/build # Update the system path after configuration\nsource ~/.bashrc # test qemu\nqemu-system-riscv64 --version\n# install rust \ncurl https://sh.rustup.rs -sSf | sh\n# Update the system path after configuration\nsource $HOME/.cargo/env\n# test rust\nrustc --version\n# rust related package installation\nrustup target add riscv64gc-unknown-none-elf\ncargo install cargo-binutils\nrustup component add llvm-tools-preview\nrustup component add rust-src\n
"},{"location":"en/one_click_deployment/os/#common-problems-and-solutions","title":"Common problems and solutions","text":"# (centos) install package\nsudo yum install autoconf automake libmpc-devel mpfr-devel gmp-devel gawk bison flex \\\ntexinfo patchutils gcc gcc-c++ zlib-devel expat-devel git\n# gcc version is too low\nyum install centos-release-scl\nscl enable devtoolset-8 bash\n# test gcc\ngcc -v\n
"},{"location":"en/one_click_deployment/os/#configure-rust-download-mirror","title":"Configure rust download mirror","text":"vi ~/.cargo/config\n[source.crates-io]\nregistry = \"https://github.com/rust-lang/crates.io-index\"\nreplace-with = 'ustc'\n[source.ustc]\nregistry = \"git://mirrors.ustc.edu.cn/crates.io-index\"\n
"},{"location":"en/platform/chatGPT/","title":"ChatGPT","text":"Official website: https://chat.openai.com/
ChatGPT is an artificial intelligence chat robot based on natural language processing technology, which uses GPT (Generative Pre-trained Transformer) technology to generate human language responses.
Function:
Configuration method:
Official website: https://www.overleaf.com
Overleaf is an online tex rendering website. The configuration of the tex environment is cumbersome and not friendly enough for novices (especially in Windows), but overleaf is a good alternative. You just need to choose a nice template, and it will be very convenient to write assignments or small papers of less than 10 pages. Overleaf also provides the basic teamwork function, which can be edited by multiple people through links or invitations. The free version of Overleaf has a maximum compilation time and a limited set of features. For more complex projects, consider paying for more features.
\\(\\LaTeX\\) is NOT a wysiwyg (what you see is what you get) typesetting system in which users enter specific code, save it in a file with the suffix.tex, and compile it to get the desired pdf file. \\(\\LaTeX\\) Excellent large document typesetting ability and mathematical formula rendering ability is one of the reasons why it can be widely used. To learn more about can refer to the CTAN introduce lshort.
Features:
This article recommends plug-ins for Android Studio, which can greatly improve your development experience.
"},{"location":"en/plugins/android/#theme-class","title":"theme class","text":""},{"location":"en/plugins/android/#atom-material-icons","title":"Atom Material Icons","text":"The plugin optimizes icons to improve the aesthetics of your interface.
"},{"location":"en/plugins/android/#material-theme-ui","title":"Material Theme UI","text":"The Material theme for JetBrains IDE, with multiple themes for day and night, makes the interface more beautiful.
"},{"location":"en/plugins/android/#tools","title":"Tools","text":""},{"location":"en/plugins/android/#json-to-bean","title":"JSON to Bean","text":"JSON as a lightweight data interchange format. It is often used in development, and one of the requirements is to convert Json to the corresponding Bean object. The following two main plugins are recommended:
GsonFormatPlus
Can convert Json to corresponding Java Bean
JSON To Kotlin Class \u200b(JsonToKotlinClass)\u200b
Can convert Json to corresponding Kotlin Bean
Translation plug-in greatly facilitates the development of developers with poor English foundation. It has the following properties:
Multiple Translation Engines
Multilingual translation
This article hopes to inspire others and encourage everyone to propose more convenient browser plug-ins.
"},{"location":"en/plugins/browser/#tampermonkey","title":"Tampermonkey","text":"Official website: https://www.tampermonkey.net/
Very convenient script manager, you can install some small scripts that are not available in the extension store.
"},{"location":"en/plugins/browser/#simpread","title":"Simpread","text":"Official website: https://simpread.pro/
Enhance the browser reading experience, provide a focus mode that dilutes irrelevant elements to increase concentration and a completely pure reading mode; you can export web pages to various formats such as markdown to the local, or import them into notion, onenote and other note-taking applications after authorization, which is convenient for archiving and Read it later. There are many related enhancements in the official plug-in center, but the default mode experience is also quite comfortable.
"},{"location":"en/plugins/browser/#zotero-connector","title":"Zotero Connector","text":"Official website: https://www.zotero.org/download/connectors
Zotero Connectors allow you to save to Zotero directly from your web browser.
"},{"location":"en/plugins/browser/#global-speed","title":"Global Speed","text":"Official website: https://github.com/polywock/globalSpeed
Web extension that sets a default speed for HTML media elements (video and audio).
"},{"location":"en/plugins/browser/#language-reactor","title":"Language Reactor","text":"Official website: https://www.languagereactor.com/
Language Reactor is a powerful toolbox for learning languages. It helps you to discover, understand, and learn from native materials. Studying will become more effective, interesting, and enjoyable!
"},{"location":"en/plugins/browser/#vimium","title":"Vimium","text":"Official website: https://github.com/philc/vimium
Vimium is a browser extension that provides keyboard-based navigation and control of the web in the spirit of the Vim editor.
"},{"location":"en/plugins/tabnine/","title":"Tabnine","text":""},{"location":"en/plugins/tabnine/#install","title":"install","text":"Installer link: https://www.tabnine.com/install/
"},{"location":"en/plugins/tabnine/#featuresthese-words-are-generated-by-chatgpt","title":"Features(These words are generated by chatgpt)","text":"\"TabNine is a machine learning-based code autocompletion tool that can be used in various editors and IDEs, including but not limited to VS Code, Sublime Text, PyCharm, Vim, Emacs, and more. Unlike traditional code autocompletion tools, TabNine not only completes based on existing code snippets and syntax rules, but can also generate entirely new code by learning from large code repositories and language syntax, significantly improving coding efficiency and accuracy.
The advantages of TabNine include:
By providing high-quality code completion options, TabNine reduces the time and error rate of writing code and is a highly valuable and practical programming tool.\"
"},{"location":"en/plugins/tabnine/#the-difference-with-copilot","title":"The difference with copilot","text":"\"TabNine and Copilot are both machine learning-based code autocompletion tools that can generate code completion options based on context and syntax rules to improve coding efficiency and accuracy. However, there are some differences between them.
Firstly, they are developed by different companies, with TabNine being developed by Codota and Copilot being developed by OpenAI.
Secondly, they have different training data sources. TabNine uses both public and private code repositories from GitHub, while Copilot uses public code repositories from GitHub and OpenAI's own internal code repositories.
Thirdly, TabNine supports multiple programming languages, including Python, JavaScript, Java, C++, Go, Ruby, and more, while Copilot currently only supports Python, JavaScript, and TypeScript.
Fourthly, TabNine focuses on code completion and intelligent prediction, while Copilot's unique feature is the ability to generate code snippets and functions, even based on natural language descriptions.
Finally, TabNine's code is mostly open source, allowing users to customize and extend the tool, while Copilot does not currently support customization and is not open source due to its use of OpenAI's GPT series models.
Overall, both TabNine and Copilot are valuable code autocompletion tools with their own strengths and suitable use cases. Users can choose the appropriate tool based on their needs.\"
"},{"location":"en/plugins/tabnine/#preview","title":"preview","text":""},{"location":"en/software/antlr/","title":"Antlr","text":"Official website: https://www.antlr.org/
ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files. It's widely used to build languages, tools, and frameworks. From a grammar, ANTLR generates a parser that can build and walk parse trees
"},{"location":"en/software/antlr/#download","title":"DownLoad","text":"example.g4
// specific grammar name\ngrammar example;\n// for non-terminal, star with lower-case letter\n\n//'*' represents 0 or more occurrences of the production\n//'+' represents at least one occurrence\n//The following example will be parsed as vector<number>\naddExp\n: number ('+' number)*\n;\n\n//You can use # nickname after the production\n//Create an alias to analyze the production of different situations with the same name\nnumber\n: IntLiteral # number1\n| FloatLiteral # number2\n;\n\n// for terminal, star with lower-case letter\nIntLiteral\n: [0-9]+\n| ('0x'|'0X')[0-9a-fA-F]+\n;\n\n// '?' Indicates that the production may exist, if it exists, it only occurs once\nFloatLiteral\n: ([0-9]+|[0-9]*'.'[0-9]*)([eE]('+'|'-')?[0-9]+)?[fFlL]?\n| ('0x'|'0X')([0-9a-fA-F]*'.'[0-9a-fA-F]*)([pP]('+'|'-')?[0-9]+)?[fFlL]?\n;\n
shell command
antlr -Dlanguage=Cpp -no-listener -visitor example.g4\n
exampleVisitor.h
#include \"exampleBaseVisitor.h\"\n\nclass ExampleVisitor : public exampleBaseVisitor {\nvirtual antlrcpp::Any visitAddExp(exampleParser::AddExpContext *ctx) override;\nvirtual antlrcpp::Any visitNumber(exampleParser::NumberContext *ctx) override;\n};\n// Access string of current node by `ctx->getText()`\n// Visit `number` node of `addExp` by `ctx->number()`\n// then you can override visit-function to build your own parser !\n
"},{"location":"en/software/antlr/#reference","title":"Reference","text":"Antlr Repository antlr repository
Antlr Document antlr official doc
Website: https://github.com/chenzhiy2001/code-debug/
code-debug
is a source-level kernel debugging tool that supports Rust. Currently it is capable of debugging the rCore-Tutorial-v3 operating system and support tracing from kernel to user space. Recent work has been done to implement richer and more robust tracing capabilities using eBPF technology.
Using python to configure the gdb debugging interface, you can write your own code to define the entire debugging interface. It can be said that it is comparable to an IDE, and the display is also very good-looking. It is completely based on the terminal. As the underlying debugging software, it can help developers better view variables and registers. , single-step execution, etc.
"},{"location":"en/software/gdbdashboard/#install","title":"install","text":"open source address: https://github.com/cyrus-and/gdb-dashboard.git
get it
wget -P ~ https://git.io/.gdbinit # If the network speed is slow, you can directly create a new file with the same name. gdbinit and then copy and paste it\n
It is true that the IDE integrates a lot of debugging tools at present, but GDB still plays an irreplaceable role in some kernel programming or other low-level development fields. For this reason, we hope to find a more observable page in the original boring debugging terminal. Fortunately, someone has helped us to realize this tool, we hope to bring such convenience to everyone.
"},{"location":"en/software/gdbdashboard/#run-and-debug-basic-commands","title":"Run and debug basic commands","text":"Reference common commands for gdb debugging
"},{"location":"en/software/gdbdashboard/#notice","title":"Notice","text":"When using this plugin, you need to check whether the gdb currently in use supports python scripts. When Scripting in the \"Python\" language is not supported in this copy of GDB.
appears, it indicates that the gdb does not support python scripts and cannot be used this plugin. In addition, you also need to pay attention to whether the versions of gdb and python match, see issue.
Official website: https://mathpix.com
Mathpix is a tex format formula generation software. Its main function is to identify the formula in the screenshot through OCR technology and generate the corresponding tex code, which can greatly speed up the speed of formula writing in the process of writing a thesis.
Features:
Shortcoming:
GNU nano
Official website: https://www.nano-editor.org/
GNU nano is a simple and easy-to-use command line editor, it is the default text editor for some linux distributions, and you can also use it in the windows.
"},{"location":"en/software/nano/#install","title":"install","text":"In the linux distributions we can use the package manager to install it.
Take the debain with apt as example:
sudo apt install nano\n
"},{"location":"en/software/nano/#basic-use","title":"basic use","text":"Input nano to the terminal you can get the detail instruction.
"},{"location":"en/software/nano/#advantages","title":"advantages","text":"Ranger is a terminal file manager with Vim-style shortcuts. You can use the keyboard to quickly view and preview files, navigate between different folders, and perform common operations such as copying, pasting, deleting, and renaming files or folders directly under the ranger interface.
"},{"location":"en/software/ranger/#install","title":"Install","text":"How to install ranger
sudo apt install ranger\n
pip install ranger-fm\n
ranger renderings
cd
command to switch directories.Official documentation of the tool
ranger official wiki - Related pages
ranger cheat sheet
Website: https://www.texmacs.org/tmweb/home/welcome.en.html
Try GNU TeXmacs if you are being tortured by LaTeX GNU TeXmacs is a WYSIWYG open source editor for scientific documents (papers, notes, etc.). Highly recommended if you write lots of maths!
Features:
tab
multiple times. For example, press a
and then press tab
to get \\(\\alpha\\) and other characters that looks like a.In most cases the built-in documentations will suit your needs. Occasionally, there are outdated parts in the documentation. In this case you can read The Jolly Writer, which is also written by the main author of TeXmacs.
Remember to switch to Chinese mode (click the national flag on the menu bar), otherwise it will not line wrap automatically.
"},{"location":"en/specification/pr/","title":"Pull Request Message Specification","text":"For Pull Request, please follow the following requirements1:
fix #xxxx
in the content, where xxxx
is the issue number.For the title, such format is recommended:
<Edit type>(<file name>): <content> (<issue number>)\n
Edit type can be one of the following:
feat
: for adding new content.fix
: for fixing existing content errors.refactor
: for refactoring a page (larger changes).revert
: for reverting previous changes.Examples:
fix(sepecification/specification): edit code comment to make it more clear
fix: plugins/xxx not in directory (#2)
feat(software/mathpix): official website
refactor(specification/template): tidy up page content
Edited from OI-wiki: \u5982\u4f55\u53c2\u4e0e \u21a9
Hello friends, if you have a great tool that you want to share with everyone, but you don\u2019t know how to write a markdown, here is a template for reference
"},{"location":"en/specification/template/#introduction","title":"Introduction","text":"We would like submitted PRs to describe this tool in the introduction section:
The PR we want to submit is described in the installation section:
linux
operating system, it is best to give instructions$clang --version
to check whether clang
is successfully installedThe PR we want to submit is described in the recommendation reason section:
We hope that the submitted PR will provide some common references in the reference section, such as:
免费的跨平台开源文件管理器,它的灵感来自 Total Commander ,并提供了一些新的想法(支持 Linux )。
+ + + + + + + + +print('Hello World')
+
Python 不能直接在计算机中运行,因此需要 Python 语言的运行环境: Python 解析器
+下载地址:https://www.python.org/downloads/release/python-379/ +当然你安装3.8或者3.9也是没问题的
+查找目标文件:Windows x86-64 executable installer -- 单击即可下载。(格式不能找错)
+第一步:双击运行 Python 的解析器,选择 自定义安装 以及 添加 Python 到环境变量(这一步非常重要)
+第二步:选择所有要安装的功能菜单,默认全部勾选
+第三步:设置 Python 解析器的安装路径,尽量不要安装在C盘,但需要知道自己安装的位置
+第四步:测试 Python 解析器是否可以使用 +方法:按 Windows + R ,输入 cmd ,打开 Windows 的 DOS 窗口,输入 python(全部小写),当出现下图就成功了
+使用exit()退出
+在不涉及到人工智能的方向,推荐不用安装 anaconda ,直接安装 PyCharm 即可。它是目前功能最强大的 IDE
+PyCharm 一共有两个版本:专业版(收费) 与 社区版(免费、开源)。我们选择后者
+第一步:下载 PyCharm 。https://www.jetbrains.com/pycharm/download/
+第二步:设置软件的安装路径,不用安装在 C 盘
+第三步:PyCharm 基本设置。如下图设置,不建议把 Pycharm 添加到环境变量里面
+第一步:创建项目 (Pycharm 不要汉化!不要汉化!不要汉化!)
+点开图标,初次点开会有一个提示窗口,不用管他,点击 New Project
+第二步:设置项目路径,尽量放到 C 盘以外(非常重要!!)
+你会看到类似如下图片。(因为我使用的是虚拟机安装,只用于开发 pycharm ,只有一个盘所以放在了 C 盘)
+其中 base interpreter 会自动感知到 python.exe 的位置,没感知到可以手动定位(找到 python 安装路径然后选定 python.exe )
+新建文件并书写代码
+print('Hello World')
+
进行运行,右上角绿色的三角符号 Run 。
+结果如下,就完成啦。
+官网:https://tiddlywiki.com/
+国际交流社区:https://talk.tiddlywiki.org/
+++很久很久以前,在一条河流里,生活着许多许多的小鱼儿(Tiddlers),它们快活地在故事河(Story River)里游来游去。这些小鱼儿每一个都有自己的名字(条目名),自己的种类(内容类型),它携带的信息组成了鱼儿美丽的身体与骨架,附加的字段构成了它美丽的鳞片。——TiddlyWiki简易教程。
+
「太微」是我们对 TiddlyWiki 的中文称呼,TiddlyWiki是一款极其强大又极具拓展性的个人 Wiki 系统。
+为什么把 TiddlyWiki 翻译成「太微」?因为受到 @pimgeek 的启发:TiddlyWiki 可以干很多细致轻量的工作,但也从不限制用法,可以无限组合叠加。故以其首字母音译为「太微」,TiddlyWiki 可以称为「太微笔记」「太微万能抽屉」「太微卡片盒」……
+太微具有多种形态。拥有HTML文件与文件夹 2种存储形式。桌面浏览器,服务端软件,应用软件 3种使用方式。可以在任意平台中使用,只有你想不到的,没有做不到的。
+您曾感觉人类的大脑是有极限的吗?感觉它不足以容纳一切你需要记住的事?
+欢迎使用 TiddlyWiki,一个独特的非线性笔记本,用于截取、管理和复用复杂的信息。
+用它来保留您的待办清单、计划一篇散文或一部小说、或安排您的婚礼。记录每个闪过您脑中的想法,或创建一个灵活和反应迅速的网站。
+++非线性笔记,这很像我们的大脑的思维习惯,不连续的、片段的信息,通过一些线索联系在一起。正如TiddlyWiki的条目记载的信息,通过标签或者字段又或者链接与嵌入相互联系在一起。
+
下载链接:https://github.com/tiddly-gittly/TidGi-Desktop
+TidGi,全平台的桌面端电脑支持,快速安装使用。内置ItonNote TiddlyWiki模板(预装常用插件)。省去配置插件的过程。
+TiddlyDesktop。全平台桌面端软件,tiddlywiki模板可以在Tiddlystow中选一个使用,比较推荐的是tiddlywiki XP以及适配TidGi单文件wiki。TiddlyDesktop主要是用于管理单个tiddlywiki的工具,而TidGi是一个wiki就是一个工作空间,采用all in one的思路。
+下载链接:https://github.com/TiddlyWiki/TiddlyDesktop/releases
+Timimi,一个浏览器插件与伺服软件配套使用的软件。优点是使用方便,即点即用,缺点是,配置步骤比前两个多一点。
+可以把一个HTML单文件版wiki作为超级灵活的word文档使用。即即点即用。
+下载链接:https://ibnishak.github.io/Timimi/
+最后一个Node.js,适用于对命令行工具、JS以及NodeJS有一定了解的用户。
+运行在NodeJS环境的TiddlyWiki,支持多用户同时使用/编辑相同的wiki的插件:TW5-Bob,与此再进一步封装了TW5-BobEXE程序,可以直接下载到你的电脑上运行。
+ANTLR(ANother-Tool-for-Language-Recognition)是一个功能强大的语法分析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它被广泛用于构建语言、工具和框架。ANTLR根据语法生成一个解析器,该解析器可以构建和遍历解析树
+example.g4 +
// specific grammar name
+grammar example;
+// for non-terminal, star with lower-case letter
+
+// '*' 代表该产生式出现0次或以上
+// '+' 代表至少出现一次
+// 下例将会被解析成vector<number>
+addExp
+ : number ('+' number)*
+ ;
+
+// 可以通过在产生式后 # nickname
+// 创建一个别名用来分析同名的不同情况下的产生式
+number
+ : IntLiteral # number1
+ | FloatLiteral # number2
+ ;
+
+// for terminal, star with lower-case letter
+IntLiteral
+ : [0-9]+
+ | ('0x'|'0X')[0-9a-fA-F]+
+ ;
+
+// '?' 代表该产生式可能存在,若存在仅出现一次
+FloatLiteral
+ : ([0-9]+|[0-9]*'.'[0-9]*)([eE]('+'|'-')?[0-9]+)?[fFlL]?
+ | ('0x'|'0X')([0-9a-fA-F]*'.'[0-9a-fA-F]*)([pP]('+'|'-')?[0-9]+)?[fFlL]?
+ ;
+
shell command +
antlr -Dlanguage=Cpp -no-listener -visitor example.g4
+
exampleVisitor.h +
#include "exampleBaseVisitor.h"
+
+class ExampleVisitor : public exampleBaseVisitor {
+ virtual antlrcpp::Any visitAddExp(exampleParser::AddExpContext *ctx) override;
+ virtual antlrcpp::Any visitNumber(exampleParser::NumberContext *ctx) override;
+};
+// Access string of current node by `ctx->getText()`
+// Visit `number` node of `addExp` by `ctx->number()`
+// then you can override visit-function to build your own parser !
+
官方仓库 + antlr repository
+官方文档 + antlr official doc
+官网: https://github.com/chenzhiy2001/code-debug/
+code-debug 是一个支持Rust语言的源代码级内核调试工具. 现在可以调试rCore-Tutorial-v3操作系统,支持从内核态跟踪到用户态. 最近的工作是,利用eBPF技术实现更丰富,更鲁棒的跟踪功能.
+ + + + + + + + +一个编译器和运行时框架,以帮助您尽可能轻松地构建和分发 eBPF 程序。
+eunomia-bpf
是一个动态加载库/运行时和编译工具链框架,旨在帮助您更轻松地构建和分发 eBPF 程序。
使用 eunomia-bpf,您可以:
+libbpf
eBPF 应用程序:仅编写 eBPF 内核代码,并自动从内核中使用 perf event
或 ring buffer
自动输出采样数据到内核态。hists
(直方图等信息)。命令行参数
。BCC
和 libbpf
等多种格式编写内核部分。Wasm
2 构建 eBPF 程序:参见 Wasm-bpf
项目OCI
镜像推送、拉取或运行1
行 bash中从 云端存储库
或 URL
运行 eBPF 程序。JSON
配置文件或 Wasm
用户态控制和数据处理模块的 eBPF 程序。更多信息请参见 documents/introduction.md。
+您可以使用一行 bash 从云端下载预编译的 eBPF 程序并将其运行到内核中:
+# 从 https://github.com/eunomia-bpf/eunomia-bpf/releases/latest/download/ecli 下载 ecli 运行时
+$ wget https://aka.pw/bpf-ecli -O ecli && chmod +x ./ecli
+$ sudo ./ecli https://eunomia-bpf.github.io/eunomia-bpf/sigsnoop/package.json # 从 url 运行预编译的 ebpf 代码
+$ sudo ./ecli sigsnoop:latest # 直接使用名称运行,并从我们的仓库下载最新版本 bpf 工具
+
仓库地址:https://github.com/junegunn/fzf
+FZF 是一款使用 Go 编写的交互式 CLI ,可用来查找任何列表内容、文件、历史指令、进程、host 名、书签或 Git commit 等内容。
+对于 macOS ,推荐使用 Homebrew 进行安装:
+brew install fzf
+
在 Linux 发行版上,可使用不同的包管理器进行安装,例如:
+Debian/Ubuntu(Apt):
+sudo apt install fzf
+
ArchLinux(Pacman):
+sudo pacman -S fzf
+
并不推荐在 Windows 中使用 FZF 。Windows 可使用 Everything 进行搜索。
+Windows下可使用 Scoop 进行安装使用。
+scoop install fzf
+
直接执行 FZF ,打开文件搜索功能。
+fzf
+
在此模式下,用户可输入特定的文件或目录名,FZF 将会在当前目录下执行查找,并显示出指定文件或目录的相对路径。
+使用快捷键 Ctrl+J
或 Ctrl+N
可向下滚动列表; Ctrl+K
或 Ctrl+P
可向下滚动列表。
+使用 Enter
选中条目并退出 FZF,Ctrl+C
、Ctrl+G
或 Esc
可退出 FZF 而不进行选择。
FZF 可作为 Vim 的插件使用,方便快速查找需要编辑的文件。
+在本例中,使用 vim-plug 插件管理器进行安装:
+编辑 ~/.vimrc
文件,在 call plug#begin()
下添加如下行:
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
+
重新加载 .vimrc
文件:
source ~/.vimrc
+
打开 vim ,并执行 :PlugInstall
用于安装插件。
使用 python 配置了 gdb 调试界面,完全可以自己写代码去定义整个调试界面可以说是堪比 IDE ,显示也非常好看,完全基于终端,作为底层的调试软件可以帮助开发者更好的查看变量、寄存器、单步执行等。
+获取
+wget -P ~ https://git.io/.gdbinit #如果网速较慢可以直接新建同名文件.gdbinit之后复制粘贴过来
+
目前 IDE 集成了很多的调试工具,但是在一些内核编程或者其他的底层开发领域 gdb 仍然具备不可替代的作用,为此我们希望在原本枯燥的调试终端找到更加便于观察的页面好在已经有人帮我们实现了这一工具为此我们希望把这样的便捷带给每一个人。
+参考 gdb调试常见指令
+在使用该插件时需要查看当前所使用的 gdb 是否支持 python 脚本,当出现 Scripting in the "Python" language is not supported in this copy of GDB.
时则表明该 gdb 不支持 python 脚本,无法使用该插件。另外,也需要注意 gdb 与 python 的版本是否匹配的问题,见 issue
Mathpix是一款 tex 格式公式生成软件,它主要的功能是通过 ocr 技术识别截图当中的公式,并生成对应的 tex 代码,在论文写作的过程中能够极大的加速公式编写的速度。
+特性:
+缺点:
+官网: https://www.nano-editor.org/
+gnu nano 是一个简单易上手的命令行编辑器,部分 linux 发行版的默认编辑器就是 nano ,同时你也可以在 windows 中安装它。
+在 linux 发行版中我们可以使用发行版对应的的包管理工具进行安装。
+以使用 apt 作为包管理工具的 debain 为例:
+sudo apt install nano
+
在命令行中输入 nano 就会出现详细的操作指导。
+Ranger 是有着 Vim 风格的快捷键的终端文件管理器。你可以使用键盘快速查看、预览文件,在不同的文件夹之间导航,还可以直接在ranger下对文件(文件夹)进行复制、粘贴、删除、重命名等常用操作。
+获取
+sudo apt install ranger
+
pip install ranger-fm
+
效果图
+
参考
+官方文档
+ +快捷键总结
+ +官网:https://www.texmacs.org/tmweb/home/welcome.en.html
+被 LaTeX 折磨的话,不妨试试 GNU TeXmacs!TeXmacs 是一款所见即所得的科学文档(论文,笔记等)开源编辑器。 +如果写很多的数学公式的话可以试试,非常好用!
+特性:
+a
再按tab就可以得到 \(\alpha\) 等看着像 a 的字符。需要什么功能看一看内建文档就差不多会了,偶尔文档里有过时的地方,可以下一本 The Jolly Writer ,也是软件的主要作者写的。
+唯一要注意的一点是,记得切换到中文模式(点菜单栏上面的国旗),否则不会自动换行。
+ + + + + + + + +++「有研究显示,打字的时候不喜欢在中文和英文之间加空格的人,感情路都走得很辛苦,有七成的比例会在 34 岁的时候跟自己不爱的人结婚,而其余三成的人最后只能把遗产留给自己的猫。毕竟爱情跟书写都需要适时地留白。
+与大家共勉之。」——vinta/paranoid-auto-spacing
+
正确:
+++在 LeanCloud 上,数据存储是围绕
+AVObject
进行的。
错误:
+++在LeanCloud上,数据存储是围绕
+AVObject
进行的。在 LeanCloud上,数据存储是围绕
+AVObject
进行的。
完整的正确用法:
+++在 LeanCloud 上,数据存储是围绕
+AVObject
进行的。每个AVObject
都包含了与 JSON 兼容的 key-value 对应的数据。数据是 schema-free 的,你不需要在每个AVObject
上提前指定存在哪些键,只要直接设定对应的 key-value 即可。
例外:「豆瓣FM」等产品名词,按照官方所定义的格式书写。
+正确:
+++今天出去买菜花了 5000 元。
+
错误:
+++今天出去买菜花了 5000元。
+今天出去买菜花了5000元。
+
正确:
+++我家的光纤入屋宽带有 10 Gbps,SSD 一共有 20 TB
+
错误:
+++我家的光纤入屋宽带有 10Gbps,SSD 一共有 20TB
+
例外:度数/百分比与数字之间不需要增加空格:
+正确:
+++角度为 90° 的角,就是直角。
+新 MacBook Pro 有 15% 的 CPU 性能提升。
+
错误:
+++角度为 90 ° 的角,就是直角。
+新 MacBook Pro 有 15 % 的 CPU 性能提升。
+
正确:
+++刚刚买了一部 iPhone,好开心!
+
错误:
+++刚刚买了一部 iPhone ,好开心!
+刚刚买了一部 iPhone, 好开心!
+
text-spacing
来挽救?CSS Text Module Level 4 的 text-spacing
和 Microsoft 的 -ms-text-autospace
可以实现自动为中英文之间增加空白。不过目前并未普及,另外在其他应用场景,例如 macOS、iOS、Windows 等用户界面目前并不存在这个特性,所以请继续保持随手加空格的习惯。
即使中国大陆的标点符号用法允许重复使用标点符号,但是这么做会破坏句子的美观性。
+正确:
+++德国队竟然战胜了巴西队!
+她竟然对你说「喵」?!
+
错误:
+++德国队竟然战胜了巴西队!!
+德国队竟然战胜了巴西队!!!!!!!!
+她竟然对你说「喵」??!!
+她竟然对你说「喵」?!?!??!!
+
不明白什么是全角(全形)与半角(半形)符号?请查看维基百科条目『全角和半角』。
+正确:
+++嗨!你知道嘛?今天前台的小妹跟我说「喵」了哎!
+核磁共振成像(NMRI)是什么原理都不知道?JFGI!
+
错误:
+++嗨! 你知道嘛? 今天前台的小妹跟我说 "喵" 了哎!
+嗨!你知道嘛?今天前台的小妹跟我说"喵"了哎!
+核磁共振成像 (NMRI) 是什么原理都不知道? JFGI!
+核磁共振成像(NMRI)是什么原理都不知道?JFGI!
+
正确:
+++这个蛋糕只卖 1000 元。
+
错误:
+++这个蛋糕只卖 1000 元。
+
例外:在设计稿、宣传海报中如出现极少量数字的情形时,为方便文字对齐,是可以使用全角数字的。
+正确:
+++乔布斯那句话是怎么说的?「Stay hungry, stay foolish.」
+推荐你阅读《Hackers & Painters: Big Ideas from the Computer Age》,非常的有趣。
+
错误:
+++乔布斯那句话是怎么说的?「Stay hungry,stay foolish。」
+推荐你阅读《Hackers&Painters:Big Ideas from the Computer Age》,非常的有趣。
+
大小写相关用法原属于英文书写范畴,不属于本 wiki 讨论内容,在这里只对部分易错用法进行简述。
+正确:
+++使用 GitHub 登录
+我们的客户有 GitHub、Foursquare、Microsoft Corporation、Google、Facebook, Inc.。
+
错误:
+++使用 github 登录
+使用 GITHUB 登录
+使用 Github 登录
+使用 gitHub 登录
+使用 gイんĤЦ8 登录
+我们的客户有 github、foursquare、microsoft corporation、google、facebook, inc.。
+我们的客户有 GITHUB、FOURSQUARE、MICROSOFT CORPORATION、GOOGLE、FACEBOOK, INC.。
+我们的客户有 Github、FourSquare、MicroSoft Corporation、Google、FaceBook, Inc.。
+我们的客户有 gitHub、fourSquare、microSoft Corporation、google、faceBook, Inc.。
+我们的客户有 gイんĤЦ8、キouЯƧquムгє、๓เςг๏ร๏Ŧt ς๏гק๏гคtเ๏ภn、900913、ƒ4ᄃëв๏๏к, IПᄃ.。
+
注意:当网页中需要配合整体视觉风格而出现全部大写/小写的情形,HTML 中请使用标淮的大小写规范进行书写;并通过 text-transform: uppercase;
/text-transform: lowercase;
对表现形式进行定义。
正确:
+++我们需要一位熟悉 TypeScript、HTML5,至少理解一种框架(如 React、Next.js)的前端开发者。
+
错误:
+++我们需要一位熟悉 Ts、h5,至少理解一种框架(如 RJS、nextjs)的 FED。
+
以下用法略带有个人色彩,即:无论是否遵循下述规则,从语法的角度来讲都是正确的。
+用法:
+++请 提交一个 issue 并分配给相关同事。
+访问我们网站的最新动态,请 点击这里 进行订阅!
+
对比用法:
+++请提交一个 issue并分配给相关同事。
+访问我们网站的最新动态,请点击这里进行订阅!
+
用法:
+++「老师,『有条不紊』的『紊』是什么意思?」
+
对比用法:
+++“老师,‘有条不紊’的‘紊’是什么意思?”
+
Note
+本要求取自 中文文案排版指北 ,你可以点击链接来了解更多内容。
+LaTeX 的数学公式有两种:行中公式和独立公式(行间公式)。行中公式放在文中与其它文字混编,独立公式单独成行。
+行中公式可以用如下方法表示:
+$ 数学公式 $
独立公式可以用如下方法表示:
+$$ 数学公式 $$
\dot{a}, \ddot{a}, \acute{a}, \grave{a}
\(\dot{a}, \ddot{a}, \acute{a}, \grave{a}\)
+\check{a}, \breve{a}, \tilde{a}, \bar{a}
\(\check{a}, \breve{a}, \tilde{a}, \bar{a}\)
+\hat{a}, \widehat{a}, \vec{a}
\(\hat{a}, \widehat{a}, \vec{a}\)
+指数
+\exp_a b = a^b, \exp b = e^b, 10^m
\(\exp_a b = a^b, \exp b = e^b, 10^m\)
+对数
+\ln c, \lg d = \log e, \log_{10} f
\(\ln c, \lg d = \log e, \log_{10} f\)
+三角函数
+\sin a, \cos b, \tan c, \cot d, \sec e, \csc f
\(\sin a, \cos b, \tan c, \cot d, \sec e, \csc f\)
+\arcsin a, \arccos b, \arctan c
\(\arcsin a, \arccos b, \arctan c\)
+\sinh a, \cosh b, \tanh c, \coth d
\(\sinh a, \cosh b, \tanh c, \coth d\)
+\operatorname{sh}k, \operatorname{ch}l, \operatorname{th}m, \operatorname{coth}n
\(\operatorname{sh}k, \operatorname{ch}l, \operatorname{th}m, \operatorname{coth}n\)
+\operatorname{argsh}o, \operatorname{argch}p, \operatorname{argth}q
\(\operatorname{argsh}o, \operatorname{argch}p, \operatorname{argth}q\)
+最大值,最小值
+\min(x,y), \max(x,y)
\(\min(x,y), \max(x,y)\)
+\min x, \max y, \inf s, \sup t
\(\min x, \max y, \inf s, \sup t\)
+\lim u, \liminf v, \limsup w
\(\lim u, \liminf v, \limsup w\)
+\lim_{x \to \infty} \frac{1}{n(n+1)}
\(\lim_{x \to \infty} \frac{1}{n(n+1)}\)
+\dim p, \deg q, \det m, \ker\phi
\(\dim p, \deg q, \det m, \ker\phi\)
+\Pr j, \hom l, \lVert z \rVert, \arg z
\(\Pr j, \hom l, \lVert z \rVert, \arg z\)
+dt, \mathrm{d}t, \partial t, \nabla\psi
\(dt, \mathrm{d}t, \partial t, \nabla\psi\)
+dy/dx, \mathrm{d}y/\mathrm{d}x, \frac{dy}{dx}, \frac{\mathrm{d}y}{\mathrm{d}x}, \frac{\partial^2}{\partial x_1\partial x_2}y
\(dy/dx, \mathrm{d}y/\mathrm{d}x, \frac{dy}{dx}, \frac{\mathrm{d}y}{\mathrm{d}x}, \frac{\partial^2}{\partial x_1\partial x_2}y\)
+\prime, \backprime, f^\prime, f', f'', f^{(3)}, \dot y, \ddot y
\(\prime, \backprime, f^\prime, f', f'', f^{(3)}, \dot y, \ddot y\)
+\infty, \aleph, \complement, \backepsilon, \eth, \Finv, \hbar
∞,ℵ,∁,∍,ð,Ⅎ,ℏ
+\Im, \imath, \jmath, \Bbbk, \ell, \mho, \wp, \Re, \circledS
\(\Im, \imath, \jmath, \Bbbk, \ell, \mho, \wp, \Re, \circledS\)
+s_k \equiv 0 \pmod{m}
\(s_k \equiv 0 \pmod{m}\)
+a \bmod b
\(a \bmod b\)
+\gcd(m, n), \operatorname{lcm}(m, n)
\(\gcd(m, n), \operatorname{lcm}(m, n)\)
+\mid, \nmid, \shortmid, \nshortmid
\(\mid, \nmid, \shortmid, \nshortmid\)
+\surd, \sqrt{2}, \sqrt[n]{}, \sqrt[3]{\frac{x^3+y^3}{2}}
\(\surd, \sqrt{2}, \sqrt[n]{}, \sqrt[3]{\frac{x^3+y^3}{2}}\)
++, -, \pm, \mp, \dotplus
\(+, -, \pm, \mp, \dotplus\)
+\times, \div, \divideontimes, /, \backslash
\(\times, \div, \divideontimes, /, \backslash\)
+\cdot, * \ast, \star, \circ, \bullet
\(\cdot, * \ast, \star, \circ, \bullet\)
+\boxplus, \boxminus, \boxtimes, \boxdot
\(\boxplus, \boxminus, \boxtimes, \boxdot\)
+\oplus, \ominus, \otimes, \oslash, \odot
\(\oplus, \ominus, \otimes, \oslash, \odot\)
+\circleddash, \circledcirc, \circledast
\(\circleddash, \circledcirc, \circledast\)
+\bigoplus, \bigotimes, \bigodot
\(\bigoplus, \bigotimes, \bigodot\)
+\{ \}, \empty \emptyset, \varnothing
\(\{ \}, \empty \emptyset, \varnothing\)
+\in, \notin \not\in, \ni, \not\ni
\(\in, \notin \not\in, \ni, \not\ni\)
+\cap, \Cap, \sqcap, \bigcap
\(\cap, \Cap, \sqcap, \bigcap\)
+\cup, \Cup, \sqcup, \bigcup, \bigsqcup, \uplus, \biguplus
\(\cup, \Cup, \sqcup, \bigcup, \bigsqcup, \uplus, \biguplus\)
+\setminus, \smallsetminus, \times
\(\setminus, \smallsetminus, \times\)
+\subset, \Subset, \sqsubset
\(\subset, \Subset, \sqsubset\)
+\supset, \Supset, \sqsupset
\(\supset, \Supset, \sqsupset\)
+\subseteq, \nsubseteq, \subsetneq, \varsubsetneq, \sqsubseteq
\(\subseteq, \nsubseteq, \subsetneq, \varsubsetneq, \sqsubseteq\)
+\supseteq, \nsupseteq, \supsetneq, \varsupsetneq, \sqsupseteq
\(\supseteq, \nsupseteq, \supsetneq, \varsupsetneq, \sqsupseteq\)
+\subseteqq, \nsubseteqq, \subsetneqq, \varsubsetneqq
\(\subseteqq, \nsubseteqq, \subsetneqq, \varsubsetneqq\)
+\supseteqq, \nsupseteqq, \supsetneqq, \varsupsetneqq
\(\supseteqq, \nsupseteqq, \supsetneqq, \varsupsetneqq\)
+=, \ne, \neq, \equiv, \not\equiv
\(=, \ne, \neq, \equiv, \not\equiv\)
+\doteq, \doteqdot, \overset{\underset{\mathrm{def}}{}}{=}, :=
\(\doteq, \doteqdot, \overset{\underset{\mathrm{def}}{}}{=}, :=\)
+\sim, \nsim, \backsim, \thicksim, \simeq, \backsimeq, \eqsim, \cong, \ncong
\(\sim, \nsim, \backsim, \thicksim, \simeq, \backsimeq, \eqsim, \cong, \ncong\)
+\approx, \thickapprox, \approxeq, \asymp, \propto, \varpropto
\(\approx, \thickapprox, \approxeq, \asymp, \propto, \varpropto\)
+<, \nless, \ll, \not\ll, \lll, \not\lll, \lessdot
\(<, \nless, \ll, \not\ll, \lll, \not\lll, \lessdot\)
+>, \ngtr, \gg, \not\gg, \ggg, \not\ggg, \gtrdot
\(>, \ngtr, \gg, \not\gg, \ggg, \not\ggg, \gtrdot\)
+\le, \leq, \lneq, \leqq, \nleq, \nleqq, \lneqq, \lvertneqq
\(\le, \leq, \lneq, \leqq, \nleq, \nleqq, \lneqq, \lvertneqq\)
+\ge, \geq, \gneq, \geqq, \ngeq, \ngeqq, \gneqq, \gvertneqq
\(\ge, \geq, \gneq, \geqq, \ngeq, \ngeqq, \gneqq, \gvertneqq\)
+\lessgtr, \lesseqgtr, \lesseqqgtr, \gtrless, \gtreqless, \gtreqqless
\(\lessgtr, \lesseqgtr, \lesseqqgtr, \gtrless, \gtreqless, \gtreqqless\)
+\leqslant, \nleqslant, \eqslantless
\(\leqslant, \nleqslant, \eqslantless\)
+\geqslant, \ngeqslant, \eqslantgtr
\(\geqslant, \ngeqslant, \eqslantgtr\)
+\lesssim, \lnsim, \lessapprox, \lnapprox
\(\lesssim, \lnsim, \lessapprox, \lnapprox\)
+\gtrsim, \gnsim, \gtrapprox, \gnapprox
\(\gtrsim, \gnsim, \gtrapprox, \gnapprox\)
+\prec, \nprec, \preceq, \npreceq, \precneqq
\(\prec, \nprec, \preceq, \npreceq, \precneqq\)
+\succ, \nsucc, \succeq, \nsucceq, \succneqq
\(\succ, \nsucc, \succeq, \nsucceq, \succneqq\)
+\preccurlyeq, \curlyeqprec
\(\preccurlyeq, \curlyeqprec\)
+\succcurlyeq, \curlyeqsucc
\(\succcurlyeq, \curlyeqsucc\)
+\precsim, \precnsim, \precapprox, \precnapprox
\(\precsim, \precnsim, \precapprox, \precnapprox\)
+\succsim, \succnsim, \succapprox, \succnapprox
\(\succsim, \succnsim, \succapprox, \succnapprox\)
+\parallel, \nparallel, \shortparallel, \nshortparallel
\(\parallel, \nparallel, \shortparallel, \nshortparallel\)
+\perp, \angle, \sphericalangle, \measuredangle, 45^\circ
\(\perp, \angle, \sphericalangle, \measuredangle, 45^\circ\)
+\Box, \blacksquare, \diamond, \Diamond \lozenge, \blacklozenge, \bigstar
\(\Box, \blacksquare, \diamond, \Diamond \lozenge, \blacklozenge, \bigstar\)
+\bigcirc, \triangle, \bigtriangleup, \bigtriangledown
\(\bigcirc, \triangle, \bigtriangleup, \bigtriangledown\)
+\vartriangle, \triangledown
\(\vartriangle, \triangledown\)
+\blacktriangle, \blacktriangledown, \blacktriangleleft, \blacktriangleright
\(\blacktriangle, \blacktriangledown, \blacktriangleleft, \blacktriangleright\)
+\forall, \exists, \nexists
\(\forall, \exists, \nexists\)
+\therefore, \because, \And
\(\therefore, \because, \And\)
+\vee, \curlyvee, \bigvee
\(\vee, \curlyvee, \bigvee\)
+\land, \wedge, \curlywedge, \bigwedge
\(\land, \wedge, \curlywedge, \bigwedge\)
+\bar{q}, \bar{abc}, \overline{q}, \overline{abc},
\lnot \neg, \not\operatorname{R}, \bot, \top
\(\bar{q}, \bar{abc}, \overline{q}, \overline{abc},\)
+\(\lnot \neg, \not\operatorname{R}, \bot, \top\)
+\vdash \dashv, \vDash, \Vdash, \models
\(\vdash \dashv, \vDash, \Vdash, \models\)
+\Vvdash \nvdash \nVdash \nvDash \nVDash
\(\Vvdash \nvdash \nVdash \nvDash \nVDash\)
+\ulcorner \urcorner \llcorner \lrcorner
\(\ulcorner \urcorner \llcorner \lrcorner\)
+\Rrightarrow, \Lleftarrow
\(\Rrightarrow, \Lleftarrow\)
+\Rightarrow, \nRightarrow, \Longrightarrow \implies
\(\Rightarrow, \nRightarrow, \Longrightarrow \implies\)
+\Leftarrow, \nLeftarrow, \Longleftarrow
\(\Leftarrow, \nLeftarrow, \Longleftarrow\)
+\Leftrightarrow, \nLeftrightarrow, \Longleftrightarrow \iff
\(\Leftrightarrow, \nLeftrightarrow, \Longleftrightarrow \iff\)
+\Uparrow, \Downarrow, \Updownarrow
\(\Uparrow, \Downarrow, \Updownarrow\)
+\rightarrow \to, \nrightarrow, \longrightarrow
\(\rightarrow \to, \nrightarrow, \longrightarrow\)
+\leftarrow \gets, \nleftarrow, \longleftarrow
\(\leftarrow \gets, \nleftarrow, \longleftarrow\)
+\leftrightarrow, \nleftrightarrow, \longleftrightarrow
\(\leftrightarrow, \nleftrightarrow, \longleftrightarrow\)
+\uparrow, \downarrow, \updownarrow
\(\uparrow, \downarrow, \updownarrow\)
+\nearrow, \swarrow, \nwarrow, \searrow
\(\nearrow, \swarrow, \nwarrow, \searrow\)
+\mapsto, \longmapsto
\(\mapsto, \longmapsto\)
+\rightharpoonup \rightharpoondown \leftharpoonup \leftharpoondown \upharpoonleft \upharpoonright \downharpoonleft \downharpoonright \rightleftharpoons \leftrightharpoons
\(\rightharpoonup \rightharpoondown \leftharpoonup \leftharpoondown \upharpoonleft \upharpoonright \downharpoonleft \downharpoonright \rightleftharpoons \leftrightharpoons\)
+\curvearrowleft \circlearrowleft \Lsh \upuparrows \rightrightarrows \rightleftarrows \rightarrowtail \looparrowright
\(\curvearrowleft \circlearrowleft \Lsh \upuparrows \rightrightarrows \rightleftarrows \rightarrowtail \looparrowright\)
+\curvearrowright \circlearrowright \Rsh \downdownarrows \leftleftarrows \leftrightarrows \leftarrowtail \looparrowleft
\(\curvearrowright \circlearrowright \Rsh \downdownarrows \leftleftarrows \leftrightarrows \leftarrowtail \looparrowleft\)
+\hookrightarrow \hookleftarrow \multimap \leftrightsquigarrow \rightsquigarrow \twoheadrightarrow \twoheadleftarrow
\(\hookrightarrow \hookleftarrow \multimap \leftrightsquigarrow \rightsquigarrow \twoheadrightarrow \twoheadleftarrow\)
+省略号:数学公式中常见的省略号有两种,\ldots
表示与文本底线对齐的省略号,\cdots
表示与文本中线对齐的省略号。
\amalg \% \dagger \ddagger \ldots \cdots
\(\amalg \% \dagger \ddagger \ldots \cdots\)
+\smile \frown \wr \triangleleft \triangleright
\(\smile \frown \wr \triangleleft \triangleright\)
+\diamondsuit, \heartsuit, \clubsuit, \spadesuit, \Game, \flat, \natural, \sharp
\(\diamondsuit, \heartsuit, \clubsuit, \spadesuit, \Game, \flat, \natural, \sharp\)
+\diagup \diagdown \centerdot \ltimes \rtimes \leftthreetimes \rightthreetimes
\(\diagup \diagdown \centerdot \ltimes \rtimes \leftthreetimes \rightthreetimes\)
+\eqcirc \circeq \triangleq \bumpeq \Bumpeq \doteqdot \risingdotseq \fallingdotseq
\(\eqcirc \circeq \triangleq \bumpeq \Bumpeq \doteqdot \risingdotseq \fallingdotseq\)
+\intercal \barwedge \veebar \doublebarwedge \between \pitchfork
\(\intercal \barwedge \veebar \doublebarwedge \between \pitchfork\)
+\vartriangleleft \ntriangleleft \vartriangleright \ntriangleright
\(\vartriangleleft \ntriangleleft \vartriangleright \ntriangleright\)
+\trianglelefteq \ntrianglelefteq \trianglerighteq \ntrianglerighteq
\(\trianglelefteq \ntrianglelefteq \trianglerighteq \ntrianglerighteq\)
+功能|语法|效果
+^
表示上标, _
表示下标。如果上下标的内容多于一个字符,需要用 {}
将这些内容括成一个整体。上下标可以嵌套,也可以同时使用。
上标
+a^2
\(a^2\)
+下标
+a_2
\(a_2\)
+组合
+a^{2+2}
\(a^{2+2}\)
+a_{i,j}
\(a_{i,j}\)
+结合上下标
+x_2^3
\(x_2^3\)
+前置上下标
+{}_1^2\!X_3^4
\({}_1^2\!X_3^4\)
+导数
+x'
\(x'\)
+导数
+x^\prime
\(x\prime\)
+导数点
+\dot{x}
\(\dot{x}\)
+\ddot{y}
\(\ddot{y}\)
+向量
+\vec{c}
(只有一个字母)
\(\vec{c}\)
+\overleftarrow{a b}
\(\overleftarrow{a b}\)
+\overrightarrow{c d}
\(\overrightarrow{c d}\)
+\overleftrightarrow{a b}
\(\overleftrightarrow{a b}\)
+\widehat{e f g}
\(\widehat{e f g}\)
+上弧
+(注: 正确应该用 \overarc,但在这里行不通。要用建议的语法作为解决办法。)(使用 overarc 时需要引入 {arcs} 包。)
+\overset{\frown} {AB}
\(\overset{\frown} {AB}\)
+上划线
+\overline{h i j}
\(\overline{h i j}\)
+下划线
+\underline{k l m}
\(\underline{k l m}\)
+上括号
+\overbrace{1+2+\cdots+100}
\(\overbrace{1+2+\cdots+100}\)
+\begin{matrix} 5050 \\ \overbrace{ 1+2+\cdots+100 } \end{matrix}
\(\begin{matrix} 5050 \\ \overbrace{ 1+2+\cdots+100 } \end{matrix}\)
+下括号
+\underbrace{a+b+\cdots+z}
\(\underbrace{a+b+\cdots+z}\)
+\begin{matrix} \underbrace{ a+b+\cdots+z } \\ 26 \end{matrix}
\(\begin{matrix} \underbrace{ a+b+\cdots+z } \\ 26 \end{matrix}\)
+求和(累加)
+\sum_{k=1}^N k^2
\(\sum_{k=1}^N k^2\)
+\begin{matrix} \sum_{k=1}^N k^2 \end{matrix}
\(\begin{matrix} \sum_{k=1}^N k^2 \end{matrix}\)
+求积(累乘)
+\prod_{i=1}^N x_i
\(\prod_{i=1}^N x_i\)
+\begin{matrix} \prod_{i=1}^N x_i \end{matrix}
\(\begin{matrix} \prod_{i=1}^N x_i \end{matrix}\)
+上积
+\coprod_{i=1}^N x_i
\(\coprod_{i=1}^N x_i\)
+\begin{matrix} \coprod_{i=1}^N x_i \end{matrix}
\(\begin{matrix} \coprod_{i=1}^N x_i \end{matrix}\)
+极限
+\lim_{n \to \infty}x_n
\(\lim_{n \to \infty}x_n\)
+\begin{matrix} \lim_{n \to \infty}x_n \end{matrix}
\(\begin{matrix} \lim_{n \to \infty}x_n \end{matrix}\)
+积分
+\int_{-N}^{N} e^x\, {\rm d}x
\(\int_{-N}^{N} e^x\, {\rm d}x\)
+本例中 \
, 和 {\rm d}
部分可省略,但建议加入,能使式子更美观。{\rm d}
可以用 \mathrm{d}
等价替换。
\begin{matrix} \int_{-N}^{N} e^x\, \mathrm{d}x \end{matrix}
(矩阵中积分符号变小)
\(\begin{matrix} \int_{-N}^{N} e^x\, \mathrm{d}x \end{matrix}\)
+双重积分
+\iint_{D}^{W} \, \mathrm{d}x\,\mathrm{d}y
\(\iint_{D}^{W} \, \mathrm{d}x\,\mathrm{d}y\)
+三重积分
+\iiint_{E}^{V} \, \mathrm{d}x\,\mathrm{d}y\,\mathrm{d}z
\(\iiint_{E}^{V} \, \mathrm{d}x\,\mathrm{d}y\,\mathrm{d}z\)
+闭合的曲线、曲面积分
+\oint_{C} x^3\, \mathrm{d}x + 4y^2\, \mathrm{d}y
\(\oint_{C} x^3\, \mathrm{d}x + 4y^2\, \mathrm{d}y\)
+交集
+\bigcap_1^{n} p
\(\bigcap_1^{n} p\)
+并集
+\bigcup_1^{k} p
\(\bigcup_1^{k} p\)
+通常使用 \frac {分子} {分母}
命令产生一个分数,分数可嵌套。
+便捷情况可直接输入 \frac ab
来快速生成一个 \(\frac ab\) 。
+如果分式很复杂,亦可使用 分子 \over 分母
命令,此时分数仅有一层。
功能|语法|效果
+分数
+\frac{2}{4} = 0.5
\(\frac{2}{4}=0.5\)
+小型分数
+\tfrac{2}{4} = 0.5
\(\tfrac{2}{4} = 0.5\)
+连分式(大型嵌套分式)
+\cfrac{2}{c + \cfrac{2}{d + \cfrac{2}{4}}} = a
\(\cfrac{2}{c + \cfrac{2}{d + \cfrac{2}{4}}} = a\)
+大型不嵌套分式
+\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a
\(\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a\)
+二项式系数
+\dbinom{n}{r}=\binom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}
\(\dbinom{n}{r}=\binom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)
+小型二项式系数
+\tbinom{n}{r}=\tbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}
\(\tbinom{n}{r}=\tbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)
+大型二项式系数
+\binom{n}{r}=\dbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}
\(\binom{n}{r}=\dbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)
+在以 \(e\) 为底的指数函数、极限和积分中尽量不要使用 \frac
符号:它会使整段函数看起来很怪,而且可能产生歧义。也正是因此它在专业数学排版中几乎从不出现。
+横着写这些分式,中间使用斜线间隔 /
(用斜线代替分数线)。
例子:
+\begin{array}{cc}
+\mathrm{Bad} & \mathrm{Better} \\
+\hline \\
+e^{i\frac{\pi}2} \quad e^{\frac{i\pi}2}& e^{i\pi/2} \\
+\int_{-\frac\pi2}^\frac\pi2 \sin x\,dx & \int_{-\pi/2}^{\pi/2}\sin x\,dx \\
+\end{array}
+
显示:
+语法:
+\begin{类型}
+公式内容
+\end{类型}
+
类型可以是:矩阵 matrix
pmatrix
bmatrix
Bmatrix
vmatrix
Vmatrix
、条件表达式 cases
、多行对齐方程式 aligned
、数组 array
。
在公式内容中:在每一行中插入 &
来指定需要对齐的内容,在每行结尾处使用 \\
换行。
在开头使用 begin{matrix}
,在结尾使用 end{matrix}
,在中间插入矩阵元素,每个元素之间插入 &
,并在每行结尾处使用 \\
。
\begin{matrix}
+x & y \\
+z & v
+\end{matrix}
+
\(\begin{matrix} +x & y \\ +z & v +\end{matrix}\)
+在开头将 matrix
替换为 pmatrix
bmatrix
Bmatrix
vmatrix
Vmatrix
。
\begin{vmatrix}
+x & y \\
+z & v
+\end{vmatrix}
+
\(\begin{vmatrix} +x & y \\ +z & v +\end{vmatrix}\)
+\begin{Vmatrix}
+x & y \\
+z & v
+\end{Vmatrix}
+
\(\begin{Vmatrix} +x & y \\ +z & v +\end{Vmatrix}\)
+使用 \cdots
⋯ , \ddots
⋱ , \vdots
⋮ 来输入省略符号。
\begin{bmatrix}
+0 & \cdots & 0 \\
+\vdots & \ddots & \vdots \\
+0 & \cdots & 0
+\end{bmatrix}
+
\(\begin{bmatrix} +0 & \cdots & 0 \\ +\vdots & \ddots & \vdots \\ +0 & \cdots & 0 +\end{bmatrix}\)
+\begin{Bmatrix}
+x & y \\
+z & v
+\end{Bmatrix}
+
\(\begin{Bmatrix} +x & y \\ +z & v +\end{Bmatrix}\)
+\begin{pmatrix}
+x & y \\
+z & v
+\end{pmatrix}
+
\(\begin{pmatrix} +x & y \\ +z & v +\end{pmatrix}\)
+f(n) =
+\begin{cases}
+n/2, & \text{if }n\text{ is even} \\
+3n+1, & \text{if }n\text{ is odd}
+\end{cases}
+
\(f(n) = +\begin{cases} +n/2, & \text{if }n\text{ is even} \\ +3n+1, & \text{if }n\text{ is odd} +\end{cases}\)
+人们经常想要一列整齐且居中的方程式序列。使用 \begin{aligned}…\end{aligned}
。
\begin{aligned}
+f(x) & = (m+n)^2 \\
+ & = m^2+2mn+n^2 \\
+\end{aligned}
+
\(\begin{aligned} +f(x) & = (m+n)^2 \\ + & = m^2+2mn+n^2 \\ +\end{aligned}\)
+\begin{aligned}
+3^{6n+3}+4^{6n+3}
+& \equiv (3^3)^{2n+1}+(4^3)^{2n+1}\\
+& \equiv 27^{2n+1}+64^{2n+1}\\
+& \equiv 27^{2n+1}+(-27)^{2n+1}\\
+& \equiv 27^{2n+1}-27^{2n+1}\\
+& \equiv 0 \pmod{91}\\
+\end{aligned}
+
\(\begin{aligned} +3^{6n+3}+4^{6n+3} +& \equiv (3^3)^{2n+1}+(4^3)^{2n+1}\\ +& \equiv 27^{2n+1}+64^{2n+1}\\ +& \equiv 27^{2n+1}+(-27)^{2n+1}\\ +& \equiv 27^{2n+1}-27^{2n+1}\\ +& \equiv 0 \pmod{91}\\ +\end{aligned}\)
+\begin{alignedat}{3}
+f(x) & = (m-n)^2 \\
+f(x) & = (-m+n)^2 \\
+ & = m^2-2mn+n^2 \\
+\end{alignedat}
+
\(\begin{alignedat}{3} +f(x) & = (m-n)^2 \\ +f(x) & = (-m+n)^2 \\ + & = m^2-2mn+n^2 \\ +\end{alignedat}\)
+\begin{cases}
+3x + 5y + z \\
+7x - 2y + 4z \\
+-6x + 3y + 2z
+\end{cases}
+
\(\begin{cases} +3x + 5y + z \\ +7x - 2y + 4z \\ +-6x + 3y + 2z +\end{cases}\)
+或
+\left\{\begin{aligned}
+3x + 5y + z \\
+7x - 2y + 4z \\
+-6x + 3y + 2z
+\end{aligned}\right.
+
\(\left\{\begin{aligned} +3x + 5y + z \\ +7x - 2y + 4z \\ +-6x + 3y + 2z +\end{aligned}\right.\)
+通常,一个格式化后的表格比单纯的文字或排版后的文字更具有可读性。数组和表格均以 \begin{array}
开头,并在其后定义列数及每一列的文本对齐属性,c
l
r
分别代表居中、左对齐及右对齐。若需要插入垂直分割线,在定义式中插入 |
,若要插入水平分割线,在下一行输入前插入 \hline
。与矩阵相似,每行元素间均须要插入 &
,每行元素以 \\
结尾,最后以 \end{array}
结束数组。
\begin{array}{c|lcr}
+n & \text{左对齐} & \text{居中对齐} & \text{右对齐} \\
+\hline
+1 & 0.24 & 1 & 125 \\
+2 & -1 & 189 & -8 \\
+3 & -20 & 2000 & 1+10i
+\end{array}
+
\(\begin{array}{c|lcr} +n & \text{左对齐} & \text{居中对齐} & \text{右对齐} \\ +\hline +1 & 0.24 & 1 & 125 \\ +2 & -1 & 189 & -8 \\ +3 & -20 & 2000 & 1+10i +\end{array}\)
+\begin{array}{lcl}
+z & = & a \\
+f(x,y,z) & = & x + y + z
+\end{array}
+
\(\begin{array}{lcl} +z & = & a \\ +f(x,y,z) & = & x + y + z +\end{array}\)
+\begin{array}{lcr}
+z & = & a \\
+f(x,y,z) & = & x + y + z
+\end{array}
+
\(\begin{array}{lcr} +z & = & a \\ +f(x,y,z) & = & x + y + z +\end{array}\)
+\begin{array}{ccc}
+a & b & S \\
+\hline
+0&0&1\\
+0&1&1\\
+1&0&1\\
+1&1&0\\
+\end{array}
+
\(\begin{array}{ccc} +a & b & S \\ +\hline +0&0&1\\ +0&1&1\\ +1&0&1\\ +1&1&0\\ +\end{array}\)
+多个数组/表格可 互相嵌套 并组成一组数组/一组表格。
+使用嵌套前必须声明 $$
符号。
% outer vertical array of arrays 外层垂直表格
+\begin{array}{c}
+ % inner horizontal array of arrays 内层水平表格
+ \begin{array}{cc}
+ % inner array of minimum values 内层"最小值"数组
+ \begin{array}{c|cccc}
+ \text{min} & 0 & 1 & 2 & 3\\
+ \hline
+ 0 & 0 & 0 & 0 & 0\\
+ 1 & 0 & 1 & 1 & 1\\
+ 2 & 0 & 1 & 2 & 2\\
+ 3 & 0 & 1 & 2 & 3
+ \end{array}
+ &
+ % inner array of maximum values 内层"最大值"数组
+ \begin{array}{c|cccc}
+ \text{max}&0&1&2&3\\
+ \hline
+ 0 & 0 & 1 & 2 & 3\\
+ 1 & 1 & 1 & 2 & 3\\
+ 2 & 2 & 2 & 2 & 3\\
+ 3 & 3 & 3 & 3 & 3
+ \end{array}
+ \end{array}
+ % 内层第一行表格组结束
+ \\
+ % inner array of delta values 内层第二行Delta值数组
+ \begin{array}{c|cccc}
+ \Delta&0&1&2&3\\
+ \hline
+ 0 & 0 & 1 & 2 & 3\\
+ 1 & 1 & 0 & 1 & 2\\
+ 2 & 2 & 1 & 0 & 1\\
+ 3 & 3 & 2 & 1 & 0
+ \end{array}
+ % 内层第二行表格组结束
+\end{array}
+
\(% outer vertical array of arrays 外层垂直表格 +\begin{array}{c} + % inner horizontal array of arrays 内层水平表格 + \begin{array}{cc} + % inner array of minimum values 内层"最小值"数组 + \begin{array}{c|cccc} + \text{min} & 0 & 1 & 2 & 3\\ + \hline + 0 & 0 & 0 & 0 & 0\\ + 1 & 0 & 1 & 1 & 1\\ + 2 & 0 & 1 & 2 & 2\\ + 3 & 0 & 1 & 2 & 3 + \end{array} + & + % inner array of maximum values 内层"最大值"数组 + \begin{array}{c|cccc} + \text{max}&0&1&2&3\\ + \hline + 0 & 0 & 1 & 2 & 3\\ + 1 & 1 & 1 & 2 & 3\\ + 2 & 2 & 2 & 2 & 3\\ + 3 & 3 & 3 & 3 & 3 + \end{array} + \end{array} + % 内层第一行表格组结束 + \\ + % inner array of delta values 内层第二行Delta值数组 + \begin{array}{c|cccc} + \Delta&0&1&2&3\\ + \hline + 0 & 0 & 1 & 2 & 3\\ + 1 & 1 & 0 & 1 & 2\\ + 2 & 2 & 1 & 0 & 1\\ + 3 & 3 & 2 & 1 & 0 + \end{array} + % 内层第二行表格组结束 +\end{array}\)
+$$
+\left[
+ \begin{array}{cc|c}
+ 1&2&3\\
+ 4&5&6
+ \end{array}
+\right]
+$$
+
显示:
+其中 cc|c
代表在一个三列矩阵中的第二和第三列之间插入分割线。
Note
+对于部分希腊字母,例如 \Alpha
在预览时会生效但在网页上渲染会出现错误,因此这里的希腊字符写法参考 Greek letters 进行编辑,更多详情请参考 #39 LaTeX文档希腊字母大写显示有问题 。
输入 \小写希腊字母英文全称
和 \首字母大写希腊字母英文全称
来分别输入小写和大写希腊字母。
A B \Gamma \Delta E Z H \Theta
\(A B \Gamma \Delta E Z H \Theta\)
+I K \Lambda M N \Xi O \Pi
\(I K \Lambda M N \Xi O \Pi\)
+P \Sigma T \Upsilon \Phi X \Psi \Omega
\(P \Sigma T \Upsilon \Phi X \Psi \Omega\)
+\alpha \beta \gamma \delta \epsilon \zeta \eta \theta
\(\alpha \beta \gamma \delta \epsilon \zeta \eta \theta\)
+\iota \kappa \lambda \mu \nu \omicron \xi \pi
\(\iota \kappa \lambda \mu \nu \omicron \xi \pi\)
+\rho \sigma \tau \upsilon \phi \chi \psi \omega
\(\rho \sigma \tau \upsilon \phi \chi \psi \omega\)
+部分字母有变量专用形式,以 \var-
开头。
\varepsilon \digamma \varkappa \varpi
\(\varepsilon \digamma \varkappa \varpi\)
+\varrho \varsigma \vartheta \varphi
\(\varrho \varsigma \vartheta \varphi\)
+\aleph \beth \gimel \daleth
\(\aleph \beth \gimel \daleth\)
+Note
+该指南摘自 LaTeX公式手册 ,你可以点击链接来了解更多内容。
+Note
+本文提供了Markdown的基本撰写说明。因为主题设置的缘故可能会导致某些效果不生效,遇到此问题请前往 issues 进行反馈。
+你的内容标题应该从二级标题( ##
)开始
# 一级标题
+## 二级标题
+### 三级标题
+
我们只知道 地球 具有让人类生存的环境,还有 火星 ,也许还有 其它星球 。
我们只知道 **地球** 具有让人类生存的环境,还有 ~~火星~~ ,也许还有 *其它星球* 。
+
---
+***
+
你应该避免直接内嵌 HTML 代码。
+[link name](link url) 或者 <link url>
+
多翻译引擎
+多语言互译
+- 多翻译引擎
+
+ * 谷歌翻译
+ * 微软翻译
+ * 有道翻译
+ * 百度翻译
+ * 阿里翻译
+ * DeepL 翻译
+
+- 多语言互译
+
使用单引号 code
来表示行内代码,使用三引号来表示代码块。
code
+
并且对于代码块,你应该写上对应的语言。
+你应该避免内嵌 HTML 来插入图片。
+
+
下面是一段注释
+++这里是一段注释 (
+<blockquote></blockquote>
) +这是注释的第二行
# 这里是注释里面的代码段
+print("hello")
+
++注释
+++注释嵌套 +注释嵌套
+
下面是一段注释
+> 这里是一段注释 (`<blockquote></blockquote>`)
+> 这是注释的第二行
+
+# 这里是注释里面的代码段
+print("hello")
+
+> 注释
+>> 注释嵌套
+>> 注释嵌套
+
暂不支持 emoji
语法,但是可以直接从 emoji
表情大全拷贝表情到文档,比如:
+🍊 🍇 😀 😅 😇
++访问http://emojihomepage.com/以获取更多emoji
+
H2O, y = x2
+H~2~O, y = x^2^
+
我能干饭我自豪。1
+我能干饭我自豪。[^干饭人]
+
+[^干饭人]: 老子说道
+这会在文章末尾进行注解
+
Header 1 | +Header2 | +
---|---|
Cell 1 |
+Cell 2 link | +
Cell 3 | +Cell 4 | +
| Header 1 | *Header2* |
+| -------- | -------- |
+| `Cell 1` | [Cell 2](http://example.com) link |
+| Cell 3 | **Cell 4** |
+
- [x] 任务1
+- [x] 任务2
+- [ ] 任务3
+- [ ] 任务4
+
文档支持 LaTeX
,关于 LaTeX
,你可以访问 LaTeX公式手册 来获取帮助。
使用 mermaid 可以画很多类型的图表, 详细的语法和支持请看官网
+sequenceDiagram
+ Alice->>John: Hello John, how are you?
+ loop Healthcheck
+ John->>John: Fight against hypochondria
+ end
+ Note right of John: Rational thoughts!
+ John-->>Alice: Great!
+ John->>Bob: How about you?
+ Bob-->>John: Jolly good!
+
```mermaid
+ sequenceDiagram
+ Alice->>John: Hello John, how are you?
+ loop Healthcheck
+ John->>John: Fight against hypochondria
+ end
+ Note right of John: Rational thoughts!
+ John-->>Alice: Great!
+ John->>Bob: How about you?
+ Bob-->>John: Jolly good!
+ ```
+
老子说道 +这会在文章末尾进行注解 ↩
+对于 Pull Request,请遵守以下几点要求1:
+fix #xxxx
字段,其中 xxxx
代表 issue 的编号。对于 Pull Request 的标题,推荐使用如下格式书写:
+<修改类型>(<文件名>): <修改的内容> (<对应 issue 的编号>)
+
修改类型分为如下几类:
+feat
:用于添加内容的情况。fix
:用于修正现有内容错误的情况。refactor
:用于对一个页面进行重构(较大规模的更改)的情况。revert
:用于回退之前更改的情况。示例:
+fix(sepecification/specification): 修改代码注释使描述更清晰
fix: plugins/xxx 不在目录中 (#2)
feat(software/mathpix): official website
refactor(specification/template): 整理页面内容
修改自 OI-wiki: 如何参与 ↩
+朋友你好,如果你有一个很棒的工具希望和大家分享,但是你不知道怎么写一个markdown,这里提供了一个可以参考的模版
+我们希望提交的pr在简介部分描述这个工具的:
+我们希望提交的pr在安装部分描述:
+$clang --version
检查 clang
是否成功安装我们希望提交的pr在推荐理由部分描述:
+我们希望提交的pr在参考部分提供一些常用的参考,例如:
+RustSBI是RISC-V下可用的SBI固件实现,它拥有“独立包”和“原型设计系统”。 +RISC-V SBI是RISC-V下不可或缺的固件接口,它提供了足以操作系统使用的基本功能; +更多的功能性接口应当通过其它的工业标准实现。
+独立包是分别实现RustSBI的项目,每个不同的主板都拥有不同的仓库和解决方案。 +这些方案包括但不限于:
+ +这些解决方案的文档和下载链接都在各自的仓库中。
+RustSBI原型设计系统提供了从SBI到UEFI、LinuxBoot的完整解决方案, +它拥有一个图形化的编译界面,能在不同的主板上运行。
+为了编译原型设计系统,复制仓库后使用以下的命令:
+cargo termconfig
+
在图形界面配置完毕后,配置文件将保存到Xtask.toml
文件中,以供编译过程阅读。
接下来,我们可以选择仅编译或者编译并烧录。使用以下的命令编译:
+cargo make
+
或者,使用以下的命令直接编译和烧录到目标主板:
+cargo flash
+
RustSBI原型设计系统的链接:https://github.com/rustsbi/standalone
+ + + + + + + + +Wasm-bpf 是一个由 CO-RE(一次编写 – 到处运行) libbpf libbpf 驱动的 WebAssembly eBPF 库、工具链和运行时。它可以帮助您几乎不用修改地构建几乎所有的 eBPF 程序或用例到 Wasm 中,并在 Wasm 沙箱中跨平台运行。
+WebAssembly
(简称Wasm)是一种可执行代码的便携式二进制格式。代码在一个内存安全的沙盒环境中以接近本机速度执行,具有明确定义的资源限制和一个 API ,用于与嵌入式主机环境(例如代理)进行通信。
wasm-bpf
项目结合了 Wasm 和 eBPF 技术,提高了eBPF应用程序的性能和可编程性。它提供了一个库和工具链,用于将多种语言编写的 eBPF 应用编译成 Wasm,并提供运行时环境以在安全的沙箱中运行这些程序。
使用 wasm-bpf,用户可以动态加载和安全地执行用户自定义或社区贡献的 Wasm-eBPF 代码作为插件,例如在他们的网络相关软件产品,或可观测性平台中。这其中 eBPF 使得数据收集高效可扩展,同时 Wasm 也允许对这些数据进行高级处理和分析。
+此外,它使开发人员能够使用熟悉的语言,如 C/C ++,Rust,Go 和其他 30 多种能编译到 Wasm 的编程语言编写 eBPF 程序,并轻松地在不同的Linux发行版中部署它们。此外,利用 Wasm 的生态和工具链,云提供商可以利用 wasm-bpf 为其客户提供安全且高性能的环境来开发和部署 eBPF 应用程序。
+通用性
: 提供了从 eBPF 到 Wasm 的大多数能力,包括从环形缓冲区
或 perf 缓冲区
进行轮询,使用 maps
在内核 eBPF 和用户空间 Wasm 之间进行双向通信,动态加载、挂载到 hook 执行等。支持大量的 eBPF 程序类型和 maps
类型。高性能
: 对于复杂数据类型没有序列化开销,使用共享内存来避免主机和 Wasm 之间的拷贝开销。易于使用
: 提供类似于 libbpf-bootstrap 的开发体验,自动生成 Wasm-eBPF 骨架头文件和类型定义以进行绑定。可以使用 C/C++
、Rust
、Go
编写 eBPF 程序并编译成 Wasm。超轻量级
: 最小运行时的二进制大小仅为 1.5 MB。编译后的 Wasm 模块大小仅为 ~90K。使用相同的工具链,您可以轻松地在任何语言和平台上构建自己的 Wasm-eBPF 运行时!请参阅 examples 目录中以 C、Rust、Go 编写的编译为 Wasm 的 eBPF 程序示例,覆盖了从跟踪、网络到安全的各种用例。
+有关使用 OCI 镜像分发、动态加载、运行 Wasm-eBPF 程序的工具,请参阅 eunomia-bpf 仓库。
+请查看 examples 目录中用 C、Rust、Go 编写的编译成 WASM 的 eBPF 程序示例。
+tracing examples
security example
+- lsm and go-lsm: 检查删除目录的权限
networking example
+- sockfilter: 监视数据包并处理 __sk_buff
+- sockops: 在 syn 数据包中添加 pid 选项。
runqlat 的一个示例输出:
+$ sudo ./wasm-bpf runqlat.wasm 1
+Tracing run queue latency... Hit Ctrl-C to end.
+
+ usecs : count distribution
+ 0 -> 1 : 72 |***************************** |
+ 2 -> 3 : 93 |************************************* |
+ 4 -> 7 : 98 |****************************************|
+ 8 -> 15 : 96 |*************************************** |
+ 16 -> 31 : 38 |*************** |
+ 32 -> 63 : 4 |* |
+ 64 -> 127 : 5 |** |
+ 128 -> 255 : 6 |** |
+ 256 -> 511 : 0 | |
+ 512 -> 1023 : 0 | |
+ 1024 -> 2047 : 0 | |
+ 2048 -> 4095 : 1 | |
+
请参考 docs/build.md。
+wasm-bpf 运行时需要两部分:主机端(在 Wasm 运行时之外)和 Wasm 客户端端(在 Wasm 运行时之内)。
+libbpf-wasm
的头文件库,为 Wasm 客户端 C/C++ 代码提供 libbpf API。bpftool
的工具,用于生成 Wasm-eBPF skeleton 头文件和 C 结构定义,以便在主机和 Wasm 客户端之间传递数据而无需序列化。有关详细的编译过程,请参阅 examples/bootstrap/README.md。下图显示了 eBPF 和 Wasm 运行时之间的整体交互过程:
+Wasm 模块可以同时加载和控制多个 eBPF 程序, 并且能够调用或者控制(通过组件模型)其他语言编写的 Wasm 模块来处理数据。
+我们也提了一个 WASI 提案 wasi-bpf。
+MIT
+ + + + + + + + +Zineland 是一个简单有效的杂志构建框架,能够快速通过 Markdown 文档生成杂志风格的静态网页
+ cargo install zine
+
brew install zineland/tap/zine
+
在时间的长河中,我们发现,重复繁琐的工作带给大家的只有时间和精力的消耗。的确在我们的不断思考和进步中,一个个优秀的工具出现在我们的眼前。但随之而来的是,工具种类和数量的飞速发展,我们难以根据具体需求,快速,简易地上手一款工具。相反,“百度”,“谷歌”成为了我们老生常谈的话语。
+在一个个链接和回答中不断尝试。有的是生涩的英文文档,有的是寥寥数语,这无疑增加了我们的使用成本。所以 ToolDiy 的初衷就是为了解决这个问题,我们想借助开源社区的环境,不断收集和提炼各行各业的工具(毕竟适合你的才是最好的)。 ToolDiy 将从客观的角度,以用户的视角出发,推荐分析各类工具,而不仅仅局限于固定的方向。
+很多时候我们在开发过程中会遇到很多工具的环境配置问题,我们不得不花费大量时间去思考和学习使用,很多时候这些工作本身就只能够锻炼你对配置环境的耐心,我们想让大家专注工具本身,于是我们想维护一些工具配置和构建的自动化脚本或者是docker环境方便使用者,当然我们在书写时候留下的构建脚本也可以提供给使用者学习。一个能够开箱即用的工具想想都令人兴奋,让我们一起建设他吧!
+只要能够给大家带来帮助和更好的体验,这便是 ToolDiy 存在的意义。
+接下来,让我们一起使用它吧!
+本项目的初衷是提供维护一个工具说明的仓库和维基,本身就是一个降低使用门槛方便大家的项目,我们的原则是不限于任何特定的学科和领域,我们可以将所有自己认为有用的工具进行分享(注意做好入门介绍,符合项目初衷),在尊重工具生产者劳动的前提下都可以分享,因此我们不允许大家分享盗版和破解工具,在规范的前提下我们欢迎各种各样的 PR ,有任何除开上诉的疑惑都可以提出 issue 或者联系仓库管理,在涉及付费内容的工具时我们鼓励分享也希望大家做好信息公开标注他的价格,本项目不会给任何工具广告,不会有特殊位置等广告行为一切以提交时间排版。我们同样欢迎各种改善本项目阅读体验的 PR 请求(包括但不局限于添加一个换行增加阅读体验,增加项目 logo ,中英文校对等),_(:з)∠)_本项目还处于初期阶段,非常需要各位大佬的完善和纠错。
+如果你有已经写好的文章想要添加到这里,你可以通过下列方式:
+.en.md
结尾),最后提出 PR 以便进行合并。如果你不知道从何处下笔,可以首先参考写作模板。
+Note
+点击链接加入群聊 tooldiy
+
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
最近 LLM(大语言模型)实在火爆,出了不少开源模型,比如 Alpaca1、ChatGLM2、BELLE3 等等,让每个人都有机会运行和训练专属自己的 LLM,我也迫不及待了。
+但是,熟悉我的老读者朋友应该知道,虽然我是搞算法的,也发过几篇论文,但我是走的是贫穷科研的路线,一张显卡都没有。像 ChatGLM-6B 这种模型,在我的小破 Mac 上根本跑不起来。Alpaca 的 CPU 版本虽然能跑,但它中文水平实在太烂了。有没有什么模型不仅中文好,又可以不依赖显卡?RWKV4进入了我的视野。
+RWKV 是一种纯 RNN 的架构,能够进行语言建模5,目前最大参数规模已经做到了 14B6。目前的在线体验地址:
+Raven RWKV 7B - a Hugging Face Space by BlinkDL
+不过请注意,上面这个体验模型的微调语料英文占 99%,所以中文水平并不是最好的。作者 @PENG Bo 最近发布的 RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%
这个模型的中文微调语料占 50%,中文水平更好。以下我也会基于该模型进行操作。
首先,RWKV 的模型分为很多种,都发布在作者的 huggingface7 上:
+其中:
+我下载的是 RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth
8 , 即参数量为 7B 的对话模型,微调预料中 49% 是英文,50% 是中文。ctx4096 表示微调是的上下文长度。
这个模型有 14.8 GB,请务必确保自己电脑的可用硬盘空间在 40 GB 以上(因为后面要对这个模型进行转换和量化,需要占用更多的硬盘空间。)
+下载好的模型配合 ChatRWKV9这个仓库里的代码就可以跑了,但是它对 CPU 策略的支持最低只到 fp32i8,7B 模型需要 12 GB 内存才能跑起来,我用 16GB 内存的 Mac 试了一下,跑是跑起来了,但是非常慢。
+所以,这里需要介绍一下能够更充分利用 CPU 的方法:
+saharNooby/rwkv.cpp: INT4 and FP16 inference on CPU for RWKV language model (github.com)
+rwkv.cpp 可以将 RWKV 原始模型的参数转化为 float16,并量化到 int4,可以在 CPU 上更快地运行,也可以节省更多的内存。
+以下是操作步骤。
+需要安装 git(没有 git 的朋友,可能你要补的前置知识有点多,我建议自行搜索)
+git clone --recursive https://github.com/saharNooby/rwkv.cpp.git
+cd rwkv.cpp
+
rwkv.cpp 的开发者已经预编译了不同平台上的依赖库,可以在这里下载:https://github.com/saharNooby/rwkv.cpp/releases
+下载的时候请注意操作系统类型和支持的架构。由于作者没有预编译对 Mac m1 的 ARM64 架构的依赖库,所以我选择自行编译(需要安装 cmake,并在 shell 中移动到 rwkv.cpp 路径下):
+cmake -DBUILD_SHARED_LIBS=ON .
+cmake --build . --config Release
+
需要装 PyTorch
+我直接把下载好的模型放在了 rwkv.cpp 的路径下,然后执行以下命令:
+python rwkv/convert_pytorch_to_ggml.py ./RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth ./rwkv.cpp-7B.bin float16
+
其实就是让 python 运行 rwkv/convert_pytorch_to_ggml.py
这个转换模型的代码, ./RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth
是待转换的模型的路径, ./rwkv.cpp-7B.bin
是转换后的路径,float16 是要转换成什么类型的参数。
其实上面转换好的 ./rwkv.cpp-7B.bin
已经可以用了,但是它要占用 16GB 内存。为了减少内存占用,可以将 ./rwkv.cpp-7B.bin
量化为 int4,可以省一半内存,也就是只占 6GB 内存。只需要执行以下命令:
python rwkv/quantize.py ./rwkv.cpp-7B.bin ./rwkv.cpp-7B-Q4_1_O.bin 4
+
然后你就会得到一个大小只有 6GB 的模型了。
+同样,一行命令搞定:
+python rwkv/chat_with_bot.py ./rwkv.cpp-7B-Q4_1_0.bin
+
让我们看看效果,首先是内存占用,不到 6GB
+然后是问答和执行命令:
+效果还不错,不过最后莫名其妙又多说了一段话,可能是量化带来的精度损失?非量化版本的效果如下:
+希望开发者之后能对量化版本进行测评,让 rwkv 变得更好用。
+以上就是我在 Mac 上用 6GB 内存运行 7B 的中文语言模型 RWKV 的过程了,希望对读者朋友们有所帮助。
+参考
+https://github.com/antimatter15/alpaca.cpp ↩
+https://github.com/THUDM/ChatGLM-6B ↩
+https://github.com/LianjiaTech/BELLE ↩
+发布几个RWKV的Chat模型(包括英文和中文)7B/14B欢迎大家玩 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/618011122 ↩
+RWKV-v2-RNN 原理:超越 Transformer,实现 O(T) 的语言建模 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/514840332 ↩
+RWKV:用RNN达到Transformer性能,且支持并行模式和长程记忆,既快又省显存,已在14B参数规模检验 - PENG Bo的文章 - 知乎 https://zhuanlan.zhihu.com/p/599150009 ↩
+BlinkDL (BlinkDL) (huggingface.co) https://huggingface.co/BlinkDL ↩
+RWKV-4-Raven-7B-v9x-Eng49%-Chn50%-Other1%-20230418-ctx4096.pth https://huggingface.co/BlinkDL/rwkv-4-raven/blob/main/RWKV-4-Raven-7B-v9x-Eng49%25-Chn50%25-Other1%25-20230418-ctx4096.pth ↩
+https://github.com/BlinkDL/ChatRWKV ↩
+本文向大家介绍一款用于换源个工具帮助大家更快的更换所使用软件的源提高开发效率
+++git clone https://github.com/57307407/Source-changer.git
+
目前支持 maven 、 npm 、 python(pip)换源
+由于本工具使用 python 语言进行开发,使用前请先安装python环境
+++下载链接:https://www.python.org/
+
输入命令
+++python -V
+or
+python3 -V
+
出现python版本号即为安装完毕
+++python main.py / python3 main.py
+更换maven源时需要在命令前加sudo
+即: sudo python3 main.py
+
选择需换源的软件
+选择更换的镜像
+本文向大家介绍自己的windows环境如何部署该项目
+++注意:这里需要用到python环境,本人是
+python3.10
git clone https://github.com/cargo-youth/ToolDiy.git
+
下载链接:pip install mkdocs
+
本站主题是material,使用下面命令进行安装即可。 +
pip install mkdocs-material
+
pip install pymdown-extensions
+pip install mkdocs-awesome-pages-plugin
+
这里是个坑,我安装的时候,直接安装pip install i18n
不行,你需要专门安装mkdocs下的i18n,然后问的chatGPT,他给我提供的解决方案是pip install mkdocs-i18n-plugin
;可惜不对,最后在谷歌上找到下面命令,就对了。
+
pip install mkdocs-static-i18n
+
mkdocs serve
+
mkdocs build
+
code-server extensions
+安装 Docker Desktop,参见 Install Docker Desktop on Windows。
+运行 Docker Desktop,再打开 CMD 或者 PowerShell,执行
+docker pull jklincn/c-os
+
镜像成功拉取后,执行
+docker run -d --privileged -p 58888:8080 jklincn/c-os
+
这时使用浏览器打开 http://localhost:58888 即可启动开发环境。
+后续可以在 Docker Desktop 界面的 Containers 中控制已创建容器的暂停与开启。
++++
+- +
+主机映射端口 58888 可随意更换。服务端口 8080 可以通过修改 Dockerfile 更换。
+- +
+如果镜像拉取缓慢,可以点击 Docker Desktop 界面右上角齿轮打开设置,在 Docker Engine 配置文件中添加国内源,再点击
+Apply & restart
重启 Docker,再次尝试拉取。+"registry-mirrors": [ + "http://hub-mirror.c.163.com", + "https://docker.mirrors.ustc.edu.cn" +] +
此处给出镜像的构建脚本,供有需求的同学参考与修改
+FROM ubuntu:22.04
+SHELL ["/bin/bash", "-c"]
+
+# 安装必要依赖与开发工具
+RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
+ apt-get update && apt-get install -y \
+ gcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \
+ git wget python3 vim file curl \
+ autoconf automake autotools-dev libmpc-dev libmpfr-dev libgmp-dev \
+ gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+ zlib1g-dev libexpat-dev \
+ ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \
+ && rm -rf /var/lib/apt/lists/*
+
+# 安装 QEMU
+ARG QEMU_VERSION=7.0.0
+RUN cd /tmp && \
+ wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \
+ tar xf qemu-${QEMU_VERSION}.tar.xz && \
+ cd qemu-${QEMU_VERSION} && \
+ ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \
+ make -j && \
+ make install && \
+ cd .. && \
+ rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz
+
+# 安装 code-server 和扩展
+ARG CODE_VERSION=4.10.1
+RUN cd /usr/local/ && \
+ wget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ tar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ ln -s /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \
+ rm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ wget https://github.com/microsoft/vscode-cpptools/releases/download/v1.14.4/cpptools-linux.vsix && \
+ code --install-extension cpptools-linux.vsix && \
+ rm cpptools-linux.vsix && \
+ wget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+ code --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+ rm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix
+
+EXPOSE 8080/tcp
+CMD ["code", "--auth", "none", "--bind-addr", "0.0.0.0:8080"]
+
code-server extensions
+安装 Docker Desktop,参见 Install Docker Desktop on Windows。
+运行 Docker Desktop,再打开 CMD 或者 PowerShell,执行
+docker pull jklincn/rust-os
+
镜像成功拉取后,执行
+docker run -d --privileged -p 58888:8080 jklincn/rust-os
+
这时使用浏览器打开 http://localhost:58888 即可启动开发环境。
+后续可以在 Docker Desktop 界面的 Containers 中控制已创建容器的暂停与开启。
++++
+- +
+主机映射端口 58888 可随意更换。服务端口 8080 可以通过修改 Dockerfile 更换
+- +
+如果镜像拉取缓慢,可以点击 Docker Desktop 界面右上角齿轮打开设置,在 Docker Engine 配置文件中添加国内源,再点击
+Apply & restart
重启 Docker,再次尝试拉取。+"registry-mirrors": [ + "http://hub-mirror.c.163.com", + "https://docker.mirrors.ustc.edu.cn" +] +
此处给出镜像的构建脚本,供有需求的同学参考与修改
+FROM ubuntu:22.04
+SHELL ["/bin/bash", "-c"]
+
+# 安装必要依赖与开发工具
+RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
+ apt-get update && apt-get install -y \
+ gcc-riscv64-unknown-elf gdb-multiarch dosfstools cmake \
+ git wget python3 vim file curl \
+ autoconf automake autotools-dev libmpc-dev libmpfr-dev libgmp-dev \
+ gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+ zlib1g-dev libexpat-dev \
+ ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \
+ && rm -rf /var/lib/apt/lists/*
+
+# 安装 QEMU
+ARG QEMU_VERSION=7.0.0
+RUN cd /tmp && \
+ wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \
+ tar xf qemu-${QEMU_VERSION}.tar.xz && \
+ cd qemu-${QEMU_VERSION} && \
+ ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \
+ make -j && \
+ make install && \
+ cd .. && \
+ rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz
+
+# 安装 code-server 和扩展
+ARG CODE_VERSION=4.10.1
+RUN cd /usr/local/ && \
+ wget https://github.com/coder/code-server/releases/download/v${CODE_VERSION}/code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ tar xf code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ ln -s /usr/local/code-server-${CODE_VERSION}-linux-amd64/bin/code-server /usr/bin/code && \
+ rm code-server-${CODE_VERSION}-linux-amd64.tar.gz && \
+ wget https://openvsxorg.blob.core.windows.net/resources/rust-lang/rust-analyzer/linux-x64/0.3.1435/rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+ code --install-extension rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+ rm rust-lang.rust-analyzer-0.3.1435@linux-x64.vsix && \
+ wget https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.75.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+ code --install-extension MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix && \
+ rm MS-CEINTL.vscode-language-pack-zh-hans-1.75.0.vsix
+
+WORKDIR /root
+# 安装 rust
+ARG RUST_VERSION=nightly
+ENV RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
+ENV RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
+RUN mkdir .cargo && \
+ echo '[source.crates-io]' >> .cargo/config && \
+ echo 'registry = "https://github.com/rust-lang/crates.io-index"' >> .cargo/config && \
+ echo 'replace-with = "ustc"' >> .cargo/config && \
+ echo '[source.ustc]' >> .cargo/config && \
+ echo 'registry = "git://mirrors.ustc.edu.cn/crates.io-index"' >> .cargo/config && \
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup-init && \
+ chmod +x rustup-init && \
+ ./rustup-init -y --default-toolchain ${RUST_VERSION} --target riscv64imac-unknown-none-elf && \
+ rm rustup-init && \
+ source $HOME/.cargo/env && \
+ cargo install cargo-binutils && \
+ rustup component add llvm-tools-preview && \
+ rustup component add rust-src
+
+EXPOSE 8080/tcp
+CMD ["code", "--auth", "none", "--bind-addr", "0.0.0.0:8080"]
+
# (ubuntu) 安装QEMU7.0依赖包
+sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \
+ gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+ zlib1g-dev libexpat-dev pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \
+ git tmux python3 python3-pip ninja-build
+# 在开发目录执行安装
+mkdir dev
+pushd dev
+wget https://download.qemu.org/qemu-7.0.0.tar.xz
+tar -xf qemu-7.0.0.tar.xz
+cd qemu-7.0.0
+./configure --target-list=x86_64-softmmu,aarch64-softmmu,riscv64-softmmu --enable-debug
+make -j$(nproc)
+make install
+popd
+# 配置环境变量
+vi ~/.bashrc
+export PATH=$PATH:/path/to/qemu-7.0.0/build
+# 配置后更新系统路径
+source ~/.bashrc
+# 检测qemu版本(以riscv64 为例上诉配置已将x86_64 aarch64 riscv64安装好均可以检测版本)
+qemu-system-riscv64 --version
+# 配置rust环境
+curl https://sh.rustup.rs -sSf | sh
+# 配置环境变量
+source $HOME/.cargo/env
+# 检测版本
+rustc --version
+# rust相关软件包安装
+rustup target add riscv64gc-unknown-none-elf
+cargo install cargo-binutils
+rustup component add llvm-tools-preview
+rustup component add rust-src
+
# centos 依赖安装
+sudo yum install autoconf automake libmpc-devel mpfr-devel gmp-devel gawk bison flex \
+ texinfo patchutils gcc gcc-c++ zlib-devel expat-devel git
+# gcc版本过低导致的qemu编译失败(也可以直接官网更高版本安装)
+yum install centos-release-scl
+scl enable devtoolset-8 bash
+# 查看gcc版本
+gcc -v
+
vi ~/.cargo/config
+[source.crates-io]
+registry = "https://github.com/rust-lang/crates.io-index"
+replace-with = 'ustc'
+[source.ustc]
+registry = "git://mirrors.ustc.edu.cn/crates.io-index"
+
apt list --installed
+apt list --all-versions <package-name>:列出指定软件包的所有版本。
+apt list --upgradable | grep <search-term>:列出包含搜索词的可更新软件包。
+apt list --verbose:显示更详细的输出信息。
+
+apt edit-sources
+
+sudo apt build-dep package #安装相关的编译环境,这真是个神技能,有了它,编译安装都变得索然无味了
+sudo apt --purge autoremove
+apt-get clean && sudo apt-get autoclean #清理无用的包
+
+aptitude
+apt-add-repository [options] repository #修改软件源命令 (software-properties-common)
+
apt search package #搜索包
+apt show package #获取包的相关信息,如说明、大小、版本等
+apt depends package #了解使用依赖
+apt rdepends package #查看该包被哪些包依赖
+apt-cache pkgnames #执行pkgnames子命令列出当前所有可用的软件包
+apt policy package #使用policy命令显示软件包的安装状态和版本信息。
+
+sudo apt install package #安装包
+sudo apt install package=version #安装指定版本的包
+sudo apt install package --reinstall #重新安装包
+sudo apt -f install #修复安装, "-f = --fix-missing"
+sudo apt remove package #删除包
+sudo apt purge package #删除包,包括删除配置文件等
+sudo apt autoremove #自动卸载所有未使用的软件包
+
+sudo apt source package #下载该包的源代码
+sudo apt update #更新apt软件源信息
+sudo apt upgrade #更新已安装的包
+sudo apt dist-upgrade #升级系统
+sudo apt dselect-upgrade #使用dselect升级
+sudo apt build-dep package #安装相关的编译环境
+sudo apt clean && sudo apt autoclean #清理无用的包
+sudo apt clean #清理已下载的软件包,实际上是清楚/var/cache/apt/archives目录中的软件包
+sudo apt autoclean #删除已经卸载的软件包备份
+sudo apt-get check #检查是否有损坏的依赖
+
sudo dpkg -i <package.deb> #安装包
+sudo dpkg -r <package.deb> #删除包
+sudo dpkg -p <package.deb> #彻底删除包(包括配置文件)
+dpkg -l #列出当前已安装的包
+
++本文介绍了 Chocolatey 的安装与使用过程。这篇文章不是为普通用户编写的,而是给需要统一开发环境的开发人员写的
+为什么要用 Chocolatey
+如果使用过 Linux 一定熟悉一行代码进行软件的搜索,安装,更新,卸载等所有操作。而 Windows 中的也有包管理器 Chocolatey 。虽然没有 Linux 里的包管理器那么强大,但让 Windows 安装软件方便了很多。
+
方法一:以管理员身份打开 cmd.exe (很重要),执行以下代码 +
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
+
方法二:以管理员身份打开 powershell.exe ,执行以下代码
+Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
+
在有的时候,因为电脑安装防火墙的原因,可能会导致前两个方法出现问题,但是方法三不存在此问题,最好用 powershell.exe 来执行 install.psl 脚本,可以看到安装的完整过程。
+Chocolatey 运行需要的环境: +- Windows 7+ / Windows Server 2003+ +- PowerShell v2+ +- .NET Framework 4+ (不用安装,安装脚本时会自动安装)
+choco install -y git
+choco install -y python
+choco install -y chromium
+cinst -y nodejs.install
+...
+
choco 和 cinst 都是安装命令, -y 避免对协议的二次确认,可以在官网 https://chocolatey.org/packages 查找确认自己要安装的包。
+choco upgrade git
choco uninstall git
choco install dev-package.config
+dev-package.config:
+<?xml version="1.0" encoding="utf-8"?>
+ <packages>
+ <package id="jdk8" />
+ <package id="googlechrome" version="71.0.3578.98" />
+ <package id="vscode" />
+ <package id="7zip" />
+ </packages>
+
文件名称随意,但是扩展名必须是 .config 。通过 .config 的方式,就可以配置一个团队统一的开发环境,软件和版本都可以统一。这样可以为开发带来很多好处,避免由于开发环境不一样引起的各种不同错误。 +通过传统方式安装软件,如果配置了环境变量,例如 JAVA_HOME , PATH 等等,都需要重启命令行工具,甚至要等一会才能生效。 Chocolatey 提供了一个 refreshenv 命令,可以快速生效环境变量。
+卸载 Chocolatey 只需要删除它安装的文件夹,并删除对应的环境变量即可。对于使用 Chocolatey 安装的其它软件,如果也需要卸载的话,需要先手动卸载。
+Chocolatey 更注重的是整个团队的软件配置统一,统一用某一个软件,统一用某一个版本,统一安装配置(包括安装路径)。在实际开发中,太多次因为安装路径引起问题,例如路径里有空格或中文等等。最好就用默认安装路径。
+ + + + + + + + +由于 Yum 中许多长期存在的问题仍未得到解决,因此 Yum 包管理器已被 DNF 包管理器取代。这些问题包括性能差、内存占用过多、依赖解析速度变慢等。
+DNF 是一款 Linux 软件包管理工具,用于管理 RPM 软件包。 DNF 可以查询软件包信息,从指定软件库获取软件包,自动处理依赖关系以安装或卸载软件包,以及更新系统到最新可用版本。
+Linuxbrew(Mac OS 的 Homebrew 分支,支持mac和linux,用法完全相同)
+详情页: https://ostechnix.com/linuxbrew-common-package-manager-linux-mac-os-x/
+搜索可用的软件包: https://sitemap.filecroco.com/a/1.html
+在 Linux 上安装和使用 Homebrew 包管理器 | Linux 中国 - 知乎 (zhihu.com)
+ + + + + + + + +++scoop 必要组件: 7zip git innounp lessmsi dark sudo aria2
+main : https://github.com/ScoopInstaller/Scoop
+
# 设置自定义安装路径:D:\Software\Scoop
+$env:SCOOP='D:\Software\Scoop';[environment]::setEnvironmentVariable('SCOOP',$env:SCOOP,'User')
+
+# 允许执行本地脚本
+set-executionpolicy remotesigned -scope currentuser
+
+# 从 github 下载并安装 scoop
+iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
+
scoop config SCOOP_REPO <URL>
软件仓库 bucket 源:软件源使用 git 版本管理,因此可以使用修改远程仓库的地址修改源地址加快速度。
+cd $env:SCOOP\buckets\Main
+git remote set-url origin <URL>
+
+cd $env:SCOOP\buckets\Extras
+git remote set-url origin <URL>
+
cd $env:SCOOP\buckets\Main 这是一个 git 管理的文件夹
+ git remote set-url origin https://hub.fastgit.org/ScoopInstaller/Main
+
aria2-enabled (默认值: true)
+aria2-retry-wait (默认值: 2)
+aria2-split (默认值: 5)
+aria2-max-connection-per-server (默认值: 5)
+aria2-min-split-size (默认值: 5M)
+
#scoop bucket remove main
+scoop bucket add main 'https://github.com/ScoopInstaller/Main'
+scoop bucket add extras 'https://github.com/ScoopInstaller/scoop-extras'
+scoop bucket add versions 'https://github.com/ScoopInstaller/Versions'
+scoop bucket add jetbrains 'https://github.com/Ash258/Scoop-JetBrains'
+scoop bucket add java 'https://github.com/ScoopInstaller/Java'
+scoop bucket add dorado https://github.com/chawyehsu/dorado
+scoop bucket add scoopet https://github.com/ivaquero/scoopet
+
scoop update
scoop export >> xxx.txt
scoop bucket known
scoop bucket help
scoop bucket add xxxbucket
scoop bucket rm xxx 仓库
常用命令说明
+alias Manage scoop aliases # 管理指令的替身
+bucket Manage Scoop buckets # 管理软件仓库
+cache Show or clear the download cache # 查看与管理缓存
+checkup Check for potential problems # 做个体检
+cleanup Cleanup apps by removing old versions # 清理缓存与旧版本软件包
+config Get or set configuration values # 配置 Scoop
+create Create a custom app manifest # 创建自定义软件包
+depends List dependencies for an app # 查看依赖
+export Exports (an importable) list of installed apps # 导出软件包列表
+help Show help for a command # 显示帮助指令
+hold Hold an app to disable updates # 禁止软件包更新
+home Opens the app homepage # 打开软件包主页
+info Display information about an app # 显示软件包信息
+install Install apps # 安装软件包的指令
+list List installed apps # 列出所有已安装软件包
+prefix Returns the path to the specified app # 查看软件包路径
+reset Reset an app to resolve conflicts # 恢复软件包版本
+search Search available apps # 搜索软件包
+status Show status and check for new app versions # 查看软件包更新状态
+unhold Unhold an app to enable updates # 启动软件包更新
+uninstall Uninstall an app # 卸载软件包的指令
+update Update apps, or Scoop itself # 更新软件包
+virustotal Look for app hash on virustotal.com # 查看哈希值
+which Locate a shim/executable (similar to 'which' on Linux) # 查看可执行程序路径
+
scoop uninstall scoop
:这将卸载 Scoop 和所有与 Scoop 一起安装的程序!
The scoop 配置文件保存在 ~/.config/scoop/config.json
+buckets 源配置文件保存在 SCOOP\apps\scoop\current\buckets.json
{
+ "main": "https://github.com/ScoopInstaller/Main",
+ "extras": "https://github.com/ScoopInstaller/Extras"
+}
+
链接: https://blog.csdn.net/weixin_39986178/article/details/110900876
+相比于 Chocolatey , Scoop 则更专注于开源的命令行工具,使用 Scoop 安装的应用程序通常称为"便携式"应用程序,需要的权限更少,对系统产生的副作用也更少,所以我这里选择了使用 Scoop。 +注意:对于像 VirtualBox、Docker for Windows ,输入法等这些需要高权限的软件还是通过在官网下载安装包进行安装。
+ + + + + + + + +WinGet ( Windows 程序包管理器: Windows Package Manager )是微软为 win10 开发的一款开源的软件包管理器,于 2020 年 5 月的 Microsoft Build 开发者大会上首宣。
+前提:Windows 10 1709 及以上版本 +当前 WinGet 支持的安装程序类型尚不多,除了 EXE、 MSIX 、 MSI 三种之外,还能够在自定义配置后下载部分微软应用商店的程序。
+你可以在 Github Release 下载 .appxbundle 格式的文件,双击打开并运行。
+如果出现「此电脑不支持打开该类型文件」的提示,则可在 Win + I
进入设置 -> 更新和安全 -> 开发者选项 -> 打开开发人员模式。
输入 winget 可以查看简略帮助文档;输入 winget -v 查看版本信息
+显示简略帮助文档: winget -?(-?可选);查看特定命令的详细帮助文档: winget [] -?,如 winget install -?显示软件详细信息: winget show 搜索软件: winget search 安装软件:winget install
+是的,如你所见, WinGet 并没有自动开启卸载、升级等功能,这也是其在发布之后很长时间不温不火的重要原因。
+但是不要着急,截止到 2021/03/25 发布的最新预览版 v0.2.10771 , WinGet 实验性功能(需要用户自启)的数量已经增加到了八个,其中就包括 uninstall 、 upgrade 、 list 等重要功能,以及支持安装 Microsoft Store 上的应用程序!
+如果想要开启实验功能,可以在终端输入 winget settiings,打开 WinGet 配置文件 settings.json 增加以下内容:
+"experimentalFeatures": { "uninstall": true, "upgrade": true, "list": true, "experimentalMSStore": true},
+如果想要更改 winget 显示的进度条视觉效果,可以在 setting.json 里增加: +"visual": { "progressBar": "accent"},# 三种样式可选:accent(默认值)、 retro、 rainbow
+winget list > winget.txt 同样支持一键导出软件列表,方便备份和换机重装。
+实验功能开启"experimentalMSStore": true之后,winget 可以下载 MStore 的软件了(不过目前支持的并不多)。
+winget source list 查看软件源列表,发现除了 winget 源之外,MSStore 源已经添加上了。部分商店内软件可以正常下载安装了。
+winget 可以卸载 winget list 显示出的所有软件。包括电脑上的大多数软件,如 Windows 系统自带的、手动安装的、 Chocolatey 安装的部分等。唯一不足的是,卸载时会被弹出的卸载窗口打断,降低了自动化的一致性。
+winget 可以卸载多种类型的软件程序
+ + + + + + + + +openSUSE 是一个独立的 Linux 发行版分支,使用 RPM 作为分发的软件包格式,采用 zypper 作为包管理器,同时兼容多种计算机硬件。 openSUSE 有两个正式的发行版: Leap 和 Tumbleweed 。
+OpenSUSE 是一个一直被低估的多功能 Linux 操作系统
+ + + + + + + + +Manjaro 换源
+sudo pacman-mirrors -i -c China -m rank
+sudo pacman -Syy
+
命令 解释
+pacman -Syu 对整个系统进行更新(常用)
+pacman -Syy 强制更新
+pacman -Syudd 使用 -dd跳过所有检测
+
命令 解释
+pacman -Ss keyword 在仓库中搜索含关键字的包(常用)pacman -Ss '^fcitx-'
+pacman -Qs keyword 搜索已安装的包(常用)pacman -Qs '^fcitx-'
+pacman -Qi package_name 查询本地安装包的详细信息
+pacman -Ql package_name 列出该包的文件
+pacman -Fs keyword 按文件名查找软件库
+pacman -Si package_name 显示远程软件包的详尽的信息
+pacman -Qii package_name 使用两个 -i 将同时显示备份文件和修改状态
+pacman -Ql package_name 要获取已安装软件包所包含文件的列表
+pacman -Fl package_name 查询远程库中软件包包含的文件
+pacman -Qk package_name 检查软件包安装的文件是否都存在
+pacman -Fo /path/to/file_name 查询文件属于远程数据库中的哪个软件包
+pacman -Qdt 要罗列所有不再作为依赖的软件包(孤立 orphans )
+pacman -Qet 要罗列所有明确安装而且不被其它包依赖的软件包
+pactree package_name 要显示软件包的依赖树
+whoneeds package_name 检查一个安装的软件包被那些包依赖pkgtoolsAUR中的whoneeds
+pactree -r package_name 检查一个安装的软件包被那些包依赖
+
命令 解释
+pacman -S package_name 执行 pacman -S firefox 将安装 Firefox(常用)
+pacman -Sy package_name 将在同步包数据库后再执行安装。
+pacman -Sv package_name 在显示一些操作信息后执行安装。
+pacman -U local_package_name 安装本地包,其扩展名为pkg.tar.gz或pkg.tar.xz
+pacman -U url 安装一个远程包(不在 pacman 配置的源里面)
+
命令 解释
+pacman -R package_name 该命令将只删除包,保留其全部已经安装的依赖关系
+pacman -Rs package_name 在删除包的同时,删除其所有没有被其他已安装软件包使用的依赖关系(常用)
+pacman -Rsc package_name 在删除包的同时,删除所有依赖这个软件包的程序
+pacman -Rd package_name 在删除包时不检查依赖
+
pacman -Sw package_name 只下载包,不安装。
+pacman -Sc 清理未安装的包文件(常用)包文件位于 /var/cache/pacman/pkg/ 目录
+pacman -Scc 清理所有的缓存文件(常用)
+
大多数 Linux 发行版都是来自国外,自然官方仓库地址也在国外,所以一般情况下安装完 Linux 发行版之后做的第一件事就是切换源为国内的源。源的切换操作,大部分发行版也都支持 GUI 切换,这里只列出在命令行下如何擦操作
+sudo pacman-mirrors --country China
sudo pacman-mirrors --interactive --default
sudo pacman -Syyu# 软件源更新完成之后进行系统软件更新操作
sudo pacman-mirrors -l
参考翻译自: https://wiki.manjaro.org/index.php?title=Use_pacman-mirrors_to_Set_the_Fastest_Download_Server
+sudo pacman -Syyu
sudo pacman -Ss [software package name]
sudo pacman -Qs [software package name]
+sudo pacman -Qi [software package name]
# 附带详细信息
+sudo pacman -Qii [software package name]
# 附带更加详细的包信息
+sudo pacman -Ql
# 列出所有安装的软件包
sudo pactree [software package name]
sudo pacman -Qdt
sudo pacman -Rs $(pacman -Qdtq)
sudo pacman -Syu [software package name]
# 从软件仓库安装
+yay -S [software package name]
# Packages from the AUR
+sudo pacman -U [/package_path/][software package name.pkg.tar.xz]
# 从本地安装
pacman -U http://www.examplepackage/repo/examplepkg.tar.xz
# 从网络安装【非官方仓库】
sudo pacman -R [software package name]
+sudo pacman -Rs [software package name]
# 同时删除依赖
+sudo pacman -Rns [software package name]
# 删除软件及其依赖,还有pacman生成的配置文件,即更彻底的删除
sudo pacman -Sc
+sudo pacman -Scc
# 更彻底的清理
关于 pacman 常用就这些了,更多请使用 man pacman OR pacman -h 去查看 +参考翻译自: https://wiki.manjaro.org/index.php?title=Pacman_Overview +From < https://csdnimg.cn/release/phoenix/template/new_img/articleReadEyes.png>
+ + + + + + + + +GitBucket +是一个非常好的免费开源,易部署的开源Git平台,同时拥有诸多优势,虽然也有弊端。
+优点
+完全开源,没有任何限制;
+运行在JVM平台上,非常容易部署;
+类似于GitHub的界面,操作容易;
+丰富的插件,使得扩展非常容易;
+提供了大量兼容GitHub的API;
+缺点
+有点残废的权限管理(权限没有依照公开,私有库区分);
+开发语言为Scala,对于非Scala用户自己写插件有一定门槛;
+由于作者暂未完成平台升级,暂时无法部署在除Tomcat之外的Servlet容器。
+下载 Release + 里面的war到你的服务器;
+java -jar gitbucket.war
启动。(笔者用的是JDK17);
(可选)将启动端口反向代理到子域名。
+ChatGPT是一种基于自然语言处理技术的人工智能聊天机器人,使用GPT(Generative Pre-trained Transformer)技术生成人类语言响应。
+功能:
+配置方法:
+FlyDav 是一个轻量级的开源 webdav 服务器
+优点
+缺点
+最简部署:
+./flydav -H 0.0.0.0
来启动服务器。然后你要输入默认用户 flydav
的密码。http://YOUR_IP:7086/webdav
。完整部署可参阅文档。
+ + + + + + + + +本文介绍使用new bing和chatgpt搞科研的具体方法,视频教程可参看bilibili使用说明
+关于如何正确使用new bing,如何不转到国内特供版。不是本节的内容
+new bing(消化以及输出) --> chatgpt(组织语言)--> 划水学生(复制粘贴)
+因为:new bing被阉割了,输出和输入文字都比chatgpt限制了太多。但是new bing 可以联网,可以标注文献来源。
+使用edge甄别文献,但不去阅读。因为翻译很慢。(看的话可以结合wps)
+阅读左边的论文,告诉我他讲了什么内容。
+阅读左边的论文,细致地告诉我他每一小节都讲了什么内容。
+我希望你阅读英文文献 :【A Survey of Surface Reconstruction from Point Clouds】,分别介绍XXXX的【(基本原理)、分类、效果、发展趋势、(优点和缺点、应用范围)】。 最后对二者比较,并通过表格,最后证明XXXX结论。我希望你输出的文字为中文,总体内容要超过500字。
+如果不用以上ai写的文字,纯粹自己写。
+写出来效果可能不太行,让ai利用书面语言润色。这里可以上网搜一些相关的prompt
+请用写论文的中文书面语改写或者丰富以下段落,让其更有逻辑,重点突出:
+请用写论文的中文书面语丰富以下段落,让其用词更准确,内容更丰富:
+不要陷入无意义的ai玩耍
+不要登录cn的bing,不然之后都会记住。只能重新清除cookie。
+MinIO +是一个提供开源部署方案的多级云对象存储(S3)方案。
+优点
+提供许可证为AGPL v3的开源许可证的版本,无任何容量,带宽限制;
+兼容现有AWS S3的SDK,API等;
+非常完善的文档,活跃的社区;
+部署相对简单;
+缺点
+没有任何中文文档;
+非付费版软件更新周期较短,需要自行更新;
+官方提供了非常详尽,多种极为容易的安装方式,这里不再赘述。
+一定要到官方的文档去确认你是不是有参数没有设定,是不是使用了独立的卷(最少是独立的文件夹)。
+ + + + + + + + +Overleaf 是一个在线 \(\LaTeX\) 渲染网站。 \(\LaTeX\) 环境的配置比较麻烦(尤其是在 Windows 环境下),对于新手也不够友好,而 overleaf 是一个很好的替代。只需要选择一个好看的模版,写 10 页以内的作业或者小论文将会十分方便,同时 Overleaf 也提供了基本的团队协作功能,可以通过链接或邀请的方式实现多人共同编辑。 Overleaf 免费版有最大编译时长和一些功能的限制,在完成一些比较复杂的项目时,可以考虑付费获得更多的功能。
+\(\LaTeX\) 是一种「非所见即所得」的排版系统,用户需要输入特定的代码,保存在后缀为 .tex 的文件中,通过编译得到所需的 pdf 文件。 \(\LaTeX\) 优秀的大型文档排版能力和数学公式渲染能力是其能够广泛应用的原因之一。系统学习 \(\LaTeX\) 需要一定的时间,详细了解可以参阅托管在 CTAN 的中译版介绍 lshort-zh-cn。
+特点:
+本文为你推荐适用于 Android Studio 的插件,能够极大的改善你的开发体验。
+该插件对图标进行了优化以改善你的界面美观程度。
+适用于 JetBrains IDE 的 Material 主题,拥有适用于白天和黑夜的多个主题,让界面更加美观。
+JSON作为轻量级资料交换格式。在开发中经常被使用,其中一个需求就是将 Json 转换为对应的 Bean 对象。下面主要推荐两个插件:
+能将Json 转换为对应的 Java Bean
+JSON To Kotlin Class (JsonToKotlinClass)
+能将Json 转换为对应的 Kotlin Bean
+Translation 插件极大的方便了英语基础不好的开发者进行开发。其具有以下特性:
+多翻译引擎
+多语言互译
+本文希望抛砖引玉,鼓励大家提出更多方便的浏览器插件。
+官网: https://www.tampermonkey.net/
+很方便的脚本管理器,可以安装一些扩展商店里没有的小脚本。
+增强浏览器阅读体验,提供淡化内容无关元素以增加专注的聚焦模式和完全纯净的阅读模式;可以导出网页为 markdown 等多种格式到本地,或授权后导入 notion 、onenote 等笔记应用,方便存档和稍后阅读。官方插件中心还有许多相关增强,但默认模式体验也相当舒适。
+官网: https://www.zotero.org/download/connectors
+从网页上直接保存论文至 Zotero ,支持选择保存分类。
+官网: https://github.com/polywock/globalSpeed
+调节网页视频播放速度,使用简单。
+官网: https://www.languagereactor.com/
+为Youtube视频提供机翻双语字幕,并且支持导出。
+官网: https://github.com/philc/vimium
+Vimium 受到 Vim 编辑器的启发,让你能够抛弃鼠标,完全使用键盘完成浏览器的导航、页面跳转、页面搜索等操作。
+ + + + + + + + +本文为你推荐代码补全工具tabnine的介绍同时将和copilot的区别写出,copilot的安装在评论区后续补充。
+下载链接:https://www.tabnine.com/install/
+在这个下载页面中可以选择自己所使用的代码编辑器,对于 VSCode 用户来讲,我们可以直接在插件搜索中搜索tabnine,然后安装即可。
+TabNine 是一个基于机器学习的代码自动补全工具,它可以在多种编辑器和 IDE 中使用,包括但不限于 VS Code、Sublime Text、PyCharm、Vim、Emacs 等等。与传统的代码自动补全工具不同,TabNine 不仅可以根据已有的代码段和语法规则进行补全,而且还可以通过学习大量的代码库和语言语法,自动生成全新的代码,大大提高编码效率和准确性。
+TabNine 的优点包括:
+TabNine 和 Copilot 都是基于机器学习的代码自动补全工具,它们都可以根据上下文和语法规则来生成代码补全选项,提高编码效率和准确性。但是它们之间也有一些不同之处。
+总的来说,TabNine 和 Copilot 都是非常有用的代码自动补全工具,具有各自的优点和适用场景,用户可以根据自己的需求选择合适的工具。
+ 它是个动图捏大家可以体验下嘿嘿
免费的跨平台开源文件管理器,它的灵感来自 Total Commander ,并提供了一些新的想法(支持 Linux )。
+ + + + + + + + +print('Hello World')
+
Python 不能直接在计算机中运行,因此需要 Python 语言的运行环境: Python 解析器
+下载地址:https://www.python.org/downloads/release/python-379/ +当然你安装3.8或者3.9也是没问题的
+查找目标文件:Windows x86-64 executable installer -- 单击即可下载。(格式不能找错)
+第一步:双击运行 Python 的解析器,选择 自定义安装 以及 添加 Python 到环境变量(这一步非常重要)
+第二步:选择所有要安装的功能菜单,默认全部勾选
+第三步:设置 Python 解析器的安装路径,尽量不要安装在C盘,但需要知道自己安装的位置
+第四步:测试 Python 解析器是否可以使用 +方法:按 Windows + R ,输入 cmd ,打开 Windows 的 DOS 窗口,输入 python(全部小写),当出现下图就成功了
+使用exit()退出
+在不涉及到人工智能的方向,推荐不用安装 anaconda ,直接安装 PyCharm 即可。它是目前功能最强大的 IDE
+PyCharm 一共有两个版本:专业版(收费) 与 社区版(免费、开源)。我们选择后者
+第一步:下载 PyCharm 。https://www.jetbrains.com/pycharm/download/
+第二步:设置软件的安装路径,不用安装在 C 盘
+第三步:PyCharm 基本设置。如下图设置,不建议把 Pycharm 添加到环境变量里面
+第一步:创建项目 (Pycharm 不要汉化!不要汉化!不要汉化!)
+点开图标,初次点开会有一个提示窗口,不用管他,点击 New Project
+第二步:设置项目路径,尽量放到 C 盘以外(非常重要!!)
+你会看到类似如下图片。(因为我使用的是虚拟机安装,只用于开发 pycharm ,只有一个盘所以放在了 C 盘)
+其中 base interpreter 会自动感知到 python.exe 的位置,没感知到可以手动定位(找到 python 安装路径然后选定 python.exe )
+新建文件并书写代码
+print('Hello World')
+
进行运行,右上角绿色的三角符号 Run 。
+结果如下,就完成啦。
+官网:https://tiddlywiki.com/
+国际交流社区:https://talk.tiddlywiki.org/
+++很久很久以前,在一条河流里,生活着许多许多的小鱼儿(Tiddlers),它们快活地在故事河(Story River)里游来游去。这些小鱼儿每一个都有自己的名字(条目名),自己的种类(内容类型),它携带的信息组成了鱼儿美丽的身体与骨架,附加的字段构成了它美丽的鳞片。——TiddlyWiki简易教程。
+
「太微」是我们对 TiddlyWiki 的中文称呼,TiddlyWiki是一款极其强大又极具拓展性的个人 Wiki 系统。
+为什么把 TiddlyWiki 翻译成「太微」?因为受到 @pimgeek 的启发:TiddlyWiki 可以干很多细致轻量的工作,但也从不限制用法,可以无限组合叠加。故以其首字母音译为「太微」,TiddlyWiki 可以称为「太微笔记」「太微万能抽屉」「太微卡片盒」……
+太微具有多种形态。拥有HTML文件与文件夹 2种存储形式。桌面浏览器,服务端软件,应用软件 3种使用方式。可以在任意平台中使用,只有你想不到的,没有做不到的。
+您曾感觉人类的大脑是有极限的吗?感觉它不足以容纳一切你需要记住的事?
+欢迎使用 TiddlyWiki,一个独特的非线性笔记本,用于截取、管理和复用复杂的信息。
+用它来保留您的待办清单、计划一篇散文或一部小说、或安排您的婚礼。记录每个闪过您脑中的想法,或创建一个灵活和反应迅速的网站。
+++非线性笔记,这很像我们的大脑的思维习惯,不连续的、片段的信息,通过一些线索联系在一起。正如TiddlyWiki的条目记载的信息,通过标签或者字段又或者链接与嵌入相互联系在一起。
+
下载链接:https://github.com/tiddly-gittly/TidGi-Desktop
+TidGi,全平台的桌面端电脑支持,快速安装使用。内置ItonNote TiddlyWiki模板(预装常用插件)。省去配置插件的过程。
+TiddlyDesktop。全平台桌面端软件,tiddlywiki模板可以在Tiddlystow中选一个使用,比较推荐的是tiddlywiki XP以及适配TidGi单文件wiki。TiddlyDesktop主要是用于管理单个tiddlywiki的工具,而TidGi是一个wiki就是一个工作空间,采用all in one的思路。
+下载链接:https://github.com/TiddlyWiki/TiddlyDesktop/releases
+Timimi,一个浏览器插件与伺服软件配套使用的软件。优点是使用方便,即点即用,缺点是,配置步骤比前两个多一点。
+可以把一个HTML单文件版wiki作为超级灵活的word文档使用。即即点即用。
+下载链接:https://ibnishak.github.io/Timimi/
+最后一个Node.js,适用于对命令行工具、JS以及NodeJS有一定了解的用户。
+运行在NodeJS环境的TiddlyWiki,支持多用户同时使用/编辑相同的wiki的插件:TW5-Bob,与此再进一步封装了TW5-BobEXE程序,可以直接下载到你的电脑上运行。
+ANTLR(ANother-Tool-for-Language-Recognition)是一个功能强大的语法分析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它被广泛用于构建语言、工具和框架。ANTLR根据语法生成一个解析器,该解析器可以构建和遍历解析树
+example.g4 +
// specific grammar name
+grammar example;
+// for non-terminal, star with lower-case letter
+
+// '*' 代表该产生式出现0次或以上
+// '+' 代表至少出现一次
+// 下例将会被解析成vector<number>
+addExp
+ : number ('+' number)*
+ ;
+
+// 可以通过在产生式后 # nickname
+// 创建一个别名用来分析同名的不同情况下的产生式
+number
+ : IntLiteral # number1
+ | FloatLiteral # number2
+ ;
+
+// for terminal, star with lower-case letter
+IntLiteral
+ : [0-9]+
+ | ('0x'|'0X')[0-9a-fA-F]+
+ ;
+
+// '?' 代表该产生式可能存在,若存在仅出现一次
+FloatLiteral
+ : ([0-9]+|[0-9]*'.'[0-9]*)([eE]('+'|'-')?[0-9]+)?[fFlL]?
+ | ('0x'|'0X')([0-9a-fA-F]*'.'[0-9a-fA-F]*)([pP]('+'|'-')?[0-9]+)?[fFlL]?
+ ;
+
shell command +
antlr -Dlanguage=Cpp -no-listener -visitor example.g4
+
exampleVisitor.h +
#include "exampleBaseVisitor.h"
+
+class ExampleVisitor : public exampleBaseVisitor {
+ virtual antlrcpp::Any visitAddExp(exampleParser::AddExpContext *ctx) override;
+ virtual antlrcpp::Any visitNumber(exampleParser::NumberContext *ctx) override;
+};
+// Access string of current node by `ctx->getText()`
+// Visit `number` node of `addExp` by `ctx->number()`
+// then you can override visit-function to build your own parser !
+
官方仓库 + antlr repository
+官方文档 + antlr official doc
+官网: https://github.com/chenzhiy2001/code-debug/
+code-debug 是一个支持Rust语言的源代码级内核调试工具. 现在可以调试rCore-Tutorial-v3操作系统,支持从内核态跟踪到用户态. 最近的工作是,利用eBPF技术实现更丰富,更鲁棒的跟踪功能.
+ + + + + + + + +一个编译器和运行时框架,以帮助您尽可能轻松地构建和分发 eBPF 程序。
+eunomia-bpf
是一个动态加载库/运行时和编译工具链框架,旨在帮助您更轻松地构建和分发 eBPF 程序。
使用 eunomia-bpf,您可以:
+libbpf
eBPF 应用程序:仅编写 eBPF 内核代码,并自动从内核中使用 perf event
或 ring buffer
自动输出采样数据到内核态。hists
(直方图等信息)。命令行参数
。BCC
和 libbpf
等多种格式编写内核部分。Wasm
2 构建 eBPF 程序:参见 Wasm-bpf
项目OCI
镜像推送、拉取或运行1
行 bash中从 云端存储库
或 URL
运行 eBPF 程序。JSON
配置文件或 Wasm
用户态控制和数据处理模块的 eBPF 程序。更多信息请参见 documents/introduction.md。
+您可以使用一行 bash 从云端下载预编译的 eBPF 程序并将其运行到内核中:
+# 从 https://github.com/eunomia-bpf/eunomia-bpf/releases/latest/download/ecli 下载 ecli 运行时
+$ wget https://aka.pw/bpf-ecli -O ecli && chmod +x ./ecli
+$ sudo ./ecli https://eunomia-bpf.github.io/eunomia-bpf/sigsnoop/package.json # 从 url 运行预编译的 ebpf 代码
+$ sudo ./ecli sigsnoop:latest # 直接使用名称运行,并从我们的仓库下载最新版本 bpf 工具
+
仓库地址:https://github.com/junegunn/fzf
+FZF 是一款使用 Go 编写的交互式 CLI ,可用来查找任何列表内容、文件、历史指令、进程、host 名、书签或 Git commit 等内容。
+对于 macOS ,推荐使用 Homebrew 进行安装:
+brew install fzf
+
在 Linux 发行版上,可使用不同的包管理器进行安装,例如:
+Debian/Ubuntu(Apt):
+sudo apt install fzf
+
ArchLinux(Pacman):
+sudo pacman -S fzf
+
并不推荐在 Windows 中使用 FZF 。Windows 可使用 Everything 进行搜索。
+Windows下可使用 Scoop 进行安装使用。
+scoop install fzf
+
直接执行 FZF ,打开文件搜索功能。
+fzf
+
在此模式下,用户可输入特定的文件或目录名,FZF 将会在当前目录下执行查找,并显示出指定文件或目录的相对路径。
+使用快捷键 Ctrl+J
或 Ctrl+N
可向下滚动列表; Ctrl+K
或 Ctrl+P
可向下滚动列表。
+使用 Enter
选中条目并退出 FZF,Ctrl+C
、Ctrl+G
或 Esc
可退出 FZF 而不进行选择。
FZF 可作为 Vim 的插件使用,方便快速查找需要编辑的文件。
+在本例中,使用 vim-plug 插件管理器进行安装:
+编辑 ~/.vimrc
文件,在 call plug#begin()
下添加如下行:
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
+
重新加载 .vimrc
文件:
source ~/.vimrc
+
打开 vim ,并执行 :PlugInstall
用于安装插件。
使用 python 配置了 gdb 调试界面,完全可以自己写代码去定义整个调试界面可以说是堪比 IDE ,显示也非常好看,完全基于终端,作为底层的调试软件可以帮助开发者更好的查看变量、寄存器、单步执行等。
+获取
+wget -P ~ https://git.io/.gdbinit #如果网速较慢可以直接新建同名文件.gdbinit之后复制粘贴过来
+
目前 IDE 集成了很多的调试工具,但是在一些内核编程或者其他的底层开发领域 gdb 仍然具备不可替代的作用,为此我们希望在原本枯燥的调试终端找到更加便于观察的页面好在已经有人帮我们实现了这一工具为此我们希望把这样的便捷带给每一个人。
+参考 gdb调试常见指令
+在使用该插件时需要查看当前所使用的 gdb 是否支持 python 脚本,当出现 Scripting in the "Python" language is not supported in this copy of GDB.
时则表明该 gdb 不支持 python 脚本,无法使用该插件。另外,也需要注意 gdb 与 python 的版本是否匹配的问题,见 issue
Mathpix是一款 tex 格式公式生成软件,它主要的功能是通过 ocr 技术识别截图当中的公式,并生成对应的 tex 代码,在论文写作的过程中能够极大的加速公式编写的速度。
+特性:
+缺点:
+官网: https://www.nano-editor.org/
+gnu nano 是一个简单易上手的命令行编辑器,部分 linux 发行版的默认编辑器就是 nano ,同时你也可以在 windows 中安装它。
+在 linux 发行版中我们可以使用发行版对应的的包管理工具进行安装。
+以使用 apt 作为包管理工具的 debain 为例:
+sudo apt install nano
+
在命令行中输入 nano 就会出现详细的操作指导。
+Ranger 是有着 Vim 风格的快捷键的终端文件管理器。你可以使用键盘快速查看、预览文件,在不同的文件夹之间导航,还可以直接在ranger下对文件(文件夹)进行复制、粘贴、删除、重命名等常用操作。
+获取
+sudo apt install ranger
+
pip install ranger-fm
+
效果图
+
参考
+官方文档
+ +快捷键总结
+ +官网:https://www.texmacs.org/tmweb/home/welcome.en.html
+被 LaTeX 折磨的话,不妨试试 GNU TeXmacs!TeXmacs 是一款所见即所得的科学文档(论文,笔记等)开源编辑器。 +如果写很多的数学公式的话可以试试,非常好用!
+特性:
+a
再按tab就可以得到 \(\alpha\) 等看着像 a 的字符。需要什么功能看一看内建文档就差不多会了,偶尔文档里有过时的地方,可以下一本 The Jolly Writer ,也是软件的主要作者写的。
+唯一要注意的一点是,记得切换到中文模式(点菜单栏上面的国旗),否则不会自动换行。
+ + + + + + + + +++「有研究显示,打字的时候不喜欢在中文和英文之间加空格的人,感情路都走得很辛苦,有七成的比例会在 34 岁的时候跟自己不爱的人结婚,而其余三成的人最后只能把遗产留给自己的猫。毕竟爱情跟书写都需要适时地留白。
+与大家共勉之。」——vinta/paranoid-auto-spacing
+
正确:
+++在 LeanCloud 上,数据存储是围绕
+AVObject
进行的。
错误:
+++在LeanCloud上,数据存储是围绕
+AVObject
进行的。在 LeanCloud上,数据存储是围绕
+AVObject
进行的。
完整的正确用法:
+++在 LeanCloud 上,数据存储是围绕
+AVObject
进行的。每个AVObject
都包含了与 JSON 兼容的 key-value 对应的数据。数据是 schema-free 的,你不需要在每个AVObject
上提前指定存在哪些键,只要直接设定对应的 key-value 即可。
例外:「豆瓣FM」等产品名词,按照官方所定义的格式书写。
+正确:
+++今天出去买菜花了 5000 元。
+
错误:
+++今天出去买菜花了 5000元。
+今天出去买菜花了5000元。
+
正确:
+++我家的光纤入屋宽带有 10 Gbps,SSD 一共有 20 TB
+
错误:
+++我家的光纤入屋宽带有 10Gbps,SSD 一共有 20TB
+
例外:度数/百分比与数字之间不需要增加空格:
+正确:
+++角度为 90° 的角,就是直角。
+新 MacBook Pro 有 15% 的 CPU 性能提升。
+
错误:
+++角度为 90 ° 的角,就是直角。
+新 MacBook Pro 有 15 % 的 CPU 性能提升。
+
正确:
+++刚刚买了一部 iPhone,好开心!
+
错误:
+++刚刚买了一部 iPhone ,好开心!
+刚刚买了一部 iPhone, 好开心!
+
text-spacing
来挽救?CSS Text Module Level 4 的 text-spacing
和 Microsoft 的 -ms-text-autospace
可以实现自动为中英文之间增加空白。不过目前并未普及,另外在其他应用场景,例如 macOS、iOS、Windows 等用户界面目前并不存在这个特性,所以请继续保持随手加空格的习惯。
即使中国大陆的标点符号用法允许重复使用标点符号,但是这么做会破坏句子的美观性。
+正确:
+++德国队竟然战胜了巴西队!
+她竟然对你说「喵」?!
+
错误:
+++德国队竟然战胜了巴西队!!
+德国队竟然战胜了巴西队!!!!!!!!
+她竟然对你说「喵」??!!
+她竟然对你说「喵」?!?!??!!
+
不明白什么是全角(全形)与半角(半形)符号?请查看维基百科条目『全角和半角』。
+正确:
+++嗨!你知道嘛?今天前台的小妹跟我说「喵」了哎!
+核磁共振成像(NMRI)是什么原理都不知道?JFGI!
+
错误:
+++嗨! 你知道嘛? 今天前台的小妹跟我说 "喵" 了哎!
+嗨!你知道嘛?今天前台的小妹跟我说"喵"了哎!
+核磁共振成像 (NMRI) 是什么原理都不知道? JFGI!
+核磁共振成像(NMRI)是什么原理都不知道?JFGI!
+
正确:
+++这个蛋糕只卖 1000 元。
+
错误:
+++这个蛋糕只卖 1000 元。
+
例外:在设计稿、宣传海报中如出现极少量数字的情形时,为方便文字对齐,是可以使用全角数字的。
+正确:
+++乔布斯那句话是怎么说的?「Stay hungry, stay foolish.」
+推荐你阅读《Hackers & Painters: Big Ideas from the Computer Age》,非常的有趣。
+
错误:
+++乔布斯那句话是怎么说的?「Stay hungry,stay foolish。」
+推荐你阅读《Hackers&Painters:Big Ideas from the Computer Age》,非常的有趣。
+
大小写相关用法原属于英文书写范畴,不属于本 wiki 讨论内容,在这里只对部分易错用法进行简述。
+正确:
+++使用 GitHub 登录
+我们的客户有 GitHub、Foursquare、Microsoft Corporation、Google、Facebook, Inc.。
+
错误:
+++使用 github 登录
+使用 GITHUB 登录
+使用 Github 登录
+使用 gitHub 登录
+使用 gイんĤЦ8 登录
+我们的客户有 github、foursquare、microsoft corporation、google、facebook, inc.。
+我们的客户有 GITHUB、FOURSQUARE、MICROSOFT CORPORATION、GOOGLE、FACEBOOK, INC.。
+我们的客户有 Github、FourSquare、MicroSoft Corporation、Google、FaceBook, Inc.。
+我们的客户有 gitHub、fourSquare、microSoft Corporation、google、faceBook, Inc.。
+我们的客户有 gイんĤЦ8、キouЯƧquムгє、๓เςг๏ร๏Ŧt ς๏гק๏гคtเ๏ภn、900913、ƒ4ᄃëв๏๏к, IПᄃ.。
+
注意:当网页中需要配合整体视觉风格而出现全部大写/小写的情形,HTML 中请使用标淮的大小写规范进行书写;并通过 text-transform: uppercase;
/text-transform: lowercase;
对表现形式进行定义。
正确:
+++我们需要一位熟悉 TypeScript、HTML5,至少理解一种框架(如 React、Next.js)的前端开发者。
+
错误:
+++我们需要一位熟悉 Ts、h5,至少理解一种框架(如 RJS、nextjs)的 FED。
+
以下用法略带有个人色彩,即:无论是否遵循下述规则,从语法的角度来讲都是正确的。
+用法:
+++请 提交一个 issue 并分配给相关同事。
+访问我们网站的最新动态,请 点击这里 进行订阅!
+
对比用法:
+++请提交一个 issue并分配给相关同事。
+访问我们网站的最新动态,请点击这里进行订阅!
+
用法:
+++「老师,『有条不紊』的『紊』是什么意思?」
+
对比用法:
+++“老师,‘有条不紊’的‘紊’是什么意思?”
+
Note
+本要求取自 中文文案排版指北 ,你可以点击链接来了解更多内容。
+LaTeX 的数学公式有两种:行中公式和独立公式(行间公式)。行中公式放在文中与其它文字混编,独立公式单独成行。
+行中公式可以用如下方法表示:
+$ 数学公式 $
独立公式可以用如下方法表示:
+$$ 数学公式 $$
\dot{a}, \ddot{a}, \acute{a}, \grave{a}
\(\dot{a}, \ddot{a}, \acute{a}, \grave{a}\)
+\check{a}, \breve{a}, \tilde{a}, \bar{a}
\(\check{a}, \breve{a}, \tilde{a}, \bar{a}\)
+\hat{a}, \widehat{a}, \vec{a}
\(\hat{a}, \widehat{a}, \vec{a}\)
+指数
+\exp_a b = a^b, \exp b = e^b, 10^m
\(\exp_a b = a^b, \exp b = e^b, 10^m\)
+对数
+\ln c, \lg d = \log e, \log_{10} f
\(\ln c, \lg d = \log e, \log_{10} f\)
+三角函数
+\sin a, \cos b, \tan c, \cot d, \sec e, \csc f
\(\sin a, \cos b, \tan c, \cot d, \sec e, \csc f\)
+\arcsin a, \arccos b, \arctan c
\(\arcsin a, \arccos b, \arctan c\)
+\sinh a, \cosh b, \tanh c, \coth d
\(\sinh a, \cosh b, \tanh c, \coth d\)
+\operatorname{sh}k, \operatorname{ch}l, \operatorname{th}m, \operatorname{coth}n
\(\operatorname{sh}k, \operatorname{ch}l, \operatorname{th}m, \operatorname{coth}n\)
+\operatorname{argsh}o, \operatorname{argch}p, \operatorname{argth}q
\(\operatorname{argsh}o, \operatorname{argch}p, \operatorname{argth}q\)
+最大值,最小值
+\min(x,y), \max(x,y)
\(\min(x,y), \max(x,y)\)
+\min x, \max y, \inf s, \sup t
\(\min x, \max y, \inf s, \sup t\)
+\lim u, \liminf v, \limsup w
\(\lim u, \liminf v, \limsup w\)
+\lim_{x \to \infty} \frac{1}{n(n+1)}
\(\lim_{x \to \infty} \frac{1}{n(n+1)}\)
+\dim p, \deg q, \det m, \ker\phi
\(\dim p, \deg q, \det m, \ker\phi\)
+\Pr j, \hom l, \lVert z \rVert, \arg z
\(\Pr j, \hom l, \lVert z \rVert, \arg z\)
+dt, \mathrm{d}t, \partial t, \nabla\psi
\(dt, \mathrm{d}t, \partial t, \nabla\psi\)
+dy/dx, \mathrm{d}y/\mathrm{d}x, \frac{dy}{dx}, \frac{\mathrm{d}y}{\mathrm{d}x}, \frac{\partial^2}{\partial x_1\partial x_2}y
\(dy/dx, \mathrm{d}y/\mathrm{d}x, \frac{dy}{dx}, \frac{\mathrm{d}y}{\mathrm{d}x}, \frac{\partial^2}{\partial x_1\partial x_2}y\)
+\prime, \backprime, f^\prime, f', f'', f^{(3)}, \dot y, \ddot y
\(\prime, \backprime, f^\prime, f', f'', f^{(3)}, \dot y, \ddot y\)
+\infty, \aleph, \complement, \backepsilon, \eth, \Finv, \hbar
∞,ℵ,∁,∍,ð,Ⅎ,ℏ
+\Im, \imath, \jmath, \Bbbk, \ell, \mho, \wp, \Re, \circledS
\(\Im, \imath, \jmath, \Bbbk, \ell, \mho, \wp, \Re, \circledS\)
+s_k \equiv 0 \pmod{m}
\(s_k \equiv 0 \pmod{m}\)
+a \bmod b
\(a \bmod b\)
+\gcd(m, n), \operatorname{lcm}(m, n)
\(\gcd(m, n), \operatorname{lcm}(m, n)\)
+\mid, \nmid, \shortmid, \nshortmid
\(\mid, \nmid, \shortmid, \nshortmid\)
+\surd, \sqrt{2}, \sqrt[n]{}, \sqrt[3]{\frac{x^3+y^3}{2}}
\(\surd, \sqrt{2}, \sqrt[n]{}, \sqrt[3]{\frac{x^3+y^3}{2}}\)
++, -, \pm, \mp, \dotplus
\(+, -, \pm, \mp, \dotplus\)
+\times, \div, \divideontimes, /, \backslash
\(\times, \div, \divideontimes, /, \backslash\)
+\cdot, * \ast, \star, \circ, \bullet
\(\cdot, * \ast, \star, \circ, \bullet\)
+\boxplus, \boxminus, \boxtimes, \boxdot
\(\boxplus, \boxminus, \boxtimes, \boxdot\)
+\oplus, \ominus, \otimes, \oslash, \odot
\(\oplus, \ominus, \otimes, \oslash, \odot\)
+\circleddash, \circledcirc, \circledast
\(\circleddash, \circledcirc, \circledast\)
+\bigoplus, \bigotimes, \bigodot
\(\bigoplus, \bigotimes, \bigodot\)
+\{ \}, \empty \emptyset, \varnothing
\(\{ \}, \empty \emptyset, \varnothing\)
+\in, \notin \not\in, \ni, \not\ni
\(\in, \notin \not\in, \ni, \not\ni\)
+\cap, \Cap, \sqcap, \bigcap
\(\cap, \Cap, \sqcap, \bigcap\)
+\cup, \Cup, \sqcup, \bigcup, \bigsqcup, \uplus, \biguplus
\(\cup, \Cup, \sqcup, \bigcup, \bigsqcup, \uplus, \biguplus\)
+\setminus, \smallsetminus, \times
\(\setminus, \smallsetminus, \times\)
+\subset, \Subset, \sqsubset
\(\subset, \Subset, \sqsubset\)
+\supset, \Supset, \sqsupset
\(\supset, \Supset, \sqsupset\)
+\subseteq, \nsubseteq, \subsetneq, \varsubsetneq, \sqsubseteq
\(\subseteq, \nsubseteq, \subsetneq, \varsubsetneq, \sqsubseteq\)
+\supseteq, \nsupseteq, \supsetneq, \varsupsetneq, \sqsupseteq
\(\supseteq, \nsupseteq, \supsetneq, \varsupsetneq, \sqsupseteq\)
+\subseteqq, \nsubseteqq, \subsetneqq, \varsubsetneqq
\(\subseteqq, \nsubseteqq, \subsetneqq, \varsubsetneqq\)
+\supseteqq, \nsupseteqq, \supsetneqq, \varsupsetneqq
\(\supseteqq, \nsupseteqq, \supsetneqq, \varsupsetneqq\)
+=, \ne, \neq, \equiv, \not\equiv
\(=, \ne, \neq, \equiv, \not\equiv\)
+\doteq, \doteqdot, \overset{\underset{\mathrm{def}}{}}{=}, :=
\(\doteq, \doteqdot, \overset{\underset{\mathrm{def}}{}}{=}, :=\)
+\sim, \nsim, \backsim, \thicksim, \simeq, \backsimeq, \eqsim, \cong, \ncong
\(\sim, \nsim, \backsim, \thicksim, \simeq, \backsimeq, \eqsim, \cong, \ncong\)
+\approx, \thickapprox, \approxeq, \asymp, \propto, \varpropto
\(\approx, \thickapprox, \approxeq, \asymp, \propto, \varpropto\)
+<, \nless, \ll, \not\ll, \lll, \not\lll, \lessdot
\(<, \nless, \ll, \not\ll, \lll, \not\lll, \lessdot\)
+>, \ngtr, \gg, \not\gg, \ggg, \not\ggg, \gtrdot
\(>, \ngtr, \gg, \not\gg, \ggg, \not\ggg, \gtrdot\)
+\le, \leq, \lneq, \leqq, \nleq, \nleqq, \lneqq, \lvertneqq
\(\le, \leq, \lneq, \leqq, \nleq, \nleqq, \lneqq, \lvertneqq\)
+\ge, \geq, \gneq, \geqq, \ngeq, \ngeqq, \gneqq, \gvertneqq
\(\ge, \geq, \gneq, \geqq, \ngeq, \ngeqq, \gneqq, \gvertneqq\)
+\lessgtr, \lesseqgtr, \lesseqqgtr, \gtrless, \gtreqless, \gtreqqless
\(\lessgtr, \lesseqgtr, \lesseqqgtr, \gtrless, \gtreqless, \gtreqqless\)
+\leqslant, \nleqslant, \eqslantless
\(\leqslant, \nleqslant, \eqslantless\)
+\geqslant, \ngeqslant, \eqslantgtr
\(\geqslant, \ngeqslant, \eqslantgtr\)
+\lesssim, \lnsim, \lessapprox, \lnapprox
\(\lesssim, \lnsim, \lessapprox, \lnapprox\)
+\gtrsim, \gnsim, \gtrapprox, \gnapprox
\(\gtrsim, \gnsim, \gtrapprox, \gnapprox\)
+\prec, \nprec, \preceq, \npreceq, \precneqq
\(\prec, \nprec, \preceq, \npreceq, \precneqq\)
+\succ, \nsucc, \succeq, \nsucceq, \succneqq
\(\succ, \nsucc, \succeq, \nsucceq, \succneqq\)
+\preccurlyeq, \curlyeqprec
\(\preccurlyeq, \curlyeqprec\)
+\succcurlyeq, \curlyeqsucc
\(\succcurlyeq, \curlyeqsucc\)
+\precsim, \precnsim, \precapprox, \precnapprox
\(\precsim, \precnsim, \precapprox, \precnapprox\)
+\succsim, \succnsim, \succapprox, \succnapprox
\(\succsim, \succnsim, \succapprox, \succnapprox\)
+\parallel, \nparallel, \shortparallel, \nshortparallel
\(\parallel, \nparallel, \shortparallel, \nshortparallel\)
+\perp, \angle, \sphericalangle, \measuredangle, 45^\circ
\(\perp, \angle, \sphericalangle, \measuredangle, 45^\circ\)
+\Box, \blacksquare, \diamond, \Diamond \lozenge, \blacklozenge, \bigstar
\(\Box, \blacksquare, \diamond, \Diamond \lozenge, \blacklozenge, \bigstar\)
+\bigcirc, \triangle, \bigtriangleup, \bigtriangledown
\(\bigcirc, \triangle, \bigtriangleup, \bigtriangledown\)
+\vartriangle, \triangledown
\(\vartriangle, \triangledown\)
+\blacktriangle, \blacktriangledown, \blacktriangleleft, \blacktriangleright
\(\blacktriangle, \blacktriangledown, \blacktriangleleft, \blacktriangleright\)
+\forall, \exists, \nexists
\(\forall, \exists, \nexists\)
+\therefore, \because, \And
\(\therefore, \because, \And\)
+\vee, \curlyvee, \bigvee
\(\vee, \curlyvee, \bigvee\)
+\land, \wedge, \curlywedge, \bigwedge
\(\land, \wedge, \curlywedge, \bigwedge\)
+\bar{q}, \bar{abc}, \overline{q}, \overline{abc},
\lnot \neg, \not\operatorname{R}, \bot, \top
\(\bar{q}, \bar{abc}, \overline{q}, \overline{abc},\)
+\(\lnot \neg, \not\operatorname{R}, \bot, \top\)
+\vdash \dashv, \vDash, \Vdash, \models
\(\vdash \dashv, \vDash, \Vdash, \models\)
+\Vvdash \nvdash \nVdash \nvDash \nVDash
\(\Vvdash \nvdash \nVdash \nvDash \nVDash\)
+\ulcorner \urcorner \llcorner \lrcorner
\(\ulcorner \urcorner \llcorner \lrcorner\)
+\Rrightarrow, \Lleftarrow
\(\Rrightarrow, \Lleftarrow\)
+\Rightarrow, \nRightarrow, \Longrightarrow \implies
\(\Rightarrow, \nRightarrow, \Longrightarrow \implies\)
+\Leftarrow, \nLeftarrow, \Longleftarrow
\(\Leftarrow, \nLeftarrow, \Longleftarrow\)
+\Leftrightarrow, \nLeftrightarrow, \Longleftrightarrow \iff
\(\Leftrightarrow, \nLeftrightarrow, \Longleftrightarrow \iff\)
+\Uparrow, \Downarrow, \Updownarrow
\(\Uparrow, \Downarrow, \Updownarrow\)
+\rightarrow \to, \nrightarrow, \longrightarrow
\(\rightarrow \to, \nrightarrow, \longrightarrow\)
+\leftarrow \gets, \nleftarrow, \longleftarrow
\(\leftarrow \gets, \nleftarrow, \longleftarrow\)
+\leftrightarrow, \nleftrightarrow, \longleftrightarrow
\(\leftrightarrow, \nleftrightarrow, \longleftrightarrow\)
+\uparrow, \downarrow, \updownarrow
\(\uparrow, \downarrow, \updownarrow\)
+\nearrow, \swarrow, \nwarrow, \searrow
\(\nearrow, \swarrow, \nwarrow, \searrow\)
+\mapsto, \longmapsto
\(\mapsto, \longmapsto\)
+\rightharpoonup \rightharpoondown \leftharpoonup \leftharpoondown \upharpoonleft \upharpoonright \downharpoonleft \downharpoonright \rightleftharpoons \leftrightharpoons
\(\rightharpoonup \rightharpoondown \leftharpoonup \leftharpoondown \upharpoonleft \upharpoonright \downharpoonleft \downharpoonright \rightleftharpoons \leftrightharpoons\)
+\curvearrowleft \circlearrowleft \Lsh \upuparrows \rightrightarrows \rightleftarrows \rightarrowtail \looparrowright
\(\curvearrowleft \circlearrowleft \Lsh \upuparrows \rightrightarrows \rightleftarrows \rightarrowtail \looparrowright\)
+\curvearrowright \circlearrowright \Rsh \downdownarrows \leftleftarrows \leftrightarrows \leftarrowtail \looparrowleft
\(\curvearrowright \circlearrowright \Rsh \downdownarrows \leftleftarrows \leftrightarrows \leftarrowtail \looparrowleft\)
+\hookrightarrow \hookleftarrow \multimap \leftrightsquigarrow \rightsquigarrow \twoheadrightarrow \twoheadleftarrow
\(\hookrightarrow \hookleftarrow \multimap \leftrightsquigarrow \rightsquigarrow \twoheadrightarrow \twoheadleftarrow\)
+省略号:数学公式中常见的省略号有两种,\ldots
表示与文本底线对齐的省略号,\cdots
表示与文本中线对齐的省略号。
\amalg \% \dagger \ddagger \ldots \cdots
\(\amalg \% \dagger \ddagger \ldots \cdots\)
+\smile \frown \wr \triangleleft \triangleright
\(\smile \frown \wr \triangleleft \triangleright\)
+\diamondsuit, \heartsuit, \clubsuit, \spadesuit, \Game, \flat, \natural, \sharp
\(\diamondsuit, \heartsuit, \clubsuit, \spadesuit, \Game, \flat, \natural, \sharp\)
+\diagup \diagdown \centerdot \ltimes \rtimes \leftthreetimes \rightthreetimes
\(\diagup \diagdown \centerdot \ltimes \rtimes \leftthreetimes \rightthreetimes\)
+\eqcirc \circeq \triangleq \bumpeq \Bumpeq \doteqdot \risingdotseq \fallingdotseq
\(\eqcirc \circeq \triangleq \bumpeq \Bumpeq \doteqdot \risingdotseq \fallingdotseq\)
+\intercal \barwedge \veebar \doublebarwedge \between \pitchfork
\(\intercal \barwedge \veebar \doublebarwedge \between \pitchfork\)
+\vartriangleleft \ntriangleleft \vartriangleright \ntriangleright
\(\vartriangleleft \ntriangleleft \vartriangleright \ntriangleright\)
+\trianglelefteq \ntrianglelefteq \trianglerighteq \ntrianglerighteq
\(\trianglelefteq \ntrianglelefteq \trianglerighteq \ntrianglerighteq\)
+功能|语法|效果
+^
表示上标, _
表示下标。如果上下标的内容多于一个字符,需要用 {}
将这些内容括成一个整体。上下标可以嵌套,也可以同时使用。
上标
+a^2
\(a^2\)
+下标
+a_2
\(a_2\)
+组合
+a^{2+2}
\(a^{2+2}\)
+a_{i,j}
\(a_{i,j}\)
+结合上下标
+x_2^3
\(x_2^3\)
+前置上下标
+{}_1^2\!X_3^4
\({}_1^2\!X_3^4\)
+导数
+x'
\(x'\)
+导数
+x^\prime
\(x\prime\)
+导数点
+\dot{x}
\(\dot{x}\)
+\ddot{y}
\(\ddot{y}\)
+向量
+\vec{c}
(只有一个字母)
\(\vec{c}\)
+\overleftarrow{a b}
\(\overleftarrow{a b}\)
+\overrightarrow{c d}
\(\overrightarrow{c d}\)
+\overleftrightarrow{a b}
\(\overleftrightarrow{a b}\)
+\widehat{e f g}
\(\widehat{e f g}\)
+上弧
+(注: 正确应该用 \overarc,但在这里行不通。要用建议的语法作为解决办法。)(使用 overarc 时需要引入 {arcs} 包。)
+\overset{\frown} {AB}
\(\overset{\frown} {AB}\)
+上划线
+\overline{h i j}
\(\overline{h i j}\)
+下划线
+\underline{k l m}
\(\underline{k l m}\)
+上括号
+\overbrace{1+2+\cdots+100}
\(\overbrace{1+2+\cdots+100}\)
+\begin{matrix} 5050 \\ \overbrace{ 1+2+\cdots+100 } \end{matrix}
\(\begin{matrix} 5050 \\ \overbrace{ 1+2+\cdots+100 } \end{matrix}\)
+下括号
+\underbrace{a+b+\cdots+z}
\(\underbrace{a+b+\cdots+z}\)
+\begin{matrix} \underbrace{ a+b+\cdots+z } \\ 26 \end{matrix}
\(\begin{matrix} \underbrace{ a+b+\cdots+z } \\ 26 \end{matrix}\)
+求和(累加)
+\sum_{k=1}^N k^2
\(\sum_{k=1}^N k^2\)
+\begin{matrix} \sum_{k=1}^N k^2 \end{matrix}
\(\begin{matrix} \sum_{k=1}^N k^2 \end{matrix}\)
+求积(累乘)
+\prod_{i=1}^N x_i
\(\prod_{i=1}^N x_i\)
+\begin{matrix} \prod_{i=1}^N x_i \end{matrix}
\(\begin{matrix} \prod_{i=1}^N x_i \end{matrix}\)
+上积
+\coprod_{i=1}^N x_i
\(\coprod_{i=1}^N x_i\)
+\begin{matrix} \coprod_{i=1}^N x_i \end{matrix}
\(\begin{matrix} \coprod_{i=1}^N x_i \end{matrix}\)
+极限
+\lim_{n \to \infty}x_n
\(\lim_{n \to \infty}x_n\)
+\begin{matrix} \lim_{n \to \infty}x_n \end{matrix}
\(\begin{matrix} \lim_{n \to \infty}x_n \end{matrix}\)
+积分
+\int_{-N}^{N} e^x\, {\rm d}x
\(\int_{-N}^{N} e^x\, {\rm d}x\)
+本例中 \
, 和 {\rm d}
部分可省略,但建议加入,能使式子更美观。{\rm d}
可以用 \mathrm{d}
等价替换。
\begin{matrix} \int_{-N}^{N} e^x\, \mathrm{d}x \end{matrix}
(矩阵中积分符号变小)
\(\begin{matrix} \int_{-N}^{N} e^x\, \mathrm{d}x \end{matrix}\)
+双重积分
+\iint_{D}^{W} \, \mathrm{d}x\,\mathrm{d}y
\(\iint_{D}^{W} \, \mathrm{d}x\,\mathrm{d}y\)
+三重积分
+\iiint_{E}^{V} \, \mathrm{d}x\,\mathrm{d}y\,\mathrm{d}z
\(\iiint_{E}^{V} \, \mathrm{d}x\,\mathrm{d}y\,\mathrm{d}z\)
+闭合的曲线、曲面积分
+\oint_{C} x^3\, \mathrm{d}x + 4y^2\, \mathrm{d}y
\(\oint_{C} x^3\, \mathrm{d}x + 4y^2\, \mathrm{d}y\)
+交集
+\bigcap_1^{n} p
\(\bigcap_1^{n} p\)
+并集
+\bigcup_1^{k} p
\(\bigcup_1^{k} p\)
+通常使用 \frac {分子} {分母}
命令产生一个分数,分数可嵌套。
+便捷情况可直接输入 \frac ab
来快速生成一个 \(\frac ab\) 。
+如果分式很复杂,亦可使用 分子 \over 分母
命令,此时分数仅有一层。
功能|语法|效果
+分数
+\frac{2}{4} = 0.5
\(\frac{2}{4}=0.5\)
+小型分数
+\tfrac{2}{4} = 0.5
\(\tfrac{2}{4} = 0.5\)
+连分式(大型嵌套分式)
+\cfrac{2}{c + \cfrac{2}{d + \cfrac{2}{4}}} = a
\(\cfrac{2}{c + \cfrac{2}{d + \cfrac{2}{4}}} = a\)
+大型不嵌套分式
+\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a
\(\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a\)
+二项式系数
+\dbinom{n}{r}=\binom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}
\(\dbinom{n}{r}=\binom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)
+小型二项式系数
+\tbinom{n}{r}=\tbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}
\(\tbinom{n}{r}=\tbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)
+大型二项式系数
+\binom{n}{r}=\dbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}
\(\binom{n}{r}=\dbinom{n}{n-r}=\mathrm{C}_n^r=\mathrm{C}_n^{n-r}\)
+在以 \(e\) 为底的指数函数、极限和积分中尽量不要使用 \frac
符号:它会使整段函数看起来很怪,而且可能产生歧义。也正是因此它在专业数学排版中几乎从不出现。
+横着写这些分式,中间使用斜线间隔 /
(用斜线代替分数线)。
例子:
+\begin{array}{cc}
+\mathrm{Bad} & \mathrm{Better} \\
+\hline \\
+e^{i\frac{\pi}2} \quad e^{\frac{i\pi}2}& e^{i\pi/2} \\
+\int_{-\frac\pi2}^\frac\pi2 \sin x\,dx & \int_{-\pi/2}^{\pi/2}\sin x\,dx \\
+\end{array}
+
显示:
+语法:
+\begin{类型}
+公式内容
+\end{类型}
+
类型可以是:矩阵 matrix
pmatrix
bmatrix
Bmatrix
vmatrix
Vmatrix
、条件表达式 cases
、多行对齐方程式 aligned
、数组 array
。
在公式内容中:在每一行中插入 &
来指定需要对齐的内容,在每行结尾处使用 \\
换行。
在开头使用 begin{matrix}
,在结尾使用 end{matrix}
,在中间插入矩阵元素,每个元素之间插入 &
,并在每行结尾处使用 \\
。
\begin{matrix}
+x & y \\
+z & v
+\end{matrix}
+
\(\begin{matrix} +x & y \\ +z & v +\end{matrix}\)
+在开头将 matrix
替换为 pmatrix
bmatrix
Bmatrix
vmatrix
Vmatrix
。
\begin{vmatrix}
+x & y \\
+z & v
+\end{vmatrix}
+
\(\begin{vmatrix} +x & y \\ +z & v +\end{vmatrix}\)
+\begin{Vmatrix}
+x & y \\
+z & v
+\end{Vmatrix}
+
\(\begin{Vmatrix} +x & y \\ +z & v +\end{Vmatrix}\)
+使用 \cdots
⋯ , \ddots
⋱ , \vdots
⋮ 来输入省略符号。
\begin{bmatrix}
+0 & \cdots & 0 \\
+\vdots & \ddots & \vdots \\
+0 & \cdots & 0
+\end{bmatrix}
+
\(\begin{bmatrix} +0 & \cdots & 0 \\ +\vdots & \ddots & \vdots \\ +0 & \cdots & 0 +\end{bmatrix}\)
+\begin{Bmatrix}
+x & y \\
+z & v
+\end{Bmatrix}
+
\(\begin{Bmatrix} +x & y \\ +z & v +\end{Bmatrix}\)
+\begin{pmatrix}
+x & y \\
+z & v
+\end{pmatrix}
+
\(\begin{pmatrix} +x & y \\ +z & v +\end{pmatrix}\)
+f(n) =
+\begin{cases}
+n/2, & \text{if }n\text{ is even} \\
+3n+1, & \text{if }n\text{ is odd}
+\end{cases}
+
\(f(n) = +\begin{cases} +n/2, & \text{if }n\text{ is even} \\ +3n+1, & \text{if }n\text{ is odd} +\end{cases}\)
+人们经常想要一列整齐且居中的方程式序列。使用 \begin{aligned}…\end{aligned}
。
\begin{aligned}
+f(x) & = (m+n)^2 \\
+ & = m^2+2mn+n^2 \\
+\end{aligned}
+
\(\begin{aligned} +f(x) & = (m+n)^2 \\ + & = m^2+2mn+n^2 \\ +\end{aligned}\)
+\begin{aligned}
+3^{6n+3}+4^{6n+3}
+& \equiv (3^3)^{2n+1}+(4^3)^{2n+1}\\
+& \equiv 27^{2n+1}+64^{2n+1}\\
+& \equiv 27^{2n+1}+(-27)^{2n+1}\\
+& \equiv 27^{2n+1}-27^{2n+1}\\
+& \equiv 0 \pmod{91}\\
+\end{aligned}
+
\(\begin{aligned} +3^{6n+3}+4^{6n+3} +& \equiv (3^3)^{2n+1}+(4^3)^{2n+1}\\ +& \equiv 27^{2n+1}+64^{2n+1}\\ +& \equiv 27^{2n+1}+(-27)^{2n+1}\\ +& \equiv 27^{2n+1}-27^{2n+1}\\ +& \equiv 0 \pmod{91}\\ +\end{aligned}\)
+\begin{alignedat}{3}
+f(x) & = (m-n)^2 \\
+f(x) & = (-m+n)^2 \\
+ & = m^2-2mn+n^2 \\
+\end{alignedat}
+
\(\begin{alignedat}{3} +f(x) & = (m-n)^2 \\ +f(x) & = (-m+n)^2 \\ + & = m^2-2mn+n^2 \\ +\end{alignedat}\)
+\begin{cases}
+3x + 5y + z \\
+7x - 2y + 4z \\
+-6x + 3y + 2z
+\end{cases}
+
\(\begin{cases} +3x + 5y + z \\ +7x - 2y + 4z \\ +-6x + 3y + 2z +\end{cases}\)
+或
+\left\{\begin{aligned}
+3x + 5y + z \\
+7x - 2y + 4z \\
+-6x + 3y + 2z
+\end{aligned}\right.
+
\(\left\{\begin{aligned} +3x + 5y + z \\ +7x - 2y + 4z \\ +-6x + 3y + 2z +\end{aligned}\right.\)
+通常,一个格式化后的表格比单纯的文字或排版后的文字更具有可读性。数组和表格均以 \begin{array}
开头,并在其后定义列数及每一列的文本对齐属性,c
l
r
分别代表居中、左对齐及右对齐。若需要插入垂直分割线,在定义式中插入 |
,若要插入水平分割线,在下一行输入前插入 \hline
。与矩阵相似,每行元素间均须要插入 &
,每行元素以 \\
结尾,最后以 \end{array}
结束数组。
\begin{array}{c|lcr}
+n & \text{左对齐} & \text{居中对齐} & \text{右对齐} \\
+\hline
+1 & 0.24 & 1 & 125 \\
+2 & -1 & 189 & -8 \\
+3 & -20 & 2000 & 1+10i
+\end{array}
+
\(\begin{array}{c|lcr} +n & \text{左对齐} & \text{居中对齐} & \text{右对齐} \\ +\hline +1 & 0.24 & 1 & 125 \\ +2 & -1 & 189 & -8 \\ +3 & -20 & 2000 & 1+10i +\end{array}\)
+\begin{array}{lcl}
+z & = & a \\
+f(x,y,z) & = & x + y + z
+\end{array}
+
\(\begin{array}{lcl} +z & = & a \\ +f(x,y,z) & = & x + y + z +\end{array}\)
+\begin{array}{lcr}
+z & = & a \\
+f(x,y,z) & = & x + y + z
+\end{array}
+
\(\begin{array}{lcr} +z & = & a \\ +f(x,y,z) & = & x + y + z +\end{array}\)
+\begin{array}{ccc}
+a & b & S \\
+\hline
+0&0&1\\
+0&1&1\\
+1&0&1\\
+1&1&0\\
+\end{array}
+
\(\begin{array}{ccc} +a & b & S \\ +\hline +0&0&1\\ +0&1&1\\ +1&0&1\\ +1&1&0\\ +\end{array}\)
+多个数组/表格可 互相嵌套 并组成一组数组/一组表格。
+使用嵌套前必须声明 $$
符号。
% outer vertical array of arrays 外层垂直表格
+\begin{array}{c}
+ % inner horizontal array of arrays 内层水平表格
+ \begin{array}{cc}
+ % inner array of minimum values 内层"最小值"数组
+ \begin{array}{c|cccc}
+ \text{min} & 0 & 1 & 2 & 3\\
+ \hline
+ 0 & 0 & 0 & 0 & 0\\
+ 1 & 0 & 1 & 1 & 1\\
+ 2 & 0 & 1 & 2 & 2\\
+ 3 & 0 & 1 & 2 & 3
+ \end{array}
+ &
+ % inner array of maximum values 内层"最大值"数组
+ \begin{array}{c|cccc}
+ \text{max}&0&1&2&3\\
+ \hline
+ 0 & 0 & 1 & 2 & 3\\
+ 1 & 1 & 1 & 2 & 3\\
+ 2 & 2 & 2 & 2 & 3\\
+ 3 & 3 & 3 & 3 & 3
+ \end{array}
+ \end{array}
+ % 内层第一行表格组结束
+ \\
+ % inner array of delta values 内层第二行Delta值数组
+ \begin{array}{c|cccc}
+ \Delta&0&1&2&3\\
+ \hline
+ 0 & 0 & 1 & 2 & 3\\
+ 1 & 1 & 0 & 1 & 2\\
+ 2 & 2 & 1 & 0 & 1\\
+ 3 & 3 & 2 & 1 & 0
+ \end{array}
+ % 内层第二行表格组结束
+\end{array}
+
\(% outer vertical array of arrays 外层垂直表格 +\begin{array}{c} + % inner horizontal array of arrays 内层水平表格 + \begin{array}{cc} + % inner array of minimum values 内层"最小值"数组 + \begin{array}{c|cccc} + \text{min} & 0 & 1 & 2 & 3\\ + \hline + 0 & 0 & 0 & 0 & 0\\ + 1 & 0 & 1 & 1 & 1\\ + 2 & 0 & 1 & 2 & 2\\ + 3 & 0 & 1 & 2 & 3 + \end{array} + & + % inner array of maximum values 内层"最大值"数组 + \begin{array}{c|cccc} + \text{max}&0&1&2&3\\ + \hline + 0 & 0 & 1 & 2 & 3\\ + 1 & 1 & 1 & 2 & 3\\ + 2 & 2 & 2 & 2 & 3\\ + 3 & 3 & 3 & 3 & 3 + \end{array} + \end{array} + % 内层第一行表格组结束 + \\ + % inner array of delta values 内层第二行Delta值数组 + \begin{array}{c|cccc} + \Delta&0&1&2&3\\ + \hline + 0 & 0 & 1 & 2 & 3\\ + 1 & 1 & 0 & 1 & 2\\ + 2 & 2 & 1 & 0 & 1\\ + 3 & 3 & 2 & 1 & 0 + \end{array} + % 内层第二行表格组结束 +\end{array}\)
+$$
+\left[
+ \begin{array}{cc|c}
+ 1&2&3\\
+ 4&5&6
+ \end{array}
+\right]
+$$
+
显示:
+其中 cc|c
代表在一个三列矩阵中的第二和第三列之间插入分割线。
Note
+对于部分希腊字母,例如 \Alpha
在预览时会生效但在网页上渲染会出现错误,因此这里的希腊字符写法参考 Greek letters 进行编辑,更多详情请参考 #39 LaTeX文档希腊字母大写显示有问题 。
输入 \小写希腊字母英文全称
和 \首字母大写希腊字母英文全称
来分别输入小写和大写希腊字母。
A B \Gamma \Delta E Z H \Theta
\(A B \Gamma \Delta E Z H \Theta\)
+I K \Lambda M N \Xi O \Pi
\(I K \Lambda M N \Xi O \Pi\)
+P \Sigma T \Upsilon \Phi X \Psi \Omega
\(P \Sigma T \Upsilon \Phi X \Psi \Omega\)
+\alpha \beta \gamma \delta \epsilon \zeta \eta \theta
\(\alpha \beta \gamma \delta \epsilon \zeta \eta \theta\)
+\iota \kappa \lambda \mu \nu \omicron \xi \pi
\(\iota \kappa \lambda \mu \nu \omicron \xi \pi\)
+\rho \sigma \tau \upsilon \phi \chi \psi \omega
\(\rho \sigma \tau \upsilon \phi \chi \psi \omega\)
+部分字母有变量专用形式,以 \var-
开头。
\varepsilon \digamma \varkappa \varpi
\(\varepsilon \digamma \varkappa \varpi\)
+\varrho \varsigma \vartheta \varphi
\(\varrho \varsigma \vartheta \varphi\)
+\aleph \beth \gimel \daleth
\(\aleph \beth \gimel \daleth\)
+Note
+该指南摘自 LaTeX公式手册 ,你可以点击链接来了解更多内容。
+Note
+本文提供了Markdown的基本撰写说明。因为主题设置的缘故可能会导致某些效果不生效,遇到此问题请前往 issues 进行反馈。
+你的内容标题应该从二级标题( ##
)开始
# 一级标题
+## 二级标题
+### 三级标题
+
我们只知道 地球 具有让人类生存的环境,还有 火星 ,也许还有 其它星球 。
我们只知道 **地球** 具有让人类生存的环境,还有 ~~火星~~ ,也许还有 *其它星球* 。
+
---
+***
+
你应该避免直接内嵌 HTML 代码。
+[link name](link url) 或者 <link url>
+
多翻译引擎
+多语言互译
+- 多翻译引擎
+
+ * 谷歌翻译
+ * 微软翻译
+ * 有道翻译
+ * 百度翻译
+ * 阿里翻译
+ * DeepL 翻译
+
+- 多语言互译
+
使用单引号 code
来表示行内代码,使用三引号来表示代码块。
code
+
并且对于代码块,你应该写上对应的语言。
+你应该避免内嵌 HTML 来插入图片。
+
+
下面是一段注释
+++这里是一段注释 (
+<blockquote></blockquote>
) +这是注释的第二行
# 这里是注释里面的代码段
+print("hello")
+
++注释
+++注释嵌套 +注释嵌套
+
下面是一段注释
+> 这里是一段注释 (`<blockquote></blockquote>`)
+> 这是注释的第二行
+
+# 这里是注释里面的代码段
+print("hello")
+
+> 注释
+>> 注释嵌套
+>> 注释嵌套
+
暂不支持 emoji
语法,但是可以直接从 emoji
表情大全拷贝表情到文档,比如:
+🍊 🍇 😀 😅 😇
++访问http://emojihomepage.com/以获取更多emoji
+
H2O, y = x2
+H~2~O, y = x^2^
+
我能干饭我自豪。1
+我能干饭我自豪。[^干饭人]
+
+[^干饭人]: 老子说道
+这会在文章末尾进行注解
+
Header 1 | +Header2 | +
---|---|
Cell 1 |
+Cell 2 link | +
Cell 3 | +Cell 4 | +
| Header 1 | *Header2* |
+| -------- | -------- |
+| `Cell 1` | [Cell 2](http://example.com) link |
+| Cell 3 | **Cell 4** |
+
- [x] 任务1
+- [x] 任务2
+- [ ] 任务3
+- [ ] 任务4
+
文档支持 LaTeX
,关于 LaTeX
,你可以访问 LaTeX公式手册 来获取帮助。
使用 mermaid 可以画很多类型的图表, 详细的语法和支持请看官网
+sequenceDiagram
+ Alice->>John: Hello John, how are you?
+ loop Healthcheck
+ John->>John: Fight against hypochondria
+ end
+ Note right of John: Rational thoughts!
+ John-->>Alice: Great!
+ John->>Bob: How about you?
+ Bob-->>John: Jolly good!
+
```mermaid
+ sequenceDiagram
+ Alice->>John: Hello John, how are you?
+ loop Healthcheck
+ John->>John: Fight against hypochondria
+ end
+ Note right of John: Rational thoughts!
+ John-->>Alice: Great!
+ John->>Bob: How about you?
+ Bob-->>John: Jolly good!
+ ```
+
老子说道 +这会在文章末尾进行注解 ↩
+对于 Pull Request,请遵守以下几点要求1:
+fix #xxxx
字段,其中 xxxx
代表 issue 的编号。对于 Pull Request 的标题,推荐使用如下格式书写:
+<修改类型>(<文件名>): <修改的内容> (<对应 issue 的编号>)
+
修改类型分为如下几类:
+feat
:用于添加内容的情况。fix
:用于修正现有内容错误的情况。refactor
:用于对一个页面进行重构(较大规模的更改)的情况。revert
:用于回退之前更改的情况。示例:
+fix(sepecification/specification): 修改代码注释使描述更清晰
fix: plugins/xxx 不在目录中 (#2)
feat(software/mathpix): official website
refactor(specification/template): 整理页面内容
修改自 OI-wiki: 如何参与 ↩
+朋友你好,如果你有一个很棒的工具希望和大家分享,但是你不知道怎么写一个markdown,这里提供了一个可以参考的模版
+我们希望提交的pr在简介部分描述这个工具的:
+我们希望提交的pr在安装部分描述:
+$clang --version
检查 clang
是否成功安装我们希望提交的pr在推荐理由部分描述:
+我们希望提交的pr在参考部分提供一些常用的参考,例如:
+