Algumas considerações sobre o Linux
Tags: linux, webdev, ubuntu, os
Published: 2021-11-02 03:27:07

Esse fim de semana estava bem decidido a começar outro projeto no qual eu ia começar a ver como o front-end interage com o back-end, o que é uma matéria bem interessante (e digamos que tem que comer um feijãozinho com arroz, assim como tudo em programação). Em poucas palavras, em comunicação web, é usado o protocolo HTTP (e também o que eu considero a sua variação para conexões "seguras", o HTTPS), no qual os clientes e servidores trocam dados em vários pequenos pacotes em que cada uma das pontas juntam esses pacotes para formar o documento completo. No protocolo HTTP, os dados são seguidos de um cabeçalho que contém metadados sobre a mensagem que foi encaminhada. Mas esta é apenas uma definição bem simplista e não é o foco desse post.

![Protocolo HTTP](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vueqlqavpqcvofnt1swc.png)

Como estava dizendo, ia começar esse projeto bem simples somente para ver na prática como funciona. Teoricamente, a partir daí poderia começar a escrever soluções fullstack de acordo com o que meu conhecimento me permitisse, até porque, tudo o que escrevi estava centrado no front-end, e, assim, a solução não poderia ser nem de longe completa. Lidar com dados apenas no front-end é uma garantia que você não teria como salvar os dados (por questões de segurança), somente como fazer leitura, então a parte de processamento estaria mais ou menos perdida.

Mas, antes de proceder com meu projeto, decidi que ia mudar de editor de texto, até porque todo código que um programador digita, inicialmente, é puro texto. Funciona assim porque são instruções, e como computador lê dados e instruções como 0 e 1, então o melhor jeito de programá-lo é gramaticalmente. Isso remonta desde a época que se escovava bits, e logo após se foi convencionando em utilizar mnemônicos para se lidar com as instruções. Assim surge o Assembly, que precedeu qualquer linguagem de programação que temos hoje em dia.

![Assembly](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dhf4ugl3jwthe6t8wg8h.png)
*Um pequeno exemplo de Hello World em Assembly. O código pode variar de processador para processador*

Antes de decidir pela mudança, eu utilizava o VS Code, o grande editor queridinho da Microsoft. Altamente personalizável, cheio de plugins para ajudar o programador diariamente, além, de claro, seu aspecto mais atrativo: o Intellisense. 

![VS Code](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oe9g2g8szldo0jrolkxe.png)

É um ótimo editor e eu não tiro os méritos da Microsoft por conta disso, mas vamos combinar: ele usa memória que nem água. O grande causador disso é o fato de que ele foi baseado em ElectronJS, o que o torna muito pesado, visto que o Electron foi feito baseado em NodeJS. Este por sua vez, foi feito a partir do V8, motor de Javascript do Google Chrome, e para quem usa Google Chrome, sabe o quanto ele é "comedor" de memória. O VS Code é uma ótima solução Multi-plataforma, mas como toda solução desse tipo, tem que ter uma camada de interface por debaixo (assim como Java e C#), o que torna a aplicação muito pesada. Tais soluções só são mais utilizadas hoje porque os recursos computacionais que temos são abundantes e mais baratos, então isso, de certa forma deixou de ser um problema no geral. Mas, e o programador que está iniciando ou que não tem uma grana para investir num equipamento mais robusto (o que é meu caso)?

![Vim](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6f0seph5a007wy7yisl2.png)

Pois bem, preferi pegar carona nos programadores Old School, que até hoje utilizam o Vim, que é um editor de texto para Linux, que é super leve (escrito em C), rápido e conta com diversos plugins caso você queira personalizá-lo. Como já tenho o WSL já instalado no meu computador, somente precisei rodar o apt-get para instalar o Vim:
```
sudo apt install vim
```
O Linux possui muitas facilidades para o usuário, a custa de outras coisas. Por exemplo, em uma comparação direta entre Linux e Windows, o último possui todas as suas funcionalidades baseadas em GUI ou Interface de Usuário Geral, que proporciona visualização gráfica de todos os programas e processos. O Linux, na maioria de suas distribuições, é comandada via Terminal, ou Prompt de Comando, que seria essa telinha preta onde inserimos os comandos, que não é muito amigável com o público em geral.

![Terminal Linux](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/218rq9ai89knlyzlj0pd.jpg)

O Windows facilita muito a vida do usuário, sendo que na sua maioria dá tudo de mão beijada para seu utilizador. Já o Linux, você precisa dar uma estudada sobre como usar ele, então, se você não for preguiçoso (e também não utilizar muitas soluções que são pensadas apenas para o Windows, como os produtos da Adobe e a maioria dos jogos), pode ir nele sem medo. Outra coisa é o fato do Linux estar presente na maioria dos servidores de websites, o que o torna um requisito obrigatório para quem quer aprender, não só programação web, mas programação em geral.

Este último ponto é essencial, visto que a maioria dos pacotes de programação são desenvolvidos primeiramente para o Linux, e depois adaptados para o Windows, então é super comum ver que, por exemplo, quando você instala o Linux, o Python já vem pré-instalado na pasta /etc.

![WSL](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gv8bon2ax439u1u3di30.PNG)
*Print do meu próprio WSL. Vejam que também veio Perl pré-instalado*

Algumas coisas são apontadas pela comunidade do Linux como facilidades. Acima demonstrei como é simples de se instalar o Vim bastando uma única linha de comando, ao invés de ter que procurar na internet e baixar um executável para instalar. Isso é possível porque as distribuições possuem um repositório oficial, onde a informação dos aplicativos disponíveis é toda publicada lá. Para quem estiver curioso, a pasta /etc/apt possui a listagem dos endereços do repositório. Para verificar, basta rodar o seguinte comando:
```
less /etc/apt/sources.list
```
Vai abrir no pager Less o conteúdo desse arquivo. Como utilizo o Debian, no meu sources.list tem os quatro endereços abaixo:
```
deb http://deb.debian.org/debian buster main
deb http://deb.debian.org/debian buster-updates main
deb http://security.debian.org/debian-security/ buster/updates main
deb http://ftp.debian.org/debian buster-backports main
```
O repositório funciona da mesma maneira como o Play Store do Google no Android (o Android em si é baseado no Linux). Se quiser ver tudo que está disponível basta rodar o seguinte comando:
```
apt-cache search .
```
Mas já vou avisando: a lista é insana de tão grande! Se quiser pesquisar por algo específico, basta entrar com o seguinte comando:
```
apt-cache search palavra-chave
```
Onde se vê palavra-chave, você substitui com o que você deseja pesquisar.

Mas, voltando à instalação do Vim, encontrei um probleminha que pode não ser algo sério para um usuário comum, mas que traz muitas consequências para um programador: *nem sempre os pacotes disponíveis nos repositórios estão em sua última versão.*

Por isso, falei lá em cima que com Linux, você não pode ser preguiçoso, por quê, se você se depara com um problema assim, o que você faz? Pesquisa!

O problema com o qual me deparei foi quando estava instalando o plugin Conquer of Completion, o qual introduz o Intellisense ao Vim. Então, segui mais ou menos o tutorial no repositório do Github, onde instalei o NodeJs (veio incluso no NPM) e logo após fiz a instalação do plugin via gerenciador de plugins. Existem vários, mas eu instalei o vim-plug porque estava seguindo este tutorial:

https://marioyepes.com/vim-setup-for-modern-web-development/

Só avisando: Para instalar o vim-plug, é necessário instalar o curl!

![Instalação do vim-plug](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/prq1eopqtx0nnlk445m6.PNG)

Beleza, plugin instalado! Na hora de rodar a aplicação, já apareceu um erro indicando que a versão instalada do Vim não era a recomendável e tinha que ser uma superior. Pensei: **"mas como assim? instalei do repositório oficial"**. Fui pesquisar e descobri que tinha uma versão mais atualizada, e que tinha dois jeitos de instalar:

1. **Via Personal Package Manager**: este daria um pouco de trabalho, porque o apt, por padrão, não aceita instalação de pacotes que não sejam do repositório oficial. Então teria que ler toda a documentação no link (https://manpages.debian.org/stretch/apt/apt-secure.8.en.html) para saber como habilitar a opção. É como instalar um apk no Android a partir de fontes que não sejam o Play Store, então tem que habilitar a opção nas configurações. Como eu já estava o dia inteiro quebrando cabeça com o Vim, fui preguiçoso (sim, contraditório rsrsrs) e preferi a outra opção.

_**NOTA DE REVISÂO: Enquanto estava revisando post fui pesquisar sobre como se configura conforme a documentação do Debian orienta. Achei um ótimo material sobre diretórios .d no link https://www.redhat.com/sysadmin/etc-configuration-directories_

2. **Compilando a partir do repositório do gitHub**: este, meus amigos, foi bem demorado. A sorte é que o repositório do Vim tinha um passo-a-passo explicando tudo direitinho. Então, é bem simples: abrir o repositório e seguir o que é falado, geralmente copiar e colar linhas. Percebemos que o repositório é cheio de arquivos com extensão .c, no qual descobrimos que o software é escrito todo em C. Razão pela qual é tão leve!

Depois posso até fazer outro post ensinando o passo-a-passo, até porque o tutorial está todo em inglês. 

Feito isso, lá vamos nós de novo rodar o Vim, dessa vez sem mensagens de erro antes da execução, mas ao abrir, apareceu outra mensagem de erro:

```
client coc abnormal exit with 1
```
Pensei comigo "poxa, to aqui o dia inteiro atualizando o Vim para acontecer isso?". Fui pesquisar na internet de novo sobre o erro. Até que vi que alguém compartilhou o log do aplicativo. Me acendeu uma ideia! Tinha que olhar o log e ia saber exatamente qual era o erro!

Fui verificar qual o comando para abrir o log ou onde este fica salvo. Os comandos são os seguintes:
```
:CocInfo
:CocOpenLog
```
No meu caso, só bastou o *:CocInfo* para saber: **meu nodeJS não estava na versão mais atualizada**. Como já percorri todo o processo com o Vim, estava fácil: Entrei no site do NodeJS e fui até a página de instalação. Fui na opção Unix/Linux 64-bit (conforme configuração do meu processador/OS), fui redirecionado para um repositório no gitHub. Apenas vi a opção que se encaixava em meu computador e segui as instruções. Finalmente consegui fazer tudo rodar normalmente, só não terminei de configurar meu Vim.

Essa historinha toda só foi para mostrar que o Linux não é para pessoas preguiçosas, mas, ao mesmo tempo, ele te dá as informações que você precisa para poder prosseguir no sistema. Quando não é assim, não tem outra: só sentando e pesquisando na internet mesmo, mas como eu sou obcecado por resolução de problemas, para mim é como passatempo mesmo!

Aos programadores que usam Windows, sugiro dar uma chance ao Linux, pois acredito ser uma opção extremamente recomendável!