Pesquisar

Limpar filtro
Artigo
Danusa Calixto · Dez. 27, 2022

Como se inscrever no Programa de Acesso Antecipado (EAP)?

Early Access Program (EAP) é uma maneira de fornecer recursos específicos com antecedência para um grupo de pessoas que testarão e fornecerão feedback sobre esse recurso. A InterSystems lançou diferentes versões (ou peças) de software nos últimos anos e melhorou os recursos antes de serem lançados. Alguns exemplos até agora: Armazenamento Colunar; Python integrado; FHIRSQL; e outros. Mas uma característica dos EAPs é que eles podem não estar disponíveis para todos. Você tem que se inscrever no Programa. No caso da descontinuação da instalação do servidor web Apache (a.k.a. NoPWS), a maneira de se registrar é enviar um e-mail para nopws@intersystems.com. Use este mesmo e-mail para feedback. Depois de receber um e-mail de confirmação, você verá os EAPs aos quais tem acesso no website Serviços de Avaliação. Você deve fazer login para ver o conteúdo. Assim, após o login: 1) EAPs estão no lado direito da tela: Clique em "Baixar Programas de Acesso Antecipado" e vá para a próxima tela. 2) Selecione o EAP no qual você está inscrito. Usando o NoPWS como exemplo aqui: Lembre-se de que você pode ver apenas os EAPs aos quais tem acesso. 3)Após selecionar um EAP, você poderá visualizar todos os documentos e softwares disponíveis para ele: Sim, você é obrigado a concordar com os Termos de Serviço. Em seguida, o botão Download será ativado para você. E uma última coisa... Por favor, forneça feedback! Nós queremos ouvir de você.
Artigo
Claudio Devecchi · Fev. 1, 2021

Paciente no centro de todas as Informações - Parte 1

Quando se fala em tecnologia da informação nas instituições de saúde, principalmente nos hospitais e organizações de medicina diagnóstica, os CIO’s e a área de TI sabem muito bem que para que tudo funcione bem, é necessário que um número muito grande de sistemas e aplicações funcionem de maneira integrada. Talvez a área da saúde seja uma das áreas mais heterogêneas do ponto de vista de negócio, pois engloba além da gestão administrativo financeira, hospitalar, clínica e diagnóstica, uma infinidade de outros sistemas, como o sistema de controle de estacionamento, de hotelaria, dos restaurantes, da recepção, de farmácias, etc. Isso sem contar os sistemas de informação das empresas terceirizadas. Com tudo isso, é quase que impossível concentrar em um único sistema ou banco de dados todas as informações geradas durante o ciclo completo de atendimento de um paciente. É muito comum, por se tratar de sistemas, de tecnologias e fornecedores diferentes, que uma única pessoa tenha sido cadastrada facilmente em mais de dez sistemas e bancos de dados diferentes, com identificações próprias para cada um. Considerando todo este cenário, para conseguir operacionalizar os processos, é imprescindível que as empresas tenham plataformas que promovam a interoperabilidade destes sistemas, assim como o [IRIS for Health](https://learning.intersystems.com/enrol/index.php?id=1081) e [Health Connect da InterSystems](https://learning.intersystems.com/course/view.php?id=1437). Em outras palavras, é preciso que os sistemas “se conversem” para que as informações geradas sejam automaticamente integradas de um sistema para outro, mantendo assim uma consistência e compatibilidade, mesmo que em sistemas e bancos de dados separados. Ainda assim, as informações podem ser geradas e coletadas em momentos diferentes. Exemplo: Um determinado paciente passou pelo atendimento em uma clínica e neste evento foi orientado a realizar exames específicos na mesma ou em outra instituição e retornar quando os exames estivessem prontos. Além do cadastro e da coleta de informações demográficas deste paciente na clínica, foram realizados outros cadastros no momento da admissão deste paciente nos sistemas de medicina diagnóstica. Ou seja, se levarmos em conta o processo assistencial de uma única pessoa, teremos informações pertencentes a diferentes cadastros, sob identificações e dados demográficos distintos, coletados por pessoas e de maneiras diferentes. O fato é que se as empresas não fizerem nada para tratar especificamente desta questão, elas ficarão reféns da segregação dos dados gerados por cadastro, e não consolidados por indivíduo, independentes de quando e onde o mesmo foi atendido. Sempre terão uma visão parcial e não integral de todo o processo, tanto para fins assistenciais, quanto para quaisquer outros fins. Cada vez mais, os gestores e profissionais de saúde sabem do valor de se ter a visão consolidada de todas as informações geradas em torno do paciente, independentes do tempo e do local, sejam elas administrativas, financeiras, comportamentais e principalmente relacionadas à saúde. Se pararmos pra pensar, nós mesmos gostaríamos de ver num único aplicativo todos os nossos dados de saúde, como os exames por exemplo, independente da instituição que nos atendeu. Este sonho já está virando realidade em muitas instituições. Graças às plataformas de saúde como [InterSystems Healthshare](https://learning.intersystems.com/enrol/index.php?id=26), e produtos como [Healthshare Patient Index](https://learning.intersystems.com/enrol/index.php?id=632) é possível levar a gestão de informações na área da saúde para o próximo patamar. No próximo artigo, falaremos um pouco de como funciona o [Healthshare Patient Index](https://learning.intersystems.com/course/view.php?id=632) e de como ele é fundamental para ajudar as empresas a visualizarem o paciente como um único indivíduo e não apenas como um ou mais cadastros.
Artigo
Anastasia Dyubaylo · Mar. 18, 2021

Descrição dos Níveis do Global Masters

Olá Comunidade! Nesta publicação você irá encontrar informações sobre os Níveis da Comunidade de Desenvolvedores e InterSystems Global Masters. Todos os membros do Global Masters podem alcançar vários Níveis dependendo das contribuições feitas na Comunidade de Desenvolvedores e da atividade no Global Masters. Cada novo Nível libera novos tipos de desafios/tarefas e novos tipos de recompensas. Para subir de nível você precisa ganhar um número de distintivos para o próximo nível. Distintivos podem ser ganhos completando vários desafios no Global Master. Atualmente temos 6 Níveis: 0. Insider (você começa aqui)1. Advocate2. Specialist 3. Expert4. Ambassador5. VIP ➡️ Coloque o cursos do mouse sobre o distintivo para verificar como conseguí-lo. Nome do Nível Regras Nível Insider Você inicia no nível "Insider" quando você se junta ao Global Masters. Nível Advocate O próximo nível requer dois distintivos dos relacionados abaixo: DC Author InterSystems Researcher DC Commenter DC Problem Solver DC Translator 1.500 pontos 500 pontos 300 pontos 1.000 pontos 100 pontos Pull RequestContributor InterSystemsOpen Exchange Developer DC Recruiter Best PracticesAuthor Global Masterof the Month 500 pontos 1.000 pontos 600 pontos 1.000 pontos 1.000 pontos Ou seja, bastaria fazer uma pergunta, responder uma pergunta ou convidar um amigo para a Comunidade! Nível Specialist O Nível Specialist requer 3 distintivos da lista abaixo: InsightfulCommenter750 pontos Insightful Author1.500 pontos Advanced PullRequest Contributor500 pontos/cada PR PopularWriter600 pontos ReporterBadge7.500 pontos CuriousMember2.000 pontos Masterof Answers4.000 pontos PopularApp badge2.500 pontos Bronze OpenExchange Developer10.000 pontos BronzeRecruiter600 pontos/cada RecognizableBest Practices Author3.000 pontos Distintivos de Conquistas Anuais DC Best-SellingAuthor DC Expert DC Opinion Leader InterSystemsDeveloperof the Year InterSystemsApplicationof the Year Não é fácil alcançar o nível specialist mas, é possivel! Nível Expert O Nível Expert requer 4 dos distintivos abaixo: ExpertCommenter1.500 pontos Expert Author3.000 pontos Bronze PullRequest Contributor500 pontos/cada PR NotableWriter2.500 pontos BloggerBadge15.000 pontos Thorough Member5.000 pontos Bronze Masterof Answers8.000 pontos Bronze Popular App badge5.000 pontos Silver OpenExchange Developer25.000 pontos SilverRecruiter600 pontos/cada Bronze BestPractices Author7.000 pontos Distintivos de Conquistas Anuais Bronze Best-Selling Author BronzeExpert BronzeOpinion Leader Bronze InterSystemsDeveloper of the Year Bronze InterSystemsApplication of The Year É bem difícil se tornar um membro do nível expert em Plataforma de Dados! E ficamos felizes em conhecer esses caras! Nível Ambassador O Nível Ambassador requer 4 dos distintivos abaixo: RecognizableCommenter7.500 pontos RecognizableAuthor15.000 pontos Silver PullRequest Contributor500 pontos/cada PR FamousWriter7.000 pontos Influencerbadge40.000 pontos InquisitiveMember15.000 pontos Silver Masterof Answers20.000 pontos Silver Popular App badge7.500 pontos Gold OpenExchange Developer50.000 pontos GoldRecruiter600 pontos/cada Silver BestPractices Author10.000 pontos Distintivos de Conquistas Anuais Silver Best-Selling Author SilverExpert SilverOpinion Leader Silver InterSystemsDeveloper of the Year Silver InterSystemsApplication of The Year Nível VIP O Nível VIP requer 5 distintivos dos relacionados abaixo: PowerfulCommenter15.000 pontos PowerfulAuthor30.000 pontos Gold PullRequest Contributor500 pontos/cada PR GoldWriter20.000 pontos OpinionMaker75.000 pontos SocraticMember30.000 pontos Gold Masterof Answers40.000 pontos Gold PopularApp Badge12.500 pontos Platinum Popular App badge100.000 pontos PlatinumRecruiter600 pontos/cada Gold BestPractices Author15.000 pontos Distintivos de Conquistas Anuais Gold Best-Selling Author Gold Expert Gold Opinion Leader Gold InterSystemsDeveloper of the Year Gold InterSystemsApplication of The Year Bronze Advocateof the Year Silver Advocateof the Year Gold Advocateof the Year Este é um nível fantástico! Obrigado pela sua incrível colaboração! Então... Verifiquem as informações adicionais sobre o Global Masters: Como se juntar ao InterSystems Global Masters Distintivos do Global Masters: descrição e regras para obtê-los Se você ainda não se juntou ao Global Masters , não perca tempo e junte-se já! Fiquem a vontade para deixar suas perguntas nos comentários desta publicação.
Artigo
Kevin Koloska · Nov. 15, 2022

Construção de um repositório FHIR + o servidor de autorização/recurso OAuth2 no IRIS for Health - Parte 2

Construção de um repositório FHIR + o servidor de autorização/recurso OAuth2 no IRIS for Health - Parte 2 IRIS para #FHIR #OAuth2 #InterSystems de Saúde Olá, caros desenvolvedores! Neste artigo, vamos focar-nos na OAuth2, um protocolo que é cada vez mais utilizado em combinação com o FHIR para realizar permissões. Nesta parte 1, iniciaremos o contentor Docker para IRIS para a Saúde e Apache, configuraremos a função do servidor de autorização OAuth2 na IRIS for Health, acedemos-lhe a partir da ferramenta de desenvolvimento do Postman REST e obteremos um token de acesso. Além disso, na segunda parte e além, adicionaremos a funcionalidade de repositório FHIR à IRIS for Health, adicionamos a configuração do servidor de recursos OAuth2 e explicaremos como executar consultas de FHIR com fichas de acesso de dentro do Carteiro. Vários artigos excelentes já foram publicados dentro da comunidade de desenvolvedores para explicar a funcionalidade OAuth2 dos produtos InterSystems; No entanto, gostaria de explicar mais uma vez como criar a versão mais recente. Implementação do Quadro de Autorização Aberta IRIS InterSystems (Oauth 2.0) - Parte 1 Neste artigo, utilizaremos a versão mais recente da InterSystems IRIS for Health 2020.3 Preview Edition. Se pretender criar um ambiente baseado neste artigo, não se esqueça de utilizar esta ou uma versão posterior do kit. Algumas funcionalidades não estão incluídas em produtos antes desta versão. Preparativos preliminares O primeiro passo é fazer os preparativos preliminares. Há muitas coisas para se preparar para construir um ambiente seguro. IRIS for Health 2020.3 Preview Edition só está disponível como uma versão de recipiente Docker. (InterSystems Docker Hub/IRIS for Health)Para executar a configuração OAuth2, também terá de executar o servidor web e a configuração SSL. Neste artigo, utilizaremos Apache.Quando configurar o SSL em Apache, o certificado de configuração SSL deve corresponder ao nome de anfitrião do servidor. Por favor, tenha isso em conta. Obtenha ficheiros de amostra do repositório Do GitHub interssistema-jp O estivador-compose.yml/Dockerfile e outros ficheiros de amostras utilizados nesta configuração estão disponíveis no repositório GitHub para a comunidade de desenvolvedores intersystems.Em primeiro lugar, desaperte este ficheiro no seu ambiente utilizando o seguinte comando. (Também pode fazê-lo a partir do anexo a este artigo.) Este docker-compose.yml/Dockerfile e outros ficheiros são criados referindo-se à aplicação iris-webgateway-exemplo publicada no OpenExchange. https://github.com/Intersystems-jp/IRIS4H-OAuth2-handson.git de clone de Git Alterar a configuração de acordo com o kit utilizado Neste ficheiro docker-compose.yml, estão configurados dois contentores: o contentor IRIS for Health e o contentor Apache (httpd) serão criados pelo comando de construção de estivadores. O ficheiro docker-compose.yml, disponível no GitHub, refere IRIS for Health Community Edition Preview Edition (2020.3.200.0). A Edição Comunitária pode ser utilizada para a avaliação dos produtos InterSystems. íris: Imagem: loja/intersistemas/irishealth-comunidade:2020.3. 0.200. 0 Se estiver a utilizar uma versão diferente (versão oficial ou mais recente), altere esta parte da especificação. O recipiente Apache será construído com o conteúdo do Dockerfile, que requer um kit WebGateway para ligar ao IRIS a partir de Apache.Para obter informações sobre como obter este kit, os parceiros da InterSystems podem visitar o site de descarregamento do WRC ou contactar o Centro de Suporte do WRC. Se tiver mais alguma questão, contacte-nos neste endereço. Modifique as seguintes partes do Dockerfile dependendo do produto que obteve. Independentemente do sistema operativo da máquina hospedeira (Windows/Ubuntu/CentOS), a plataforma será lnxubuntux64 porque o sistema operativo do recipiente httpd base é Debian. Versão ARG=2020.3. 0.200. 0 Plataforma ARG =inxubuntux64 ADD WebGateway-${versão}-${plataforma}.tar.gz /tmp/ Preparação de um certificado SSL No passo seguinte, é preparado um certificado SSL. Ao aceder à autorização OAuth2, o certificado SSL definido no servidor web é verificado para ver se corresponde ao URL a ser acedido. Não é necessário utilizar um certificado oficial; é possível utilizar o OpenSSL, etc. Introduza o nome de anfitrião no campo "Nome Comum" ao criar o certificado. Além disso, uma vez que o certificado que criou será carregado automaticamente no momento do lançamento, tem de modificar o ficheiro para que este não exija uma palavra-passe. Por favor, consulte o seguinte comando. $ openssl rsa -in cert.key.org -out cert.key Coloque os ficheiros CRT e KEY criados no mesmo diretório que o Dockerfile, com os nomes de ficheiros server.crt/servidor.key respectivamente. Além de o utilizar com o servidor web Apache, precisará de um certificado SSL para a configuração OAuth2. Não precisa de introduzir um nome de anfitrião, etc., mas precisa de criar três conjuntos. (Nas seguintes configurações, aparecem como auth.cer/auth.key , cliente.cer/cliente.key, resserver.cer/resserver.key) Construindo um estivador e iniciando um contentor de estivadores Agora está finalmente pronto! Além dos quatro ficheiros que descarregou, tem agora um conjunto de instalações web gateway e dois certificados SSL no seu diretório. Preste atenção às permissões de acesso e execução de cada ficheiro. (Por exemplo, adicionei a permissão de execução a webgateway-entrypoint.sh.) estiva-composição construção estiva-composição -d Uma vez lançado, utilize o comando do PS para verificar se ambos os contentores estão a funcionar. Nome do recipiente Apache:_web IRIS for Health:store/intersystems/irishealth-community container name:2020.3.0.200.0 (ou outro nome dependendo do conjunto) Agora tente aceder ao portal de gestão nas seguintes três formas. Se o terceiro método funcionar, a sua configuração SSL através do servidor web Apache é um sucesso! http://[nome anfitrião]:52773/csp/sys/UtilHome.csp:Este URL é acedido através do Apache Privado no contentor IRIS. Não passa pelo Apache configurado. http://[hostname]/csp/sys/UtilHome.csp: Este URL fornece acesso ao portal de gestão através do Apache configurado. https://[hostname]/csp/sys/UtilHome.csp: Este URL fornece acessoao portal de gestão utilizando uma ligação SSL via Apache, que configurae. Criação de uma configuração SSL Agora que a IRIS for Health está a funcionar e temos acesso ao portal de gestão, vamos criar a configuração SSL para os preparativos finais. Aceda ao Portal de Gestão -> Administração do Sistema -> Configuração SSL/TLS de Segurança -> e crie três configurações SSL utilizando os três pares de chaves de certificado que preparou. Pode escolher o nome que quiser, mas neste artigo utilizaremos SSL4AUTH/SSL4CLIENT/SSL4RESSERVER, de acordo com artigos anteriores sobre AAuth2. *Sobre a partilha de diretórios entre anfitriões e contentores Especificar os seguintes volumes no ficheiro de composição de estiva indica a localização atual do diretório de anfitriões = /ISC no recipiente. Utilize este diretório ao especificar o ficheiro do certificado nas definições acima, etc. Volumes: - .:/ Isc Este diretório conterá não só ficheiros de ficheiros, mas também ficheiros de base de dados IRIS e ficheiros de configuração. Consulte o documento "Persistente %SYS for Persistent Instance Data Storage" para obter mais informações. Configuração OAuth2 na IRIS para a Saúde Agora é hora de entrar nos detalhes do acesso ao IRIS para a Saúde usando OAuth2! Configurar o servidor de autorização OAuth2 Primeiro, vamos configurar o servidor de autorização OAuth2! Vá ao Portal de Gestão → Administração do Sistema → Segurança → OAuth 2.0 → Server. Siga as instruções abaixo para configurar as definições. Definições no separador "Geral" Ponto final do transmissor: Nome anfitrião Insira o nome de anfitrião. Ponto final do transmissor: Prefixo Pode introduzir o valor da sua escolha, mas aqui definimo-lo como "authserver". Tipos de subvenções apoiadas Neste artigo, só usaremos o "Código de Autorização", mas se quiser testar outros "Tipos de subvenções", por favor adicione uma marca de verificação. Adicione também uma marca de verificação à "Autorização JWT" SSL/TLS de configuração Especifique a configuração SSL que acabou de adicionar. No separador "Âmbitos", clique em "Adicionar um âmbito suportado" para os adicionar. Mais tarde, o ecrã de início de sessão de código de autorização apresentará a "descrição" que escreveu aqui. Não altere o separador "Intervalos" a partir do valor predefinido. No separador "Definições JWT", vamos selecionar "RS512" como algoritmo de assinatura. No último separador "Personalização", altere a especificação "Token Class Generation" para %OAuth2.Server.JWT. Uma vez introduzido a informação, clique no botão "Guardar" para guardar a configuração. Agora que tem a configuração necessária para que a IRIS for Health funcione como um servidor de autorização OAuth2, está pronto para tentar! Vamos tentar aceder-lhe do Carteiro e ver se conseguimos um sinal de acesso! No entanto, antes de o fazermos, temos de realizar duas outras configurações. Adicionar uma descrição do cliente Primeiro, adicione a informação do Carteiro a que pretende aceder como cliente OAuth2. O registo do cliente OAuth2 pode ser adicionado através de registo dinâmico ou outros métodos. Clique em "Descrição do Cliente" na página de configuração do servidor para continuar. Clique em "Criar descrição do cliente" para adicionar uma entrada. Siga as instruções abaixo para criar uma subscrição do cliente. Definições no separador "Geral" Nome Insira um nome à sua escolha. Neste caso, escolhemos "carteiro". Tipo de Cliente Selecione "Confidencial" Redirecionamento de URL Clique no botão "Adicionar URL" para adicionar um URL de redirecionamento para o Carteiro. https://www.getpostman.com/oauth2/callback como URL de redirecionamento para carteiro. Tipos de subvenções apoiadas Especifique o mesmo "Código de Autorização" que foi configurado nas definições do servidor de autorização OAuth2. (Predefinição) Adicione um controlo se quiser testar outros tipos de bolsas também. No entanto, as definições devem ser as mesmas que a configuração do servidor de autorização. Verifique também a caixa "Autorização JWT". Especificar aqui Algoritmo de assinatura autenticado Verifique "autorização JWT" ao abrigo de tipos de subvenção suportados para poder selecioná-la. Selecione "RS512". Uma vez inserida a informação, clique no botão "Guardar" para guardar a descrição do cliente. Clique no separador "Referências ao Cliente" para ver o ID do cliente e a chave privada do cliente para esta entrada. Você vai precisar desta identificação e chave privada quando fizer testes do POSTMAN. Adicionar uma aplicação web Deve ser adicionado outro parâmetro importante antes de aceder ao mesmo a partir do POSTMAN. O ecrã de configuração do servidor de autorização OAuth2 determinou que o ponto final para esta configuração é https:///authserver/oauth2. Para que o acesso a este ponto final seja tratado corretamente pela IRIS, precisamos de adicionar uma aplicação web para esta rota URL. Vá à Administração do Sistema→SSecurity →Applicações→Web Applications, e clique em "Criaruma nova aplicação Web". É fornecido um modelo de aplicação web OAuth2, por isso selecione primeiro "/oauth2" em "Copy from". Definições de "Editar aplicações web" Cópia de "/oauth2": Selecione sempre este primeiro na lista de drop-down. Nome /authserver/oauth2 Ativação Verifique o botão de rádio "REST". Depois de introduzir cada valor, guarde-o. Teste OAuth2 do POSTMAN Vamos testá-lo do CARTMAN. Os testes também podem ser feitos a partir de outras ferramentas ou do próprio programa. A explicação detalhada do POSTMAN está fora do âmbito deste artigo, mas um ponto a notar é que a verificação do certificado SSL deve ser alterada para OFF nas definições do POSTMAN. Depois de criar um novo pedido no POSTMAN, selecione "OAuth 2.0" no separador TIPO DE PERMISSÃO e clique em "Obter Novo Token de Acesso". No ecrã seguinte, insira os valores da seguinte forma. Configurações「GET NOVO TOKEN DE ACESSO」 Nome simbólico Insira um nome à sua escolha. Tipo de subvenção Escolha "Código de Autorização". URL de retorno https://www.getpostman.com/oauth2/callback Auth URL https:///authserver/oauth2/authorize Insira o valor do ponto final +/authorize. Ao adicionar ?ui_locales=ja, pode exibir o ecrã de login em japonês. Auth Token URL https:///authserver/oauth2/token. Introduza o valor do ponto final +/token. ID do cliente Introduza o ID do cliente apresentado no separador Referências ao Cliente depois de guardar a descrição do cliente. Segredo do Cliente Introduza a chave privada do cliente, que é apresentada no separador Referências ao Cliente depois de guardar a descrição do cliente. Campo Introduza o âmbito guardado na configuração do servidor de autorização, por exemplo "scope1". Também pode especificar vários campos separados por espaços. Estado Introduza o parâmetro de estado "Estado", que é utilizado para contramedidas contra o CSRF. Não é explicitamente usado, mas não pode ser deixado vazio, por isso entramos numa corda arbitrária. Depois de introduzir as definições e clicar no botão "Request Token", verá o ecrã de login como mostrado abaixo. Tente iniciar sedução com a informação do utilizador (por exemplo, _SYSTEM) que tem acesso ao portal de gestão. No ecrã seguinte após o início de sessão, pode decidir conceder permissões a esta aplicação. Depois de clicar em "Permitir", se o token de acesso for apresentado no ecrã seguinte, como mostrado abaixo, o teste de aquisição de token de acesso é bem sucedido! Teste OpenID Connect IRIS for Health pode realizar o processamento de autorização OAuth2, bem como o processamento de autenticação compatível OpenID Connect.Para mais detalhes consulte este documento. Nesta configuração, o OpenID Connect está ativado, por isso vamos testar se também conseguimos obter o token OpenID Connect ID! É fácil de implementar. No ecrã GET NEW ACCESS TOKEN, adicione "openid" ao seu âmbito e faça um pedido. O OpenID Connect também será apresentado na página de pedido de permissão. Depois de iniciar sessão e dar as suas permissões, certifique-se de que também obtém um token de identificação (id_token) quando vir o ecrã seguinte. (Pode ser necessário rolar.) Conseguiu o sinal de acesso e id_token? Embora alguns preparativos, como certificados, exijam um pouco de tempo e esforço, poderíamos construir um servidor de autorização OAuth2 com tal simplicidade usando IRIS para a Saúde, uma plataforma de base de dados. Na próxima parte desta série, vou finalmente mostrar-lhe como construir um repositório FHIR, registar o repositório FHIR como um servidor de recursos OAuth2, e mostrar-lhe como descansar o repositório FHIR usando um token de acesso OAuth2 da POSTMAN. Ir para a publicação inicial escrita por @Shintaro Kaminaka
Artigo
Yuri Marx · jan 13, 2022

IntegratedML walkthrough - Predição de Doença cardíaca

O recurso InterSystems IRIS IntegratedML é usado para obter previsões e probabilidades usando a técnica AutoML. O AutoML é uma tecnologia de Machine Learning usada para selecionar o melhor algoritmo/modelo de Machine Learning para prever status, números e resultados gerais com base nos dados anteriores (dados usados para treinar o modelo AutoML). Você não precisa de um Cientista de Dados, pois o AutoML testará os algoritmos de Machine Learning mais comuns e selecionará o melhor algoritmo para você, com base nos recursos de dados analisados. Veja mais aqui, neste artigo. O InterSystems IRIS possui um mecanismo AutoML integrado, mas também permite que você use H2O e DataRobot. Neste artigo, mostrarei a você cada etapa para usar o mecanismo InterSystems AutoML. Passo 1 - Download a aplicação de exemplo e faça os exercícios 1. Vá em https://openexchange.intersystems.com/package/Health-Dataset 2. Clone/git pull do repositório para qualquer diretório local $ git clone https://github.com/yurimarx/automl-heart.git 3. Abra o terminal, vá no diretório do projeto e execute: $ docker-compose build 4. Execute o IRIS no container: $ docker-compose up -d Passo 2 - Entendendo o cenário de negócio e os dados disponíveis O cenário de negócio é para prever, usar dados passados e assim prever doenças cardíacas. Os dados para fazer isto são: SELECT age, bp, chestPainType, cholesterol, ekgResults, exerciseAngina, fbsOver120, heartDisease, maxHr, numberOfVesselsFluro, sex, slopeOfSt, stDepression, thallium FROM dc_data_health.HeartDisease Segue o dicionário de dados da tabela (source: https://data.world/informatics-edu/heart-disease-prediction/workspace/data-dictionary): Column name Type Description age Integer em anos sex Integer (1 = masculino; 0 = feminino) chestPainType Integer Valor 1: angina típica -- Value 2: agina atípica -- Value 3: angina não presente -- Value 4: assíntomático bp Integer Pressão sanguínea (in mm Hg no momento da admissão no hospital) cholesterol Integer Colesterol em mg/dl fbsOver120 Integer (açucar no sangue > 120 mg/dl) (1 = true; 0 = false) ekgResults Integer Resultados do eletrocardiograma -- Valor 0: normal -- Valor 1: tem ST-T com ondas anormais (onda T com inversões e/ou elevação ST ou depressão de > 0.05 mV) -- Valor 2: apresenta provável hipertrofia ventricular no lado esquerdo maxHr Integer Pulsação máxima do coração atingida exerciseAngina Integer Angina induzida a exercícios (1 = yes; 0 = no) stDepression Double Depressão ST induzida por exercício slopeOfSt Integer A inclinação do segmento ST de exercício de pico -- Valor 1: ascendente -- Valor 2: regular -- Valor 3: descendente numberOfVesselsFluro Integer Número de vasos principais (0-3) coloridos por fluoroscopia thallium Integer 3 = normal; 6 = defeito corrigido; 7 = defeito reversível heartDisease String Valor 0: < 50% estreitamento do diâmetro -- Valor 1: > 50% estreitamento do diâmetro A heartDisease é a propriedade que precisamos prever. Passo 3 - Preparar o treinamento dos dados A tabela HeartDisease tem 270 linhas. Receberemos 250 para treinar nosso modelo de previsão. Para fazer isso, vamos criar a seguinte view dentro do Management Portal > Systems Explorer > SQL: CREATE VIEW automl.HeartDiseaseTrainData AS SELECT * FROM SQLUser.HeartDisease WHERE ID < 251 Passo 4 - Preparar validação dos dados Obteremos 20 linhas para validar os resultados da previsão. Para fazer isso, vamos criar a seguinte view dentro do Management Portal > Systems Explorer > SQL: CREATE VIEW automl.HeartDiseaseTestData AS SELECT * FROM SQLUser.HeartDisease WHERE ID > 250 Passo 5 - Criar o modelo AutoML para a predição O IntegratedML permite criar um modelo AutoML para fazer previsões e probabilidades (veja mais em https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GIML_BASICS). Para fazer isso, vamos criar o seguinte modelo dentro do Management Portal > Systems Explorer > SQL: CREATE MODEL HeartDiseaseModel PREDICTING (heartDisease) FROM automl.HeartDiseaseTrainData O modelo do qual vamos obter dados de treinamento (learning) é da view automl.HeartDiseaseTrainData. Passo 6 - Executar o treinamento Para fazer isso, executaremos a seguinte instrução SQL dentro do Management Portal > Systems Explorer > SQL: TRAIN MODEL HeartDiseaseModel Passo 7 - Validar o modelo treinado Para validar o treinamento, executaremos a seguinte instrução SQL dentro do Management Portal > Systems Explorer > SQL: VALIDATE MODEL HeartDiseaseModel FROM automl.HeartDiseaseTestData Nós validamos o HeartDiseaseModel usando dados de teste da view automl.HeartDiseaseTestData. Passo 8 - Obter as métricas de validação Para ver as métricas de validação do processo de validação, executaremos a seguinte instrução SQL dentro do Management Portal > Systems Explorer > SQL: SELECT * FROM INFORMATION_SCHEMA_ML_VALIDATION_METRICS Para entender os resultados retornados, consulte: https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GIML_VALIDATEMODEL. A documentação do InterSystems IRIS detalha o seguinte dos resultados da validação: A saída de VALIDATE MODEL é um conjunto de métricas de validação que podem ser visualizadas na tabela INFORMATION_SCHEMA_ML_VALIDATION_METRICS. Para modelos de regressão, as seguintes métricas são salvas: Variance R-squared Mean squared error Root mean squared error Para modelo de classificação, as métricas a seguir são retornadas: Precision — Isso é calculado dividindo o número de verdadeiros positivos pelo número de positivos previstos (soma de verdadeiros positivos e falsos positivos). Recall — Isso é calculado dividindo o número de verdadeiros positivos pelo número de reais positivos (soma de verdadeiros positivos e falsos negativos). F-Measure — Isso é calculado pela seguinte expressão: F = 2 * (precision * recall) / (precision + recall) Accuracy — Isso é calculado dividindo o número de verdadeiros positivos e verdadeiros negativos pelo número total de linhas (soma de verdadeiros positivos, falsos positivos, verdadeiros negativos e falsos negativos) em todo o conjunto de teste. Passo 9 - Execute as predições usando seu novo modelo AutoML - o último passo! Para ver as métricas de validação do processo de validação, executaremos a seguinte instrução SQL dentro do Management Portal > Systems Explorer > SQL: SELECT *, PREDICT(HeartDiseaseModel ) AS heartDiseasePrediction FROM automl.HeartDiseaseTestData Compare as colunas heartDisease (valor real) e heartDiseasePrediction (o valor de predição) Aproveite!
Anúncio
Danusa Calixto · Maio 11, 2023

Perguntas do Mês: Abril 2023

Olá Desenvolvedores, No mês de Abril, foram postadas 65 novas perguntas na Comunidade de Desenvolvedores EN : Questions #InterSystems IRIS NOT %INLISTby Matjaz Murko SQL CREATE DATABASE from templateby Dmitry Maslennikov How to list all the tables available in a current database?by Evgeny Shvarov Port Authority Error - ERROR #794: Doc DB IRISInteroperabilityPorts in namespaceby Scott Roth DML exportby Eduard Lebedyuk Why loading X509 credentials fails when called under context of a CSP request ?by Norman W. Freeman How To Create XML Document in BPLby Sridhar Sanjeevi sharing a deployment on IRIS Cloud SQLby Robert Cemper how to quickly move data to oracleby water huang confusing content on IRIS Cloud SQLby Robert Cemper How can I change the default string collation of a SQL stored procedure?by Pravin Barton Any chance I can provide a password to a vanilla iris docker instance?by Evgeny Shvarov IRIS start and stop too slowby Dmitry Maslennikov Code to copy class definition from one Namespace to another?by Ben Spead Quick Process to Start/Stop an Objectby Scott Roth Read a long Stream into JSON Dynamic Object - MAXSTRING errorby Oliver Wilms Error with AutoMLby andrey mikov Simple example of SOAP service to transfer files between systemsby Punit Yogesh Shah IRIS cloud SQL in contest - false promiseby Robert Cemper Dissecting an OREFby Jeffrey Drumm Error when changing legacy VB.Net code from InterSystems.Data.CacheClient to InterSystems.Data.IRISClientby Jon Astle Allow string or number values for a property with JSON adaptorby Pravin Barton VSCode: "ObjectScript Class" As "New File" Option?by Jean Millette Is there a way to convert svg to jpg or pngby Wanbo Wang ERROR #5034: Invalid status code structure - Writing to Fileby Scott Roth Security Advisor - Application Errorby Scott Roth Bulk FHIR DataLoaderby Ron Sweeney Compile for a previous version of Health Connect?by Adam Lees Restoring a backupby William Caldwell Indexing on a Multivalue fileby Mindy Caldwell REST API Versioning in Headerby Michael Davidovich Interoperability "Productions" Stop and Start from command lineby Phillip Wu Using %Stream.FileBinary's ClassMethods to set where a Stream is savedby Punit Yogesh Shah How to escape ')#' inside a CSP Runtime Expression?by Ben Spead Issues with Publishing Power BI Reports with DirectQuery Connection to IRIS?by Jean Millette Memory leak and IRIS container freeze... or just my curvy handsby Rostislav Dublin #Ensemble SQL query in Dropdownby Rochdi Badis Transform HL7 message to multi-line output flat fileby Doug Strzalko How to Download files using %Net.HttpRequestby Thembelani Mlalazi Refreshing Comboby Rochdi Badis Find a specific column in a dataComboby Rochdi Badis Uninstalling Ensembleby Colin Brough i meet a problem when use %SQLGatewayConnectionby water huang Basics for JSON in ensembleby Joe Jones Show display mode in SQL queryby Rochdi Badis Collecting all elements of a Productionby Andrew Makinson Custom Dashboardby Larry Pinsky #HealthShare How to know which users did patient searches on clinical viewerby Ephraim Malane What type of inbound connection send an ACK back by default?by Jason Pribble #Caché ERROR #6301: SAX XML Parser Error: XML or TEXT declaration must start at line 1, column 1by Colin Brough Document SDA deletionby Akshay Pandey Using %Stream.FileCharacter to create and append to files - Permissions Issueby Scott Roth Breaking a string into wordsby Anna Golitsyna Replace text by argsby Kurro Lopez Need to understand message in console logby Kevin McGinn Post form data and redirect not workingby Tiana Andria checksum calculation, , shift byteby Sergio Carvalho import global (2012.5 to 2018.1.4)by Lucas Galdino How to Set and Check session for CSP Pageby Vinay Purohit #InterSystems IRIS BI (DeepSee) I need to group two or more values into one. What is the right syntax ? WITH [DIMENSIONS].[GENDERCAL] AS [Gender].[H1].[Gender].Currentmember WHEN [Gender].[H1].[Gender].[F] THEN 'FEMALE' WHEN [Gby Jacinto Busquets #InterSystems IRIS for Health Docker container - enable TLS/HTTPS on private web serverby John McBride Need to have TCP/IP HL7 Inbound service/adapter just write to file - no persistence anywhere in the engineby Ryan Hulslander After upgrade SYS.Task.BackupAllDatabases notby Mark OReilly IRIS/REST, how could I get all HTTP headers?by Dmitry Baranov IRIS on Azure, access through WSL in Win, needed directories not visibleby Prashant Sonnaik Aqui estão as Perguntas de Abril escolhidas pelos Especialistas da InterSystems: 📌 Quick Process to Start/Stop an Object por @Scott.Roth 📌 Replace text by args por @Francisco.López1549 📌 Code to copy class definition from one Namespace to another? por @Benjamin.Spead Estas perguntas estarão destacadas com a tag #Key Question, e seus autores receberão o selo Key Question no Global Masters. Parabéns, e obrigada a todos por suas perguntas. Continuem a perguntar! Vejo vocês no próximo mês😉
Artigo
Danusa Calixto · Maio 9, 2023

Criando uma API REST com autenticação JWT no ObjectScript

# Prefácio O InterSystems IRIS a partir da versão 2022.2 inclui a capacidade de autenticar uma API REST usando JSON web tokens (JWTs). Esse recurso aprimora a segurança ao limitar quando e com que frequência as senhas são transferidas pela rede, além de definir um tempo de expiração para o acesso. O objetivo deste artigo é servir como um tutorial de como implementar uma API REST simulada usando o InterSystems IRIS e bloquear o acesso a ela com JWTs. ***OBSERVAÇÃO*** NÃO sou uma desenvolvedora. Não faço alegações sobre a eficiência, escalabilidade ou qualidade das amostras de código que uso neste artigo. Estes exemplos são APENAS para fins educacionais. Eles NÃO se destinam a código de produção. # Prólogo Depois de fazer esse aviso, vamos explorar os conceitos que serão analisados aqui. ## O que é REST? REST é um acrônimo para "REpresentational State Transfer". É uma arquitetura para os programas se comunicarem com os aplicativos da Web e acessarem as funções publicadas por esses aplicativos. ## O que é um JWT? Um JSON web token (JWT) é uma maneira compacta e segura para o URL de representar informações transferidas entre duas partes que podem ser assinadas digitalmente, criptografadas ou ambos. Se você quiser saber mais sobre os JWTs e outras classes da Web JSON compatíveis com o InterSystems IRIS, leia [esta postagem](https://community.intersystems.com/post/reference-json-web-classes). # Colocando a mão na massa ## De acordo com a especificação Para consumir uma API REST, primeiro precisamos ter uma API REST. Disponibilizei uma [amostra de especificação da OpenAPI 2.0](https://gist.github.com/greycatsec/4bdb1c8b5ddd4b06da2390184870b8c1) para um RPG de mesa (TTRPG). Ela será usada nos exemplos deste artigo. Há vários exemplos de como escrever a sua online, então fique à vontade para se aprofundar nisso, mas a especificação é apenas um modelo. A única coisa que faz é informar como usar a API. ## Geração da API REST O InterSystems IRIS oferece uma maneira bastante organizada de gerar stubs de código da API REST. [Esta documentação](https://docs.intersystems.com/iris20223/csp/docbook/DocBook.UI.Page.cls?KEY=GREST_mgmnt#GREST_mgmnt_api) oferece uma maneira completa de gerar stubs de código. Fique à vontade para usar a especificação da OpenAPI 2.0 que forneci na seção anterior. ## Implementação É aqui que vamos ir a fundo. A seção de geração criará três arquivos `.cls` para você: 1. `impl.cls` 2. `disp.cls` 3. `spec.cls` Vamos passar a maior parte do nosso tempo no `impl.cls`, talvez mexer no `disp.cls` para depurar e não encostar no `spec.cls`. No `impl.cls`, há stubs de código para os métodos que `disp.cls` chamará quando receber uma solicitação da API. A especificação da OpenAPI definida nessas assinaturas. Ela informa o que você quer que seja feito, mas é você quem precisa implementar isso no final. Então, vamos fazer isso! ### Criação Uma das maneiras que usamos um banco de dados é adicionando objetos a ele. Esses objetos servem como uma base para outras funções. Sem objetos existentes, não haverá nada para ver, então vamos começar com nosso modelo de objeto: um `Character` (personagem)! Um `Character` precisa ter nome e, como opção, especificar a classe, a raça e o nível. Veja abaixo um exemplo de implementação da classe `TTRPG.Character` ```objectscript Class TTRPG.Character Extends %Persistent { Property Name As %String [ Required ]; Property Race As %String; Property Class As %String; Property Level As %String; Index IndexName On Name [ IdKey ]; ClassMethod GetCharByName(name As %String) As TTRPG.Character { set character = ##class(TTRPG.Character).%OpenId(name) Quit character } } ``` Já que queremos armazenar objetos `Character` no banco de dados, precisamos herdar a classe `%Persistent`. Queremos que seja possível procurar personagens pelo nome, em vez de atribuir uma chave de ID arbitrária. Portanto, definimos o atributo `[ IdKey ]` no Index para a propriedade `Character.Name`. Isso também garante a exclusividade do nome do personagem. Com nosso modelo de objeto base definido, podemos analisar a implementação da API REST. O primeiro método que vamos explorar é o `PostCharacter`. Como visão geral, esta parte consome uma solicitação HTTP POST para o endpoint `/characters` com nossas propriedades de personagem definidas no corpo. Ela deve pegar os argumentos fornecidos e criar um objeto `TTRPG.Character` a partir deles, salvá-lo no banco de dados e informar se teve êxito ou não. ```objectscript ClassMethod PostCharacter(name As %String, class As %String, race As %String, level As %String) As %DynamicObject { set results = {} // cria o retorno %DynamicObject //cria o objeto character set char = ##class(TTRPG.Character).%New() set char.Name = name set char.Class = class set char.Race = race set char.Level = level set st = char.%Save() if st { set charInfo = {} set charInfo.Name = char.Name set charInfo.Class = char.Class set charInfo.Race = char.Race set charInfo.Level = char.Level set results.Character = charInfo Set results.Status = "success" } else { Set results.Status = "error" Set results.Message = "Unable to create the character" } Quit results } ``` Agora que podemos criar personagens, como buscamos aquele que acabamos de criar? De acordo com a especificação da OpenAPI, o endpoint `/characters/{charName}` permite a busca de um personagem pelo nome. Buscamos a instância do personagem, se ela existir. Se não existir, retornamos um erro para informar ao usuário que não existe um personagem com o nome fornecido. Isso é implementado no método `GetCharacterByName`. ```objectscript ClassMethod GetCharacterByName(charName As %String) As %DynamicObject { // Cria um novo objeto dinâmico para armazenar os resultados Set results = {} set char = ##class(TTRPG.Character).GetCharByName(charName) if char { set charInfo = {} set charInfo.Name = char.Name set charInfo.Class = char.Class set charInfo.Race = char.Race set charInfo.Level = char.Level set results.Character = charInfo Set results.Status = "success" } // Se nenhum character foi encontrado, define uma mensagem de erro no objeto dos resultados else { Set results.Status = "error" Set results.Message = "No characters found" } // Retorna o objeto dos resultados Quit results } ``` Mas isso é só o seu personagem. E todos os personagens que as outras pessoas criaram? Podemos ver esses personagens usando o método `GetCharacterList`. Ele consome uma solicitação HTTP GET para o endpoint `/characters` para compilar uma lista de todos os personagens no banco de dados e retorna essa lista. ```objectscript ClassMethod GetCharacterList() As %DynamicObject { // Cria um novo objeto dinâmico para armazenar os resultados Set results = {} set query = "SELECT Name, Class, Race, ""Level"" FROM TTRPG.""Character""" set tStatement = ##class(%SQL.Statement).%New() set qstatus = tStatement.%Prepare(query) if qstatus '= 1 { Do ##class(TTRPG.impl).%WriteResponse("Error: " _ $SYSTEM.Status.DisplayError(qstatus)) } set rset = tStatement.%Execute() Set characterList = [] while rset.%Next(){ Set characterInfo = {} Set characterInfo.Name = rset.Name set characterInfo.Race = rset.Race Set characterInfo.Class = rset.Class Set characterInfo.Level = rset.Level Do characterList.%Push(characterInfo) } if (rset.%SQLCODE < 0) {write "%Next failed:", !, "SQLCODE ", rset.%SQLCODE, ": ", rset.%Message quit} set totalCount = rset.%ROWCOUNT // Define as propriedades status, totalCount e characterList no objeto dos resultados Set results.Status = "success" Set results.TotalCount = totalCount Set results.CharacterList = characterList // Retorna o objeto dos resultados Quit results } ``` E essa é nossa API! A especificação atual não oferece uma maneira de atualizar ou excluir personagens do banco de dados, e isso fica como um exercício para o leitor! ## Configuração do IRIS Agora que implementamos nossa API REST, como fazemos a comunicação com o IRIS? No Portal de Gerenciamento, se você acessar a página `System Administration > Security > Applications > Web Applications`, poderá criar um novo aplicativo da Web. O nome do aplicativo é o endpoint que você usará ao fazer solicitações. Por exemplo, se o nome for `/api/TTRPG/`, as solicitações da API vão para `http://{IRISServer}:{host}/api/TTRPG/{endpoint}`. Para uma instalação do IRIS padrão local com segurança normal, é assim: `http://localhost:52773/api/TTRPG/{endpoint}`. Adicione uma boa descrição, defina o namespace desejado e clique no botão de opção para REST. Para ativar a autenticação JWT, selecione a caixa "Use JWT Authentication". O `JWT Access Token Timeout` determina a frequência com que o usuário precisará receber um novo JWT. Se você planeja testar a API por um longo período, recomendo definir esse valor como uma hora (3600 segundos) e o `JWT Refresh Token Timeout` (o período de renovação antes que o token expire para sempre) como 900 segundos. ![configuração do web app](/sites/default/files/inline/images/configuring_the_web_app_jwt_0.png) Agora que o aplicativo foi configurado, precisamos configurar o próprio IRIS para permitir a autenticação de JWT. É possível configurar essa opção em `System Administration > Security > System Security > Authentication/Web Session Options`. Na parte inferior, está o campo do emissor de JWT e o algoritmo de assinatura que será usado para assinar e validar os JWTs. O campo do emissor aparecerá na seção de informações do JWT e a finalidade é informar quem forneceu o token a você. Você pode defini-lo como "InterSystems". ![configuração da autenticação de JWT](/sites/default/files/inline/images/webauthentication_issuer.png) ## Hora de testar Está tudo configurado e implementado, então vamos testar! Carregue sua ferramenta favorita para criar solicitações de API (vou usar uma extensão do Firefox chamada RESTer nos exemplos) e vamos começar a construir solicitações da API REST. Primeiro, vamos tentar listar os personagens existentes. ![lista sem token](/sites/default/files/inline/images/list_no_token.png) Recebemos um erro 401 Unauthorized. Isso ocorreu porque não fizemos login. Você talvez esteja pensando: Elliott, não implementamos funcionalidade de login nessa API REST. Não tem problema, porque o InterSystems IRIS cuida disso para nós quando usamos a autenticação de JWT. Ele oferece quatro endpoints que podemos usar para gerenciar nossa sessão. São eles: `/login`, `/logout` `/revoke` e `/refresh`. Eles podem ser personalizados no `disp.cls` conforme o exemplo abaixo: ```objectscript Parameter TokenLoginEndpoint = "mylogin"; Parameter TokenLogoutEndpoint = "mylogout"; Parameter TokenRevokeEndpoint = "myrevoke"; Parameter TokenRefreshEndpoint = "myrefresh"; ``` Vamos acessar o endpoint `/login` agora. ![fazendo login](/sites/default/files/inline/images/logging_in.png) O corpo dessa solicitação não é exibido por medidas de segurança, mas ele segue esta estrutura JSON: ```json {"user":"{YOURUSER}", "password":"{YOURPASSWORD}"} ``` Em troca da senha, recebemos um JWT! Esse é o valor de "access_token". Vamos copiar isso e usar nas nossas solicitações futuras para não precisar sempre transmitir a senha. Agora que temos um JWT para autenticação, vamos tentar criar um personagem! Formatamos nossa solicitação conforme abaixo: ![criação de personagem](/sites/default/files/inline/images/creating_character.png) Usando o bearer token como cabeçalho no formato de " Authorization: Bearer {JWTValue}". Em uma solicitação curl, você pode escrever isso com `-H "Authorization: Bearer {JWTValue}"` Vamos criar outro personagem por diversão, usando os valores que você quiser. Agora, vamos tentar listar todos os personagens que existem no banco de dados. ![listando os personagens](/sites/default/files/inline/images/list_characters.png) Obtemos os dois personagens que criamos! E se só quisermos acessar um? Implementamos isso com o endpoint `/characters/{charName}`. Podemos formatar essa solicitação desta forma: ![buscando personagem específico](/sites/default/files/inline/images/retrieve_character.png) Essa é a nossa API REST em ação, pessoal! Quando concluir sua sessão, é possível sair no endpoint `/logout` usando seu JWT. Isso revogará e bloqueará o JWT para que não seja possível usá-lo novamente. # Conclusão O InterSystems IRIS a partir da versão 2022.2 inclui a capacidade de autenticar uma API REST usando JSON web tokens (JWTs). Esse recurso aprimora a segurança ao limitar o uso da senha e definir uma data de expiração para o acesso à API. Espero que este manual sobre como gerar uma API REST e protegê-la com JWTs pelo IRIS tenha sido útil. Me avise se foi! Agradeço qualquer feedback.
Anúncio
Angelo Bruno Braga · Out. 28, 2020

Pesquisa sobre a versão de prévia do IRIS Data Platform 2020.4 e IRIS for Health 2020.4 - precisamos de seus comentários !

Olá desenvolvedores, A InterSystems está propondo um novo e fácil desafio como parte do Global Summit 2020. Como vocês já sabem, as plataformas de dados IRIS Data Platform 2020.4 e IRIS for Health 2020.4 estão no momento em sua versão de prévia. Nós estamos buscando melhorar a experiência dos desenvolvedores que pretendem migrar dos lançamentos anteriores em contêineres de 2020 destes produtos para a versão prévia 2020.4Nós os convidamos para responder a pesquisa e ganhar 7000 pontos no Global Masters🎁 2 passos para participar do desafio:1️⃣ Atualize qualquer contêiner 2020.x para IRIS Data Platform 2020.4, ou IRIS for Health 2020.4 versão prévia.2️⃣ Após a atualização, nos forneça as seguintes informações: Seu nível de conhecimento em contêineres Docker? (iniciante, intermediário ou avançado) A plataforma que você realizou a atualização. Sua experiência - Como foi, o que você gostou, o que poderia ser melhor. Os arquivos docker-compose.yml (ou Dockerfile) e messages.log da atualização. Quais problemas (se ocorrerem) que você encontrou. Você já utilizou uma nova funcionalidade na versão 2020.4? Em caso positivo, de que você gostou ? ➫ Por favor envie estas informações para Olga Zavrazhnova em Olga.Zavrazhnova_CTR@intersystems.com até 6 de novembro de 2020🚩. Obrigado desenvolvedores por ajudar-nos a tornar as plataformas IRIS e IRIS for Health, cada vez mais a melhor escolha para desenvolvimento de aplicações de ponta. Você pode resgatar seus pontos por qualquer prêmio disponível no Global Masters. Não é um membro ainda ? Leia aqui sobre o Global Masters e junte-se ao programa ainda hoje!
Artigo
Larissa Prussak · Out. 26, 2021

Está no seu código - como a manutenção do software pode impactar positivamente a sua organização

As tecnologias da InterSystems são conhecidas por seus bancos de dados de alto desempenho, que suportam os sistemas e operações de muitas organizações. No entanto, um ingrediente chave para esse sucesso é a qualidade e a facilidade de manutenção de seu código. A qualidade do código pode afetar tudo, desde a velocidade e facilidade de corrigir bugs e fazer melhorias, até o desempenho geral de sua organização e sua capacidade de chegar à frente no mercado. Ao garantir que seu código seja sustentável, você pode reduzir aproximadamente 75% dos custos do ciclo de vida do sistema *. É por isso que, na George James Software, as soluções que construímos são sempre diretas e escritas em código de alta qualidade - porque sabemos que essa base sólida pode impactar positivamente o resto da sua organização. Com um sistema que pode ser mantido, você pode reduzir a manutenção geral, pois qualquer problema que ocorra é significativamente mais rápido de identificar e corrigir. Isso significa que você está livre para alocar tempo e orçamento para melhorias, permitindo que você obtenha o máximo valor de suas aplicações e, em última análise, dê um melhor suporte à sua organização. Fique atento às nossas próximas postagens sobre como é um sistema sustentável e as ferramentas que podem ajudá-lo a manter seu código sustentável, a fim de ajudá-lo a reduzir esses custos de manutenção. *Ref: C. Chen, R. Alfayez, K. Srisopha, B. Boehm and L. Shi, "Why Is It Important to Measure Maintainability and What Are the Best Ways to Do It?," 2017 IEEE/ACM 39th International Conference on Software Engineering Companion (ICSE-C), 2017, pp. 377-378, doi: 10.1109/ICSE-C.2017.75.
Anúncio
Danusa Calixto · Ago. 19, 2022

Lançamento da Comunidade de Desenvolvedores, Julho 2022

Bem-vindos ao Lançamento de Julho 22 da Comunidade ! Fizemos recentemente algumas mudanças interessantes para sua experiencia na Comunidade da InterSystems: 📌 notificações como nas redes sociais 📌 configuração de inscrição aprimorada 📌 nova página "Sobre nós" 📌 página "Membros" mais amigável Vamos dar uma olhada em todas essas melhorias! NOTIFICAÇÕES A partir de agora, você poderá ver que há novas notificações no canto superior direito da página perto da sua foto. Basta clicar no sino e você verá um menu suspenso com todas as suas notificações recentes, a partir do qual você pode acessar a página com detalhes: Ao clicar no link "Ver todas", você será redirecionado para uma página onde poderá ver todas as suas notificações A partir desta página, você pode "Marcar tudo como lido" ou seguir o link para a página que gerou a notificação. E gerencie suas configurações de assinatura. INSCRIÇÕES Alteramos o design da página Inscrições. Espero que seja mais fácil de usar agora Você pode escolher quais notificações receberá da Comunidade de desenvolvedores, seja por e-mail ou pelo site. Você pode encontrá-lo na seção "Inscrições" da sua conta. SOBRE NÓS Já comentamos que criamos uma página nova "Sobre nós". Mas é tão fofa quanto um botão, então vale a pena mencionar mais uma vez 🥰 Você pode encontrá-la no menu superior, na seção Sobre --> Sobre nós: MEMBROS E outra página que ajustamos para sua conveniência é a página "Membros". Adicionamos uma nova coluna "Última atividade". E, claro, não esqueça que você pode classificar por qualquer coluna apenas clicando em seu nome. Por enquanto é isso! Espero que você aprove todas as nossas melhorias. Até a próxima com mais novidades!
Artigo
Larissa Prussak · Out. 28, 2021

Desenvolvimento de aplicativos da web de última geração com back-end Node.js (QEWD-Up) + front-end NuxtJS / Vue.js

Eu escrevi um tutorial passo a passo no repositório qewd-howtos sobre como você pode escrever aplicativos da web Node.js de última geração de várias páginas usando o QEWD-Up WebSocket/REST api back-end integrado com um framework da web como NuxtJS e Vue.js. Em particular com o mais recente framework NuxtJS/Vue.js , escrever aplicativos da web torna-se divertido novamente, permitindo que você escreva seus aplicativos de forma muito eficiente, ocultando todo o código template de você. O tutorial deve ser muito fácil de fazer em sua máquina de desenvolvimento e consiste em duas partes: Instruções para criar uma configuração básica QEWD-Up setup Node.js com WebSocket e REST endpoints usando um banco de dados InterSystems IRIS/Caché. Instruções para criar um app demo front-end NuxtJS 3 (para a última versão beta do Nuxt 3) ou - alternativamente - instruções para um app demo front-end NuxtJS 2 (a versão de produção atual do Nuxt 2.x) Você pode simplesmente clonar as configurações de demonstração do GitHub e executá-las em sua máquina de desenvolvimento usando Visual Studio Code onde sua instância de desenvolvimento IRIS / Caché está rodando. A demonstração é mantida o mais fácil possível, mas contém todas as etapas principais de que você precisa para começar a escrever aplicativos da vida real..Algumas capturas de tela: O front-end NuxtJS 3: O back-end do NuxtJS 3 em execução no Node.js: O back-end QEWD-Up rodando em Node.js + IRIS / Caché: Se você tiver comentários ou encontrar problemas, crie um problema no repositório GitHub relevante! Boa codificação e poste seus comentários abaixo do que você achou! Ward
Anúncio
Angelo Bruno Braga · Ago. 18, 2022

[Vídeo] Machine Learning 201 - Redes Neurais e Reconhecimento de Imagens

Olá Desenvolvedores, Não percam esta sessão hands-on apresentada pelo @Donald.Woodlock, Vice Presidente Soluções para Saúde na InterSystems: ⏯ Machine Learning 201 - Redes Neurais e Reconhecimento de Imagens Veja como treinar um modelo de Machine Learning para realizar Classificação de Imagens. Um dos problemas clássicos originais que o processo de machine learning tentava resolver por décadas era como distinguir um gato de um cachorro em fotos – algo que mesmo uma criança pequena consegue fazer mas era muito difícil para computadores. Depois de muitas décadas o problema foi resolvido pavimentando o caminho para o ML para agora podermos utilizá-lo na leitura de imagens de radiologia, identificação de rostos, identificação de tipos de objetos para carros autônomos, identificar desmatamento a partir de imagens de satélites e vários outros tipos de situações. Aprenderemos como isso é feito em uma sessão de hands-on. Em particular, trabalharemos sobre um problema baseado na identificação de dígitos escritos a mão. Construiremos, de forma sucessiva, modelos cada vez mais sofisticados para melhorar a acurácia desta tarefa utilizando Regressão Logística, We will build successively more sophisticated models to improve the accuracy of this task including Logistic Regression, uma Rede Neural Direta e uma Rede Neural Convolucional. Esta é uma sessão de 2 horas que foi gravada ao vivo com poucos participantes. Não é necessária experiência em ML ou python mas se sentir a vontade em codificar pode ajudar. Você precisará de uma conta do Kaggle (http://www.kaggle.com) para acompanhar o vídeo. Esta conta precisa ser 'verificada por telefone' para permitir oi uso das funcionalidades GPU do Kaggle, necessárias para um dos exercícios. Os links que você precisará são: https://www.kaggle.com/competitions/digit-recognizerOs Notebooks estão neste link: http://www.donwoodlock.com/ml201/25Jul2022/index.html Aproveitem e, fiquem ligados!
Discussão
Heloisa Paiva · Maio 2

Vamos discutir a nova IU para Interoperabilidade e editor de Transformações de Dados

Já faz um tempo desde que a nova interface de usuário para Produções e DTL foi publicada como uma prévia e eu gostaria de saber suas opiniões sobre ela. AVISO: Esta é uma opinião pessoal, totalmente pessoal e não relacionada com a InterSystems Corporation. Vou começar com a tela de Interoperabilidade: Tela de Produção: O estilo é sóbrio e sem adornos, seguindo a linha do design de serviços de nuvem, eu gosto. Mas, sempre um mas... ou talvez dois: Na minha opinião, há informação demais, o menu esquerdo é supérfluo. É verdade que você pode recolhê-lo, mas não quero fazer isso cada vez que uso a tela. Não preciso ver o tempo todo todas as produções no meu NAMESPACE, os Itens de Produção, Conjuntos de Regras e Transformações de Dados. Sinto que os designers sofreram um "horror vacui" Sobre esses menus, parece que as opções estão muito próximas: E exibir os editores de Regras e Transformações de Dados na mesma tela para telas pequenas como a de um laptop é um pesadelo de rolagem: Uma janela pop-up com os editores seria mais "limpa" para o usuário comum. Um ponto positivo é que podemos selecionar como queremos abrir os editores. Mas talvez tenhamos opções demais. Editor de DTL: Bem, eu gosto, o design é simples e claro, talvez, como na tela de Produção, as linhas estejam muito próximas e perdemos o arrastar e soltar para ligar os campos. Conclusão: O design foi modernizado e parece agradável, mas na minha opinião como um ex-desenvolvedor web "menos é mais". Eu gostaria de trabalhar com telas mais simples, com um comportamento bem definido, não preciso acessar todas as funcionalidades de interoperabilidade na mesma tela. Minha modesta opinião, precisamos equilibrar funcionalidades e uma interface de usuário amigável e moderna, o novo design parece ir nessa direção. Obrigado a toda a equipe envolvida no desenvolvimento! [OBS.: o texto reflete a opinião pessoal do AUTOR, não do TRADUTOR.]
Artigo
Henrique Dias · Out. 26, 2020

Painel IRIS History Monitor

Fala pessoal! Quero dividir com vocês um projeto pessoal, que iniciou como um simples pedido no meu trabalho: É possível saber quantas licenças Caché estamos utilizando? Lendo outros artigos aqui na comunidade, eu encontrei este excelente artigo de David Loveluck APM - Utilizando Caché History Monitorhttps://community.intersystems.com/post/apm-using-cach%C3%A9-history-monitor Então, utilizando o artigo de David como base, eu comecei a utilizar o Caché History Monitor e a exibir todas as informações.Quando me deparei com o seguinte dilema: Qual a melhor tecnologia de frontend que eu posso usar? Minha decisão acabou sendo pelo, bom e velho CSP, assim o cliente para qual estou trabalhando poderia se dar conta de que Caché é muito mais que MUMPS/Aplicações de Terminal.E depois de criar as páginas para exibir os históricos de licenças, crescimento de dataset e sessões CSP, eu resolvi me arriscar e imaginar um novo layout para System Dashboard e para página de Processos.Tudo funcionou perfeitamente com minha instância Caché. Entretando, como isso ficaria no IRIS? Seguindo outro ótimo artigo de Evgeny Shvarov Using Docker with your InterSystems IRIS development repositoryhttps://community.intersystems.com/post/using-docker-your-intersystems-iris-development-repository Passei a utilizar Docker no meu projeto e disponibilizei o código no Github, então agora, todos vocês podem usufruir do meu projeto seguindo alguns passos. Como executar Para iniciar a testar o código do repositório, basta você fazer o seguinte: 1. Faça o clone/git pull do repositório em algum diretório local$ git clone https://github.com/diashenrique/iris-history-monitor.git 2. Abra o terminal no diretório escolhido e execute:$ docker-compose build 3. Execute o container IRIS do seu projeto com o comando:$ docker-compose up -d Como testar Abra seu browser favorito e vá para: Ex.: http://localhost:52773/csp/irismonitor/dashboard.csp O usuário _SYSTEM pode executar o dashboard e outras funcionalidades. System Dashboard System Dashboard contém os seguintes itens: Licença Tempo Ativo Erros de Aplicação Processos Caché Sessões CSP Tabela de Lock Espaço do Journal Status do Journal ECP AppServer ECP DataServer Write Daemon Eficiência Caché Alertas Sérios O gráfico de linha, plota um ponto no gráfico a cada 5 segundos System Menu System Processes Processes Filters Use filtros diferentes para atingir o resultado que você precisa. Você também pode selecionar múltiplos filtros, pressione Shift + clicando no cabeçalho da coluna. E até exportar o datagrid para Excel! History Monitor O monitor de dados históricos para Sessões CSP e Licenciamento exibem informações divididas em 3 seções: A cada 5 minutos Diariamente De hora em hora Crescimento de dataset somente exibe as informações diárias. As páginas de histórico compartilham as seguintes funcionalidades abaixo: Seletor de intervalo de datas O valor padrão é "Últimos 7 dias." Gráfico / Data Table No canto superior direito de cada seção existem 2 botões (Gráfico/Data Table) O Data Table exibe a informação que alimenta o gráfico, e você ainda pode fazer download disso no formato Excel. O arquivo excel exibe o mesmo formato, conteúdo e o agrupamento definido na página CSP. Zoom Todos os gráficos tem a opção de Zoom, para que a informação desejada, possa ser visualizada com maiores detalhes. Média e Máximo Nas seções Diariamente e De hora em hora, os gráficos exibem as informações Média/Máxima. Média Máxima Aproveitem!
Artigo
Yuri Marx · Nov. 30, 2021

Aproveitando o banco de dados de auditoria

A InterSystems IRIS possui um ótimo sistema de auditoria. Ele é responsável por auditar eventos do sistema, mas você pode usá-lo para auditar seus aplicativos (ótimo recurso). O sistema de auditoria é baseado no conceito de evento. Os eventos podem ocorrer com o IRIS ou em um aplicativo. Portanto, temos dois tipos de eventos para o sistema de auditoria: 1. Eventos do sistema: eventos ocorridos nos componentes IRIS da InterSystems (banco de dados, interoperabilidade, análise e core); 2. Eventos de usuário: evento ocorrido em aplicativos de usuário / empresa (seus), com os tipos de eventos de usuário criados (mapeados) por você no Portal de gerenciamento> Sistema> Gerenciamento de segurança> Eventos de usuário. Para ver os eventos registrados pelos componentes do IRIS, vá para System Administration > Security > Auditing > Configure System Events. Os eventos do sistema começam com o caractere % + módulo IRIS (por exemplo,% Ensemble /% Production / StartStop,% System /% Login / Login). Se você clicar em Alterar status, poderá ativar ou desativar o tipo de evento do sistema. Para ver o evento registrado por aplicativos de negócios (seus aplicativos), vá para System Administration > Security > Configure User Events. Você precisa modelar/registrar os tipos de eventos de seu aplicativo. O caractere % no início do nome da auditoria é reservado para os eventos de auditoria do sistema. Todos os registros de auditoria são armazenados na tabela Security.Events Persitent Class / SQL. O nome do evento de auditoria possui 3 campos: 1. Fonte: fonte do evento (nome do aplicativo ou módulo); 2. Tipo: tipo de evento (tipo de dado ou tipo de característica); 3. Evento: nome do evento (nome da empresa, meio / descrição do evento). Para consultar ou ver um relatório com registros de auditoria, vá para System Administration > Security > Auditing > View Audit Database. Veja: No artigo, vou mostrar a você como fazer eventos de auditoria de usuário dentro do seu aplicativo, usando um aplicativo REST como exemplo. O aplicativo de amostra para ver os eventos de auditoria do usuário é: https://openexchange.intersystems.com/package/Audit-Mediator. Siga estas etapas para o aplicativo de auditoria de amostra: 1. Clone o projeto $ git clone git@github.com: yurimarx/iris-api-audit-mediator.git 2. Construa e faça o build o código-fonte do projeto $ docker-compose up -d --build 3. Vá para Administration > Security > Auditing > Configure User Events4. Pressione o botão Create New Event5. Defina o Event Source: RESTAPI6. Defina o Event Type: solicitação7. Defina o Event Name: RESTAPI8. Pressione Save9. Preencha seu aplicativo Person com dados, chame o endpoint http://localhost:52773/crud/persons/populate10. Agora, ligue para http://localhost:52773/crud/persons/all ou qualquer outro endpoint11. Esta solicitação será registrada no banco de dados de auditoria12. Agora vá para System Administration > Security > Auditing > View Audit Database13. Procure as linhas com Event Source RESTAPI e Event Type Request e clique em Detail para ver os detalhes do registro de auditoria. Ver: 14. Clique em Details e veja: O código fonte responsável por registrar a auditoria é: SET tSC = $$$OK TRY { Set tSC = $SYSTEM.Security.Audit("RESTAPI","Request", "RESTAPI","URL: "_pUrl_". Method: "_pMethod_".","REST API request") } CATCH ex { SET tSC = ex.AsStatus() } Então, é muito fácil auditar, você deve usar a classe de método $SYSTEM.Security.Audit(). Veja mais detalhes em: https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=AAUDIT.