Dentes lisos, C ++ e matemática - como eles estão relacionados? Conversa com Alinhar



Às vezes, parece-me que quanto mais eu olho para o setor de TI, mais primitiva a imagem geral se torna na minha cabeça. É como se a TI fosse uma ciência séria do foguete ou outro serviço que "permita que você * faça outra coisa * com apenas um clique". E além do escopo desta apresentação, ainda existem atividades intocadas pelas novas tecnologias. Vá para o mesmo dentista - bem, onde está a TI?

Que erro é esse!

Hoje, o dentista prescreve o tratamento e, por trás de sua decisão, pode ser o trabalho de várias centenas de engenheiros em todo o mundo. Programadores, matemáticos, técnicos, analistas, especialistas em ML, gerentes, fábricas com impressoras 3D - tudo por causa dos sorrisos cintilantes de Hollywood.

Por que existem tantas pessoas, com o que exatamente elas estão ocupadas e como os matemáticos e especialistas em C ++ ajudam a equilibrar os dentes, conversamos com a Align Tech - uma grande empresa internacional que produz massivamente protetores bucais para tratamento ortodôntico.
Align Technology Inc. No My Circle, ela recebeu uma classificação média de 4,5 de seus funcionários, que classificaram a empresa acima de tudo por tarefas interessantes, pacote social, condições confortáveis ​​e por ajudar a tornar o mundo um lugar melhor!



- Que tipo de coisa você está fazendo?

- Andrey Maksimov : Este é um tratamento ortodôntico. Simplificando, estamos comprometidos em mover nossos dentes para a posição correta.

Qualquer pessoa tem defeitos: má oclusão ou dentes irregulares. Para resolver o problema, você pode colocar, por exemplo, chaves. Chegamos a uma maneira diferente de resolver esse problema - usando aviões invisíveis. Este é um protetor bucal, feito para uma pessoa específica. Ela pressiona os dentes necessários e os dentes se movem.



Nós, como empresa, fornecemos uma solução para a fabricação de tampas. No início do tratamento, o médico tira uma impressão dental ou digitaliza com um scanner 3D intraoral, envia os dados para nós e os transformamos em um modelo 3D.

"Que tipo de scanner você tem?"

Sergey Valiev: Imagine uma escova de dentes elétrica. Tem uma cabeça que gira e escova os dentes. Em vez desta cabeça, temos uma câmera de vídeo de alta resolução. Com base em seu testemunho, um modelo 3D é construído. A principal dificuldade é que isso deve ser feito com precisão e rapidez - afinal, o paciente fica deitado com a boca aberta na cadeira. A digitalização leva cerca de 3-5 minutos.



Ainda há dificuldades em embaçar a câmera, com salpicos, líquidos. E agora os engenheiros estão envolvidos nessas sutilezas.

- Como você obtém um modelo 3D de um vídeo? Isso é fotogrametria?

- AM : usamos um método confocal para obter digitalizações em 3D, ou seja, usamos um laser e um método óptico para obter informações.



Quando uma impressão digital ou digitalização chega até nós, nós a processamos com algoritmos especiais. O programa entende onde estão os dentes, onde tudo está. Através do nosso programa ClinCheck, o médico pode observar o modelo 3D dos dentes do paciente e também movê-los virtualmente para a posição correta. O programa também possui ferramentas integradas de medição e diagnóstico.

- Quais algoritmos você entende como deve ser após o tratamento?

- AM: existem normas ortodônticas pelas quais os dentes devem ser colocados. Temos uma base enorme da posição correta dos dentes e, com sua ajuda, sugerimos isso aos médicos. De fato, automatizamos o trabalho deles.



- Apenas uma comparação dos dentes do paciente com como deve estar de acordo com o livro?

- AM: as pessoas têm apenas 32 dentes e devem ficar em pé para não interferir umas com as outras. Assim, com a ajuda de algoritmos, nós os expomos de uma certa maneira. O médico verifica, faz ajustes e, se ele gosta de tudo, aprova o plano de tratamento e iniciamos o processo de fabricação dos revestimentos.

- Como esse processo funciona?

Mikhail Matrosov: Para nossos funcionários (técnicos) especialmente treinados, estamos criando o programa Treat, no qual eles preparam camisas para impressão de acordo com dados de médicos. Aqui está um técnico que recebe dados com a mandíbula do paciente e as recomendações do médico sobre como tratar cada caso. E o conceito de "cura" é informal, e os casos são muito diferentes.



O programa em si é um sistema CAD 3D. Mostra o estado inicial dos dentes do paciente. Em seguida, você pode formar o estado desejado após o tratamento e calcular os estágios intermediários - como os dentes do paciente passarão do estado inicial para o desejado. Finalmente, o programa pode indicar que o paciente deve anexar protuberâncias invisíveis (“acessórios”) a certos dentes, o que ajudará o alinhador a desenvolver a força correta. Sem eles, por exemplo, seria quase impossível arrancar alguns dentes das gengivas.



Cada uma dessas etapas é realizada no modo semi-automático. O técnico define as configurações necessárias de acordo com os desejos do médico e o programa gera o resultado. Cada etapa tem sua própria equipe de desenvolvimento.

Depois que o sistema CAD vem o CAM (fabricação auxiliada por computador). Ele calcula o modelo completo das mandíbulas do paciente em cada estágio (intermediário e final). Esses modelos para cada estágio são impressos em uma impressora 3D. Em seguida, um filme é esticado sobre as formas impressas, um segmento deste filme é desenhado ao longo de uma trajetória complexa com um laser e um alinhador é obtido. E para todas as etapas, você precisa de muito software desenvolvido dentro do Align. É por isso que precisamos de tantos programadores.



AM: Fabricamos 300 mil camisas únicas por dia. Nenhum dos concorrentes atingiu tal escala, porque basicamente tudo isso é um processo manual. E manualmente voltas enormes não podem ser alcançadas de forma alguma.

- Onde são produzidos esses trezentos mil revestimentos?

- AM: em fábricas no México e na China. Eles são feitos de plástico especial, que também está sendo desenvolvido em Alain. Existe uma fórmula química especial, desde que foram realizados testes de biocompatibilidade. O material também é know-how, afeta o resultado do tratamento.



Depois disso, um kit pronto é enviado ao médico, ele convida o paciente e explica como usá-lo. Aliners usam quase o tempo todo, mesmo à noite, e decolam apenas com comida. A cada duas semanas, a tampa é substituída por uma nova.



Dentes e aprendizado de máquina


Alguns dentistas não são tão versados ​​em ortodontia quanto os raros especialistas. Portanto, ajudamos a resolver alguns casos simples. Se os dentes precisarem ser movidos levemente, sugerimos que eles usem nosso tratamento automático.

Para que o médico entenda se pode tratar alguns casos ou não, reconheceremos a situação com um programa especial, faremos alguns diagnósticos e concluiremos - talvez ou não. E para tais tarefas, precisamos de muitos especialistas - em ML, C ++. Como temos automação, precisamos de especialistas em back-end.

No início, as pessoas fizeram a operação de avaliação de caso e a inteligência artificial foi treinada. Agora, quase 100% dessas operações são realizadas pela máquina. Tentamos muitas abordagens. Os caras tentaram fazer um modelo 3D a partir da foto e encontraram algumas discrepâncias. Isso não funcionou muito bem.

Um ano e meio atrás, a primeira iteração do modelo ML foi lançada. Até onde eu sei, a equipe usou Python e TensorFlow. A avaliação é feita em várias categorias do que o médico trata. O paciente pode ter dentes apinhados, ou vice-versa, quando divergir para os lados. Estes são problemas diferentes com os dentes e modelos diferentes funcionam para eles. Eles são os mais comuns e começamos com eles, depois passamos para casos mais particulares.

No próximo lançamento, lançaremos modelos para todos os tipos possíveis de problemas com os dentes. Por algum tempo, rastrearemos todos os casos problemáticos e analisaremos os erros. Haverá uma reserva da equipe de avaliação manual para isso.

O processo completo de treinamento do modelo levou aproximadamente dois anos.

O aprendizado de máquina também é usado para trabalhar com fotos. Estamos tentando mostrar à pessoa como seu sorriso ficará após o tratamento. Para fazer isso, tiramos uma foto do paciente, renderizamos um modelo 3D de seus dentes e, em seguida, o programa tenta, de certa forma próximo à realidade, incorporá-lo à fotografia para que a pessoa veja como seu sorriso ficará bonito.




Como o Align apareceu na Rússia


- AM: Cerca de 15 anos atrás. Pessoas de Moscou estudaram na Califórnia e, enquanto estudavam, conseguiram um emprego no escritório Align. Naquela época, era uma pequena empresa. Quando terminaram os estudos, retornaram a Moscou, mas as relações contratuais com eles permaneceram. Eles eram bons programadores. E para facilitar o trabalho, foi aberto um pequeno escritório em Moscou. Depois, cresceu para uma escala muito grande. Agora existem mais de 400 pessoas.



Em Novosibirsk, o escritório abriu da mesma maneira que em Moscou. Um homem que se mostrou muito bem veio de lá e decidiu voltar para sua cidade. Ele se ofereceu para trabalhar remotamente, mas foi designado para criar um pequeno escritório. Agora existem cerca de quarenta pessoas.

SV: Curiosamente, um ano atrás, em Moscou, havia cerca de 200 pessoas. Quase dobramos em um ano.

- Como o seu pessoal está distribuído entre todos esses projetos?

- AM: Temos uma equipe de engenheiros que lida com o back-end. Há uma equipe envolvida no programa ClinCheck para médicos. A maior equipe está envolvida em software para técnicos, usado apenas internamente. Existem equipes separadas de controle de qualidade e DevOps. A equipe do iTero cria software de scanner.

- Quão independentes são as equipes tecnicamente?

- AM: as tarefas de negócios para as equipes vêm do marketing, mas as decisões técnicas são tomadas independentemente aqui em Moscou. Eles não precisam de permissões especiais da sede. Se mudarmos a arquitetura entre sistemas, devemos pelo menos conversar sobre isso e obter um acordo. Mas no nível funcional, temos total independência.

Andrey Zaitsev: Temos um processo chamado Conselho de Revisão de Arquitetura. Mesmo se formos livres o suficiente para escolher, devemos justificá-lo aos principais arquitetos.

Por exemplo, agora temos a principal linguagem de desenvolvimento - Java. Mas a equipe manifestou grande interesse em Kotlin. Um de nossos desenvolvedores, durante meio ano, preparou apresentações com uma justificativa, levando em consideração os riscos de contratação, riscos de vazamento de dados, problemas no idioma. Ele fez uma apresentação em um conselho de arquitetura, tivemos uma atualização e a equipe recebeu uma linguagem de desenvolvimento adicional. Agora, para novos microsserviços, usamos o Kotlin em vez de Java. Ou seja, somos livres, mas tudo precisa ser justificado. Você não pode mudar repentinamente para algum Haskell.

- E como é construída a comunicação com outros escritórios?

- AM: Não há dificuldades com a interação. Viajamos constantemente para o escritório de P&D em Raleigh, na Carolina do Norte, EUA, e para nossa sede em San Jose.



- AZ: Temos seis equipes SCRUM no back-end. Um está localizado no escritório de Israel em Tel Aviv, o outro em Raleigh, o restante em Moscou. Sincronizamos duas vezes por semana, líderes de equipe discutem o processo atual, próximos lançamentos, interações entre equipes, novas soluções técnicas, mudanças em módulos comuns. E assim - comunicação corporativa padrão. Temos todas as equipes da Microsoft, se necessário, você pode recrutar qualquer colega e conversar com ele.

Costumava haver um problema de o escritório em San Jose estar no fuso horário oposto ao de Moscou, e quando eles chegam ao trabalho, nós simplesmente partimos. Portanto, as reuniões geralmente aconteciam no final da noite. Com um escritório em Raleigh mais fácil, com eles os comícios começam por volta das quatro horas da noite em Moscou.

- AM: Como minha equipe está desenvolvendo um programa para médicos, devemos mostrar demonstrações para os médicos que trabalham em nossa empresa no final dos sprints. Eles estão em San Jose, EUA, então às vezes você precisa começar as manifestações antes das sete da noite.



Quais tecnologias tornam os dentes uniformes


- Diga-me, quem está fazendo o quê usando o quê?

- AM: ClinCheck, que minha equipe está desenvolvendo, existe de duas formas. O primeiro é um aplicativo de desktop. É feito em C ++ e Qt para a interface do usuário. A área de trabalho foi escrita há muito tempo. O problema com ele é o seguinte: os médicos não são pessoas de TI. Apesar de serem especialistas legais no campo da ortodontia, é muito difícil para eles manter o computador em boas condições. E quando lançamos a atualização, muitas dificuldades técnicas começam.

O segundo problema é que metade dos ortodontistas usa Macs e nossa área de trabalho é apenas para Windows. Se o médico quiser usar o programa, ele precisará instalar uma máquina virtual. Isso é inconveniente - eles não lidam bem com um computador, e muito menos gerenciam uma máquina virtual em geral.

Portanto, traduzimos o aplicativo na Web para que ele funcione em qualquer lugar. Verdadeiro em termos de funcionalidade, ele ainda não alcançou a versão desktop. Assim que o recuperar, fecharemos a área de trabalho.

No desenvolvimento, usamos TypeScript e ReactJS. O script foi escolhido principalmente devido à possibilidade de verificação de tipo estático. Curiosamente, alguns dos dispositivos front-end mudaram do C ++, então havia um desejo de continuar usando a digitação estática.



- Mas você escreve outros serviços em JavaScript?

- AM: Sim, a equipe que cria o portal comercial da Web grava-o em JS e TypeScript.

- Quando você decidiu usar o TypeScript, não foi informado que, como a empresa já usa JS, seria melhor usá-lo?

- AM: Naturalmente, tivemos que defender a escolha, mas explicamos que o TypeScript tem várias vantagens. Tudo aqui era exatamente o mesmo que no caso de Kotlin.

- AZ: a equipe de Andrey faz a frente, o que os médicos veem. Minha equipe faz um back-end para isso, para que haja onde armazenar e processar os dados. Começamos a criar nosso sistema em 2014. Naquela época, a empresa tinha vários sistemas corporativos grandes, mas eles se desenvolveram lentamente, eram monolíticos, com ciclos de liberação muito longos, tiveram que testar muito e nem toda compilação foi bem-sucedida.

Nesse momento, a abordagem de microsserviço se tornou muito popular e tentamos implementá-la com nossa equipe. Ou seja, desenvolvemos pequenas aplicações com um objetivo claramente definido, uma clara área de responsabilidade.

Nossa pilha principal é Java. Usamos o Spring como uma estrutura e muitas coisas que estão sob seu guarda-chuva - segurança, trabalhando com o banco de dados, vários serviços em nuvem para garantir confiabilidade, tratamento de erros. Nós o conhecemos bem, gostamos de tudo e não vamos mudá-lo ainda. Nós o usamos como o núcleo de qualquer um dos nossos serviços.

Agora, temos cerca de 20 a 25 serviços. Eles são divididos em seis equipes e, na área de responsabilidade de cada uma, são obtidos 3-5 microsserviços. Não gastamos recursos para reescrever Java no Kotlin, mas escrevemos todos os novos serviços e testes no Kotlin. Agora a proporção é de cerca de 95/5. Até o momento, apenas três serviços são escritos no Kotlin, porque começamos a usá-lo ativamente somente a partir do final do ano passado.

- Como a equipe percebe a transição? Todo mundo quer?

- AZ: No geral, eles são percebidos positivamente, os caras ficam felizes em entender. Existem, digamos, vários campeões do Kotlin - aqueles que realmente escreveram muito e ajudam o resto com uma revisão de código.

Gostaria de desenvolver uma compreensão exata de como a API no Kotlin deve funcionar, para que não seja apenas reescrita automaticamente. E os caras estão tentando desenvolver um certo arquétipo, que será usado em qualquer lugar.

Em geral, tentamos replicar boas decisões. Como temos duas dúzias de serviços, certas coisas, como segurança, trabalhando com o banco de dados, trabalhando com provedores de nuvem, são repetidas em todos os lugares, por isso temos uma base de código comum. Existem diferentes módulos que remexem entre os componentes, o que permite elevar um microsserviço vazio sem funcionalidade comercial literalmente em um dia. E há tudo o que você precisa para trabalhar. Ajuda muito a avançar.

No nível básico, geralmente usamos o Postgress ou algum tipo de noSQL. Há algum Python para testes de bdd. Para várias solicitações de upload de dados, escrevemos scripts.

Todos os serviços são implantados na nuvem. O principal é a Amazônia. Pegamos o aplicativo, empacotamos no contêiner do Docker e depois o implantamos em um dos orquestradores. Alguns anos atrás, escolhemos o Rancher e agora o usamos.

- Quando você chegou, não encontrou o fato de que o projeto possui um legado amplo e complexo. Ainda assim, este é um produto que começou no final dos anos 90.

- AZ: Abordamos a luta contra grandes monstros herdados como este: a princípio, escrevemos um determinado proxy que envolve microsserviços com uma interface REST, e só então tentamos quebrá-lo por dentro e refatorar. Ou seja, não precisei me sentar durante semanas para descobrir a base de código de duzentas mil linhas.

Escrevemos muitas coisas do zero, reescrevemos algumas. Em novos projetos, tentamos manter a qualidade do código. A equipe já está no quinto ano e parece-me que estamos indo muito bem até agora.



Contratação de matemáticos e especialistas em C ++




- Você precisa entender ortodontia?

- AM: De jeito nenhum. Não é realista encontrar pessoas que tenham esse histórico. No trabalho em si, é preciso estudar de uma maneira ou de outra. Equipes diferentes precisam de um entendimento diferente. A equipe do ClinCheck é mais porque estamos conversando com médicos e precisamos pelo menos entender suas palavras.

Mas, nas entrevistas, nunca perguntamos sobre isso - estamos procurando pessoas que sejam versadas principalmente em programação.

"O que você vai olhar para entender isso?"

- AM: Na primeira etapa, analisamos o currículo, avaliamos a experiência. Depois organizamos uma entrevista por telefone, que dura cerca de 30 minutos, e fazemos perguntas simples sobre tecnologia, com o que e como funcionou. E se uma pessoa se mostrou bem, nós a convidamos para o escritório.

Lá, geralmente damos uma tarefa de programação. Não é acadêmico, você não precisa escrever todos os tipos de algoritmos de classificação. Damos uma tarefa prática, por exemplo, como implementar um aplicativo como o Twitter. Uma pessoa escreve um código por 20 a 30 minutos e, em seguida, fazemos perguntas sobre esse código.

A formulação do problema contém várias armadilhas que uma pessoa deve tentar contornar. Se ele é experiente, ele imediatamente vê esses problemas e os resolve no código ou nos conta sobre isso. Se ele não perceber, dizemos a ele e também vemos como ele vai decidir.

Em geral, a entrevista dura cerca de duas horas. E toda a contratação de e para leva cerca de duas semanas.

MM: Para a contratação de serviços internos, analisamos principalmente C ++ e matemática. Dependendo da equipe, há um deslocamento em uma direção ou na outra. A equipe que constrói o modelo de distribuição de forças no alinhador é, é claro, principalmente matemática.

A equipe da plataforma 3D em que trabalho não lida com problemas do produto (existem muitos), mas suporta o mecanismo do sistema, cria bibliotecas C ++. Em primeiro lugar, C ++ e conhecimento de algoritmos.

- Talvez seja difícil procurar pessoas nessa equipe?

Sim e não É difícil porque você precisa de um bom conhecimento dos profissionais, uma compreensão de como o software e o hardware funcionam. Mas um pouco mais fácil, porque pelo menos não precisamos tanto de matemática. - , — , , .

: , . . , , , . , .

— C++ , ?

, C++ , , , . , .

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





— ?

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

— , , « - , »?

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

Source: https://habr.com/ru/post/pt447604/


All Articles