leevis.com icon indicating copy to clipboard operation
leevis.com copied to clipboard

Blog

Results 122 leevis.com issues
Sort by recently updated
recently updated
newest added

### 环境准备 使用pyenv管理python版本,切换到3.8.5。 安装线性回归测试所需要的包: ``` pip install numpy pip install matplotlib pip install scikit-learn pip install pandas pip install scipy pip install graphviz ``` ### 训练测试模型 ```py import numpy as...

### pyenv **pyenv** 是一个流行的工具,用于在同一系统中管理多个 Python 版本。使用 pyenv,你可以轻松地切换全局 Python 版本,或者为特定项目设置本地 Python 版本。以下是使用 pyenv 管理 Python 版本的基本步骤: 安装 pyenv: 在 Mac 上,你可以通过 Homebrew 来安装 pyenv: ```zsh brew update brew install pyenv ```...

@State 是swiftUI的一个属性装饰器,可以将被修饰的属性改为有状态的,当其发生改变时,与其绑定的组件会自动更新。 @Binding 同样是个属性装饰器,修饰子组件的属性,绑定父State的属性。 ```swift import SwiftUI struct ContentView: View { var body: some View { VStack { Image(systemName: "globe") .imageScale(.large) .foregroundStyle(.cyan) Text("Hello, world!") } .padding() } } struct RowContent:...

## 概述 写好的一篇提交了,等提交完发现丢了。。。 丢了。。。只能简单回忆记录一下了。 了解属性包装器前先要了解存储属性和计算属性,属性包装器实际上就是对有关系的存储属性和计算属性进行包装。 当需要在存储属性赋值时做一些逻辑,常规的做法是把该存储属性定义为private的,用计算属性封装一层。 例如:需要把属性值限制在小于12,下面是个例子 ```swift struct Test { private var _x:Int = 0 var x:Int { get {self._x} set {self._x = min(12, newValue)} } private var _y:Int...

openresty、redis都有对lua的支持,通过lua脚本扩展c程序的功能。尤其是openresty,在nginx的基础上添加了lua的支持,使得nginx的开发变的简单多了。 用openresty开发了个项目,在lua虚拟机可以取到nginx的一些变量,也可以修改一些变量。然后nginx再在不同的阶段调用这些lua代码实现功能的扩展。 虽然还没看过openresty的代码,猜测是在nginx启一个lua 的虚拟机,潜入一些nginx的变量和函数。这样lua虚拟机就可以获得nginx的一些变量。然后在nginx的不同阶段执行这些lua代码。 大概的例子如下,c代码相当nginx的代码,test.lua代码相当于开发的lua脚本。 ``` c // gcc -o tcall tcalllua.c -I /usr/local/include -L /usr/local/lib -llua #include #include #include #include #include int add(lua_State* L) { int x = luaL_checknumber(L,1);...

### 概述 http3并没有改变http1的语义: >> 1. 请求只能由客户端发起,而服务器针对每个请求返回一个相应。 >> 2. 请求与响应都由Header、Body(可选)组成,其中请求必须包含有URL和方法,而响应必须含有相应码。 >> 3. Header中各Name对应的含义保持不变。 只是改变了编码格式和传输: >> 1. 采用二进、静态表、动态表、Huffman算法 对 Http Header编码,不只提供了高压缩率,还加快了发送端编码、接收端解码的速度。 >> 2. 基于UDP在应用层实现无序连接,并在此基础上通过有序的QUIC Stream提供了多路复用,连接迁移。 ![image](https://github.com/vislee/leevis.com/assets/6851261/d1d3697a-2210-4464-93c3-5ddf935eec8f) (图片来自:[https://blog.cloudflare.com/http3-the-past-present-and-future/)](https://blog.cloudflare.com/http3-the-past-present-and-future/%EF%BC%89) >> ![image](https://github.com/vislee/leevis.com/assets/6851261/8ae43d1a-cdaf-4cce-88f7-e81f7ed45afd) 在UDP报文头部与HTTP消息之间,共有3层头部 ![image](https://github.com/vislee/leevis.com/assets/6851261/2fb9b1ee-b3b5-4d5c-adda-a36ad06bfacf) 这3层Header实现的功能各不相同:...

### 概述 quic 协议是一个基于UDP实现的应用层通用的传输协议,有点类似于Tcp,有流控、保证数据的完整性。但是又规避了tcp的一些列缺陷,例如队头阻塞、慢启动、3次握手等。 ### 代码跟踪 先从一个[例子](https://github.com/quic-go/quic-go/blob/master/example/echo/echo.go)看起: ```go func echoServer() error { listener, err := quic.ListenAddr(addr, generateTLSConfig(), nil) if err != nil { return err } conn, err := listener.Accept(context.Background())...

### 概述 [chisel](https://github.com/jpillora/chisel) go编写的隧道工具,支持tcp/udp。 官方介绍是“a fast TCP/UDP tunnel, transported over HTTP, secured via SSH.” 编译后只有一个chisel,同时支持客户端和服务端。 ``` chisel -h Usage: chisel [command] [--help] Version: 0.0.0-src (go1.19.6) Commands: server - runs chisel...

### 概述 bpf可以跟踪内核函数,并打出调用栈。例如我们可以跟踪`socket()`的创建。 跟踪`nc`这个程序的`socket`调用。 ```zsh $ objdump -tT /bin/nc |grep socket 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 socket ``` socket 这个函数是定义在glibc的,ldd看下依赖: ```zsh ldd /bin/nc |grep libc.so libc.so.6 => /lib64/libc.so.6 (0x00007f045d4b2000) ```...

### 概述 ebpf是什么,有什么作用在前面的笔记中已经做了记载。 本篇学习[cilium/ebpf](https://github.com/cilium/ebpf)项目。 ### 运行 先跑起来。。。 ebpf需要在比较新的内核才支持。我本地ubuntu22.10,内核是5.19.0。 本项目建议不要折腾centos了,clang和llvm很难找到源。 ubuntu先安装clang、llvm、golang, 我本地clang和llvm是15,golang是1.19。 cilium/ebpf项目编译还需要安装docker。 ```sh $ apt-cache search clang $ apt-cache search llvm $ apt-cache search golang $ apt-cache search docker.io $...