Amazon SES: Entenda as vantagens e desvantagens de se usar

Email

No mundo atual, manter um contato contínuo com clientes e parceiros pode ser uma tarefa difícil, ainda mais para grandes empresas. Uma forma de realizar essa comunicação é utilizando e-mails. Porém, o monitoramento para que eles realmente cheguem a um destinatário pode ser difícil e até mesmo de alto custo. Assim, a utilização de um meio externo para realizar esse trabalho é uma ótima opção.

Como isso impacta o marketing da minha empresa?

O serviço em nuvem de e-mail da Amazon, o Amazon Simple Email Service (SES), é eficaz, flexível e dimensionáveis. Ele possui uma noção de Inbound Marketing, um conjunto de estratégias que se baseia na ideia de criação de conteúdo para um público específico. O conceito traz a ideia de uma comunicação direta com o cliente, criando, assim, um relacionamento duradouro como esse. Com essa ideia em mente, o serviço da Amazon possibilita que empresas apliquem o Inbound Marketing no seu cotidiano, através dos e-mails de comunicações transacionais, marketing ou de grande escala. Devido às suas opções flexíveis de implantação por IP e autenticação por e-mail, o Amazon SES torna-se confiável, sendo capaz de aumentar a capacidade de entrega e proteger a reputação do remetente.

Muitas empresas já se beneficiam do serviço da Amazon SES. Um grande exemplo é o aplicativo Duolingo, que disponibiliza o aprendizado de diversas línguas a milhões de usuários pelo mundo. Através do Amazon Simple Email Service, o aplicativo é capaz de enviar e-mails em grande escala para seus usuários, motivando-os a praticar diariamente.

Quanto custa?

Quando pensamos em Amazon sempre nos veem a cabeça valores justos e acessíveis, no caso do Amazon SES não iria ser diferente. Com um preço inicial de 0 USD para os primeiros 62.000 e-mails enviados a cada mês e 0,10 USD para cada 1.000 e-mails recebidos depois disso.

Uma fator interessante é a forma de contabilizar os email. Por exemplo, se você tiver 768 KB de e-mail recebidos, será contabilizado como três blocos de e-mail recebidos. Se você tiver 255 KB de e-mail recebidos, será contabilizado como zero blocos de e-mail recebidos.

Vantagens

Como a Duolingo, milhares de outras empresas podem usufruir dos benefícios desse serviço. Além da aplicação do Inbound Marketing, o Amazon SES oferece:

  • Rápida integração: A configuração de e-mails é feita em minutos e o serviço é compatível com o recebimento de e-mails, permitindo a interação com os clientes em grande escala.
  • Eficiência: É possível analisar a eficácia de alcance de cada email com estatística de envio, entregas de e-mail e devoluções.
  • Otimização da capacidade de entrega: É possível maximizar a capacidade de entrega através de um painel de reputação que conta com insights de performance e feedback antispam.
  • Dimensionamento seguro: As opções de autenticação do Amazon SES garantem o envio de e-mails seguros e com o nome de domínio do usuário.

Desvantagens

Além dos pontos positivos que o Amazon SES pode oferecer, há também certas questões que devem ser ponderadas:

  • O serviço de e-mail não é a solução mais intuitiva que há.
  • É um serviço um tanto quanto robusto, por assim dizer.
  • Pode ser complicado de apurar/decifrar mensagens de resposta.

O serviço de e-mail da Amazon é uma solução muito útil para empresas que procuram um engajamento em grande escala, de forma rápida e segura. O fato de ser um tanto quanto robusto, permite que seja incorporado ao software desejado, oferecendo maior flexibilidade.

Por Gustavo Gedoz Kozoroski
Artigo do Seminário de Engenharia de Software
Fonte Micreiros.com

Autenticação e autorização: Segurança de Acesso a Recursos

O avanço e a popularização das tecnologias abriu aos usuários a possibilidade de navegar livremente pela internet, podendo contratar e utilizar diversos serviços remotamente por exemplo. Assim, tornou-se fundamental investir em estratégias que possam adicionar maior segurança e confidencialidade nos métodos de identificação dos usuários (ALVES et al., 2017). Através de processos de autenticação e autorização pode-se proteger o acesso a um determinado recurso, estabelecendo regras e permissões que podem variar dependendo de quem o requisita, e para isso existem padrões e protocolos que especificam a melhor forma de projetar estas etapas do sistema, como gerenciar a identidade, mover dados pessoais com segurança e decidir quem pode acessar aplicativos e dados.

Autenticação

A autenticação é o processo através do qual um requerente prova quem afirma ser, ou seja, se verifica e confirma a autenticidade do usuário (RAHMAN; SHUVA; ALI, 2016). Neste processo, usualmente feito antes da autorização, o usuário é “desafiado” através de senhas ou até reconhecimento facial, de forma que sua identidade seja validada. A autenticação é um pré-requisito para o acesso aos recursos de um sistema e permite que as aplicações e serviços permaneçam confiáveis, impedindo acessos não autorizados. A autenticação pode se enquadrar em três categorias que respondem a três questionamentos “What you know”, “What you have” e “What you are”, respectivamente, são elas:

  • Single-Factor Authentication depende de um único fator, podendo ser senha, código, PIN, etc..

  • Two-Factor Authentication requer dois fatores para o sistema permitir o acesso a algum serviço, indo além de apenas nome de usuário e senha.

  • Multi-Factor Authentication (MFA) exige a utilização de dois ou mais fatores de segurança de categorias independentes. Esta categoria usualmente utiliza reconhecimento facial, impressão digital, leitura de íris ou reconhecimento de voz.

Autorização

Uma vez que o usuário já foi autenticado, a autorização é o método que determina o que o mesmo pode ou não acessar dentro do sistema. Este processo é redigido por meio de policies, rules e definição de roles, utilizadas para decidir qual o nível de acesso atribuído a um usuário autenticado para um recurso (DOULIGERIS; SERPANOS, 2007).

Autenticação vs. Autorização

Em poucas palavras, a autenticação verifica quem é o usuário enquanto a autorização verifica ao que ele tem acesso. A Tabela a seguir apresenta as principais diferenças entre os dois processos:

AUTENTICAÇÃOAUTORIZAÇÃO
Determina se o usuário é quem afirma serDetermina o que o usuário pode ou não acessar
Desafia o usuário a validar suas credenciaisVerifica se o acesso é permitido através de políticas e regras
Geralmente feito antes da autorizaçãoGeralmente feito após autenticação bem sucedida
Geralmente transmite informações por meio de um ID TokenGeralmente transmite informações por meio de um Access Token
Geralmente regido pelo protocolo OpenID Connect (OIDC)Geralmente regido pela estrutura OAuth 2.0
Exemplo: funcionários de uma empresa são obrigados a se autenticar por meio da rede antes de acessar o email da empresaExemplo: depois do funcionário se autenticar, o sistema determina quais informações o mesmo tem permissão para acessar
Fonte: adaptado de Auth0

Tokens

O token é um objeto composto por informações, o qual sozinho não possui significado, porém quando utilizado em conjunto com um sistema de Autenticação Baseado em Token (Token Based Authentication) funciona garantindo que todas as solicitações feitas a um determinado servidor sejam acompanhadas por um token assinado e válido. Os principais tipos de tokens são:

  • ID Token: possui informações do usuário autenticado, e as utiliza inclusive para personalizar a experiência do mesmo. É utilizado somente pelo Client App que requisitou a autenticação.
  • Access Token: são utilizados a cada request como credenciais para informar ao serviço requisitado que o portador do token foi previamente autorizado a acessar a API e executar um conjunto de ações.

Na Prática

A seguir está apresentado o fluxo de autenticação e autorização por meio de token entre Usuário, Client App, Auth Server e um Web Service (API).

Fonte: Auth0

Conclusões

Boas práticas de segurança tornam-se cada vez mais indispensáveis no desenvolvimento de um projeto de software. Identificar o usuário, validar suas credenciais e restringir seu acesso a determinados recursos é o ponto de partida para diminuir riscos e possíveis falhas que possam comprometer a integridade do sistema, além de proporcionar uma melhor experiência a quem o utiliza.

Autor: Gustavo Sachet

Referências:

ALVES, Késia Cristina. O impacto do registro digital nos processos de legalização de empresas nos escritórios de contabilidade da cidade de Uberlândia. 2017. 27 f. Trabalho de Conclusão de Curso (Graduação em Ciências Contábeis) – Universidade Federal de Uberlândia, 2017.

AUTH0. Authentication vs. Authorization. Disponível em: https://auth0.com/docs/get-started/authentication-and-authorization#authentication-vs-authorization. Acesso em: 29 set. 2021.

AUTH0. Authorization code flow. Disponível em: https://auth0.com/docs/authorization/flows/authorization-code-flow#how-it-works. Acesso em: 29 set. 2021.

AUTH0. Tokens. Disponível em: https://auth0.com/docs/security/tokens. Acesso em: 29 set. 2021.

DOULIGERIS, Christos; SERPANOS, Dimitrios N. Network Security: Current Status and Future Directions. Wiley-Ieee Press, 2007. 592 p.

RAHMAN, Md. Tanvir; SHUVA, Taslima Ferdaus; ALI, K. M. Akkas. Trusted Device along with Trusted Location and Biometry based Authentication Method. International Journal Of Computer Applications, v. 150, n. 4, p. 26-30, set. 2016.

Banco de Dados Baseado em Grafos e suas Principais Características

O banco de dados baseado em grafos é relativamente simples de ser desenhado, diferente do banco relacional onde o modelo básico são tabelas e as suas relações, o modelo básico desse tipo de banco são os grafos, onde podemos inserir um dado sem se preocupar quais relacionamentos ele possuirá, pois, essa relação acontece de forma mais simples.

Esse tipo de modelo representa de forma mais explícita os relacionamentos entre os dados, fornecendo uma modelagem mais simples, com melhor performance e maior naturalidade na linguagem para escrever as consultas.  Os grafos contêm vértices (nós), arestas (relacionamentos), que são usados para representar e armazenar os dados. Na figura os vértices são representados pelos círculos e as setas são as arestas.

Imagem 2 – Representação de grafos

Por que armazenar dados em grafos?

O banco de dados de grafos facilita o armazenamento de dados que possuem muitos conteúdos associados e a representação de como esses dados se conectam ou se correlacionam com outros dados.   

Para facilitar o entendimento podemos usar como exemplo uma rede social. Os usuários na rede seriam os nós e as linhas conectando os usuários indicariam as suas relações. Podemos ligar um usuário a outro pelo relacionamento de adicionar amigo ou podemos adicionar vértices de outro tipo como as publicações, onde o usuário se relaciona através de uma curtida ou compartilhando a publicação.  

Imagem 3 – Exemplo de relacionamento de uma rede social

Modelos para implementar o banco de dados de grafos

No banco de dados baseado em grafos existem alguns modelos para que esses grafos possam ser implementados. Os modelos mais conhecidos são grafo de propriedade e o RDF. O primeiro foca em análises e em consultas já o grafo RDF destaca a integração dos dados.

  • Grafos de propriedades – são usados para modelar relacionamentos entre dados e com base nos relacionamentos permitem a consulta e a análise desses dados.
  • Grafo RDF – Os grafos RDF (Resource Description Framework) podem representar metadados complexos e instruções. Permite a troca de informações através de um formato padrão com estrutura bem definida.

Exemplo de banco de dados de grafos e linguagem de consulta

O exemplo de banco de dados baseado em grafos mais famoso é o Neo4j, que foi criado para oferecer suporte a grandes estruturas de grafos e retornar centenas de milhares de relacionamentos. Ele possui versão open-source e outra paga, que pode ser adquirida por empresas.

Uma das linguagens de consulta bastante utilizada é a Cypher, que inicialmente foi desenvolvida para o Neo4j, mas ela passou a ser desenvolvida como um projeto separado e muitas outras empresas adotaram essa linguagem como um sistema de consulta.

O banco de dados de grafo possui uma grande usabilidade e é uma potente ideia onde é possível interligar dados e descobrir conhecimento.

Referências:

https://imasters.com.br/banco-de-dados/graphdb-series-o-que-e-um-banco-de-dados-de-grafos/?trace=1519021197&source=single

https://www.oracle.com/br/big-data/what-is-graph-database/

Autora: Reginara Ferreira Borges

Gamificação: Como tornar seu aplicativo mais atrativo

Atualmente é cada vez mais difícil capturar a atenção de uma pessoa em um aplicativo, pois existem diversos fatores que tiram a atenção do usuário quando ele está usando algum aplicativo que não o engaje, não pegue a atenção plena do usuário, alguns exemplos são as notificações de outros aplicativos, como por exemplo alguma marcação em publicação em redes sociais, se o usuário não estiver engajado no aplicativos em questão ele sairá para ver a notificação.

O que é Gamificação / Gamification?

Gamificação ou Gamification são técnicas, estratégias, designs e mecânicas de jogos utilizadas para trazer engajamento, aumento de produtividade, foco dentre outros fatores para tarefas, aulas ou até mesmo aplicativos que não são voltados para jogos.

Um bom exemplo de gamificação é o Nike Plus, onde ao atingir metas pré-estipuladas o usuário ganha troféus e status dentro da ferramenta, criando assim uma competitividade entre os usuários.

Outro termo utilizado é ludificação, onde ele tem seu uso no marketing com o significado de incentivar o envolvimento com o produto ou serviço.

Qual o ganho do uso de gamificação?

Nada melhor do que o usuário utilizado o aplicativo que lhe foi ofertado correto? Por isso a gamificação se torna algo com grande valor, pois com o uso de frameworks de gamificação, pode-se fazer sistemas de pontuações, nomeações, avatares dentre outras ferramentas que farão o usuário ficar cativado e utilizar mais vezes o aplicativo.

Um exemplo de framework é o Octalysis que foi desenvolvido por Yu-Kai Chou (foto ao lado) e lançado em 2010, onde este se tornou referência mundial, pois Chou já estava trabalhando em “gamificação” antes da mesma ser reconhecida pelo termo.

Octalysis: Conceito e Funcionalidades

O framework Octalysis trouxe como princípio 8 Cores Drives que motivam as pessoas a fazerem suas tarefas ou utilizar algo da melhor forma, usando a diversão como um mecanismo para engajá-los, são eles:

  • Significado Épico (Meaning)

Este Core tem significado de dar importância ao usuário, lhe dar título, fazendo ele se sentir como “O escolhido” se sentir especial.

  • Criatividade e Feedback (Empowerment)

O feedback dentro do octalysis diz respeito a mostrar para o usuário que ele está avançando, crescendo, um exemplo são plataformas de línguas como a Pearson, onde está presente o leveling (Nivelação).

  • Influência Social (Social Influence)

O Core Social e de afinidade fala sobre motivar as pessoas por meio do sentimento de nostalgia, competitividade e inveja, ou seja, mostrar os status de outros usuários para que se possa ter uma certa rivalidade.

  • Imprevisibilidade (Unpredictability)

Para os curiosos esse é um ponto a ser explorado, pois a vontade de saber o que irá acontecer em seguida, como por exemplo temos a vontade de assistir mais de um episódio de séries, ler mais uma página, jogar mais uma partida.

  • Perda (Avoidance)

A perda ou prevenção é o progredir com cuidado, pois há um certo risco de perder uma parte do progresso ou até perder tudo, isso causa tensão e fazendo com que o usuário fique mais preso à aquilo que está fazendo.

  • Escassez (Scarcity)

A Impaciência e Escassez é uma tática muito usada em jogos para deixar as pessoas ansiosas para poder jogar, a aplicação da mesma fora do mundo dos jogos não é diferente, um exemplo é a exclusividade, para ter funções a mais o usuário deverá pagar para ter.

  • Propriedade (Ownership)

A propriedade nada mais é do que a liberdade de ser diferente, como a criação de um avatar personalizado para cada pessoa, isso vai fazê-la se sentir única, outra é a posse, que pode ser tratada como acumulo de troféus/insígnias.

  • Realização (Accomplishment)

A realização está ligada com praticamente todos os outros Cores, onde nessa temos a questão dos desafios que darão recompensas / conquistas para o usuário, porém o desafio não pode ser algo fácil de ser conquistado, pois perderá o significado, deve ser algo desafiador onde no início será fácil, porém conforme ir avançando vá se tornando mais difícil para que o usuário crie vontade de crescer dentro da ferramenta.

Conclusão

A Gamificação está se tornando cada vez mais uma ferramenta presente no dia a dia das pessoas, pois como comprovado em pesquisas como a da TalentMS a gamificação de coisas tornou as pessoas mais produtivas (89%) e felizes (88%) no trabalho. Outro ponto é o mercado de gamificação, onde ele aumenta em cada dia, em 2018 movimentou cerca de 5,5 bilhões de dólares, sendo procurado pela maior parte das empresas mundiais.

Referências:






* https://www.youtube.com/watch?v=CK_4JfDZIjA&ab_channel=VIDDIA-Educa%C3%A7%C3%A3oOnline 



 * https://www.youtube.com/watch?v=26DaeUOijZE&ab_channel=Fant%C3%A1sticaF%C3%A1bricaCriativa  



* https://www.youtube.com/watch?v=eT5Jgt0jr1o&ab_channel=UILab



* https://www.orcestra.com.br/post/octalysis-o-framework-de-gamifica%C3%A7%C3%A3o-que-voc%C3%AA-precisa-conhecer



* https://posdigital.pucpr.br/blog/yu-kai-chou



* https://sambatech.com/blog/insights/gamification/ 



* https://neilpatel.com/br/blog/gamification-o-que-e/ 

Autor: Guilherme Oliveira Mota

5 Bibliotecas open source para reconhecimentos de objetos e OCR

Quando desejamos extrair informações de imagens ou vídeos, a maior dificuldade está no reconhecimento das informações, separar um texto com uma imagem no fundo pode parecer uma tarefa muito difícil. Porém não é, hoje possuímos muitas bibliotecas que podem nos auxiliar nestas tarefas e fazer isto com apenas algumas linhas de código. E o melhor de tudo, de graça.

OCR

OCR é um acrónimo para o inglês Optical Character Recognition, é uma tecnologia para reconhecer caracteres a partir de uma imagem. Com estudos desde 1950 hoje ele possui um estágio de evolução bem avançado, possuindo algumas ferramentas bem consolidadas.

Muito importante na utilização destas bibliotecas é o tratamento das imagens, é comum surgirem ruídos após a extração, este podem ser reduzidos seguindo algumas práticas abordadas pelas próprias documentações, como por exemplo, deixar a imagem em tons de cinza e aumentar o Canal Alfa dos elementos.

1 – Tesseract OCR

Originalmente desenvolvido pela Hewlett-Packard e por um tempo mantido pelo Google. Atualmente o projeto está hospedado no GitHub. Sua primeira versão esteve disponível para utilização na linguagem C, hoje ele já possui sua versão em Python. Com ele é possível transformar imagens de múltiplos formatos para um texto de saída simples.

2 – GOCR

Desenvolvido por Jörg Schulenburg em meados dos anos 2000. O GOCR pode ser usado como um aplicativo de linha de comando independente ou como back-end para outros programas. Ele vem com uma interface gráfica gocr.tcl.

3 – Kraken

Projeto mais modesto porém com muito potencial para crescimento. Uma de suas principais características é a análise de layout totalmente treinável e o suporte para reconhecimento de multi-script.

Reconhecimento de objetos

O reconhecimento de objetos consiste no conceito de visão computacional, permitir que os computadores interpretem visualmente informações, neste caso, ser capaz de reconhecer objetos pré-definidos ou não. Este campo de pesquisa permite reconstruções de cena, detecção de eventos, reconhecimento de objetos, aprendizagem de máquina, restauração de imagens entre outros.

4 – OpenCv

Desenvolvida pela Intel, em 2000. É totalmente livre ao uso acadêmico e comercial, para o desenvolvimento de aplicativos na área de Visão computacional. Possui módulos de Processamento de Imagens e Video I/O, Estrutura de dados, Álgebra Linear, GUI, além de mais de 350 algoritmos de Visão computacional como: Filtros de imagem, calibração de câmera, reconhecimento de objetos, análise estrutural e outros.

5 – BoofCV

Suas funcionalidades cobrem uma variedade de assuntos, processamento de imagem de baixo nível, calibração de câmera, detecção / rastreamento de recursos, estrutura de movimento, detecção fiducial e reconhecimento.

Conclusão

Hoje, diferente de apenas alguns anos atrás, possuímos a disponibilidade de diversas ferramentas para realizarmos ideias que por muito achamos não realistas, por serem muito avançadas tecnologicamente ou acharmos que não possuímos os recursos necessários.

Se trata apenas de uma ilusão criada por nós mesmos, temos uma gama enorme de possibilidades disponibilizadas gratuitamente e que podemos até mesmo contribuir para melhorias de código e performance. Bibliotecas de reconhecimento de objetos e OCR são aplicáveis em diversos projetos de variadas áreas e cada vez mais estarão presentes em nossas vidas.

Autor: Fernando Waldow Martens

Referencias

https://www.hitechnectar.com/blogs/open-source-ocr-tools/#:~:text=A9T9-,Tesseract,available%20open-source%20systems%20available

https://medium.com/data-hackers/ocr-da-introdu%C3%A7%C3%A3o-%C3%A0-aplica%C3%A7%C3%A3o-359c9aff56f3

https://pt.wikipedia.org/wiki/Reconhecimento_%C3%B3tico_de_caracteres

https://pt.wikipedia.org/wiki/OpenCV

https://github.com/tesseract-ocr/tesseract

Ferramentas para acelerar o desenvolvimento front-end

Com tecnologias cada vez mais visuais, o desenvolvedor front-end precisa se reinventar para sempre entregar softwares com mais qualidade e velocidade. Para isso muitas tecnologias são lançadas a todo tempo, facilitando a vida dos programadores e acelerando o processo de programação.

Editores de texto

Talvez sejam a principal ferramenta de um programador.
Características como layout, funcionalidades, atalhos e até mesmo cores podem fazer a diferença na escolha. Outro detalhe importante é a linguagem de programação que será desenvolvida, muitos dos editores são otimizados e/ou feitos para determinada linguagem.

  • VSCode

Ou Visual Studio Code, é um editor desenvolvido pela Microsoft, multiplataforma, que pode ser instalado em Windows, Linux e MacOS.
Características: extensível, suporte nativo ao git, IntelliSense, depuração direta no editor.

  • Sublime Text

É um editor que busca simplicidade e facilidade em sua utilização. Multiplataforma, funciona em em Windows, Linux e MacOS.
Características: ampla comunidade, grande gama de plugins, coloração de sintaxe personalizável.

  • Atom

Desenvolvido pelo GitHub, é um editor de código open source multiplataforma.
Caraterísticas: ampla comunidade, suporte nativo ao git, instalador de pacotes integrado, interface simples.

Frameworks

Framework são conjuntos de códigos fonte genéricos agrupados, que facilitam a criação de algum sistema.
Eles podem facilitar o desenvolvimento de uma aplicação, tanto individualmente quanto coletivamente, uma vez que em alguns casos podem fragmentar o código fonte em pequenas partes melhorando o desempenho em equipe.

  • Bootstrap

O Bootstrap é uma biblioteca que visa facilitar o desenvolvimento web, com uma série de estilos e componentes. Ele traz uma padronização de layout, com um sistema de grid que é amplamente utilizável. O framework é tão grande, que vários outros frameworks derivados são criados a partir deles.

  • React

React é um framework Javascript do Facebook para construção de interfaces de usuário. Ele tem como premissa a componentização de blocos e páginas, assim dividindo as partes lógicas e responsabilidades de cada parte, isso tem grande impacto no trabalho em equipe pois cada programador pode focar em um componente diferente de forma mais individual, com menor dependência.

  • Angular

É um framework Javascript para construir páginas web dinâmicas. Ele fornece tecnologia para construir aplicativos para web baseados em uma única página dinâmica. Também permite ao desenvolvedor fazer uso da linguagem de marcação HTML para definir dados associados, validações, e response handlers para ações do usuário.

Ferramentas e plugins

  • Sass

Sass é um compilador CSS que permite escrever os estilos web de forma mais inteligente e rápida. Ele transforma o código escrito de forma hierárquica em CSS interpretado pelos navegadores. Também funciona modularizado e contém várias funções para facilitar a escrita.

  • Emmet

É uma extensão que facilita a digitação do código em diversos editores. Ele funciona como autocomplete e também possui diversas palavras chaves que aumentam a rapidez na escrita. Também é altamente customizável, possibilitando atalhos customizáveis.

  • ESLint

O Eslint funciona como uma forma scanner no código que procura por problemas e más práticas. Também é possível indentar o código, de forma que a aplicação toda use o mesmo padrão e regras. Ele é muito customizável, isso permite que as equipes definam suas próprias regras de codificação, e se os ajustes ocorrem de forma automática ou manual.

Como pode se notar, o desenvolvimento de software está crescendo cada vez mais. Programadores e empresas precisam buscar soluções que facilitem a codificação e interações entre a equipe. Muitas ferramentas estão nascendo e é preciso escolher com sabedoria.

Autor: Leandro Santos

IDEs para desenvolvimento em Java Script

Introdução

Os IDEs vêm com muitos recursos extras, como por exemplo o preenchimento automático de texto, podendo dar mais flexibilidade ao usuário. Com a ajuda de IDEs, é possível aumentar a produtividade. Existem diversos IDEs na Internet e muitos deles são de código aberto.  

Desenvolvimento

Nesta lista de IDE Javascript, selecionei 4 de código aberto e 4 premium (pagos). Todos eles estão no top 10 da lista de IDEs para JavaScrip cujos dowloads foram mais procurados entre 2020 e 2021, conforme a pesquisa anual da Github. 

Características de uma IDE 

Muitas são as características presentes em uma IDE, as mais comuns são: 

  • Editor de código-fonte: podendo escrever comandos suportados por uma determinada linguagem de programação; 
  • Preenchimento inteligente: recurso de uma IDE no qual permite o preenchimento de trechos de códigos com a finalidade de agilizar o desenvolvimento; 
  • Compilador ou interpretador: é necessário que toda IDE possua um compilador (ou um interpretador), que transforme todo o código-fonte escrito em linguagem de máquina; 
  • Debbuger: mais utilizado para encontrar e corrigir erros no código-fonte; 
  • Geração automática de código: recurso no qual permite a criação de trechos de códigos predefinidos, trazendo agilidade aos diversos processos de desenvolvimento; 
  • Refatoração: ferramenta que, em conjunto com testes automatizados, garantam uma melhoria constante do código-fonte e erradicação de bugs. 

 Vantagens e desvantagens de uma IDE 

Apesar da facilidade de criação de aplicações, as IDEs possuem diversas vantagens e desvantagens em sua utilização. Dentre elas é possível citar: 

Vantagens de uma IDE 

 Aumento da produtividade: Por possuir diversas ferramentas que auxiliam na criação de aplicações, o desenvolvedor só utilizará esta ferramenta, aumentando assim sua produtividade; 

  • Diminuição gastos: Por ser uma solução completa, muitas vezes esta é a única ferramenta que o desenvolvedor precisa adquirir para a construção de suas aplicações; 
  • Mede desempenho: IDEs possuem ferramentas para medição de desempenho da execução de aplicações; 
  • Geração automática de códigos: é o recurso que permite a criação de trechos de códigos predefinidos; 
  • Facilidade em fazer verificações e correção de erros: Diversas IDEs possuem ferramentas que analisam o código que está sendo desenvolvido, permitindo que possíveis erros sejam corrigidos no momento do seu desenvolvimento; 
  • Completa: Com um único software o desenvolvedor consegue desenvolver, testar e corrigir uma aplicação. 

Desvantagens de uma IDE

  • Pagas: Muitas IDEs são pagas, o que dificulta sua utilização pela comunidade; 
  • Facilidade no desenvolvimento: Sendo possível prover diversas facilidades na hora do desenvolvimento (como a geração automática de códigos), mas podem também contribuir para que muitos desenvolvedores se tornem “mal acostumados” na hora de desenvolver, se tornando dependentes da IDE; 
  • Ambiente lento: Apesar de possuir uma solução completa, isso tem um custo. A maioria das IDEs consomem muito mais recursos de hardware do computador que um simples editor de texto. 

 IDE´s java script  

  • Eclipse 
  • Visual Studio Code 
  • NetBeans 
  • Atom, um IDE Javascript 

 IDE Javascript Premium 

  • Visual Studio 
  • WebStorm – IDE Javascript 
  • Sublime Text 

 Considerações Finais 

A utilização de uma IDE não é obrigatória, podendo também ser possível desenvolver aplicações sem que o desenvolver utilize a mesma. Em certas situações o desenvolvedor poderá a escolher por diversas vantagens que sua utilização prove aos usuários, nada melhor que analisar todas estas questões a fim de escolher aquela que mais se adequa a sua forma de desenvolvimento.  

 Referências 

MARIANA, Paldoam. 7 Ide´s java script. São Paulo: Geek Hunter, 2021. 

RED HAT, O que é a IDE?. São Paulo: Red Hat, 2021. 

Autora: Brenda Andrade Ribeiro

FRAMEWORKS NODE JS

Um framework é uma combinação de bibliotecas, auxiliares e ferramentas que auxiliam a construir e executar aplicativos da web com menos esforços. “É de conhecimento público que existem mais frameworks para desenvolvimento web, que estrelas na via láctea”. Com isso, foi realizado uma pesquisa para descobrir os frameworks mais utilizados atualmente para node JS.

EXPRESS JS:

Express é uma estrutura Node.js Model-View-Controller (MVC) popular, rápida, mínima e flexível que oferece uma coleção poderosa de recursos para desenvolvimento de aplicativos móveis e da web.

É um conjunto de bibliotecas de roteamento que fornece uma camada fina de recursos fundamentais de aplicativos da web, que se somam aos adoráveis ​​recursos existentes do Node.js. Ele se concentra em alto desempenho e oferece suporte a roteamento robusto e auxiliares HTTP (redirecionamento, cache, etc). Ele vem com um sistema de visualização que suporta mais de 14 mecanismos de template, negociação de conteúdo e um executável para gerar aplicativos rapidamente.

Além disso, o Express vem com uma infinidade de métodos, funções e middlewares de utilitários HTTP fáceis de usar, permitindo que os desenvolvedores escrevam APIs robustas de maneira fácil e rápida.

SOCKET.IO:

Socket.io é uma estrutura full-stack rápida e confiável para a construção de aplicativos em tempo real. Ele é projetado para comunicação baseada em eventos bidirecionais em tempo real.

Ele vem com suporte para reconexão automática, detecção de desconexão, binário, multiplexação e salas. Possui uma API simples e conveniente e funciona em qualquer plataforma, navegador ou dispositivo (com foco igualmente na confiabilidade e velocidade).

SAILS:

Sails foca em dois pilares: estabilidade e facilidade de uso, sem excluir diversos componentes prontos para uso. Ele é um derivado do Socket e do Express. O framework MVC oferece suporte a autenticação, ORM próprio para integração com banco de dados, padronização de templates e WebSockets. Além disso tudo, a solução ainda agrega um gerador de APIs batizado de Blue prints que permite que o desenvolvedor customize suas APIs com o mínimo de codificação manual. Sua arquitetura MVC lembra a de frameworks como Ruby on Rails. No entanto, é diferente porque oferece suporte ao estilo mais moderno e orientado a dados de desenvolvimento de aplicativos da web e API.

Ele suporta APIs REST geradas automaticamente, fácil integração com WebSocket e é compatível com qualquer front-end: Angular, React, iOS, Android, Windows Phone, bem como hardware personalizado.

METEOR JS:

O Meteor.js é uma estrutura Node.js full-stack ultra-simples para a construção de aplicativos modernos e móveis da web. É compatível com a web, iOS, Android ou desktop. Permite  uma prototipagem rápida e produz código multiplataforma (AndroidiOS, Web). Ele se integra com MongoDB e usa o protocolo DDP (Distributed Data Protocol) para propagar as mudanças nos dados para todos os clientes do serviço em tempo real sem requerer qualquer código de sincronização específico.

Ele integra coleções-chave de tecnologias para construir aplicativos reativos de cliente conectado, uma ferramenta de construção e um conjunto de pacotes com curadoria da comunidade Node.js e JavaScript geral.

KOA:

          Koa é um novo framework construído pelos desenvolvedores do Express e Socket.io, usa funções assíncronas ES2017. Possui uma base menor, mais expressiva e mais robusta para o desenvolvimento de aplicativos da web e APIs. Ele emprega promisses e funções assíncronas para livrar os aplicativos de “call-back hell” e simplificar o tratamento de erros. O propósito aqui é oferecer um middleware que permite que o cliente tenha acesso a funcionalidades como delegação de eventos, canais de call-back, eventos e execução de código assíncrono. Ele usa alguns métodos ECMAScript (ES6) poderosos que ainda nem chegaram a todos os navegadores. Para os desenvolvedores, isso representa uma aceleração no trabalho de se criar aplicações web e APIs.

Referencial:

https://medium.com/rapaduratech/top-10-frameworks-para-conhecer-em-nodejs-1e4b47e2320a – acessado em 24/10/2020

https://www.tecmint.com/best-nodejs-frameworks-for-developers/ – acessado em 24/10/2020

https://www.codigofonte.com.br/artigos/top-10-frameworks-de-node-js – acessado em 24/10/2020

Autenticação

A Autenticação em sistemas computacionais consiste em confirmar a autenticidade de uma pessoa dentro de um determinado contexto e está relacionado diretamente à segurança do sistema verificando a permissão e os limites de acesso do usuário.

Há diversas formas de autenticação dentro de um sistema como por exemplo: os Smart Cards conhecidos como tokens, a biometria e a mais difundida e aceita que é o uso de senha.

Framework e Autenticação

Dentro do universo JavaScripts temos diversos frameworks e bibliotecas que utilizamos como ferramentas para desenvolvimento visando o uso das ferramentas Node.js e React.js, temos alguns frameworks que auxiliam no processo de criação dessas autenticações tais como o Passport.js, cujo download está estimado em mais de 905 mil segundo o site (openbase.io/packages/top-nodejs-authentication-libraries).

Passport.js é um framework que utiliza a teoria de middlewares e dispõe de mais de 500 estratégias de autenticação, contando com as estratégias de autenticação através da conta do Facebook, Twitter, Google e muito mais, uma das estratégias mais usadas e que também está disponível é o JWT (JSON WEB Token).

Exemplo de Autenticação com Passport.js em uma estrutura já cirada:

routes.post('/login', async (request, response, next)=>{
    passport.authenticate(
      "login",
      async(err,user,info)=>{
          try {
              if(err || user){
                  const error = new Error('Erro ao autenticar usuário');
                  return next(error);
              }

              request.login(user, {session:false}, async (err)=>{
                  if(err) return next(err);
                    const body = {id:user.id, email:user.email}

                    const token = jwt.sign({user: body}, 'top_secret');
                    
                    return response.json({ token });
              })
          } catch (e) {
              retun next(e);
          }
      });
})

Explicando o JWT

O JWT consiste em métodos abertos e padrões da indústria que representam as solicitações entre as partes com segurança utilizando objeto JSON, permitindo a codificação e decodificação de informações através de assinaturas digital usando um segredo com o algoritmo HMAC(Hash-Based Message Authentication Code, é utilizado especificamente para calcular um MAC ) ou um par de chaves pública / privada usando RSA ou ECDSA.

A estrutura do JWT consiste em:

  • Cabeçalho – formado por duas aparte: o tipo de token, que é JWT, e o algoritmo de assinatura usados, como HMAC SHA256 ou RSA.
  • Carga útil – As declarações são declarações sobre uma entidade (normalmente, o usuário) e dados adicionais. Existem três tipos de reivindicações: registradas, públicas e privadas.
    • Declarações registradas: trata-se de um conjunto de declarações predefinidas que não são obrigatórias, mas recomendadas, para fornecer um conjunto de declarações úteis e interoperáveis. Alguns deles são: iss (emissor), exp (prazo de validade), sub (assunto), aud (público) e outros.
    • Reivindicações públicas: podem ser definidas à vontade por aqueles que usam JWT. Mas, para evitar colisões, eles devem ser definidos no IANA JSON Web Token Registry ou como um URI que contém um namespace resistente a colisões.
    • Reivindicações privadas: são as reivindicações personalizadas criadas para compartilhar informações entre as partes que concordam em usá-las e não são reivindicações registradas ou públicas.
  • Assinatura – Para criar a parte da assinatura, você deve pegar o cabeçalho codificado, a carga útil codificada, um segredo, o algoritmo especificado no cabeçalho e assiná-lo.

Comparando o JWT

Em comparação do JWT com outras formas de autenticação, como o SWT (Simple Web Tokens) e o SAML (Security Assertion Markup Language Tokens), percebemos que o JSON ganha em tamanho e menor verbosidade tornando o JSON uma boa opção para transmissão de dados em HTML e HTTP.

  • SWT – somente pode ser assinado simetricamente por um segredo compartilhado usando o algoritmo HMAC.
  • SAML e o JWT – além do uso já mencionado também pode usar os pares de chaves pública / privada na forma de um certificado X.509 para assinatura.

Em comparativo do SAML que utiliza o XML nas suas estruturas e o JWT que utiliza JSON temos o JWT com a maior simplicidade e menor verbosidade dificultando a criação de brecha de segurança pela complexidade de estrutura, quanto aos analisadores JSON são comuns na maioria das linguagens de programação, mapeando diretamente para objetos já por outro lado, XML não possui um mapeamento natural de documento para objeto tornando mais simples e fácil trabalhar com JWT do que com asserções SAML.

Figura 1 – JWT utilizando o corpo JSON

VS

Referências

https://www.tecmundo.com.br/seguranca/1971-o-que-e-autenticacao-.htm

https://openbase.io/packages/top-nodejs-authentication-libraries

https://www.devmedia.com.br/como-o-jwt-funciona/40265

Autor: Alexandre de Oliveira

Como funciona a autenticação com Facebook e com o Google

Com tantos sites e aplicações disponíveis no mundo digital hoje, muitas vezes, para utilizar os serviços e/ou acessar seus conteúdos, é necessário possuir um cadastro. Imagine a quantidade de senhas a serem gerenciadas para cada site e aplicação, se cada vez que queira acessar algo novo, ter que criar um novo cadastro? Ou criar e gerenciar novas senhas? Até porque esse numero elevado de senhas, desgasta o usuário em questão de criatividade, e muitos acabam utilizando senhas fracas, e ou também utilizando a mesma senha para mais de uma aplicação.

Hoje, muitas dessas aplicações, dispõe da opção de realizar o login por uma conta Google ou também uma conta de Facebook. Tanto o Google quanto o Facebook, utilizam de um protocolo de autorização chamado OAuth, para liberar acesso limitado aos dados do usuário e ao acesso a suas APIS.

Mas como o OAuth funciona?  

O QUE É O OAUTH?

Primeiramente, vamos entender o que o OAuth é realmente. Ele é um protocolo de autorização para APIS WEB, e tem por objetivo permitir que aplicações Client, acessem recursos protegidos, em nome de um usuário, e sem expor suas credenciais. Ele fornece um fluxo de autorização para aplicações web e desktop e para dispositivos móveis.

Em um exemplo simples, em um site que permita Login com o Google, o Web Service dessa aplicação, solicita que o usuário, dê permissão para ler seu perfil do Google, para que o Web Service, possa acessar e copiar informações desse perfil, afim de facilitar a vida do usuário, que por sua vez não precisará informar alguns dados de cadastro, já que os mesmo foram reaproveitados do seu perfil do Google.

COMO ELE FUNCIONA?

De uma forma geral, o OAuth fornece aos clientes, um acesso seguro aos recursos do servidor, em nome do proprietário do recurso. Para isso, ele especifica um processo de autorização, que solicita ao proprietário, acesso de terceiros a seus recursos, sem compartilhar suas credenciais. Há também uma questão a se levantar, sobre segurança, pois com a utilização das contas do Google ou Facebook, ou demais, as questões de segurança são de responsabilidades dos mesmos.

Quando o proprietário autoriza o acesso, o OAuth, retorna um Token de acesso, para que o terceiro que solicitou, obtenha somente as informações e recursos liberados.

O OAuth, define quatro principais papéis:

  • Proprietário do Recurso: É o usuário que autoriza que uma aplicação terceira, tenha acesso a sua conta. Esse acesso é limitado ao “escopo” da autorização concedida, como por exemplo, o acesso liberado as informações são somente para leitura, nesse caso, a aplicação terceira só consegue buscar os dados, mas nunca modifica-los.
  • Cliente: É a aplicação de terceiros, que deseja acessar a conta do usuário. Para isso, ela deve ser autorizada pelo usuário, e essa autorização será validada pela API.
  • Servidor de Recurso: Basicamente, o servidor de recurso, é aonde ficam hospedadas as contas de usuário protegidas.
  • Servidor de Autorização: Nesse servidor, é verificado a identidade do usuário que está concedendo o acesso a sua conta, e de onde serão emitidos os Tokens de acesso, caso a validação do usuário seja efetuada.

Fluxo do OAuth

  • Primeiramente a aplicação solicita ao usuário, autorização para acessar os recursos do serviço em que ele possui conta cadastrada.
  • Caso o usuário autorize, será enviado para o provedor de serviços do usuário, Google, Facebook, ou outros, informando sua identidade, ou seja, que aplicação está solicitando o acesso, a uri de redirecionamento, para onde a aplicação será redirecionada caso haja a autorização, o tipo de resposta esperada, geralmente é um código, e o nível de acesso que a aplicação está solicitando. Veja um exemplo abaixo:
    • https://minhaaplicacao.com/v1/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=CALLBACK_URL&scope=read
  • Em seguida a aplicação solicitará ao servidor de autorização, um Token de acesso, utilizando sua própria identificação, ou seja, a aplicação deve dizer quem ela é, e utilizando a concessão recebida do usuário.
  • Na API, será verificado a identidade da aplicação que solicita o acesso, e a concessão de acesso dada pelo usuário, e se validadas as duas informações, será emitido um Token de acesso para a aplicação.
  • Agora com o Token em mãos, a aplicação solicitará o recurso ao servidor de recursos.
  • Se o Token for validado pelo servidor de recursos, o mesmo fornecerá o acesso para a aplicação.

Esse fluxo apresentado, pode variar dependendo do tipo de concessão de autorização que foi definido. Mas de maneira geral, o processo segue dessa forma. Importante salientar que o provedor dos dados, Google, Facebook, entre outros, deve confiar, conhecer o provedor OAuth, porque caso não seja de conhecimento dos provedores, o Token apresentado pelo OAuth para acessar as informações será rejeitado.

Autor: Anderson Luis Massens Ramos

Referências

https://pt.wikipedia.org/wiki/OAuth

https://www.digitalocean.com/community/tutorials/uma-introducao-ao-oauth-2-pt

https://support.google.com/a/answer/162106?hl=pt-BR

https://pt.stackoverflow.com/questions/123777/oauth-o-que-%C3%A9-qual-sua-finalidade

https://www.profissionaisti.com.br/2019/07/seguranca-introducao-ao-protocolo-de-autorizacao-oauth/

O que é e onde aplicar Angular JS

AngularJS

No passado usavam-se sites estáticos, sem iteração com os usuários, porém logo surgiram aplicações Web, essas sim necessitavam de recursos e o nível de complexidade aumentou.

Inicialmente usou-se JavaScript/Jquery mas nem sempre ela garantia a alta produtividade e a facilidade na manutenção de código.

O que é o Angular JS?

AngularJS é um framework front-end que auxilia a criação de Single Page Aplications(SPA), e vem ganhando destaque desde de seu surgimento em 2011-2012 por Misko Every e Adam Ebrons, cujo objetivo era facilitar a criação de aplicações web. É baseado em um modelo MVW(Model View Whatever), uma brincadeira da Google dando um ponto final a uma longa discussão entre a comunidade de desenvolvedores que não chegavam em um acordo sobre o modelo utilizado cujos principais eram: MVC(Model View Controller), MVP(Model View Presenter) e MVVM(Model View View Model).

O começo:

Angular JS, foi desenvolvido por Misko Hevery em um projeto pessoal com o objetivo de aprimorar o desempenho de aplicações Web. Pouco tempo depois, Hevery entrou para o Google e aplicou sua framework no projeto Google feedback, diminuindo o número de linhas do código e aumentou sua performance. Google feedback e uma ferramenta que está presente em todos os produtos da Google como: Google+, Chrome, Hangouts entre outros, onde você pode enviar impressões do que estão acontecendo nos produtos como: erros, críticas e com isso o suporte vai poder observar se usuário final está gostando ou não dos produtos. Atualmente, o Google e o principal contribuinte para o código do AngularJs.

O AngularJS veio para padronizar a estrutura de desenvolvimento de aplicações para web, fornecendo um template com base nos padrões client-side.

Quem usa AngularJS:

Muitos clientes de grande porte usam Angular, devido a sua performance com simplicidade, os sites possuem o framework Angular: Airlines, paypal, cvs shop ,Micro Soft, Google Play,ABC News, San Disk, Trello.

Por que usar?

Usar este framework facilita a produtividade pelo reuso de código. Também visando a continuidade, hoje o mesmo está sendo mantido pelo Google, tendo como a certeza que ele não deixará o mercado tão cedo, tendo esforços de grandes equipes na linha de desenvolvimento, o angular segue muito bem o mantra da produtividade. Por ser orientado a componentes, é muito rápido e fácil programar com ele.

Praticamente qualquer coisa que se precisa já tem pronta por aí nos milhares de repositórios do GitHub. Existe inclusive um site que reúne mais de 2000 módulos open-source para facilitar a busca https://angular.io/guide/ngmodules. Possui comunidade Sólida o Repositório do Angular no GitHub tem 49 mil estrelas e mais de mil contribuintes, além de mais que 150 mil repositórios com scripts que utilizam a tecnologia.

No Stack Overflow, a maior comunidade de perguntas e respostas do mundo, temos quase 180 mil perguntas. Caso o interesse seja em vídeos sobre o assunto, o YouTube nos dá uma marca impressionante de 470 mil vídeos. O interesse da comunidade tem subido exponencialmente nos últimos anos, de acordo com o Google.

O Angular está sendo conhecido pela internet também pela sua curva de aprendizado. Em poucos minutos você aprende seus conceitos e já está desenvolvendo seu primeiro app.

O AngularJS usa em sua arquitetura o modo MVC (Model View Controller), que é um padrão para dividir uma aplicação em diferentes partes (modelo, visão e controle), cada uma com suas respectivas responsabilidades. Contando com três camadas de comunicação, que são elas:

  • Controller : Sempre que você pensar em manipulação de dados, pense em model. Ele é responsável pela leitura e escrita de dados, e também de suas validações.
  • View: Simples: a camada de interação com o usuário. Ela apenas faz a exibição dos dado.
  • O responsável por receber todas as requisições do usuário. Seus métodos chamados actions são responsáveis por uma página, controlando qual model usar e qual view será mostrado ao usuário.

Um exemplo disso seria um restaurante, o Controller é o pessoal da cozinha que prepara o prato, mas não sabe para quem irá fazer, a View é o cliente que apenas recebe o prato e consome, mas não sabe quem fez, o Scope é como se fosse o garçom que faz o meio de campo entre Controller e View.

Outro recurso interessante para economia de dados e melhor performance é carregar apenas uma página principal, recursos de aplicação e outras páginas são carregadas por demanda, deixando a experiência mais fluida. Essa funcionalidade é conhecida como Route Engine. Este mecanismo de rotas é disponibilizado com o nome de angular-route.js.

A utilização deste framework torna a aplicação mais rápida e mais enxuta do que as outras formas de desenvolver interface para web.

 

Autor: Michel Toffolo

Fonte de referências:

https://tasafo.org/2014/11/26/porque-utilizar-angularjs-no-seu-proximo-projeto/

http://blog.algaworks.com/o-que-e-angularjs/

https://waldyrfelix.com.br/8-motivos-que-me-levaram-a-usar-o-angularjs-como-primeira-op%C3%A7%C3%A3o-em-meus-projetos-cccc222fd22e

 

Comunicando com sistemas embarcados

Se você já precisou integrar sistemas embarcados com aplicação de terceiros, servidores e banco de dados, a primeira idéia que vem naturalmente é o uso de WebService. Imagine agora, como isso era feito na época que não existia essa tecnologia, e dessa forma você poderá ter uma pequena dimensão do impacto gerado por ela no mundo da automação e dos sistemas embarcados.

O presente artigo objetiva uma breve abordagem sobre o conceito da tecnologia WebService e como está tecnologia de comunicação entre sistemas teve profundos impactos no desenvolvimento e na integração sistemas embarcados.

Como fazer?

Na base de tudo está a Internet, sem ela seria impossível o surgimento da tecnologia WebService. Basicamente o WebService faz com que os recursos de uma determinada aplicação possam estar disponíveis sobre a rede de forma padronizada, desta forma uma aplicação pode invocar outra para executar tarefas que podem ser simples ou complexas, mesmo que as duas sejam escritas em linguagens diferentes.

O principal motivo que torna o WebService tão atraente é o fato que utiliza tecnologias padronizadas como o protocolo HTTP/HTTPS para transporte de dados, os quais são transferidos sobre XML encapsulados no protocolo SOAP (Simple Object Access Protocol). Também é muito comum a utilização do protocolo REST (Representational transfer protocol) como protocolo de transferência, neste caso os dados são encapsulados em notação JSON que é mais leve que o XML.

Na maioria dos casos, os grandes fabricantes de hardware embarcado já provem um WebService que abstrai todas as funções de baixo nível de comunicação, assim o desenvolvedor somente deve acessar uma url fornecida pelo fabricante com os métodos disponíveis para enviar e receber dados ao equipamento.

Uso de padrões facilita muito a vida

Além dos grandes fabricantes de hardware, também existem empresas especializadas em conectividade, que fornecem softwares com protocolos específicos para centenas de equipamentos de diferentes fabricantes. Estes sistemas normalmente são divididos em três camadas, conforme mostra a figura abaixo.

Figura 1

A primeira camada concentra os drivers proprietários de cada fabricante que efetivamente fazem a comunicação funcionar. Esta é a camada de mais baixo nível que é totalmente abstraída ao usuário final da informação.

A segunda camada é uma seríe de serviços que rodam em nível servidor e compreendem normalmente os padrões OPC-DA e IoT, ambos os padrões fornecem uma normatização de como a informação será coletada ,armazenada e disponibilizada para a camada superior.

A terceira e última camada fornece as interfaces para comunicação com aplicação de terceiros, normalmente uma API REST que o cliente pode consumir para transferir e receber dados dos sistemas embarcados.

Agora que entendemos um pouco mais sobre as bases sob as quais a tecnologia foi desenvolvida, podemos considerar que qualquer sistema embarcado que possua uma conexão  Ethernet é capaz de enviar e receber dados através de um WebService. Portanto, a construção de penosas rotinas proprietárias de difícil manutenção e atualização tornaram-se praticamente obsoleta nos dias atuais.

Autor: Alex Sandro Meireles Da Cruz

Links relacionados:

 http://mqtt.org

https://opcfoundation.org

https://www.kepware.com

9 Frameworks de Desenvolvimento Multiplataforma Móvel

Capturando a funcionalidade comum a várias aplicações.

A escolha de um framework ou plataforma depende muito de suas habilidades e de seus objetivos com a aplicação.O desenvolvimento multiplataforma tem ganhado muitos adeptos ao longo dos anos. Com isso, o mercado também se expandiu consideravelmente. Logo, novas ferramentas cross-platform foram surgindo no mundo do desenvolvimento mobile. Continue lendo “9 Frameworks de Desenvolvimento Multiplataforma Móvel”

Diagramas Estruturais da UML: Diagrama de Pacotes

Os analistas de software se deparam com a modelagem de sistemas grandes e muito complexos, porem pensando no desenvolvimento e manutenção futura, necessitam de algo que os auxiliem a não tornar essas tarefas muito complicadas.

Nos últimos tempos, surgem sistemas cada vez mais complexos, com estruturas de classes imensas e arquiteturas de camadas muito divididas. Para evitar com que o software se torne tão complexo ao ponto de se perder o “controle”, houve-se a necessidade de quebrar um grande complexo em menores partes de menor complexidade, principalmente para um entendimento mais fácil de quem irá desenvolver e dar manutenção nessas aplicações. Além da quebra em subpartes, houve a necessidade dessas subpartes interagirem entre si, pelos mesmos motivos descritos a cima.

Com isso veio o conceito definido pela UML diagrama de pacotes ou também conhecidos como diagramas de módulos. Esses diagramas têm como conceito agrupadores lógicos de pedaços dos sistemas (nível superior) com dependência entre eles (interação de pacotes), ou seja, pacotes podem depender de outros pacotes. Esses elementos agrupados podem ser diagramas, classes, outros pacotes, entre outros. Os pacotes sempre têm um nome próprio e dentro alguns elementos que são agrupados conforme os tipos de elementos descritos a cima. Na realidade, não existem propriamente diagramas de pacotes em UML, em vez disso, pacotes e relações entre pacotes aparecem noutros diagramas, de acordo com o tipo de pacote:

  • Pacotes de classes (pacotes lógicos) – em diagramas de classes
  • Pacotes de componentes – em diagramas de componentes
  • Pacotes de nós – em diagramas de distribuição
  • Pacotes de casos de utilização – em diagramas de casos de utilização

Existem nos diagramas de pacotes 3 tipos de dependências:

  • Dependências Simples: Uma alteração do pacote destino influencia no pacote origem.
  • Dependências <<access>>: O pacote origem acede a elementos exportados pelo pacote de destino.
  • Dependências <<import>>: O conteúdo público do pacote de destino é adicionado ao pacote de origem.

Existem 3 tipos de visibilidades de elementos dentro dos pacotes:

  • + (público) : visível por todos que importam ou acedem ao pacote.
  • # (protegido): visível só pelos pacotes-filhos (por relação de generalização)
  • – (privado): visível só por outros elementos do pacote.

Concluísse assim que diagramas de pacotes, são agrupadores genéricos de vários elementos vistos nos diagramas UML, tendo em vista deixar as aplicações com uma menor complexidade quebrando esses sistemas em subpartes menores, para uma fase de desenvolvimento mais tranquila, e para futuras manutenções se tornarem mais ágeis e “limpas”. Bem analisado e com o conceito de diagramas de pacotes bem maduro por quem for pensar, levantar os requisitos do sistemas e montar os diagramas possibilita as empresas terem softwares complexos e de fácil desenvolvimento e manutenção, permitindo uma agilidade na correção de bugs e realização de melhorias, aumentando o respeito do software no mercado e possibilitando o aumento de vendas e evitando ter aquele velho conhecido das empresas de softwares, que o código do “fulano” só ele sabe dar manutenção.

 

Pietro Zanandrea

Bando de dados in-Memory, o que muda daqui em diante?

Gordon E. Moore, fez sua profecia, na qual o número de transistores dos chips teria um aumento de 100%, pelo mesmo custo, a cada período de 18 meses” (Wikipédia).

Isso significa que o poder de processamento dos chips praticamente dobraria até hoje. Não se sabe ao certo até quando essa lei ira prevalecer. Mas essa teoria esta presente na evolução do computador e principalmente em relação ao poder de processamento. Peças chaves do computador como processador e memória RAM são influenciadas diretamente (o HD que vem sendo substituído por discos de SSD que se mostram extremamente velozes). Em relação a custo e velocidade a memória RAM tem mostrado uma tendência a tornar-se mais vantajosa em relação a custo beneficio.

Hierarquia de memória Fonte: http://m.eet.com/images/eetimes/2017/01/1331205/Besang01.png

Normalmente as informações estão salvas em discos rígidos, que apresentam grande volume de espaços, porem com uma velocidade muito inferior a memória RAM e processador. Surge então, uma nova proposta tratando-se  de SGDB, banco de dados em memória(IMDB). Tecnologia está que promete acelerar drasticamente o processo.  Os fabricantes de SGDB já mostram-se adaptados a esse nova maneira, mais adiante veremos alguns dos mais conhecidos.

Quando se tem um volume de terabytes e pouco tempo  para analisar?

Trabalhar com mais informações e de forma mais rápida tende sempre a gerar melhores resultados. Velocidade e agilidade são primordiais, imaginem computadores analisando informações para a cura do câncer, ou big datas projetando ações futuras para as ações da empresa, não há tempo para perder ou esperar. Atualmente o volume de dados e informações pode ultrapassar terabytes e analisar estes grandes volumes de informações são fundamentais para a melhor tomada de decisão. Porém, isso pode tomar um tempo que não temos.

No entanto, você deve estar pensando “mas a memória RAM é volátil, não é muito arriscado perder dados?”. Se pensou assim, você está parcialmente certo, a RAM é volátil, ou seja, uma queda de luz, ou simples desligar da máquina poderiam levar seu banco para o espaço. Mas esse é o primeiro problema percebido e o primeiro a ser tratado. Os bancos de dados em memória irão sim utilizar o disco rígido ou memórias flash, para a persistência de dados. É como se um backup estive-se nessa memória permanente porém o processo e execução dos dados ocorre diretamente na RAM. Ai está o ganho de performasse sem correr o risco de perder informação. Dessa forma a utilização dos dados sempre presentes na memória otimiza a performance eliminando o tempo duplo gasto na transferência dos arquivos do banco de dados para o buffer e vice-versa.

Oracle TimesTen In-Memory Database and Oracle In-Memory Database Cache https://docs.oracle.com/cd/E18283_01/timesten.112/e14261/img/findingrecords.gif

 

Mesmo sendo uma tecnologia relativamente nova já existem muitas opções, pagas ou gratuitas. Aqui veremos algumas das mais conhecidas, SAP Hanna, Oracle Database in-Memory, MongoDB

Interessou-se pelo assunto, vamos ver a seguir alguma opções tratando-se de IMDB.

SAP HANA:

Spa é uma empresa alemã que atualmente é uma das maiores referências em gestão empresarial. Através de excelentes frameworks que alinham seus processos eliminando a margem de erro.

Acesse qualquer dado a partir de qualquer dispositivo, transforme os dados em recursos inteligentes. Alta disponibilidade e segurança, com ferramentas de monitoramento e serviços locais ou em nuvem. Capaz de produzir insights valiosos em tempo real.

Recursos oferecidos pelo SAP HANNA são:

  • Serviço de Banco de dados
  • Processamento de funções analíticas
  • Desenvolvimento de app
  • Acesso a dados
  • Administração
  • Segurança

saiba mais em: https://www.sap.com/brazil/product/technology-platform/hana.html

Oracle Database In-Memory:

Atuante em mais de 145 países. Especializada no desenvolvimento e comercialização de hardware e softwares e referencia mundial em banco de dados.

  • Analise de dados em tempo real
  • Dados relevante na velocidade de um toque
  • Centro de serviços para o consumidor
  • Altíssima compatibilidade
  • 100x mais rápido em buscas (Queries)
  • Pronto para a nuvem

Saiba mais em: https://www.oracle.com/GOTO/IN-MEMORY

Mondongo in-memory Storege Engine:

Fundada em 2007 por Dwight Merriman, Eliot Horowitz and Kevin Ryan. É uma tecnologia open source que traz consigo uma ideologia com os seguintes princípios:

  1. pensar grande para ir longe,
  2. fazer é o que importa,
  3. construir em conjunto,
  4. ser intelectualmente honesto e
  5. fazer o que você quer

MongoDB é uma excelente alternativas para banco de dados não relacionais. Seus pontos chaves são:

  • Alta performasse
  • Rica linguagem de busca (Query language)
  • Alta disponibilidade
  • Scalabilidade horizontal
  • suporte para vários mecanismos de armazenamento

Veja como configurar o mongodb para trabalhar in-memory: https://docs.mongodb.com/manual/core/inmemory/

Escolher banco de dados in-memory?

Como acompanhamos no início do artigo, fazer rápido é essencial. E fazer certo é fundamental, aqui acompanhamos ferramentas que de fato influenciam na velocidade e performance com que você pode trabalhar as informações no seu negócio. Analise sempre a situação,  veja qual solução é ideal para sua empresa.

Conheça também outros modelos de banco de dados:

Banco de Dados não relacionais

Banco de dados Relacionais

Tags: Bando dados, imdb, mongodb, oracle, database in-memory, sap hanna

Referencias:

Oracle Database In-Memory – Youtube

A Comparative Study of Main Memory Databases and Disk-Resident Databases F. Raja, M.Rahgozar, N. Razavi, and M. Siadaty

https://www.sap.com/brazil/product/technology-platform/hana.html

https://www.oracle.com/GOTO/IN-MEMORY

https://docs.mongodb.com/manual/core/inmemory/

https://docs.oracle.com/cd/E18283_01/timesten.112/e14261/overview.htm

Autor: João Mello Corrêa