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

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

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

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

Mas como o OAuth funciona?  

O QUE É O OAUTH?

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

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

COMO ELE FUNCIONA?

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

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

O OAuth, define quatro principais papéis:

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

Fluxo do OAuth

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

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

Autor: Anderson Luis Massens Ramos

Referências

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

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

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

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

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

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

O que é e como funciona o React e o Redux?

Bibliotecas são um conjunto de funções, métodos e objetos que tem como objetivo facilitar e tornar mais rápido o desenvolvimento de aplicações, não sendo necessário recriar as funções todas as vezes que estas forem necessárias, é importante lembrar que uma biblioteca normalmente é menos complexa, e mais flexível que um framework.

React

O React é “uma biblioteca JavaScript declarativa, eficiente e flexível para a criação de interfaces de usuário (UI)”, como foi definido pelos seus criadores, surgiu em 2011, no Facebook, no ano seguinte, passou a integrar também a área de tecnologia do Instagram e de várias outras ferramentas da empresa. Em 2013, a biblioteca tornou-se de código aberto, isto fez com que a popularidade da biblioteca aumentasse.

A biblioteca foi pensada para facilitar a criação da interface de usuário, ela só se preocupa com o que é exibido, ela funciona como uma junção do HTML e do JavaScript, ela utiliza o conceito de componentes para maximizar a reutilização de código. Exemplo:

class HelloMessage extends React.Component {
  render() {
    return (
      <div>
        Olá, {this.props.name}!
      </div>
    );
  }
}

ReactDOM.render(
  <HelloMessage name="Taylor" />,
  document.getElementById('hello-example')
);

O React renderiza o HTML e CSS, a partir do arquivo do React, exibindo para o usuário, inclusive sem recarregar a página, este processo é exibido no diagrama abaixo. A biblioteca possui um método de atualização da página que atualiza apenas os componentes que foram alterados fazendo com que o site possua uma eficiência muito grande.

Uma importante característica do React é que ele é uma linguagem de programação declarativa, isto é, ele se preocupa com o que o programador quer fazer enquanto que a imperativa quer saber como atingir o objetivo desejado. Por exemplo:

Imperativa:

if( usuario.curtiu() ) {
  if( botaoEstaAzul() ) {
    removeAzul();
    adicionaCinza();
  } else {
    removeCinza();
    adicionaAzul();
  }
}

Declarativa:

if( this.state.curtido ) {
  return <curtidaAzul />;
} else {
  return <curtidaCinza />;
}

Outra grande vantagem do React é que, com os mesmos conhecimentos utilizados para criar sites, também é possível criar aplicativos móveis nativos através do React Native.

Redux

Redux é uma biblioteca JavaScript para gerenciar o estado da aplicação é similar e inspirada pela arquitetura Flux do Facebook, ela pode ser utilizada com o React ou outras bibliotecas JavaScript, foi criada por Dan Abramov e Andrew Clark em 2015.

O estado da aplicação é composto pelos dados da API e dados da interface do usuário o Redux cria um local centralizado para armazenar estes dados na aplicação.

A biblioteca é indica quando a aplicação possuir diversos componentes que possuem seus próprios estados e atualizam os estados dos outros componentes, como podemos ver na imagem a baixo ao atualizar um componente, em um cenário sem Redux, as atualizações ficam confusas, já com a biblioteca todo estado é gerenciado pelo Redux ficando muito mais simples.

O Redux possui três princípios:

  • O estado do aplicativo é armazenado em um JavaScript.
  • O estado somente pode ser lido, mas podemos alterá-lo utilizando um objeto, que descreve a mudança, chamado Action.
  • Alterações são realizadas por função chamadas de Reducers.

Possuímos três partes na biblioteca, as actions, o store e os reducers.

Actions

Actions são eventos, é o único jeito de enviar dados da sua aplicação para o Store do Redux, estas são objetos e devem possuir uma propriedade de tipo, que indica o tipo de ação que está sendo executado e um payload que contém os dados que serão utilizados na action. Para enviar uma action é utilizado o método store.dispatch().

Reducers

O Reducers recebe o estado atual da aplicação e Action e retorna um novo estado ou o mesmo.

Store

Armazena o estado da aplicação, existe somente um objeto do tipo store em uma aplicação Redux. Você pode acessar o estado armazenado, atualizar e registrar ou desregistrar listeners através de métodos de suporte.

Com o aumento da utilização de APIs para desenvolvimento web as bibliotecas se tornaram uma fermenta muito útil e poupam tempo, o React vem para atender esta demanda de forma simples e eficiente. O Redux vem como um complemento ao React cuidando da parte do armazenamento da aplicação.

Autor: João Pedro Bodaneze Reva.

Fonte de referências:

https://dev.to/voralagas/first-day-to-redux-531

https://bognarjunior.wordpress.com/tag/react-redux/

https://pt-br.reactjs.org/

https://redux.js.org/

https://medium.com/leanjs/introduction-to-redux-redux-explained-with-very-simple-examples-b39d7967ceb8

https://medium.com/byte-sized-react/what-is-react-41a885e51454

https://www.edureka.co/blog/what-is-react/

6 Frameworks para aplicações distribuídas (Server side)

Frameworks são modelos que implementam ferramentas, funções e padrões em um projeto de software, que podem abranger projetos web, mobile e desktop, tanto referente ao front-end quanto o back-end, para as mais variadas aplicabilidades do mercado. Para a definição de um framework em um projeto, é necessário principalmente a boa definição do objetivo do software e as utilidades e facilidades que o framework pode-lhe prover durante todo o ciclo de vida do produto. 

Frameworks Back-end 

Com o objetivo de auxiliar a definição de um framework na criação de um projeto de software, abaixo será listado alguns dos mais reconhecidos Frameworks do mercado para o desenvolvimento Back-end, para as mais variadas linguagens. 

Django

Django 

Django é um framework open source baseado na linguagem python que tem um intuito de criar rapidamente aplicações web altamente escaláveis com o máximo de segurança possível, provendo uma arquitetura semelhante ao mvc, o mtv(model-template-view), hoje ele é um dos frameworks mais populares em desenvolvimento phyton junto com o Flask. 

Spring Framework

Spring

O Spring é um framework da linguagem Java desenvolvido inicialmente para abstrair a usabilidade do kit de desenvolvimento JEE(Java-enterprise-Edition), focado principalmente na abstração da criação de objetos, conexões(como banco de dados) ou arquivos de sistema, proporcionando um melhor gerenciamento dessas questão deixando o foco do desenvolvedor para o desenvolvimento da regra de negócio. 

Ruby on Rails

Rails 

Ruby on Rails é um framework Open Source para linguagem Ruby, foi um dos pioneiros no ambiente de frameworks web mudando os padrões do desenvolvimento web e inflamando da participação da comunidade, focado para desenvolver sistemas do zero ajudando principalmente na parte de configuração e na criação de interfaces como CRUD.  

ASP .Net Core

Asp .Net core

Asp .net core é o framework da Microsoft que está integrada á plataforma open source .net core, que traz versatilidade e agilidade para o desenvolvimento e implementação por herdar a estrutura de multiplataforma do .net core, aprimorando ainda mais essa característica por trazer opções como gerar o código binário para outro sistema, por exemplo, gerar o código binário para um sistema Linux a partir de um sistema Windows com a mesma facilidade e eficácia se estivesse gerando para o mesmo sistema Windows.

Express Js

Express

Express é um framework para o ambiente nodeJs, com o foco de facilitar tratamento de requisições e gerenciamento de rotas, o framework base do Express é bastante minimalista e simples porem é possível adquirir pacotes de middlewares (Tratativas de requisição) de terceiros para as mais variadas funcionalidades.

Resultado de imagem para laravel logo
Laravel Framework

Laravel

Laravel é um framework de desenvolvimento rápido para PHP, livre e de código aberto. Cujo o principal objetivo é permitir que você trabalhe de forma estruturada e rápida facilitando o gerenciamento de rotas e criação de templates, porem como outros frameworks ele não é considerado muito flexível.

Conclusão

Todo framework tem suas qualidades e possíveis defeitos porem para ver o valor e usabilidade de um framework todo o ambiente e a situação atual deve ser analisada, mas como pontos gerais o benefício de um framework e a simplificação na codificação e uma curva possivelmente menor de aprendizado, contra os defeitos de depender do framework de uma maneira geral e se o framework não for o ideal para sua aplicação, ela poderá perder um desempenho considerável em seu funcionalidade.

Links Relacionados

Autor: Matheus Maciel

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.

Flutter Framework: O que é e como funciona

O presente artigo aborda uma breve introdução sobre o que é, e como funciona o Flutter Framework, com o objetivo de demonstrar essa ferramenta de desenvolvimento de aplicativos mobile que está sendo utilizada por alguns desenvolvedores na indústria de software atualmente. Ao longo do trabalho será apresentado a história, funcionalidades e também a arquitetura do Flutter Framework.

Palavras-chave: Flutter. Framework. Mobile. Android. IOS

INTRODUÇÃO

Os aplicativos móveis estão tornando-se cada vez mais populares e presentes na vida das pessoas. O número de downloads desses aplicativos tem apresentado forte crescimento e é notável o aumento do interesse das pessoas por mobilidade. Isso está ligado principalmente à constante evolução dos dispositivos móveis, que tem apresentado capacidade de processamento e armazenamento cada vez maiores. Android e iOS predominam no mercado de sistemas operacionais para smartphones, os dispositivos móveis mais utilizados atualmente. A Tabela 1 demonstra que as vendas globais de smartphones equipados com Android no primeiro trimestre de 2018 representaram a imensa maioria, chegando a 85,9% do total, segundo dados da Gartner (2018). Os outros 14,1% são de smartphones equipados com iOS. Todos os outros sistemas operacionais somados registraram vendas pouco significativas.

Tabela 1Relação de compra de celulares

Fonte: GARTNER, 2018

Com a ascensão na venda de smartphones e a consolidação do Android e iOS como sistemas operacionais predominantes, há uma necessidade cada vez maior no desenvolvimento de aplicativos para atender a demanda das pessoas nas mais diferentes áreas, devido a isso ferramentas de desenvolvimento de software cada vez mais modernas estão sendo criadas e utilizadas pelos programadores ao redor do mundo, como exemplo temos o presente tema desse artigo o Flutter Framework.

FLUTTER FRAMEWORK

O Flutter2 é o SDK de código aberto do Google que permite o desenvolvimento de aplicativos que executem tanto no Android quanto no iOS a partir de uma única base de código. Seu objetivo é permitir que os desenvolvedores criem aplicativos de alta performance com uma experiência nativa em ambas as plataformas.

Seu fluxo de desenvolvimento é orientado ao design e os widgets são os blocos básicos da interface de usuário de um aplicativo Flutter. Assim, existem widgets para definir elementos estruturais como botões, menus e etc. Elementos de estilo como fontes, cores e formatos de texto. Aspectos de layouts como margens e espaçamentos, além de widgets com design específico para a plataforma e iOS. Além disso, o Flutter foi projetado para facilitar a criação de novos widgets e a personalização dos existentes. Os widgets formam uma hierarquia baseada na composição onde cada um herda propriedades de seu superior. A Figura 1 demonstra essa hierarquia.

Figura 1 – Hierarquia dos Widgets

Fonte: https://flutter.io/technical-overview/

O que torna o Flutter diferente da maioria das outras opções para criar aplicativos móveis, é que ele não utiliza os widgets fornecidos com o dispositivo. Em vez disso, utiliza o seu próprio mecanismo de renderização de alto desempenho para desenhar widgets. A Figura 2 representa a arquitetura do Flutter, que é composta pela engine, uma camada fina de código C/C++, e pelo framework, organizado em uma série de camadas, cada uma construída sobre a anterior e onde está implementada a maior parte de seu sistema (composição, gestos, animação, estrutura, widgets). Essa implementação é feita em Dart3, uma linguagem de programação moderna, concisa e fortemente tipada e orientada a objetos.

Figura 2 – Arquitetura do Flutter

Fonte: https://flutter.io/technical-overview/

Autor: Vinicíus Braga

REFERÊNCIAS

ANDROID. Android Platform Architecture. Disponível em: <https: //developer.android.com/guide/platform/>.

GARTNER. Worldwide Sales of Smartphones Returned to Growth in First Quarter of 2018. Disponível em: <https://www.gartner.com/en/newsroom/pressreleases/2018-05-29-gartner-says-worldwide-sales-of-smartphones-returned-to-growthin-first-quarter-of-2018>.

FLUTTER. Editor. 2018. Disponível em: <https://flutter.io/docs/get-started/editor>.

RPA – Robotic Process Automation

A automação de processos robóticos, do inglês Robotic Process Automation (RPA) é uma forma emergente de tecnologia de automação de processos de negócios baseada na noção de robôs de software ou de trabalhadores de inteligência artificial.

Em ferramentas tradicionais de automação de fluxo de trabalho, um desenvolvedor de software produz uma lista de ações para automatizar uma tarefa e interface para o sistema back-end usando interfaces de programação de aplicativos internos (APIs) ou linguagem de script dedicada. Em contraste, os sistemas RPA desenvolvem a lista de ações observando o usuário executar essa tarefa na interface gráfica com o usuário (GUI) do aplicativo e, em seguida, executa a automação repetindo essas tarefas diretamente na GUI. Isso pode diminuir a barreira do uso de automação em produtos que, de outra forma, não teriam APIs para essa finalidade.

As ferramentas do RPA têm o objetivo de substituir tarefas repetitivas, operacionais e de baixa importância. Deixando assim as pessoas livres para atuar em atividades que exigem o uso de julgamentos, da razão, de sentimentos e de fatores humanos que contribuem para a inovação de qualquer empresa. Todos os sistemas que operam sem a mínima integração e que demandam toda uma equipe para tabular dados e preencher planilhas serão manipulados por robôs, que executarão cada tarefa com uma velocidade muito maior do que uma pessoa.

Os RPA têm fortes semelhanças técnicas com as ferramentas de teste da interface gráfica do usuário. Essas ferramentas também automatizam as interações com a GUI e geralmente o fazem repetindo um conjunto de ações de demonstração executadas por um usuário. As ferramentas do RPA diferem desses sistemas, incluindo recursos que permitem que os dados sejam manipulados em e entre vários aplicativos, por exemplo, recebimento de email contendo uma fatura, extração de dados e, em seguida, digitação em um sistema de contabilidade.

EVOLUÇÃO HISTÓRICA DA RPA

Como uma forma de automação, o conceito de RPA existe há muito tempo na forma de screen scraping, mas a primeira é considerada uma evolução tecnológica significativa dessa técnica, no sentido de que novas plataformas de software estão surgindo, que são suficientemente maduras, resilientes, escalável e confiável para tornar esta abordagem viável para uso em grandes empresas. (NEW SCIENTIST, 2015).

Como exemplo de até que ponto a tecnologia se desenvolveu desde a sua forma inicial na raspagem de telas, é útil considerar o caso citado em um estudo acadêmico.  Usuários de uma plataforma da Xchanging, empresa global sediada no Reino Unido que fornece processamento de negócios, tecnologia e serviços de compras em todo o mundo, antropomorfizou seu robô em uma colega de trabalho chamada “Poppy” e até convidou “ela” para a festa de Natal.  Esse exemplo serve para demonstrar o nível de intuição, engajamento e facilidade de uso das modernas plataformas de tecnologia RPA, que leva seus usuários (ou “treinadores”) a se relacionar com eles como seres, em vez de serviços de software abstratos. (WILLCOCKS, LACITY E CRAIG, 2015).

OS IMPACTOS DO RPA

3.1 Impactos no mercado de trabalho 

De acordo com a Harvard Business Review (2014), a maioria dos grupos de operações que adotaram a RPA prometeu a seus funcionários que a automação não resultaria em demissões. Em vez disso, os trabalhadores foram realocados para fazer um trabalho mais interessante.  Um estudo acadêmico destacou que os trabalhadores do conhecimento não se sentem ameaçados pela automação: eles adotaram e viram os robôs como companheiros de equipe. O mesmo estudo destacou que, ao invés de resultar em um menor número de funcionários, a tecnologia foi implantada de forma a alcançar mais trabalho e maior produtividade com o mesmo número de pessoas.

Por outro lado, alguns analistas afirmam que a RPA representa uma ameaça para a indústria de Business Process Outsourcing (BPO). A tese por trás dessa noção é que a RPA permitirá que as empresas “repatriarem” processos de locais offshore em data centers locais, com o benefício dessa nova tecnologia.  O efeito, se for verdade, será criar trabalhos de alto valor para designers de processos qualificados em locais onshore (e dentro da cadeia de fornecimento de hardware de TI, gerenciamento de data center, etc.), mas para diminuir a oportunidade disponível para offshore de trabalhadores pouco qualificados.  Por outro lado, esta discussão parece ser um terreno saudável para o debate, já que outro estudo acadêmico se esforçou para combater o chamado “mito” de que a RPA trará muitos empregos do exterior. (SLABY, 2012).

Impactos na sociedade

Estudos acadêmicos projetam que a RPA, entre outras tendências tecnológicas, deverá impulsionar uma nova onda de ganhos de produtividade e eficiência no mercado de trabalho global.  Embora não seja atribuída diretamente à RPA, a Universidade de Oxford estima que até 20% de todos os trabalhos podem ter sido automatizados até 2035.

Em uma palestra do TEDx organizada pela UCL em Londres, o empreendedor David Moss explicou que a mão-de-obra digital na forma de RPA não apenas revolucionará o modelo de custo da indústria de serviços ao reduzir os preços de produtos e serviços, mas é provável que aumente os níveis de serviço, a qualidade dos resultados e crie maiores oportunidades para a personalização dos serviços.  (JEE, 2016).

Enquanto isso, o professor Willcocks (2015), autor do artigo de LSE, fala de maior satisfação no trabalho e estímulo intelectual, caracterizando a tecnologia como tendo a capacidade de “tirar o robô do humano”, uma referência ao “A noção de que os robôs assumirão as porções mundanas e repetitivas da carga de trabalho diária das pessoas, deixando-as reposicionadas em papéis mais interpessoais ou concentradas nas partes restantes, mais significativas, de seus dias”.

IMPLEMENTAÇÃO DO RPA EM EMPRESAS

De acordo com a iCaptor a implementação de um RPA, ao contrário de outras ferramentas de TI, é bem simples. Existem processos de pequenas e médias empresas, para as quais desburocratizar e cortar algumas fases é essencial para alcançar rápidos resultados.

Uma implementação bem sucedida começa por encontrar os processos da empresa que poderiam se beneficiar do RPA. Para começar, é necessário realizar uma avaliação de alto nível de quais processos e tarefas podem ser robotizados.

A segunda fase desse processo envolve a seleção de um provedor de RPA, começando por obter informações sobre os requisitos técnicos e os critérios de avaliação. O processo de seleção, muitas vezes, é uma oportunidade para que os fornecedores mostrem como eles atendem aos seus requisitos.

A fase seguinte inclui a facilitação do piloto para as áreas de processo selecionados na fase 1 e 2. Durante esse passo a robotização será explorada de ponta a ponta para mostrar toda a extensão da tecnologia RPA. É importante garantir que os recursos de capital humano sejam treinados e estejam prontos para executar o plano de implementação. Essa etapa também envolve o suporte e o teste do ambiente de TI. Além disso, as atividades de implementação precisarão ser documentadas, rastreadas e concluídas de acordo com o plano inicial.

Se ocorrerem erros, esse é o momento de aprimorar e fazer modificações finais antes da revisão das partes interessadas. Assim, esse momento estabelece as bases para futuros modelos operacionais para uma transição suave para a estratégia RPA de longo prazo definida na Fase 1 e gerenciada na Fase Final.

A fase final é a hora de lançar a solução RPA bem-sucedida, que inclui o lançamento inicial do RPA, bem como o planejamento do sucesso contínuo do software RPA por meio da manutenção proativa.

A estratégia deve incluir um modelo de governança, um modelo operacional, uma estrutura organizacional e uma estratégia de gerenciamento de mudanças da solução RPA. Suas principais tarefas na fase final são:

  • colocar o modelo estratégico final em vigor;
  • determinar o modelo operacional, a governança e o sistema de priorização de processos;
  • fazer a gestão do plano de gerenciamento e de comunicação de mudanças em curso. 

CONSIDERAÇÕES FINAIS SOBRE RPA

A partir dessas informações é possível considerar que um RPA pode ser uma solução definitiva para a otimização dos processos de uma empresa. Com ele, torna-se desnecessário atualizar os sistemas para outros mais pesados e complexos. O RPA é uma solução definitiva, que aproveitará todo o legado dos seus sistemas atuais.

Dessa forma, em vez de contratar um ERP que faz tudo, é possível aproveitar a ferramenta de CRM e integrá-la com outros sistemas, sem ter que se preocupar em ter a tecnologia mais recente e mais completa de gestão empresarial. Basta investir em um bom RPA e contratar novos sistemas à medida que uma demanda real surgir.

Seja RPA, chatbots ou tecnologias de planejamento de projetos, cada vez mais empresas estão tentando se preparar para o futuro do trabalho. No local de trabalho, a tecnologia ultrapassada pode prejudicar a retenção e, em um mercado de funcionários, as empresas competirão por expertise, aumentando assim o preço dos salários. Ao criar uma cultura de local de trabalho mais fluida, as empresas estarão em melhor posição para competir a longo prazo.

Saul Vilasboa

Aplicativos Nativos ou Multiplataforma? Eis a questão…

Neste artigo você vai entender o que são Aplicativos Nativos e Multiplataforma, quais suas vantagens e desvantagens no universo do desenvolvimento mobile.

Todos os dias, inúmeros apps surgem com a finalidade de resolver problemas, atender necessidades ou de simplesmente divertir seu público.

Os aplicativos móveis já são uma mania, com eles podemos realizar tarefas de forma muito ágil, como a de pedir comida, um táxi, controlar nossos gastos, acessar nossa conta bancária, realizar compras, vendas, enviar mensagens e muitas outras funcionalidades que deixam nossa vida mais prática.

Os smartphones e os tablets foram os responsáveis por nos tornar dependentes dessa tecnologia. Eles são os propagadores dos aplicativos “ferramentas” mais utilizados atualmente no mundo digital. Com certeza, permanecerão por muito tempo no topo dos itens mais desejados pelo público em geral.

Devido a popularização dos tablets e smartphones, as empresas foram obrigadas a criar aplicativos mais “inteligentes” e de uma maneira mais rápida. A fim de resolver esse problema, cada empresa criou seu próprio sistema operacional, loja de aplicativos e canais de desenvolvimento tentando obter uma maior fatia desse mercado.

“Afinal, se cada empresa tem seu sistema operacional, podemos dizer que o desenvolvimento, neste caso, será de Aplicativos Nativos?”

A resposta para essa pergunta é: “Sim”, pois os sistemas nativos são os que são criados para uso exclusivo da plataforma determinada pela empresa do ramo móvel.

Os apps nativos necessitam de desenvolvedores especialistas em cada plataforma ou até desenvolvedores que conhecem várias plataformas.

A principal vantagem é que neste caso, o desenvolvedor possui acesso a todos os recursos do dispositivo (acelerômetro, giroscópio, geolocalização, etc..) além de obter um bom desempenho da aplicação.

Como o desenvolvimento é voltado especificamente para cada plataforma, explora muito bem toda UX/UI seguindo a padronização de interface do usuário.

A principal desvantagem dos apps nativos corresponde ao custo do desenvolvimento que é bastante elevado, pois necessita de um desenvolvedor específico para cada plataforma. Além disso, o tempo de desenvolvimento e o prazo de entrega final se tornam maiores, pois todo trabalho terá que ser feito novamente para cada plataforma.

Exemplos de aplicativos nativos: Facebook Messenger, foi desenvolvido para atender recursos dos sistemas operacionais Android e IOS. WhatsApp, famoso aplicativo de mensagens instantâneas, foi vendido ao Facebook por US$ 16 bilhões e faz parte da vida de quase todas as pessoas do mundo todo.

 “E quanto ao desenvolvimento multiplataforma, para que serve?”

Quanto mais sistemas operacionais diferentes, maior será o esforço, tempo e custo necessários para desenvolver um app que atenda a todas as plataformas existentes. Nestes casos, os aplicativos Multiplataformas se destacam.

Os apps Multiplataforma tem uma grande vantagem para o desenvolvedor que é a de escrever em um único código fonte para várias plataformas. Isto é, tem um maior controle sobre o código fonte, qualquer alteração será realizada simultaneamente em todas as plataformas.

Eles acessam recursos nativos do dispositivo através de programas como o Cordova e Phonegap que servem basicamente para criar um app nativo.

Respeita também a UX/UI do sistema operacional do dispositivo, porém tem a desvantagem de utilizar um navegador embutido no aplicativo para demostrar ao usuário a aplicação.

Outra desvantagem é de que as API´s nativas demoram a ser integradas nos apps multiplataformas, portanto, as aplicações têm uma demora maior no quesito da utilização dos novos recursos dos dispositivos.

O custo do desenvolvimento dos apps multiplataforma é bem reduzido, bem como o tempo de desenvolvimento, pois em um único código é possível gerar um app nativo para diferentes plataformas.

Já que o código fonte é único, o desenvolvedor não precisa se especializar em cada plataforma, pois nessa forma não é necessário a utilização de IDE específica.

Exemplos de aplicativos Multiplataforma: Untappd, é uma rede social e de check-in para cervejeiros, onde os usuários encontram cervejarias e bares pelo mundo todo. MarketWatch oferece aos usuários notícias comerciais e informações sobre o mercado financeiro.

 Conclusão

O desenvolvimento Multiplataforma está cada dia mais evoluído, a ponto de já apresentar mais vantagens do que desvantagens. Não quer esta tecnologia seja mais vantajosa que a nativa, pois cada uma delas tem particularidades distintas. Antes de começar um desenvolvimento, deve-se analisar com maior rigor se a mesma atenderá todas as exigências da aplicação, pesar os objetivos futuros bem como a disponibilidade de recursos financeiros da empresa.

Autor Jean Carlos Wieczorek

Artigo do Seminário de Engenharia de Software – 2018/2

 

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

Mínimo Produto Viável – MVP

Startups são empresas em fase inicial que desenvolvem produtos ou serviços inovadores, com potencial de rápido crescimento. Neste contexto de empreendedorismo, principalmente abordando o tema startups, temos o conceito de MVP que no português significa Mínimo Produto Viável.

O MVP é a versão mais simples de um produto que pode ser lançado com uma quantidade mínima de esforço e desenvolvimento. Um MVP ajuda os empreendedores a iniciarem um processo de aprendizagem, poupando tempo e esforços.

O MVP pode ser uma das primeiras etapas do processo empreendedor. Eleger um MVP significa observar e coletar dados sobre clientes e criar situações práticas de negócio que façam com que a startup aprenda e se molde rapidamente com o intuito de lançar uma solução inovadora.

A prática ajuda a investir em um produto certeiro, que seja realmente útil para o seu público alvo. Além disso, depois de algum tempo de prática será possível prever os fatos antes que eles aconteçam, lançar novidades antes que seja tarde demais.

Desenvolver um MVP para ideia de negócio não é garantia de sucesso. Eles são projetados para testar as suposições de um problema que queremos resolver sem que haja muitos investimentos. Para tanto, existem alguns tipos de MVP para auxiliar a escolha da estratégia inicial.

 

Tipos de MVP

 

Papel

Podem ser desenhos feitos à mão, de uma interface para usar como protótipo, ou exemplos ilustrados de um projeto. Fáceis de fazer, visuais que criam entendimento compartilhado. Este tipo de MVP possui algumas limitações, a sua interação é limitada e não testa usabilidade ou hipóteses. Alguns exemplos são diagramas ou esboços.

 

Protótipo Interativo

Estes podem ser representados por maquetes interativas, clicáveis. Testa designs e usabilidades, itera soluções rapidamente e ainda usa entrevistas com clientes. Este não testa hipóteses e nem tecnologias de apoio. Exemplos são HTMLs ou maquetes clicáveis, ou ainda vídeos.

 

Concierge

É um serviço pessoal, em vez de um produto, que manualmente guia o cliente pelo processo, usando os mesmos passos propostos para resolver o problema do cliente no produto digital. Reduz a complexidade, suporta pesquisa generativa, valida suposições qualitativamente com baixo investimento. Seus contras são a escalabilidade limitada, é manual e tem uso intensivo de recursos, o cliente sabe do envolvimento humano.

 

Mágico de Oz

Este é o produto real em operação. Apesar de nos bastidores, todas as funções são executadas manualmente sem o conhecimento da pessoa que está usando o produto. Uma solução em operação da perspectiva do cliente, uma pessoa no papel do mágico pode conseguir envolvimentos mais próximos. Possibilita pesquisa de avaliação para preço e validação da proposta de valor. Alguns dos contras podem ser a escalabilidade limitada devido a um alto comprometimento de recursos.

 

Micronicho

Micronicho consiste em reduzir todas as features do produto ao mínimo, a fim de descobrir se os clientes estão interessados ou dispostos a pagar por ele. Um teste altamente focado, dedicado a qualquer tópico específico, exige mínimo esforço. Um dos contras seria a necessidade de investimento financeiro, pois um dos exemplos deste seria a disponibilização de uma página web simples com o produto oferecido.

 

Software em Operação

Como o próprio nome deste MVP já diz, trata-se de oferecer o produto em operação funcionando plenamente para resolver o problema de um cliente, equipado para medir comportamento de cliente e interações. Alguns dos benefícios são testar hipóteses em um ambiente real, valida suposições qualitativamente. Porém este é caro, precisa de investimento em pessoas e ferramentas.

 

Empresas que utilizaram MVP

 

Facebook

A rede social foi testada, inicialmente, para dentro dos muros da Universidade de Harvard. O período em que a rede atingia apenas os alunos da comunidade universitária foi importante para que o jovem Mark promovesse alterações fundamentais, em linha com o que foi se revelando necessário ao longo do processo de validação.

 

Groupon

A primeira versão do Groupon era um site extremamente simples, feito em wordpress e que gerava cupons em pdf, os quais eram enviados de forma manual a cada interessado.

 

Apple

O iPhone 1 era o típico exemplo de MVP. O aparelho não possuía algumas funções básicas, como copiar e colar, além de exigir download obrigatório do iTunes para ativação. O objetivo aqui era claramente segurar algumas funcionalidades para que fossem lançadas nas versões seguintes do equipamento, gerando ansiedade e euforia entre os clientes.

 

Foursquare

Antes de ir a campo, o serviço de localização coletou depoimentos e sugestões de possíveis usuários, por meio do Google Docs, além de disponibilizar uma versão mais restrita do produto a um grupo seleto de futuros clientes.

 

Autor: Giovani Augusto Varaschini

Um pouco sobre Bootstrap

 

 

 

 

 

 

Desenvolva com facilidade e praticidade.

Principal Framework CSS usado em front-end de aplicações web, com seus recursos, tornam o desenvolvimento de páginas mais fácil, páginas que se adaptam a diversos tamanhos de tela.

Conceito

Bootstrap é um conjunto de componentes correlacionados para ajudar a desenvolver interface com o usuário de forma ágil e fácil. Foi criado em agosto de 2011 pelos desenvolvedores do Twitter, Mark Otto e Jacob Thorton. Tem como objetivo central fornecer ao usuário uma facilidade de desenvolvimento de layouts pré-configurados, tanto para questão de produtividade como também da questão da responsividade.

Customização, responsivo e documentação são as principais características do Bootstrap. Pois a customização é rápida e fácil, responsividade torna o site mais responsivo e a documentação conforme o site do desenvolvedor, mostra que é bem simples e prático de aprender tornando a implementação fácil. Geralmente usado em frond-end, mas atualmente é utilizado em back-end, pois suas ferramentas visuais tornam o visual dos projetos avançados mais aperfeiçoado. Dessa forma, o usuário fica mais familiarizado com o sistema.

Incluso em seu conjunto de recursos, se encontram o HTML 5, CSS 3, Jquery, Node, JavaScript, Ajax. Dessa forma, ao baixar o pacote Bootstrap, não será mais preciso baixar os plug-ins do Jquery por exemplo, pois já faz parte do pacote do Bootstrap.

Rápido

Bootstrap é rápido por quatro motivos:

  1. Seus arquivos tem um tamanho bem pequeno.
    1. js tem no máximo 83kb;
    2. css tem no máximo 98kb
    3. webfont tem no máximo 144kb.
  2. Carrega só o que precisa, somente o que for utilizado no projeto.
  3. Escrever menos código, não precisará definir todo o layout do formulário, pois irá usar classes pré-definidas e melhorar o layout do formulário sem precisar codificar mais nada por exemplo.
  4. Utiliza o sistema de Grids, principal enfoco do Bootstrap, por causa das 12 colunas que se trabalha de forma dinamizada da ferramenta.

 Fases do Bootstrap:

  • Versão 1 – Somente disposto para facilitar o desenvolvimento para desktops. Não tinha os conceitos ligados a responsividade de acordo com outros dispositivos, exemplo tablets, smartphones.
  • Versão 2 – Desenvolvimento para desktop com adaptação para tablete e por fim smartphones. Foi implementado a responsividade para dispositivos móveis.
  • Versão 3 – Surgiu o conceito de mobile first, que é justamente a questão da responsividade inicial para mobile para posteriormente adaptação dos desktops. Inverso da segunda versão.
  • Versão 4 – Realizado a mudança do modelo Less para o Sass, deixando a compilação mais rápida. Fim do suporte para IE8 e lançamento do Bootstrap themes.

Sistema de grade (Grids System) é responsivel e permite até 12 colunas através da página. Tem 4 tipos de classes, dependendo do dispositivo e pode ser ntegrado com outro para criar layouts flexíveis. O layout de sites que são visualizados tanto em navegadores de desktops ou mobile, são de extrema importância, pois o uso das grids, tem o papel de ajustar o layout conforme o tamanho da tela. Assim, tornando sistemas de grade útil.

Bootstrap fornece ferramentas para a construção de sites e aplicações modernas, agregando recursos dinâmicos. Sendo uma ferramenta gratuita e de fácil acesso, vale muito a pena o uso de Bootstrap em projetos mais avançados.

Autor Douglas Beux
Fontes:
Baseado em http://www.ericplatas.com.br/artigos/introducao-bootstrap-framework/.
Adaptado de https://imasters.com.br/design-ux/design-responsivo/7-razoes-para-desenvolver-seus-web-designs-no-bootstrap/?trace=1519021197&source=single.
Adaptado de https://www.youtube.com/watch?v=0o2GWZ0uUeY&t=1839s.