openpnp - modify source code - SlotSchultzFeederConfigurationWizard

文章目录

    • openpnp - src modify - SlotSchultzFeederConfigurationWizard
    • 概述
    • 笔记
    • 备注
    • END

openpnp - src modify - SlotSchultzFeederConfigurationWizard

概述

在给SlotSchultzFeeder分配元件时, 发现坐标文件中产生的Part名称是拼起来的, 名字很长.
在飞达元件下拉列表中选择时, 看不全, 不放心.
另外基准点元件的名称所在的文本编辑框宽度不够, 显示不全.
选择飞达动作时, 动作的名称也显示不全, 只能看到前半部分.
就想着将SlotSchultzFeeder信息页的UI元素的宽度加大.
改了一下, 好使.
效果如下:
在这里插入图片描述

笔记

提交到本地后, 和上一次的版本进行比对, 发现只改了 D:\my_openpnp\openpnp_github\src\main\java\org\openpnp\machine\reference\feeder\wizards\SlotSchultzFeederConfigurationWizard.java

在这里插入图片描述
在这个文件中, 只改了 SlotSchultzFeederConfigurationWizard(SlotSchultzFeeder feeder), 这个函数是动态设置UI元素的函数.
改动点如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

修改后的完整函数如下:

    public SlotSchultzFeederConfigurationWizard(SlotSchultzFeeder feeder) {this.feeder = feeder;JPanel slotPanel = new JPanel();slotPanel.setBorder(new TitledBorder(null, "Slot", TitledBorder.LEADING, TitledBorder.TOP, null, null));contentPanel.add(slotPanel);slotPanel.setLayout(new BoxLayout(slotPanel, BoxLayout.Y_AXIS));JPanel whateverPanel = new JPanel();slotPanel.add(whateverPanel);FormLayout fl_whateverPanel = new FormLayout(new ColumnSpec[] {FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,},new RowSpec[] {FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,});fl_whateverPanel.setColumnGroups(new int[][]{new int[]{4, 6, 8, 10}});whateverPanel.setLayout(fl_whateverPanel);feederNameTf = new JTextField();whateverPanel.add(feederNameTf, "8, 2, 3, 1");feederNameTf.setColumns(10);JPanel panel_1 = new JPanel();FlowLayout flowLayout_1 = (FlowLayout) panel_1.getLayout();flowLayout_1.setAlignment(FlowLayout.LEFT);whateverPanel.add(panel_1, "12, 2");JButton loadFeederBtn = new JButton(loadFeederAction);loadFeederBtn.setToolTipText("Load installed feeder to slot.");panel_1.add(loadFeederBtn);//        JButton newFeederBtn = new JButton(newFeederAction);//        panel_1.add(newFeederBtn);JButton deleteFeederBtn = new JButton(deleteFeederAction);deleteFeederBtn.setToolTipText("Remove selected feeder from database.");panel_1.add(deleteFeederBtn);JLabel lblPickRetryCount = new JLabel("Pick Retry Count");whateverPanel.add(lblPickRetryCount, "2, 12, right, default");pickRetryCount = new JTextField();pickRetryCount.setColumns(10);whateverPanel.add(pickRetryCount, "4, 12, fill, default");JLabel lblBank = new JLabel("Bank");whateverPanel.add(lblBank, "2, 14, right, default");bankCb = new JComboBox();whateverPanel.add(bankCb, "4, 14, 3, 1");bankCb.addActionListener(e -> {feederCb.removeAllItems();Bank bank = (Bank) bankCb.getSelectedItem();feederCb.addItem(null);if (bank != null) {for (Feeder f : bank.getFeeders()) {feederCb.addItem(f);}}});JLabel lblFeeder = new JLabel("Feeder");whateverPanel.add(lblFeeder, "2, 2, right, default");feederCb = new JComboBox();whateverPanel.add(feederCb, "4, 2, 3, 1");JPanel feederPanel = new JPanel();feederPanel.setBorder(new TitledBorder(null, "Feeder", TitledBorder.LEADING, TitledBorder.TOP, null));contentPanel.add(feederPanel);FormLayout fl_feederPanel = new FormLayout(new ColumnSpec[] {FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,},new RowSpec[] {FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,});fl_feederPanel.setColumnGroups(new int[][]{new int[]{4, 6, 8, 10}});feederPanel.setLayout(fl_feederPanel);JLabel lblX_1 = new JLabel("X");feederPanel.add(lblX_1, "4, 2");JLabel lblY_1 = new JLabel("Y");feederPanel.add(lblY_1, "6, 2");JLabel lblZ_1 = new JLabel("Z");feederPanel.add(lblZ_1, "8, 2");JLabel lblRotation_1 = new JLabel("Rotation");feederPanel.add(lblRotation_1, "10, 2");JLabel lblOffsets = new JLabel("Offsets");feederPanel.add(lblOffsets, "2, 4");xOffsetTf = new JTextField();feederPanel.add(xOffsetTf, "4, 4");xOffsetTf.setColumns(10);yOffsetTf = new JTextField();feederPanel.add(yOffsetTf, "6, 4");yOffsetTf.setColumns(10);zOffsetTf = new JTextField();feederPanel.add(zOffsetTf, "8, 4");zOffsetTf.setColumns(10);rotOffsetTf = new JTextField();feederPanel.add(rotOffsetTf, "10, 4");rotOffsetTf.setColumns(10);//        offsetLocButtons = new LocationButtonsPanel(xOffsetTf, yOffsetTf, zOffsetTf, rotOffsetTf);offsetLocButtons = new LocationButtonsPanel(xOffsetTf, yOffsetTf, zOffsetTf, null);feederPanel.add(offsetLocButtons, "12, 4");JLabel lblPart = new JLabel("Part");feederPanel.add(lblPart, "2, 6, right, default");feederPartCb = new JComboBox();feederPanel.add(feederPartCb, "4, 6, 9, 1"); // 增加飞达对应元件的显示名称的下拉列表框宽度, param3 is wfeederPartCb.setModel(new PartsComboBoxModel());feederPartCb.setRenderer(new IdentifiableListCellRenderer<Part>());JPanel panelActuator = new JPanel();panelActuator.setBorder(new TitledBorder(null,"Actuators", TitledBorder.LEADING, TitledBorder.TOP, null));contentPanel.add(panelActuator);// 定义子面板布局的坐标行列数, 元素放置都是根据几行几列作为位置来放的.FormLayout fl_panelActuator = new FormLayout(new ColumnSpec[] {FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC,FormSpecs.RELATED_GAP_COLSPEC,FormSpecs.DEFAULT_COLSPEC},new RowSpec[] {FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC,FormSpecs.RELATED_GAP_ROWSPEC,FormSpecs.DEFAULT_ROWSPEC});fl_panelActuator.setColumnGroups(new int[][]{new int[]{4, 6, 8, 10}});panelActuator.setLayout(fl_panelActuator);JLabel lblActuatorValue = new JLabel("Feeder Number:");panelActuator.add(lblActuatorValue, "4, 2, right, default");actuatorValue = new JTextField();panelActuator.add(actuatorValue, "6, 2");actuatorValue.setColumns(6);JLabel lblActuator = new JLabel("Actuator");panelActuator.add(lblActuator, "4, 4, left, default");// get id 那行的UI元素JLabel lblGetID = new JLabel("Get ID");panelActuator.add(lblGetID, "2, 6, right, default");comboBoxIdActuator = new JComboBox();comboBoxIdActuator.setModel(new ActuatorsComboBoxModel(Configuration.get().getMachine()));panelActuator.add(comboBoxIdActuator, "4, 6, fill, default");btnIdActuator = new JButton(getIdActuatorAction);panelActuator.add(btnIdActuator, "6, 6");idText = new JTextField();idText.setColumns(10);panelActuator.add(idText, "8, 6");// pre pick 那行的UI元素JLabel lblFeed = new JLabel("Pre Pick");panelActuator.add(lblFeed, "2, 8, right, default");comboBoxFeedActuator = new JComboBox();comboBoxFeedActuator.setModel(new ActuatorsComboBoxModel(Configuration.get().getMachine()));panelActuator.add(comboBoxFeedActuator, "4, 8, fill, default");btnTestFeedActuator = new JButton(testFeedActuatorAction);panelActuator.add(btnTestFeedActuator, "6, 8");JLabel lblPostPick = new JLabel("Post Pick");panelActuator.add(lblPostPick, "2, 10, right, default");comboBoxPostPickActuator = new JComboBox();comboBoxPostPickActuator.setModel(new ActuatorsComboBoxModel(Configuration.get().getMachine()));panelActuator.add(comboBoxPostPickActuator, "4, 10, fill, default");btnTestPostPickActuator = new JButton(testPostPickActuatorAction);panelActuator.add(btnTestPostPickActuator, "6, 10");JLabel lblFeedCount = new JLabel("Get Feed Count");panelActuator.add(lblFeedCount, "2, 12, right, default");comboBoxFeedCountActuator = new JComboBox();comboBoxFeedCountActuator.setModel(new ActuatorsComboBoxModel(Configuration.get().getMachine()));panelActuator.add(comboBoxFeedCountActuator, "4, 12, fill, default");btnGetFeedCountActuator = new JButton(getFeedCountActuatorAction);panelActuator.add(btnGetFeedCountActuator, "6, 12");feedCountValue = new JTextField();feedCountValue.setColumns(8);panelActuator.add(feedCountValue, "8, 12");JLabel lblClearCount = new JLabel("Clear Feed Count");panelActuator.add(lblClearCount, "2, 14, right, default");comboBoxClearCountActuator = new JComboBox();comboBoxClearCountActuator.setModel(new ActuatorsComboBoxModel(Configuration.get().getMachine()));panelActuator.add(comboBoxClearCountActuator, "4, 14, fill, default");btnClearCountActuator = new JButton(clearCountActuatorAction);panelActuator.add(btnClearCountActuator, "6, 14");JLabel lblGetPitch = new JLabel("Get Pitch");panelActuator.add(lblGetPitch, "2, 16, right, default");comboBoxPitchActuator = new JComboBox();comboBoxPitchActuator.setModel(new ActuatorsComboBoxModel(Configuration.get().getMachine()));panelActuator.add(comboBoxPitchActuator, "4, 16, fill, default");btnPitchActuator = new JButton(pitchActuatorAction);panelActuator.add(btnPitchActuator, "6, 16");pitchValue = new JTextField();pitchValue.setColumns(8);panelActuator.add(pitchValue, "8, 16");JLabel lblTogglePitch = new JLabel("Toggle Pitch");panelActuator.add(lblTogglePitch, "2, 18, right, default");comboBoxTogglePitchActuator = new JComboBox();comboBoxTogglePitchActuator.setModel(new ActuatorsComboBoxModel(Configuration.get().getMachine()));panelActuator.add(comboBoxTogglePitchActuator, "4, 18, fill, default");btnTogglePitchActuator = new JButton(togglePitchActuatorAction);panelActuator.add(btnTogglePitchActuator, "6, 18");JLabel lblTogglePitchDesc = new JLabel("Toggle between 2 MM and 4 MM");panelActuator.add(lblTogglePitchDesc, "8, 18, left, default");JLabel lblGetStatus = new JLabel("Get Status");panelActuator.add(lblGetStatus, "2, 20, right, default");comboBoxStatusActuator = new JComboBox();comboBoxStatusActuator.setModel(new ActuatorsComboBoxModel(Configuration.get().getMachine()));panelActuator.add(comboBoxStatusActuator, "4, 20, fill, default");btnStatusActuator = new JButton(statusActuatorAction);panelActuator.add(btnStatusActuator, "6, 20");statusText = new JTextField();statusText.setColumns(50);panelActuator.add(statusText, "8, 20");if(Configuration.get().getMachine().isEnabled()){// 命令不能并发, 下位机处理不过来.my_delay_ms(300);getIdActuatorAction.actionPerformed(null);my_delay_ms(300);getFeedCountActuatorAction.actionPerformed(null);my_delay_ms(300);pitchActuatorAction.actionPerformed(null);my_delay_ms(300);statusActuatorAction.actionPerformed(null);}for (Bank bank : SlotSchultzFeeder.getBanks()) {bankCb.addItem(bank);}feederCb.addItem(null);JLabel lblX = new JLabel("X");whateverPanel.add(lblX, "4, 4, center, default");JLabel lblY = new JLabel("Y");whateverPanel.add(lblY, "6, 4, center, default");JLabel lblZ = new JLabel("Z");whateverPanel.add(lblZ, "8, 4, center, default");JLabel lblRotation = new JLabel("Rotation");whateverPanel.add(lblRotation, "10, 4, center, default");JLabel lblPickLocation = new JLabel("Location");whateverPanel.add(lblPickLocation, "2, 6, right, default");xPickLocTf = new JTextField();whateverPanel.add(xPickLocTf, "4, 6");xPickLocTf.setColumns(10);yPickLocTf = new JTextField();whateverPanel.add(yPickLocTf, "6, 6");yPickLocTf.setColumns(10);zPickLocTf = new JTextField();whateverPanel.add(zPickLocTf, "8, 6");zPickLocTf.setColumns(10);pickLocButtons = new LocationButtonsPanel(xPickLocTf, yPickLocTf, zPickLocTf, rotPickLocTf);rotPickLocTf = new JTextField();whateverPanel.add(rotPickLocTf, "10, 6");rotPickLocTf.setColumns(10);whateverPanel.add(pickLocButtons, "12, 6");JButton fiducialAlign = new JButton(updateLocationAction);whateverPanel.add(fiducialAlign, "14, 6");fiducialAlign.setIcon(Icons.fiducialCheck);fiducialAlign.setToolTipText("Update feeder location based on fiducial");JLabel lblFiducialPart = new JLabel("Fiducial Part");whateverPanel.add(lblFiducialPart, "2, 8, right, default");fiducialPartTf = new JTextField();// 参数2字符串为 "x, y, w, h", 增加w, 就是增加文本输入框的宽度whateverPanel.add(fiducialPartTf, "4, 8, 8, 1"); // 增加飞达基准孔部件名称文本框的宽度, 参数3改大了.fiducialPartTf.addActionListener(e -> {feeder.setFiducialPart(fiducialPartTf.getText());});JLabel lblFeedRetryCount = new JLabel("Feed Retry Count");whateverPanel.add(lblFeedRetryCount, "2, 10, right, default");feedRetryCount = new JTextField();whateverPanel.add(feedRetryCount, "4, 10");feedRetryCount.setColumns(10);bankNameTf = new JTextField();whateverPanel.add(bankNameTf, "8, 14, 3, 1");bankNameTf.setColumns(10);JPanel panel = new JPanel();FlowLayout flowLayout = (FlowLayout) panel.getLayout();flowLayout.setAlignment(FlowLayout.LEFT);whateverPanel.add(panel, "12, 14");JButton newBankBtn = new JButton(newBankAction);panel.add(newBankBtn);JButton deleteBankBtn = new JButton(deleteBankAction);panel.add(deleteBankBtn);if (feeder.getBank() != null) {for (Feeder f : feeder.getBank().getFeeders()) {feederCb.addItem(f);}}}

备注

对java不熟, 边改边实验看效果.
改完没啥不良反应.

突然发现, 官方代码的2022/8/1那天上午的最后的代码, 并不是官方打包的代码实现.
因为我发现我现在基于2022/8/1那天改动的代码, 引入坐标文件后, package封装中的参数多了一个pad-pitch字段, 官方版本(dev-2022-0801)不认得.
在这里插入图片描述
在这里插入图片描述
等有时间得确认一下, 官方dev-2022/8/1 那个版本, 到底是从哪个代码上编译出来的?

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/121039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyCharm 安装 cx_Oracle 失败

我在PyCharm的终端用 pip安装cx_Oracle失败&#xff0c;报错情况如下&#xff1a; ERROR: Could not build wheels for cx_Oracle, which is required to install pyproject.toml-based projects 出错原因&#xff1a; python 的版本太高了&#xff0c;我的是3.11版本的&…

Compose 自定义 - 绘制 Draw

一、概念 所有的绘制操作都是通过调整像素大小来执行的。若要确保项目在不同的设备密度和屏幕尺寸上都能采用一致的尺寸&#xff0c;请务必使用 .toPx() 对 dp 进行转换或者采用小数尺寸。 二、Modifier 修饰符绘制 官方页面 在修饰的可组合项之上或之下绘制。 .drawWithCon…

redis集群理论和搭建

目录 环境 一&#xff0c;安装和部署redis 1&#xff0c;安装 2&#xff0c;部署 ​编辑 3&#xff0c;允许非本机连接redis 二、主从模式 主从模式搭建&#xff1a; 三&#xff0c;哨兵模式 哨兵模式搭建 四&#xff0c;集群模式 架构细节: 心跳机制 集群模式搭建&#xff1a…

<多线程章节五>synchrosized的可重入特性

&#x1f490;专栏导读 本篇文章收录于多线程&#xff0c;也欢迎翻阅博主的其他文章&#xff0c;可能也会让你有不一样的收获&#x1f604; &#x1f341;JavaSE &#x1f33a;多线程 &#x1f342;数据结构 &#x1f490;synchrosized的可重入特性及死锁 可重入特性就是&…

力扣每日一题79:单词搜索

题目描述&#xff1a; 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格…

如何查找特定基因集合免疫基因集 炎症基因集

温故而知新&#xff0c;再次看下Msigdb数据库。它更新了很多内容。给我们提供了一个查询基因集的地方。 关注微信&#xff1a;生信小博士 比如纤维化基因集&#xff1a; 打开网址&#xff1a;https://www.gsea-msigdb.org/gsea/msigdb/index.jsp 2.点击search 3.比如我对纤维…

结构体数组经典运用---选票系统

结构体的引入 1、概念&#xff1a;结构体和其他类型基础数据类型一样&#xff0c;例如int类型&#xff0c;char类型&#xff0c;float类型等。整型数&#xff0c;浮点型数&#xff0c;字符串是分散的数据表示&#xff0c;有时候我们需要用很多类型的数据来表示一个整体&#x…

Parity 战略转型引热议,将如何推动波卡生态去中心化?

Polkadot 生态的区块链基础设施公司 Parity Technologies&#xff0c;最近宣布了一项重要的战略调整&#xff0c;即正在寻求在未来几个月内&#xff0c;将部分现有的市场职能转移给 Polkadot 生态系统内的多个去中心化团队&#xff0c;这将影响 Parity Technologies 未来几个月…

ffmpeg中examples编译报不兼容错误解决办法

ffmpeg中examples编译报不兼容错误解决办法 参考examples下的README可知&#xff0c;编译之前需要设置 PKG_CONFIG_PATH路径。 export PKG_CONFIG_PATH/home/user/work/ffmpeg/ffmpeg/_install_uclibc/lib/pkgconfig之后执行make出现如下错误&#xff1a; 基本都是由于库的版…

(el-Table)操作(不使用 ts):Element-plus 中 Table 多选框的样式等的调整

Ⅰ、Element-plus 提供的 Table 表格组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供 Table 组件情况&#xff1a; 其一、Element-ui 自提供的 Table 代码情况为(示例的代码)&#xff1a; // Element-plus 自提供的代码&#xff1a; // 此时是使用了 ts 语言环境…

企业管理系统有哪些?

文章目录 企业管理系统一、ERP 企业资源计划&#xff08;Enterprise Resource Planning&#xff09;二、OMS 订单管理系统&#xff08;Order Management System&#xff09;三、WMS 仓库管理系统&#xff08;Warehouse Management System &#xff09;四、TMS 运输管理系统 (Tr…

第十三章---枚举类型与泛型

一&#xff0c;枚举类型 1.使用枚举类型设置常量 设置常量时&#xff0c;我们通常将常量放置在接口中&#xff0c;这样在程序中就可以直接使用。该常量稚因为在接口中定义常量时&#xff0c;该常量的修饰符为 final 与 static。 public interface Constants ( public static …

LVS集群-DR模式【部署高可用LVS-DR集群】

文章目录 2.2 实战&#xff1a;配置LVS-DR集群2.2.1 配置IP&#xff08;Director Server的部署配置&#xff09;2.2.2 生成ens33:1配置文件 &#xff08;Director Server的部署配置&#xff09;2.2.3 配置LVS-DR规则&#xff08;Director Server的部署配置&#xff09;2.2.4 两…

Docker 镜像读写层核心概念:rootfs、Union mount、image以及layser原理详解

Docker 镜像读写层核心概念&#xff1a;rootfs、Union mount、image以及layser原理详解 文章目录 Docker 镜像读写层核心概念&#xff1a;rootfs、Union mount、image以及layser原理详解rootfsUnion mount为什么镜像层都是只读的去掉读写层的话会有什么问题 Docker镜像imageDoc…

AcWing 1.2.1 最长上升子序列模型 + 动态规划 + 图解(详细)

&#xff08;1&#xff09;acwing 4557. 最长上升子序列 4557. 最长上升子序列 - AcWing题库 给定一个长度为 N 的整数序列 a1,a2,…,aN。请你计算该序列的最长上升子序列的长度。上升子序列是指数值严格单调递增的子序列 输入格式 第一行包含整数 N第二行包含 N个整数 a1,a…

大语言模型(LLM)综述(四):如何适应预训练后的大语言模型

A Survey of Large Language Models 前言5. ADAPTATION OF LLMS5.1 指导调优5.1.1 格式化实例构建5.1.2 指导调优策略5.1.3 指导调优的效果5.1.4 指导调优的实证分析 5.2 对齐调优5.2.1 Alignment的背景和标准5.2.2 收集人类反馈5.2.3 根据人类反馈进行强化学习5.2.4 无需 RLHF…

一个比较特别的串口工具

这是08年写的一个 并网带电池逆变器 的通讯工具&#xff0c;和普通的串口调试器相比&#xff0c;多了一个【脚本】功能。能够通过【脚本】完成通讯测试。 PC发给DSP的01命令 01 10 1B 00 CF A3 00 00 90 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 电…

小程序开发——小程序的事件

1.事件对象 事件与事件对象概述 事件是一种用户行为&#xff0c;用户的点击、滑动等操作都可以成为事件。事件也是一种通信方式&#xff0c;能够完成视图层&#xff08;WXML页面文件&#xff09;与逻辑层&#xff08;JS逻辑文件&#xff09;之间的通信。 事件对象是指用户在点…

uniapp开发app,在ios真机上出现的css样式问题

比如下面的问题&#xff0c;在iphone 13上出现&#xff0c;在iphone xR上正常。 问题一&#xff1a;border:1rpx造成边框显示不全 在iphone13上border边框有一部分不显示&#xff1a; 在iphone xR上显示正常&#xff1a; 解决办法是&#xff1a; 将border边框设置中的1rpx改…

分享一款基于 AI 的 Chrome 插件

最近使用大模型比较多&#xff0c;公司虽然提供了免费的 ChatGPT 但是需要跳转特定页面才能访问&#xff0c;比较麻烦&#xff0c;于是就想到是否可以开发一款类似于有道词典一样的 Chrome 插件&#xff0c;可以在任意页面使用&#xff0c;虽然市面上也有类似的插件&#xff0c…