4 pessoas já começaram a estudar hoje
44pessoasjá começaram a estudar hoje
já começaram a estudar hoje

Enquanto você avalia,

44pessoas já começaram a estudar hoje

Dê o próximo passo e inicie sua carreira

Dê o próximo passo e inicie sua carreira agora mesmo

Comece agora
  • Home

    Escolha seu Plano

    • Plus 2430% OFF
    • Pro 2430% OFF
    • Ultra Lab 2430% OFF

    Carreiras Alura

    Evolua com profundidade técnica, direção clara e aplicação prática.

    Jornadas guiadas do básico ao avançado com checkpoints práticos, desenhadas para quem busca profundidade e protagonismo técnico.

    Iniciante

    Comece do zero com uma trilha clara e progressiva.

    Fundamentos práticos para dar os primeiros passos com segurança e construir uma base sólida.

    Intermediário

    Continue sua evolução com cursos que conectam fundamentos, ferramentas e prática profissional. Ganhe autonomia, e avance para projetos mais completos.

    Avançado

    Aprofunde temas técnicos e estratégicos para enfrentar desafios mais complexos. Explore boas práticas, arquitetura, performance com visão profissional.

    CURSOS

    Ver mais cursos de Back-end
    • Pensamento computacional: fundamentos da computação e lógica de programação
    • Lógica de programação: mergulhe em programação com JavaScript
    • DDD: fundamentos do design orientado a domínio
    • ASP.NET: autenticação e autorização em APIs e aplicações web
    • Microsserviços: migração de monólitos e modularização

    CURSOS

    Ver mais cursos de Dados
    • Python para Dados: primeiros passos
    • Excel: domine o editor de planilhas
    • Engenharia de Dados: Orquestração de Pipelines com Apache Airflow
    • Power BI Desktop: construindo meu primeiro dashboard
    • Governança e Arquitetura de Dados

    CURSOS

    Ver mais cursos de Inteligência Artificial
    • IA: Explorando o Potencial da Inteligência Artificial Generativa
    • Engenharia de Prompt: Criando Prompts Eficazes para IA Generativa
    • Claude para Análise de Dados: prompts, integrações e automações
    • Agno: criando agentes e sistemas multiagente
    • Engenharia de software na era da IA: segurança de aplicações com agentes, MCPs e código gerado por IA

    CURSOS

    Ver mais cursos de Front-end
    • HTML e CSS: ambiente, estrutura e estilo
    • React: realizando testes avançados com Jest e Testing Library
    • React: integrando TypeScript em projetos
    • JavaScript: aprendendo a programar
    • React: aplicando arquiteturas de Micro frontends

    CURSOS

    Ver mais cursos de DevOps
    • Sistema Operacional Linux: fundamentos e administração prática
    • Containers e Docker: empacotamento, isolamento e gestão
    • Redes: dos conceitos iniciais à criação de uma intranet
    • Linux: gerenciando diretórios, arquivos, permissões e processos
    • Cibersegurança: Fundamentos e práticas integradas

    CURSOS

    Ver mais cursos de UX & Design
    • UX Research: mapeando a experiência da pessoa usuária
    • UX/UI Design: Entregando produtos digitais com IA
    • UI Design: Prototipação e animações interativas
    • Figma: Conhecendo o programa
    • Product Design: métricas e ciclo de vida do produto

    CURSOS

    Ver mais cursos de Inovação e Gestão
    • Canva: Criação de landing pages e e-mail marketing
    • Agilidade: como ela pode ajudar a criar um time de alta performance
    • Google Analytics 4: Extrair insights e configurar eventos
    • Management 3.0: gerencie o ambiente, não as pessoas
    • Automação de processos com n8n: Inteligência de dados para Marketing

    CURSOS

    Ver mais cursos de Mobile
    • React Native: Estilização e Layouts com Flexbox e StyleSheet
    • Flutter: Graphql e suporte offline
    • Android com Gemini: Trabalhando com textos e imagens na IA
    • Dart: trabalhando com orientação a objetos
    • React Native: Dominando Listas com FlatList e ScrollView

    CARREIRAS

    Ver mais carreiras
    • Especialista em IA
    • Engenharia de IA
    • Ai native software engineering
    • Arquitetura de Soluções com IA
    • AI Product Design
    • Engenharia de Machine Learning
    • Desenvolvimento Front-End React
    • Engenharia de Dados
    • Cloud Security
    • Social Media Marketing
    • Engenharia de Agentes de IA

    CURSOS

    • Engenharia de Prompt: Prompts Eficazes para IA Generativa
    • Claude Code: Criando sua Primeira Aplicação
    • Python: Crie sua Primeira Aplicação
    • Git e GitHub: Compartilhando e Colaborando
    • N8N: Fluxos de Trabalho Avançados

    CURSOS

    • Copilot Studio: Solução Multiagentes
    • Padrões de API HTTP e Modelagem de APIs
    • Python para Análise de Dados com SQL
    • Docker: Criando e Gerenciando Containers
    • Design com IA: Otimizando o Processo Criativo

    CURSOS

    • Model Context Protocol (MCP)
    • Spec-Driven Development: Dev Assistido por Agentes
    • Arquitetura de Sistemas Distribuídos com Java
    • Governança de Modelos e Reprodutibilidade
    • Pentest: Vulnerabilidades em Aplicações Web

    Escolha seu Plano

    • Plus 2430% OFF
    • Pro 2430% OFF
    • Ultra Lab 2430% OFF

    Skills & Go

    O Skills & Go é para Tech Leads, Product Managers, estrategistas e early adopters que transformam ideias em soluções de alto impacto. Em cursos ao vivo e 100% online, você domina a nova era da IA em tempo real.

    Aulas ao vivo

    Saiba mais
    • Agentic Engineering: orquestre múltiplos agentes com confiabilidade
    • Building AI Products: transforme ideias em produtos reais com IA
    • AI Data Strategy: transforme dados em decisões estratégicas com IA

    Escolha seu Plano

    • Plus 2430% OFF
    • Pro 2430% OFF
    • Ultra Lab 2430% OFF

    Eventos Alura

    Nossos eventos são pensados para quem quer estar à frente das mudanças em tecnologia, IA e inovação. Em experiências presenciais, você acompanha tendências e se conecta com especialistas que estão moldando o futuro.

    Próximos eventos

    • IA Conference
    • Alura Signals
  • Talent Lab
  • IA
  • Artigos
  • Para Empresas
Ver planos
Links principais
  • Planos e Promoções
  • Carreiras

    Ver todas
    • Especialista em IA
    • Engenharia de IA
    • Ai native software engineering
    • Arquitetura de Soluções com IA
    • AI Product Design
    • Engenharia de Machine Learning
    • Desenvolvimento Front-End React
    • Engenharia de Dados
    • Cloud Security
    • Social Media Marketing
    • Engenharia de Agentes de IA
    Entrar Ver Planos
  • Área de Interesse

    Entrar Ver Planos
  • Aulas ao Vivo - Skills & Go

    • Agentic Engineering: orquestre múltiplos agentes com confiabilidade
    • Building AI Products: transforme ideias em produtos reais com IA
    • AI Data Strategy: transforme dados em decisões estratégicas com IA
    Entrar Ver Planos
  • Senioridade

    Entrar Ver Planos
  • Eventos Alura

    • IA Conference
    • Alura Signals
    Entrar Ver Planos
  • Links complementares do menu mobile
  • Talent lab
  • Inteligência Artificial
  • Pós Graduações
  • Artigos
  • Para Empresas
  • Sobre a Alura
  • Grupo Alun
  • Entrar
    • Home
    • Carreiras
    • Skills & Go
    • Talent Lab
    • Inteligência Artificial
    • Pós Graduações
    • Artigos
    • Sobre a Alura
    • Grupo Alun
    LoginContato
    • Plano Pro 24
    • Plano Plus 24
    • Plano Ultra Lab 24
    • LinkedIn
    • Instagram
    • YouTube

    Institucional

    • Sobre nós
    • Trabalhe Conosco
    • Para Empresas
    • Para Escolas
    • Política de Privacidade
    • Compromisso de Integridade
    • Termos de Uso
    • Canal de Ética
    • Código de Ética
    • Fale Conosco
    • Documentos Institucionais
    • Status
    Institucional
    • Sobre nós
    • Trabalhe Conosco
    • Para Empresas
    • Para Escolas
    • Política de Privacidade
    • Compromisso de Integridade
    • Termos de Uso
    • Canal de Ética
    • Código de Ética
    • Fale Conosco
    • Documentos Institucionais
    • Status

    A Alura

    • Como Funciona
    • Inteligência Artificial
    • Plataforma
    • Depoimentos
    • Instrutores(as)
    • Dev em <T>
    • Luri, a Inteligência Artificial da Alura
    • IA Conference
    • Cursos Imersivos
    • Perguntas Frequentes
    A Alura
    • Como Funciona
    • Inteligência Artificial
    • Plataforma
    • Depoimentos
    • Instrutores(as)
    • Dev em <T>
    • Luri, a Inteligência Artificial da Alura
    • IA Conference
    • Cursos Imersivos
    • Perguntas Frequentes

    Conteúdos

    • Alura Cases
    • Imersões
    • Artigos
    • Podcasts
    • Artigos de educação corporativa
    Conteúdos
    • Alura Cases
    • Imersões
    • Artigos
    • Podcasts
    • Artigos de educação corporativa
    Uma Empresa do GrupoLogo Grupo Alun

    Outras empresas do Grupo Alun

    • FIAP
    • STARTSE
    • PM3
    • LUMINA

    Ao submeter seu e-mail, você concorda com a política de privacidade da Alura.

    Redes Sociais & Apps

    instagram
    youtube
    tiktok
    x
    appStore
    googlePlay
    Uma Empresa do GrupoLogo Grupo Alun

    Outras empresas do Grupo Alun

    • FIAP
    • STARTSE
    • PM3
    • LUMINA

    Ao submeter seu e-mail, você concorda com a política de privacidade da Alura.

    Redes Sociais & Apps

    instagram
    youtube
    tiktok
    x
    appStore
    googlePlay
    Alura

    O que você quer aprender?

    FiltrosFiltrar por:

    Tipos de conteúdo
    Categorias
    • ArtigosFront-end

      Artigo Lidando com parâmetros obrigatórios em JavaScript

      Aprenda como usar parâmetros padrão do ES6 para tornar parâmetros obrigatórios em JavaScript, reduzindo código repetitivo e deixando funções mais elegantes.

    • ArtigosDevOps

      Artigo Lendo e escrevendo arquivos com redirecionamento no Shell

      Saiba como ler e escrever arquivos com redirecionamento no Shell, utilizando Python

    • ArtigosBack-end

      Artigo JavaScript, debounce pattern, closure e duas amigas

    Ainda não estuda com a gente?

    Invista na transformação da sua carreira!

    Comece agora

    Saiba mais como funciona debounce pattern e como utilizar closure em seus programas.

  • ArtigosBack-end

    Artigo Platform Engineering: o que é, quais os benefícios e melhores práticas 

    Descubra o que é platform engineering, quais são seus benefícios e como implementá-lo de forma eficaz.

  • Artigos

    Artigo Atualizações da Alura #2: IA, carreiras e funcionalidades para sua jornada

    Confira a segunda edição do Alura Commit e veja novas carreiras, ferramentas na plataforma e imersões práticas para você se atualizar e impulsionar sua carreira.

  • Back-end

    Como usar ChatGPT para Gestão Ágil

    Neste Alura+, Daniela Soares, monitora na Alura, explica como utilizar a inteligência artificial do ChatGPT para **impulsionar a gestão ágil** em sua organização. Por meio dessa poderosa ferramenta, você aprenderá passo a passo como analisar dados para: * Construir personas; * Analisar ciclo de vida do produto. Você conhecerá como extrair informações valiosas dos dados disponíveis para criar personas detalhadas, que representem os diferentes perfis de consumidores. Com a ajuda do ChatGPT, você pode interpretar os dados de forma mais eficiente e identificar áreas de melhoria para impulsionar a experiência do cliente, além de descobrir como o ChatGPT pode ajudar na análise do ciclo de vida do seu produto! Bateu a curiosidade? Ao longo deste vídeo, você aprenderá a aplicar o ChatGPT para impulsionar a gestão ágil, transformando dados em insights. E para você se aprofundar no tema, confira: * [Artigo ChatGPT: o que é, como usar e dicas de comandos para o dia a dia]( * [Artigo Quais são os 4 tipos de aprendizagem na IA, algoritmos e usos no dia a dia]( * [Curso ChatGPT: otimizando a qualidade dos resultados]( # Transcrição É comum que, navegando na internet, nos deparemos com manchetes como esta: > **"Conheça as 10 profissões que serão substituídas pela inteligência artificial."** É um título um tanto dramático, não? Será que esse receio tem fundamento? Faz sentido construir um título dessa forma? É pensando em questões como essa que vamos explorar como o **ChatGPT** pode nos auxiliar nas **funções de gestão ágil** das pessoas que atuam como gerentes ágeis ou com agilidade de forma geral. Quando falamos de inteligência artificial, precisamos compreender um ponto: assim como outros avanços tecnológicos e inovações, a IA serve como **complemento às nossas funções e tarefas**, principalmente aquelas que podem ser **automatizadas**. Dessa forma, economizamos esforço humano em atividades repetitivas, tornando nossa experiência profissional mais gratificante. Vamos explorar como utilizar o ChatGPT como um **potencial colaborador** para nossas funções. Vamos ver como podemos construir uma *persona* e também avaliar o ciclo de vida de um produto. Para quem não sabe o que é ou nunca utilizou o ChatGPT,, não há problema. Disponibilizaremos vários conteúdos na descrição do vídeo para acesso posterior. Estamos utilizando a versão **3.5** do ChatGPT, que é gratuita. Um detalhe importante: **não compartilhe informações sensíveis com o GPT**. Utilizaremos dados fictícios para demonstrar o processo de construção da *persona*. Mas por que criar a *persona* é importante para a gestão ágil? Porque a *persona*, essa representação ideal do cliente, nos ajuda a compreender e **atender às necessidades dos clientes**. ## Construindo personas no ChatGPT Vamos começar perguntando ao ChatGPT o que é uma *persona*. A resposta é que uma *persona* é uma representação fictícia de um público-alvo ou de um cliente ideal. Ele fornece uma resposta bastante extensa. Em seguida, forneceremos algumas informações sobre o papel que ocupamos na equipe e o tipo de serviço ou produto que oferecemos. Por exemplo, escreveremos: > "Sou um gerente ágil e estou trabalhando com um aplicativo de *e-learning* para pessoas que desejam aprimorar seu currículo de forma flexível". O ChatGPT pode demorar um pouco para responder, pois é a versão gratuita. Ele sugere que definamos nossas *personas* criando personagens que representem nossos usuários-alvo e estabelecendo a história dos usuários. Não é exatamente o que gostaríamos que ele respondesse, mas deixamos que ele termine a resposta. Informaremos que temos **dados sobre os usuários do aplicativo** e pedimos que ele sugira algumas *personas* com base nesses dados. Após enviar os dados fictícios, ele começa a analisar informações como **idade**, **interesses** e **formação acadêmica**. Ele faz um resumo e, em seguida, pedimos que ele identifique **padrões nos dados fornecidos**. A resposta inclui **relação entre tecnologia e áreas de interesse**, **diversidade de formações acadêmicas**, **conexão entre interesses** e **objetivos profissionais**, e variedade de hobbies. Após esse processo, pedimos que ele sugira algumas *personas* que poderíamos construir a partir desses dados. Ele sugere cinco *personas*: > **Amanda**, a designer inovadora; > > **Lucas**, o desenvolvedor ágil; > > **Gabriela**, a gerente de projetos de TI; > > **Rafael**, o especialista em inteligência artificial; > > **Carolina**, a profissional de marketing digital. Pedimos que ele refaça as sugestões para ver se há variações. Ele modifica algumas informações, sugerindo, por exemplo, a *persona* Beatriz, a *Tech Enthusiast* (entusiasta de tecnologia), que não havíamos mencionado. É importante **não confiar 100% no GPT**, mas sim aloinhar o que você já conhece da sua profissão com o que ele pode te ajudar no dia a dia. Voltamos à resposta inicial e escolhemos a *persona* **Lucas, o desenvolvedor ágil**, para explorar mais. Ele detalha motivações, desafios e objetivos do Lucas com o aplicativo. Por exemplo, Lucas é **apaixonado por tecnologia** e tem **forte interesse em métodos ágeis**. Ele pode enfrentar desafios ao implementar práticas ágeis em sua equipe ou organização. O ChatGPT retorna inclusive recomendações para o aplicativo de e-learning, algo que não solicitamos. Pedimos que ele refaça as sugestões de *personas* com base em critérios estabelecidos: **aprimorar habilidades**, **rotinas saudáveis de estudo** e **sentir-se representado**. Com base nesses critérios, ele sugere novas *personas*: > **Sofia**, a jovem profissional ambiciosa; > > **Matheus**, o estudante determinado; > > **Carla**, a profissional em transição de carreira; > > **André**, o empreendedor criativo; > > **Isabela**, a profissional multitarefa. Pedimos que ele organize as sugestões em **ordem de prioridade** considerando os critérios que citamos anteriormente, algo que não alterará muito a configuração. Utilizamos um comando de texto para o ChatGPT, mas se tivermos uma **tabela no Excel**, podemos copiar todo o conteúdo e colar no GPT. ## Ciclo de vida de um produto Após a construção da *persona*, analisamos o **ciclo de vida de um produto**, utilizando o mesmo aplicativo de *e-learning*. Perguntamos ao ChatGPT o que é ciclo de vida do produto. Ele explica que é uma representação dos estágios pelos quais um produto passa desde a introdução no mercado até a retirada. Os estágios são: **introdução**, **crescimento**, **maturidade** e **declínio**. É importante que uma pessoa que trabalha com gestão ágil saiba identificar o ciclo de vida do produto em que está inserida para pensar **estratégias e investimentos adequados** para a fase em que o produto se encontra. Nesse caso, identificamos que estamos com **crescimento de assinaturas**, **forte concorrência** e **lucro crescente.** Com base nessas informações, o ChatGPT analisa e identifica que estamos no **início do estágio de crescimento** ou no **ponto intermediário**. Perguntamos quais **estratégias** podemos utilizar na fase de crescimento. Ele sugere **marketing intensivo**, **expansão para novos mercados**, **melhoria contínua do produto**, **aumento da oferta de valor**, **parcerias estratégicas**, **monitoramento dos concorrentes** e **fortalecimento do relacionamento com os usuários**. Após conferir as estratégias, pedimos que ele organize de acordo com critérios anteriores. > Critério 1: **aprimorar habilidades** > > Critério 2: **rotinas saudáveis de estudo** > > Critério 3: **sentir-se representado** Como retorno, ele organiza os critérios e as estratégias que fazem parte desse critério. Vamos pedir para que as estratégias sejam organizadas em uma tabela. | Critério | Estratégias | |------------------------------------------|-------------------------------------------------| | Critério 1: Aprimorar habilidades | - Melhoria contínua do produto | | | - Expansão para novos mercados | | Critério 2: Rotinas saudáveis de estudo | - Fortalecimento do relacionamento com os usuários | | | - Aumento da oferta de valor | | Critério 3: Sentir-se representado | - Parcerias estratégicas | | | - Marketing intensivo | ## Impacto das IAs na gestão ágil Após utilizar o ChatGPT para **analisar dados**, seja para criar uma *persona* ou identificar o ciclo de vida do produto, podemos nos perguntar como a IA impactará nosso trabalho como gerentes ágeis. O ChatGPT, assim como outras IAs, pode colaborar com nossas funções na gestão ágil, economizando tempo na busca de informações e tornando a tomada de decisões mais eficiente, possibilitando entregar mais valor aos clientes e *stakeholders*. Assim como o Trello, Jira ou Notion, o ChatGPT pode fazer parte do nosso dia a dia e auxiliar nas funções e tarefas como gestores ágeis. Além da análise de dados, o GPT e outras IAs podem auxiliar na melhoria contínua do produto ou serviço e no gerenciamento do projeto. Se ainda não utilizao GPT, você pode replicar os casos apresentados aqui com dados fictícios e conferir as respostas. Sinta-se à vontade para compartilhar ideias e expectativas sobre inteligência artificial no Discord Alura e conectar-se com outros alunos e alunas. Nos vemos em breve!

  • Mobile

    Crie seu primeiro aplicativo de IA generativa no Android Studio

    Uma das maneiras de manter as pessoas usuárias cada vez mais em nossos aplicativos é fornecer **experiências mais ricas e personalizadas**. Nesse contexto, ter uma espécie de inteligência artificial que entenda o que a pessoa usuária está fazendo e seja capaz de interagir com ela é muito útil. Vamos começar a utilizar o *Gemini* dentro de nossos aplicativos e quem vai te acompanhar nessa jornada é o Junior Martins. > **Audiodescrição**: Junior é uma pessoa de pele clara, cabelos castanho-escuros compridos, que usa óculos com armação preta e também veste uma camiseta na cor preta. Ele está à frente de uma parede branca iluminada por luzes em degradê que vão do azul ao rosa. Durante esse conteúdo, queremos mostrar especificamente o que é o *Gemini*, que, caso você não conheça, é uma **ferramenta de inteligência artificial desenvolvida pelo Google** que, como eles mesmos comentam, foi desenvolvida para concorrer com o já conhecido *ChatGPT*. Ele faz parte de um modelo de inteligência artificial que são as IAs generativas onde podemos introduzir alguma informação, como um texto, uma imagem e ela será capaz de devolver mais informações. É muito comum, por exemplo, enviar um texto e pedir para ela resumir, criar uma história, gerar algum código, resolver algum problema ou mesmo passar alguma informação, como uma imagem, e pedir para ela trabalhar em cima disso. ## Explorando o Gemini do Google O *Gemini* é dividido em **três modelos principais**: temos o *Gemini Ultra*, uma versão muito mais potente, que geralmente é feita para rodar em servidores; o *Gemini Pro*, nas versões 1.0 e, mais recentemente 1.5, que é a versão que mais costumamos usar, mas ainda é uma versão que roda em servidores; e também o *Gemini Nano*, desenvolvido especialmente para rodar em dispositivos móveis, como smartphones. Na documentação do Google, eles explicam um pouco melhor o que é o *Gemini Nano*, dando uma introdução e explicando que ele está disponível apenas para alguns dispositivos. Se deslizarmos um pouco para baixo, no tópico “Benefícios da execução do dispositivo”, é comentado que essa versão roda diretamente no dispositivo, ou seja, ele não se conecta a nada para poder funcionar, tanto que temos o acesso offline de tudo que o *Gemini* é capaz. Mas, justamente por ele ter esse poder de processamento utilizando o próprio dispositivo como base, precisaremos ter alguns dispositivos muito potentes, com hardware muito bom, para poder rodar o *Gemini Nano*. E por isso que não vamos focar muito nele, afinal poucos dispositivos hoje em dia possuem essa versão. Dentro dessa própria documentação já é descrito que caso queiramos utilizar o *Gemini* em aplicativos, mas não tenhamos um desses dispositivos ou não queiramos focar especificamente no *Gemini Nano*, podemos utilizar a outra versão do *Gemini*, que é o *Gemini Pro*, dentro de nossos aplicativos. E por isso temos uma outra documentação com alguns exemplos de código. Se subirmos um pouco para o topo, teremos um cabeçalho semelhante àquele que já conferimos do *Gemini Nano*, mas com o título “Como usar a API Gemini em apps Android (SDK do cliente)”. Ou seja, podemos colocar um código dentro do nosso aplicativo que vai acessar o *Gemini* remotamente. Nesse caso, precisaremos fazer uma série de configurações que é descrita dentro dessa documentação, como por exemplo, fazer a configuração da chave da API, entender quais são os métodos que o *Gemini* traz para utilizar no Android. Essa é uma página dedicada a ensinar como podemos utilizar o *Gemini* através de APIs REST. Mas é descrito também que o próprio Google já preparou um *SDK* do *Gemini*, então podemos ir deslizando e conhecendo um pouco melhor desse *SDK*, com alguns códigos que funcionam de maneira mais simples, sem precisarmos de implementações tão complexas para poder começar. Mesmo assim, se continuarmos deslizando para baixo, veremos que alguns passos são necessários para poder utilizar o Gemini. Pensando nisso, o Google também tem trabalhado em um novo recurso dentro do próprio Android Studio, para facilitar nosso primeiro contato com o Gemini. Acessando a página do site Android Developers, acessaremos a aba “Desenvolver > Android Studio > Visualizar” e chegaremos à página “Criar seu primeiro app de IA generativa no Android Studio”. Aqui, temos a informação de que o Android Studio possui uma nova opção. ## Iniciando o projeto Se deslizarmos um pouco para conhecer, quando clicamos em “Criar um novo projeto”, aparecerá essa opção que é a Gemini API Starter. Se continuarmos deslizando para baixo, veremos algumas imagens, um passo a passo relativamente simples, sobre como utilizar essa função e quais são os passos que podemos seguir para continuar com ela. Porém, um detalhe que precisamos ficar atentos é sobre a **versão do Android Studio** em que essa função está disponível. Estamos com o Android Studio aberto, especificamente no Android Studio Koala 2024.1.1 Canary 3. É um número de versão bem grande, mas precisamos nos atentar de que essa nova opção que acabamos de visualizar na documentação só existe por enquanto nas **versões betas do Android Studio**. Vamos deixar especificamente essa versão para você poder fazer o download, e se quiser utilizar uma versão mais recente do Android Studio que esteja em beta, recomendamos que utilize a ferramenta Toolbox, que aparece no canto direito da tela. É uma ferramenta oficial da JetBrains, e recomendamos o uso dela. Pode ser que você tenha essa mesma versão, a Koala, instalada, mas que ela esteja em alguma versão futura, Canary 10, por exemplo, e ela não tem essa opção. Então, recomendo que você utilize o Toolbox, localize o Android Studio, clique nos três pontinhos verticais do lado direito dessa opção, clique em “Outras versões” no menu suspenso. Aqui dentro, você terá uma lista de versões. Geralmente esses recursos em teste beta costumam ficar nas versões Canary mais recentes. Por exemplo, temos a Koala nesse momento, mas um recurso que já esteve em versões anteriores, como, por exemplo, a Jellyfish 2023.3.1 Beta 2, mas que, por exemplo, nessa Jellyfish Beta 2, uma versão mais recente, não está mais presente. De qualquer maneira, repito que vamos deixar essa mesma exata versão para você poder fazer o uso. Com essa versão, quando clicamos em “New Project”, temos ali a opção Gemini API Starter, ou API Starter. Quando clicamos nessa opção, podemos perceber que ela está com uma tag de preview, que está em amarelo com texto preto no topo à direita. Essa tag vem sendo adicionada em recursos beta do Android Studio, então toda parte do Material Design, do Jetpack Compose, em algum momento esteve também com essa tag, e hoje em dia está de maneira oficial no próprio Android Studio. Então, pode ser que no futuro você não tenha mais essa tag, mas a opção já esteja ali nativamente. Podemos clicar no botão “Next”, e vamos seguir então com a criação de um projeto comum. Podemos, por exemplo, definir um nome, que vamos deixar como “GenIA”, e vamos deixar o pacote com com.alura.genia, que é a nossa Generate AI. Não precisamos alterar nenhum outro parâmetro. Vamos deixar a opção de Kotlin DSL como está e clicar no botão “Next”, e aqui tem um detalhe que precisamos prestar um pouco de atenção. Quando clicarmos no botão “Generate API key with Google AI Studio”, ele vai abrir um novo site no nosso navegador. Caso você nunca tenha acessado esse site, a primeira coisa que vai aparecer é um aviso de termos de serviço, e você pode marcar a primeira caixinha para poder aceitar esses termos e poder utilizar o Gemini. Vamos clicar na opção “Continue”, depois de marcar essa primeira caixinha, recomendamos que você leia as licenças, e logo de cara já teremos então essa tela de “API keys”, e você pode clicar em “Create API Key” no centro da página. Quando fizermos isso, ele abrir uma nova aba e pedir para criar uma chave novamente, podemos clicar em “Create API key in new project”. O objetivo aqui é gerar uma chave que conecta nossa conta a algum projeto do Android, que teremos disponibilizado na plataforma da Google. Para a Google ter um controle de quem está utilizando essa API, precisamos gerar uma chave, similar ao que vários outros serviços já fazem. Essa chave é uma sequência alfanumérica e depois que ela for gerada, podemos clicar em “*Copy*” (Copiar). Agora, podemos voltar para o nosso projeto no Android Studio. De volta no Android Studio, podemos colar a chave no campo “API Key” que estava vazio. > **Atenção:** recomendamos que você não compartilhe essa chave com ninguém, porque ela está justamente ligada à sua conta da Google. Nesse caso, vamos utilizar essa chave agora, depois que terminarmos de gravar, vamos invalidá-la, então você também não vai conseguir utilizá-la. Feito isso, podemos clicar em *Finish* (Finalizar), e aguardar o projeto ser construído. Então, ele vai abrir o projeto e fazer algumas configurações, é um procedimento um pouco demorado, teremos um erro que deve surgir no projeto que foi compilado. Esse erro vai ser justamente no arquivo MainActivity, que ele deve abrir por padrão, e na nossa MainActivity, que é a nossa tela principal, o BuildConfig provavelmente não vai ser reconhecido. Isso acontece porque esse arquivo de BuildConfig está relacionado a alguma das opções que veremos lá na própria documentação do Gemini, para poder configurar as chaves de maneira segura. Não vamos aprofundar muito nisso, vamos apenas corrigir esse erro. Ele dá a opção de fazer o *Import Class* nesse momento, só que se fizermos o *Import Class* dessa classe padrão, ele provavelmente não vai funcionar. Então, recomendamos que você clique na opção para poder construir o nosso projeto novamente, no topo da interface temos o ícone de um martelo que corresponde à opção “*Make Module*”. Vamos clicar nessa opção no canto superior do Android Studio, ali na parte direita, e vamos aguardar ele fazer o *build* do Gradle na parte inferior do Android Studio. Nosso projeto terminou de fazer o *build*, e ele já trouxe o erro que está na linha 50. Para corrigir esse erro, podemos simplesmente apagar esse BuildConfig.apiKey da linha 50, e começar a escrever BuildConfig novamente. Duas opções devem aparecer, sendo que precisamos selecionar aquela que tem o com. seguido do nome do nosso pacote, que no nosso caso é o com.alura.genia. Podemos então colocar um ponto no final e deve aparecer a sugestão “*apiKey*”, podemos selecioná-lo. val generativeModel = GenerativeModel( modelName = "gemini-pro", apiKey = com.alura.genia.BuildConfig.apiKey ) Se usarmos o atalho “Ctrl + B” nesse “*apiKey*”, a mesma chave que acabamos de girar no site da Google vai estar armazenada nesse projeto, de uma maneira segura, gerada automaticamente pelo plugin do Gradle. Podemos então rodar o nosso aplicativo com o “Shift + F10”, e ver que esse projeto já está todo configurado, podemos apenas testá-lo. O nosso aplicativo rodou, já estamos indo com o nosso emulador em tela, e das várias funcionalidades que o Gemini tem, uma delas é **sintetizar um texto**, ou seja, fazer um resumo de um texto que passamos. ## Resumindo um texto com o Gemini Quando rodamos o aplicativo, a primeira coisa que ele vai sugerir nessa interface, que tem justamente um campo para poder inserir informações, é digitar um texto e pedir para ele se resumir (“Enter text or a URL to summarize”). Então, pegaremos um texto bem extenso, que é um texto da documentação do Gemini, vamos clicar na caixa de texto e colar. É um texto com várias linhas que descreve o Gemini, como ele é um concorrente do ChatGPT, e podemos clicar na opção “*Go*” depois de colar esse texto. Ele vai fazer um pequeno *loading*. Esse *loading* é basicamente o nosso aplicativo consultando a API do Gemini, mandando essas informações que a pessoa usuária, que no nosso caso somos nós, inserimos e trazendo algum resultado. Então, tínhamos um texto com várias linhas e pedimos para ele ser resumido, sintetizado. Agora temos um texto muito menor, mas que ainda contém toda a essência do texto anterior. Ou seja, o texto foi interpretado e resumido mantendo os principais pontos-chave com relação às tecnologias. Foram mantidos o *Google DeepMind*, *Gemini*, *ChatGPT*, dentre outras. Se voltarmos para o código que temos além do emulador, podemos perceber que na MainActivity é chamado o SummarizeViewModel. Podemos clicar nele e usar o atalho “CTRL + B”, que vai nos redirecionar para o arquivo “SummarizeViewModel.kt”. Dentro desse ViewModel temos um sistema muito similar ao que nós já utilizamos em vários outros cursos, seguindo a documentação oficial do Android. É dito que uma configuração específica foi feita utilizando a API do *Gemini* para que, toda vez que ele passar na linha val prompt = “Summarize the following text for me: $inputText”, ele pegar o texto que a pessoa usuária colocou e adicionar essa nova instrução, que é a de resumir o texto. Mas, se quisermos, podemos fazer o *Gemini* não ter nenhuma instrução anterior para poder entender um pouco melhor como utilizá-lo. Essa é uma ideia bem simples de adaptar nesse código: ao invés de fazer esse val prompt conter todo esse texto “Summarize the following text for me:”podemos fazer o val prompt ser igual apenas ao inputText. fun summarize(inputText: String) { _uiState.value = SummarizeUiState.Loading val prompt = inputText } E se rodarmos o nosso projeto com essa única modificação e aguardarmos ele subir, a partir de agora, dentro desse nosso emulador, temos todo acesso ao potencial do *Gemini* com relação a texto. Então, podemos dar qualquer instrução para ele que ele vai seguir. Por exemplo, vamos clicar em Text to Summarize no nosso aplicativo e colar o texto “liste as 10 primeiras versões do Android”. Vamos clicar em “Go” e o *Gemini* tem justamente todo o conhecimento sobre as versões do Android. Ele vai trazer uma lista, inclusive enumerada, com várias das primeiras versões do Android. 1. Android Alpha 2. Android Beta 3. Android Cupcake (1.5) 4. Android Donut (1.6) 5. Android Eclair (2.0-2.1) 6. Android Froyo (2.2) 7. Android Gingerbread (2.3-2.3.7) 8. Android Honeycomb (3.0-3.2.6) 9. Android Ice Cream Sandwich (4.0-4.0.4) 10. Android Jelly Bean (4.1-4.3.1) Podemos passar várias informações, pedir para ele gerar histórias, para ele organizar listas, gerar códigos. E foi muito rápido o acesso que tivemos. Podemos começar a explorar a possibilidade de utilizar o *Gemini* sem precisar fazer uma série de configurações. Inclusive essa mesma do Build Gradle que vimos, ela é um pouco mais complicada, mas já vem por padrão feita e é algo que não precisamos nos preocupar. Porém, o *Gemini* também tem a possibilidade de lidarmos com outros tipos de informação. Para isso, podemos voltar mais uma vez ao nosso código no Android Studio e se clicarmos no menu principal no canto superior esquerdo, e selecionar “File > New > Import Sample”. Ele vai abrir uma nova janela. Na caixa de texto dessa janela, podemos digitar “IA” ou “Generate” e aparecerão alguns exemplos logo abaixo. Vamos selecionar o “*Google Generative IA Sample for Android (Kotlin)*”, logo abaixo de “*Jetpack Compose Layouts*”. A inteligência artificial está em versão beta, então temos a opção “*Google Generative IA Sample for Android (Kotlin)*” duplicada, aparecendo também sob a categoria de *Artificial Intelligence*. No fim das contas, podemos clicar em qualquer um dos dois “*Google Generative*”, ele vai trazer o mesmo exemplo. Selecionando essa opção e clicando em “Next”, ele sugere que criemos um novo projeto. Esse projeto, através do samples, é bem mais completo. E vamos deixar a configuração padrão que ele escolheu. Vamos clicar em “Finish” e aguardar ele gerar esse novo projeto com esse novo exemplo. Nosso projeto terminou de buildar. Já fizemos aquelas correções também com relação à nossa chave que vimos no projeto anterior. A única diferença é que aqui ela está no “GenerativeViewModelFactory.kt”, e está em mais de um lugar. Mas foi só adicioná-la no “local properties”. Já adicionamos o apiKey e buildamos o projeto. Temos um projeto mais robusto com vários exemplos de implementação do *Gemini* que você pode adaptar e também entender melhor estudando como ele funciona. Uma diferença que teremos é que aqui já são definidos vários tipos de modelos diferentes ao longo do código deste *ViewModel*. Então temos o *Gemini Pro*, o *Gemini Pro Vision*, o *Gemini Pro Normal*. ## Outras possibilidades de uso do Gemini Ao executar o projeto que acabamos de importar neste sample, teremos o aplicativo com três opções principais: “Generate text from text-only input”, “Generate text from text-and-image input (multimodal)” e “Build multi-turn conversations (chat)”. Estamos com o meu emulador disponível. Temos algumas opções para, por exemplo, explorar o modo chat, que é a última opção. Temos a opção para poder explorar o modo texto, que é a primeira. Mas a opção mais interessante nesse caso é a do meio, *Generate text from text-and-image input* (Gerar Texto a partir de Entrada de Texto e Imagem). Se clicarmos em *Try It* (Experimente), podemos adicionar algumas imagens de texto às informações que vamos inserir. Ou seja, se você, como pessoa desenvolvedora, quer criar um aplicativo em que o usuário pode enviar uma imagem, fazer uma pergunta ou, por exemplo, trabalhar em cima de alguma resposta com base no que o usuário acabou de fotografar, este é um código que você pode utilizar de exemplo. Se clicarmos no botão *Mais* (ícone de soma do lado esquerdo do campo “Question”), ele vai trazer a galeria do Android. Temos uma foto de uma pessoa e vamos enviar essa foto. Selecionamos a imagem e vamos digitar no campo de texto uma informação que é a seguinte: “qual é o nome do principal objeto do esporte que essa pessoa praticava?”. Vamos clicar em “*Go*” e vou aguardar a resposta. Aguardamos um pouco, já temos a resposta e a resposta foi bem direta (“Bola”), mas vamos explicar rapidamente o que aconteceu: A foto que selecionamos quando clicamos no botão de *Mais* é a foto do jogador de futebol Pelé. E o que o *Gemini* fez foi basicamente pegar essa imagem, fazer um *scan* dela, entender quem era a pessoa que estava presente, depois ele foi procurar se essa pessoa jogava algum esporte, entendeu o que era o futebol, depois ele foi ver qual é o principal objeto utilizado no futebol. Então teve toda uma **linha de raciocínio** que o *Gemini* fez através da entrada de uma imagem e também de texto para poder fornecer uma resposta. Ela foi bem sucinta, mas é apenas para poder demonstrar o potencial que existe ao fazer o uso dessa ferramenta nos nossos aplicativos. Demos esse exemplo um pouco mais complexo, mas justamente para poder mostrar que se você souber aproveitar esse recurso, pode criar aplicações realmente muito úteis para o usuário final. Vamos deixar os links de tudo que visualizamos abaixo para você poder acessar. Se estiver vendo este vídeo em alguma rede social, não se esqueça de clicar nos botões de gostei para sinalizar que curtiu esse conteúdo. Muito obrigado pela sua presença e até mais! ### Outros links e informações relevantes: - [Conheça o Google Gemini.]( - [Documentação do Gemini Nano.]( - [Documentação SDK do Gemini para Android.]( - [Gemini API Starter no Android Studio.](

  • Mobile

    Kotlin e carreira dev na Idwall

    # TranscriçãoMeu nome é Augusto Goes, sou desenvolvedor Android e hoje falaremos um pouco sobre Kotlin e toda a potência que essa linguagem de programação tem.Kotlin é uma linguagem de programação de **código aberto**, ou seja, qualquer pessoa pode utilizar, modificar, distribuir e até visualizar o código-fonte. Ele foi criado em 2010 pela Jet Brains, uma empresa líder mundial na criação de ferramentas para o desenvolvimento e sua versão estável foi lançada apenas em 2016.Em 2017, o Google anunciou que Kotlin seria oficialmente suportado para desenvolvimento de aplicativos Android. Pouco depois, em 2019, o Google anunciou o Kotlin como a linguagem principal para desenvolvedores de aplicativos. Assim, tornou-se um projeto muito sólido.O Kotlin é **gerenciado pela Kotlin Foundation**, um grupo criado pela Jet Brains e pelo Google com a tarefa de promover e desenvolver continuamente essa linguagem de programação.O Kotlin é oficialmente **compatível com o desenvolvimento do Google para Android**, o que facilita quando precisamos buscar informações, pois sempre encontramos um campo que explique como determinado recurso funciona nessa linguagem.A seguir, vamos falar sobre os pontos positivos do Kotlin. O primeiro deles é a **interoperabilidade com o Java**, o que significa que conseguimos chamar o código Java do Kotlin e vice-versa. Dessa forma, é possível converter de forma gradual, não é necessário fazer de uma única vez. Assim podemos ter um projeto tanto em Java quanto em Kotlin.Outro ponto positivo do Kotlin é o **código mais seguro**. Com o non-null e o nullable inclusos no sistema de tipos, evitamos o problema do NullPointerException. As variáveis não são nulas por padrão, permitindo a verificação nula durante o tempo de compilação, o que reduz as ocorrências do já mencionado NullPointerException durante o tempo de execução.Segundo o Google, aplicativos que utilizam código Kotlin têm **20% menos chances de apresentar falhas**. Ainda de acordo com a empresa, essa linguagem de programação moderna e estaticamente tipada é **utilizada por mais de 60% dos desenvolvedores Android profissionais**. Ela ajuda a aumentar a produtividade, a satisfação do consumidor e a segurança do código.Um estudo realizado pela Jet Brains mostrou que o Kotlin é **utilizado em 96% dos novos projetos** e que ele está **entre as 5 linguagens de crescimento mais rápido**, ou seja, a comunidade tem aderido muito bem ao Kotlin. Alguns exemplos de aplicativos desenvolvidos com Kotlin são Netflix, Evernote, Duolingo, Amazon Kindle e meuID.Na sequência, comentarei sobre a minha trajetória. Por formação, sou engenheiro civil, contudo de coração sou desenvolvedor Android, amo essa área. Comecei estudando C++ e Java na faculdade, porém nada de modo profissional. Depois de algum tempo, não estava me adaptando bem à minha antiga função e já pensava em mudar de área, conversei com amigos desenvolvedores e eles recomendaram que eu estudasse Kotlin. Segui o conselho — não voltei a estudar C++ nem Java, fui direto para o Kotlin.Uma vantagem dessa linguagem é sua **sintaxe concisa**: comparando lado a lado um código em Kotlin com outro em Java, o primeiro é visualmente mais limpo. Ademais, por ser a linguagem oficial do Google, encontramos facilmente documentações, exemplos e bibliotecas, o que facilita bastante nosso dia a dia.Agora, vamos falar sobre a **idwall**, a empresa onde trabalho. Somos uma *regtech* criada por uma dupla de desenvolvedores. Estamos sempre buscando maneiras de solucionar vários problemas enfrentados no Brasil, como desconfiança, fraudes e burocracias.Para contextualizar: a quantia de dinheiro perdida por conta de fraudes gira em torno de 213 bilhões de reais por ano e o intervalo entre uma tentativa de fraude e outra é de 16 segundos!Nossos produtos são voltados para prevenção de fraudes e de golpes de identidade. Temos como solução o reconhecimento facial, a extração de dados de imagens de documentos e a validação de informações em fontes de dados.Sob este cenário desafiador, me juntei à idwall, mais especificamente ao time de Android do **meuID**, que é o primeiro aplicativo de identidade digital que reúne os principais documentos em um único lugar.Quando esse projeto foi iniciado em 2019, depois de muita discussão chegamos à conclusão que deveríamos usar Kotlin, porque o Google trouxe muita segurança ao estabelecer essa linguagem como a principal para desenvolvimento Android. Por isso, optamos por ela e todos seus benefícios. Até hoje, não nos arrependemos dessa decisão, tem sido ótimo trabalhar com Kotlin, desenvolvendo um aplicativo de qualidade para os usuários.Desde então, não utilizamos Kotlin apenas para desenvolvimento em Android. Fizemos diversos experimentos na idwall — alguns *scripts*, algumas POCs em *back-end*. Apesar de estarmos focados no desenvolvimento Android, essa linguagem apresenta um leque de opções.Como exemplo, recentemente criamos uma ferramenta com Kotlin para nos auxiliar em nossos *releases*. Apesar de ser um projeto de *back-end* e nossa equipe estar mais focada no dia a dia em Android, foi possível dar andamento nessa ideia e criar essa ferramenta com Kotlin. De uma maneira simples, compreendemos que não precisamos ficar presos ao desenvolvimento para Android, o Kotlin é útil para outros projetos também.Se você chegou até aqui, acredito que tenha interesse em aprender mais sobre Kotlin e você está no lugar certo. Não digo como ex-aluno, pois ainda tenho uma assinatura e, quando preciso, abro o navegador e acesso alura.com.br para tirar minhas dúvidas e fazer mais cursos. Quando decidi mudar de engenheiro civil para desenvolvedor, não pensei duas vezes e procurei pelo melhor lugar para estudar: a Alura!

  • DevOps

    Feature Flags e Parallel Change (Deploy vs Release)

    Neste vídeo você vai conhecer Feature Flags e Parallel Change, dois conceitos bem conhecidos do universo DevOps. Se você quiser conhecer mais de DevOps, pode começar pela formação [Primeiros passos em DevOps]( # Transcrição Você sabia que existem diferenças entre *deploy* e *release*? Neste vídeo, falaremos sobre elas, além de comentar práticas aplicáveis em cima dessas distinções. Oi, pessoal. Eu sou Vinicius Dias. Sejam bem-vindos à Alura. Neste Alura+, vamos bater um papo sobre a **diferença entre *deploy* e *release***, bem como discutir certas práticas que podemos aplicar em cima dessas diferenças. Assim, conseguimos obter resultados interessantes na hora de soltar um *release* ou criar um *deploy*. Primeiramente, vamos entender a diferença entre essas duas palavras. ***Deploy*** basicamente é o ato de ter o ambiente e o software já instalados e configurados. Em resumo, é colocar o software em produção — isso é fazer *deploy*. Se você tem o software desenvolvido e testado, já fez o *build*, passou por toda a *pipeline*, mandou para um servidor de homologação e para a produção, então você fez o *deploy*. Já fazer o ***release*** é entregar esse *deploy* para usuários reais. É perfeitamente possível fazer o *deploy* (por exemplo, de um novo *endpoint*) e não o documente, não entregue, não permita acesso pelos usuários. De qualquer forma, esse *endpoint* está em produção, o *deploy* foi feito. Portanto, o *release* é o ato de tornar público e disponível para os usuários. Então, fazer a publicação é gerar uma *release*. Inclusive, é bastante comum ir aumentando o *deploy* por um período para, no final do mês, por exemplo, gerar um só, mandar para a produção e fazer um único *release* de todas as novas funcionalidades. Em outras palavras, se foi gerada uma nova versão, foram escritas notas de versão e foi enviado um e-mail para o cliente expondo as novidades, então fizemos um *release*. Porém, sabemos que, antes disso, já tínhamos feito o *deploy*, pois o ambiente já estava configurado e o software já estava em produção. Então, essa é a diferença entre esses dois termos. Logo, vale notar que, se temos a opção de fazer o *deploy* sem fazer o *release*, ou seja, se é possível ter código em produção que os usuários ainda não vão acessar, podemos adotar algumas práticas interessantes em cima dessa ideia. Por exemplo, **feature toggles** ou **feature flags**. Ao criar uma funcionalidade, ela pode estar em um ponto crítico da aplicação ou modificar diversos trechos do código. Para diminuir os riscos da *release*, faremos o *deploy* adicionando uma expressão condicional if (uma verificação no código) para que a funcionalidade somente seja exibida caso a *feature flag* esteja marcada. Em outras palavras, a *release* será feita apenas se uma checkbox, uma configuração específica esteja ativa. Com as *feature flags*, conseguimos determinar que somente alguns clientes tenham certa funcionalidade ativa; outros clientes, não. É possível que você já tenha lido a respeito dos ***beta testers* ou testadores de novas funcionalidades**. Basicamente, essas pessoas terão as *feature flags* de funcionalidades novas habilitadas antes do resto dos usuários. Já aconteceu de você ter um aplicativo e seu amigo possuir uma funcionalidade nova que você ainda não possui? Isso é feito por meio das *feature flags*. Embora pareça complexo, visto que aplicativos enormes o utilizam, trata-se de um processo relativamente simples de ser implementado. Podemos realmente fazer um único if: se esta *feature flag* estiver ativa para determinado usuário, então libere a funcionalidade. Essa regra de ativação pode ser um simples botão que marcamos e desmarcamos, ou pode seguir outro padrão. Por exemplo, se quisermos liberar a funcionalidade para metade dos clientes, uma opção é habilitar a *feature flag* para os usuários cujo ID é par — se o ID for par, estará habilitada; se for ímpar, desabilitada. Assim, permitimos acesso a 50% dos usuários. Dessa forma, temos o *deploy* de uma funcionalidade, porém o *release* ainda não aconteceu para todos os clientes. Assim, conseguimos **monitorar com mais cuidado, com menos usuários**. Caso exista um problema, ele afetará menos pessoas, de forma que teremos uma *release* mais segura. Já que estamos falando sobre adicionar if e verificar o ID dos usuários, outra técnica bastante interessante e mais relacionada com o código em si é o ***parallel change*** (em português, "mudanças em paralelo"). Esse conceito também pode ser chamado padrão ***expand, migrate and contract***. A seguir, vamos entender o que isso significa. Vamos imaginar que temos uma classe com um método que recebe dois parâmetros de coordenadas, o X e o Y. Então, agimos em cima dessas informações. Por exemplo, em uma planilha no Excel, nas coordenadas X e Y teremos uma célula em que adicionaremos o conteúdo. Em outro par de coordenadas, teremos outra célula e adicionaremos outros dados, e assim em diante. Contudo, ao estudar sobre boas práticas, notamos que em vez de ter dois parâmetros inteiros seria mais adequado ter uma classe nova de coordenadas. Nela, teríamos a validação (se é uma coordenada positiva, por exemplo). Ou seja, queremos modificar a API do nosso código, alterar a interface com a qual lidamos com o código. Para tanto, precisaríamos quebrar o contrato e atualizar diversas partes do código. A ideia de *parallel change* é basicamente inserir novos métodos que recebem um objeto do tipo coordenada por parâmetro em vez desses dois inteiros. No entanto, os métodos que recebem os dois inteiros continuarão existindo. Todo o código que já existia continua funcionando e qualquer código novo que precise chamar esses métodos pode utilizar essa API melhorada. Então, quando adicionamos esses novos métodos, estamos na fase de ***expand*** — expandimos a API, criamos mais código, mais informações. Em seguida, avançamos para a fase de ***migrate***. Vamos migrar o código já existente para passar a utilizar os métodos novos, a nova API. Esse processo pode ser gradual, de forma mais lenta. Por fim, entramos na fase de ***contract***, em que enforçamos o novo contrato. A nível de código, esse procedimento é feito excluindo os métodos antigos que recebem aqueles dois parâmetros inteiros. Com essa abordagem temos algumas **vantagens**. De início, o código já existente não quebrará com essa melhoria do código, tudo continuará funcionando. Ademais, teremos uma API melhorada, com melhores práticas e pronta para ser utilizada por qualquer código novo. Ou seja, há entregas e melhorias contínuas em nosso código. E, por fim, a migração para o código novo pode ser incremental, realizada lentamente, ao longo de várias *releases*. E se fizéssemos *releases* usando o *parallel change*? E se, além de melhorar o código, pudéssemos liberar novas funcionalidades em paralelo? O nome dessa prática pode ser ***blue-green deployment*** ou ***blue-green releases***. Vamos supor que estamos criando um sistema novo ou novas funcionalidades do mesmo sistema. Temos o código atual rodando em um ambiente e faremos o *deploy* dessa nova funcionalidade em outro ambiente. Em seguida, podemos passar a redirecionar usuários para essa versão 2. Caso ocorra algum problema, basta redicioná-los de volta para o código anterior que continua funcionando. Inclusive, temos a opção combinar os conceitos de *blue-green deployment* com *feature toggles*. Por exemplo, podemos direcionar 20% dos usuários para o código novo e 80% para a versão antiga. Conforme o monitoramento, aumentamos o número de usuários na nova versão. Então, esse é o conceito de *blue-green deployment*. De forma incremental, conseguimos fazer com que os usuários utilizem a nova versão. Ou seja, realizamos um *release* incremental, de forma mais lenta. Já a ideia de *feature flag* é mais de baixo nível, no próprio código. Já o *blue-green deployment* refere-se ao sistema inteiro. São duas bases de códigos diferentes. O fato de conseguirmos separar conceitualmente *deploy* e *release* nos fornece ferramentas interessantes para tornar todo nosso ambiente de desenvolvimento e de operações mais seguro e mais tranquilo para se trabalhar.

  • Dados

    Executando SQL no VSCode

    Você já passou pela situação em que estava desenvolvendo um projeto utilizando a ferramenta *Visual Studio Code*, mas na hora de executar suas consultas no SQL, teve que migrar para outra ferramenta e interrompeu todo o seu raciocínio? Hoje, queremos resolver esse problema com você. Para isso, vamos conseguir executar SQL diretamente no *Visual Studio Code*. Este conteúdo é apresentado por Igor do Nascimento Alves, instrutor na Escola de Dados. > **Audiodescrição**: Igor é uma pessoa branca, de cabelos curtos e pretos, que veste uma camiseta cinza, com desenhos de peças de xadrez. Ele está num quarto e tem atrás de si parte de uma cama, um teclado musical e um armário com objetos diversos sobre ele. O cenário está iluminado com luzes nas cores azul e verde. Hoje, queremos explorar a questão de executar o SQL diretamente no *VS Code*. Para isso, vamos explorar dois plugins, o *SQL Tools* e o *SQLite*, vamos explorar suas características, vantagens e desvantagens. Para você se comunicar com o banco de dados, precisa de uma ferramenta, podemos utilizar o *SQLite Online*, a ferramenta chamada *DBeaver * ou as próprias *workbenches* dos SGBDs. Mas você já passou pela situação em que estava trabalhando em um projeto multidisciplinar? No nosso projeto, estamos executando consultas SQL na ferramenta *SQLite Online*, mas também estamos fazendo modificações no banco de dados utilizando o código Python. Então, no código Python, estamos me conectando ao banco de dados e fazendo modificações nesse banco de dados. Toda vez que fazemos uma modificação, precisamos pegar esse arquivo .db, carregá-lo no *SQLite Online* e executar novamente minhas consultas. Todo esse processo interrompe o fluxo de trabalho. Você já passou por uma situação parecida com essa? ## Trabalhando com plugins no Visual Studio Code Para resolver esse problema, uma das possibilidades é trabalharmos com os plugins do *Visual Studio Code*. Vamos fazer isso? No *Visual Studio Code*, no canto superior esquerdo, temos um ícone de vários quadrados, são três quadrados juntos e um separado. Esse ícone se chama “Extensões”, ou plugins. Ao clicar nessa opção, surgirá uma barra de pesquisa onde pode procurar por esses plugins. Vou digitar “SQL”, pois estamos interessados em plugins dessa natureza. O primeiro plugin que aparece é o *SQL Server*, e ele foi feito pela própria Microsoft. O que isso quer dizer? Significa que a ferramenta *Visual Studio Code* pode aceitar tanto plugins feitos pela Microsoft quanto os feitos pela comunidade. No nosso caso, vamos explorar os plugins feitos pela comunidade, porque queremos trabalhar com um SGBD específico, que é o *SQLite*. Então vamos continuar percorrendo essa lista de opções até encontrar o “*SQLTools*”. Destacamos essa ferramenta porque o *SQLTools* é muito poderoso, você consegue trabalhar com diversos SGBDs nele. Após selecioná-lo, você pode analisar que ele trabalha com *MySQL*, *PostgreSQL* e *Microsoft SQL Server* e muitos outros. Então, ele é bem poderoso nesse quesito. Porém, quando fizemos os testes de instalação, descobrimos que essa instalação é muito complicada. Por quê? Você vai precisar instalar um segundo plugin relacionado ao banco de dados que vai utilizar, e também um drive que será responsável por fazer essa comunicação entre o *Visual Studio Code* e o banco de dados. Então, ele é um pouco mais trabalhoso para instalar. Já que vamos trabalhar com SGBD *SQLite*, preferimos explorar um pouco mais. Então, vou clicar em “Extensões” novamente, rolando um pouco mais na lista, vamos encontrar um plugin que se chama *SQLite*. Esse plugin tem o nome do SGBD *SQLite*, porque ele só trabalha com esse banco de dados. Então é uma limitação. Se você for trabalhar com outro banco de dados, faz mais sentido você utilizar o *SQLTools*. Como o nosso caso é o *SQLite*, podemos explorar esse plugin. Este plugin é bastante básico e simples de instalar. Ele executa consultas SQL e também consegue exportar essas consultas nos formatos JSON ou CSV. É muito simples de utilizar. Vamos utilizá-lo. Ao clicar no plugin do SQLite, teremos a opção de instalar. Clicamos no botão “Instalar” e agora podemos voltar para o nosso projeto. Vamos clicar no Explorador do VS Code. Dentro da pasta “SQL”, já tenho um script chamado “explorando_dados.sql”. Nesse script, temos as consultas. São as mesmas consultas que tínhamos no SQLite Online, apenas copiamos para cá. E como executamos elas? Podemos clicar no “Explorador”, selecionar a consulta, pressionar o botão direito e escolher a opção “*Run Select Query*” (Executar Consulta Selecionada). Ele abrirá uma janela de pergunta, querendo saber qual é o banco de dados que usaremos, pois em nenhum momento especificamos qual banco de dados ele deve procurar esses dados. Podemos clicar na opção do banco de dados que temos disponível, que é o banco de dados de vendas, e ele executará a consulta. sql SELECT strftime('%m', data_venda) AS mes, COUNT(*) AS quantidade_vendas FROM vendas WHERE strftime('%Y', data_venda) = '2023' GROUP BY mes; No canto direito, ele abriu uma nova janela com o resultado da nossa consulta, que é uma tabela com duas colunas: coluna mês e coluna quantidade de vendas. É o mesmo resultado que tínhamos no SQLite Online. | mes | quantidade_vendas | |---|---| | 01 | 1598 | | 02 | 824 | | 03 | 863 | | 04 | 773 | | 05 | 1245 | | 06 | 751 | | 07 | 807 | | 08 | 740 | | 09 | 788 | Conseguimos, de fato, executar código SQL no VS Code. Com essa ferramenta do SQLite, foi muito simples executar essas consultas. ## Como exportar consultas No resultado da nossa consulta, no canto superior, temos o ícone de um arquivo com uma seta. Podemos clicar nessa opção e uma nova janela se abrirá, perguntando onde queremos salvar esse resultado e em que formato. Podemos dar um nome para esse resultado, então vamos chama-lo de “mes_vendas.csv” e clicar em “Salvar”. Como já temos esse arquivo, ele perguntará se queremos substituir, vamos confirmar que “Sim”. Podemos fechar a aba da consulta e a aba do CSV. Agora, vamosmostrar a vantagem de exportar esse arquivo. Clicando no “Explorador”, neste projeto estamos trabalhando com o Jupyter Notebook. Vamos clicar no arquivo “notebooks > explorando_dados.ipynb”, esse é o arquivo Jupyter Notebook chamado Explorando Dados. Esse arquivo lê o CSV. Vamos clicar em “Executar Tudo” e ele trouxe aquele mesmo resultado, que é o retorno da consulta, para o nosso Jupyter Notebook. Se você estiver atuando em um projeto onde também é uma pessoa cientista de dados e quer criar visualizações com o resultado da sua consulta ou criar modelos de *machine learning* (aprendizado de máquina), isso ficou muito prático. Você executa as consultas SQL e traz o resultado para o seu Jupyter Notebook. Essa é a **vantagem de trabalhar no VSCode**, essa habilidade de um projeto multidisciplinar. Existem outras vantagens de termos migrado nossas consultas para o VSCode? Sim, o VSCode conta com diversos plugins, não apenas um plugin voltado para SQL. Ele oferece diversos plugins para facilitar o seu trabalho. ## Utilizando o Copilot Outro plugin que vamos explorar com você hoje se chama Copilot. Quero passar algumas informações desse plugin antes de utilizá-lo. A primeira informação que queremos trazer é que é um **plugin pago**. Esse serviço é pago e, quando este vídeo foi gravado, o Copilot custava 10 dólares por mês para uma conta individual. Para utilizar sem ter que pagar esse valor existem algumas alternativas, como por exemplo o *free trial* (período de avaliação gratuito). Durante esse período de avaliação, que dura **30 dias**, você pode utilizar o serviço de maneira gratuita. No entanto, para fazer isso, será necessário selecionar uma forma de pagamento, que pode ser mensal ou anual, e fornecer os dados do seu cartão de crédito. Isso pode ser arriscado, pois **após os 30 dias, a cobrança acontece automaticamente**. > É muito importante que você cancele o serviço antes do término do período de avaliação se não quiser pagar por ele. De acordo com a descrição no GitHub, é possível cancelar o serviço assim que a avaliação começar. Ou seja, se você testou e viu que está tudo funcionando, não precisa esperar os 30 dias para cancelar. O acesso ao GitHub Copilot continuará disponível até o final do período de avaliação, mesmo após o cancelamento. Existem outras maneiras mais recomendadas de utilizar o Copilot: se você se encaixa no perfil de ser uma pessoa estudante, professora de universidade, ou mantenedora de projetos de software livre. Se você se encaixa em algum desses perfis, o GitHub Copilot é gratuito. Basta apenas enviar um comprovante para o GitHub e eles fornecerão o acesso de maneira gratuita. A última possibilidade que sugerimos para utilizar o Copilot é verificar se a sua empresa tem acesso ao plano Enterprise. Eles têm um plano para empresas, o **Copilot Enterprise**, então pode ser que você consiga solicitar esse acesso na sua empresa. Agora que deixamos claro como funciona essa ferramenta paga, vamos para o VS Code e ver como ela funciona. Então, já temos o Copilot configurado na máquina e preparei um script para explorarmos, o “explorandocopilot.sql”. Ele está em branco e, agora, para utilizarmos o Copilot, você pode começar digitando um comentário. Nesse comentário, você vai dizer o que deseja escrever de código. Então, um comentário no SQL começa com --, e aqui vamos dizer para ele que queremos saber quais os nomes das tabelas que existem no meu banco de dados. Estamos conhecendo esse banco de dados ainda e queremos entendê-lo melhor. Então, vou digitar: "-- Quais os nomes das tabelas no meu banco sqlite", vou apertar o “Enter” e o Copilot já vai fazer uma sugestão. SELECT name FROM sqlite_master WHERE type= ‘stable’; Ele disse que isso vai retornar o resultado que precisamos. Então, vamos apertar a tecla “Tab”, que aí ele vai transformar esse código de fato aqui no meu arquivo. Podemos selecionar, apertar o botão direito e rodar essa consulta. Como mudamos de arquivo de consulta, ele vai perguntar novamente que banco de dados queremos explorar. Vamos selecionar o banco de vendas novamente e ele retornou essa informação. São os nomes das tabelas que existem no banco de dados: vendas, produtos, clientes, categorias, fornecedores, marcas e itens_venda. Podemos até confirmar isso lá no *SQLite Online*. No *SQLite Online*, no canto esquerdo, temos o nome das tabelas e, dentro do nome das tabelas, temos o nome das colunas também e os tipos que elas aceitam. Aqui vale destacar uma informação importante: uma ferramenta como o *SQLite Online* ou as *Workbends* dos SGBDs serão muito mais completas. Elas têm muitos mais recursos e esse é um exemplo deles. Só de carregar o banco de dados, já temos acesso ao nome das tabelas, o nome das colunas, tudo isso vem de fácil acesso. Já no nosso plugin, no VSCode, tive que rodar uma consulta para acessar essa informação. > Uma ferramenta voltada só para SQL vai ter muitos mais recursos do que esse plugin pode oferecer. Esse é um ponto de atenção. Vamos continuar explorando o Copilot. Já conseguimos descobrir o nome das tabelas. Agora, quero saber um pouco mais sobre uma tabela específica. Só de apertar “Enter” aqui, ele já fez uma sugestão. Ele colocou como comentário: -- Quais as colunas da tabela ‘users’. Nós nem temos essa tabela. Ele está analisando mais o banco de dados do que o nosso contexto. Isso é uma característica dele. > Quanto mais informação você for colocando nesse script, mais ele vai entender o projeto que você vai trabalhar e melhores serão suas sugestões. Então, vamos seguir parcialmente essa sugestão. Vamos digitar: "quais as colunas da tabela", só que agora eu quero uma tabela não do banco de dados, queremos uma do nosso contexto, como por exemplo, produtos. Então, vou apertar “Enter” e, novamente, ele fez uma sugestão. Aqui, ele está utilizando um comando chamado PRAGMA. Não queremos utilizá-lo, queremos um SELECT. Então, quando ele não estiver indo para o caminho que você precisa, você pode começar a digitar um código e ele vai se adaptando ao que você está digitando. Então, escrevemos SELECT, que é o comando que queremos utilizar, e ele já colocou: SELECT * FROM pragma_table_info(‘produtos’);. Vamos apertar o “Tab” para ele preencher o código, selecionar esse código, clicar nele com o botão direito do mouse e escolher a opção “Run select query”, e ele retornou um resultado. Aqui, temos o nome das colunas e diversas informações, incluindo o tipo que essa coluna aceita. | cid | name | type | notnull | dflt_value | |---|---|---|---|---| | 0 | id_produto | INTEGER | 0 | NULL | | 1 | nome_produto | TEXT | 0 | NULL | | 2 | preco | REAL | 0 | NULL | | 3 | categoria_id | INTEGER | 0 | NULL | | 4 | marca_id | TEXT | 0 | NULL | | 5 | fornecedor_id | INTEGER | 0 | NULL | | 6 | data_estoque | DATE | 0 | NULL | | 7 | status | TEXT | 0 | NULL | Essa é a mesma informação que tínhamos lá no *SQLite Online* e conseguimos ela através de uma consulta. Então, já temos acesso às mesmas informações, só que com um pouco mais de trabalho. Vamos testar uma última consulta. Só que agora, em vez de digitar um comentário, vamos escrever diretamente o que queremos: SELECT * FROM produtos. Queremos selecionar os dados da tabela produtos, mas não todos: apenas cinco. No entanto, não lembramos exatamente qual é o nome do comando que limita os resultados. Quando você estiver nessa situação, pode digitar parcialmente o que lembra sobre esse código, e o Copilot vai te ajudar. Então, vamos começar a digitar li, e aqui ele já faz uma sugestão para você. Ele sugeriu que talvez você queira digitar limit. Vamos apertar o “Tab”, ele sugere aqui um limite de 10, que está ótimo, vamos utilizá-lo. sql SELECT * FROM produtos limit 10; Vamos selecionar o código e executá-lo. Então, selecione o trecho de código e clique com o botão direito do mouse sobre ele. Em seguida, selecione “Run select query”. Ele retornou um resultado para nós aqui, todos os produtos na minha base de dados, os 10 primeiros resultados. | id_produto | nome_produto | preco | categoria | |---|---|---|---| | 1 | Bola de Futebol | 24.48 | 4 | | 2 | Chocolate | 1351.17 | 4 | | 3 | Celular | 1351.88 | 4 | | 4 | Chocolate | 662.65 | 5 | | 5 | Celular | 1705.5 | 1 | | 6 | Bola de Futebol | 1941.02 | 3 | | 7 | Celular | 1347.34 | 5 | | 8 | Livro de Ficção | 1993.08 | 2 | | 9 | Livro de Ficção | 324.83 | 5 | | 10 | Celular | 1631.67 | 1 | Então, com um código que do qual nos lembrávamos parcialmente, ele nos ajudou a complementá-lo. Esse é o poder do Copilot, ele vai facilitar a escrita de código. Esse recurso é muito útil e você consegue utilizá-lo aqui no *VSCode*. Hoje, nós analisamos diversas coisas, como, por exemplo, os *plugins* que trazem a possibilidade de trabalhar no VSCode com o SQL. Exploramos o *SQLTools*, uma ferramenta interessante, pois ela acessa diversos bancos de dados. No entanto, ela tem algumas desvantagens, como a **dificuldade para realizar sua instalação**. Já o outro *plugin*, o *SQLite*, é muito simples de utilizar. Essa é uma vantagem, mas uma desvantagem seria que ele **possui poucos recursos**, ou seja, não tem muitas opções para você trabalhar. ## Vantagens e Desvantagens de migrar o projeto para o VSCode Agora, falando das vantagens e desvantagens de migrar o seu projeto para o *VSCode*, conseguimos trabalhar em um projeto multidisciplinar quando passamos nossas consultas SQL para o *VSCode*. Porém, temos a desvantagem de ter menos recursos do que uma ferramenta como o *DBeaver*, o *SQLite Online*, as *Workbends* dos SGBDs têm. Eles possuem muito mais recursos. Portanto, para decidir qual é o melhor para você, vai depender do projeto em que você está trabalhando, do contexto e do seu papel nesse projeto. Se você for, por exemplo, uma pessoa DBA trabalhando nesse projeto exclusivamente com o SQL, faz muito mais sentido você optar por uma ferramenta especializada em SQL. Lá, você terá muitos mais recursos. Porém, caso você seja, por exemplo, uma pessoa da área de negócios ou uma pessoa cientista de dados e estiver trabalhando com o *Python*, com o *Jupyter Notebook*, e tiver esse projeto multidisciplinar, faz mais sentido você optar por uma ferramenta que aceite esses diversos recursos. Então, você precisa avaliar cada um dos seus contextos. Ficamos muito felizes de ter resolvido esse problema junto com você, descoberto essa possibilidade de trabalhar com o SQL no VSCode, e esperamos que você continue se aprofundando no SQL na nossa formação. Para que você possa se aprofundar ainda mais neste tema, segue a sugestão de alguns conteúdos complementares: - [Formação Conhecendo SQL]( - [Curso GitHub Copilot e ChatGPT: impulsionando seu desenvolvimento com IA]( - [Sobre a cobrança para o GitHub Copilot]( - [Extensão SQLite]( - [Extensão SQLTools]( Até a próxima!

  • 1Página 1…164Página 164…300Página 300
    1Página 1…162Página 162163Página 163164Página 164165Página 165
    166
    Página 166
    …
    300Página 300