Reflexões sobre C++
Desenvolvi esse projeto chamado netsys, um software de diagnóstico simples, mas com informações essenciais sobre redes e sistema. É uma ferramenta que não substitui ferramentas mais robustas de gerenciamento do Linux.
$ netsys ------------------------------------------------------------------------------------------------------------------------ System ------------------------------------------------------------------------------------------------------------------------ Uptime: 2 hours, 43 minutes Memory Available: 1.55 GiB | Memory Installed: 7.05 GiB CPU Usage (%): cpu: 1.76 | cpu0: 3.92 | cpu1: 3.00 | cpu2: 2.00 | cpu3: 2.02 | cpu4: 3.03 | cpu5: 1.01 | cpu6: 1.02 | cpu7: 1.98 ------------------------------------------------------------------------------------------------------------------------ Interfaces ------------------------------------------------------------------------------------------------------------------------ ADDRESS BROADCAST INTERFACE MAC STATE VENDOR 192.168.0.8/24 192.168.0.255 wlp2s0 58:02:05:74:d6:7f up AzureWave Technologies, Inc. 127.0.0.1/8 none wlp2s0 58:02:05:74:d6:7f up AzureWave Technologies, Inc. 192.168.0.8/24 192.168.0.255 lo 00:00:00:00:00:00 unknown unknown 127.0.0.1/8 none lo 00:00:00:00:00:00 unknown unknown ----------------------------------------------------------------------------------------------------------------------- Routing Table ----------------------------------------------------------------------------------------------------------------------- DST ADDRESS GATEWAY INTERFACE TABLE 0.0.0.0/0 192.168.0.1 wlp2s0 main 192.168.0.0/24 none wlp2s0 main 127.0.0.0/8 none lo local 127.0.0.1 none lo local 127.255.255.255 none lo local 192.168.0.8 none wlp2s0 local 192.168.0.255 none wlp2s0 local
O motivo por trás deste projeto são dois: primeiro, queria me atualizar no C++, pois já faz tempo desde a útlima vez que trabalhei com essa linguagem (o padrão vigente acho que era o C++98 ainda). O segundo motivo, foi muito guiado pelas minhas necessidades dentro de um projeto que estou trabalhando atualmente.
Nesse projete, algumas das minhas responsabilidades são a programação de um backend e a manutenção dele que roda em um servidor Linux. E para quem trabalha com infra, dentro de um ambiente do cliente, sabe que muita coisa fora do nosso controle pode vir a acontecer como, por exemplo, falhas elétricas, manutenção na infra que faz parte da rotina do cliente, envolvimento de terceiros na gestão da LAN, etc.
Quando acontece algum problema, preciso investigar a causa raíz do problema com base nos sintomas apresentados. Não acho haja um caminho linear para identificar a causa para todo e qualquer tipo de problema. Em algumas ocasiões a primeira suspeita é a causa. Mas em outras, precisamos levantar hipóteses, testar e validar.
Se, por exemplo, o servidor fica offline,
uma das perguntas que me faço é: por que ficou offline? será instabilidade na conexão de internet?
se a conexão estiver ok, então
o servidor tá desligado? se tiver desligado, significa que houve queda de energia? e por mais tempo que o banco
de bateria pode aguentar? houve alguma alteração no endereçamento de rede? rota? etc. As possibilidades
podem ser bem extensas e para ajudar no processo de investigação, utilizo ferramentas
como ip, top, leitura de logs e entre muitos outros recursos.
Mas todos os comandos são executados de forma manual um a um. E sentia falta de uma ferramenta que fosse simples, mas que desse uma fotografia do cenário atual do servidor. Sendo assim, desenvolvi o netsys que é uma ferramenta de diagóstico rápido e não extensivo, não tem nada de extraordinário, mas ele me oferece informações suficientes para eliminar algumas hipóteses, algumas pistas ou, com sorte, para matar logo a charada.
Tudo bem, eu poderia usar sequências de comandos com pipe? Sim, e dessa forma é até mais flexível porque tenho as ferramentas do sistema a minha disposição. Mas lembra do primeiro motivo? Então, experimentei desenvolver essa ferramenta com o C++ moderno e foi uma experiência de muito aprendizado.
Minhas percepções: apesar da linguagem ser criticado por sua complexidade e pelos compiladores gerarem "sujeiras" no código assembly (ou da máquina), acredito que tenha mais coisas boas do que ruins.
O C++ se tornou e vem se tornando uma linguagem cada vez mais robusta com recursos para resolver não
um problema específico, mas para classes de problemas. Recursos como constexpr que
avalia expressões em tempo de compilação (caso contrário, seria avaliado em tempo de execução somente)
é genial, pois tira-se a necessidade executar para então descobrir se o código falha. Ao mesmo tempo,
tira-se um pouco da sobrecarga de execução.