├── ft_utils └── ft-discord-links │ ├── icons │ ├── icon-128.png │ └── icon-48.png │ ├── manifest.json │ ├── README.md │ └── content.js ├── LICENSE ├── .github └── workflows │ └── sync-to-gitlab.yml └── README.md /ft_utils/ft-discord-links/icons/icon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zelhajou/ft_cursus/HEAD/ft_utils/ft-discord-links/icons/icon-128.png -------------------------------------------------------------------------------- /ft_utils/ft-discord-links/icons/icon-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zelhajou/ft_cursus/HEAD/ft_utils/ft-discord-links/icons/icon-48.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2025 zelhajou 2 | 3 | All rights reserved. 4 | 5 | This README and portfolio documentation is made available for viewing and reference purposes only. 6 | No permission is granted to copy, reproduce, modify, or use any part of this content for personal 7 | portfolios, resumes, or other similar purposes. 8 | 9 | You may view and learn from this content, but you may not present it as your own work or use it 10 | as a template for your own portfolio. -------------------------------------------------------------------------------- /ft_utils/ft-discord-links/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 3, 3 | "name": "42 Discord Profile Links", 4 | "version": "1.0", 5 | "description": "Adds intra profile links to Discord usernames", 6 | "permissions": [], 7 | "content_scripts": [ 8 | { 9 | "matches": ["https://discord.com/*"], 10 | "js": ["content.js"] 11 | } 12 | ], 13 | "icons": { 14 | "48": "icons/icon-48.png", 15 | "128": "icons/icon-128.png" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ft_utils/ft-discord-links/README.md: -------------------------------------------------------------------------------- 1 | # 42 Discord Profile Links 2 | 3 | Adds quick access links to 42 intra profiles directly from Discord usernames. 4 | 5 | ## Installation 6 | 7 | 1. Download this folder as a zip from there [link](https://mega.nz/file/2MxXiaTI#uXjJkI2QyShHlOxndxFtTPflZ2eaJH04q1ydOa59X2I) and extract it 8 | 2. Open Chrome/Brave and go to `chrome://extensions/` 9 | 3. Enable "Developer mode" in the top right 10 | 4. Click "Load unpacked" 11 | 5. Select the folder containing the extension files 12 | 6. The extension is now installed! 13 | 14 | ## Features 15 | 16 | ![Screen_Shot_2024-12-23_at_9 19 24_PM](https://github.com/user-attachments/assets/dcb2a88c-b950-4af7-9dae-e481e7092e71) 17 | 18 | - Adds intra profile links next to usernames in Discord 19 | - Works in 1337 Discord server 20 | - Easy access to profiles with one click 21 | 22 | ## Usage 23 | 24 | Once installed, you'll see 🔗 links next to usernames in Discord. Click them to open the corresponding intra profile. 25 | -------------------------------------------------------------------------------- /ft_utils/ft-discord-links/content.js: -------------------------------------------------------------------------------- 1 | function addIntraLinks() { 2 | // For usernames in brackets 3 | document.querySelectorAll('.defaultColor_a595eb').forEach(element => { 4 | if (element.dataset.modified) return; 5 | element.dataset.modified = 'true'; 6 | 7 | const name = element.textContent; 8 | const logins = name.match(/\[(.*?)\]/g); 9 | 10 | if (logins && logins.length > 0) { 11 | // Get the last bracketed text 12 | const lastLogin = logins[logins.length - 1].match(/\[(.*?)\]/)[1]; 13 | addLink(element, lastLogin); 14 | } 15 | }); 16 | 17 | // For guild nicknames in mutual servers 18 | document.querySelectorAll('.guildNick_c5a773').forEach(element => { 19 | if (element.dataset.modified) return; 20 | element.dataset.modified = 'true'; 21 | 22 | const name = element.textContent; 23 | const serverName = element.closest('.listRowContent_d2d6cb')?.querySelector('.listName_d2d6cb')?.textContent; 24 | 25 | if (serverName === '1337') { 26 | // Get all bracketed texts and use the last one 27 | const logins = name.match(/\[(.*?)\]/g); 28 | if (logins && logins.length > 0) { 29 | // Extract the last login from brackets 30 | const lastLogin = logins[logins.length - 1].match(/\[(.*?)\]/)[1]; 31 | addLink(element, lastLogin); 32 | } else { 33 | // If no brackets, use the nickname itself as the login 34 | const cleanName = name.replace(/[^\w\s-]/g, '').trim(); 35 | addLink(element, cleanName); 36 | } 37 | } 38 | }); 39 | } 40 | 41 | function addLink(element, username) { 42 | const link = document.createElement('a'); 43 | link.href = `https://profile.intra.42.fr/users/${username}`; 44 | link.innerHTML = ' 🔗'; 45 | link.target = '_blank'; 46 | link.style.color = '#5865F2'; 47 | link.style.textDecoration = 'none'; 48 | link.onclick = e => { 49 | e.preventDefault(); 50 | e.stopPropagation(); 51 | window.open(link.href, '_blank'); 52 | }; 53 | element.appendChild(link); 54 | } 55 | 56 | new MutationObserver(() => addIntraLinks()) 57 | .observe(document.body, { 58 | childList: true, 59 | subtree: true 60 | }); 61 | 62 | addIntraLinks(); -------------------------------------------------------------------------------- /.github/workflows/sync-to-gitlab.yml: -------------------------------------------------------------------------------- 1 | name: Backup to GitLab 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | - master 8 | schedule: 9 | - cron: "0 2 * * *" 10 | 11 | jobs: 12 | backup: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout repository 16 | uses: actions/checkout@v3 17 | with: 18 | fetch-depth: 0 19 | 20 | - name: Setup GitLab Backup 21 | env: 22 | GITLAB_TOKEN: ${{ secrets.GITLAB_TOKEN }} 23 | GITLAB_URL: ${{ secrets.GITLAB_URL }} 24 | GITLAB_NAMESPACE: ${{ secrets.GITLAB_NAMESPACE }} 25 | run: | 26 | # Configure git 27 | git config --global user.name "github-actions[bot]" 28 | git config --global user.email "github-actions[bot]@users.noreply.github.com" 29 | 30 | # Extract repository name 31 | REPO_NAME=${GITHUB_REPOSITORY#*/} 32 | 33 | # Function to get project ID 34 | get_project_id() { 35 | curl -s --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ 36 | "https://${GITLAB_URL}/api/v4/projects/${GITLAB_NAMESPACE}%2F${REPO_NAME}" | \ 37 | jq -r '.id' 38 | } 39 | 40 | # Function to configure project settings 41 | configure_project() { 42 | local project_id=$1 43 | echo "Configuring project settings..." 44 | 45 | # Configure project settings 46 | curl -s --request PUT \ 47 | --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ 48 | --header "Content-Type: application/json" \ 49 | --data '{ 50 | "only_allow_merge_if_pipeline_succeeds": false, 51 | "allow_merge_on_skipped_pipeline": true, 52 | "restrict_user_defined_variables": false 53 | }' \ 54 | "https://${GITLAB_URL}/api/v4/projects/${project_id}" 55 | 56 | # Remove all existing branch protection 57 | curl -s --request DELETE \ 58 | --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ 59 | "https://${GITLAB_URL}/api/v4/projects/${project_id}/protected_branches/main" 60 | 61 | # Add updated branch protection 62 | curl -s --request POST \ 63 | --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ 64 | --header "Content-Type: application/json" \ 65 | --data '{ 66 | "name": "main", 67 | "push_access_level": 40, 68 | "merge_access_level": 40, 69 | "unprotect_access_level": 40, 70 | "allow_force_push": true 71 | }' \ 72 | "https://${GITLAB_URL}/api/v4/projects/${project_id}/protected_branches" 73 | } 74 | 75 | # Get or create project 76 | PROJECT_ID=$(get_project_id) 77 | 78 | if [ "$PROJECT_ID" = "null" ] || [ -z "$PROJECT_ID" ]; then 79 | echo "Creating new project..." 80 | curl -s --request POST \ 81 | --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ 82 | --header "Content-Type: application/json" \ 83 | --data "{ 84 | \"name\": \"${REPO_NAME}\", 85 | \"path\": \"${REPO_NAME}\", 86 | \"visibility\": \"private\", 87 | \"initialize_with_readme\": false 88 | }" \ 89 | "https://${GITLAB_URL}/api/v4/projects" 90 | 91 | sleep 5 # Wait for project creation 92 | PROJECT_ID=$(get_project_id) 93 | fi 94 | 95 | echo "Project ID: $PROJECT_ID" 96 | 97 | # Configure project settings 98 | configure_project "$PROJECT_ID" 99 | 100 | # Setup and push to GitLab 101 | echo "Setting up Git remote..." 102 | GITLAB_REPO_URL="https://oauth2:${GITLAB_TOKEN}@${GITLAB_URL}/${GITLAB_NAMESPACE}/${REPO_NAME}.git" 103 | git remote add gitlab "$GITLAB_REPO_URL" || git remote set-url gitlab "$GITLAB_REPO_URL" 104 | 105 | echo "Fetching from GitLab..." 106 | git fetch gitlab || true 107 | 108 | echo "Pushing to GitLab..." 109 | # Push all branches except HEAD ref 110 | for branch in $(git branch -r | grep 'origin/' | grep -v 'origin/HEAD'); do 111 | branch_name=${branch#origin/} 112 | git push -f gitlab "$branch:refs/heads/$branch_name" 113 | done 114 | 115 | # Push all tags 116 | git push -f gitlab refs/tags/*:refs/tags/* 117 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ## Hey! 👋 3 | 4 | This is where I keep all my coding projects from my time at [42](https://42.fr/en/homepage/). I'm studying at [1337](https://1337.ma/en/) (part of the [42](https://42.fr/en/homepage/) Network) and I'm learning everything from scratch - starting with C programming and working my way up to building entire web apps. 5 | 6 | What makes 42 different is there are no teachers and no lectures. Instead, you figure things out on your own, work on real projects, and learn alongside other students. Every project has to go through peer reviews (we call them "corrections") before you can move forward. It's intense, but it's a great way to learn how to code and solve problems. 7 | 8 | In this repo, you'll find my progress through the whole curriculum - from basic stuff like coding my own C library to more complex projects like building web servers and creating full-stack applications. Each project taught me something new about computer science and software development. 9 | 10 |
11 | 12 | 15 |
16 | 17 | ## Table of Contents 18 | 19 | - 📚 [Curriculum](#curriculum) 20 | - 🚀 [Projects](#projects) 21 | - 💻 [Core Programming Fundamentals](#core-programming-fundamentals) 22 | - 🐧 [Unix & System Programming](#unix--system-programming) 23 | - 🔍 [Algorithms & Data Structures](#algorithms--data-structures) 24 | - 🎨 [Computer Graphics](#computer-graphics) 25 | - 🌐 [Network Programming](#network-programming) 26 | - 🧩 [Object-Oriented Programming](#object-oriented-programming) 27 | - ☁️ [DevOps & Cloud](#devops--cloud) 28 | - 🏗️ [Full-Stack Development](#full-stack-development) 29 | - 🏆 [Achievement Summary](#achievement-summary) 30 | - 🗺️ [Project Progression Map](#project-progression-map) 31 | - 💡 [Personal Projects](#personal-projects) 32 | - 🛠️ [Skills](#skills) 33 | - 📊 [Stats](#stats) 34 | - 📝 [Blogs and Articles](#blogs-and-articles) 35 | - 📚 [Bookshelf](#bookshelf) 36 | - 📞 [Contact](#contact) 37 | 38 | 39 | ## Curriculum 40 | 41 | The 42 curriculum is structured like a galaxy of projects, organized in concentric circles from basic to advanced: 42 | 43 | **Inner Circle (Common Core)** 44 | - Begins with fundamental C programming 45 | - Projects increase in complexity as you progress 46 | - At certain points, you can choose between different projects: 47 | - For example, between graphics projects (FdF/fract-ol) or Unix projects (minitalk/pipex) 48 | - Some levels offer multiple project options, where you only need to complete one to progress 49 | - All mandatory phases must be completed to finish the common core 50 | -Required for activities like internships and student exchange 51 | 52 | **Outer Treks** 53 | - A collection of diverse project trails available after the inner circle 54 | - Covers various specialization areas: 55 | 56 | - Operating Systems 57 | - Web Development 58 | - Graphics 59 | - Network & System Administration 60 | - And more... 61 | 62 | These tracks allow students to specialize in their preferred areas of software development and computer science. 63 | 64 | 65 | 66 | 67 | ![holygraph](https://github.com/user-attachments/assets/9277770f-346a-4292-9f04-e0c2698b8a0f) 68 | 69 | 70 | **Note**: The Holy Graph visualization above maps the complete curriculum structure. The turquoise nodes indicate completed projects, while grey nodes represent projects yet to be tackled. Each connection line shows the prerequisites needed to unlock the next project, with some levels offering multiple paths to choose from. 71 | 72 | ## Projects 73 | 80 | 81 | The following table lists the projects I've completed as part of the 42 Cursus. Each project is linked to its repository, where you can find the project's description, requirements, and my implementation. 82 | 83 | 84 | ### Core Programming Fundamentals 85 | 86 | 87 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 111 | 112 | 113 | 114 | 122 | 123 | 124 | 129 | 130 | 131 | 139 | 140 | 141 | 142 | 151 | 152 | 153 | 154 | 162 | 163 | 164 | 169 | 170 | 171 | 179 | 180 | 181 | 182 | 191 | 192 | 193 | 194 | 202 | 203 | 204 | 209 | 210 | 211 | 219 | 220 | 221 |
88 |
89 | 90 | #### Foundation Phase 91 | 92 | 93 |
94 |
ProjectDetails
104 |
105 | 106 | libft 107 | 110 |
Objective: Create a custom C library implementing standard functions and additional utilities
Implementation: 115 |
    116 |
  • Memory functions (malloc, free, memset, memcpy)
  • 117 |
  • String operations (strlen, strcpy, strcat, split)
  • 118 |
  • List management (linked list creation and manipulation)
  • 119 |
  • Character utilities (isalpha, isdigit, toupper, tolower)
  • 120 |
121 |
Technical Stack:
125 | 126 | 127 | 128 |
Key Learnings: 132 |
    133 |
  • Low-level memory management
  • 134 |
  • Data structure implementation
  • 135 |
  • Pointer manipulation
  • 136 |
  • Code modularization
  • 137 |
138 |
143 |
144 | 145 | ft_printf 146 | 149 |
150 |
Objective: Recreate the printf function with core format specifiers and various flags
Implementation: 155 |
    156 |
  • Format specifiers (%c, %s, %p, %d, %i, %u, %x, %X)
  • 157 |
  • Flag handling (width, precision, alignment)
  • 158 |
  • Buffer management for efficient string handling
  • 159 |
  • Error detection and input validation
  • 160 |
161 |
Technical Stack:
165 | 166 | 167 | 168 |
Key Learnings: 172 |
    173 |
  • Variadic functions implementation
  • 174 |
  • String formatting algorithms
  • 175 |
  • Type conversion techniques
  • 176 |
  • Memory optimization strategies
  • 177 |
178 |
183 |
184 | 185 | get_next_line 186 | 189 |
190 |
Objective: Develop a function that reads lines from file descriptors
Implementation: 195 |
    196 |
  • File descriptor handling and management
  • 197 |
  • Static variable utilization
  • 198 |
  • Buffer management and optimization
  • 199 |
  • Memory leak prevention
  • 200 |
201 |
Technical Stack:
205 | 206 | 207 | 208 |
Key Learnings: 212 |
    213 |
  • File operations and I/O handling
  • 214 |
  • Memory management techniques
  • 215 |
  • Static variable usage
  • 216 |
  • Buffer optimization strategies
  • 217 |
218 |
222 | 223 | 224 | 225 | ### Unix & System Programming 226 | 227 | 228 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 253 | 254 | 255 | 256 | 264 | 265 | 266 | 271 | 272 | 273 | 281 | 282 | 283 | 284 | 294 | 295 | 296 | 297 | 305 | 306 | 307 | 312 | 313 | 314 | 322 | 323 | 324 | 325 | 335 | 336 | 337 | 338 | 346 | 347 | 348 | 353 | 354 | 355 | 363 | 364 | 365 | 366 | 375 | 376 | 377 | 378 | 386 | 387 | 388 | 393 | 394 | 395 | 403 | 404 | 405 |
229 |
230 | 231 | #### System Administration & Process Management 232 | 233 | 234 |
235 |
ProjectDetails
245 |
246 | 247 | Born2beroot 248 | 251 |
252 |
Objective: Set up and configure a secure Linux server with strict rules
Implementation: 257 |
    258 |
  • System administration and security setup
  • 259 |
  • User and group management
  • 260 |
  • Service configuration (SSH, UFW, sudo)
  • 261 |
  • System monitoring script development
  • 262 |
263 |
Technical Stack:
267 | 268 | 269 | 270 |
Key Learnings: 274 |
    275 |
  • Linux system administration
  • 276 |
  • Security policy implementation
  • 277 |
  • Service management
  • 278 |
  • System monitoring and maintenance
  • 279 |
280 |
285 |
286 | 287 | Minitalk 288 | 289 | 291 | 292 |
293 |
Objective: Create a client-server communication system using UNIX signals
Implementation: 298 |
    299 |
  • Signal handling (SIGUSR1, SIGUSR2)
  • 300 |
  • Bit manipulation for data transfer
  • 301 |
  • Client-server architecture
  • 302 |
  • Error handling and recovery
  • 303 |
304 |
Technical Stack:
308 | 309 | 310 | 311 |
Key Learnings: 315 |
    316 |
  • Inter-process communication
  • 317 |
  • Signal handling mechanisms
  • 318 |
  • Binary data transmission
  • 319 |
  • Process synchronization
  • 320 |
321 |
326 |
327 | 328 | Philosophers 329 | 330 | 332 | 333 |
334 |
Objective: Solve the dining philosophers problem using threads and mutexes
Implementation: 339 |
    340 |
  • Thread creation and management
  • 341 |
  • Mutex implementation for resource control
  • 342 |
  • Deadlock prevention strategies
  • 343 |
  • Performance optimization
  • 344 |
345 |
Technical Stack:
349 | 350 | 351 | 352 |
Key Learnings: 356 |
    357 |
  • Concurrent programming concepts
  • 358 |
  • Thread synchronization techniques
  • 359 |
  • Resource sharing management
  • 360 |
  • Race condition prevention
  • 361 |
362 |
367 |
368 | 369 | Minishell 370 | 373 |
374 |
Objective: Create a basic shell interpreter similar to bash
Implementation: 379 |
    380 |
  • Command parsing and lexical analysis
  • 381 |
  • Process creation and management
  • 382 |
  • Built-in command implementation
  • 383 |
  • Signal handling and environment management
  • 384 |
385 |
Technical Stack:
389 | 390 | 391 | 392 |
Key Learnings: 396 |
    397 |
  • Shell program architecture
  • 398 |
  • Process control and execution
  • 399 |
  • Environment variable handling
  • 400 |
  • Collaborative development
  • 401 |
402 |
406 | 407 | 408 | 409 | ### Algorithms & Data Structures 410 | 411 | 412 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 436 | 437 | 438 | 439 | 447 | 448 | 449 | 454 | 455 | 456 | 464 | 465 | 466 |
413 |
414 | 415 | #### Algorithm Implementation & Optimization 416 | 417 | 418 |
419 |
ProjectDetails
429 |
430 | 431 | Push_swap 432 | 434 |
435 |
Objective: Develop an efficient sorting algorithm using two stacks with limited operations
Implementation: 440 |
    441 |
  • Custom sorting algorithm development
  • 442 |
  • Stack data structure management
  • 443 |
  • Operation sequence optimization
  • 444 |
  • Algorithm complexity analysis
  • 445 |
446 |
Technical Stack:
450 | 451 | 452 | 453 |
Key Learnings: 457 |
    458 |
  • Algorithm optimization techniques
  • 459 |
  • Stack operations and manipulation
  • 460 |
  • Time complexity analysis
  • 461 |
  • Problem-solving methodologies
  • 462 |
463 |
467 | 468 | 469 | 470 | ### Computer Graphics 471 | 472 | 473 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 497 | 498 | 499 | 500 | 508 | 509 | 510 | 515 | 516 | 517 | 525 | 526 | 527 | 528 | 537 | 538 | 539 | 540 | 548 | 549 | 550 | 555 | 556 | 557 | 565 | 566 | 567 |
474 |
475 | 476 | #### Graphics Programming & Visualization 477 | 478 | 479 |
480 |
ProjectDetails
490 |
491 | 492 | Fract-ol 493 | 495 |
496 |
Objective: Create a graphical program to explore and render various fractals
Implementation: 501 |
    502 |
  • Fractal rendering algorithms (Mandelbrot, Julia)
  • 503 |
  • User input and event handling
  • 504 |
  • Color mapping and gradients
  • 505 |
  • Zoom and navigation features
  • 506 |
507 |
Technical Stack:
511 | 512 | 513 | 514 |
Key Learnings: 518 |
    519 |
  • Graphics programming fundamentals
  • 520 |
  • Complex number mathematics
  • 521 |
  • Event-driven programming
  • 522 |
  • Optimization techniques
  • 523 |
524 |
529 |
530 | 531 | Cub3D 532 | 535 |
536 |
Objective: Develop a 3D game engine using raycasting techniques
Implementation: 541 |
    542 |
  • Raycasting algorithm implementation
  • 543 |
  • Map parsing and validation
  • 544 |
  • Texture mapping and rendering
  • 545 |
  • Player movement and collision detection
  • 546 |
547 |
Technical Stack:
551 | 552 | 553 | 554 |
Key Learnings: 558 |
    559 |
  • 3D graphics fundamentals
  • 560 |
  • Linear algebra application
  • 561 |
  • Game physics basics
  • 562 |
  • Team collaboration
  • 563 |
564 |
568 | 569 | 570 | ### Network Programming 571 | 572 | 573 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 598 | 599 | 600 | 601 | 609 | 610 | 611 | 616 | 617 | 618 | 626 | 627 | 628 | 629 | 639 | 640 | 641 | 642 | 650 | 651 | 652 | 657 | 658 | 659 | 667 | 668 | 669 |
574 |
575 | 576 | #### Network & Protocol Implementation 577 | 578 | 579 |
580 |
ProjectDetails
590 |
591 | 592 | NetPractice 593 | 594 | 596 |
597 |
Objective: Master network configuration and TCP/IP fundamentals
Implementation: 602 |
    603 |
  • IP addressing and subnetting
  • 604 |
  • Network topology design
  • 605 |
  • Routing configuration
  • 606 |
  • Network troubleshooting
  • 607 |
608 |
Technical Stack:
612 | 613 | 614 | 615 |
Key Learnings: 619 |
    620 |
  • Network architecture principles
  • 621 |
  • IP addressing schemes
  • 622 |
  • Subnet calculation
  • 623 |
  • Network diagnostics
  • 624 |
625 |
630 |
631 | 632 | Webserv 633 | 634 | 637 |
638 |
Objective: Build an HTTP/1.1 compliant web server from scratch
Implementation: 643 |
    644 |
  • HTTP protocol implementation
  • 645 |
  • Socket programming and I/O multiplexing
  • 646 |
  • Request/Response handling
  • 647 |
  • CGI execution and configuration
  • 648 |
649 |
Technical Stack:
653 | 654 | 655 | 656 |
Key Learnings: 660 |
    661 |
  • Web server architecture
  • 662 |
  • HTTP protocol internals
  • 663 |
  • Non-blocking I/O
  • 664 |
  • Team collaboration
  • 665 |
666 |
670 | 671 | 672 | 673 | ### Object-Oriented Programming 674 | 675 | 676 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 699 | 700 | 701 | 702 | 714 | 715 | 716 | 723 | 724 | 725 | 737 | 738 |
677 |
678 | 679 | #### Modern C++ Development 680 | 681 | 682 |
683 |
ProjectDetails
691 |
692 | 693 | CPP Modules
(00-09)
694 |
695 | 697 |
698 |
Objective: Master fundamental and advanced C++ concepts, OOP principles, and Standard Template Library utilization
Implementation: 703 |
    704 |
  • Classes and objects implementation
  • 705 |
  • Inheritance and polymorphism
  • 706 |
  • Memory management in C++
  • 707 |
  • Operator overloading
  • 708 |
  • Template programming
  • 709 |
  • STL containers and algorithms
  • 710 |
  • Exception handling
  • 711 |
  • Design patterns
  • 712 |
713 |
Technical Stack:
717 | 718 | 719 | 720 | 721 | 722 |
Key Learnings: 726 |
    727 |
  • Object-oriented design principles
  • 728 |
  • Class implementation techniques
  • 729 |
  • C++ memory management
  • 730 |
  • SOLID principles
  • 731 |
  • Advanced template techniques
  • 732 |
  • STL container usage
  • 733 |
  • Error handling strategies
  • 734 |
  • Generic programming concepts
  • 735 |
736 |
739 | 740 | 741 | ### DevOps & Cloud 742 | 743 | 744 | 752 | 753 | 754 | 755 | 756 | 757 | 758 | 759 | 760 | 769 | 770 | 771 | 772 | 780 | 781 | 782 | 788 | 789 | 790 | 798 | 799 | 800 |
745 |
746 | 747 | #### Container Orchestration & Deployment 748 | 749 | 750 |
751 |
ProjectDetails
761 |
762 | 763 | Inception 764 | 765 | 767 |
768 |
Objective: Set up a complete containerized web infrastructure using Docker
Implementation: 773 |
    774 |
  • Multi-container application setup
  • 775 |
  • Docker network and volume configuration
  • 776 |
  • Service orchestration (NGINX, WordPress, MariaDB)
  • 777 |
  • Custom Docker image creation
  • 778 |
779 |
Technical Stack:
783 | 784 | 785 | 786 | 787 |
Key Learnings: 791 |
    792 |
  • Container orchestration
  • 793 |
  • Service configuration management
  • 794 |
  • Network security implementation
  • 795 |
  • Infrastructure as Code principles
  • 796 |
797 |
801 | 802 | 803 | 804 | ### Full-Stack Development 805 | 806 | 807 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 834 | 835 | 836 | 837 | 846 | 847 | 848 | 854 | 855 | 856 | 864 | 865 | 866 |
808 |
809 | 810 | #### Web Development & Real-Time Applications 811 | 812 | 813 |
814 |
ProjectDetails
824 |
825 | 826 | ft_transcendence 827 | 828 | 832 |
833 |
Objective: Create a full-stack web application featuring real-time multiplayer game and social features
Implementation: 838 |
    839 |
  • Single-page application development
  • 840 |
  • Real-time game and chat system
  • 841 |
  • OAuth 2.0 authentication
  • 842 |
  • RESTful API design
  • 843 |
  • Tournament and matchmaking system
  • 844 |
845 |
Technical Stack:
849 | 850 | 851 | 852 | 853 |
Key Learnings: 857 |
    858 |
  • Full-stack application architecture
  • 859 |
  • Real-time communication protocols
  • 860 |
  • User authentication and security
  • 861 |
  • Database design and management
  • 862 |
863 |
867 | 868 | ### Achievement Summary 869 |
870 | 871 | #### Project Statistics 872 | 873 | 874 | 875 | 876 | 877 | #### Exam Achievements 878 | 879 | 880 | 881 | 882 | 883 |
884 | 885 | ### Project Progression Map 886 | 887 |
888 | 889 | [![](https://mermaid.ink/img/pako:eNqFVW1r2zAQ_ivGo98cSJymTfNh0DZ09ENXQweDOSXI9snWKktGkpuG0v8-vdlxHEYSsE738tzpdHf6DHNeQLgKS4GaKvi13rBA_y4uggfesgIpwlmQVEiCE0iFhEpfzPc1mEy-B5RkWKX2--pULG1ljSBM4RSrraNOFEpG0xLUlsGH2lLC4EQj44LFGQjOVXp3oL1eH-wjI4ogGtwJxPIqSLh254TOswunldVW7lCTJh31eqJUEw2F6Fv65AmvokM9Bjlmd2ajuH6YrJJcBogVwS0tuSCqqmWQIFV51x2ehcEC5YrT9MGsE069c8-2KnmbzYv0Xn_X4yy87KWCOkgE17dZ65DKgaMuQneKilAu08QuvKlAyC4VltWfSVZAqc2FpcYef4LacfF27GlwZxaHgWrMAUgOqTZIPO2xBlKrvYNMgnhPf7t17PE5-ws6Nc-CAFNQjA5og3RpappZep8kwXQ6mV56FMPspLGTLibTm7GP2-Jdl5EBF9x4k07iI7MARMsb0xzpY0cdfMTHKiP0B8J0pXpox-1VraHSRSxzYAVotumeI8bJpau97pzSO6dIyjXgoACMWqoCTChdfcM35h9JJfgbrL7N53NPT3akUNUqbj5G9jmvax2OM4cZXmDozafxclnMziEgXe2d-zks8KK3v85mGMXn7KUrZo-ANca0RwB8lU-n5xDKrvn8KZZ4AYckxHBdzM9GwVyBd2HkcAl5D5HHs-UiO5uIrpp8GAVc46seYzGLC7T8D8ahIpuG7h0kyAG-m5SRm1-RGUbu4oYqhwljrmQoGTRq1I2HyA2A6NBN7iKGdn4cRXYU9WkeagyaOuraxqdyqGb6MTINE_UdEB0Ve5-8MAprEDUihX6rPg3GJlQV1LAJV5r05b4JN-xLq6JW8Zc9y8OVEi1EoeBtWXWbttHPGqwJMkOyYzaI_eFcbzGiUu-hIIqLJ_c22ify6x8BCmNU?type=png)](https://mermaid.live/edit#pako:eNqFVW1r2zAQ_ivGo98cSJymTfNh0DZ09ENXQweDOSXI9snWKktGkpuG0v8-vdlxHEYSsE738tzpdHf6DHNeQLgKS4GaKvi13rBA_y4uggfesgIpwlmQVEiCE0iFhEpfzPc1mEy-B5RkWKX2--pULG1ljSBM4RSrraNOFEpG0xLUlsGH2lLC4EQj44LFGQjOVXp3oL1eH-wjI4ogGtwJxPIqSLh254TOswunldVW7lCTJh31eqJUEw2F6Fv65AmvokM9Bjlmd2ajuH6YrJJcBogVwS0tuSCqqmWQIFV51x2ehcEC5YrT9MGsE069c8-2KnmbzYv0Xn_X4yy87KWCOkgE17dZ65DKgaMuQneKilAu08QuvKlAyC4VltWfSVZAqc2FpcYef4LacfF27GlwZxaHgWrMAUgOqTZIPO2xBlKrvYNMgnhPf7t17PE5-ws6Nc-CAFNQjA5og3RpappZep8kwXQ6mV56FMPspLGTLibTm7GP2-Jdl5EBF9x4k07iI7MARMsb0xzpY0cdfMTHKiP0B8J0pXpox-1VraHSRSxzYAVotumeI8bJpau97pzSO6dIyjXgoACMWqoCTChdfcM35h9JJfgbrL7N53NPT3akUNUqbj5G9jmvax2OM4cZXmDozafxclnMziEgXe2d-zks8KK3v85mGMXn7KUrZo-ANca0RwB8lU-n5xDKrvn8KZZ4AYckxHBdzM9GwVyBd2HkcAl5D5HHs-UiO5uIrpp8GAVc46seYzGLC7T8D8ahIpuG7h0kyAG-m5SRm1-RGUbu4oYqhwljrmQoGTRq1I2HyA2A6NBN7iKGdn4cRXYU9WkeagyaOuraxqdyqGb6MTINE_UdEB0Ve5-8MAprEDUihX6rPg3GJlQV1LAJV5r05b4JN-xLq6JW8Zc9y8OVEi1EoeBtWXWbttHPGqwJMkOyYzaI_eFcbzGiUu-hIIqLJ_c22ify6x8BCmNU) 890 | 891 |
892 | 893 | 894 | 895 | 896 |
897 | 898 | 899 | ## Personal Projects 900 | 901 | 902 | 910 | 911 | 912 | 913 | 914 | 915 | 916 | 917 | 918 | 925 | 926 | 927 | 928 | 936 | 937 | 938 | 943 | 944 | 945 | 953 | 954 | 955 | 956 | 957 | 964 | 965 | 966 | 967 | 975 | 976 | 977 | 983 | 984 | 985 | 993 | 994 | 995 | 996 | 1003 | 1004 | 1005 | 1006 | 1014 | 1015 | 1016 | 1021 | 1022 | 1023 | 1029 | 1030 | 1031 | 1032 |
903 |
904 | 905 | #### 42 Community Tools & Educational Resources 906 | 907 | 908 |
909 |
ProjectDetails
919 |
920 | 921 | pmerge-me-visualizer 922 | 923 |
924 |
Objective: A web application that visualizes the Ford-Johnson (merge-insert) sorting algorithm
Implementation: 929 |
    930 |
  • Step-by-step algorithm visualization
  • 931 |
  • Interactive controls for algorithm speed and data input
  • 932 |
  • Educational explanations for each phase
  • 933 |
  • Comparison with other sorting algorithms
  • 934 |
935 |
Technical Stack:
939 | 940 | 941 | 942 |
Key Learnings: 946 |
    947 |
  • Algorithm visualization techniques
  • 948 |
  • Interactive data presentations
  • 949 |
  • Advanced sorting algorithm implementation
  • 950 |
  • Educational content development
  • 951 |
952 |
958 |
959 | 960 | 42Recall 961 | 962 |
963 |
Objective: A spaced repetition flashcard application designed specifically for 42 School students to enhance their learning journey
Implementation: 968 |
    969 |
  • Spaced repetition algorithm optimized for programming concepts
  • 970 |
  • 42-specific content covering the core curriculum
  • 971 |
  • Progress tracking and retention metrics
  • 972 |
  • Mobile-friendly interface for on-the-go learning
  • 973 |
974 |
Technical Stack:
978 | 979 | 980 | 981 | 982 |
Key Learnings: 986 |
    987 |
  • Educational application design principles
  • 988 |
  • OAuth integration with 42's API
  • 989 |
  • Memory retention algorithms
  • 990 |
  • User experience optimization for learning
  • 991 |
992 |
997 |
998 | 999 | 42term 1000 | 1001 |
1002 |
Objective: Generate beautiful terminal-style widgets to showcase 42 school achievements on GitHub and other platforms
Implementation: 1007 |
    1008 |
  • Dynamic widget generation API
  • 1009 |
  • Custom styling options with terminal aesthetics
  • 1010 |
  • Integration with 42 API for real-time data
  • 1011 |
  • Multiple widget types (projects, stats, skills)
  • 1012 |
1013 |
Technical Stack:
1017 | 1018 | 1019 | 1020 |
Key Learnings: 1024 |
    1025 |
  • API development and service architecture
  • 1026 |
  • Dynamic SVG generation
  • 1027 |
1028 |
1033 | 1034 | 1035 | ## Skills 1036 | 1043 | 1044 | 1045 | 1048 | 1049 | ### 🔧 Programming & Development 1050 | - **Languages:** C, C++, Bash, HTML/CSS, JavaScript 1051 | - **Core Skills:** Memory management, data structures, algorithms, OOP 1052 | - **Tools:** Git, Make, Docker, GDB, Valgrind 1053 | - **Environments:** VSCode, Vim, Emacs, Linux, macOS 1054 | 1055 | ### 💻 System & Network 1056 | - **System Programming:** Process management, IPC, threading, memory optimization 1057 | - **Network:** Socket programming, HTTP/TCP/IP, web server development 1058 | - **Security:** System hardening, SSH, firewall configuration, authentication 1059 | 1060 | ### 🎮 Graphics & Mathematics 1061 | - **Graphics:** Raycasting, 3D rendering, game physics, collision detection 1062 | - **Mathematical:** Fractal computation, complex number operations, optimization 1063 | 1064 | ### 🐳 DevOps & Web 1065 | - **Containerization:** Docker, service configuration, container orchestration 1066 | - **Web Development:** Full-stack applications, REST APIs, WebSockets 1067 | - **Databases:** PostgreSQL, MariaDB, data modeling 1068 | 1069 | ### 🛠️ Professional Practice 1070 | - **Development:** Code review, documentation, debugging, testing 1071 | - **Collaboration:** Team projects, pair programming, project management 1072 | - **Problem Solving:** Algorithm design, optimization, architectural planning 1073 | 1074 |
1075 | 1076 | | C | C++ | Linux | Ubuntu | Apple | Bash | Git | VSCode | 1077 | |-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------| 1078 | | ![C](https://skillicons.dev/icons?i=c) | ![C++](https://skillicons.dev/icons?i=cpp) | ![Linux](https://skillicons.dev/icons?i=linux) | ![Ubuntu](https://skillicons.dev/icons?i=ubuntu) | ![Apple](https://skillicons.dev/icons?i=apple) | ![Bash](https://skillicons.dev/icons?i=bash) | ![Git](https://skillicons.dev/icons?i=git) | ![VSCode](https://skillicons.dev/icons?i=vscode) | 1079 | | **Vim** | **Emacs** | **Markdown** | **LaTeX** | **Docker** | **GitHub** | **Figma** | **HTML** | 1080 | | ![Vim](https://skillicons.dev/icons?i=vim) | ![Emacs](https://skillicons.dev/icons?i=emacs) | ![Markdown](https://skillicons.dev/icons?i=md) | ![LaTeX](https://skillicons.dev/icons?i=latex) | ![Docker](https://skillicons.dev/icons?i=docker) | ![GitHub](https://skillicons.dev/icons?i=github) | ![Figma](https://skillicons.dev/icons?i=figma) | ![HTML](https://skillicons.dev/icons?i=html) | 1081 | | **CSS** | **JavaScript** | **Nginx** | **Python** | **Django** | **PostgreSQL**| **Redis** | **React** | 1082 | | ![CSS](https://skillicons.dev/icons?i=css) | ![JavaScript](https://skillicons.dev/icons?i=javascript) | ![Nginx](https://skillicons.dev/icons?i=nginx) | ![Python](https://skillicons.dev/icons?i=python) | ![Django](https://skillicons.dev/icons?i=django) | ![PostgreSQL](https://skillicons.dev/icons?i=postgres) | ![Redis](https://skillicons.dev/icons?i=redis) | ![React](https://skillicons.dev/icons?i=react) | 1083 | | **Tailwind** | | | | | | | | 1084 | | ![Tailwind](https://skillicons.dev/icons?i=tailwind) | | | | | | | | 1085 | 1086 |
1087 | 1088 | ## Stats 1089 | 1090 | **42 Stats** 1091 | 1092 |
1093 | 1094 | ![zelhajou's 42 stats](https://badge.mediaplus.ma/binary/zelhajou) 1095 | 1096 |
1097 | 1098 | **GitHub Stats** 1099 | 1100 |
1101 | 1102 | | | | 1103 | |:-:|:-:| 1104 | 1105 |
1106 | 1107 | ## Blogs and Articles 1108 | 1109 | These are some of the blogs and articles I've written about my experiences at 42 and other topics related to computer science and programming. 1110 | 1111 | - [Building the 42-School Minitalk Project: A Guide to UNIX Signal-Based Communication in C](https://medium.com/@aaaikrz/building-the-42-school-minitalk-project-a-guide-to-unix-signal-based-communication-in-c-d11605643747) 1112 | 1113 | ## Bookshelf 1114 | 1115 | These are some of the books I've read or plan to read to deepen my knowledge in computer science, programming, and other subjects. 1116 | 1117 | | **Name**| **Description**| **Category** | **Image** | 1118 | | --------- | --------- | --------- | --------- | 1119 | | The Linux Programming Interface-Michael Kerrisk | A comprehensive guide to system programming on the Linux platform by Michael Kerrisk. Covers system calls, libraries, and more. | Computer System-level Programming | | 1120 | | Advanced Programming in the Linux Environment | Explores advanced topics in Linux programming, offering insights into system calls, libraries, and techniques for efficient software development. | Computer System-level Programming | | 1121 | | Operating System Concepts | A classic textbook on operating system principles and concepts, providing a foundational understanding of OS design and functionality. | Computer System-level Programming | | 1122 | | Networking Essentials - A CompTIA Network+ N10-008 Textbook | Provides comprehensive coverage of essential networking concepts and technologies required for CompTIA Network+ certification exam N10-008. Authored by Jeffrey S. Beasley and Piyasat Nilkaew, this textbook offers detailed explanations and practical examples to help readers understand networking fundamentals.| Computer Networking | | 1123 | | Computer Networks - A Tanenbaum - 5th edition | A comprehensive textbook on computer networking, authored by Andrew S. Tanenbaum, covering a wide range of networking topics including protocols, architectures, and applications. | Computer Networking | | 1124 | | UNIX Network Programming Volume 1, Third Edition: The Sockets Networking API | A classic reference on UNIX network programming, authored by W. Richard Stevens, offering in-depth coverage of the Sockets API and various networking concepts on UNIX-based systems | Computer System-level Programming | | 1125 | 1126 | 1127 | ## Contact 1128 | 1129 | Feel free to reach out to me if you have any questions, suggestions, or just want to chat! 1130 | 1131 | 1132 | Gmail 1133 | 1134 | 1135 | Twitter 1136 | 1137 | 1140 | 1141 | Telegram 1142 | 1143 | 1144 | Instagram 1145 | 1146 | 1147 | 1148 |
1149 | 1150 |
1151 | 1152 |
1153 | 1154 |
1155 | 1156 | ![8rtdcmuc8jk51](https://github.com/user-attachments/assets/6d614260-90e0-43b1-afb7-97f8e8f9f247) 1157 | 1158 |
1159 | 1160 | --- 1161 | © 2025 zelhajou. All rights reserved. This portfolio documentation may not be reproduced or used as a template for personal portfolios. 1162 | --------------------------------------------------------------------------------