<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Johnny Meneses</title>
    <description>The latest articles on DEV Community by Johnny Meneses (@johnnymeneses).</description>
    <link>https://dev.to/johnnymeneses</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F522395%2F8bf8d970-4ce6-4622-9edf-6ac5bc79e830.jpg</url>
      <title>DEV Community: Johnny Meneses</title>
      <link>https://dev.to/johnnymeneses</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/johnnymeneses"/>
    <language>en</language>
    <item>
      <title>How to install Android Studio on Linux? | Snap Package</title>
      <dc:creator>Johnny Meneses</dc:creator>
      <pubDate>Sun, 19 Jun 2022 12:18:48 +0000</pubDate>
      <link>https://dev.to/johnnymeneses/how-to-install-android-studio-on-linux-snap-package-417</link>
      <guid>https://dev.to/johnnymeneses/how-to-install-android-studio-on-linux-snap-package-417</guid>
      <description>&lt;p&gt;We will install Android studio by snap package. I'll show you how to do it on Debian or Ubuntu. &lt;/p&gt;

&lt;p&gt;But first: &lt;strong&gt;What is Android Studio?&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Android Studio is the official Integrated Development Environment (IDE) for Android app development, based on IntelliJ IDEA. &lt;br&gt;
A lot of fancy words.&lt;/p&gt;

&lt;p&gt;Android Studio provides a unified environment where you can build apps for Android phones, tablets, Android Wear, Android TV, and Android Auto. &lt;/p&gt;

&lt;p&gt;And &lt;strong&gt;Snap Package&lt;/strong&gt;? What is it? Is safe? I can remove if I want to? &lt;/p&gt;

&lt;p&gt;Snaps are self-contained applications running in a sandbox with mediated access to the host system, work across a range of Linux distributions and allow upstream software developers to distribute their applications directly to users.&lt;/p&gt;

&lt;p&gt;Is safe as long as you uses the official repository.&lt;/p&gt;

&lt;p&gt;Here I'll install the latest version of Android Studio:&lt;br&gt;
Chipmunk | 2021.2.1&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2c215th7bq6ztpc16rlq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2c215th7bq6ztpc16rlq.png" alt="Android Studio: Chipmunk"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To install snaps app, we need Snapd. &lt;/p&gt;

&lt;h1&gt;
  
  
  Ubuntu
&lt;/h1&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update 
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;snapd 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;To install Android Studio, just execute this line&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;snap &lt;span class="nb"&gt;install &lt;/span&gt;android-studio –classic 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
  
  
  Debian
&lt;/h1&gt;

&lt;p&gt;On Debian 9 and newer, snap can be installed directly from the command line:  &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update 
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;snapd 
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;snap &lt;span class="nb"&gt;install &lt;/span&gt;core 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Before install Android Studio, you can search for the latest version with this command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;$ &lt;/span&gt;snap find &lt;span class="s2"&gt;"android-studio"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxi272ud3a9jdu93rjq3u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxi272ud3a9jdu93rjq3u.png" alt="Terminal showing snap versions of Android Studio description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To install Android Studio, simply use the command: &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;snap &lt;span class="nb"&gt;install &lt;/span&gt;android-studio &lt;span class="nt"&gt;--classic&lt;/span&gt; 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The download will start. Upon completion, simply follow the on-screen instructions.&lt;br&gt;
Easy peasy lemon squeezy. &lt;/p&gt;

&lt;p&gt;How to Update?  &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;snap refresh android-studio –classic 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;How to Remove?  &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;snap remove android-studio –classic 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you have some doubts, text me. &lt;/p&gt;

</description>
      <category>android</category>
      <category>debian</category>
      <category>linux</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>Android: Como integrar seu App ao Firebase</title>
      <dc:creator>Johnny Meneses</dc:creator>
      <pubDate>Sun, 31 Oct 2021 10:54:43 +0000</pubDate>
      <link>https://dev.to/johnnymeneses/android-como-integrar-seu-app-ao-firebase-250</link>
      <guid>https://dev.to/johnnymeneses/android-como-integrar-seu-app-ao-firebase-250</guid>
      <description>&lt;p&gt;O Firebase é uma solução utilizada por milhares de desenvolvedores pelo mundo. Considerado um &lt;strong&gt;Baas&lt;/strong&gt;, &lt;em&gt;Backend-as-a-Service&lt;/em&gt;, é uma plataforma de desenvolvimento de aplicativos móveis do Google com o intuito de ajudar você à criar, melhorar e expandir o seu aplicativo. &lt;/p&gt;

&lt;p&gt;Neste artigo abordaremos como integrar o Firebase ao seu App através do Android Studio. &lt;/p&gt;

&lt;p&gt;Você precisará ter uma conta do Google. Se ainda não tem, cadastre uma. &lt;/p&gt;

&lt;p&gt;Acesse o site do FireBase: &lt;a href="https://firebase.google.com/"&gt;https://firebase.google.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esta é a tela principal do FireBase. Clique em Começar, e depois em Criar Projeto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---WgU0OIr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/53nlwdo3i6jldfkvfufj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---WgU0OIr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/53nlwdo3i6jldfkvfufj.png" alt="Image description" width="602" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fPgGWoCs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2qqhezz9ziwzqiovg6bg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fPgGWoCs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2qqhezz9ziwzqiovg6bg.png" alt="Image description" width="602" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dê um nome ao seu projeto. Pode ser o nome da sua aplicação:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bvY0XRw7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/12v9hkmt0qfikfbzo1u3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bvY0XRw7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/12v9hkmt0qfikfbzo1u3.png" alt="Image description" width="602" height="373"&gt;&lt;/a&gt;&lt;br&gt;
 &lt;br&gt;
Você pode ativar o Google Analytics se você quiser. Não vou ativar neste exemplo. Clique em continuar:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JwN5i3I7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b1sy3ovnufu3qc1aj6cq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JwN5i3I7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b1sy3ovnufu3qc1aj6cq.png" alt="Image description" width="602" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seu projeto no Firebase foi criado! Vamos às configurações. Clique em Continuar:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZFYoR_Ag--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oc3rwdcwrieyj1lso2ax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZFYoR_Ag--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oc3rwdcwrieyj1lso2ax.png" alt="Image description" width="602" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Na tela principal do seu projeto, adicione o Firebase ao seu aplicativo clicando no ícone do Android:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DoroEo-1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f6nq7ejirxoask2d7emx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DoroEo-1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f6nq7ejirxoask2d7emx.png" alt="Image description" width="602" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Você precisará registrar o seu app.  Adicione o nome do pacote da sua aplicação. Ele pode ser encontrado tanto no arquivo &lt;strong&gt;AndroidManifest&lt;/strong&gt; , como  no arquivo &lt;strong&gt;build.gradle&lt;/strong&gt; em nível de App.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2jNiMipp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wcsb7tkuyalir9yjxx0k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2jNiMipp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wcsb7tkuyalir9yjxx0k.png" alt="Image description" width="602" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No arquivo  &lt;em&gt;build.gradle&lt;/em&gt; em nível de App, busque a tag &lt;em&gt;applicationID&lt;/em&gt; e copie o seu conteúdo: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--An0m0l_K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/agcbihg6l9wfggzu70g3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--An0m0l_K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/agcbihg6l9wfggzu70g3.png" alt="Image description" width="602" height="265"&gt;&lt;/a&gt;&lt;br&gt;
 &lt;br&gt;
Se você quiser, também poderá dar um nome ao seu App. Após isso, clique em Registrar: &lt;/p&gt;

&lt;p&gt; &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_57zSwOq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m73mjabhe0qqeq2ydwqb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_57zSwOq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m73mjabhe0qqeq2ydwqb.png" alt="Image description" width="602" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Será disponibilizado um arquivo JSON com as configurações necessárias para o correto funcionamento. Este arquivo deverá ser importado ao projeto. Faça o download do arquivo google-services.json&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Dlvh10Hx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p26v6qtsird8036uojcm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Dlvh10Hx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p26v6qtsird8036uojcm.png" alt="Image description" width="602" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mude para a visualização do Projeto no Android Studio para ver o diretório raiz. Mova o arquivo google-services.json que você acabou de salvar para o diretório raiz do módulo do app Android.&lt;/p&gt;

&lt;p&gt;Com a visualização do Android Studio em nível de Projeto, adicionar o arquivo JSON no diretório App conforme abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CnO_auBd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bs5j16e1sjqau2euikvy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CnO_auBd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bs5j16e1sjqau2euikvy.png" alt="Image description" width="445" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o8ZcJnnO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3sfzoe3bj4vo91ddoprf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o8ZcJnnO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3sfzoe3bj4vo91ddoprf.png" alt="Image description" width="602" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após adicionar o arquivo JSON, chegou a hora de configurar as dependências do projeto. &lt;br&gt;
Vamos adicionar o SDK do Firebase ao nosso App:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z9vWzXgi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4ypa36nr3pw6tvoyfg4q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z9vWzXgi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4ypa36nr3pw6tvoyfg4q.png" alt="Image description" width="602" height="402"&gt;&lt;/a&gt;&lt;br&gt;
 &lt;br&gt;
No arquivo build.gradle em nível do projeto, copie a linha classpath e cole dentro do bloco de dependências: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2l9ZrpAf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uie7zbeg10qkk5emwi6y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2l9ZrpAf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uie7zbeg10qkk5emwi6y.png" alt="Image description" width="597" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M8bz9o60--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4jsutma28ffn1jentqu1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M8bz9o60--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4jsutma28ffn1jentqu1.png" alt="Image description" width="602" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora, em nível de App, vamos adicionar os plugins e as dependências:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tSdh-bcl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5h5pmfscd41g3tw4a92q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tSdh-bcl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5h5pmfscd41g3tw4a92q.png" alt="Image description" width="567" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Primeiramente os plugins:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;apply&lt;/span&gt; &lt;span class="nx"&gt;plugin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;com.android.application&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="nx"&gt;apply&lt;/span&gt; &lt;span class="nx"&gt;plugin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;com.google.gms.google-services&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Estes ficarão acima de dependências: &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HC2AHkb0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qamwt6k9wo3w2nwsi6fe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HC2AHkb0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qamwt6k9wo3w2nwsi6fe.png" alt="Image description" width="602" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E agora  vamos adicionar a dependência:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;implementation&lt;/span&gt; &lt;span class="nx"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;com.google.firebase:firebase-bom:28.4.2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mF4P_RE4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pfug03u93driqk5grn7z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mF4P_RE4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pfug03u93driqk5grn7z.png" alt="Image description" width="602" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para finalizar, é preciso sincronizar o projeto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ELX8IgTE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8tn0ad2qdkb2ksl21v2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ELX8IgTE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8tn0ad2qdkb2ksl21v2k.png" alt="Image description" width="880" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depois de sincronizar, clicar em continuar no Console:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xzRWQGU3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4a820nmdr1rg1olr5pui.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xzRWQGU3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4a820nmdr1rg1olr5pui.png" alt="Image description" width="602" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vamos agora adicionar algumas bibliotecas. De volta à pagina principal do seu projeto, clique em Acessar a documentação&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XYPmaIvU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ys9xjpsgbpth8wmqp7qi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XYPmaIvU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ys9xjpsgbpth8wmqp7qi.png" alt="Image description" width="880" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicar em primeiros Passos com Android:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LoYGFXxE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o7fohn8t4paaewqlco83.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LoYGFXxE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o7fohn8t4paaewqlco83.png" alt="Image description" width="602" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ao final da página, serão exibidas diversas bibliotecas disponíveis para uso:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G1sCVf4U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/90qelyngxbxyfp1f35jn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G1sCVf4U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/90qelyngxbxyfp1f35jn.png" alt="Image description" width="487" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para o nosso exemplo, vamos incluir duas: autenticação e gravação em banco de dados&lt;/p&gt;

&lt;p&gt;Authentication: Para autenticação de Usuário&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Hnmk4rBa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ch6gx8trzpr5u2vduux5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Hnmk4rBa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ch6gx8trzpr5u2vduux5.png" alt="Image description" width="806" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cloud Firestore: Banco de dados baseado em coleção:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cn9mryrg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/svq352ksxzgaxpxl9kkm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cn9mryrg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/svq352ksxzgaxpxl9kkm.png" alt="Image description" width="756" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;br&gt;
No arquvo build.gradle à nivel de App, cole as duas dependências dentro da tag implementation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9ddf9Nwc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y4i69ytg5aama0mhenzz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9ddf9Nwc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y4i69ytg5aama0mhenzz.png" alt="Image description" width="602" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para testar se a integração foi feita da forma correta, você pode dentro do OnCreate, por exemplo, começar a chamar os métodos disponíveis do Firebase. &lt;/p&gt;

&lt;p&gt;Se a lista de opções do Firebase for exibida conforme abaixo, é que a configuração foi feita com sucesso!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IBEw3ksR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b0svwyvlh53rx5sxtplz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IBEw3ksR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b0svwyvlh53rx5sxtplz.png" alt="Image description" width="537" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Android: Como configurar um background degradê no seu App</title>
      <dc:creator>Johnny Meneses</dc:creator>
      <pubDate>Sun, 17 Oct 2021 15:35:11 +0000</pubDate>
      <link>https://dev.to/johnnymeneses/android-como-colocar-um-background-degrade-4i7i</link>
      <guid>https://dev.to/johnnymeneses/android-como-colocar-um-background-degrade-4i7i</guid>
      <description>&lt;p&gt;Já pensou em deixar seu app Android com um visual mais profissional sem impactar no tamanho da aplicação? Vamos falar de GradientDrawable.&lt;/p&gt;

&lt;p&gt;Um plano de fundo degradê (ou gradient) pode ser uma opção mais bonita e mais leve e é incrivelmente fácil de fazer:&lt;/p&gt;

&lt;p&gt;No diretório drawable, adicione um novo arquivo do tipo Drawable Resource File&lt;br&gt;
&lt;em&gt;res&amp;gt; drawable &amp;gt; new &amp;gt; Drawable Resource File&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JCfnDSJZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kh245gwv1glo4amh8ocm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JCfnDSJZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kh245gwv1glo4amh8ocm.png" alt="Image description" width="602" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vamos chamar este arquivo de background. No campo &lt;em&gt;root element&lt;/em&gt;, escreva shape e clique em OK.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8DFigtIT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/usekv4dd4bgvuxy2nz9w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8DFigtIT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/usekv4dd4bgvuxy2nz9w.png" alt="Image description" width="602" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Os atributos que vamos usar ficarão dentro da tag &lt;em&gt;gradiente&lt;/em&gt;. São eles: &lt;/p&gt;

&lt;p&gt;&lt;em&gt;android:startColor&lt;/em&gt;: para a cor Inicial&lt;br&gt;
&lt;em&gt;android:centerColor&lt;/em&gt;: para a cor que ficará no centro&lt;br&gt;
&lt;em&gt;android:endColor&lt;/em&gt;: para a cor que ficará no final&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt; &lt;span class="nt"&gt;&amp;lt;gradient&lt;/span&gt;
        &lt;span class="na"&gt;android:startColor=&lt;/span&gt;&lt;span class="s"&gt;"#FB528B"&lt;/span&gt;
        &lt;span class="na"&gt;android:centerColor=&lt;/span&gt;&lt;span class="s"&gt;"#f899b9"&lt;/span&gt;
        &lt;span class="na"&gt;android:endColor=&lt;/span&gt;&lt;span class="s"&gt;"#FFB344"&lt;/span&gt;
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CBGg_q5n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r7gd3x89z18l8m8061c4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CBGg_q5n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r7gd3x89z18l8m8061c4.png" alt="Image description" width="387" height="642"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ainda é possível usar a tag &lt;em&gt;angle&lt;/em&gt; para direcionar a ordem das cores:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt; &lt;span class="nt"&gt;&amp;lt;gradient&lt;/span&gt;
        &lt;span class="na"&gt;android:startColor=&lt;/span&gt;&lt;span class="s"&gt;"#FB528B"&lt;/span&gt;
        &lt;span class="na"&gt;android:centerColor=&lt;/span&gt;&lt;span class="s"&gt;"#f899b9"&lt;/span&gt;
        &lt;span class="na"&gt;android:endColor=&lt;/span&gt;&lt;span class="s"&gt;"#FFB344"&lt;/span&gt;
        &lt;span class="na"&gt;android:angle=&lt;/span&gt;&lt;span class="s"&gt;"90"&lt;/span&gt;
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--k9Yp9sxu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7ow51yg0pwedjnkg1cfp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k9Yp9sxu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7ow51yg0pwedjnkg1cfp.png" alt="Image description" width="382" height="632"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Você poderá tanto digitar o código hexadecimal de cada cor, ou definir diretamente no arquivo colors e chamá-las pelo nome indicado&lt;br&gt;
&lt;em&gt;(res / values / colors.xml)&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;    &lt;span class="nt"&gt;&amp;lt;gradient&lt;/span&gt;
        &lt;span class="na"&gt;android:startColor=&lt;/span&gt;&lt;span class="s"&gt;"@color/pink"&lt;/span&gt;
        &lt;span class="na"&gt;android:centerColor=&lt;/span&gt;&lt;span class="s"&gt;"@color/pink_light"&lt;/span&gt;
        &lt;span class="na"&gt;android:endColor=&lt;/span&gt;&lt;span class="s"&gt;"@color/orange"&lt;/span&gt;
        &lt;span class="na"&gt;android:angle=&lt;/span&gt;&lt;span class="s"&gt;"90"&lt;/span&gt;
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DPLqRC15--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7sydawa5s82v585e86gt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DPLqRC15--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7sydawa5s82v585e86gt.png" alt="Image description" width="506" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para adicionar o backgroud criado à sua activity, basta incluir a tag  &lt;em&gt;android:background&lt;/em&gt; apontando para o arquivo drawable criado. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O0RkBkNY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0pv9h19sx4vivzwefvft.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O0RkBkNY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0pv9h19sx4vivzwefvft.png" alt="Image description" width="602" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aí é só soltar a criatividade:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt; &lt;span class="nt"&gt;&amp;lt;gradient&lt;/span&gt;
        &lt;span class="na"&gt;android:startColor=&lt;/span&gt;&lt;span class="s"&gt;"#0014FF"&lt;/span&gt;
        &lt;span class="na"&gt;android:endColor=&lt;/span&gt;&lt;span class="s"&gt;"#00FF5b"&lt;/span&gt;
        &lt;span class="na"&gt;android:angle=&lt;/span&gt;&lt;span class="s"&gt;"280"&lt;/span&gt;
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V6ex2tCD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cly2oz3t78f2shjlfxyb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V6ex2tCD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cly2oz3t78f2shjlfxyb.png" alt="Image description" width="372" height="628"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;    &lt;span class="nt"&gt;&amp;lt;gradient&lt;/span&gt;
        &lt;span class="na"&gt;android:startColor=&lt;/span&gt;&lt;span class="s"&gt;"#FF2CDF"&lt;/span&gt;
        &lt;span class="na"&gt;android:endColor=&lt;/span&gt;&lt;span class="s"&gt;"#0014ff"&lt;/span&gt;
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ya6EV8NJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t2m1xey7wwvdyunr6o7i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ya6EV8NJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t2m1xey7wwvdyunr6o7i.png" alt="Image description" width="370" height="628"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;    &lt;span class="nt"&gt;&amp;lt;gradient&lt;/span&gt;
        &lt;span class="na"&gt;android:startColor=&lt;/span&gt;&lt;span class="s"&gt;"#ffe53b"&lt;/span&gt;
        &lt;span class="na"&gt;android:endColor=&lt;/span&gt;&lt;span class="s"&gt;"#ff2525"&lt;/span&gt;
        &lt;span class="na"&gt;android:angle=&lt;/span&gt;&lt;span class="s"&gt;"300"&lt;/span&gt;
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BFOL2u6f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fhva3n0sf3p3pxj3n0n0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BFOL2u6f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fhva3n0sf3p3pxj3n0n0.png" alt="Image description" width="372" height="628"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quer conhecer um pouco mais? Documentação oficial da &lt;a href="https://developer.android.com/reference/android/graphics/drawable/GradientDrawable"&gt;GradientDrawable&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Meus projetos: &lt;a href="https://github.com/johnnymeneses"&gt;GitHub - Johnny Meneses&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Are you Addicted to the Internet?</title>
      <dc:creator>Johnny Meneses</dc:creator>
      <pubDate>Sat, 21 Aug 2021 15:53:56 +0000</pubDate>
      <link>https://dev.to/johnnymeneses/are-you-addicted-to-the-internet-25bb</link>
      <guid>https://dev.to/johnnymeneses/are-you-addicted-to-the-internet-25bb</guid>
      <description>&lt;p&gt;There are studies that indicate that if you stay online more than 3 hours a day, you can be considered an internet addict. But who is not connected all the time in this period of isolation caused by the pandemic?&lt;/p&gt;

&lt;p&gt;Leading access are messaging apps and social media. The internet is so ingrained in our lives that we accept it as normal behavior to leave the phone under our pillow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LirwyGbR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k7hwlkri4bpyqdli5m3e.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LirwyGbR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k7hwlkri4bpyqdli5m3e.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Internet: This wonder of the mid-twentieth century that integrated the world and changed forever the way we communicate. &lt;/p&gt;

&lt;p&gt;Is possible, for example, studying at a university in the United States without even worrying about a Visa, tickets flights or a place to stay.  All in the comfort of your home. &lt;/p&gt;

&lt;p&gt;We are more efficient: We no longer need a big and unnecessarily heavy street guide. Not even books need to take up space in our bags. And what about the space that we no longer need to occupy in our memory, such as the contact book, totally retired. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But when does this facility become a problem?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Internet can gives us pleasure, facilities and often an escape from many situations. This generates dopamine for the brain, which associates it as a good thing and constantly demands more doses. Some people prefer personal relationships online over offline.&lt;/p&gt;

&lt;p&gt;When excessive use disrupts the user's life, as occurs with other types of addictions and compulsions, such as drugs and drinks, an alert must be turned on. There are cases in which the user avoids these family members and starts a progressive isolation.&lt;/p&gt;

&lt;p&gt;There are books about the effect social networks has in our lives.  A small part of this subject that we can mention is social approval mechanism called LIKE.  The amount of likes you get, either in a photo or in a message, makes you believe that you are accepted and are in a certain group, something that is inherent to the human being to seek.  &lt;/p&gt;

&lt;p&gt;On the other hand, not receive this kind of approval and using this as a happiness thermometer can lead to a dangerous depression. &lt;/p&gt;

&lt;p&gt;A very interesting book about this is "Ten Arguments for Deleting Your Social Media Accounts Right Now" by Jaron Lanier, considered a founder of the field of virtual reality.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--30ZYUpc7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pv6w5ewlreeqzp67q0lo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--30ZYUpc7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pv6w5ewlreeqzp67q0lo.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Like any addiction, the lack of internet access can generate the same symptoms of people addicted to alcohol or cigarettes as agitation, irritability and anxiety, and may even become aggressive. &lt;/p&gt;

&lt;p&gt;If you spend a lot of time connected, and feel the same symptoms as above when you can't connect or even avoid places where a connection won't be possible, you should turn on an alert. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kCsW8w21--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jy3uoah5mvg318jmt61q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kCsW8w21--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jy3uoah5mvg318jmt61q.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's important to say that the internet is not the villain. At this point, it differs from other drugs.  Perhaps we need to learn to deal with it by clearly defining who uses and who is being used.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Is the Generation Gap today bigger than ever?</title>
      <dc:creator>Johnny Meneses</dc:creator>
      <pubDate>Fri, 13 Aug 2021 12:07:14 +0000</pubDate>
      <link>https://dev.to/johnnymeneses/is-the-generation-gap-today-bigger-than-ever-3pea</link>
      <guid>https://dev.to/johnnymeneses/is-the-generation-gap-today-bigger-than-ever-3pea</guid>
      <description>&lt;p&gt;We can define Generation Gap as a lack of understanding between people of distinct generations. These differences can be about work ethics, moral values, respect, political views, attitudes toward different group and religious beliefs. &lt;/p&gt;

&lt;p&gt;In this generation, technology is leading the way to and being responsible for a gap never ever seen.&lt;/p&gt;

&lt;p&gt;Education has gained heaps from technology.  It is much more affordable: we can study in our own time, in a queue bank.  &lt;/p&gt;

&lt;p&gt;Even if you can't afford a course, the internet offers tons of free training.  With the same internet, you can also meet people for each part of the word to learn a new language.  It was impossible 20 years ago. &lt;/p&gt;

&lt;p&gt;We are saving more lives. Now we can do a heart surgery with more precision. We have other ways to identity a cancer before it become irreversible. The treatment for several diseases is becoming cheaper fast. Technology allows to see the world and discovery the universe. &lt;/p&gt;

&lt;p&gt;We can see a black hole from an astronomy laboratory and say with sure if a planet has or no water. And why this concern about water? Because is the premise that we know about life. &lt;br&gt;
The news is faster. If something happened in one side of the world, the other side knows in seconds. It was totally unthinking decades ago.  &lt;/p&gt;

&lt;p&gt;The way of how to work has changed. We can be an employee working for someone abroad. This gave us freedom to live wherever we want and still work for the country we were born &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O9l_7l8t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xj8i173odcrhfrc4m2be.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O9l_7l8t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xj8i173odcrhfrc4m2be.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To top all of that, we put this entire technology and global communication in a small object. The smartphone. &lt;br&gt;
We can do a lot of things starting by taking off the smartphone from pocket and open a app. Need to call a taxi? It has an app. Ask for food? It has also an app. Even find a soulmate or something not so engaged has a specifically app. We became closer with everyone in the world with social networks. On the other hand, the abuse use social networks is not so good for mental health. Needs to be used carefully. &lt;/p&gt;

&lt;p&gt;Ours cars are now electric. Zero emission of polluting gases. With robots we can build more, better, and faster. But the gap between how jobs disappear with these robots and how fast we can train the people who lose their jobs in new function is growing every day. &lt;/p&gt;

&lt;p&gt;Other things like taste in music, way to wear or how to speak became different with time, but the effect of technology changed the world forever, so far. &lt;/p&gt;

&lt;p&gt;This effect is exponential and what we built in 50 years, if compared with the last 100 years is incredibly. What could we expect for the next gap with all this technology available?&lt;/p&gt;

&lt;p&gt;We can expect more. Maybe find life in another planet or extend our life with scientific research. We can expect a cleaner, gas-free and more connected world than ever before. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Sobre Sensores (Ou Como enganar o Dinossauro do Google)</title>
      <dc:creator>Johnny Meneses</dc:creator>
      <pubDate>Sun, 11 Jul 2021 00:05:06 +0000</pubDate>
      <link>https://dev.to/johnnymeneses/sobre-sensores-ou-como-enganar-o-dinossauro-do-google-5aai</link>
      <guid>https://dev.to/johnnymeneses/sobre-sensores-ou-como-enganar-o-dinossauro-do-google-5aai</guid>
      <description>&lt;p&gt;Os sensores são dispositivos eletrônicos que tem basicamente duas funções: detectar um estímulo e responder a esse estímulo.  Há vários tipos de sensores que detectam as mais variadas quantidades de estímulos: sensores de movimento, cheiro, luz, fumaça, e até sensor de cor. A grande sacada está justamente no que você pode fazer com a resposta que o sensor envia. As possibilidades são infinitas!&lt;/p&gt;

&lt;p&gt;Sabe a luz que acende quando alguém bate palmas? Sensor de Som. Por baixo dos panos é um programa que fica sempre alerta, esperando detectar o som em um nível pré determinado via programação. Se este nível for atingido, o sensor retorna OK para o programa que toma a ação de, neste caso, ligar uma luz.&lt;/p&gt;

&lt;p&gt;Tem um sensor muito bacana que é o LDR, sensor de luminosidade.&lt;br&gt;
É um componente cuja resistência varia de acordo com a intensidade da luz. Quanto mais luz incidir sobre ele, menor a resistência. Pode ser usado em alarmes, luzes de emergência, etc.&lt;/p&gt;

&lt;p&gt;Pois bem. Hoje vamos usar esse sensor para enganar o Dinossauro do Google. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UsZoVk6C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0rfkgl9xzljrqn0spnst.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UsZoVk6C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0rfkgl9xzljrqn0spnst.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Um parênteses. O dinossauro do Google (T-Rex Game) é um jogo integrado ao navegador Google Chrome. O jogo foi criado por Sebastien Gabriel em 2014 e pode ser facilmente acessado pressionando a barra de espaço quando estiver offline no Chrome. &lt;/p&gt;

&lt;p&gt;A ideia aqui é fazer justamente como no vídeo: fazer o nosso dinossauro pular sozinho todos os obstáculos. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=KoRzZxjjHNs"&gt; &lt;br&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HO6KEU59--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i9.ytimg.com/vi/KoRzZxjjHNs/mq3.jpg%3Fsqp%3DCNDfqIcG%26rs%3DAOn4CLA2CTI4EbDtOnQ-RnzUap8GtZ6nHQ"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vamos precisar de:&lt;/p&gt;

&lt;p&gt;1 Arduino Uno R3 (ou similar)&lt;br&gt;
1 Sensor de Luminosidade LDR&lt;br&gt;
1 Resistor de 10 kΩ&lt;br&gt;
1  Micro Servo 9g &lt;/p&gt;

&lt;p&gt;O código é extremamente simples:&lt;/p&gt;

&lt;p&gt;Incluindo as bibliotecas Arduino e do Micro Servo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Arduino&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;h&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Servo&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;h&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instalando o Micro Servo e o Sensor LDR:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Servo&lt;/span&gt; &lt;span class="n"&gt;servo_2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setup&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;A0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;INPUT&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Sensor LDR&lt;/span&gt;
  &lt;span class="nc"&gt;Serial&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;begin&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9600&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;servo_2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;attach&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Micro Servo&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É neste método que a mágica acontece: O Sensor LDR ligado na porta A0 irá ler a quantidade de luz a que ele está exposto. Se esse número for abaixo de 300 (ou seja, se um obstáculo passou pelo sensor), o Micro Servo é acionado e aperta a barra de espaço:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;acionaServo&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;Serial&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;analogRead&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;A0&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;analogRead&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;A0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;servo_2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
  &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;servo_2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;acionaServo&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O Sketch do projeto ficou assim: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ot2YIGI6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gi79482awjnxrzefrtfh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ot2YIGI6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gi79482awjnxrzefrtfh.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A montagem não tem segredos: basta posicionar o sensor diretamente no Monitor. Eu coloquei bem a esquerda. O Micro servo eu colei com uma fita 3M ao lado da barra de espaço. Agora é só acertar a distância em que o Micro Servo é acionado.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KZFiBufg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aall4ql705lpsqwfz99n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KZFiBufg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aall4ql705lpsqwfz99n.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NNnY01Wm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/edocklmuuxdqbn7wa53g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NNnY01Wm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/edocklmuuxdqbn7wa53g.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quem já brincou com este jogo, sabe que também tem obstáculos onde é preciso abaixar, ao invés de pular. Eai, o que fazer? &lt;/p&gt;

&lt;p&gt;Implemente, modifique! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.tinkercad.com/things/aSOvYvSSUyk-dinossaurogoogle"&gt;Sketch do projeto&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/johnnymeneses/iot-projetos/tree/main/googleDinosaur"&gt;Código fonte disponível no meu GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se quiser saber mais sobre as possibilidades do sensor LDR, aqui está o &lt;a href="https://pdf1.alldatasheet.com/datasheet-pdf/view/1131892/ETC2/GL5516.html"&gt;Datasheet&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;E se ficou alguma dúvida, manda seu comentário.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Farol de LED's - Arduino</title>
      <dc:creator>Johnny Meneses</dc:creator>
      <pubDate>Sun, 20 Dec 2020 20:53:29 +0000</pubDate>
      <link>https://dev.to/johnnymeneses/arduino-farol-de-led-s-2h37</link>
      <guid>https://dev.to/johnnymeneses/arduino-farol-de-led-s-2h37</guid>
      <description>&lt;p&gt;Uma das coisas mais legais de mexer com Arduino é ver seu código “ganhando vida”. A primeira LED que acende é uma vitória.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KKJXasT5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/k2eq7vgp39rcfl7r32q1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KKJXasT5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/k2eq7vgp39rcfl7r32q1.gif" alt="LED Vermelho" width="700" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Um bom exemplo pra começar a brincar com luzes no Arduino é justamente fazer um semáforo. A ideia é simples, três cores: vermelho, amarelo e verde sendo acesas em sequência. Ainda é possível adicionar um modo de atenção com um amarelo piscante.&lt;/p&gt;

&lt;p&gt;O projeto abaixo é um pouco maior, em termos de componentes e linhas de código, mas o princípio é o mesmo. Eu fiz um cruzamento onde o farol de uma das ruas só acende se o farol da outra estiver fechado&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lista de Componentes:&lt;/strong&gt;&lt;br&gt;
1 – Arduino Uno R3 (ou similar)&lt;br&gt;
4 – LED’s na cor vermelha&lt;br&gt;
4 – LED’s na cor amarela&lt;br&gt;
4 – LEd’s na cor Verde&lt;br&gt;
12 – Resistors de 220 Ω&lt;/p&gt;

&lt;p&gt;Pra ficar mais fácil, eu defini um nome para cada LED e sua respectiva porta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="n"&gt;red1&lt;/span&gt;    &lt;span class="mi"&gt;13&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="n"&gt;yel1&lt;/span&gt;    &lt;span class="mi"&gt;12&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="n"&gt;green1&lt;/span&gt;  &lt;span class="mi"&gt;11&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="n"&gt;red2&lt;/span&gt;    &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="n"&gt;yel2&lt;/span&gt;    &lt;span class="mi"&gt;9&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="n"&gt;green2&lt;/span&gt;  &lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="n"&gt;red3&lt;/span&gt;    &lt;span class="mi"&gt;7&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="n"&gt;yel3&lt;/span&gt;    &lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="n"&gt;green3&lt;/span&gt;  &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="n"&gt;red4&lt;/span&gt;    &lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="n"&gt;yel4&lt;/span&gt;    &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="n"&gt;green4&lt;/span&gt;  &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Assim, na hora de fazer a instalação, ou seja, informar ao Arduino qual porta será usada e com qual finalidade, ficará mais fácil:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;instalaLed&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;   
  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;red1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;OUTPUT&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;yel1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;OUTPUT&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;green1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;OUTPUT&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;red2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;OUTPUT&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;yel2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;OUTPUT&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;green2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;OUTPUT&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;red3&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;OUTPUT&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;yel3&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;OUTPUT&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;green3&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;OUTPUT&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;red4&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;OUTPUT&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;yel4&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;OUTPUT&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;green4&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;OUTPUT&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eu preferi criar um método para instalação e informar este método dentro do void setup(). Acredito que fica mais organizado.&lt;/p&gt;

&lt;p&gt;O esquema do projeto ficou assim:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YmGozGvl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lh8akf6zda0evjv8aj90.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YmGozGvl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lh8akf6zda0evjv8aj90.png" alt="Alt Text" width="880" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eu criei 6 métodos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;rua1e3Aberta&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste método o tráfego entre as ruas 1 e 3 está livres, com suas respectivas LED’s verdes ligadas. Nas ruas 2 e 4, o farol está fechado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;rua1e3Fechando&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste método, começa a transição de sinalização. O vermelho das ruas 2 e 4 permanece ligado, entretanto, neste momento os faróis verdes são desligados e os faróis amarelos das ruas 1 e 3 são acesos, indicando que o ciclo está próximo de fechar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;tudoFechado&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eu poderia simplesmente migrar do vermelho para o verde, e liberar o tráfego na outra rua, mas achei que ficaria abrupto. Fiz esse método para manter os quatro faróis vermelhos ligados por alguns segundos, antes de chamar a próxima sequência.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;rua2e4Aberta&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="n"&gt;rua2e4Fechando&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;São basicamente os mesmos métodos das ruas 1 e 3, com o mesmo comportamento, só que agora referenciando o outro lado do cruzamento.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;tudoDesligado&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Achei que seria interessante um método que eu poderia desligar todas as luzes, antes de chamar o Amarelo Piscante. Este método serve pra isso.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;amareloPiscante&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este é o sinal de alerta para tirar o pé do acelerador e passar com calma e atenção no cruzamento. Neste método, as luzes amarelas se alternam entre ligado e ligado em um looping que será executado 10 vezes.&lt;/p&gt;

&lt;p&gt;Para ver o projeto funcionando, acesse o link no meu &lt;a href="https://www.tinkercad.com/embed/ccKShtKuRjy"&gt;Tinkercad&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O código fonte completo está no meu &lt;a href="https://github.com/johnnymeneses/iot-projetos/tree/main/Cruzamento_Semaforo"&gt;GitHub:&lt;/a&gt;&lt;/p&gt;

</description>
      <category>arduino</category>
    </item>
  </channel>
</rss>
