Artigo Henrique Dias · Jun. 10, 2023 9m read

20 anos. 

Agora em 2023 eu completo 20 anos trabalhando com tecnologia, desenvolvendo sistemas, implementando, criando novas soluções e posso afirmar que trabalhar com tecnologia InterSystems fez e faz parte da minha vida. Afinal, foram 18 anos trabalhando todos os dias com essa tecnologia.

Comecei a trabalhar com o Caché 4, lá atrás em 2003, vivenciei as mudanças para o Caché 5, Caché e Ensemble 2008, 2010, 2012, 2014, 2017, 2018 e até finalmente chegarmos no InterSystems IRIS. 

4
0 205
Anúncio Henrique Dias · Fev. 12, 2023

Fala galera!

Prepare-se para revolucionar seu processo de teste com o iris-tripleSlash, a solução matadora para testes unitários.

Diga adeus aos testes unitários chatos e repetitivos e diga "Olá seu lindo" para os testes eficientes e sem muito esforço.

Com o iris-tripleSlash, você pode gerar casos de teste de unidade com facilidade usando o poder da documentação.

0
0 50
Artigo Henrique Dias · Nov. 29, 2022 3m read

Neste ano de 2022, ano completei 19 anos trabalhando na área de tecnologia e nessa jornada pude participar de diversos projetos em inúmeras frentes, no entanto a área da saúde é uma das áreas que mais me atrai. 
Então, sempre que temos a chance de criar algo focado em saúde, utilizando o protocolo FHIR é algo deveras animador.

Mas, um time composto de 3 caras com uma visão de tecnologia não seria o bastante para entregar algo realmente útil e para um tema tão importante quanto saúde feminina, trouxemos para equipe alguém que realmente entende do assunto. 

0
0 98
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
Artigo Henrique Dias · jan 13, 2022 5m read

Fala pessoal, tudo bem?

Espero que todos estejam bem, saudáveis e que tenham um excelente 2022!

Ao longo dos anos, eu trabalhei nos mais diferentes projetos e acabei me deparando com dataset super interessantes.

Mas, na maioria das vezes, os datasets utilizados para o trabalhar eram datasets dos clientes. Quando eu comecei a participar das competições nos últimos anos, eu comecei a vasculhar na web por datasets que eu possa chamar de meu 😄

Eu acabei coletando alguns dados, mas eu estava pensando, "Esses datasets são o suficiente para ajudar as outras pessoas?"

Então, trocando ideias com o @José Pereira para essa competição, nós decidimos por uma abordagem utilizando uma perspectiva diferente.

Nós pensamos em oferecer uma variedade de datasets de qualquer espécie de 2 fonte de dados famosas. Dessa forma, nós podemos empoderar vocês para encontrarem e instalarem o dataset desejado de uma forma rápido, fácil e indolor.

Socrata

Socrata Open Data API permite que você de forma programática possa acessar uma variedade de dados abertos de governos, organizações sem fins lucrativos e ONGs de todo o mundo.

Para esse release inicial, nós estamos usando as APIs Socrata para pesquisar e fazer download de um dataset específico.

Pode utilizar a ferramenta para API da sua preferência Postman, Hoppscotch

GET> https://api.us.socrata.com/api/catalog/v1?only=dataset&q=healthcare

This endpoint will return all healthcare related datasets, like the image below: Socrata Return Dataset

Agora, basta pegar o ID. Neste caso o ID é: "n9tp-i3k3"

Vamos para o terminal

IRISAPP>set api = ##class(dc.dataset.importer.service.socrata.SocrataApi).%New()

IRISAPP>do api.InstallDataset({"datasetId": "n9tp-i3k3", "verbose":true})

Compilation started on 01/07/2022 01:01:28 with qualifiers 'cuk'
Compiling class dc.dataset.imported.DsCommunityHealthcareCenters
Compiling table dc_dataset_imported.DsCommunityHealthcareCenters
Compiling routine dc.dataset.imported.DsCommunityHealthcareCenters.1
Compilation finished successfully in 0.108s.

Class name: dc.dataset.imported.DsCommunityHealthcareCenters
Header: Name VARCHAR(250),Description VARCHAR(250),Location VARCHAR(250),Phone_Number VARCHAR(250),geom VARCHAR(250)
Records imported: 26

Depois do comando acima, você pode conferir o seu dataset prontinho para uso!

Socrata Return Dataset

Kaggle

Kaggle, uma subsidiária do Google LLC, é uma comunidade online de cientistas de dados e profissionais de aprendizado de máquina. O Kaggle permite que os usuários encontrem e publiquem conjuntos de dados, explorem e construam modelos em um ambiente de ciência de dados baseado na Web, trabalhem com outros cientistas de dados e engenheiros de aprendizado de máquina e participem de competições para resolver desafios de ciência de dados.

Em junho de 2017, Kaggle anunciou que ultrapassou 1 milhão de usuários registrados, ou Kagglers, e em 2021 tem mais de 8 milhões de usuários registrados. A comunidade abrange 194 países. É uma comunidade diversificada, desde aqueles que estão começando até muitos dos pesquisadores mais conhecidos do mundo.

Comunidade pequenininha hein!? 😂

Para usar os conjuntos de dados do Kaggle, você precisa se registrar no site. Depois disso, você precisa criar um token para usar a API do Kaggle.

Kaggle Token Creation

Agora, da mesma forma que fizemos com o Socrata, você pode utilizar a API para fazer a pesquisa e download do dataset.

GET> https://www.kaggle.com/api/v1/datasets/list?search=appointments

Kaggle Return Dataset

No Kaggle, ao invés de id utilizaremos o ref. Nesse exemplo o valor de ref é: "joniarroba/noshowappointments"

Os parâmetros abaixo "your-username", e "your-password" são parâmetros que o Kaggle fornece quando você cria o token para API.

IRISAPP>Set crendtials = ##class(dc.dataset.importer.service.CredentialsService).%New()

IRISAPP>Do crendtials.SaveCredentials("kaggle", "<your-username>", "<your-password>")

IRISAPP>Set api = ##class(dc.dataset.importer.service.kaggle.KaggleApi).%New()

IRISAPP>Do api.InstallDataset({"datasetId":"joniarroba/noshowappointments", "credentials":"kaggle", "verbose":true})

Class name: dc.dataset.imported.DsNoshowappointments
Header: PatientId INTEGER,AppointmentID INTEGER,Gender VARCHAR(250),ScheduledDay DATE,AppointmentDay DATE,Age INTEGER,Neighbourhood VARCHAR(250),Scholarship INTEGER,Hipertension INTEGER,Diabetes INTEGER,Alcoholism INTEGER,Handcap INTEGER,SMS_received INTEGER,No-show VARCHAR(250)
Records imported: 259

Pronto! Mais um dataset prontinho para uso

Kaggle Select

Graphic User Interface

Para facilitar as coisas, estamos oferecendo uma interface gráfica para instalar o dataset. Mas isso é algo que quero falar em nosso próximo artigo. Enquanto isso, você pode conferir uma prévia abaixo enquanto estamos dando aquele talento, antes do lançamento oficial:

Socrata Dataset list

Socrata Return Dataset

Video Demo

Se você está se perguntando como é fazer o download de um dataset grande, da uma olhada nesse video mostrando como é.... Agora... se +400.000 registros não forem o suficiente, que tal 1 MILHÃO DE REGISTROS?! Assista!

<iframe width="560" height="315" src="https://www.youtube.com/embed/0T8wXRsaJso" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

Votação

Se você curtiu o app, por favor vote em iris-kaggle-socrata-generator!

https://openexchange.intersystems.com/contest/current

0
0 298
Artigo Henrique Dias · Dez. 4, 2021 6m read

Opa pessoal, tudo bem?

E se você pudesse verificar se sua aplicação REST está suscetível a algum tipo de vulnerabilidade? E se você pudesse verificar se existe algum ataque conhecido que afete sua aplicação?

São com essas questões em mente, que trouxemos nossa aplicação de exemplo usando a ferramenta de testes ZAP. Uma forma de fornecer de maneira rápida, prática e acessível ferramentas para que os desenvolvedores validem questões de segurança com praticidade e de uma maneira acessível.

Por que é importante validar a segurança da sua aplicação?

Cada vez mais, brechas de segurança tem sido exploradas por mais e mais pessoas mal intencionadas. E como desenvolvedores, oferecer segurança para as pessoas que fazem uso de nossa aplicação, faz parte de nosso trabalho.

Como fazer a validação?

Para realizar a validação é necessário seguir os passos abaixo para que sua aplicação REST, tire proveito das funcionalidades e testes de segurança que oferecemos com ZAP. Veja mais abaixo.

Porque optamos pela OWASP?

Optamos por utilizar, OWASP® Foundation, testes criados por especialistas que mantém um repositório de testes de vulnerabilidade constantemente atualizado.

Mas quem é OWASP® Foundation?

OWASP

Open Web Application Security Project® (OWASP) é uma fundação sem fins lucrativos que trabalha para melhorar a segurança dos softwares. Por meio de projetos de software de código aberto liderados pela comunidade, centenas de divisões locais em todo o mundo, dezenas de milhares de membros e principais conferências educacionais e de treinamento, a Fundação OWASP é a fonte para desenvolvedores e tecnólogos protegerem a web.

ZED Para o nosso projeto utilizamos OWASP® Zed Attack Proxy (ZAP), O scanner de aplicativos da web mais usado do mundo. Gratuito e de código aberto. Mantido ativamente por uma equipe internacional dedicada de voluntários.

Mas convenhamos, perderam a chance de nomear o projeto com o nome de quem entende realmente de ataques e invasões: Zod, General Zod!!!

ZOD

ZOD2

Como fazer uso do ZAP?

Prerequisites

Tenha certeza de possuir git e Docker desktop instalados.

Installation for development with Docker

Faça o Clone/git pull do repositório em um diretório local:

$ git clone https://github.com/jrpereirajr/zap-api-scan-sample.git
$ cd zap-api-scan-sample

Abra o terminal neste diretório e execute:

$ docker-compose up -d --build

Nota: como nesta versão, uma transferência de arquivo é usada para permitir que os contêineres se comuniquem entre si, é necessário conceder alguns privilégios para escrever no volume compartilhado:

$ chmod 777 -R zap-pool

Verificando suas APIs

Este exemplo permite que você verifique cada API REST ou todos eles de uma vez.

Por exemplo, se você gostaria de verificar a API * / crud *, execute este comando:

Do ##class(dc.sample.zap.filepool.ZapOpenApiScanService).%New().Print("/crud")

Se você gostaria de verificar todas as APIs REST em um namespace - USER, por exemplo, execute este comando:

Do ##class(dc.sample.zap.filepool.ZapOpenApiScanService).%New().PrintAllWebApps("USER")

Se você omitir o namespace, o namespace atual será utilizado.

Resultados do scanneamento

Este projeto usa três recursos do ZAP para fornecer relatórios: texto simples, HTML e Markdown.

O texto simples mostra apenas quais testes foram aprovados e quais falharam, bem como um resumo no final. Um código para detalhes sobre a vulnerabilidade OWASP também é apresentado para cada teste.

-------------------------------------------
ZAP API Scan for: /crud
-------------------------------------------
2021-11-29 03:44:16,920 Could not find custom hooks file at /home/zap/.zap_hooks.py
2021-11-29 03:44:32,869 Number of Imported URLs: 8
Total of 19 URLs
PASS: Directory Browsing [0]
PASS: Vulnerable JS Library [10003]
PASS: Cookie No HttpOnly Flag [10010]
...
PASS: Loosely Scoped Cookie [90033]
WARN-NEW: Content Security Policy (CSP) Header Not Set [10038] x 6
       http://host.docker.internal:52773/crud/persons/all (401 Unauthorized)
       http://host.docker.internal:52773/crud/ (401 Unauthorized)
       http://host.docker.internal:52773/crud/_spec (401 Unauthorized)
       http://host.docker.internal:52773/crud/persons/id (401 Unauthorized)
       http://host.docker.internal:52773/crud/persons/id (401 Unauthorized)
...
FAIL-NEW: 0     FAIL-INPROG: 0  WARN-NEW: 3     WARN-INPROG: 0  INFO: 0 IGNORE: 0       PASS: 74
-------------------------------------------
Markdown: /irisdev/app/zap-pool/report-md/6607713456438727.md
HTML: /irisdev/app/zap-pool/report-html/6607713456438727.html

Na parte inferior do relatório de texto, o caminho para os relatórios HTML e Markdown é exibido. Esses relatórios são semelhantes e possuem muito mais detalhes, como descrição da vulnerabilidade e uma ajuda rápida para corrigi-los, por exemplo:


Content Security Policy (CSP) Header Not Set

Medium (High)

Description

Content Security Policy (CSP) is an added layer of security that helps to detect and mitigate certain types of attacks, including Cross Site Scripting (XSS) and data injection attacks. These attacks are used for everything from data theft to site defacement or distribution of malware. CSP provides a set of standard HTTP headers that allow website owners to declare approved sources of content that browsers should be allowed to load on that page — covered types are JavaScript, CSS, HTML frames, fonts, images and embeddable objects such as Java applets, ActiveX, audio and video files.

...

Instances: 6

Solution

Ensure that your web server, application server, load balancer, etc. is configured to set the Content-Security-Policy header, to achieve optimal browser support: "Content-Security-Policy" for Chrome 25+, Firefox 23+ and Safari 7+, "X-Content-Security-Policy" for Firefox 4.0+ and Internet Explorer 10+, and "X-WebKit-CSP" for Chrome 14+ and Safari 6+.


Como isso funciona?

O ZAP possui várias maneiras de realizar testes de segurança, como scripts ou API. Este projeto usou a execução de scripts executados em uma imagem docker oficial do ZAP.

Portanto, para permitir que o contêiner IRIS execute scripts no contêiner ZAP, um volume compartilhado foi configurado no arquivo docker-compose.yaml. Neste volume, o IRIS grava scripts que são detectados e executados pelo contêiner ZAP. Da mesma forma, o contêiner ZAP grava a saída no mesmo volume compartilhado, para que o contêiner IRIS possa lê-los.

Como uma melhoria neste projeto, estou planejando usar a API ZAP no lugar do compartilhamento de arquivos. Também está prevista uma API para execução de testes e apresentação de relatórios diretamente no navegador.

Ideias para uso do ZAP

Podemos utilizar conforme demonstrado no exemplo acima, no entanto, uma ideia que tivemos foi da possibilidade de ter isso integrado dentro do portal de administração.

Onde você poderia selecionar qual aplicação REST passaria pelo teste de vulnerabilidades e segurança.

Ou simplesmente, criar uma tarefa agenda para ser executada de tempos em tempos.

O relatório gerado é simples, direto, objetivo e bem ilustrativo. Também há versão mais detalhada, contendo além de uma descrição das vulnerabilidades encontradas, dicas de como resolver o problema de segurança.

Encerramento

Mais uma vez, gostaríamos de agradecer todo o apoio da comunidade em cada uma das aplicações que criamos.

Se achou interessante nossa aplicação, se pudemos de alguma forma contribuir com algum insight, considere votar em nossa aplicação.

Se você curtiu o aplicativo, curte o que estamos fazendo na comunidade, por favor vote em zap-api-scan-sample e nos ajude nessa jornada! https://openexchange.intersystems.com/contest/current

0
0 469
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 Henrique Dias · Abr. 25, 2021 2m read

Uma coisa interessante sobre informação é que sempre podemos descobrir algo novo.

Partindo com essa ideia em mente, nós criamos uma nova página, para exibir um pouco mais sobre o universo ZPM!

Para publicar uma aplicação no ZPM, o arquivo module.xml se faz necessário. Dentro desse arquivo, conseguimos extrair algumas informações que se mostraram bem úteis.

Utilizando o endpoint https://pm.community.intersystems.com/packages/{package}/{version}/manifest, nós extraímos 2 coisas: keywords/tags e dependências

Keywords/Tags

Nós conseguimos extrair as keywords para cada aplicação publicada no Package Manager (ZPM), as separamos e totalizamos para criar o gráfico de Word Cloud. Word Cloud

Dependências

E usando a outra tag <Dependencies>, nós pegamos todas as dependências para cada aplicação e criamos um diagrama Sankey para ilustrar como essas aplicações interagem entre si. Sankey Diagram

Demo

https://zpm-explorer.contest.community.intersystems.com/csp/irisapp/explorer.html

Se você curtiu o aplicativo, curte o que estamos fazendo na comunidade, por favor vote em zpm-explorer e nos ajude nessa jornada!

https://openexchange.intersystems.com/contest/current

0
0 134
Artigo Henrique Dias · Abr. 21, 2021 2m read

Fala galera,

@José Pereira e eu queremos falar sobre nosso novo projeto, ZPM Explorer, é uma interface gráfica para explorar e descobrir as grandes aplicações que estão disponíveis no InterSystems Package Manager.

A ideia

A ideia do ZPM Explorer é deixar a vida de todos mais fácil quando procurarem por aplicações que são oferecidas pelo ZPM. A cada dia mais e mais aplicações se juntam ao universo ZPM, então, porque não ajudar desenvolvedores e não desenvolvedores a tirarem proveito deste incrível universo?

A aplicação

ZPM é uma aplicação simples e poderosa, para isso tentamos traduzir a simplicidade em algo simples de usar e poderosa na forma de pesquisar, facilitando a vida das pessoas na hora de encontrar a solução ideal com um simples clique.

A página inicial do ZPM Explorer é uma tabela com os dados fornecidos pelo endpoint https://pm.community.intersystems.com/packages/-/all

Com os seguintes campos:

  • Name: nome da aplicação
  • Description: descrição do que a aplicação faz
  • Repository: link para o repositório Github
  • Version: versão atual da aplicação hospedada no Package Manager

Instalando novas aplicações

O uso da aplicação é simples, rápido e objetivo.

  1. Pesquisa a aplicação desejada
  2. Seleciona a aplicação
  3. Clique no botão "Install"
  4. Confirme se desejar instalar
  5. Pronto
  6. Agora é só correr para o abraço e tirar proveito da nova solução instalada

Gerenciando pacotes instalados

ZPM Explorer também oferece uma página para você fazer o gerenciamento das aplicações existentes, instaladas através do ZPM. Nessa página você pode atualizar, desinstalar e até mesmo usar um "wizard" para faciitar sua vida na hora de criar seu module.xml e mencionar as aplicações desejadas como dependentes.

Demo

https://zpm-explorer.contest.community.intersystems.com/csp/irisapp/explorer.html

Se você curtiu o aplicativo e acredita que merecemos seu voto, por favor, vote em zpm-explorer!

https://openexchange.intersystems.com/contest/current

0
0 196
Artigo Henrique Dias · jan 27, 2021 2m read

A pandemia que atacou o mundo em 2020 fez com que todos passassem a acompanhar as notícias e números que envolvem a COVID-19.

Então, por que não usar essa oportunidade e criar algo simple e agradável de se acompanhar os números das vacinações mundo afora?

Para participar deste desafio, utilizo os dados providos pelo Our World in Data - Research and data to make progress against the world’s largest problems.

Eles tem um repositório dedicado no Github com dados sobre a COVID-19, e utilizo os dados de vacinação para me ajudar com o meu rastreador.

Se você não conhece os caras, dá uma conferida, vai valer seu tempo. Github repository

A aplicação iris-vaccine-tracker tem 3 páginas diferentes:

  1. O dashboard principal
  2. Um datatable com as informações detalhadas, apresentadas pelo dashboard
  3. E um heat map

Dashboard

O dashboard principal mostra uma visão geral sobre a situação de vacinação ao redor do mundo.

O primeiro widget oferece as seguintes informações :

  • Quantos tipos de vacinas estão sendo utilizadas para vacinar a população
  • Quantos países estão informando os dados da vacinação
  • Total de vacinações até o momento

O segundo widget nos dá uma visão em linha do tempo com o top 10 de países com os números mais significantes da vacinação.

O terceiro widget exibe um gráfico de barras para os números do top 10 de países, mostrando o número total de vacinações até agora.

E o último widget, traz a distribuição de vacinas, que estão sendo utilizadas e seu percentual de utilização dentre os países.

Datatable

O data table exibe as informações detalhadas que o dashboard principal condensa para a exibição.

Heat Map

O heat map é uma visão diferente das informações já apresentadas no dashboard principal e no data table—Mas agora, estamos utilizando os detalhes providos pela informação que a tabela persistente Country nos oferece. A biblioteca amCharts usa o ISO Code Alpha2, nome do país e valor para criar esse mapa super show =D.

Demo

http://iris-vaccine-tracker.eastus.cloudapp.azure.com:52773/csp/irisapp/index.html

Curtiu o aplicativo? Acha que vale seu voto? Então vote em iris-vaccine-tracker!

https://openexchange.intersystems.com/contest/current

2
0 345
Pergunta Henrique Dias · jan 18, 2021

Boa noite pessoal, tudo bem?

Estou com uma dúvida, qual seria a melhor forma de ler todos os arquivos, por exemplo CSV, de um determinado diretório?

Para ler o arquivo CSV, utilizo o ClassMethod abaixo: 

ClassMethod readCSV() As %Status
{

   set file = ##class(%File).%New("/irisdev/dataImport/teste.csv")
   set sc = file.Open("R")
   if $$$ISERR(sc) quit
   
   set count = 0

   while 'file.AtEnd {
      set count = $INCREMENT(count)
      set line = file.ReadLine()
      quit:(line="")
      write line,!
   }
   do file.Close()
}

Agradeço qualquer sugestão de vocês. 

4
0 432
Pergunta Henrique Dias · Dez. 16, 2020

Fala pessoal, tudo bem?

Criei uma tabela com 100k registros. No SELECT, retorna tudo belezinha. No entanto, quando tento criar um cubo utilizando essa tabela como base, o cubo é compilado com sucesso. No entanto, quando faço o BUILD, ele gera apenas 1 fato.

Alguém já se deparou com alguma situação similar?

Alguns detalhes:

2
0 98
Artigo Henrique Dias · Nov. 25, 2020 4m read

Fala galera! Tudo bem?

Quando @Evgeny Shvarov anunciou o primeiro InterSystems IRIS Programming Contest, Comecei a pensar em algumas ideias. 

Coloquei tudo junto nesse aplicativo e o isc-utils é sobre isso:

  •  Conversões
    • Temperatura
    • Distância
  • Câmbio de Moedas
  • Clima

Conversão de Escala de Temperatura

0
0 102
Artigo Henrique Dias · Out. 29, 2020 1m read

Fala pessoal, tudo bem?

Criar Database, Namespace, Aplicações REST utilizando o Portal de Administração são tarefas super simples!

Você só precisar de alguns poucos cliques, quer dizer, de muitos cliques, talvez até mais cliques do que você gostaria.

Agora, e se eu te contar que você pode trocar todos esses cliques por uma simples linha de comando?!

0
0 214
Artigo Henrique Dias · Out. 26, 2020 3m read

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 Monitor
https://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?

0
0 218