mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-12 18:10:56 +01:00
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
321 lines
95 KiB
HTML
321 lines
95 KiB
HTML
<!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 => ({"&":"&","<":"<",">":">",'"':"""}[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>
|