ℹ️ Um aplicação de análise e compressão de dados em C
Desafio 🔹 Desenvolvimento 🔹 Como utilizar 🔹 Tecnologias Utilizadas 🔹 Autor
🚧 Em construção
Foi proposto durante essa edição do Labs o desenvolvimento de uma aplicação de análise e compressão de dados. Essa aplicação deve fazer a compressão e descompressão de dados utilizando o algoritmo de Huffman. Importante salientar que há um programa diferente responsável por cada etapa (Encoder, para a compressão, e o Decoder, para a descompressão) e eles devem se comunicar por meio de shared memory.
Para simplificar o desenvolvimento, usei algumas plataformas para me planejar e estruturar meu raciocínio. Uma delas foi o miro, em que criei esse fluxo e o fui moldando ao longo do projeto. Ele resume bem o funcionamento do código:
As possíveis saídas do código não foram colocadas nesse fluxo mas estão muito bem explicitadas em uma função geral de erro, com uma mensagem de erro setada para cada possível erro na execução, facilitando assim, em muito, debugar o código. Vale pontuar ainda o uso do Github Projects, um Kanban, para dividir minhas tarefas for etapas. De Todo à já testado:
O desenvolvimento contou ainda com boas pesquisas sobre os mais variados temas: Algoritmo de Huffman, Shared Memory, Semáforos, Ordenação de Lista, Manipulação de Árvores, Bit arrays e Producer-Consumer Problem. Destaco ainda a importância da colaboração com a comunidade da 42, tanto no Discordo quanto algumas aparições presencialmente para discutir código e possíveis implementações.
Dado o prazo do projeto, acredito que fiz um bom progresso, mas caso tivesse mais tempo, tenho algumas ideias do que trabalharia no programa:
- Implementar um bom algorimo de ordenação para a lista de frequência.
- A partir de um certo tamanho de árvore, criar múltiplas threads para fazer a busca dos nós e posteriormente setar os códigos de cada char.
- Uma biblioteca compartilhada para os programas.
- Funções de erro com saídas mais detalhadas.
- Uma forma mais eficiente de transmitir informações por shared memory.
- Clone o repositório
git clone https://github.com/42sp/42labs-selection-process-v4-augustobecker
- Após isso rode
make
no diretório que acabou de clonar, a aplicação será compilada em ambos os programas (Encoder e Decoder), gerando dois executáveis. Para utilizar a aplicação escreva no terminal./encoder/encoder
junto de um ou mais arquivos de texto para serem comprimidos e ao fim adicione & (para o processo rodar em segundo plano). Você pode testar com um sample_file que deixei ali para isso.
./encoder/encoder <file.txt> <...> &
3.Logo em seguida, escreva no terminal ./decoder/decoder
./decoder/decoder
Após a execução dos comandos a aplicação será iniciada, e o segundo executável é chamado pelo encoder. Ao fim, os seguintes dados são printados no terminal: O Dado descomprimido, a quantidade de bytes totais, a quantidade de bytes comprimidos e o tempo da operação de descompressão.
Tecnologia | Descrição |
---|---|
C | Linguagem utilizada para o dessenvolvimento do projeto. |
Vscode | Editor de texto. |
Makefile | Utilizado para automatizar o processo de compilação de aplicações chamando o compilador e informando as "regras" de compilação. |
Git/GitHub | Utilizado para fazer o versionamento de arquivos e armazenamento. |
Github Projects | Utilizado para separar o processo de desenvolvimento em etapas e ajudar na organização. |
Miro | Uma plataforma de lousa interativa digital utilizada para desenhar o fluxo do código. |