<?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: Ewerson Benigno</title>
    <description>The latest articles on DEV Community by Ewerson Benigno (@ewbenigno).</description>
    <link>https://dev.to/ewbenigno</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3955387%2Fbd3e747b-c31e-4ceb-aa4e-57d68e19c5d2.jpg</url>
      <title>DEV Community: Ewerson Benigno</title>
      <link>https://dev.to/ewbenigno</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ewbenigno"/>
    <language>en</language>
    <item>
      <title>Pipes e Redirecionamento no Linux: o que eu aprendi estudando o terminal no celular</title>
      <dc:creator>Ewerson Benigno</dc:creator>
      <pubDate>Fri, 26 Jun 2026 23:37:57 +0000</pubDate>
      <link>https://dev.to/ewbenigno/pipes-e-redirecionamento-no-linux-o-que-eu-aprendi-estudando-o-terminal-no-celular-19oo</link>
      <guid>https://dev.to/ewbenigno/pipes-e-redirecionamento-no-linux-o-que-eu-aprendi-estudando-o-terminal-no-celular-19oo</guid>
      <description>&lt;p&gt;Eu estava no Termux, um emulador de terminal para Android, rodando uns comandos básicos de estudo, quando digitei algo simples:&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="nb"&gt;ls&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; arquivos.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Não aconteceu nada. O terminal ficou em silêncio.&lt;br&gt;
Meu primeiro instinto foi achar que o comando tinha falhado. Mas quando rodei cat arquivos.txt, o conteúdo estava lá, o ls tinha funcionado, só que a saída não foi para a tela. Foi para dentro do arquivo.&lt;br&gt;
Esse momento me fez querer entender o que estava acontecendo por baixo. Este artigo é o resultado disso.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Os três canais de todo comando Linux&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Antes de falar em pipes e redirecionamento, preciso falar sobre como o Linux enxerga a comunicação de um programa.&lt;br&gt;
Todo processo no Linux tem três canais abertos por padrão:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Canal&lt;/th&gt;
&lt;th&gt;Número&lt;/th&gt;
&lt;th&gt;O que é&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;stdin&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Entrada de dados&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;stdout&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Saída normal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;stderr&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Saída de erros&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Por padrão, stdout e stderr aparecem na tela, e stdin vem do teclado. Mas você pode mudar isso e é aí que a mágica acontece.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Redirecionamento de saída com &amp;gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O operador &amp;gt; redireciona o stdout de um comando para um arquivo.&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="nb"&gt;ls&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; arquivos.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O que acontece aqui:&lt;br&gt;
• ls gera a listagem de arquivos (stdout)&lt;br&gt;
• &amp;gt; intercepta essa saída antes de chegar na tela&lt;br&gt;
• O conteúdo vai para dentro de arquivos.txt&lt;br&gt;
• Se o arquivo não existir, ele é criado&lt;br&gt;
• Se já existir, o conteúdo anterior é sobrescrito&lt;br&gt;
Para adicionar ao invés de sobrescrever, use &amp;gt;&amp;gt;:&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="nb"&gt;ls&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; arquivos.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Redirecionando erros com 2&amp;gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O canal de erros é separado do canal de saída. Para capturá-lo, você usa 2&amp;gt;.&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="nb"&gt;cat &lt;/span&gt;arquivo_que_nao_existe.txt 2&amp;gt; erro.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tente rodar os dois e compare:&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="c"&gt;# Isso imprime o erro na tela&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;arquivo_que_nao_existe.txt

&lt;span class="c"&gt;# Isso salva o erro em um arquivo (nada aparece na tela)&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;arquivo_que_nao_existe.txt 2&amp;gt; erro.txt

&lt;span class="c"&gt;# Confirme que o erro foi salvo&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;erro.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso é útil quando você roda um script longo e quer guardar os erros para analisar depois, sem poluir a saída normal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Juntando stdout e stderr no mesmo arquivo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Às vezes você quer capturar tudo, saída e erro, no mesmo lugar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;comando &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; tudo.txt 2&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O 2&amp;gt;&amp;amp;1 significa: "redirecione o canal 2 (stderr) para onde o canal 1 (stdout) estiver indo."&lt;br&gt;
A ordem importa. Isso aqui não funciona como esperado:&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="c"&gt;# Ordem errada — resultado não é o que você espera&lt;/span&gt;
comando 2&amp;gt;&amp;amp;1 &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; tudo.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nessa ordem, o 2&amp;gt;&amp;amp;1 é avaliado primeiro — quando ainda não há redirecionamento de stdout, então o stderr é vinculado à tela. Depois o &amp;gt; tudo.txt redireciona só o stdout para o arquivo. Resultado: o arquivo recebe apenas o stdout, e o stderr continua aparecendo na tela. O inverso do que você queria.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pipes com |: compondo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O pipe | conecta a saída de um comando à entrada do próximo. É como criar uma linha de montagem.&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="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;".txt"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O que acontece:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ls -l lista todos os arquivos com detalhes&lt;/li&gt;
&lt;li&gt;| passa essa saída como entrada para o grep&lt;/li&gt;
&lt;li&gt;grep ".txt" filtra e mostra só as linhas que contêm .txt
Outro exemplo prático, procurar um processo em execução:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux | &lt;span class="nb"&gt;grep &lt;/span&gt;java
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você pode encadear quantos pipes quiser:&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="nb"&gt;cat &lt;/span&gt;arquivo.txt | &lt;span class="nb"&gt;sort&lt;/span&gt; | &lt;span class="nb"&gt;uniq&lt;/span&gt; | &lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso lê um arquivo, ordena as linhas, remove duplicatas e conta quantas restaram, tudo em um único comando.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;tee: saída na tela e no arquivo ao mesmo tempo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O &amp;gt; escolhe entre tela ou arquivo. O tee faz os dois:&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="nb"&gt;ls&lt;/span&gt; | &lt;span class="nb"&gt;tee &lt;/span&gt;listagem.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A saída aparece na tela e é salva no arquivo simultaneamente. Útil quando você quer acompanhar o que está acontecendo em tempo real e ainda guardar o resultado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resumo visual&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;comando             → stdout → tela (padrão)
comando &amp;gt; arquivo   → stdout → arquivo
comando &amp;gt;&amp;gt; arquivo  → stdout → arquivo (acumula)
comando 2&amp;gt; erros    → stderr → arquivo
comando 2&amp;gt;&amp;amp;1        → stderr → mesmo lugar que stdout
cmd1 | cmd2         → stdout do cmd1 → stdin do cmd2
cmd | tee arquivo   → stdout → tela e arquivo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Por que isso importa&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Esses conceitos parecem simples, mas são a base de como scripts shell funcionam, como logs são gerados, como pipelines de dados são construídos, e como você compõe ferramentas pequenas para resolver problemas grandes.&lt;br&gt;
No Linux, cada ferramenta faz uma coisa bem feita. Pipes e redirecionamento são o que permite combiná-las.&lt;br&gt;
Comecei a entender isso rodando um ls no Termux às 19h num sábado. Às vezes o aprendizado começa em lugares assim.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>cli</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Como pensar em UX mesmo sendo desenvolvedor front-end iniciante</title>
      <dc:creator>Ewerson Benigno</dc:creator>
      <pubDate>Sat, 30 May 2026 23:58:17 +0000</pubDate>
      <link>https://dev.to/ewbenigno/como-pensar-em-ux-mesmo-sendo-desenvolvedor-front-end-iniciante-5fpn</link>
      <guid>https://dev.to/ewbenigno/como-pensar-em-ux-mesmo-sendo-desenvolvedor-front-end-iniciante-5fpn</guid>
      <description>&lt;p&gt;Quando iniciei minha primeira Landing page não sabia nada sobre UX.&lt;br&gt;
Sabia estruturar um HTML, sabia usar o CSS e eu tinha um objetivo claro: desenvolver uma Landing page para uma amiga maquiadora. Era meu primeiro projeto, tentei "caprichar" ao máximo, foco nos detalhes. Então percebi que estava fazendo mais do que apenas criar um código, analisava o tempo todo sobre como seria a interação dos clientes dela com a página e como isso se converteria em lucro para o seu negócio.&lt;br&gt;
Somente depois de estudar mais a fundo sobre front-end que entendi como esse "olhar aos detalhes" se chamava: UX - User Experience, a Experiência do Usuário.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O que é UX&lt;br&gt;
&lt;a href="https://media2.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%2Fi19vcqyhv87ahndfruvx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fi19vcqyhv87ahndfruvx.jpg" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Na prática, UX é uma pergunta que você faz antes de escrever qualquer linha de código: “Quem vai usar isso e o que essa pessoa precisa encontrar?”&lt;br&gt;
É isso, parece algo básico, mas muda completamente a forma como você constrói o seu projeto. Um desenvolvedor que não pensa em UX olha apenas a estética, ele fica naquilo que é atrativo aos olhos do usuário. Um desenvolvedor que pensa em UX desenvolve  pensando na necessidade do cliente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decisões de UX que você toma sem perceber&lt;/strong&gt;&lt;br&gt;
Muitas pessoas não percebem mas já praticam UX sem nem perceber.&lt;br&gt;
Toda vez que você decide onde colocar um botão, um texto, um link ou como quer organizar as seções da sua página, você está tomando uma decisão de UX.&lt;br&gt;
No meu projeto da landing page, tomei várias dessas decisões intuitivamente:&lt;br&gt;
Coloquei o WhatsApp no footer com link direto. O visitante que chega até o final da página já leu tudo e quer entrar em contato, facilitar esse clique é UX.&lt;br&gt;
Posicionei os depoimentos antes do footer. Não foi por acaso, depoimentos constroem confiança. Faz sentido mostrá-los antes de pedir que o visitante entre em contato.&lt;br&gt;
Adicionei um botão de call-to-action no Hero. A primeira seção da página precisa deixar claro o que o visitante deve fazer. Um botão “Saiba mais” ou “Entre em contato” elimina a dúvida.&lt;br&gt;
Todas essas ações têm um princípio em comum, elas pensam no usuário antes de pensar no código.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A diferença entre UI e UX&lt;/strong&gt;&lt;br&gt;
Antes eu confundia bastante os termos, agora entendo claramente.&lt;br&gt;
UI é o que o usuário vê. É o botão rosa com bordas arredondadas, é a fonte elegante, é a paleta de cores coerente. UI é sobre estética.&lt;br&gt;
UX é o que o usuário sente e faz. É o botão estar no lugar certo, é o texto do botão ser claro o suficiente para o usuário saber o que vai ler ao clicar, é a página carregar rápido o suficiente para ele não desistir. UX é sobre comportamento.&lt;br&gt;
Você pode ter um site com UI perfeita e UX terrível. Um site lindo onde ninguém encontra o que precisa é um site com problema de UX.&lt;br&gt;
O contrário também existe: sites simples visualmente, mas com navegação tão intuitiva que o usuário encontra tudo em segundos. Boa UX, UI modesta.&lt;br&gt;
O ideal, claro, é ter os dois.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como aplicar UX sem ser especialista&lt;/strong&gt;&lt;br&gt;
Você não precisa de certificação para começar a pensar em UX. Você pode se fazer algumas perguntas simples na hora de desenvolver:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;“Em 3 segundos, o usuário entende o que esse site oferece?”&lt;br&gt;
Se a resposta for não, o Hero da sua página precisa ser refeito. O visitante decide em poucos segundos se vai ficar ou sair.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;“Qual é a ação que quero que o usuário tome?”&lt;br&gt;
Entrar em contato, comprar, ou se inscrever, essa ação precisa estar visível, clara e fácil de executar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;“Como isso fica no celular?”&lt;br&gt;
A maioria dos acessos hoje são feitos no mobile. Se você só testa no computador, está ignorando boa parte dos seus usuários.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;“Estou facilitando ou complicando?”&lt;br&gt;
Cada clique a mais, cada informação desnecessária, cada campo de formulário que não precisa estar lá, tudo isso é fricção. UX é sobre remover fricção.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt; &lt;br&gt;
Se você está começando no front-end e acha que UX  é assunto para depois, é melhor repensar isso.&lt;br&gt;
Você não precisa dominar ferramentas complexas ou ter anos de experiência. Precisa desenvolver o hábito de perguntar: “quem vai usar isso, e o que essa pessoa precisa?”&lt;br&gt;
Essa pergunta, feita com consistência, vai separar o código que você escreve do código que outros escrevem.&lt;br&gt;
E o melhor: você provavelmente já está praticando UX sem perceber. Agora é só dar nome ao que você faz.&lt;/p&gt;

</description>
      <category>ux</category>
      <category>frontend</category>
      <category>beginners</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
