From cd9803fe85b6722cceb1eebdb7aa87347c4b2ee7 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Mon, 24 Aug 2026 14:48:57 -0400 Subject: [PATCH] Draft apply of new media convention. --- README.md | 4 +- archive/threads/How to archive a thread.md | 4 +- .../index.md | 2 +- ...-nice-to-talk-a-full-presentation-about.md | 3 +- ...023-07-01-asparagiii-looks-like-a-koala.md | 3 +- .../2023-07-01-mike_acton-thread.md | 3 +- .../index.md | 3 +- .../index.md | 2 +- .../index.md | 12 ++--- .../index.md | 2 +- ...esting-crosstalk-from-voltage-inversion.md | 3 +- .../index.md | 9 ++-- .../index.md | 5 +- .../index.md | 20 +++----- .../index.md | 24 ++++------ ...AH-ha-that-wont-save-you-from-my-follow.md | 3 +- .../index.md | 3 +- .../index.md | 5 +- .../2025-07-31-totalwert-thread.md | 3 +- .../index.md | 3 +- .../index.md | 3 +- .../index.md | 2 +- .../index.md | 3 +- .../index.md | 8 ++-- .../index.md | 2 +- .../index.md | 3 +- .../index.md | 3 +- .../index.md | 5 +- .../index.md | 21 +++------ .../index.md | 3 +- .../index.md | 5 +- .../index.md | 3 +- .../index.md | 3 +- .../index.md | 8 ++-- .../index.md | 6 +-- .../index.md | 9 ++-- .../index.md | 17 +++---- .../index.md | 11 ++--- .../index.md | 3 +- .../index.md | 12 +++-- .../index.md | 3 +- .../index.md | 3 +- .../index.md | 3 +- .../index.md | 12 ++--- .../index.md | 6 ++- ...dont-hafta-grug-post-to-be-popular-with.md | 3 +- .../2026-07-05-SteveMoraco-legend.md | 3 +- ...-entire-math-proofs-section-in-my-maths.md | 3 +- .../VictorTaelin/2026-07-04-sighs/index.md | 3 +- assets/README.md | 2 +- meta/conventions.md | 2 +- notes/How threads are organized.md | 2 +- scripts/twitter/README.md | 47 +++++++++++++------ 53 files changed, 153 insertions(+), 185 deletions(-) diff --git a/README.md b/README.md index 9d69c0d..e71670a 100644 --- a/README.md +++ b/README.md @@ -53,10 +53,10 @@ Templates: `templates/archive-source.md`, `templates/authored-note.md` (Template ## Images and embeds -Images: absolute HTTPS URLs on your image host. Do not commit local binaries for published notes. +Images: absolute HTTPS URLs from the original provider when possible. Notes do not embed local binaries. ```md -![](https://files.catbox.moe/example.png) +![](https://pbs.twimg.com/media/FhAidkhUoAA3FJz?format=png&name=orig) ``` Keep local copies in `assets/` (not committed). Do not point notes at `assets/` or `./media/`. diff --git a/archive/threads/How to archive a thread.md b/archive/threads/How to archive a thread.md index 25bfadf..463efd2 100644 --- a/archive/threads/How to archive a thread.md +++ b/archive/threads/How to archive a thread.md @@ -35,10 +35,10 @@ in_reply_to: "" ## Media -Images use absolute HTTPS URLs: +Images use direct HTTPS URLs from the original provider when possible: ```md -![](https://files.catbox.moe/example.png) +![](https://pbs.twimg.com/media/EXAMPLE?format=png&name=orig) ``` A live tweet embed is optional and is not the archive: diff --git a/archive/threads/NOTimothyLottes/2022-11-08-example-of-bind-everything-once-layout-aliasing/index.md b/archive/threads/NOTimothyLottes/2022-11-08-example-of-bind-everything-once-layout-aliasing/index.md index 6d6d907..46aabe8 100644 --- a/archive/threads/NOTimothyLottes/2022-11-08-example-of-bind-everything-once-layout-aliasing/index.md +++ b/archive/threads/NOTimothyLottes/2022-11-08-example-of-bind-everything-once-layout-aliasing/index.md @@ -29,4 +29,4 @@ in_reply_to: "" Example of "Bind-Everything-Once" Layout Aliasing in Vulkan. Storage image format by aliased name, also bound as sampled image. Choose buffer {readonly,writeonly,volatile (read uncached),atomic} access by aliased name, as either {uint,uint4,float,float4}. -Media (not lifted): `1589810282104524800_FhAidkhUoAA3FJz_orig.png` +![](https://pbs.twimg.com/media/FhAidkhUoAA3FJz?format=png&name=orig) \ No newline at end of file diff --git a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-06-30-SebAaltonen-would-be-nice-to-talk-a-full-presentation-about.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-06-30-SebAaltonen-would-be-nice-to-talk-a-full-presentation-about.md index 59b1843..e176bc3 100644 --- a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-06-30-SebAaltonen-would-be-nice-to-talk-a-full-presentation-about.md +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-06-30-SebAaltonen-would-be-nice-to-talk-a-full-presentation-about.md @@ -36,8 +36,7 @@ I will save your image for that day (if I get approval to use it), since Twitter @SebAaltonen "Approval", haha, sure it's covered under my favorite license -![](https://files.catbox.moe/y9nkha.png) - +![](https://pbs.twimg.com/media/Fz3_kb8WYAMXvcT?format=png&name=orig) ## Related - Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal]] diff --git a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-asparagiii-looks-like-a-koala.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-asparagiii-looks-like-a-koala.md index cd0aab8..be76dc8 100644 --- a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-asparagiii-looks-like-a-koala.md +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-asparagiii-looks-like-a-koala.md @@ -30,8 +30,7 @@ parent_post_id: "1674757854471806977" @NOTimothyLottes Looks like a koala -![](https://files.catbox.moe/wtbwl8.jpg) - +![](https://pbs.twimg.com/media/Fz88Bk0WAAApDzL?format=jpg&name=orig) ## Related - Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal]] diff --git a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-mike_acton-thread.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-mike_acton-thread.md index 1533ac2..78a9d91 100644 --- a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-mike_acton-thread.md +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-mike_acton-thread.md @@ -30,8 +30,7 @@ parent_post_id: "1674757854471806977" @NOTimothyLottes -![](https://files.catbox.moe/n7x29c.jpg) - +![](https://pbs.twimg.com/media/Fz6pnsBaQAEtMIZ?format=jpg&name=orig) ## Related - Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal]] diff --git a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/index.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/index.md index 6e872d8..0bc0b72 100644 --- a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/index.md +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/index.md @@ -29,6 +29,5 @@ in_reply_to: "" "Nothing Oriented Programming" (NOP). Where the goal is to achieve minimal enlightenment by writing as little possible code: no dynamic memory allocation, no thousand files of glue, no includes, no objects. Write nothing, be happy. Even applied it to the logo, zero effort. -![](https://files.catbox.moe/w4l74z.jpg) - +![](https://pbs.twimg.com/media/Fz3vY5fXwAgEpzn?format=jpg&name=orig) Branches: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-06-30-SebAaltonen-would-be-nice-to-talk-a-full-presentation-about]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-06-30-leonard_coder-4e71-if-you-know-you-know]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-06-30-domipheus-i-like-this-given-i-never-write-code-any-more]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-06-30-_spolsh-once-in-a-while-people-need-to-be-reminded-to]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-mike_acton-thread]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-SimonNordon-nop-is-ideal]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-azeke1984-best-software-is-absense-of-it-https-en-wikipedia]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-helpful_signage-folks-theyre-calling-it-computer-oriented]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-claudiogonzalo-c-to-c]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-DefenceForceOrg-many-games-used-to-be-like-that-at-least-the-ones]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-PierreTerdiman-i-was-calling-it-disoriented-programming-just-the]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-asparagiii-looks-like-a-koala]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-CodingFiend-i-designed-a-language-beads-which-uses-a-graph-db]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-TimSweeneyEpic-can-teach-it-in-abstinence-only-programming]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-09-wyattscarpenter-https-github-com-wyattscarpenter-wu]] diff --git a/archive/threads/NOTimothyLottes/2023-08-03-spc-using-8-deep-swap-all-aliasing-same-bo-image/index.md b/archive/threads/NOTimothyLottes/2023-08-03-spc-using-8-deep-swap-all-aliasing-same-bo-image/index.md index 4d37651..6bb0a67 100644 --- a/archive/threads/NOTimothyLottes/2023-08-03-spc-using-8-deep-swap-all-aliasing-same-bo-image/index.md +++ b/archive/threads/NOTimothyLottes/2023-08-03-spc-using-8-deep-swap-all-aliasing-same-bo-image/index.md @@ -29,7 +29,7 @@ in_reply_to: "" SPC: Using 8 deep swap all aliasing same BO (image) fixes Game Mode crash with external display. Pipelined load gets to black screen in 2 ms. Takes 460 ms to allocate 4 GiB GTT video ram, 558 ms to copy 256 MiB cart from page cache to USWC (page faults), all in parallel. -![](https://files.catbox.moe/yfbahk.jpg) +![](https://pbs.twimg.com/media/F2mmqYXWoAAG3fj?format=jpg&name=orig) **2/** diff --git a/archive/threads/NOTimothyLottes/2023-08-04-for-anyone-tuning-in-now-spc-is-kind-of-like-a/index.md b/archive/threads/NOTimothyLottes/2023-08-04-for-anyone-tuning-in-now-spc-is-kind-of-like-a/index.md index a629544..252cdcb 100644 --- a/archive/threads/NOTimothyLottes/2023-08-04-for-anyone-tuning-in-now-spc-is-kind-of-like-a/index.md +++ b/archive/threads/NOTimothyLottes/2023-08-04-for-anyone-tuning-in-now-spc-is-kind-of-like-a/index.md @@ -29,26 +29,26 @@ in_reply_to: "" SPC: Left off with KEY and GAMEPAD input GPU-accessable. NOP design, no functions, no API, just a fixed VA address and data format to read, dead easy. -Media (not lifted): `1687250591813079041_F2pRdu9WgAABCLE_orig.jpg` `1687250591813079041_F2pReKsXoAAPvow_orig.jpg` +![](https://pbs.twimg.com/media/F2pRdu9WgAABCLE?format=jpg&name=orig) +![](https://pbs.twimg.com/media/F2pReKsXoAAPvow?format=jpg&name=orig) **2/** Wrote some console data dumping to aid in bringing up HID parsers for Deck and three generations of PlayStation controllers. Apparently XBox controllers aren't HIDs so not sure how one is supposed to access those. -Media (not lifted): `1687251721032978432_F2pSfIHXcAMI-IQ_orig.jpg` `1687251721032978432_F2pSfzAWcAMo6t7_orig.jpg` +![](https://pbs.twimg.com/media/F2pSfIHXcAMI-IQ?format=jpg&name=orig) +![](https://pbs.twimg.com/media/F2pSfzAWcAMo6t7?format=jpg&name=orig) **3/** Supporting hot plug was a bit of a mess, just trying to open devices every second. Adding open devices to an epoll. {Product, vendor} isn't enough to ID a device, too much aliasing, so I use packet size as well. -Media (not lifted): `1687252813468852225_F2pTfekWYAAAwSi_orig.jpg` - +![](https://pbs.twimg.com/media/F2pTfekWYAAAwSi?format=jpg&name=orig) **4/** Open devices with matching packet size get set in a bit array, and I collect up to 4 of those device outputs to sent to the GPU. Special logic to always place Steam Deck controls last to make docking work well. -Media (not lifted): `1687253442643755008_F2pUEG0XwAEwYvP_orig.jpg` - +![](https://pbs.twimg.com/media/F2pUEG0XwAEwYvP?format=jpg&name=orig) **5/** I'll have to tackle audio at some point, but I'm skipping networking for version 1. But otherwise SPC is good to move on to the next step, which is to build out the GPU side assembler & data editor. Which will be written in binary at first. diff --git a/archive/threads/NOTimothyLottes/2023-08-06-yeah-perhaps-wildly-alien-but-for-those-who-grew/index.md b/archive/threads/NOTimothyLottes/2023-08-06-yeah-perhaps-wildly-alien-but-for-those-who-grew/index.md index bd85762..cc1c664 100644 --- a/archive/threads/NOTimothyLottes/2023-08-06-yeah-perhaps-wildly-alien-but-for-those-who-grew/index.md +++ b/archive/threads/NOTimothyLottes/2023-08-06-yeah-perhaps-wildly-alien-but-for-those-who-grew/index.md @@ -29,4 +29,4 @@ in_reply_to: "" Yeah, perhaps wildly alien. But for those who grew up with MOD-like trackers (like Impulse Tracker below), the interface will almost feel like home (those had simple {instrument, pattern, arangement} editors, with a very spreadsheet feel). -Media (not lifted): `1688286623375454208_F23_OOhXgAUBtlb_orig.png` +![](https://pbs.twimg.com/media/F23_OOhXgAUBtlb?format=png&name=orig) \ No newline at end of file diff --git a/archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard-for-example-its/2023-08-10-BlurBusters-very-interesting-crosstalk-from-voltage-inversion.md b/archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard-for-example-its/2023-08-10-BlurBusters-very-interesting-crosstalk-from-voltage-inversion.md index 3c805d9..54ac540 100644 --- a/archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard-for-example-its/2023-08-10-BlurBusters-very-interesting-crosstalk-from-voltage-inversion.md +++ b/archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard-for-example-its/2023-08-10-BlurBusters-very-interesting-crosstalk-from-voltage-inversion.md @@ -30,8 +30,9 @@ parent_post_id: "1688491417109196800" @NOTimothyLottes Very interesting "crosstalk from voltage inversion" artifact. Some repeating patterns or flicker patterns can trigger crosstalk artifacts too. Behavior varies a lot between TN, IPS, and VA, but all of them have to alternate voltage polarity spatially and temporally. -Media (not lifted): `1689479056448684032_F3I8AZmW0AEy6jn_orig.png` `1689479056448684032_F3I8BVlXoAAnuJB_orig.png` +![](https://pbs.twimg.com/media/F3I8AZmW0AEy6jn?format=png&name=orig) +![](https://pbs.twimg.com/media/F3I8BVlXoAAnuJB?format=png&name=orig) ## Related - Spine: [[archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard-for-example-its]] diff --git a/archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard-for-example-its/index.md b/archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard-for-example-its/index.md index 8ad68a8..3740f5c 100644 --- a/archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard-for-example-its/index.md +++ b/archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard-for-example-its/index.md @@ -29,22 +29,21 @@ in_reply_to: "" CRT emulation on LCDs can be hard. For example it's often easy to generate a pattern that causes a LCD hardware bug. NOT joking. Here is an example on the Steam Deck. The pattern in the window affects the scan (Deck scan is rotated) outside the window. -Media (not lifted): `1688491417109196800_F265_JZXsAAInpa_orig.jpg` `1688491417109196800_F265_hLXkAAnfek_orig.jpg` +![](https://pbs.twimg.com/media/F265_JZXsAAInpa?format=jpg&name=orig) +![](https://pbs.twimg.com/media/F265_hLXkAAnfek?format=jpg&name=orig) Branches: [[archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard-for-example-its/2023-08-10-BlurBusters-very-interesting-crosstalk-from-voltage-inversion]] **2/** The actual pattern is this (it's a 2x1 pixel checker of {G,RB}). -Media (not lifted): `1688492237775142912_F266epnW4AAdCiK_orig.png` - +![](https://pbs.twimg.com/media/F266epnW4AAdCiK?format=png&name=orig) **3/** The theory: Deck's 90deg scan results in {(bottom)R, G, B (top)} sub-pixel components. So could alternate {G,RB} only per pixel in a checker pattern to generate a new sub-pixel pattern at a different resolution. In this case trying for 640x400 virtual resolution. -Media (not lifted): `1688493686554849280_F267UYuXAAAO50A_orig.png` - +![](https://pbs.twimg.com/media/F267UYuXAAAO50A?format=png&name=orig) **4/** For virtual pixel, shift energy into masked virtual phosphor. So 50% brightness red, would be {100%, 0%} for {in, out} of phosphor pixels. Over 50% one starts to increase non-phosphor pixels until some maximum so mask is still visible, but brightness isn't too compromised. diff --git a/archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken-corrected-it-its/index.md b/archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken-corrected-it-its/index.md index c8128ba..3dc5c5b 100644 --- a/archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken-corrected-it-its/index.md +++ b/archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken-corrected-it-its/index.md @@ -29,8 +29,11 @@ in_reply_to: "" SPC: Last CRT shader was broken. Corrected it. It's energy conserving now, and correctly doing sub-pixel line width raster using the individual channels. Cell camera shots below at different zooms. -Media (not lifted): `1692395128739057844_F3yYY1iXYAAaAlE_orig.jpg` `1692395128739057844_F3yYZQwXcAABFvi_orig.jpg` `1692395128739057844_F3yYZo5WAAA0aRS_orig.jpg` +![](https://pbs.twimg.com/media/F3yYY1iXYAAaAlE?format=jpg&name=orig) +![](https://pbs.twimg.com/media/F3yYZQwXcAABFvi?format=jpg&name=orig) + +![](https://pbs.twimg.com/media/F3yYZo5WAAA0aRS?format=jpg&name=orig) **2/** Each scan line is simulated with only 3 pixels. But you get 9 sub-pixels to play with, so that is where the quality comes from. It reaches 7/8th of the display peak brightness, this compromise was so there is always some amount of perceptual scan effect. diff --git a/archive/threads/NOTimothyLottes/2023-08-18-the-subpix-version-is-definitely-better-because/index.md b/archive/threads/NOTimothyLottes/2023-08-18-the-subpix-version-is-definitely-better-because/index.md index 93d3c21..f737bf7 100644 --- a/archive/threads/NOTimothyLottes/2023-08-18-the-subpix-version-is-definitely-better-because/index.md +++ b/archive/threads/NOTimothyLottes/2023-08-18-the-subpix-version-is-definitely-better-because/index.md @@ -29,20 +29,15 @@ in_reply_to: "" SPC: CRT shader on the Deck. This time not doing subpix render. Yet RGB vs BGR order matters still. One way it becomes possible to simulate even spaced aperture grill (removing scan fx), and the other more of the scan effect. -![](https://files.catbox.moe/mve2kr.jpg) - -![](https://files.catbox.moe/vis95s.jpg) - +![](https://pbs.twimg.com/media/F30tppDWwAAA-8J?format=jpg&name=orig) +![](https://pbs.twimg.com/media/F30tqE8XYAAgrFv?format=jpg&name=orig) **2/** Comparing all methods (grille, bad convergence scan, subpix scan) -![](https://files.catbox.moe/mve2kr.jpg) - -![](https://files.catbox.moe/vis95s.jpg) - -![](https://files.catbox.moe/34pnhf.jpg) - +![](https://pbs.twimg.com/media/F30uJoSWcAA7ICE?format=jpg&name=orig) +![](https://pbs.twimg.com/media/F30uKJdXkAA4PV8?format=jpg&name=orig) +![](https://pbs.twimg.com/media/F30uKouWQAAvY0q?format=jpg&name=orig) **3/** The non-subpix scan has 1-pixel separation of RGB (intentional bad convergence) to help hide scaling. The subpix scan uses 1/3-pixel separation (less visible misaligned convergence). Pixel as in output pixel. @@ -51,6 +46,5 @@ The non-subpix scan has 1-pixel separation of RGB (intentional bad convergence) The subpix version is definitely better. Because of the almost 3x doubling of scanline width detail, it just perceptually feels a lot cleaner and easier to reconstruct in the mind. -![](https://files.catbox.moe/ugcsjy.jpg) - -![](https://files.catbox.moe/g42t2i.jpg) +![](https://pbs.twimg.com/media/F30y9HPWUAAbmmw?format=jpg&name=orig) +![](https://pbs.twimg.com/media/F30y9h3WAAETuui?format=jpg&name=orig) \ No newline at end of file diff --git a/archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/index.md b/archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/index.md index 89dff86..e1fda4b 100644 --- a/archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/index.md +++ b/archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/index.md @@ -29,50 +29,42 @@ in_reply_to: "" Inspecting my old VK engines. On start I would warm all the pages. Code pages get a read, and data pages got an atomic add of a non-compiler known zero. An attempt to improve initial load time. But in the end nothing helps the 2.6 seconds or so required to just open the VK device -Media (not lifted): `1736147815829565624_GBgHT_2WIAAKuNq_orig.png` - +![](https://pbs.twimg.com/media/GBgHT_2WIAAKuNq?format=png&name=orig) **2/** Since I almost never get crashes I forgot about this, but had written a system to auto relaunch the app on crash or special case exit. No complex error handling, just bank on fast relaunch instead. -Media (not lifted): `1736149104269344962_GBgJ1y5W0AArwSt_orig.png` - +![](https://pbs.twimg.com/media/GBgJ1y5W0AArwSt?format=png&name=orig) **3/** The hope of single PSO in VK was scrapped because IHV compile times explode. However I did maintain single SPIR-V file, and use spec constants to choose individual shaders. The threads doing compile dump compile times and disassembly in DEV mode. -Media (not lifted): `1736151406703214631_GBgMbMEWkAAOd_d_orig.png` - +![](https://pbs.twimg.com/media/GBgMbMEWkAAOd_d?format=png&name=orig) **4/** I'm a fan of single file applications. So when not in DEV mode the one SPIR-V file gets pulled from the EXE. Compiling PSOs is always the critical path, the moment the "bind everything once" layout is done, PSO compile goes wide on the machine. -Media (not lifted): `1736153352096882847_GBgOQRiXoAAX2k6_orig.png` - +![](https://pbs.twimg.com/media/GBgOQRiXoAAX2k6?format=png&name=orig) **5/** "Bind-Everything-Once" in Vulkan looks like this. Bindings {1}=CPU pushing to GPU, {2}=buffer (more on that next), {3}=as UAVs, {4}=as TEX ... No binding logic at runtime ever. Access anything in the most efficient way any time. -Media (not lifted): `1736154923408953499_GBgPDhAWUAAzhEi_orig.png` - +![](https://pbs.twimg.com/media/GBgPDhAWUAAzhEi?format=png&name=orig) **6/** Did something silly but fast for buffers. Here is an example from a dummy test app. The main SSBO gets aliased as 4 structures, each with the same data accessable with four types {uint, uint4, float, float4}. So same binding layout aliasing chooses load type and K$ or V$ access. -Media (not lifted): `1736156478354903216_GBgQ0xlWQAA7Yks_orig.png` - +![](https://pbs.twimg.com/media/GBgQ0xlWQAA7Yks?format=png&name=orig) **7/** Literally the CPU does almost nothing. All game input gets pushed to the GPU for game logic. Some major advantages in input latency to do player logic on the GPU instead. And it's dead easy. -Media (not lifted): `1736157335058300999_GBgRu3wXoAAp_K7_orig.png` - +![](https://pbs.twimg.com/media/GBgRu3wXoAAp_K7?format=png&name=orig) **8/** This requires context, I build programs in a hardware style, fixed resources, fixed shaders, and all logic expressed in the data itself. No code or resource variation, no runtime issues period. So another dummy program example, I can just list my resources on load in a table ... -Media (not lifted): `1736158727370154157_GBgTCgJXsAEPH3W_orig.png` - +![](https://pbs.twimg.com/media/GBgTCgJXsAEPH3W?format=png&name=orig) **9/** Radically simplicity is how I roll personally. Easy to confuse the idea that one needs complexity to express a complex system. It's more like one needs complexity to express a complex solution -> abstractions and hierachical meta feeds on itself until tech debt freezes progess. diff --git a/archive/threads/NOTimothyLottes/2024-04-06-on-https-mastodon-gamedev-place-notimothylottes/2024-04-08-RickyAH-ha-that-wont-save-you-from-my-follow.md b/archive/threads/NOTimothyLottes/2024-04-06-on-https-mastodon-gamedev-place-notimothylottes/2024-04-08-RickyAH-ha-that-wont-save-you-from-my-follow.md index ee664e7..ddfc357 100644 --- a/archive/threads/NOTimothyLottes/2024-04-06-on-https-mastodon-gamedev-place-notimothylottes/2024-04-08-RickyAH-ha-that-wont-save-you-from-my-follow.md +++ b/archive/threads/NOTimothyLottes/2024-04-06-on-https-mastodon-gamedev-place-notimothylottes/2024-04-08-RickyAH-ha-that-wont-save-you-from-my-follow.md @@ -30,8 +30,7 @@ parent_post_id: "1776597200073568623" @NOTimothyLottes @SebAaltonen @MartinJIFuller Ha! That won’t save you from my follow -Media (not lifted): `1777246377824731474_GKoMKCHWwAAWLvG.mp4_orig.mp4` - + ## Related - Spine: [[archive/threads/NOTimothyLottes/2024-04-06-on-https-mastodon-gamedev-place-notimothylottes]] diff --git a/archive/threads/NOTimothyLottes/2024-04-06-on-https-mastodon-gamedev-place-notimothylottes/index.md b/archive/threads/NOTimothyLottes/2024-04-06-on-https-mastodon-gamedev-place-notimothylottes/index.md index d481296..b71aee8 100644 --- a/archive/threads/NOTimothyLottes/2024-04-06-on-https-mastodon-gamedev-place-notimothylottes/index.md +++ b/archive/threads/NOTimothyLottes/2024-04-06-on-https-mastodon-gamedev-place-notimothylottes/index.md @@ -31,6 +31,5 @@ in_reply_to: "1776518700230721688" @MartinJIFuller @SebAaltonen On https://mastodon.gamedev.place/@NOTimothyLottes I'm collecting posts with AMD GPU disassembly dumps for a book on everything the shader compiler 'isn't doing'. Constant AMD GPU compiler perf bug SPAM is a key part of my online strategy to keep a low follower count. -Media (not lifted): `1776597200073568623_GKe8HDtXYAAOrfj_orig.jpg` - +![](https://pbs.twimg.com/media/GKe8HDtXYAAOrfj?format=jpg&name=orig) Branches: [[archive/threads/NOTimothyLottes/2024-04-06-on-https-mastodon-gamedev-place-notimothylottes/2024-04-06-MartinJIFuller-a-worthwhile-project-knowledge-well-worth-sharing]], [[archive/threads/NOTimothyLottes/2024-04-06-on-https-mastodon-gamedev-place-notimothylottes/2024-04-08-RickyAH-ha-that-wont-save-you-from-my-follow]], [[archive/threads/NOTimothyLottes/2024-04-06-on-https-mastodon-gamedev-place-notimothylottes/2024-04-09-BenSimsTech-oh-sick-im-deep-in-optimising-shaders-in-an-aaa]] diff --git a/archive/threads/NOTimothyLottes/2025-07-23-i-dont-use-standard-c-libs-or-anything-like-that/index.md b/archive/threads/NOTimothyLottes/2025-07-23-i-dont-use-standard-c-libs-or-anything-like-that/index.md index bb1b4da..bf08db1 100644 --- a/archive/threads/NOTimothyLottes/2025-07-23-i-dont-use-standard-c-libs-or-anything-like-that/index.md +++ b/archive/threads/NOTimothyLottes/2025-07-23-i-dont-use-standard-c-libs-or-anything-like-that/index.md @@ -29,12 +29,11 @@ in_reply_to: "" @Karyuutensei I don't use standard C libs or anything like that. I just write my own stuff. For 'printf' style debugging I have macros that write to a memory mapped log file. They give {[restartNumber]|[msSinceLaunch]|[sourceLine]|[hex]|[dec]|[comment]}. Keeping multiple restarts in same log -Media (not lifted): `1948009807161721332_Gwi4H27WgAAIgMN_orig.png` - +![](https://pbs.twimg.com/media/Gwi4H27WgAAIgMN?format=png&name=orig) Branches: [[archive/threads/NOTimothyLottes/2025-07-23-i-dont-use-standard-c-libs-or-anything-like-that/2025-07-23-Karyuutensei-where-does-the-restart-number-come-from-i-assume]] **2/** @Karyuutensei That log example is a simple test program, it starts in 0.3 ms for that run. The log tells all about how it pipelines start up {doing memory page warming, kart load, window setup, VK setup in parallel, getting to PSO gen as fast as possible [get layout done first]} -Media (not lifted): `1948010813555634392_Gwi47owXQAEa2Ar_orig.png` +![](https://pbs.twimg.com/media/Gwi47owXQAEa2Ar?format=png&name=orig) \ No newline at end of file diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-totalwert-thread.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-totalwert-thread.md index f3eb2b3..756cb74 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-totalwert-thread.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-totalwert-thread.md @@ -30,8 +30,7 @@ parent_post_id: "1950860870818439202" @NOTimothyLottes -Media (not lifted): `1950900720770625916_GxL93LLW8AA-5hM.mp4_orig.mp4` - + ## Related - Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] diff --git a/archive/threads/NOTimothyLottes/2025-11-17-i-wish-everyone-would-just-adopt-reversed-with/index.md b/archive/threads/NOTimothyLottes/2025-11-17-i-wish-everyone-would-just-adopt-reversed-with/index.md index 05b70c0..2fdecb2 100644 --- a/archive/threads/NOTimothyLottes/2025-11-17-i-wish-everyone-would-just-adopt-reversed-with/index.md +++ b/archive/threads/NOTimothyLottes/2025-11-17-i-wish-everyone-would-just-adopt-reversed-with/index.md @@ -29,6 +29,5 @@ in_reply_to: "" I wish everyone would just adopt "reversed with infinite far" projection matrixes so I could only optimize for the fastest and highest precision option, but I'm guessing people haven't all migrated over :( -Media (not lifted): `1990260050485797063_G57SXPJW8AAvEhh_orig.png` - +![](https://pbs.twimg.com/media/G57SXPJW8AAvEhh?format=png&name=orig) Branches: [[archive/threads/NOTimothyLottes/2025-11-17-i-wish-everyone-would-just-adopt-reversed-with/2025-11-17-AgileJebrim-reversed-is-a-significant-improvement-but-it]], [[archive/threads/NOTimothyLottes/2025-11-17-i-wish-everyone-would-just-adopt-reversed-with/2025-11-17-terekhov_de-ive-never-had-real-depth-precision-issues-in-our]], [[archive/threads/NOTimothyLottes/2025-11-17-i-wish-everyone-would-just-adopt-reversed-with/2025-11-17-bgolus-many-are-still-on-opengles-and-webgl-which-dont]], [[archive/threads/NOTimothyLottes/2025-11-17-i-wish-everyone-would-just-adopt-reversed-with/2025-11-18-Alecazam123-infinite-far-doesnt-apply-to-ortho-and-many-of]], [[archive/threads/NOTimothyLottes/2025-11-17-i-wish-everyone-would-just-adopt-reversed-with/2025-11-19-stainless_code-i-havent-really-done-graphics-in-a-while-but-ive]] diff --git a/archive/threads/NOTimothyLottes/2026-05-30-renovating-cpu-clock-code-im-assuming-x86-64-tsc/index.md b/archive/threads/NOTimothyLottes/2026-05-30-renovating-cpu-clock-code-im-assuming-x86-64-tsc/index.md index 64aa345..8bb2b56 100644 --- a/archive/threads/NOTimothyLottes/2026-05-30-renovating-cpu-clock-code-im-assuming-x86-64-tsc/index.md +++ b/archive/threads/NOTimothyLottes/2026-05-30-renovating-cpu-clock-code-im-assuming-x86-64-tsc/index.md @@ -29,8 +29,7 @@ in_reply_to: "" Renovating CPU clock code. I'm assuming x86-64 TSC is always >= 1 GHz so that conversion of clock counter diff to nanoseconds is simply a MUL instruction fetching the RDX high 64-bit result (of the 128-bit computed). But figuring out how to do the inline asm was a pain. -Media (not lifted): `2060730425929080874_HJku0L4WkAAZk5a_orig.png` - +![](https://pbs.twimg.com/media/HJku0L4WkAAZk5a?format=png&name=orig) Branches: [[archive/threads/NOTimothyLottes/2026-05-30-renovating-cpu-clock-code-im-assuming-x86-64-tsc/2026-05-31-FUZxxl-if-you-do-the-multiply-in-uint128-t-and-then]] **2/** diff --git a/archive/threads/NOTimothyLottes/2026-06-03-back-running-640x480-on-my-vga-crts-to-prep-for/index.md b/archive/threads/NOTimothyLottes/2026-06-03-back-running-640x480-on-my-vga-crts-to-prep-for/index.md index bbabbdd..b3acb68 100644 --- a/archive/threads/NOTimothyLottes/2026-06-03-back-running-640x480-on-my-vga-crts-to-prep-for/index.md +++ b/archive/threads/NOTimothyLottes/2026-06-03-back-running-640x480-on-my-vga-crts-to-prep-for/index.md @@ -29,4 +29,4 @@ in_reply_to: "" Back running 640x480 on my VGA CRTs to prep for workflow that ports down to 480i60 for NTSC. Using my 'right' font. Fully decoupling from all system calls for time is working out great. And yes I'm using all the stuff I talked about in my Advanced Aliasing talk too (joy to code). -Media (not lifted): `2062031187023982879_HJ3Ny2wX0AAKFFv_orig.png` +![](https://pbs.twimg.com/media/HJ3Ny2wX0AAKFFv?format=png&name=orig) \ No newline at end of file diff --git a/archive/threads/NOTimothyLottes/2026-06-13-cross-compilation-is-up-just-like-on-windows-with/index.md b/archive/threads/NOTimothyLottes/2026-06-13-cross-compilation-is-up-just-like-on-windows-with/index.md index 9e2c208..63ebd37 100644 --- a/archive/threads/NOTimothyLottes/2026-06-13-cross-compilation-is-up-just-like-on-windows-with/index.md +++ b/archive/threads/NOTimothyLottes/2026-06-13-cross-compilation-is-up-just-like-on-windows-with/index.md @@ -29,8 +29,9 @@ in_reply_to: "" Cross compilation is up. Just like on windows with GCC I have to disable all warnings because there is no way to turn off “function called through a non-compatible type”. They obviously should have had warning IDs and an ID based disable. -Media (not lifted): `2065832746757341482_HKtP7aQXsAAtJ5X_orig.jpg` `2065832746757341482_HKtP7aTWEAAC_j4_orig.jpg` +![](https://pbs.twimg.com/media/HKtP7aQXsAAtJ5X?format=jpg&name=orig) +![](https://pbs.twimg.com/media/HKtP7aTWEAAC_j4?format=jpg&name=orig) Branches: [[archive/threads/NOTimothyLottes/2026-06-13-cross-compilation-is-up-just-like-on-windows-with/2026-06-13-tomcr2100-interesting-font-does-it-have-a-name]] **2/** diff --git a/archive/threads/NOTimothyLottes/2026-06-13-nanorc-done-and-back-to-actual-programming-with/index.md b/archive/threads/NOTimothyLottes/2026-06-13-nanorc-done-and-back-to-actual-programming-with/index.md index 12c751c..89869e4 100644 --- a/archive/threads/NOTimothyLottes/2026-06-13-nanorc-done-and-back-to-actual-programming-with/index.md +++ b/archive/threads/NOTimothyLottes/2026-06-13-nanorc-done-and-back-to-actual-programming-with/index.md @@ -29,18 +29,16 @@ in_reply_to: "" Nanorc done and back to actual programming with the new font. The iPhone cannot seem to correctly capture a CRT anymore … and yes my _ is … and my ; is a 5 dot vertical line (prefer that for C/GLSL coding) -Media (not lifted): `2065804972378243476_HKs2q8RXQAAVsjN_orig.jpg` - +![](https://pbs.twimg.com/media/HKs2q8RXQAAVsjN?format=jpg&name=orig) Branches: [[archive/threads/NOTimothyLottes/2026-06-13-nanorc-done-and-back-to-actual-programming-with/2026-06-13-quiveron_x-why-are-you-using-crt]], [[archive/threads/NOTimothyLottes/2026-06-13-nanorc-done-and-back-to-actual-programming-with/2026-06-13-eternalclassic_-you-can-use-camac-free-to-take-raw-photos-on]], [[archive/threads/NOTimothyLottes/2026-06-13-nanorc-done-and-back-to-actual-programming-with/2026-06-13-winning_tactic-hz-sharing-i-wonder-if-crts-can-be-changed-like]], [[archive/threads/NOTimothyLottes/2026-06-13-nanorc-done-and-back-to-actual-programming-with/2026-06-14-mayemayey-ohh-what-is-that-a-2070sb]] **2/** Thankfully I can still dedecorate the term window to focus lines for useful content. Practically speaking I almost have a new language implemented in C via typedefs and macros … back to building and testing the native Linux system level interface -Media (not lifted): `2065806847634776401_HKs4YE5WMAAfe6G_orig.jpg` - +![](https://pbs.twimg.com/media/HKs4YE5WMAAfe6G?format=jpg&name=orig) **3/** Lubbers are invading my screen -Media (not lifted): `2065809876488503805_HKs7IJHWMAAwzVL_orig.jpg` +![](https://pbs.twimg.com/media/HKs7IJHWMAAwzVL?format=jpg&name=orig) \ No newline at end of file diff --git a/archive/threads/NOTimothyLottes/2026-06-13-the-glibc-implementation-would-do-that-i-bypass/index.md b/archive/threads/NOTimothyLottes/2026-06-13-the-glibc-implementation-would-do-that-i-bypass/index.md index dd573c9..13366dc 100644 --- a/archive/threads/NOTimothyLottes/2026-06-13-the-glibc-implementation-would-do-that-i-bypass/index.md +++ b/archive/threads/NOTimothyLottes/2026-06-13-the-glibc-implementation-would-do-that-i-bypass/index.md @@ -29,4 +29,4 @@ in_reply_to: "2065851939917906296" @axelgneiting The glibc implementation would do that. I bypass libc and just do it manually with perf_event_open syscall and mmap. -Media (not lifted): `2065872197147578751_HKtzz5RXcAA6CIX_orig.jpg` +![](https://pbs.twimg.com/media/HKtzz5RXcAA6CIX?format=jpg&name=orig) \ No newline at end of file diff --git a/archive/threads/NOTimothyLottes/2026-06-14-on-linux-i-do-speculative-pinning-of-cpu-memory/index.md b/archive/threads/NOTimothyLottes/2026-06-14-on-linux-i-do-speculative-pinning-of-cpu-memory/index.md index fb20eb2..3b7a0c7 100644 --- a/archive/threads/NOTimothyLottes/2026-06-14-on-linux-i-do-speculative-pinning-of-cpu-memory/index.md +++ b/archive/threads/NOTimothyLottes/2026-06-14-on-linux-i-do-speculative-pinning-of-cpu-memory/index.md @@ -29,6 +29,5 @@ in_reply_to: "" On Linux I do speculative pinning of CPU memory via mlockall. Learned that later Linux actually allows some amount of pinned memory without admin. So this is succeeding on my new Artix box. -Media (not lifted): `2066184005632786736_HKyPZnfWMAAv4qF_orig.jpg` - +![](https://pbs.twimg.com/media/HKyPZnfWMAAv4qF?format=jpg&name=orig) Branches: [[archive/threads/NOTimothyLottes/2026-06-14-on-linux-i-do-speculative-pinning-of-cpu-memory/2026-06-14-Social_Vulture-running-in-crt-or-are-you-emulating-scanlines-in]], [[archive/threads/NOTimothyLottes/2026-06-14-on-linux-i-do-speculative-pinning-of-cpu-memory/2026-06-15-sadhuIGI-also-this-font-is-cursed]], [[archive/threads/NOTimothyLottes/2026-06-14-on-linux-i-do-speculative-pinning-of-cpu-memory/2026-06-15-GrowlerEnjooyer-there-is-0-chance-you-actually-use-this-font-its]] diff --git a/archive/threads/NOTimothyLottes/2026-06-26-quick-summary-of-why-not-pselect-ppoll-epoll/index.md b/archive/threads/NOTimothyLottes/2026-06-26-quick-summary-of-why-not-pselect-ppoll-epoll/index.md index dae3dce..fd216ea 100644 --- a/archive/threads/NOTimothyLottes/2026-06-26-quick-summary-of-why-not-pselect-ppoll-epoll/index.md +++ b/archive/threads/NOTimothyLottes/2026-06-26-quick-summary-of-why-not-pselect-ppoll-epoll/index.md @@ -29,6 +29,5 @@ in_reply_to: "" Quick summary of why not {pselect, ppoll, epoll_pwait2} style non-TCP IO [it can amplify kernel transitions]. For UDP stuff blocking {sendmmsg,recvmmsg (with timeout)} amortizes out kernel transitions. -Media (not lifted): `2070337342854832468_HLtP4RgWgAADbir_orig.png` - +![](https://pbs.twimg.com/media/HLtP4RgWgAADbir?format=png&name=orig) Branches: [[archive/threads/NOTimothyLottes/2026-06-26-quick-summary-of-why-not-pselect-ppoll-epoll/2026-06-26-AgileJebrim-sendmmsg-recvmmsg-can-only-work-with-1024-packets]], [[archive/threads/NOTimothyLottes/2026-06-26-quick-summary-of-why-not-pselect-ppoll-epoll/2026-06-26-BigP4P4Smurf-take-a-look-at-http-lalists-stanford-edu-lad-2001]] diff --git a/archive/threads/NOTimothyLottes/2026-06-27-deterrent-to-alsa-is-just-parsing-through-snd-pcm/index.md b/archive/threads/NOTimothyLottes/2026-06-27-deterrent-to-alsa-is-just-parsing-through-snd-pcm/index.md index 496b84d..cb7e5b2 100644 --- a/archive/threads/NOTimothyLottes/2026-06-27-deterrent-to-alsa-is-just-parsing-through-snd-pcm/index.md +++ b/archive/threads/NOTimothyLottes/2026-06-27-deterrent-to-alsa-is-just-parsing-through-snd-pcm/index.md @@ -29,10 +29,9 @@ in_reply_to: "" Deterrent to ALSA is just parsing through snd_pcm_open() source. It's death by boiler plate and complexity. Tinyalsa isn't much better. Likely easier to think about this from perspective of devices that can be open()ed from /dev/snd. On my machine doesn't seem to hot plug -Media (not lifted): `2070734717825986566_HLy5-C9XMAAfs_w_orig.png` - +![](https://pbs.twimg.com/media/HLy5-C9XMAAfs_w?format=png&name=orig) **2/** Assuming 'p'&'c' are PLAYBACK & CAPTURE, so opening different devices (instead of both in one device). Then just have user provide a device, or have the API war-dial open() constructing possible devices to probe what is available 'pcmC{c}D{d}{p|c}'. Easier than listing files. -Media (not lifted): `2070735722043023873_HLy6SApX0AApPub_orig.png` +![](https://pbs.twimg.com/media/HLy6SApX0AApPub?format=png&name=orig) \ No newline at end of file diff --git a/archive/threads/NOTimothyLottes/2026-06-29-alsa-hell-month-continues-remember-it-might-be/index.md b/archive/threads/NOTimothyLottes/2026-06-29-alsa-hell-month-continues-remember-it-might-be/index.md index df3b7ee..d28318e 100644 --- a/archive/threads/NOTimothyLottes/2026-06-29-alsa-hell-month-continues-remember-it-might-be/index.md +++ b/archive/threads/NOTimothyLottes/2026-06-29-alsa-hell-month-continues-remember-it-might-be/index.md @@ -29,28 +29,24 @@ in_reply_to: "" ALSA hell month continues: remember it might be "open source" but it is definitely "closed documentation" [those docs are securely trapped in the minds of the authors]. Now that I have aplay playing a sound, it's time for garbage sifting through STRACE to see what is going on ... -Media (not lifted): `2071706805114216559_HMAt1GiXAAAoahX_orig.png` - +![](https://pbs.twimg.com/media/HMAt1GiXAAAoahX?format=png&name=orig) Branches: [[archive/threads/NOTimothyLottes/2026-06-29-alsa-hell-month-continues-remember-it-might-be/2026-06-29-AlexABPerson-have-you-actually-reached-out-to-said-developers]] **2/** For devs working on linux, strace is a good friend, besides reverse engineering undocumented crap, it's useful to run on your own app as a bug test, like look what this idiot [me] did with nanosleep() -Media (not lifted): `2071710958397898929_HMAx0PmW0AAdUAy_orig.png` - +![](https://pbs.twimg.com/media/HMAx0PmW0AAdUAy?format=png&name=orig) **3/** In my ALSA interface I war-dial the possible /dev/snd/pcm devices instead of just listing the directory. It's a lot easier in source code. -Media (not lifted): `2071714384225681440_HMA1CA9XIAAwRAB_orig.png` - +![](https://pbs.twimg.com/media/HMA1CA9XIAAwRAB?format=png&name=orig) **4/** Using 'strace' showed another bug in my setting schedule priority code (I didn't yet validate that code and check for errors). Definitely my ALSA test app shows ZERO errors in ALSA system calls, but doesn't actually play anything. Broken without errors = crappy API. -Media (not lifted): `2071715941688258752_HMA2LibWMAAMW3O_orig.png` - +![](https://pbs.twimg.com/media/HMA2LibWMAAMW3O?format=png&name=orig) **5/** In theory a good API, SNDRV_PCM_IOCTL_PREPARE would fail if the next SNDRV_PCM_IOCTL_WRITEI_FRAMES wouldn't accept the write. And that WRITEI should also fail instead of pass and setting .result=0 (of the snd xferi structure). @@ -59,21 +55,18 @@ In theory a good API, SNDRV_PCM_IOCTL_PREPARE would fail if the next SNDRV_PCM_I The best I can guess thus far is that the aplay app goes through some HW_REFINE ioctls before setting the HW_PARAMS, and perhaps the "magic missing thing" is in that process. -Media (not lifted): `2071717187623030935_HMA3sGVXwAAVDMT_orig.png` - +![](https://pbs.twimg.com/media/HMA3sGVXwAAVDMT?format=png&name=orig) **7/** Best docs on REFINE that I've found yet is indirectly through this. Note tinyalsa doesn't seem to use this interface other than through pcm_params_get(), not the interative process seen in aplay strace. Maybe because tinyalsa is for android (different drivers) -Media (not lifted): `2071725181576319370_HMA-CDAXEAAw9ns_orig.jpg` - +![](https://pbs.twimg.com/media/HMA-CDAXEAAw9ns?format=jpg&name=orig) **8/** SNDRV_PCM_IOCTL_HW_REFINE If send out a zeroed snd_pcm_hw_params, the ioctl will fail. There is a special magic sauce to the structure that must be initialized correctly before you can even fetch hardware parameters. It's high level skill in Obfuscation. See *_any( in ALSA src -Media (not lifted): `2071759816725311959_HMBePMXXwAE5_1M_orig.png` - +![](https://pbs.twimg.com/media/HMBePMXXwAE5_1M?format=png&name=orig) **9/** magiz/ diff --git a/archive/threads/NOTimothyLottes/2026-06-29-eventually-figure-out-enough-to-get-aplay-to/index.md b/archive/threads/NOTimothyLottes/2026-06-29-eventually-figure-out-enough-to-get-aplay-to/index.md index 92a198a..b8d77f3 100644 --- a/archive/threads/NOTimothyLottes/2026-06-29-eventually-figure-out-enough-to-get-aplay-to/index.md +++ b/archive/threads/NOTimothyLottes/2026-06-29-eventually-figure-out-enough-to-get-aplay-to/index.md @@ -29,8 +29,7 @@ in_reply_to: "" Eventually figure out enough to get aplay to actually play a wave file, had to find an explicitly stereo wav else it would refuse to just duplicate the mono channels. Basically the a'tools unfriendlyness mirrors that of ALSA. Still cannot understand 'boundary' ... -Media (not lifted): `2071415096304193820_HL8km6eWsAEq6xb_orig.png` - +![](https://pbs.twimg.com/media/HL8km6eWsAEq6xb?format=png&name=orig) **2/** No luck getting ALSA to play anything from my app. State is always 2 SNDRV_PCM_STATE_PREPARED, haven't been able to get it to run. If I try the start ioctl, then it errors with -EPIPE. diff --git a/archive/threads/NOTimothyLottes/2026-06-30-working-on-the-linux-thread-priority-code-linux/index.md b/archive/threads/NOTimothyLottes/2026-06-30-working-on-the-linux-thread-priority-code-linux/index.md index b886e9d..9fb0a52 100644 --- a/archive/threads/NOTimothyLottes/2026-06-30-working-on-the-linux-thread-priority-code-linux/index.md +++ b/archive/threads/NOTimothyLottes/2026-06-30-working-on-the-linux-thread-priority-code-linux/index.md @@ -29,8 +29,7 @@ in_reply_to: "" Working on the Linux thread priority code. Linux doesn't allow sched_attr.size to be minimized to just what is required for the scheduling mode (my prior bug). So I statically allocate the structures already filled in and cacheline aligned ... -Media (not lifted): `2071937360288235902_HMD_iq0XcAASnSn_orig.png` - +![](https://pbs.twimg.com/media/HMD_iq0XcAASnSn?format=png&name=orig) **2/** Theory says: better for size, worse for perf! Global structure will miss the cache. The alternative is to allow the code to generate the structure on the stack, which is likely in cache, and burn a few more cachelines of code (which gets linear prefetch). @@ -39,4 +38,4 @@ Theory says: better for size, worse for perf! Global structure will miss the cac Clearly the default linux won't allow my non-blessed user to get SCHED_FIFO, and it also seems like my nice(-20) SCHED_OTHER backup is also not allowed either. Damn. More stuff to workaround. -Media (not lifted): `2071938677584863448_HMEBJNuW4AE8JUV_orig.png` +![](https://pbs.twimg.com/media/HMEBJNuW4AE8JUV?format=png&name=orig) \ No newline at end of file diff --git a/archive/threads/NOTimothyLottes/2026-07-01-did-manage-to-get-alsa-to-function-without-sndrv/index.md b/archive/threads/NOTimothyLottes/2026-07-01-did-manage-to-get-alsa-to-function-without-sndrv/index.md index cf89ef3..0f07aaa 100644 --- a/archive/threads/NOTimothyLottes/2026-07-01-did-manage-to-get-alsa-to-function-without-sndrv/index.md +++ b/archive/threads/NOTimothyLottes/2026-07-01-did-manage-to-get-alsa-to-function-without-sndrv/index.md @@ -29,8 +29,7 @@ in_reply_to: "" Did manage to get ALSA to function without SNDRV_PCM_IOCTL_HW_REFINE and only with SNDRV_PCM_IOCTL_HW_PARAMS. My structures are different but aliased (snd_interval.interger -> .flag=4). Apparently setting the core values is enough for the driver. -Media (not lifted): `2072194202851549432_HMHoiZAWcAAjn6j_orig.png` - +![](https://pbs.twimg.com/media/HMHoiZAWcAAjn6j?format=png&name=orig) **2/** Don't actually have to set {.flags,.rmask,.info} on my machine. Absolutely do have to set ".max=~0" for the intervals not being hardcoded. I only do double buffered, 48000Hz stereo, and just vary the frames/period sizing. diff --git a/archive/threads/NOTimothyLottes/2026-07-01-haha-damn-i-thought-i-had-a-great-idea-for-wine/index.md b/archive/threads/NOTimothyLottes/2026-07-01-haha-damn-i-thought-i-had-a-great-idea-for-wine/index.md index 33acab1..b11331d 100644 --- a/archive/threads/NOTimothyLottes/2026-07-01-haha-damn-i-thought-i-had-a-great-idea-for-wine/index.md +++ b/archive/threads/NOTimothyLottes/2026-07-01-haha-damn-i-thought-i-had-a-great-idea-for-wine/index.md @@ -29,8 +29,7 @@ in_reply_to: "" Haha damn, I thought I had a great idea, for Wine workarounds, I could just detect Wine (easy), and then make the associated Linux system call from inside Wine using inline asm! [no surprise, it doesn't work] -Media (not lifted): `2072445315370590266_HMLNdMOXkAAIoEj_orig.png` - +![](https://pbs.twimg.com/media/HMLNdMOXkAAIoEj?format=png&name=orig) Branches: [[archive/threads/NOTimothyLottes/2026-07-01-haha-damn-i-thought-i-had-a-great-idea-for-wine/2026-07-01-opdroid1234-the-two-truths-ive-come-to-accept-in-life-a]], [[archive/threads/NOTimothyLottes/2026-07-01-haha-damn-i-thought-i-had-a-great-idea-for-wine/2026-07-02-winning_tactic-you-could-pretend-to-be-an-audio-jack]] **2/** diff --git a/archive/threads/NOTimothyLottes/2026-07-01-linux-by-default-doesnt-allow-any-increase-in/index.md b/archive/threads/NOTimothyLottes/2026-07-01-linux-by-default-doesnt-allow-any-increase-in/index.md index 65ffff2..5f1bb70 100644 --- a/archive/threads/NOTimothyLottes/2026-07-01-linux-by-default-doesnt-allow-any-increase-in/index.md +++ b/archive/threads/NOTimothyLottes/2026-07-01-linux-by-default-doesnt-allow-any-increase-in/index.md @@ -29,8 +29,7 @@ in_reply_to: "" Linux by default doesn't allow any increase in scheduling priority. Users need to manually setup special user|group with elevated rights. Also system calls that try elevated scheduling don't clamp, instead they fail -EPREM if out of bounds. So all around a pain in the ass. -Media (not lifted): `2072135292115427728_HMGz-64W4AABeaH_orig.png` - +![](https://pbs.twimg.com/media/HMGz-64W4AABeaH?format=png&name=orig) **2/** I'm a little lazy right now and don't feel like trying SteamOS big picture mode to see what the default ulimits are. Curious what they allow. @@ -42,8 +41,9 @@ Linux priority workarounds (b.) Use setrlimit() to set 'soft=hard' limit (c.) Then set priority or nice based on new soft limit -Media (not lifted): `2072147378480566273_HMG-UCRXIAEKbdj_orig.png` `2072147378480566273_HMG-zRxWwAAWtI4_orig.png` +![](https://pbs.twimg.com/media/HMG-UCRXIAEKbdj?format=png&name=orig) +![](https://pbs.twimg.com/media/HMG-zRxWwAAWtI4?format=png&name=orig) **4/** I don't do one-time global priority maximums, just in case someone sudo's higher priority hard limit dynamically it should pickup the new limit. @@ -52,4 +52,4 @@ I don't do one-time global priority maximums, just in case someone sudo's higher Also while on setrlimit, I also bump up the RLIMIT_MEMLOCK to it's maximum just in case before the mlockall(). -Media (not lifted): `2072149707107787035_HMHBGTPXwAA_axg_orig.png` +![](https://pbs.twimg.com/media/HMHBGTPXwAA_axg?format=png&name=orig) \ No newline at end of file diff --git a/archive/threads/NOTimothyLottes/2026-07-02-settings-im-using-for-snd-pcm-sw-params-for-alsa/index.md b/archive/threads/NOTimothyLottes/2026-07-02-settings-im-using-for-snd-pcm-sw-params-for-alsa/index.md index 60e1a6e..44c91ac 100644 --- a/archive/threads/NOTimothyLottes/2026-07-02-settings-im-using-for-snd-pcm-sw-params-for-alsa/index.md +++ b/archive/threads/NOTimothyLottes/2026-07-02-settings-im-using-for-snd-pcm-sw-params-for-alsa/index.md @@ -29,8 +29,7 @@ in_reply_to: "" Settings I'm using for snd_pcm_sw_params for ALSA, don't have docs for all of this, seems to work. I'm doing 64 frame period size on a double buffer right now without any thread priority, and not getting xruns, so not yet sure of bad behavior -Media (not lifted): `2072506103401754653_HMMFAHiX0AAzY_R_orig.png` - +![](https://pbs.twimg.com/media/HMMFAHiX0AAzY_R?format=png&name=orig) **2/** I put in a forced thread sleep between writes to force a xrun, and SNDRV_PCM_IOCTL_WRITEI_FRAMES kernel call then returns -32, in which case I run a SNDRV_PCM_IOCTL_PREPARE and then just get back to the write loop, seems to restore normal playback just fine. @@ -39,8 +38,7 @@ I put in a forced thread sleep between writes to force a xrun, and SNDRV_PCM_IOC I reduced asound.h to this basically, the most minimal thing I found I needed. Now I also rename a few things (like structure names), and my IOCTL macros are slightly different in composition than standard. -Media (not lifted): `2072511121269928165_HMMJjYPWAAAY1IE_orig.png` - +![](https://pbs.twimg.com/media/HMMJjYPWAAAY1IE?format=png&name=orig) **4/** After getting this far, it actually looks quite easy, but the route to this was filled with garbage sifting because I couldn't easily find someone else who did this kind of minimalization. I'm only supporting 48KHz stereo 16-bit signed, with double buffering = keep it simple. diff --git a/archive/threads/NOTimothyLottes/2026-07-02-yuck-starting-on-wdm-ks-audio-interface-for-win32/index.md b/archive/threads/NOTimothyLottes/2026-07-02-yuck-starting-on-wdm-ks-audio-interface-for-win32/index.md index 468b19e..341a047 100644 --- a/archive/threads/NOTimothyLottes/2026-07-02-yuck-starting-on-wdm-ks-audio-interface-for-win32/index.md +++ b/archive/threads/NOTimothyLottes/2026-07-02-yuck-starting-on-wdm-ks-audio-interface-for-win32/index.md @@ -29,20 +29,19 @@ in_reply_to: "" Yuck, starting on WDM/KS audio interface for WIN32, much more painful than ALSA. But I've been here before. Starting with the include bloat ... the real question is if I'm going to need to file more Wine bugs. -Media (not lifted): `2072804183992922296_HMQT-ALWoAAABEe_orig.png` `2072804183992922296_HMQUVgpXYAA3h6r_orig.png` +![](https://pbs.twimg.com/media/HMQT-ALWoAAABEe?format=png&name=orig) +![](https://pbs.twimg.com/media/HMQUVgpXYAA3h6r?format=png&name=orig) **2/** Wine has a lot of problems with SetConsoleMode() I had to include an extra ENABLE_WRAP_AT_EOL_OUTPUT, and then force a newline right after ASCI ESC[H else it would screw up (and it still does at the end with the ??). But at least the debug is usable now. -Media (not lifted): `2072825642354123190_HMQnWmJXcAAOiSS_orig.png` - +![](https://pbs.twimg.com/media/HMQnWmJXcAAOiSS?format=png&name=orig) **3/** But of course instant bad news, I cannot open the WinMM DRV_QUERYDEVICEINTERFACE, it returned ~0 (INVALID_HANDLE_VALUE). So I'm dead in the water in Wine again. Honestly getting sick of filing bugs in Wine, all the important stuff I do is broken. So what, no games use WDM/KS? -Media (not lifted): `2072826861449629746_HMQoTiQWkAAbwj1_orig.png` - +![](https://pbs.twimg.com/media/HMQoTiQWkAAbwj1?format=png&name=orig) **4/** https://forum.winehq.org/viewtopic.php?t=10225 - Looks like I'm 16 years late to the answer, if they didn't get in WDM/KS in 16 years, certainly it won't happen. Still surprised that all PC games are using the higher level garbage-ware sound APIs on Windows. diff --git a/archive/threads/NOTimothyLottes/2026-07-03-following-the-succession-thanks-of-re-trying/index.md b/archive/threads/NOTimothyLottes/2026-07-03-following-the-succession-thanks-of-re-trying/index.md index 197afb5..1e3c70f 100644 --- a/archive/threads/NOTimothyLottes/2026-07-03-following-the-succession-thanks-of-re-trying/index.md +++ b/archive/threads/NOTimothyLottes/2026-07-03-following-the-succession-thanks-of-re-trying/index.md @@ -29,34 +29,29 @@ in_reply_to: "" Following the succession (thanks) of re-trying WASAPI using this example which has been pre-minimized and de-C++'ed: https://gist.github.com/mmozeiko/5a5b168e61aff4c1eaec0381da62808f#file-win32_wasapi-h - But I'm missing something on how to get the C++ as C linking to function (cross compiling), doesn't easily work out of the box. -Media (not lifted): `2073096069529907441_HMUdajFXEAAiaQE_orig.png` - +![](https://pbs.twimg.com/media/HMUdajFXEAAiaQE?format=png&name=orig) **2/** Of course I'm missing the magic header that does the real work ... curious how messy this will get -Media (not lifted): `2073098899896598550_HMUgZcyWQAA263a_orig.jpg` - +![](https://pbs.twimg.com/media/HMUgZcyWQAA263a?format=jpg&name=orig) **3/** So instead of the massive "mmdeviceapi.h" mess-ware, I defined a stupid CPP_(object,virtual_function_number) macro. This way I just have to write down the index in the VT table for the specific virtual function ... -Media (not lifted): `2073110092447203466_HMUqNm_XIAA0JEP_orig.png` - +![](https://pbs.twimg.com/media/HMUqNm_XIAA0JEP?format=png&name=orig) **4/** Here is initial bring up, function call by function call. No headers, and no C++. The magic of typecasting at usage IC4_(CPP_(... is that I don't ever have to build the headers. That is at least working out well. I do line by line to test in Wine, defer fail handling until later -Media (not lifted): `2073111326981783629_HMUrDz2XsAA9JLP_orig.png` - +![](https://pbs.twimg.com/media/HMUrDz2XsAA9JLP?format=png&name=orig) **5/** More on bring-up. I just run and check visually for output in the console (this time 'B055'). Since compile times are under a second, it is super fast to check as I go. Easy to see how much code bloat there is for C++ this way (doing it manually). -Media (not lifted): `2073113441959616958_HMUs9oLWUAAaHx9_orig.png` - +![](https://pbs.twimg.com/media/HMUs9oLWUAAaHx9?format=png&name=orig) **6/** Example below of how much header bloat I'm factoring out using my simple macros -Media (not lifted): `2073114409270997497_HMUujnwWoAAUQd1_orig.png` +![](https://pbs.twimg.com/media/HMUujnwWoAAUQd1?format=png&name=orig) \ No newline at end of file diff --git a/archive/threads/NOTimothyLottes/2026-07-03-so-instead-of-the-massive-mmdeviceapi-h-mess-ware/index.md b/archive/threads/NOTimothyLottes/2026-07-03-so-instead-of-the-massive-mmdeviceapi-h-mess-ware/index.md index d9cc195..137e1de 100644 --- a/archive/threads/NOTimothyLottes/2026-07-03-so-instead-of-the-massive-mmdeviceapi-h-mess-ware/index.md +++ b/archive/threads/NOTimothyLottes/2026-07-03-so-instead-of-the-massive-mmdeviceapi-h-mess-ware/index.md @@ -29,22 +29,19 @@ in_reply_to: "" So instead of the massive "mmdeviceapi.h" mess-ware, I defined a stupid CPP_(object,virtual_function_number) macro. This way I just have to write down the index in the VT table for the specific virtual function ... -Media (not lifted): `2073110092447203466_HMUqNm_XIAA0JEP_orig.png` - +![](https://pbs.twimg.com/media/HMUqNm_XIAA0JEP?format=png&name=orig) **2/** Here is initial bring up, function call by function call. No headers, and no C++. The magic of typecasting at usage IC4_(CPP_(... is that I don't ever have to build the headers. That is at least working out well. I do line by line to test in Wine, defer fail handling until later -Media (not lifted): `2073111326981783629_HMUrDz2XsAA9JLP_orig.png` - +![](https://pbs.twimg.com/media/HMUrDz2XsAA9JLP?format=png&name=orig) **3/** More on bring-up. I just run and check visually for output in the console (this time 'B055'). Since compile times are under a second, it is super fast to check as I go. Easy to see how much code bloat there is for C++ this way (doing it manually). -Media (not lifted): `2073113441959616958_HMUs9oLWUAAaHx9_orig.png` - +![](https://pbs.twimg.com/media/HMUs9oLWUAAaHx9?format=png&name=orig) **4/** Example below of how much header bloat I'm factoring out using my simple macros -Media (not lifted): `2073114409270997497_HMUujnwWoAAUQd1_orig.png` +![](https://pbs.twimg.com/media/HMUujnwWoAAUQd1?format=png&name=orig) \ No newline at end of file diff --git a/archive/threads/NOTimothyLottes/2026-07-06-vulkan-starts-with-the-ping-pong-between-getting/index.md b/archive/threads/NOTimothyLottes/2026-07-06-vulkan-starts-with-the-ping-pong-between-getting/index.md index 1b07376..31da822 100644 --- a/archive/threads/NOTimothyLottes/2026-07-06-vulkan-starts-with-the-ping-pong-between-getting/index.md +++ b/archive/threads/NOTimothyLottes/2026-07-06-vulkan-starts-with-the-ping-pong-between-getting/index.md @@ -29,6 +29,5 @@ in_reply_to: "" Vulkan starts with the ping pong between getting an instance proc addr so one can get vkCreateInstance, then using that to create an instance so one can get the remaining functions. I reuse my Lib() code modified for VK, that keeps a 64-bit base and 32-bit offsets for symbols. -Media (not lifted): `2074108624553554387_HMi2ZkFXEAAy767_orig.png` - +![](https://pbs.twimg.com/media/HMi2ZkFXEAAy767?format=png&name=orig) Branches: [[archive/threads/NOTimothyLottes/2026-07-06-vulkan-starts-with-the-ping-pong-between-getting/2026-07-08-nullspector-thats-very-neat-but-is-it-really-true-in-practice]] diff --git a/archive/threads/NOTimothyLottes/2026-07-11-rethinking-vulkan-queue-choice-traditional-double/index.md b/archive/threads/NOTimothyLottes/2026-07-11-rethinking-vulkan-queue-choice-traditional-double/index.md index 91c64c6..9c38235 100644 --- a/archive/threads/NOTimothyLottes/2026-07-11-rethinking-vulkan-queue-choice-traditional-double/index.md +++ b/archive/threads/NOTimothyLottes/2026-07-11-rethinking-vulkan-queue-choice-traditional-double/index.md @@ -29,18 +29,22 @@ in_reply_to: "" Rethinking Vulkan queue choice. Traditional double-buffered games might do something like the code below. Find the queue that does {presentation,graphics,compute}. First off this seems like a lot of unnecessary work when one could just choose queue 0 and be done with it ... -Media (not lifted): `2075769880092037309_HM6desTW0AAHA_H_orig.png` - +![](https://pbs.twimg.com/media/HM6desTW0AAHA_H?format=png&name=orig) Branches: [[archive/threads/NOTimothyLottes/2026-07-11-rethinking-vulkan-queue-choice-traditional-double/2026-07-11-konrad_kubacki_-am-i-having-a-stroke-what-is-this-font-it-feels]] **2/** AMD on Linux (RADV) and Windows. Queue 0 just works. But note both platforms support doing present on queue 1. So on AMD I'm likely going to render via compute on queue 0 [to reduce chance of preemption] and present on queue 1. And have both decoupled (for front buffer rendering) -Media (not lifted): `2075770634349527454_HM6d5GnWAAAGOmg_orig.jpg` `2075770634349527454_HM6d8lcXsAA-8LJ_orig.jpg` +![](https://pbs.twimg.com/media/HM6d5GnWAAAGOmg?format=jpg&name=orig) +![](https://pbs.twimg.com/media/HM6d8lcXsAA-8LJ?format=jpg&name=orig) **3/** NVIDIA is more complex. They put a DMA engine in queue 1 slot, and compute engine in queue 2 slot. Some sometimes queue 2 slot can or cannot do present (varies by driver). So maybe present on 0 (gfx queue), and dispatch on queue 2 by default for NV. -Media (not lifted): `2075771407510773906_HM6egsMWcAAkjOq_orig.jpg` `2075771407510773906_HM6ex2jXwAAkmI6_orig.jpg` `2075771407510773906_HM6e5EdXwAAuOG5_orig.jpg` +![](https://pbs.twimg.com/media/HM6egsMWcAAkjOq?format=jpg&name=orig) + +![](https://pbs.twimg.com/media/HM6ex2jXwAAkmI6?format=jpg&name=orig) + +![](https://pbs.twimg.com/media/HM6e5EdXwAAuOG5?format=jpg&name=orig) \ No newline at end of file diff --git a/archive/threads/NOTimothyLottes/2026-07-14-example-usage-after-clean-up/index.md b/archive/threads/NOTimothyLottes/2026-07-14-example-usage-after-clean-up/index.md index 4f93f79..e33cab4 100644 --- a/archive/threads/NOTimothyLottes/2026-07-14-example-usage-after-clean-up/index.md +++ b/archive/threads/NOTimothyLottes/2026-07-14-example-usage-after-clean-up/index.md @@ -29,6 +29,5 @@ in_reply_to: "" Example usage after clean-up. -Media (not lifted): `2076833886827376782_HNJlSFyW0AAQylS_orig.png` - +![](https://pbs.twimg.com/media/HNJlSFyW0AAQylS?format=png&name=orig) Branches: [[archive/threads/NOTimothyLottes/2026-07-14-example-usage-after-clean-up/2026-07-14-bkaradzic-much-clearer]], [[archive/threads/NOTimothyLottes/2026-07-14-example-usage-after-clean-up/2026-07-14-noop_dev-at-this-point-could-make-a-dsl-with-perl]] diff --git a/archive/threads/NOTimothyLottes/2026-07-17-oh-f-it-the-urge-to-drop-the-c-baggage-was-too/index.md b/archive/threads/NOTimothyLottes/2026-07-17-oh-f-it-the-urge-to-drop-the-c-baggage-was-too/index.md index ddc481a..4814826 100644 --- a/archive/threads/NOTimothyLottes/2026-07-17-oh-f-it-the-urge-to-drop-the-c-baggage-was-too/index.md +++ b/archive/threads/NOTimothyLottes/2026-07-17-oh-f-it-the-urge-to-drop-the-c-baggage-was-too/index.md @@ -29,6 +29,5 @@ in_reply_to: "" Oh, F-it! The urge to drop the C baggage was too strong, using nasm to bootstrap another radical Forth for Linux. Will see how far I can get in a 4 KiB binary to start. Apparently this wants to exist, and I have no choice but to lend some fingers. ELF64 out of the way. -Media (not lifted): `2078257788732461389_HNdzRxAXMAEom1u_orig.png` - +![](https://pbs.twimg.com/media/HNdzRxAXMAEom1u?format=png&name=orig) Branches: [[archive/threads/NOTimothyLottes/2026-07-17-oh-f-it-the-urge-to-drop-the-c-baggage-was-too/2026-07-18-furan-sorry-for-the-tangent-what-is-this-font-and-where]] diff --git a/archive/threads/NOTimothyLottes/2026-07-18-i-realized-at-some-point-i-can-have-most/index.md b/archive/threads/NOTimothyLottes/2026-07-18-i-realized-at-some-point-i-can-have-most/index.md index 3204bd6..1295ee3 100644 --- a/archive/threads/NOTimothyLottes/2026-07-18-i-realized-at-some-point-i-can-have-most/index.md +++ b/archive/threads/NOTimothyLottes/2026-07-18-i-realized-at-some-point-i-can-have-most/index.md @@ -29,6 +29,5 @@ in_reply_to: "" I realized at some point I can have most interpreted forth-style words in an aligned 8-bytes. So can make a very small interpreter. -Media (not lifted): `2078349730204078527_HNfHl-dXcAAf6Om_orig.png` - +![](https://pbs.twimg.com/media/HNfHl-dXcAAf6Om?format=png&name=orig) Branches: [[archive/threads/NOTimothyLottes/2026-07-18-i-realized-at-some-point-i-can-have-most/2026-07-18-noop_dev-even-smaller-code-size-possible-with-custom]] diff --git a/archive/threads/NOTimothyLottes/2026-08-02-re-fpga-land-alus-im-firmly-distracted-by-an/index.md b/archive/threads/NOTimothyLottes/2026-08-02-re-fpga-land-alus-im-firmly-distracted-by-an/index.md index 5a40bf1..1281ed2 100644 --- a/archive/threads/NOTimothyLottes/2026-08-02-re-fpga-land-alus-im-firmly-distracted-by-an/index.md +++ b/archive/threads/NOTimothyLottes/2026-08-02-re-fpga-land-alus-im-firmly-distracted-by-an/index.md @@ -49,26 +49,22 @@ In a traditional right-justified CPU, you'd have three ops {MUL, ADD, SHR} which Left justified variable bit-width loads make a lot more sense, partly because the LSBs index into bits (or sub-bits depending on mapping) effectively (instead of bytes), and one can do {4/8/16/32-bit} extraction with 8 SLICES and one CLB deep [a lot easier than right-justified] -Media (not lifted): `2083764013570093330_HOsENEBXEAAoWlx_orig.png` - +![](https://pbs.twimg.com/media/HOsENEBXEAAoWlx?format=png&name=orig) **7/** The core normalized IMAD can easily be made -/+ symmetrical simply by feeding in truncated LSBs of the add operand with simple logic based on MSBs of mul operands. In the example below the {-4} represents {-1.0}. Of course -4*-4 overflows to -4 [2's comp] -Media (not lifted): `2083765900436492692_HOsFs-nWAAAUlTy_orig.png` - +![](https://pbs.twimg.com/media/HOsFs-nWAAAUlTy?format=png&name=orig) **8/** Predicate/bool logic becomes {0.0, -1.0} based, can leverage {a+b} wrap around to implement XOR, and -(a*b) to implement AND. -Media (not lifted): `2083766854980383071_HOsG3VBXAAA92kz_orig.png` - +![](https://pbs.twimg.com/media/HOsG3VBXAAA92kz?format=png&name=orig) **9/** Doing a "perspective divide" {s=x/z} can be transformed into a scaled perspective divide {s=x*(a/z)} to work around the {-1.0 to <1.0} range limitation. And one can transform the divide into a binary search for 's' - specifically largest 's' where {s*z<=x*a} -Media (not lifted): `2083768129658765655_HOsIBCBWcAA79PL_orig.png` - +![](https://pbs.twimg.com/media/HOsIBCBWcAA79PL?format=png&name=orig) **10/** Notice this binary search test takes just one IMAD {s*z+t} where t=-x*a. Meaning a smart machine can do a test step in 2 ops on a DSP (one IMAD for the test, the next to ADD to 's' for the next search step) ... diff --git a/archive/threads/VPCOMPRESSB/2025-11-20-no-tokens-and-no-asts-easier-because-its-forth/index.md b/archive/threads/VPCOMPRESSB/2025-11-20-no-tokens-and-no-asts-easier-because-its-forth/index.md index cdda8e4..3f84cf8 100644 --- a/archive/threads/VPCOMPRESSB/2025-11-20-no-tokens-and-no-asts-easier-because-its-forth/index.md +++ b/archive/threads/VPCOMPRESSB/2025-11-20-no-tokens-and-no-asts-easier-because-its-forth/index.md @@ -35,4 +35,8 @@ code is awful because i'm using Java as if it's C, and it isn't optimized (plent the <\> represents NULL. (this was debugged with print 🙂). -Media (not lifted): `1991383117571957052_G6LJrEgXkAA2Z26_orig.png` `1991383117571957052_G6LPXFOWAAABSVy_orig.jpg` `1991383117571957052_G6LPYhqXgAA2rvt_orig.jpg` +![](https://pbs.twimg.com/media/G6LJrEgXkAA2Z26?format=png&name=orig) + +![](https://pbs.twimg.com/media/G6LPXFOWAAABSVy?format=jpg&name=orig) + +![](https://pbs.twimg.com/media/G6LPYhqXgAA2rvt?format=jpg&name=orig) \ No newline at end of file diff --git a/archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-Unblinking3Y3-bro-you-dont-hafta-grug-post-to-be-popular-with.md b/archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-Unblinking3Y3-bro-you-dont-hafta-grug-post-to-be-popular-with.md index ca3c426..9936b6d 100644 --- a/archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-Unblinking3Y3-bro-you-dont-hafta-grug-post-to-be-popular-with.md +++ b/archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-Unblinking3Y3-bro-you-dont-hafta-grug-post-to-be-popular-with.md @@ -30,8 +30,7 @@ parent_post_id: "2073406569459368226" @VictorTaelin Bro, you dont hafta Grug-post to be popular with the right people. -![](https://files.catbox.moe/uuordl.jpg) - +![](https://pbs.twimg.com/media/HMZQa0UXUAA3ZJp?format=jpg&name=orig) ## Related - Spine: [[archive/threads/VictorTaelin/2026-07-04-sighs]] diff --git a/archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-SteveMoraco-legend.md b/archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-SteveMoraco-legend.md index efb3e46..da2cb3b 100644 --- a/archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-SteveMoraco-legend.md +++ b/archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-SteveMoraco-legend.md @@ -30,8 +30,7 @@ parent_post_id: "2073406569459368226" @VictorTaelin Legend -![](https://files.catbox.moe/55q672.jpg) - +![](https://pbs.twimg.com/media/HMb6HlXacAAgdAN?format=jpg&name=orig) ## Related - Spine: [[archive/threads/VictorTaelin/2026-07-04-sighs]] diff --git a/archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-waefrebeorn-i-have-an-entire-math-proofs-section-in-my-maths.md b/archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-waefrebeorn-i-have-an-entire-math-proofs-section-in-my-maths.md index d37ca8b..91da8d7 100644 --- a/archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-waefrebeorn-i-have-an-entire-math-proofs-section-in-my-maths.md +++ b/archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-waefrebeorn-i-have-an-entire-math-proofs-section-in-my-maths.md @@ -32,8 +32,7 @@ parent_post_id: "2073406569459368226" so “+1” -![](https://files.catbox.moe/iiumro.jpg) - +![](https://pbs.twimg.com/media/HMcipC5WUAA44VI?format=jpg&name=orig) ## Related - Spine: [[archive/threads/VictorTaelin/2026-07-04-sighs]] diff --git a/archive/threads/VictorTaelin/2026-07-04-sighs/index.md b/archive/threads/VictorTaelin/2026-07-04-sighs/index.md index c95455c..1a2820a 100644 --- a/archive/threads/VictorTaelin/2026-07-04-sighs/index.md +++ b/archive/threads/VictorTaelin/2026-07-04-sighs/index.md @@ -90,6 +90,5 @@ that was Fable's contribution, and, if you can't see how incredible this is, I d as for the solution, Fable proposed a few. all bad. my fix was to split Type in two sorts: one for arbitrary types, and other for lower order values. this lets me have the relaxed checks on positions where lambdas cannot occur, while still ensuring lambdas cannot be cloned and, therefore, self replicate. this is the "elegant proof" I mentioned in the post below! -![](https://files.catbox.moe/566zyf.jpg) - +![](https://pbs.twimg.com/media/HMY3SbQWAAAGmrp?format=jpg&name=orig) Branches: [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-Rafa_Schwinger-no-i-prefer-the-previous-angry-rhetoric-pls]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-NickChapmn-y-combinators-dont-have-valid-types-so-you-are]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-ETazou-i-understood-5-but-i-still-enjoyed-it]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-fecklesstit-u-the-best-man-keep-it-up]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-AutorRecomienda-fable-simplemente-hizo-de-placa-base-pitando-para]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-MancerAI_-its-lonely-sometimes-eh-im-excited-about-your]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-ThePremiseOfIt-theres-an-emergent-ai-psychosis-psychosis-in]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-willyrgf-wow-thats-impressive-best-argument-on-the-quality]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-o1lo01ol1o-do-you-allow-for-non-termination-on-total]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-WayneBrown6922-i-began-following-you-when-i-scrolled-across-an]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-MoisasADR-os-caras-acham-que-s-eles-s-o-superinteligentes]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-billylevin-this-is-so-cool-and-inspiring-not-that-i]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-taxilogiker-russel-antinomy]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-anghel4d-im-a-big-fan-of-interaction-combinators-and-i]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-mprado-loved-this-long-post-version-of-yours-you-should]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-trinitotolukeno-karpathy-said-he-had-ai-psychosis-for-a-while-and]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-yacineMTB-its-not-how-many-likes-you-get-its-likes-from-who]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-marunarh-most-of-you-cant-understand-my-posts-of-course]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-Unblinking3Y3-bro-you-dont-hafta-grug-post-to-be-popular-with]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-okiwano-im-curious-what-comes-after-bend2-bend3-or-are]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-YgorIsm-texto-mt-bem-escrito-ficou-bem-mais-f-cil-de]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-0xAgathosDaimon-the-real-crime-is-those-idiots-not-knowing-who]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-pakatanatakata-lemme-aske-gpt-for-translating-your-hieroglyph]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-RizwanKhuharo-angry-ones-always-get-attention-on-internet]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-iabom-sigh-true-brother-we-smart-people-are-alone-no]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-RealSchmebulog-sorry-im-not-very-technical-did-you-mean-ai-good]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-VincentLejeune-the-more-ai-advances-the-more-we-need-very-high]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-LeeeeeeeeeT_-i-once-implemented-a-type-checker-for]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-zyansheep-in-my-language-im-trying-to-do-termination-by]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-SdoGtnepreS-dont-let-them-get-you-down-they-can-barely-see]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-habibislop-this-is-a-very-naive-and-ignorant-question-but]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-carmim_13-adorei-ler-esse-post-timo-poder-ler-de-voc-essas]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-Foxfire1st-you-speak-simply-into-a-mixed-space-where-most]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-itisnotsavio-one-question-does-bend-have-an-unscoped-lambda]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-esa_was_taken-is-another-good-example-this-is-happening-to-both]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-An0o0o0o0n-im-not-going-to-read-all-that-im-happy-for-you-or]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-adelbucetta-sometimes-the-problem-isnt-explaining-something]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-Juanpinha11-i-never-thought-you-had-ai-psychosis-but-the-fact]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-Kinch_ahoy-i-got-interested-in-bend-for-its-prosaic]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-Trevor62271128-i-cant-really-comprehend-what-bend2-will-be]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-donalfellows-if-you-have-a-system-that-provably-must-terminate]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-SoritesMinor-keep-posting-and-ill-keep-reading-or-trying-to]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-LusciousPear-i-love-this-shit]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-rom1504-very-cool-indeed-hard-but-important-to-pick-the]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-Kmmer11133-i-enjoyed-reading-this-post-i-think-that-what]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-IncidentNoodle-this-is-a-great-post-i-cant-pretend-that-i-really]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-qonundrai-man-i-love-what-ur-doing-keep-going-one-of-the]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-noam_yy-i-presume-the-issue-was-in-duplication-inside-0]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-misterclayt0n-many-such-cases-https-x-com-misterclayt0n-status]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-altansukhbatbay-high-quality-post]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-EttoreMariotti-thanks]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-kylemarieb-this-write-up-was-really-well-done-thank-you-for]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-kekmaomaster-taelin-ive-been-following-you-since-the-beginning]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-mikejt4-youre-not-allowed-to-praise-fable-you-must-bag]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-dlbydq-these-guys-have-no-idea-what-theyre-talking-about]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-charlesthefool-do-people-not-study-lambda-calculus-in-college-or]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-0xbadface1-what-do-you-mean-by-arguments-to-recursion]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-Pitometsu-impossibility-to-write-fast-interpreter-looks]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-Pitometsu-qtt-approach-for-this-is-very-elegant-indeed]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-TheeKruger-i-think-this-is-a-super-legible-digestible]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-04-Court_Reinland-this-is-an-s-tier-post-1-it-proves-non-slop]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-_machi47-im-not-reading-all-that-but-damn-hope-it-works]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-real_philogy-dont-you-want-to-be-able-to-copy-lambdas-though]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-theodorvaryag-this-post-is-not-a-rebuttal-to-a-query-about-ai]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-IanCSU-sure-i-read-all-that]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-Siggis_Man-this-is-the-antidote-i-found-to-ai-psychosis-i]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-phtn458-bro-keep-posting-like-you-do-one-day-well-have]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-SinghSwapneil-are-languages-built-on-bend-incapable-of]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-SteveMoraco-legend]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-dan_tiema-i-didnt-expect-id-read-all-of-this-but-i-did-cant]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-eshear-to-someone-who-doesnt-understand-the-actual]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-Orbiter777-fable-is-educated-c]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-waefrebeorn-i-have-an-entire-math-proofs-section-in-my-maths]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-n3ovice-dont-try-to-market-yourself-youre-not-running-for]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-MadisonP94618-it-was-easy-to-read-and-i-think-i-understood-most]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-Snafxemp-loved-ur-rant-these-types-of-posts-deserves]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-nudistofdespair-you-gave-it-a-great-shot-thanks-for-an-engaging]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-KleeneAlgebra-i-disagree-on-the-consistency-is-enough-to-do]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-ant1m4tt3r-stupid-question-alert-in-bends-syntax-what-is-the]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-bewajitolulope-feels-like-the-precise-symbolic-analogue-of]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-05-JaredC1728-quality-over-quantity]], [[archive/threads/VictorTaelin/2026-07-04-sighs/2026-07-06-SGuergachi-hopefully-useful-data-point]] diff --git a/assets/README.md b/assets/README.md index cdd932d..39f7637 100644 --- a/assets/README.md +++ b/assets/README.md @@ -1 +1 @@ -Working media for Threadwell. Mirrors archive/threads/// plus handles//. Gitignored except this file. Not published. Lift to the image host later. Do not link notes at this folder. +Working media for Threadwell. Mirrors archive/threads/// plus handles//. Gitignored except this file. Not published. Notes never link here; published media cites the original provider's HTTPS URL. A separate `tw.py backup --id ` command mirrors these assets to configured storage; alternative-host uploads are a manual fallback used only after the origin is confirmed unavailable. Do not link notes at this folder. diff --git a/meta/conventions.md b/meta/conventions.md index 1c17cab..6ae6dce 100644 --- a/meta/conventions.md +++ b/meta/conventions.md @@ -48,7 +48,7 @@ A thread folder holds `index.md` (spine) and one markdown file per off-spine rep # Images -Always absolute HTTPS URLs on the image host (catbox after upload). Do not commit local binaries for published notes. Working files sit in `assets/` (gitignored), not in `meta/attachments/` except unrelated Obsidian drops. +Always absolute HTTPS URLs from the original provider when possible (`pbs.twimg.com`, `video.twimg.com`). The vault also retains a local, unpublished copy under `assets/` using the same relative taxonomy as the archive. A separately requested backup may mirror those assets to configured storage; alternative-host uploads are a manual fallback used only after the origin is confirmed unavailable, and the original URL and every fallback URL remain recorded in `media.json`. Do not commit local binaries for published notes. Working files sit in `assets/` (gitignored), not in `meta/attachments/` except unrelated Obsidian drops. ```md ![](https://files.catbox.moe/example.png) diff --git a/notes/How threads are organized.md b/notes/How threads are organized.md index e7b55d9..e8bd80b 100644 --- a/notes/How threads are organized.md +++ b/notes/How threads are organized.md @@ -36,7 +36,7 @@ Every imported thread starts with `archive`, `twitter`, and the author's handle. ## Images -Pictures on the site are ordinary HTTPS URLs. Working copies of files live outside what GitHub Pages serves. A note that is still being prepared is marked `draft: true` and does not appear on the site. +Pictures on the site are direct HTTPS URLs from the original image host when possible. Working copies of files live outside what GitHub Pages serves. A note that is still being prepared is marked `draft: true` and does not appear on the site. ## Reading diff --git a/scripts/twitter/README.md b/scripts/twitter/README.md index c79176a..ec502e0 100644 --- a/scripts/twitter/README.md +++ b/scripts/twitter/README.md @@ -5,42 +5,61 @@ Front door: `tw.py`. Individual scripts still work. From the vault root: ``` -python C:\projects\Threadwell\scripts\twitter\tw.py locate --id python C:\projects\Threadwell\scripts\twitter\tw.py graph --id python C:\projects\Threadwell\scripts\twitter\tw.py refresh --id --tip -python C:\projects\Threadwell\scripts\twitter\tw.py lift --id --orig -python C:\projects\Threadwell\scripts\twitter\tw.py ocr --id +python C:\projects\Threadwell\scripts\twitter\tw.py audit-media --id python C:\projects\Threadwell\scripts\twitter\tw.py publish --id -python C:\projects\Threadwell\scripts\twitter\tw.py sync --handle # rebuild handle index -python C:\projects\Threadwell\scripts\twitter\tw.py sync # rebuild all handle indexes +python C:\projects\Threadwell\scripts\twitter\tw.py sync --handle +python C:\projects\Threadwell\scripts\twitter\tw.py backup --id +python C:\projects\Threadwell\scripts\twitter\tw.py fallback --id --media-id --role --confirm-origin-unavailable +python C:\projects\Threadwell\scripts\twitter\tw.py restore-origin --id --media-id +python C:\projects\Threadwell\scripts\twitter\tw.py migrate-media --id +python C:\projects\Threadwell\scripts\twitter\tw.py migrate-media --all --apply ``` `paths.py` sets vault = two parents above this file, dumps = `../manual_slop/docs/twitter`, scratch = `../Threadwell-ai/scratch`. -`refresh` = refetch (cookies) + ingest + emit `--force` + media_merge. `--tip` treats `--id` as the tip (climb same-handle `reply_to`). Does not flip `draft`. Does not commit. Frozen Onat ids abort. +`refresh` = refetch (cookies) + ingest + emit `--force` + media_merge. `--tip` treats `--id` as the tip (climb same-handle `reply_to`). Does not flip `draft`. Does not commit. Frozen ids abort. Usual publish path after you like the note: 1. `tw.py graph --id …` — confirm tip vs root. 2. `tw.py refresh --id … --tip` if the dump stored a tip as root. -3. `tw.py lift --id … --orig` — catbox + rewrite `![](https://…)`. +3. `tw.py audit-media --id …` — confirm origin URLs are selected. 4. `tw.py publish --id …` sets `draft: false`. You commit. Site wikilinks must be `[[archive/threads//]]`. Short `[[slug]]` 404s. +## Media policy + +Published Twitter/X media cites the original provider's HTTPS URL by default. The vault also retains a local, unpublished copy under `assets/threads///` using the same relative taxonomy as the archive. A separately requested backup may mirror those assets to configured storage. Alternative-host uploads are a manual fallback used only after the origin is confirmed unavailable; the original URL and every fallback URL remain recorded in `media.json`. + +The `lift` command is retired. Use `fallback` for a single media item after explicit confirmation, or `restore-origin` to select the immutable provider URL again. The Catbox userhash and backup destination id/root are read from `secrets/credentials.toml` by the script. Never paste them into chat. + +Frozen threads (ids listed in `do_not_refetch.txt`, matched against every captured post id) are read-only across refetch, refresh, emit, manifest migration, note rewrite, fallback, publication selection, and tracked backup operations. Read-only `audit-media` may still inspect them. + ## Pieces | Script | Job | |---|---| -| `tw.py` | locate / graph / refetch / emit / refresh / lift / ocr / merge | +| `tw.py` | locate / graph / refetch / emit / refresh / ocr / merge / sync / publish / migrate-media / backup / fallback / restore-origin | | `graph_dry_run.py` | tip graph, no vault writes | | `ingest_gallery.py` | gallery-dl JSON → `thread_data.json` | -| `emit_archive.py` | JSON → notes + assets. `--force` now keeps CRT/OCR rows and prior catbox URLs | -| `lift_catbox.py` | upload `publish: true` (or `--orig`) | +| `emit_archive.py` | JSON → notes + assets. Uses canonical media locations. `--force` preserves derived/fallback rows | +| `media_migrate.py` | legacy `media.json` → canonical locations, dry-run or apply | +| `media_audit.py` | local integrity, reference counts, mirror freshness, optional origin check | +| `media_manifest.py` | schema, validation, merge, selection, atomic I/O | +| `media_refs.py` | media-aware markup and note rewrite planning | +| `backup_assets.py` | sparse, hash-verified copy of one thread asset dir | +| `catbox_client.py` | one sanitized Catbox upload; no batching or retry | +| `fallback_media.py` | confirm-origin fallback activation and restore-origin | +| `frozen.py` | resolve frozen ids against every captured post id | +| `lift_catbox.py` | retired entry; points operators to `tw.py fallback` | | `ocr_pass.py` | Umi HTTP `:1224` / tesseract / Windows OCR | -| `media_embed.py` | `--show crt` / `--attach-ocr` | -| `media_merge.py` | restore extra rows if you still need it | +| `media_embed.py` | `--attach-ocr` only; refuses `--show crt` | +| `media_merge.py` | restore derived rows under canonical API | | `crt_pass.py` | stock slang only; ShaderGlass is the look reference | -| `do_not_refetch.txt` | Onat freeze list | +| `do_not_refetch.txt` | frozen id list | +| `tests/` | isolated, deterministic unit tests | -Secrets: `secrets/twitter_cookies.txt`, `secrets/credentials.toml` `[catbox] userhash`. Never print them. +Secrets: `secrets/twitter_cookies.txt`, `secrets/credentials.toml` `[catbox] userhash` and `[backup] id`/`root`. The script reads them; never paste into chat, tests, or commits. \ No newline at end of file