Logging

Introdução Um log de erros é um arquivo de texto que registra a cronologia de eventos que ocorrem em um sistema operacional, aplicativo ou serviço. Esses registros são essenciais para monitoramento, auditoria, segurança e correção de problemas. Desde o momento em que o sistema operacional é iniciado, os primeiros logs começam a ser gravados, registrando informações como data, horário, carregamento do kernel e possíveis erros ou ações excepcionais executadas. Os logs de erro são valiosos para desenvolvedores e administradores, pois fornecem insights sobre falhas e exceções durante a execução de programas, permitindo a identificação e resolução de problemas....

8 set. 2024 · 5 minutos · 1030 palavras · danieltak

Ponteiro Nulo - NULL e nullptr

Introdução Neste post eu irei explicar o que é um ponteiro nulo no C++ e se devemos usar o NULL ou nullptr? TL;DR; use a palavra-chave nullptr no C++11 ou posterior, mesmo que o NULL seja um typedef para o nullptr. Até o C++11 o ponteiro nulo era usado como um valor igual a 0 (ou NULL, sempre #definido como zero) nem era um tipo de ponteiro. Isso pode levar a alguns problemas em alguns casos, para isso o tipo std::nullptr_t foi introduzido....

21 mar. 2024 · 4 minutos · 829 palavras · danieltak

Enviar Sinal para Pthread ou Processo

Introdução Se você deseja enviar um sinal para um thread, você pode usar pthread_kill(), embora não seja semanticamente correto, a página man7 afirma: A função pthread_kill() envia o sinal sig para thread, um thread no mesmo processo que o chamador. O sinal é direcionado de forma assíncrona ao thread. Se sig for 0, nenhum sinal será enviado, mas a verificação de erros ainda será realizada. Vivo ou Morto? Thread Um código para obter o sinal de uma thread e verificar se a thread está “viva”:...

10 mar. 2024 · 4 minutos · 718 palavras · danieltak

Um Estudo sobre o Tempo

Introdução O tempo parece tão simples e trivial, mas ao mesmo tempo um conceito complexo e relativo. Desde muito tempo atrás o estudo sobre o tempo é realizado, na faculdade fiz um resumo do estudo de Aristóteles sobre o tempo, e até os dias de hoje as pessoas ainda debatem sobre o estudo dele e de muitos outros que vieram posteriormente. Mas e no C++? Neste post explicarei um pouco sbre a biblioteca STL do C++ std::chrono, num post anterior expliquei sobre o tempo no Linux....

3 mar. 2024 · 15 minutos · 3008 palavras · danieltak

Quebra de Texto num Widget de Table usando QWidget

Introdução O word wrapping automático do Qt utilizando alguns flags funcionava corretamente na classe QTableWidget, porém outras propriedades não eram atendidas ao usar a classe padrão, para personalizar e contornar os delegates podem ser usados. Pela minha experiência, o QTableWidget é muito limitado, para um widget tão complexo como a tabela, dificilmente você criará uma classe que atenderá à todos requisitos de tabelas de um projeto inteiro e eventualmente você precisará criar um delegate para implementar funcionalidades personalizadas....

27 fev. 2024 · 8 minutos · 1526 palavras · danieltak

QML Singleton

Introdução No QML muitas vezes é necessário o acesso global à variáveis e funções, isso pode ser alcançado com um padrão de projeto Singleton. Um exemplo é a configuração global de um software, que além de ser acessado por qualquer janela, deve também salvar os dados de configuração em algum arquivo. O Singleton é um padrão de projeto criacional que permite a você garantir que uma classe tenha apenas uma instância, enquanto provê um ponto de acesso global para essa instância....

16 fev. 2024 · 6 minutos · 1210 palavras · danieltak

Tempo no Linux

Introdução No POSIX o time.h pode ser utilizado ou a chamada de sistema time(). Este post falará brevemente com alguns snippets sobre como alterar a data e hora no Linux POSIX. Estruturas de Tempo O time_t é o tipo aritmético capaz de representar tempos. Embora não esteja definido, esse é quase sempre um valor integral (mas pode ser floating point) que contém o número de segundos (sem contar os segundos bissextos) desde 00:00, 1º de janeiro de 1970 UTC, correspondente à Era POSIX....

15 fev. 2024 · 4 minutos · 677 palavras · danieltak

Maximizar e Minimizar Janelas Qt no X11

Introdução Este post explicará como fazer um snippet de uma aplicação no Qt, utilizando o C++ e a biblioteca do X11. O sistema operacional Linux deve utilizar o protocolo X11. Me deparei com este problema, pois o sistema embarcado não possui barra de tarefas, portanto, não é possível minimizar e maximizar da maneira convencional e alguns hotkeys bindings foram utilizados para maximizar e minimizar a aplicação principal. O que é o X11?...

11 fev. 2024 · 3 minutos · 451 palavras · danieltak

XML parser

Introdução Libxml2 é um XML C parser e toolkit desenvolvido pelo projeto Gnome. Libxml2 é conhecida por ser muito portátil, a biblioteca deve ser construída e funcionar sem problemas sérios em uma variedade de sistemas (Linux, Unix, Windows, CygWin, MacOS, RISC Os, OS/2, VMS, QNX, MVS, …). Portanto, este XML parser é universal e pode ser utilizado em diversos casos. Tutoriais: http://www.xmlsoft.org/examples/ https://gnome.pages.gitlab.gnome.org/libxml2/tutorial/ https://gnome.pages.gitlab.gnome.org/libxml2/examples/ Repositório: https://github.com/GNOME/libxml2 Espelho do Repositório: https://gitlab.gnome.org/GNOME/libxml2 SAX vs DOM vs pull parser TL;DR; Use um analisador DOM ou pull com arquivos menores que caibam na RAM....

7 fev. 2024 · 12 minutos · 2471 palavras · danieltak

Alinhamento, Preenchimento e Empacotamento de Estruturas de Dados

O que é? O alinhamento de estruturas de dados é a forma que um dado é organizado e acessado na memória do computador. E pode ser organizado em três temas: Data alignment - alinhamento de dados Data structure padding - preenchimento da estrutura de dados Data structure packing - empacotamento da estrutura de dados Alinhamento Na maioria dos cenários, você nunca precisa se preocupar com o alinhamento porque o alinhamento padrão já é ideal....

6 fev. 2024 · 7 minutos · 1489 palavras · danieltak