扬声器 | 成绩单 |
| 韦恩·莱文 | 欢迎参加我们的会议,主题是扩展 JSL 应用程序的 Hamcrest 自动化测试以实现持续改进。 |
| 我们将在这里向您展示的,我们对您的承诺,是我们将向您展示如何建立一个高效、具有成本效益的企业 |
| 高质量保证、高度可靠且可支持的基于 JMP 的关键任务集成分析系统。 是的,有很多话要说,但那就是 |
| 这就是我们在这个环境中所做的事情。 我们对此非常满意。 我们非常荣幸能够与您分享。 |
| 这是我们将遵循的议程。 稍微介绍一下我自己,我稍后会介绍一下 Predictum,因为您可能不太了解我们, |
| 我们的背景、我们的 JSL 开发背景、基础设施以及与此相关的一些历史。 |
| 然后我们将在这里与您分享我们所实施的变革的结果。 然后我们将进行演示并讨论下一步是什么,我们计划继续做什么,最后我们将开放它,回答您可能有的任何问题。 |
| 我是韦恩·莱文,右边就是我。 我是 Predictum 的总裁,我已加入 |
| 与文斯·法勒。 文斯是我们的首席软件工程师,他一直领导着这项非常重要的计划。 就在这里简单介绍一下我们。 我们是 JMP 合作伙伴。 |
| 我们于 1992 年成立,今年 29 岁。 |
| 我们使用 JMP 进行统计方法等方面的培训,在这些领域提供咨询,我们花费了大量时间来构建和 |
| 部署集成分析应用程序和系统,因此这项工作对我们非常重要。 我们首先交付 JMP 应用程序 |
| 2000 年的 JMP 4.0,是的,确实是 20 多年前,我们一直在构建更大的系统。 当然,从那时起,它就太小了,但我认为我们是围绕 JMP 8 或 9 开始构建更大的系统的。 |
| 所以我们在这方面有相当多的历史,很容易就超过10年了。 简单介绍一下背景……直到 2019 年下半年,我们的开发环境真的很不同,很零散。 |
| 项目管理 |
| 在那里,但一切又都破碎了。 我们有不同的应用程序用于版本控制和管理时间,您知道,我们的开发人员时间等等,以及一般的项目管理。 |
| 开发商很容易花钱,我们会讨论这个, |
| 他们大约一半的时间只是做常规的机械事情,例如加密和打包 JMP 插件。 你知道,维护配置包, |
| 你知道,并分离存储库或我们通常所说的存储库,用于加密和未加密的脚本。 我们必须考虑很多事情,但这并不是真正的开发工作。 这确实是工作 |
| 开发人员的才华……被浪费了。 正如我所说,我们已经这样做了很长时间,即使在 2019 年,我们也轻松地度过了 10 年,所以 10 多年的遗留框架甚至可以追溯到 JMP 5,你知道,你知道,它变得臃肿且缓慢。 |
| 我们知道 JMP 多年来已经取得了长足的进步。 我的意思是,在 JMP 9 中,我们有了命名空间,JMP 14 引入了类,这就是 Hamcrest 的时候 |
| 开始了。正是 Hamcrest 真正让我们能够采取这一行动……通过这一重大举措。 因此,我们早在 2019 年 8 月就开始了这项重大举措。 |
| 就在那时,我们获得了第一个 Gitlab 许可证,这就是我们新的开发……我们新的开发架构的开发,就这样,开始成形,从那时起它就一直在改进。 |
| 基本上每个月,我们都在不断增加和增强我们的能力,随着我们的前进,变得越来越高效。 |
| 而且这种情况还在继续,所以如果你愿意的话,我们实际上认为这是一种精益类型的努力。 它确实遵循精益原则,并且加速了我们的发展。 |
| 多亏了这个系统,我们有了自动化测试,文斯将向我们展示这一点。 我们这里有这个小模型,尽早测试并经常测试 |
| 这就是我们所做的。 它支持重用代码,并且我们重新开发了 Predictum 系统框架。 现在是2.0了。 我们从早期的努力中学到了很多东西。 所有这些都消失了,几乎全部消失了,并且被替换和扩展了。 |
| 文斯将告诉我们更多相关信息。 很容易,很容易,我们的生产力就提高了 50% 以上,我只想说开发人员更高兴了。 他们不再那么沮丧。 |
| 他们更专注于自己的工作,我的意思是开发人员应该做的真正工作,而不是那些乏味的事情。 |
| 我要说的是,仍有改进的空间,所以我们还没有完成,文斯会告诉我们更多相关信息。 |
| 您可能会说,我们现在有了开发标准,因此我们有功能的风格指南,并且我们所有的开发都是基于功能的。 |
| 每个功能至少需要一次 Hamcrest 测试,并且开发人员正在相互共享代码审查 |
| 确保我们遵循我们的标准。 它还提出了如何提高这些标准、使其变得更好的问题。 |
| 我们还有这些有趣的会议,鼓励开发人员打破代码, |
| 是的,所以它们被称为“这些破解代码挑战”,或者你有什么。 因此,它已成为我们工作方式的一部分,并且完全适合这种开发环境。 例如,它会导致进一步的测试,添加更多的 Hamcrest 测试。 我们有一个很小的、相当小的项目 |
| 我们一年多前就这么做了。 我们即将进入一个新阶段。 事情已经过去了... |
| 其中内置了超过 100 个 Hamcrest 测试,并且在开发过程中一遍又一遍地运行它们。 |
| 其他一些好处是它允许我们分配和跟踪我们的资源分配,比如开发人员正在做什么。 每个人都知道其他人在做什么 |
| 持续集成、持续部署等), |
| 有...代码冲突很早就被检测到,所以如果我们...而且我们确实这样做了,我们有多个人在处理某些项目,所以,你知道,有人在这里更改了一个功能,它会与其他人的功能发生冲突是在做。 我们会更快找到答案。 |
| 它还使我们能够提高多名员工的支持能力。 我们不能让代码依赖于特定的开发人员;我们必须拥有任何开发人员或支持人员都可以支持的代码 |
| 向前迈进。 所以这也是我们的一个重要目标。 它确实总体上推进了整个质量保证领域, |
| 包括支持 FDA 的要求,涉及 QA,比如验证、IQ OQ PQ。 所以...我们正在自动化或半自动化 |
| 这些任务也通过这个基础设施完成。 我们确实在内部和外部使用它,所以你可能知道,我们有 |
| 那里有一些产品,(???)科比腰带实验室,但新产品垃圾邮件很好科比发送垃圾邮件(???)也在其他地方谈论 |
| 2021 年 JMP Discovery 欧洲会议。 你可能想去看看,但它们相当大 |
| 代码库,它们都是开发出来的,换句话说,我们吃自己的狗粮,如果你知道这个表达方式,但我们也将它与我们所有的客户一起使用 |
| 开发,所以这对我们的客户来说很重要,因为我们正在构建他们将依赖的应用程序。 |
| 所以我们,我们需要……我们需要拥有让我们变得可靠的基础设施,无论如何,这是其中的一个重要部分。 |
| 我提到了Predictum系统框架。 您可以在这里看到它的一些片段。 它就在脚本索引中,你知道,我们看到了参数和 |
| 例子等等。 我们构建了所有这些,并且 95%,其中超过 95% 都有与之相关的 Hamcrest 测试。 当然,我们的目标是确保所有人都这样做,并且我们正在实现这一目标。 |
| 我们快到了。 有……这些框架……这个框架实际上是我们这里基础设施的一部分。 这是它的重要要素之一。 另一个就是……汉克雷斯特…… |
| 进行单元测试的能力。 我将......最后有一张幻灯片,它将为您提供一个社区链接,您可以在其中了解有关 Hamcrest 的更多信息。 这是一个 |
| 正如我几分钟前提到的,JMP 在 JMP 14 中为我们带来了开发。 Gitlab 是其中的重要组成部分;它为我们提供了项目管理存储库、CI/CD 管道等。 |
| 还有我们为 JSL 创建的 Visual...Visual Studio 代码扩展,我们...您会在那里看到五颗星,因为它在 |
| 在视觉工作室上。 我不确定我们称之为什么。 文斯,也许你可以告诉我们,商店里有什么。 它已被下载数百次,我们已经 |
| 定期更新。 所以这也是你可以去寻找的东西。 我认为我们在最后的资源幻灯片中也有一个链接。 |
| 所以我现在要做的就是把这个任务交给 Vince Faller。 文斯再次担任我们的首席软件工程师。 正如我所说,文斯从 2019 年 8 月开始领导这项倡议。 这是很多艰苦的工作 |
| 艰苦的工作仍在继续。 公司里的我们所有人都非常感谢文斯和他的领导。 话虽如此,文斯,你为什么不从这里拿走它呢? 我要... |
| 我是... |
| 文斯·法勒 | 分享。 |
| 所以韦恩多次提到了汉克雷斯特。 对于不知道 Hamcrest 是什么的人来说,它是由 |
| JMP。 |
| 贾斯汀·奇尔顿(Justin Chilton)和埃文·麦考克(Evan McCorkle)领衔。 它只是一个单元测试库,可让您以自动化的方式运行、测试并获取结果。 |
| 它确实让我们能够做到这一点,这就是为什么它被称为扩展。 |
| 我要展示一些东西 |
| 与我的屏幕。 我几乎只在我们构建的 VSCode 扩展中工作。 这是 VSCode。 |
| 我们这样做是因为它有很多我们不必编写的内置功能或可扩展功能,例如集成、实验室集成。 |
| 在这里您可以看到这是一个 JSL 脚本,并且它读取得很好。 |
| 如果你想得到它,如果你......如果你熟悉 VSCode,它只是一个轻量级的文本编辑器。 您只需输入 JMP |
| 你会看到的。 这是唯一的一个。 |
| 但我们会继续我们正在做的事情。 |
| 所以。 |
| 对于我们所做的任何代码更改, |
| 有管道运行。 |
| 我们只是展示它的作用。 因此,如果我将自述文件更改为 Discovery 的演示。 |
| 2021 年。 |
| 我将承诺这一点。 如果你不知道得到,就只是承诺 |
| 说我想要我们目前所处位置的快照,然后将其推送到存储库并将其保存在服务器上。 |
| 快乐的一天。 |
| 提交消息。 更多自述信息。 |
| 我可以直接获取推送,因为 VSCode 非常棒。 |
| 管道演示。 |
| 所以现在我已经推动了它。 将会有一条管道正在运行。 我可以到这里点击这个,它会给我我的合并请求。 所以现在 |
| 管道开始运行。 |
| 我可以检查管道的状态。 |
| 它现在正在做的是检查并检查它是否具有所需的 Hamcrest 文件。 我们有一些要求 |
| 我们强制执行,以便它能够... |
| 我们可以确保我们 |
| 做好我们的工作。 |
| 然后就完成了。 我要按加密。 |
| 现在加密将获取整个包并对其进行加密。 |
| 如果我们去这里的话 |
| 这只是某处的虚拟机。 它应该 |
| 开始跑步 |
| 一秒钟。 |
| 所以它只是遍历所有代码。 |
| 写下所有加密密码,检查,点击所有这些东西。 如果您曾经尝试过同时加密多个脚本, |
| 你可能会知道这很痛苦,所以我们将其自动化,这样我们就不必这样做,因为正如韦恩所说,我们花了很多时间来做这些。 |
| 就像,如果我们每次想要发布任何版本时都要检查 100 个脚本并加密其中的每一个脚本,那就太糟糕了。 |
| 因为我们必须有我们的 |
| 代码被加密,因为,是的,对不起,意见,好吧,我可以停止分享它。 |
| 啊。 |
| 这样就可以运行了。 |
| 应该很快就会完成。 |
| 然后它将经历并分阶段,然后分阶段基本上采用我们想要的所有信息源,如我们的文档中所示,如 |
| 我们编写的任何其他内容,它都会将它们呈现为我们在插件中想要的形式,因为就像 github、gitlab 的其余部分一样,我们的大部分文档都是用 markdown 编写的,然后我们将其呈现为任何形式。 |
| 我不需要展示其余的内容,但是是的。 所以它就过去了。 它会过去的。 |
| 我们将回到 VSCode。 |
| 所以。 |
| 如果我们要改变的话,那么这只是一个单一的功能。 |
| 如果我走进这里,如果我要运行这个...... |
| JSL,运行当前选择。 |
| 所以。 |
| 您可以看到它回来了...它要做的就是打开 Big Class,运行拟合线,然后得到方程。 它正在返回方程。 |
| 实际上你也可以看到它也跑到了这里。 |
| 但。 |
| 所以这可能需要更多的文档。 |
| 我们就像,哦,我们实际上并不希望打开这个数据表。 |
| 但让我们快速运行一下。 |
| 并说, |
| 不。这不是一个好的回报,它显然将方程式全部大写。 |
| 所以如果我表演的话。 |
| 更好的文档。 |
| 推。 |
| 再次回到这里。 |
| 所以,它再次推动。 这是另一条管道。 |
| 它只是按顺序运行一堆 power shell 脚本,具体取决于我们如何设置它。 |
| 但您会注意到该管道有更多阶段。 |
| 所以当我们 |
| 为了帮助扩展这一点,我们只测试 JSL |
| 一开始是最低限度的,然后,当它通过时,我们允许进一步测试。 |
| 而且我们只测试是否有 JSL 文件发生了变化。 |
| 但我们可以经历这个。 |
| 它将运行并告诉我们它在测试中的位置,以防测试冻结。 您知道,如果您有一个模式对话框无法关闭,显然 JMP 之后不会继续执行任何操作。 但你可以看到,它做了很多事情,是的,太棒了。 我受够了。 |
| 令人兴奋。 |
| 刷新一下。 获得一个绿色的小复选标记。 |
| 我们现在就可以开始运行一切了。 它将经历,测试所有内容,然后对其进行加密,然后测试加密的内容,基本上就是我们要制作加载项的实际内容,然后再次暂存它,为我们打包它,创建实际的加载项 -我们将给予客户。 |
| 我不会很快做这件事,因为这需要一分钟。 |
| 但 |
| 假设我们走进这里,我们就像,哦, |
| 好吧,我真的很想关闭这个数据表。 我不知道为什么我首先评论了。 我认为它不应该开放,因为我不再使用它,我们不……我们不想要这样。 |
| 我们会说好的。 |
| 关闭 dt。 |
| 再次推。 现在,这一切都可以通过 Hamcrest 在我的计算机上手动完成。 |
| 但你知道,有时开发人员会推送一些东西,而不是在他们的计算机上运行所有的 Hamcrest,这就是......它的全部目的就是捕捉它。 它迫使我们把工作做得更好一点。 |
| 和 |
| 是的。 |
| 继续点击这个按钮。 我可以打开它,但没关系。 |
| 现在您会看到它再次运行管道。 前往管道。 |
| 我将继续重复这句话。 我们只是进行测试、加密,然后测试 |
| 因为有时加密会进入它自己的状态 |
| 如果有人曾经加密过的话,世界上就充满了问题。 |
| 跑,跑,跑,跑,跑。 |
| 然后,哦,我们得到了一个投球。 你会看一下吗? |
| 我并不是想面无表情,但你知道。 |
| 因此,如果我们将其标记为就绪并说,是的,我们完成了,我们会看到, |
| 哦,好吧,那个测试没有通过。 |
| 现在 |
| 我们可以下载 |
| 为什么工件中的测试没有通过。 |
| 这将打开一个 J 单元 |
| 我要在这里提取的文件。 |
| 它还会在 getlab 中渲染它,这可能更容易,但现在我们就这样做。 |
| 最终。 尽量减少一切。 |
| 现在来吧。 |
| 所以,我们可以看到 R 平方发生了一些事情并且失败了。 |
| 里面 |
| 蓝色的。 |
| 所以我们可以来这里。 |
| 比如说,为什么 boo 中有一些东西会导致这个失败? |
| 我们看到,哦,有人称我们的方程为 |
| 然后他们就假设数据表就在那里。 因为我更改的某些内容破坏了其他人的代码,就好像这种情况会发生一样。 |
| 所以我们遇到了这个问题。 |
| 你去哪儿? 开始了。 |
| 所以这就是我们在这里所做的一切的主要目的,就是能够发现我改变了一些东西并且我破坏了别人的东西这一事实。 |
| 这样我就可以通过了。 |
| 看看boo做了什么。 |
| 说吧,好吧,也许我应该开大班 |
| 我。 |
| 是的,很酷。 好吧,如果我保存它, |
| 我也许应该让它变得更好。 |
| 自己开大班。 |
| 我会表演这个。 |
| 开大班。推一下。 |
| 再说一遍,只是显示 |
| 旧管道。 |
| 现在这应该需要 |
| 不……不太长。 |
| 所以我们要进去这里。 我们...我们只测试一个...以... |
| JMP版本,不过可以看到 |
| 自动地,我们只测试一个。 |
| 然后等待开发人员说,是的,我已经完成了,一切看起来都很好。 继续。 我们这样做是出于资源原因, |
| 因为这些系统运行在一直自动运行的虚拟机上,而且我们有多个开发人员,他们都在使用这些系统。 |
| 也是... |
| 你可以看到,这实际上是一个 docker 系统,我们正在将它们容器化。 |
| 好吧,我们正在将这些容器化。 我们已经让它们工作了,但我们还没有所有版本。 |
| 但是我们运行14.3,至少对于这个项目,我们运行14.3、15、15.1, |
| 这应该有效。 |
| 让我们恢复一切吧。 |
| 因为你知道那是有效的。 |
| 也许应该拍出经典……但没关系。 |
| 嗯是的。 |
| 我们要测试一下。 |
| 我感觉我一直在一遍又一遍地说这句话。 我们将测试一切。 |
| 实际上,我们会让这个运行来向您展示我们所得到的最终结果。 |
| 应该只需要。 |
| 一点点。 |
| 因此,我们将对其进行测试,确保其正常运行,并且您可以看到日志。 我们从正在发生的事情、它的位置中获取有用的信息,就像它会告诉你正在跑步的跑步者一样。 |
| 我现在只在 Windows 上运行。 再说一次,这是一个演示,但是 |
| 我们应该能够跑 |
| 更多的。 |
| 当它运行时,我将进一步讨论 VSCode。 |
| 在 VSCode 中,我们还...还有代码片段和其他东西,所以如果你想创建一个函数, |
| 它会为您创建所有功能信息。 我们使用自然文档 |
| 又是从 Hamcrest 队偷来的, |
| 作为我们的 |
| 开发文档。 |
| 所以它只会把所有内容都放在自然文档的形式中。 所以,再次强调,这个想法是帮助我们完成我们的工作,并迫使我们完成我们的工作 |
| 好一点,多一点热情。 |
| 韦恩·莱文 | 为了文档? |
| 文斯·法勒 | 这就是文档,是的。 |
| 韦恩·莱文 | 在我们开发的同时,我们也在记录。 |
| 文斯·法勒 | 是的。 绝对地。 |
| 要知道,它还有for循环、while循环。 |
| 对于关联行,类似的东西。 |
| 我们……这……这件事完成了吗? 大概已经完成了,是的。 |
| 这样我们就得到了绿色复选标记。 现在它将在所有系统上运行。 |
| 如果我们能回到这里,你就会看到它。 |
| 打开 JMP。 它将运行一些测试, |
| 可能会开大班。 |
| 然后关闭所有...将其自身全部关闭。 |
| 韦恩·莱文 | 所以我们这样做主要是因为 |
| 我们的许多客户部署了不同版本的 JMP,他们想要特定的插件,但他们 |
| 运行它,你知道,他们在现场有不同的版本。 我们还针对 JMP 的早期采用者版本进行测试,这是 JMP 的一项服务,因为我们报告了错误。 |
| 但对于客户来说,这也很有帮助,因为他们知道他们可以......他们可以升级到新版本的 JMP。 他们知道我们为他们构建的应用程序已经过测试。 |
| 这对我们来说只是例行公事。 |
| 好的。 |
| 文斯·法勒 | 你完成了。 你完成了。 你完成了。 |
| 改成... |
| 我可以谈论... |
| 这只是要运行,我们可以 |
| 如果你愿意的话,可以用这个电影魔法,梅格。 |
| 只是为了让它跑得更快。 |
| 基本上,我只是想进入舞台,但需要一点时间。 |
| 韦恩,对此你还有什么要说的吗? |
| 凉爽的。 |
| 我会把那个... |
| 我可以说的是 |
| 当我们上台的时候 |
| 我们在 mk docs 中也有我们的文档。所以它实际上会运行 mk doc 的版本,渲染它,将帮助放入帮助文件中,并且基本上能够为我们创建一个版本,这样我们就不必 |
| 处理它。 |
| 因为创建版本需要付出很多努力。 |
| 加密。 快完成了。 |
| 可能应该只预装一个。 |
| 现场演示,你要做什么。 |
| 一些。 |
| 跑步。 |
| 哦,我绝对想做一件事。 |
| 所以,管道实际上做的最后一件事是检查我们是否实际花费了时间,因为,你知道,如果 |
| 我们实际上并没有记录我们花费的时间,我们没有得到报酬,所以强迫我们这样做。 |
| 太棒了,美好的时光。 |
| 文德·法勒 | 所以 |
| 文斯·法勒 | 如果没有这个,工作就会失败。 |
| 我只能展示一些工作。 试。 |
| 那是码头工人的。 我们不希望这样。 |
| 所以 |
| 你可以看到这给我们带来了成功。 |
| 没有失败。 没有意外的投掷。 这些都是来自汉克雷斯特的东西。 |
| 快点。 多一个。 |
| 好的,开始上演了。 |
| 它所做的一件事是创建存储库。 |
| 它每次都会让它们变得新鲜。 |
| 所以就像,它试图将其保持在某种无状态状态 |
| 方式。好的,我们现在可以下载工件了。 |
| 现在我们应该有这个管道演示。 |
| 我真希望它就去那里。 |
| 什么。 |
| 为什么 Internet Explorer 已启动? 现在您将看到管道演示 |
| 是一个 JMP 插件。 |
| 如果我们解压它。 |
| 如果您不知道,JMP 插件只是一个 zip 文件。 |
| 如果我们现在看的话 |
| 你可以看到里面有我们所有的脚本,它有我们的 foo,它有我们的 bar。 如果我们打开那些, |
| 打开, |
| 你可以看到这是一个加密文件。 |
| 这基本上就是我们能够提供给客户的 |
| 并且没有那么多机械工作。 韦恩提到过 |
| 开发人员不会那么沮丧,就我个人而言,我认为这是轻描淡写的,因为在我们把它落实到位之前,一遍又一遍地这样做是非常令人沮丧的,而这已经帮助了很多人。 |
| 那。 |
| 韦恩·莱文 | 现在,关于加密,当您交付加载项时 |
| 对于公司内部的用户使用,您通常不希望出于安全原因等原因,您不希望任何人都能够进入并使用它们 |
| 处理代码。 你知道,这样的事情,所以我们可能会提供一个未加密的代码,只是为了,你知道,所以客户端的代码是加密的,但为了交付给最终用户,你通常希望所有内容都加密,所以它不能被篡改。 只是其中之一。 |
| 文斯·法勒 | 是的,我的演示就结束了。 韦恩,如果你想把它拿回来做总结的话。 |
| 韦恩·莱文 | 是啊,太棒了。 |
| 当然,非常感谢,文斯。 所以整个系统中有很多活动部件,所以基本上,确保我们有, |
| 您知道,代码是由多个用户开发的,彼此之间不会发生冲突。 我们正在同时构建文档。 实际上,文档是随应用程序一起部署的,我们不必将其编入其中。 它是... |
| 我们设置了基础设施,以便自动处理。 我们可以将其与代码一起全面、同时更新, |
| 如果你愿意的话。 正在进行的 Hamcrest 测试,每一个已编写的函数, |
| 如果你愿意的话,会有预期的结果。 所以我们对它们进行了比较,所以我们简单地看到,我猜这个方程存在一些问题。 一个 R 方或任何返回不同值的东西, |
| 所以换句话说,它崩溃了,说嘿,这里有些不对劲;我期待函数的输出 |
| 对于一个用例。 这是我们从客户那里得到的东西之一,所以你知道,我们建立了一个用例池,这些用例被转化为 Hamcrest 测试,然后我们就开始了。 这里还有一些其他幻灯片 |
| 您可以使用,例如,当您,当您,如果您去下载幻灯片时。 所以我会把它留给你,这是管道的小图片 |
| 我们正在使用这一点,并且也有一些关于开发人员的代码审查活动。 如果你想来回的话。 Vince,您想在此处添加有关如何进行代码审查和批准的任何内容吗? |
| 文斯·法勒 | 是的,所以在合并请求中 |
| 它将在代码差异上包含 JSL 代码。 再说一次,一个大 |
| 谢谢至 |
| 也做了 Hamcrest 的人,因为他们还为 GitHub 和 GitLab 启动了一个词法分析器(?),以便能够读取 JSL,所以实际上这是在 getlab 内部。 |
| 他们还可以阅读 JSL。 它不执行它,但它具有很好的格式。 它不只是白色的文字,它很漂亮。 我们只要进去, |
| 就像这个屏幕截图一样,您单击一行,输入您想要的评论,它就成为一个可审查的任务。 所以我们尝试在 GitLab 内部做尽可能多的事情 |
| 出于透明度原因,以及 |
| 一旦一切都结束了,你可以说是的,我的合并请求已经准备好了。 让我们把它放到 master 分支,main 分支。 |
| 韦恩·莱文 | 太棒了。 所以你真的是......它很有帮助,你知道,我们真的正在定义编码标准,如果你愿意的话,并且 |
| 我不喜欢“执行”这个词,但它就是这个意思。 它减少了变化。 如果愿意的话,它可以让多个开发人员更轻松地了解什么 |
| 其他人做了什么。 当我们引入新的开发人员时,他们开始了解该标准,他们知道要寻找什么,他们知道要做什么。 |
| 所以它......它使入职变得更加容易,并且它再次处理......一切都附加到这里的一切,所以你知道可支持性等等。 |
| 这是我之前提到的幻灯片,只是为了一些资源,所以我们使用 GitLab。 我想同样的原则通常适用于任何 git,比如 GitHub 或其他什么。 这是 Hamcrest 的社区链接。 有一次演讲在 |
| 在图森,那是2019年的事,以前我们经常一起旅行和聚会。 那很有趣。 这是视觉效果的市场链接...视觉代码工作室。 |
| Visual Studio代码,你有什么。 |
| 正如 Vince 所说,是的,我们大量使用该编辑器,而不是仅仅因为它是集成的就使用内置 JMP 编辑器。 它是... |
| 它只是一个大型应用程序开发环境的一部分。 在此,Vince 和我代表 Vince 和我本人,感谢您对此的兴趣,并再次感谢 JMP 团队。 贾斯汀·奇尔顿和他的公司, |
| 我会打电话给你。 如果没有汉克雷斯特,我们就不会这么做。 那是 |
| 缺失的部分或者说是真正使我们能够进行 JSL 开发的有利部分, |
| 基本上,您在代码开发中期望的标准类型,通常是在行业中。 所以我们真的很感激,而且我知道我们的... |
| 您知道,这是通过我们部署的每个应用程序传播出去的。 此时此刻,文斯和我很乐意回答任何问题…… |
| info@predictum.com 它将转发给我们,我们会回复您。 但此时,我们将开放问答。 |