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 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 paralela
Prevenção de deadlocks e starvation
evitar deadlocks
Sincronização com mutexes e controle de acesso a recursos críticos
Criação e gerenciamento de threads
Uso de estruturas de monitoramento para detectar estados críticos
Manipulaçã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ória
leitura de arquivos
validação de mapas
eventos de teclado
lógica de jogo
renderização com MLX42
controle de janelas
depuraçã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:
Algoritmos
estruturas de dados
pilhas
ordenamento
- 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 operacional
Uso de pipes e redirecionamento de dados
Gerenciamento de arquivos e I/O
Execução de comandos com execve
Controle de erros e tratamento de falhas
Gerenciamento de memória
Compreensã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ção
Linux
administração de sistemas e redes
- Objetivo: Este projeto visa recriar a função
printf
da 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 strings
variáveis de argumento
controle de saída
- Objetivo: O objetivo desse projeto é criar uma função que leia uma linha de um arquivo ou de um fluxo de entrada (stdin) sem carregar o arquivo inteiro na memória. A função deve ser capaz de lidar com múltiplas chamadas e ler até o final do arquivo ou até encontrar uma linha completa.
- Habilidades:
Manipulação de arquivo
buffers e leitura eficiente de dados
- 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 C
manipulação de memória
listas e estruturas de dados básicas