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

NodeJS vs Go

NodeJS vs Golang

Nos dias atuais e na era da informação, se torna cada vez mais fácil ter acesso a um bom conteúdo para estudar e se aperfeiçoar. Isso possibilitou que nós, desenvolvedores, tenhamos uma grande quantidade de tecnologias à nossa disposição para solucionar os problemas corriqueiros de nosso dia a dia. Este texto tem como objetivo comparar duas excelentes tecnologias que empoderam milhões de desenvolvedores ao redor do mundo. Durante este post, irei  abordar diversos pontos que considerei importantes para a escolha de uma stack e espero que talvez, encurte a sua jornada.

O NodeJS é um runtime JavaScript, construído sobre o V8, um motor de renderização, criado pelo Google e considerado por muitos, um dos maiores avanços na engenharia de software, depois do Linux e do Git. Foi criado por Ryan Dahl e apresentado em 2009. É open-source e se tornou o mais popular ecossistema multiplataforma para o desenvolvimento de aplicações. De uma forma sucinta, o V8 transforma o código JavaScript em C++ e realiza sua execução.

O Go ou Golang teve seu início em 2007, originalmente por uma equipe do Google. Em 2009, foi apresentada ao público e lançada como open-source. A equipe core de criação e design da linguagem, são ícones no mundo de desenvolvimento de software. Entre eles estão: Robert Griesemer, Rob Pike e Ken Thompson. A proposta da linguagem foi trazer boa performance, segurança e aumentar a produtividade, sendo uma alternativa ao C++ e ao Java.

NodeJS – Especificações

O NodeJS, como comentando anteriormente foi construído sobre o V8, porém, ele não se limita apenas a isso. Sua arquitetura é complexa, a estrutura principal é composta por 6 módulos distintos, que comunicam-se para permitir que as aplicações sejam executadas. Esses módulos são: V8, Libuv, http-parser, c-ares, OpenSSL e zlib. Podemos ver essa disposição de dependências na imagem a seguir:

Image Source: https://dev.to/khaosdoctor/node-js-under-the-hood-1-getting-to-know-our-tools-1465

Com a utilização de JavaScript, o código é dinamicamente tipado e vem recebendo evoluções conforme novas especificações do Ecmascript são lançadas.

Não podemos falar de Node, sem mencionar que o mesmo é orientado a eventos, assíncrono e não bloqueante. Para organizar isso, utiliza uma thread principal, para que todo o processo do event loop seja controlado. Esse é o motivo de ser chamado de single-threaded, mesmo utilizando worker threads em outros processos.

Ao contrário do que muitos pensam, o NodeJS não compila o código e executa posteriormente, assim como C ou o GO. Os códigos são compilados a tempo de execução, em um processo chamado de JIT (Just-in-time), trazendo grandes benefícios como otimização dos códigos durante a execução do programa.

Go – Especificações

Go ou Golang é uma linguagem de programação procedural e fortemente tipada, com uma sintaxe parecida com C. Apesar de sua tipagem, ela permite que ocorra uma inferência de tipos, no momento da declaração de uma variável, facilitando assim a vida dos programadores. Como comentado anteriormente, ela foi desenvolvida para ser altamente escalável e ter uma curva de aprendizagem menor que o C e o C++. Diferentemente do NodeJS, é uma linguagem compilada, que permite distribuir seus binários.

Por ser uma linguagem relativamente nova, ela foi criada com o intuito de utilizar todos os núcleos de processamento dos CPU’s modernos. Para tornar essa utilização de múltiplos cores mais amigável, foram criadas as Goroutines, que abstraem a necessidade de trabalhar manualmente com as threads.

Mesmo sendo uma linguagem compilada, GO possui um garbage collector, que foi casos de polêmicas em sua utilização em grande escala. Esse garbage collector recebeu muitas melhorias desde então.

Go instaurou uma cultura diferente das demais linguagens, sempre prezando pela simplicidade e procurando ao máximo trazer o máximo de ferramentas em seu core, facilitando assim a vida dos desenvolvedores. Essa abordagem divide opiniões, onde alguns acham que torna-se inflexível e outros acreditam que isso pode prevenir algumas decisões errôneas.

Aplicações das Tecnologias

O NodeJS está em praticamente todos os lugares. Ele é comumente utilizado para realizar a criação de API’s, com express, é utilizado em projetos React, é utilizado em aplicações desktop multiplataforma através do Eletron, é utilizado em aplicativos móveis através do React Native e também pode ser utilizado em aplicações embarcadas.

GO é geralmente utilizado para construir API’s, scripts e aplicações embarcadas. É bem versátil e tem diversas bibliotecas para a utilização em interfaces para aplicações desktop. Por se tratar de algo criado e desenhado para rodar em servidores, não é suportada na Web, apesar de ter iniciativas executando através do WebAssembly.

Curva de Aprendizado

Todo e qualquer desenvolvedor, nos dias atuais, precisa saber o básico de JavaScript, com isso, ao meu ver, a curva de aprendizagem do NodeJS é menor. Porém, GO é muito simples, possui uma boa documentação e desenvolvedores originalmente de linguagens como: Java, C#, C e C++, tem grandes facilidades na evolução.

Ferramental Disponível e Gerenciamento de Dependências

O gerenciamento de pacotes do Go é infinitamente superior ao do NodeJS. Golang cria uma pasta no repositório local do usuário, e mesmo que múltiplos projetos utilizem as mesmas dependências, elas são armazenadas uma única vez. Poupando muito espaço se compararmos com o node_modules, que requer que as dependências fiquem na mesma pasta do package.json.

Quanto ao ferramental de desenvolvimento, tanto um quanto o outro é possível escolher seu editor de código favorito, atualmente os principais dão suporte a linguagem. Existem também IDEs construídas por empresas como a JetBrains para ambas as tecnologias. 

Usando como base o Visual Studio Code, o GO se destaca em possuir um Linter que é instalado e configurado automaticamente ao iniciar um arquivo da respectiva extensão. Isso facilita bastante, pois tudo é baixado diretamente pelo editor e requer apenas uma extensão. No NodeJS para termos um bom linter, é necessário baixar a extensão e configurar manualmente os arquivos no projeto.

Em questão de bibliotecas, o NodeJS tem uma grande vantagem, tendo uma comunidade maior, com mais variedade e possuindo inúmeros projetos open source maduros, bem codificados e consolidados. GO tem uma comunidade em constante crescimento, e cada vez mais, novas bibliotecas são criadas e disponibilizadas no Github.

NodeJS tem frameworks muito populares e maduros, como Express, NestJS, LoopBack, etc. Enquanto o GO possui frameworks com uma popularidade menor, porém, muito eficientes, como o GIN, Fiber, etc.

Mercado

O mercado de tecnologia como um todo está bem aquecido. Para ambas as linguagens, existem bastante vagas em aberto, a diferença existe na busca de perfil, onde as vagas para GO, buscam geralmente pessoas com mais experiência na área. Isso não quer dizer que não existam vagas, para Junior, porém, se compararmos com o NodeJS, esse número é menor.

Quanto a empresas que utilizam determinada tecnologia, para o NodeJS podemos citar, Uber, Netflix, Paypal, Trello e muitas outras. O GO também está tendo uma rápida adoção e já temos casos de uso no Mercado Livre, Twitch, SendGrid, Dropbox e o próprio Google. Também vale salientar que o Docker, Kubernetes e o Terraform são construídos nesta tecnologia.

Performance

Para comparar a performance, me baseei em dados do TechEmpower, um dos mais renomados benchmarks, com os testes mais efetivos e em diversos segmentos. No atual momento que escrevo este texto, o Round é o 19.

Acredito que um dos testes mais relevantes são os de Data Updates, onde é bem perceptível que os frameworks Go, tem grande vantagem:

Desconsiderando o es4x, que é o JavaScript rodando no Vert.x, os frameworks escritos em GO dominam o ranking da posição 2 à 20, aparecendo sutilmente o Fastify.

Em outro cenário, realizando múltiplas requisições no banco de dados, podemos perceber novamente que o Go tem uma grande vantagem:

Também dominando as 20 primeiras posições do ranking, desconsiderando novamente o es4x.

Conclusão

O GO tem claramente um melhor gerenciamento de dependências, mais performance e está em um mercado ascendente, onde aqueles que se aventurarem em seu profundo entendimento, poderão colher bons frutos. Porém, é recomendado para equipes mais maduras, que tenham a capacidade de manter uma arquitetura de microsserviços e as aplicações Frontend desacopladas. 

NodeJS tem um mercado maior, com uma curva de aprendizado menor e possibilita que desenvolvedores possam atuar em diferentes partes da arquitetura, sem ter que aprender uma nova tecnologia. Tem uma performance aceitável e uma quantidade de frameworks e bibliotecas exuberante.

Ao comparar duas tecnologias, a ideia não é definir qual é a melhor e sim explanar as diferenças para que a escolha seja a mais adequada para um determinado contexto.

Autor: Francisco Felipe de Lima.

Fonte de referências:

https://productcoalition.com/reasons-why-golang-is-better-than-other-programming-languages-4714082bb1b1#:~:text=Golang%20emerged%20as%20an%20alternative,scalable%20servers%20and%20software%20systems.

https://www.geeksforgeeks.org/golang/?ref=lbp

https://www.quora.com/What-kind-of-applications-or-software-can-you-make-with-Golang

https://github.com/gofiber/fiber

https://medium.com/@blogger.ashishsharma/golang-vs-node-js-comparison-and-why-developers-prefer-node-js-9e669319df52

https://dev.to/khaosdoctor/node-js-under-the-hood-1-getting-to-know-our-tools-1465

https://blog.bitsrc.io/the-jit-in-javascript-just-in-time-compiler-798b66e44143

https://blog.gopheracademy.com/advent-2018/go-in-the-browser/

https://docs.gofiber.io/benchmarks https://www.techempower.com/benchmarks/

Arquitetura Serverless: O que você precisa saber

logo serverless framework

Você já imaginou executar suas funções de backend sem possuir um servidor? A arquitetura serverless nos permite essa facilidade.

No entanto, como o nome da arquitetura sugere (serverless, do inglês, sem servidor), existe sim um servidor executando tais funções, ele somente não é gerenciado por você, mas pela plataforma cloud  no modelo FaaS (Function as a Service) que você irá utilizar, como por exemplo Amazon Web Services (AWS), Microsoft Azure, Google Cloud, entre outras. Com isso, evita-se a configuração de servidores complexos e/ou ambientes isolados como os containers.

Surgimento

A origem da hospedagem de recursos de computação em cloud não iniciaram a partir do serverless. Inicialmente, possuia-se três formas de aplicar serviços de computação em nuvem, sendo eles:

  • IasS (Infrastructure as a Service): Permite ao usuário selecionar um conjunto de recursos específicos para sua aplicação, e a partir disso, configurá-la de acordo com sua necessidade.
  • PaaS (Platform as a Service): Conta com os recursos da IaaS – servidores, armazenamento e rede – e acrescenta o acesso a ferramentas de gerenciamento da aplicação, como por exemplo, IDE’s, SGBD’s e middlewares.
  • SaaS (Software as a Service): Proporciona o acesso a um software completo dentro de um datacenter do provedor escolhido, incluindo a camada de apresentação da aplicação.

Todas essas estruturas possuem um valor mensal de acordo com o provedor de serviços, que nos garantem alta disponibilidade e segurança dos dados, tanto para os detentores da aplicação quanto para os usuários finais, além da escalabilidade.

Mas afinal, o que é serverless?

O serverless é uma arquitetura que utiliza como padrão o modelo FaaS, que consiste em executar funções como serviço, ou seja, as funções de nossos códigos são armazenadas na nuvem e executadas individualmente, sem necessidade de um datacenter privado executando sua camada de processamento de dados. No entanto, o serverless  não possuí somente o modelo de funções como serviço, existe também o modelo BaaS (Backend as a Service) como por exemplo o Google Firebase, que possibilita a criação da infraestrutura de dados e execução de códigos, comumente utilizados para autenticação de usuários de forma simples e segura. Além deste, temos o modelo CasS (Containers as a Service) que tem como objetivo a utilização de um container de baixo custo na nuvem, sem necessidade de um datacenter.

Como funciona e quanto custa?

Cada provedor possui seu próprio recurso de execução de códigos, como por exemplo, o AWS Lambda, o Google Cloud Functions ou o Azure Automation. Suas funções são hospedadas gratuitamente nos provedores de cloud, e o valor é variado de acordo com o número de execuções e/ou tempo de execução da função, o exemplo abaixo é disponibilizado pela AWS deixando mais evidente o calculo de custo.

calculo de custo aws lambda
Exemplo de cálculo para cobranças mensais (AWS)

Onde e como utilizar?

Tendo em vista a utilização do modelo FaaS, podemos utilizar o serverless como um facilitador para nossas aplicações, sendo recomendado para execução de funções assíncronas, ou seja, funções que podem ser executadas sem impedir a navegabilidade do usuário ou que consumam muito processamento de dados no servidor comum. Por exemplo, o envio de um e-mail, o upload de uma imagem ou a geração de um relatório. O serverless possui uma ótima sinergia com a estrutura de microsserviços, onde há facilidade ao mover uma funcionalidade específica para a arquitetura serverless. Um ponto a ser considerado, antes de começar a utilizar deste modelo, é se a função possui um objetivo bem definido e não causa um grande impacto na aplicação, pois estas funções são stateless, ou seja, não armazena seu estado. A cada execução a função será reconstruída do zero, sem considerar os dados já processados anteriormente.

Serverless framework

O framework Serverless é um framework web gratuito e de código aberto, escrito em Node.js o que facilita o desenvolvimento de funções como serviço. Serverless é o primeiro primeiro framework que foi originalmente desenvolvido para construir aplicações exclusivamente na AWS Lambda. Atualmente, aplicações desenvolvidas com o framework Serverless podem ser entregues e publicadas em outros provedores de funções como serviços, conforme consta no site do framework.

Vantagens

  • Não existe a necessidade de configuração de um servidor dedicado;
  • Os valores disponibilizados pelos provedores atuais são extremamente baratos;
  • Suas funções são auto escaláveis não importando o consumo;
  • A realização do deploy é muito simples, e existem ferramentas que automatizam isso.

Desvantagens

  • Ao possuir grande intervalo de tempo entre execuções podem ocasionar perda de performance;
  • O custo pode ficar muito alto caso suas funções demorem cerca de 300 segundos, sendo este o limite de tempo de execução.
  • Execução de testes e debug é extremamente difícil;
  • A utilização em conjunto com aplicações que possuem execuções constantes pode aumentar consideravelmente o custo.

Concluindo

O cenário atual de desenvolvimento está cada vez mais suscetível à mudança das arquiteturas tradicionais para serviços em cloud, sendo necessário uma série de adaptações de códigos. Com isso, fica visível a utilidade da arquitetura serverless, levando em conta a sua facilidade de implantação utilizando o Serverless framework.

Autor: Mateus Catel.

Links Relacionados

https://blog.rocketseat.com.br/serverless-nodejs-lambda/

https://www.riuni.unisul.br/bitstream/handle/12345/8450/TCC-FINAL-COM-ASSINATURAS.pdf

https://read.acloud.guru/six-months-of-serverless-lessons-learned-f6da86a73526

https://www.youtube.com/watch?v=FaybjGx3uQI

https://www.serverless.com/

https://aws.amazon.com/pt/lambda/

Clusterização de dados K-Means na biblioteca scikit-learn

A clusterização de dados é uma técnica que visa fazer agrupamentos automáticos de dados, levando em consideração o grau de semelhança, tem por objetivo agrupar através de aprendizado não supervisionado casos de uma base em k grupos, também denominados clusters, a classificação de dados surgiu com a necessidade de separar os dados em determinados grupos com semelhanças de atributos.

Existem diferentes formas de realizar a clusterização de dados, o scikit-learn por exemplo, é uma biblioteca para a linguagem python que disponibiliza de vários algoritmos para clusterização de dados, um dos mais conhecidos é o algoritmo K-Means.

Antes de iniciar a exemplificação do funcionamento do algoritmo, deve-se compreender alguns termos.

  • Cluster: Cluster ou grupos, são grupos de entidades com as mesmas características.
  • Centroide: Podemos definir centroide como centro de cada cluster/grupo.
  • Ponto: Ponto pode ser definido como um conjunto de dados.

Algoritmo K-Means

Este algoritmo é capaz de realizar o treinamento de um modelo para fazer o agrupamento de objetos, ele trabalha com processos de similaridade, ou seja, a principal ideia é encontrar itens semelhantes um com os outros, e mais distintos possíveis dentre os membros de outros clusters/grupos de acordo com seus atributos.

Funcionamento do algoritmo K-Means

O funcionamento do algoritmo é composto por cálculos de distância e média dos pontos até os centroides para poder definir uma posição clara entre os grupos. Vamos representar o funcionamento do algoritmo em 3 passos:

1° Passo: Inicializar os centroides de forma aleatória:

O algoritmo inicia os centroides de forma aleatória, começando de uma ponta até o centro do cluster, de acordo com que o algoritmo é executado.

Figura 1 – Inicialização dos centroides

2° Passo: Para cada ponto na base de dados, calcular a distância para cada centroide e associar ao que estiver mais perto:

Neste passo o algoritmo visa calcular para cada ponto na base de dados a distância entre todos os centroides, ao realizar o cálculo de distância, o algoritmo atribui o ponto ao centroide que possuir uma menor distância.O cálculo de distância é executado para todos os pontos mais de uma vez, em conjunto com os próximos passos, e cada ponto pode pertencer a um cluster diferente conforme o refinamento dos processos do algoritmo.

Figura 2 – Cálculo da distancia entre os centroides

3° Passo: Cálculo da média dos pontos relacionados a cada centroide, definição de um novo centroide (repetição das etapas 2 e 3):

Nesta etapa é realizado o cálculo da média dos pontos ligados aos seus respectivos centroides, o cálculo da média é feito para definir uma nova posição do centroide, em conjunto com isso é realizado um processo repetitivo entre as etapas 2 e 3 para poder fazer a nova definição dos centroides, com objetivo de direcioná-los mais ao centro do cluster, e será realocado os pontos que estiverem mais próximos de outros clusters. O algoritmo finaliza o processo quando não possuir mais elementos para fazer a atualização.

Figura 3 Cálculo da média dos pontos em cada centroide

Exemplo de utilização do K-Means

Visando um cenário em que os dados são de um grupo de pessoas com os respectivos salários e idades, temos uma base populada de dados em que os grupos/clusters estão misturados, para realizar a clusterização destes dados pode-se aplicar três os passos do algoritmo.

Primeiramente deve-se inicializar os centroides.

Figura 4 Inicialização dos centroides

Após a inicialização temos o processo de realizar o cálculo de distância e atribuir os pontos aos respectivos centroides.

Figura 5 – Cálculo de distancia e atribuição de pontos aos centroides

Por fim são calculadas as médias dos pontos relacionados a cada centroide, redefinido a posição dos centroides e executados os passos 2 e 3 até finalizar o algoritmo.

Figura 6 – Cálculo de médias e redefinição dos centroides

Assim tem-se as pessoas com mais idade e um melhor salário representadas pela cor azul, pessoas com mais idade e um baixo salário representadas na cor vermelha, e pessoas novas com um baixo salário representadas na cor verde.

K-Means na prática

Primeiramente é necessário importar a biblioteca.

from sklearn.cluster import KMeans import numpy as np

A implementação mais básica do k-means que contém um vetor [X] que contém os pontos amostrados. O objetivo é classificar os pontos amostrados em clusters indicados pela variável K.

X = np.array([[1, 2], [1, 4], [1, 0],[4, 2], [4, 4], [4, 0]]) kmeans = KMeans(n_clusters=2, random_state=0).fit(X) kmeans.labels_
array([0, 0, 0, 1, 1, 1])
kmeans.predict([[0, 0], [4, 4]])
array([0, 1])
kmeans.cluster_centers_
array([[1., 2.], [4., 2.]])

CONCLUSÃO

Compreender o processo de um algoritmo de clusterização de dados que atua através de aprendizado não supervisionado, nos permite atingir resultados mais precisos.

O funcionamento do algoritmo foi apresentado por meio dos passos, para melhor entender a estrutura em que o algoritmo K-Means trabalha, e facilitar a visualização da modificação na estrutura dos dados.

Para implementar o algoritmo em um sistema, pode ser necessário a integração com outras bibliotecas, que possibilitam a criação e visualização de novas funcionalidades.

REFERÊNCIAS

https://lamfo-unb.github.io/2017/10/05/Introducao_basica_a_clusterizacao/

https://www.alura.com.br/artigos/agrupando-dados-com-python

https://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/sagemaker-dg.pdf#algo-kmeans-tech-notes

https://www.devmedia.com.br/data-mining-na-pratica-algoritmo-k-means/4584

Autor: Guilherme Zimmer De Gasperi

Criação de chatbot com Watson Assistent

Chatbot

Chatbot, ou assistente pessoal, é um programa de inteligência artificial, que busca simular uma conversa entre dois humanos, e surgiu pela necessidade de as pessoas quererem interagir com os computadores utilizando a linguagem natural, sendo através da fala ou da escrita.

Para facilitar este processo, existem plataformas específicas para a criação de chatbots, que facilitam e automatizam este processo, muitas vezes sem tornar necessário o conhecimento de programação e técnicas de inteligência artificial, um exemplo deste formato de plataforma é o Watson Assistent da IBM.

O Watson Assistent utiliza tecnologias como a PLN para extrair informações de textos, como a intenção (intent) e entidades (entity), ele disponibiliza um dashboard web para realizar a configuração do assistente, e também possui uma API que permite o desenvolvimento de aplicações personalizadas para a interação com o usuário.

Conceitos

O foco deste artigo será apresentar os conceitos básicos para criar um chatbot, e demonstrar os passos para a criação de um fluxo de conversa pelo Watson Assistent, sendo assim este trabalho não irá se ater aos quesitos mais técnicos, envolvendo técnicas de inteligência artificial, que realizam o processamento da linguagem natural e a classificação.

Antes de começar a configurar o chat, é importante compreender alguns conceitos que serão necessários para criar o fluxo de conversa.

  • Intenções

Uma intenção é um objetivo expresso nas informações de um cliente, por exemplo, se um chatbot ajuda os usuários a lidar com despesas, as intenções seriam coisas como “visualizar x (valor devido)”, “pagar y (fatura)” e “cancelar z (conta)”. Ao reconhecer a intenção expressa na entrada de um cliente, o serviço de Assistência escolhe o fluxo de diálogo correto para responder a ele.

  • Entidades

Uma entidade representa uma classe de objeto ou um tipo de dados que é relevante para a finalidade de um usuário. Ao reconhecer as entidades mencionadas na entrada do usuário, o serviço de Assistência pode escolher as ações específicas a serem executadas para cumprir uma intenção.

As entidades são também a maneira do Watson lidar com partes significativas de uma entrada que deve ser usada para alterar a maneira como responde à intenção. Por exemplo, caso o chatbot tenha questionado ao usuário em qual cidade ele mora, seria aguardado como resposta uma entidade do tipo cidade, sendo assim a reposta poderia parecer com algo do tipo “Eu moro em São Paulo”, neste caso “São Paulo” seria a entidade reconhecida.

  • Diálogo

O diálogo é onde será configurado todo o fluxo da conversa, e permear a maneira que o chatbot irá interagir com o usuário. A caixa de diálogo existente no dashboard do Watson é configurada como uma árvore lógica com muitas condições “se houver”. Cada intenção inicia um nó à esquerda e a lógica flui de cima para baixo através de suas intenções. Se uma determinada intenção é acionada por um enunciado, seu nó é aberto e a lógica continua para as entidades.

Criando o chatbot

A seguir será apresentado os passos para a implementação do chatbot, para poder replicar esta implementação, será necessário possuir uma conta na IBM Clound,  e criar uma nova instância do Watson Assistent.

Para a configuração do chatbot será utilizado como contexto uma loja de roupas, que possui uma filial em Caxias do Sul e outra em Porto Alegre, com horários de funcionamento diferentes, e o robô irá responder o horário de funcionamento de cada uma das lojas.

Configurando as intenções

A primeira parte será criar uma Intent, neste ponto será necessário informar um nome, que posteriormente servira como uma forma de identificar a intenção, e também uma descrição, para facilitar a compreensão de seu funcionamento. Para o exemplo atual, a intent se chamara “#horarios”.

A screenshot of a social media post

Description automatically generated
Figura 1 – Configuração de intent

Agora devem ser inseridos os exemplos de frases ou palavras que podem ser inseridos pelo usuário, e que devem representar esta intent. Para o exemplo de “#horarios” pode ser “Qual o horário de funcionamento?” e também “Horário de funcionamento”, o recomendado pela IBM é de no mínimo 5 exemplos, pois com mais exemplos, é maior a probabilidade do algoritmo identificar a intenção, esses exemplos devem ser preferencialmente únicos entre as intenções, para permitir uma classificação mais especifica e precisa.

Vale ressaltar que o algoritmo utilizado não irá classificar somente frases iguais aos exemplos, e sim aquelas que possuem uma semântica parecida, tornando necessário a utilização de frases diferentes, variando as palavras e maneira de escrever.

Figura 2 – Exemplos de intent

Configurando as entidades

Para responder à questão anterior, será necessário que o robô identifique a cidade da loja em questão, para isto é necessário uma entity de cidades, permitindo identificar a qual loja o usuário está se referindo.

O primeiro passo será informar o nome da entity, que assim como a intent, servirá para identificar a entidade posteriormente, para o exemplo atual a entity se chamara “@cidade”. Também será necessário a informação dos valores para esta entidade, que neste caso será “Caxias do Sul” e “Porto Alegre”.

Figura 3 – Configuração de entity

É possível a inserção de sinônimos e padrões para a identificação da entity, para a opção de padrões ou petterns, são utilizados regex, que são comumente utilizados para obter valores numéricos ou e-mails. No exemplo atual será utilizado somente os sinônimos, e isto se torna bastante útil para cidades, pois “Caxias do Sul” por exemplo, é normalmente referenciada somente como “Caxias”, já “Porto Alegre” pode ser chamada de “POA”, e sem estes sinônimos se torna inviável para o robô identificar a entidade.

A screenshot of a cell phone

Description automatically generated
Figura 4 – Configuração de sinônimos de entity

Configurando o diálogo

Com as intenções e entidades definidas, já é possível criar o diálogo. Para esta etapa existe uma grande variedade de opções, e elas variam de acordo com a aplicação, então para não se aprofundar em cada uma destas opções, será focada apenas nas que serão utilizadas para a proposta atual.

Por padrão, já existem dois nodos, ou nós, um para as mensagens iniciais, como “Olá” ou “Boa Tarde”, e o outro para quando o robô não compreende uma das intenções do usuário, eles podem ser utilizados como base para os futuros nodos.

Para o diálogo dos horários, primeiro será necessário criar um nodo, isso pode ser feito clicando em “Add node” conforme a figura abaixo.

Figura 5 – Criação de novos nodos de diálogo

 O próximo passo é configurar o nodo, para isto basta clicar sobre ele. O primeiro campo é seu nome, que pode ser de acordo com o diálogo que ele representa, depois deve ser configurado a condição para que caia neste diálogo, para este exemplo é a intent “#horarios”.

Figura 6 – Configuração do nodo de diálogo

Para a próxima configuração deve ser acessado a opção de customização no nodo, acessível pelo botão “Customize”, conforme aparece na imagem anterior. A opção “Slots” deverá ser ativada, isto fara com que o usuário fique preso no nodo em questão, enquanto não fornecer a informação necessária, no caso, a cidade da loja.

Figura 7 – Configuração de Slot de conversa

Esta opção fara com que libere um novo campo de configuração para o nodo, que é onde deverá ser informado qual a condição de saída do nodo.

Figura 8 – Campos para checagem de slot de conversa

Para a configuração desta checagem deverá ser acessado a opção de customização do slot, acessível pelo botão com símbolo de engrenagem, conforme aparece na figura anterior. A primeira opção a ser configurada, é o valor que deverá ser checado, no caso, é a entidade de cidades, a opção “Save it as”, é o nome da variável de contexto em que o valor detectado deverá ser salvo.

Abaixo das opções anteriores deverá ser configurado uma mensagem de texto para quando a mensagem não atende a condição, que neste caso é o questionamento sobre a cidade da loja, aqui podem ser inseridas mais que uma mensagem, e elas poderão ser enviadas tanto de maneira sequencial, quanto randômica.

Figura 9 – Configuração inicial de slot de conversa

Por último deverá ser configurado a mensagem final de acordo com a cidade escolhida pelo usuário, esta configuração fica logo abaixo das configurações anteriores. Deverá ser inserido uma condição para cada cidade, conforme os campos a esquerda, e a direita deve ser informado o texto de resposta de acordo com a condição.

Figura 10 – Mensagens finais de horários de funcionamento

Testando o chatbot

Com a execução dos passos anteriores já é possível realizar o diálogo proposto, para testar o que foi implementado, é possível utilizar o chat integrado do Watson Assistent, acessível no botão “Try it”.

Figura 11 – Chat para teste da configuração

Será apresentado um chat com o input de mensagem, onde pode ser enviado mensagens, simulando a ação do cliente. A resposta será de acordo com o que foi configurado até então, além de trazer as informações detalhadas do que foi identificado. Nas figuras a seguir é possível visualizar o resultado da conversa com o chatbot recém criado.

Figura 12 – Mensagem inicial para o chatbot
Figura 13 – Resposta final do chatbot

Conclusão

Os passos para a criação de chatbots apresentados aqui são específicos para a plataforma Watson Assistent, porém conceitos como Intent e Entity, são aplicáveis para outras plataformas do mercado. Os exemplos citados são de junho de 2020, e é possível que alguns aspectos e nomenclaturas alterem com o tempo, pois a plataforma sofre constantes alterações para sua melhoria.

O fluxo de conversa utilizado como exemplo é relativamente simples, e possui um objetivo acadêmico, buscando apresentar uma visão geral da plataforma. Para aplicações reais é comum que se utilize um número maior de intent, entity, e diálogos, assim como configurações mais complexas.

Para aplicações reais pode se tornar necessário também, a integração do chatbot com outros sistemas, permitindo a criação de novas interfaces, desenvolvimento de lógicas mais complexas e consumir dados do próprio sistema.

REFERÊNCIAS

https://cloud.ibm.com/docs/assistant?topic=assistant-getting-started

https://medium.com/ibmdeveloperbr/watson-assistant-como-criar-o-seu-chatbot-usando-skills-e-assistants-755b4677984b

https://ibm.com/cloud/watson-assistant/

https://www.ibm.com/watson/how-to-build-a-chatbot

https://www.devmedia.com.br/chatbot-ibm-watson/40166

https://medium.com/ibm-garage/designing-a-chatbot-with-ibm-watson-assistant-7e11b94c2b3d

https://repositorio-aberto.up.pt/bitstream/10216/119703/2/332692.pdf

Autor: João Pedro Kaspary

Utilização de NodeMCU em projetos IoT

Desde o princípio a tecnologia vem passando por crescente transformação. O que antes eram computadores gigantes que ocupavam salas inteiras apenas para fazer simples cálculos, se transformou em dispositivos indispensáveis para o dia-a-dia. São eles: celulares, notebooks, o computador de bordo do carro, a TV smart, o aspirador de pó inteligente, entre muitos outros. Esta grande massa de dispositivos geralmente está conectada à internet. Mas você já parou para pensar como isso funciona? Quais dispositivos podem ser conectados? Eu posso montar um projeto IoT? Aí está mais uma palavra que ouvimos muito hoje em dia. IoT significa Internet of Things (Internet das Coisas), que podemos entender como coisas conectadas na internet.

Já é possível termos um sistema de aquecimento que altera a temperatura de acordo com o clima, ou um medidor que avisa quando o gás está acabando. Para você que gosta de tecnologia, assim como eu, e quer conectar seu projeto na internet, este post é para você. Vamos falar sobre uma placa chamada NodeMCU, que pode ser conectada no Wi-Fi e é de fácil usabilidade.

O que é?

Antes de falar sobre a NodeMCU precisamos entender o que é módulo ESP-8266. Este módulo é fabricado pela Espressif Systems e contém vários elementos poderosos como CPU, RAM e Wi-Fi. A parte ruim é que para utilizá-lo, você precisa programá-lo enviando comandos com instruções de máquina de baixo nível. É aí que entra a NodeMCU.

A NodeMCU (Node MicroController Unit) é uma placa, criada para facilitar o desenvolvimento com o módulo ESP-8266. Ela já possui vários componentes que facilitarão sua vida: reguladores de tensão, leds, botão de reset, interface Serial-USB. Além disso, é possível fazer upload de sketchs do Arduino.

Como a placa tem acesso à internet, é possível fazer OTA (Over the Air) Upload, o que significa que você pode utilizar a rede Wi-Fi para atualizar o firmware da NodeMCU.

Abaixo, as principais características:

  • Processador ESP8266-12E
  • Arquitetura RISC de 32 bits
  • Processador pode operar em 80MHz / 160MHz
  • 4Mb de memória flash
  • 64Kb para instruções
  • 96Kb para dados
  • Wi-Fi nativo padrão 802.11b/g/n
  • Opera em modo AP, Station ou AP + Station
  • Pode ser alimentada com 5VDC através do conector micro USB
  • Possui 11 pinos digitais
  • Possui 1 pino analógico com resolução de 10 bits
  • Pinos digitais, exceto o D0, possuem interrupção, PWM, I2C e one wire
  • Pinos operam em nível lógico de 3.3V
  • Pinos não tolerantes a 5V
  • Possui conversor USB Serial integrado
  • Programável via USB ou WiFi (OTA)
  • Compatível com a IDE do Arduino
  • Compatível com módulos e sensores utilizados no Arduino

Como utilizar?

A utilização da NodeMCU é muito simples. Neste exemplo vamos utilizar o Platform.IO, que é uma plataforma para desenvolvimento de dispositivos embarcados. Antes de utilizar, você precisará instalar o Visual Studio Code, que é uma IDE muito utilizada hoje em dia por desenvolvedores. Aqui você encontra o passo a passo para instalar em seu computador.

Utilizando como Access Point

Um access point (ponto de acesso) é um dispositivo de rede usado no qual podemos nos conectar como se fosse um roteador wi-fi. Para utilizar a NodeMCU dessa maneira, precisaremos de duas bibliotecas: ESP8266WiFi.h e ESP8266WebServer.h. Por padrão, no Platform.io estas libs já estão instaladas.

Segue um código de exemplo que comanda dois leds de cores diferentes por meio de uma página web disponibilizada pelo access point da NodeMCU:

#include "Arduino.h"
 
#include "ESP8266WiFi.h"
#include "ESP8266WebServer.h"
 
#define PIN_LED_GREEN D4
bool ledGreenIsOn = false;
 
#define PIN_LED_RED D5
bool ledRedIsOn = false;
 
// declare server with port 80
ESP8266WebServer server(80);
 
// server main page html
const char serverPage[] PROGMEM = R"=====(
  <html>
    <button onclick="toggleLed('green')">
    toggle GREEN led
    </button>
    
    <button onclick="toggleLed('red')">
    toggle RED led
    </button>
 
    <script>
        function toggleLed(led) {
        console.log(`toggle led ${led}`);
 
        fetch("/toggleLed", {
            method: 'POST',
            headers: {
            "Content-Type": "application/x-www-form-urlencoded"
            },
            body: `led=${led}`
        });
        }
    </script>
  </html>        
)=====";
 
void setup()
{
    Serial.println(115200);

    Serial.println("init wi-fi ap mode...");
 
    // init pins
    pinMode(PIN_LED_GREEN, OUTPUT);
    pinMode(PIN_LED_RED, OUTPUT);
 
    // set wifi mode
    WiFi.mode(WIFI_AP);
 
    // define wifi configs
    IPAddress ip(10, 0, 0, 1);
    IPAddress gateway(10, 0, 0, 254);
    IPAddress subnet(255, 255, 255, 0);
 
    // set wifi configs
    WiFi.softAPConfig(ip, gateway, subnet);
 
    // init access point
    bool result = WiFi.softAP("My Network", "12345678");
 
    Serial.printf(result ? "Ready" : "Failed");
    Serial.println(WiFi.softAPIP());
 
    // define server routes
    server.on("/", HTTP_GET, []() {
        server.send(200, "text/html", serverPage);
    });
 
    server.on("/toggleLed", HTTP_POST, []() {
        String led = server.arg("led");
 
        Serial.println("toggle led \"" + led + "\"");
 
        uint8_t pinLed;
        bool state = false;
        if (led == "green")
        {
            pinLed = PIN_LED_GREEN;
            ledGreenIsOn = !ledGreenIsOn;
            state = ledGreenIsOn;
        }
        else if (led == "red")
        {
            pinLed = PIN_LED_RED;
            ledRedIsOn = !ledRedIsOn;
            state = ledRedIsOn;
        }
 
        digitalWrite(pinLed, state);
 
        server.send(200, "application/json", "{\"ok\":true}");
    });
 
    // init server
    server.begin();
}
 
void loop()
{
    server.handleClient();
}

Utilizando como Station

O modo station faz com que a NodeMCU se comporte como um outro dispositivo (celular, computador etc) conectado na rede. Assim é possível, por exemplo, fazer requisições HTTP para um servidor hospedado na web.

No exemplo vamos utilizar um LDR (Light Dependent Resistor). Segue o esquema se você quiser montar com sua NodeMCU:

O código de exemplo irá, a cada segundo, fazer uma requisição enviando a intensidade de luz no local:

#include "Arduino.h"
 
#include "ESP8266WiFi.h"
#include "ESP8266WiFiMulti.h"
#include "ESP8266HTTPClient.h"
 
#define PIN_LDR A0
 
ESP8266WiFiMulti wiFiMulti;
HTTPClient http;
 
void setup()
{
    Serial.println(115200);
 
    Serial.println("init wi-fi station mode...");
 
    // init pins
    pinMode(PIN_LDR, INPUT);
 
    // set wifi mode
    WiFi.mode(WIFI_STA);
 
    // connect to wi-fi network
    wiFiMulti.addAP("<network ssid>", "<network password>");
 
    // wait for connection
    int count = 0;
    while (wiFiMulti.run() != WL_CONNECTED)
    {
        Serial.print(".");
        delay(500);
 
        if (count >= 20)
        {
            Serial.println("wi-fi connection time out");
            return;
        }
 
        count++;
    }
 
    Serial.print("\nConnected as ");
    Serial.println(WiFi.localIP());
}
 
void loop()
{
    // run every 1000 miliseconds
    if (millis() % 1000 == 0)
    {
        int ldrValue = analogRead(PIN_LDR);
        float lightPercentage = 100 / 1024 * ldrValue;
 
        if (WiFi.isConnected())
        {
            String url = "<api end-point>";
 
            // init url
            http.begin(url);
 
            Serial.println("[HTTP] begin in " + url);
 
            // add headers
            http.addHeader("Content-Type", "application/json");
 
            // define json body
            String body = "";
            body += "{";
            body += "\"lightPercentage\": " + String(lightPercentage) + ",";
            body += "}";
 
            Serial.println("[HTTP] request body: " + body);
 
            // make http post
            int httpCode = http.POST(body);
 
            if (httpCode > 0)
            {
                Serial.println("[HTTP] POST " + String(httpCode));
 
                String response = http.getString();
                Serial.println("[HTTP] response: " + response);
            }
            else
            {
                Serial.println("[HTTP] POST failed, error: (" + String(httpCode) + ") " + http.errorToString(httpCode));
            }
 
            // end http
            http.end();
        }
        else
        {
            Serial.println("wi-fi not connected");
        }
    }
}

Considerações finais

A NodeMCU é uma excelente opção para ser utilizada em um projeto que necessita acesso à internet. A utilização é muito simples, o que proporciona um desenvolvimento bastante ágil. O preço médio fica um pouco acima o que um Arduino ou outra placa semelhante, mas o valor agregado do produto supera o seu preço.

Fontes

CURVELLO, André. Apresentando o módulo ESP8266. Embarcados. Disponível em: <https://www.embarcados.com.br/modulo-esp8266>. Acesso em 20 de junho de 2020.

GARRETT, Filipe. O que é access point? Veja para que serve o ponto de acesso de Wi-Fi. Embarcados. Disponível em: <https://www.techtudo.com.br/noticias/2018/06/o-que-e-access-point-veja-para-que-serve-o-ponto-de-acesso-de-wi-fi.ghtml>. Acesso em 20 de junho de 2020.

MURTA, Gustavo. NodeMCU – ESP12: Guia completo – Introdução (Parte 1). Blog Eletrogate. Disponível em: <https://blog.eletrogate.com/nodemcu-esp12-introducao-1>. Acesso em 20 de junho de 2020.

OLIVEIRA, Greici. NodeMCU – Uma plataforma com características singulares para o seu projeto ioT. Embarcados. Disponível em: <https://blogmasterwalkershop.com.br/embarcados/nodemcu/nodemcu-uma-plataforma-com-caracteristicas-singulares-para-o-seu-projeto-iot>. Acesso em 20 de junho de 2020.

YUAN, Michael. Conhecendo o NodeMCU e sua placa DEVKIT. IBM. Disponível em: <https://www.ibm.com/developerworks/br/library/iot-nodemcu-open-why-use>. Acesso em 20 de junho de 2020.

ESP8266. Espressif. Disponível em: <https://www.espressif.com/en/products/socs/esp8266/overview>. Acesso em 20 de junho de 2020.

Sensor de Luminosidade LDR 5mm. Filipe Flop. Disponível em: <https://www.filipeflop.com/produto/sensor-de-luminosidade-ldr-5mm>. Acesso em 20 de junho de 2020.

Como a tecnologia impacta nossas vidas?. Toikos Blog. Disponível em: <http://toikos.com.br/blog/post/tecnologia>. Acesso em 20 de junho de 2020.

Casas Inteligentes: como faço minha casa mais inteligente?. Toikos Blog. Disponível em: <http://toikos.com.br/blog/post/casas-inteligentes-como-fao-minha-casa-mais-inteligente>. Acesso em 20 de junho de 2020.


Autor: Igor Wilian Faoro

Frameworks ORM para bancos não relacionais?

Existem dois tipos de bancos de dados: relacional e não relacional. Os dois bancos podem ser utilizados de formas distintas com diferentes frameworks, podendo-se utilizar o tipo de banco de dados e seu respectivo framework variando entre situações.

O banco de dados relacional trabalhará de forma que tabelas possam se relacionar e formar uma rede de tabelas com dados utilizando frameworks ORM. O banco de dados não relacional em conjunto com o framework ODM deverá ser utilizado para casos com informações menos complexas que exigem todas as informações em um único documento possibilitando uma grande massa de dados.

OBJECT RELATIONAL MAPPING

Existem frameworks conhecidos como ORM (object relational mapping) que relacionam propriedades de uma classe com colunas do banco de dados. Esse tipo de framework só pode ser utilizado com banco de dados relacional. Ele estabelece uma forte relação entre aplicativo e banco de dados.

Normalmente o banco de dados relacional é utilizado para informações mais complexas permitindo consultas segmentadas evitando gargalos quando há grandes quantidades de acesso. O uso da ORM é opcional, mas existem vantagens como facilitação joing entre as tabelas e aumento a produtividade do desenvolvimento.

OBJECT DOCUMENT MAPPING

Os frameworks ODM (object document mapping) são utilizados para criar relações entre propriedades de uma classe com campos de um documento salvo em uma collection que também podem ser gerenciadas pelo framework.

Da mesma forma que a ORM, o uso desse framework é opcional, entretanto há diversas vantagens como proporcionar forte tipagem para campos de documento de forma que o desenvolver não possa salvar um valor do tipo texto para um campo numérico, além de simplificar interpretação de códigos afim de agilizar o desenvolvimento do projeto.

Uma das maiores vantagens do uso de framework é a facilidade para a utilização de indexes (índices) que normalmente exigem certas habilidades de gerenciamento do desenvolvedor. Segue um exemplo de aplicação dessa vantagem:  

const Cat = mongoose.model('Cat', { name: String });

mongoose.index('Cat', ({'$**': 'text'})

O índice pode ser explorado a fim de facilitar o desenvolvimento de buscas, por exemplo. Ele tem função de agilizar o processo de encontro de informações específicas e segmentadas.

 O índice auxilia o desenvolvedor em diversos pontos como tratamentos complexos da informação antes de ser buscada com intuito de reduzir o tempo e a lógica escrita por ele.

O código no exemplo acima demonstra através do asterisco (wildcard) como o índice será construído. Nesse caso, será incluído tudo que é do tipo texto dentro do índice a ser criado.

A busca feita no banco de dados não relacional pelo índice pode ser feita pelo recurso de pontuação ou pela ordem padrão, ou seja, de encontro dos resultados. O esquema padrão de encontro dos resultados acarretará o aparecimento desordenado dos resultados.

Os frameworks possibilitam a indicação de ordenação por pontuação, por exemplo: se o usuário buscar as letras inicias de o nome de um médico no site de um plano de saúde, a busca entenderá e mostrará os nomes de médicos com as letras inicias exatamente iguais e após mostrará os resultados seguintes com a mesma letra inicial.

O desenvolvedor poderá distribuir diferentes pesos para cada campo do documento, como “nome” será pontuação de relevância 5, o campo “especialidade” será pontuação de relevância 4 e assim por diante. Dessa forma, a chance o usuário encontra o que procura em menos tempo é maior.

const Cat = mongoose.model('Cat', { name: String, phone: String }, { weights: { name: 4, phone: 3} });

O uso dos frameworks pode ser explorado de diversos formas e utilizados em diversas linguagens de programação. Segue um exemplo do uso de um framework ODM para a linguagem de programação Javascript:

Primeiramente há a conexão com o banco de dados MongoDB:

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true});

Após há a criação de uma collection:

const Cat = mongoose.model('Cat', { name: String });

Então há a criação de um novo documento e o salvamento no banco de dados:

const kitty = new Cat({ name: 'Zildjian' });

kitty.save().then(() => console.log('meow'));

Dessa forma, nesse exemplo haverá a criação de um novo documento da collection cat com a propriedade name o valor Zildjian. Assim, teremos a criação e salvamento do novo documento.

CONCLUSÃO

Conclui-se que dentro das linguagens de programação os frameworks dos tipos ODM e ORM são bastante utilizados para facilitar e reduzir o tempo do desenvolvedor dentro dos projetos.

Essa redução e facilitação impactará no desempenho do projeto bem como ampliará as funções para o usuário. O destaque fica para os índices que podem auxiliar de forma significativa em possíveis buscas ou indexações apresentadas no desenvolvimento de um projeto.

Fontes:

https://mongoosejs.com/ – Exemplos de código do framework ODM Mongoose

http://www.toikos.com.br/ – Utilização da tecnologia integrado com IOT

Autor: Felipe Panassol Zaniol

Consumo de APIs IBM Watson

O consumo e desenvolvimento de serviços de cloud têm tornado cases de inovação cada vez mais presente no meio tecnológico. O Ibm Watson têm como objetivo salientar e prover serviços utilitários de cloud como API utilizando como viés, ferramentas cognitivas.

Bem como as demais plataformas que provém este tipo de serviço do mercado, o Ibm Watson promove facilidades de usabilidade quanto ao consumo de seus serviços.

ABORDAGENS DO IBM WATSON

Dentro das possibilidades de utilização do Whatson, podemos encontrar as seguintes ferramentas:

Natural language understanding (compreensão da linguagem natural):

Neste algoritmo disponibilizado, podemos extrair de um texto emoções, contextos, entidades e relações.

  • Personality Insights (Insights de personalidade) Identifica traços psicológicos de mídias tradicionais ou sociais que determinam decisões de compra, intenção e traços comportamentais; utilizado para melhorar as taxas de conversão.
  • Speech to Text (Fala em Texto) Utilizado para converter voz em texto.
  • Text to Speech (Texto para fala) Utilizado para converter texto em voz.
  • Visual Recognition (reconhecimento visual) extrai sentido de imagens. Aponta suas especificidades com base em uma fonte de cognição já ensinada. Salienta o sentido da imagem.
  • Watson Assistant (Assistente watson) ajuda na construção de uma interface de conversação. Utilizado geralmente em Chatboots.

Todas essas possibilidades de algoritmos e aplicabilidade estão disponíveis como serviço. Todas essas modalidades possuem categorias precificadas entregando mais funcionalidades conforme o plano de cobrança escolhido.

CONSUMINDO A API DO WATSON NA PRÁTICA

Como uma forma prática de disponibilizar os recursos da cloud da IBM, a empresa oferece duas maneiras de consumir seus algoritmos:

  • IBM Watson Studio: O IBM Watson Studio é uma maneira robusta e simples de desfrutar dos recursos da IBM Cloud. Com ele temos o poder de interagir com os recursos do Watson de uma maneira mais amigável sem contato com código. É possível também criar projetos e treinar modelos de dados para contemplar recursos de aprendizado de máquina.
Figura 1 – Exemplo de reconhecimento de imagem do IBM Watson

Consumo da API do Watson: Podemos também utilizar o Watson gerando uma chave de acesso para, juntamente com uma requisição HTTP, utilizar os recursos disponibilizados. Desta maneira, podemos ter um cenário de possibilidades mais abrangente e customizável. Para tal, neste artigo iremos utilizar uma biblioteca desenvolvida pela IBM na plataforma NodeJs.

UTILIZANDO API DO WATSON

Para fazer a utilização de qualquer recurso do watson programaticamente, como dito anteriormente, precisamos gerar uma chave de acesso do recurso que queremos utilizar. Vamos utilizar como exemplo o recurso de interpretação de linguagem natural. Essa chave pode ser gerada na página do recurso na ibm cloud.

Figura 2 – Exemplo de geração de credenciais

É possível fazer o download do arquivo de credenciais para respectiva utilização. Após esse processo, podemos criar um projeto node básico e instalar a biblioteca watson-developer-cloud. E com o seguinte exemplo de código, podemos realizar uma chamada simples para a API do Watson.

Figura 3 – Exemplo de chamada de API do Watson em NodeJs

Com esse simples exemplo, é possível extrair de um texto suas principais palavras. Esse e outros métodos de construção de um resultado cognitivo estão entre as principais funcionalidades do IBM Watson.

Autor: Cesar Lemos

Referências:

https://medium.com/cwi-software/ibm-watson-ii-desenvolvendo-uma-api-com-watson-assistant-node-js-5ea6212f293

https://medium.com/cwi-software/ibm-watson-i-watson-assistant-71532381de25

https://www.ibm.com/br-pt/cloud/watson-studio/details

https://www.npmjs.com/package/watson-developer-cloud

APIs para trabalhar com interfaces de voz

O recurso mais atraente das interfaces de conversação é a facilidade em que o usuário possui ao utilizar computadores, smartphones, smartv entre outras inúmeras tecnologias onde a Inteligência Artificial de conversação pode ser implementada. Para estas interfaces deverão ser criados modos de interação de fácil operação, já que por meio do recurso de fala o usuário poderá ter maior liberdade para execução de outras tarefas que exijam a manipulação de entradas de dados de forma convencional e ainda, com o uso de sistemas de síntese de fala o usuário poderá receber informações de forma direta e objetiva.

Uma interface de API de voz oferece o privilégio de interagir com as máquinas em termos humanos. Pode- se dizer que é uma mudança de paradigma das comunicações anteriores. Ela permite que o usuário diga ao software o que fazer, assim, trazendo uma maior inclusão para pessoas com deficiência sendo elas visuais, locomotoras, dentre outras e até mesmo para quem busca uma maior automação dos seus aparelhos.

A área de IA com interface de conversação tem estado em constante alta, nas últimas cinco décadas, sendo considerada uma tecnologia auxiliar de importante avanço com uma melhor comunicação Homem-Máquina. Entretanto, anteriormente não era vista como uma forma confiável de comunicação. Isto porque a capacidade de processamento existente não era suficiente para fazer reconhecimento de fala em tempo real.

As APIS com interface para comando de voz

Com o grande avanço da tecnologia de IA de conversação, pode-se citar algumas APIs principais.

Alexa Voice Service (AVS)

Dispositivos com a Alexa

O Alexa é o serviço de voz criado pela Amazon em 2014 com base em nuvem que se conecta com o Amazon Echo, uma nova categoria de dispositivo da varejista online que foi projetado para se adequar a comandos da sua voz. O Alexa Voice Service (AVS) é o conjunto de serviços da Amazon construído em torno de seu assistente de IA controlado por voz para uso doméstico e outros ambientes. O AVS foi introduzido pela primeira vez com o Echo, o alto-falante inteligente da empresa, que permite a interação por voz com vários sistemas no ambiente e online. O Alexa está disponível para um número cada vez maior de outros dispositivos, incluindo smartphones, tablets e controles remotos.

Ele fornece um conjunto de recursos internos, chamados de habilidades, sendo elas, tocar músicas de vários provedores, responder perguntas, fornece previsões do tempo e consultar a Wikipedia. O Hurricane Center, por exemplo, é uma habilidade do Alexa que fornece informações constantemente atualizadas sobre sistemas de tempestades, com base em dados de agências governamentais. Existe também Virtual Librarian é essencialmente um mecanismo de recomendação que sugere livros, com base em indicações de prêmios, listas de best-sellers e análises de usuários. O Alexa Skills Kit , um kit de desenvolvimento de software ( SDK ), é disponibilizado gratuitamente para desenvolvedores e as habilidades estão disponíveis para download instantâneo na Amazon.com

Sendo totalmente integrado ao ambiente de comércio eletrônico da Amazon, o que significa que torna as compras rápidas e simples. O sistema pode operar como um hub de automação residencial, permitindo ao usuário controlar sistemas de aquecimento e iluminação, por exemplo. O Alexa também se conecta a serviços de mídia de streaming on-line e suporta If This Then That ( IFTTT ).

O sistema de inteligência artificial está disponível no Brasil a partir desse ano de 2019, onde possui 3 tipos de caixas de som com os recursos da Alexa.

Cloud Speech-to-Text

Cloud Speech-to-Text

O Cloud Speech-to-Text permite a fácil integração das tecnologias de reconhecimento de fala do Google nos aplicativos do desenvolvedor. Com ele os desenvolvedores convertem áudio em texto ao aplicar modelos de rede neural avançados em uma API fácil de usar. A API reconhece 120 idiomas e variantes para oferecer suporte à sua base de usuários global. Ele permite ativar o comando e o controle de voz, transcrever áudio de call centers e muito mais. Com a tecnologia de machine learming do Google essa API processa streaming em tempo real ou de áudios pré gravados, ou seja, ela retorna o texto no momento em que ele é reconhecido. Sendo possível a analise de áudios de curta ou longa duração

O Speech-to-Text tem três métodos principais para realizar o reconhecimento de fala. Eles estão listados abaixo:

O reconhecimento síncrono (REST e gRPC): envia dados de áudio para a API Speech-to-Text, executa o reconhecimento nesses dados e retorna os resultados depois que todo o áudio foi processado. As solicitações de reconhecimento síncrono são limitadas a dados de áudio de até um minuto de duração.

O reconhecimento assíncrono (REST e gRPC): envia dados de áudio para a API Speech-to-Text e inicia uma operação de longa duração. Usando essa operação, é possível pesquisar periodicamente resultados de reconhecimento. As solicitações assíncronas para dados de áudio de qualquer duração de até 480 minutos.

O reconhecimento de streaming (somente gRPC): realiza reconhecimento em dados de áudio fornecidos em um stream gRPC bidirecional. As solicitações de streaming são projetadas para fins de reconhecimento em tempo real, como captura de áudio ao vivo de um microfone. O reconhecimento em streaming oferece resultados provisórios enquanto o áudio está sendo capturado, permitindo que o resultado apareça, por exemplo, enquanto um usuário ainda está falando.

Siri

Logo Siri

A Siri é um aplicativo inteligente que auxilia o usuário a realizar tarefas em um aparelho por meio do recurso de voz. Trata-se de um aplicativo no estilo assistente pessoal utilizando processamento de linguagem natural para responder perguntas, executar tarefas e outras atividades. Por possuir uma tecnologia mais refinada, a Siri não necessita que o usuário diga palavras predeterminadas ou comandos específicos, já que a assistente consegue compreender frases de forma precisa.

Fundada por Dag Kittlaus, Cheyer Adam, Tom Gruber e Norman Winarsky, a Siri teve seus primeiros testes realizados em 2007, foi adquirida pela Apple em abril de 2010, porém, apenas começou a funcionar em 2011.  A Siri agora conta com o aplicativo de atalhos embutido no IOS 13. A visualização aprimorada da galeria permite fornecer atalhos pré configurados, esses atalhos também podem ser combinados com ações de outros aplicativos.

Cortana

Inicialização Cortana

A Cortana é um assistente pessoal digital que promete auxiliar os usuários de um sistema computacional a realizar diversas atividades. Não se pode visualizar a Cortana como um simples assistente que permite a realização de atividades através do comando de voz, apesar de essa parecer ser sua principal finalidade. Usado corretamente, esse assistente pode ajudar seu usuário a se manter sempre bem informado, permitindo-o realizar diversas atividades através de dispositivos e plataformas distintas.

Muito além do que serviços de lembrete, ou até mesmo uma interface interativa de pesquisa, a Cortana fornece uma arquitetura que permite facilmente a incorporação de outras atividades ou serviços, melhorando assim sua experiência. Trata-se de um recurso capaz de aprender com o usuário para melhor servi-lo.

Ela permite que o usuário interaja com o computador por qualquer uma de suas interfaces. Caberá ao desenvolvedor, dependendo do contexto, determinar qual ação será desencadeada, ou seja, o usuário pode interagir via texto ou voz e o desenvolvedor decidirá como irá tratar cada uma das interfaces de entrada. Além de prático e fácil de utilizar, a Cortana é compatível com qualquer versão do Windows 10 ou superior, além do Android.

Para o desenvolvedor, é possível a integração das funcionalidades da Cortana às suas aplicações, podendo essa interação ocorrer através de solicitações explícitas ou até mesmo com base no contexto do usuário (análise de seu comportamento).

Ao desenvolvedor, a Cortana oferece também suporte a uma série de ações pré-determinadas, sendo necessário somente fornecer à API uma ligação capaz de indicar como sua aplicação deve responder/completar a ação. O desenvolvedor pode, entretanto, a qualquer momento personalizar uma ação pré-definida (se julgar necessário), buscando assim atender às necessidades de sua aplicação.

Watson Text-to-Speech e Speech To Text

Watson

O Watson possui alguns serviços para integrar texto e voz como o Text to Speech e o Speech to Text.

Onde o Text to Speech transforma um texto em voz, o Speech to Text transforma voz em texto. Esses serviços são basicamente simples e diretos de utilizar e não necessitando de nenhum treinamento adicional. Para a utilização basta instanciá-los no Bluemix (plataforma em nuvem desenvolvida pela IBM) e escolher o idioma. No caso do Text to Speech, dependendo do idioma, também é possível escolher a voz do interlocutor (se masculino ou feminino). Está disponível em 27 vozes (13 neurais e 14 padrão) em 7 idiomas. As vozes selecionadas agora oferecem recursos de Síntese expressiva e transformação de voz. O uso geral desses serviços conta com um vocabulário baseado no diálogo cotidiano. Para alguns tipos de aplicação, esse vocabulário pode não ser suficiente e requerer refinamentos que o ajustem ao domínio da aplicação. Nesse caso, é possível ajustar o modelo de acordo com os termos e pronúncias utilizados naquele domínio.

Com isso pode se verificar a importância que as APIs vem possuindo nos últimos anos, onde podemos ver essa inteligência tomando amplamente destaque no mercado. Com este artigo foi possível identificar algumas das principais e mais desenvolvidas APIs de Voz, mais utilizadas em equipamentos do dia a dias como smartphones e smartvs.

O reconhecimento de voz contínuo é o mais complexo e difícil de ser implementado, pois deve ser capaz de lidar com todas as características e vícios de linguagem, como regionalidade e gírias tão utilizadas frequentemente, de forma natural. Vale ressaltar que as APIs citadas acima trabalham de forma online, sendo assim, para trabalhos futuros estarão direcionadas as pesquisas para APIs que utilizam o reconhecimento de voz de forma offline, para assim, trazer uma maior automação dos equipamentos mesmo desprovidos de internet no momento.

Autora: Laís Fochezatto Sabedot

Referências

Y. Dong and L. Deng, Automatic Speech Recognition. London: Springer-Verlag, 2015.

V. F. S. Alencar. 2005. Atributos e Domínios de Interpolação Eficientes em Reconhecimento de Voz Distribuído. Master’s thesis. Pontifícia Universidade Católica do Rio de Janeiro, Rio de Janeiro, Brasil.l

https://developer.apple.com/siri/

https://docs.microsoft.com/pt-br/cortana/skills/

https://conversation-demo.ng.bluemix.net/

https://cloud.google.com/speech-to-text/

https://alexa.github.io/avs-device-sdk/

Utilização de Redes Neurais em Sistemas de Recomendação

Gigantescas ondas de informações, dos mais variados tipos são lançadas diariamente na internet – o tal chamado “Fenômeno BIG DATA”.  E este volume de dados cresce em tal proporção que, sistemas de busca convencionais não estão mais sendo capazes de gerir e varrer tantas informações, prejudicando a qualidade com que os dados são apresentados aos usuários.

Em busca de solucionar – ou pelo menos amenizar – este problema, portais de venda e de conteúdo têm desprendido esforços cada vez maiores para tornar mais assertiva suas campanhas de maketing, através dos chamados “Sistemas de Recomendação (SR)”. Mas para entender como funcionam estes sistemas, é necessário conhecer sobre um assunto em alta na atualidade – A Inteligência Artifical (IA).

Inteligência Artificial: O passo humano nas máquinas

Segundo Ribeiro (2010, p.8), “a inteligência artificial é uma ciência multidisciplinar que busca desenvolver e aplicar técnicas computacionais que simulem o comportamento humano em atividades específicas”. De acordo com Lima, Pinheiro e Santos (2014), os primeiros estudos sobre inteligência artificial surgiram na década de 1940, marcada pela Segunda Guerra Mundial, onde houve a necessidade de desenvolver métodos tecnológicos voltados para análise balística, quebra de códigos e cálculos para projetos de arma nucleares.

A IA possibilita que máquinas aprendam com experiências, se ajustem a entradas de dados novas e executem tarefas similar a um ser humano. Tudo isso depende do deep learning e do processamento de linguagem natural, tecnologias das quais permitem que os computadores sejam treinados e possam reconhecer padrões nos dados apresentados a eles.

Reconhecimento de Padrões

A IA faz uso do reconhecimento de padrões para analisar e classificar dados, agrupando-os por similaridade, podendo ser identificadas preliminarmente ou dedutivamente. O reconhecimento de padrões é uma tarefa trivial ao ser humano, mas que se torna custosa às máquinas, uma vez que ainda não se conseguiu desenvolver um equipamento ou sistema com capacidade de reconhecimento à altura do cérebro humano.

O trabalho de reconhecer padrões é que permite identificar em qual grupo (ou classe) um dado novo pertence. Este tipo de trabalho é que permite que sistemas de recomendação, muito utilizados pelos e-commerces, ofertem produtos que os usuários estejam planejando adquirir, sem ao menos terem acessado o site do portal de vendas.

Mas, e como são identificados estes padrões???

Para identificar estes padrões dois tipos de métodos são mais utilizados hoje: o supervisionado e o não-supervisionado.

  • Método Supervisionado: É dado à máquina um conjunto de dados do qual já se sabe qual é a saída correta, e que deve ser semelhante ao grupo, percebendo a idéia de que saída e entrada possuem uma relação. É como se existisse um “professor” que ensinasse qual o tipo de comportamento que deveria ser exibido em cada situação.
  • Método Não-Supervisionado: Esse método, ao contrário do supervisionado, não possui uma rotulação prévia (não existe um “professor”). Conforme os dados forem sendo apresentados, a máquina precisa descobrir sozinha relações, padrões e regularidades e codificá-las nas saídas, criando grupos (processo chamado de clusterização).
Exemplo de Clusterização

E-business têm se valido destas ferramentas para desenvolver sistemas que conseguem identificar o perfil do usuário que está acessando seu portal de vendas e através de um cruzamento de dados com outros perfis de usuários similares, estão podendo direcionar sua força de marketing de forma mais assertiva. É o caso dos Sistemas de Recomendação.

O que é um Sistema de Recomendação (SR)?

Sistemas de Recomendação são, basicamente, um conjunto de algoritmos que utilizam técnicas de Aprendizagem de Máquinas (AM) e Recuperação de Informação (RI) para gerar recomendações baseadas em filtragens. Estas filtragens podem ser do tipo: colaborativa, baseada em conteúdo ou híbrida.

  • Filtragem Colaborativa: É uma técnica para recomendação baseada no conhecimento coletivo, ou seja, baseia-se nas preferências dos usuários acerca dos itens que compõem um determinado catálogo do sistema;
  • Filtragem Baseada em Conteúdo: Diferente da Filtragem Colaborativa, a Filtragem Baseada em Conteúdo leva em consideração os atributos dos itens para identificar similaridades entre o perfil do usuário e o perfil do item. Basicamente ela se baseia em itens que o usuário já tenha demonstrado interesse no passado para recomendar.
  • Filtragem Híbrida: Esta uma “mistura” das filtragens anteriores, buscando combinar as vantagens das duas e atenuar as desvantagens das mesmas.

Os SR’s têm então o objetivo de gerar recomendações válidas aos usuários de itens que possam os interessar, como por exemplo, sugestão de livros, filmes, amigos em redes sociais, etc. Para isso, um dos principais conceitos utilizados pelos SR’s é a similaridade, identificada pelo reconhecimento de padrões abordado anteriormente neste artigo. Para isso, os algoritmos mais utilizados são o KNN (K-Nearest Neighbors), Árvore de Decisão, Redes Bayesianas e Redes Neurais. Neste artigo, nossa ênfase se dará em cima das Redes Neurais, explicadas a seguir.

RNA – Redes Neurais Artificiais

Uma RNA compreende um conjunto de elementos de processamento conectados e organizados em camadas. Um dos modelos de RNAs é disposto em camadas, onde as unidades são ordenadas e classificadas pela sua topologia e a propagação natural da informação é da camada de entrada para a de saída, sem realimentação para as unidades anteriores.

As entradas são processadas e transformadas por uma função de ativação até que um determinado critério de parada seja atendido (quantidade de ciclos (épocas) ou erro mínimo), obtendo os pesos sinápticos que melhor se ajustem aos padrões de entrada. Nesse estágio, pode-se dizer que a rede está treinada. Contudo, a rede neural pode apresentar ou não a capacidade de generalização – permitir a classificação correta de padrões já conhecidos, mas que não faziam parte do conjunto de treinamento.

As RNA’s podem ser utilizadas na recomendação de sistemas de Recomendação baseadas em modelos. As RNA’s podem combinar vários módulos de recomendações ou várias fontes de dados, podendo ser exemplificado como na construção de um sistema de recomendação para TV a partir de quatro fontes de dados diferentes: informações de comunidades, contexto de exibição de programas, perfil de usuários e metadados dos programas.

Concluindo…

Neste viés, as RNA’s estão apresentando vantagens superiores sobre as demais técnicas, principalmente pelo fato de trabalharem muito bem com grandes volumes de dados, reduzindo a dimensionalidade sem perder representatividade da informação original. Outra vantagem é conseguir trabalhar com dados dinâmicos (ou de curto prazo), se comparados à algoritmos clássicos e também por conseguir a interação entre usuário e conteúdo, representando os dados de forma não-linear, permitindo que a generalização não seja tão limitada quanto demais métodos (Fatoração de Matrizes, por exemplo).

Autor: Valmor Marchi

Referências

FERNANDES, Marcela Mayara Barbosa; SEVERINO, Áxel Douglas Santos; FERREIRA, Patrick Pierre Fernandes. SISTEMAS DE RECOMENDAÇÃO WEB UTILIZANDO A REDE NEURAL ARTIFICIAL DO TIPO PERCEPTRON. 2014. Disponível em: <http://www.fepeg2014.unimontes.br/sites/default/files/resumos/arquivo_pdf_anais/artigo_-_sistemas_de_recomendacao_utilizando_uma_rede_neural_artificial_perceptron_1.pdf>. Acesso em: 14 nov. 2019.

LIMA, I.; SANTOS, F.; PINHEIRO, C. Inteligência Artificial. Rio de Janeiro: Elsevier, 2014.

RIBEIRO, R. Uma Introdução à Inteligência Computacional: Fundamentos, Ferramentas e Aplicações. Rio de Janeiro: IST-Rio, 2010.

SANTANA, Marlesson. Deep Learning para Sistemas de Recomendação (Parte 1) — Introdução. 2018. Disponível em: <https://medium.com/data-hackers/deep-learning-para-sistemas-de-recomenda%C3%A7%C3%A3o-parte-1-introdu%C3%A7%C3%A3o-b19a896c471e>. Acesso em: 16 nov. 2019.

VALIN, Allan. Inteligência Artificial: reconhecimento de padrões. 2009. Disponível em: <https://www.tecmundo.com.br/seguranca/3014-inteligencia-artificial-reconhecimento-de-padroes.htm>. Acesso em: 15 nov. 2019.

Material Design – O que é e para que serve esse sistema Google

Material Design nasceu da coleta de informações e conhecimentos que se transformaram em diretrizes para aprimorar a relação homem-máquina, isso tornou-se em um sistema de desenvolvimento para interface do usuário, definido por um conjunto de propriedades que qualquer objeto dentro do sistema deve aderir.

É chamado Material, pois a ideia é trazer um material sólido para a interface virtual, todos os objetos têm uma altura definida, essa altura ajuda na interação com o usuário dando dicas visuais e também é responsável pelas sombras geradas, assim dando um efeito mais natural aos olhos.

As diretrizes do material design não só criam uma experiência prazerosa visualmente, mas também proveem consistência através dos dispositivos e aplicações e dicas do que virá a acontecer na tela.

Pense como um Engine de um jogo, onde toda a física, texturas, iluminação, animações são delimitadas pelas propriedades da Engine. O mesmo vale para o Material Design. Existe um ambiente 3D onde todos os elementos funcionam de formas restringidas pelas propriedades e diretrizes definidas pela Google.

No Material Design existem as propriedades físicas, propriedades de transformação e propriedades de movimento, estas propriedades são combinadas para temos componentes com um comportamento parecido com papel que pode mudar dinamicamente dependendo do seu uso.

Limitações:

Existem algumas limitações impostas pela Google que devem ser respeitadas:

  • Materiais são sólidos e não podem atravessar um ao outro
  • Materiais não podem ser curvados ou dobrados
  • Todos os materiais tem a mesma espessura, definida pelo Google como 1DP (medida utilizada no desenvolvimento Android, que diferente do pixel, vai apresentar o mesmo resultado em diferentes resoluções).

Sombra:

A Sombra é uma das maneiras mais rápidas de identificarmos onde um objeto se localiza num espaço 3D, ou seja, a distância relativa entre eles. A sombra também nos ajuda a identificar movimento, que como estamos em um ambiente 3D pode ser relacionada a altura do material.

Movimentos:

No Material Design movimentos nos trazem um senso de objetivo. Objetos podem ser movidos livremente, e especialmente em relação a altura como mencionado acima. Essa altura é bastante utilizada como uma dica visual para indicar o local de interação do usuário. Isso é implementado usando “Dynamic Elevation Offset“, que é a posição de destino do objeto relativo a posição de repouso dele mesmo.

Por exemplo todos os componentes que sobem num clique, tem a mesma mudança de elevação relativos aos suas posições de repouso. O objetivo é que todos os movimentos do mesmo tipo possam ser agrupados, gerando consistência.

Animações:

O Google identificou que mudanças abruptas de velocidade ou direção são brutas e causam distrações indesejadas. Com isso muitas das animações contam com um processo de aceleração, e para se tornar mais próxima ao mundo real se faz uso de aceleração assimétrica.

Aceleração assimétrica pode indicar o ‘peso’ de um objeto. Objetos menores ou mais leves podem se movimentar mais rápido porque eles precisam de menos “força”, e objetos mais pesados podem demorar um pouco para acelerar porque precisam de mais “forca”.

A transição entre dois estados visuais deve ser clara, suave e de pouco esforço. Uma transição bem feita indica ao usuário onde ele deve focar a sua atenção. O Google chama isso de “Visual Continuity”, tem as seguintes diretrizes para ser consideradas:

  • Onde o usuário deve focar, quais elementos e movimentos apoiam esse objetivo.
  • Transições devem estar conectadas visualmente, através de elementos persistentes e cor.
  • Usar os movimentos com precisão, isso traz clareza e suavidade pra transição.

Quando fazendo uma transição o Material Design considera a ordem o timing dos elementos, isso transmite qual conteúdo é mais importante, criando um caminho para o olho do usuário seguir, o Google chama isso de ” Hierarchical Timing” e deve ser sempre usado para direcionar a atenção do usuário e não deixar todas as transações ocorrerem ao mesmo tempo sem indicativos do que é mais importante.

Quando as transações de elementos são coordenadas, isso cria uma facilidade para o usuário entender o aplicativo, os destinos dos elementos na transação devem fazer sentido e ser o mais ordenados possível, isso é chamado de “Consistent Choreography”. Para obter esse resultado é indicado evitar movimentos conflitosos ou caminhos sobrepostos, a altura em que os objetos de movimentam e porquê fazem isso e indicam até visualizar se o traçando o caminho de todos os objetos movimentados obtemos uma imagem limpa e organizada.

Material Design imita a realidade, traz um sistema de design simples para um ambiente digital 3D com parâmetros e diretrizes bem definidos. Intuitivamente transmite como uma interface deveria funcionar se fosse feita de papel digital. Essa intuição auxilia no rápido entendimento e reconhecimento da interface, com o menor esforço do usuário.

Para saber mais sobre o Material Design e começar a utilizado segue o site oficial, que conta com uma vasta documentação e representações visuais para melhor entender alguns destes conceitos: https://material.io/

Também interessante ver dos próprios criadores alguns comentários da criação e desenvolvimento, segue vídeo de apresentação do Google sobre o tema: https://www.youtube.com/watch?v=rrT6v5sOwJg

Autor: Mauricio Calgaro

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

 

Gamification em Aplicativos como Forma de Ampliar o Engajamento

O mundo dos jogos atrai milhares de pessoas em todo o mundo, sejam eles eletrônicos, de tabuleiro ou por atividades físicas. Este texto tem por objetivo, esclarecer o conceito de gamification, mostrar casos de aplicação, e entender como utilizar este método no meio empresarial, para ampliar o engajamento efetivo em atividades variadas.

O que é Gamification?

Gamification (gamificação) pode ser definido, de forma mais consistente, como sendo uma estratégia, apoiada na aplicação de elementos de jogos, para atividades non-game que é utilizada para influenciar e causar mudanças no comportamento de indivíduos e grupos (BUNCHBALL INC., 2010). Gamificação é um termo recente, mas a ideia de utilizar os mecanismos dos jogos para resolver problemas e aumentar o engajamento, existe há bastante tempo.

Na educação infantil, os professores utilizam, de uma vasta variedade de jogos para desenvolver uma experiência lúdica, e mais interessante para os alunos, na hora de aprender os números, letras e sílabas.

No meio empresarial, temos diversos casos de aplicação da gamificação, seguem alguns exemplos:

Programa de Milhas

As companhias aéreas, têm dificuldade em fidelizar o cliente, pois este, acaba buscando outras companhias devido ao baixo custo da passagem. Por isso, as companhias criaram o programa de milhas, onde a cada viagem, são acumulados pontos que são revertidos em descontos, nas passagens aéreas e outros benefícios.

Duolingo

A plataforma de ensino de idiomas, soma quase 6 milhões de downloads do aplicativo na loja Google Play. Os conteúdos são divididos em níveis, e para desbloquear os níveis mais avançados, o usuário deve somar pontos, completando os exercícios disponibilizados. Um ranking de classificação é montado a partir da lista de amigos que utilizam a plataforma.

Strava

As corridas, pedaladas e outras atividades físicas, têm sido mais competitivas com o uso do Strava. Além do aplicativo armazenar as informações de geolocalização, e performance do usuário durante a atividade física, os trajetos comuns entre os atletas são monitorados. Com esta informação a plataforma monta um ranking diário, semanal, mensal e geral de performance dos atletas. O usuário conquista troféus, na modalidade bronze, prata e ouro, caso supere suas marcas pessoais, ou supere marcas de outros usuários.

Isto é engajamento!

Os desafios impostos pelos games geram uma motivação intrínseca, ou seja, parte da própria pessoa envolvida na atividade.

O termo “engajamento”, em um contexto empresarial, indica a conexão entre o consumidor e um produto ou serviço. Não há uma métrica específica, que mensure suficientemente o engajamento, é melhor pensar em um conjunto de métricas (ZICHERMANN; CUNNINGHAM, 2011), são elas:

  • Recência;
  • Frequência;
  • Duração;
  • Viralidade;
  • Avaliações.

Para um engajamento mais significativo, uma combinação entre as métricas deve ser levado em consideração, conforme a necessidade do negócio. Por exemplo, para o Duolingo, são consideradas mais importantes a frequência e duração da atividade no aplicativo.

E agora, como “Gamificar”?

Para a implementar a gamificação, alguns atributos chaves podem ser levados em consideração:

  • Programas de pontuação
  • Leaderboards / painel com ranking
  • Feedback / divulgação dos méritos alcançados
  • Regras
  • Premiações / recompensas
  • Selos, adesivos e distintivos
  • Mudança de nível
  • Troféus

É possível encontrar exemplos de gamificação em aplicativos de produtividade, mídias sociais, sites colaborativos, campanhas de incentivo, ações de marketing e muito mais, sempre com o objetivo de envolver os participantes, gerar mais engajamento e produtividade.

O método de gamificação se mostra muito eficiente, através dos desafios impostos e recompensas, que motivam e engajam os usuários. É importante conhecer o negócio, para analisar e descobrir qual forma de engajamento é necessária, e aplicar os métodos de gamificação baseados nesta perspectiva.

Autor: Gabriel Susin

Referências

BUNCHBALL INC. Gamification 101: an introduction to the use of game dynamics to influence behavior. 2010. Disponível em: <http://jndglobal.com/wp-content/uploads/2011/05/gamification1011.pdf>. Acesso em: 28 abril. 2018.

ZICHERMANN, G.; CUNNINGHAM, C. Gamification by design. Sebastopol: O’Reilly, 2011.

O que é, onde aplicar e quais as vantagens da Linguagem R

 

R e os Carros

Você já foi impactado pela notícia de que os dados são o novo petróleo? Você já sabe que a Ciência de Dados é dita como a profissão mais sexy do século? Pois bem, para analisar os dados o Cientista de Dados se vale de diversas ferramentas. Este artigo tem a finalidade de apresentar uma destas ferramentas: a Linguagem R.

O que é o R?

R se presta a diversas funções, desde uma calculadora científica, até a realização de complexas análises estatísticas. Além disso, o R também apresenta uma série de recursos para plotagem de gráficos, como personalização de: cor, tipo e tamanho de letra, símbolos, títulos e subtítulos, pontos, linhas, legendas, planos de fundo e muito mais. Mais que um software que realiza análises estatísticas, R é um ambiente e uma linguagem de programação orientada a objeto. Nele, números, vetores, matrizes, arrays, data frames e listas podem ficar armazenados em objetos.

Origens

S é a linguagem que foi desenvolvida por John Chambers nos laboratórios da Bell Labs. S foi inicialmente desenvolvida em 1976 como um ambiente de análise estatística, originalmente implementada usando bibliotecas da linguagem de programação Fortran. Entretanto, as primeiras versões da linguagem não continham funções de modelagem estatística.
Entender a filosofia da linguagem S, ajuda a entender as raízes que geraram a linguagem R. O fator mais importante a notar, é que a linguagem S nasceu como uma ferramenta de análise de dados e não como uma linguagem de programação tradicional. Os inventores de S tinham como objetivo tornar a análise de dados mais fácil, inicialmente para eles e então para os outros.

A linguagem R surgiu um pouco depois da linguagem S. Uma das limitações de S era o fato da linguagem estar disponível apenas através do pacote comercial S-PLUS. Em 1991, R foi criada por Ross Ihaka e Robert Gentleman no Departamento de Estatística da Universidade de Auckland. Em 1993 a linguagem R foi anunciada em público pela primeira vez. Em 1995, Martin Mahler fez uma importante contribuição, convencendo Ross e Robert a usarem a licença GNU General Public e tornar R um software livre. Isso permitiu que o código fonte da linguagem R se tornasse disponível para toda a comunidade. Em 1996 as listas públicas R-help e R-devel foram criadas e em 1997 foi formado o grupo R Core, com profissionais associados ao S e S-PLUS, estatísticos e cientistas da computação. Atualmente o grupo R Core controla o código fonte de R. Em 2000, finalmente a versão 1.0.0 do R foi liberada ao público.

Funções da Linguagem R

60% do tempo de um Cientista de Dados é usado no processo de limpeza, transformação e organização dos dados, ou seja, na manipulação. Analisar grandes conjuntos de dados, agrupá-los, aplicar modelos estatísticos, importar/exportar os dados para bancos de dados relacionais, tudo isso pode ser feito com R. A linguagem pode ser usada em todo o processo analítico, desde a coleta de dados, passando pela manipulação, Machine Learning, até a apresentação dos dados com a criação de gráficos a partir dos resultados das análises de dados.

Aplicações

A linguagem R pode ser aplicada nas mais diversas áreas, tais como: Pesquisa Científica, Business Analytics, Desenvolvimento de Software, Relatórios Estatísticos, Análise Financeira, Ciência Sociais e Big Data Analytics.

Autor: Diego Ribeiro

Artigo baseado em materiais do curso e no blog da Data Science Academy.

Rest API

A Representational State Transfer (REST), em português Transferência de Estado Representacional, é um estilo de arquitetura que define um conjunto de restrições e propriedades baseados em HTTP. Neste artigo, abordaremos alguns conceitos básicos sobre esta arquitetura:

 

O QUE É API?

O acrônimo API que provém do inglês Application Programming Interface (Em português, significa Interface de Programação de Aplicações), trata-se de um conjunto de rotinas e padrões estabelecidos e documentados por uma aplicação A, para que outras aplicações consigam utilizar as funcionalidades desta aplicação A, sem precisar conhecer detalhes da implementação do software.

Desta forma, entendemos que as APIs permitem uma interoperabilidade entre aplicações. Em outras palavras, a comunicação entre aplicações e entre os usuários.

 

O QUE É REST?

REST significa Representational State Transfer. Em português, Transferência de Estado Representacional. Trata-se de uma abstração da arquitetura da Web. Resumidamente, o REST consiste em princípios/regras que, quando seguidas, permitem a criação de um projeto com interfaces bem definidas. Desta forma, permitindo, por exemplo, que aplicações se comuniquem com clareza.

 

ORIGEM DO REST

O HTTP é o principal protocolo de comunicação para sistemas Web, existente há mais de 20 anos, e em todo esse tempo sofreu algumas atualizações. Nos anos 2000, um dos principais autores do protocolo HTTP, Roy Fielding, sugeriu, dentre outras coisas, o uso de novos métodos HTTP. Estes métodos visavam resolver problemas relacionados a semântica quando requisições HTTP eram feitas.

Estas sugestões permitiram o uso do HTTP de uma forma muito mais próxima da nossa realidade, dando sentido às requisições HTTP.

 

EM RESUMO

  • REST é abreviatura de Representational State Transfer;
  • É uma outra forma de desenvolver WebServices
  • REST é um conjunto de princípios que definem como Web Standards como HTTP devem ser usados
  • Aderindo aos princípios REST, teremos um sistema que explora a arquitetura da Web nosso beneficio

 

MÉTODOS HTTP

Abaixo, os métodos padrões para a execução de requisições HTTP, em consumo de serviços REST:

 

  • PUT (INSERIR)

Semelhante ao método POST, a ideia básica do método PUT é permitir a atualização de um recuso no servidor.

 

  • DELETE (EXCLUIR)

Como você já deve estar imaginando, o método DELETE é utilizado com o intuito de remover um recurso em um determinado servidor.

 

  • GET (CAPTURAR)

O método GET é utilizado quando existe a necessidade de se obter um recurso. Ao executar o método GET sob um recurso, uma representação será devolvida pelo servidor.

 

  • POST (ATUALIZAR)

Utilizamos o método POST quando desejamos criar algum recurso no servidor a partir de uma determinada representação. Exemplo disso é quando fazemos a submissão de algum formulário em uma página Web.

 

O QUE SIGNIFICA RESTFUL

Existe uma certa confusão quanto aos termos REST e RESTful. Entretanto, ambos representam os mesmo princípios. A diferença é apenas gramatical. Em outras palavras, sistemas que utilizam os princípios REST são chamados de RESTful.

 

REST: conjunto de princípios de arquitetura

RESTful: capacidade de determinado sistema aplicar os princípios de REST.

 

CONCLUSÃO

Neste artigo, eu procurei oferecer um rápida introdução sobre os conceitos por trás do REST, a arquitetura da Web. É extremamente importante entender o conceito da arquitetura Restful para evitar perda de tempo na construção da API, facilitando a vida de outros usuários que podem estar do outro lado do mundo tentando consumir a sua API. É muito importante evitar que suas APIS sofram alterações constantes e mudam de versão a todo momento, assim dificultando ainda mais a comunicação. Por isso é bom planejar e projetar bem antes de disponibilizá-la.

 

Autor Jonatan Maicon da Costa

 

Referências:

Baseado em,

https://imasters.com.br/front-end/entendendo-como-funciona-o-restful-de-verdade/

https://www.infoq.com/br/articles/rest-introduction

https://becode.com.br/o-que-e-api-rest-e-restful/

http://blog.algaworks.com/4-conceitos-sobre-rest-que-qualquer-desenvolvedor-precisa-conhecer/