当前位置: 首页 > news >正文

【Pm4py第七讲】关于visualization

本节用于介绍pm4py中的可视化函数,包括可视化bpmn、petri、性能图谱、变迁系统等。

1.函数概述

 本次主要介绍Pm4py中一些常见的可视化函数,总览如下表:

函数名说明
view_alignments(log, aligned_traces[, format])可视化对齐方法

view_bpmn(bpmn_graph[, format, bgcolor, rankdir])

查看BPMN图
view_case_duration_graph(log[, format, ...])可视化案例持续时间图
view_dfg(dfg, start_activities, end_activities)查看(复合)DFG
view_dotted_chart(log[, format, attributes, ...])显示虚线图表
view_events_distribution_graph(log[, ...])显示指定维度中事件的分布
view_events_per_time_graph(log[, format, ...])可视化每个时间的事件图
view_footprints(footprints[, format])可视化足迹矩阵
view_heuristics_net(heu_net[, format, bgcolor])查看启发式网络
view_network_analysis(network_analysis[, ...])可视化网络分析
view_object_graph(ocel, graph[, format, ...])在屏幕上可视化对象图形
view_ocdfg(ocdfg[, annotation, act_metric, ...])使用所提供的配置查看OC-DFG(以对象为中心的直接跟随图)。
view_ocpn(ocpn[, format, bgcolor, rankdir])在屏幕上可视化以对象为中心的Petri网
view_performance_dfg(dfg, start_activities, ...)查看性能DFG
view_performance_spectrum(log, activities[, ...])显示性能频谱
view_petri_net(petri_net[, initial_marking, ...])查看(复合) Petri网
view_prefix_tree(trie[, format, bgcolor])查看前缀树
view_process_tree(tree[, format, bgcolor, ...])查看流程树
view_sna(sna_metric[, variant_str])表示SNA度量(html)
view_transition_system(transition_system[, ...])查看变迁系统

       此外,还有保存可视化图形的方法,这里只需要将view_XXX()改为save_vis_XXX()方法即可,例如,可视化方法view_bpmn()改为可保存的可视化方法为save_vis_bpmn().

2.函数方法介绍

2.1 可视化Petri网

pm4py.vis.view_petri_net(petri_net: PetriNet, initial_marking: Marking | None = None, final_marking: Marking | None = None, format: str = 'png', bgcolor: str = 'white', decorations: Dict[Any, Any] | None = None, debug: bool = False, rankdir: str = 'LR')
说明:可视化Petri网

输入参数:

      petri_net(PetriNet)–petri网
      initial_marking–初始标记
      final_marking–最终标记
      format(str)–输出图片的格式(如果提供了html,则使用GraphvizJS在html页面中呈 现可视化效果)
      bgcolor(str)–可视化的背景色(默认值:白色)
装饰–与Petri网元素相关的装饰(颜色、标签)
     debug(bool)–启用/禁用调试模式的布尔值(显示位置和转换的名称)
     rankdir(str)–设置图形的方向(“LR”表示从左到右;“TB”表示从上到下)

示例代码:

import pm4pynet, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
pm4py.view_petri_net(net, im, fm, format='svg')

2.2 可视化性能DFG

pm4py.vis.view_performance_dfg(dfg: dict, start_activities: dict, end_activities: dict, format: str = 'png', aggregation_measure='mean', bgcolor: str = 'white', rankdir: str = 'TB')
说明:可视化性能DFG

输入参数

      dfg(dict)–dfg对象
      start_activities(dict)–启动活动
      end_activities(dict)–结束活动
      format(str)–输出图片的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化效果)
      aggregation_measure(str)–聚合度量值(默认值:均值):均值、中值、最小值、最大值、总和、标准差
      bgcolor(str)–可视化的背景色(默认值:白色)
      rankdir(str)–设置图形的方向(“LR”表示从左到右;“TB”表示从上到下)

示例代码:

import pm4pyperformance_dfg, start_activities, end_activities = pm4py.discover_performance_dfg(dataframe, case_id_key='case:concept:name', activity_key='concept:name', timestamp_key='time:timestamp')
pm4py.view_performance_dfg(performance_dfg, start_activities, end_activities, format='svg')

2.3 可视化DFG

pm4py.vis.view_dfg(dfg: dict, start_activities: dict, end_activities: dict, format: str = 'png', bgcolor: str = 'white', max_num_edges: int = 9223372036854775807, rankdir: str = 'TB')
说明:可视化DFG

输入参数
    dfg(dict)–dfg对象
    start_activities(dict)–启动活动
    end_activities(dict)–结束活动
    format(str)–输出图片的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化效果)
    bgcolor(str)–可视化的背景色(默认值:白色)
    max_num_edges(int)–要在图中表示的最大边数
    rankdir(str)–设置图形的方向(“LR”表示从左到右;“TB”表示从上到下)

示例代码:

import pm4pydfg, start_activities, end_activities = pm4py.discover_dfg(dataframe, case_id_key='case:concept:name', activity_key='concept:name', timestamp_key='time:timestamp')
pm4py.view_dfg(dfg, start_activities, end_activities, format='svg')

2.4 可视化流程树

pm4py.vis.view_process_tree(tree: ProcessTree, format: str = 'png', bgcolor: str = 'white', rankdir: str = 'TB')
说明:可视化流程树

输入参数

      tree(ProcessTree)–流程树
      format(str)–可视化的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化)
      bgcolor(str)–可视化的背景色(默认值:白色)
      rankdir(str)–设置图形的方向(“LR”表示从左到右;“TB”表示从上到下)

示例代码:

import pm4pyprocess_tree = pm4py.discover_process_tree_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
pm4py.view_process_tree(process_tree, format='svg')

2.5 可视化BPMN

pm4py.vis.view_bpmn(bpmn_graph: BPMN, format: str = 'png', bgcolor: str = 'white', rankdir: str = 'LR')
说明:可视化BPMN

输入参数

    bpmn_graph(bpmn)–bpmn图
    format(str)–可视化的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化)
    bgcolor(str)–可视化的背景色(默认值:白色)
    rankdir(str)–设置图形的方向(“LR”表示从左到右;“TB”表示从上到下)

示例代码:

import pm4pybpmn_graph = pm4py.discover_bpmn_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
pm4py.view_bpmn(bpmn_graph)

2.6 可视化启发式网

pm4py.vis.view_heuristics_net(heu_net: HeuristicsNet, format: str = 'png', bgcolor: str = 'white')
说明:可视化启发式网

输入参数

      heu_net(启发式网络)–启发式网络
      format(str)–可视化的格式
      bgcolor(str)–可视化的背景色(默认值:白色)

 示例代码:

import pm4pyheu_net = pm4py.discover_heuristics_net(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
pm4py.view_heuristics_net(heu_net, format='svg')

2.7 可视化点图

pm4py.vis.view_dotted_chart(log: EventLog | DataFrame, format: str = 'png', attributes=None, bgcolor: str = 'white', show_legend: bool = True)

说明:可视化点图。虚线是事件日志中不同维度的事件的经典可视化。事件日志中的每个事件都对应于一个点。尺寸投影在具有:-X轴的图形上:第一个尺寸的值在那里表示Y轴:第二个维度的值在那里表示。-颜色:对于虚线图的点,第三维度的值表示为不同的颜色。
这些值可以是字符串、数字或日期值,并由虚线进行相应的管理。虚线图表可以建立在不同的属性上。点图的一个方便选择是可视化案例和事件在一段时间内的分布,有以下选择:-XX:事件的时间戳。-Y轴:事件日志中事例的索引。-颜色:事件的活动。
上述选择允许识别视觉模式,例如:-批次。-箱子到达率的变化。-案例完成率的变化。

输入参数:

      log–事件日志
     format(str)–图像格式
     attributes–应该用于构造点图的属性。如果“无”,将显示默认的虚线图:x轴:时间y轴:事例(按事件日志中的发生顺序)颜色:活动。对于自定义属性,使用形式为[x轴属性、y轴属性、颜色属性]的属性列表,例如[“concept:name”、“org:resource”、“concept:name”])
     bgcolor(str)–虚线图中使用的背景色
     show_legend(bool)–boolean(启用/禁用显示图例)

 示例代码:

import pm4pypm4py.view_dotted_chart(dataframe, format='svg')
pm4py.view_dotted_chart(dataframe, attributes=['time:timestamp', 'concept:name', 'org:resource'])

2.8 表示SNA度量

pm4py.vis.view_sna(sna_metric: SNA, variant_str: str | None = None)

说明:表示SNA度量(.html)

输入参数:

    sna_metric(sna)–度量值
    variant_str–要使用的变量(默认值:pyvis)
​​​​​​​

示例代码:

import pm4pymetric = pm4py.discover_subcontracting_network(dataframe, resource_key='org:resource', timestamp_key='time:timestamp', case_id_key='case:concept:name')
pm4py.view_sna(metric)

 2.9 可视化案例持续时间图

pm4py.vis.view_case_duration_graph(log: EventLog | DataFrame, format: str = 'png', activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name')

说明:可视化案例持续时间图

输入参数:

   log–log对象
   format(str)–可视化的格式(png、svg…)
   activity_key(str)–要用作活动的属性
   case_id_key(str)–要用作案例标识符的属性
   timestamp_key(str)–要用作时间戳的属性

示例代码:

import pm4pypm4py.view_case_duration_graph(dataframe, format='svg', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')

2.10 可视化每个时间的事件图

pm4py.vis.view_events_per_time_graph(log: EventLog | DataFrame, format: str = 'png', activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name')

说明:可视化每个时间的事件图。

输入参数:    

      log–log对象
      format(str)–可视化的格式(png、svg…)
      activity_key(str)–要用作活动的属性
      case_id_key(str)–要用作案例标识符的属性
     timestamp_key(str)–要用作时间戳的属性

示例代码

import pm4pypm4py.view_events_per_time_graph(dataframe, format='svg', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')

2.11 性能图谱

pm4py.vis.view_performance_spectrum(log: EventLog | DataFrame, activities: List[str], format: str = 'png', activity_key: str = 'concept:name', timestamp_key: str = 'time:timestamp', case_id_key: str = 'case:concept:name', bgcolor: str = 'white')

说明:显示性能谱。性能谱是流程执行中不同活动之间经过的时间的流程性能的一种新颖可视化。性能谱最初描述于:

Denisov, Vadim, et al. “The Performance Spectrum Miner: Visual Analytics for Fine-Grained Performance Analysis of Processes.” BPM (Dissertation/Demos/Industry). 2018.

输入参数:    

      perf_spectrum–性能谱
      format(str)–可视化的格式(png、svg…)
      activity_key(str)–要用于活动的属性
      timestamp_key(str)–用于时间戳的属性
      case_id_key(str)–要用作案例标识符的属性
      activity_key–要用作活动的属性
      case_id_key–要用作案例标识符的属性
      timestamp_key–要用作时间戳的属性
      bgcolor(str)–可视化的背景色(默认值:白色)

示例代码:

import pm4pypm4py.view_performance_spectrum(dataframe, ['Act. A', 'Act. C', 'Act. D'], format='svg', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')

2.12  显示指定维度中事件的分布

pm4py.vis.view_events_distribution_graph(log: EventLog | DataFrame, distr_type: str = 'days_week', format='png', activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name')

说明:显示指定维度中事件的分布
观察事件随时间的分布,可以推断出有关工作班次、工作日和一年中或多或少繁忙的时期的有用信息

输入参数:    

      log–事件日志
      district_type(str)–分布类型(默认值:days_week):-days_month=>获取事件在一个月的天数(从1到31)中的分布-mounts=>获取事件的月份(从1个月到12个月)中的分配-mounts>>获取事件在事件日志的年份中的分布-hunts=>获得事件在一天的小时中的分布(从0到23)-days_week=>获取事件在一周中的天数(从周一到周日)-weeks=>获取事件在全年中的周中的分布(从0至52)
      format(str)–可视化的格式(默认值:png)
      activity_key(str)–要用作活动的属性
      case_id_key(str)–要用作案例标识符的属性
      timestamp_key(str)–要用作时间戳的属性

示例代码:

import pm4pypm4py.view_events_distribution_graph(dataframe, format='svg', distr_type='days_week', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')

2.13 查看OC-DFG

pm4py.vis.view_ocdfg(ocdfg: Dict[str, Any], annotation: str = 'frequency', act_metric: str = 'events', edge_metric='event_couples', act_threshold: int = 0, edge_threshold: int = 0, performance_aggregation: str = 'mean', format: str = 'png', bgcolor: str = 'white', rankdir: str = 'LR')[source]

说明:使用提供的配置查看OC-DFG(以对象为中心的直接跟随图形)。
以对象为中心的直接跟随多重图是单个对象类型的直接跟随图的组合,考虑到以对象为核心的事件日志的实体(即事件、唯一对象、总对象),可以用不同的度量对其进行注释。

输入参数:    

      ocdfg–以对象为中心的直接跟随图
      annotation(str)–用于可视化的注释。值:-“频率”:频率注释-“性能”:性能注释
      act_metric(str)–用于活动的度量。可用值:-“events”=>事件数(默认值)-“unique_objects”=>唯一对象数-“total_objects“=>总对象数
edge_metric(str)–用于边的度量。可用值:-“event_couples”=>事件对数(默认)-“unique_objects”=>唯一对象数-“total_objects“=>总对象数
      act_threshold(int)–应用于活动频率的阈值(默认值:0)。只有频率>=的活动才会保留在图中。
      edge_threshold(int)–要应用于边缘频率的阈值(默认为0)。只有频率>=的边才会保留在图形中。
      performance_aggregation(str)–用于性能的聚合度量:平均值、中值、最小值、最大值、总和
      format(str)–输出可视化的格式(如果提供了html,则GraphvizJS用于在html页面中呈现可视化)
      bgcolor(str)–可视化的背景色(默认值:白色)
      rankdir(str)–设置图形的方向(“LR”表示从左到右;“TB”表示从上到下)

示例代码:

import pm4pyocdfg = pm4py.discover_ocdfg(ocel)
pm4py.view_ocdfg(ocdfg, annotation='frequency', format='svg')

2.14 可视化以对象为中心的petri网

pm4py.vis.view_ocpn(ocpn: Dict[str, Any]format: str = 'png'bgcolor: str = 'white'rankdir: str = 'LR')

说明:可视化以对象为中心的petri网。

输入参数:    

      ocpn–以对象为中心的Petri网
     format(str)–可视化的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化)
     bgcolor(str)–可视化的背景色(默认值:白色)
      rankdir(str)–设置图形的方向(“LR”表示从左到右;“TB”表示从上到下)

示例代码:

import pm4pyocpn = pm4py.discover_oc_petri_net(ocel)
pm4py.view_ocpn(ocpn, format='svg')

2.15 查看OC-DFG

pm4py.vis.view_object_graph(ocel: OCEL, graph: Set[Tuple[str, str]], format: str = 'png', bgcolor: str = 'white', rankdir: str = 'LR')

说明:可视化对象图。

输入参数:    

      ocel(ocel)–以对象为中心的事件日志
      graph–对象图
      format(str)–可视化的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化)
       bgcolor(str)–可视化的背景色(默认值:白色)
      rankdir(str)–设置图形的方向(“LR”表示从左到右;“TB”表示从上到下)

示例代码:

import pm4pyocel = pm4py.read_ocel('trial.ocel')
obj_graph = pm4py.ocel_discover_objects_graph(ocel, graph_type='object_interaction')
pm4py.view_object_graph(ocel, obj_graph, format='svg')

2.16 可视化网络分析

pm4py.vis.view_network_analysis(network_analysis: Dict[Tuple[str, str], Dict[str, Any]], variant: str = 'frequency', format: str = 'png', activity_threshold: int = 1, edge_threshold: int = 1, bgcolor: str = 'white')

说明:可视化网络分析

输入参数:    

      network_analysis–网络分析
      variant(str)–可视化的变体:-频率(如果发现的网络分析包含交互的频率)-性能(如果找到的网络分析包括交互的性能)
      format(str)–可视化的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化)
      activity_threshold(int)–要包含的活动的最小出现次数(默认值:1)
      edge_threshold(int)–要包含的边的最小出现次数(默认值:1)
      bgcolor(str)–可视化的背景色(默认值:白色)

示例代码:

import pm4pynet_ana = pm4py.discover_network_analysis(dataframe, out_column='case:concept:name', in_column='case:concept:name', node_column_source='org:resource', node_column_target='org:resource', edge_column='concept:name')
pm4py.view_network_analysis(net_ana, format='svg')

2.17 可视化变迁系统

pm4py.vis.view_transition_system(transition_system: TransitionSystem, format: str = 'png', bgcolor: str = 'white')

说明:可视化变迁系统

输入参数:    

       transition_system(TransitionSystem)–过渡系统
      format(str)–可视化的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化)
      bgcolor(str)–可视化的背景色(默认值:白色)

示例代码:

import pm4pytransition_system = pm4py.discover_transition_system(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
pm4py.view_transition_system(transition_system, format='svg')

 2.18 可视化前缀树

pm4py.vis.view_prefix_tree(trie: Trieformat: str = 'png'bgcolor: str = 'white')

说明:可视化前缀树

输入参数:    

      prefix_tree–前缀树
     format(str)–可视化的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化)
      bgcolor(str)–可视化的背景色(默认值:白色)

示例代码:

import pm4pyprefix_tree = pm4py.discover_prefix_tree(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
pm4py.view_prefix_tree(prefix_tree, format='svg')

 2.19 可视化对齐

pm4py.vis.view_alignments(log: EventLog | DataFrame, aligned_traces: List[Dict[str, Any]], format: str = 'png')

说明:可视化对齐

输入参数:    

    log–事件日志
     aligned_traces–对齐的结果
format(str)–可视化的格式(默认值:png)

示例代码:

import pm4pylog = pm4py.read_xes('tests/input_data/running-example.xes')
net, im, fm = pm4py.discover_petri_net_inductive(log)
aligned_traces = pm4py.conformance_diagnostics_alignments(log, net, im, fm)
pm4py.view_alignments(log, aligned_traces, format='svg')

 2.20 可视化足迹矩阵

pm4py.vis.view_footprints(footprints: Tuple[Dict[str, Any], Dict[str, Any]] | Dict[str, Any], format: str = 'png')

说明:可视化足迹矩阵

输入参数:    

     footprints–footprints
     format(str)–
  可视化的格式(默认值:png)

示例代码:

import pm4pylog = pm4py.read_xes('tests/input_data/running-example.xes')
fp_log = pm4py.discover_footprints(log)
pm4py.view_footprints(fp_log, format='svg')

如需了解更多,欢迎加入流程挖掘交流群QQ:671290481.

相关文章:

【Pm4py第七讲】关于visualization

本节用于介绍pm4py中的可视化函数,包括可视化bpmn、petri、性能图谱、变迁系统等。 1.函数概述 本次主要介绍Pm4py中一些常见的可视化函数,总览如下表: 函数名说明view_alignments(log, aligned_traces[, format])可视化对齐方法 view_bpmn(…...

通过 BigQuery 中的 11 个新链增强 Google Cloud 的区块链数据服务

2018 年初,Google Cloud 与社区合作,通过BigQuery 公共数据集实现区块链数据民主化;2019 年,又扩展了六个数据集;今天,我们在 BigQuery 公共数据集中添加了 11 个最受欢迎的区块链预览版。我们也在对该程序…...

C++笔记之文档术语——将可调用对象作为函数参数

C笔记之文档术语——将可调用对象作为函数参数 相关博文:C笔记之函数对象functors与可调用对象 文章目录 C笔记之文档术语——将可调用对象作为函数参数1.在函数参数中传递可调用对象2.‘在参数中传入可调用对象’和‘将可调用对象作为函数参数’哪个描述更加专业…...

【Android知识笔记】FrameWork中的设计模式

一、FrameWork中有哪些设计巧妙之处 例如: Binder调用,模糊进程边界: 屏蔽跨进程IPC通信的细节,让开发者把精力放在业务上面,无需关心进程之间的通信。Bitmap大图传输,高性能: 只传递Binder句柄,到目标进程后做内存映射,不用做大量数据拷贝,速度非常快。Zygote创建进…...

机器学习西瓜书+南瓜书吃瓜教程第三章学习笔记

本次学习为周老师的机器学习西瓜书谢老师南瓜书Datawhale视频 视频地址 下面为本人的学习笔记,最近很忙还没学多少,之后补!!! u1s1,边看视频边自己手推一遍真的清楚很多,强烈推荐自己手推虽然花…...

JUnit5单元测试提示“Not tests were found”错误

JUnit5单元测试提示“Not tests were found”错误,如下图所示: 或者 问题解析: 1)使用Test注解时,不能有返回值; 2)使用Test注解时,不能使用private关键字; 存在以上情…...

C++ -- IO流

目录 C语言的输入与输出 CIO流 C标准IO流 C文件IO流 文件常见的打开方式如下 以二进制的形式操作文件 以文本的形式操作文件 读写结构体 stringstream的简单介绍 C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输…...

uniapp:如何修改组件默认样式

日历组件默认样式如下图,但是我不想要右上角的红点,并且日期下面的数字要加红色背景,变成圆形,还是先用元素检查找到元素的类名,然后通过/deep/来覆盖样式,需要注意的是,lang要scss或者less&…...

Lombok @Accessors(chain = true) 导致 FastJson parsObject()对父类属性失效

我们在项目中经常会用到lombok工具对POJO类进行简化,但不可避免的存在父类和子类的设计,并且会对父类和子类进行序列化和反序列化,今天遇到了一个问题,序列化的json字符串转化为子类对象时无法获取到父类属性值,对象中所有父类属性均为空值或默认值,很是奇怪,代码如下: 父类:P…...

Aztec交易架构解析

1. 引言 前序博客有: Aztec的隐私抽象:在尊重EVM合约开发习惯的情况下实现智能合约隐私完全保密的以太坊交易:Aztec网络的隐私架构Aztec.nr:Aztec的隐私智能合约框架——用Noir扩展智能合约功能Account Abstraction账号抽象——…...

商品秒杀系统整理

1、使用redis缓存商品信息 2、互斥锁解决缓存击穿问题,用缓存空值解决缓存穿透问题。 3、CAS乐观锁解决秒杀超卖的问题 4、使用redission实现一人一单。(分布式锁lua)脚本。 5、使用lua脚本进行秒杀资格判断(将库存和用户下单…...

C语言实现八种功能的通讯录(添加、删除、查找、修改、显示、排序、退出、清空)

通讯录功能概要及前提说明 此通讯录利用C语言完成,可以实现八种功能的通讯录(添加、删除、查找、修改、显示、排序、退出、清空) 代码由三部分组成,为什么要写成三部分而不写成一部分可以参考我以前的博客,如下&…...

视频监控/视频汇聚/安防视频监控平台EasyCVR配置集群后有一台显示离线是什么原因?

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多…...

【RabbitMQ实战】02 生产者和消费者示例

在上一节中,我们使用docker部署了RabbitMQ,这一节我们将写一段生产者和消费者的代码。将用到rabbitmq的原生API来进行生产和发送消息。 一、准备工作 开始前,我们先在RabbitMQ控制台建相好关的数据 本机的RabbitMQ部署机器是192.168.56.201…...

Linux下ThinkPHP5实现定时器任务 - 结合crontab

实例一&#xff1a; 1.在/application/command创建要配置的PHP类文件&#xff0c;需要继承Command类&#xff0c;并重写configure和execute两个方法&#xff0c;例如: <?php namespace app\command; use think\console\Command; use think\console\Input; use think\cons…...

3dsmax模型烘焙光照贴图并导入unity流程详解

目录 前言 软件环境 前置知识储备 一、模型场景搭建 二、模型材质处理 三、vray渲染准备 四、烘焙至贴图 五、unity场景准备 六、贴图与材质 前言 该流程针对某些固定场景&#xff08;模型发布、无法使用实时渲染引擎等&#xff09;情况下的展示&#xff0c;本文记录烘…...

安卓生成公钥和md5签名

安卓公钥和md5证书签名 大家好&#xff0c;最近需要备案app&#xff0c;用到了公钥和md5&#xff0c;MD5签名我倒是知道&#xff0c;然而对于公钥却一下子不知道了&#xff0c; 现在我讲一下我的流程。 首先是md5证书签名的查看&#xff0c; 生成了apk和签名.jks后&…...

pwndbg安装(gdb插件)

pwndbg安装&#xff08;gdb插件&#xff09; 源地址&#xff1a;https://github.com/pwndbg/pwndbg 手动安装 git clone https://github.com/pwndbg/pwndbg cd pwndbg ./setup.sh 没啥问题运行gdb的话就可以看到明显的不同了 如果安装成功了&#xff0c;但没有生效 如果有问…...

SpringBoot 学习(二)配置

2. SpringBoot 配置 2.1 配置文件类型 配置文件用于修改 SpringBoot 的默认配置。 2.1.1 properties 文件 **properties ** 是属性文件后缀。 文件名&#xff1a;application.properties 只能保存键值对。 基础语法&#xff1a;keyvalue namewhy注入配置类 Component //…...

西门子828d授权密钥破解经验分享 I7I54833762

操作数组的方法 Array.prototype.toSorted(compareFn) //返回一个新数组&#xff0c;其中元素按升序排序&#xff0c;而不改变原始数组。 Array.prototype.toReversed() //返回一个新数组&#xff0c;该数组的元素顺序被反转&#xff0c;但不改变原始数组。 Array.prototype.to…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...