<?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: Higor Silva</title>
    <description>The latest articles on DEV Community by Higor Silva (@higorslva).</description>
    <link>https://dev.to/higorslva</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%2F847127%2Ff8a95a97-24c1-4834-beb0-dafd9658167f.png</url>
      <title>DEV Community: Higor Silva</title>
      <link>https://dev.to/higorslva</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/higorslva"/>
    <language>en</language>
    <item>
      <title>Transformei meu notebook antigo em uma alternativa ao Google Drive</title>
      <dc:creator>Higor Silva</dc:creator>
      <pubDate>Mon, 12 Oct 2026 15:19:41 +0000</pubDate>
      <link>https://dev.to/higorslva/transformei-meu-notebook-antigo-em-uma-alternativa-ao-google-drive-3h1g</link>
      <guid>https://dev.to/higorslva/transformei-meu-notebook-antigo-em-uma-alternativa-ao-google-drive-3h1g</guid>
      <description>&lt;p&gt;Opa, prova de vida. Ainda estou vivo.&lt;/p&gt;

&lt;p&gt;Desde quando comecei minha jornada na computação, tive curiosidade de saber como funcionam os serviços por trás dos panos. Desde simples sites web estáticos até SaaS complexos. Queria sempre aprender quais tecnologias usam, como configuraram, a infraestrutura utilizada, etc.&lt;/p&gt;

&lt;p&gt;Também nunca fui muito fã em como confiamos em empresas e big techs para gerenciar nossos dados. Sites como OneDrive, Google Drive e Dropbox são excelentes e até os planos são em conta. Mas é meio estranho e bizarro saber que eles estão escaneando nossas fotos, arquivos e etc para seja lá qual o propósito deles.&lt;/p&gt;

&lt;p&gt;E eu tenho um notebook velho de guerra aqui a muito tempo parado. Uma verdadeira máquina do apocalipse, uma besta esperando ser libertada para ser a próxima devoradora de mundos. Pensei: por que não unir o útil (privacidade) ao agradável? Aí que nasceu meu primeiro self-hosted.&lt;/p&gt;

&lt;p&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5e018uz2501f716y1s16.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5e018uz2501f716y1s16.png" alt="Fastfetch do notebook" width="800" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O primeiro substituto foi o Google Drive. O plano por 100GB custava R$9,99 mensal, o que é uma pechincha. Mas o negócio aqui não foi por dinheiro, foi para manter controle dos meus próprios dados. Então foi meu primeiro substituto.&lt;/p&gt;

&lt;p&gt;Podemos matar facilmente com várias alternativas: pensei em um FreeNAS, embora não tenha experiência alguma em configura-lo. Mas vi também o NextCloud, uma suíte completa que vai além de ser um servidor de arquivos. Conseguimos configurar Arquivos, Emails, Contatos, até um OnlyOffice via rede (semelhante ao Google Docs). Uma suíte workspace plenamente funcional e local.&lt;/p&gt;

&lt;p&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fch0f7ij9sm0z2x1dwl9y.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fch0f7ij9sm0z2x1dwl9y.png" alt="Captura de tela do Nextcloud" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Decidi seguir por esse caminho. O NextCloud pode ser instalado via docker/podman ou bare metal. Decidi pelo podman pois já tinha uma experiência e seria um caminho mais fácil. O sistema base escolhido foi o bom e velho Arch Linux (seria um crime eu escolher qualquer outro).&lt;/p&gt;

&lt;p&gt;Optei por &lt;strong&gt;Podman rootless&lt;/strong&gt; ao invés do Docker tradicional por alguns motivos: não existe um daemon rodando com privilégios root, de forma que os containers rodam com o meu próprio usuário; os containers são gerenciados por units do &lt;code&gt;systemd --user&lt;/code&gt; (com &lt;code&gt;loginctl enable-linger&lt;/code&gt;, sobem automaticamente mesmo sem login interativo); há menos &lt;em&gt;overhead&lt;/em&gt;, ideal para um servidor &lt;em&gt;headless&lt;/em&gt; com apenas 4 GB de RAM; e não há necessidade do daemon Docker, tornando tudo mais enxuto e alinhado com a filosofia do Arch Linux.&lt;/p&gt;

&lt;p&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhg9ge4h8kimgdb5w9w5r.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhg9ge4h8kimgdb5w9w5r.png" alt="Captura de tela do btop" width="800" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O Arch foi instalado para funcionar completamente &lt;em&gt;headless&lt;/em&gt; — tudo será acessível via SSH, sem interface gráfica nem nada físico conectado. A vantagem é que, como ele é um notebook, se o acesso falhar, basta abrir a tela e debugar.&lt;/p&gt;

&lt;p&gt;A máquina do apocalipse contém um Celeron N3060 dual core e 4 GB de RAM DDR3 soldados (sem capacidade de expansão). No início duvidei que ele aguentaria o Nextcloud, mas pra minha surpresa tudo funcionou perfeitamente após ajustar a infraestrutura.&lt;/p&gt;

&lt;p&gt;A arquitetura roda em um único &lt;em&gt;pod&lt;/em&gt; do Podman (&lt;code&gt;pod_nextcloud&lt;/code&gt;), interligando dois containers principais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;nextcloud-app&lt;/code&gt;&lt;/strong&gt;: A aplicação Nextcloud rodando sobre a imagem oficial &lt;code&gt;nextcloud:apache&lt;/code&gt; (com o Nextcloud na versão 35.0.1.1), acessível via LAN, mDNS (&lt;code&gt;nextcloud.local&lt;/code&gt;) e Tailscale. O código do core fica desacoplado em um volume anônimo gerenciado pela própria imagem, enquanto os dados sensíveis, banco e configurações residem em &lt;em&gt;bind mounts&lt;/em&gt; seguros no host (&lt;code&gt;~/containers/nextcloud/&lt;/code&gt;), permitindo atualizações limpas via &lt;code&gt;podman pull&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;nextcloud-redis&lt;/code&gt;&lt;/strong&gt;: Um container Redis (&lt;code&gt;redis:alpine&lt;/code&gt;) atuando como cache local/distribuído e controle de &lt;em&gt;locking&lt;/em&gt; (&lt;code&gt;memcache.locking&lt;/code&gt;), o que elimina os engasgos de &lt;em&gt;file locked&lt;/em&gt; e acelera drasticamente a navegação e o carregamento de miniaturas, consumindo quase nada de memória (~1,73 MB).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frd61ibg3wbxr8zq05fpo.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frd61ibg3wbxr8zq05fpo.png" alt="Captura de tela do console mostrando dois containeres" width="800" height="63"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para o banco de dados, fui na contramão de SGBDs pesados e mantive o &lt;strong&gt;SQLite3&lt;/strong&gt; em modo WAL (&lt;code&gt;journal_mode=wal&lt;/code&gt;). Para um uso doméstico com meus cerca de 54 mil arquivos indexados (~98 GB de dados), ele entrega simplicidade absurda (os backups resumem-se a copiar o arquivo ou usar &lt;code&gt;VACUUM INTO&lt;/code&gt;) sem o peso de um daemon dedicado — embora eu saiba que ele cobra o preço se houver muitas escritas concorrentes, o que não é o caso aqui.&lt;/p&gt;

&lt;p&gt;As rotinas de manutenção e background rodam pontualmente através de timers do &lt;code&gt;systemd --user&lt;/code&gt; disparando o &lt;code&gt;cron.php&lt;/code&gt; a cada 5 minutos via &lt;code&gt;podman exec&lt;/code&gt;, garantindo que os afazeres pendentes do sistema não engasguem a interface web. Além disso, criei um pequeno &lt;em&gt;watchdog&lt;/em&gt; L3 via systemd para monitorar a interface Wi-Fi (uma placa Atheros ath10k que às vezes perdia o pé no DHCP/ARP após quedas transitórias): caso a rota para o gateway falhe por três verificações consecutivas, ele força um religamento limpo via &lt;code&gt;iwctl&lt;/code&gt;, contornando quedas longas e mantendo o acesso estável.&lt;/p&gt;

&lt;p&gt;Também precisei definir um IP estático no roteador (infelizmente, sem cabos por enquanto). O processo varia de roteador para roteador, mas felizmente o processo aqui foi simples. Bastou ter o endereço mac e &lt;em&gt;voilá&lt;/em&gt;&lt;/p&gt;

&lt;p&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F06pstbt4jaitlgoavudf.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F06pstbt4jaitlgoavudf.png" alt="Captura de tela da interface do roteador, com IP estático configurado" width="800" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E para fechar o acesso sem depender de portas abertas no roteador ou IPs públicos dinâmicos, entra em cena o Tailscale. Como o servidor fica na minha rede doméstica mas eu vivo saindo, configurar uma VPN mesh baseada em WireGuard mudou completamente o jogo.Instalar e autenticar o Tailscale no Arch Linux foi questão de segundos, e o melhor de tudo é que ele cria uma rede privada segura que me acompanha em qualquer lugar do mundo. Basta bater no IP do Nextcloud na VPN que a conexão é estabelecida de ponta a ponta com criptografia forte, sem precisar de NAT forwarding maluco ou exposing na internet aberta. É basicamente ter meu próprio data center privado no bolso, acessível com um clique e com zero dor de cabeça de configuração de rede externa.   &lt;/p&gt;

&lt;p&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmku4mjmx15qz0wqerk9f.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmku4mjmx15qz0wqerk9f.png" alt="Captura de tela da interface web do NextCloud via VPN" width="800" height="1778"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No fim das contas, consegui um drive local com 500GB, totalmente funcional e com controle absoluto, focado em privacidade digital. Até o próximo post, falou.&lt;/p&gt;

</description>
      <category>homelab</category>
      <category>opensource</category>
      <category>showdev</category>
      <category>linux</category>
    </item>
    <item>
      <title>Uma Análise Técnica da Arquitetura RAG da "Juci"</title>
      <dc:creator>Higor Silva</dc:creator>
      <pubDate>Sun, 22 Jun 2025 16:08:11 +0000</pubDate>
      <link>https://dev.to/higorslva/uma-analise-tecnica-da-arquitetura-rag-da-juci-52k</link>
      <guid>https://dev.to/higorslva/uma-analise-tecnica-da-arquitetura-rag-da-juci-52k</guid>
      <description>&lt;p&gt;A criação de assistentes de conversação que operam sobre domínios de conhecimento específicos representa um desafio significativo de engenharia. A simples utilização de um Large Language Model (LLM) pré-treinado é insuficiente quando a precisão e a fidelidade a uma base de fatos controlada são requisitos primordiais. Este artigo apresenta um estudo de caso técnico da "Juci", uma assistente virtual desenvolvida pela &lt;a href="https://www.tjap.jus.br/portal/noticias/facilidade-e-eficiencia-digital-tjap-lanca-inteligencia-artificial-chatbot-juci-a-assistente-virtual-do-portal-do-poder-judiciario.html" rel="noopener noreferrer"&gt;equipe de IA&lt;/a&gt; da Residência Tecnológica para o Tribunal de Justiça do Amapá (TJAP), detalhando sua arquitetura baseada no padrão Retrieval-Augmented Generation (RAG). Analisaremos os componentes de seu stack tecnológico, o fluxo de ingestão e gerenciamento de dados e o pipeline de execução em tempo de execução.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Componentes da Arquitetura e Stack Tecnológico&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A fundação do sistema reside em um stack de componentes de código aberto, orquestrados em Python. O núcleo generativo é o &lt;strong&gt;Llama 3.1 8B&lt;/strong&gt;, um LLM servido localmente através do &lt;strong&gt;Ollama&lt;/strong&gt;. Essa escolha estratégica garante a soberania dos dados e a total customização do ambiente, eliminando a dependência de APIs de terceiros e mantendo as interações dentro da infraestrutura local. Para a transformação do conhecimento textual em representações numéricas, utilizamos o modelo de embeddings &lt;code&gt;mixedbread-ai/mxbai-embed-2d-large-v1&lt;/code&gt;, acessado via Hugging Face. Este modelo é responsável por gerar os vetores de alta dimensão que capturam a semântica do conteúdo.&lt;/p&gt;

&lt;p&gt;O armazenamento e a recuperação desses vetores são gerenciados pelo &lt;strong&gt;Qdrant&lt;/strong&gt;, um banco de dados vetorial de alta performance. O Qdrant indexa os vetores de embedding para permitir buscas por similaridade de cosseno em latência extremamente baixa, que é a operação central da fase de &lt;em&gt;Retrieval&lt;/em&gt;. Para unir todos esses componentes, o framework &lt;strong&gt;LangChain&lt;/strong&gt; atua como a principal camada de orquestração. Ele abstrai a complexidade do pipeline, gerenciando o carregamento de documentos com &lt;code&gt;DataFrameLoader&lt;/code&gt; e &lt;code&gt;DirectoryLoader&lt;/code&gt;, a fragmentação de texto através do &lt;code&gt;RecursiveCharacterTextSplitter&lt;/code&gt; (configurado com &lt;code&gt;chunk_size&lt;/code&gt; de 500 e &lt;code&gt;chunk_overlap&lt;/code&gt; de 100 caracteres) e a integração entre o cliente Qdrant e o LLM Ollama.&lt;/p&gt;

&lt;p&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%2Fpoomgxglohuzyucol5nh.png" 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%2Fpoomgxglohuzyucol5nh.png" alt="Fluxograma completo da Juci" width="800" height="1168"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Ingestão e Manutenção Incremental da Base de Conhecimento&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Uma característica crucial de um sistema RAG robusto é sua capacidade de manter a base de conhecimento atualizada de forma eficiente. Na arquitetura da Juci, implementamos uma separação lógica de dados em duas coleções distintas no Qdrant: &lt;code&gt;chatbot&lt;/code&gt;, contendo um dataset de perguntas e respostas comuns (FAQs), e &lt;code&gt;blog&lt;/code&gt;, com notícias e conteúdo institucional do TJAP. O script de inicialização permite, através de argumentos de linha de comando (&lt;code&gt;argparse&lt;/code&gt;), a recriação completa das coleções ou a sua reutilização.&lt;/p&gt;

&lt;p&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%2Fy5spmgp99zkilejb0gj9.png" 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%2Fy5spmgp99zkilejb0gj9.png" alt="Fluxograma de inicialização do servidor" width="800" height="1329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O destaque do design é a função &lt;code&gt;inserirNovosArquivos&lt;/code&gt;, projetada para a atualização incremental da coleção &lt;code&gt;blog&lt;/code&gt;. Em vez de reprocessar todo o diretório de documentos a cada atualização, esta função primeiro lista os arquivos de origem e, em seguida, itera sobre eles, consultando o Qdrant para verificar a existência de cada um através de um filtro em seus metadados (&lt;code&gt;metadata.source&lt;/code&gt;). Apenas os documentos não encontrados no banco de dados são carregados, divididos em chunks, vetorizados e, por fim, inseridos na coleção. Essa abordagem reduz drasticamente o custo computacional e o tempo necessário para sincronizar a base de conhecimento com novas informações.&lt;/p&gt;

&lt;p&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%2Fynlkjii6t1p9w0gpmowg.png" 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%2Fynlkjii6t1p9w0gpmowg.png" alt="Fluxograma de alimentação da base de dados para uso de RAG" width="800" height="1136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O Pipeline RAG em Execução&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A interação do usuário é gerenciada por um servidor TCP implementado com o módulo &lt;code&gt;socket&lt;/code&gt; do Python. Ao receber uma query, o sistema não a envia diretamente ao LLM. Primeiramente, a fase de &lt;em&gt;Retrieval&lt;/em&gt; é acionada pela função &lt;code&gt;custom_prompt&lt;/code&gt;. Esta função executa duas buscas de similaridade paralelas no Qdrant: uma na coleção &lt;code&gt;chatbot&lt;/code&gt; (com &lt;code&gt;k=5&lt;/code&gt;) e outra na coleção &lt;code&gt;blog&lt;/code&gt; (com &lt;code&gt;k=15&lt;/code&gt;), recuperando os chunks de texto mais relevantes de cada fonte.&lt;/p&gt;

&lt;p&gt;Os resultados de ambas as buscas são então concatenados para formar um bloco de contexto unificado. Este contexto é injetado em um prompt template estruturado, que serve a um duplo propósito. Além de fornecer ao LLM os dados factuais para formular a resposta, o template também realiza a engenharia de persona, instruindo o modelo sobre sua identidade, tom de voz e regras de comportamento (guardrails), como a proibição de responder a tópicos fora do escopo do TJAP. Somente após essa fase de &lt;em&gt;Augmentation&lt;/em&gt;, o prompt completo é enviado ao Llama 3.1 para a geração final da resposta, que é então retornada ao usuário. &lt;/p&gt;

&lt;p&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%2Fams24fnc75g30muinx86.png" 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%2Fams24fnc75g30muinx86.png" alt="Guardrails e processamento da resposta final" width="799" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Concluímos então, que este design modular e eficiente exemplifica como a combinação de LLMs locais, bancos de dados vetoriais e uma lógica de orquestração cuidadosa pode produzir assistentes de IA especializados, seguros e altamente confiáveis.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>langchain</category>
      <category>qdrant</category>
      <category>python</category>
    </item>
    <item>
      <title>Instalando kernel Linux Zen no Arch Linux com systemd-boot 🧑🏽‍💻</title>
      <dc:creator>Higor Silva</dc:creator>
      <pubDate>Mon, 18 Mar 2024 18:19:05 +0000</pubDate>
      <link>https://dev.to/higorslva/instalando-kernel-linux-zen-no-arch-linux-com-systemd-boot-3041</link>
      <guid>https://dev.to/higorslva/instalando-kernel-linux-zen-no-arch-linux-com-systemd-boot-3041</guid>
      <description>&lt;p&gt;O Arch Linux é um sistema altamente modular, pensado para usuários avançados que gostam de customizar ao máximo seu próprio sistema. A liberdade é tamanha que você pode, de maneira oficial e sem muita complicação, alterar qual kernel Linux você quer instalar. Nesse tutorial, ensinarei como instalar e mudar para o kernel para o Linux Zen no seu Arch Linux.&lt;/p&gt;

&lt;p&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%2Fq7s8j0uhn0vhi2k6xiy8.jpeg" 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%2Fq7s8j0uhn0vhi2k6xiy8.jpeg" alt="Pinguim meditando sobre um computador" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Primeiro, o que é o Linux Zen?
&lt;/h3&gt;

&lt;p&gt;O kernel Linux Zen é o resultado de um esforço colaborativo entre entusiastas do mundo Linux para entregar o melhor kernel possível para o dia a dia. Aplica alguns patches do kernel Liquorix, priorizando estabilidade e novidades no suporte de novos hardwares, além da mudança de como os processos são priorizados, além de diminuir a latência (ótimo para quem trabalha com áudio no linux).&lt;/p&gt;

&lt;h3&gt;
  
  
  Instalação
&lt;/h3&gt;

&lt;p&gt;A instalação não tem segredo, visto que o pacote &lt;code&gt;linux-zen&lt;/code&gt; está nos repositórios oficiais do Arch Linux. Para isso, basta abrir o terminal e dar o comando &lt;code&gt;sudo pacman -S linux-zen linux-zen-headers&lt;/code&gt;.&lt;/p&gt;

&lt;p&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%2Fy178hipne5u32rmtuth9.png" 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%2Fy178hipne5u32rmtuth9.png" alt="Terminal Linux com o comando para instalar o kernel Linux Zen" width="800" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após a instalação, você ainda precisa seguir mais alguns passos, pois apenas o pacote foi instalado, precisando habilita-lo para dar boot no novo kernel. Para isso, editaremos um arquivo .conf que está no caminho /boot/loader/entries. No meu caso, possuo apenas uma entrada e usarei ela. Você pode criar uma nova entrada caso queira ficar alternando entre os kernels durante o boot.&lt;br&gt;
Digite &lt;code&gt;sudo nano /boot/loader/entries/*nome_do_arquivo*.conf&lt;/code&gt;. Você verá uma janela parecida com essa:&lt;/p&gt;

&lt;p&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%2Fmglwxnn3s483ca0rd4g1.png" 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%2Fmglwxnn3s483ca0rd4g1.png" alt=" " width="800" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para que você ative o Linux Zen, basta adicionar o sufixo "-zen" na linha "linux" e "initrd"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;title Arch Linux (linux)
linux /vmlinuz-linux-zen
[...]
initrd /initramfs-linux-zen.img
[...]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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%2Flehb9m33r3dakcj5hooa.png" 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%2Flehb9m33r3dakcj5hooa.png" alt="Arquivo de entrada atualizado para o kernel-zen" width="800" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como podemos ver, agora o arquivo de entries está configurado para o boot ser no Linux Zen invés do kernel Linux convencional. Para aplicar as configurações, salve o arquivo e execute o comando &lt;code&gt;sudo bootctl update&lt;/code&gt; e reinicie seu computador. Agora o kernel Linux Zen é o seu kernel padrão.&lt;/p&gt;

</description>
      <category>archlinux</category>
      <category>kernel</category>
      <category>linuxzen</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Usei o Android sem apps Google por dois meses 📱</title>
      <dc:creator>Higor Silva</dc:creator>
      <pubDate>Wed, 27 Dec 2023 01:21:35 +0000</pubDate>
      <link>https://dev.to/portugues/usei-o-android-sem-apps-google-por-dois-meses-5en0</link>
      <guid>https://dev.to/portugues/usei-o-android-sem-apps-google-por-dois-meses-5en0</guid>
      <description>&lt;p&gt;&lt;em&gt;Texto originalmente escrito em 29 de janeiro de 2022&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;No dia 27 de novembro, comecei minha jornada um tanto estranha para quem é de fora do mundo da tecnologia: Comecei a usar o Android (que é um sistema da Google) sem os apps da Google. O quão bizarro ou maravilhoso pode ser usar o sistema do robozinho verde mais privativo? Essas são minhas conclusões:&lt;/p&gt;

&lt;h3&gt;
  
  
  Mas afinal, qual o motivo dessa experiência?
&lt;/h3&gt;

&lt;p&gt;O ponto é simples: abra o “My Activity” da sua conta na Google e veja tudo o que você fez. Reconhece aqueles aplicativos que você abriu? Como o Google sabe de tudo isso? Como ele coleta esses dados e pra quê ele usa isso?&lt;/p&gt;

&lt;p&gt;Existe uma forma para que a Google pare de coletar meus dados? A resposta é sim, mas exige alguns passos mais avançados. Então basta eu trocar meu sistema operacional, certo? Bem…&lt;/p&gt;

&lt;p&gt;Quando o assunto é sistemas operacionais mobile, você deve imaginar em apenas dois nomes: O Android e o iOS (também conhecido como “o do iPhone”). Ambos são muito práticos e são os sistemas que todas as pessoas estão acostumadas a usar no seu dia a dia. Mas existem outros também, embora sejam mais para nichos e usos específicos.A maioria deles são baseados em Linux, como o &lt;a href="https://ubuntu-touch.io/" rel="noopener noreferrer"&gt;Ubuntu Touch&lt;/a&gt;, o &lt;a href="https://pureos.net/" rel="noopener noreferrer"&gt;PureOS&lt;/a&gt; da Librem, &lt;a href="https://sailfishos.org/" rel="noopener noreferrer"&gt;Sailfish OS&lt;/a&gt; e o &lt;a href="https://postmarketos.org/" rel="noopener noreferrer"&gt;postmarketOS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Mas uma coisa que esses sistemas alternativos pecam é na comodidade. Vários apps não possuem uma versão para aquele sistema operacional. WhatsApp, Uber, entre outros não existem. Você pode instalar uma camada de compatibilidade do Android, mas envolve processos mais avançados e em casos extremos, é necessário até patchear/recompilar o kernel.&lt;/p&gt;

&lt;p&gt;Agora se você usar Android, nem precisa se preocupar com isso. Basta baixar o app e usar. Mas o Google vai continuar coletando dados. É aqui que temos o pulo do gato.&lt;/p&gt;

&lt;h3&gt;
  
  
  Segundo ponto: Privacidade sem largar a comodidade
&lt;/h3&gt;

&lt;p&gt;Muitos aplicativos necessitam do Google Play Services, um app da Google que funciona como um conjunto de bibliotecas para os apps funcionarem… Ok, vejamos de outro modo.&lt;/p&gt;

&lt;p&gt;Para alguns apps funcionarem, eles necessitam de alguns códigos que só existem no Google Play Services. Acesso a GPS, uso de alguns serviços na nuvem, etc. Sem o Google Play Services, o seu Uber não vai detectar sua localização e seu WhatsApp não vai receber notificação. Você só receberá mensagens quando abrir o app. Bem incoveniente, né?&lt;/p&gt;

&lt;p&gt;Para contornar esse problema, existe um substituto ao Play Services: O Projeto MicroG, mantido pelo desenvolvedor alemão Marvin Wißfeld. Essa implementação é de código aberto e não conta com os rastreadores da Google. Existem algumas formas de instalação, mas…&lt;/p&gt;

&lt;h3&gt;
  
  
  Terceiro ponto: O sistema funcionaria de forma idêntica ao original. Porém…
&lt;/h3&gt;

&lt;p&gt;Entrando em termos mais técnicos, o que fiz foi: Baixar a variante da &lt;a href="https://lineageos.org/" rel="noopener noreferrer"&gt;LineageOS&lt;/a&gt; (sistema operacional baseado no &lt;a href="https://source.android.com/" rel="noopener noreferrer"&gt;Android Open Source Project&lt;/a&gt;) chamada &lt;a href="https://lineage.microg.org/" rel="noopener noreferrer"&gt;LineageOS for MicroG&lt;/a&gt;. Explico mais sobre como fazer isso em um post futuro.&lt;/p&gt;

&lt;p&gt;Baixando o LineageOS for MicroG, tudo já vinha configurado. Bastava “flashear” o sistema e tudo certo. E… Foi exatamente isso que aconteceu. Não foi necessário configurar mais nada, só precisei logar minha conta da Google para o YouTube.&lt;/p&gt;

&lt;p&gt;A loja de aplicativos não é a Play Store, mas por padrão vem o &lt;a href="https://f-droid.org/" rel="noopener noreferrer"&gt;F-Droid&lt;/a&gt;: Uma loja de aplicativos Android com o diferencial de ter apenas aplicativos de código aberto. E não, você não encontrará o WhatsApp, por exemplo. Para isso, é necessário o download de outra loja: &lt;a href="https://auroraoss.com/" rel="noopener noreferrer"&gt;Aurora Store&lt;/a&gt;. Nele, você pode logar em uma conta anônima e usar a Play Store sem rastreio algum. Todos os aplicativos estão lá.&lt;/p&gt;

&lt;p&gt;Inclusive, caso queira substituir aplicativos proprietários para código aberto, você pode conferir esse &lt;a href="https://github.com/higorslva/foss-android" rel="noopener noreferrer"&gt;guia no GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Após algumas semanas usando o Android dessa maneira, algumas coisas curiosas aconteciam. App do Uber simplesmente parou de pegar minha localização. Minha cidade não é lá tão grande mas caso eu estivesse em um local desconhecido, teria que usar métodos neandertais para me localizar: Pedir informação.&lt;/p&gt;

&lt;p&gt;Da mesma maneira que o Uber me deixou na mão, o WhatsApp parou de receber notificação. Algumas mensagens urgentes eu simplesmente não via pois não tenho costume de abrir o WhatsApp a não ser que eu receba notificação ou queira mandar mensagem pra alguém. Mas notificações não chegavam, o que me forçava abrir o app algumas vezes e me deparar com mensagens de uma hora atrás no limbo.&lt;/p&gt;

&lt;p&gt;Como quis me desapegar de aplicativos do Google, usei outros alternativos daquela lista lá. Todos funcionam muito bem e alguns uso até hoje depois da experiência. Mas eu uso bastante meu computador e os serviços da Google funciona tudo pela nuvem. Um texto que escrevi no Google Keep poderá ser acessado depois no meu computador e vice versa. Eu tive que abrir mão disso e foi bem sofrido.&lt;/p&gt;

&lt;p&gt;Outro ponto negativo foi que o app que gerencia o MicroG simplesmente não abria mais. Caso eu quisesse adicionar uma nova conta do Google, não poderia. Ligar/desligar algumas funções? Esquece.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão: Valeu a pena?
&lt;/h3&gt;

&lt;p&gt;Se você quiser mais privacidade e considera o uso das bibliotecas da Google pelo MicroG, esteja ciente que tem altas chances de que nem tudo irá funcionar. Algumas vezes é necessário apenas marcar uma opção nas configurações, outras nem solução você terá. Não tenho nada contra a Google e uso seus serviços sem problema nenhum.&lt;/p&gt;

&lt;p&gt;Na minha experiência houve mais contras do que prós, então não tive problema em voltar a usar meu celular como sempre usei. Inclusive, em um próximo post eu mostro como é meu celular, meus aplicativos e como organizo minha vida digital.&lt;/p&gt;

&lt;p&gt;Abraços e se cuidem.&lt;/p&gt;

</description>
      <category>security</category>
      <category>android</category>
      <category>microg</category>
    </item>
    <item>
      <title>Configurando Docker com MySQL no Arch Linux e conectando ao Workbench 👨🏽‍💻</title>
      <dc:creator>Higor Silva</dc:creator>
      <pubDate>Mon, 25 Dec 2023 17:04:35 +0000</pubDate>
      <link>https://dev.to/higorslva/configurando-docker-com-mysql-no-arch-linux-e-conectando-ao-workbench-420l</link>
      <guid>https://dev.to/higorslva/configurando-docker-com-mysql-no-arch-linux-e-conectando-ao-workbench-420l</guid>
      <description>&lt;p&gt;Enquanto configurava minha máquina com Arch Linux, percebi que o &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fdev.mysql.com%2Fdownloads%2Fmysql%2F" rel="noopener noreferrer"&gt;MySQL Server&lt;/a&gt; não existia mais nos repositórios da distro desde 2013 (e &lt;a href="https://medium.com/r/?url=https%3A%2F%2Farchlinux.org%2Fnews%2Fmariadb-replaces-mysql-in-repositories%2F" rel="noopener noreferrer"&gt;aqui&lt;/a&gt; está o motivo), ficando em seu lugar o &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fmariadb.org%2F" rel="noopener noreferrer"&gt;MariaDB&lt;/a&gt;. Embora o MariaDB seja praticamente 100% compatível com a sintaxe do MySQL, ainda há pequenas coisas que não são. Para quem prefere o MySQL e não deseja ter de compilar o código fonte ou não quer instalar diretamente os binários genéricos, eis como instalar com o Docker.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Nota: Esse tutorial foi escrito após algumas pesquisas para o meu caso em particular durante as aulas das matérias Banco de Dados I e II na universidade.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Instalando o Docker
&lt;/h3&gt;

&lt;p&gt;Caso não possua o Docker instalado, primeiro atualize a lista de pacotes e os pacotes em si:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -Syu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora instale o Docker&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -S docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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%2Fc0x7fz94w2ctcdc73iwf.png" 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%2Fc0x7fz94w2ctcdc73iwf.png" alt="Docker com status active" width="799" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Caso no lugar de "active" apareça "inactive (dead)", inicialize-o com&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl start docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Criando um container com MySQL
&lt;/h3&gt;

&lt;p&gt;Agora que temos o Docker instalado, podemos executar os comandos referente a ele. Primeiramente devemos baixar a imagem do MySQL. Usaremos a versão mais recente com a flag "latest"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker pull mysql:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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%2Fzl7itk0r3b2y0l8a6nas.png" 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%2Fzl7itk0r3b2y0l8a6nas.png" alt="Instalação da imagem MySQL" width="799" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Você pode conferir os detalhes da imagem com o comando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker images
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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%2Fk8kclsjxapbd3f3653g4.png" 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%2Fk8kclsjxapbd3f3653g4.png" alt="Imagens instaladas" width="799" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora vamos criar um novo container com base na imagem que baixamos anteriormente&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker run --name mysqlbd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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%2Fxuirv3zjw7g3t0r44wep.png" 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%2Fxuirv3zjw7g3t0r44wep.png" alt="Inicializando o container MySQL" width="799" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lembrando que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;mysqlbd&lt;/code&gt; é o nome do nosso container (você pode escolher qualquer nome que seja fácil para você)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-p&lt;/code&gt; é o parâmetro para definir qual porta utilizaremos (no caso, 3306)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MYSQL_ROOT_PASSWORD=root&lt;/code&gt; define que o usuário e senha sejam 'root'&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mysql&lt;/code&gt; ao final define qual é a imagem base para o nosso container&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Você pode conferir se o container esá em execução usando o comando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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%2Fpmpwvlfvm39pqfwj5cyp.png" 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%2Fpmpwvlfvm39pqfwj5cyp.png" alt="Container executando" width="799" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  MySQL Workbench
&lt;/h3&gt;

&lt;p&gt;Agora a parte mais simples que é conectar no nosso Workbench. O nosso container está sendo executado em localhost, ou seja, no IP 127.0.0.1&lt;/p&gt;

&lt;p&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%2F25fisk3hemd4vac9hq1q.png" 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%2F25fisk3hemd4vac9hq1q.png" alt="MySQL Workbench" width="800" height="646"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ao clicar em 'Test connection' iremos receber uma mensagem de sucesso:&lt;/p&gt;

&lt;p&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%2Fq1u4ztoh1x95hxo7efm5.png" 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%2Fq1u4ztoh1x95hxo7efm5.png" alt="Sucesso" width="458" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora você pode brincar com seu container MySQL para seus estudos e testes :)&lt;/p&gt;

&lt;p&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%2Fecbhvvmxqq93yl2bhzof.png" 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%2Fecbhvvmxqq93yl2bhzof.png" alt="MySQL Workbench" width="799" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Caso queira parar o container, execute&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker stop nome_do_container
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No nosso caso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker stop mysqlbd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se você escolheu outro nome e não se lembra, basta executar sudo &lt;code&gt;docker ps -a&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;Agora você aprendeu a baixar uma imagem MySQL, criar um container e se conectar a ele localhost. O próximo passo é usar esse docker para uma conexão local ou até mesmo via IP pela internet.&lt;/p&gt;

&lt;p&gt;Sucesso e abraço 👋&lt;/p&gt;

</description>
      <category>mysql</category>
      <category>docker</category>
      <category>archlinux</category>
      <category>workbench</category>
    </item>
    <item>
      <title>Nossos dispositivos nunca serão o suficiente</title>
      <dc:creator>Higor Silva</dc:creator>
      <pubDate>Mon, 25 Dec 2023 03:28:04 +0000</pubDate>
      <link>https://dev.to/higorslva/nossos-dispositivos-nunca-serao-o-suficiente-5b0i</link>
      <guid>https://dev.to/higorslva/nossos-dispositivos-nunca-serao-o-suficiente-5b0i</guid>
      <description>&lt;p&gt;Ano após ano, semestre após semestre, somos apresentados a um mundo novo. Apple, Samsung, Xiaomi e outros fazem de seus dispositivos um verdadeiro evento. Um espetáculo, sempre acompanhado de artistas e celebridades para o anúncio de um novo smartphone. Câmeras quíntuplas, sensores de cor, de profundidade e aproximação de altíssima performance, possibilidade de gravação de vídeos em 8K60FPS, quantidade de RAM maior que muitos notebooks e desktops intermediários, processamento beirando 3, 4Ghz. Mas vem uma questão: &lt;strong&gt;Isso realmente é necessário?&lt;/strong&gt;&lt;/p&gt;

&lt;p&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%2Fzdub4f4zw4n1mqlyfwn7.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%2Fzdub4f4zw4n1mqlyfwn7.jpg" alt="Evento de lançamento do Samsung Galaxy Note 8" width="705" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Essa é uma pergunta muito complexa, e se me permite um &lt;a href="https://pt.wikipedia.org/wiki/Spoiler_(m%C3%ADdia)" rel="noopener noreferrer"&gt;spoiler&lt;/a&gt;, aqui vai: Não sei responder. O intuito não é cagar regra sobre suas escolhas, mas apenas fazer você refletir.&lt;/p&gt;

&lt;p&gt;Aqui tomei como exemplo os smartphones pois são algo que nunca sairão de moda, na minha visão. Há uma estimativa de &lt;a href="https://www.bankmycell.com/blog/how-many-phones-are-in-the-world" rel="noopener noreferrer"&gt;6.64 bilhões de smartphones&lt;/a&gt; no mundo em 2021 e a cada ano esse número apenas aumenta. Isso equivale hoje (2022) 83,72% da população mundial, para se ter uma ideia.&lt;/p&gt;

&lt;p&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%2F1iamtw3awqv4fqoowgyx.jpeg" 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%2F1iamtw3awqv4fqoowgyx.jpeg" alt="Smartphones — ou como ouvi de um professor: “Nossas próteses digitais”." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mas, voltando à pergunta principal: Por que você precisa de um processador de última linha, desempenho altíssimo, gigas e gigas de memória RAM se você apenas usa redes sociais? É realmente necessário você ter o último top de linha do ano?&lt;/p&gt;

&lt;p&gt;Em uma estimativa publicada no &lt;a href="https://www.bbc.com/portuguese/geral-59974046" rel="noopener noreferrer"&gt;BBC&lt;/a&gt;, os brasileiros passaram cerca de 1/3 de suas horas acordadas usando o smartphone. Isso equivale a aproximadamente cinco horas e meia, todos os dias, na frente de uma tela pequena. Se me permite ser um pouco &lt;a href="https://pt.wikipedia.org/wiki/OK_Boomer" rel="noopener noreferrer"&gt;boomer&lt;/a&gt;, porquê não passarmos essas horas (ou parte delas) com nossos amigos, familiares ou com outros lazeres?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Do ponto de vista comercial e tecnológico, “a tela grande está lentamente morrendo, enquanto o celular continua a quebrar recordes em todas as categorias — tempo gasto, downloads e receita (gerada)”, afirmou o executivo-chefe da App Annie, Theodore Krantz&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O ser humano é um ser competitivo. Se há uma opção melhor, é muito provável que ele irá atrás dela. As empresas sabem disso, por isso o lançamento anual do mesmo smartphone mas com umas melhorias aqui e ali. No fim das contas, usamos nosso dispositivos para os mesmos fins. Gastar R$6k em algo que você usa apenas 10% da capacidade total dele não faz sentido.&lt;/p&gt;

&lt;p&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%2Fplg13fnuyixznu4gxpgo.jpeg" 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%2Fplg13fnuyixznu4gxpgo.jpeg" alt="Evolução das câmeras do iPhone" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As empresas sabem disso, por isso o motivo de marketing girar em torno de eventos; por que, vamos combinar, você ter um aparelho que foi lançado por um artista que você admira muito é bem diferente (e você se sente melhor) do que apenas ir numa loja e pegar um mais em conta.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Um lembrete: Não estou demonizando dispositivos tecnológicos, nem nada do tipo. Se você é fotógrafo, programador, ou editor de vídeo e usa seu smartphone para esses fins profissionalmente, esse artigo não é para você. Devemos separar o que é consumismo de investimento.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;De todo modo, você pode ter uma opinião distinta. O consumismo está dominando nossa mente e nossa vida, fazendo com que gastemos muito mais do que realmente importa nas nossas vidas. Infelizmente muita gente ainda não tem controle financeiro e isso acaba prejudicando sua saúde mental, sempre em estado de comparação e querer sempre o melhor, não importa o quanto isso custe.&lt;/p&gt;

&lt;p&gt;Abraços e se cuidem.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;originalmente escrito em março de 2022&lt;/em&gt;&lt;/p&gt;

</description>
      <category>community</category>
      <category>writing</category>
      <category>smartphones</category>
    </item>
    <item>
      <title>Setup de desenvolvimento + estudos com Arch Linux</title>
      <dc:creator>Higor Silva</dc:creator>
      <pubDate>Mon, 12 Dec 2022 18:54:02 +0000</pubDate>
      <link>https://dev.to/higorslva/setup-de-desenvolvimento-estudos-com-arch-linux-3n95</link>
      <guid>https://dev.to/higorslva/setup-de-desenvolvimento-estudos-com-arch-linux-3n95</guid>
      <description>&lt;p&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%2F3pad9rd3z1f4xr3got4e.png" 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%2F3pad9rd3z1f4xr3got4e.png" alt="Arch Linux com KDE Plasma customizado" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Se você trabalha e ou estuda programação e desenvolvimento, já se deparou com a constante briga pela internet: Qual sistema operacional utilizar? Quais softwares e bibliotecas eu deveria ter? Não direi "Eis aqui a resposta", mas sim "Eis como eu configuro meu ambiente de desenvolvimento".&lt;/p&gt;
&lt;h2&gt;
  
  
  Afinal, sistemas base Linux ou&amp;nbsp;Windows?
&lt;/h2&gt;

&lt;p&gt;Primeiro de tudo, você pode sim usar Windows. Ao contrário do que muitas pessoas falam, é possível desenvolver no sistema da Microsoft sem muitos problemas. Muitos softwares e frameworks rodam tranquilamente por lá. O que você deve levar em consideração é a facilidade para isso.&lt;br&gt;
O Windows, pela minha experiência, é um pouco mais complicado durante as configurações do ambiente, enquanto no Linux posso fazer tudo com algumas poucas linhas de comando. Mas isso é a minha visão, você pode ter a sua e tá tudo bem&amp;nbsp;:)&lt;/p&gt;
&lt;h2&gt;
  
  
  Beleza, mas por quê Arch&amp;nbsp;Linux?
&lt;/h2&gt;

&lt;p&gt;Ubuntu é, sem dúvida, o sistema baseado em Linux mais popular até aqui e é considerado a porta de entrada para muitos iniciantes por ser estável e com uma vasta comunidade caso você tenha algum problema. A minha questão, aqui, está com os pacotes.&lt;br&gt;
Para um usuário comum, pouco importa a versão dos pacotes. Como o Ubuntu prioriza estabilidade, faz sentido você ter pacotes um pouco mais antigos pois foram debugados por mais tempo. E, dependendo do que você desenvolve, já é mais que o suficiente.&lt;br&gt;
Para mim, que gosto sempre de receber as últimas atualizações dos softwares, esperar 6 meses entre versões atacaria a minha ansiedade. Por isso escolhi sistemas do tipo "Rolling Release" e "bleeding edge". Dentre eles, o Arch Linux é o mais popular e portanto, a minha escolha.&lt;/p&gt;
&lt;h2&gt;
  
  
  Ambiente Gráfico
&lt;/h2&gt;

&lt;p&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%2F9f1mf75gwsndwi1vr29r.png" 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%2F9f1mf75gwsndwi1vr29r.png" alt="KDE Plasma sem modificações" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Dentre os ambientes gráficos mais populares, a minha escolha foi o KDE Plasma. É um ambiente leve e moderno, além de ser altamente personalizável e ter mais recursos. Eu poderia ter escolhido o Gnome, mas, ao meu gosto, ele é bem padrão e "out of the box". Gosto dele, mas não pra ser meu ambiente gráfico principal.&lt;/p&gt;
&lt;h2&gt;
  
  
  KDE Plasma ou&amp;nbsp;MacOS?
&lt;/h2&gt;

&lt;p&gt;Uma coisa sou obrigado a admitir: O visual do MacOS é o mais bonito dentre todos os sistemas operacionais. A disposição com uma barra de status com menu global, uma dock flutuante e o design minimalista me atrai e muito. Como o KDE Plasma é altamente customizável, inspirei 90% das minhas modificações com o MacOS. Não entrarei em detalhes ainda sobre como modifiquei, fica para um próximo post&amp;nbsp;:)&lt;/p&gt;
&lt;h2&gt;
  
  
  Softwares e bibliotecas
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Terminal: Zsh, oh-my-zsh e&amp;nbsp;plugins
&lt;/h3&gt;

&lt;p&gt;Por padrão, o terminal do Arch Linux é o bash e, embora seja suficiente para muita gente, prefiro o Zsh com os plugins Oh My Zsh e o tema Jovial. Para instalar o Zsh no Arch Linux, basta executar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -S zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em seguida, para o Oh My Zsh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Durante a instalação, o script perguntará se deseja alterar seu shell padrão para o Zsh. Responda que sim e estará feito&amp;nbsp;:)&lt;br&gt;
Para a instalação do Jovial, tudo será feito com um único comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -sSL https://github.com/zthxxx/jovial/raw/master/installer.sh | sudo -E bash -s ${USER:=`whoami`}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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%2Fuucrl7wam148of0ugxhz.png" 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%2Fuucrl7wam148of0ugxhz.png" alt="Zsh + oh-my-zsh + Jovial" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Todas as features do Jovial estão na &lt;a href="https://github.com/zthxxx/jovial" rel="noopener noreferrer"&gt;documentação&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Suporte ao AUR (Arch User Repository)
&lt;/h3&gt;

&lt;p&gt;O Arch Linux tem seu repositório próprio, mas um de seus diferenciais é o AUR, onde como o próprio nome diz, é um repositório dos usuários. Caso o software que você procura não esteja nos repositórios oficiais, há grande chance de ele estar no AUR. Lembrem sempre de conferir o aquivo PKGBUILD para garantir que nada de malicioso será instalado (e veja também pelo site os comentários).&lt;br&gt;
Para usá-lo de forma automatizada, eu uso o pacote Yay (Yet Another Yogurt), que possui a mesma sintaxe do 'pacman' e facilita demais seu uso. Para instalá-lo, você deve ter os pacotes 'git' e 'base-devel' instalados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -S --needed git base-devel &amp;amp;&amp;amp; git clone https://aur.archlinux.org/yay.git &amp;amp;&amp;amp; cd yay &amp;amp;&amp;amp; makepkg -si
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Navegador: Firefox e Brave
&lt;/h3&gt;

&lt;p&gt;Sempre alterno entre ambos os navegadores, mas atualmente minha escolha é com o Brave. Como priorizo sincronização entre dispositivos e o Firefox no Android, ao meu ver, ainda é um pouco lento, preferi o Brave nesse quesito. No ArchLinux, o Firefox está disponível nos repositórios oficiais:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -S firefox
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enquanto o Brave está no AUR:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yay -S brave-bin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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%2F1rf9oe8td64zm5jo3as6.png" 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%2F1rf9oe8td64zm5jo3as6.png" alt="Página inicial do Brave Browser" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Git e chaves SSH
&lt;/h3&gt;

&lt;p&gt;Caso não tenha instalado, iremos instalar a ferramenta 'git'&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -S git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E em seguida configuramos com a nossa conta do GitHub&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git config --global user.name "Your Name"
git config --global user.email your@email.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso você possua autenticação de dois fatores no GitHub, sabe que é um saco ter que copiar e colar o token pra cada transação (git push principalmente). Para evitar isso (e manter a conta segura), podemos usar chaves SSH. No meu caso, que possuo backups delas em um ssd externo, posso restaurar com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cp -R /media/higorslva/ssd-backup/backups/.ssh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mudo as permissões:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chmod 700 ~/.ssh
chmod 644 ~/.ssh/id_ed25519.pub #Sua chave pública
chmod 600 ~/.ssh/id_ed25519     #Sua chave privada
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Iniciamos e adicionamos a chave ssh no agente ssh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos testar a conexão:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh -T git@github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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%2Ff17rlt5jy4bwzh6hgs75.png" 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%2Ff17rlt5jy4bwzh6hgs75.png" width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com isso podemos fazer ações do GitHub sem precisar digitar nossa credencial toda hora.&amp;nbsp;&lt;br&gt;
Caso não possua chaves ssh, dê uma olhada na documentação para adicioná-la na sua conta do GitHub.&lt;/p&gt;
&lt;h3&gt;
  
  
  Editores de texto
&lt;/h3&gt;

&lt;p&gt;Meu editor principal não é o VS Code, embora eu ainda o utilize bastante. Uso atualmente o Helix Editor, um editor de texto em terminal baseado fortemente no Vim, inclusive com os mesmos comandos.&lt;/p&gt;

&lt;p&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%2F4bh6m4bjmotd1nmjsz5c.png" 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%2F4bh6m4bjmotd1nmjsz5c.png" alt="Helix Editor ou " width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para um desenvolvimento mais "complexo", uso o Visual Studio Code, principalmente para projetos em Java e Python.&lt;/p&gt;

&lt;p&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%2F3l5kavukenb62mvbo70x.png" 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%2F3l5kavukenb62mvbo70x.png" alt="VS Code com tema Monokai" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;É possível instalar o VSCode direto do repositório oficial do Arch Linux, porém, é a versão "Code - OSS". O que impossibilita a instalação de algumas extensões que são cruciais para meu uso. Por isso vamos usar o AUR para instalar a versão oficial (convertida da versão para Ubuntu/Debian)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yay -S visual-studio-code-bin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Java e&amp;nbsp;Python
&lt;/h3&gt;

&lt;p&gt;Costumo usar o Java sempre na versão mais recente (Atualmente a versão 19). Podemos instalar a versão mais recente do Java com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -S jdk-openjdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E o Python, caso não esteja instalado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -S python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Programas Adicionais
&lt;/h3&gt;

&lt;p&gt;Outros programas que costumo usar são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Oracle VirtualBox&lt;/strong&gt;: Para máquinas virtuais;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GIMP e Inkscape&lt;/strong&gt;: Para edição de imagens e vetorização, respectivamente;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Geogebra&lt;/strong&gt;: Para gráficos (útil em aulas de Cálculo);&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LibreOffice&lt;/strong&gt;: Alternativa ao MSOffice, para documentos;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guitarix&lt;/strong&gt;: Simulador de amp e efeitos para guitarra;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TexStudio&lt;/strong&gt;: Criação de documentos em LaTeX;&lt;/li&gt;
&lt;/ul&gt;

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