#Interoperabilidade

0 Seguidores · 75 Postagens

Na verificação de integridade, interoperabilidade é a capacidade de diferentes sistemas de tecnologia da informação e aplicações de software se comunicarem, trocarem dados e usarem as informações que foram trocadas.

Artigo Claudio Devecchi · Jun. 20, 2023 4m read

Neste artigo, vou compartilhar o tema que apresentamos no Global Summit 2023, na sessão Tech Exchange. Eu e @Rochael.Ribeiro.

Nesta oportunidade, abordamos os seguintes tópicos, os quais iremos explorar neste artigo:

  • Ferramentas Open Exchange para o desenvolvimento rápido de APIs
  • Open Api Specification (OAS)
  • Maneira Tradicional versus Desenvolvimento Rápido
  • API Composta (Interoperabilidade)
  • Abordagens Spec-First ou Api-First
  • Governança e Monitoramento de Api's
  • Demonstração (vídeo)

Ferramentas Open Exchange para o Desenvolvimento Rápido de APIs Rest

4
0 145
Artigo Thais Pinheiro · Jun. 9, 2023 9m read

Durante a pandemia de Covid-19 tornou-se evidente a necessidade de transformação digital na área da saúde e muito foi questionado sobre como aperfeiçoar processos, melhorar gestão de recursos, modernizar e humanizar os atendimentos ao paciente.

Neste tópico abordaremos especificamente a gestão de medicamentos e vacinas, mais especificamente, a perda desses materiais.

39
7 516
Artigo Guilherme Koerber · Jun. 11, 2023 3m read

Revisitando Onboarding: Conheça 4 princípios da integração - Global Empregos
A tecnologia desempenha um papel cada vez mais importante no mundo dos negócios, impulsionando a inovação e fornecendo soluções para desafios complexos. No entanto, muitas vezes, as empresas enfrentam dificuldades quando se trata de integrar sistemas legados, fontes de dados dispersas e aplicativos heterogêneos. Neste artigo, exploraremos como a plataforma InterSystems IRIS tem sido uma poderosa solução para superar esses desafios, fornecendo uma abordagem tecnológica abrangente para a integração de sistemas.

0
0 174
Artigo Madu Gonçalves da Silva · Maio 27, 2023 2m read

O problema do grupo Pardini era mudar a plataforma de banco de dados "Nós construímos nosso negócio nele, então você pode imaginar como é arriscado mudar a plataforma de banco de dados abaixo dele. Ao escolhermos o InterSystems IRIS for Health conseguimos o crescimento das operações e de serviços com a velocidade que os negócios exigem", a companhia iniciou o desenvolvimento do sistema de informações laboratoriais (Lis) na plataforma de dados InterSystems Caché,

0
0 134
Artigo Danusa Calixto · Maio 9, 2023 1m read

Adicione uma credencial para fazer login na interface REST do FHIR — nesse caso, considere apenas uma autenticação básica

 

Adicione o registro de serviços — nesse caso, considere apenas uma autenticação básica

- configure um serviço HTTP

- insira o caminho para o servidor FHIR

- insira o URL para o serviço FHIR

- use a credencial definida
 

 

Adicione um "HS.FHIRServer.Interop.HTTPOperation"

Escolha o nome do serviço

Teste o cliente FHIR

Rastreie o resultado do teste

0
0 75
Artigo Danusa Calixto · Abr. 4, 2023 13m read

Bem-vindo ao capítulo seguinte da minha série sobre CI/CD, onde discuto possíveis abordagens de desenvolvimento de software com tecnologias da InterSystems e GitLab.

Hoje, vamos falar sobre interoperabilidade.

Problema

Em uma produção de interoperabilidade ativa, há dois fluxos de processo separados: uma produção em funcionamento que processa as mensagens e um fluxo de processo CI/CD que atualiza o código, a configuração da produção e as configurações padrão do sistema.

Claramente, os processos CI/CD afetam a interoperabilidade. No entanto, as perguntas são:

  • O que acontece exatamente durante uma atualização?
  • O que precisamos fazer para minimizar ou eliminar o tempo de inatividade da produção durante uma atualização?

Terminologia

  • Host de Negócio (Business Host - BH) - um elemento configurável da Produção da Interoperabilidade: Serviço de Negócio (Business Service - BS), Processo de Negócio ( Business Process - BP, BPL) ou Operação de Negócio (Business Operation, BO).
  • Job do Host de Negócio (Business Host Job) - job do InterSystems IRIS que executa o código do Host de Negócio e é gerenciado pela produção de interoperabilidade.
  • Produção - coleção interconectada de Hosts de Negócio.
  • Configurações Padrão do Sistema (System Default Settings - SDS) - valores específicos do ambiente de instalação do InterSystems IRIS.
  • Mensagem Ativa - uma solicitação que está sendo processada por um Job do Host de Negócio. Um Job do Host de Negócio só pode ter uma Mensagem Ativa. O Job do Host de Negócio que não tem uma Mensagem Ativa está inativo.

O que está acontecendo?

Vamos começar com o ciclo de vida da produção.

Início da Produção

Primeiro, a Produção pode ser iniciada. Só pode ser executada uma produção por namespace ao mesmo tempo, e em geral (a menos que você saiba o que e porque está fazendo isso), apenas uma produção deve ser executada por namespace. Alternar várias vezes em um namespace entre duas ou mais produções diferentes não é recomendado. Ao iniciar a produção, todos os Hosts de Negócio habilitados definidos nela são inicializados. Se alguns Hosts de Negócio não inicializarem, isso não afeta a inicialização da Produção.

Dicas:

  • Comece a produção no Portal de Gerenciamento de Sistemas ou ao chamar: ##class(Ens.Director).StartProduction("ProductionName")
  • Execute código arbitrário na inicialização da Produção (antes que qualquer Job do Host de Negócio seja inicializado) ao implementar um método OnStart
  • A inicialização da Produção é um evento auditável. Você sempre pode ver quem e quando fez o que no Log de Auditoria.

Atualização da Produção

Após a inicialização da Produção, Ens.Director monitora continuamente a produção em execução. Há dois estados de produção: o estado desejado, definido na classe da produção e nas Configurações Padrão do Sistema, e o estado em execução, os jobs atualmente em execução com configurações aplicadas quando os jobs foram criados. Se os estados desejado e atual forem idênticos, está tudo bem, mas a produção pode (e deve) ser atualizada se houver uma diferença. Geramente, você vê isso como um botão vermelho Update na página de Configurações da Produção no Portal de Gerenciamento de Sistemas.

A atualização da produção significa uma tentativa de corresponder o estado atual da Produção ao estado visado.

A execução de ##class(Ens.Director).UpdateProduction(timeout=10, force=0) para atualizar a produção faz o seguinte com cada Host de Negócio:

  1. Compara as configurações ativas às configurações de produção/SDS/classe
  2. Se, e apenas se, (1) apresentar uma discrepância, o Host de Negócio será marcado como desatualizado, exigindo uma atualização.

Depois de executar isso para cada Host de Negócio, UpdateProduction cria o conjunto de mudanças:

  • Hosts de Negócio para interromper
  • Hosts de Negócio para inicializar
  • Configurações da produção para atualizar

E, depois disso, aplica essas mudanças.

Dessa forma, "atualizar" as configurações sem mudar nada resulta em nenhum tempo de inatividade da produção.

Dicas:

  • Atualize a produção no Portal de Gerenciamento de Sistemas ou ao chamar: ##class(Ens.Director).UpdateProduction(timeout=10, force=0)
  • O tempo limite de atualização padrão do Portal de Gerenciamento de Sistemas é 10 segundos. Se você sabe que o processamento das mensagens leva mais do que isso, chame Ens.Director:UpdateProduction com um tempo limite maior.
  • O tempo limite da atualização é uma configuração da produção, e você pode mudar para um valor maior. Essa configuração se aplica ao Portal de Gerenciamento de Sistemas.

Atualização do código

UpdateProduction NÃO ATUALIZA BHs com código desatualizado. Esse é um comportamento voltado para a segurança, mas, se você quiser atualizar todos os BHs em execução automaticamente se o código subjacente mudar, siga estas etapas:

Primeiro, carregue e compile desta maneira:

do $system.OBJ.LoadDir(dir, "", .err, 1, .load)
do $system.OBJ.CompileList(load, "curk", .errCompile, .listCompiled)

Agora, listCompiled teria todos os itens que foram realmente compilados (use git diffs para minimizar o conjunto carregado) devido à flag u. Use listCompiled para obter um $lb de todas as classes que foram compiladas:

set classList = ""
set class = $o(listCompiled(""))
while class'="" { 
  set classList = classList _ $lb($p(class, ".", 1, *-1))
  set class=$o(listCompiled(class))
}

Depois disso, calcule uma lista de BHs que precisam de uma reinicialização:

SELECT %DLIST(Name) bhList
FROM Ens_Config.Item 
WHERE 1=1
  AND Enabled = 1
  AND Production = :production
  AND ClassName %INLIST :classList

Por fim, após obter bhList, interrompa e inicie os hosts afetados:

for stop = 1, 0 {
  for i=1:1:$ll(bhList) {
    set host = $lg(bhList, i)
    set sc = ##class(Ens.Director).TempStopConfigItem(host, stop, 0)
  }
  set sc = ##class(Ens.Director).UpdateProduction()
}

Interrupção da produção

As produções podem ser interrompidas, ou seja, uma solicitação pode ser enviada para desativar todos os Jobs do Host de Negócio (com segurança, após lidarem com as mensagens ativas, se houver alguma).

Dicas:

  • Interrompa a produção no Portal de Gerenciamento de Sistemas ou ao chamar: ##class(Ens.Director).StopProduction(timeout=10, force=0)
  • O tempo limite de interrupção padrão do Portal de Gerenciamento de Sistemas é 120 segundos. Se você sabe que o processamento das mensagens leva mais do que isso, chame Ens.Director:StopProduction com um tempo limite maior.
  • O tempo limite de interrupção é uma configuração da produção. Você pode alterar isso para um valor maior. Essa configuração se aplica ao Portal de Gerenciamento de Sistemas.
  • Execute código arbitrário na interrupção da produção ao implementar um método OnStart
  • A interrupção da produção é um evento auditável. Você sempre pode ver quem e quando fez o que no Log de Auditoria.

O importante aqui é que a produção seja a soma total dos Hosts de Negócio:

  • Ao iniciar a produção, todos os Hosts de Negócio habilitados são inicializados.
  • A interrupção da produção também interrompe todos os Hosts de Negócio em execução.
  • A atualização da produção significa calcular um subconjunto de Hosts de Negócio que estão desatualizados, para que sejam interrompidos e, imediatamente depois disso, inicializados novamente. Além disso, um Host de Negócio recém-adicionado é inicializado, e um Host de Negócio excluído da produção é interrompido.

Isso nos leva ao ciclo de vida dos Hosts de Negócio.

Inicialização do Host de Negócio

Os Hosts de Negócio são compostos de Jobs de Hosts de Negócio idênticos (de acordo com um valor de configuração de tamanho do pool). Ao inicializar um Host de Negócio, todos os Jobs de Hosts de Negócio também são inicializados. Eles são inicializados em paralelo.

Jobs de Host de Negócio individuais são inicializados desta maneira:

  1. A interoperabilidade define como job um novo processo que se tornaria um Job de Host de Negócio.
  2. O novo processo é registrado como um job de interoperabilidade.
  3. O código de Host de Negócio e o código do Adapter são carregados na memória do processo.
  4. As configurações relacionadas a um Host de Negócio e Adapter são carregadas na memória. A ordem de precedência é: a. Configurações da Produção (substituem as Configurações de Classe e Padrão do Sistema). b. Configurações Padrão do Sistema (substituem as Configurações de Classe). c. Configurações de classe.
  5. O job está pronto e começa a aceitar mensagens.

Após a conclusão de (4), o Job não pode alterar as configurações ou o código, então quando você importa código novo/igual e configurações padrão do sistema novas/iguais, isso não afeta os jobs de interoperabilidade atualmente em execução.

Interrupção do Hosts de Negócio

Interromper um Job de Host de Negócio significa o seguinte:

  1. A interoperabilidade pede que o Job pare de aceitar mensagens/entradas.
  2. Se houver uma mensagem ativa, o Job de Host de Negócio tem segundos de tempo limite para processar (ao concluir, finalizando o método OnMessage para BO, OnProcessInput para BS, S<int> para BPL BPs e On* para BPs).
  3. Se uma mensagem ativa não for processada até o tempo limite e force=0, ocorrerá a falha da atualização da produção para esse Host de Negócio (voce verá um botão "Update" vermelho no Portal de Gerenciamento de Sistemas).
  4. A interrupção é bem-sucedida se algo nesta lista for verdadeiro:
    • Nenhuma mensagem ativa
    • A mensagem ativa foi processada antes de timeout
    • A mensagem ativa não foi processada antes do tempo limite, MAS force=1
  5. O job é cancelado com interoperabilidade e é interrompido.

Atualização do Host de Negócio

A atualização do Host de Negócio significa a interrupção de todos os Jobs em execução para o Host de Negócio e a inicialização de novos Jobs.

Regras de negócios, de roteamento e DTLs

Todos os Hosts de Negócio são inicializados imediatamente usando as novas versões das Regras de negócios, de roteamento e DTLs assim que ficarem disponíveis. A reinicialização de um Host de Negócio não é necessária nesse caso.

Atualizações offline

Às vezes, no entanto, as atualizações da produção exigem tempo de inatividade de Hosts de Negócio individuais.

Regras dependem de novo código

Considere a situação. Você tem uma Regra de Roteamento X atual que encaminha as mensagens para o Processo de Negócio A ou B com base em critérios arbitrários. Em um novo commit, você adiciona, simultaneamente:

  • Processo de Negócio C
  • Uma nova versão da Regra de Roteamento X, que encaminha mensagens para A, B ou C.

Nesse caso, você não pode só carregar a regra primeiro e depois atualizar a produção. A regra recém-copilada imediatamente começaria a encaminhar as mensagens para o Processo de Negócio C, que o InterSystems IRIS talvez ainda não tenha compilado ou a interoperabilidade ainda não tenha atualizado para usar. Nesse caso, você precisa desativar o Host de Negócio com uma Regra de Roteamento, atualizar o código, atualizar a produção e ativar o Host de Negócio novamente.

Observações:

  • Se você atualizar uma produção usando um arquivo de implantação de produção, todos os BHs afetados são desativados/ativados automaticamente.
  • Para hosts invocados InProc, a compilação invalida o cache de um host específico mantido pelo autor da chamada.

Dependências entre Hosts de Negócio

As dependências entre Hosts de Negócio são fundamentais. Suponha que você tenha os Processos de Negócio A e B, em que A envia mensagens a B. Em um novo commit, você adiciona, simultaneamente:

  • Uma nova versão do Processo A, que define uma nova propriedade X em uma solicitação para B
  • Uma nova versão do Processo B que pode processar uma nova propriedade X

Nesse caso, PRECISAMOS atualizar o Processo B primeiro e o A depois. Você pode fazer isso de uma das seguintes maneiras:

  • Desativar Hosts de Negócio durante a atualização
  • Divida a atualização em duas partes: primeiro, atualize apenas o Processo B e, depois, em uma atualização separada, comece a enviar mensagens para ele do Processo A.

Uma variação mais desafiadora desse tema, em que as novas versões dos Processos A e B são incompatíveis com as versões antigas, exige tempo de inatividade do Host de Negócio.

Filas

Se você sabe que, após a atualização, um Host de Negócio não conseguirá processar mensagens antigas, você precisa garantir que a Fila do Host de Negócio esteja vazia antes da atualização. Para isso, desative todos os Hosts de Negócio que enviam mensagens para o Host de Negócios e espere até que a fila fique vazia.

Mudança de estado nos Processos de Negócio BPL

Primeiro, uma pequena introdução sobre como funcionam os BPs do BPL. Depois de compilar um BP do BPL, duas classes são criadas no pacote com o mesmo nome que o da classe BPL completa:

  • A classe Thread1 contém os métodos S1, S2, ... SN, que corresponde às atividades no BPL
  • A classe Context tem todas as variáveis de contexto, além do próximo estado que o BPL executaria (ou seja, S5)

Além disso, a classe BPL é persistente e armazena as solicitações que estão sendo processadas.

O BPL funciona ao executar os métodos S em uma classe Thread e atualizando de maneira correspondente a tabela da classe BPL, Context e Thread1, em que uma mensagem "em processamento" é uma linha em uma tabela BPL. Após o processamento da solicitação, o BPL exclui as entradas do BPL, Context e Thread. Como os BPs do BPL são assíncronos, um job BPL pode processar simultaneamente várias solicitações ao salvar as informações entre chamadas S e alternar entre diferentes solicitações. Por exemplo, o BPL processou uma solicitação até chegar a uma atividade sync, aguardando uma resposta da BO. Ele salvaria o contexto atual no disco, com a propriedade %NextState (na classe Thread1) definida para o método S de atividade de resposta e trabalharia em outras solicitações até a BO responder. Após a resposta da BO, o BPL carregaria "Context" na memória e executaria o método correspondente a um estado salvo na propriedade %NextState.

Agora, o que acontece quando atualizamos o BPL? Primeiro, precisamos conferir se pelo menos uma destas condições é atendida:

  • Durante a atualização, a tabela Context está vazia, o que significa que nenhuma mensagem ativa está em trabalho.
  • Os Novos Estados são os mesmos que os antigos ou os novos Estados são adicionados após os antigos.

Se pelo menos uma condição for atendida, podemos continuar. Não há solicitações de pré-atualização para processar o BPL pós-atualização ou os Estados são adicionados no final, o que significa que as solicitações antigas também podem ir para lá (supondo que as solicitações de pré-atualização sejam compatíveis com as atividades e o processamento do BPL pós-atualização).

Mas e se você tiver solicitações ativas em processamento e o BPL mudar a ordem dos estados? O ideal é, se você puder esperar, desativar os autores de chamada do BPL e esperar até que a fila esteja vazia. Valide se a tabela Context também está vazia. Lembre-se de que a Fila mostra apenas as solicitações não processadas e a tabela Context armazena as solicitações em trabalho, então um BPL muito ocupado pode mostrar o tamanho da Fila como zero e isso é normal. Depois disso, desative o BPL, realize a atualização e ative todos os Hosts de Negócio desativados anteriormente.

Se isso não for possível (geralmente quando o BPL é muito longo, lembro de atualizar um que demorou cerca de uma semana para processar uma solicitação, ou a janela de atualização é muito curta), use o versionamento do BPL.

Como alternativa, você pode escrever um script de atualização. No script de atualização, mapeie os próximos estados antigos para os próximos estados novos e execute na tabela Thread1 para que o BPL atualizado possa processar solicitações antigas. O BPL precisa ser desativado durante a atualização. Dito isso, é uma situação extremamente rara e geralmente desnecessária, mas, se precisar fazer isso, é dessa maneira.

Conclusão

A interoperabilidade implementa um algoritmo sofisticado para minimizar o número de ações necessárias para atualizar a produção após a alteração do código subjacente. Chame UpdateProduction com um tempo limite seguro em cada atualização de SDS. Para cada atualização de código, você precisa decidir uma estratégia.

Minimizar a quantidade de código compilado usando git diffs ajuda no tempo de compilação, mas "atualizar" o código com ele mesmo e compilá-lo novamente ou "atualizar" as configurações com os mesmos valores não aciona ou exige uma atualização da produção.

Atualizar e compilar Regras de Negócio, Regras de Roteamento e DTLs os torna imediatamente acessíveis sem a atualização da produção.

Por fim, a atualização da produção é uma operação segura e geralmente não requer tempo de inatividade.

Links

O autor gostaria de agradecer a @James MacKeith, @Dmitry Zasypkin e @Regilo Regilio Guedes de Souza pela ajuda inestimável com este artigo.

0
0 65
Anúncio Cristiano Silva · Dez. 14, 2022

Fala pessoal!!!

Finalmente consegui um tempinho para organizar um conjunto de classes que venho utilizando alguns anos para facilitar e acabar com o trabalho repetitivo no desenvolvimento de intragrações utilizando XDBC.

Acessem o repositório do projeto no https://github.com/cristianojs/interopway

A idéia é incrementar o projeto com mais componentes, já tenho um que a massa está crescendo e jajá vai para o forno.

Quaisquer dúvidas postem aqui.

Grande abraço.

0
0 137
Artigo Danusa Calixto · Out. 18, 2022 17m read

Olá a todos, sou um estudante francês que acabou de chegar em Praga para um intercâmbio acadêmico no meu quinto ano da faculdade de engenharia e aqui está minha participação no concurso de interoperabilidade.

Não tive muito tempo para programar desde a mudança da França para Praga e estou participando sozinho, então decidi criar um projeto que é mais um modelo do que um aplicativo.

Queria participar já que minha área (Ciência de Dados e IA) não é geralmente associada à sustentabilidade, e o concurso era uma maneira de me expressar nesse tema importante que é a sustentabilidade e o meio ambiente.

Como você sabe, a Inteligência Artificial está cada vez mais popular, com várias firmas conhecidas tentando seguir o movimento e vender ferramentas para criar, treinar e usar modelos de machine learning com facilidade. Tudo isso é prático e fácil, mas tem um custo, financeiro e também ambiental.

Treinar modelos enormes repetidamente pode exigir muitos recursos e produzir uma grande quantidade de CO2. Os supercomputadores são executados durante vários dias, e o período e o tamanho dos modelos estão aumentando exponencialmente, tomando mais espaço do que nunca. Todo esse esforço para ter alguma melhoria no desempenho, que em alguns casos não é nem garantida.

É claro que várias firmas precisam desse processo, em que até mesmo 0,1% de melhoria na precisão de um modelo pode salvar milhares de vidas. Por isso, esse modelo foi criado para usos mais comuns.

No entanto, como tive a oportunidade de trabalhar com Processamento de Linguagem Natural (PLN) ou Classificação de Imagens, percebi que alguns modelos e ferramentas já são quase utilizáveis no estado em que se encontram e podem nos ajudar a economizar centenas de horas de treinamento e, consequentemente, emissões de CO2 e consumo de eletricidade.

Por isso, decidi criar um modelo usando as tecnologias da InterSystems para desenvolver uma solução interoperável que resolvesse alguns problemas de sustentabilidade ao permitir facilmente que você, em alguns cliques, faça o download único de modelos pré-treinados da Internet, use de acordo com sua própria necessidade e, claro, ajuste esses modelos pré-treinados com novo conteúdo disponível na base de dados IRIS e adicione conteúdo ao modelo existente.

Dessa forma, no modelo, estamos pegando um modelo PLN, testando e treinando com dados para criar cinco novos rótulos no modelo para classificar a avaliação da internet.

Portanto, ao fazer isso, o resultado (se você tiver tempo e algum poder computacional) é um ótimo modelo que pode ser usado para prever a nota de avaliação da internet, que não tem custo e emite uma quantidade pequena de CO2.

Consulte o GitHub e a postagem do Open Exchange vinculada a este artigo.

Ou veja o ReadMe aqui:

1. Contest-Sustainability

Este modelo usa as tecnologias da InterSystems para desenvolver uma solução interoperável e resolver alguns problemas de sustentabilidade ao permitir facilmente que você, em alguns cliques, faça o download único de modelos pré-treinados da Internet, use de acordo com sua própria necessidade e, claro, ajuste esses modelos pré-treinados com novo conteúdo disponível na base de dados IRIS e adicione conteúdo ao modelo existente.

Neste exemplo, estamos pegando um modelo PLN, testando e treinando com dados para criar cinco novos rótulos no modelo para classificar a avaliação da internet. No processo, poupamos uma grande quantidade de recursos e emissões de CO2.

Veja alguns modelos de exemplo que você pode testar: https://huggingface.co/gpt2
https://huggingface.co/Jean-Baptiste/camembert-ner
https://huggingface.co/bert-base-uncased
https://huggingface.co/facebook/detr-resnet-50
https://huggingface.co/facebook/detr-resnet-50-panoptic

ÍNDICE:

2. Instalação

2.1. Início da produção

Na pasta "contest-sustainability", abra um terminal e insira:

docker-compose up

Na primeira vez, talvez leve alguns minutos para o build correto da imagem e a instalação de todos os módulos necessários para o Python.

2.2. Acesso à produção

Seguindo este link, acesse a produção: Acessar a produção

2.3. Encerramento da produção

docker-compose down

3. Como funciona

Por enquanto, alguns modelos talvez não funcionem com essa implementação, já que tudo é feito automaticamente, ou seja, não importa o modelo de entrada, tentaremos fazer com que funcione usando a biblioteca transformerspipeline.

Pipeline é uma ferramenta poderosa da equipe HuggingFace que analisa a pasta em que o modelo foi transferido e entende qual biblioteca deve usar entre PyTorch, Keras, Tensorflow ou JAX. Em seguida, ela carrega esse modelo usando AutoModel.
Então, ao inserir a tarefa, o pipeline sabe o que fazer com o modelo, tokenizer ou até extrator de características nessa pasta e gerencia a entrada automaticamente, tokeniza, processa, transfere para o modelo e retorna um resultado decodificado que podemos usar diretamente.

4. API HuggingFace

Algumas pessoas ou sistemas não conseguem fazer o download de modelos ou usá-los devido a restrições. Por isso, é possível usar a API HuggingFace e chamar alguns modelos diretamente através desse serviço.
Veja uma explicação mais simples:

Primeiro, você precisa iniciar a demonstração, usando o botão verde Start, ou use Stop e Start novamente para aplicar as mudanças nas configurações.

Em seguida, ao clicar na operação Python.HFOperation escolhida e selecionar na guia à direita action, você pode aplicar test à demonstração.

Na janela test, selecione:

Tipo de solicitação: Grongier.PEX.Message

Em classname, insira:

msg.HFRequest

Para json, veja um exemplo de uma chamada para GPT2:

{
    "api_url":"https://api-inference.huggingface.co/models/gpt2",
    "payload":"Can you please let us know more details about your ",
    "api_key":"----------------------"
}

Agora, você pode clicar em Visual Trace para ver nos detalhes o que aconteceu e visualizar os registros.

OBSERVE que você precisa ter uma chave de API do HuggingFace antes de usar esta Operação (as chaves de API são gratuitas, basta fazer a inscrição no HF)

OBSERVE que você pode mudar o URL para testar outros modelos do HuggingFace. Talvez seja necessário mudar o payload.

Veja este exemplo:
envio de hf reqhf reqhf resp

5. Use qualquer modelo da Web

Nesta seção, vamos ensinar você a usar praticamente qualquer modelo pré-treinado da internet, HuggingFace ou não, para poupar recursos ou simplesmente usar esses modelos dentro do IRIS.

5.1. PRIMEIRO EXEMPLO: VOCÊ TEM SEU PRÓPRIO MODELO

Nesse caso, você precisa copiar e colar seu modelo, com config, tokenizer.json etc. dentro de uma pasta na pasta do modelo.
Caminho: src/model/yourmodelname/

Em seguida, você precisa criar uma nova operação, chame-a como quiser e acesse os parâmetros dessa operação.
Então, acesse settings na guia à direita, na parte Python e na parte %settings. Aqui, você pode inserir ou modificar quaisquer parâmetros (não se esqueça de pressionar apply depois de terminar).
Veja a configuração padrão para esse caso:
%settings

name=yourmodelname
task=text-generation

OBSERVE que qualquer configuração que não for name ou model_url entrará nas configurações PIPELINE.

Agora você pode clicar duas vezes na operação e executar o start. Você precisa ver na parte Log a inicialização do modelo.

Em seguida, criamos um PIPELINE utilizando transformers que usam o arquivo config na pasta como vimos antes.

Para chamar esse pipeline, clique na operação e selecione na guia à direita action. Você pode aplicar test à demonstração.

Na janela test, selecione:

Tipo de solicitação: Grongier.PEX.Message

Em classname, insira:

msg.MLRequest

Para json, você precisa inserir todos os argumentos necessários para o modelo.
Veja um exemplo de uma chamada para GPT2:

{
    "text_inputs":"Unfortunately, the outcome",
    "max_length":100,
    "num_return_sequences":3
}

Clique em Invoke Testing Service e aguarde a operação do modelo.

Veja este exemplo:
envio de ml req

Agora, você pode clicar em Visual Trace para ver nos detalhes o que aconteceu e visualizar os registros.

Veja este exemplo :
ml req

ml resp

5.2. SEGUNDO EXEMPLO: VOCÊ QUER FAZER O DOWNLOAD DE UM MODELO DO HUGGINGFACE

Nesse caso, você precisa encontrar o URL do modelo no HuggingFace.
Encontre um modelo que faça o que você busca e use-o sem gastar recursos utilizando as tecnologias da InterSystems.

5.2.1. Configurações

Vá até os parâmetros do Hugging.
Clique na operação HuggingFace escolhida e acesse settings na guia à direita, na parte Python e na parte %settings. Aqui, você pode inserir ou modificar quaisquer parâmetros (não se esqueça de pressionar apply depois de terminar).
Veja um exemplo de configuração para alguns modelos que encontramos no HuggingFace:

%settings para gpt2

model_url=https://huggingface.co/gpt2
name=gpt2
task=text-generation

%settings para camembert-ner

name=camembert-ner
model_url=https://huggingface.co/Jean-Baptiste/camembert-ner
task=ner
aggregation_strategy=simple

%settings para bert-base-uncased

name=bert-base-uncased
model_url=https://huggingface.co/bert-base-uncased
task=fill-mask

%settings para detr-resnet-50

name=detr-resnet-50
model_url=https://huggingface.co/facebook/detr-resnet-50
task=object-detection

%settings para detr-resnet-50-protnic

name=detr-resnet-50-panoptic
model_url=https://huggingface.co/facebook/detr-resnet-50-panoptic
task=image-segmentation

OBSERVE que qualquer configuração que não for name ou model_url entrará nas configurações PIPELINE. Então, no segundo exemplo, o pipeline camembert-ner requer a especificação de aggregation_strategy e task, enquanto gpt2 requer apenas uma task.

Veja este exemplo:
configurações ml ope2

Agora você pode clicar duas vezes na operação e executar o start.
Você precisa ver na parte Log a inicialização e o download do modelo.
OBSERVAÇÃO: Você pode atualizar os registros a cada x segundos para ver o avanço dos downloads. dl em tempo real

Em seguida, criamos um PIPELINE utilizando transformers que usam o arquivo config na pasta como vimos antes.

5.2.2. Teste

Para chamar esse pipeline, clique na operação e selecione na guia à direita action. Você pode aplicar test à demonstração.

Na janela test, selecione:

Tipo de solicitação: Grongier.PEX.Message

Em classname, insira:

msg.MLRequest

Para json, você precisa inserir todos os argumentos necessários para o modelo.
Veja um exemplo de uma chamada para GPT2:

{
    "text_inputs":"George Washington lived",
    "max_length":30,
    "num_return_sequences":3
}

Aqui está um exemplo de uma chamada para Camembert-ner:

{
    "inputs":"George Washington lived in washington"
}

Aqui está um exemplo de uma chamada para bert-base-uncased:

{
    "inputs":"George Washington lived in [MASK]."
}

Aqui está um exemplo de uma chamada para detr-resnet-50 usando um URL online:

{
    "url":"http://images.cocodataset.org/val2017/000000039769.jpg"
}

Aqui está um exemplo de uma chamada para detr-resnet-50-panoptic usando um URL como caminho:

{
    "url":"/irisdev/app/misc/000000039769.jpg"
}

Clique em Invoke Testing Service e aguarde a operação do modelo.
Agora, você pode clicar em Visual Trace para ver nos detalhes o que aconteceu e visualizar os registros.

OBSERVE que, após fazer pela primeira vez o download de um modelo, a produção não fará o download novamente, mas usará os arquivos em cache encontrados em src/model/TheModelName/.
Se alguns arquivos estiverem ausentes, a Produção fará o download novamente.

Veja este exemplo:
envio de ml reqml reqml resp

Veja este exemplo:
envio de ml reqml resp

6. Ajuste dos modelos

Nesta parte, tentamos ajustar um modelo para reaproveitá-lo e torná-lo ainda melhor sem usar muitos recursos.

6.1. Personalização do modelo

6.1.1. Download do modelo

Para utilizar esse GitHub, você precisa ter um modelo do HuggingFace compatível com pipeline para usar e treinar, além de um conjunto de dados para treinar seu modelo.

Para ajudar, oferecemos a possibilidade de usar script Python em src/utils/download_bert.py. Ele fará o download para você do modelo "https://huggingface.co/bert-base-cased" e colocará dentro da pasta src/model/bert-base-cased se já não estiver lá.
Além disso, também disponibilizamos um conjunto de dados para treinar o modelo bert. Esse conjunto de dados já estava carregado dentro da base de dados IRIS e nenhuma ação adicional é necessária se você quiser usá-lo. (Para acessá-lo, vá até a parte SQL do portal, o namespace da base de dados iris e depois a tabela de revisão)

Para usar o script, se você estiver no contêiner, pode executá-lo sem se preocupar. Se você estiver no local, talvez seja necessário aplicar pip3 install requests e pip3 install beautifulsoup4

Veja o resultado: Download do resultado

6.1.2. Configurações

Se você quiser usar o modelo bert-base-cased e já fez o download usando o script, não é necessário adicionar mais nada às configurações, e você pode avançar para o treinamento do modelo.

Se você quiser treinar seu próprio modelo, clique em Python.TuningOperation e selecione Settings na guia à direita, depois Python e, na parte %settings, insira o caminho do modelo, o nome da pasta e o número do rótulo que você quer para o treinamento.

Exemplo:

path=/irisdev/app/src/model/
model_name=bert-base-cased
num_labels=5

6.1.3. Treinamento do modelo

Para treinar o modelo, você precisa acessar Production neste link:

http://localhost:52795/csp/irisapp/EnsPortal.ProductionConfig.zen?PRODUCTION=iris.Production

E conectar usando:
SuperUser como nome de usuário e SYS como senha.


Para chamar o treinamento, clique em Python.TuningOperation e selecione na guia à direita Actions. Você pode aplicar Test à demonstração.

Na janela de teste, selecione:

Tipo de solicitação: Grongier.PEX.Message

Em classname, insira:

msg.TrainRequest

Para json, você precisa inserir todos os argumentos necessários para o treinamento. Aqui está um exemplo que treina com as primeiras 20 linhas (não é um treinamento adequado, mas é rápido):

{
    "columns":"ReviewLabel,ReviewText",
    "table":"iris.Review",
    "limit":20,
    "p_of_train":0.8,

    "output_dir":"/irisdev/app/src/model/checkpoints",
    "evaluation_strategy":"steps",
    "learning_rate":0.01,
    "num_train_epochs":1
}

Veja este exemplo: Pedido de treinamento

Como pode ver, é preciso inserir

  • a table usada.
  • as columns usadas (primeiro é label e segundo é input para a tokenização)
  • o limit de linhas compreendidas (se você não especificar um número de linhas, todos os dados serão usados)
  • p_of_train, a porcentagem de dados de treinamento usados do conjunto de dados, e 1 - p_of_train, a porcentagem de dados de teste usados do conjunto de dados.

Depois disso, os outros parâmetros cabem a você e podem variar de acordo com os parâmetros https://huggingface.co/docs/transformers/main_classes/trainer.

OBSERVE que o tamanho do lote para treinamento e teste será calculado automaticamente se não for inserido na solicitação. (É o maior divisor do número de linhas que é menor do que a raiz quadrada do número de linhas e do que 32)

Clique em "Invoke Testing Service" e feche a janela de teste sem esperar.
Agora acesse Python.TuningOperation e selecione na guia à direita log. Aqui você pode ver o avanço do treinamento e das avaliações.
Após a conclusão, você verá um log dizendo que o novo modelo foi salvo em uma pasta temporária.
Agora acesse Python.TuningOperation, selecione na guia à direita message e clique no cabeçalho do último item para selecioná-lo. Aqui você pode ver o avanço do treinamento e das avaliações e, ao final, é possível acessar as Métricas do modelo novo e antigo para comparação.

6.1.4. Substituição do modelo

Se você quiser manter o modelo antigo, nenhuma ação é necessária: o antigo permanecerá na pasta não temporária e ainda será carregado para treinamento adicional.

Se você quiser manter o modelo novo, clique em Python.TuningOperation, selecione na guia à direita Actions e teste. Na janela de teste, selecione:

Tipo de solicitação: Grongier.PEX.Message

Em classname, insira:

msg.OverrideRequest

Para json, chaves vazias:

{}

Clique em Invoke Testing Service e veja a mensagem de resposta. O novo modelo foi movido da pasta temporária para a não temporária.

6.2. Uso do modelo

Treinar um modelo é interessante, mas você também pode testá-lo.

6.2.1. Configurações

Se você quiser usar o modelo bert-base-cased e já fez o download usando o script, não é necessário adicionar mais nada às configurações, e você pode avançar para o teste do modelo.

Se você quiser treinar seu próprio modelo, clique em Python.TuningOperation e selecione Settings na guia à direita, depois Python e, na parte %settings, insira o parâmetro para adicionar ao pipeline.

6.2.2. Teste do modelo

Para testar o modelo, você precisa acessar Production neste link:

http://localhost:52795/csp/irisapp/EnsPortal.ProductionConfig.zen?PRODUCTION=iris.Production

E conectar usando:
SuperUser como nome de usuário e SYS como senha.


Para chamar o teste, clique em Python.MLOperation e selecione na guia à direita Actions. Você pode aplicar Test à demonstração.

Na janela de teste, selecione:

Tipo de solicitação: Grongier.PEX.Message

Em classname, insira:

msg.MLRequest

Para json, você precisa inserir todos os argumentos necessários para o modelo funcionar

{
    "inputs":"This was a really bad experience"
}

Pressione Call test services e veja o resultado.

7. Observação importante

O ajuste fino de modelos pode exigir MUITO tempo e recursos, mas sempre consumirá menos recursos do que o treinamento de um modelo do zero.
Você pode ver que já está levando muito tempo e poder computacional para o ajuste fino do modelo, então imagine o custo se tivesse que treiná-lo do zero e começar de novo várias vezes para obter resultados ideais.

8. Solução de problemas

Se você tiver problemas, a leitura é o primeiro conselho que podemos dar a você. A maioria dos erros são facilmente compreendidos apenas ao ler os logs, pois quase todos os erros são capturados por um try/catch e registrados.

Se você precisar instalar um novo módulo ou dependência do Python, abra um terminal dentro do contêiner e digite, por exemplo: "pip install new-module"
Há várias formas de abrir um terminal,

  • Se você usa os plugins da InterSystems, pode clicar na barra abaixo no VSCode, que se parece com docker:iris:52795[IRISAPP], e selecionar Open Shell in Docker.
  • Em qualquer terminal local, digite: docker-compose exec -it iris bash
  • No Docker-Desktop, encontre o contêiner IRIS e clique em Open in terminal

Alguns modelos talvez exijam algumas alterações no pipeline ou nas configurações, por exemplo. É sua responsabilidade adicionar as informações corretas nas configurações e na solicitação.

9. Conclusão

Daqui em diante, você poderá usar modelos de que talvez precise no IRIS e ajustá-los como desejar.
Esse modelo precisa ser modificado para atender às suas necessidades e foi criado como base para qualquer projeto de IA e IRIS que considere a sustentabilidade e interoperabilidade.

Por falta de tempo, não consegui adicionar uma API que usasse um Diretor para se comunicar diretamente com a produção e permitir que os usuários fizessem solicitações aos modelos.
No entanto, se você ainda tiver interesse em uma API IRIS usando esse módulo do Python, confira meu GitHub ou acesse meu exemplo de API no Python para IRIS.

Link para meu perfil do DC: https://community.intersystems.com/user/lucas-enard-0

0
0 71
Artigo Heloisa Paiva · Set. 6, 2022 4m read

Recentemente comecei a estudar interoperabilidade e achei a documentação oficial muito útil para entender como funciona, mas ainda tive dificuldade para implementar sozinha. Com ajuda dos meus colegas de trabalho, consegui criar uma Demo de um sistema e aprender na prática. Por isso, decidi escrever esse post para ajudar outros a "colocar a mão na massa" e passar adiante a ajuda que tive.

0
1 95
Artigo Gilleady Alves da Silva · Set. 2, 2022 1m read

Para definir uma classe Business Operation, ela deve extender de "Ens.BusinessOperation" ou alguma subclasse dessa. Além disso, deve ser definido os parâmetros ADAPTER e INVOCATION (O qual deve especificar um dos valores: "Queue" ou "InProc"). Após isso, defina um bloco XDATA para mapear as mensagens recebidas para os respectivos métodos, como no exemplo abaixo:

Exemplo:

0
0 147
Job Cristiano Silva · Ago. 25, 2022

Olá à todos.

A Servix Informática está contratando para atuar na área de  Interoperabilidade.

Segue link com a descrição completa da vaga no LinkedIn

Venha fazer parte da nossa equipe!

Segue meu e-mail para contato cristiano.js@gmail.com

Pessoal não é necessário experiência com IRIS, daremos treinamento.

Vaga 100% Home Office.

Assistência Médica SulAmérica

CLT

Cartão IFood de Benefícios

Reembolso Internet/Telefonia

Kit de ferramentas para trabalho: Notbook, Mouse, Teclado e Fone de Ouvido

Abraços.

2
0 144
Anúncio Angelo Bruno Braga · Ago. 19, 2022

Olá Desenvolvedores!

Com vontade de mostrar suas habilidades em interoperabilidade? Participem de nosso próximo incrível concurso:

🏆 Concurso de Interoperabilidade InterSystems: Criando Soluções Sustentáveis 🏆

Duração: 29 de Agosto a 18 de Setembro

Mais prêmios: US$13.500 – a distribuição de prêmios mudou!

0
0 64
Artigo Danusa Calixto · Ago. 10, 2022 7m read

Depois deste GitHub, vamos ver como o protocolo FIX pode ser facilmente implementado usando a IRIS e o Python.

Se você não tem muito tempo, foque na seção Envie uma Cotação antes do Pedido no final, que explica em alguns minutos como enviar uma Solicitação de Cotação seguido por uma Solicitação de Pedido, além de mostrar o resultado do servidor em menos de cinco cliques.

IRIS-fix-protocol

A implementação do Protocolo FIX usando um contêiner Python da IRIS para o iniciador e um contêiner Python regular para o ativador.

O Protocolo Financial Information eXchange (FIX®) revolucionou o ambiente de negociações, provando ser fundamental na facilitação de várias tendências de negociações eletrônicas que surgiram na última década.

O FIX se tornou uma linguagem dos mercados globais financeiros muito usada por firmas de compra e venda, plataformas de negociação e até reguladores para comunicar informações de negócios.

Esta demonstração tem como objetivo simular um cliente FIX, permitindo ao usuário criar várias sessões conectadas a um servidor (ativador do FIX) e enviar solicitações de compra ou venda.

Requisitos e informações

  • O QuickFix será instalado automaticamente na construção
  • Se você usa VSCode (deve ter visto algumas janelas pop-up no canto direito) e pressionar open in container, todas as extensões necessárias serão instaladas. Esse passo não é obrigatório.

Veja a documentação geral neste site.

Veja a documentação das tags neste site.

Veja os tipos de mensagens neste site.

Demonstração

Começando a demonstração

Para iniciar a demonstração, você precisa usar Docker-compose na pasta iris-fix-protocol:

docker-compose up

Encerrando a demonstração

docker-compose down

Abrindo a demonstração

Se você NÃO estiver dentro do contêiner da IRIS, conecte-se à demonstração usando:

http://localhost:52795/csp/irisapp/EnsPortal.ProductionConfig.zen?PRODUCTION=INFORMATION.QuickFixProduction

Username é SuperUser e Password é SYS

Se você estiver no contêiner:

http://127.0.0.1:52773/csp/irisapp/EnsPortal.ProductionConfig.zen?PRODUCTION=INFORMATION.QuickFixProduction

Usando a demonstração do cliente: Iniciador

Configurações e sessões

Só uma sessão pode ser aberta pela operação Python.Fix---.

Temos uma Sessão de Pedidos, Python.FixOrder, que pode enviar qualquer mensagem/solicitação ao servidor.

Temos uma Sessão de Cotações, Python.FixQuote, que faz a inscrição automática na solicitação de dados do mercado e pode enviar ao servidor qualquer solicitação de cotação.

Se você quiser modificar os parâmetros dessa sessão, clique em Python.FixOrder ou Python.FixQuote e acesse settings na guia à direita, na parte Python e na parte %settings. Aqui, você pode inserir ou modificar quaisquer parâmetros (não se esqueça de pressionar apply depois de terminar).
Veja a configuração padrão para Fix Order:

BeginString=FIX.4.3
SenderCompID=CLIENTORDER
TargetCompID=SERVER
HeartBtInt=30
SocketConnectPort=3000
SocketConnectHost=acceptor
DataDictionary=/irisdev/app/src/fix/spec/FIX43.xml
FileStorePath=/irisdev/app/src/fix/Sessions/
ConnectionType=initiator
FileLogPath=./Logs/
StartTime=00:00:00
EndTime=00:00:00
ReconnectInterval=10
LogoutTimeout=5
LogonTimeout=30
ResetOnLogon=Y
ResetOnLogout=Y
ResetOnDisconnect=Y
SendRedundantResendRequests=Y
SocketNodelay=N
ValidateUserDefinedFields=N
ValidateFieldsOutOfOrder=N

Veja a configuração padrão para Fix Quote:

BeginString=FIX.4.3
SenderCompID=CLIENTQUOTE
TargetCompID=SERVER
HeartBtInt=30
SocketConnectPort=3000
SocketConnectHost=acceptor
DataDictionary=/irisdev/app/src/fix/spec/FIX43.xml
FileStorePath=/irisdev/app/src/fix/Sessions/
ConnectionType=initiator
FileLogPath=./Logs/
StartTime=00:00:00
EndTime=00:00:00
ReconnectInterval=10
LogoutTimeout=5
LogonTimeout=30
ResetOnLogon=Y
ResetOnLogout=Y
ResetOnDisconnect=Y
SendRedundantResendRequests=Y
SocketNodelay=N
ValidateUserDefinedFields=N
ValidateFieldsOutOfOrder=N

Se você quiser modificar os parâmetros da Inscrição no Mercado, clique em Python.FixQuote e acesse settings na guia à direita, na parte Python Adapter e na parte %settings. Aqui, você pode inserir ou modificar quaisquer parâmetros (não se esqueça de pressionar apply depois de terminar).
Veja a configuração padrão para o adaptador Fix Order:

subscribe=True
MarketDepth=0
MDUpdateType=0
SecurityType=FOR
md_types=0;1
symbols=EUR/USD;USD/CZK
products=4;4

Os símbolos e os produtos funcionam juntos e representam uma lista de símbolos + produtos do FIX, que deve ser usada assim: symbols=EUR/USD;EUR/CZK;USD/CZK products=4;4;4

Agora, ao iniciar/reiniciar, a nova configuração será aplicada e as novas sessões serão criadas.

Para criar várias sessões ativas ao mesmo tempo, você pode adicionar uma nova operação com o + perto da coluna Operation. Em Operation Class, selecione Python.FixOrderOperation ou Python.FixQuoteOperation e, em Operation Name, Python.FixOrder2, por exemplo. Agora, você precisa inserir a configuração desejada para a sessão.
Pode ser a mesma configuração padrão anterior ou qualquer outra configuração válida, mas qualquer nova sessão precisa ser adicionada também ao servidor. Observe que ter a mesma configuração de ID da sessão duas vezes pode causar problemas relacionados à conexão com o servidor. Veja mais informações neste site (na guia "Getting started" / "Configuration").

Enviar uma cotação

Primeiro, você precisa iniciar a demonstração, usando o botão verde Start, ou use Stop e Start novamente para aplicar as mudanças nas configurações.

Em seguida, ao clicar na operação Python.FixQuote escolhida e selecionar na guia à direita action, você pode aplicar test à demonstração.

Na janela test, selecione:

Nova cotação

Tipo de solicitação: Grongier.PEX.Message

Em classname, insira:

msg.Request

Para json, veja um exemplo de solicitação de cotação:

{
"header_field":
    {
        "35":"R"
    },
"group_field":
    {
        "146":
        {
            "40":"1;2",
            "55":"EUR/USD;USD/CZK"
        }
    }
}

Agora, você pode clicar em Visual Trace para ver nos detalhes o que aconteceu e visualizar os registros do iniciador.

Enviar um pedido

Primeiro, você precisa iniciar a demonstração, usando o botão verde Start, ou use Stop e Start novamente para aplicar as mudanças nas configurações.

Em seguida, ao clicar na operação Python.FixOrder escolhida e selecionar na guia à direita action, você pode aplicar test à demonstração.

Na janela test, selecione:

Aqui, você pode enviar qualquer mensagem de quickfix para o servidor. Veja um exemplo de uma solicitação de ordem de compra, mas se você seguir o mesmo padrão em quase qualquer tipo de mensagem.

Nova ordem de compra Tipo de solicitação: Grongier.PEX.Message

Em classname, insira:

msg.Request

Para json, veja um exemplo de uma ordem de compra simples:

{
"header_field":
    {
        "35":"D"
    },
"message_field":
    {
        "55": "EUR/USD",
        "40": "1",
        "44": "100",
        "38": "10000",
        "54": "1",
        "21": "1"
    }
}

Agora, você pode clicar em Visual Trace para ver nos detalhes o que aconteceu e visualizar os registros do iniciador.

Envie uma Cotação antes da Ordem

Isso, que é lógica de aplicação, depende do funcionamento das especificações e de como o servidor processa as mensagens. No nosso exemplo, podemos usar Fix.BusinessProcess desta forma:

Tipo de solicitação: Grongier.PEX.Message

Em classname, insira:

msg.Request

Para json, veja um exemplo de uma ordem de compra simples:

{
"header_field":
    {
        "35":"D"
    },
"message_field":
    {
        "55": "EUR/USD",
        "40": "1",
        "44": "100",
        "38": "10000",
        "54": "1",
        "21": "1"
    }
}

É igual a uma solicitação de Ordem, mas no processo enviaremos antes de maneira automática uma solicitação de Cotação, com as informações corretas necessárias, para depois enviar a solicitação de Ordem.

Ao clicar em Visual Trace, você pode ver todas as mensagens.

Usando a demonstração do servidor: ativador

Registros

O ativador está isolado em outro contêiner. Para acessar os registros, você precisa acessar a pasta de origem iris-fix-protocol e a pasta acceptor/Logs. Aqui, você ver os registros para cada sessão.

Nova sessão do ativador

Se você conhece o protocolo FIX, você sabe que criar uma sessão no lado do cliente sem adicioná-la ao lado do servidor causará um erro, o que faz sentido, já que segurança e confiança são palavras-chave para o protocolo FIX.

Para adicionar uma nova sessão ao ativador, você precisa acessar acceptor/server.cfg e incluir as sessões que você quer adicionar no final do arquivo.

Agora, você pode inserir no terminal:

docker-compose up -d --build acceptor

Isso fechará e reiniciará o ativador, então talvez cause problemas relacionados às solicitações enviadas e aos dados armazenados.

0
0 166
Anúncio Angelo Bruno Braga · Jun. 28, 2022

Olá Comunidade, 

Neste webinar nós iremos discutir como você pode integrar facilmente o Apache Kafka com a plataforma de dados InterSystems IRIS, incluindo a opção utilizando produções de interoperabilidade e programaticamente através de chamadas de API, tanto como produtor quanto como consumidor de mensagens do Apache Kafka: 

⏯ Papo Técnico InterSystems IRIS: Kafka

0
0 55
Artigo Henrique Dias · Jun. 3, 2022 4m read

Alguns meses atrás, @José Pereira e eu estavamos conversando sobre o artigo Video Smart Data Services (Vision & Demo) publicado pelo @Amir Samary e durante o bate-papo, começamos a viajar em que tipo de funcionalidade seria interessante de se ter em uma futura solução IRIS. 

Uma das funcionalidades que ganhou força durante a conversa, foi a ideia de se ter o IRIS como uma solução iPaaS. Até cheguei a perguntar isso diretamente para o Amir nesse comentário aqui.

0
0 79
Job Angelo Bruno Braga · Mar. 10, 2022

Olá Desenvolvedores !

Segue uma oportunidade para bolsas de estudo remuneradas: 

Duas bolsas de estudo para área de tecnologia da informação:
•    Valor de R$ 7.373,10  durante 24 meses
•    https://inovahc.hc.fm.usp.br/oportunidades/
•    Código da vaga: HC04 Desenvolvedor
•    Código da vaga: HC05 Desenvolvedor Integrador

Desenvolvedor e Desenvolvedor Integrador

Requisitos:

0
0 240
Pergunta Renato Araujo · Mar. 8, 2022

Boa tarde à todos!

Preciso fazer uma chamada sql (utilizando JDBC) para executar uma procedure que retorna um objeto estruturado (Oracle Object) como parâmetro de saída.

No entanto, o método do Adptador SQL não está aceitando o tipo de dado STRUCT do JDBC (referente ao Oracle Oject), retornando a seguinte mensagem de erro:

ERRO #5023: Erro no Gateway Remoto: JDBC Gateway SP execute(0) error 0: Remote JDBC error: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'AGUARDAR_EVENTO'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

1
0 248
Pergunta Fernando Beira · Mar. 2, 2022

Pessoal, tudo bem!?

Na instituição que trabalho estou enfrentando algo inusitado, temos duas instancias EC2 (AWS) em mirror e durante algum tempo em funcionamento a instância primaria nos lança um erro no message.log dizendo o seguinte (Journal Daemon has been inactive with I/O pending for 10 seconds) e em seguida efetua o chaveamento de máquina para o nó 2 da configuração, isso esta ocorrendo com uma frequência grande impactando a operação.

A infra diz que o link está com 50% de carga e em teoria não há gargalo na comunicação.

Trecho do message.log:

5
0 245
Artigo Larissa Prussak · Out. 28, 2021 4m read

Olá pessoal!

@José Pereira e @Henrique Dias propuseram uma nova forma de visualizar mensagens no IRIS Interoperability em uma atualização recente do MessageViewer. Nessa atualização, tentaram dar aos usuários uma visualização baseada em um diagrama de sequência UML. Você pode obter mais informações no artigo anterior.

A fim de obter todos os cálculos de geometria complicados para desenhar esse diagrama, usaram a incrível biblioteca de código aberto mermaid JS. E o que eles gostariam de compartilhar com você neste artigo, é como usar esta biblioteca. Vamos nos concentrar apenas no diagrama de sequência, mas esteja ciente de que essa biblioteca permite que você faça muito mais.

O Mermaid usa uma sintaxe inspirada no Markdown para definir diagramas. É super intuitivo, então acho que é melhor mostrar um exemplo em vez de escrever muito texto chato:

sequenceDiagram
Alice->>John: Hello John, how are you?loopHealthcheck    John->>John: Fight against hypochondriaendNoterightofJohn: Rational thoughts!John-->>Alice: Great!John->>Bob: How about you?
0
0 637
Artigo Henrique Dias · Out. 21, 2021 2m read

Fala pessoal, beleza?

Como vocês exercitam sua criatividade? Como testam novas ideias? 

Ao longo dos anos sempre pensei em criar coisas novas, modificar as existentes, experimentar, testar, quebrar (sempre acontece cheeky), construir de novo, recomeçar.

Os concursos promovidos pela InterSystems são uma excelente fonte de motivação, obviamente os prêmios chamam muito a atenção e isso você não pode negar. Mas, não apenas prêmios, eles também nos dão um desafio criativo, uma oportunidade para criar, reimaginar, testar, experimentar. E a beleza de tudo isso é que você é livre para fazer o que quiser! 

0
0 161
Artigo Larissa Prussak · Out. 21, 2021 2m read

Olá comunidade,

O InterSystems IRIS tem um bom conector para fazer Hadoop usando Spark. Mas o mercado oferece outra alternativa excelente para o acesso ao Big Data Hadoop, o Apache Hive. Veja as diferenças:

Hive vs. Spark
Fonte: https://dzone.com/articles/comparing-apache-hive-vs-spark

Eu criei um serviço de interoperabilidade PEX para permitir que você use o Apache Hive dentro de seus aplicativos IRIS da InterSystems. Para experimentar, siga estas etapas:

1. Faça um git clone para o projeto iris-hive-adapter:

$ git clone https://github.com/yurimarx/iris-hive-adapter.git
0
0 269
Anúncio Angelo Bruno Braga · Out. 4, 2021

Olá Desenvolvedores!

Aqui estão os bônus tecnológicos para o Concurso de Interoperabilidade InterSystems 2021 que irão fornecer pontos adicionais a seus projetos na votação:

  • Uso do Business Process BPL ou Business Rule DTL 
  • Uso de Adaptadores de Interoperabilidade Customizados
  • Uso da Production EXtension(PEX) Java ou .NET 
  • Uso do Workflow 
  • Implantação usando o pacote ZPM 
  • Uso de contêiner Docker
  • Demonstração Online
  • Análise de qualidade do código zero bug
  • Artigo publicado na Comunidade de Desenvolvedores
  • Vídeo no YouTube

Vejam os detalhes abaixo:<--break->

0
0 53
Artigo Guilherme Koerber · Set. 4, 2021 3m read

Anexei um documento que descreve o produto que desenvolvi chamado NiPaRobotica Pharmacy. Esta é uma interface que desenvolvi que aceita solicitações de dispensa de farmácia e converte os itens de linha no pedido em diálogos de dispensa que são enviados para robôs de farmácia. Implantei a interface em 3 Farmácias Hospitalares, duas das quais tinham 6 robôs que foram dispostos de tal forma que as rampas de dispensação canalizavam os medicamentos para as mesas pelos farmacêuticos sentados em vitrines atendendo 1200 pacientes por dia. Os robôs reduziram o tempo médio de espera de 2 horas para uma

0
0 106