光滑的牙齿,C ++和数学-它们之间有何关系? 与Align对话



有时在我看来,我对IT行业的了解越多,总的印象就越原始。 好像IT是一门严肃的火箭科学或另一项服务,“它使您只需单击一下即可*做其他事情”。 除此演示文稿的范围之外,还有一些新技术未涉及的活动。 去同一个牙科诊所-那么,IT在哪里?

这是什么错误。

如今,牙医开出了治疗处方,在他的决定背后可能是全球数百名工程师的工作。 程序员,数学家,技术人员,分析师,机器学习专家,经理,配备3D打印机的工厂-所有这些都是为了使好莱坞产生灿烂的笑容。

为什么会有这么多的人,他们到底在忙什么,以及数学家和C ++专家如何帮助甚至造牙齿,所以我们与Align Tech进行了交谈。AlignTech是一家大型国际公司,大量生产用于正畸治疗的护齿。
Align Technology Inc. 在“我的圈子”中,她的员工给她的平均评分为 4.5,她对公司的工作,有趣的社交活动,舒适的环境以及为使世界变得更美好而给予的最高评价!



-你在做什么?

-Andrey Maksimov :这是一种正畸治疗。 简而言之,我们致力于将牙齿移动到正确的位置。

任何人都有缺陷:错牙合或锯齿。 要解决此问题,您可以放置​​例如花括号。 我们提出了解决此问题的另一种方法-使用隐形客机。 这是为特定人员设计的护齿器。 她向必需的牙齿施加压力,牙齿移动。



作为一家公司,我们提供瓶盖制造解决方案。 在治疗开始时,医生会给牙齿印模或使用口内3D扫描仪进行扫描,然后将数据发送给我们,然后我们将其转换为3D模型。

“您使用哪种扫描仪?”

谢尔盖·瓦利耶夫(Sergey Valiev):想象一下电动牙刷。 它的头部旋转并刷牙。 除了这个头,我们还有一台高分辨率摄像机。 根据她的证词,建立了3D模型。 主要的困难是必须准确,迅速地完成手术-毕竟,患者张着嘴躺在椅子上。 扫描大约需要3-5分钟。



使相机起雾,溅上水或液体仍然有困难。 现在,工程师正在从事这些微妙的工作。

-如何从视频中获得3D模型? 这是摄影测量法吗?

-AM :我们使用共聚焦方法获得3D扫描,即我们使用激光和光学方法获得信息。



当指纹或扫描到达我们时,我们将使用特殊算法对其进行处理。 该程序了解牙齿在哪里,其他所有牙齿在哪里。 通过我们的ClinCheck程序,医生可以查看患者牙齿的3D模型并将其虚拟移动到正确的位置。 该程序还具有内置的测量和诊断工具。

-您了解治疗后应采用什么算法?

-AM:有牙齿矫正的规范。 我们拥有正确的牙齿位置基础,在医生的帮助下,我们建议您这样做。 实际上,我们使他们的工作自动化。



-只是根据教科书比较患者的牙齿和牙齿状况?

-AM:人们只有32颗牙齿,应该站立以免彼此干扰。 因此,借助算法,我们以某种方式公开了它们。 医生进行检查,进行调整,如果他喜欢的话,他会批准治疗计划,然后我们开始制造内衬的过程。

-这个程序如何运作?

Mikhail Matrosov:对于我们受过专门训练的员工(技术人员),我们正在创建Treat计划,在该计划中,他们根据医生的数据准备印刷衬板。 这是一名技术人员,负责接收患者下颌的数据以及医生对如何治疗每种情况的建议。 “治愈”的概念是非正式的,而且情况也大不相同。



该程序本身是3D CAD系统。 它显示了患者牙齿的初始状态。 然后,您可以在治疗后形成理想状态并计算中间阶段-患者的牙齿如何从初始状态转变为理想状态。 最后,该程序可以指示患者应将不可见的凸起(“附件”)附着在某些牙齿上,这将有助于牙龈形成正确的强度。 例如,没有它们,几乎不可能从牙龈中拔出一些牙齿。



这些步骤中的每一个均以半自动模式执行。 技术人员根据医生的意愿设置必要的设置,然后程序生成结果。 每个步骤都有自己的开发团队。

CAD系统出现后,CAM(计算机辅助制造)开始。 它计算每个阶段(中级和最终)的患者颌骨的完整模型。 每个阶段的这些模型都在3D打印机上打印。 然后将薄膜拉伸到印刷的表格上,用激光沿着复杂的轨迹绘制该薄膜的一部分,从而获得倾斜效果。 对于所有阶段,您都需要在Align内部开发的大量软件。 这就是为什么我们需要这么多的程序员。



AM:我们每天生产30万个独特的班轮。 没有一个竞争对手达到如此规模,因为基本上所有这一切都是手动过程。 而且,手动转弯不可能以任何方式实现。

-这三十万个内衬在哪里生产?

-AM:在墨西哥和中国的工厂里。 它们由特殊的塑料制成,也在阿兰开发。 由于进行了生物相容性测试,因此有一个特殊的化学式。 物质也是专有技术,它会影响治疗结果。



之后,将现成的试剂盒发送给医生,医生邀请病人并说明如何使用它们。 衬里几乎一直穿着,即使在晚上,也只能随食物一起起飞。 每两个星期,便用新的帽子更换一次。



牙齿和机器学习


有些牙医不像罕见的专家那样精通牙齿矫正。 因此,我们帮助他们解决一些简单的情况。 如果牙齿需要稍微移动,我们建议他们使用我们的自动治疗。

为了使医生了解他是否可以治疗某些病例,我们将通过特殊程序识别情况,做出一些诊断并得出结论-也许可以。 对于此类任务,我们需要大量的专家-ML,C ++。 由于我们具有自动化功能,因此我们需要后端专家。

首先,人们进行了案例评估操作,并对人工智能进行了培训。 现在,几乎100%的此类操作都是由机器完成的。 我们尝试了许多方法。 他们试图从照片中制作3D模型,并发现一些差异。 这不是很好。

一年半以前,发布了ML模型的第一版。 据我所知,该团队使用Python和TensorFlow。 在医生所治疗的几种类别中进行评估。 当患者向两侧散开时,牙齿可能很拥挤,反之亦然。 这些是牙齿的不同问题,不同的模型适用于它们。 它们是最常见的,我们从它们开始,然后转到更多私人案件。

在下一个版本中,我们将针对所有可能出现的牙齿问题类型推出模型。 在一段时间内,我们将跟踪所有有问题的情况并分析错误。 手工评估团队将为此保留一笔费用。

完整的模型训练过程大约花费了两年时间。

机器学习还用于处理照片。 我们正试图向人们展示他的笑容在治疗后的样子。 为此,我们为患者拍摄照片,绘制他的牙齿的3D模型,然后程序以接近真实的方式尝试将其嵌入照片中,以便患者看到他的笑容看起来如何美丽。




Align如何出现在俄罗斯


-AM:大约15年前。 来自莫斯科的人们在加利福尼亚学习,在学习期间,他们在Align办公室找到了工作。 在那些日子里,这是一家小公司。 当他们完成学业后,他们返回了莫斯科,但与他们的合同关系仍然存在。 他们只是非常好的程序员。 为了使他们更容易工作,在莫斯科开设了一个小型办公室。 然后它发展到非常大的规模。 现在有400多人。



在新西伯利亚,办事处的开设方式与在莫斯科相同。 一个证明自己很好的男人从那里来到了这里,决定返回自己的城市。 他提供了远程工作的机会,但他被分配创建一个小型办公室。 现在大约有四十人。

SV:有趣的是,一年前在莫斯科大约有200人。 我们一年几乎翻了一番。

-在所有这些项目中您的人员如何分配?

-AM:我们有一支处理后端的工程师团队。 有一个团队参与了针对医生的ClinCheck计划。 最大的团队从事技术人员的软件,该软件仅在内部使用。 有独立的QA和DevOps团队。 iTero团队制作扫描仪软件。

-团队在技术上有多独立?

-AM:团队的业务任务来自营销,但是技术决策是在莫斯科独立制定的。 他们不需要总部的特殊权限。 如果我们在系统之间更改体系结构,则至少应该讨论它并达成协议。 但是在功能级别上,我们具有完全独立性。

Andrey Zaitsev:我们有一个称为“架构审查委员会”的流程。 即使我们有足够的选择余地,我们也必须向领先的建筑师证明这一点。

例如,我们现在拥有主要的开发语言-Java。 但是该团队对Kotlin表示了极大的兴趣。 我们的一位开发人员为期半年,准备了一份有正当理由的演示文稿,其中考虑了雇用风险,数据泄漏风险,语言问题。 他在建筑委员会上作了演讲,我们得到了升级,团队得到了另一种开发语言。 现在,对于新的微服务,我们使用Kotlin而不是Java。 就是说,我们是自由的,但一切都需要证明其合理性。 您不能只是突然切换到某些Haskell。

-如何与其他办公室建立沟通?

-AM:互动没有困难。 我们经常前往位于美国北卡罗来纳州罗利市的研发办公室以及位于圣何塞的总部。



-AZ:我们的后端有六个SCRUM团队。 一个位于以色列特拉维夫办事处,另一个位于罗利,其余位于莫斯科。 我们每周进行两次同步,团队负责人讨论当前流程,即将发布的版本,团队之间的交互,新技术解决方案,通用模块的更改。 等等-标准的公司沟通。 我们拥有所有Microsoft团队,如有必要,您可以招募任何同事并与他交谈。

过去存在一个问题,圣何塞的办公室位于莫斯科对面的时区,当他们上班时,我们就离开了。 因此,会议通常在深夜举行。 在罗利设有办事处比较容易,他们的集会大约在晚上四点在莫斯科开始。

-AM:由于我们的团队正在为医生开发程序,因此我们应该在sprint结束时向在公司工作的医生演示演示。 他们坐在美国圣何塞,所以有时您必须不晚于晚上七点开始示威。



哪些技术能使牙齿均匀


-告诉我,谁在做什么?

-AM:我的团队正在开发的ClinCheck有两种形式。 第一个是桌面应用程序。 它由C ++和Qt制成,用于用户界面。 桌面是很久以前写的。 他的问题是:医生根本不是IT人员。 尽管他们是牙齿矫正领域的专家,但他们很难使计算机保持良好状态。 当我们发布更新时,很多技术难题开始了。

第二个问题是一半的牙齿矫正医生使用Mac,而我们的台式机仅适用于Windows。 如果医生要使用该程序,则必须安装虚拟机。 这很不方便-他们无法很好地应对计算机,更不用说管理虚拟机了。

因此,我们在网络上翻译了该应用程序,使其可以在任何地方使用。 在功能方面确实如此,但它尚未赶上桌面版本。 一旦赶上,我们将折叠桌面。

在开发中,我们使用TypeScript和ReactJS。 选择该脚本主要是因为可以进行静态类型检查。 有趣的是,某些前端设备已从C ++切换为,因此希望继续使用静态类型。



-但是您是否使用JavaScript编写其他服务?

-AM:是的,制作商业门户网站的团队使用JS和TypeScript编写它。

-当您决定使用TypeScript时,没有人告诉您既然该公司已经使用JS,那么使用它会更好吗?

-AM:自然,我们必须捍卫选择的权利,但是我们解释说TypeScript具有多个优点。 这里的一切与Kotlin情况完全相同。

-AZ:安德烈(Andrey)的团队负责前线工作,这是医生所见。 我的团队为此做了一个后端,以便可以在哪里存储和处理数据。 我们于2014年开始制作系统。 当时,该公司拥有多个大型企业级系统,但是它们开发缓慢,整体式,发布周期非常长,必须进行大量测试,并且并非每个构建都成功。

就在那时,微服务方法变得非常流行,我们尝试与我们的团队一起实施它。 也就是说,我们开发目标明确,责任明确的小型应用程序。

我们的主要堆栈是Java。 作为框架,我们使用Spring以及其下的许多功能-安全性,与数据库一起使用,各种云服务以确保可靠性和错误处理。 我们非常了解他,我们喜欢一切,并且不会改变他。 我们将其用作我们任何服务的核心。

现在我们大约有20-25项服务。 他们分为六个团队,在每个团队的职责范围内,获得了3-5个微服务。 我们不会花费资源在Kotlin上重写Java,而是在Kotlin中编写所有新服务和测试。 现在比率约为95/5。 到目前为止,只有Kotlin编写了三种服务,因为我们从去年年底才开始积极使用它。

-团队如何看待过渡? 每个人都想吗?

-AZ:总体而言,他们被积极对待,他们很高兴理解。 可以说,有几位Kotlin拥护者-确实写了很多书,他们为其余的人提供了代码审查。

我想对Kotlin上API的确切工作方式有一个了解,以便它不仅仅是自动重写的代码。 伙计们正在尝试发展某种原型,然后将其用于任何地方。

通常,我们会尝试复制良好的决策。 由于我们有两打服务,因此某些事情(例如安全性,与数据库一起使用,与云提供程序一起使用)在各处重复出现,因此我们有一个通用的代码库。 组件之间存在不同的模块,这使您可以在一天之内取消没有业务功能的空微服务。 并且您需要进行所有工作。 它对前进有很大帮助。

在基础级别上,我们通常采用Postgress或某种noSQL。 有一些用于bdd测试的Python。 对于各种数据上传请求,我们在上面编写脚本。

所有服务都部署在云中。 最主要的是亚马逊。 我们获取该应用程序,将其包装在Docker容器中,然后将其部署在一个协调器中。 几年前,我们选择了Rancher,现在使用它。

-初到时,您没有遇到该项目具有庞大而复杂的遗产的事实。 不过,这是90年代后期开始的产品。

-AZ:我们是这样与大型遗留怪物进行斗争的:首先,我们编写了一个具有REST接口的封装在微服务中的代理,然后才尝试将其分解并进行重构。 也就是说,我不必花几个星期就可以找出二十万行的代码库。

我们从头开始写了很多东西,我们重写了一些东西。 在新项目中,我们尝试保持代码的质量。 团队已经是第五年了,在我看来,到目前为止我们的表现还不错。



聘请数学家和C ++专家




-您需要了解正畸吗?

-AM:完全没有。 寻找具有这样背景的人是不现实的。 在作品本身中,必须学习一种或另一种方式。 不同的团队需要不同的理解。 ClinCheck团队之所以更多,是因为我们正在与医生交谈,并且我们至少需要了解他们的话。

但是在面试中,我们从来没有问过这个问题-我们正在寻找主要精通编程的人。

“您会怎么看才能理解这一点?”

-AM:在第一阶段,我们查看简历,评估体验。 然后,我们组织了一次电话采访,历时约30分钟,询问有关技术及其作用和方式的简单问题。 如果一个人表现得很好,我们邀请他到办公室。

我们通常在那里给出编程任务。 这不是学术性的,您不需要编写各种排序算法。 我们给出了一个实际的任务,例如,如何实现诸如Twitter之类的应用程序。 一个人编写20至30分钟的代码,然后我们就此代码提出问题。

问题的提出包含一个人应该设法解决的几个陷阱。 如果他有经验,他会立即发现这些问题并在代码中解决它们,或者将其告诉我们。 如果他不注意,我们会告诉他,然后看看他将如何决定。

一般来说,面试大约持续两个小时。 整个招聘过程大约需要两个星期。

MM:对于雇用内部服务,我们主要研究C ++和数学。 根据团队的不同,一个方向或另一个方向都有偏移。 当然,建立在机翼上力分布模型的团队主要是数学。

我工作的3D平台团队不处理产品问题(有很多问题),但支持系统引擎,制作C ++库。 首先,是C ++和算法知识。

-也许很难在这样的团队中寻找人?

是的,没有。 这很困难,因为您需要对专业人士有充分的了解,并且需要了解软件和硬件的工作方式。 但是容易一点,因为至少我们不需要那么多数学。 - , — , , .

: , . . , , , . , .

— C++ , ?

, C++ , , , . , .

. , — , , , , , . , , . - , , .





— ?

. . , , . . — . 5-6 .

— , , « - , »?

: — « ». , , — - - — , .

Source: https://habr.com/ru/post/zh-CN447604/


All Articles