Migrando uma Aplicação MEAN para Arquitetura Serverless & Azure Functions

Este artigo faz parte da coleção de conteúdos do #ServerlessSeptember. Aqui você encontrará todos os artigos publicados durante o mês de Setembro de 2019.

Durante esse artigo você aprenderá a realizar a migração de uma maneira simples, rápida e dinâmica de uma aplicação MEAN para uma arquitetura Serverless, fazendo uso do Azure Functions!

O projeto MEAN já está pronto e vocês podem fazer um git clone ou download AQUI

Vamos nessa?!

Entendendo a estrutura do Projeto MEAN

Nesse projeto vamos focar nas duas pastas: api e front. Conforme a imagem abaixo:

Se vocês executarem essa aplicação observarão que estamos persistindo essa aplicação no MongoDb e usando o Back-End, que nesse caso estamos usando o Node.js

Os dados persistidos consiste em:

Classe: Funcionario

  • idFuncionario: (number – guid gerado pelo MongoDb)
  • nomeFuncionario: string
  • cargo: string
  • numeroIdentificador: number

Caso desejam executar localmente esse projeto, bastam seguir os passos no README.md do repositório do projeto.

Bom, agora que vocês estão com o projeto MEAN em mãos, vamos começar a fazer a migração para o Azure Functions?!

Mas antes, vamos entender o que seria o Azure Functions!

O que é Azure Functions?! ⚡️

Azure Functions é um serviço de computação serverless que permite executar o facilmente pequenos trechos de código ou funções na nuvem sobre demanda sem precisar provisionar ou gerenciar a infraestrutura.

E o Azure Functions possui suporte a inúmeras linguagens, entre elas:

Já as linguagens abaixo, já possui suporte, porém estão na sua versão preview:

  • Bash
  • PHP

Se desejarem saber mais detalhes das linguagens que possuem suporte ao Azure Functions, bastam acessar o link AQUI.

Porém, para esse artigo focaremos no JavaScript! 😉

Templates Importantes no Azure Functions

Antes de começar a realizar a migração é importante mencionar que o Azure Functions dispõe de inúmeros templates já prontos e preparados só para começar a serem usados. Entre eles:

Não entrarei em detalhes de cada um, pois senão esse artigo ficará muito grande. Mas, caso desejam entender mais sobre cada template e qual o seu melhor uso numa determinada aplicação, recomendo a leitura na documentação AQUI.

Para esse post, estaremos fazendo uso do template: HTTPTrigger uma vez que esse template dispara a execução do seu código usando uma solicitação HTTP. E é justamente o que precisaremos para realizar a migração!

Caso você seja um(a) estudante de alguma Instituição de Ensino de Faculdade ou Universidade, poderá criar sua conta no Azure for Students. Essa conta te dará o benefício em possuir crédito de USD 100,00 para usar os serviços de maneira gratuita, sem necessidade de possuir um cartão de crédito. Para ativar essa conta, bastam acessar o link ao lado: AQUI. Com essa conta, você poderá fazer uso de 1.000.000 solicitações gratuitas por mês para processar eventos no Azure Functions!

Screen-Shot-09-11-19-at-12-42-PM.png

Bom, depois desse overview sobre Azure Functions, podemos enfim começar a nossa migração! Vamos que vamos!

Instalando o pacote Azure Functions Core Tools

Azure Functions Core Tools nos permitirá desenvolver e testar as funções de maneira local na nossa máquina a partir de um terminal ou prompt de comando.

Abaixo seguem os programas e o pacote que precisaremos para continuar no nosso tutorial:

Depois que você tiver o Node.js instalado na sua máquina, basta digitar o seguinte comando:

  • Windows
npm install -g azure-functions-core-tools
  • MacOs
brew tap azure/functions
brew install azure-functions-core-tools
  • Linux (Ubuntu/Debian) com APT
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg

Para maiores informações para instalar de maneira correta o Azure Functions Core Tools, bastam acessar o link AQUI

E como vou saber se de fato o meu Azure Functions Core Tools está instalado de maneira correta na minha máquina?! Bastam digitar o seguinte comando no terminal:

> func

Se acontecer conforme o gif abaixo é porque o pacote foi instalado com sucesso!

gif-serverless-07.gif

Ótimo. Agora, podemos criar as nossas funções. Para isso, crie um pasta local na sua máquina e vamos começar!

Criando uma Nova Aplicação no Azure Functions

Agora que já temos instalado o pacote, vamos criar uma nova aplicação. Para isso, bastam seguir o passos conforme o gif abaixo:

gif-serverless-08.gif

Observam que, quando abrimos o Visual Studio Code, precisamos clicar no botão YES que aparece no canto inferior direito para habilitar alguns arquivos importantes no projeto.

Criando a Conexão com o MongoDb

Bom, vamos fazer agora algumas alterações necessárias no nosso projeto recém criado. Para isso, vamos instalar localmente o mongodb no nosso projeto. Digitem o seguinte comando:

npm install mongodb

Ao instalar o mongoDb no projeto, observem que houve alterações no arquivo package.json. No final o arquivo deverá ficar da seguinte maneira:

  • arquivo: package.json
{
  "name": "crud-serverless-mongodb",
  "version": "1.0.0",
  "description": "Projeto azure functions com persistencia com o mongoDb",
  "scripts": {
    "test": "echo \"No tests yet...\""
  },
  "author": "",
  "dependencies": {
    "mongodb": "^3.3.2"
  }
}

Agora, vamos criar uma pasta chamada: shared e dentro dela vamos criar o arquivo: mongo.js. A estrutura do projeto agora ficará da seguinte maneira:

Vamos agora alterar o arquivo mongo.js. Para isso, inclua o bloco de código abaixo:

  • arquivo: shared/mongo.js
/**
 * Arquivo: mongo.js
 * Data: 10/11/2019
 * Descrição: arquivo responsável por tratar a conexão da Base de Dados localmente
 * Author: Glaucia Lemos
 */

const { MongoClient } = require("mongodb");

const config = {
  url: "mongodb://localhost:27017/crud-serverless-mongodb",
  dbName: "crud-serverless-mongodb"
};

async function createConnection() {
  const connection = await MongoClient.connect(config.url, {
    useNewUrlParser: true
  });
  const db = connection.db(config.dbName);
  return {
    connection,
    db
  };
}

module.exports = createConnection;

Aqui estamos criando a nossa conexão local com o MongoDb! Muito parecido com o que já fazemos no Back-End com o Node.js, não é mesmo?!

E vamos também alterar o arquivo local.settings.json. Esse arquivo é responsável por ‘guardar’ todas as keys que não queremos que estejam expostas na hora de realizar o commit. Notem que esse arquivo está na lista de arquivos no .gitignore.

Abram o arquivo local.settings.json e façam as seguintes alterações:

  • arquivo: local.settings.json
{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "AzureWebJobsStorage": "{AzureWebJobsStorage}"
  },
  "Host": {
    "LocalHttpPort": 7071,
    "CORS": "*"
  }
}

Notem no bloco de código acima que já estamos habilitando o CORS. Pois sem ele, não conseguimos realizar as operações de CRUD no front! Se desejarem entender um pouco mais sobre o CORS recomendo a leitura AQUI.

Bom, a primeira parte já está pronta! Agora vamos criar o nosso CRUD no Azure Functions!

Criando a função ‘CreateFuncionario’

Para criar uma nova função bastam digitar o seguinte comando:

func new

Ao digitar esse comando ele dará várias opções de templates que o Azure Functions nos disponibiliza. No nosso caso, conforme já mencionado acima, vamos escolher o template: HttpTrigger. Sigam os passos do gif abaixo:

gif-serverless-09.gif

Observem que, foi criado uma pasta CreateFuncionario e dois arquivos:

  • function.json: aqui iremos definir as rotas e os métodos do nosso endpoint.
  • index.json: aqui iremos desenvolver a lógica inerente ao endpoint.

Vamos começar a alterar esses arquivos. Começando pelo function.json

  • arquivo: CreateFuncionario/function.json
{
  "bindings": [{
          "authLevel": "anonymous",
          "type": "httpTrigger",
          "direction": "in",
          "name": "req",
          "methods": ["post"],
          "route": "funcionarios"
      },
      {
          "type": "http",
          "direction": "out",
          "name": "res"
      }
  ]
}

Agora vamos alterar o arquivo index.js:

  • arquivo: CreateFuncionario/index.js
/**
 * Arquivo: CreateFuncionario/index.js
 * Data: 10/11/2019
 * Descrição: arquivo responsável por criar um novo 'Funcionário'
 * Author: Glaucia Lemos
 */

const createMongoClient = require('../shared/mongo')

module.exports = async function (context, req) {
  const funcionario = req.body || {}

  if (funcionario) {
    context.res = {
      status: 400,
      body: 'Os dados do(a) Funcionário(a) é obrigatório!'
    }
  }

  const { db, connection } = await createMongoClient()

  const Funcionarios = db.collection('funcionarios')

  try {
    const funcionarios = await Funcionarios.insert(funcionario)
    connection.close()

    context.res = {
      status: 201,
      body: funcionarios.ops[0]
    }
  } catch (error) {
    context.res = {
      status: 500,
      body: 'Error ao criar um novo Funcionário(a)'
    }
  }
}

Aqui estamos praticamente definindo a rota do Post e desenvolvendo a lógica do Criar um novo Funcionário.

Vamos executar esse endpoint?! Para executar, bastam digitar o seguinte comando:

> func host start

E ele irá listar o nosso endpoint criado! Vejam no gif:

gif-serverless-11.gif

Ele lista para nós o seguinte endpoint: [POST] http://localhost:7071/api/funcionario

A porta 7071 é a porta default do Azure Functions. E é justamente ela que iremos precisar para colocar no nosso Front-End!

Bom, vamos agora pegar essa rota e adicionar no Front-End! Para isso, precisamos realizar algumas alterações no projeto Front. Vão até a pasta front em: front -> src -> app -> funcionario.service.ts e alterem o seguinte arquivo funcionario.service.ts

  • arquivo: funcionario.service.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class FuncionarioService {

  // ==> Uri da api (Back-End)
  uri = 'http://localhost:7071/api';

  constructor(private http: HttpClient) { }


(...)

Só precisamos alterar a uri definida no service do Angular.

Nesse momento, precisaremos executar o Mongo Compass e o Front-End. Observem no gif como persistirá o novo funcionário e que não precisaremos mais da pasta api do projeto!

gif serverless 12

Persistiu lindamente! 😍

Agora, vamos fazer o listar!

Criando a função ‘GetFuncionarios’

É a mesma premissa que foi feita acima, vamos criar uma nova função com o comando: func new, nomear a função de GetFuncionarios e alterar os arquivos: function.json e index.js

gif serverless 13
  • GetFuncionarios/function.json
{
    "bindings": [{
            "authLevel": "anonymous",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": ["get"],
            "route": "funcionarios"
        },
        {
            "type": "http",
            "direction": "out",
            "name": "res"
        }
    ]
}


  • GetFuncionarios/index.js
/**
 * Arquivo: GetFuncionarios/index.js
 * Data: 10/11/2019
 * Descrição: arquivo responsável por listar todos os 'Funcionários'
 * Author: Glaucia Lemos
 */

const createMongoClient = require('../shared/mongo')

module.exports = async context => {
  const { db, connection } = await createMongoClient()

  const Funcionarios = db.collection('funcionarios')
  const res = await Funcionarios.find({})
  const body = await res.toArray()

  connection.close()

  context.res = {
    status: 200,
    body
  }
}

Vamos testar novamente! Vejam novamente o gif abaixo!

gif-serverless-14.gif

Novamente está funcionando perfeitamente. Já observaram que é fácil criar um CRUD com o Azure Functions, não é mesmo?! Agora é só seguir os mesmos passos para criar as próximas funções!

Criando a função ‘GetFuncionarioById’

Agora que já ficou muito claro a todos aqui como é fácil criar um CRUD com o Azure Functions, vou começar a acelerar o processo de criação e só informar o que foi alterado nos arquivos function.json e index.js

  • GetFuncionarioById/index.js
{
    "bindings": [{
            "authLevel": "anonymous",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": ["get"],
            "route": "funcionarios/{id}"
        },
        {
            "type": "http",
            "direction": "out",
            "name": "res"
        }
    ]
}

  • GetFuncionarioById/function.json
// @ts-nocheck
/**
 * Arquivo: GetFuncionarioById/index.js
 * Data: 10/11/2019
 * Descrição: arquivo responsável por listar Funcionário pelo Id
 * Author: Glaucia Lemos
 */

const { ObjectID } = require('mongodb')
const createMongoClient = require('../shared/mongo')

module.exports = async function (context, req) {
  const { id } = req.params

  if (!id) {
    context.res = {
      status: 400,
      body: 'Por favor, passe o número correto do Id do Funcionário!'
    }

    return
  }

  const { db, connection } = await createMongoClient()

  const Funcionarios = db.collection('funcionarios')

  try {
    const body = await Funcionarios.findOne({ _id: ObjectID(id) })

    connection.close()
    context.res = {
      status: 200,
      body
    }
  } catch (error) {
    context.res = {
      status: 500,
      body: 'Erro ao listar o Funcionário pelo Id.'
    }
  }
}

Não vamos testar agora. Vamos desenvolver as duas últimas funções: Update e Delete.

Criando a função: ‘UpdateFuncionario’

Novamente, vamos criar uma nova função e alterar os arquivos function.json e index.js:

  • UpdateFuncionario/index.js
{
    "bindings": [{
            "authLevel": "anonymous",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": ["put"],
            "route": "funcionarios/{id}"
        },
        {
            "type": "http",
            "direction": "out",
            "name": "res"
        }
    ]
}

  • UpdateFuncionario/index.js
// @ts-nocheck
/**
 * Arquivo: UpdateFuncionario/index.js
 * Data: 10/11/2019
 * Descrição: arquivo responsável por atualizar 'Funcionário' por Id
 * Author: Glaucia Lemos
 */

const { ObjectID } = require('mongodb')
const createMongoClient = require('../shared/mongo')

module.exports = async function (context, req) {
  const { id } = req.params
  const funcionario = req.body || {}

  if (!id || !funcionario) {
    context.res = {
      status: 400,
      body: 'Os campos são obrigatórios'
    }

    return
  }

  const { db, connection } = await createMongoClient()
  const Funcionarios = db.collection('funcionarios')

  try {
    const funcionarios = await Funcionarios.findOneAndUpdate(
      { _id: ObjectID(id) },
      { set: funcionario }
    )

    connection.close()

    context.res = {
      status: 200,
      body: funcionarios
    }
  } catch (error) {
    context.res = {
      status: 500,
      body: 'Erro ao atualizar o Funcionário'
    }
  }
}


Show! Agora vamos desenvolver a nossa última função: Delete!

Criando a função: ‘DeleteFuncionario’

Novamente, bastam criar uma nova função, escolher a opção: HttpTrigger, nomear a função de DeleteFuncionario e alterar os arquivos function.json e index.js:

  • DeleteFuncionario/function.json
{
  "bindings": [{
          "authLevel": "anonymous",
          "type": "httpTrigger",
          "direction": "in",
          "name": "req",
          "methods": ["delete"],
          "route": "funcionarios/{id}"
      },
      {
          "type": "http",
          "direction": "out",
          "name": "res"
      }
  ]
}

  • DeleteFuncionario/index.js
// @ts-nocheck
/**
 * Arquivo: DeleteFuncionario/index.js
 * Data: 10/11/2019
 * Descrição: arquivo responsável excluir um 'Funcionário' pelo Id
 * Author: Glaucia Lemos
 */

const { ObjectID } = require('mongodb')
const createMongoClient = require('../shared/mongo')

module.exports = async function (context, req) {
  const { id } = req.params

  if (!id) {
    context.res = {
      status: 400,
      body: 'Os campos são obrigatórios!'
    }

    return
  }

  const { db, connection } = await createMongoClient()

  const Funcionarios = db.collection('funcionarios')

  try {
    await Funcionarios.findOneAndDelete({ _id: ObjectID(id) })
    connection.close()
    context.res = {
      status: 204,
      body: 'Funcionário excluído com sucesso!'
    }
  } catch (error) {
    context.res = {
      status: 500,
      body: 'Erro ao excluir Funcionário' + id
    }
  }
}

E está pronto o nosso CRUD! Vamos testar todos os endpoints?! Vejam o gif abaixo!

gif serverless 15

Coisa mais linda, não é mesmo?! Notem mais uma vez que, aquela pasta api onde há inúmeros arquivos, não terá mais necessidade! Podemos praticamente deletar aquela pasta inteira!!!

Todo o código fonte desenvolvido estão aqui:

👉 Projeto Front-End

👉 Projeto Api – Serverless

Palavras Finais

Hoje aprendemos a realizar a migração de uma aplicação MEAN para o Azure Functions, porém persistindo esses dados localmente e executando essas funções localmente. E se porventura precisarmos hospedar essa aplicação na Nuvem? E o nosso Back-end como ficaria?

No próximo post, estarei explicando a vocês como realizar a migração do MongoDb para o CosmosDb e como realizar o deploy dessas funções usando uma extensão do Azure Tools no próprio Visual Studio Code.

Se vocês desejam saber mais detalhes sobre Azure Functions recomendo a todos vocês os seguintes cursos totalmente gratuitos de Serverless & Azure Functions e alguns outros recursos importantes:

✅ Cursos Grátis – Azure Functions

✅ Azure para devs JavaScript & Node.js

✅ Documentação Azure Functions

✅ Criando a sua Primeira Função no Visual Studio Code

✅ Extensão Vs Code – Azure Functions

✅ E-Book Grátis – Azure Serverless Computing Cookbook

E, para ficarem por dentro das últimas atualizações não deixem de me seguir no Twitter! 😃

Twitter

Até a próxima pessoal! ❤️ ❤️ ❤️

Anúncios

Lançamentos & Novidades Build 2019

Durante os dias 06 à 08 de Maio, aconteceu um dos maiores eventos que acontece todos os anos na cidade de Seattle, USA – o Microsoft Build 2019.

Houve várias novidades e claro muitos lançamentos. Mas, vou focar nos principais lançamentos, entre eles:

  • .NET 5
  • .NET Core 3.0 Preview 5
  • Windows terminal
  • WSL 2
  • Extensão do Remote Code ao Visual Studio Code
  • React Native for Windows

Vamos nessa!

Lançamento: .NET 5

Uma dos lançamentos mais esperados e que de fato aconteceu é que após o release do .NET Core 3.0 será o .NET 5.

E segundo o blog oficial, esse será um grande lançamento da família .NET, pois haverá apenas um .NET onde o desenvolver poderá optar em usar tanto em: Windows, Linux, MacOs, Android, tvOs, watchOS e WebAssembly entre outros.


Um dos pontos altos do .NET 5 é que finalmente os desenvolvedores poderão desenvolver aplicação usando Windows Forms, WPF e o EF 6.0 – já usando o .NET Core. E esse lançamento será um grande divisor de águas uma vez que ele vem com a intenção de manter a mesma aparência e sensação independente da aplicação que esteja desenvolvendo.

Há um calendário de releases que estão previstos sair até Novembro de 2023

Caso desejam saber mais detalhes das mudanças referente ao .NET 5, bastam acessar link AQUI

.NET Core 3.0 Preview 5

Um outro lançamento feito durante o Build 2019 é com respeito ao .NET Core 3.0. O interessante dessa versão é que ele inclui um novo serializador Json com suporte para executar arquivos únicos para uma atualização em tempo de execução e alterações no BCL.

No mesmo momento, também foi lançado o ASP .NET Core 3.0 e o EF Core.

Uma das grandes novidades dessa versão é que veio com atualizações para quem deseja desenvolver com WPF e Windows Forms. Houve mudanças para o novo SqlClient, havendo mudanças significativas do provedor ao .NET Framework.

Houve muitas atualizações para essa versão, entre elas: Atualizações do Docker e AssemblyLoadContext, suporte para GC, entre outras grandes atualizações. Caso desejam ficar por dentro dessas e outras mudanças, bastam acessar o link AQUI

Windows Terminal

Dos lançamentos feitos durante o Build 2019, esse foi o que movimentou demais as redes sociais e todos durante o evento! E de fato não é para menos!

O novo Windows Terminal, veio com a proposta de ser: moderno, rápido, eficiente, poderoso e produtivo! Uma vez que, com o mesmo terminal você pode abrir inúmeras abas para: PowerShell, Cmd e WSL.

A parte que eu mais curti desse novo Windows Terminal é que ele é altamente configurável. Resumindo: você pode ir até Settings e alterar o arquivo json contido e configurar da maneira e jeito que deseja. Tudo é alterável: cor, plano de fundo, fonte e tudo mais! Você pode deixar de acordo com o seu jeito e sua cara!

Já querem testar esse novo terminal?! Se a resposta for sim, bastam acessar o link AQUI

Eu já baixei e testei e estou amando!

WSL 2

Outro grande anúncio feito é sobre o WSL 2 (Windows Subsystem for Linux). A mudança é que houve mudanças drásticos no desempenho do sistema de arquivos e compatibilidade total com as chamadas do sistema. Ou seja, a pessoa desenvolvedora poderá executar mais aplicativos Linux no WSL 2, como por exemplo o Doclker.

O gif abaixo mostra exatamente o que o WSL 2 é capaz de fazer:

Uma das coisas mais interessante disso tudo é que a Microsoft enviará um Kernel Linux com o Windows, a qual possibilitará a total compatibilidade com as chamadas do sistema. E essa será a primeira vez que um Kernel Linux é lançado no Windows – mostrando assim que a Microsoft ama o Open Source!

Uma grande mudança que com certeza, no futuro próximo, colheremos ótimos frutos mediante a tudo isso que estamos vendo. Que tempo para ser uma pessoa desenvolvedora, não é mesmo?!

Resultado de imagem para microsoft loves linux

Extensão do Remote Code ao Visual Studio Code

Essa também, foi uma das grandes novidades que tivemos no Build 2019 e que todos ficaram maravilhados!

Para aqueles que usam o Visual Studio Code foi lançado 3 novas extensões que permitem o desenvolvimento remoto em máquinas físicas ou virtuais usando o WSL.

Esse lançamento é importante, uma vez que muitas pessoas, como por exemplo, Cientistas de Dados, precisam treinar seus modelos de dados e consequentemente precisam de armazenamento massivo para analisar grandes conjuntos de dados.

Extensões remotas e locais

Se desejarem testar agora o Remote – WSL, bastam acessar o link AQUI e começar a testar agora mesmo no seu Visual Studio Code!

Caso desejam também dar uma olhada como é fácil desenvolver no WSL, assistam esse vídeo de 2 minutos e vejam como é prático e rápido!

Caso desejam ficar por dentro das atualizações e novidades em relação do Remote WSL no Visual Studio Code, bastam acessar o link AQUI.

React Native for Windows

E para fechar, vamos falar dessa outra grande novidade que foi bastante comentada durante o Build 2019!

Agora você poderá desenvolver aplicações mobile em React Native para Windows! Algo que antes era impossível fazer!

O que isso quer dizer? Isso nos mostra que, a pessoa desenvolvera, poderá desenvolver uma aplicação UWP e disponibilizar tranquilamente para o React Native. Uma vez que, o React Native for Windows estará usando o C++ e com suporte para o C#.

Outro ponto importante é que você poderá incorporar os componentes do React Native num aplicativo UWP já existente. Que grande passo não é mesmo?!

O projeto está disponibilizado no repositório oficial da Microsoft no GitHub. E melhor: código aberto, totalmente open source, só esperando a Comunidade Técnica abrir PR’s e issues!

Hero Image with Logo

Palavras Finais

Como dito acima, houve muitos anúncios e lançamentos e se eu fosse comentar aqui, esse post ficaria gigantesco demais. Porém, recomendo dois links que explicam muito bem as novidades feitas:

  • Site oficial do Build 2019: aqui eles trazem todas as novidades em forma de vídeos e tudo o que aconteceu durante o Microsoft Build 2019
  • Lambda3 Podcast 144 – Microsoft Build 2019: podcast feito pelos colaboradores da Lambda3, onde comentam também sobre os principais lançamentos e novidades que aconteceram durante o Microsoft Build 2019 – português.

Então é isso pessoal! Até a próxima!

Criando um ChatBot em menos de 5 minutos?! Sim. É possível!

Será que é possível criar um ChatBot em menos de 5 minutos?! Já vou responder que sim e é possível.

Mas, antes de mostrar o vídeo mostrando que é possível. Quero ensinar a todos vocês a desenvolver o Chatbot e no final mostrarei por vídeo que é possível criar em menos de 5 minutos. Vamos nessa?!

Recursos Necessários

Para criar o nosso ChatBot, estarei usando a nova versão do Microsoft Bot Framework: v.4. Caso queiram saber mais detalhes a respeito das novidades da versão 4 bastam acessar o link abaixo:

Para o desenvolvimento do nosso ‘echoBot’ vamos precisar instalar:

Como dito acima, estaremos fazendo uso do SDK v.4 para desenvolver o nosso echoBot.

Aqui vamos nós!

Step by Step, oh, baby! 

Vamos passo a passo para que todos vocês possam acompanhar! Primeiro, peço que vocês instalem o Node.js e depois Yeoman.

Se você for usuário Windows peço que dê uma olhada na documentação que criei no repositório demo. Pois tem que instalar o Python 2.7.x (para usuários Windows) e depois executar o comando:

> npm install -g windows-build-tools

Depois crie uma pasta com o nome do projeto. Basta seguir os passos abaixo:

> mkdir chatBot

> cd chatBot

Beleza! Pasta criada! Agora execute o seguinte comando abaixo:

> npm install -g yo generator-botbuilder

O que esse comando está fazendo? Estaremos instalando o pacote que criará um scaffolding do nosso ChatBot. Ele usa justamente o Yeoman! Por isso que precisamos instalar globalmente esse pacote. Caso queiram saber mais sobre esse pacote, bastam dar uma olhada no link abaixo:

Show! Vamos agora fazer o seguinte: dentro da pasta digitem o seguinte comando abaixo:

> yo botbuilder

Agora… segue as execução conforme o gif abaixo:

Depois, no próprio prompt comando digite o comando “code .” esse comando irá abrir o Vs Code do projeto criado. Vamos dar uma olhada em que o comando acima nos gerou!

Notem que, ele cria um scaffolding prontinho, só pedindo para ser executado. E é justamente o que iremos fazer agora. Vão até a pasta criada ‘echoBot’ e execute o seguinte comando:

> nodemon

Feito isso, executem o Bot Emulator e observem como devem proceder para executar o nosso ‘echoBot’ no gif abaixo:

Simples não é mesmo?! Notem que quando executamos o comando ‘nodemon’ ele automaticamente já executa a porta padrão do restify. E depois abriremos o Bot Framework Emulator para justamente executar o nosso echoBot, que está sinalizado com o símbolo do Bot Framework.

E vòilá! Está pronto o nosso ChatBot e desenvolvido em menos de 5 minutos. Como prova, fiz um vídeo onde mostro que é verídico criar em pouco tempo:

Sei que é um ChatBot simples. Mas, só para mostrar para todos vocês aqui que sim — é possível criar um ChatBot em menos de 5 minutos. Caso desejam criar um ChatBot mais elaborado, sugiro fazer uso dos serviços cognitivos da Microsoft. Caso queiram saber mais detalhes, bastam dar uma olhada no link abaixo:

Há 6 serviços cognitivos que vocês podem estar incluindo no ChatBot de vocês. São eles:

Dos 6 acima, eu curto mais usar o LUIS. Que é um serviço cognitivo de Processamento de Linguagem Natural. Caso queiram aprender a desenvolver um ChatBot integrado com o LUIS, segue esse curso excelente abaixo:

Cursos Grátis – Inteligência Artificial com Serviços Cognitivos & Chatbots:

Palavras Finais

O uso de ChatBots tem se tornado muito comum em nossos dias. E de fato são de grande utilidade pois nos auxiliam para responder a perguntas necessárias, a qualquer momento e a qualquer hora — 24/7, sem necessidade de um atendente de telemarketing. E se a experiencia desse ChatBot for integrada com uso de I.A com Serviços Cognitivos, podem ter certeza de que o usuário se sentirá muito feliz com essa experiência.

Fica a dica a todos. Comecem a estudar sobre o desenvolvimento de ChatBots integrados com Serviços Cognitivos com I.A.

Em breve, estarei realizando um novo treinamento de ChatBots no meu canal do Youtube, usando justamente a versão 4.

Caso queiram ficar por dentro dessa e outras novidades, me acompanhem no twitter. Pois tenho postado muitas coisas e dicas bem legais lá!

Até a próxima pessoal! 😍

14 Dicas para Turbinar o seu VS Code!

O VsCode se tornou a IDE mais querida por todas as pessoas desenvolvedoras e um dos mais usados por todos — independentemente da linguagem de programação que você está codificando!😍

Mas, o que poucos sabem é a grande quantidade de recursos e plugins que estão já disponíveis no VsCode por meio do Market Place!😎

Muitos desenvolvedores(as), quando estou realizando uma live, acabam me perguntando sobre alguns plugins e extensões que uso no meu VsCode e esse post é justamente sobre isso: como turbinar o seu VsCode para agilizar na hora de desenvolver aplicações ou até mesmo para realizar um deploy da sua aplicação direto do seuVs Code.

Vamos nessa!

Continuar lendo “14 Dicas para Turbinar o seu VS Code!”

Updates no Mundo das Comunidades e Novidades para 2019

Fala pessoal. Tudo bem? Sei que faz um tempo que não estou escrevendo, mas estarei voltando a escrever nem que seja 2x por mês, uma vez que tenho concentrado em desenvolver conteúdos através do Youtube e palestras presenciais.

Mas, vamos alguns updates que aconteceram nessas últimas semanas e o que está por vir no ano de 2019!

Vamos ao que iremos abordar durante essa postagem aqui:

  • Webinars no Canal Glaucia Lemos – 11/2018 (Loiane Gronner & Tulio Faria)
  • Próximos Webinars no Canal Glaucia Lemos – 12/2018
  • Novidades no Canal do Youtube – Glaucia Lemos – 2019
  • Novidades lançadas durante o Microsoft Connect 2018
  • Microsoft Ignite The Tour SP 2018
  • Próximos Eventos

Here we… Go!

Continuar lendo “Updates no Mundo das Comunidades e Novidades para 2019”

Novidades & Atualizações Fresquinhas! :) :)

Sei sei…. e já peço desculpas de antemão. Andei sumida por aqui. Mas, não parei e mantei a minha promessa com todos vocês: continuar gerando conteúdos.

Vamos aos tópicos a serem falados hoje aqui:

  • Participações em Eventos durante o mês de Agosto
  • Próximas Participações em Eventos durante o mês de Novembro;
  • Workshop – ASP .NET Core para Iniciantes;
  • Novas Séries no Canal do Youtube
  • Novos Webinars
  • Novidades para 2019

Vamos nessa?!

Continuar lendo “Novidades & Atualizações Fresquinhas! 🙂 :)”