Este repositório tem o intuito de reunir minha trajetória pela 42, apresentando os projetos, desafios, e experiências ao longo da minha jornada no Core Curriculum.
A Ecole 42 é uma renomada escola de programação e inovação, sem fins lucrativos, que oferece uma abordagem revolucionária de aprendizado. Sem professores ou aulas tradicionais, a 42 se baseia em aprendizado peer-to-peer, onde os alunos colaboram para superar desafios em um ambiente intensivo e imersivo. A Ecole 42 tem valores como autonomia, aprendizado colaborativo e resolução prática de problemas.
- Objetivo: O NetPractice é um projeto voltado para o aprendizado prático de redes de computadores. O desafio consiste em configurar e solucionar cenários de redes, trabalhando com endereçamento IP, roteamento, sub-redes, máscaras, NAT, e regras de firewall. O aluno deve entender como os dispositivos se comunicam.
- Habilidades:
Endereçamento IPsubnettingroteamento estáticoconfiguração de dispositivos de rede
- Objetivo: Criar um interpretador de linha de comando funcional similar ao bash, com capacidades de executar comandos, gerenciar processos, manipular variáveis de ambiente e oferecer funcionalidades avançadas como redirecionamento, pipes e controle de sinais..
- Habilidades:
Parsing e análise léxica/sintáticaGerenciamento de processos (fork, exec, wait)Pipes e redirecionamento de I/OManipulação de variáveis de ambienteTratamento de sinais (SIGINT, SIGQUIT)Implementação de built-ins (echo, cd, pwd, export, unset, env, exit)Expansão de variáveisGerenciamento de memória dinâmicaControle de fluxo e estruturas condicionaisReadline para interface interativa
- Objetivo: O projeto Philosophers é um exercício de programação voltado ao estudo e à aplicação prática de conceitos de concorrência e sincronização em sistemas operacionais. Inspirado no clássico problema dos "Filósofos Jantando", o projeto busca implementar uma solução eficiente e segura para gerenciar o acesso concorrente a recursos limitados (garfos) por múltiplas threads (filósofos), evitando condições de corrida (race conditions), deadlocks e fomes (starvation), e garantindo a integridade do sistema durante a execução simultânea das threads.
- Habilidades:
Programação concorrente e paralelaPrevenção de deadlocks e starvationevitar deadlocksSincronização com mutexes e controle de acesso a recursos críticosCriação e gerenciamento de threadsUso de estruturas de monitoramento para detectar estados críticosManipulação precisa de tempo com gettimeofday, usleep e controle de tempo absoluto
- Objetivo: Desenvolver um jogo 2D simples, no estilo de um labirinto, onde o jogador deve coletar itens e alcançar a saída do mapa. O projeto foca na leitura e validação de mapas, movimentação do personagem e renderização gráfica utilizando a MLX42, uma biblioteca gráfica baseada em OpenGL.
- Habilidades:
Gerenciamento de Memórialeitura de arquivosvalidação de mapaseventos de tecladológica de jogorenderização com MLX42controle de janelasdepuração e tratamento de erros
- Objetivo: O objetivo deste projeto é criar um programa que ordena uma pilha de números inteiros, utilizando duas pilhas auxiliares e um conjunto limitado de operações. O desafio é encontrar a sequência de operações mais eficiente para ordenar a pilha, minimizando o número de movimentos necessários.
- Habilidades:
Algoritmosestruturas de dadospilhasordenamento
- Objetivo: Criar um interpretador de linha de comando (shell) funcional, similar ao bash. O projeto visa implementar um shell que seja capaz de executar comandos, gerenciar processos, manipular variáveis de ambiente, e oferecer funcionalidades avançadas como redirecionamento de entrada/saída, pipes, expansão de variáveis, e controle de sinais. O Minishell deve interpretar e executar comandos de forma interativa, fornecendo uma interface robusta entre o usuário e o sistema operacional.
- Habilidades:
Parsing e análise léxica/sintáticaGerenciamento de processos (fork, exec, wait)Pipes e redirecionamento de I/OManipulação de variáveis de ambienteTratamento de sinais (SIGINT, SIGQUIT)Implementação de built-ins (echo, cd, pwd, export, unset, env, exit)Expansão de variáveis e wildcardsGerenciamento de memória dinâmicaControle de fluxo e estruturas condicionaisReadline para interface interativa
- Objetivo: Criar um programa que simula o comportamento do comando pipe do shell, permitindo o encadeamento de comandos. O programa deve ser capaz de: -Redirecionar a saída de um comando para a entrada de outro, utilizando as chamadas de sistema pipe e fork. - Executar múltiplos comandos em um pipeline, passando a saída de um comando como entrada para o próximo. - Utilizar execve para executar os comandos no sistema operacional. - Gerenciar arquivos de entrada e saída, manipulando-os com as funções de abertura, leitura, escrita e fechamento. - Garantir que o programa não tenha falhas de memória e que erros sejam tratados de maneira eficiente, seguindo as boas práticas de programação.
- Habilidades:
Compreensão do funcionamento de processos no sistema operacionalUso de pipes e redirecionamento de dadosGerenciamento de arquivos e I/OExecução de comandos com execveControle de erros e tratamento de falhasGerenciamento de memóriaCompreensão de chamadas de sistema: Conhecimento prático de funções de baixo nível do sistema, como pipe, fork, wait, execve, dup2, exit, entre outras.
- Objetivo: Este projeto introduz os conceitos de virtualização e administração de sistemas. O objetivo é configurar e administrar uma máquina virtual com um sistema operacional Linux, focando em práticas como a instalação e configuração de um ambiente de desenvolvimento.
- Habilidades:
VirtualizaçãoLinuxadministração de sistemas e redes
- Objetivo: Este projeto visa recriar a função
printfda biblioteca padrão C, implementando a formatação de strings de maneira personalizada. O desafio é trabalhar com diferentes tipos de dados e criar uma implementação eficiente e segura.- Habilidades:
Manipulação de stringsvariáveis de argumentocontrole de saída
- Objetivo: O projeto Libft consiste em criar uma biblioteca de funções essenciais em C, que inclui funções de manipulação de strings, memória, listas encadeadas, e outros utilitários que são comumente usados em projetos subsequentes na 42.
- Habilidades:
Programação em Cmanipulação de memórialistas e estruturas de dados básicas









