Muratmirsad / 42

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

42 Projects

Go to (english) Part 1 (00 - 02) | Part 2 (03 - 04) | Part 3 (05 - 06)

Kısayol (türkçe) Bölüm 1 (00 - 02) | Bölüm 2 (03 - 04) | Bölüm 3 (05 - 06)

----- PART 1 -----

  • Goal: Create your own standard C library (including functions for strings, memory, lists, etc.) from scratch.

  • Technologies: C

  • Learning Outcomes: Deep understanding of how fundamental C functions work. Ability to design and implement your own data structures and algorithms.

  • Goal: Set up and configure a Debian server from scratch using command line and basic system administration skills.

  • Technologies: Linux, Bash, system administration tools

  • Learning Outcomes: Understanding the basics of server administration (users, permissions, network, services). Learning the steps to create a secure server environment.

  • Goal: Create a custom version of the popular printf function in C.

  • Technologies: C, variadic functions

  • Learning Outcomes: Understanding how variadic functions work. Writing a function that can handle format specifiers and different data types.

  • Goal: Write a function that can read data from any file line by line, paying attention to memory management.

  • Technologies: C, file operations, static variables

  • Learning Outcomes: Learning to use buffering and static variables to optimize file reading operations. Implementing careful memory management to prevent memory leaks.

  • Goal: Write a program that sends simple text messages between two processes using UNIX signals (SIGUSR1 and SIGUSR2).

  • Technologies: C, UNIX signals, bitwise operations

  • Learning Outcomes: Understanding the basics of inter-process communication and how signals are used. Gaining the ability to encode and decode data by manipulating bits.

  • Goal: Develop an algorithm to sort a given array of numbers using a limited set of commands (swap, push, rotate).

  • Technologies: C, algorithm design, data structures (stack)

  • Learning Outcomes: Ability to analyze and compare the complexity of sorting algorithms. Ability to solve complex problems using the stack data structure.

  • Goal: Develop a simple 2D game using the minilibx library.

  • Technologies: C, minilibx, basic game programming

  • Learning Outcomes: Ability to create a graphical user interface (GUI) and manage user interaction. Understanding basic game programming concepts like game loop, sprites, and simple physics.

----- PART 2 -----

  • Goal: Create a simulation using threads and mutexes to solve the "Dining Philosophers" problem.

  • Technologies: C, threads (pthreads), mutexes, synchronization

  • Learning Outcomes: Understanding the basics of threads and parallel programming. Learning synchronization techniques to prevent race conditions and deadlocks. Gaining experience in resource management and sharing.

  • Goal: Write a simple shell program that mimics the basic features of the Bash shell (command execution, pipelines, redirections).

  • Technologies: C, process management (fork, execve), signals, file descriptors

  • Learning Outcomes: Understanding the operating system's process management mechanisms. Gaining the ability to parse command line arguments and manage processes. Using signals and file descriptors to enable communication between processes.

  • Goal: Engage in practical exercises about network protocols and concepts.

  • Technologies: Network protocols (TCP/IP, UDP, ICMP), packet capture tools (Wireshark)

  • Learning Outcomes: Understanding the different layers of the network (application, transport, network, link) and how protocols interact. Gaining the ability to analyze network traffic and troubleshoot problems.

  • Goal: Develop a game that renders a 3D world map in a 2D perspective using the raycasting technique.

  • Technologies: C, minilibx, raycasting, mathematics (trigonometry)

  • Learning Outcomes: Learning the basic principles of 3D graphics and the raycasting algorithm. Using mathematical calculations to represent a 3D world on a 2D plane. Managing player movement and perspective changes.

  • Goal: Learn and practice the basic features of the C++ language (object-oriented programming, templates, STL).

  • Technologies: C++, object-oriented programming (OOP), templates, Standard Template Library (STL)

  • Learning Outcomes: Understanding the differences between C++ and C and the advantages it offers. Learning OOP concepts such as classes, objects, inheritance, polymorphism. Writing more generic and reusable code using templates and STL.

----- PART 3 -----

  • Goal: Learn and apply advanced topics in C++ (operator overloading, exception handling, smart pointers).

  • Technologies: C++, operator overloading, exception handling (try-catch), smart pointers (shared_ptr, unique_ptr)

  • Learning Outcomes: Writing more customized code using the flexibility and expressiveness offered by C++. Handling errors more safely with exception handling. Automating memory management and preventing memory leaks with smart pointers.

  • Goal: Create a web server environment consisting of Nginx, MariaDB, and WordPress using Docker.

  • Technologies: Docker, Nginx, MariaDB, WordPress, web server administration

  • Learning Outcomes: Learning the basics and usage of Docker, a containerization technology. Easily managing a complex system running different software with Docker. Gaining experience in web server administration and configuration.

  • Goal: Develop a chat client using the Internet Relay Chat (IRC) protocol.

  • Technologies: C++, network programming (sockets), IRC protocol

  • Learning Outcomes: Understanding the basics of network programming and how sockets are used. Learning the structure and commands of the IRC protocol. Making a chat client functional by creating a user interface.

----- BÖLÜM 1 -----

  • Amaç: C dilinde kendi standart kütüphanenizi (string, memory, liste, vb. fonksiyonları içeren) sıfırdan oluşturmak.

  • Teknolojiler: C

  • Öğrenme Çıktıları: Temel C fonksiyonlarının nasıl çalıştığının derinlemesine anlaşılması. Kendi veri yapılarını ve algoritmalarını tasarlama ve uygulama becerisi.

  • Amaç: Komut satırı ve temel sistem yönetimi becerilerini kullanarak sıfırdan bir Debian sunucu kurmak ve yapılandırmak.

  • Teknolojiler: Linux, Bash, sistem yönetimi araçları

  • Öğrenme Çıktıları: Sunucu yönetiminin temellerini anlamak (kullanıcılar, izinler, ağ, servisler). Güvenli bir sunucu ortamı oluşturmak için gereken adımları öğrenmek.

  • Amaç: C dilindeki popüler printf fonksiyonunun özelleştirilmiş bir versiyonunu oluşturmak.

  • Teknolojiler: C, değişken argümanlı fonksiyonlar

  • Öğrenme Çıktıları: Değişken argümanlı fonksiyonların nasıl çalıştığını anlamak. Format belirleyicileri ve farklı veri türlerini işleyebilen bir fonksiyon yazmak.

  • Amaç: Dosyaları satır satır okuyabilen, bellek yönetimine dikkat eden bir fonksiyon yazmak.

  • Teknolojiler: C, dosya işlemleri, statik değişkenler

  • Öğrenme Çıktıları: Dosya okuma işlemlerini optimize etmek için tamponlama ve statik değişkenlerin kullanımını öğrenmek. Bellek sızıntılarını önlemek için dikkatli bellek yönetimi uygulamak.

  • Amaç: UNIX sinyallerini (SIGUSR1 ve SIGUSR2) kullanarak iki işlem arasında basit metin mesajları gönderen bir program yazmak.

  • Teknolojiler: C, UNIX sinyalleri, bit işlemleri

  • Öğrenme Çıktıları: İşlemler arası iletişimin temellerini ve sinyallerin nasıl kullanıldığını anlamak. Bit düzeyinde manipülasyon yaparak verileri kodlama ve çözme becerisi kazanmak.

  • Amaç: Verilen bir sayı dizisini sınırlı sayıda komut (swap, push, rotate) kullanarak sıralamak için bir algoritma geliştirmek.

  • Teknolojiler: C, algoritma tasarımı, veri yapıları (stack)

  • Öğrenme Çıktıları: Sıralama algoritmalarının karmaşıklığını analiz etme ve karşılaştırma becerisi. Yığın veri yapısını kullanarak karmaşık problemleri çözme yeteneği.

  • Amaç: minilibx kütüphanesini kullanarak basit bir 2D oyun geliştirmek.

  • Teknolojiler: C, minilibx, oyun programlama temelleri

  • Öğrenme Çıktıları: Grafiksel kullanıcı arayüzü (GUI) oluşturma ve kullanıcı etkileşimini yönetme becerisi. Oyun döngüsü, sprite'lar ve basit fizik gibi temel oyun programlama kavramlarını anlamak.

----- BÖLÜM 2 -----

  • Amaç: "Dining Philosophers" problemini (yemek yiyen filozoflar problemi) çözmek için threadler (iş parçacıkları) ve mutexler (karşılıklı dışlama) kullanarak bir simülasyon oluşturmak.

  • Teknolojiler: C, threadler (pthreads), mutexler, senkronizasyon

  • Öğrenme Çıktıları: Threadler ve paralel programlamanın temellerini anlamak. Yarış durumlarını (race conditions) ve kilitlenmeleri (deadlocks) önlemek için senkronizasyon tekniklerini öğrenmek. Kaynak yönetimi ve paylaşımı konularında deneyim kazanmak.

  • Amaç: Bash kabuğunun temel özelliklerini (komut yürütme, pipeline'lar, yönlendirmeler) taklit eden basit bir kabuk programı yazmak.

  • Teknolojiler: C, process yönetimi (fork, execve), sinyaller, dosya tanımlayıcıları

  • Öğrenme Çıktıları: İşletim sisteminin süreç yönetimi mekanizmalarını anlamak. Komut satırı argümanlarını ayrıştırma ve işlemleri yönetme becerisi kazanmak. Sinyaller ve dosya tanımlayıcıları kullanarak işlemler arası iletişim sağlamak.

  • Amaç: Ağ protokolleri ve kavramları hakkında uygulamalı alıştırmalar yapmak.

  • Teknolojiler: Ağ protokolleri (TCP/IP, UDP, ICMP), paket yakalama araçları (Wireshark)

  • Öğrenme Çıktıları: Ağın farklı katmanlarını (application, transport, network, link) ve protokollerin nasıl etkileşimde bulunduğunu anlamak. Ağ trafiğini analiz etme ve sorunları giderme becerisi kazanmak.

  • Amaç: Raycasting tekniğini kullanarak bir 3D dünya haritasını 2D bir perspektifte görüntüleyen bir oyun geliştirmek.

  • Teknolojiler: C, minilibx, raycasting, matematik (trigonometri)

  • Öğrenme Çıktıları: 3D grafiklerin temel prensiplerini ve raycasting algoritmasını öğrenmek. Matematiksel hesaplamaları kullanarak 3D dünyayı 2D düzlemde temsil etmek. Oyuncu hareketini ve perspektif değişikliklerini yönetmek.

  • Amaç: C++ dilinin temel özelliklerini (nesne yönelimli programlama, şablonlar, STL) öğrenmek ve pratik yapmak.

  • Teknolojiler: C++, nesne yönelimli programlama (OOP), şablonlar, Standart Şablon Kütüphanesi (STL)

  • Öğrenme Çıktıları: C++'ın C'den farklarını ve sağladığı avantajları anlamak. Sınıflar, nesneler, kalıtım, çok biçimlilik gibi OOP kavramlarını öğrenmek. Şablonlar ve STL kullanarak daha genel ve yeniden kullanılabilir kod yazmak.

----- BÖLÜM 3 -----

  • Amaç: C++ dilindeki ileri düzey konuları (operatör aşırı yükleme, istisna yönetimi, akıllı işaretçiler) öğrenmek ve uygulamak.

  • Teknolojiler: C++, operatör aşırı yükleme, istisna yönetimi (try-catch), akıllı işaretçiler (shared_ptr, unique_ptr)

  • Öğrenme Çıktıları: C++ dilinin sunduğu esnekliği ve ifade gücünü kullanarak daha özelleştirilmiş kod yazmak. İstisna yönetimi ile hataları daha güvenli bir şekilde ele almak. Akıllı işaretçiler ile bellek yönetimini otomatikleştirmek ve bellek sızıntılarını önlemek.

  • Amaç: Docker kullanarak Nginx, MariaDB ve WordPress'ten oluşan bir web sunucusu ortamı oluşturmak.

  • Teknolojiler: Docker, Nginx, MariaDB, WordPress, web sunucusu yönetimi

  • Öğrenme Çıktıları: Konteynerleştirme teknolojisi olan Docker'ın temellerini ve kullanımını öğrenmek. Farklı yazılımları bir arada çalıştıran karmaşık bir sistemi Docker ile kolayca yönetmek. Web sunucusu yönetimi ve yapılandırması konusunda deneyim kazanmak.

  • Amaç: Internet Relay Chat (IRC) protokolünü kullanarak bir sohbet istemcisi geliştirmek.

  • Teknolojiler: C++, ağ programlama (socketler), IRC protokolü

  • Öğrenme Çıktıları: Ağ programlamanın temellerini ve soketlerin nasıl kullanıldığını anlamak. IRC protokolünün yapısını ve komutlarını öğrenmek. Kullanıcı arayüzü oluşturarak bir sohbet istemcisini işlevsel hale getirmek.

old

About


Languages

Language:C 59.5%Language:C++ 23.3%Language:Objective-C 7.0%Language:JavaScript 4.9%Language:Makefile 4.3%Language:HTML 0.6%Language:CSS 0.2%Language:Dockerfile 0.1%Language:Shell 0.1%