FTP 通信分为主动 active 被动 PASV 模式。
FTP 通信会占用两个 TCP 通道:一个用于命令,一个用于数据。
主动、被动是站在(响应命令的)服务端的角度来说:
FTP 客户端首先向服务端 21 端口发送命令,然后
- (最初只有)主动模式:客户端启动端口,服务端连接
- (解决痛点)被动模式:服务端启动端口,客户端连接
windows 平台下 cmd/powershell 中的 ftp 命令不支持被动模式,文件管理器支持被动模式。
FTP 通信分为主动 active 被动 PASV 模式。
FTP 通信会占用两个 TCP 通道:一个用于命令,一个用于数据。
主动、被动是站在(响应命令的)服务端的角度来说:
FTP 客户端首先向服务端 21 端口发送命令,然后
windows 平台下 cmd/powershell 中的 ftp 命令不支持被动模式,文件管理器支持被动模式。
摘抄自《计算机网络(第7版)-谢希仁》教材,读书笔记。
OSI 的七层协议体系结构的概念清楚,理论也较完整,但它既复杂又不实用。
TCP/IP 的体系结构则不同,但它现在却得到了非常广泛的应用。TCP/IP 是一个四层的体系结构,它包含应用层、运输层、网际层和网络接口层(用网际层这个名字是强调这一层是为了解决不同网络的互连问题)。不过从实质上将,TCP/IP 只有最上面的三层,因为最下面的网络接口层并没有什么具体内容。
互联网是由大量的异构(heterogeneous)网络通过路由器(router)相互连接起来的。互联网使用的网络层协议是无连接的网际协议 IP(Internet Protocol) 和许多种路由选择协议,因此互联网的网络层也叫做网际层或 IP 层。
局域网虽然是个网络,但我们并不把局域网放在网络层中讨论。这是因为在网络层要讨论的问题是多个网络互联的问题,是讨论分组(packet)怎样从一个网络,通过路由器,转发到另一个网络。在本章中我们研究的是在同一个局域网中,分组(packet)怎样从一台主机传送到另一台主机,但并不经过路由器转发。从整个互联网来看,局域网仍属于数据链路层的范围。
packet 小包裹、信息包,在教材中一般翻译为“分组”,但“分组”在日常对话中多理解成动词,给读者造成困扰。分组:
Managing C++ libs with CMake ExternalProject and Git
CMake has a functionality called ExternalProject_add, which can use, to automatically check out a git repository, and build that as part of the normal build process.
Of course, the same functionality would be possible with git submodules, but honestly, I always found this part of git rather cumbersome, and unnecessarily complex, for what I want to do.
Git 子模块
在 windows 下如何使用 C++ 语言启动外部程序?
使用 CMD.exe 命令行窗口解释输入的字符串命令,引用来自 system, _wsystem
The
system
function passescommand
to the command interpreter, which executes the string as an operating-system command.
system
uses theCOMSPEC
andPATH
environment variables to locate the command-interpreter file CMD.exe.
GNOME 和 MATE 都是桌面环境。
GNOME2 在 2010年9月之后,转向 GNOME3 的开发。
出现分歧,在 2011 年基于 GNOME2 派生出 MATE。
Ubuntu MATE 针对老旧桌面型、笔记型、树莓派等硬件性能等级不高的设备,或喜欢简洁、不用特效桌面环境者。
银河麒麟 V10 在做去 GNOME,去 MATE 化。
UKUI 或称 UbuntuKylin UI,最早是一个基于 Mate 制作的桌面环境。
中标麒麟 V7 在系统信息中展示桌面环境使用 MATE。
合作厂商A的代码,虽然宣称支持跨平台,早期也的确做过大量的平台适配工作。但目前看来,跨平台的工作应该是暂停了,至于后期是否重新拾起来不得而知。
除了客户端是 windows 版本之外,所有的服务(包括设备接入、流媒体服务、流媒体服务调度、存储服务、存储服务调度等等)都是使用 centos7 作为部署环境的。至于是否使用 centos7 作为开发环境,就看各位喜好了,但编译环境肯定还是 centos7 没跑了。
如果使用 centos7 作为编码环境,有两个选择:
后者更具有灵活性,也更方便和同事合作开发,避免同事改动内容后(未提交 svn)手工导出到虚拟机的烦恼,后期如果权限收紧 svn 不再开放外网权限,手工导出源码存在合规问题,即便合规导入导出也是一件很繁琐的事情。但没有图形界面沟通时总是短板(组内同事水平不一)。
先尝试 vim 编码开发,如果学习曲线不够平滑,效率提升困难,后面试验使用图形界面进行开发。
Kubernetes 是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。
如何理解 k8s 对象这个概念? 使用 Kubernetes 对象
k8s 可以有多个节点(Node),每个节点可以有多个 POD,pod 是一组(一个或多个)容器。
Kubernetes 通过将容器放入在节点(Node)上运行的 Pod 中来执行你的工作负载。 节点可以是一个虚拟机或者物理机器。
Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。
每个 Pod 一个容器”模型是最常见的 Kubernetes 用例。
关于 python 语言的学习,参见 c++ 开发人员学习 python 的记录
上述笔记缺少了 Python 环境和包管理方面的内容,在这里补充。
在 Linux 环境下,系统可能自带某个版本的 Python;而 Windows 系统一般没有。
无论哪种平台,一般不会更新升级/直接安装 Python 使用。而是,借用虚拟环境管理工具管理 Python 的版本。
每个环境可以使用不同版本的 Python ,安装不同版本的依赖包。
conda 是一个开源的包管理系统 + 环境管理系统。
作为包管理系统,conda 和 Python 官方的 pip 各有侧重:
conda 更适合需要管理复杂依赖关系和创建隔离环境的数据科学和机器学习项目;
pip
更适合管理纯 Python 包,并且在 Python 开发社区中被广泛使用。
避免在同一个环境中混用 conda 和 pip,以防止潜在的冲突。
conda
在环境管理方面非常强大,是不二之选。
如何改进上网环境?如何在监控环境下相对舒适地“搬砖”,如何利用虚拟机?
整体方案很简单,将认证工具、监控工具放在虚拟机 Ubuntu 中,网络选择桥接模式,直连园区无线网完成帐号认证工作;新增网卡将网络分享给其他虚拟机。
2021年11月22日更新,Ubuntu 虚拟机已删除 。
知易行难,具体实现过程中,因为缺乏网络相关的知识体系(尤其是路由配置等)花了较多时间,绕了很多弯。
在终端中查看 IP 地址的命令:ip a
,在 Debian 10 或 Ubuntu 20 版本中已经没有 ifconfig
命令、iptables 命令。
更多请参考 如何在 Ubuntu 中检查你的 IP 地址
最初每次更改之后都是重启系统,保证配置生效。网络不通的原因可能很多,也弄不明白,按照网上的教程操作之后还是失败就难免怀疑配置是否生效。
重启系统很笨重,但又不清楚针对网络配置的刷新(或重启)命令,后来发现图形界面网络配置项是提供了开关按钮的:重启(开关一次)网络配置生效。
国标阅读笔记
XML 数据类型
XML Schema 简介
《SVAC 安全防范监控数字视音频编解码技术标准》(简称 SVAC,Surveillance Video and Audio Coding)。其国标号是 GB/T 25724-2017,于 2010 年提出 SVAC1.0 标准,2017 年升级为 SVAC2.0 版本,现行标准为 SVAC2.0 标准。
GB28121 中使用的 2010 年的 v1.0 版本 SVAC。