ip、tcp、udp 首部校验和算法的 Python 实现
ip 首部校验和、tcp/udp 首部校验和能够判断网络传输中是否出现丢包、错包等。下面分别介绍它们的计算方法和 python 实现。
ip 首部校验和ip 首部校验和是针对 ip 数据包的包头20字节部分进行校验。假设我们有如下20字节的 ip 包头数据(16进制格式):
145 00 00 30 80 4c 40 00 80 06 b5 2e d3 43 11 7b cb 51 15 3d
45:4表示 ip 版本号,这里是 ipv4,5表示首部数据长度,为5个32比特,即20字节;
00 30: 表示 ip 包总长度为 0x0030=48字节,减去头部20字节,数据部分为28字节;
80 4c:表示标识符;
40 00:3比特标志和13比特片偏移量;
80 06:80表示ttl值0x80=128,06表示 tcp 协议(0x11=17表示udp协议);
b5 2e:表示 ip 首部校验和;
d3 43 11 7b:表示源地址0xd3, 0x43, 0x11, 0x7b = (211, 67, 17, 123);
cb 5 ...
开启 wsl 上的 cron 服务
wsl 是 windows 的 linux 子系统,使得在 windows 上使用 linux 非常丝滑,而不用安装虚拟机。但是,有些服务在 wsl 默认是关闭的,需要设置才能使用。下面介绍如何在 wsl ubuntu 上开启使用 cron,cron 能够进行定时任务的执行。
用户添加到 crontab 组命令如下:
1sudo usermod -a -G crontab jinzhongxu
开启 cron 服务123sudo service cron start# 或者sudo /etc/init.d/cron start
设置开机自启 cron 服务访问我的另一篇博文: Windows10 子系统开机自启动SSH等服务,把如下命令添加到 wsl.vbs 中:
1ws.run "wsl -d Ubuntu -u root /etc/init.d/cron start", vbhide
linux 防火墙
无论是 Windows 系统还是 Linux 系统都有防火墙,防火墙能够防护电脑免受外界攻击,保护电脑安全。本篇介绍如何在 Ubuntu/Debian/CentOS 上安装和使用防火墙。
Ubuntu/Debian 上防火墙安装防火墙
12sudo apt updatesudo apt install ufw
防火墙使用
1234567891011121314151617181920212223242526272829303132# 开启防火墙sudo ufw enable# 查看防火墙状态sudo ufw status# 开启指定端口sudo ufw allow 22# 开启指定端口的tcpsudo ufw allow 22/tcp# 打开端口范围,此时必须指定 tcp 或 udpsudo ufw allow 7000:7070/tcp# 允许指定IP地址sudo ufw allow from xxx.xxx.xxx.xxx# 允许指定IP地址访问指定端口sudo ufw allow from xxx.xxx.xxx.xxx to any port ...
java 一条语句打印多个变量
在 java 程序中,想要通过一条语句打印输出多个变量的值,就像在 python 中那样,将变量以逗号分隔罗列到 print 函数中是不行的,在 java 中可以使用如下方法。
字符串拼接和占位符
通过字符串拼接在函数 System.out.println() 中;
通过占位符在函数 System.out.printf() 中;
12345678910111213141516public class Main { public static void main(String[] args) { System.out.println("Hello World!"); int i = 2147483647; int i2 = -2147483648; int i3 = 2_000_000; int i4 = 0xff0000; int i5 = 0b1000000000; long l = 9000000000000000000L; ...
利用 jupyterhub 搭建多用户 python 开发环境
JupyterHub 是为多个用户提供 JupyterLab 的集成服务系统,每个用户相互隔离。在 JupyterHub 版本低于 2.0.0 时,可采用该方法部署。本篇介绍对于最新版 JupyterHub 2.0.0 (截止到2021年12月21日)的部署方法。相关环境是 miniconda, wsl (ubuntu),所有命令以 root 用户运行。
安装 miniconda12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849# 切换到主目录,下载miniconda并安装cd wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shchmod +x Miniconda3-latest-Linux-x86_64.sh./Miniconda3-latest-Linux-x86_64.sh# 选择安装在 /usr/local/minicondaecho 'ex ...
Mac 上通过 launchctl 开启守护进程
Linux 系统(如 Debian 10)上可以方便的使用 systemctl 开启守护进程,关闭守护进程,那么在 Mac 上如何设置自定义守护进程并开启、关闭它呢?本篇以 JupyterHub 为例,演示在 Mac 上开启 JupyterHub 守护进程. 本篇假设已经完成了 Miniconda,JupyterHub 和 configurable-http-proxy 的安装。
创建 plist 文件创建以 com.jupyterhub.app.plist 命名的文件,放在 /Users/jinzhongxu/Library/LaunchAgents 目录下,文件内容如下
123456789101112131415161718192021222324252627<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/ ...
在 Python 中使用 yaml 做配置文件
YAML (YAML Ain’t Markup Language™) 是一种直观的能够被电脑识别的数据序列化格式,容易被人类阅读,并且容易和脚本语言交互。YAML 类似于 XML,但是语法比 XML 简单得多,对于转化成数组或可以 hash 的数据时是很简单有效的。
yaml 的官方网站是:https://yaml.org
安装 yaml
1pip install PyYAML
读取 yaml 文档有文档 test.yaml,内容如下
12345678910name: Tom Smithage: 37spouse: name: Jane Smith age: 25children: - name: Jimmy Smith age: 15 - name: Jenny Smith age: 12
在 python 中利用 yaml 读取
123456import yamlfilepath = "data/test.yaml"file = open(file=filepath)file_str = yaml.load(file, yam ...
在 Python 中使用 importlib 和 getattr 动态调用函数
Python 是一种动态编程语言。在编写 Python 代码时利用 importlib 能够动态的导入需要的模块,利用 getattr 能够获取模块的属性或方法,返回属性值和函数。本篇对它们进行介绍,并给出一个例子展示如何使用它们。
importlibimportlib 是一个模块,使用时需要首先导入该模块。
1import importlib
在代码中动态导入其他模块的方法
1expr_module = importlib.import_module("mymodule.test")
getattrgetattr 是内置函数,用于返回一个对象的属性值。
如,编写一个类:
123class Test: def __init__(self): self.name = 'test'
获取实例的属性值
12t = Test()getattr(t, 'name')
结果
1'test'
一个例子编写模块 primes.py,放到当前目录的 pyscripts 文件夹下
123456 ...
Python中NotImplementedError的使用
Python 是一种面向对象的编程语言,子类可以继承父类的方法。父类可以通过某种手段限制子类中必须重写父类的指定方法,否则报错。这种手段就是 NotImplementedError.
如果子类不重写父类的方法1234567891011class ParentClass: def nie_func(self): # 要求子类中必须实现该方法,否则在子类实例中不能调用该方法 raise NotImplementedError("parent class nie methods not implemented")class ChildClass(ParentClass): passcc = ChildClass()cc.nie_func()
结果如下:
123456789101112131415---------------------------------------------------------------------------NotImplementedError Traceba ...
单目标跟踪数据集
目标跟踪数据集有很多,这里按发布时间顺序汇集单目标跟踪数据集,给出链接以及数据集说明。
OTB年份:2013、2015
OTB 数据集是单目标跟踪最早数据集。分为 OTB-2013(51个视频)、OTB-2015 (在OTB-2013上增加视频,共98个视频,又名 OTB-100),其中 OTB-100 前 49 个视频又名 OTB-50. 虽然 OTB-100 只有 98 个视频,但是,其中两个视频 Skating2 和 Jogging 分别针对两个目标进行标注,可分别看作 2 个视频。因此,称为 OTB-100. 其中 Skating2 在 OTB-50 中,因此 OTB-50 事实上也包含 50 个标注视频。
相关博客:单目标跟踪OTB、VOT数据集介绍
相关文章:Y. Wu, J. Lim and M. -H. Yang, “Online Object Tracking: A Benchmark,” 2013 IEEE Conference on Computer Vision and Pattern Recognition, 2013, pp. 2411-2418, do ...
使用命令行更改苹果电脑的 hostname
更改苹果电脑名称可在系统便好设置里的共享编辑更改,但重启后终端上却没有发生变化,这篇介绍 Mac Book Pro 更改终端 hostname 方法。
打开终端,运行如下命令,其中 newhostname为你想设置的新名字。
123scutil --set ComputerName "newhostname"scutil --set LocalHostName "newhostname"scutil --set HostName "newhostname"
查看设置后的名字。
12345scutil --get HostName# 或者hostname# 或者查看所有上面的设置echo ComputerName LocalHostName HostName | xargs -n1 -t scutil --get