From 7f8132d33e33cefada5d53678c43afc3cd125c49 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Sat, 25 Jan 2025 10:46:08 +0100 Subject: [PATCH] Draft links page --- content/bases.tsx | 1 + content/links.jsonc | 277 ++++++++++++++++++++++++++++++++++++++++++++ content/links.tsx | 42 +++++++ content/pages.tsx | 2 + 4 files changed, 322 insertions(+) create mode 100644 content/links.jsonc create mode 100644 content/links.tsx diff --git a/content/bases.tsx b/content/bases.tsx index 0a70bf2..26ac39c 100644 --- a/content/bases.tsx +++ b/content/bases.tsx @@ -18,6 +18,7 @@ export function BasePage(props: BaseProps) { Updates Words Projects + Links {props.children} diff --git a/content/links.jsonc b/content/links.jsonc new file mode 100644 index 0000000..a442264 --- /dev/null +++ b/content/links.jsonc @@ -0,0 +1,277 @@ +{ + "links": [ + { + "title": "Type", + "url": "https://exple.tive.org/blarg/2024/11/12/type/", + "description": "A scathing critique of The Elements of Typographic Style", + "tags": ["review", "typography"], + "read": "2025-01-05", + }, + { + "title": "A Webring List", + "tags": ["webrings", "collections"], + "description": "A comprehensive collection of Webrings collected by Ray Thomas", + "url": "https://brisray.com/web/webring-list.htm", + "author": "Ray Thomas", + }, + { + "title": "Webring History", + "tags": ["webrings", "history"], + "description": "A brief history of Webrings", + "url": "https://brisray.com/web/webring-history.htm", + "author": "Ray Thomas", + }, + { + "title": "The Only Way to Beat Algorithms is to Retrain Your Audience", + "url": "https://kiriska.com/blog/2019/the-only-way-to-beat-algorithms-is-to-retrain-your-audience/", + "tags": ["articles", "distributed web"], + "read": "2025-01-06", + "author": "Kiri", + }, + { + "title": "Power shifts in a multiple system", + "url": "https://sarahkreece.com/2013/12/23/power-shifts-in-a-multiple-system/", + "tags": ["articles", "multiplicity"], + "read": "2025-01-06", + "author": "Sarah K Reece", + }, + { + "title": "What’s Wrong With … Exceptions", + "url": "https://blog.pdark.de/2007/06/29/whats-wrong-with-exceptions/", + "tags": ["articles", "programming", "exceptions"], + "read": "2025-01-06", + "author": "Philmann Dark", + }, + { + "title": "Never Rewrite From Scratch", + "url": "https://blog.pdark.de/2024/04/24/never-rewrite-from-scratch/", + "tags": ["articles", "programming", "refactoring"], + "read": "2025-01-06", + "author": "Philmann Dark", + }, + { + "title": "A Dragon's Tale", + "url": "https://www.philmann-dark.de/dragon.html", + "tags": ["short story", "dragons"], + "read": "2025-01-05", + "author": "Philmann Dark", + }, + { + "title": "How I Learned to Stop Worrying and Love GC", + "url": "https://world-playground-deceit.net/blog/2024/11/how-i-learned-to-stop-worrying-and-love-gc.html", + "tags": ["articles", "programming", "garbage collection"], + "read": "2025-01-06", + }, + { + "title": "Memory Management Reference", + "url": "https://www.memorymanagement.org/", + "tags": ["links", "programming", "memory management"], + }, + { + "title": "In-group and out-group", + "url": "https://en.wikipedia.org/wiki/In-group_and_out-group", + "description": "Psychological phenomena describing people's strong bias towards their group and against people outside it.", + "tags": ["articles", "psychology", "moderation"], + "read": "2025-01-09", + }, + { + "title": "User Expertise Stagnates at Low Levels", + "url": "https://www.nngroup.com/articles/stagnating-expertise/", + "tags": ["design", "ux"], + "read": "2025-01-10", + "author": "Jakob Nielsen", + }, + { + "title": "The New Internet", + "url": "https://tailscale.com/blog/new-internet", + "tags": ["articles", "tailscale", "connectivity"], + "read": "2025-01-10", + "author": "Avery Pennarun", + }, + { + "title": "The Free Web", + "url": "https://thehistoryoftheweb.com/the-free-web/", + "tags": ["articles", "internet", "culture"], + "read": "2025-01-10", + "author": "Jay Hoffmann", + }, + { + "title": "Bad Shape", + "url": "https://www.wrecka.ge/bad-shape/", + "tags": ["articles", "big social media", "moderation"], + "read": "2025-01-10", + "author": "Erin Kissane", + }, + { + "title": "An Abridged History of Safari Showstoppers", + "url": "https://webventures.rejh.nl/blog/2024/history-of-safari-show-stoppers/", + "tags": ["articles", "webdev", "safari"], + }, + { + "title": "The Really Dark Truth About Bots", + "url": "https://www.youtube.com/watch?v=GZ5XN_mJE8Y", + "tags": ["video", "social media bots", "political discourse", "disinformation"], + "description": "A dive into the troll farms and systematic disinformation campaigns targeting political discourse.", + "read": "2025-01-12", + }, + { + "title": "From Gongkai to Open Source", + "url": "https://www.bunniestudios.com/blog/2014/from-gongkai-to-open-source/", + "tags": ["article", "hardware", "chinese culture", "reverse engineering"], + "description": "Writeup on the reverse engineering efforts that went into making Fernvalue, an open source development platform for the Mediatek MT6260", + "read": "2025-01-12", + }, + { + "title": "On \"Safe\" C++", + "url": "https://izzys.casa/2024/11/on-safe-cxx/", + "tags": ["article", "programming", "c++", "programming community"], + "description": "Unhinged rant on the C++ committee and community at large.", + "read": "2025-01-19", + "author": "Izzy Muerte", + }, + { + "title": "The seven programming ur-languages", + "url": "https://madhadron.com/programming/seven_ur_languages.html", + "tags": ["article", "programming", "learning programming", "language design"], + "description": "A description of 7 root languages in programming that inspired most of the structure in all programming languages", + "read": "2025-01-20", + "author": "madhadron", + }, + { + "title": "Our conventions are not inevitable", + "url": "https://madhadron.com/programming/conventions.html", + "tags": ["article", "programming", "conventions"], + "description": "Thoughts on programming conventions being largely inertia rather than fundamental.", + "read": "2025-01-20", + "author": "madhadron", + }, + { + "title": "Proof of Thought", + "url": "https://erik.wiffin.com/posts/proof-of-thought/", + "tags": ["article", "organisations", "reporting"], + "description": "An interesting take on reports not meant to be read by anyone still being useful.", + "read": "2025-01-20", + "author": "Erik Wiffin", + }, + { + "title": "On short URLs", + "url": "https://qntm.org/urls", + "tags": ["article", "websites", "short urls"], + "description": "qntm's reasoning for why use short URLs.", + "read": "2025-01-20", + "author": "qntm", + }, + { + "title": "Short URLs: why and how", + "url": "https://sive.rs/su", + "tags": ["article", "websites", "short urls"], + "description": "Derek Sivers' reasoning for why use short URLs.", + "read": "2025-01-20", + "author": "Derke Sivers", + }, + { + "title": "The Tyranny of the Marginal User", + "url": "https://nothinghuman.substack.com/p/the-tyranny-of-the-marginal-user", + "tags": ["article", "online services", "enshittification", "online dating"], + "description": "How focusing on the marginal user caused OKCupid to go downhill", + "read": "2025-01-21", + "author": "Ivan Vendrov", + }, + { + "title": "The Website Obesity Crisis", + "url": "https://idlewords.com/talks/website_obesity.htm", + "tags": ["article", "webdev", "bloat"], + "description": "Observations on bloat of websites and the future of the web.", + "read": "2025-01-23", + "author": "Maciej Cegłowski", + }, + { + "title": "The Small Website Discoverability Crisis", + "url": "https://www.marginalia.nu/log/19-website-discoverability-crisis/", + "tags": ["article", "small web", "discoverability", "bookmarks", "links"], + "description": "Victor argues a solution to the small web discoverability problem lies in sharing bookmarks.", + "read": "2025-01-24", + "author": "Viktor Lofgren", + }, + { + "title": "Fan is A Tool-Using Animal", + "url": "https://idlewords.com/talks/fan_is_a_tool_using_animal.htm", + "tags": ["article", "fandom", "collaboration"], + "description": "Talk about spontaneous collaboration and culture in the fandom.", + "read": "2025-01-24", + "author": "Maciej Cegłowski", + }, + { + "title": "Every site needs a Links Page / Why linking matters", + "url": "https://thoughts.melonking.net/thoughts/every-site-needs-a-links-page-why-linking-matters", + "tags": ["article", "small web", "links"], + "description": "Why websites should link to other websites.", + "read": "2025-01-24", + "author": "Melon", + }, + { + "title": "", + "url": "", + "tags": ["article", "", ""], + "description": "", + "read": "", + "author": "", + }, + ], + "to_read": [ + "https://bitbashing.io/gc-for-systems-programmers.html", + ], + "authors": { + "Ray Thomas": { + "urls": ["https://brisray.com/"], + }, + "Kiri": { + "urls": ["https://kiriska.com/"], + }, + "Sarah K Reece": { + "urls": ["https://sarahkreece.com/"], + }, + "Philmann Dark": { + "urls": ["https://blog.pdark.de/about/"], + }, + "Jakob Nielsen": { + "urls": ["https://www.nngroup.com/articles/author/jakob-nielsen/"], + }, + "Jay Hoffmann": { + "urls": ["https://x.com/jay_hoffmann"], + }, + "Erin Kissane": { + "urls": ["https://www.wrecka.ge/author/erin/"], + }, + "Izzy Muerte": { + "urls": ["https://izzy.casa/"], + }, + "madhadron": { + "urls": ["https://madhadron.com/"], + }, + "Erik Wiffin": { + "urls": ["https://erik.wiffin.com/"], + }, + "qntm": { + "urls": ["https://qntm.org/"], + }, + "Derke Sivers": { + "urls": ["https://sive.rs/"], + }, + "Ivan Vendrov": { + "urls": ["https://substack.com/@ivanvendrov"], + }, + "Maciej Cegłowski": { + "urls": ["https://idlewords.com/"], + }, + "Viktor Lofgren": { + "urls": ["https://www.marginalia.nu/"], + }, + "Melon": { + "urls": ["https://melonland.net/", "https://melonking.net/"], + }, + "": { + "urls": [""], + }, + } +} diff --git a/content/links.tsx b/content/links.tsx new file mode 100644 index 0000000..db5e53d --- /dev/null +++ b/content/links.tsx @@ -0,0 +1,42 @@ +import { readFileSync } from "node:fs"; +import { BasePage } from "./bases.js"; +import type { Page } from "./types.js"; + +interface LinkData { + title: string, + url: string, + tags: string[], + description?: string, + read?: string, + author?: string, +} +interface Data { + links: LinkData[]; + to_read: string[], + authors: Record; +} +function Link(props: { link: LinkData }) { + const link = props.link; + return <> + {link.title} + {" "} + {link.tags.join(", ")} + +} +const data: Data = eval(`(${readFileSync("content/links.jsonc", "utf8")})`); +data.links.pop(); // Remove template at the end +const title = "Links!"; +export const links: Page = { + title, + ref: "/links.html", + content: +
+

{title}

+
    + { data.links.map(link =>
  • )} +
+
+
+} diff --git a/content/pages.tsx b/content/pages.tsx index 53b0b83..15a1d80 100644 --- a/content/pages.tsx +++ b/content/pages.tsx @@ -3,6 +3,7 @@ import { index } from "./index.js"; import { updates, updatesIndex } from "./updates.js"; import { words, wordsIndex } from "./words.js"; import { projects, projectsIndex } from "./projects.js"; +import { links } from "./links.js"; export const pages: Page[] = [ index, @@ -12,4 +13,5 @@ export const pages: Page[] = [ ...words, projectsIndex, ...projects, + links, ];