From 431949ca17bb32d850b30ca89b97e29594e211a5 Mon Sep 17 00:00:00 2001 From: rm-dr <96270320+rm-dr@users.noreply.github.com> Date: Sun, 2 Nov 2025 10:46:46 -0800 Subject: [PATCH] Add `links` --- crates/service-webpage/src/routes/links.rs | 214 +++++++++++++++++++++ crates/service-webpage/src/routes/mod.rs | 2 + 2 files changed, 216 insertions(+) create mode 100644 crates/service-webpage/src/routes/links.rs diff --git a/crates/service-webpage/src/routes/links.rs b/crates/service-webpage/src/routes/links.rs new file mode 100644 index 0000000..0ad0046 --- /dev/null +++ b/crates/service-webpage/src/routes/links.rs @@ -0,0 +1,214 @@ +use assetserver::Asset; +use macro_sass::sass; +use maud::{DOCTYPE, Markup, PreEscaped, html}; + +use crate::{ + components::{md::Markdown, misc::FarLink}, + routes::{assets::Image_Icon, index::PageMetadata}, +}; + +// TODO: emoji +// TODO: one page base +// TODO: spellcheck +// TODO: check links + +const CSS: &str = sass!("css/main.scss"); + +pub async fn links() -> Markup { + let meta = PageMetadata { + title: "Links".into(), + author: Some("Mark".into()), + description: None, + image: Some(Image_Icon::URL.into()), + }; + + html! { + (DOCTYPE) + html { + head { + meta charset="UTF" {} + meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" {} + meta content="text/html; charset=UTF-8" http-equiv="content-type" {} + meta property="og:type" content="website" {} + + (meta) + title { (PreEscaped(meta.title)) } + style { (PreEscaped(CSS)) } + } + + body { + div class="wrapper" { + main { + + // TODO: no metadata class, generate backlink array + div { + a href="/" style="padding-left:4pt;padding-right:4pt;" {"home"} + "/" + span class="metaData" style="padding-left:4pt;padding-right:4pt;" { "links" } + } + + (Markdown(MD_A)) + + hr style="margin-top: 8rem; margin-bottom: 8rem" {} + + (Markdown(MD_B)) + + hr style="margin-top: 8rem; margin-bottom: 8rem" {} + + (Markdown(MD_C)) + + hr style="margin-top: 8rem; margin-bottom: 8rem" {} + + (Markdown(MD_D)) + + + } + + footer { + hr class = "footline" {} + div class = "footContainer" { + p { + "This site was built by hand using " + (FarLink("https://rust-lang.org", "Rust")) + ", " + (FarLink("https://maud.lambda.xyz", "Maud")) + ", " + (FarLink("https://github.com/connorskees/grass", "Grass")) + ", and " + (FarLink("https://docs.rs/axum/latest/axum", "Axum")) + "." + } + } + } + } + } + } + } +} + +/* +Dead links: + +https://www.commitstrip.com/en/ +http://www.3dprintmath.com/ +*/ + +const MD_A: &str = r#"# Bookmarks + +This is a heavily opinionated bookmarks toolbar."#; + +const MD_B: &str = r#"## Podcasts + +- :star: [Darknet Diaries](https://darknetdiaries.com/): A perennial classic. +- [Art of Manliness](https://www.artofmanliness.com/podcast/): Philosophy, literaure, psychology. +- [The Overanalyzers](https://www.theoveranalyzers.com/): Amateur podcasters talk amateur psychology. This is a complement---they're _very_ good! +- [Rust in Production](https://corrode.dev/podcast/): Operations, Rust, and modern tech. +- :star: [On the Metal](https://onthemetal.transistor.fm/): Quality stories from quality engineers. +- [Security Cryptography Whatever](https://securitycryptographywhatever.com/): Modern cryptography, for those who understand the underlying theory. + +## Essays + +- [Real Programmers don't use Pascal](https://www.ee.torontomu.ca/~elf/hack/realmen.html) +- [A Mathematician's Lament](/files/lockhart.pdf) +- :star: [The Jargon File](http://www.catb.org/jargon/) + +## Textbooks + +- :star: [OpenLogic](https://openlogicproject.org/): The gold standard +- [Operating Systems: from 0 to 1](https://github.com/tuhdo/os01) +- [Operating Systems: Three Easy Pieces](https://pages.cs.wisc.edu/~remzi/OSTEP/) +- [Crafting Interpreters](https://craftinginterpreters.com/contents.html) +- [An Introduction to Mathematical Cryptography](https://link.springer.com/book/10.1007/978-0-387-77993-5) +- [Stories about Maxima and Minima](https://archive.org/details/storiesaboutmaxi0000tikh) + +## Miscellanea + +- [Hackaday](https://hackaday.com/) +- [Grumpy Website](https://grumpy.website/): Daily design crimes +- :star: [ZSA Voyager](https://www.zsa.io/voyager): World's best keyboard +- [Nikita Prokopov](https://tonsky.me/) +- [Faster Than Lime](https://fasterthanli.me/) +- [Pepper & Carrot](https://www.peppercarrot.com/): The open-source webcomic +- [User Friendly](https://en.wikipedia.org/wiki/User_Friendly): Old-school. Offline and archived. +- [PhD Comics](https://phdcomics.com/): Quality academic humor. Discontinued. +- :star: [Spintronics](https://store.upperstory.com/collections/spintronics/products/spintronics-act-one): Mechanical circuits. Very clever toy. +- :star: [Turing Tumble](https://store.upperstory.com/collections/turing-tumble-game/products/turing-tumble): Modern Dr. Nim"#; + +const MD_C: &str = r#"## Tools + +- :star: [Numbat](https://numbat.dev/) +- [MxToolbox](https://mxtoolbox.com/) +- [Brainfuck Interpreter](https://copy.sh/brainfuck/) +- [Compiler Explorer](https://godbolt.org/) +- [Monkeytype](https://monkeytype.com/) +- :star: [TLDR](https://tldr.sh/) +- [TOS;DR](https://tosdr.org/) +- [Regexr](https://regexr.com/) +- [Choose a License](https://choosealicense.com/) +- [DeepL](https://www.deepl.com/translator) +- [ShuffleCake](https://shufflecake.net/) +- [Zola](https://www.getzola.org/): Static site generator +- [Presenterm](https://github.com/mfontanini/presenterm) +- [mprocs](https://github.com/pvolok/mprocs): Simpler tmux +- [mask](https://github.com/jacobdeichert/mask) +- [gitui](https://github.com/gitui-org/gitui): git tui +- [tokei](https://github.com/XAMPPRocky/tokei): count lines of code +- [delta](https://github.com/dandavison/delta): pretty pager for diffs +- [dust](https://github.com/dandavison/delta): `du`, but better + +## Math Resources + +- [Quantum Quest](https://www.quantum-quest.org/) +- [The Natural Number Game](https://www.ma.imperial.ac.uk/~buzzard/xena/natural_number_game/) +- [Intro to Lambda Calculus](https://www.driverlesscrocodile.com/technology/lambda-calculus-for-people-a-step-behind-me-1/) +- [FSM Simulator](https://ivanzuzak.info/noam/webapps/fsm_simulator/) +- [Euclidea](https://www.euclidea.xyz/) +- [Problems.ru](https://problems.ru/) + +## OS Dev Resources + +- [OS Dev Wiki](https://wiki.osdev.org/Expanded_Main_Page) +- [Nand2Tetris](https://www.nand2tetris.org/course) +- :star: [Writing an OS in Rust](https://os.phil-opp.com/) +- [x86 Assembly Guide](https://www.cs.virginia.edu/~evans/cs216/guides/x86.html) +- [Writing a simple x86 Bootloader](https://www.alanfoster.me/posts/writing-a-bootloader/) +- [FDC Programming](http://www.brokenthorn.com/Resources/OSDev20.html) +- [CS77 at Bristol College](http://www.c-jump.com/CIS77/CIS77syllabus.htm) + +## Misc Resources + +- [Learn OpenGL](https://learnopengl.com/) +- [Learn WGPU](https://sotrh.github.io/learn-wgpu) +- [WGPU Fundamentals](https://webgpufundamentals.org/) +- [Acko](https://acko.net/) +- [Bezier Info](https://pomax.github.io/bezierinfo/) +- [SHA256 Algorithm](https://sha256algorithm.com/) +- [ML Playground](https://ml-playground.com/) +- [Learn you some Erlang](https://learnyousomeerlang.com/) +- [Learn you a Haskell](https://learnyouahaskell.github.io/) +- [Teach yourself CS](https://teachyourselfcs.com/) +- [The Architecture of Open Source Applications](http://aosabook.org/en/index.html) +- [wtfjs](https://github.com/denysdovhan/wtfjs): js [wat](https://www.destroyallsoftware.com/talks/wat)s + +## Reference + +- [DevHints](https://devhints.io/) +- [OverAPI](https://overapi.com/) +- [TSConfig Cheat Sheet](https://www.totaltypescript.com/tsconfig-cheat-sheet) +- [Makefile Tutorial](https://makefiletutorial.com/) +- [The Pinouts Book](https://pinouts.org/) +- [Laws of UX](https://lawsofux.com/) + +## Rust +- [Understanding Memory Ordering in Rust](https://emschwartz.me/understanding-memory-ordering-in-rust/) +- [Unfair Rust Quiz](https://this.quiz.is.fckn.gay/): wtfjs, but in Rust."#; + +const MD_D: &str = r#"## Misc + +- [Slide Rule Collection](https://www.followingtherules.info/) +- [MK-61 Command Reference](http://www.thimet.de/CalcCollection/Calculators/Elektronika-MK-61/CmdRef.html) +- [Why Privacy Matters](https://www.ted.com/talks/glenn_greenwald_why_privacy_matters) +- [Papers we Love](https://paperswelove.org/) +- [Grug Brain Dev](https://grugbrain.dev/) +- [Zen of Python](https://peps.python.org/pep-0020/) +- [The XY Problem](https://xyproblem.info/)"#; diff --git a/crates/service-webpage/src/routes/mod.rs b/crates/service-webpage/src/routes/mod.rs index 295dee1..b128a1d 100644 --- a/crates/service-webpage/src/routes/mod.rs +++ b/crates/service-webpage/src/routes/mod.rs @@ -6,6 +6,7 @@ use utoipa::OpenApi; mod assets; mod betalupi; mod index; +mod links; #[derive(OpenApi)] #[openapi(tags(), paths(), components(schemas()))] @@ -18,5 +19,6 @@ pub(super) fn router() -> Router<()> { Router::new() .route("/", get(index::index)) .route("/whats-a-betalupi", get(betalupi::betalupi)) + .route("/links", get(links::links)) .nest(asset_prefix, asset_router) }