<?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: Allef Gomes</title>
    <description>The latest articles on DEV Community by Allef Gomes (@allefgomes).</description>
    <link>https://dev.to/allefgomes</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%2F338380%2Fc123fcb3-4814-4634-b971-4f25cd10a952.jpg</url>
      <title>DEV Community: Allef Gomes</title>
      <link>https://dev.to/allefgomes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/allefgomes"/>
    <language>en</language>
    <item>
      <title>Adicionando Boostrap 5 em um projeto Phoenix</title>
      <dc:creator>Allef Gomes</dc:creator>
      <pubDate>Mon, 02 Jan 2023 10:58:13 +0000</pubDate>
      <link>https://dev.to/allefgomes/adicionando-boostrap-5-em-um-projeto-phoenix-33hh</link>
      <guid>https://dev.to/allefgomes/adicionando-boostrap-5-em-um-projeto-phoenix-33hh</guid>
      <description>&lt;p&gt;Olá, pessoas!&lt;/p&gt;

&lt;p&gt;Normalmente quando se fala de aplicação phoenix, se fala também de tailwindcss, mas nem todo mundo tem familiaridade com o tailwindcss. Por outro lado, existem muitas aplicações web que usam o bootstrap. Então a ideia desse tutorial é demostrar como aplicar o bootstrap nas suas aplicações phoenix de maneira rápida.&lt;/p&gt;

&lt;p&gt;Para utilizarmos o boostrap, faremos a utilização da lib &lt;a href="https://hexdocs.pm/dart_sass/DartSass.html" rel="noopener noreferrer"&gt;dart_sass&lt;/a&gt; que é um instalador e "executor" para &lt;a href="https://sass-lang.com/dart-sass" rel="noopener noreferrer"&gt;sass&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Então vamos lá... No seu arquivo &lt;code&gt;mix.exs&lt;/code&gt; na função privada &lt;code&gt;deps&lt;/code&gt;, adicione a seguinte linha:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:dart_sass&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"~&amp;gt; 0.5.1"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No arquivo &lt;code&gt;config/config.exs&lt;/code&gt; adicione o código para adicionar as configurações do dart_sass:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="ss"&gt;:dart_sass&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;version:&lt;/span&gt; &lt;span class="s2"&gt;"1.43.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;default:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="ss"&gt;args:&lt;/span&gt; &lt;span class="sx"&gt;~w(css/app.scss ../priv/static/assets/app.css)&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="ss"&gt;cd:&lt;/span&gt; &lt;span class="no"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"../assets"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;__DIR__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Na parte de watchers no arquivo &lt;code&gt;config/dev.exs&lt;/code&gt; iremos adicionar o seguinte código para que nossa aplicação phoenix possa assistir os arquivos sass:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="ss"&gt;sass:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="no"&gt;DartSass&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="ss"&gt;:install_and_run&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:default&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sx"&gt;~w(--embed-source-map --source-map-urls=absolute --watch)&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Também no arquivo &lt;code&gt;mix.exs&lt;/code&gt; iremos alterar os aliases. Na parte chamada &lt;code&gt;assets.deploy&lt;/code&gt; iremos adicionar o código &lt;code&gt;"sass default --no-source-map --style=compressed"&lt;/code&gt; onde ficará semelhante ao código abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="s2"&gt;"assets.deploy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"esbuild default --minify"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"sass default --no-source-map --style=compressed"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"phx.digest"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para finalizar, faremos mais três alterações na pasta &lt;code&gt;assets&lt;/code&gt;. A primeira é rodar o comando &lt;code&gt;npm install boostrap --prefix assets&lt;/code&gt; pelo terminal na pasta do seu projeto e após isso, renomear o arquivo &lt;code&gt;assets/css/app.css&lt;/code&gt; para &lt;code&gt;assets/css/app.scss&lt;/code&gt; e apagar todo o conteúdo do arquivo e adicionar o código&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"../node_modules/bootstrap/scss/bootstrap"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por fim, iremos remover o código &lt;code&gt;import "../css/app.css"&lt;/code&gt; do arquivo &lt;code&gt;assets/js/app.js&lt;/code&gt; e adicionar o&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="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bootstrap&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora você pode subir a aplicação e ver que toda a sua tela inicial foi alterada.&lt;/p&gt;

</description>
      <category>career</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>A linguagem Rust</title>
      <dc:creator>Allef Gomes</dc:creator>
      <pubDate>Wed, 14 Dec 2022 20:18:09 +0000</pubDate>
      <link>https://dev.to/allefgomes/a-linguagem-rust-273l</link>
      <guid>https://dev.to/allefgomes/a-linguagem-rust-273l</guid>
      <description>&lt;p&gt;Olá!&lt;/p&gt;

&lt;p&gt;Tenho aprendido &lt;code&gt;Rust&lt;/code&gt; para poder trazer performance para alguns problemas que tenho enfrentado no trabalho. Então, este é o início de algumas anotações que irei fazer para entender e utilizar rust aqui na empresa.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rust
&lt;/h3&gt;

&lt;p&gt;A linguagem rust tem foco em eficiência e confiabilidade.&lt;br&gt;
Rust traz um desempenho extremamente rápido, gerencia memória eficientemente, seu sistema de tipos e modelo de &lt;em&gt;ownership&lt;/em&gt; garantem segurança de memória e de concorrência. Além disso, possui uma ótima documentação, compilador amigável com mensagens de erros úteis e ferramental de primeira qualidade.&lt;/p&gt;

&lt;p&gt;Rust traz uma forma interessante de apresentar seus fundamentos que é por meio do &lt;a href="https://doc.rust-lang.org/book/"&gt;"o livro"&lt;/a&gt; que apresenta uma visão geral da linguagem a partir de princípios fundamentais.&lt;/p&gt;
&lt;h3&gt;
  
  
  Instalação
&lt;/h3&gt;

&lt;p&gt;A instalação do Rust é pelo rustup. No site oficial do &lt;a href="https://rustup.rs/"&gt;&lt;code&gt;rustup&lt;/code&gt;&lt;/a&gt; você pode ver como instalar no seu sistema operacional. No linux foi bem simples. Bastou rodar o comando &lt;code&gt;curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh&lt;/code&gt; no terminal.&lt;/p&gt;

&lt;p&gt;Após isso, pode verificar a instalação rodando o comando &lt;code&gt;rustc --version&lt;/code&gt; que no meu caso, retornou &lt;code&gt;rustc 1.65.0 (897e37553 2022-11-02)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Além do rustc, também houve a instalação do &lt;a href="https://doc.rust-lang.org/cargo/"&gt;&lt;code&gt;cargo&lt;/code&gt;&lt;/a&gt; que é o gerenciador de pacotes do Rust. Além de ser o gerenciador de dependências, cargo compila os seus pacotes,  gera pacotes distribuídos e também realiza o upload para o &lt;a href="//crates.io"&gt;&lt;code&gt;crates&lt;/code&gt;&lt;/a&gt;, onde ficam as informações de pacotes para aplicações Rust.&lt;/p&gt;
&lt;h3&gt;
  
  
  Hello World
&lt;/h3&gt;

&lt;p&gt;Presumindo que você esteja em um sistema operacional linux como por exemplo, em um Ubuntu, abra o terminal e crie uma pasta chamada &lt;code&gt;hello_world_rust&lt;/code&gt; e entre nela. Os comandos para isso são:&lt;br&gt;
&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;mkdir &lt;/span&gt;hello_world_rust
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;hello_world_rust
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para a edição dos códigos, aconselho você utilizar o vscode. Então, abra o vscode na pasta do projeto. Ou seja, se você tiver entrado na pasta &lt;code&gt;hello_world_rust&lt;/code&gt;, basta digitar no terminal &lt;code&gt;code .&lt;/code&gt; e o vscode será aberto na pasta atual.&lt;/p&gt;

&lt;p&gt;Crie um arquivo chamado &lt;code&gt;main.rs&lt;/code&gt; e adicione a função main, pois ela é sempre o primeiro código que será executádo em um programa Rust. Deixe seu &lt;code&gt;main.rs&lt;/code&gt; igual ao código abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, world!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para poder reproduzir o código, utilize os comandos:&lt;br&gt;
&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;rustc main.rs
&lt;span class="nv"&gt;$ &lt;/span&gt;./main
Hello, world!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O comando &lt;code&gt;rustc main.rs&lt;/code&gt; compilou o código contigo no arquivo &lt;code&gt;main.rs&lt;/code&gt; e gerou um executável chamado &lt;code&gt;main&lt;/code&gt;.&lt;br&gt;
Com o comando &lt;code&gt;./main&lt;/code&gt; você irá executar o programa compilado e ele irá retornar o "Hello, world!".&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Por hoje é isso. Entendemos o que é Rust, aprendemos a instalar e criamos nosso primeiro programa. Em breve venho com mais!&lt;/p&gt;

&lt;p&gt;Deus abençoe!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>rust</category>
      <category>functional</category>
    </item>
    <item>
      <title>Tipos de Dados em Elixir</title>
      <dc:creator>Allef Gomes</dc:creator>
      <pubDate>Tue, 10 May 2022 15:15:11 +0000</pubDate>
      <link>https://dev.to/allefgomes/tipos-basicos-em-elixir-n6g</link>
      <guid>https://dev.to/allefgomes/tipos-basicos-em-elixir-n6g</guid>
      <description>&lt;p&gt;Nesse artigo, iremos entender sobre tipos básicos em elixir.&lt;br&gt;
Não diferente de outras linguagens, temos alguns tipos de dados que já conhecemos, como: Inteiro (Integer), Ponto Flutuante (Float), Booleano (Boolean) e as Strings. Também existe um tipo chamado Átomo (Atom) que iremos entender sobre ele mais a frente.&lt;/p&gt;

&lt;p&gt;Dado essas informações, vamos entendê-los:&lt;/p&gt;
&lt;h2&gt;
  
  
  Inteiro - Integers
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Os inteiros são qualquer número, positivo ou negativo que não representam parte decimal. No elixir, temos também suporte aos números binários, octal e hexadecimal.&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt; &lt;span class="c1"&gt;# Exemplo de número inteiro&lt;/span&gt;
&lt;span class="mi"&gt;255&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mb"&gt;0b0110&lt;/span&gt; &lt;span class="c1"&gt;# Exemplo de número octal&lt;/span&gt;
&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mh"&gt;0x1F&lt;/span&gt; &lt;span class="c1"&gt;# Exemplo de número hexadecimal&lt;/span&gt;
&lt;span class="mi"&gt;31&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Ponto Flutuante - Floats
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Em Elixir, os números de ponto flutuante requerem um decimal depois de pelo menos um dígito; estes possuem uma precisão de 64 bits e suportam &lt;code&gt;e&lt;/code&gt; para números exponenciais:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;1.4&lt;/span&gt; 
&lt;span class="mf"&gt;1.4&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;5.5&lt;/span&gt;
&lt;span class="mf"&gt;5.5&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;1.0e-10&lt;/span&gt;
&lt;span class="mf"&gt;1.0e-10&lt;/span&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Booleanos - Booleans
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Elixir suporta true e false como booleanos; todo valor comporta-se como verdadeiro com exceção de false e nil (&lt;code&gt;nil&lt;/code&gt; é a representação de nulo). No exemplo a baixo, utilizo o &lt;code&gt;!&lt;/code&gt; para negar a afirmação; se algo retorna o valor &lt;code&gt;true&lt;/code&gt;, quando nego ele retorna &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;
&lt;span class="no"&gt;false&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;!nil&lt;/span&gt; 
&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;!!&lt;/span&gt;&lt;span class="no"&gt;nil&lt;/span&gt;
&lt;span class="no"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Átomo - Atoms
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Um átomo é uma constante cujo o nome é seu valor e é representado por &lt;code&gt;:&lt;/code&gt; seguido de seu nome. Se está familiarizado com Ruby, estes são equivalentes aos símbolos.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="ss"&gt;:development&lt;/span&gt;
&lt;span class="ss"&gt;:development&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="ss"&gt;:elixir&lt;/span&gt;
&lt;span class="ss"&gt;:elixir&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;is_atom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="no"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Strings
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;As strings em Elixir são codificadas em UTF-8 e são representadas com aspas duplas:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"Hello"&lt;/span&gt;
&lt;span class="s2"&gt;"Hello"&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"Olá Fulano"&lt;/span&gt;
&lt;span class="s2"&gt;"Olá Fulano"&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"Olá&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Mundo!"&lt;/span&gt;
&lt;span class="s2"&gt;"Olá&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Mundo!"&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"Olá 
...(4)&amp;gt; Mundo"&lt;/span&gt;
&lt;span class="s2"&gt;"Olá&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Mundo"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Os tipos básicos são esses. Em breve veremos tipos de dados mais complexos quando aprendermos sobre coleções e funções.&lt;/p&gt;

&lt;p&gt;Abraço, pessoal!&lt;br&gt;
Siga-me para ver a continuação dessa série.&lt;/p&gt;

</description>
      <category>elixir</category>
      <category>tutorial</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Introdução ao Elixir</title>
      <dc:creator>Allef Gomes</dc:creator>
      <pubDate>Wed, 04 May 2022 17:25:51 +0000</pubDate>
      <link>https://dev.to/allefgomes/1-introducao-ao-elixir-5g8b</link>
      <guid>https://dev.to/allefgomes/1-introducao-ao-elixir-5g8b</guid>
      <description>&lt;p&gt;Olá, devs!&lt;br&gt;
Decidi fazer esse post para compartilhar uma trilha de conhecimentos em Elixir seguindo o próprio &lt;em&gt;Getting Started&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Caso não tenha o Elixir instalado em sua máquina, você pode dar uma olhada no post que escrevi sobre como &lt;a href="https://dev.to/allefgomes/instalacao-do-erlang-e-elixir-com-asdf-no-ubuntu-5hnn"&gt;instalar o Erlang e o Elixir utilizando o asdf&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Com o Elixir instalado, ganhamos três novos executáveis: &lt;code&gt;iex&lt;/code&gt;, &lt;code&gt;elixir&lt;/code&gt;, &lt;code&gt;elixirc&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  IEX
&lt;/h3&gt;

&lt;p&gt;Agora, abra um terminal e rode o comando &lt;code&gt;iex&lt;/code&gt;. Isto irá abrir um shell interativo que poderá rodar comandos em Elixir.&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%2Fnw3agso2kpu4xklsa2tz.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%2Fnw3agso2kpu4xklsa2tz.png" alt="Exemplo de string em elixir"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  ELIXIR
&lt;/h3&gt;

&lt;p&gt;Também é possível rodar um script com o comando &lt;code&gt;elixir PATH_DO_ARQUIVO&lt;/code&gt;. Nesse caso, a extensão do arquivo deve ser &lt;code&gt;.exs&lt;/code&gt;, o que significa que esse arquivo é um script escrito em Elixir.&lt;/p&gt;

&lt;p&gt;Para este exemplo, criaremos um simples arquivo chamado &lt;code&gt;ola_mundo.exs&lt;/code&gt; e colocaremos o seguinte comando dentro do arquivo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="no"&gt;IO&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;puts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Olá mundo!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após salvar, é só rodar o comando &lt;code&gt;elixir ola_mundo.exs&lt;/code&gt; no terminal e verá um resultado igual ao abaixo:&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%2F9wer63sj6ddt7k2ox6rw.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%2F9wer63sj6ddt7k2ox6rw.png" alt="Rodando um script"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ELIXIRC
&lt;/h3&gt;

&lt;p&gt;Por fim, temos o comando &lt;code&gt;elixirc&lt;/code&gt; que irá compilar um arquivo &lt;code&gt;.ex&lt;/code&gt; ou uma pasta que contenha arquivos &lt;code&gt;.ex&lt;/code&gt; e irá gerar um &lt;code&gt;.beam&lt;/code&gt; para cada módulo criado.&lt;br&gt;
&lt;em&gt;Obs: Iremos entender melhor sobre módulo nos próximos posts.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Primeiro, iremos criar uma pasta chamada &lt;code&gt;primeiro_script&lt;/code&gt; e dentro dela vamos criar o arquivo &lt;code&gt;ola_mundo.ex&lt;/code&gt; que contém o código abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="k"&gt;defmodule&lt;/span&gt; &lt;span class="no"&gt;OlaMundo&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="s2"&gt;"Olá Mundo"&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Também criaremos dentro da pasta &lt;code&gt;primeiro_script&lt;/code&gt; uma pasta chamada &lt;code&gt;core&lt;/code&gt; e dentro desta, criaremos o arquivo &lt;code&gt;sucesso.ex&lt;/code&gt; que terá o seguinte código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="k"&gt;defmodule&lt;/span&gt; &lt;span class="no"&gt;Core&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="no"&gt;Sucesso&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="s2"&gt;"Sucesso!"&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feito isso, teremos uma arquitetura de pastas e arquivos da seguinte forma:&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%2F5vosqvf2on4mwdju3l81.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%2F5vosqvf2on4mwdju3l81.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E dentro da pasta &lt;code&gt;primeiro_script&lt;/code&gt; iremos rodar o comando que serve para compilar a pasta em que você está no terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;elixirc &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se formos olhar agora, teremos arquivos com a extensão &lt;code&gt;.beam&lt;/code&gt; que são os arquivos compilados.&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%2Fban2wdn0f3qw2tjyk4sk.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%2Fban2wdn0f3qw2tjyk4sk.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para finalizarmos, podemos dar um &lt;code&gt;iex&lt;/code&gt; dentro da pasta &lt;code&gt;primeiro_script&lt;/code&gt; e chamar os módulos compilados e suas funções &lt;code&gt;run&lt;/code&gt; para vermos o resultado.&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%2Fv501mp9wy94cqy73j3ak.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%2Fv501mp9wy94cqy73j3ak.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por hoje é isso, pessoal.&lt;br&gt;
Te vejo no próximo post! :)&lt;/p&gt;

</description>
      <category>elixir</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>CloudWatch e OpenSearch na AWS com multiplos grupos de logs.</title>
      <dc:creator>Allef Gomes</dc:creator>
      <pubDate>Thu, 14 Apr 2022 01:52:33 +0000</pubDate>
      <link>https://dev.to/allefgomes/cloudwatch-e-opensearch-na-aws-com-multiplos-grupos-de-logs-4a2i</link>
      <guid>https://dev.to/allefgomes/cloudwatch-e-opensearch-na-aws-com-multiplos-grupos-de-logs-4a2i</guid>
      <description>&lt;p&gt;Exatamente hoje, passei por uns problemas utilizando o CloudWatch da AWS para receber os logs de uma aplicação e uma instância do OpenSearch para visualização dos dados.&lt;/p&gt;

&lt;p&gt;Acontece que foi criado o grupo de logs para ambiente de homologação - &lt;code&gt;staging/serice/api_sucesso&lt;/code&gt; - e um para produção &lt;code&gt;production/service/api_sucesso&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Acontece que os logs do &lt;code&gt;staging&lt;/code&gt; estavam sendo indexados no OpenSearch perfeitamente, porém, quando testamos em ambiente de &lt;code&gt;production&lt;/code&gt; os logs não conseguiam ser indexados no OpenSearch. :/&lt;/p&gt;

&lt;p&gt;Acontece que por padrão o CloudWatch cria apenas uma função do AWS Lambda para cada domínio do OpenSearch e quando o primeiro grupo invoca a função Lambda, a chamada cria um índice e um campo de tipo no seu domínio.&lt;/p&gt;

&lt;p&gt;A solução para isso é alterar a função Lambda na declaração da variável &lt;code&gt;indexName&lt;/code&gt; de:&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="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;indexName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cwl-&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getUTCFullYear&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="c1"&gt;// year&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getUTCMonth&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="c1"&gt;//month&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getUTCDate&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// day&lt;/span&gt;
        &lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.&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;para:&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="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;indexName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cwl-&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;logGroup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// log group name&lt;/span&gt;
  &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getUTCFullYear&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="c1"&gt;// year&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getUTCMonth&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="c1"&gt;// month&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getUTCDate&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// day&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.&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;Obtendo assim, um prefixo do nome do grupo para indexação.&lt;/p&gt;

&lt;p&gt;Para mais detalhes da &lt;a href="https://aws.amazon.com/pt/premiumsupport/knowledge-center/opensearch-troubleshoot-cloudwatch-logs/"&gt;documentação&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>kibana</category>
      <category>elasticsearch</category>
      <category>devops</category>
    </item>
    <item>
      <title>Testes unitários com ExUnit</title>
      <dc:creator>Allef Gomes</dc:creator>
      <pubDate>Thu, 07 Apr 2022 23:12:05 +0000</pubDate>
      <link>https://dev.to/allefgomes/testes-unitarios-com-exunit-9mh</link>
      <guid>https://dev.to/allefgomes/testes-unitarios-com-exunit-9mh</guid>
      <description>&lt;p&gt;Hoje participei de uma talk muito bacana no #elxpro falando sobre testes unitários utilizando o ExUnit.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/5CdHuQ2ZnUk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/allefgomes/testes-unitarios-com-exunit"&gt;https://speakerdeck.com/allefgomes/testes-unitarios-com-exunit&lt;/a&gt;&lt;br&gt;
Código: &lt;a href="https://github.com/allefgomes/elxpro"&gt;https://github.com/allefgomes/elxpro&lt;/a&gt;&lt;/p&gt;

</description>
      <category>elixir</category>
      <category>erlang</category>
      <category>testing</category>
      <category>elxpro</category>
    </item>
    <item>
      <title>Instalação do Erlang e Elixir com ASDF no Ubuntu</title>
      <dc:creator>Allef Gomes</dc:creator>
      <pubDate>Fri, 25 Mar 2022 16:59:25 +0000</pubDate>
      <link>https://dev.to/allefgomes/instalacao-do-erlang-e-elixir-com-asdf-no-ubuntu-5hnn</link>
      <guid>https://dev.to/allefgomes/instalacao-do-erlang-e-elixir-com-asdf-no-ubuntu-5hnn</guid>
      <description>&lt;p&gt;Primeiramente vamos entender o que é o &lt;a href="https://github.com/asdf-vm/asdf"&gt;ASDF&lt;/a&gt;. O ASDF é uma ferramenta CLI que permite o gerenciamento de múltiplas linguagens como elixir, ruby, erlang, python, entre outras...&lt;/p&gt;

&lt;p&gt;Para instalação do ASDF, seguimos as orientações encontradas no site &lt;a href="https://asdf-vm.com/guide/getting-started.html"&gt;https://asdf-vm.com/guide/getting-started.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instalação de dependencias e do Erlang&lt;/strong&gt;&lt;br&gt;
Nesse caso, vamos seguir as configurações referente ao Ubuntu 20.04 LTS. Você pode ver as configurações de diferentes distros no link do &lt;a href="https://github.com/asdf-vm/asdf-erlang#before-asdf-install"&gt;github do asdf-erlang&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt-get &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;install &lt;/span&gt;build-essential autoconf m4 libncurses5-dev libwxgtk3.0-gtk3-dev libwxgtk-webview3.0-gtk3-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev openjdk-11-jdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após a instalação das dependencias, instalaremos o plugin do erlang com o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o plugin instalado, você pode ver todas as versões disponíveis para instalação com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf list all erlang
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste caso, iremos instalar a versão &lt;code&gt;24.3.2&lt;/code&gt; com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;install &lt;/span&gt;erlang 24.3.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o próximo comando, deixaremos a versão &lt;code&gt;24.3.2&lt;/code&gt; do erlang como a default no nosso sistema operacional.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf global erlang 24.3.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Instalação do elixir&lt;/strong&gt;&lt;br&gt;
Da mesma forma, instalaremos primeiro o plugin do elixir conforme o &lt;a href="https://github.com/asdf-vm/asdf-elixir"&gt;github do asdf-elixir&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após instalação do plugin, vamos instalar o elixir. Caso seja necessário olhar compatibilidade das versões do erlang e elixir, você pode conferir em &lt;a href="https://hexdocs.pm/elixir/master/compatibility-and-deprecations.html#compatibility-between-elixir-and-erlang-otp"&gt;https://hexdocs.pm/elixir/master/compatibility-and-deprecations.html#compatibility-between-elixir-and-erlang-otp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nesse caso, instalaremos a versão &lt;code&gt;1.13.3-otp-24&lt;/code&gt; que encontramos utilizando o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf list all elixir
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para instalação utilizamos o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;install &lt;/span&gt;elixir 1.13.3-otp-24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para deixar essa versão global, utilizamos o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf global elixir 1.13.3-otp-24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora você pode ver suas configurações do erlang e elixir com o comando &lt;code&gt;elixir -v&lt;/code&gt;&lt;br&gt;
Vale a pena ressaltar que com o asdf você pode ter um arquivo em cada projeto para utilizar a versão específica daquele projeto. Basta ter um arquivo chamado &lt;code&gt;.tool-versions&lt;/code&gt; na raiz do projeto e o asdf irá utilizar a versão da linguagem especificada nele. Você pode ter mais informações no &lt;a href="https://asdf-vm.com/guide/getting-started.html#local"&gt;link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>elixir</category>
      <category>erlang</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
