看了昨天二老风暴之门的解说,提到了使用了一个回滚机制可以消除消除游戏中的延迟,一直想不明白是怎么回事,自己本身对服务器通讯方面比较感兴趣,于是去找资料去了解了下。
后来发现他们为了增加玩家的服务器连接能力,还做了别的工作,下面依次介绍一下。
由于本人水平不是很高,有说错的地方,还请好兄弟们指正。
主要来自参考资料1,嘉宾提到游戏逻辑的运行速度是远低于画面渲染速度的,在星际争霸2发售时,默认游戏逻辑的处理速度是22.4Hz ,但是有的逻辑处理速度仅仅是8Hz,而且在最开始时候星际争霸2中的战争迷雾的逻辑处理速度只有4Hz。
现在风暴之门的所有游戏逻辑的处理渲染频率都是64Hz,包括战争迷雾也是,也就是每一次处理时间从44ms缩短到了16ms。
游戏名称 | 星际争霸2 | 风暴之门 |
---|---|---|
渲染频率 | 22.4Hz | 64Hz |
处理时间 | 44Ms | 16Ms |
在RTS游戏中,选手的APM从50-350不等,假如选手的APM是350,换算一下1s中操作6次左右,也就是平均每次操作的间隔是166ms,现在风暴之门的游戏逻辑处理比星际2更快了。James Anhalt原话是”By increasing the game loop rate the game needs to handle fewer actions, which reduces the chances to experience network jitter.”(通过提高游戏循环速率,游戏需要处理的操作就会减少,从而降低出现网络抖动的几率)(这一段我不太明白我理解的是,循环速度变快了,在每次循环中,处理选手的操作数更少了。比如星际2每次执行游戏逻辑,需要处理选手2-3次操作,但是风暴之门每次执行游戏逻辑时候,只需要处理选手1次操作就可以了,如果数据丢包了,就丢了一次操作,这边有不对的欢迎大佬指正)
SnowPlay引擎不会像传统的引擎一样,不停和其他计算机同步,而是根据自己计算机的CPU、GPU和网络条件,以各自最大努力运行,减少延迟,每台机器和用户都应该从各自的设置中榨取更多的性能。
还有这个引擎别的方面的优化,比如寻路机制,它使用的内存比星际2少,同时支持复杂度是其两倍的地图;还有游戏逻辑完全独立于视觉处理,采用了多核优化还有等等更新,可以自己看参考资料2
从参考资料4看到,风暴之门在考虑混合匹配方法,使用一个全球玩家池,但在全球排行榜之上有区域阶梯和排行榜,仍保留某种天梯和排行榜的区域 MMR。但是由于睡眠时间的问题,不同大洲的人们依然会按照自然时间分组,比如中国的玩家总是会匹配到中国的玩家,美国人总是匹配到美国人。
他们提到,他们为他们的服务器搭建使用自动扩容功能,主要是和一个跨国企业Hathora云平台合作,就是服务器这块主要就是靠Hathora这个公司了。Hathora主要也是用了k8s那套东西,可以对应流量的扩缩容,说是比如应对玩家激增的情况,可以快速扩容服务器。
去Hathora的官网看了下,Hathora就是主要给游戏服务器提供扩容服务,可以看到他们在日本和新加坡有节点。前几天老仙他们试玩的时候,用了日本代理,那应该就是用的Hathora的那个节点。国内的情况的话,看起来得代理谈下来再说了,不知道到时候能不能玩的流畅。
RollBack机制主要是针对于网络中延迟问题,比如我们玩星际的时候,总是由于一个人的网卡,导致都整体游戏变卡了。
它的工作原理是预测玩家会做什么并把它显示出来,如果系统的预测是正确的,那么它就会继续原样,但如果系统不正确,它会很快回滚(因此得名)并显示实际发生的事情。该系统可以非常快速地回滚,这意味着无论它是否正确,玩家都将在整个过程中体验到流畅的游戏体验。
从参考资料9可以看到,他们在10月份对风暴之门的RollBack机制进行了Alpha测试,各个职业选手表示运行的很好。被黄哥打败的SC2传奇人物PartinG表示十分不错。
由于官方没有具体的技术说明,就说了主要是参考格斗游戏的,所以下面就是我根据现有的资料对RollBack机制猜测是怎么运行的
由于格斗游戏对实时性的要求特别高,所以很需要一个更加高效的同步技术,而不是玩家1来等待玩家2的网络,变得一卡一卡的。所以在2009年,格斗游戏中的回滚网络GGPO就被研发了出来,现在先说明一下GGPO网络运行的原理。
回滚网络机制主要是针对于网络中延迟问题,对于本地玩家的输入是100%正确的。
接下来的内容主要来自这篇文章Fight the Lag! The Trick Behind GGPO’s Low Latency Netcode,图片也都来自那里。
图1表示传统的网络传输情况。可以看到,在正常的本地玩家1输入4之后,远端玩家输入2才到达,这时候才能合成出当前状态,呈现出游戏帧,也就是本地输入1,2,3的时候游戏都是没有响应的,这就是我们看到的卡顿
图2表示使用了GGPO回滚网络的情况的网络传输情况,此时假设系统对远端玩家2的预测都是正确的。可以看到,每次本地玩家1输入之后,都叠加了系统对远端玩家2预测状态,所以每次输出都可以更新游戏的状态,看起来就是所有的操作都没有卡顿,都正常被执行了。
图3表示使用了GGPO回滚网络,但是假设系统对远端玩家2的预测都是错误了。假设在本地玩家1输入3之后,远端玩家输入1到达,但是经过校验发现,本地的预测错误了,此时虽然当前游戏的视频帧执行到了帧3,需要立刻回滚到帧1,也就是本地玩家输入1的状态,使用正确的远端输入1叠加本地玩家1的输入得到了正确状态,同时快速进行,本地输入1,2,3都是加速执行,直到本地玩家输入4的步骤,都变成正常了。
总而言之,GGPO回滚网络的原理,是将网络的延迟,放到了不会改变的动画的执行过程中。在格斗游戏中举了一个例子,比如对手在几帧前向你投掷了一个火球,那么这个火球的行为是完全确定的,不会受到对手未来输入的影响,此时本地就是预测对手未来的行动。
玩家1是本地用户,玩家2是远程用户,下面模拟一下玩家2由于rollback机制的存在,对于玩家1的视角来说是没有延迟的。
以游戏开局,需要派出农民探路的场景举例子
举的这个例子是为了帮助理解用了十分夸张的时间机制,实际游戏中,不会有这么长的检测时间。看报道中选手的体验比较良好,看起来效果不错
1-James Anhalt & Tim Morten 访谈:SnowPlay技术和风暴之门
2-Stormgate Technology & Art Reveal - December 2022 技术和美术访谈,提到了RollBack机制
3-“这就像一辆 F1 赛车”:风暴之门内部游戏测试的独家外观
4-地域认同是件好事,提到了sed老师和jim大神在中国赛区开发了凤凰巨像风格
5-与冰霜巨人工作室合作的《风暴之门》官方游戏揭秘 AMA 线程-rediit
6-与冰霜巨人工作室合作的《风暴之门》官方游戏揭秘 AMA 线程-old.reddit
7-多人游戏的服务器编排公司
8-hathora 构建可无限扩展的多人游戏,使用Kubernetes 计算集群,部署可伸缩的游戏服务器
9-2023-10-11,风暴之门社区,新闻稿,风暴之门Rollback网络代码是RTS的巨大技术飞跃
10-为什么风暴之门使用回滚网络代码?
11-格斗游戏中使用的GGPO回滚网络机制
12-与滞后作斗争!GGPO低延迟网络代码背后的诀窍
13-2023-10-11,风暴之门Rollback机制Alpha测试,reddit讨论帖
统一建模语言(UML)是一种用于软件工程和系统设计的标准建模语言
UML提供了一组图形符号和规则,用于描述系统的不同方面。主要的UML图种类包括:
用例图(Use Case Diagrams): 用于描述系统与外部实体(称为参与者)之间的功能需求和交互。
类图(Class Diagrams): 用于显示系统中的类、类之间的关系以及类的属性和方法。
时序图(Sequence Diagrams): 描述系统中的对象之间的交互顺序,尤其是在特定场景下的交互顺序。
协作图(Collaboration Diagrams): 类似于时序图,描述对象之间的协作关系,但强调对象之间的合作而不是时序。
状态图(State Diagrams): 描述对象在其生命周期中所经历的状态及状态之间的转换。
活动图(Activity Diagrams): 描述系统中的活动流程,展示系统中各个活动的顺序和条件。
组件图(Component Diagrams): 描述系统中的组件及其相互关系,强调系统的组织结构。
部署图(Deployment Diagrams): 描述系统中软件和硬件之间的物理部署关系。
这些UML图形成了一个完整的模型,帮助软件开发团队以一种可视化和标准化的方式理解、设计和交流系统的不同方面。在实际应用中,通常会同时使用多种类型的UML图,以全面而清晰地描述系统。
有许多工具可用于绘制和编辑UML图,这些工具提供了图形界面,使用户能够轻松地创建、修改和分享UML图。以下是一些常见的UML建模工具:
Enterprise Architect: 由Sparx Systems提供的工具,支持多种UML图,包括用例图、类图、时序图等。
Visual Paradigm: 提供了丰富的UML建模功能,包括用例建模、类建模、时序建模等,同时支持团队协作。
IBM Rational Software Architect: 适用于大型企业项目,提供广泛的建模和分析工具,包括UML和其他建模语言。
Astah UML: 以易用性和轻量级著称,适用于个人和小型团队,支持多种UML图形。
Lucidchart: 一个基于云的协作平台,支持绘制UML图和其他流程图,可通过浏览器进行在线编辑。
Draw.io: 一个免费的在线图形编辑工具,支持UML图和其他类型的图表,可用于快速创建简单的UML图。
Umbrello UML Modeller: 一个开源的UML建模工具,适用于Linux和Windows平台,提供用例图、类图等功能。
PlantUML: 不同于传统图形界面的工具,PlantUML是一种使用文本描述语言创建UML图的工具,通过文本文件定义UML图形,然后生成图像。
选择UML建模工具通常取决于项目的规模、团队的需求和个人的喜好。大多数工具提供了多种导出和共享选项,以便在团队成员之间方便地分享和合作。
在UML类图中,两个对象之间可以存在不同类型的关系,这些关系用于描述对象之间的连接和交互。以下是一些常见的类图关系:
关联关系(Association): 描述两个类之间的连接,表示一个类对象与另一个类对象之间存在某种关联。关联关系可以是双向的,也可以是单向的。
聚合关系(Aggregation): 表示一种弱的拥有关系,表示整体与部分之间的关系。聚合关系用空心菱形表示整体,与实线连接的部分。
组合关系(Composition): 表示一种强的拥有关系,整体对象负责部分对象的生命周期。组合关系用实心菱形表示整体,与实线连接的部分。
泛化关系(Generalization): 表示继承关系,表示一个类是另一个类的子类。泛化关系使用带有三角箭头的实线表示。
依赖关系(Dependency): 表示一个类依赖于另一个类,当一个类的变化可能影响到另一个类时,就存在依赖关系。依赖关系用虚线箭头表示。
实现关系(Realization): 表示一个类实现了一个接口,用带三角箭头的虚线表示。
关联类关系(Association Class): 表示关联关系中的关联类,即一个具有属性和方法的类,用在关联线上。
约束关系(Constraint): 表示对类或关系的一些限制条件,通常使用注释或标签进行表示。
这些关系可以组合使用,以更全面地描述系统中对象之间的关系和交互。在类图中,关系的选择取决于系统的设计需求和建模目的。
关系类型 | 缩写 | 描述 |
---|---|---|
关联关系 | Association | 描述两个类之间的连接,表示一个类对象与另一个类对象之间存在某种关联。 |
聚合关系 | Aggregation | 表示一种弱的拥有关系,表示整体与部分之间的关系。聚合关系用空心菱形表示整体,与实线连接的部分。 |
组合关系 | Composition | 表示一种强的拥有关系,整体对象负责部分对象的生命周期。组合关系用实心菱形表示整体,与实线连接的部分。 |
泛化关系 | Generalization | 表示继承关系,表示一个类是另一个类的子类。泛化关系使用带有三角箭头的实线表示。 |
依赖关系 | Dependency | 表示一个类依赖于另一个类,当一个类的变化可能影响到另一个类时,存在依赖关系。 |
实现关系 | Realization | 表示一个类实现了一个接口,用带三角箭头的虚线表示。 |
关联类关系 | Association Class | 表示关联关系中的关联类,即一个具有属性和方法的类,用在关联线上。 |
约束关系 | Constraint | 表示对类或关系的一些限制条件,通常使用注释或标签进行表示。 |
一定要使用extern
extern “C”
{
#include <libavcodec\avcodec.h>
}
doc\examples\avio_list_dir.c
1 | conda create -n mmsegment python=3.10 -y |
UNet
Deeplabv3
Deeplabv3+
PSPNet
KNet
Segformer
FastSCNN
1 | conda create -n ISAT python=3.10 -y |
是一个常用于管理 Debian 系统上的软件包的工具
1 | dpkg -i baidunetdisk_4.17.7_amd64.deb # 安装指定的软件包文件 |
1 | dpkg -s baidunetdisk # 显示指定软件包的详细信息 |
1 | sudo dpkg -i code_1.80.1-1689183569_amd64.deb # 安装指定的软件包文件 |
Advanced Package Tool
apt 和 apt-get 都是用于在 Debian 及其派生发行版(如 Ubuntu)上管理软件包的命令行工具。它们有很多相似之处,但也存在一些区别
1 | sudo apt update # 更新软件包列表,更新本地包缓存 |
1 | sudo apt remove vim # 卸载软件包,仅删除安装包 |
1 | # 会显示每个版本的软件包名称、软件源的名称、版本号、优先级等信息。 |
1 | apt autoremove # 清理不再需要的软件包 |
1 | ps # 显示当前用户的进程状态 |
1 | ps -l # 显示进程的长格式输出,包括进程状态、PID、PPID、CPU使用率等信息 |
1 | ps -ef # 显示系统中所有进程的详细信息 |
显示系统的内存使用情况,查看交换分区的情况
1 | free -b # 以字节为单位显示内存使用情况 |
1 | free -h # 以人类可读的方式显示内存大小,以K、M、G为单位,更易读 |
1 | date # 显示当前系统日期和时间 |
查看时区,管理系统时间和日期的命令
1 | timedatectl # 等于 timedatectl status |
lscpu命令是一种提取有关CPU体系结构信息的常用方法。此命令从sysfs的/pro /cpuinfo文件中提取硬件信息。该信息包括处理器数量,CPU操作模式,套接字,内核,线程,型号名称和虚拟化信息等。
录制包
1 | source ../devel/setup.bash |
台式机播放包
1 | source ~/catkin_ws/devel/setup.bash |
笔记本播放包
1 | roscore |
这个命令用于启动ROS的核心功能,包括ROS主节点(master)和参数服务器(parameter server)。在运行其他ROS命令之前,需要先运行roscore。
这个命令用于在ROS软件包中运行指定的节点程序。通过指定软件包名称和节点名称,可以运行相应的ROS节点。
1 | rosbag |
rosbag decompress: 用于解压rosbag文件。如果rosbag文件被压缩,可以使用该命令将其解压缩。示例命令:rosbag decompress test.bag。
rosbag filter: 用于过滤rosbag文件中的消息。可以根据自定义的条件对消息进行过滤,并将过滤后的消息保存到新的rosbag文件中。示例命令:rosbag filter input.bag output.bag “topic == ‘/topic1’”。
pkg:节点所在功能包的名称package_name;
type:节点类型是可执行文件(节点)的名称executable_node;
name:节点运行时的名称node_name;
args:传递命令行设置的参数;
respawn:是否自动重启,true表示如果节点未启动或异常关闭,则自动重启;false则表示不自动重启,默认值为false;
output:是否将节点信息输出到屏幕,如果不设置该属性,则节点信息会被写入到日志文件,并不会显示到屏幕上。
装好系统,直接使用小鱼一键安装,开机就直接安装
会帮助换源
同时装好了opencv,Eigen3
1 | wget http://fishros.com/install -O fishros && . fishros |
ros-melodic
1
1
2
1
1
重启一下系统
查看一下opencv和eigen是否安装成功
sudo apt list –installed | grep opencv
sudo dpkg -l | grep eigen
1 | sudo apt-get install vim openssh-server openssh-client net-tools git -y |
24GB = 24576MB
28GB = 28672MB
sudo apt-get install libudev-dev pkg-config libgtk-3-dev libusb-1.0-0-dev libglfw3-dev libssl-dev -y
sudo apt-get install terminator -y # 安装多窗口终端
mkdir build && cd build
cmake ../ -DBUILD_EXAMPLES=true
make -j 4 # 需要保证git clone https是通的
sudo make install
librealsene/Cmake/external_libcurl.cmake
GIT_REPOSITORY “https://github.com/curl/curl.git"
GIT_REPOSITORY “git@github.com:curl/curl.git” # 需要配置一下git拉取
(1)连接相机
(2)测试相机(方法1)
cd ~/librealsense-2.50.0/build/examples/capture
./rs-capture
//出现相机拍摄窗口和IMU窗口且终端显示相机参数即为安装成功
(3)测试相机(方法2)
cd /home/qinyibo/librealsense-2.50.0/build/tools/realsense-viewer
sudo ./realsense-viewer
//相机运行软件中出现出现相机拍摄窗口和IMU窗口并且可以设置模式与参数即为成功
//右上角出现Dismiss错误时,可以重新插拔,但即使不出现错误,其Motion Module打开时依旧报错,但貌似不影响使用,暂时不管
Severity:Error
Description:Motion Module failure
while true; do free -h | tail ; sleep 1; done
while true; do rostopic list;echo “————-“ ; sleep 1; done
rostopic list | tail
cd $HOME/orb_slam/ORB_SLAM3_detailed_comments/Examples/ROS/ORB_SLAM3/build/
2. source $HOME/orb_slam/ORB_SLAM3_detailed_comments/Examples/ROS/ORB_SLAM3/build/devel/setup.bash
source $HOME/orb_slam/ORB_SLAM3_pigg/Examples_old/ROS/ORB_SLAM3_dense_yolo/build/devel/setup.bash
cd $HOME/orb_slam/ORB_SLAM3_detailed_comments/
rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples_old/Monocular-Inertial/EuRoC.yaml
//运行ORB-SLAM3,并在ORB_SLAM3下产生运行结果(关键帧轨迹文件)
//如果运行完记录包,出现跟踪局部地图失败提示,好像是因为运行快没有提取到特征点,目前解决方案是重新运行跑一次。
//跑完记录包,本运行终端不会停止运行,暂时只能Ctrl+C结束,会有qt报错和核心转储报错,暂时无法解决。
在ROS记录包目录下打开终端3,运行记录包
rosbag play –pause MH_01_easy.bag /cam0/image_raw:=/camera/image_raw /imu0:=/imu
//选择下载的Euroc数据集的ROS记录包
//设置发布的话题名称,要与ORB-SLAM3订阅的话题一样
//pause代表用space可以控制开始和暂停跑包
1 | sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak |
ps aux 命令会显示所有用户的所有进程,并且以用户为基础显示进程的详细信息。
sudo dpkg -i XXX(你下载的安装包名).deb
sudo apt list –installed | grep opencv
sudo dpkg -l | grep eigen
apt list # 列出所有已安装的软件包。
apt list –installed # 列出所有已安装的软件包。
apt list –upgradable # 列出可升级的软件包
tar -zxvf FileName.tar.gz # 解压
tar -zcvf FileName.tar.gz DirName # 将DirName和其下所有文件(夹)压缩
tar -zcvf orb_slam.tar.gz orb_slam
sudo apt install libglew-dev
Pangolin
opencv
Eigen3
打开软件安装,更新,永远停止
1 | # os-specific listings first |
FUERTE_GBPDISTRO_URL = ‘file:///home/yzx/rosdistro/‘
‘releases/fuerte.yaml’
REP3_TARGETS_URL = ‘file:///home/yzx/rosdistro/releases/targets.yaml’
DEFAULT_INDEX_URL = ‘file:///home/yzx/rosdistro/index-v4.yaml’
./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml /home/yzx/MH01 ./Examples/Monocular-Inertial/EuRoC_TimeStamps/MH01.txt dataset-MH01_monoi
/opt/ros/melodic/include
/usr/include/pcl-1.8/
“${workspaceFolder}/“,
“/usr/include/“,
“/opt/ros/melodic/include/**”
1 |
|
1 | cmake_minimum_required(VERSION 3.0 FATAL_ERROR) |
Ubuntu20.04软件源更换 - 知乎 (zhihu.com)
https://opclash.com/fenxiang/302.html
https://blog.csdn.net/m0_58402697/article/details/122298129
https://www.intel.com/content/www/us/en/support/articles/000005511/wireless.html
Best Path
Iterations
#FDC897
253,200,151
#9DD79D
157,215,157
#C2B2D6
#FA8111
#46AC46
#9579B8
I will ask you questions, even though my English grammar is poor. Please answer my questions in the following way:
大前端——泛GUI交互
HTML
CSS
javascript
TypeScript
nodejs
原生app开发
开发adroid ios
facebook
React native
google dart flutterwebapp开发 Vue React混合开发HybirdAPP 微信公众号 小程序 Electron H5页面嵌入到桌面段应用
ES6
React
Promise
html5
Css3
Axios
Jquery
Vue Router
Node.js
AJAX
webpack、rollup、vite
Flutter官网
uni-app官网
Android Studio
Android Studio 2022.1.1版本 保姆级安装教程
fmpeg-master-latest-win64-gpl-shared.zip
avcodec.lib;avdevice.lib;avfilter.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;postproc.lib
1 | MSBuild属性宏: |
FFmpeg一共包含8个库:
avcodec:编解码(最重要的库)。
avformat:封装格式处理。
avfilter:滤镜特效处理。
avdevice:各种设备的输入输出。
avutil:工具库(大部分库都需要这个库的支持)。
postproc:后加工。
swresample:音频采样数据格式转换。
swscale:视频像素数据格式转换。
其中加粗的库为本课程涉及到的库。
Ubuntu上安装ffmpeg
Ubuntu下x264库编译安装
编译ffmpeg错误:ERROR: x264 not found using pkg-config
编译安装libx264库遇到Found no assembler Minimum version is nasm-
nasm官网
nasm下载链接
1 | git clone git@github.com:google/googletest.git |
1 | cd googletests/samples |
样例分析:
gtest_main.cc: 测试主程序的入口
sample1.cc:等待测试的源码
sample1_unittest.cc: 测试用例
1.有一个包含GTEST_API_的主函数,引入testing::InitGoogleTest
2.包含头文件gtest/gtest.h
3.使用TEST宏定义,第一个参数是test suite的名字,第二个参数是test case的名字,写自己的测试函数
4.在测试函数中使用EXPECT_EQ,EXPECT_NE,EXPECT_LT,EXPECT_LE,EXPECT_GT,EXPECT_GE
5.在主函数中调用RUN_ALL_TESTS(),返回值是0表示成功,非0表示失败
6.编译,链接gtest库,运行
官方文档
github仓库
Google Test(GTEST)使用入门(1)- 下载编译安装执行
Ubuntu 16.04安装gtest遇坑,成功安装及使用记录
勾选安装环境变量
不要勾选安装环境变量
安装后增加环境变量
E:\Anaconda
E:\Anaconda\Scripts
E:\Anaconda\Library\mingw-w64\bin
E:\Anaconda\Library\usr\bin
E:\Anaconda\Library\bin
测试是否安装成功
1 | conda --version |
anaconda换源
1 | channels: |
conda clean -i
检测是否换源成功
1 | conda config --show-sources # 仅查看所有镜像 |
1 | import torch # 如果pytorch安装成功即可导入 |
1 | # 环境所用的python版本需要在后面指定,如果不指定默认Anaconda自带python版本 |
切换到新创建的环境中,打开open Terminal
安装PaddlePaddle,是依赖环境
1 | pip3 install paddlepaddle -i https://mirror.baidu.com/pypi/simple |
安装EIseg
1 | pip3 install eiseg -i https://mirror.baidu.com/pypi/simple |
启动
直接在命令行中输入eiseg
conda create -n labelimg python=3.10 -y
pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
1 | conda config --show # 查看conda的配置,确认channels |
conda install –use-local pytorch-0.4.0-py35_cuda8.0.61_cudnn7.1.2_1.tar.bz2
conda remove -n 环境名字 –all
[Anaconda超详细安装教程(Windows环境下)]https://blog.csdn.net/fan18317517352/article/details/123035625
[新手教程一:Anaconda新建开发环境]https://blog.csdn.net/qq_42573052/article/details/113770662
anaconda 换清华镜像源 windows
清华大学开源软件镜像站
Anaconda之导出/导出配置好的虚拟环境
EISeg工具对应博文
EIseg官方安装说明
飞桨安装参考文档
1)按指令安装
1 | sudo apt-get remove docker docker-engine docker.io |
2)查看是否安装成功
docker version
1 | docker run -it -d -p 9000:9000 -p 9001:9001 --name minio \ |
MINIO_ACCESS_KEY账号
MINIO_SECRET_KEY密码
http://39.106.72.165:9000
本地:
http://127.0.0.1:9000
https://cloud.tencent.com/developer/article/2057224
https://www.minio.org.cn/download.shtml#/linux
本地环境,win11+Vmware14
先安装了VMware14,安装过程没有问题,导入虚拟机,启动以后,电脑直接蓝屏,开机还是这个现象
网上搜索发现是没有启动虚拟工具
1 | #添加阿里源 |
1 | apt-get update |
1 | Host 192.168.0.3 |
https://golang.google.cn/dl/
wget https://golang.google.cn/dl/go1.19.5.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz
vim /etc/profile
source /etc/profile
export GOROOT=/usr/local/go
#export PATH=$PATH:/usr/local/go/bin
export PATH=$PATH:$GOROOT/bin
export GOPATH=/yzx
export GOBIN=$GOPATH/bin
export GOPROXY=https://goproxy.cn/,direct
https://goproxy.io/zh/
https://goproxy.cn/
1 | go mod init [工程名字] |
下错版本
go1.19.5.linux-arm64.tar.gz
报错:
bash: /usr/local/go/bin/go: cannot execute binary file: Exec format error
VScode无法调试go
安装dlv
cgo: C compiler “gcc” not found: exec: “gcc”: executable file not found in $PATH (exit status 2)
Ubuntu20.04软件源更换 - 知乎 (zhihu.com)
https://blog.csdn.net/liangcsdn111/article/details/115405223
https://www.jianshu.com/p/2802d71ab9e9
添加参数的工程–>属性–>配置属性–>调试->命令参数
各参数间用空格分离
1 | (ProjectDir)\include |
avcodec.lib
avformat.lib
avutil.lib
avdevice.lib
avfilter.lib
postproc.lib
swresample.lib
swscale.lib
【选项】—>【文本编辑器】—–>【显示】—–>【查看空白】
Tools>Options>Text Editor>All Languages>Tabs>
QML
Qt Quick
Qpython
QRegExp
QButtonGroup
QFactoryInterface
QStandardItemModel
Qt::WA_inputmethodenabled
QDomElement
QDomDocument
QDomNode
#include <QtXml/qtxmlglobal.h>
安装过滤器
Q_DECL_EXPORT
Q_DECL_IMPORT
Q_PROPERTY
qt的继承关系
stdcall,cdecl,fastcall,
thiscall, naked call
afx_msg
afxwin.h
windows.h
ODBC类
stdafx.h
继承自己单例的数组
奇异递归模板模式CRTP
dynamic_cast<>()
Microsoft XNA
WPF
xaml
MFC
electron
Win32 SDK
STL,WTL
LCU客户端
CEF架构
WinForms
C++ builder
GTK+
libcef
Unity
桌面应用程序
桌面的客户端软件
Hive
minicsv
signals and slots
Qt Object Model
object trees
Qt Widgets
Qt GUI
Qt Core
C++ Classes
Animation Classes
Threading Classes
Container Classes
Plugin Classes
Implicitly Shared Classes
State Machine Classes
Input/Output Classes
Event Classes
Qt Help
Qt OpenGL
Qt Test
qmake Manual
Q_NULLPTR
QT_CONFIG
Q_OBJECT
Q_PROPERTY
Q_SLOTS
Q_SIGNALS
#ifdef Q_COMPILER_EXPLICIT_OVERRIDES
#else
Q_DISABLE_COPY
/*
Some classes do not permit copies to be made of an object. These
classes contains a private copy constructor and assignment
operator to disable copying (the compiler gives an error message).
*/
#define Q_DISABLE_COPY(Class)
Class(const Class &) Q_DECL_EQ_DELETE;
Class &operator=(const Class &) Q_DECL_EQ_DELETE;
Q_DECL_EQ_DELETE
QTest
QMediaPlayer
需要在工程上右键->属性->Qt Project Setting->Qt Modules->select Modules
#include
1 | bool VideoDecode::open(const QString &url) |
用中文回答,上面函数的含义是什么,帮我解释一下,还有视频解码的总体流程是什么样的?这个open中主要做了什么操作?
]]>7位
128个
8位
256个
单双字节混合编码
万国码
12-13万个
DBCS单双字节混合编码,没有统一标准
linux
UTF-8
windows
UTF-16
无论什么字符都是两个字节
wchar_t每个字符占2个字节
句柄
能找到本进程占据的内存,但不是指针
MSDN
布局管理器
]]>