Compare commits
77 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
dc7cfec897 | 3 months ago |
|
|
9418bd4b0b | 3 months ago |
|
|
dcbc659ec1 | 3 months ago |
|
|
bac6696c4b | 3 months ago |
|
|
deb3ec40f6 | 3 months ago |
|
|
b00f24ae85 | 3 months ago |
|
|
66cbe67100 | 3 months ago |
|
|
1728141517 | 3 months ago |
|
|
5dadc23246 | 3 months ago |
|
|
25adf3897f | 3 months ago |
|
|
00a9a36510 | 3 months ago |
|
|
77c131c08a | 3 months ago |
|
|
01cddd6e95 | 3 months ago |
|
|
b6f03fd967 | 3 months ago |
|
|
872ac9592c | 3 months ago |
|
|
f90dc2dc5e | 3 months ago |
|
|
e169d8b2cc | 3 months ago |
|
|
684c58fdfe | 3 months ago |
|
|
df3a288c9f | 3 months ago |
|
|
db71399b2f | 3 months ago |
|
|
ab76d35bd5 | 3 months ago |
|
|
4d4edae841 | 3 months ago |
|
|
9827dcc5b9 | 3 months ago |
|
|
995fff4046 | 3 months ago |
|
|
eecdbba9d7 | 3 months ago |
|
|
14cc879743 | 3 months ago |
|
|
86c5e4990d | 3 months ago |
|
|
c59efdc373 | 3 months ago |
|
|
549accded0 | 3 months ago |
|
|
00d195c86f | 3 months ago |
|
|
c4a59ec9ad | 3 months ago |
|
|
511c9fbf54 | 3 months ago |
|
|
5d2780a72a | 3 months ago |
|
|
49f70cc5e8 | 3 months ago |
|
|
a4d59b4371 | 3 months ago |
|
|
ab398b690c | 3 months ago |
|
|
80b998c192 | 3 months ago |
|
|
3684e196dd | 3 months ago |
|
|
401a4f45a5 | 3 months ago |
|
|
f6f652ef3e | 3 months ago |
|
|
6b90f34ccf | 3 months ago |
|
|
b0cb813740 | 3 months ago |
|
|
585f4b2f02 | 3 months ago |
|
|
c9142edbbf | 3 months ago |
|
|
15d9de3947 | 3 months ago |
|
|
5dcbb334fa | 3 months ago |
|
|
014dc39ea4 | 3 months ago |
|
|
267a95aa13 | 3 months ago |
|
|
bdf99b32c4 | 3 months ago |
|
|
d9f14bfc53 | 3 months ago |
|
|
7e2f01e822 | 3 months ago |
|
|
b48f56712e | 3 months ago |
|
|
ad06c8befb | 3 months ago |
|
|
e3fe2253f9 | 3 months ago |
|
|
d8560ef3d5 | 3 months ago |
|
|
4f1aa5560a | 3 months ago |
|
|
7529b43845 | 3 months ago |
|
|
c436ba07c7 | 3 months ago |
|
|
d317648d2f | 3 months ago |
|
|
183994b3dc | 3 months ago |
|
|
bc48924d16 | 3 months ago |
|
|
52e771e9c4 | 3 months ago |
|
|
6f7614c0c8 | 3 months ago |
|
|
a7b2d6fd4e | 3 months ago |
|
|
83f4aacdf5 | 3 months ago |
|
|
8da0d754a0 | 3 months ago |
|
|
af8c476305 | 3 months ago |
|
|
9f28d99a93 | 3 months ago |
|
|
b695cb5b6d | 3 months ago |
|
|
7bd2bf4ed5 | 3 months ago |
|
|
b0cf17ec83 | 3 months ago |
|
|
dc73fc8f69 | 3 months ago |
|
|
5926d33bcc | 3 months ago |
|
|
ec2a4055ca | 3 months ago |
|
|
65b0fdf1e2 | 3 months ago |
|
|
91ecd91176 | 3 months ago |
|
|
de99f1c047 | 3 months ago |
@ -1,6 +0,0 @@
|
|||||||
beans:
|
|
||||||
path: .beans
|
|
||||||
prefix: vibed-
|
|
||||||
id_length: 4
|
|
||||||
default_status: todo
|
|
||||||
default_type: task
|
|
||||||
@ -1,69 +0,0 @@
|
|||||||
---
|
|
||||||
# vibed-0fcp
|
|
||||||
title: Add justfiles for all projects with lint, check, build, build-release, and release recipes
|
|
||||||
status: todo
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-10T23:29:17Z
|
|
||||||
updated_at: 2026-03-10T23:29:17Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## Background
|
|
||||||
|
|
||||||
The root `TODO.md` calls for each project in the mono-repo to have a `justfile` with standard recipe names so that any contributor can run the same commands regardless of project type. `just` is a command runner similar to Make but with cleaner syntax.
|
|
||||||
|
|
||||||
## Recipes to add per project
|
|
||||||
|
|
||||||
| Recipe | What it runs |
|
|
||||||
|---|---|
|
|
||||||
| `lint` | Auto-format: `cargo fmt`, `tofu fmt`, `mdbook build` (edu), etc. |
|
|
||||||
| `check` | Static checks: `cargo check && cargo clippy`, `tofu validate && tofu plan`, etc. |
|
|
||||||
| `build` | Dev build: `cargo build`, `trunk build`, `mdbook build` |
|
|
||||||
| `build-release` | Optimised binary or bundle: `cargo build --release`, `trunk build --release` |
|
|
||||||
| `release` | Deploy/publish: `tofu apply`, `wrangler deploy` (where applicable) |
|
|
||||||
|
|
||||||
Not every project needs every recipe; stub missing ones with an error or a no-op comment.
|
|
||||||
|
|
||||||
## Per-project breakdown
|
|
||||||
|
|
||||||
### `nbd/justfile`
|
|
||||||
- `lint`: `cargo fmt`
|
|
||||||
- `check`: `cargo check && cargo clippy && cargo test`
|
|
||||||
- `build`: `cargo build`
|
|
||||||
- `build-release`: `cargo build --release`
|
|
||||||
- `release`: n/a (CLI tool, no deployment)
|
|
||||||
|
|
||||||
### `edu/justfile`
|
|
||||||
- `lint`: `mdbook build` (build validates the content)
|
|
||||||
- `check`: `mdbook build`
|
|
||||||
- `build`: `mdbook build`
|
|
||||||
- `build-release`: same as `build` (mdbook has no separate release mode)
|
|
||||||
- `release`: TBD — CF Pages auto-deploys from main branch once infra is configured (see edu deployment ticket)
|
|
||||||
|
|
||||||
### `quotesdb/api/justfile`
|
|
||||||
- `lint`: `cargo fmt`
|
|
||||||
- `check`: `cargo check && cargo clippy`
|
|
||||||
- `build`: `cargo build`
|
|
||||||
- `build-release`: `cargo build --release`
|
|
||||||
- `release`: `wrangler deploy` (or `tofu apply` from `infra/`)
|
|
||||||
|
|
||||||
### `quotesdb/ui/justfile`
|
|
||||||
- `lint`: `cargo fmt`
|
|
||||||
- `check`: `cargo check && cargo clippy`
|
|
||||||
- `build`: `trunk build`
|
|
||||||
- `build-release`: `trunk build --release`
|
|
||||||
- `release`: CF Pages auto-deploys from main branch once infra is configured
|
|
||||||
|
|
||||||
## Files to create
|
|
||||||
|
|
||||||
- `nbd/justfile`
|
|
||||||
- `edu/justfile`
|
|
||||||
- `quotesdb/api/justfile`
|
|
||||||
- `quotesdb/ui/justfile`
|
|
||||||
|
|
||||||
## Conventions
|
|
||||||
|
|
||||||
- Recipe names must be consistent across all projects (`lint`, `check`, `build`, `build-release`, `release`).
|
|
||||||
- Commands are run from the directory containing the `justfile`, so paths are relative to the project directory.
|
|
||||||
- Add a comment above each recipe explaining what it does.
|
|
||||||
- Check whether the `just` package is already in each project's Nix dev shell (`flake.nix`); add it if missing.
|
|
||||||
@ -1,67 +0,0 @@
|
|||||||
---
|
|
||||||
# vibed-wqsu
|
|
||||||
title: Add contact footer to all service front-ends
|
|
||||||
status: todo
|
|
||||||
type: task
|
|
||||||
priority: low
|
|
||||||
created_at: 2026-03-10T23:29:17Z
|
|
||||||
updated_at: 2026-03-10T23:29:17Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## Background
|
|
||||||
|
|
||||||
The root `TODO.md` calls for a footer on every service front-end with contact info:
|
|
||||||
|
|
||||||
> Contact: `<site>@elijah.run`
|
|
||||||
|
|
||||||
Where `<site>` depends on the service.
|
|
||||||
|
|
||||||
## Target services and email addresses
|
|
||||||
|
|
||||||
| Service | Front-end type | Contact email |
|
|
||||||
|---|---|---|
|
|
||||||
| `quotesdb` | Yew (Rust/Wasm) | `quotes@elijah.run` |
|
|
||||||
| `edu` | mdbook static site | `vibedbooks@elijah.run` |
|
|
||||||
| Blog editor | Yew (not yet built) | `editor@elijah.run` |
|
|
||||||
|
|
||||||
## Implementation
|
|
||||||
|
|
||||||
### quotesdb/ui
|
|
||||||
|
|
||||||
Add a `Footer` component to the Yew app:
|
|
||||||
|
|
||||||
1. Create `quotesdb/ui/src/components/footer.rs` (or add inline to `app.rs`).
|
|
||||||
2. Render a `<footer>` element at the bottom of every page with the text:
|
|
||||||
`Contact: quotes@elijah.run`
|
|
||||||
3. Use an `<a href="mailto:quotes@elijah.run">` tag so it is clickable.
|
|
||||||
4. Include the footer in the top-level layout so every route shows it.
|
|
||||||
|
|
||||||
### edu (mdbook)
|
|
||||||
|
|
||||||
mdbook supports injecting HTML before/after the content via the `[output.html]` table in `book.toml`:
|
|
||||||
|
|
||||||
```toml
|
|
||||||
[output.html]
|
|
||||||
additional-js = []
|
|
||||||
additional-css = []
|
|
||||||
```
|
|
||||||
|
|
||||||
Or use the `before-content` / `after-content` HTML templates. More precisely, create `edu/theme/footer.hbs` with the footer markup and register it in `book.toml`.
|
|
||||||
|
|
||||||
Alternatively (simpler): add a `theme/` directory with an `index.hbs` that extends the default template and appends the footer. The mdbook docs for custom theming describe this approach.
|
|
||||||
|
|
||||||
Simplest option: add `footer.html` fragment via `[output.html] additional-js` hack, or just add a sentence at the bottom of each page — but that is not scalable.
|
|
||||||
|
|
||||||
**Recommended approach for mdbook:** Use mdbook's `theme/index.hbs` override (copy the default from the mdbook source) and add the footer HTML before the closing `</body>` tag:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<footer style="text-align:center;padding:1em;opacity:0.6">
|
|
||||||
Contact: <a href="mailto:vibedbooks@elijah.run">vibedbooks@elijah.run</a>
|
|
||||||
</footer>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Files involved
|
|
||||||
|
|
||||||
- `edu/theme/index.hbs` (new — copy from mdbook default, add footer)
|
|
||||||
- `edu/book.toml` (may need `[output.html] theme = "theme"` entry)
|
|
||||||
- `quotesdb/ui/src/components/footer.rs` (new) or similar
|
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 4
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "vibed"
|
||||||
|
version = "0.1.0"
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
[package]
|
||||||
|
name = "vibed"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 4
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "common"
|
||||||
|
version = "0.1.0"
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "common"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
license = "MIT OR Apache-2.0"
|
||||||
|
description = "Shared types, utilities, and definitions for Vibesville services"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
//! Shared types, utilities, and definitions for Vibesville services.
|
||||||
|
//!
|
||||||
|
//! This crate provides common building blocks used across multiple services
|
||||||
|
//! in the Vibesville mono-repo. Services depend on it via a path dependency:
|
||||||
|
//!
|
||||||
|
//! ```toml
|
||||||
|
//! [dependencies]
|
||||||
|
//! common = { path = "../common" }
|
||||||
|
//! ```
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests;
|
||||||
@ -0,0 +1 @@
|
|||||||
|
//! Unit tests for the common crate.
|
||||||
@ -1,6 +0,0 @@
|
|||||||
beans:
|
|
||||||
path: .beans
|
|
||||||
prefix: edu-
|
|
||||||
id_length: 4
|
|
||||||
default_status: todo
|
|
||||||
default_type: task
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-3yw9
|
|
||||||
title: 'Write §2: Monte Carlo Tree Search — algorithm explained'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T20:03:17Z
|
|
||||||
updated_at: 2026-03-13T22:48:46Z
|
|
||||||
parent: edu-coqp
|
|
||||||
---
|
|
||||||
|
|
||||||
Step-by-step walkthrough of MCTS: selection (UCB1), expansion, simulation/rollout, backpropagation. Include a worked example on a small game tree.
|
|
||||||
|
|
||||||
## Summary of Changes\n\nWrote full content for §2 covering MCTS algorithm: the four phases (selection, expansion, simulation, backpropagation), UCB1/UCT formula, worked ASCII tree example, and strengths/limitations.
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-453h
|
|
||||||
title: 'Write §13: The full AlphaGo Zero training loop'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T20:03:17Z
|
|
||||||
updated_at: 2026-03-16T01:35:06Z
|
|
||||||
parent: edu-coqp
|
|
||||||
---
|
|
||||||
|
|
||||||
Reading lesson: generate → train → evaluate → promote. Discuss the ELO-based model selection step and why it matters.
|
|
||||||
|
|
||||||
## Summary of Changes\n\nWrote full content for §13 covering the complete AlphaGo Zero training loop: self-play with temperature, training, evaluation gate, and the iterative improvement cycle with complete Rust implementation.
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-4v13
|
|
||||||
title: 'Write §8: Exercise 2 — play Tic-Tac-Toe with pure MCTS'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T20:03:17Z
|
|
||||||
updated_at: 2026-03-13T23:04:14Z
|
|
||||||
parent: edu-coqp
|
|
||||||
---
|
|
||||||
|
|
||||||
Exercise: wire MCTS to the game logic from Exercise 1 and run a match. Show sample output, discuss iteration count vs strength.
|
|
||||||
|
|
||||||
## Summary of Changes
|
|
||||||
|
|
||||||
Wrote full content for §8: Exercise 2 with MCTS vs MCTS tournament (100 games, iteration count experiments), human vs MCTS CLI game, experimentation prompts, and readiness checklist.
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-5go8
|
|
||||||
title: 'Write §3: Why self-play? The AlphaGo Zero insight'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T20:03:17Z
|
|
||||||
updated_at: 2026-03-13T22:51:31Z
|
|
||||||
parent: edu-coqp
|
|
||||||
---
|
|
||||||
|
|
||||||
Explain the key insight: a capable engine can be its own teacher. Historical context (AlphaGo vs AlphaGo Zero) and why the approach generalises.
|
|
||||||
|
|
||||||
## Summary of Changes\n\nWrote full content for §3 covering the evolution from Deep Blue to AlphaGo Zero, the self-play insight, the virtuous training cycle, and how we'll adapt the approach for Tic-Tac-Toe.
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-7lu6
|
|
||||||
title: 'Write §12: Exercise 4 — replace rollout with the value network'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T20:03:17Z
|
|
||||||
updated_at: 2026-03-16T01:31:54Z
|
|
||||||
parent: edu-coqp
|
|
||||||
---
|
|
||||||
|
|
||||||
Exercise: substitute random rollout in MCTS with a neural-network value estimate; compare strength before and after.
|
|
||||||
|
|
||||||
## Summary of Changes
|
|
||||||
|
|
||||||
Wrote full content for §12: Exercise 4 covering PUCT formula, replacing random rollouts with value network evaluation, adding policy priors to MCTS nodes, modified MCTS code, and pure vs network-guided MCTS comparison.
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-brtk
|
|
||||||
title: 'Write §14: Exercise 5 — 1000 self-play games; observe improvement'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T20:03:17Z
|
|
||||||
updated_at: 2026-03-16T01:40:32Z
|
|
||||||
parent: edu-coqp
|
|
||||||
---
|
|
||||||
|
|
||||||
Capstone exercise: run the full self-play loop for 1000 games; plot win-rate over iterations; discuss what worked and what didn't.
|
|
||||||
|
|
||||||
## Summary of Changes\n\nWrote full content for §14: Exercise 5 — the capstone exercise running 1000 self-play games, tracking diagnostics, validating convergence to perfect play, and providing next steps for further learning.
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-coqp
|
|
||||||
title: 'edu: write Machine Learning chapter (self-play game AI, Alpha Go Zero style)'
|
|
||||||
status: completed
|
|
||||||
type: feature
|
|
||||||
priority: low
|
|
||||||
created_at: 2026-03-10T23:30:01Z
|
|
||||||
updated_at: 2026-03-16T01:40:56Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## Background
|
|
||||||
|
|
||||||
From `edu/TODO.md`: Hands-on: Machine Learning; training a computer to play a game by playing against itself (a-la Alpha Go Zero).
|
|
||||||
|
|
||||||
A self-play reinforcement learning course. The practical focus is implementing a simplified version of the MCTS + neural network self-play loop in Rust, targeting a simple deterministic two-player game (e.g., Tic-Tac-Toe or Connect Four).
|
|
||||||
|
|
||||||
## Content outline (suggested)
|
|
||||||
|
|
||||||
### Part 1 — Foundations
|
|
||||||
1. What is reinforcement learning? (state, action, reward, policy, value)
|
|
||||||
2. Monte Carlo Tree Search (MCTS) — algorithm explained step by step
|
|
||||||
3. Why self-play? The AlphaGo Zero insight
|
|
||||||
|
|
||||||
### Part 2 — The Game
|
|
||||||
4. Choosing a simple game: Tic-Tac-Toe as the learning vehicle
|
|
||||||
5. Representing game state in Rust
|
|
||||||
6. Exercise 1: Implement the game logic (move generation, win detection, terminal states)
|
|
||||||
|
|
||||||
### Part 3 — MCTS
|
|
||||||
7. Implementing MCTS in Rust (selection, expansion, simulation, backpropagation)
|
|
||||||
8. Exercise 2: Play Tic-Tac-Toe with pure MCTS (no neural network)
|
|
||||||
|
|
||||||
### Part 4 — Neural Network Policy/Value Head
|
|
||||||
9. Overview of the network architecture (shared trunk + policy head + value head)
|
|
||||||
10. Integrating a neural network crate (e.g., `tch-rs` or `candle`)
|
|
||||||
11. Exercise 3: Train the network on MCTS-generated data
|
|
||||||
12. Exercise 4: Replace MCTS simulation with the learned value function
|
|
||||||
|
|
||||||
### Part 5 — Self-Play Loop
|
|
||||||
13. The full Alpha Go Zero training loop: generate data → train → evaluate → repeat
|
|
||||||
14. Exercise 5: Run 1000 self-play games and observe the policy improving
|
|
||||||
|
|
||||||
## File to create
|
|
||||||
|
|
||||||
- `edu/src/ml-self-play.md`
|
|
||||||
- Add to `edu/src/SUMMARY.md` under a `# Machine Learning` section
|
|
||||||
|
|
||||||
## Summary of Changes\n\nAll 14 sections written (7,622 lines total). The chapter covers:\n- Part 1 (§1-3): RL fundamentals, MCTS algorithm, AlphaGo Zero insight\n- Part 2 (§4-6): Tic-Tac-Toe as learning vehicle, Rust game state, Exercise 1\n- Part 3 (§7-8): MCTS implementation in Rust, Exercise 2 (pure MCTS play)\n- Part 4 (§9-12): NN from scratch, training on MCTS data, PUCT-guided MCTS\n- Part 5 (§13-14): Full self-play training loop, capstone exercise
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-e39n
|
|
||||||
title: 'Write §5: Representing game state in Rust'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T20:03:17Z
|
|
||||||
updated_at: 2026-03-13T22:56:30Z
|
|
||||||
parent: edu-coqp
|
|
||||||
---
|
|
||||||
|
|
||||||
Reading lesson: design of Board, Player, Move types. Discuss representation trade-offs (bitboard vs array). Show the full type definitions.
|
|
||||||
|
|
||||||
## Summary of Changes
|
|
||||||
|
|
||||||
Wrote full content for §5 covering Rust game state representation: Player enum, GameState struct, board indexing, Display impl, move generation, winner checking, and immutable apply_move design.
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-iv0k
|
|
||||||
title: 'Write §9: Neural network architecture overview'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T20:03:17Z
|
|
||||||
updated_at: 2026-03-13T23:07:35Z
|
|
||||||
parent: edu-coqp
|
|
||||||
---
|
|
||||||
|
|
||||||
Conceptual lesson: shared convolutional trunk, policy head (move probabilities), value head (win probability). Diagrams encouraged. No code yet.
|
|
||||||
|
|
||||||
## Summary of Changes
|
|
||||||
|
|
||||||
Wrote full content for §9 covering neural network fundamentals from scratch: neurons/weights/biases, layers, forward pass, training intuition, and the dual-headed policy+value architecture for game AI with concrete TTT dimensions.
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-k3tq
|
|
||||||
title: 'Write §4: Choosing a simple game — Tic-Tac-Toe'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T20:03:17Z
|
|
||||||
updated_at: 2026-03-13T22:53:54Z
|
|
||||||
parent: edu-coqp
|
|
||||||
---
|
|
||||||
|
|
||||||
Explain why Tic-Tac-Toe is ideal: small state space, deterministic, zero-sum, easily verifiable. Foreshadow how the same approach scales to Go/Chess.
|
|
||||||
|
|
||||||
## Summary of Changes
|
|
||||||
|
|
||||||
Wrote full content for §4 covering why Tic-Tac-Toe is the ideal learning vehicle: suitable game properties, game tree size, known optimal solution as validation target, and comparison with alternatives.
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-lqky
|
|
||||||
title: 'Write §11: Exercise 3 — train the network on MCTS data'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T20:03:17Z
|
|
||||||
updated_at: 2026-03-16T00:32:55Z
|
|
||||||
parent: edu-coqp
|
|
||||||
---
|
|
||||||
|
|
||||||
Exercise: generate training examples (state, policy vector, value) from pure MCTS self-play; run one training epoch; log loss.
|
|
||||||
|
|
||||||
## Summary of Changes\n\nWrote full content for §11: Exercise 3 covering MCTS data generation pipeline, TrainingExample struct, mini-batch SGD training loop, loss tracking, network evaluation, and experimentation prompts.
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-of9y
|
|
||||||
title: 'Write §7: Implementing MCTS in Rust'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T20:03:17Z
|
|
||||||
updated_at: 2026-03-13T23:01:59Z
|
|
||||||
parent: edu-coqp
|
|
||||||
---
|
|
||||||
|
|
||||||
Walk through selection (UCB1 formula), expansion, simulation (random rollout), backpropagation. Show Rust code for the node structure and the four phases.
|
|
||||||
|
|
||||||
## Summary of Changes\n\nWrote full content for §7 covering MCTS implementation in Rust: arena-allocated node structure, all four phases implemented and explained, UCT calculation, main loop, and move selection.
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-pvou
|
|
||||||
title: 'Write §10: Integrating a neural network crate'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T20:03:17Z
|
|
||||||
updated_at: 2026-03-13T23:11:44Z
|
|
||||||
parent: edu-coqp
|
|
||||||
---
|
|
||||||
|
|
||||||
Reading lesson: evaluate tch-rs vs candle for this use case; show how to define and initialise the network; basic forward-pass usage.
|
|
||||||
|
|
||||||
## Summary of Changes\n\nWrote full content for §10 covering from-scratch neural network implementation in Rust: Layer struct, forward pass with ReLU/softmax/tanh, illegal move masking, Xavier initialization, backpropagation, SGD training, and complete compilable code.
|
|
||||||
@ -1,77 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-tx54
|
|
||||||
title: Deploy edu mdbook to Cloudflare Pages at vibebooks.elijah.run
|
|
||||||
status: completed
|
|
||||||
type: epic
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-10T23:30:01Z
|
|
||||||
updated_at: 2026-03-10T23:30:01Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## Background
|
|
||||||
|
|
||||||
From `edu/TODO.md`:
|
|
||||||
- Host the mdbook on Cloudflare Pages
|
|
||||||
- Host on vibebooks.elijah.run
|
|
||||||
- Create an `infra/` directory containing opentofu configs for the above
|
|
||||||
- Add a big disclaimer about the content being AI-generated
|
|
||||||
|
|
||||||
## Sub-tasks
|
|
||||||
|
|
||||||
### 1. Add AI-generated disclaimer
|
|
||||||
|
|
||||||
Add a prominent disclaimer page or preface to the mdbook. The disclaimer should say (in the user's words):
|
|
||||||
> these [chapters] are AI generated and not intended to be definitive, trustworthy, or even good, just an experiment in generating tailored educational content about topics I am interested in but not sure where to start, and with a practical focus on exercises with Rust since that is the language I use most often
|
|
||||||
|
|
||||||
Placement options:
|
|
||||||
- A dedicated `src/disclaimer.md` page added first in `src/SUMMARY.md`
|
|
||||||
- Or a callout block at the top of every chapter (requires mdbook preprocessor)
|
|
||||||
- Recommended: `src/disclaimer.md` as the first page, with a short note in each chapter's preamble
|
|
||||||
|
|
||||||
### 2. Create `edu/infra/` with OpenTofu configs
|
|
||||||
|
|
||||||
Follow the pattern from `quotesdb/infra/` (Cloudflare provider, tofu modules).
|
|
||||||
|
|
||||||
Minimal resources:
|
|
||||||
- `cloudflare_pages_project` — create the Pages project named `vibedbooks`
|
|
||||||
- `cloudflare_pages_domain` — bind `vibebooks.elijah.run` to the Pages project
|
|
||||||
- `cloudflare_record` — CNAME DNS record pointing `vibebooks` at the Pages subdomain
|
|
||||||
|
|
||||||
File layout:
|
|
||||||
```
|
|
||||||
edu/infra/
|
|
||||||
├── main.tf # provider config, cloudflare_pages_project
|
|
||||||
├── dns.tf # cloudflare_record and cloudflare_pages_domain
|
|
||||||
├── variables.tf # cloudflare_account_id, cloudflare_zone_id, etc.
|
|
||||||
├── outputs.tf # pages subdomain URL
|
|
||||||
└── .gitignore # *.tfstate, .terraform/
|
|
||||||
```
|
|
||||||
|
|
||||||
All `resource` and `data` blocks must have a comment explaining their purpose (per CLAUDE.md conventions).
|
|
||||||
|
|
||||||
### 3. Configure mdbook build for CF Pages
|
|
||||||
|
|
||||||
Cloudflare Pages can auto-build mdbook sites if given the right build command and output directory. Set in the Pages project config:
|
|
||||||
- Build command: `mdbook build`
|
|
||||||
- Build output directory: `book`
|
|
||||||
- Root directory: `edu/`
|
|
||||||
|
|
||||||
Alternatively, use a CI/CD pipeline (GitHub Actions / Gitea Actions) to build and push to the Pages project via `wrangler pages deploy`.
|
|
||||||
|
|
||||||
### 4. Add edu/justfile
|
|
||||||
|
|
||||||
Add a `release` recipe to `edu/justfile` (see justfiles ticket) that triggers the Pages deployment once infra is configured.
|
|
||||||
|
|
||||||
## Relevant files
|
|
||||||
|
|
||||||
- `edu/book.toml` — mdbook configuration
|
|
||||||
- `edu/src/SUMMARY.md` — add disclaimer page
|
|
||||||
- `edu/src/disclaimer.md` (new)
|
|
||||||
- `edu/infra/` (new directory)
|
|
||||||
- Cloudflare dashboard: Pages project, DNS zone `elijah.run`
|
|
||||||
|
|
||||||
## Validation
|
|
||||||
|
|
||||||
- `tofu validate && tofu plan` from `edu/infra/`
|
|
||||||
- `mdbook build` from `edu/` — builds without errors
|
|
||||||
- After deploy: `curl -I https://vibebooks.elijah.run` returns 200
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-wobk
|
|
||||||
title: 'Write §1: What is reinforcement learning?'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T20:03:17Z
|
|
||||||
updated_at: 2026-03-13T22:46:18Z
|
|
||||||
parent: edu-coqp
|
|
||||||
---
|
|
||||||
|
|
||||||
Cover: state, action, reward, policy, value function. Intuitive explanation with a game-playing example. No code.
|
|
||||||
|
|
||||||
## Summary of Changes\n\nWrote full content for §1 covering RL fundamentals: agent/environment loop, state/action/reward/policy/value concepts, contrast with supervised/unsupervised learning, and why RL fits games.
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-ymux
|
|
||||||
title: 'Write §6: Exercise 1 — implement Tic-Tac-Toe game logic'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T20:03:17Z
|
|
||||||
updated_at: 2026-03-13T22:58:06Z
|
|
||||||
parent: edu-coqp
|
|
||||||
---
|
|
||||||
|
|
||||||
Hands-on exercise: move generation, win detection, terminal-state check, displaying the board. Include starter code and expected test output.
|
|
||||||
|
|
||||||
## Summary of Changes\n\nWrote full content for §6: Exercise 1 with project setup instructions, 8 unit test specifications with collapsible solutions, a random-game main function, and a readiness checklist.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-10m1
|
|
||||||
title: '§9 Exercise 2: draw a coloured triangle'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:54:52Z
|
|
||||||
updated_at: 2026-03-16T02:30:28Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the exercise to draw a hard-coded coloured triangle: define three vertices in a vertex buffer, write a vertex shader that passes colour through, write a fragment shader that outputs the interpolated colour. First rendered geometry. Part 3 of the Shader Programming chapter.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-1nox
|
|
||||||
title: §17 Signed Distance Fields for font rendering
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:55:11Z
|
|
||||||
updated_at: 2026-03-16T02:30:28Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the conceptual section on SDFs for font rendering: what an SDF encodes, why it scales better than bitmaps, how to threshold and anti-alias in the fragment shader. Brief — reading and intuition only. Part 6 of the Shader Programming chapter.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-2ak3
|
|
||||||
title: §3 What is WGSL? Syntax overview
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:54:41Z
|
|
||||||
updated_at: 2026-03-16T02:30:27Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the WGSL syntax overview: types (scalars, vectors, matrices), functions, entry points, built-in variables (@vertex, @fragment, @builtin), uniforms and bindings. Show annotated snippets of a minimal vertex+fragment shader pair. Part 1 of the Shader Programming chapter.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-2sqo
|
|
||||||
title: '§13 Compute pipelines: dispatching work groups'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:55:02Z
|
|
||||||
updated_at: 2026-03-16T02:30:28Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the lesson on compute shaders: ComputePipeline vs RenderPipeline, dispatch_workgroups, workgroup size declarations in WGSL, global_invocation_id and how threads are indexed. Part 5 of the Shader Programming chapter.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-32xl
|
|
||||||
title: 'Write §1: What is a language model?'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T22:01:47Z
|
|
||||||
updated_at: 2026-03-16T02:30:26Z
|
|
||||||
parent: edu-u2w7
|
|
||||||
---
|
|
||||||
|
|
||||||
Next-token prediction as the core task. Intuitive framing: a model that guesses what comes next, trained on raw text. GPT-1 context. No code.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-3l9h
|
|
||||||
title: §7 Vertices, buffers, and the vertex shader
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:54:49Z
|
|
||||||
updated_at: 2026-03-16T02:30:28Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the lesson on vertex data: vertex structs in Rust, VertexBufferLayout, uploading a buffer to the GPU with wgpu::util::DeviceExt, and what the vertex shader receives (position, colour, normals). Part 3 of the Shader Programming chapter.
|
|
||||||
@ -1,56 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-4u7w
|
|
||||||
title: 'edu: write chapter on shader programming'
|
|
||||||
status: completed
|
|
||||||
type: feature
|
|
||||||
priority: low
|
|
||||||
created_at: 2026-03-10T23:30:00Z
|
|
||||||
updated_at: 2026-03-16T02:32:28Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## Background
|
|
||||||
|
|
||||||
From `edu/TODO.md`: Hands-on: Shader programming.
|
|
||||||
|
|
||||||
A practical introduction to GPU shaders, written with Rust as the host language. The course covers the graphics pipeline conceptually and has hands-on exercises writing WGSL shaders driven by `wgpu`.
|
|
||||||
|
|
||||||
## Content outline (suggested)
|
|
||||||
|
|
||||||
### Part 1 — The GPU and the Graphics Pipeline
|
|
||||||
1. CPU vs GPU: parallel execution model
|
|
||||||
2. The programmable pipeline: vertex shaders, fragment shaders, compute shaders
|
|
||||||
3. What is WGSL? (WebGPU Shading Language) — syntax overview
|
|
||||||
|
|
||||||
### Part 2 — Setting Up with wgpu
|
|
||||||
4. What is `wgpu`? Cross-platform graphics API in Rust
|
|
||||||
5. Exercise 1: Create a window and clear it to a colour (the GPU 'hello world')
|
|
||||||
6. The render loop: swap chains, frames, command encoders
|
|
||||||
|
|
||||||
### Part 3 — Vertex and Fragment Shaders
|
|
||||||
7. Vertices, buffers, and the vertex shader
|
|
||||||
8. Interpolation and the fragment shader
|
|
||||||
9. Exercise 2: Draw a coloured triangle
|
|
||||||
10. Exercise 3: Animate the triangle using a time uniform
|
|
||||||
|
|
||||||
### Part 4 — Textures and Samplers
|
|
||||||
11. Texture coordinates (UVs), texture creation, sampler config
|
|
||||||
12. Exercise 4: Render a textured quad
|
|
||||||
|
|
||||||
### Part 5 — Compute Shaders
|
|
||||||
13. Compute pipelines: dispatching work groups
|
|
||||||
14. Storage buffers and read/write access from WGSL
|
|
||||||
15. Exercise 5: GPU-accelerate a particle simulation
|
|
||||||
|
|
||||||
### Part 6 — Going Further
|
|
||||||
16. Post-processing effects (bloom, blur) — conceptual overview
|
|
||||||
17. Signed Distance Fields for font rendering
|
|
||||||
18. Resources: Learn WGPU tutorial, Shadertoy, The Book of Shaders
|
|
||||||
|
|
||||||
## File to create
|
|
||||||
|
|
||||||
- `edu/src/shaders.md`
|
|
||||||
- Add to `edu/src/SUMMARY.md` under a `# Graphics` section
|
|
||||||
|
|
||||||
## Summary of Changes
|
|
||||||
|
|
||||||
All 18 sections written with full educational content covering the GPU execution model, wgpu setup, vertex/fragment shaders, textures, compute shaders, and advanced topics. ~4400 lines of content including full Rust+WGSL code examples, ASCII diagrams, and 5 hands-on exercises.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-5g0l
|
|
||||||
title: '§1 CPU vs GPU: parallel execution model'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:54:37Z
|
|
||||||
updated_at: 2026-03-16T02:30:27Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the lesson on the CPU vs GPU execution model: SIMD vs SIMT, thread hierarchies (threads, warps/waves, workgroups), why GPUs excel at data-parallel work and struggle with branching. Part 1 of the Shader Programming chapter.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-6jjp
|
|
||||||
title: '§5 Exercise 1: create a window and clear it to a colour'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:54:44Z
|
|
||||||
updated_at: 2026-03-16T02:30:27Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the first hands-on exercise: create a winit window, initialise a wgpu surface, and clear it to a solid colour each frame. Walk through Instance → Adapter → Device → Surface → RenderPass with annotated Rust code. The GPU hello world. Part 2 of the Shader Programming chapter.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-7do4
|
|
||||||
title: 'Write §2: Character-level tokenisation'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T22:01:48Z
|
|
||||||
updated_at: 2026-03-16T02:30:26Z
|
|
||||||
parent: edu-u2w7
|
|
||||||
---
|
|
||||||
|
|
||||||
Explain BPE vs byte-level vs character-level. Motivate character-level as the simplest choice for a from-scratch exercise. Show vocabulary construction.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-7m8d
|
|
||||||
title: '§18 Resources: Learn WGPU, Shadertoy, The Book of Shaders'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:55:12Z
|
|
||||||
updated_at: 2026-03-16T02:30:28Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the resources and next-steps section: links and descriptions for the Learn WGPU tutorial, Shadertoy for experimentation, The Book of Shaders for mathematical foundations, and any other curated pointers. Part 6 of the Shader Programming chapter.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-9cnd
|
|
||||||
title: 'Write §6: The Transformer block'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T22:01:55Z
|
|
||||||
updated_at: 2026-03-16T02:30:26Z
|
|
||||||
parent: edu-u2w7
|
|
||||||
---
|
|
||||||
|
|
||||||
Attention sublayer + 2-layer feed-forward network + residual connections + layer norm. Describe the GPT-1 block layout. Diagrams encouraged.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-9lda
|
|
||||||
title: '§16 Post-processing effects (bloom, blur): conceptual overview'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:55:11Z
|
|
||||||
updated_at: 2026-03-16T02:30:28Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the conceptual overview of post-processing: render to texture (off-screen framebuffer), Gaussian blur as a separable two-pass compute shader, bloom as blur applied to bright regions. No full exercise — reading only. Part 6 of the Shader Programming chapter.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-9sb7
|
|
||||||
title: 'Write §14: Further reading'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T22:02:08Z
|
|
||||||
updated_at: 2026-03-16T02:30:26Z
|
|
||||||
parent: edu-u2w7
|
|
||||||
---
|
|
||||||
|
|
||||||
Curated pointers: Attention is All You Need paper, GPT-1 paper, Karpathy's nanoGPT, candle docs, The Illustrated Transformer blog post.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-abdu
|
|
||||||
title: 'Write §10: Cross-entropy loss and the training loop'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T22:02:02Z
|
|
||||||
updated_at: 2026-03-16T02:30:26Z
|
|
||||||
parent: edu-u2w7
|
|
||||||
---
|
|
||||||
|
|
||||||
Next-token prediction loss: cross-entropy over the vocab. Adam optimiser. Training loop structure: batch → forward → loss → backward → step. No bells and whistles.
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-al3r
|
|
||||||
title: 'edu: write chapter on co-op worker-owned business structure'
|
|
||||||
status: todo
|
|
||||||
type: task
|
|
||||||
priority: low
|
|
||||||
created_at: 2026-03-10T23:30:01Z
|
|
||||||
updated_at: 2026-03-10T23:30:01Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## Background
|
|
||||||
|
|
||||||
From `edu/TODO.md`: write a chapter about how to structure a co-op profit-sharing worker-owned business.
|
|
||||||
|
|
||||||
This is a conceptual/informational chapter, not a Rust hands-on. It fits naturally in the Vibed Learning book as a practical guide for engineers who might want to start or join a worker cooperative.
|
|
||||||
|
|
||||||
## Content outline (suggested)
|
|
||||||
|
|
||||||
1. **What is a worker cooperative?** — definition, historical examples, how they differ from traditional businesses
|
|
||||||
2. **Legal structures** — co-op incorporation options by jurisdiction (US LCA/LLC, UK LLP, etc.), relevant legislation
|
|
||||||
3. **Profit sharing models** — patronage dividends, equal shares, labor-hour weighted, hybrid approaches
|
|
||||||
4. **Governance** — one-member-one-vote, board structure, decision-making processes
|
|
||||||
5. **Practical startup steps** — founding documents, initial capital, operating agreements
|
|
||||||
6. **Case studies** — Mondragon, REI, Cooperative Home Care Associates, tech co-ops (Loomio, etc.)
|
|
||||||
7. **Resources and further reading**
|
|
||||||
|
|
||||||
## File to create
|
|
||||||
|
|
||||||
- `edu/src/co-op.md`
|
|
||||||
- Add to `edu/src/SUMMARY.md` under a new `# Business` section (or `# Other Topics`)
|
|
||||||
|
|
||||||
## Notes
|
|
||||||
|
|
||||||
This chapter is explicitly not intended to be authoritative legal or financial advice — add the standard AI-generated disclaimer.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-bycd
|
|
||||||
title: §11 Texture coordinates (UVs), texture creation, sampler config
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:54:56Z
|
|
||||||
updated_at: 2026-03-16T02:30:28Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the lesson on textures: UV coordinates, wgpu texture creation from image data, TextureView, Sampler configuration (filter modes, address modes), and bind group layout for textures. Part 4 of the Shader Programming chapter.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-cr0w
|
|
||||||
title: '§10 Exercise 3: animate the triangle using a time uniform'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:54:54Z
|
|
||||||
updated_at: 2026-03-16T02:30:28Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the exercise to animate the coloured triangle: introduce uniform buffers, upload a time value each frame, rotate or pulse the triangle in the vertex shader using the time uniform. Introduces the uniform/bind-group pattern. Part 3 of the Shader Programming chapter.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-exby
|
|
||||||
title: '§15 Exercise 5: GPU-accelerate a particle simulation'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:55:05Z
|
|
||||||
updated_at: 2026-03-16T02:30:28Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the compute shader exercise: implement an N-body or simple gravity particle simulation. Store particle positions and velocities in storage buffers, update them in a compute shader each frame, render the result as points. Part 5 of the Shader Programming chapter.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-ga8p
|
|
||||||
title: §8 Interpolation and the fragment shader
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:54:50Z
|
|
||||||
updated_at: 2026-03-16T02:30:28Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the lesson on rasterisation and interpolation: how values output from the vertex shader are interpolated across fragments, what the fragment shader receives and outputs (colour), and how the pipeline assembles a final image. Part 3 of the Shader Programming chapter.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-hrfy
|
|
||||||
title: '§6 The render loop: swap chains, frames, command encoders'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:54:44Z
|
|
||||||
updated_at: 2026-03-16T02:30:27Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the lesson on the wgpu render loop: SurfaceTexture acquisition, CommandEncoder, RenderPass, queue submission, present. Explain double/triple buffering conceptually. Part 2 of the Shader Programming chapter.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-hufe
|
|
||||||
title: 'Write §7: Exercise 2 — implement self-attention in Rust'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T22:01:56Z
|
|
||||||
updated_at: 2026-03-16T02:30:26Z
|
|
||||||
parent: edu-u2w7
|
|
||||||
---
|
|
||||||
|
|
||||||
Implement scaled dot-product attention using candle tensors. Single head, causal mask, softmax, output projection. Reader writes the core attention function.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-i76z
|
|
||||||
title: 'Write §12: Exercise 5 — sample from the model'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T22:02:05Z
|
|
||||||
updated_at: 2026-03-16T02:30:26Z
|
|
||||||
parent: edu-u2w7
|
|
||||||
---
|
|
||||||
|
|
||||||
Temperature sampling and greedy decoding. Prompt the trained model and decode character-by-character. Compare output at different training checkpoints.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-j35d
|
|
||||||
title: §4 What is wgpu? Cross-platform graphics API in Rust
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:54:43Z
|
|
||||||
updated_at: 2026-03-16T02:30:27Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the wgpu introduction: what it is, how it maps to WebGPU/Vulkan/Metal/D3D12, the key types (Instance, Adapter, Device, Queue, Surface), and how it differs from OpenGL. Part 2 of the Shader Programming chapter.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-jybf
|
|
||||||
title: 'Write §11: Exercise 4 — train on a small text corpus'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T22:02:04Z
|
|
||||||
updated_at: 2026-03-16T02:30:26Z
|
|
||||||
parent: edu-u2w7
|
|
||||||
---
|
|
||||||
|
|
||||||
Use a small public-domain text (e.g. Shakespeare's sonnets or a children's book). Show data loading, batching with random windows, training loop, loss curve. Reader runs training and watches loss fall.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-kkjc
|
|
||||||
title: 'Write §13: What limits this model?'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T22:02:07Z
|
|
||||||
updated_at: 2026-03-16T02:30:26Z
|
|
||||||
parent: edu-u2w7
|
|
||||||
---
|
|
||||||
|
|
||||||
Honest assessment: context length, data size, model capacity, compute. Explain why GPT-1 was a big deal in 2018 and what GPT-2/3/4 changed. No code.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-r52d
|
|
||||||
title: '§2 The programmable pipeline: vertex, fragment, compute shaders'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:54:39Z
|
|
||||||
updated_at: 2026-03-16T02:30:27Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the lesson on the programmable graphics pipeline: what happens at each stage, which stages are programmable, what vertex and fragment shaders each receive and output, and where compute shaders fit. Part 1 of the Shader Programming chapter.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-s6mr
|
|
||||||
title: 'Write §5: Self-attention — queries, keys, and values'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T22:01:53Z
|
|
||||||
updated_at: 2026-03-16T02:30:26Z
|
|
||||||
parent: edu-u2w7
|
|
||||||
---
|
|
||||||
|
|
||||||
Derive the scaled dot-product attention formula from first principles. Single-head attention only (GPT-1 simplicity). Causal masking explained here.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-tufd
|
|
||||||
title: 'Write §3: Exercise 1 — build a character-level tokeniser in Rust'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T22:01:50Z
|
|
||||||
updated_at: 2026-03-16T02:30:26Z
|
|
||||||
parent: edu-u2w7
|
|
||||||
---
|
|
||||||
|
|
||||||
Implement encode/decode over a fixed character vocabulary. Read a text file, build vocab, encode to integers, decode back. No external crates.
|
|
||||||
@ -1,54 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-u2w7
|
|
||||||
title: 'edu: write chapter on creating and training a simple LLM'
|
|
||||||
status: completed
|
|
||||||
type: feature
|
|
||||||
priority: low
|
|
||||||
created_at: 2026-03-10T23:30:00Z
|
|
||||||
updated_at: 2026-03-16T02:32:26Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## Background
|
|
||||||
|
|
||||||
From `edu/TODO.md`: Hands-on: Creating and training a simple LLM.
|
|
||||||
|
|
||||||
A practical course on building a small language model from scratch in Rust, covering tokenisation, the Transformer architecture, and a training loop. The goal is deep understanding rather than production scale.
|
|
||||||
|
|
||||||
## Content outline (suggested)
|
|
||||||
|
|
||||||
### Part 1 — What is a Language Model?
|
|
||||||
1. Predicting the next token: the core task
|
|
||||||
2. Tokenisation: BPE, byte-level, character-level — pick character-level for simplicity
|
|
||||||
3. Exercise 1: Build a character-level tokeniser in Rust
|
|
||||||
|
|
||||||
### Part 2 — The Transformer Architecture
|
|
||||||
4. Embeddings and positional encoding
|
|
||||||
5. Self-attention: queries, keys, values — the attention formula
|
|
||||||
6. Multi-head attention
|
|
||||||
7. Feed-forward sublayers, residual connections, layer norm
|
|
||||||
8. Exercise 2: Implement a single attention head in Rust (no ML framework)
|
|
||||||
|
|
||||||
### Part 3 — Assembling the Model
|
|
||||||
9. Stacking Transformer blocks into a decoder-only LM
|
|
||||||
10. Using `candle` (Hugging Face's Rust ML framework) for tensor ops and autodiff
|
|
||||||
11. Exercise 3: Define a small GPT-like model in `candle`
|
|
||||||
|
|
||||||
### Part 4 — Training
|
|
||||||
12. Cross-entropy loss for next-token prediction
|
|
||||||
13. The training loop: forward pass, loss, backward pass, optimizer step
|
|
||||||
14. Exercise 4: Train on a small text corpus (e.g., Shakespeare or a short book)
|
|
||||||
15. Exercise 5: Sample from the model and observe output quality vs. training steps
|
|
||||||
|
|
||||||
### Part 5 — Reflection
|
|
||||||
16. What limits this model? Scale, data, compute
|
|
||||||
17. Pointers to real LLM training (GPT-2, LLaMA, Mistral)
|
|
||||||
18. Further reading
|
|
||||||
|
|
||||||
## File to create
|
|
||||||
|
|
||||||
- `edu/src/llm-from-scratch.md`
|
|
||||||
- Add to `edu/src/SUMMARY.md` under the `# Machine Learning` section
|
|
||||||
|
|
||||||
## Summary of Changes
|
|
||||||
|
|
||||||
All 14 sections written with full educational content covering language modeling basics, the Transformer architecture, model assembly with candle, training, and reflection. ~1900 lines of content including code examples, ASCII diagrams, and exercises.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-uxa1
|
|
||||||
title: §14 Storage buffers and read/write access from WGSL
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:55:04Z
|
|
||||||
updated_at: 2026-03-16T02:30:28Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the lesson on storage buffers: var<storage, read_write> in WGSL, creating STORAGE | COPY_SRC buffers in Rust, reading results back to CPU, and the difference between uniform and storage buffers. Part 5 of the Shader Programming chapter.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-vqxk
|
|
||||||
title: 'Write §8: A decoder-only LM — stacking blocks and the causal mask'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T22:01:58Z
|
|
||||||
updated_at: 2026-03-16T02:30:26Z
|
|
||||||
parent: edu-u2w7
|
|
||||||
---
|
|
||||||
|
|
||||||
Explain how N transformer blocks are stacked. Causal mask ensures each position only attends to past tokens. Tie weights to the unembedding matrix (GPT-1 style). Final linear + softmax for logits.
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# edu-xv9j
|
|
||||||
title: '§12 Exercise 4: render a textured quad'
|
|
||||||
status: completed
|
|
||||||
type: task
|
|
||||||
priority: normal
|
|
||||||
created_at: 2026-03-13T19:54:58Z
|
|
||||||
updated_at: 2026-03-16T02:30:28Z
|
|
||||||
parent: edu-4u7w
|
|
||||||
---
|
|
||||||
|
|
||||||
Write the exercise to render a textured quad: two triangles forming a rectangle, UV coordinates per vertex, load an image with the image crate, upload to a wgpu texture, sample it in the fragment shader. Part 4 of the Shader Programming chapter.
|
|
||||||
@ -0,0 +1 @@
|
|||||||
|
use flake
|
||||||
@ -0,0 +1 @@
|
|||||||
|
cache.db
|
||||||
@ -1,12 +1,10 @@
|
|||||||
---
|
+++
|
||||||
# edu-y4e6
|
title = "§18 What's Next: Extensions and Further Reading"
|
||||||
title: '§18 What''s Next: Extensions and Further Reading'
|
priority = 5
|
||||||
status: completed
|
status = "todo"
|
||||||
type: task
|
ticket_type = "task"
|
||||||
priority: normal
|
dependencies = []
|
||||||
created_at: 2026-03-10T23:30:00Z
|
+++
|
||||||
updated_at: 2026-03-10T23:30:00Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## §18 What's Next: Extensions and Further Reading — Stub to fill
|
## §18 What's Next: Extensions and Further Reading — Stub to fill
|
||||||
|
|
||||||
@ -1,12 +1,10 @@
|
|||||||
---
|
+++
|
||||||
# edu-63ze
|
title = "§13 Generating C: Atoms and Expressions"
|
||||||
title: '§13 Generating C: Atoms and Expressions'
|
priority = 5
|
||||||
status: completed
|
status = "todo"
|
||||||
type: task
|
ticket_type = "task"
|
||||||
priority: normal
|
dependencies = []
|
||||||
created_at: 2026-03-10T23:30:00Z
|
+++
|
||||||
updated_at: 2026-03-10T23:30:00Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## §13 Generating C: Atoms and Expressions — Stub to fill
|
## §13 Generating C: Atoms and Expressions — Stub to fill
|
||||||
|
|
||||||
@ -1,12 +1,8 @@
|
|||||||
---
|
+++
|
||||||
# edu-4gok
|
title = "Markov exercise: N-gram Generalization (Rust)"
|
||||||
title: 'Markov exercise: N-gram Generalization (Rust)'
|
priority = 7
|
||||||
status: completed
|
status = "done"
|
||||||
type: task
|
ticket_type = "task"
|
||||||
priority: high
|
dependencies = []
|
||||||
created_at: 2026-03-10T23:30:00Z
|
+++
|
||||||
updated_at: 2026-03-13T22:37:26Z
|
Write Section 8 of edu/markov.md: Exercise 4 — N-gram Generalization\n\nLearning objectives:\n- Generalize from bigrams to arbitrary-order n-gram chains\n- Use Vec<String> as a HashMap key (or a joined string)\n- Empirically compare output quality for n = 1, 2, 3, 4\n\nContent to produce:\n- Setup instructions (extend Exercise 3 project)\n- Step-by-step hints:\n 1. Modify train to use a sliding window of n words as the key\n 2. Modify generate to maintain a deque/window of the last n words\n 3. Run on the same corpus with n = 1, 2, 3, 4 and print 50 words each\n 4. Discuss observations: when does it start memorising the corpus?\n- Full reference solution\n- Stretch goal: implement character-level n-grams instead of word-level\n\nTarget: replace the stub in edu/markov.md §8
|
||||||
parent: edu-svom
|
|
||||||
---
|
|
||||||
|
|
||||||
Write Section 8 of edu/markov.md: Exercise 4 — N-gram Generalization\n\nLearning objectives:\n- Generalize from bigrams to arbitrary-order n-gram chains\n- Use Vec<String> as a HashMap key (or a joined string)\n- Empirically compare output quality for n = 1, 2, 3, 4\n\nContent to produce:\n- Setup instructions (extend Exercise 3 project)\n- Step-by-step hints:\n 1. Modify train to use a sliding window of n words as the key\n 2. Modify generate to maintain a deque/window of the last n words\n 3. Run on the same corpus with n = 1, 2, 3, 4 and print 50 words each\n 4. Discuss observations: when does it start memorising the corpus?\n- Full reference solution\n- Stretch goal: implement character-level n-grams instead of word-level\n\nTarget: replace the stub in edu/markov.md §8
|
|
||||||
@ -1,12 +1,8 @@
|
|||||||
---
|
+++
|
||||||
# edu-7cp2
|
title = "Markov exercise: Weather Model (Rust)"
|
||||||
title: 'Markov exercise: Weather Model (Rust)'
|
priority = 7
|
||||||
status: completed
|
status = "archived"
|
||||||
type: task
|
ticket_type = "task"
|
||||||
priority: high
|
dependencies = []
|
||||||
created_at: 2026-03-10T23:30:00Z
|
+++
|
||||||
updated_at: 2026-03-13T22:37:25Z
|
Write Section 4 of edu/markov.md: Exercise 1 — Weather Model\n\nLearning objectives:\n- Translate a transition matrix into a Rust struct\n- Use a weighted random draw to implement a single Markov step\n- Run a simulation and print or collect the resulting sequence\n\nContent to produce:\n- Setup instructions (new Cargo project, add rand crate)\n- Step-by-step hints:\n 1. Define the Weather enum and index conversion\n 2. Implement WeatherChain::step using rand::Rng::gen::<f64>()\n 3. Implement WeatherChain::simulate as a loop collecting states\n 4. Run with transition matrix [[0.8, 0.2], [0.4, 0.6]] from Sunny\n 5. Count sunny vs rainy days and compare to stationary distribution\n- Full reference solution (collapsed or at end)\n\nTarget: replace the stub in edu/markov.md §4
|
||||||
parent: edu-svom
|
|
||||||
---
|
|
||||||
|
|
||||||
Write Section 4 of edu/markov.md: Exercise 1 — Weather Model\n\nLearning objectives:\n- Translate a transition matrix into a Rust struct\n- Use a weighted random draw to implement a single Markov step\n- Run a simulation and print or collect the resulting sequence\n\nContent to produce:\n- Setup instructions (new Cargo project, add rand crate)\n- Step-by-step hints:\n 1. Define the Weather enum and index conversion\n 2. Implement WeatherChain::step using rand::Rng::gen::<f64>()\n 3. Implement WeatherChain::simulate as a loop collecting states\n 4. Run with transition matrix [[0.8, 0.2], [0.4, 0.6]] from Sunny\n 5. Count sunny vs rainy days and compare to stationary distribution\n- Full reference solution (collapsed or at end)\n\nTarget: replace the stub in edu/markov.md §4
|
|
||||||
@ -1,12 +1,10 @@
|
|||||||
---
|
+++
|
||||||
# edu-n9ap
|
title = "§3 Compiler Architecture: The Pipeline"
|
||||||
title: '§3 Compiler Architecture: The Pipeline'
|
priority = 5
|
||||||
status: completed
|
status = "todo"
|
||||||
type: task
|
ticket_type = "task"
|
||||||
priority: normal
|
dependencies = []
|
||||||
created_at: 2026-03-10T23:30:00Z
|
+++
|
||||||
updated_at: 2026-03-10T23:30:00Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## §3 Compiler Architecture: The Pipeline — Stub to fill
|
## §3 Compiler Architecture: The Pipeline — Stub to fill
|
||||||
|
|
||||||
@ -1,12 +1,10 @@
|
|||||||
---
|
+++
|
||||||
# edu-g1r5
|
title = "§5 Setting Up the Project"
|
||||||
title: §5 Setting Up the Project
|
priority = 5
|
||||||
status: completed
|
status = "todo"
|
||||||
type: task
|
ticket_type = "task"
|
||||||
priority: normal
|
dependencies = []
|
||||||
created_at: 2026-03-10T23:30:00Z
|
+++
|
||||||
updated_at: 2026-03-10T23:30:00Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## §5 Setting Up the Project — Stub to fill
|
## §5 Setting Up the Project — Stub to fill
|
||||||
|
|
||||||
@ -1,12 +1,10 @@
|
|||||||
---
|
+++
|
||||||
# edu-4kkb
|
title = "§12 The C Runtime Preamble"
|
||||||
title: §12 The C Runtime Preamble
|
priority = 5
|
||||||
status: completed
|
status = "todo"
|
||||||
type: task
|
ticket_type = "task"
|
||||||
priority: normal
|
dependencies = []
|
||||||
created_at: 2026-03-10T23:30:00Z
|
+++
|
||||||
updated_at: 2026-03-10T23:30:00Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## §12 The C Runtime Preamble — Stub to fill
|
## §12 The C Runtime Preamble — Stub to fill
|
||||||
|
|
||||||
@ -1,12 +1,10 @@
|
|||||||
---
|
+++
|
||||||
# edu-jzvr
|
title = "§4 Introduction to nom: Parser Combinators"
|
||||||
title: '§4 Introduction to nom: Parser Combinators'
|
priority = 5
|
||||||
status: completed
|
status = "todo"
|
||||||
type: task
|
ticket_type = "task"
|
||||||
priority: normal
|
dependencies = []
|
||||||
created_at: 2026-03-10T23:30:00Z
|
+++
|
||||||
updated_at: 2026-03-10T23:30:00Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## §4 Introduction to nom: Parser Combinators — Stub to fill
|
## §4 Introduction to nom: Parser Combinators — Stub to fill
|
||||||
|
|
||||||
@ -1,12 +1,10 @@
|
|||||||
---
|
+++
|
||||||
# edu-nc61
|
title = "§16 The Compilation Pipeline"
|
||||||
title: §16 The Compilation Pipeline
|
priority = 5
|
||||||
status: completed
|
status = "todo"
|
||||||
type: task
|
ticket_type = "task"
|
||||||
priority: normal
|
dependencies = []
|
||||||
created_at: 2026-03-10T23:30:01Z
|
+++
|
||||||
updated_at: 2026-03-10T23:30:01Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## §16 The Compilation Pipeline — Stub to fill
|
## §16 The Compilation Pipeline — Stub to fill
|
||||||
|
|
||||||
@ -1,12 +1,8 @@
|
|||||||
---
|
+++
|
||||||
# edu-0w1v
|
title = "Markov exercise: Simulating a Random Walk (Rust)"
|
||||||
title: 'Markov exercise: Simulating a Random Walk (Rust)'
|
priority = 7
|
||||||
status: completed
|
status = "archived"
|
||||||
type: task
|
ticket_type = "task"
|
||||||
priority: high
|
dependencies = []
|
||||||
created_at: 2026-03-10T23:30:01Z
|
+++
|
||||||
updated_at: 2026-03-13T22:37:25Z
|
Write Section 5 of edu/markov.md: Exercise 2 — Simulating a Random Walk\n\nLearning objectives:\n- Model a countably-finite state space (bounded integers) in Rust\n- Implement reflecting boundary conditions\n- Aggregate results from many trials into a histogram\n\nContent to produce:\n- Setup instructions (reuse or extend Exercise 1 project)\n- Step-by-step hints:\n 1. Define RandomWalk with min, max, prob_right fields\n 2. Implement step with boundary reflection (clamp or reverse)\n 3. Implement histogram by running simulate() many times\n 4. Print histogram as ASCII bar chart\n 5. Observe convergence toward uniform (symmetric walk) or skewed (asymmetric)\n- Full reference solution\n\nTarget: replace the stub in edu/markov.md §5
|
||||||
parent: edu-svom
|
|
||||||
---
|
|
||||||
|
|
||||||
Write Section 5 of edu/markov.md: Exercise 2 — Simulating a Random Walk\n\nLearning objectives:\n- Model a countably-finite state space (bounded integers) in Rust\n- Implement reflecting boundary conditions\n- Aggregate results from many trials into a histogram\n\nContent to produce:\n- Setup instructions (reuse or extend Exercise 1 project)\n- Step-by-step hints:\n 1. Define RandomWalk with min, max, prob_right fields\n 2. Implement step with boundary reflection (clamp or reverse)\n 3. Implement histogram by running simulate() many times\n 4. Print histogram as ASCII bar chart\n 5. Observe convergence toward uniform (symmetric walk) or skewed (asymmetric)\n- Full reference solution\n\nTarget: replace the stub in edu/markov.md §5
|
|
||||||
@ -1,31 +1,10 @@
|
|||||||
---
|
+++
|
||||||
# edu-b73b
|
title = "Course: Writing a Lisp-to-C Compiler in Rust"
|
||||||
title: 'Course: Writing a Lisp-to-C Compiler in Rust'
|
priority = 5
|
||||||
status: completed
|
status = "todo"
|
||||||
type: epic
|
ticket_type = "project"
|
||||||
priority: normal
|
dependencies = ["e8da8b", "a93829", "3aeb62", "5835e9", "3dc36b", "685f5e", "a1a827", "b6c9ad", "a4c9f8", "d0b9f8", "6d40a7", "3e1250", "1eb794", "cbc6e3", "de82f1", "58b37a", "8fa47a", "1d16da"]
|
||||||
created_at: 2026-03-10T23:30:01Z
|
+++
|
||||||
updated_at: 2026-03-10T23:30:03Z
|
|
||||||
blocked_by:
|
|
||||||
- edu-ylb8
|
|
||||||
- edu-azf5
|
|
||||||
- edu-n9ap
|
|
||||||
- edu-jzvr
|
|
||||||
- edu-g1r5
|
|
||||||
- edu-16fy
|
|
||||||
- edu-n7zb
|
|
||||||
- edu-mmbr
|
|
||||||
- edu-tzzh
|
|
||||||
- edu-h3yx
|
|
||||||
- edu-3sww
|
|
||||||
- edu-4kkb
|
|
||||||
- edu-63ze
|
|
||||||
- edu-pyue
|
|
||||||
- edu-unus
|
|
||||||
- edu-nc61
|
|
||||||
- edu-v0ud
|
|
||||||
- edu-y4e6
|
|
||||||
---
|
|
||||||
|
|
||||||
## Course: Writing a Lisp-to-C Compiler in Rust
|
## Course: Writing a Lisp-to-C Compiler in Rust
|
||||||
|
|
||||||
@ -1,12 +1,10 @@
|
|||||||
---
|
+++
|
||||||
# edu-16fy
|
title = "§6 Recognizing Atoms: Integers, Booleans, Strings, Symbols"
|
||||||
title: '§6 Recognizing Atoms: Integers, Booleans, Strings, Symbols'
|
priority = 5
|
||||||
status: completed
|
status = "todo"
|
||||||
type: task
|
ticket_type = "task"
|
||||||
priority: normal
|
dependencies = []
|
||||||
created_at: 2026-03-10T23:30:01Z
|
+++
|
||||||
updated_at: 2026-03-10T23:30:01Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## §6 Recognizing Atoms: Integers, Booleans, Strings, Symbols — Stub to fill
|
## §6 Recognizing Atoms: Integers, Booleans, Strings, Symbols — Stub to fill
|
||||||
|
|
||||||
@ -1,12 +1,10 @@
|
|||||||
---
|
+++
|
||||||
# edu-3sww
|
title = "§11 Checking Special Forms"
|
||||||
title: §11 Checking Special Forms
|
priority = 5
|
||||||
status: completed
|
status = "todo"
|
||||||
type: task
|
ticket_type = "task"
|
||||||
priority: normal
|
dependencies = []
|
||||||
created_at: 2026-03-10T23:30:01Z
|
+++
|
||||||
updated_at: 2026-03-10T23:30:01Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## §11 Checking Special Forms — Stub to fill
|
## §11 Checking Special Forms — Stub to fill
|
||||||
|
|
||||||
@ -1,12 +1,8 @@
|
|||||||
---
|
+++
|
||||||
# edu-6r70
|
title = "Markov exercise: Bigram Text Generator (Rust)"
|
||||||
title: 'Markov exercise: Bigram Text Generator (Rust)'
|
priority = 7
|
||||||
status: completed
|
status = "done"
|
||||||
type: task
|
ticket_type = "task"
|
||||||
priority: high
|
dependencies = []
|
||||||
created_at: 2026-03-10T23:30:01Z
|
+++
|
||||||
updated_at: 2026-03-13T22:37:26Z
|
Write Section 7 of edu/markov.md: Exercise 3 — Bigram Text Generator\n\nLearning objectives:\n- Build a HashMap-based transition table from a text corpus\n- Implement weighted random sampling over successor words\n- Generate and print novel word sequences from a seed\n\nContent to produce:\n- Setup instructions (new Cargo project or extend previous, add rand crate)\n- Step-by-step hints:\n 1. Tokenize corpus into words (split_whitespace)\n 2. Build BigramModel::train by iterating consecutive word pairs\n 3. Implement weighted sampling in generate (accumulate weights, compare to rng draw)\n 4. Handle end-of-chain gracefully (seed word not in model)\n 5. Try with a public-domain text (e.g., Project Gutenberg excerpt)\n- Full reference solution\n\nTarget: replace the stub in edu/markov.md §7
|
||||||
parent: edu-svom
|
|
||||||
---
|
|
||||||
|
|
||||||
Write Section 7 of edu/markov.md: Exercise 3 — Bigram Text Generator\n\nLearning objectives:\n- Build a HashMap-based transition table from a text corpus\n- Implement weighted random sampling over successor words\n- Generate and print novel word sequences from a seed\n\nContent to produce:\n- Setup instructions (new Cargo project or extend previous, add rand crate)\n- Step-by-step hints:\n 1. Tokenize corpus into words (split_whitespace)\n 2. Build BigramModel::train by iterating consecutive word pairs\n 3. Implement weighted sampling in generate (accumulate weights, compare to rng draw)\n 4. Handle end-of-chain gracefully (seed word not in model)\n 5. Try with a public-domain text (e.g., Project Gutenberg excerpt)\n- Full reference solution\n\nTarget: replace the stub in edu/markov.md §7
|
|
||||||
@ -1,12 +1,10 @@
|
|||||||
---
|
+++
|
||||||
# edu-v0ud
|
title = "§17 Testing the Compiler"
|
||||||
title: §17 Testing the Compiler
|
priority = 5
|
||||||
status: completed
|
status = "todo"
|
||||||
type: task
|
ticket_type = "task"
|
||||||
priority: normal
|
dependencies = []
|
||||||
created_at: 2026-03-10T23:30:01Z
|
+++
|
||||||
updated_at: 2026-03-10T23:30:01Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## §17 Testing the Compiler — Stub to fill
|
## §17 Testing the Compiler — Stub to fill
|
||||||
|
|
||||||
@ -1,12 +1,10 @@
|
|||||||
---
|
+++
|
||||||
# edu-n7zb
|
title = "§7 The Abstract Syntax Tree"
|
||||||
title: §7 The Abstract Syntax Tree
|
priority = 5
|
||||||
status: completed
|
status = "todo"
|
||||||
type: task
|
ticket_type = "task"
|
||||||
priority: normal
|
dependencies = []
|
||||||
created_at: 2026-03-10T23:30:02Z
|
+++
|
||||||
updated_at: 2026-03-10T23:30:02Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## §7 The Abstract Syntax Tree — Stub to fill
|
## §7 The Abstract Syntax Tree — Stub to fill
|
||||||
|
|
||||||
@ -1,12 +1,10 @@
|
|||||||
---
|
+++
|
||||||
# edu-tzzh
|
title = "§9 Parsing S-Expressions and Special Forms"
|
||||||
title: §9 Parsing S-Expressions and Special Forms
|
priority = 5
|
||||||
status: completed
|
status = "todo"
|
||||||
type: task
|
ticket_type = "task"
|
||||||
priority: normal
|
dependencies = []
|
||||||
created_at: 2026-03-10T23:30:02Z
|
+++
|
||||||
updated_at: 2026-03-10T23:30:02Z
|
|
||||||
---
|
|
||||||
|
|
||||||
## §9 Parsing S-Expressions and Special Forms — Stub to fill
|
## §9 Parsing S-Expressions and Special Forms — Stub to fill
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue