testsAndMisc/python_pkg/byox_ladder/guide-ladder.html
Krzysztof kuhy Rudnicki 6342eaf0e2
Some checks are pending
Pre-commit checks / pre-commit (push) Waiting to run
Python tests / test (push) Waiting to run
feat(byox_ladder): add build-your-own-x difficulty ladder generator
Ranks the codecrafters build-your-own-x projects by difficulty and emits two
offline, self-contained HTML pages: a per-guide ladder (~360 tutorials) and a
per-category ladder (30 categories), grouped into Beginner/Intermediate/Advanced/
Expert tiers plus an Unsorted bucket. A guide inherits its category's tier;
language only nudges order within a tier. Includes a Makefile pipeline
(fetch -> parse -> build) and 100%-branch-covered tests. Excludes the generated
guide page from codespell since it inlines upstream titles verbatim.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Claude-Session: https://claude.ai/code/session_01QNRTPNYvoBTQoTEWkYtCJD
2026-07-17 18:31:21 +02:00

321 lines
95 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Build Your Own X — Guide Ladder</title>
<style>
:root{
--bg:#f4f6f9; --panel:#ffffff; --panel-2:#eef1f6; --border:#dde3ec;
--text:#1a2230; --muted:#5b6676; --faint:#8a94a3;
--accent:#0e7490; --accent-ink:#ffffff; --accent-soft:#0e749014;
--t1:#1a7f37; --t2:#1f6feb; --t3:#9a6700; --t4:#cf222e; --t5:#7a8698;
--t1-soft:#1a7f3714; --t2-soft:#1f6feb14; --t3-soft:#9a670014; --t4-soft:#cf222e14; --t5-soft:#7a869814;
--shadow:0 1px 2px rgba(16,23,38,.05), 0 8px 24px rgba(16,23,38,.05);
--font-display:ui-monospace,"SF Mono","JetBrains Mono",Menlo,Consolas,monospace;
--font-body:system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
}
@media (prefers-color-scheme:dark){
:root{
--bg:#0d1117; --panel:#161b22; --panel-2:#1c232d; --border:#2b333d;
--text:#c9d4e0; --muted:#8b96a5; --faint:#6b7684;
--accent:#38bdf8; --accent-ink:#05202b; --accent-soft:#38bdf814;
--t1:#3fb950; --t2:#58a6ff; --t3:#d29922; --t4:#f85149; --t5:#8b96a5;
--t1-soft:#3fb95016; --t2-soft:#58a6ff16; --t3-soft:#d2992216; --t4-soft:#f8514916; --t5-soft:#8b96a516;
--shadow:0 1px 2px rgba(0,0,0,.4), 0 10px 30px rgba(0,0,0,.3);
}
}
:root[data-theme="light"]{
--bg:#f4f6f9; --panel:#ffffff; --panel-2:#eef1f6; --border:#dde3ec;
--text:#1a2230; --muted:#5b6676; --faint:#8a94a3;
--accent:#0e7490; --accent-ink:#ffffff; --accent-soft:#0e749014;
--t1:#1a7f37; --t2:#1f6feb; --t3:#9a6700; --t4:#cf222e; --t5:#7a8698;
--t1-soft:#1a7f3714; --t2-soft:#1f6feb14; --t3-soft:#9a670014; --t4-soft:#cf222e14; --t5-soft:#7a869814;
--shadow:0 1px 2px rgba(16,23,38,.05), 0 8px 24px rgba(16,23,38,.05);
}
:root[data-theme="dark"]{
--bg:#0d1117; --panel:#161b22; --panel-2:#1c232d; --border:#2b333d;
--text:#c9d4e0; --muted:#8b96a5; --faint:#6b7684;
--accent:#38bdf8; --accent-ink:#05202b; --accent-soft:#38bdf814;
--t1:#3fb950; --t2:#58a6ff; --t3:#d29922; --t4:#f85149; --t5:#8b96a5;
--t1-soft:#3fb95016; --t2-soft:#58a6ff16; --t3-soft:#d2992216; --t4-soft:#f8514916; --t5-soft:#8b96a516;
--shadow:0 1px 2px rgba(0,0,0,.4), 0 10px 30px rgba(0,0,0,.3);
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0; background:var(--bg); color:var(--text); font-family:var(--font-body);
line-height:1.5; font-size:15.5px; letter-spacing:.01em}
a{color:inherit; text-decoration:none}
.wrap{max-width:1180px; margin:0 auto; padding:clamp(20px,4vw,40px) clamp(14px,4vw,36px) 60px}
/* header */
.eyebrow{font-family:var(--font-display); font-size:.7rem; letter-spacing:.2em;
text-transform:uppercase; color:var(--accent); margin:0 0 9px; display:flex; align-items:center; gap:9px}
.eyebrow::before{content:"//"; opacity:.55}
h1{font-family:var(--font-display); font-weight:650; font-size:clamp(1.7rem,4.6vw,2.7rem);
line-height:1.04; letter-spacing:-.01em; margin:0 0 12px; text-wrap:balance}
h1 .x{color:var(--accent)}
.lede{max-width:64ch; color:var(--muted); font-size:1rem; margin:0}
.lede a{color:var(--accent); text-underline-offset:3px; text-decoration:underline}
.note{margin-top:14px; font-size:.86rem; color:var(--faint); max-width:70ch}
.note b{color:var(--muted); font-weight:600}
/* layout */
.layout{display:grid; grid-template-columns:1fr; gap:22px; margin-top:26px}
@media (min-width:860px){ .layout{grid-template-columns:250px 1fr; gap:30px} }
aside{align-self:start}
@media (min-width:860px){ aside{position:sticky; top:18px; max-height:calc(100vh - 34px); overflow-y:auto} }
.ctl{margin-bottom:18px}
.ctl-label{font-family:var(--font-display); font-size:.68rem; letter-spacing:.15em;
text-transform:uppercase; color:var(--faint); margin:0 0 8px}
.field{width:100%; font-family:var(--font-body); font-size:.88rem; color:var(--text);
background:var(--panel); border:1px solid var(--border); border-radius:9px; padding:9px 11px}
select.field{cursor:pointer}
input.field::placeholder{color:var(--faint)}
.chips{display:flex; flex-direction:column; gap:7px}
.chip{display:flex; align-items:center; gap:9px; width:100%; cursor:pointer;
font-family:var(--font-body); font-size:.85rem; text-align:left; color:var(--text);
background:var(--panel); border:1px solid var(--border); border-radius:9px; padding:7px 10px;
transition:background .15s, border-color .15s, opacity .15s}
.chip .dot{width:9px; height:9px; border-radius:3px; flex:none; background:var(--tc)}
.chip .n{margin-left:auto; font-family:var(--font-display); font-size:.74rem; color:var(--muted);
font-variant-numeric:tabular-nums}
.chip[aria-pressed="false"]{opacity:.4; background:transparent}
.chip:hover{border-color:var(--tc)}
.chip:focus-visible,.field:focus-visible,.reset:focus-visible,.row:focus-visible{
outline:2px solid var(--accent); outline-offset:2px}
.reset{background:none; border:none; color:var(--accent); cursor:pointer;
font-family:var(--font-display); font-size:.74rem; letter-spacing:.04em; padding:5px 0}
.count{font-family:var(--font-display); font-size:.75rem; color:var(--faint);
letter-spacing:.03em; margin-top:6px}
.count b{color:var(--text)}
/* list */
main{min-width:0}
.tierhead{display:flex; align-items:center; gap:11px; margin:22px 0 10px; padding-top:4px}
.tierhead:first-child{margin-top:0}
.tierhead .bar{width:26px; height:4px; border-radius:2px; background:var(--tc)}
.tierhead h2{font-family:var(--font-display); font-size:.9rem; letter-spacing:.06em;
text-transform:uppercase; margin:0; color:var(--tc)}
.tierhead .sub{font-size:.78rem; color:var(--faint); margin-left:auto; font-family:var(--font-display)}
.list{display:flex; flex-direction:column; gap:7px}
.row{display:grid; grid-template-columns:1fr auto; align-items:center; gap:10px 14px;
background:var(--panel); border:1px solid var(--border); border-left:4px solid var(--tc);
border-radius:10px; padding:11px 14px; box-shadow:var(--shadow);
transition:transform .12s ease, border-color .12s ease}
.row:hover{transform:translateX(2px); border-color:var(--tc)}
.row .title{font-weight:600; font-size:.96rem; line-height:1.3}
.row:hover .title{color:var(--accent)}
.rowmeta{display:flex; flex-wrap:wrap; align-items:center; gap:6px; margin-top:5px}
.cat{font-family:var(--font-display); font-size:.7rem; color:var(--muted)}
.cat::after{content:"·"; margin-left:6px; color:var(--faint)}
.lang{font-family:var(--font-display); font-size:.68rem; color:var(--faint);
background:var(--panel-2); border-radius:5px; padding:2px 6px; white-space:nowrap}
.vid{font-family:var(--font-display); font-size:.64rem; letter-spacing:.05em; text-transform:uppercase;
color:var(--accent); border:1px solid var(--accent); border-radius:5px; padding:1px 5px}
.badge{font-family:var(--font-display); font-size:.62rem; letter-spacing:.07em; text-transform:uppercase;
color:var(--tc); background:var(--tc-soft); border:1px solid var(--tc); border-radius:999px;
padding:3px 8px; white-space:nowrap; align-self:center}
.empty{color:var(--muted); font-size:.92rem; padding:26px 4px}
footer{margin-top:34px; padding-top:16px; border-top:1px solid var(--border);
font-size:.8rem; color:var(--faint); max-width:74ch}
footer a{color:var(--accent)}
@media (prefers-reduced-motion:reduce){ .row{transition:none} }
</style>
<div class="wrap">
<header>
<p class="eyebrow">codecrafters-io / build-your-own-x</p>
<h1>The Build-Your-Own-<span class="x">X</span> Guide Ladder</h1>
<p class="lede">Every individual tutorial from the
<a href="https://github.com/codecrafters-io/build-your-own-x" target="_blank" rel="noopener">build-your-own-x</a>
collection — <span id="total">0</span> guides across 30 categories — placed on a difficulty
ladder. Search, filter by tier / language / category, and click any guide to open it.</p>
<p class="note"><b>How difficulty is assigned:</b> each guide inherits its category's tier
(a Regex-Engine guide is easier than an OS guide, whatever the language). Language only nudges
the order <i>within</i> a tier — lower-level languages (C, Rust, Asm) sit a little higher than
Python or JS. The <b>Unsorted</b> group is the repo's own uncategorized bucket; its guides span
all levels, so they aren't ranked.</p>
</header>
<div class="layout">
<aside>
<div class="ctl">
<p class="ctl-label">Search</p>
<input id="q" class="field" type="search" placeholder="title, category, language…" autocomplete="off">
</div>
<div class="ctl">
<p class="ctl-label">Sort</p>
<select id="sort" class="field" aria-label="Sort order">
<option value="easy">Difficulty (easy → hard)</option>
<option value="hard">Difficulty (hard → easy)</option>
<option value="az">Title (A → Z)</option>
</select>
</div>
<div class="ctl">
<p class="ctl-label">Tiers</p>
<div class="chips" id="chips"></div>
</div>
<div class="ctl">
<p class="ctl-label">Language</p>
<select id="lang" class="field" aria-label="Filter by language"></select>
</div>
<div class="ctl">
<p class="ctl-label">Category</p>
<select id="cat" class="field" aria-label="Filter by category"></select>
</div>
<button class="reset" id="reset" type="button">reset all filters</button>
<p class="count" id="count"></p>
</aside>
<main id="main"></main>
</div>
<footer>
A per-guide expansion of the category difficulty ladder. Difficulty is a judgment call scored on
category × language; the exact head-to-head order within a tier is approximate by design. Data
mirrors the <a href="https://github.com/codecrafters-io/build-your-own-x" target="_blank" rel="noopener">build-your-own-x</a> README.
</footer>
</div>
<script>
const GUIDES = [{"title":"Create a CLI tool in Javascript","url":"https://citw.dev/tutorial/create-your-own-cli-tool","langs":["Node.js"],"category":"Command-Line Tool","cat_rank":1,"tier":"beginner","video":false,"score":10.3},{"title":"Build a command line app with Go: lolcat","url":"https://flaviocopes.com/go-tutorial-lolcat/","langs":["Go"],"category":"Command-Line Tool","cat_rank":1,"tier":"beginner","video":false,"score":10.55},{"title":"Building a cli command with Go: cowsay","url":"https://flaviocopes.com/go-tutorial-cowsay/","langs":["Go"],"category":"Command-Line Tool","cat_rank":1,"tier":"beginner","video":false,"score":10.55},{"title":"Go CLI tutorial: fortune clone","url":"https://flaviocopes.com/go-tutorial-fortune/","langs":["Go"],"category":"Command-Line Tool","cat_rank":1,"tier":"beginner","video":false,"score":10.55},{"title":"Visualize your local git contributions with Go","url":"https://flaviocopes.com/go-git-contributions/","langs":["Go"],"category":"Command-Line Tool","cat_rank":1,"tier":"beginner","video":false,"score":10.55},{"title":"Writing a stow alternative to manage dotfiles","url":"https://xmonader.github.io/nimdays/day06_nistow.html","langs":["Nim"],"category":"Command-Line Tool","cat_rank":1,"tier":"beginner","video":false,"score":10.6},{"title":"Build Your Own CLI App in Zig from Scratch","url":"https://rebuild-x.github.io/docs/#/./zig/terminal/cli","langs":["Zig"],"category":"Command-Line Tool","cat_rank":1,"tier":"beginner","video":false,"score":10.75},{"title":"Command line apps in Rust","url":"https://rust-cli.github.io/book/index.html","langs":["Rust"],"category":"Command-Line Tool","cat_rank":1,"tier":"beginner","video":false,"score":10.75},{"title":"Writing a Command Line Tool in Rust","url":"https://mattgathu.dev/2017/08/29/writing-cli-app-rust.html","langs":["Rust"],"category":"Command-Line Tool","cat_rank":1,"tier":"beginner","video":false,"score":10.75},{"title":"Build a Reddit Bot","url":"https://pythonforengineers.com/blog/build-a-reddit-bot-part-1/","langs":["Python"],"category":"Bot","cat_rank":2,"tier":"beginner","video":false,"score":20.3},{"title":"Building A Simple AI Chatbot With Web Speech API And Node.js","url":"https://www.smashingmagazine.com/2017/08/ai-chatbot-web-speech-api-node-js/","langs":["Node.js"],"category":"Bot","cat_rank":2,"tier":"beginner","video":false,"score":20.3},{"title":"Create a Discord bot","url":"https://discordjs.guide/","langs":["Node.js"],"category":"Bot","cat_rank":2,"tier":"beginner","video":false,"score":20.3},{"title":"Create a Twitter Bot in Python Using Tweepy","url":"https://medium.freecodecamp.org/creating-a-twitter-bot-in-python-with-tweepy-ac524157a607","langs":["Python"],"category":"Bot","cat_rank":2,"tier":"beginner","video":false,"score":20.3},{"title":"Creating a Simple Facebook Messenger AI Bot with API.ai in Node.js","url":"https://tutorials.botsfloor.com/creating-a-simple-facebook-messenger-ai-bot-with-api-ai-in-node-js-50ae2fa5c80d","langs":["Node.js"],"category":"Bot","cat_rank":2,"tier":"beginner","video":false,"score":20.3},{"title":"Creating Reddit Bot with Python & PRAW","url":"https://www.youtube.com/playlist?list=PLIFBTFgFpoJ9vmYYlfxRFV6U_XhG-4fpP","langs":["Python"],"category":"Bot","cat_rank":2,"tier":"beginner","video":true,"score":20.3},{"title":"gifbot - Building a GitHub App","url":"https://blog.scottlogic.com/2017/05/22/gifbot-github-integration.html","langs":["Node.js"],"category":"Bot","cat_rank":2,"tier":"beginner","video":false,"score":20.3},{"title":"How to build a Slack Bot with Python using Slack Events API & Django under 20 minute","url":"https://medium.com/freehunch/how-to-build-a-slack-bot-with-python-using-slack-events-api-django-under-20-minute-code-included-269c3a9bf64e","langs":["Python"],"category":"Bot","cat_rank":2,"tier":"beginner","video":false,"score":20.3},{"title":"How to Build Your First Slack Bot with Python","url":"https://www.fullstackpython.com/blog/build-first-slack-bot-python.html","langs":["Python"],"category":"Bot","cat_rank":2,"tier":"beginner","video":false,"score":20.3},{"title":"How To Create a Telegram Bot Using Python","url":"https://www.freecodecamp.org/news/how-to-create-a-telegram-bot-using-python/","langs":["Python"],"category":"Bot","cat_rank":2,"tier":"beginner","video":false,"score":20.3},{"title":"How To Make A Reddit Bot","url":"https://www.youtube.com/watch?v=krTUf7BpTc0","langs":["Python"],"category":"Bot","cat_rank":2,"tier":"beginner","video":true,"score":20.3},{"title":"How to make a responsive telegram bot","url":"https://www.sohamkamani.com/blog/2016/09/21/making-a-telegram-bot/","langs":["Node.js"],"category":"Bot","cat_rank":2,"tier":"beginner","video":false,"score":20.3},{"title":"Build A Cryptocurrency Trading Bot with R","url":"https://towardsdatascience.com/build-a-cryptocurrency-trading-bot-with-r-1445c429e1b1","langs":["R"],"category":"Bot","cat_rank":2,"tier":"beginner","video":false,"score":20.4},{"title":"Roll your own IRC bot","url":"https://wiki.haskell.org/Roll_your_own_IRC_bot","langs":["Haskell"],"category":"Bot","cat_rank":2,"tier":"beginner","video":false,"score":20.6},{"title":"A bot for Starcraft in Rust, C or any other language","url":"https://habr.com/en/post/436254/","langs":["Rust"],"category":"Bot","cat_rank":2,"tier":"beginner","video":false,"score":20.75},{"title":"A Template Engine","url":"http://aosabook.org/en/500L/a-template-engine.html","langs":["Python"],"category":"Template Engine","cat_rank":3,"tier":"beginner","video":false,"score":30.3},{"title":"Approach: Building a toy template engine in Python","url":"http://alexmic.net/building-a-template-engine/","langs":["Python"],"category":"Template Engine","cat_rank":3,"tier":"beginner","video":false,"score":30.3},{"title":"How to write a template engine in less than 30 lines of code","url":"http://bits.citrusbyte.com/how-to-write-a-template-library/","langs":["Ruby"],"category":"Template Engine","cat_rank":3,"tier":"beginner","video":false,"score":30.3},{"title":"JavaScript template engine in just 20 lines","url":"http://krasimirtsonev.com/blog/article/Javascript-template-engine-in-just-20-line","langs":["JavaScript"],"category":"Template Engine","cat_rank":3,"tier":"beginner","video":false,"score":30.3},{"title":"Understanding JavaScript Micro-Templating","url":"https://medium.com/wdstack/understanding-javascript-micro-templating-f37a37b3b40e","langs":["JavaScript"],"category":"Template Engine","cat_rank":3,"tier":"beginner","video":false,"score":30.3},{"title":"Build a Collaborative Text Editor Using Rails","url":"https://blog.aha.io/text-editor/","langs":["Ruby"],"category":"Text Editor","cat_rank":4,"tier":"beginner","video":false,"score":40.3},{"title":"Create a Simple Python Text Editor!","url":"http://www.instructables.com/id/Create-a-Simple-Python-Text-Editor/","langs":["Python"],"category":"Text Editor","cat_rank":4,"tier":"beginner","video":false,"score":40.3},{"title":"Python Tutorial: Make Your Own Text Editor","url":"https://www.youtube.com/watch?v=xqDonHEYPgA","langs":["Python"],"category":"Text Editor","cat_rank":4,"tier":"beginner","video":true,"score":40.3},{"title":"Hecto: Build your own text editor in Rust","url":"https://www.flenker.blog/hecto/","langs":["Rust"],"category":"Text Editor","cat_rank":4,"tier":"beginner","video":false,"score":40.75},{"title":"Build Your Own Text Editor","url":"https://viewsourcecode.org/snaptoken/kilo/","langs":["C"],"category":"Text Editor","cat_rank":4,"tier":"beginner","video":false,"score":40.8},{"title":"Designing a Simple Text Editor","url":"http://www.fltk.org/doc-1.1/editor.html","langs":["C++"],"category":"Text Editor","cat_rank":4,"tier":"beginner","video":false,"score":40.8},{"title":"Build GIT - Learn GIT","url":"https://kushagra.dev/blog/build-git-learn-git/","langs":["JavaScript"],"category":"Git","cat_rank":5,"tier":"beginner","video":false,"score":50.3},{"title":"Gitlet","url":"http://gitlet.maryrosecook.com/docs/gitlet.html","langs":["JavaScript"],"category":"Git","cat_rank":5,"tier":"beginner","video":false,"score":50.3},{"title":"Just enough of a Git client to create a repo, commit, and push itself to GitHub","url":"https://benhoyt.com/writings/pygit/","langs":["Python"],"category":"Git","cat_rank":5,"tier":"beginner","video":false,"score":50.3},{"title":"Rebuilding Git in Ruby","url":"https://robots.thoughtbot.com/rebuilding-git-in-ruby","langs":["Ruby"],"category":"Git","cat_rank":5,"tier":"beginner","video":false,"score":50.3},{"title":"ugit: Learn Git Internals by Building Git Yourself","url":"https://www.leshenko.net/p/ugit/","langs":["Python"],"category":"Git","cat_rank":5,"tier":"beginner","video":false,"score":50.3},{"title":"Write yourself a Git!","url":"https://wyag.thb.lt/","langs":["Python"],"category":"Git","cat_rank":5,"tier":"beginner","video":false,"score":50.3},{"title":"Reimplementing \u201cgit clone\u201d in Haskell from the bottom up","url":"http://stefan.saasen.me/articles/git-clone-in-haskell-from-the-bottom-up/","langs":["Haskell"],"category":"Git","cat_rank":5,"tier":"beginner","video":false,"score":50.6},{"title":"Writing a simple shell in Go","url":"https://sj14.gitlab.io/post/2018-07-01-go-unix-shell/","langs":["Go"],"category":"Shell","cat_rank":6,"tier":"intermediate","video":false,"score":60.55},{"title":"Build Your Own Shell using Rust","url":"https://www.joshmcguigan.com/blog/build-your-own-shell-rust/","langs":["Rust"],"category":"Shell","cat_rank":6,"tier":"intermediate","video":false,"score":60.75},{"title":"Build Your Own Shell","url":"https://github.com/tokenrove/build-your-own-shell","langs":["C"],"category":"Shell","cat_rank":6,"tier":"intermediate","video":false,"score":60.8},{"title":"Let's build a shell!","url":"https://github.com/kamalmarhubi/shell-workshop","langs":["C"],"category":"Shell","cat_rank":6,"tier":"intermediate","video":false,"score":60.8},{"title":"Tutorial - Write a Shell in C","url":"https://brennan.io/2015/01/16/write-a-shell-in-c/","langs":["C"],"category":"Shell","cat_rank":6,"tier":"intermediate","video":false,"score":60.8},{"title":"Write a shell in C","url":"https://danishpraka.sh/posts/write-a-shell/","langs":["C"],"category":"Shell","cat_rank":6,"tier":"intermediate","video":false,"score":60.8},{"title":"Writing a UNIX Shell","url":"https://indradhanush.github.io/blog/writing-a-unix-shell-part-1/","langs":["C"],"category":"Shell","cat_rank":6,"tier":"intermediate","video":false,"score":60.8},{"title":"A Simple Web Server","url":"http://aosabook.org/en/500L/a-simple-web-server.html","langs":["Python"],"category":"Web Server","cat_rank":7,"tier":"intermediate","video":false,"score":70.3},{"title":"Build Your Own Web Server From Scratch In JavaScript","url":"https://build-your-own.org/webserver/","langs":["Node.js"],"category":"Web Server","cat_rank":7,"tier":"intermediate","video":false,"score":70.3},{"title":"Building a basic HTTP Server from scratch in Python","url":"http://joaoventura.net/blog/2017/python-webserver/","langs":["Python"],"category":"Web Server","cat_rank":7,"tier":"intermediate","video":false,"score":70.3},{"title":"Building a simple websockets server from scratch in Ruby","url":"http://blog.honeybadger.io/building-a-simple-websockets-server-from-scratch-in-ruby/","langs":["Ruby"],"category":"Web Server","cat_rank":7,"tier":"intermediate","video":false,"score":70.3},{"title":"Implementing a RESTful Web API with Python & Flask","url":"http://blog.luisrei.com/articles/flaskrest.html","langs":["Python"],"category":"Web Server","cat_rank":7,"tier":"intermediate","video":false,"score":70.3},{"title":"Let's code a web server from scratch with NodeJS Streams","url":"https://www.codementor.io/@ziad-saab/let-s-code-a-web-server-from-scratch-with-nodejs-streams-h4uc9utji","langs":["Node.js"],"category":"Web Server","cat_rank":7,"tier":"intermediate","video":false,"score":70.3},{"title":"lets-build-express","url":"https://github.com/antoaravinth/lets-build-express","langs":["Node.js"],"category":"Web Server","cat_rank":7,"tier":"intermediate","video":false,"score":70.3},{"title":"Let\u2019s Build A Web Server.","url":"https://ruslanspivak.com/lsbaws-part1/","langs":["Python"],"category":"Web Server","cat_rank":7,"tier":"intermediate","video":false,"score":70.3},{"title":"Web application from scratch","url":"https://defn.io/2018/02/25/web-app-from-scratch-01/","langs":["Python"],"category":"Web Server","cat_rank":7,"tier":"intermediate","video":false,"score":70.3},{"title":"Writing a webserver in pure PHP","url":"http://station.clancats.com/writing-a-webserver-in-pure-php/","langs":["PHP"],"category":"Web Server","cat_rank":7,"tier":"intermediate","video":false,"score":70.35},{"title":"Writing a Web Server from Scratch","url":"https://www.codeproject.com/Articles/859108/Writing-a-Web-Server-from-Scratch","langs":["C#"],"category":"Web Server","cat_rank":7,"tier":"intermediate","video":false,"score":70.5},{"title":"Building A Python-Based Search Engine","url":"https://www.youtube.com/watch?v=cY7pE7vX6MU","langs":["Python"],"category":"Search Engine","cat_rank":8,"tier":"intermediate","video":true,"score":80.3},{"title":"Building a search engine using Redis and redis-py","url":"http://www.dr-josiah.com/2010/07/building-search-engine-using-redis-and.html","langs":["Python"],"category":"Search Engine","cat_rank":8,"tier":"intermediate","video":false,"score":80.3},{"title":"Building a Vector Space Indexing Engine in Python","url":"https://boyter.org/2010/08/build-vector-space-search-engine-python/","langs":["Python"],"category":"Search Engine","cat_rank":8,"tier":"intermediate","video":false,"score":80.3},{"title":"Finding Important Words in Text Using TF-IDF","url":"https://stevenloria.com/tf-idf/","langs":["Python"],"category":"Search Engine","cat_rank":8,"tier":"intermediate","video":false,"score":80.3},{"title":"Making text search learn from feedback","url":"https://medium.com/filament-ai/making-text-search-learn-from-feedback-4fe210fd87b0","langs":["Python"],"category":"Search Engine","cat_rank":8,"tier":"intermediate","video":false,"score":80.3},{"title":"A search engine in CSS","url":"https://stories.algolia.com/a-search-engine-in-css-b5ec4e902e97","langs":["CSS"],"category":"Search Engine","cat_rank":8,"tier":"intermediate","video":false,"score":80.5},{"title":"A BitTorrent client in Python 3.5","url":"http://markuseliasson.se/article/bittorrent-in-python/","langs":["Python"],"category":"BitTorrent Client","cat_rank":9,"tier":"intermediate","video":false,"score":90.3},{"title":"Write your own bittorrent client","url":"https://allenkim67.github.io/programming/2016/05/04/how-to-make-your-own-bittorrent-client.html","langs":["Node.js"],"category":"BitTorrent Client","cat_rank":9,"tier":"intermediate","video":false,"score":90.3},{"title":"Building a BitTorrent client from scratch in C#","url":"https://www.seanjoflynn.com/research/bittorrent.html","langs":["C#"],"category":"BitTorrent Client","cat_rank":9,"tier":"intermediate","video":false,"score":90.5},{"title":"Building a BitTorrent client from the ground up in Go","url":"https://blog.jse.li/posts/torrent/","langs":["Go"],"category":"BitTorrent Client","cat_rank":9,"tier":"intermediate","video":false,"score":90.55},{"title":"Writing a Bencode Parser","url":"https://xmonader.github.io/nimdays/day02_bencode.html","langs":["Nim"],"category":"BitTorrent Client","cat_rank":9,"tier":"intermediate","video":false,"score":90.6},{"title":"A DIY guide to build your own React","url":"https://github.com/hexacta/didact","langs":["JavaScript"],"category":"Front-end Framework / Library","cat_rank":10,"tier":"intermediate","video":false,"score":100.3},{"title":"Build your own React","url":"https://pomb.us/build-your-own-react/","langs":["JavaScript"],"category":"Front-end Framework / Library","cat_rank":10,"tier":"intermediate","video":false,"score":100.3},{"title":"Build Your own Simplified AngularJS in 200 Lines of JavaScript","url":"https://blog.mgechev.com/2015/03/09/build-learn-your-own-light-lightweight-angularjs/","langs":["JavaScript"],"category":"Front-end Framework / Library","cat_rank":10,"tier":"intermediate","video":false,"score":100.3},{"title":"Build Yourself a Redux","url":"https://zapier.com/engineering/how-to-build-redux/","langs":["JavaScript"],"category":"Front-end Framework / Library","cat_rank":10,"tier":"intermediate","video":false,"score":100.3},{"title":"Building a Custom React Renderer","url":"https://youtu.be/CGpMlWVcHok","langs":["JavaScript"],"category":"Front-end Framework / Library","cat_rank":10,"tier":"intermediate","video":true,"score":100.3},{"title":"Building a frontend framework, from scratch, with components (templating, state, VDOM)","url":"https://mfrachet.github.io/create-frontend-framework/","langs":["JavaScript"],"category":"Front-end Framework / Library","cat_rank":10,"tier":"intermediate","video":false,"score":100.3},{"title":"Building React From Scratch","url":"https://www.youtube.com/watch?v=_MAD4Oly9yg","langs":["JavaScript"],"category":"Front-end Framework / Library","cat_rank":10,"tier":"intermediate","video":true,"score":100.3},{"title":"Gooact: React in 160 lines of JavaScript","url":"https://medium.com/@sweetpalma/gooact-react-in-160-lines-of-javascript-44e0742ad60f","langs":["JavaScript"],"category":"Front-end Framework / Library","cat_rank":10,"tier":"intermediate","video":false,"score":100.3},{"title":"How to write your own Virtual DOM","url":"https://medium.com/@deathmood/how-to-write-your-own-virtual-dom-ee74acc13060","langs":["JavaScript"],"category":"Front-end Framework / Library","cat_rank":10,"tier":"intermediate","video":false,"score":100.3},{"title":"Learn how React Reconciler package works by building your own lightweight React DOM","url":"https://hackernoon.com/learn-you-some-custom-react-renderers-aed7164a4199","langs":["JavaScript"],"category":"Front-end Framework / Library","cat_rank":10,"tier":"intermediate","video":false,"score":100.3},{"title":"Let\u2019s Write Redux!","url":"https://www.jamasoftware.com/blog/lets-write-redux/","langs":["JavaScript"],"category":"Front-end Framework / Library","cat_rank":10,"tier":"intermediate","video":false,"score":100.3},{"title":"Make Your Own AngularJS","url":"http://teropa.info/blog/2013/11/03/make-your-own-angular-part-1-scopes-and-digest.html","langs":["JavaScript"],"category":"Front-end Framework / Library","cat_rank":10,"tier":"intermediate","video":false,"score":100.3},{"title":"Redux: Implementing Store from Scratch","url":"https://egghead.io/lessons/react-redux-implementing-store-from-scratch","langs":["JavaScript"],"category":"Front-end Framework / Library","cat_rank":10,"tier":"intermediate","video":true,"score":100.3},{"title":"WTF is JSX (Let's Build a JSX Renderer)","url":"https://jasonformat.com/wtf-is-jsx/","langs":["JavaScript"],"category":"Front-end Framework / Library","cat_rank":10,"tier":"intermediate","video":false,"score":100.3},{"title":"Build a Regex Engine in Less than 40 Lines of Code","url":"https://nickdrane.com/build-your-own-regex/","langs":["JavaScript"],"category":"Regex Engine","cat_rank":11,"tier":"intermediate","video":false,"score":110.3},{"title":"Build Your Own Regular Expression Engines: Backtracking, NFA, DFA","url":"https://build-your-own.org/b2a/r0_intro","langs":["Python"],"category":"Regex Engine","cat_rank":11,"tier":"intermediate","video":false,"score":110.3},{"title":"How to implement regular expressions in functional javascript using derivatives","url":"http://dpk.io/dregs/toydregs","langs":["JavaScript"],"category":"Regex Engine","cat_rank":11,"tier":"intermediate","video":false,"score":110.3},{"title":"Implementing a Regular Expression Engine","url":"https://deniskyashif.com/2019/02/17/implementing-a-regular-expression-engine/","langs":["JavaScript"],"category":"Regex Engine","cat_rank":11,"tier":"intermediate","video":false,"score":110.3},{"title":"How Regexes Work","url":"https://perl.plover.com/Regex/article.html","langs":["Perl"],"category":"Regex Engine","cat_rank":11,"tier":"intermediate","video":false,"score":110.35},{"title":"How to build a regex engine from scratch","url":"https://rhaeguard.github.io/posts/regex","langs":["Go"],"category":"Regex Engine","cat_rank":11,"tier":"intermediate","video":false,"score":110.55},{"title":"No Magic: Regular Expressions","url":"https://rcoh.svbtle.com/no-magic-regular-expressions","langs":["Scala"],"category":"Regex Engine","cat_rank":11,"tier":"intermediate","video":false,"score":110.55},{"title":"A Regular Expression Matcher","url":"https://www.cs.princeton.edu/courses/archive/spr09/cos333/beautiful.html","langs":["C"],"category":"Regex Engine","cat_rank":11,"tier":"intermediate","video":false,"score":110.8},{"title":"Regular Expression Matching Can Be Simple And Fast","url":"https://swtch.com/~rsc/regexp/regexp1.html","langs":["C"],"category":"Regex Engine","cat_rank":11,"tier":"intermediate","video":false,"score":110.8},{"title":"2D breakout game using Phaser","url":"https://developer.mozilla.org/en-US/docs/Games/Tutorials/2D_breakout_game_Phaser","langs":["JavaScript"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.3},{"title":"Build your own 8-Ball Pool game from scratch","url":"https://www.youtube.com/watch?v=aXwCrtAo4Wc","langs":["JavaScript"],"category":"Game","cat_rank":12,"tier":"intermediate","video":true,"score":120.3},{"title":"BYTEPATH","url":"https://github.com/SSYGEN/blog/issues/30","langs":["Lua"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.3},{"title":"Developing Games With PyGame","url":"https://pythonprogramming.net/pygame-python-3-part-1-intro/","langs":["Python"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.3},{"title":"Developing Games with React, Redux, and SVG","url":"https://auth0.com/blog/developing-games-with-react-redux-and-svg-part-1/","langs":["JavaScript"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.3},{"title":"Developing Games With Ruby","url":"https://leanpub.com/developing-games-with-ruby/read","langs":["Ruby"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.3},{"title":"How to Make Flappy Bird in HTML5 With Phaser","url":"http://www.lessmilk.com/tutorial/flappy-bird-phaser-1","langs":["JavaScript"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.3},{"title":"How to Make Your First Roguelike","url":"https://gamedevelopment.tutsplus.com/tutorials/how-to-make-your-first-roguelike--gamedev-13677","langs":["JavaScript"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.3},{"title":"Making Games with Python & Pygame","url":"https://inventwithpython.com/makinggames.pdf","langs":["Python"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.3},{"title":"Roguelike Tutorial Revised","url":"http://rogueliketutorials.com/","langs":["Python"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.3},{"title":"Ruby Snake","url":"https://www.diatomenterprises.com/gamedev-on-ruby-why-not/","langs":["Ruby"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.3},{"title":"Think like a programmer: How to build Snake using only JavaScript, HTML & CSS","url":"https://medium.freecodecamp.org/think-like-a-programmer-how-to-build-snake-using-only-javascript-html-and-css-7b1479c3339e","langs":["JavaScript"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.3},{"title":"3D Game Development with LWJGL 3","url":"https://lwjglgamedev.gitbooks.io/3d-game-development-with-lwjgl/content/","langs":["Java"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.5},{"title":"Build a C#/WPF RPG","url":"https://scottlilly.com/build-a-cwpf-rpg/","langs":["C#"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.5},{"title":"Code a 2D Game Engine using Java - Full Course for Beginners","url":"https://www.youtube.com/watch?v=025QFeZfeyM","langs":["Java"],"category":"Game","cat_rank":12,"tier":"intermediate","video":true,"score":120.5},{"title":"Creating a Roguelike Game in C#","url":"https://roguesharp.wordpress.com/","langs":["C#"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.5},{"title":"Learn C# by Building a Simple RPG","url":"http://scottlilly.com/learn-c-by-building-a-simple-rpg-index/","langs":["C#"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.5},{"title":"Games With Go","url":"https://www.youtube.com/playlist?list=PLDZujg-VgQlZUy1iCqBbe5faZLMkA3g2x","langs":["Go"],"category":"Game","cat_rank":12,"tier":"intermediate","video":true,"score":120.55},{"title":"Adventures in Rust: A Basic 2D Game","url":"https://a5huynh.github.io/posts/2018/adventures-in-rust/","langs":["Rust"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.75},{"title":"Roguelike Tutorial in Rust + tcod","url":"https://tomassedovic.github.io/roguelike-tutorial/","langs":["Rust"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.75},{"title":"Beginning Game Programming v2.0","url":"http://lazyfoo.net/tutorials/SDL/","langs":["C++"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.8},{"title":"Breakout","url":"https://learnopengl.com/In-Practice/2D-Game/Breakout","langs":["C++"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.8},{"title":"Chess Engine In C","url":"https://www.youtube.com/playlist?list=PLZ1QII7yudbc-Ky058TEaOstZHVbT-2hg","langs":["C"],"category":"Game","cat_rank":12,"tier":"intermediate","video":true,"score":120.8},{"title":"Coding a Rogue/Nethack RPG in C","url":"https://www.youtube.com/playlist?list=PLkTXsX7igf8erbWGYT4iSAhpnJLJ0Nk5G","langs":["C"],"category":"Game","cat_rank":12,"tier":"intermediate","video":true,"score":120.8},{"title":"Coding A Sudoku Solver in C","url":"https://www.youtube.com/playlist?list=PLkTXsX7igf8edTYU92nU-f5Ntzuf-RKvW","langs":["C"],"category":"Game","cat_rank":12,"tier":"intermediate","video":true,"score":120.8},{"title":"Handmade Hero","url":"https://handmadehero.org/","langs":["C"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.8},{"title":"How to Program an NES game in C","url":"https://nesdoug.com/","langs":["C"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.8},{"title":"Learn Video Game Programming in C","url":"https://www.youtube.com/playlist?list=PLT6WFYYZE6uLMcPGS3qfpYm7T_gViYMMt","langs":["C"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.8},{"title":"Let's Make: Dangerous Dave","url":"https://www.youtube.com/playlist?list=PLSkJey49cOgTSj465v2KbLZ7LMn10bCF9","langs":["C"],"category":"Game","cat_rank":12,"tier":"intermediate","video":true,"score":120.8},{"title":"On Tetris and Reimplementation","url":"https://brennan.io/2015/06/12/tetris-reimplementation/","langs":["C"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.8},{"title":"Reconstructing Cave Story","url":"https://www.youtube.com/playlist?list=PL006xsVEsbKjSKBmLu1clo85yLrwjY67X","langs":["C++"],"category":"Game","cat_rank":12,"tier":"intermediate","video":true,"score":120.8},{"title":"Remaking Cavestory in C++","url":"https://www.youtube.com/watch?v=ETvApbD5xRo&list=PLNOBk_id22bw6LXhrGfhVwqQIa-M2MsLa","langs":["C++"],"category":"Game","cat_rank":12,"tier":"intermediate","video":true,"score":120.8},{"title":"Space Invaders from Scratch","url":"http://nicktasios.nl/posts/space-invaders-from-scratch-part-1.html","langs":["C++"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.8},{"title":"Tetris tutorial in C++ platform independent focused in game logic for beginners","url":"http://javilop.com/gamedev/tetris-tutorial-in-c-platform-independent-focused-in-game-logic-for-beginners/","langs":["C++"],"category":"Game","cat_rank":12,"tier":"intermediate","video":false,"score":120.8},{"title":"A Compiler From Scratch","url":"https://www.destroyallsoftware.com/screencasts/catalog/a-compiler-from-scratch","langs":["Ruby"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.3},{"title":"A Python Interpreter Written in Python","url":"http://aosabook.org/en/500L/a-python-interpreter-written-in-python.html","langs":["Python"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.3},{"title":"From Source Code To Machine Code: Build Your Own Compiler From Scratch","url":"https://build-your-own.org/compiler/","langs":["Python"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.3},{"title":"How to implement a programming language in JavaScript","url":"http://lisperator.net/pltut/","langs":["JavaScript"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.3},{"title":"How to Write a Lisp Interpreter in Python","url":"http://norvig.com/lispy.html","langs":["Python"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.3},{"title":"Let\u2019s Build A Simple Interpreter","url":"https://ruslanspivak.com/lsbasi-part1/","langs":["Python"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.3},{"title":"Let\u2019s go write a Lisp","url":"https://idiocy.org/lets-go-write-a-lisp/part-1.html","langs":["JavaScript"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.3},{"title":"lisp.py: Make your own Lisp interpreter","url":"http://khamidou.com/compilers/lisp.py/","langs":["Python"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.3},{"title":"Little Lisp interpreter","url":"https://maryrosecook.com/blog/post/little-lisp-interpreter","langs":["JavaScript"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.3},{"title":"Make Your Own Simple Interpreted Programming Language","url":"https://www.youtube.com/watch?v=dj9CBS3ikGA&list=PLZQftyCk7_SdoVexSmwy_tBgs7P0b97yD&index=1","langs":["Python"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":true,"score":130.3},{"title":"Markdown compiler from scratch in Ruby","url":"https://blog.beezwax.net/2017/07/07/writing-a-markdown-compiler/","langs":["Ruby"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.3},{"title":"The Super Tiny Compiler","url":"https://github.com/jamiebuilds/the-super-tiny-compiler","langs":["JavaScript"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.3},{"title":"The Super Tiny Interpreter","url":"https://github.com/keyanzhang/the-super-tiny-interpreter","langs":["JavaScript"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.3},{"title":"Build your own WebAssembly Compiler","url":"https://blog.scottlogic.com/2019/05/17/webassembly-compiler.html","langs":["TypeScript"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.35},{"title":"Demystifying compilers by writing your own","url":"https://www.youtube.com/watch?v=zMJYoYwOCd4","langs":["Elixir"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":true,"score":130.4},{"title":"Beautiful Racket: How to make your own programming languages with Racket","url":"https://beautifulracket.com/","langs":["Racket"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.5},{"title":"Building a LISP from scratch with Swift","url":"https://www.uraimo.com/2017/02/05/building-a-lisp-from-scratch-with-swift/","langs":["Swift"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.5},{"title":"Crafting interpreters: A handbook for making programming languages","url":"http://www.craftinginterpreters.com/","langs":["Java"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.5},{"title":"Creating JVM Language","url":"http://jakubdziworski.github.io/categories.html#Enkel-ref","langs":["Java"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.5},{"title":"Let's Build a Compiler","url":"https://compilers.iecc.com/crenshaw/","langs":["Pascal"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.5},{"title":"mal - Make a Lisp","url":"https://github.com/kanaka/mal#mal---make-a-lisp","langs":["(any)"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.5},{"title":"Understanding Parser Combinators","url":"https://fsharpforfunandprofit.com/posts/understanding-parser-combinators/","langs":["F#"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.5},{"title":"Lexical Scanning in Go","url":"https://www.youtube.com/watch?v=HxaD_trXwRE","langs":["Go"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":true,"score":130.55},{"title":"The Super Tiny Compiler","url":"https://github.com/hazbo/the-super-tiny-compiler","langs":["Go"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.55},{"title":"Let's Build a Compiler","url":"https://g-ford.github.io/cradle/","langs":["Haskell"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.6},{"title":"Write You a Haskell","url":"http://dev.stephendiehl.com/fun/","langs":["Haskell"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.6},{"title":"Write You A Scheme","url":"https://www.wespiser.com/writings/wyas/home.html","langs":["Haskell"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.6},{"title":"Write Yourself a Scheme in 48 Hours","url":"https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours","langs":["Haskell"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.6},{"title":"Writing a C Compiler","url":"https://norasandler.com/2017/11/29/Write-a-Compiler.html","langs":["OCaml"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.6},{"title":"Writing a Lisp, the series","url":"https://bernsteinbear.com/blog/lisp/","langs":["OCaml"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.6},{"title":"Learning Parser Combinators With Rust","url":"https://bodil.lol/parser-combinators/","langs":["Rust"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.75},{"title":"A C & x86 version of the \"Let's Build a Compiler\" by Jack Crenshaw","url":"https://github.com/lotabout/Let-s-build-a-compiler","langs":["C"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.8},{"title":"A journey explaining how to build a compiler from scratch","url":"https://github.com/DoctorWkt/acwj","langs":["C"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.8},{"title":"Baby's First Garbage Collector","url":"http://journal.stuffwithstuff.com/2013/12/08/babys-first-garbage-collector/","langs":["C"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.8},{"title":"Build Your Own Lisp: Learn C and build your own programming language in 1000 lines of code","url":"http://www.buildyourownlisp.com/","langs":["C"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.8},{"title":"C interpreter that interprets itself.","url":"https://github.com/lotabout/write-a-C-interpreter","langs":["C"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.8},{"title":"How to Create a Compiler","url":"https://www.youtube.com/watch?v=eF9qWbuQLuw","langs":["C++"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":true,"score":130.8},{"title":"Kaleidoscope: Implementing a Language with LLVM","url":"https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/index.html","langs":["C++"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.8},{"title":"Writing a Simple Garbage Collector in C","url":"http://maplant.com/gc.html","langs":["C"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.8},{"title":"Writing Your Own Toy Compiler Using Flex","url":"https://gnuu.org/2009/09/18/writing-your-own-toy-compiler/","langs":["C++"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.8},{"title":"Jonesforth","url":"https://github.com/nornagon/jonesforth/blob/master/jonesforth.S","langs":["Assembly"],"category":"Programming Language","cat_rank":13,"tier":"advanced","video":false,"score":130.9},{"title":"Emulation Basics: Write your own Chip 8 Emulator/Interpreter","url":"http://omokute.blogspot.com.br/2012/06/emulation-basics-write-your-own-chip-8.html","langs":["Python"],"category":"Emulator / Virtual Machine","cat_rank":14,"tier":"advanced","video":false,"score":140.3},{"title":"GameBoy Emulation in JavaScript","url":"http://imrannazar.com/GameBoy-Emulation-in-JavaScript","langs":["JavaScript"],"category":"Emulator / Virtual Machine","cat_rank":14,"tier":"advanced","video":false,"score":140.3},{"title":"CHIP-8 in Common Lisp","url":"http://stevelosh.com/blog/2016/12/chip8-cpu/","langs":["Common Lisp"],"category":"Emulator / Virtual Machine","cat_rank":14,"tier":"advanced","video":false,"score":140.5},{"title":"0dmg: Learning Rust by building a partial Game Boy emulator","url":"https://jeremybanks.github.io/0dmg/","langs":["Rust"],"category":"Emulator / Virtual Machine","cat_rank":14,"tier":"advanced","video":false,"score":140.75},{"title":"Emulation tutorial (CHIP-8 interpreter)","url":"http://www.codeslinger.co.uk/pages/projects/chip8.html","langs":["C++"],"category":"Emulator / Virtual Machine","cat_rank":14,"tier":"advanced","video":false,"score":140.8},{"title":"Emulation tutorial (GameBoy emulator)","url":"http://www.codeslinger.co.uk/pages/projects/gameboy.html","langs":["C++"],"category":"Emulator / Virtual Machine","cat_rank":14,"tier":"advanced","video":false,"score":140.8},{"title":"Emulation tutorial (Master System emulator)","url":"http://www.codeslinger.co.uk/pages/projects/mastersystem/memory.html","langs":["C++"],"category":"Emulator / Virtual Machine","cat_rank":14,"tier":"advanced","video":false,"score":140.8},{"title":"Home-grown bytecode interpreters","url":"https://medium.com/bumble-tech/home-grown-bytecode-interpreters-51e12d59b25c","langs":["C"],"category":"Emulator / Virtual Machine","cat_rank":14,"tier":"advanced","video":false,"score":140.8},{"title":"How to write an emulator (CHIP-8 interpreter)","url":"http://www.multigesture.net/articles/how-to-write-an-emulator-chip-8-interpreter/","langs":["C++"],"category":"Emulator / Virtual Machine","cat_rank":14,"tier":"advanced","video":false,"score":140.8},{"title":"NES Emulator From Scratch","url":"https://www.youtube.com/playlist?list=PLrOv9FMX8xJHqMvSGB_9G9nZZ_4IgteYf","langs":["C++"],"category":"Emulator / Virtual Machine","cat_rank":14,"tier":"advanced","video":true,"score":140.8},{"title":"Virtual machine in C","url":"http://web.archive.org/web/20200121100942/https://blog.felixangell.com/virtual-machine-in-c/","langs":["C"],"category":"Emulator / Virtual Machine","cat_rank":14,"tier":"advanced","video":false,"score":140.8},{"title":"Write your Own Virtual Machine","url":"https://justinmeiners.github.io/lc3-vm/","langs":["C"],"category":"Emulator / Virtual Machine","cat_rank":14,"tier":"advanced","video":false,"score":140.8},{"title":"Writing a Game Boy emulator, Cinoop","url":"https://cturt.github.io/cinoop.html","langs":["C"],"category":"Emulator / Virtual Machine","cat_rank":14,"tier":"advanced","video":false,"score":140.8},{"title":"A Neural Network in 11 lines of Python","url":"https://iamtrask.github.io/2015/07/12/basic-python-network/","langs":["Python"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":false,"score":150.3},{"title":"An Introduction to Convolutional Neural Networks","url":"https://victorzhou.com/blog/intro-to-cnns-part-1/","langs":["Python"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":false,"score":150.3},{"title":"Build Deep Learning From Scratch (reimplement PyTorch internals across 34 stages)","url":"https://github.com/roiamiel1/Build-Deep-Learning-From-Scratch","langs":["Python"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":false,"score":150.3},{"title":"Generate Music using LSTM Neural Network in Keras","url":"https://towardsdatascience.com/how-to-generate-music-using-a-lstm-neural-network-in-keras-68786834d4c5","langs":["Python"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":false,"score":150.3},{"title":"Implement a Neural Network from Scratch","url":"https://victorzhou.com/blog/intro-to-neural-networks/","langs":["Python"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":false,"score":150.3},{"title":"Neural Networks - The Nature of Code","url":"https://www.youtube.com/playlist?list=PLRqwX-V7Uu6aCibgK1PTWWu9by6XFdCfh","langs":["JavaScript","Java"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":true,"score":150.3},{"title":"Neural networks from scratch for JavaScript linguists (Part1\u200a\u2014\u200aThe Perceptron)","url":"https://hackernoon.com/neural-networks-from-scratch-for-javascript-linguists-part1-the-perceptron-632a4d1fbad2","langs":["JavaScript"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":false,"score":150.3},{"title":"Neural Networks: Zero to Hero","url":"https://www.youtube.com/playlist?list=PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ","langs":["Python"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":false,"score":150.3},{"title":"Optical Character Recognition (OCR)","url":"http://aosabook.org/en/500L/optical-character-recognition-ocr.html","langs":["Python"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":false,"score":150.3},{"title":"SlowTorch: Implementation of PyTorch from the ground up in 100% pure Python","url":"https://github.com/xames3/slowtorch","langs":["Python"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":false,"score":150.3},{"title":"Traffic signs classification with a convolutional network","url":"https://navoshta.com/traffic-signs-classification/","langs":["Python"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":false,"score":150.3},{"title":"Building Neural Networks in F#: Part 1","url":"https://medium.com/data-science/building-neural-networks-in-f-part-1-a2832ae972e6","langs":["F#"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":false,"score":150.5},{"title":"Building Neural Networks in F#: Part 2","url":"https://medium.com/data-science/building-neural-networks-in-f-part-2-training-evaluation-5e3a68889da6","langs":["F#"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":false,"score":150.5},{"title":"Neural Network OCR","url":"https://www.codeproject.com/Articles/11285/Neural-Network-OCR","langs":["C#"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":false,"score":150.5},{"title":"Build a multilayer perceptron with Golang","url":"https://made2591.github.io/posts/neuralnetwork","langs":["Go"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":false,"score":150.55},{"title":"Building a Neural Net from Scratch in Go","url":"https://datadan.io/blog/neural-net-with-go","langs":["Go"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":false,"score":150.55},{"title":"How to build a simple artificial neural network with Go","url":"https://sausheong.github.io/posts/how-to-build-a-simple-artificial-neural-network-with-go/","langs":["Go"],"category":"Neural Network","cat_rank":15,"tier":"advanced","video":false,"score":150.55},{"title":"Malloc is not magic -- Implementing your own memory allocator","url":"https://medium.com/p/e0354e914402","langs":["C"],"category":"Memory Allocator","cat_rank":16,"tier":"advanced","video":false,"score":160.8},{"title":"A cryptocurrency implementation in less than 1500 lines of code","url":"https://github.com/conradoqg/naivecoin","langs":["JavaScript"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.3},{"title":"A Practical Introduction to Blockchain with Python","url":"http://adilmoujahid.com/posts/2018/03/intro-blockchain-bitcoin-python/","langs":["Python"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.3},{"title":"Build your own Blockchain in JavaScript","url":"https://github.com/nambrot/blockchain-in-js","langs":["JavaScript"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.3},{"title":"Build your own blockchain: a Python tutorial","url":"http://ecomunsing.com/build-your-own-blockchain","langs":["Python"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.3},{"title":"Creating a blockchain with JavaScript","url":"https://github.com/SavjeeTutorials/SavjeeCoin","langs":["JavaScript"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.3},{"title":"How To Launch Your Own Production-Ready Cryptocurrency","url":"https://hackernoon.com/how-to-launch-your-own-production-ready-cryptocurrency-ab97cb773371","langs":["JavaScript"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.3},{"title":"Learn & Build a JavaScript Blockchain","url":"https://medium.com/digital-alchemy-holdings/learn-build-a-javascript-blockchain-part-1-ca61c285821e","langs":["JavaScript"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.3},{"title":"Learn Blockchains by Building One","url":"https://hackernoon.com/learn-blockchains-by-building-one-117428612f46","langs":["Python"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.3},{"title":"Let\u2019s Build the Tiniest Blockchain","url":"https://medium.com/crypto-currently/lets-build-the-tiniest-blockchain-e70965a248b","langs":["Python"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.3},{"title":"Programming Blockchains Step-by-Step (Manuscripts Book Edition)","url":"https://github.com/yukimotopress/programming-blockchains-step-by-step","langs":["Ruby"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.3},{"title":"Writing a Blockchain in Node.js","url":"https://www.smashingmagazine.com/2020/02/cryptocurrency-blockchain-node-js/","langs":["JavaScript"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.3},{"title":"Naivecoin: a tutorial for building a cryptocurrency","url":"https://lhartikk.github.io/","langs":["TypeScript"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.35},{"title":"NaivecoinStake: a tutorial for building a cryptocurrency with the Proof of Stake consensus","url":"https://naivecoinstake.learn.uno/","langs":["TypeScript"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.35},{"title":"Creating Your First Blockchain with Java","url":"https://medium.com/programmers-blockchain/create-simple-blockchain-java-tutorial-from-scratch-6eeed3cb03fa","langs":["Java"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.5},{"title":"Functional Blockchain","url":"https://beta.observablehq.com/@galletti94/functional-blockchain","langs":["ATS"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.5},{"title":"Let\u2019s implement a cryptocurrency in Kotlin","url":"https://medium.com/@vasilyf/lets-implement-a-cryptocurrency-in-kotlin-part-1-blockchain-8704069f8580","langs":["Kotlin"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.5},{"title":"Write your own blockchain and PoW algorithm using Crystal","url":"https://medium.com/@bradford_hamilton/write-your-own-blockchain-and-pow-algorithm-using-crystal-d53d5d9d0c52","langs":["Crystal"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.5},{"title":"Building Blockchain in Go","url":"https://jeiwan.net/posts/building-blockchain-in-go-part-1/","langs":["Go"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.55},{"title":"Code your own blockchain in less than 200 lines of Go","url":"https://medium.com/@mycoralhealth/code-your-own-blockchain-in-less-than-200-lines-of-go-e296282bcffc","langs":["Go"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.55},{"title":"How to build a simple actor-based blockchain","url":"https://medium.freecodecamp.org/how-to-build-a-simple-actor-based-blockchain-aac1e996c177","langs":["Scala"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.55},{"title":"Building A Blockchain in Rust & Substrate","url":"https://hackernoon.com/building-a-blockchain-in-rust-and-substrate-a-step-by-step-guide-for-developers-kc223ybp","langs":["Rust"],"category":"Blockchain / Cryptocurrency","cat_rank":17,"tier":"advanced","video":false,"score":170.75},{"title":"Build your own fast, persistent KV store in Ruby","url":"https://dineshgowda.com/posts/build-your-own-persistent-kv-store/","langs":["Ruby"],"category":"Database","cat_rank":18,"tier":"advanced","video":false,"score":180.3},{"title":"Dagoba: an in-memory graph database","url":"http://aosabook.org/en/500L/dagoba-an-in-memory-graph-database.html","langs":["JavaScript"],"category":"Database","cat_rank":18,"tier":"advanced","video":false,"score":180.3},{"title":"DBDB: Dog Bed Database","url":"http://aosabook.org/en/500L/dbdb-dog-bed-database.html","langs":["Python"],"category":"Database","cat_rank":18,"tier":"advanced","video":false,"score":180.3},{"title":"Write your own miniature Redis with Python","url":"http://charlesleifer.com/blog/building-a-simple-redis-server-with-python/","langs":["Python"],"category":"Database","cat_rank":18,"tier":"advanced","video":false,"score":180.3},{"title":"An Archaeology-Inspired Database","url":"http://aosabook.org/en/500L/an-archaeology-inspired-database.html","langs":["Clojure"],"category":"Database","cat_rank":18,"tier":"advanced","video":false,"score":180.45},{"title":"Build Your Own Database","url":"https://www.codeproject.com/Articles/1029838/Build-Your-Own-Database","langs":["C#"],"category":"Database","cat_rank":18,"tier":"advanced","video":false,"score":180.5},{"title":"Why you should build your own NoSQL Database","url":"https://medium.com/@marceloboeira/why-you-should-build-your-own-nosql-database-9bbba42039f5","langs":["Crystal"],"category":"Database","cat_rank":18,"tier":"advanced","video":false,"score":180.5},{"title":"Build Your Own Database from Scratch: From B+Tree To SQL in 3000 Lines","url":"https://build-your-own.org/database/","langs":["Go"],"category":"Database","cat_rank":18,"tier":"advanced","video":false,"score":180.55},{"title":"Build Your Own Redis from Scratch","url":"https://www.build-redis-from-scratch.dev/","langs":["Go"],"category":"Database","cat_rank":18,"tier":"advanced","video":false,"score":180.55},{"title":"Code a database in 45 steps: a series of test-driven small coding puzzles","url":"https://trialofcode.org/database/","langs":["Go"],"category":"Database","cat_rank":18,"tier":"advanced","video":false,"score":180.55},{"title":"Build your own Redis client and server","url":"https://tokio.rs/tokio/tutorial/setup","langs":["Rust"],"category":"Database","cat_rank":18,"tier":"advanced","video":false,"score":180.75},{"title":"Build Your Own Redis from Scratch","url":"https://build-your-own.org/redis","langs":["C++"],"category":"Database","cat_rank":18,"tier":"advanced","video":false,"score":180.8},{"title":"Let's Build a Simple Database","url":"https://cstack.github.io/db_tutorial/","langs":["C"],"category":"Database","cat_rank":18,"tier":"advanced","video":false,"score":180.8},{"title":"Computer Graphics from scratch","url":"http://www.gabrielgambetta.com/computer-graphics-from-scratch/introduction.html","langs":["JavaScript","Pseudocode"],"category":"3D Renderer","cat_rank":19,"tier":"advanced","video":false,"score":190.2},{"title":"A 3D Modeller","url":"http://aosabook.org/en/500L/a-3d-modeller.html","langs":["Python"],"category":"3D Renderer","cat_rank":19,"tier":"advanced","video":false,"score":190.3},{"title":"Build your own 3D renderer","url":"https://avik-das.github.io/build-your-own-raytracer/","langs":["Java","JavaScript"],"category":"3D Renderer","cat_rank":19,"tier":"advanced","video":false,"score":190.3},{"title":"Learning how to write a 3D soft engine from scratch in C#, TypeScript or JavaScript","url":"https://www.davrous.com/2013/06/13/tutorial-series-learning-how-to-write-a-3d-soft-engine-from-scratch-in-c-typescript-or-javascript/","langs":["C#","TypeScript","JavaScript"],"category":"3D Renderer","cat_rank":19,"tier":"advanced","video":false,"score":190.3},{"title":"How to create your own simple 3D render engine in pure Java","url":"http://blog.rogach.org/2015/08/how-to-create-your-own-simple-3d-render.html","langs":["Java"],"category":"3D Renderer","cat_rank":19,"tier":"advanced","video":false,"score":190.5},{"title":"How OpenGL works: software rendering in 500 lines of code","url":"https://github.com/ssloy/tinyrenderer/wiki","langs":["C++"],"category":"3D Renderer","cat_rank":19,"tier":"advanced","video":false,"score":190.8},{"title":"Introduction to Ray Tracing: a Simple Method for Creating 3D Images","url":"https://www.scratchapixel.com/lessons/3d-basic-rendering/introduction-to-ray-tracing/how-does-it-work","langs":["C++"],"category":"3D Renderer","cat_rank":19,"tier":"advanced","video":false,"score":190.8},{"title":"Physically Based Rendering:From Theory To Implementation","url":"http://www.pbr-book.org/","langs":["C++"],"category":"3D Renderer","cat_rank":19,"tier":"advanced","video":false,"score":190.8},{"title":"Rasterization: a Practical Implementation","url":"https://www.scratchapixel.com/lessons/3d-basic-rendering/rasterization-practical-implementation/overview-rasterization-algorithm","langs":["C++"],"category":"3D Renderer","cat_rank":19,"tier":"advanced","video":false,"score":190.8},{"title":"Ray Tracing in One Weekend","url":"https://raytracing.github.io/books/RayTracingInOneWeekend.html","langs":["C++"],"category":"3D Renderer","cat_rank":19,"tier":"advanced","video":false,"score":190.8},{"title":"Raycasting engine of Wolfenstein 3D","url":"http://lodev.org/cgtutor/raycasting.html","langs":["C++"],"category":"3D Renderer","cat_rank":19,"tier":"advanced","video":false,"score":190.8},{"title":"Broad Phase Collision Detection Using Spatial Partitioning","url":"http://buildnewgames.com/broad-phase-collision-detection/","langs":["JavaScript"],"category":"Physics Engine","cat_rank":20,"tier":"advanced","video":false,"score":200.3},{"title":"Build a simple 2D physics engine for JavaScript games","url":"https://developer.ibm.com/tutorials/wa-build2dphysicsengine/?mhsrc=ibmsearch_a&mhq=2dphysic","langs":["JavaScript"],"category":"Physics Engine","cat_rank":20,"tier":"advanced","video":false,"score":200.3},{"title":"How Physics Engines Work","url":"http://buildnewgames.com/gamephysics/","langs":["JavaScript"],"category":"Physics Engine","cat_rank":20,"tier":"advanced","video":false,"score":200.3},{"title":"3D Physics Engine Tutorial","url":"https://www.youtube.com/playlist?list=PLEETnX-uPtBXm1KEr_2zQ6K_0hoGH6JJ0","langs":["C++"],"category":"Physics Engine","cat_rank":20,"tier":"advanced","video":true,"score":200.8},{"title":"Game physics series by Allen Chou","url":"http://allenchou.net/game-physics-series/","langs":["C++"],"category":"Physics Engine","cat_rank":20,"tier":"advanced","video":false,"score":200.8},{"title":"How to Create a Custom Physics Engine","url":"https://gamedevelopment.tutsplus.com/series/how-to-create-a-custom-physics-engine--gamedev-12715","langs":["C++"],"category":"Physics Engine","cat_rank":20,"tier":"advanced","video":false,"score":200.8},{"title":"Video Game Physics Tutorial","url":"https://www.toptal.com/game/video-game-physics-part-i-an-introduction-to-rigid-body-dynamics","langs":["C"],"category":"Physics Engine","cat_rank":20,"tier":"advanced","video":false,"score":200.8},{"title":"A proof-of-concept imitation of Docker, written in 100% Python","url":"https://github.com/tonybaloney/mocker","langs":["Python"],"category":"Docker","cat_rank":21,"tier":"advanced","video":false,"score":210.3},{"title":"A workshop on Linux containers: Rebuild Docker from Scratch","url":"https://github.com/Fewbytes/rubber-docker","langs":["Python"],"category":"Docker","cat_rank":21,"tier":"advanced","video":false,"score":210.3},{"title":"Docker implemented in around 100 lines of bash","url":"https://github.com/p8952/bocker","langs":["Shell"],"category":"Docker","cat_rank":21,"tier":"advanced","video":false,"score":210.4},{"title":"Build Your Own Container Using Less than 100 Lines of Go","url":"https://www.infoq.com/articles/build-a-container-golang","langs":["Go"],"category":"Docker","cat_rank":21,"tier":"advanced","video":false,"score":210.55},{"title":"Building a container from scratch in Go","url":"https://www.youtube.com/watch?v=8fi7uSYlOdc","langs":["Go"],"category":"Docker","cat_rank":21,"tier":"advanced","video":true,"score":210.55},{"title":"Linux containers in 500 lines of code","url":"https://blog.lizzie.io/linux-containers-in-500-loc.html","langs":["C"],"category":"Docker","cat_rank":21,"tier":"advanced","video":false,"score":210.8},{"title":"Let's Make a Voxel Engine","url":"https://sites.google.com/site/letsmakeavoxelengine/home","langs":["C++"],"category":"Voxel Engine","cat_rank":22,"tier":"advanced","video":false,"score":220.8},{"title":"Build your own VPN/Virtual Switch","url":"https://github.com/peiyuanix/build-your-own-zerotier","langs":["C","Python"],"category":"Network Stack","cat_rank":23,"tier":"expert","video":false,"score":230.3},{"title":"How to build a network stack in Ruby","url":"https://medium.com/geckoboard-under-the-hood/how-to-build-a-network-stack-in-ruby-f73aeb1b661b","langs":["Ruby"],"category":"Network Stack","cat_rank":23,"tier":"expert","video":false,"score":230.3},{"title":"Beej's Guide to Network Programming","url":"http://beej.us/guide/bgnet/","langs":["C"],"category":"Network Stack","cat_rank":23,"tier":"expert","video":false,"score":230.8},{"title":"Let's code a TCP/IP stack","url":"http://www.saminiir.com/lets-code-tcp-ip-stack-1-ethernet-arp/","langs":["C"],"category":"Network Stack","cat_rank":23,"tier":"expert","video":false,"score":230.8},{"title":"A Large Language Model (LLM)","url":"https://github.com/rasbt/LLMs-from-scratch","langs":["Python"],"category":"AI Model","cat_rank":24,"tier":"expert","video":false,"score":240.3},{"title":"Diffusion Models for Image Generation","url":"https://huggingface.co/learn/diffusion-course/en/unit1/3","langs":["Python"],"category":"AI Model","cat_rank":24,"tier":"expert","video":false,"score":240.3},{"title":"RAG for Document Search","url":"https://github.com/langchain-ai/rag-from-scratch","langs":["Python"],"category":"AI Model","cat_rank":24,"tier":"expert","video":false,"score":240.3},{"title":"Building a Facial Recognition Pipeline with Deep Learning in Tensorflow","url":"https://hackernoon.com/building-a-facial-recognition-pipeline-with-deep-learning-in-tensorflow-66e7645015b8","langs":["Python"],"category":"Visual Recognition System","cat_rank":25,"tier":"expert","video":false,"score":250.3},{"title":"Developing a License Plate Recognition System with Machine Learning in Python","url":"https://medium.com/devcenter/developing-a-license-plate-recognition-system-with-machine-learning-in-python-787833569ccd","langs":["Python"],"category":"Visual Recognition System","cat_rank":25,"tier":"expert","video":false,"score":250.3},{"title":"Augmented Reality with Python and OpenCV","url":"https://bitesofcode.wordpress.com/2017/09/12/augmented-reality-with-python-and-opencv-part-1/","langs":["Python"],"category":"Augmented Reality","cat_rank":26,"tier":"expert","video":false,"score":260.3},{"title":"AR Portal Tutorial with Unity","url":"https://www.youtube.com/playlist?list=PLPCqNOwwN794Gz5fzUSi1p4OqLU0HTmvn","langs":["C#"],"category":"Augmented Reality","cat_rank":26,"tier":"expert","video":true,"score":260.5},{"title":"How to Augmented Reality AR Tutorial: ARKit Portal to the Upside Down","url":"https://www.youtube.com/watch?v=Z5AmqMuNi08","langs":["C#"],"category":"Augmented Reality","cat_rank":26,"tier":"expert","video":true,"score":260.5},{"title":"How to create a Dragon in Augmented Reality in Unity ARCore","url":"https://www.youtube.com/watch?v=qTSDPkPyPqs","langs":["C#"],"category":"Augmented Reality","cat_rank":26,"tier":"expert","video":true,"score":260.5},{"title":"How To Unity ARCore","url":"https://www.youtube.com/playlist?list=PLKIKuXdn4ZMjuUAtdQfK1vwTZPQn_rgSv","langs":["C#"],"category":"Augmented Reality","cat_rank":26,"tier":"expert","video":true,"score":260.5},{"title":"How To: Augmented Reality App Tutorial for Beginners with Vuforia and Unity 3D","url":"https://www.youtube.com/watch?v=uXNjNcqW4kY","langs":["C#"],"category":"Augmented Reality","cat_rank":26,"tier":"expert","video":true,"score":260.5},{"title":"Browser Engineering","url":"https://browser.engineering","langs":["Python"],"category":"Web Browser","cat_rank":27,"tier":"expert","video":false,"score":270.3},{"title":"Let's build a browser engine","url":"https://limpet.net/mbrubeck/2014/08/08/toy-layout-engine-1.html","langs":["Rust"],"category":"Web Browser","cat_rank":27,"tier":"expert","video":false,"score":270.75},{"title":"From Blinker to RISC-V","url":"https://github.com/BrunoLevy/learn-fpga/tree/master/FemtoRV/TUTORIALS/FROM_BLINKER_TO_RISCV","langs":["Verilog"],"category":"Processor","cat_rank":28,"tier":"expert","video":false,"score":280.5},{"title":"Linux from scratch","url":"https://linuxfromscratch.org/lfs","langs":["(any)"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.5},{"title":"Add RISC-V Rust Operating System Tutorial","url":"https://osblog.stephenmarz.com/","langs":["Rust"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.75},{"title":"Writing an OS in Rust","url":"https://os.phil-opp.com/","langs":["Rust"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.75},{"title":"Build a minimal multi-tasking kernel for ARM from scratch","url":"https://github.com/jserv/mini-arm-os","langs":["C"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.8},{"title":"Building a software and hardware stack for a simple computer from scratch","url":"https://www.youtube.com/watch?v=ZjwvMcP3Nf0&list=PLU94OURih-CiP4WxKSMt3UcwMSDM3aTtX","langs":["C"],"category":"Operating System","cat_rank":29,"tier":"expert","video":true,"score":290.8},{"title":"Hack the virtual memory","url":"https://blog.holbertonschool.com/hack-the-virtual-memory-c-strings-proc/","langs":["C"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.8},{"title":"How to create an OS from scratch","url":"https://github.com/cfenollosa/os-tutorial","langs":["C"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.8},{"title":"Kernel 101 \u2013 Let\u2019s write a Kernel","url":"https://arjunsreedharan.org/post/82710718100/kernel-101-lets-write-a-kernel","langs":["C"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.8},{"title":"Kernel 201 \u2013 Let\u2019s write a Kernel with keyboard and screen support","url":"https://arjunsreedharan.org/post/99370248137/kernel-201-lets-write-a-kernel-with-keyboard","langs":["C"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.8},{"title":"Learning operating system development using Linux kernel and Raspberry Pi","url":"https://github.com/s-matyukevich/raspberry-pi-os","langs":["C"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.8},{"title":"Malloc tutorial","url":"https://danluu.com/malloc-tutorial/","langs":["C"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.8},{"title":"Operating systems development for Dummies","url":"https://medium.com/@lduck11007/operating-systems-development-for-dummies-3d4d786e8ac","langs":["C"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.8},{"title":"Operating Systems: From 0 to 1","url":"https://tuhdo.github.io/os01/","langs":["C"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.8},{"title":"Roll your own toy UNIX-clone OS","url":"http://jamesmolloy.co.uk/tutorial_html/","langs":["C"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.8},{"title":"The little book about OS development","url":"https://littleosbook.github.io/","langs":["C"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.8},{"title":"Write your own Operating System","url":"https://www.youtube.com/playlist?list=PLHh55M_Kq4OApWScZyPl5HhgsTJS9MZ6M","langs":["C++"],"category":"Operating System","cat_rank":29,"tier":"expert","video":true,"score":290.8},{"title":"Writing a Bootloader","url":"http://3zanders.co.uk/2017/10/13/writing-a-bootloader/","langs":["C++"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.8},{"title":"Baking Pi \u2013 Operating Systems Development","url":"http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/index.html","langs":["Assembly"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.9},{"title":"Writing a Tiny x86 Bootloader","url":"http://joebergeron.io/posts/post_two.html","langs":["Assembly"],"category":"Operating System","cat_rank":29,"tier":"expert","video":false,"score":290.9},{"title":"Building Your Own Kafka-like System From Scratch: A Step-by-Step Guide","url":"https://github.com/buildthingsuseful/build-your-own-kafka","langs":["Java"],"category":"Distributed Systems","cat_rank":30,"tier":"expert","video":false,"score":300.5},{"title":"A Pedometer in the Real World","url":"http://aosabook.org/en/500L/a-pedometer-in-the-real-world.html","langs":["Ruby"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"A Simple Content-Based Recommendation Engine in Python","url":"http://blog.untrod.com/2016/06/simple-similar-products-recommendation-engine-in-python.html","langs":["Python"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Build a Deep Learning Library","url":"https://www.youtube.com/watch?v=o64FV-ez6Gw","langs":["Python"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":true,"score":990.3},{"title":"Build a DNS Server in Node.js","url":"https://engineerhead.github.io/dns-server/","langs":["Node.js"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Build a ride hailing app with React Native","url":"https://pusher.com/tutorials/ride-hailing-react-native","langs":["JavaScript"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Build a static site generator in 40 lines with Node.js","url":"https://www.webdevdrops.com/en/build-static-site-generator-nodejs-8969ebe34b22/","langs":["Node.js"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Build a Synchronization Engine with Node.js and Y.js","url":"https://greenvitriol.com/posts/sync-engine-for-everyone","langs":["Node.js"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Build Your Own AdBlocker in (Literally) 10 Minutes","url":"https://levelup.gitconnected.com/building-your-own-adblocker-in-literally-10-minutes-1eec093b04cd","langs":["JavaScript"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Build your own Git plugin with python","url":"https://joshburns-xyz.vercel.app/posts/build-your-own-git-plugin","langs":["Python"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Build Your Own Module Bundler - Minipack","url":"https://github.com/ronami/minipack","langs":["JavaScript"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Building a CDN from Scratch to Learn about CDN","url":"https://github.com/leandromoreira/cdn-up-and-running","langs":["Lua"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Building a simple Generative Adversarial Network (GAN) using Tensorflow","url":"https://blog.paperspace.com/implementing-gans-in-tensorflow/","langs":["Python"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Building A Simple Single Sign On(SSO) Server And Solution From Scratch In Node.js.","url":"https://codeburst.io/building-a-simple-single-sign-on-sso-server-and-solution-from-scratch-in-node-js-ea6ee5fdf340","langs":["Node.js"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Continuous Integration System","url":"http://aosabook.org/en/500L/a-continuous-integration-system.html","langs":["Python"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Creating a Linux Desktop application with Ruby","url":"https://iridakos.com/tutorials/2018/01/25/creating-a-gtk-todo-application-with-ruby","langs":["Ruby"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"How to Build a Kick-Ass Mobile Document Scanner in Just 5 Minutes","url":"https://www.pyimagesearch.com/2014/09/01/build-kick-ass-mobile-document-scanner-just-5-minutes/","langs":["Python"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"How to create a real-world Node CLI app with Node","url":"https://medium.freecodecamp.org/how-to-create-a-real-world-node-cli-app-with-node-391b727bbed3","langs":["Node.js"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Implement your own\u200a\u2014\u200acall(), apply() and bind() method in JavaScript","url":"https://blog.usejournal.com/implement-your-own-call-apply-and-bind-method-in-javascript-42cc85dba1b","langs":["JavaScript"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Implementing promises from scratch (TDD way)","url":"https://www.mauriciopoppe.com/notes/computer-science/computation/promises/","langs":["JavaScript"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"JavaScript Algorithms and Data Structures","url":"https://github.com/trekhleb/javascript-algorithms","langs":["JavaScript"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"JSON Decoding Algorithm","url":"https://github.com/cheery/json-algorithm","langs":["Python"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Learn JavaScript Promises by Building a Promise from Scratch","url":"https://levelup.gitconnected.com/understand-javascript-promises-by-building-a-promise-from-scratch-84c0fd855720","langs":["JavaScript"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Learn ML Algorithms by coding: Decision Trees","url":"https://lethalbrains.com/learn-ml-algorithms-by-coding-decision-trees-439ac503c9a4","langs":["Python"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Recommender Systems in Python: Beginner Tutorial","url":"https://www.datacamp.com/community/tutorials/recommender-systems-python","langs":["Python"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Stock Market Predictions with LSTM in Python","url":"https://www.datacamp.com/community/tutorials/lstm-python-stock-market","langs":["Python"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Write SMS-spam detector with Scikit-learn","url":"https://medium.com/@kopilov.vlad/detect-sms-spam-in-kaggle-with-scikit-learn-5f6afa7a3ca2","langs":["Python"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.3},{"title":"Code a Web Search Engine in PHP","url":"https://boyter.org/2013/01/code-for-a-search-engine-in-php-part-1/","langs":["PHP"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.35},{"title":"Make your own blog","url":"https://ilovephp.jondh.me.uk/en/tutorial/make-your-own-blog","langs":["PHP"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.35},{"title":"Modern PHP Without a Framework","url":"https://kevinsmith.io/modern-php-without-a-framework","langs":["PHP"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.35},{"title":"Tiny Package Manager: Learns how npm or Yarn works","url":"https://github.com/g-plane/tiny-package-manager","langs":["TypeScript"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.35},{"title":"Write your own MVC from scratch in PHP","url":"https://chaitya62.github.io/2018/04/29/Writing-your-own-MVC-from-Scratch-in-PHP.html","langs":["PHP"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.35},{"title":"Building a spell-checker","url":"https://bernhardwenzel.com/articles/clojure-spellchecker/","langs":["Clojure"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.45},{"title":"Build Your Own Cache","url":"https://github.com/kezhenxu94/cache-lite","langs":["Kotlin"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.5},{"title":"build-your-own-x-vibe-coding: BYOX-style tutorials adapted for vibe coding","url":"https://github.com/inFaaa/build-your-own-x-vibe-coding","langs":["(any)"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.5},{"title":"C# Networking: Create a TCP chater server, TCP games, UDP Pong and more","url":"https://16bpp.net/tutorials/csharp-networking","langs":["C#"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.5},{"title":"From NAND to Tetris: Building a Modern Computer From First Principles","url":"http://nand2tetris.org/","langs":["(any)"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.5},{"title":"How to Build an Android Reddit App","url":"https://www.youtube.com/playlist?list=PLgCYzUzKIBE9HUJU-upNvl3TRVAo9W47y","langs":["Java"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":true,"score":990.5},{"title":"Loading and rendering 3D skeletal animations from scratch in C# and GLSL","url":"https://www.seanjoflynn.com/research/skeletal-animation.html","langs":["C#"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.5},{"title":"The Same-Origin Policy","url":"http://aosabook.org/en/500L/the-same-origin-policy.html","langs":["Alloy"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.5},{"title":"Build A Simple Terminal Emulator In 100 Lines of Golang","url":"https://ishuah.com/2021/03/10/build-a-terminal-emulator-in-100-lines-of-go/","langs":["Go"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.55},{"title":"Let's Create a Simple Load Balancer","url":"https://kasvith.me/posts/lets-create-a-simple-lb-go/","langs":["Go"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.55},{"title":"Video Encoding from Scratch","url":"https://github.com/kevmo314/codec-from-scratch","langs":["Go"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.55},{"title":"Writing a Build system","url":"https://xmonader.github.io/nimdays/day11_buildsystem.html","langs":["Nim"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.6},{"title":"Writing a DMIDecode Parser","url":"https://xmonader.github.io/nimdays/day01_dmidecode.html","langs":["Nim"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.6},{"title":"Writing a INI Parser","url":"https://xmonader.github.io/nimdays/day05_iniparser.html","langs":["Nim"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.6},{"title":"Writing a Link Checker","url":"https://xmonader.github.io/nimdays/day04_asynclinkschecker.html","langs":["Nim"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.6},{"title":"Writing a MiniTest Framework","url":"https://xmonader.github.io/nimdays/day08_minitest.html","langs":["Nim"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.6},{"title":"Writing a Redis Protocol Parser","url":"https://xmonader.github.io/nimdays/day12_resp.html","langs":["Nim"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.6},{"title":"Writing a URL Shortening Service","url":"https://xmonader.github.io/nimdays/day07_shorturl.html","langs":["Nim"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.6},{"title":"Building a DNS server in Rust","url":"https://github.com/EmilHernvall/dnsguide/blob/master/README.md","langs":["Rust"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.75},{"title":"WebGL + Rust: Basic Water Tutorial","url":"https://www.chinedufn.com/3d-webgl-basic-water-tutorial/","langs":["Rust"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.75},{"title":"Writing Scalable Chat Service from Scratch","url":"https://nbaksalyar.github.io/2015/07/10/writing-chat-in-rust.html","langs":["Rust"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.75},{"title":"Build your own VR headset for $200","url":"https://github.com/relativty/Relativ","langs":["C++"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.8},{"title":"How a 64k intro is made","url":"http://www.lofibucket.com/articles/64k_intro.html","langs":["C++"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.8},{"title":"How to Write a Video Player in Less Than 1000 Lines","url":"http://dranger.com/ffmpeg/ffmpeg.html","langs":["C"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.8},{"title":"How X Window Managers work and how to write one","url":"https://seasonofcode.com/posts/how-x-window-managers-work-and-how-to-write-one-part-i.html","langs":["C++"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.8},{"title":"Learn how to write a hash table in C","url":"https://github.com/jamesroutley/write-a-hash-table","langs":["C"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.8},{"title":"Make your own Game Engine","url":"https://www.youtube.com/playlist?list=PLlrATfBNZ98dC-V-N3m0Go4deliWHPFwT","langs":["C++"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.8},{"title":"Sol - An MQTT broker from scratch","url":"https://codepr.github.io/posts/sol-mqtt-broker","langs":["C"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.8},{"title":"The very basics of a terminal emulator","url":"https://www.uninformativ.de/blog/postings/2018-02-24/0/POSTING-en.html","langs":["C"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.8},{"title":"Write a System Call","url":"https://brennan.io/2016/11/14/kernel-dev-ep3/","langs":["C"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.8},{"title":"Writing a Linux Debugger","url":"https://blog.tartanllama.xyz/writing-a-linux-debugger-setup/","langs":["C++"],"category":"Uncategorized","cat_rank":99,"tier":"unsorted","video":false,"score":990.8}];
const TIERS = {
beginner: {label:"Beginner", color:"var(--t1)", soft:"var(--t1-soft)", blurb:"app-level logic, few prerequisites"},
intermediate: {label:"Intermediate", color:"var(--t2)", soft:"var(--t2-soft)", blurb:"data structures, networking, a real protocol"},
advanced: {label:"Advanced", color:"var(--t3)", soft:"var(--t3-soft)", blurb:"deep domain knowledge or large scope"},
expert: {label:"Expert", color:"var(--t4)", soft:"var(--t4-soft)", blurb:"broad + deep, little hand-holding"},
unsorted: {label:"Unsorted", color:"var(--t5)", soft:"var(--t5-soft)", blurb:"repo's uncategorized bucket — spans all levels"},
};
const TIER_ORDER = ["beginner","intermediate","advanced","expert","unsorted"];
const $ = id => document.getElementById(id);
const esc = s => s.replace(/[&<>"]/g, c => ({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"}[c]));
document.getElementById("total").textContent = GUIDES.length;
const state = {
q:"", sort:"easy", lang:"all", cat:"all",
tiers:new Set(TIER_ORDER),
};
// ---- build tier chips with counts ----
const chipsEl = $("chips");
TIER_ORDER.forEach(key=>{
const t = TIERS[key];
const n = GUIDES.filter(g=>g.tier===key).length;
const b = document.createElement("button");
b.type="button"; b.className="chip"; b.dataset.tier=key;
b.setAttribute("aria-pressed","true");
b.style.setProperty("--tc", t.color);
b.innerHTML = `<span class="dot"></span>${t.label}<span class="n">${n}</span>`;
b.addEventListener("click", ()=>{
state.tiers.has(key) ? state.tiers.delete(key) : state.tiers.add(key);
b.setAttribute("aria-pressed", state.tiers.has(key));
render();
});
chipsEl.appendChild(b);
});
// ---- language select (alpha, with counts) ----
const langCount = {};
GUIDES.forEach(g=>g.langs.forEach(l=>langCount[l]=(langCount[l]||0)+1));
const langEl = $("lang");
langEl.appendChild(new Option(`All languages (${GUIDES.length})`, "all"));
Object.keys(langCount).sort((a,b)=>a.localeCompare(b)).forEach(l=>{
langEl.appendChild(new Option(`${l} (${langCount[l]})`, l));
});
// ---- category select (in difficulty order) ----
const catMeta = {};
GUIDES.forEach(g=>{ if(!catMeta[g.category]) catMeta[g.category]={rank:g.cat_rank,n:0}; catMeta[g.category].n++; });
const catEl = $("cat");
catEl.appendChild(new Option(`All categories (30)`, "all"));
Object.keys(catMeta).sort((a,b)=>catMeta[a].rank-catMeta[b].rank).forEach(c=>{
catEl.appendChild(new Option(`${c} (${catMeta[c].n})`, c));
});
// ---- wiring ----
let t=null;
$("q").addEventListener("input", e=>{ state.q=e.target.value.toLowerCase().trim();
clearTimeout(t); t=setTimeout(render,110); });
$("sort").addEventListener("change", e=>{ state.sort=e.target.value; render(); });
$("lang").addEventListener("change", e=>{ state.lang=e.target.value; render(); });
$("cat").addEventListener("change", e=>{ state.cat=e.target.value; render(); });
$("reset").addEventListener("click", ()=>{
state.q=""; state.sort="easy"; state.lang="all"; state.cat="all";
state.tiers=new Set(TIER_ORDER);
$("q").value=""; $("sort").value="easy"; $("lang").value="all"; $("cat").value="all";
chipsEl.querySelectorAll(".chip").forEach(c=>c.setAttribute("aria-pressed","true"));
render();
});
function matches(g){
if(!state.tiers.has(g.tier)) return false;
if(state.lang!=="all" && !g.langs.includes(state.lang)) return false;
if(state.cat!=="all" && g.category!==state.cat) return false;
if(state.q){
const hay = (g.title+" "+g.category+" "+g.langs.join(" ")).toLowerCase();
if(!hay.includes(state.q)) return false;
}
return true;
}
function rowHtml(g){
const t = TIERS[g.tier];
const langs = g.langs.map(l=>`<span class="lang">${esc(l)}</span>`).join("");
const vid = g.video ? `<span class="vid">video</span>` : "";
return `<a class="row" href="${esc(g.url)}" target="_blank" rel="noopener"
style="--tc:${t.color};--tc-soft:${t.soft}">
<div>
<div class="title">${esc(g.title)}</div>
<div class="rowmeta"><span class="cat">${esc(g.category)}</span>${langs}${vid}</div>
</div>
<span class="badge">${t.label}</span>
</a>`;
}
function render(){
let rows = GUIDES.filter(matches);
if(state.sort==="az") rows.sort((a,b)=>a.title.toLowerCase().localeCompare(b.title.toLowerCase()));
else if(state.sort==="hard") rows.sort((a,b)=>b.score-a.score || a.title.localeCompare(b.title));
else rows.sort((a,b)=>a.score-b.score || a.title.localeCompare(b.title));
const main = $("main");
if(!rows.length){ main.innerHTML = `<p class="empty">No guides match these filters. Try widening them or hit <em>reset</em>.</p>`;
$("count").innerHTML = `Showing <b>0</b> of ${GUIDES.length} guides`; return; }
const grouped = state.sort!=="az";
let html = "";
if(grouped){
// score sort keeps tiers contiguous, so walk runs of the same tier
for(let i=0; i<rows.length; ){
const tier = rows[i].tier, t = TIERS[tier];
const items = [];
while(i<rows.length && rows[i].tier===tier){ items.push(rows[i]); i++; }
html += `<div class="tierhead" style="--tc:${t.color}">
<span class="bar"></span><h2>${t.label}</h2>
<span class="sub">${items.length} guide${items.length!==1?"s":""} · ${t.blurb}</span></div>`;
html += `<div class="list">${items.map(rowHtml).join("")}</div>`;
}
} else {
html = `<div class="list">${rows.map(rowHtml).join("")}</div>`;
}
main.innerHTML = html;
$("count").innerHTML = `Showing <b>${rows.length}</b> of ${GUIDES.length} guides`;
}
render();
</script>
</html>