wenqiang li
wenqiang li
## 宏 rust中以`!`结尾的函数基本都是宏,例如: `print!` `vec!`等。 使用 `macro_rules!` 的 `声明(Declarative)`宏,和 三种 `过程(Procedural)`宏: + 自定义 #[derive] 宏在结构体和枚举上指定通过 derive 属性添加的代码 + 类属性(Attribute-like)宏定义可用于任意项的自定义属性 + 类函数宏看起来像函数不过作用于作为参数传递的 token ### 声明宏 下面是`vec!`的简单定义和说明: ```rust #[macro_export] // 表明只要导入了定义这个宏的 crate,该宏就应该是可用的。...
## 命令行解析 默认:`env::args().collect()` ### 使用[clap](https://crates.io/crates/clap)解析 参数分为 **可选参数(Options)** 和 **位置参数(Arguments)**。 #### 使用Builder模式构建命令行参数 ```rust use clap::{Arg, Command, ArgAction}; fn main() { let matches = Command::new("My Test Program") .version("0.1.0") .author("Hackerman Jones ") .about("Teaches...
# Rust学习笔记 >> 在线运行rust代码: https://play.rust-lang.org/ >> Rust第三方包: https://crates.io/ >> Rust标准库:https://doc.rust-lang.org/std/index.html ## 基础数据类型 ### 变量和可变性 let let mut ### 常量 const ### 标量类型(整型、浮点型、布尔型和字符) #### 整型 长度 | 有符号类型 | 无符号类型 --...
ubuntu公司推出一款虚拟机[multipass](https://multipass.run)可以在linux/Win/macOS系统上运行ubuntu系统。  ### 安装 https://multipass.run/install macOS可以使用brew安装 ```zsh brew install multipass ``` 安装好后查看版本和帮助 ```zsh multipass -h multipass --version ``` 查看虚拟机支持的镜像 ```zsh multipass find 22.04 jammy 20240614 Ubuntu 22.04 LTS ``` 安装虚拟机...
+ 创建函数 ```sql DROP FUNCTION IF EXISTS myParserArray ON CLUSTER default; CREATE FUNCTION myParserArray ON CLUSTER default AS (multi) -> arraySum(arrayMap(x -> toFloat32OrZero(trimBoth(x)), splitByChar(',', ifNull(multi, '')))); DROP FUNCTION IF EXISTS...
### 概述 一些场景需要选择性的将指定部分的流量劫持到服务端。 例如,ssl vpn就是把客户机访问公司内网的流量劫持后通过加密隧道转到公司内网。  ### 原理 加密隧道可以用:`socks5 over tls` 实现。 如何进行流量劫持呢?有2种: 1. 使用操作系统代理。 2. 使用tun等虚拟网卡。 #### 使用操作系统代理 操作系统网络设置一般都支持代理,只需要把本地的socks5客户端监听端口配置到网络设置SOCKS代理就可以实现流量劫持。 一般只有浏览器才会使用这个代理,每个app都有自己配置socks代理的地方,不通用。  #### 使用tun虚拟网卡 TUN模拟了网络层设备,用户态可以直接读该tun设备,读到的数据是IP报文。如果要拿到payload就需要解析tcp/ip协议,有两种方案得到payload: 1. 使用操作系统的协议栈解析。 2. 用户态解析tcp/ip协议栈。 #####...
### 概述 ngx中http有11个阶段,其中有7个阶段可以添加模块,例如NGX_HTTP_ACCESS_PHASE和NGX_HTTP_CONTENT_PHASE阶段,这两个阶段有明显的先后顺序,先执行access阶段再执行content阶段。但是相同阶段的不同模块的执行顺序是什么样的呢?和什么有关系呢? ### 执行阶段 解析完请求行、请求头以后就会调用ngx_http_process_request函数,该函数又调用了ngx_http_handler,ngx_http_handler又调用ngx_http_core_run_phases执行http的10个阶段,代码如下。 ```c void ngx_http_core_run_phases(ngx_http_request_t *r) { ngx_int_t rc; ngx_http_phase_handler_t *ph; ngx_http_core_main_conf_t *cmcf; cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module); ph = cmcf->phase_engine.handlers; while (ph[r->phase_handler].checker) { rc = ph[r->phase_handler].checker(r,...
有时候我们需要执行一些有安全隐患的代码,需要放置到沙盒中执行。 例子1. 提供一个执行环境,指定一些函数和常量,可以自定义函数,可以自定义变量。不允许覆盖环境提供的函数和变量。 ```lua #! /usr/bin/env luajit local metaenv = {print = _G.print, _VERSION=0.01, pairs=_G.pairs, string=_G.string} local env = setmetatable({test = 'test env'}, { __index = metaenv, __newindex=function(t, k, v)...
### Description The `ctx.ai_token_usage` may not get the correct value. The `events` array after splitting may contain empty strings, which can cause subsequent `event` to be skipped. #### Which issue(s)...