【Git】项目协作开发教程

【Git】项目协作开发教程

1 前言

近期,我在 GitHub 平台参与项目协同开发的过程中,系统掌握了规范的 Git 操作流程。从遵循 Conventional Commit 规范撰写提交信息,到将代码提交至 Fork 后的个人仓库,再到通过 Pull Request(PR)向上游原仓库贡献代码,每一个环节都经过实践打磨,逐步形成了标准化的操作习惯。为了梳理所学、方便后续查阅,同时也为有类似协作需求的开发者提供参考,特此整理这份 Git 操作指南,涵盖从基础配置到协作收尾的全流程,力求步骤清晰、重点突出、可直接使用。

2 Git 基础全局配置

在使用 Git 前,需先配置全局用户名邮箱,这是提交代码时的身份标识,仅需配置一次。

1
2
3
4
5
# 配置全局用户名(替换为你的 GitHub 用户名)
git config --global user.name "Celyn"

# 配置全局邮箱(替换为你的 GitHub 绑定邮箱)
git config --global user.email "1249140039@qq.com"

2.1 验证配置是否成功

执行以下命令,查看已配置的用户名和邮箱:

1
2
3
4
5
# 查看用户名
git config user.name

# 查看邮箱
git config user.email

注意:请务必确认好本地 Git 用户配置是否生效。

小故事😢:我在实验室电脑执行 git push、提交 PR 时,由于疏忽检查,提交记录带入电脑里留存的其他用户信息,导致 pr 时对方被设为共同作者,并且在我 fork 的仓库中显示上传 commit的用户并不是自己。所以一定要提前核对清楚本地个人账号信息,不然你的辛苦付出最后反倒会为他人做了嫁衣。

阅读更多
【n8n】基于WSL2-Docker完整部署教程

【n8n】基于WSL2-Docker完整部署教程

1 引言:为什么使用 n8n

n8n 是一款开源免费低代码自动化工作流工具,支持可视化拖拽、对接海量第三方服务(数据库、企业微信、飞书、网盘、接口等),可自建部署、数据私有不托管,搭配 WSL2 + Docker 一键部署,轻量化不占用 Windows 主环境,方便日常自动化流程搭建、定时任务、数据同步等场景。

2 WSL 下载配置

2.1 WSL 内核更新

在 CMD/PowerShell 里输入:

1
wsl --update

等待自动下载安装 WSL2 内核,跑完就好了。

2.2 手动安装 Ubuntu22.04(清华镜像离线导入)

使用清华镜像源进行下载,点击该链接后:如果你电脑是 Windows 64 位,下滑找到jammy-server-cloudimg-amd64-root.tar.xz下载即可

  1. 下载好后操作把文件放到:F:\wsl\,没有文件夹自行创建即可

  2. 接着打开 CMD 或者 PowerShell创建文件夹,输入:

阅读更多
神经网络优化核心:鞍点而非局部极小值

神经网络优化核心:鞍点而非局部极小值

1 前言

当模型在训练集上损失居高不下,且增加模型复杂度后损失未降反升时,问题通常不在于模型 bias,而在于优化过程本身——梯度下降易在高维损失景观中被困于鞍点,本文结合 Hessian 矩阵与实验证据,梳理相关核心结论。

2 梯度下降收敛停滞的关键原因

梯度下降过程中,当梯度∇L (θ)=0 时,损失函数值不再变化,优化陷入停滞。造成这一现象的原因并非仅为局部最小值点,还可能是鞍点,两者核心区别如下:

  • 局部最小值点(local minimum point):梯度为 0,且任意方向移动损失均增大,优化达到局部最优;

  • 鞍点(saddle point):梯度为 0,存在一对正交方向,沿其中一个方向移动损失增大,沿另一个方向移动损失减小,并非最优解,却会导致梯度下降停滞。

综上,局部最小值点与鞍点的梯度均为 0,这两类梯度为 0 的点统称为驻点。


那么当我们遇到梯度为 0 的驻点时,如何判断其是局部最小值点还是导致优化停滞的鞍点呢?此时需要引入 Hessian 矩阵进行判别:

3 Hessian 矩阵与二次型

要判断一个临界点到底是什么,我们需要用到二阶泰勒展开,在临界点 $\theta’$ 附近近似损失函数:
$$
L(\theta) \approx L(\theta’) + \frac{1}{2} (\theta - \theta’)^T H (\theta - \theta’)
$$
这里的 $H$ 就是Hessian 矩阵,是由损失函数 L (θ) 各参数的二阶偏导数构成的对称方阵,用于刻画损失函数曲率,辅助判断驻点类型。

阅读更多
【IP地址防护】-预防WebRTC泄露

【IP地址防护】-预防WebRTC泄露

什么是 WebRTC 泄露(WebRTC Leak),如何预防

WebRTC(Web Real-Time Communication)是浏览器提供的实时音视频与点对点数据通道技术。WebRTC 泄露 指的是在使用浏览器或某些应用时,WebRTC 的连接流程(ICE 候选交换)意外暴露了本地或真实公网 IP 地址,导致即便你在用 VPN/代理,目标网站或第三方仍可能看到你的真实 IP 地址或局域网地址,从而破坏隐私与匿名性。

WebRTC 泄露简要原理

  1. 建立 P2P 连接时,浏览器会通过 STUN/TURN server 获取 ICE candidates(候选连接地址),这些候选包括:

    • host(本机局域网 IP)
    • srflx(通过 STUN 获得的公网映射 IP)
    • relay(通过 TURN 中继的地址)
  2. 如果浏览器本地或网页脚本暴露/发送了 hostsrflx 类型的候选,第三方就可能获知本机真实 IP(包括局域网 IP 与公网真实 IP)。

  3. VPN/代理通常只影响浏览器的普通 HTTP(S) 流量,但 WebRTC 的 STUN 请求可能绕过这些路径,从而暴露真实地址。

chrome需要安装扩展来避免WebRTC 泄露,推荐一个开源扩展
chrome扩展地址

使用 IPPure 检查 WebRTC 泄露情况

安装前:

IPPure链接地址

安装后 :


阅读更多
【爬虫脚本自动化录制】playwright-codegen使用教程

【爬虫脚本自动化录制】playwright-codegen使用教程

前言

在做 Web 自动化测试、爬虫脚本开发时,手动写定位、写操作步骤往往耗时又容易出错。Playwright 官方提供了一个零代码录制神器:codegen,只需要在浏览器里用鼠标点击,就能自动生成可直接运行的 Python/Java/JS 自动化代码,极大提升开发效率。


什么是 playwright codegen?

codegen 是 Playwright 内置的交互式录制工具,核心功能:

  • 记录鼠标点击、输入、选择、滚动、切换页面等操作

  • 实时生成高质量、可直接运行的代码

  • 自动识别 iframe、弹窗、下拉框等复杂场景

  • 支持 Python / Node. js / Java / C# 多语言导出

适用场景:快速生成登录脚本、表单提交、页面遍历、爬虫操作等。


环境准备

安装 Playwright

阅读更多
【爬虫项目解析】-小鹅通m3u8逆向解密

【爬虫项目解析】-小鹅通m3u8逆向解密

打开 F12, 勾选保留日志,进行手动登录,找到请求方法为 POST 的信息,这就是登录时向服务器发送的请求,找到 cookie 的信息并记录。

点击负载可以找到发起登录请求时传入的参数信息

  • ticket:验证码票据(用来校验你输入的验证码)

  • randstr:随机字符串(防重放攻击)

  • verification_type:验证类型(1 通常代表密码登录)

  • session_id:当前会话 ID

  • phone:你的登录手机号(明文)

  • password:你的密码(这里看起来是部分掩码显示,实际传输时大概率是加密或脱敏后的)

  • keep_login:是否记住登录状态(false 代表不记住)

  • nation_login:国家 / 地区登录标识(1 通常代表国内)

播放视频时产生一系列 Session 会话,这些视频相关行都是客户端向服务器请求的视频分片 TS分片的会话,类型时 video/mp2t,也就是 HLS 流媒体切片文件,第四第五列分别是目标服务器域名以及请求的视频分片 url 路径,但是知识 ts 切片,需要找到完整的 m3u8 文件

ctrl+f 搜索 m3u8 的session会话

请求头中包含 url 信息,需要加上 host 域名前缀

阅读更多
【cv-AI攻防】-Task1:赛题方案解读

【cv-AI攻防】-Task1:赛题方案解读

步骤一:构建YOLO数据集

由于比赛原始数据集较大,我们采样部分数据构建训练集和验证集:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
if os.path.exists('yolo_seg_dataset'):
shutil.rmtree('yolo_seg_dataset')

os.makedirs('yolo_seg_dataset/train')
os.makedirs('yolo_seg_dataset/valid')

def normalize_polygon(polygon, img_width, img_height):
return [(x / img_width, y / img_height) for x, y in polygon]

# 采样训练集
for row in training_anno.iloc[:10000].iterrows():
shutil.copy(row[1].Path, 'yolo_seg_dataset/train')

img = cv2.imread(row[1].Path)
img_height, img_width = img.shape[:2]
txt_filename = os.path.join('yolo_seg_dataset/train/' + row[1].Path.split('/')[-1][:-4] + '.txt')
with open(txt_filename, 'w') as up:
for polygon in row[1].Polygons:
normalized_polygon = normalize_polygon(polygon, img_width, img_height)
normalized_coords = ' '.join([f'{coord[0]:.3f} {coord[1]:.3f}' for coord in normalized_polygon])
up.write(f'0 {normalized_coords}\n')

# 采用验证集
for row in training_anno.iloc[10000:10150].iterrows():
shutil.copy(row[1].Path, 'yolo_seg_dataset/valid')

img = cv2.imread(row[1].Path)
img_height, img_width = img.shape[:2]
txt_filename = os.path.join('yolo_seg_dataset/valid/' + row[1].Path.split('/')[-1][:-4] + '.txt')
with open(txt_filename, 'w') as up:
for polygon in row[1].Polygons:
normalized_polygon = normalize_polygon(polygon, img_width, img_height)
normalized_coords = ' '.join([f'{coord[0]:.3f} {coord[1]:.3f}' for coord in normalized_polygon])
up.write(f'0 {normalized_coords}\n')

逐行代码分析

好的,我们逐行分析这段代码,它的主要功能是将训练集和验证集的数据从原始数据集中复制到新的目录中,并将多边形的坐标标准化为相对坐标。

代码逐行分析

1
2
if os.path.exists('yolo_seg_dataset'):
shutil.rmtree('yolo_seg_dataset')
  • 功能: 检查yolo_seg_dataset目录是否存在。如果存在,则使用shutil.rmtree删除该目录及其内容。shutil常用于文件与目录的处理。

  • 目的: 确保每次运行代码时,数据集是干净的,没有旧的数据。

1
2
os.makedirs('yolo_seg_dataset/train')
os.makedirs('yolo_seg_dataset/valid')
  • 功能: 创建两个新的子目录trainvalid,用于存放训练集和验证集数据。

  • 目的: 为之后的文件复制和标签文件创建所需的目录结构。

阅读更多
【lagent】agent搭建

【lagent】agent搭建

启动webui服务

使用lmdeploy启动一个api_server

1
2
conda activate agent_camp3
lmdeploy serve api_server /share/new_models/Shanghai_AI_Laboratory/internlm2_5-7b-chat --model-name internlm2_5-7b-chat

另开一个终端使用stremlit启动agent_web应用

1
2
3
cd /root/agent_camp3/lagent
conda activate agent_camp3
streamlit run examples/internlm2_agent_web_demo.py

本地powershell建立ssh连接,进行端口映射

Q&A

阅读更多
【评测】opencompass-司南
【Fine-tuning】XTuner微调个人小助手