Skip to content

augustobecker/42Labs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Desafio Labs - 4 Edição - @42sp

ℹ️ Um aplicação de análise e compressão de dados em C

Desafio 🔹 Desenvolvimento 🔹 Como utilizar 🔹 Tecnologias Utilizadas 🔹 Autor

🚧 Em construção

Desafio

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.

Desenvolvimento da Aplicação

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.

Como Utilizar a Aplicação

Execução da Aplicação

  1. Clone o repositório
git clone https://github.com/42sp/42labs-selection-process-v4-augustobecker
  1. 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.

Tecnologias Utilizadas

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.

Autor

Augusto Becker | acesar-l | 🇧🇷👨‍🚀

👋 Contato: