From 190079e84a62e30ae891e8d706275d59297d5f0f Mon Sep 17 00:00:00 2001 From: Ed_ Date: Tue, 25 Aug 2026 09:07:20 -0400 Subject: [PATCH] directory name fix --- .../index.md | 0 .../index.md | 0 .../index.md | 33 -- ...-nice-to-talk-a-full-presentation-about.md | 2 +- ...n-a-while-people-need-to-be-reminded-to.md | 2 +- ...-this-given-i-never-write-code-any-more.md | 2 +- ...leonard_coder-4e71-if-you-know-you-know.md | 2 +- ...-a-language-beads-which-uses-a-graph-db.md | 2 +- ...-used-to-be-like-that-at-least-the-ones.md | 2 +- ...ing-it-disoriented-programming-just-the.md | 2 +- .../2023-07-01-SimonNordon-nop-is-ideal.md | 2 +- ...teach-it-in-abstinence-only-programming.md | 2 +- ...023-07-01-asparagiii-looks-like-a-koala.md | 2 +- ...are-is-absense-of-it-https-en-wikipedia.md | 2 +- .../2023-07-01-claudiogonzalo-c-to-c.md | 2 +- ...lks-theyre-calling-it-computer-oriented.md | 2 +- .../2023-07-01-mike_acton-thread.md | 2 +- ...ter-https-github-com-wyattscarpenter-wu.md | 2 +- .../index.md | 33 ++ .../index.md | 0 .../index.md | 0 .../index.md | 0 ...esting-crosstalk-from-voltage-inversion.md | 2 +- .../index.md | 2 +- .../index.md | 0 ...sses-do-you-need-to-produce-this-result.md | 2 +- .../index.md | 2 +- ...put-the-whole-game-logic-in-a-game-glsl.md | 2 +- ...int-six-seconds-d3d12createdevice-on-my.md | 2 +- ...-preallocating-every-type-of-descriptor.md | 2 +- .../index.md | 6 +- .../index.md | 0 .../index.md | 0 ...le-in-your-experience-in-code-like-that.md | 2 +- .../index.md | 2 +- ...are-its-really-curious-they-still-stick.md | 2 +- .../index.md | 2 +- .../index.md | 0 ...ou-tried-using-the-intel-cache-controls.md | 2 +- .../index.md | 2 +- ...s-the-restart-number-come-from-i-assume.md | 2 +- .../index.md | 0 .../index.md | 56 -- ...ly-isnt-hard-its-just-platform-specific.md | 2 +- ...xy4MyGPU-it-was-never-hard-just-tedious.md | 2 +- ...en-writing-assembly-for-almost-40-years.md | 2 +- ...ed-but-i-would-also-love-a-look-at-your.md | 2 +- ...Drisc0ll-im-sure-it-would-be-invaluable.md | 2 +- ...-would-and-i-think-more-people-would-be.md | 2 +- ...ve-only-done-asm-on-amiga-with-devpac-i.md | 2 +- ...been-doing-assembly-a-bit-in-d-with-the.md | 2 +- ...-people-who-claim-assembly-is-hard-just.md | 2 +- ...0-im-learning-assembly-in-my-spare-time.md | 2 +- ...-31-biovf-i-would-definitely-watch-that.md | 2 +- ...-07-31-cyberbemon-id-love-to-watch-that.md | 2 +- ...are-a-lot-of-watch-me-write-this-app-in.md | 2 +- .../2025-07-31-furan-would-watch-though.md | 2 +- ...ot-a-blank-canvas-go-for-it-interfacing.md | 2 +- ...oing-assembly-as-hobby-68k-assembly-x64.md | 2 +- ...07-31-m6502-i-would-enjoy-watching-that.md | 2 +- ...if-one-is-ok-with-bottom-up-thinking-99.md | 2 +- ...tely-interested-in-anything-you-put-out.md | 2 +- ...-07-31-nullspector-i-would-so-love-that.md | 2 +- ...aying-maybe-for-vulkan-depending-on-how.md | 2 +- .../2025-07-31-opdroid1234-i-would.md | 2 +- ...sh-the-win32-api-was-better-designed-it.md | 2 +- ...025-07-31-plasmabitcoin-very-interested.md | 2 +- .../2025-07-31-pranksterware-thatd-rock.md | 2 +- ...2025-07-31-roasted6read-i-am-interested.md | 2 +- ...ery-interested-in-it-also-on-your-forth.md | 2 +- ...lex_fx-is-it-already-aprils-fools-again.md | 2 +- .../2025-07-31-ssh4net-please.md | 2 +- ...y-isnt-hard-its-tedious-no-abstractions.md | 2 +- .../2025-07-31-totalwert-thread.md | 2 +- ...tart-pretending-i-understood-everything.md | 2 +- ...25-08-01-AnshumanKhanna5-video-link-now.md | 2 +- ...nt-really-matter-what-language-you-call.md | 2 +- ...now-someone-whod-be-excited-opdroid1234.md | 2 +- ...zb589-i-would-watch-that-so-count-me-in.md | 2 +- .../index.md | 56 ++ .../index.md | 2 + ...u-do-the-multiply-in-uint128-t-and-then.md | 2 +- .../index.md | 2 +- .../index.md | 38 -- .../index.md | 2 +- ...o-give-artix-lxqt-runit-variation-a-try.md | 2 +- ...e-is-this-thin-with-win11-right-now-but.md | 2 +- ...ing-to-me-how-this-challenge-would-have.md | 2 +- .../index.md | 2 +- ...00-interesting-font-does-it-have-a-name.md | 2 +- .../index.md | 2 +- .../index.md | 0 .../index.md | 0 ...ing-a-stroke-what-is-this-font-it-feels.md | 2 +- .../index.md | 2 +- .../index.md | 0 .../index.md | 0 archive/threads/NOTimothyLottes/index.md | 55 +- .../index.md | 0 archive/threads/VPCOMPRESSB/index.md | 2 +- scripts/twitter/README.md | 8 + scripts/twitter/emit_archive.py | 421 ++++++++++++++- scripts/twitter/render.py | 10 +- scripts/twitter/tests/test_emit_media.py | 9 +- scripts/twitter/tests/test_emit_op_owned.py | 384 ++++++++++++++ scripts/twitter/tests/test_reslug.py | 494 ++++++++++++++++++ .../twitter/tests/test_tw_media_commands.py | 88 ++++ scripts/twitter/tw.py | 23 + 108 files changed, 1609 insertions(+), 261 deletions(-) rename archive/threads/NOTimothyLottes/{2022-11-05-19-GPU-Programming-Tip-Line-Thread => 2022-11-05-gpu-programming-tip-line-thread}/index.md (100%) rename archive/threads/NOTimothyLottes/{2022-11-09-if-only-pc-vendors-with-open-isas-amd-intel-would => 2022-11-09-if-only-pc-vendors-with-open-isas}/index.md (100%) delete mode 100644 archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/index.md rename archive/threads/NOTimothyLottes/{2023-06-30-nothing-oriented-programming-nop-where-the-goal => 2023-06-30-nothing-oriented-programming-nop}/2023-06-30-SebAaltonen-would-be-nice-to-talk-a-full-presentation-about.md (97%) rename archive/threads/NOTimothyLottes/{2023-06-30-nothing-oriented-programming-nop-where-the-goal => 2023-06-30-nothing-oriented-programming-nop}/2023-06-30-_spolsh-once-in-a-while-people-need-to-be-reminded-to.md (96%) rename archive/threads/NOTimothyLottes/{2023-06-30-nothing-oriented-programming-nop-where-the-goal => 2023-06-30-nothing-oriented-programming-nop}/2023-06-30-domipheus-i-like-this-given-i-never-write-code-any-more.md (95%) rename archive/threads/NOTimothyLottes/{2023-06-30-nothing-oriented-programming-nop-where-the-goal => 2023-06-30-nothing-oriented-programming-nop}/2023-06-30-leonard_coder-4e71-if-you-know-you-know.md (94%) rename archive/threads/NOTimothyLottes/{2023-06-30-nothing-oriented-programming-nop-where-the-goal => 2023-06-30-nothing-oriented-programming-nop}/2023-07-01-CodingFiend-i-designed-a-language-beads-which-uses-a-graph-db.md (97%) rename archive/threads/NOTimothyLottes/{2023-06-30-nothing-oriented-programming-nop-where-the-goal => 2023-06-30-nothing-oriented-programming-nop}/2023-07-01-DefenceForceOrg-many-games-used-to-be-like-that-at-least-the-ones.md (96%) rename archive/threads/NOTimothyLottes/{2023-06-30-nothing-oriented-programming-nop-where-the-goal => 2023-06-30-nothing-oriented-programming-nop}/2023-07-01-PierreTerdiman-i-was-calling-it-disoriented-programming-just-the.md (95%) rename archive/threads/NOTimothyLottes/{2023-06-30-nothing-oriented-programming-nop-where-the-goal => 2023-06-30-nothing-oriented-programming-nop}/2023-07-01-SimonNordon-nop-is-ideal.md (94%) rename archive/threads/NOTimothyLottes/{2023-06-30-nothing-oriented-programming-nop-where-the-goal => 2023-06-30-nothing-oriented-programming-nop}/2023-07-01-TimSweeneyEpic-can-teach-it-in-abstinence-only-programming.md (95%) rename archive/threads/NOTimothyLottes/{2023-06-30-nothing-oriented-programming-nop-where-the-goal => 2023-06-30-nothing-oriented-programming-nop}/2023-07-01-asparagiii-looks-like-a-koala.md (94%) rename archive/threads/NOTimothyLottes/{2023-06-30-nothing-oriented-programming-nop-where-the-goal => 2023-06-30-nothing-oriented-programming-nop}/2023-07-01-azeke1984-best-software-is-absense-of-it-https-en-wikipedia.md (95%) rename archive/threads/NOTimothyLottes/{2023-06-30-nothing-oriented-programming-nop-where-the-goal => 2023-06-30-nothing-oriented-programming-nop}/2023-07-01-claudiogonzalo-c-to-c.md (94%) rename archive/threads/NOTimothyLottes/{2023-06-30-nothing-oriented-programming-nop-where-the-goal => 2023-06-30-nothing-oriented-programming-nop}/2023-07-01-helpful_signage-folks-theyre-calling-it-computer-oriented.md (95%) rename archive/threads/NOTimothyLottes/{2023-06-30-nothing-oriented-programming-nop-where-the-goal => 2023-06-30-nothing-oriented-programming-nop}/2023-07-01-mike_acton-thread.md (94%) rename archive/threads/NOTimothyLottes/{2023-06-30-nothing-oriented-programming-nop-where-the-goal => 2023-06-30-nothing-oriented-programming-nop}/2023-07-09-wyattscarpenter-https-github-com-wyattscarpenter-wu.md (95%) create mode 100644 archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/index.md rename archive/threads/NOTimothyLottes/{2023-08-04-for-anyone-tuning-in-now-spc-is-kind-of-like-a => 2023-08-03-spc-left-off-with-key-and-gamepad-input-gpu}/index.md (100%) rename archive/threads/NOTimothyLottes/{2023-08-06-the-next-challenge-is-overscan-safety-since-real => 2023-08-06-1st-spc-project-to-be-based-on-vintage-640x480}/index.md (100%) rename archive/threads/NOTimothyLottes/{2023-08-06-yeah-perhaps-wildly-alien-but-for-those-who-grew => 2023-08-06-spc-rdna2-assembler-thread}/index.md (100%) rename archive/threads/NOTimothyLottes/{2023-08-07-crt-emulation-on-lcds-can-be-hard-for-example-its => 2023-08-07-crt-emulation-on-lcds-can-be-hard}/2023-08-10-BlurBusters-very-interesting-crosstalk-from-voltage-inversion.md (98%) rename archive/threads/NOTimothyLottes/{2023-08-07-crt-emulation-on-lcds-can-be-hard-for-example-its => 2023-08-07-crt-emulation-on-lcds-can-be-hard}/index.md (94%) rename archive/threads/NOTimothyLottes/{2023-08-18-the-subpix-version-is-definitely-better-because => 2023-08-18-spc-crt-shader-on-the-deck}/index.md (100%) rename archive/threads/NOTimothyLottes/{2023-08-18-spc-last-crt-shader-was-broken-corrected-it-its => 2023-08-18-spc-last-crt-shader-was-broken}/2023-08-18-Karyuutensei-how-many-passes-do-you-need-to-produce-this-result.md (96%) rename archive/threads/NOTimothyLottes/{2023-08-18-spc-last-crt-shader-was-broken-corrected-it-its => 2023-08-18-spc-last-crt-shader-was-broken}/index.md (93%) rename archive/threads/NOTimothyLottes/{2023-12-16-if-there-is-anything-to-learn-for-programming-it => 2023-12-16-inspecting-my-old-vk-engines}/2023-12-17-AgileJebrim-yep-put-the-whole-game-logic-in-a-game-glsl.md (91%) rename archive/threads/NOTimothyLottes/{2023-12-16-if-there-is-anything-to-learn-for-programming-it => 2023-12-16-inspecting-my-old-vk-engines}/2023-12-17-SheriefFYI-two-point-six-seconds-d3d12createdevice-on-my.md (92%) rename archive/threads/NOTimothyLottes/{2023-12-16-if-there-is-anything-to-learn-for-programming-it => 2023-12-16-inspecting-my-old-vk-engines}/2025-08-08-VPCOMPRESSB-so-youre-preallocating-every-type-of-descriptor.md (96%) rename archive/threads/NOTimothyLottes/{2023-12-16-if-there-is-anything-to-learn-for-programming-it => 2023-12-16-inspecting-my-old-vk-engines}/index.md (87%) rename archive/threads/NOTimothyLottes/{2023-12-19-multi-session-is-nice-since-the-binary-auto => 2023-12-19-working-towards-a-public-domain-release-of-a}/index.md (100%) rename archive/threads/NOTimothyLottes/{2024-11-19-after-vk-device-is-open-i-signal-a-background => 2024-11-19-working-towards-a-new-bring-up-of-front-buffering}/index.md (100%) rename archive/threads/NOTimothyLottes/{2024-11-21-32-oh-damn-32-should-probably-stop-now-until-next => 2024-11-20-0-been-wanting-to-do-this-for-a-long-time-a}/2024-11-20-AgileJebrim-how-reliable-in-your-experience-in-code-like-that.md (95%) rename archive/threads/NOTimothyLottes/{2024-11-21-32-oh-damn-32-should-probably-stop-now-until-next => 2024-11-20-0-been-wanting-to-do-this-for-a-long-time-a}/index.md (98%) rename archive/threads/NOTimothyLottes/{2024-12-16-then-there-are-rough-edges-to-texel-buffer => 2024-12-15-buffer-zoo-is-more-about-the-silly-season-of}/2024-12-16-axelgneiting-im-well-aware-its-really-curious-they-still-stick.md (88%) rename archive/threads/NOTimothyLottes/{2024-12-16-then-there-are-rough-edges-to-texel-buffer => 2024-12-15-buffer-zoo-is-more-about-the-silly-season-of}/index.md (92%) rename archive/threads/NOTimothyLottes/{2024-12-15-texel-buffer-is-needed-for-whatever-formats-one => 2024-12-15-the-real-buffer-zoo-problem-with-vulkan-is}/index.md (100%) rename archive/threads/NOTimothyLottes/{2024-12-21-not-sure-if-this-is-the-end-of-this-story-yet-but => 2024-12-21-hopefully-with-this-last-atomic-workaround-im}/2024-12-21-AgileJebrim-have-you-tried-using-the-intel-cache-controls.md (92%) rename archive/threads/NOTimothyLottes/{2024-12-21-not-sure-if-this-is-the-end-of-this-story-yet-but => 2024-12-21-hopefully-with-this-last-atomic-workaround-im}/index.md (96%) rename archive/threads/NOTimothyLottes/{2025-07-23-i-dont-use-standard-c-libs-or-anything-like-that => 2025-07-23-nobody-self-includes-with-defines-to-reorder-c}/2025-07-23-Karyuutensei-where-does-the-restart-number-come-from-i-assume.md (93%) rename archive/threads/NOTimothyLottes/{2025-07-23-i-dont-use-standard-c-libs-or-anything-like-that => 2025-07-23-nobody-self-includes-with-defines-to-reorder-c}/index.md (100%) delete mode 100644 archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/index.md rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-0x44_-assembly-isnt-hard-its-just-platform-specific.md (95%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-2Sexy4MyGPU-it-was-never-hard-just-tedious.md (94%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-CUDAHandbook-i-have-been-writing-assembly-for-almost-40-years.md (97%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-Karyuutensei-unrelated-but-i-would-also-love-a-look-at-your.md (96%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-NickDrisc0ll-im-sure-it-would-be-invaluable.md (94%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-PunteroCrudo-i-would-and-i-think-more-people-would-be.md (95%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-SquaredApe-given-ive-only-done-asm-on-amiga-with-devpac-i.md (97%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-Stererence-ive-been-doing-assembly-a-bit-in-d-with-the.md (97%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-VicThorDev6-a-lot-of-people-who-claim-assembly-is-hard-just.md (96%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-_naf_90-im-learning-assembly-in-my-spare-time.md (95%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-biovf-i-would-definitely-watch-that.md (94%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-cyberbemon-id-love-to-watch-that.md (94%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-furan-there-are-a-lot-of-watch-me-write-this-app-in.md (95%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-furan-would-watch-though.md (94%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-konigssohne-if-youre-got-a-blank-canvas-go-for-it-interfacing.md (96%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-leonard_coder-im-still-doing-assembly-as-hobby-68k-assembly-x64.md (97%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-m6502-i-would-enjoy-watching-that.md (94%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-mmalex-i-agree-if-one-is-ok-with-bottom-up-thinking-99.md (96%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-mu_chrinovic-definitely-interested-in-anything-you-put-out.md (95%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-nullspector-i-would-so-love-that.md (94%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-o__boga-im-staying-maybe-for-vulkan-depending-on-how.md (95%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-opdroid1234-i-would.md (94%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-philthistweet-i-just-wish-the-win32-api-was-better-designed-it.md (97%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-plasmabitcoin-very-interested.md (94%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-pranksterware-thatd-rock.md (94%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-roasted6read-i-am-interested.md (94%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-ruben_cabaco-would-be-very-interested-in-it-also-on-your-forth.md (96%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-simplex_fx-is-it-already-aprils-fools-again.md (96%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-ssh4net-please.md (94%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-thecolemanthe-assembly-isnt-hard-its-tedious-no-abstractions.md (96%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-07-31-totalwert-thread.md (94%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-08-01-AnshumanKhanna5-im-gonna-start-pretending-i-understood-everything.md (95%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-08-01-AnshumanKhanna5-video-link-now.md (94%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-08-01-John31625320803-it-doesnt-really-matter-what-language-you-call.md (95%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-08-01-_vkaku-i-know-someone-whod-be-excited-opdroid1234.md (95%) rename archive/threads/NOTimothyLottes/{2025-07-31-people-claim-assembly-is-hard-a-good-counter-to => 2025-07-31-people-claim-assembly-is-hard}/2025-08-01-schulzb589-i-would-watch-that-so-count-me-in.md (94%) create mode 100644 archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/index.md rename archive/threads/NOTimothyLottes/{2026-01-14-can-do-that-but-at-least-these-kinds-of-systems => 2026-01-14-can-do-that}/index.md (93%) rename archive/threads/NOTimothyLottes/{2026-05-30-renovating-cpu-clock-code-im-assuming-x86-64-tsc => 2026-05-30-renovating-cpu-clock-code}/2026-05-31-FUZxxl-if-you-do-the-multiply-in-uint128-t-and-then.md (96%) rename archive/threads/NOTimothyLottes/{2026-05-30-renovating-cpu-clock-code-im-assuming-x86-64-tsc => 2026-05-30-renovating-cpu-clock-code}/index.md (93%) delete mode 100644 archive/threads/NOTimothyLottes/2026-05-31-hits-the-easy-to-debug-cpu-or-gpu-stuff-in-the/index.md rename archive/threads/NOTimothyLottes/{2026-06-10-steamos-init => 2026-06-10-so-im-on-linux-now-but-obviously-i-cheated}/2026-06-11-NOTimothyLottes-going-to-give-artix-lxqt-runit-variation-a-try.md (93%) rename archive/threads/NOTimothyLottes/{2026-06-10-steamos-init => 2026-06-10-so-im-on-linux-now-but-obviously-i-cheated}/2026-06-11-RouaniJihad-my-patience-is-this-thin-with-win11-right-now-but.md (91%) rename archive/threads/NOTimothyLottes/{2026-06-10-steamos-init => 2026-06-10-so-im-on-linux-now-but-obviously-i-cheated}/2026-06-11-mcnabbd-fascinating-to-me-how-this-challenge-would-have.md (92%) rename archive/threads/NOTimothyLottes/{2026-06-10-steamos-init => 2026-06-10-so-im-on-linux-now-but-obviously-i-cheated}/index.md (68%) rename archive/threads/NOTimothyLottes/{2026-06-13-cross-compilation-is-up-just-like-on-windows-with => 2026-06-13-cross-compilation-is-up}/2026-06-13-tomcr2100-interesting-font-does-it-have-a-name.md (94%) rename archive/threads/NOTimothyLottes/{2026-06-13-cross-compilation-is-up-just-like-on-windows-with => 2026-06-13-cross-compilation-is-up}/index.md (92%) rename archive/threads/NOTimothyLottes/{2026-06-13-the-glibc-implementation-would-do-that-i-bypass => 2026-06-13-the-glibc-implementation-would-do-that}/index.md (100%) rename archive/threads/NOTimothyLottes/{2026-06-30-working-on-the-linux-thread-priority-code-linux => 2026-06-30-working-on-the-linux-thread-priority-code}/index.md (100%) rename archive/threads/NOTimothyLottes/{2026-07-11-rethinking-vulkan-queue-choice-traditional-double => 2026-07-11-rethinking-vulkan-queue-choice}/2026-07-11-konrad_kubacki_-am-i-having-a-stroke-what-is-this-font-it-feels.md (95%) rename archive/threads/NOTimothyLottes/{2026-07-11-rethinking-vulkan-queue-choice-traditional-double => 2026-07-11-rethinking-vulkan-queue-choice}/index.md (94%) rename archive/threads/NOTimothyLottes/{2026-07-14-so-i-can-liter-error-checks-around-stuff-with => 2026-07-14-another-round-of-getting-optimized-error-checking}/index.md (100%) rename archive/threads/NOTimothyLottes/{2026-07-22-a-language-that-you-author-in-a-compressed-space => 2026-07-22-working-through-rough-draft-of-assembly-for-a}/index.md (100%) rename archive/threads/VPCOMPRESSB/{2025-11-20-no-tokens-and-no-asts-easier-because-its-forth => 2025-11-20-no-tokens-and-no-asts}/index.md (100%) create mode 100644 scripts/twitter/tests/test_reslug.py diff --git a/archive/threads/NOTimothyLottes/2022-11-05-19-GPU-Programming-Tip-Line-Thread/index.md b/archive/threads/NOTimothyLottes/2022-11-05-gpu-programming-tip-line-thread/index.md similarity index 100% rename from archive/threads/NOTimothyLottes/2022-11-05-19-GPU-Programming-Tip-Line-Thread/index.md rename to archive/threads/NOTimothyLottes/2022-11-05-gpu-programming-tip-line-thread/index.md diff --git a/archive/threads/NOTimothyLottes/2022-11-09-if-only-pc-vendors-with-open-isas-amd-intel-would/index.md b/archive/threads/NOTimothyLottes/2022-11-09-if-only-pc-vendors-with-open-isas/index.md similarity index 100% rename from archive/threads/NOTimothyLottes/2022-11-09-if-only-pc-vendors-with-open-isas-amd-intel-would/index.md rename to archive/threads/NOTimothyLottes/2022-11-09-if-only-pc-vendors-with-open-isas/index.md 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 deleted file mode 100644 index 0bc0b72..0000000 --- a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/index.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "\"Nothing Oriented Programming\" (NOP)." -type: archive -source: twitter -source_url: "https://x.com/NOTimothyLottes/status/1674757854471806977" -author: "NOTimothyLottes" -handle: NOTimothyLottes -post_id: "1674757854471806977" -date: 2023-06-30 -archived: 2026-08-23 -draft: false -tags: - - archive - - twitter - - NOTimothyLottes -description: "\"Nothing Oriented Programming\" (NOP)." -in_reply_to: "" ---- - -## Source - -- URL: https://x.com/NOTimothyLottes/status/1674757854471806977 -- Author: NOTimothyLottes (@NOTimothyLottes) -- Posted: 2023-06-30 12:32:42 - -## Thread - -**1/** - -"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://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-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/2023-06-30-SebAaltonen-would-be-nice-to-talk-a-full-presentation-about.md similarity index 97% rename from 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 rename to archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-06-30-SebAaltonen-would-be-nice-to-talk-a-full-presentation-about.md index e176bc3..cc885a7 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/2023-06-30-SebAaltonen-would-be-nice-to-talk-a-full-presentation-about.md @@ -39,4 +39,4 @@ I will save your image for that day (if I get approval to use it), since Twitter ![](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]] +- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop]] diff --git a/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.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-06-30-_spolsh-once-in-a-while-people-need-to-be-reminded-to.md similarity index 96% rename from 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.md rename to archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-06-30-_spolsh-once-in-a-while-people-need-to-be-reminded-to.md index 0e003fb..5bbc205 100644 --- a/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.md +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-06-30-_spolsh-once-in-a-while-people-need-to-be-reminded-to.md @@ -37,4 +37,4 @@ https://tonsky.me/blog/disenchantment/ ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal]] +- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop]] diff --git a/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.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-06-30-domipheus-i-like-this-given-i-never-write-code-any-more.md similarity index 95% rename from 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.md rename to archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-06-30-domipheus-i-like-this-given-i-never-write-code-any-more.md index 6bcf7bf..c7f41e7 100644 --- a/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.md +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-06-30-domipheus-i-like-this-given-i-never-write-code-any-more.md @@ -33,4 +33,4 @@ sadly i am still a grumpy git. ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal]] +- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop]] diff --git a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-06-30-leonard_coder-4e71-if-you-know-you-know.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-06-30-leonard_coder-4e71-if-you-know-you-know.md similarity index 94% rename from archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-06-30-leonard_coder-4e71-if-you-know-you-know.md rename to archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-06-30-leonard_coder-4e71-if-you-know-you-know.md index 106f2f7..d3d4c4c 100644 --- a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-06-30-leonard_coder-4e71-if-you-know-you-know.md +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-06-30-leonard_coder-4e71-if-you-know-you-know.md @@ -37,4 +37,4 @@ if you know, you know ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal]] +- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop]] diff --git a/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.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-CodingFiend-i-designed-a-language-beads-which-uses-a-graph-db.md similarity index 97% rename from 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.md rename to archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-CodingFiend-i-designed-a-language-beads-which-uses-a-graph-db.md index 49798fe..6c28f1e 100644 --- a/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.md +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-CodingFiend-i-designed-a-language-beads-which-uses-a-graph-db.md @@ -32,4 +32,4 @@ parent_post_id: "1674757854471806977" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal]] +- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop]] diff --git a/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.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-DefenceForceOrg-many-games-used-to-be-like-that-at-least-the-ones.md similarity index 96% rename from 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.md rename to archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-DefenceForceOrg-many-games-used-to-be-like-that-at-least-the-ones.md index 10554f8..2fbf184 100644 --- a/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.md +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-DefenceForceOrg-many-games-used-to-be-like-that-at-least-the-ones.md @@ -34,4 +34,4 @@ Most of the stuff I worked on on PSX and Dreamcast basically just loads big file ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal]] +- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop]] diff --git a/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.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-PierreTerdiman-i-was-calling-it-disoriented-programming-just-the.md similarity index 95% rename from 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.md rename to archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-PierreTerdiman-i-was-calling-it-disoriented-programming-just-the.md index 923c150..b41c2d0 100644 --- a/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.md +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-PierreTerdiman-i-was-calling-it-disoriented-programming-just-the.md @@ -34,4 +34,4 @@ https://x.com/PierreTerdiman/status/1673389650172321813?s=20 ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal]] +- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop]] diff --git a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-SimonNordon-nop-is-ideal.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-SimonNordon-nop-is-ideal.md similarity index 94% rename from archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-SimonNordon-nop-is-ideal.md rename to archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-SimonNordon-nop-is-ideal.md index 5ea107b..8311617 100644 --- a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-SimonNordon-nop-is-ideal.md +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-SimonNordon-nop-is-ideal.md @@ -32,4 +32,4 @@ parent_post_id: "1674757854471806977" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal]] +- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop]] diff --git a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-TimSweeneyEpic-can-teach-it-in-abstinence-only-programming.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-TimSweeneyEpic-can-teach-it-in-abstinence-only-programming.md similarity index 95% rename from archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-TimSweeneyEpic-can-teach-it-in-abstinence-only-programming.md rename to archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-TimSweeneyEpic-can-teach-it-in-abstinence-only-programming.md index 6e4c466..f73f26e 100644 --- a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-TimSweeneyEpic-can-teach-it-in-abstinence-only-programming.md +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-TimSweeneyEpic-can-teach-it-in-abstinence-only-programming.md @@ -32,4 +32,4 @@ parent_post_id: "1674757854471806977" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal]] +- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop]] 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/2023-07-01-asparagiii-looks-like-a-koala.md similarity index 94% rename from archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-asparagiii-looks-like-a-koala.md rename to archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-asparagiii-looks-like-a-koala.md index be76dc8..c621561 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/2023-07-01-asparagiii-looks-like-a-koala.md @@ -33,4 +33,4 @@ parent_post_id: "1674757854471806977" ![](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]] +- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop]] diff --git a/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.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-azeke1984-best-software-is-absense-of-it-https-en-wikipedia.md similarity index 95% rename from 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.md rename to archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-azeke1984-best-software-is-absense-of-it-https-en-wikipedia.md index 4e93ca0..b9feb6d 100644 --- a/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.md +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-azeke1984-best-software-is-absense-of-it-https-en-wikipedia.md @@ -34,4 +34,4 @@ https://en.wikipedia.org/wiki/The_Mythical_Man-Month ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal]] +- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop]] diff --git a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-claudiogonzalo-c-to-c.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-claudiogonzalo-c-to-c.md similarity index 94% rename from archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-claudiogonzalo-c-to-c.md rename to archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-claudiogonzalo-c-to-c.md index 1f2895b..11ea23b 100644 --- a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-claudiogonzalo-c-to-c.md +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-claudiogonzalo-c-to-c.md @@ -32,4 +32,4 @@ parent_post_id: "1674757854471806977" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal]] +- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop]] diff --git a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-helpful_signage-folks-theyre-calling-it-computer-oriented.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-helpful_signage-folks-theyre-calling-it-computer-oriented.md similarity index 95% rename from archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-helpful_signage-folks-theyre-calling-it-computer-oriented.md rename to archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-helpful_signage-folks-theyre-calling-it-computer-oriented.md index 3b0fc3f..8de7b96 100644 --- a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-helpful_signage-folks-theyre-calling-it-computer-oriented.md +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-helpful_signage-folks-theyre-calling-it-computer-oriented.md @@ -32,4 +32,4 @@ parent_post_id: "1674757854471806977" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal]] +- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop]] 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/2023-07-01-mike_acton-thread.md similarity index 94% rename from archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-01-mike_acton-thread.md rename to archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-mike_acton-thread.md index 78a9d91..0c486d2 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/2023-07-01-mike_acton-thread.md @@ -33,4 +33,4 @@ parent_post_id: "1674757854471806977" ![](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]] +- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop]] diff --git a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-09-wyattscarpenter-https-github-com-wyattscarpenter-wu.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-09-wyattscarpenter-https-github-com-wyattscarpenter-wu.md similarity index 95% rename from archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-09-wyattscarpenter-https-github-com-wyattscarpenter-wu.md rename to archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-09-wyattscarpenter-https-github-com-wyattscarpenter-wu.md index c709b57..0637fc8 100644 --- a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal/2023-07-09-wyattscarpenter-https-github-com-wyattscarpenter-wu.md +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-09-wyattscarpenter-https-github-com-wyattscarpenter-wu.md @@ -32,4 +32,4 @@ parent_post_id: "1674757854471806977" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal]] +- Spine: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop]] diff --git a/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/index.md b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/index.md new file mode 100644 index 0000000..c7cf086 --- /dev/null +++ b/archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/index.md @@ -0,0 +1,33 @@ +--- +title: "\"Nothing Oriented Programming\" (NOP)." +type: archive +source: twitter +source_url: "https://x.com/NOTimothyLottes/status/1674757854471806977" +author: "NOTimothyLottes" +handle: NOTimothyLottes +post_id: "1674757854471806977" +date: 2023-06-30 +archived: 2026-08-23 +draft: false +tags: + - archive + - twitter + - NOTimothyLottes +description: "\"Nothing Oriented Programming\" (NOP)." +in_reply_to: "" +--- + +## Source + +- URL: https://x.com/NOTimothyLottes/status/1674757854471806977 +- Author: NOTimothyLottes (@NOTimothyLottes) +- Posted: 2023-06-30 12:32:42 + +## Thread + +**1/** + +"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://pbs.twimg.com/media/Fz3vY5fXwAgEpzn?format=jpg&name=orig) +Branches: [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-06-30-SebAaltonen-would-be-nice-to-talk-a-full-presentation-about]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-06-30-leonard_coder-4e71-if-you-know-you-know]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-06-30-domipheus-i-like-this-given-i-never-write-code-any-more]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-06-30-_spolsh-once-in-a-while-people-need-to-be-reminded-to]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-mike_acton-thread]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-SimonNordon-nop-is-ideal]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-azeke1984-best-software-is-absense-of-it-https-en-wikipedia]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-helpful_signage-folks-theyre-calling-it-computer-oriented]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-claudiogonzalo-c-to-c]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/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/2023-07-01-PierreTerdiman-i-was-calling-it-disoriented-programming-just-the]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-asparagiii-looks-like-a-koala]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-CodingFiend-i-designed-a-language-beads-which-uses-a-graph-db]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-01-TimSweeneyEpic-can-teach-it-in-abstinence-only-programming]], [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop/2023-07-09-wyattscarpenter-https-github-com-wyattscarpenter-wu]] 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-03-spc-left-off-with-key-and-gamepad-input-gpu/index.md similarity index 100% rename from archive/threads/NOTimothyLottes/2023-08-04-for-anyone-tuning-in-now-spc-is-kind-of-like-a/index.md rename to archive/threads/NOTimothyLottes/2023-08-03-spc-left-off-with-key-and-gamepad-input-gpu/index.md diff --git a/archive/threads/NOTimothyLottes/2023-08-06-the-next-challenge-is-overscan-safety-since-real/index.md b/archive/threads/NOTimothyLottes/2023-08-06-1st-spc-project-to-be-based-on-vintage-640x480/index.md similarity index 100% rename from archive/threads/NOTimothyLottes/2023-08-06-the-next-challenge-is-overscan-safety-since-real/index.md rename to archive/threads/NOTimothyLottes/2023-08-06-1st-spc-project-to-be-based-on-vintage-640x480/index.md 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-spc-rdna2-assembler-thread/index.md similarity index 100% rename from archive/threads/NOTimothyLottes/2023-08-06-yeah-perhaps-wildly-alien-but-for-those-who-grew/index.md rename to archive/threads/NOTimothyLottes/2023-08-06-spc-rdna2-assembler-thread/index.md 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/2023-08-10-BlurBusters-very-interesting-crosstalk-from-voltage-inversion.md similarity index 98% rename from 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 rename to archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard/2023-08-10-BlurBusters-very-interesting-crosstalk-from-voltage-inversion.md index 6a07d8c..d2785d3 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/2023-08-10-BlurBusters-very-interesting-crosstalk-from-voltage-inversion.md @@ -58,4 +58,4 @@ http://www.techmind.org/lcd/#:~:text=Inversion ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard-for-example-its]] +- Spine: [[archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard]] 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/index.md similarity index 94% rename from archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard-for-example-its/index.md rename to archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard/index.md index 1cdce2a..85598fa 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/index.md @@ -32,7 +32,7 @@ CRT emulation on LCDs can be hard. For example it's often easy to generate a pat ![](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]] +Branches: [[archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard/2023-08-10-BlurBusters-very-interesting-crosstalk-from-voltage-inversion]] **2/** 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-spc-crt-shader-on-the-deck/index.md similarity index 100% rename from archive/threads/NOTimothyLottes/2023-08-18-the-subpix-version-is-definitely-better-because/index.md rename to archive/threads/NOTimothyLottes/2023-08-18-spc-crt-shader-on-the-deck/index.md diff --git a/archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken-corrected-it-its/2023-08-18-Karyuutensei-how-many-passes-do-you-need-to-produce-this-result.md b/archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken/2023-08-18-Karyuutensei-how-many-passes-do-you-need-to-produce-this-result.md similarity index 96% rename from archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken-corrected-it-its/2023-08-18-Karyuutensei-how-many-passes-do-you-need-to-produce-this-result.md rename to archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken/2023-08-18-Karyuutensei-how-many-passes-do-you-need-to-produce-this-result.md index 96fa3c2..2bd718f 100644 --- a/archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken-corrected-it-its/2023-08-18-Karyuutensei-how-many-passes-do-you-need-to-produce-this-result.md +++ b/archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken/2023-08-18-Karyuutensei-how-many-passes-do-you-need-to-produce-this-result.md @@ -36,4 +36,4 @@ parent_post_id: "1692397318471926054" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken-corrected-it-its]] +- Spine: [[archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken]] 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/index.md similarity index 93% rename from archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken-corrected-it-its/index.md rename to archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken/index.md index b7d0e31..7d4be21 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/index.md @@ -41,7 +41,7 @@ Each scan line is simulated with only 3 pixels. But you get 9 sub-pixels to play The scan line thickness is adaptive proportional to linear brightness. When the scan thins out it is energy conserving and increases the thin pixel brightness to compensate. When it needs to go bright, it blooms the line. Lines have some overlap in bloom. -Branches: [[archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken-corrected-it-its/2023-08-18-Karyuutensei-how-many-passes-do-you-need-to-produce-this-result]] +Branches: [[archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken/2023-08-18-Karyuutensei-how-many-passes-do-you-need-to-produce-this-result]] **4/** diff --git a/archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/2023-12-17-AgileJebrim-yep-put-the-whole-game-logic-in-a-game-glsl.md b/archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines/2023-12-17-AgileJebrim-yep-put-the-whole-game-logic-in-a-game-glsl.md similarity index 91% rename from archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/2023-12-17-AgileJebrim-yep-put-the-whole-game-logic-in-a-game-glsl.md rename to archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines/2023-12-17-AgileJebrim-yep-put-the-whole-game-logic-in-a-game-glsl.md index ef6aa8b..e75ef93 100644 --- a/archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/2023-12-17-AgileJebrim-yep-put-the-whole-game-logic-in-a-game-glsl.md +++ b/archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines/2023-12-17-AgileJebrim-yep-put-the-whole-game-logic-in-a-game-glsl.md @@ -36,4 +36,4 @@ If doing a large open world game, set up a paging system to stream data to the G ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it]] +- Spine: [[archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines]] diff --git a/archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/2023-12-17-SheriefFYI-two-point-six-seconds-d3d12createdevice-on-my.md b/archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines/2023-12-17-SheriefFYI-two-point-six-seconds-d3d12createdevice-on-my.md similarity index 92% rename from archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/2023-12-17-SheriefFYI-two-point-six-seconds-d3d12createdevice-on-my.md rename to archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines/2023-12-17-SheriefFYI-two-point-six-seconds-d3d12createdevice-on-my.md index f563244..2e246bc 100644 --- a/archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/2023-12-17-SheriefFYI-two-point-six-seconds-d3d12createdevice-on-my.md +++ b/archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines/2023-12-17-SheriefFYI-two-point-six-seconds-d3d12createdevice-on-my.md @@ -50,4 +50,4 @@ parent_post_id: "1736147815829565624" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it]] +- Spine: [[archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines]] diff --git a/archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/2025-08-08-VPCOMPRESSB-so-youre-preallocating-every-type-of-descriptor.md b/archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines/2025-08-08-VPCOMPRESSB-so-youre-preallocating-every-type-of-descriptor.md similarity index 96% rename from archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/2025-08-08-VPCOMPRESSB-so-youre-preallocating-every-type-of-descriptor.md rename to archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines/2025-08-08-VPCOMPRESSB-so-youre-preallocating-every-type-of-descriptor.md index abb9aaa..90a4378 100644 --- a/archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/2025-08-08-VPCOMPRESSB-so-youre-preallocating-every-type-of-descriptor.md +++ b/archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines/2025-08-08-VPCOMPRESSB-so-youre-preallocating-every-type-of-descriptor.md @@ -74,4 +74,4 @@ aliasing supports this even further, with explicit intentions for resources. ## Related -- Spine: [[archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it]] +- Spine: [[archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines]] 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-inspecting-my-old-vk-engines/index.md similarity index 87% rename from archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/index.md rename to archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines/index.md index 027a543..15ecc7b 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-inspecting-my-old-vk-engines/index.md @@ -31,7 +31,7 @@ Inspecting my old VK engines. On start I would warm all the pages. Code pages ge ![](https://pbs.twimg.com/media/GBgHT_2WIAAKuNq?format=png&name=orig) -Branches: [[archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/2023-12-17-SheriefFYI-two-point-six-seconds-d3d12createdevice-on-my]] +Branches: [[archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines/2023-12-17-SheriefFYI-two-point-six-seconds-d3d12createdevice-on-my]] **2/** @@ -57,7 +57,7 @@ I'm a fan of single file applications. So when not in DEV mode the one SPIR-V fi ![](https://pbs.twimg.com/media/GBgPDhAWUAAzhEi?format=png&name=orig) -Branches: [[archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/2025-08-08-VPCOMPRESSB-so-youre-preallocating-every-type-of-descriptor]] +Branches: [[archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines/2025-08-08-VPCOMPRESSB-so-youre-preallocating-every-type-of-descriptor]] **6/** @@ -71,7 +71,7 @@ Literally the CPU does almost nothing. All game input gets pushed to the GPU for ![](https://pbs.twimg.com/media/GBgRu3wXoAAp_K7?format=png&name=orig) -Branches: [[archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it/2023-12-17-AgileJebrim-yep-put-the-whole-game-logic-in-a-game-glsl]] +Branches: [[archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines/2023-12-17-AgileJebrim-yep-put-the-whole-game-logic-in-a-game-glsl]] **8/** diff --git a/archive/threads/NOTimothyLottes/2023-12-19-multi-session-is-nice-since-the-binary-auto/index.md b/archive/threads/NOTimothyLottes/2023-12-19-working-towards-a-public-domain-release-of-a/index.md similarity index 100% rename from archive/threads/NOTimothyLottes/2023-12-19-multi-session-is-nice-since-the-binary-auto/index.md rename to archive/threads/NOTimothyLottes/2023-12-19-working-towards-a-public-domain-release-of-a/index.md diff --git a/archive/threads/NOTimothyLottes/2024-11-19-after-vk-device-is-open-i-signal-a-background/index.md b/archive/threads/NOTimothyLottes/2024-11-19-working-towards-a-new-bring-up-of-front-buffering/index.md similarity index 100% rename from archive/threads/NOTimothyLottes/2024-11-19-after-vk-device-is-open-i-signal-a-background/index.md rename to archive/threads/NOTimothyLottes/2024-11-19-working-towards-a-new-bring-up-of-front-buffering/index.md diff --git a/archive/threads/NOTimothyLottes/2024-11-21-32-oh-damn-32-should-probably-stop-now-until-next/2024-11-20-AgileJebrim-how-reliable-in-your-experience-in-code-like-that.md b/archive/threads/NOTimothyLottes/2024-11-20-0-been-wanting-to-do-this-for-a-long-time-a/2024-11-20-AgileJebrim-how-reliable-in-your-experience-in-code-like-that.md similarity index 95% rename from archive/threads/NOTimothyLottes/2024-11-21-32-oh-damn-32-should-probably-stop-now-until-next/2024-11-20-AgileJebrim-how-reliable-in-your-experience-in-code-like-that.md rename to archive/threads/NOTimothyLottes/2024-11-20-0-been-wanting-to-do-this-for-a-long-time-a/2024-11-20-AgileJebrim-how-reliable-in-your-experience-in-code-like-that.md index f10c7bf..b39e2a0 100644 --- a/archive/threads/NOTimothyLottes/2024-11-21-32-oh-damn-32-should-probably-stop-now-until-next/2024-11-20-AgileJebrim-how-reliable-in-your-experience-in-code-like-that.md +++ b/archive/threads/NOTimothyLottes/2024-11-20-0-been-wanting-to-do-this-for-a-long-time-a/2024-11-20-AgileJebrim-how-reliable-in-your-experience-in-code-like-that.md @@ -60,4 +60,4 @@ parent_post_id: "1859369992355021246" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2024-11-21-32-oh-damn-32-should-probably-stop-now-until-next]] +- Spine: [[archive/threads/NOTimothyLottes/2024-11-20-0-been-wanting-to-do-this-for-a-long-time-a]] diff --git a/archive/threads/NOTimothyLottes/2024-11-21-32-oh-damn-32-should-probably-stop-now-until-next/index.md b/archive/threads/NOTimothyLottes/2024-11-20-0-been-wanting-to-do-this-for-a-long-time-a/index.md similarity index 98% rename from archive/threads/NOTimothyLottes/2024-11-21-32-oh-damn-32-should-probably-stop-now-until-next/index.md rename to archive/threads/NOTimothyLottes/2024-11-20-0-been-wanting-to-do-this-for-a-long-time-a/index.md index 9c6e6cf..66599d6 100644 --- a/archive/threads/NOTimothyLottes/2024-11-21-32-oh-damn-32-should-probably-stop-now-until-next/index.md +++ b/archive/threads/NOTimothyLottes/2024-11-20-0-been-wanting-to-do-this-for-a-long-time-a/index.md @@ -35,7 +35,7 @@ in_reply_to: "" ![](https://pbs.twimg.com/media/Gc3OqZkWsAAeP9s?format=png&name=orig) -Branches: [[archive/threads/NOTimothyLottes/2024-11-21-32-oh-damn-32-should-probably-stop-now-until-next/2024-11-20-AgileJebrim-how-reliable-in-your-experience-in-code-like-that]] +Branches: [[archive/threads/NOTimothyLottes/2024-11-20-0-been-wanting-to-do-this-for-a-long-time-a/2024-11-20-AgileJebrim-how-reliable-in-your-experience-in-code-like-that]] **3/** diff --git a/archive/threads/NOTimothyLottes/2024-12-16-then-there-are-rough-edges-to-texel-buffer/2024-12-16-axelgneiting-im-well-aware-its-really-curious-they-still-stick.md b/archive/threads/NOTimothyLottes/2024-12-15-buffer-zoo-is-more-about-the-silly-season-of/2024-12-16-axelgneiting-im-well-aware-its-really-curious-they-still-stick.md similarity index 88% rename from archive/threads/NOTimothyLottes/2024-12-16-then-there-are-rough-edges-to-texel-buffer/2024-12-16-axelgneiting-im-well-aware-its-really-curious-they-still-stick.md rename to archive/threads/NOTimothyLottes/2024-12-15-buffer-zoo-is-more-about-the-silly-season-of/2024-12-16-axelgneiting-im-well-aware-its-really-curious-they-still-stick.md index 94e8955..6cb5160 100644 --- a/archive/threads/NOTimothyLottes/2024-12-16-then-there-are-rough-edges-to-texel-buffer/2024-12-16-axelgneiting-im-well-aware-its-really-curious-they-still-stick.md +++ b/archive/threads/NOTimothyLottes/2024-12-15-buffer-zoo-is-more-about-the-silly-season-of/2024-12-16-axelgneiting-im-well-aware-its-really-curious-they-still-stick.md @@ -32,4 +32,4 @@ parent_post_id: "1868492851170205803" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2024-12-16-then-there-are-rough-edges-to-texel-buffer]] +- Spine: [[archive/threads/NOTimothyLottes/2024-12-15-buffer-zoo-is-more-about-the-silly-season-of]] diff --git a/archive/threads/NOTimothyLottes/2024-12-16-then-there-are-rough-edges-to-texel-buffer/index.md b/archive/threads/NOTimothyLottes/2024-12-15-buffer-zoo-is-more-about-the-silly-season-of/index.md similarity index 92% rename from archive/threads/NOTimothyLottes/2024-12-16-then-there-are-rough-edges-to-texel-buffer/index.md rename to archive/threads/NOTimothyLottes/2024-12-15-buffer-zoo-is-more-about-the-silly-season-of/index.md index fea9d33..86b0880 100644 --- a/archive/threads/NOTimothyLottes/2024-12-16-then-there-are-rough-edges-to-texel-buffer/index.md +++ b/archive/threads/NOTimothyLottes/2024-12-15-buffer-zoo-is-more-about-the-silly-season-of/index.md @@ -59,4 +59,4 @@ sRGB -> yes NV, no AMD And a big one: NV limits to 128 M elements {512 MiB,1GiB,2GiB} buffer size limits for {32,64,128}-bits respectively -Branches: [[archive/threads/NOTimothyLottes/2024-12-16-then-there-are-rough-edges-to-texel-buffer/2024-12-16-axelgneiting-im-well-aware-its-really-curious-they-still-stick]] +Branches: [[archive/threads/NOTimothyLottes/2024-12-15-buffer-zoo-is-more-about-the-silly-season-of/2024-12-16-axelgneiting-im-well-aware-its-really-curious-they-still-stick]] diff --git a/archive/threads/NOTimothyLottes/2024-12-15-texel-buffer-is-needed-for-whatever-formats-one/index.md b/archive/threads/NOTimothyLottes/2024-12-15-the-real-buffer-zoo-problem-with-vulkan-is/index.md similarity index 100% rename from archive/threads/NOTimothyLottes/2024-12-15-texel-buffer-is-needed-for-whatever-formats-one/index.md rename to archive/threads/NOTimothyLottes/2024-12-15-the-real-buffer-zoo-problem-with-vulkan-is/index.md diff --git a/archive/threads/NOTimothyLottes/2024-12-21-not-sure-if-this-is-the-end-of-this-story-yet-but/2024-12-21-AgileJebrim-have-you-tried-using-the-intel-cache-controls.md b/archive/threads/NOTimothyLottes/2024-12-21-hopefully-with-this-last-atomic-workaround-im/2024-12-21-AgileJebrim-have-you-tried-using-the-intel-cache-controls.md similarity index 92% rename from archive/threads/NOTimothyLottes/2024-12-21-not-sure-if-this-is-the-end-of-this-story-yet-but/2024-12-21-AgileJebrim-have-you-tried-using-the-intel-cache-controls.md rename to archive/threads/NOTimothyLottes/2024-12-21-hopefully-with-this-last-atomic-workaround-im/2024-12-21-AgileJebrim-have-you-tried-using-the-intel-cache-controls.md index 53a9d67..6567dd9 100644 --- a/archive/threads/NOTimothyLottes/2024-12-21-not-sure-if-this-is-the-end-of-this-story-yet-but/2024-12-21-AgileJebrim-have-you-tried-using-the-intel-cache-controls.md +++ b/archive/threads/NOTimothyLottes/2024-12-21-hopefully-with-this-last-atomic-workaround-im/2024-12-21-AgileJebrim-have-you-tried-using-the-intel-cache-controls.md @@ -40,4 +40,4 @@ parent_post_id: "1870343645926224197" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2024-12-21-not-sure-if-this-is-the-end-of-this-story-yet-but]] +- Spine: [[archive/threads/NOTimothyLottes/2024-12-21-hopefully-with-this-last-atomic-workaround-im]] diff --git a/archive/threads/NOTimothyLottes/2024-12-21-not-sure-if-this-is-the-end-of-this-story-yet-but/index.md b/archive/threads/NOTimothyLottes/2024-12-21-hopefully-with-this-last-atomic-workaround-im/index.md similarity index 96% rename from archive/threads/NOTimothyLottes/2024-12-21-not-sure-if-this-is-the-end-of-this-story-yet-but/index.md rename to archive/threads/NOTimothyLottes/2024-12-21-hopefully-with-this-last-atomic-workaround-im/index.md index 86572cd..cbf3d9f 100644 --- a/archive/threads/NOTimothyLottes/2024-12-21-not-sure-if-this-is-the-end-of-this-story-yet-but/index.md +++ b/archive/threads/NOTimothyLottes/2024-12-21-hopefully-with-this-last-atomic-workaround-im/index.md @@ -44,7 +44,7 @@ A ... coherent (atomics) E ... streaming readonly (aka [E]xclusive) F ... streaming writeonly (aka [F]inal) -Branches: [[archive/threads/NOTimothyLottes/2024-12-21-not-sure-if-this-is-the-end-of-this-story-yet-but/2024-12-21-AgileJebrim-have-you-tried-using-the-intel-cache-controls]] +Branches: [[archive/threads/NOTimothyLottes/2024-12-21-hopefully-with-this-last-atomic-workaround-im/2024-12-21-AgileJebrim-have-you-tried-using-the-intel-cache-controls]] **4/** diff --git a/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.md b/archive/threads/NOTimothyLottes/2025-07-23-nobody-self-includes-with-defines-to-reorder-c/2025-07-23-Karyuutensei-where-does-the-restart-number-come-from-i-assume.md similarity index 93% rename from 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.md rename to archive/threads/NOTimothyLottes/2025-07-23-nobody-self-includes-with-defines-to-reorder-c/2025-07-23-Karyuutensei-where-does-the-restart-number-come-from-i-assume.md index 96c0acd..aac97bd 100644 --- a/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.md +++ b/archive/threads/NOTimothyLottes/2025-07-23-nobody-self-includes-with-defines-to-reorder-c/2025-07-23-Karyuutensei-where-does-the-restart-number-come-from-i-assume.md @@ -40,4 +40,4 @@ parent_post_id: "1948009807161721332" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-23-i-dont-use-standard-c-libs-or-anything-like-that]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-23-nobody-self-includes-with-defines-to-reorder-c]] 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-nobody-self-includes-with-defines-to-reorder-c/index.md similarity index 100% rename from archive/threads/NOTimothyLottes/2025-07-23-i-dont-use-standard-c-libs-or-anything-like-that/index.md rename to archive/threads/NOTimothyLottes/2025-07-23-nobody-self-includes-with-defines-to-reorder-c/index.md diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/index.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/index.md deleted file mode 100644 index a18e412..0000000 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/index.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: "People claim assembly is hard." -type: archive -source: twitter -source_url: "https://x.com/NOTimothyLottes/status/1950860870818439202" -author: "NOTimothyLottes" -handle: NOTimothyLottes -post_id: "1950860870818439202" -date: 2025-07-31 -archived: 2026-08-24 -draft: false -tags: - - archive - - twitter - - NOTimothyLottes -description: "People claim assembly is hard." -in_reply_to: "" ---- - -## Source - -- URL: https://x.com/NOTimothyLottes/status/1950860870818439202 -- Author: NOTimothyLottes (@NOTimothyLottes) -- Posted: 2025-07-31 10:07:31 - -## Thread - -**1/** - -People claim assembly is hard. A good counter to that would be showing how to build a x86-64 WIN32 Vulkan based engine from scratch in ASM. Not sure how many people would find that worth watching though. - -Branches: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-biovf-i-would-definitely-watch-that]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-mu_chrinovic-definitely-interested-in-anything-you-put-out]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-nullspector-i-would-so-love-that]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-ssh4net-please]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-pranksterware-thatd-rock]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-mmalex-i-agree-if-one-is-ok-with-bottom-up-thinking-99]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-leonard_coder-im-still-doing-assembly-as-hobby-68k-assembly-x64]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-ruben_cabaco-would-be-very-interested-in-it-also-on-your-forth]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-NickDrisc0ll-im-sure-it-would-be-invaluable]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-totalwert-thread]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-opdroid1234-i-would]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-Karyuutensei-unrelated-but-i-would-also-love-a-look-at-your]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-m6502-i-would-enjoy-watching-that]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-roasted6read-i-am-interested]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-SquaredApe-given-ive-only-done-asm-on-amiga-with-devpac-i]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-VicThorDev6-a-lot-of-people-who-claim-assembly-is-hard-just]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-PunteroCrudo-i-would-and-i-think-more-people-would-be]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-2Sexy4MyGPU-it-was-never-hard-just-tedious]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-o__boga-im-staying-maybe-for-vulkan-depending-on-how]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-cyberbemon-id-love-to-watch-that]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-_naf_90-im-learning-assembly-in-my-spare-time]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-furan-there-are-a-lot-of-watch-me-write-this-app-in]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-furan-would-watch-though]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-thecolemanthe-assembly-isnt-hard-its-tedious-no-abstractions]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-konigssohne-if-youre-got-a-blank-canvas-go-for-it-interfacing]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-plasmabitcoin-very-interested]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-Stererence-ive-been-doing-assembly-a-bit-in-d-with-the]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-simplex_fx-is-it-already-aprils-fools-again]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-CUDAHandbook-i-have-been-writing-assembly-for-almost-40-years]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-0x44_-assembly-isnt-hard-its-just-platform-specific]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-schulzb589-i-would-watch-that-so-count-me-in]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-AnshumanKhanna5-video-link-now]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-_vkaku-i-know-someone-whod-be-excited-opdroid1234]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-John31625320803-it-doesnt-really-matter-what-language-you-call]] - -**2/** - -If game logic is GPU side there is little point in NOT doing assembly, since the CPU side stuff would always be platform specific. - -**3/** - -ASM provides a good opportunity to show how to convert typical function argument gather into store multicast with linear prefetch for arguments to API calls. Effectively re-arch for cold cache efficiency. And other radically cool stuff that nobody does. - -**4/** - -Linux has been all down hill over the years. OSS was fantastic, easy portable Linux system call interface. Also it's easy to do direct X11 with just syscalls. Now with Wayland you are stuck with linking to a garbage library. So might as well do WIN32 for Linux and depend on Wine. - -Branches: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-philthistweet-i-just-wish-the-win32-api-was-better-designed-it]] - -**5/** - -So Valve standardizing on Proton saves a lot of trouble with porting across ABIs/etc, just do WIN32 as it's way easier to interface with than Wayland and whatever horrible userland audio interface Linux monkeys switch to this era. - -**6/** - -Few probably remember the old Unix before pthreads and ELF. It was better then. Much easier to use fork and shm to do platform audio than today. And that holds for all the vintage workstations (which I did implement back in the day) - -Branches: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-AnshumanKhanna5-im-gonna-start-pretending-i-understood-everything]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-0x44_-assembly-isnt-hard-its-just-platform-specific.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-0x44_-assembly-isnt-hard-its-just-platform-specific.md similarity index 95% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-0x44_-assembly-isnt-hard-its-just-platform-specific.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-0x44_-assembly-isnt-hard-its-just-platform-specific.md index 7ab9209..34be43c 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-0x44_-assembly-isnt-hard-its-just-platform-specific.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-0x44_-assembly-isnt-hard-its-just-platform-specific.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-2Sexy4MyGPU-it-was-never-hard-just-tedious.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-2Sexy4MyGPU-it-was-never-hard-just-tedious.md similarity index 94% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-2Sexy4MyGPU-it-was-never-hard-just-tedious.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-2Sexy4MyGPU-it-was-never-hard-just-tedious.md index a823fee..b866079 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-2Sexy4MyGPU-it-was-never-hard-just-tedious.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-2Sexy4MyGPU-it-was-never-hard-just-tedious.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-CUDAHandbook-i-have-been-writing-assembly-for-almost-40-years.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-CUDAHandbook-i-have-been-writing-assembly-for-almost-40-years.md similarity index 97% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-CUDAHandbook-i-have-been-writing-assembly-for-almost-40-years.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-CUDAHandbook-i-have-been-writing-assembly-for-almost-40-years.md index 766b0e2..b343ebe 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-CUDAHandbook-i-have-been-writing-assembly-for-almost-40-years.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-CUDAHandbook-i-have-been-writing-assembly-for-almost-40-years.md @@ -48,4 +48,4 @@ Live code with instant update, simple automatic version control, cross platform ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-Karyuutensei-unrelated-but-i-would-also-love-a-look-at-your.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-Karyuutensei-unrelated-but-i-would-also-love-a-look-at-your.md similarity index 96% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-Karyuutensei-unrelated-but-i-would-also-love-a-look-at-your.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-Karyuutensei-unrelated-but-i-would-also-love-a-look-at-your.md index 6d24f6b..56a391e 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-Karyuutensei-unrelated-but-i-would-also-love-a-look-at-your.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-Karyuutensei-unrelated-but-i-would-also-love-a-look-at-your.md @@ -36,4 +36,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-NickDrisc0ll-im-sure-it-would-be-invaluable.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-NickDrisc0ll-im-sure-it-would-be-invaluable.md similarity index 94% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-NickDrisc0ll-im-sure-it-would-be-invaluable.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-NickDrisc0ll-im-sure-it-would-be-invaluable.md index a624e06..f78f015 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-NickDrisc0ll-im-sure-it-would-be-invaluable.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-NickDrisc0ll-im-sure-it-would-be-invaluable.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-PunteroCrudo-i-would-and-i-think-more-people-would-be.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-PunteroCrudo-i-would-and-i-think-more-people-would-be.md similarity index 95% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-PunteroCrudo-i-would-and-i-think-more-people-would-be.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-PunteroCrudo-i-would-and-i-think-more-people-would-be.md index 098d255..73bf191 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-PunteroCrudo-i-would-and-i-think-more-people-would-be.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-PunteroCrudo-i-would-and-i-think-more-people-would-be.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-SquaredApe-given-ive-only-done-asm-on-amiga-with-devpac-i.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-SquaredApe-given-ive-only-done-asm-on-amiga-with-devpac-i.md similarity index 97% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-SquaredApe-given-ive-only-done-asm-on-amiga-with-devpac-i.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-SquaredApe-given-ive-only-done-asm-on-amiga-with-devpac-i.md index a9a24e6..39d1c18 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-SquaredApe-given-ive-only-done-asm-on-amiga-with-devpac-i.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-SquaredApe-given-ive-only-done-asm-on-amiga-with-devpac-i.md @@ -36,4 +36,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-Stererence-ive-been-doing-assembly-a-bit-in-d-with-the.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-Stererence-ive-been-doing-assembly-a-bit-in-d-with-the.md similarity index 97% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-Stererence-ive-been-doing-assembly-a-bit-in-d-with-the.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-Stererence-ive-been-doing-assembly-a-bit-in-d-with-the.md index 41ef612..487e25d 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-Stererence-ive-been-doing-assembly-a-bit-in-d-with-the.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-Stererence-ive-been-doing-assembly-a-bit-in-d-with-the.md @@ -36,4 +36,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-VicThorDev6-a-lot-of-people-who-claim-assembly-is-hard-just.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-VicThorDev6-a-lot-of-people-who-claim-assembly-is-hard-just.md similarity index 96% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-VicThorDev6-a-lot-of-people-who-claim-assembly-is-hard-just.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-VicThorDev6-a-lot-of-people-who-claim-assembly-is-hard-just.md index cb188c0..1f30867 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-VicThorDev6-a-lot-of-people-who-claim-assembly-is-hard-just.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-VicThorDev6-a-lot-of-people-who-claim-assembly-is-hard-just.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-_naf_90-im-learning-assembly-in-my-spare-time.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-_naf_90-im-learning-assembly-in-my-spare-time.md similarity index 95% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-_naf_90-im-learning-assembly-in-my-spare-time.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-_naf_90-im-learning-assembly-in-my-spare-time.md index bf3b946..8c408f8 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-_naf_90-im-learning-assembly-in-my-spare-time.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-_naf_90-im-learning-assembly-in-my-spare-time.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-biovf-i-would-definitely-watch-that.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-biovf-i-would-definitely-watch-that.md similarity index 94% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-biovf-i-would-definitely-watch-that.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-biovf-i-would-definitely-watch-that.md index 543f068..42c5609 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-biovf-i-would-definitely-watch-that.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-biovf-i-would-definitely-watch-that.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-cyberbemon-id-love-to-watch-that.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-cyberbemon-id-love-to-watch-that.md similarity index 94% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-cyberbemon-id-love-to-watch-that.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-cyberbemon-id-love-to-watch-that.md index 8e5dae9..9d7fa42 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-cyberbemon-id-love-to-watch-that.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-cyberbemon-id-love-to-watch-that.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-furan-there-are-a-lot-of-watch-me-write-this-app-in.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-furan-there-are-a-lot-of-watch-me-write-this-app-in.md similarity index 95% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-furan-there-are-a-lot-of-watch-me-write-this-app-in.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-furan-there-are-a-lot-of-watch-me-write-this-app-in.md index b1ba4a4..39d3b46 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-furan-there-are-a-lot-of-watch-me-write-this-app-in.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-furan-there-are-a-lot-of-watch-me-write-this-app-in.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-furan-would-watch-though.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-furan-would-watch-though.md similarity index 94% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-furan-would-watch-though.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-furan-would-watch-though.md index 8f3c934..6784b12 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-furan-would-watch-though.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-furan-would-watch-though.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-konigssohne-if-youre-got-a-blank-canvas-go-for-it-interfacing.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-konigssohne-if-youre-got-a-blank-canvas-go-for-it-interfacing.md similarity index 96% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-konigssohne-if-youre-got-a-blank-canvas-go-for-it-interfacing.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-konigssohne-if-youre-got-a-blank-canvas-go-for-it-interfacing.md index 1b43185..e53f7f9 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-konigssohne-if-youre-got-a-blank-canvas-go-for-it-interfacing.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-konigssohne-if-youre-got-a-blank-canvas-go-for-it-interfacing.md @@ -40,4 +40,4 @@ And meh. ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-leonard_coder-im-still-doing-assembly-as-hobby-68k-assembly-x64.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-leonard_coder-im-still-doing-assembly-as-hobby-68k-assembly-x64.md similarity index 97% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-leonard_coder-im-still-doing-assembly-as-hobby-68k-assembly-x64.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-leonard_coder-im-still-doing-assembly-as-hobby-68k-assembly-x64.md index 490cd32..fd7033b 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-leonard_coder-im-still-doing-assembly-as-hobby-68k-assembly-x64.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-leonard_coder-im-still-doing-assembly-as-hobby-68k-assembly-x64.md @@ -50,4 +50,4 @@ But yeah Vulkan triangle setup code in assembly is something, I'm in! ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-m6502-i-would-enjoy-watching-that.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-m6502-i-would-enjoy-watching-that.md similarity index 94% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-m6502-i-would-enjoy-watching-that.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-m6502-i-would-enjoy-watching-that.md index 9b41f46..572a0f9 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-m6502-i-would-enjoy-watching-that.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-m6502-i-would-enjoy-watching-that.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-mmalex-i-agree-if-one-is-ok-with-bottom-up-thinking-99.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-mmalex-i-agree-if-one-is-ok-with-bottom-up-thinking-99.md similarity index 96% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-mmalex-i-agree-if-one-is-ok-with-bottom-up-thinking-99.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-mmalex-i-agree-if-one-is-ok-with-bottom-up-thinking-99.md index b854f34..d52510c 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-mmalex-i-agree-if-one-is-ok-with-bottom-up-thinking-99.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-mmalex-i-agree-if-one-is-ok-with-bottom-up-thinking-99.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-mu_chrinovic-definitely-interested-in-anything-you-put-out.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-mu_chrinovic-definitely-interested-in-anything-you-put-out.md similarity index 95% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-mu_chrinovic-definitely-interested-in-anything-you-put-out.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-mu_chrinovic-definitely-interested-in-anything-you-put-out.md index c2d66e1..9af9aad 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-mu_chrinovic-definitely-interested-in-anything-you-put-out.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-mu_chrinovic-definitely-interested-in-anything-you-put-out.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-nullspector-i-would-so-love-that.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-nullspector-i-would-so-love-that.md similarity index 94% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-nullspector-i-would-so-love-that.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-nullspector-i-would-so-love-that.md index be5c4a0..8aba520 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-nullspector-i-would-so-love-that.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-nullspector-i-would-so-love-that.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-o__boga-im-staying-maybe-for-vulkan-depending-on-how.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-o__boga-im-staying-maybe-for-vulkan-depending-on-how.md similarity index 95% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-o__boga-im-staying-maybe-for-vulkan-depending-on-how.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-o__boga-im-staying-maybe-for-vulkan-depending-on-how.md index 224459e..afbbab9 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-o__boga-im-staying-maybe-for-vulkan-depending-on-how.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-o__boga-im-staying-maybe-for-vulkan-depending-on-how.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-opdroid1234-i-would.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-opdroid1234-i-would.md similarity index 94% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-opdroid1234-i-would.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-opdroid1234-i-would.md index 28f3568..9366b65 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-opdroid1234-i-would.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-opdroid1234-i-would.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-philthistweet-i-just-wish-the-win32-api-was-better-designed-it.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-philthistweet-i-just-wish-the-win32-api-was-better-designed-it.md similarity index 97% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-philthistweet-i-just-wish-the-win32-api-was-better-designed-it.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-philthistweet-i-just-wish-the-win32-api-was-better-designed-it.md index 2d71ccc..cd35f5f 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-philthistweet-i-just-wish-the-win32-api-was-better-designed-it.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-philthistweet-i-just-wish-the-win32-api-was-better-designed-it.md @@ -53,4 +53,4 @@ Honestly, I may start a wrapper project though, because it's the only stable API ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-plasmabitcoin-very-interested.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-plasmabitcoin-very-interested.md similarity index 94% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-plasmabitcoin-very-interested.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-plasmabitcoin-very-interested.md index 5acbe8e..2031d37 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-plasmabitcoin-very-interested.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-plasmabitcoin-very-interested.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-pranksterware-thatd-rock.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-pranksterware-thatd-rock.md similarity index 94% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-pranksterware-thatd-rock.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-pranksterware-thatd-rock.md index c17b8ce..e2e457d 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-pranksterware-thatd-rock.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-pranksterware-thatd-rock.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-roasted6read-i-am-interested.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-roasted6read-i-am-interested.md similarity index 94% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-roasted6read-i-am-interested.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-roasted6read-i-am-interested.md index 30497b7..10964fa 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-roasted6read-i-am-interested.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-roasted6read-i-am-interested.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-ruben_cabaco-would-be-very-interested-in-it-also-on-your-forth.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-ruben_cabaco-would-be-very-interested-in-it-also-on-your-forth.md similarity index 96% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-ruben_cabaco-would-be-very-interested-in-it-also-on-your-forth.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-ruben_cabaco-would-be-very-interested-in-it-also-on-your-forth.md index 95bd2d9..bd0be4a 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-ruben_cabaco-would-be-very-interested-in-it-also-on-your-forth.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-ruben_cabaco-would-be-very-interested-in-it-also-on-your-forth.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-simplex_fx-is-it-already-aprils-fools-again.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-simplex_fx-is-it-already-aprils-fools-again.md similarity index 96% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-simplex_fx-is-it-already-aprils-fools-again.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-simplex_fx-is-it-already-aprils-fools-again.md index 2c5ff34..f705649 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-simplex_fx-is-it-already-aprils-fools-again.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-simplex_fx-is-it-already-aprils-fools-again.md @@ -48,4 +48,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-ssh4net-please.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-ssh4net-please.md similarity index 94% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-ssh4net-please.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-ssh4net-please.md index 939aaf6..070e664 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-ssh4net-please.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-ssh4net-please.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-thecolemanthe-assembly-isnt-hard-its-tedious-no-abstractions.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-thecolemanthe-assembly-isnt-hard-its-tedious-no-abstractions.md similarity index 96% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-thecolemanthe-assembly-isnt-hard-its-tedious-no-abstractions.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-thecolemanthe-assembly-isnt-hard-its-tedious-no-abstractions.md index 89167a3..e2e015d 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-thecolemanthe-assembly-isnt-hard-its-tedious-no-abstractions.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-thecolemanthe-assembly-isnt-hard-its-tedious-no-abstractions.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] 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/2025-07-31-totalwert-thread.md similarity index 94% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-07-31-totalwert-thread.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-totalwert-thread.md index 4bd0975..88d703e 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/2025-07-31-totalwert-thread.md @@ -34,4 +34,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-AnshumanKhanna5-im-gonna-start-pretending-i-understood-everything.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-AnshumanKhanna5-im-gonna-start-pretending-i-understood-everything.md similarity index 95% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-AnshumanKhanna5-im-gonna-start-pretending-i-understood-everything.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-AnshumanKhanna5-im-gonna-start-pretending-i-understood-everything.md index 33d5637..28b59c3 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-AnshumanKhanna5-im-gonna-start-pretending-i-understood-everything.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-AnshumanKhanna5-im-gonna-start-pretending-i-understood-everything.md @@ -32,4 +32,4 @@ parent_post_id: "1950868863836410096" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-AnshumanKhanna5-video-link-now.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-AnshumanKhanna5-video-link-now.md similarity index 94% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-AnshumanKhanna5-video-link-now.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-AnshumanKhanna5-video-link-now.md index 717fb3c..74f10fd 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-AnshumanKhanna5-video-link-now.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-AnshumanKhanna5-video-link-now.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-John31625320803-it-doesnt-really-matter-what-language-you-call.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-John31625320803-it-doesnt-really-matter-what-language-you-call.md similarity index 95% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-John31625320803-it-doesnt-really-matter-what-language-you-call.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-John31625320803-it-doesnt-really-matter-what-language-you-call.md index 202efe1..94d0b2c 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-John31625320803-it-doesnt-really-matter-what-language-you-call.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-John31625320803-it-doesnt-really-matter-what-language-you-call.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-_vkaku-i-know-someone-whod-be-excited-opdroid1234.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-_vkaku-i-know-someone-whod-be-excited-opdroid1234.md similarity index 95% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-_vkaku-i-know-someone-whod-be-excited-opdroid1234.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-_vkaku-i-know-someone-whod-be-excited-opdroid1234.md index eda1330..5995e33 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-_vkaku-i-know-someone-whod-be-excited-opdroid1234.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-_vkaku-i-know-someone-whod-be-excited-opdroid1234.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-schulzb589-i-would-watch-that-so-count-me-in.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-schulzb589-i-would-watch-that-so-count-me-in.md similarity index 94% rename from archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-schulzb589-i-would-watch-that-so-count-me-in.md rename to archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-schulzb589-i-would-watch-that-so-count-me-in.md index c2af98f..6d1785b 100644 --- a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to/2025-08-01-schulzb589-i-would-watch-that-so-count-me-in.md +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-schulzb589-i-would-watch-that-so-count-me-in.md @@ -32,4 +32,4 @@ parent_post_id: "1950860870818439202" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- Spine: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] diff --git a/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/index.md b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/index.md new file mode 100644 index 0000000..7b29066 --- /dev/null +++ b/archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/index.md @@ -0,0 +1,56 @@ +--- +title: "People claim assembly is hard." +type: archive +source: twitter +source_url: "https://x.com/NOTimothyLottes/status/1950860870818439202" +author: "NOTimothyLottes" +handle: NOTimothyLottes +post_id: "1950860870818439202" +date: 2025-07-31 +archived: 2026-08-24 +draft: false +tags: + - archive + - twitter + - NOTimothyLottes +description: "People claim assembly is hard." +in_reply_to: "" +--- + +## Source + +- URL: https://x.com/NOTimothyLottes/status/1950860870818439202 +- Author: NOTimothyLottes (@NOTimothyLottes) +- Posted: 2025-07-31 10:07:31 + +## Thread + +**1/** + +People claim assembly is hard. A good counter to that would be showing how to build a x86-64 WIN32 Vulkan based engine from scratch in ASM. Not sure how many people would find that worth watching though. + +Branches: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-biovf-i-would-definitely-watch-that]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-mu_chrinovic-definitely-interested-in-anything-you-put-out]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-nullspector-i-would-so-love-that]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-ssh4net-please]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-pranksterware-thatd-rock]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-mmalex-i-agree-if-one-is-ok-with-bottom-up-thinking-99]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-leonard_coder-im-still-doing-assembly-as-hobby-68k-assembly-x64]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-ruben_cabaco-would-be-very-interested-in-it-also-on-your-forth]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-NickDrisc0ll-im-sure-it-would-be-invaluable]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-totalwert-thread]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-opdroid1234-i-would]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-Karyuutensei-unrelated-but-i-would-also-love-a-look-at-your]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-m6502-i-would-enjoy-watching-that]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-roasted6read-i-am-interested]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-SquaredApe-given-ive-only-done-asm-on-amiga-with-devpac-i]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-VicThorDev6-a-lot-of-people-who-claim-assembly-is-hard-just]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-PunteroCrudo-i-would-and-i-think-more-people-would-be]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-2Sexy4MyGPU-it-was-never-hard-just-tedious]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-o__boga-im-staying-maybe-for-vulkan-depending-on-how]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-cyberbemon-id-love-to-watch-that]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-_naf_90-im-learning-assembly-in-my-spare-time]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-furan-there-are-a-lot-of-watch-me-write-this-app-in]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-furan-would-watch-though]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-thecolemanthe-assembly-isnt-hard-its-tedious-no-abstractions]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-konigssohne-if-youre-got-a-blank-canvas-go-for-it-interfacing]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-plasmabitcoin-very-interested]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-Stererence-ive-been-doing-assembly-a-bit-in-d-with-the]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-simplex_fx-is-it-already-aprils-fools-again]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-CUDAHandbook-i-have-been-writing-assembly-for-almost-40-years]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-0x44_-assembly-isnt-hard-its-just-platform-specific]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-schulzb589-i-would-watch-that-so-count-me-in]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-AnshumanKhanna5-video-link-now]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-_vkaku-i-know-someone-whod-be-excited-opdroid1234]], [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-John31625320803-it-doesnt-really-matter-what-language-you-call]] + +**2/** + +If game logic is GPU side there is little point in NOT doing assembly, since the CPU side stuff would always be platform specific. + +**3/** + +ASM provides a good opportunity to show how to convert typical function argument gather into store multicast with linear prefetch for arguments to API calls. Effectively re-arch for cold cache efficiency. And other radically cool stuff that nobody does. + +**4/** + +Linux has been all down hill over the years. OSS was fantastic, easy portable Linux system call interface. Also it's easy to do direct X11 with just syscalls. Now with Wayland you are stuck with linking to a garbage library. So might as well do WIN32 for Linux and depend on Wine. + +Branches: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-07-31-philthistweet-i-just-wish-the-win32-api-was-better-designed-it]] + +**5/** + +So Valve standardizing on Proton saves a lot of trouble with porting across ABIs/etc, just do WIN32 as it's way easier to interface with than Wayland and whatever horrible userland audio interface Linux monkeys switch to this era. + +**6/** + +Few probably remember the old Unix before pthreads and ELF. It was better then. Much easier to use fork and shm to do platform audio than today. And that holds for all the vintage workstations (which I did implement back in the day) + +Branches: [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard/2025-08-01-AnshumanKhanna5-im-gonna-start-pretending-i-understood-everything]] diff --git a/archive/threads/NOTimothyLottes/2026-01-14-can-do-that-but-at-least-these-kinds-of-systems/index.md b/archive/threads/NOTimothyLottes/2026-01-14-can-do-that/index.md similarity index 93% rename from archive/threads/NOTimothyLottes/2026-01-14-can-do-that-but-at-least-these-kinds-of-systems/index.md rename to archive/threads/NOTimothyLottes/2026-01-14-can-do-that/index.md index 0900823..f655dca 100644 --- a/archive/threads/NOTimothyLottes/2026-01-14-can-do-that-but-at-least-these-kinds-of-systems/index.md +++ b/archive/threads/NOTimothyLottes/2026-01-14-can-do-that/index.md @@ -25,6 +25,8 @@ in_reply_to: "2011353617102741593" > @NOTimothyLottes would it be good if the program optimizes its own code during and/or after its initialization for every subsequent exec to be hyper specialized? +![](https://pbs.twimg.com/media/G-nDdKsX0AAV4e_?format=jpg&name=orig) + ## Thread **1/** diff --git a/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.md b/archive/threads/NOTimothyLottes/2026-05-30-renovating-cpu-clock-code/2026-05-31-FUZxxl-if-you-do-the-multiply-in-uint128-t-and-then.md similarity index 96% rename from 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.md rename to archive/threads/NOTimothyLottes/2026-05-30-renovating-cpu-clock-code/2026-05-31-FUZxxl-if-you-do-the-multiply-in-uint128-t-and-then.md index d9aed36..63e8f50 100644 --- a/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.md +++ b/archive/threads/NOTimothyLottes/2026-05-30-renovating-cpu-clock-code/2026-05-31-FUZxxl-if-you-do-the-multiply-in-uint128-t-and-then.md @@ -40,4 +40,4 @@ parent_post_id: "2060730425929080874" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2026-05-30-renovating-cpu-clock-code-im-assuming-x86-64-tsc]] +- Spine: [[archive/threads/NOTimothyLottes/2026-05-30-renovating-cpu-clock-code]] 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/index.md similarity index 93% rename from archive/threads/NOTimothyLottes/2026-05-30-renovating-cpu-clock-code-im-assuming-x86-64-tsc/index.md rename to archive/threads/NOTimothyLottes/2026-05-30-renovating-cpu-clock-code/index.md index 8bb2b56..018588f 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/index.md @@ -30,7 +30,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. ![](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]] +Branches: [[archive/threads/NOTimothyLottes/2026-05-30-renovating-cpu-clock-code/2026-05-31-FUZxxl-if-you-do-the-multiply-in-uint128-t-and-then]] **2/** diff --git a/archive/threads/NOTimothyLottes/2026-05-31-hits-the-easy-to-debug-cpu-or-gpu-stuff-in-the/index.md b/archive/threads/NOTimothyLottes/2026-05-31-hits-the-easy-to-debug-cpu-or-gpu-stuff-in-the/index.md deleted file mode 100644 index ecd571a..0000000 --- a/archive/threads/NOTimothyLottes/2026-05-31-hits-the-easy-to-debug-cpu-or-gpu-stuff-in-the/index.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: "no-debugger-debug / console / printf-style - prior evolved to one mmapped fixed-width-height log file with an atomic for multi-thread|process messages - but even that seems too complexy ..." -type: archive -source: twitter -source_url: "https://x.com/NOTimothyLottes/status/2061123768429211767" -author: "NOTimothyLottes" -handle: NOTimothyLottes -post_id: "2061123768429211767" -date: 2026-05-31 -archived: 2026-08-25 -draft: false -tags: - - archive - - twitter - - NOTimothyLottes -description: "no-debugger-debug / console / printf-style - prior evolved to one mmapped fixed-width-height log file with an atomic for multi-thread|process messages - but even that seems too complexy ..." -in_reply_to: "" ---- - -## Source - -- URL: https://x.com/NOTimothyLottes/status/2061123768429211767 -- Author: NOTimothyLottes (@NOTimothyLottes) -- Posted: 2026-05-31 16:32:54 - -## Thread - -**1/** - -no-debugger-debug / console / printf-style - prior evolved to one mmapped fixed-width-height log file with an atomic for multi-thread|process messages - but even that seems too complexy ... - -**2/** - -moving to this >>> CART file is mmapped on CPU with mapped GPU access (no file IO) - background page walker to ensure OS won't page it out - beginning of CART file is a grid of 32-bit unsigned values - hex dumping that as my 'log file' - either to term or GPU render - -**3/** - -hits the easy to debug CPU or GPU stuff in the same framework (simply write and it just appears) - it's always a HEX dump, but can show decimal by pretending it's a 4-bit/character terminal with a hex font :) diff --git a/archive/threads/NOTimothyLottes/2026-05-31-no-debugger-debug-console-printf-style-prior/index.md b/archive/threads/NOTimothyLottes/2026-05-31-no-debugger-debug-console-printf-style-prior/index.md index 7ec743c..71d2c5b 100644 --- a/archive/threads/NOTimothyLottes/2026-05-31-no-debugger-debug-console-printf-style-prior/index.md +++ b/archive/threads/NOTimothyLottes/2026-05-31-no-debugger-debug-console-printf-style-prior/index.md @@ -8,7 +8,7 @@ handle: NOTimothyLottes post_id: "2061123768429211767" date: 2026-05-31 archived: 2026-08-23 -draft: true +draft: false tags: - archive - twitter diff --git a/archive/threads/NOTimothyLottes/2026-06-10-steamos-init/2026-06-11-NOTimothyLottes-going-to-give-artix-lxqt-runit-variation-a-try.md b/archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated/2026-06-11-NOTimothyLottes-going-to-give-artix-lxqt-runit-variation-a-try.md similarity index 93% rename from archive/threads/NOTimothyLottes/2026-06-10-steamos-init/2026-06-11-NOTimothyLottes-going-to-give-artix-lxqt-runit-variation-a-try.md rename to archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated/2026-06-11-NOTimothyLottes-going-to-give-artix-lxqt-runit-variation-a-try.md index 3569a36..151148b 100644 --- a/archive/threads/NOTimothyLottes/2026-06-10-steamos-init/2026-06-11-NOTimothyLottes-going-to-give-artix-lxqt-runit-variation-a-try.md +++ b/archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated/2026-06-11-NOTimothyLottes-going-to-give-artix-lxqt-runit-variation-a-try.md @@ -40,4 +40,4 @@ Somewhat surprised, Artix using the graphical install just worked out of the box ## Related -- Spine: [[archive/threads/NOTimothyLottes/2026-06-10-steamos-init]] +- Spine: [[archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated]] diff --git a/archive/threads/NOTimothyLottes/2026-06-10-steamos-init/2026-06-11-RouaniJihad-my-patience-is-this-thin-with-win11-right-now-but.md b/archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated/2026-06-11-RouaniJihad-my-patience-is-this-thin-with-win11-right-now-but.md similarity index 91% rename from archive/threads/NOTimothyLottes/2026-06-10-steamos-init/2026-06-11-RouaniJihad-my-patience-is-this-thin-with-win11-right-now-but.md rename to archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated/2026-06-11-RouaniJihad-my-patience-is-this-thin-with-win11-right-now-but.md index 09c7d82..fccb46f 100644 --- a/archive/threads/NOTimothyLottes/2026-06-10-steamos-init/2026-06-11-RouaniJihad-my-patience-is-this-thin-with-win11-right-now-but.md +++ b/archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated/2026-06-11-RouaniJihad-my-patience-is-this-thin-with-win11-right-now-but.md @@ -32,4 +32,4 @@ parent_post_id: "2064858927829745887" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2026-06-10-steamos-init]] +- Spine: [[archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated]] diff --git a/archive/threads/NOTimothyLottes/2026-06-10-steamos-init/2026-06-11-mcnabbd-fascinating-to-me-how-this-challenge-would-have.md b/archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated/2026-06-11-mcnabbd-fascinating-to-me-how-this-challenge-would-have.md similarity index 92% rename from archive/threads/NOTimothyLottes/2026-06-10-steamos-init/2026-06-11-mcnabbd-fascinating-to-me-how-this-challenge-would-have.md rename to archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated/2026-06-11-mcnabbd-fascinating-to-me-how-this-challenge-would-have.md index 525ea87..28fdf27 100644 --- a/archive/threads/NOTimothyLottes/2026-06-10-steamos-init/2026-06-11-mcnabbd-fascinating-to-me-how-this-challenge-would-have.md +++ b/archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated/2026-06-11-mcnabbd-fascinating-to-me-how-this-challenge-would-have.md @@ -36,4 +36,4 @@ parent_post_id: "2064858927829745887" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2026-06-10-steamos-init]] +- Spine: [[archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated]] diff --git a/archive/threads/NOTimothyLottes/2026-06-10-steamos-init/index.md b/archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated/index.md similarity index 68% rename from archive/threads/NOTimothyLottes/2026-06-10-steamos-init/index.md rename to archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated/index.md index 1ad4348..ff1f2ea 100644 --- a/archive/threads/NOTimothyLottes/2026-06-10-steamos-init/index.md +++ b/archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated/index.md @@ -29,7 +29,7 @@ in_reply_to: "" So I'm on Linux now, but obviously I cheated, because this is a SteamOS machine (pre-installed). Need to re-learn enough to be able to make responsible choices on a new install. First up what init system to do? {openrc, runit, s6, or dinit}. -Branches: [[archive/threads/NOTimothyLottes/2026-06-10-steamos-init/2026-06-11-RouaniJihad-my-patience-is-this-thin-with-win11-right-now-but]], [[archive/threads/NOTimothyLottes/2026-06-10-steamos-init/2026-06-11-mcnabbd-fascinating-to-me-how-this-challenge-would-have]], [[archive/threads/NOTimothyLottes/2026-06-10-steamos-init/2026-06-11-NOTimothyLottes-going-to-give-artix-lxqt-runit-variation-a-try]] +Branches: [[archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated/2026-06-11-RouaniJihad-my-patience-is-this-thin-with-win11-right-now-but]], [[archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated/2026-06-11-mcnabbd-fascinating-to-me-how-this-challenge-would-have]], [[archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated/2026-06-11-NOTimothyLottes-going-to-give-artix-lxqt-runit-variation-a-try]] **2/** diff --git a/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.md b/archive/threads/NOTimothyLottes/2026-06-13-cross-compilation-is-up/2026-06-13-tomcr2100-interesting-font-does-it-have-a-name.md similarity index 94% rename from 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.md rename to archive/threads/NOTimothyLottes/2026-06-13-cross-compilation-is-up/2026-06-13-tomcr2100-interesting-font-does-it-have-a-name.md index 4c8dd48..c70fac8 100644 --- a/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.md +++ b/archive/threads/NOTimothyLottes/2026-06-13-cross-compilation-is-up/2026-06-13-tomcr2100-interesting-font-does-it-have-a-name.md @@ -32,4 +32,4 @@ parent_post_id: "2065832746757341482" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2026-06-13-cross-compilation-is-up-just-like-on-windows-with]] +- Spine: [[archive/threads/NOTimothyLottes/2026-06-13-cross-compilation-is-up]] 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/index.md similarity index 92% rename from archive/threads/NOTimothyLottes/2026-06-13-cross-compilation-is-up-just-like-on-windows-with/index.md rename to archive/threads/NOTimothyLottes/2026-06-13-cross-compilation-is-up/index.md index 63ebd37..1cc1352 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/index.md @@ -32,7 +32,7 @@ Cross compilation is up. Just like on windows with GCC I have to disable all war ![](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]] +Branches: [[archive/threads/NOTimothyLottes/2026-06-13-cross-compilation-is-up/2026-06-13-tomcr2100-interesting-font-does-it-have-a-name]] **2/** 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/index.md similarity index 100% rename from archive/threads/NOTimothyLottes/2026-06-13-the-glibc-implementation-would-do-that-i-bypass/index.md rename to archive/threads/NOTimothyLottes/2026-06-13-the-glibc-implementation-would-do-that/index.md 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/index.md similarity index 100% rename from archive/threads/NOTimothyLottes/2026-06-30-working-on-the-linux-thread-priority-code-linux/index.md rename to archive/threads/NOTimothyLottes/2026-06-30-working-on-the-linux-thread-priority-code/index.md diff --git a/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.md b/archive/threads/NOTimothyLottes/2026-07-11-rethinking-vulkan-queue-choice/2026-07-11-konrad_kubacki_-am-i-having-a-stroke-what-is-this-font-it-feels.md similarity index 95% rename from 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.md rename to archive/threads/NOTimothyLottes/2026-07-11-rethinking-vulkan-queue-choice/2026-07-11-konrad_kubacki_-am-i-having-a-stroke-what-is-this-font-it-feels.md index 92d1b2b..1d3b5dc 100644 --- a/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.md +++ b/archive/threads/NOTimothyLottes/2026-07-11-rethinking-vulkan-queue-choice/2026-07-11-konrad_kubacki_-am-i-having-a-stroke-what-is-this-font-it-feels.md @@ -32,4 +32,4 @@ parent_post_id: "2075769880092037309" ## Related -- Spine: [[archive/threads/NOTimothyLottes/2026-07-11-rethinking-vulkan-queue-choice-traditional-double]] +- Spine: [[archive/threads/NOTimothyLottes/2026-07-11-rethinking-vulkan-queue-choice]] 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/index.md similarity index 94% rename from archive/threads/NOTimothyLottes/2026-07-11-rethinking-vulkan-queue-choice-traditional-double/index.md rename to archive/threads/NOTimothyLottes/2026-07-11-rethinking-vulkan-queue-choice/index.md index 9c38235..c2b8a29 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/index.md @@ -30,7 +30,7 @@ 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 ... ![](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]] +Branches: [[archive/threads/NOTimothyLottes/2026-07-11-rethinking-vulkan-queue-choice/2026-07-11-konrad_kubacki_-am-i-having-a-stroke-what-is-this-font-it-feels]] **2/** diff --git a/archive/threads/NOTimothyLottes/2026-07-14-so-i-can-liter-error-checks-around-stuff-with/index.md b/archive/threads/NOTimothyLottes/2026-07-14-another-round-of-getting-optimized-error-checking/index.md similarity index 100% rename from archive/threads/NOTimothyLottes/2026-07-14-so-i-can-liter-error-checks-around-stuff-with/index.md rename to archive/threads/NOTimothyLottes/2026-07-14-another-round-of-getting-optimized-error-checking/index.md diff --git a/archive/threads/NOTimothyLottes/2026-07-22-a-language-that-you-author-in-a-compressed-space/index.md b/archive/threads/NOTimothyLottes/2026-07-22-working-through-rough-draft-of-assembly-for-a/index.md similarity index 100% rename from archive/threads/NOTimothyLottes/2026-07-22-a-language-that-you-author-in-a-compressed-space/index.md rename to archive/threads/NOTimothyLottes/2026-07-22-working-through-rough-draft-of-assembly-for-a/index.md diff --git a/archive/threads/NOTimothyLottes/index.md b/archive/threads/NOTimothyLottes/index.md index 69ec2a6..fe0c6d3 100644 --- a/archive/threads/NOTimothyLottes/index.md +++ b/archive/threads/NOTimothyLottes/index.md @@ -10,36 +10,36 @@ tags: --- - [[archive/threads/NOTimothyLottes/2022-11-04-vulkan-1500-lines-of-overhead-including-header]] -- [[archive/threads/NOTimothyLottes/2022-11-05-19-GPU-Programming-Tip-Line-Thread]] +- [[archive/threads/NOTimothyLottes/2022-11-05-gpu-programming-tip-line-thread]] - [[archive/threads/NOTimothyLottes/2022-11-08-example-of-bind-everything-once-layout-aliasing]] -- [[archive/threads/NOTimothyLottes/2022-11-09-if-only-pc-vendors-with-open-isas-amd-intel-would]] +- [[archive/threads/NOTimothyLottes/2022-11-09-if-only-pc-vendors-with-open-isas]] - [[archive/threads/NOTimothyLottes/2022-11-13-my-prefered-method-of-managing-application-data]] - [[archive/threads/NOTimothyLottes/2023-04-28-https-gpuopen-com-learn-rgp-1-15-enhanced-isa]] - [[archive/threads/NOTimothyLottes/2023-05-03-found-some-of-my-old-blogs-thread-looking-back-an]] - [[archive/threads/NOTimothyLottes/2023-06-20-how-about-a-mega-thread-on-the-mechanics-of-cpu]] -- [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop-where-the-goal]] +- [[archive/threads/NOTimothyLottes/2023-06-30-nothing-oriented-programming-nop]] - [[archive/threads/NOTimothyLottes/2023-08-03-spc-using-8-deep-swap-all-aliasing-same-bo-image]] -- [[archive/threads/NOTimothyLottes/2023-08-04-for-anyone-tuning-in-now-spc-is-kind-of-like-a]] -- [[archive/threads/NOTimothyLottes/2023-08-06-the-next-challenge-is-overscan-safety-since-real]] -- [[archive/threads/NOTimothyLottes/2023-08-06-yeah-perhaps-wildly-alien-but-for-those-who-grew]] -- [[archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard-for-example-its]] -- [[archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken-corrected-it-its]] -- [[archive/threads/NOTimothyLottes/2023-08-18-the-subpix-version-is-definitely-better-because]] +- [[archive/threads/NOTimothyLottes/2023-08-03-spc-left-off-with-key-and-gamepad-input-gpu]] +- [[archive/threads/NOTimothyLottes/2023-08-06-1st-spc-project-to-be-based-on-vintage-640x480]] +- [[archive/threads/NOTimothyLottes/2023-08-06-spc-rdna2-assembler-thread]] +- [[archive/threads/NOTimothyLottes/2023-08-07-crt-emulation-on-lcds-can-be-hard]] +- [[archive/threads/NOTimothyLottes/2023-08-18-spc-last-crt-shader-was-broken]] +- [[archive/threads/NOTimothyLottes/2023-08-18-spc-crt-shader-on-the-deck]] - [[archive/threads/NOTimothyLottes/2023-12-15-long-thread]] -- [[archive/threads/NOTimothyLottes/2023-12-16-if-there-is-anything-to-learn-for-programming-it]] -- [[archive/threads/NOTimothyLottes/2023-12-19-multi-session-is-nice-since-the-binary-auto]] +- [[archive/threads/NOTimothyLottes/2023-12-16-inspecting-my-old-vk-engines]] +- [[archive/threads/NOTimothyLottes/2023-12-19-working-towards-a-public-domain-release-of-a]] - [[archive/threads/NOTimothyLottes/2024-01-04-debug-for-majority-gpu-side-game-dev-run-time]] - [[archive/threads/NOTimothyLottes/2024-04-06-on-https-mastodon-gamedev-place-notimothylottes]] - [[archive/threads/NOTimothyLottes/2024-05-04-it-was-only-later-when-systems-forced-c-abi]] - [[archive/threads/NOTimothyLottes/2024-11-16-0-what-a-horrible-term-printf-debugging]] - [[archive/threads/NOTimothyLottes/2024-11-16-that-line-of-thinking-is-universal-solution-to]] -- [[archive/threads/NOTimothyLottes/2024-11-19-after-vk-device-is-open-i-signal-a-background]] -- [[archive/threads/NOTimothyLottes/2024-11-21-32-oh-damn-32-should-probably-stop-now-until-next]] +- [[archive/threads/NOTimothyLottes/2024-11-19-working-towards-a-new-bring-up-of-front-buffering]] +- [[archive/threads/NOTimothyLottes/2024-11-20-0-been-wanting-to-do-this-for-a-long-time-a]] - [[archive/threads/NOTimothyLottes/2024-11-22-sometimes-you-only-want-to-wave-coherent-branch]] -- [[archive/threads/NOTimothyLottes/2024-12-15-texel-buffer-is-needed-for-whatever-formats-one]] +- [[archive/threads/NOTimothyLottes/2024-12-15-the-real-buffer-zoo-problem-with-vulkan-is]] - [[archive/threads/NOTimothyLottes/2024-12-16-also-i-wouldnt-just-modify-an-existing-compiler]] -- [[archive/threads/NOTimothyLottes/2024-12-16-then-there-are-rough-edges-to-texel-buffer]] -- [[archive/threads/NOTimothyLottes/2024-12-21-not-sure-if-this-is-the-end-of-this-story-yet-but]] +- [[archive/threads/NOTimothyLottes/2024-12-15-buffer-zoo-is-more-about-the-silly-season-of]] +- [[archive/threads/NOTimothyLottes/2024-12-21-hopefully-with-this-last-atomic-workaround-im]] - [[archive/threads/NOTimothyLottes/2025-01-04-for-the-love-of-octahedrons-https-fileadmin-cs]] - [[archive/threads/NOTimothyLottes/2025-01-06-one-of-the-downsides-of-v-cndmask-b32-on-amd-is]] - [[archive/threads/NOTimothyLottes/2025-01-09-just-for-fun-started-to-look-into-cardinal-cubic]] @@ -52,35 +52,34 @@ tags: - [[archive/threads/NOTimothyLottes/2025-04-30-3-i-got-side-tracked-by-building-a-language-that]] - [[archive/threads/NOTimothyLottes/2025-04-30-i-laugh-when-people-say-c-is-like-assembly-they]] - [[archive/threads/NOTimothyLottes/2025-06-29-many-of-my-forth-like-languages-worked-via-nested]] -- [[archive/threads/NOTimothyLottes/2025-07-23-i-dont-use-standard-c-libs-or-anything-like-that]] -- [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard-a-good-counter-to]] +- [[archive/threads/NOTimothyLottes/2025-07-23-nobody-self-includes-with-defines-to-reorder-c]] +- [[archive/threads/NOTimothyLottes/2025-07-31-people-claim-assembly-is-hard]] - [[archive/threads/NOTimothyLottes/2025-08-01-also-run-from-gpu-side-editing-tools-for-shader]] - [[archive/threads/NOTimothyLottes/2025-08-02-so-far-the-plan-is-to-have-the-data-read-write]] - [[archive/threads/NOTimothyLottes/2025-10-10-thread-about-this-from-rfleury-https-www-rfleury]] - [[archive/threads/NOTimothyLottes/2025-10-13-short-talk-on-how-i-do-cpu-side-debugging-without]] - [[archive/threads/NOTimothyLottes/2025-11-17-i-wish-everyone-would-just-adopt-reversed-with]] -- [[archive/threads/NOTimothyLottes/2026-01-14-can-do-that-but-at-least-these-kinds-of-systems]] +- [[archive/threads/NOTimothyLottes/2026-01-14-can-do-that]] - [[archive/threads/NOTimothyLottes/2026-03-08-ill-add-one-conspiracy-theory-for-everyone]] - [[archive/threads/NOTimothyLottes/2026-05-23-most-crap-o-grammers-today-in-the-user-space-c]] - [[archive/threads/NOTimothyLottes/2026-05-29-took-perhaps-a-5-month-vacation-from-at-home]] -- [[archive/threads/NOTimothyLottes/2026-05-30-renovating-cpu-clock-code-im-assuming-x86-64-tsc]] -- [[archive/threads/NOTimothyLottes/2026-05-31-hits-the-easy-to-debug-cpu-or-gpu-stuff-in-the]] +- [[archive/threads/NOTimothyLottes/2026-05-30-renovating-cpu-clock-code]] - [[archive/threads/NOTimothyLottes/2026-05-31-no-debugger-debug-console-printf-style-prior]] - [[archive/threads/NOTimothyLottes/2026-06-01-that-plus-an-oscilloscope-this-is-the-way]] - [[archive/threads/NOTimothyLottes/2026-06-01-windows-thread-priority]] - [[archive/threads/NOTimothyLottes/2026-06-02-for-windows-trying-to-standardize-on-highest]] - [[archive/threads/NOTimothyLottes/2026-06-02-its-unfortunate-there-isnt-an-easy-way-to-map-the]] - [[archive/threads/NOTimothyLottes/2026-06-03-back-running-640x480-on-my-vga-crts-to-prep-for]] -- [[archive/threads/NOTimothyLottes/2026-06-10-steamos-init]] -- [[archive/threads/NOTimothyLottes/2026-06-13-cross-compilation-is-up-just-like-on-windows-with]] +- [[archive/threads/NOTimothyLottes/2026-06-10-so-im-on-linux-now-but-obviously-i-cheated]] +- [[archive/threads/NOTimothyLottes/2026-06-13-cross-compilation-is-up]] - [[archive/threads/NOTimothyLottes/2026-06-13-nanorc-done-and-back-to-actual-programming-with]] -- [[archive/threads/NOTimothyLottes/2026-06-13-the-glibc-implementation-would-do-that-i-bypass]] +- [[archive/threads/NOTimothyLottes/2026-06-13-the-glibc-implementation-would-do-that]] - [[archive/threads/NOTimothyLottes/2026-06-14-on-linux-i-do-speculative-pinning-of-cpu-memory]] - [[archive/threads/NOTimothyLottes/2026-06-26-quick-summary-of-why-not-pselect-ppoll-epoll]] - [[archive/threads/NOTimothyLottes/2026-06-27-deterrent-to-alsa-is-just-parsing-through-snd-pcm]] - [[archive/threads/NOTimothyLottes/2026-06-29-alsa-hell-month-continues-remember-it-might-be]] - [[archive/threads/NOTimothyLottes/2026-06-29-eventually-figure-out-enough-to-get-aplay-to]] -- [[archive/threads/NOTimothyLottes/2026-06-30-working-on-the-linux-thread-priority-code-linux]] +- [[archive/threads/NOTimothyLottes/2026-06-30-working-on-the-linux-thread-priority-code]] - [[archive/threads/NOTimothyLottes/2026-07-01-did-manage-to-get-alsa-to-function-without-sndrv]] - [[archive/threads/NOTimothyLottes/2026-07-01-haha-damn-i-thought-i-had-a-great-idea-for-wine]] - [[archive/threads/NOTimothyLottes/2026-07-01-linux-by-default-doesnt-allow-any-increase-in]] @@ -92,13 +91,13 @@ tags: - [[archive/threads/NOTimothyLottes/2026-07-06-vulkan-starts-with-the-ping-pong-between-getting]] - [[archive/threads/NOTimothyLottes/2026-07-08-next-pre-device-opening-activity-is-choosing]] - [[archive/threads/NOTimothyLottes/2026-07-10-oh-i-probably-have-a-lot-to-learn-here-building]] -- [[archive/threads/NOTimothyLottes/2026-07-11-rethinking-vulkan-queue-choice-traditional-double]] +- [[archive/threads/NOTimothyLottes/2026-07-11-rethinking-vulkan-queue-choice]] - [[archive/threads/NOTimothyLottes/2026-07-13-another-quality-of-life-change-exit-with-error]] - [[archive/threads/NOTimothyLottes/2026-07-14-example-usage-after-clean-up]] -- [[archive/threads/NOTimothyLottes/2026-07-14-so-i-can-liter-error-checks-around-stuff-with]] +- [[archive/threads/NOTimothyLottes/2026-07-14-another-round-of-getting-optimized-error-checking]] - [[archive/threads/NOTimothyLottes/2026-07-15-sar-on-a-control-word-can-in-theory-grab-3-values]] - [[archive/threads/NOTimothyLottes/2026-07-17-oh-f-it-the-urge-to-drop-the-c-baggage-was-too]] - [[archive/threads/NOTimothyLottes/2026-07-18-i-realized-at-some-point-i-can-have-most]] - [[archive/threads/NOTimothyLottes/2026-07-19-the-aim-of-course-keep-the-stuff-that-doesnt-need]] -- [[archive/threads/NOTimothyLottes/2026-07-22-a-language-that-you-author-in-a-compressed-space]] +- [[archive/threads/NOTimothyLottes/2026-07-22-working-through-rough-draft-of-assembly-for-a]] - [[archive/threads/NOTimothyLottes/2026-08-02-re-fpga-land-alus-im-firmly-distracted-by-an]] 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/index.md similarity index 100% rename from archive/threads/VPCOMPRESSB/2025-11-20-no-tokens-and-no-asts-easier-because-its-forth/index.md rename to archive/threads/VPCOMPRESSB/2025-11-20-no-tokens-and-no-asts/index.md diff --git a/archive/threads/VPCOMPRESSB/index.md b/archive/threads/VPCOMPRESSB/index.md index a6bb928..4ab4a6a 100644 --- a/archive/threads/VPCOMPRESSB/index.md +++ b/archive/threads/VPCOMPRESSB/index.md @@ -10,4 +10,4 @@ tags: --- - [[archive/threads/VPCOMPRESSB/2025-11-10-im-not-familiar-with-your-problem]] -- [[archive/threads/VPCOMPRESSB/2025-11-20-no-tokens-and-no-asts-easier-because-its-forth]] +- [[archive/threads/VPCOMPRESSB/2025-11-20-no-tokens-and-no-asts]] diff --git a/scripts/twitter/README.md b/scripts/twitter/README.md index cdc1b49..0e85239 100644 --- a/scripts/twitter/README.md +++ b/scripts/twitter/README.md @@ -18,6 +18,8 @@ python C:\projects\Threadwell\scripts\twitter\tw.py fallback --id -- 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 +python C:\projects\Threadwell\scripts\twitter\tw.py reslug --all +python C:\projects\Threadwell\scripts\twitter\tw.py reslug --all --apply ``` `paths.py` sets vault = two parents above this file, dumps = `../manual_slop/docs/twitter`, scratch = `../Threadwell-ai/scratch`. @@ -45,6 +47,12 @@ The `lift` command is retired. Use `fallback` for a single media item after expl 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. +## Canonical thread directories + +Each thread archive directory is named from the rendered title that appears in `index.md` (`-`). `tw.py reslug --all` reads each existing `index.md` frontmatter date and title, derives the expected directory, and reports every mapping without writing. `tw.py reslug --all --apply` preflights every pair, refuses the entire apply on any non-frozen conflict, and moves assets first with the archive directory immediately after; if the archive move fails, assets roll back. If a destination is occupied, the apply aborts without `-2`, `-3`, or any other suffix. Frozen ids in `do_not_refetch.txt` are reported as `frozen` and skipped. + +Future emits use the same rendered title for the directory and `index.md` frontmatter, so normal emit does this automatically — no flag is needed on emit, refresh, or add-branch. Hand-move only the archive or only the asset is not supported; both must move as a pair. Each old archive prefix is replaced exactly once in mutable `*.md` and `*.canvas` outside `.git/`, `site/`, `assets/`, `secrets/`, `node_modules/`, and frozen archive dirs, so mappings do not cascade. No aliases, redirect pages, compatibility folders, suffix fallback, or network contact. + ## Pieces | Script | Job | diff --git a/scripts/twitter/emit_archive.py b/scripts/twitter/emit_archive.py index 278cea5..c1764a5 100644 --- a/scripts/twitter/emit_archive.py +++ b/scripts/twitter/emit_archive.py @@ -5,6 +5,7 @@ from __future__ import annotations import argparse import json import logging +import os import re import shutil import sys @@ -18,6 +19,7 @@ logger = logging.getLogger(__name__) sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) try: + from twitter.frozen import frozen_match, load_frozen_ids from twitter.media_manifest import ( _from_wire_dict, _item_to_wire, @@ -30,7 +32,8 @@ try: ) from twitter.media_refs import remote_markup from twitter.models import MediaItem, ThreadData, load_thread - from twitter.render import render_branch, render_spine + from twitter.paths import FROZEN, SCRATCH + from twitter.render import render_branch, render_spine, title_text from twitter.slug import branch_file_name, date_prefix, thread_dir_name from twitter.tree import ( by_id, @@ -41,6 +44,7 @@ try: spine_ids, ) except ImportError: # pragma: no cover - script-mode import + from frozen import frozen_match, load_frozen_ids from media_manifest import ( _from_wire_dict, _item_to_wire, @@ -53,7 +57,8 @@ except ImportError: # pragma: no cover - script-mode import ) from media_refs import remote_markup from models import MediaItem, ThreadData, load_thread - from render import render_branch, render_spine + from paths import FROZEN, SCRATCH + from render import render_branch, render_spine, title_text from slug import branch_file_name, date_prefix, thread_dir_name from tree import ( by_id, @@ -360,16 +365,6 @@ def collect_existing_ids(vault: Path) -> tuple[set[str], dict[str, Path]]: return ids, spines -def unique_dir_name(parent: Path, base: str) -> str: - """Return ``base`` if unused, else ``base-2``, ``base-3``, ... until a free name is found.""" - if not (parent / base).exists(): - return base - n = 2 - while (parent / f"{base}-{n}").exists(): - n += 1 - return f"{base}-{n}" - - def _split_frontmatter(text: str) -> tuple[str, str]: """Split an archive note into (frontmatter_with_closing_fence, body). Returns ``("", text)`` if no fence.""" if not text.startswith("---"): @@ -547,6 +542,8 @@ def emit( force: bool = False, reuse_dir: Path | None = None, tip: str | None = None, + reconcile_scratch: Path = SCRATCH, + frozen_ids: set[str] | None = None, ) -> EmitResult: src = input_dir / "thread_data.json" if not src.is_file(): @@ -567,7 +564,8 @@ def emit( kids = children_map(thread) first = ids[spine[0]] handle = first.handle - first_line = (first.text or "").split("\n", 1)[0] + rendered_title = title_text(first.text) + desired_dir_name = thread_dir_name(date_prefix(first.timestamp), rendered_title, slug) if reuse_dir is None and force: _existing_ids, spines = collect_existing_ids(vault) @@ -590,19 +588,47 @@ def emit( reuse_dir = candidate if reuse_dir is not None: - dir_name = reuse_dir.name handle = reuse_dir.parent.name + dir_name = reuse_dir.name note_dir = reuse_dir asset_dir = vault / "assets" / "threads" / handle / dir_name - else: - dir_name = thread_dir_name(date_prefix(first.timestamp), first_line, slug) - if slug is None: - dir_name = unique_dir_name( - vault / "archive" / "threads" / handle, - dir_name, + if dir_name != desired_dir_name: + active_frozen_ids = ( + frozen_ids if frozen_ids is not None else load_frozen_ids(FROZEN) ) + match = frozen_match(asset_dir, active_frozen_ids) + if match is not None: + raise SystemExit(f"frozen: skipped ({match})") + new_archive = vault / "archive" / "threads" / handle / desired_dir_name + new_asset = vault / "assets" / "threads" / handle / desired_dir_name + move = ReslugMove( + handle=handle, + old_dir_name=dir_name, + new_dir_name=desired_dir_name, + archive_old=reuse_dir, + archive_new=new_archive, + asset_old=asset_dir, + asset_new=new_asset, + ) + rename_thread_pair(move) + frozen_dirs = plan_reslug(vault, active_frozen_ids).frozen_dirs + old_prefix = f"archive/threads/{handle}/{dir_name}" + new_prefix = f"archive/threads/{handle}/{desired_dir_name}" + rewrite_archive_paths( + vault, + reconcile_scratch, + {old_prefix: new_prefix}, + frozen_dirs, + ) + dir_name = desired_dir_name + note_dir = new_archive + asset_dir = new_asset + else: + dir_name = desired_dir_name note_dir = vault / "archive" / "threads" / handle / dir_name asset_dir = vault / "assets" / "threads" / handle / dir_name + if note_dir.exists() or asset_dir.exists(): + raise SystemExit(f"destination occupied: {note_dir}") branch_names: dict[str, str] = {} for rid in roots: @@ -754,6 +780,361 @@ def emit_all( return len(dumps), skipped, written, errors +# --- reslug (one-time bulk title/path reconciliation) --- + + +@dataclass(frozen=True) +class ReslugMove: + """One paired archive/asset directory rename.""" + handle: str + old_dir_name: str + new_dir_name: str + archive_old: Path + archive_new: Path + asset_old: Path + asset_new: Path + + +@dataclass(frozen=True) +class ReslugConflict: + """One bulk preflight failure surfaced before any rename.""" + path: Path + reason: str + + +@dataclass(frozen=True) +class ReslugPlan: + """Small immutable one-time corpus repair plan.""" + vault: Path + moves: tuple[ReslugMove, ...] + noops: tuple[Path, ...] + frozen: tuple[Path, ...] + frozen_dirs: tuple[Path, ...] + conflicts: tuple[ReslugConflict, ...] + + @property + def can_apply(self) -> bool: + return not self.conflicts + + +_TITLE_LINE: re.Pattern[str] = re.compile(r"^title:\s*(.+?)\s*$") +_DATE_LINE: re.Pattern[str] = re.compile(r"^date:\s*(\d{4}-\d{2}-\d{2})\s*$") + + +def _yaml_scalar_value(raw: str) -> str: + """Decode a single-line YAML scalar that is either JSON-quoted or unquoted.""" + s = raw.strip() + if len(s) >= 2 and s.startswith('"') and s.endswith('"'): + body = s[1:-1] + body = body.replace("\\\\", "\x00").replace('\\"', '"').replace("\x00", "\\") + return body + return s + + +def _frontmatter_title_date(text: str) -> tuple[str, str] | None: + """Return (title, date) from an archive note's frontmatter or ``None`` when unparseable.""" + block = _frontmatter_block(text) + if not block: + return None + title: str | None = None + date_value: str | None = None + for line in block.splitlines(): + stripped = line.strip() + if title is None: + match = _TITLE_LINE.match(line) + if match: + title = _yaml_scalar_value(match.group(1)) + continue + if date_value is None: + match = _DATE_LINE.match(line) + if match: + date_value = match.group(1) + continue + if title is None or date_value is None: + return None + return title, date_value + + +_RESLUG_EXCLUDED_TOP_LEVEL: tuple[str, ...] = ( + ".git", + "site", + "assets", + "secrets", + "node_modules", +) + + +def plan_reslug(vault: Path, frozen_ids: set[str]) -> ReslugPlan: + """Build an immutable repair plan for ``archive/threads//`` directories.""" + moves: list[ReslugMove] = [] + noops: list[Path] = [] + frozen_entries: list[Path] = [] + frozen_dirs: list[Path] = [] + conflicts: list[ReslugConflict] = [] + + threads_root = vault / "archive" / "threads" + assets_root = vault / "assets" / "threads" + + if not threads_root.is_dir(): + return ReslugPlan(vault, (), (), (), (), ()) + + for handle_dir in sorted(threads_root.iterdir(), key=lambda p: p.name): + if not handle_dir.is_dir(): + continue + handle = handle_dir.name + for thread_dir in sorted(handle_dir.iterdir(), key=lambda p: p.name): + if not thread_dir.is_dir(): + continue + old_dir_name = thread_dir.name + index_path = thread_dir / "index.md" + asset_dir = assets_root / handle / old_dir_name + try: + if not index_path.is_file(): + conflicts.append( + ReslugConflict(thread_dir, "missing index.md") + ) + continue + try: + text = index_path.read_text(encoding="utf-8") + except OSError as exc: + conflicts.append( + ReslugConflict(index_path, f"unreadable frontmatter: {exc}") + ) + continue + parsed = _frontmatter_title_date(text) + if parsed is None: + conflicts.append( + ReslugConflict( + index_path, + "missing or malformed frontmatter title/date", + ) + ) + continue + title, date_value = parsed + if not asset_dir.is_dir(): + conflicts.append( + ReslugConflict( + index_path, + f"missing asset pair at {asset_dir}", + ) + ) + continue + thread_data = asset_dir / "thread_data.json" + media_json = asset_dir / "media.json" + if not thread_data.is_file(): + conflicts.append( + ReslugConflict(index_path, "missing thread_data.json") + ) + continue + if not media_json.is_file(): + conflicts.append( + ReslugConflict(index_path, "missing media.json") + ) + continue + try: + json.loads(thread_data.read_text(encoding="utf-8")) + except (OSError, ValueError) as exc: + conflicts.append( + ReslugConflict( + index_path, + f"invalid thread_data.json: {exc}", + ) + ) + continue + try: + json.loads(media_json.read_text(encoding="utf-8")) + except (OSError, ValueError) as exc: + conflicts.append( + ReslugConflict( + index_path, + f"invalid media.json: {exc}", + ) + ) + continue + expected = thread_dir_name(date_value, title, None) + match = frozen_match(asset_dir, frozen_ids) + if old_dir_name == expected: + noops.append(thread_dir) + if match is not None: + frozen_dirs.append(thread_dir) + continue + if match is not None: + frozen_entries.append(thread_dir) + frozen_dirs.append(thread_dir) + continue + new_archive = threads_root / handle / expected + new_asset = assets_root / handle / expected + if new_archive.exists(): + conflicts.append( + ReslugConflict( + thread_dir, + f"destination occupied: {new_archive}", + ) + ) + continue + if new_asset.exists(): + conflicts.append( + ReslugConflict( + thread_dir, + f"destination occupied: {new_asset}", + ) + ) + continue + moves.append( + ReslugMove( + handle=handle, + old_dir_name=old_dir_name, + new_dir_name=expected, + archive_old=thread_dir, + archive_new=new_archive, + asset_old=asset_dir, + asset_new=new_asset, + ) + ) + except OSError as exc: + conflicts.append( + ReslugConflict(thread_dir, f"filesystem error: {exc}") + ) + continue + + moves.sort(key=lambda m: str(m.archive_old)) + noops.sort(key=str) + frozen_entries.sort(key=str) + frozen_dirs.sort(key=str) + conflicts.sort(key=lambda c: str(c.path)) + return ReslugPlan( + vault, + tuple(moves), + tuple(noops), + tuple(frozen_entries), + tuple(frozen_dirs), + tuple(conflicts), + ) + + +def rename_thread_pair(move: ReslugMove) -> None: + """Validate, rename assets first, then archive; roll the asset back on archive failure.""" + if not move.archive_old.is_dir() or not move.asset_old.is_dir(): + raise RuntimeError(f"source pair missing: {move.archive_old}") + if move.archive_new.exists() or move.asset_new.exists(): + raise RuntimeError(f"destination occupied: {move.archive_new}") + move.asset_old.rename(move.asset_new) + try: + move.archive_old.rename(move.archive_new) + except OSError: + move.asset_new.rename(move.asset_old) + raise + + +def rewrite_archive_paths( + vault: Path, + scratch: Path, + replacements: dict[str, str], + frozen_dirs: tuple[Path, ...], +) -> tuple[Path, ...]: + """Recursively rewrite exact vault-root prefixes in mutable Markdown and Canvas files.""" + if not replacements: + return () + + keys = sorted(replacements.keys(), key=len, reverse=True) + pattern = re.compile("|".join(re.escape(key) for key in keys)) + + changed: list[Path] = [] + stage_dir = scratch / "reslug_text" + sequence = 0 + for path in sorted(vault.rglob("*")): + if not path.is_file(): + continue + if path.suffix.lower() not in (".md", ".canvas"): + continue + try: + rel_parts = path.relative_to(vault).parts + except ValueError: + continue + if rel_parts and rel_parts[0] in _RESLUG_EXCLUDED_TOP_LEVEL: + continue + skip = False + for frozen in frozen_dirs: + try: + path.relative_to(frozen) + skip = True + break + except ValueError: + continue + if skip: + continue + try: + text = path.read_text(encoding="utf-8") + except (OSError, UnicodeDecodeError): + continue + new_text = pattern.sub(lambda m: replacements[m.group(0)], text) + if new_text == text: + continue + stage_dir.mkdir(parents=True, exist_ok=True) + stage_path = stage_dir / f"{sequence}.tmp" + sequence += 1 + stage_path.write_text(new_text, encoding="utf-8", newline="\n") + os.replace(stage_path, path) + changed.append(path) + + try: + stage_dir.rmdir() + except OSError: + pass + + changed.sort(key=str) + return tuple(changed) + + +def apply_reslug_plan(plan: ReslugPlan, scratch: Path) -> tuple[Path, ...]: + """Run every rename, then recursively rewrite mutable paths; refuse on conflict.""" + if plan.conflicts: + reasons = ", ".join(c.reason for c in plan.conflicts) + raise RuntimeError( + f"reslug blocked by {len(plan.conflicts)} conflict(s): {reasons}" + ) + replacements: dict[str, str] = {} + for move in plan.moves: + rename_thread_pair(move) + old_prefix = f"archive/threads/{move.handle}/{move.old_dir_name}" + new_prefix = f"archive/threads/{move.handle}/{move.new_dir_name}" + replacements[old_prefix] = new_prefix + print(f"renamed -> {move.archive_new}") + rewritten = ( + rewrite_archive_paths( + plan.vault, + scratch, + replacements, + plan.frozen_dirs, + ) + if plan.moves + else () + ) + for path in rewritten: + print(f"rewrote -> {path}") + return rewritten + + +def format_reslug_plan(plan: ReslugPlan) -> str: + """Return a deterministic human-readable summary of a repair plan.""" + lines: list[str] = [] + for path in plan.noops: + lines.append(f"[noop] {path.as_posix()}") + for move in plan.moves: + lines.append( + f"[rename] {move.archive_old.as_posix()} -> {move.archive_new.as_posix()}" + ) + for path in plan.frozen: + lines.append(f"[frozen] {path.as_posix()}") + for conflict in plan.conflicts: + lines.append(f"[conflict] {conflict.path.as_posix()}: {conflict.reason}") + lines.append( + f"summary: moves={len(plan.moves)} noops={len(plan.noops)} " + f"frozen={len(plan.frozen)} conflicts={len(plan.conflicts)}" + ) + return "\n".join(lines) + "\n" + + def parse_args(argv: list[str] | None = None) -> argparse.Namespace: parser = argparse.ArgumentParser( description=( diff --git a/scripts/twitter/render.py b/scripts/twitter/render.py index ad03770..cd72b9a 100644 --- a/scripts/twitter/render.py +++ b/scripts/twitter/render.py @@ -29,8 +29,8 @@ def _first_line(text: str) -> str: return (text or "").split("\n", 1)[0].rstrip("\r") -def _title_text(text: str) -> str: - """Derive a title from the first line, truncating at the first sentence end (``. ``).""" +def title_text(text: str) -> str: + """Derive the rendered title from the first sentence of the first line.""" line = _first_line(text) idx = line.find(". ") if idx >= 0: @@ -149,7 +149,7 @@ def render_spine( first = ids[spine[0]] spine_handle = first.handle in_reply_to, parent = _foreign_parent(first, ids) - title = _title_text(first.text) + title = title_text(first.text) source_url = _status_url(first.handle, first.post_id) chunks = [ _frontmatter( @@ -211,7 +211,7 @@ def render_per_author_spine( "render_per_author_spine requires a non-empty author_posts list" ) first = author_posts[0] - title = _title_text(first.text) + title = title_text(first.text) source_url = _status_url(first.handle, first.post_id) chunks: list[str] = [ _frontmatter( @@ -260,7 +260,7 @@ def render_branch( """descendant_ids are posts after the root, in display order (tree.descendants).""" ids = by_id(thread) root = ids[branch_root_id] - title = _title_text(root.text) + title = title_text(root.text) source_url = _status_url(root.handle, root.post_id) chunks = [ _frontmatter( diff --git a/scripts/twitter/tests/test_emit_media.py b/scripts/twitter/tests/test_emit_media.py index 2f039d8..3427ffd 100644 --- a/scripts/twitter/tests/test_emit_media.py +++ b/scripts/twitter/tests/test_emit_media.py @@ -6,7 +6,7 @@ from pathlib import Path from twitter.emit_archive import missing_local_media, preserve_review_state from twitter.media_manifest import new_original_item -from twitter.render import render_media +from twitter.render import render_media, title_text class EmitMediaTests(unittest.TestCase): @@ -62,6 +62,13 @@ class EmitMediaTests(unittest.TestCase): ) self.assertEqual(missing_local_media([item]), ["100/AAA/orig"]) + def test_title_text_is_shared_by_frontmatter_and_slug(self) -> None: + self.assertEqual( + title_text("Root title. Extra first-line detail"), + "Root title.", + ) + self.assertEqual(title_text("One uninterrupted title"), "One uninterrupted title") + if __name__ == "__main__": unittest.main() \ No newline at end of file diff --git a/scripts/twitter/tests/test_emit_op_owned.py b/scripts/twitter/tests/test_emit_op_owned.py index 7e90bec..fbc23ba 100644 --- a/scripts/twitter/tests/test_emit_op_owned.py +++ b/scripts/twitter/tests/test_emit_op_owned.py @@ -13,6 +13,7 @@ import shutil import tempfile import unittest from pathlib import Path +from tempfile import TemporaryDirectory from twitter.emit_archive import emit from twitter.models import PostData, PostMetrics, ThreadData @@ -812,5 +813,388 @@ class TipIsOpTests(unittest.TestCase): self.assertEqual(spine, ["2000", "2001", "2002"]) +class ReslugReuseTests(unittest.TestCase): + """Compact same-handle integration tests for the emit-side rename flow. + + Each test pre-populates one or more archive/asset pairs under the + vault, invokes ``emit`` with explicit ``reconcile_scratch`` and + ``frozen_ids`` so nothing is written to the workspace scratch and + no frozen list is read from secrets. + """ + + HANDLE = "alice" + ROOT_ID = "1000" + TIMESTAMP = "2026-08-24 12:00:00" + ROOT_TEXT = "Root title. Extra first-line detail that should be dropped." + EXPECTED_CANONICAL = "2026-08-24-root-title" + + def setUp(self) -> None: + self.tmp = Path(tempfile.mkdtemp(prefix="reslug_reuse_")) + self.input_dir = self.tmp / "input" + self.input_dir.mkdir() + self.vault = self.tmp / "vault" + (self.vault / "archive" / "threads").mkdir(parents=True) + (self.vault / "assets" / "threads").mkdir(parents=True) + + def tearDown(self) -> None: + shutil.rmtree(self.tmp, ignore_errors=True) + + def _write_thread(self) -> None: + thread = { + "root_post_id": self.ROOT_ID, + "source_url": f"https://x.com/{self.HANDLE}/status/{self.ROOT_ID}", + "posts": [ + { + "post_id": self.ROOT_ID, + "author": self.HANDLE, + "handle": self.HANDLE, + "text": self.ROOT_TEXT, + "timestamp": self.TIMESTAMP, + "media_urls": [], + "reply_to_id": None, + "quote_of_id": None, + "metrics": { + "reply_count": 0, + "repost_count": 0, + "like_count": 0, + "view_count": 0, + }, + } + ], + } + (self.input_dir / "thread_data.json").write_text( + json.dumps(thread, indent=2), + encoding="utf-8", + newline="\n", + ) + + def _write_existing_pair( + self, + *, + dir_name: str, + post_id: str, + index_body: str = "", + editorial_tag: str | None = None, + draft: str = "true", + timestamp: str | None = None, + ) -> tuple[Path, Path]: + archive = self.vault / "archive" / "threads" / self.HANDLE / dir_name + asset = self.vault / "assets" / "threads" / self.HANDLE / dir_name + archive.mkdir(parents=True) + asset.mkdir(parents=True) + body_timestamp = timestamp or self.TIMESTAMP + date_value = body_timestamp[:10] + tags_lines = ( + "tags:\n" + " - archive\n" + " - twitter\n" + f" - {self.HANDLE}\n" + ) + if editorial_tag: + tags_lines += f" - {editorial_tag}\n" + (archive / "index.md").write_text( + "---\n" + 'title: "Old title."\n' + f"handle: {self.HANDLE}\n" + f'post_id: "{post_id}"\n' + f"date: {date_value}\n" + f"draft: {draft}\n" + f"{tags_lines}---\n\n{index_body}", + encoding="utf-8", + newline="\n", + ) + (asset / "thread_data.json").write_text( + json.dumps( + { + "root_post_id": post_id, + "source_url": f"https://x.com/{self.HANDLE}/status/{post_id}", + "posts": [ + { + "post_id": post_id, + "author": self.HANDLE, + "handle": self.HANDLE, + "text": "Old body.", + "timestamp": body_timestamp, + "media_urls": [], + "reply_to_id": None, + "quote_of_id": None, + "metrics": {}, + } + ], + }, + indent=2, + ), + encoding="utf-8", + newline="\n", + ) + (asset / "media.json").write_text( + json.dumps( + { + "schema_version": 2, + "root_post_id": post_id, + "items": [], + "mirrors": [], + }, + indent=2, + ), + encoding="utf-8", + newline="\n", + ) + return archive, asset + + def test_emit_renames_reused_pair_to_canonical_dir(self) -> None: + """Existing archive/asset pair found by post identity is renamed + to date + rendered-title canonical directory.""" + old_dir = "2026-08-24-stale-slug" + archive_old, asset_old = self._write_existing_pair( + dir_name=old_dir, + post_id=self.ROOT_ID, + ) + self._write_thread() + + with TemporaryDirectory() as scratch_raw: + emit( + input_dir=self.input_dir, + vault=self.vault, + slug=None, + archived="2026-08-24", + force=True, + reconcile_scratch=Path(scratch_raw), + frozen_ids=set(), + ) + + self.assertFalse(archive_old.exists()) + self.assertFalse(asset_old.exists()) + archive_new = ( + self.vault + / "archive" + / "threads" + / self.HANDLE + / self.EXPECTED_CANONICAL + ) + asset_new = ( + self.vault + / "assets" + / "threads" + / self.HANDLE + / self.EXPECTED_CANONICAL + ) + self.assertTrue(archive_new.is_dir()) + self.assertTrue(asset_new.is_dir()) + self.assertTrue((asset_new / "thread_data.json").is_file()) + self.assertTrue((asset_new / "media.json").is_file()) + self.assertTrue((archive_new / "index.md").is_file()) + + def test_emit_handle_index_links_to_new_path_after_rename(self) -> None: + """The handle index wikilink is updated from the old prefix to + the new canonical prefix after rename.""" + old_dir = "2026-08-24-stale-slug" + self._write_existing_pair( + dir_name=old_dir, + post_id=self.ROOT_ID, + ) + self._write_thread() + + with TemporaryDirectory() as scratch_raw: + emit( + input_dir=self.input_dir, + vault=self.vault, + slug=None, + archived="2026-08-24", + force=True, + reconcile_scratch=Path(scratch_raw), + frozen_ids=set(), + ) + + handle_index = self.vault / "archive" / "threads" / self.HANDLE / "index.md" + self.assertTrue(handle_index.is_file()) + text = handle_index.read_text(encoding="utf-8") + self.assertIn( + f"archive/threads/{self.HANDLE}/{self.EXPECTED_CANONICAL}", + text, + ) + self.assertNotIn(f"archive/threads/{self.HANDLE}/{old_dir}", text) + + def test_emit_preserves_draft_false_and_editorial_tags_across_rename(self) -> None: + """Existing ``draft: false`` and a non-mechanical editorial tag + survive the rename.""" + old_dir = "2026-08-24-stale-slug" + self._write_existing_pair( + dir_name=old_dir, + post_id=self.ROOT_ID, + editorial_tag="editorial", + draft="false", + ) + self._write_thread() + + with TemporaryDirectory() as scratch_raw: + emit( + input_dir=self.input_dir, + vault=self.vault, + slug=None, + archived="2026-08-24", + force=True, + reconcile_scratch=Path(scratch_raw), + frozen_ids=set(), + ) + + archive_new = ( + self.vault + / "archive" + / "threads" + / self.HANDLE + / self.EXPECTED_CANONICAL + ) + text = (archive_new / "index.md").read_text(encoding="utf-8") + self.assertIn("draft: false", text) + self.assertIn("- editorial", text) + + def test_emit_slug_override_uses_explicit_suffix(self) -> None: + """An explicit ``--slug`` override produces a ``date-manual-name`` + directory even when a reused old pair exists.""" + old_dir = "2026-08-24-stale-slug" + self._write_existing_pair( + dir_name=old_dir, + post_id=self.ROOT_ID, + ) + self._write_thread() + + with TemporaryDirectory() as scratch_raw: + emit( + input_dir=self.input_dir, + vault=self.vault, + slug="manual-name", + archived="2026-08-24", + force=True, + reconcile_scratch=Path(scratch_raw), + frozen_ids=set(), + ) + + expected = "2026-08-24-manual-name" + self.assertTrue( + (self.vault / "archive" / "threads" / self.HANDLE / expected).is_dir() + ) + self.assertTrue( + (self.vault / "assets" / "threads" / self.HANDLE / expected).is_dir() + ) + self.assertFalse( + (self.vault / "archive" / "threads" / self.HANDLE / old_dir).exists() + ) + + def test_emit_occupied_canonical_target_refuses_before_move(self) -> None: + """A new-thread emit whose desired canonical target is already + occupied by another pair must abort with ``SystemExit`` before any + write, with no ``-2`` suffix fallback.""" + canonical_archive, canonical_asset = self._write_existing_pair( + dir_name=self.EXPECTED_CANONICAL, + post_id="9999", + ) + self._write_thread() + + with TemporaryDirectory() as scratch_raw: + with self.assertRaisesRegex(SystemExit, "destination occupied"): + emit( + input_dir=self.input_dir, + vault=self.vault, + slug=None, + archived="2026-08-24", + force=True, + reconcile_scratch=Path(scratch_raw), + frozen_ids=set(), + ) + + self.assertFalse( + ( + self.vault + / "archive" + / "threads" + / self.HANDLE + / f"{self.EXPECTED_CANONICAL}-2" + ).exists() + ) + self.assertFalse( + ( + self.vault + / "assets" + / "threads" + / self.HANDLE + / f"{self.EXPECTED_CANONICAL}-2" + ).exists() + ) + self.assertTrue(canonical_archive.is_dir()) + self.assertTrue(canonical_asset.is_dir()) + + def test_emit_frozen_mismatch_refuses_before_move(self) -> None: + """A frozen mismatch on the existing asset dir must abort with + ``SystemExit`` before either directory is moved.""" + old_dir = "2026-08-24-stale-slug" + archive_old, asset_old = self._write_existing_pair( + dir_name=old_dir, + post_id=self.ROOT_ID, + ) + self._write_thread() + + with TemporaryDirectory() as scratch_raw: + with self.assertRaisesRegex(SystemExit, "frozen"): + emit( + input_dir=self.input_dir, + vault=self.vault, + slug=None, + archived="2026-08-24", + force=True, + reconcile_scratch=Path(scratch_raw), + frozen_ids={self.ROOT_ID}, + ) + + self.assertTrue(archive_old.is_dir()) + self.assertTrue(asset_old.is_dir()) + self.assertFalse( + ( + self.vault + / "archive" + / "threads" + / self.HANDLE + / self.EXPECTED_CANONICAL + ).exists() + ) + self.assertFalse( + ( + self.vault + / "assets" + / "threads" + / self.HANDLE + / self.EXPECTED_CANONICAL + ).exists() + ) + + def test_emit_matching_existing_name_emits_normally(self) -> None: + """If the existing reused pair already matches the desired name, + emit reuses it without rename and writes the fresh note + media.""" + archive_canonical, asset_canonical = self._write_existing_pair( + dir_name=self.EXPECTED_CANONICAL, + post_id=self.ROOT_ID, + ) + self._write_thread() + + with TemporaryDirectory() as scratch_raw: + emit( + input_dir=self.input_dir, + vault=self.vault, + slug=None, + archived="2026-08-24", + force=True, + reconcile_scratch=Path(scratch_raw), + frozen_ids=set(), + ) + + self.assertTrue(archive_canonical.is_dir()) + self.assertTrue(asset_canonical.is_dir()) + self.assertTrue((archive_canonical / "index.md").is_file()) + self.assertTrue((asset_canonical / "thread_data.json").is_file()) + handle_dir = self.vault / "archive" / "threads" / self.HANDLE + dirs = sorted(d.name for d in handle_dir.iterdir() if d.is_dir()) + self.assertEqual(dirs, [self.EXPECTED_CANONICAL]) + + if __name__ == "__main__": unittest.main() \ No newline at end of file diff --git a/scripts/twitter/tests/test_reslug.py b/scripts/twitter/tests/test_reslug.py new file mode 100644 index 0000000..24a67e2 --- /dev/null +++ b/scripts/twitter/tests/test_reslug.py @@ -0,0 +1,494 @@ +"""Focused tests for the one-time bulk thread-directory reslug plumbing. + +These tests exercise the small planning, pair-rename, recursive-rewrite, +apply, and format helpers added to ``emit_archive``. They use compact local +fixtures under a ``TemporaryDirectory`` and never touch the real vault. +""" + +from __future__ import annotations + +import ast +import json +import unittest +from pathlib import Path +from tempfile import TemporaryDirectory +from unittest.mock import patch + +from twitter.emit_archive import ( + ReslugConflict, + ReslugMove, + ReslugPlan, + apply_reslug_plan, + format_reslug_plan, + plan_reslug, + rename_thread_pair, + rewrite_archive_paths, +) + + +def _write_pair( + vault: Path, + *, + handle: str = "example", + directory: str = "2026-08-24-wrong", + title: str = "Canonical title.", + date: str = "2026-08-24", + post_id: str = "100", +) -> tuple[Path, Path]: + """Build a paired archive/asset directory with a thread_data + media json.""" + archive = vault / "archive" / "threads" / handle / directory + assets = vault / "assets" / "threads" / handle / directory + archive.mkdir(parents=True, exist_ok=True) + assets.mkdir(parents=True, exist_ok=True) + (archive / "index.md").write_text( + "---\n" + f"title: {json.dumps(title)}\n" + f"handle: {handle}\n" + f'post_id: "{post_id}"\n' + f"date: {date}\n" + "draft: true\n" + "tags:\n" + " - archive\n" + " - twitter\n" + f" - {handle}\n" + "---\n\n**1/**\n\nFixture body.\n", + encoding="utf-8", + newline="\n", + ) + (assets / "thread_data.json").write_text( + json.dumps( + { + "root_post_id": post_id, + "source_url": f"https://x.com/{handle}/status/{post_id}", + "posts": [ + { + "post_id": post_id, + "author": handle, + "handle": handle, + "text": title, + "timestamp": f"{date} 12:00:00", + "media_urls": [], + "reply_to_id": None, + "quote_of_id": None, + "metrics": {}, + } + ], + }, + indent=2, + ) + + "\n", + encoding="utf-8", + newline="\n", + ) + (assets / "media.json").write_text( + json.dumps( + { + "schema_version": 2, + "root_post_id": post_id, + "items": [], + "mirrors": [], + }, + indent=2, + ) + + "\n", + encoding="utf-8", + newline="\n", + ) + return archive, assets + + +class ReslugPlanTests(unittest.TestCase): + def test_plan_computes_expected_dir_from_frontmatter(self) -> None: + """Title/date frontmatter must yield the canonical dir name.""" + with TemporaryDirectory() as raw: + vault = Path(raw) / "vault" + _write_pair(vault) + plan = plan_reslug(vault, set()) + self.assertFalse(plan.conflicts) + self.assertEqual(len(plan.moves), 1) + self.assertEqual(plan.moves[0].new_dir_name, "2026-08-24-canonical-title") + self.assertEqual(plan.moves[0].old_dir_name, "2026-08-24-wrong") + self.assertEqual(plan.moves[0].handle, "example") + + def test_exact_match_is_noop(self) -> None: + """A directory whose name already matches must be reported as a no-op.""" + with TemporaryDirectory() as raw: + vault = Path(raw) / "vault" + _write_pair(vault, directory="2026-08-24-canonical-title") + plan = plan_reslug(vault, set()) + self.assertEqual(len(plan.noops), 1) + self.assertFalse(plan.moves) + self.assertFalse(plan.conflicts) + self.assertTrue(plan.can_apply) + + def test_occupied_destination_blocks_entire_plan(self) -> None: + """An occupied archive or asset destination must surface as a conflict.""" + with TemporaryDirectory() as raw: + vault = Path(raw) / "vault" + _write_pair(vault) + _write_pair(vault, directory="2026-08-24-canonical-title", post_id="200") + plan = plan_reslug(vault, set()) + self.assertTrue(plan.conflicts) + self.assertFalse(plan.can_apply) + self.assertFalse(plan.moves) + + def test_mismatched_frozen_pair_is_skipped_and_tracked(self) -> None: + """A mismatched frozen pair is skipped and its archive dir is excluded.""" + with TemporaryDirectory() as raw: + vault = Path(raw) / "vault" + _write_pair(vault, post_id="300") + plan = plan_reslug(vault, {"300"}) + self.assertEqual(len(plan.frozen), 1) + self.assertEqual(len(plan.frozen_dirs), 1) + self.assertFalse(plan.moves) + self.assertFalse(plan.conflicts) + self.assertTrue(plan.can_apply) + + def test_missing_asset_pair_becomes_conflict(self) -> None: + """An archive dir with no asset partner is a blocking conflict.""" + with TemporaryDirectory() as raw: + vault = Path(raw) / "vault" + archive = vault / "archive" / "threads" / "example" / "2026-08-24-wrong" + archive.mkdir(parents=True) + (archive / "index.md").write_text( + "---\n" + 'title: "Canonical title."\n' + 'handle: example\n' + 'post_id: "100"\n' + "date: 2026-08-24\n" + "draft: true\n" + "tags:\n" + " - archive\n" + "---\n\n**1/**\n\nFixture.\n", + encoding="utf-8", + newline="\n", + ) + plan = plan_reslug(vault, set()) + self.assertTrue(plan.conflicts) + self.assertFalse(plan.moves) + + +class ReslugRenameTests(unittest.TestCase): + def test_rename_moves_both_dirs(self) -> None: + """rename_thread_pair must move assets first and archive second.""" + with TemporaryDirectory() as raw: + vault = Path(raw) / "vault" + _write_pair(vault) + plan = plan_reslug(vault, set()) + move = plan.moves[0] + rename_thread_pair(move) + self.assertFalse(move.archive_old.exists()) + self.assertFalse(move.asset_old.exists()) + self.assertTrue(move.archive_new.is_dir()) + self.assertTrue(move.asset_new.is_dir()) + + def test_archive_failure_rolls_asset_back(self) -> None: + """An injected archive rename failure must move the asset back and re-raise.""" + with TemporaryDirectory() as raw: + vault = Path(raw) / "vault" + _write_pair(vault) + move = plan_reslug(vault, set()).moves[0] + original_rename = Path.rename + + def fail_archive(path: Path, destination: Path) -> Path: + if path == move.archive_old: + raise OSError("injected archive failure") + return original_rename(path, destination) + + with patch.object(Path, "rename", fail_archive): + with self.assertRaisesRegex(OSError, "injected"): + rename_thread_pair(move) + self.assertTrue(move.archive_old.is_dir()) + self.assertTrue(move.asset_old.is_dir()) + self.assertFalse(move.asset_new.exists()) + + +class ReslugRewriteTests(unittest.TestCase): + def test_recursive_rewrite_updates_markdown_canvas_and_branch_paths(self) -> None: + """Markdown and Canvas files inside and outside the thread dir must update.""" + with TemporaryDirectory() as raw: + root = Path(raw) + vault = root / "vault" + _write_pair(vault) + old = "archive/threads/example/2026-08-24-wrong" + new = "archive/threads/example/2026-08-24-canonical-title" + inbound = vault / "notes" / "inbound.md" + canvas = vault / "canvases" / "map.canvas" + inbound.parent.mkdir(parents=True) + canvas.parent.mkdir(parents=True) + inbound.write_text( + f"[[{old}/branch]] and [[{old}|alias]]\n", + encoding="utf-8", + ) + canvas.write_text( + json.dumps({"edges": [{"file": f"{old}/branch.md"}]}), + encoding="utf-8", + ) + archive_branch = vault / "archive" / "threads" / "example" / "2026-08-24-wrong" / "branch.md" + archive_branch.write_text(f"link: [[{old}/index]]\n", encoding="utf-8") + changed = rewrite_archive_paths(vault, root / "scratch", {old: new}, ()) + self.assertIn(new + "/branch", inbound.read_text(encoding="utf-8")) + self.assertIn(new + "/branch.md", canvas.read_text(encoding="utf-8")) + self.assertIn(new + "/index", archive_branch.read_text(encoding="utf-8")) + self.assertIn(canvas, changed) + self.assertIn(inbound, changed) + self.assertIn(archive_branch, changed) + + def test_replacement_is_one_pass_and_non_cascading(self) -> None: + """Both keys must be applied in one pass; longest key wins at overlap.""" + with TemporaryDirectory() as raw: + vault = Path(raw) / "vault" + inbound = vault / "notes" / "inbound.md" + inbound.parent.mkdir(parents=True) + inbound.write_text( + "[[archive/threads/example/old]] and [[archive/threads/example/old-x]]\n", + encoding="utf-8", + ) + rewrite_archive_paths( + vault, + Path(raw) / "scratch", + { + "archive/threads/example/old": "archive/threads/example/new", + "archive/threads/example/old-x": "archive/threads/example/new-x", + }, + (), + ) + self.assertEqual( + inbound.read_text(encoding="utf-8"), + "[[archive/threads/example/new]] and [[archive/threads/example/new-x]]\n", + ) + + def test_excluded_top_level_dirs_and_frozen_dirs_are_byte_identical(self) -> None: + """site/, assets/, secrets/, .git/, node_modules/, and frozen dirs must not change.""" + with TemporaryDirectory() as raw: + root = Path(raw) + vault = root / "vault" + _write_pair(vault) + old = "archive/threads/example/2026-08-24-wrong" + new = "archive/threads/example/2026-08-24-canonical-title" + frozen_archive, _ = _write_pair( + vault, + handle="frozen_author", + directory="2024-01-01-locked", + title="Locked title.", + date="2024-01-01", + post_id="999", + ) + frozen_index = frozen_archive / "index.md" + frozen_bytes = frozen_index.read_bytes() + for excluded in ("site", "assets", "secrets", "node_modules", ".git"): + excluded_dir = vault / excluded / "nested" + excluded_dir.mkdir(parents=True, exist_ok=True) + (excluded_dir / "note.md").write_text( + f"see {old} for context\n", + encoding="utf-8", + ) + rewrite_archive_paths( + vault, + root / "scratch", + {old: new}, + (frozen_archive,), + ) + self.assertEqual(frozen_index.read_bytes(), frozen_bytes) + for excluded in ("site", "assets", "secrets", "node_modules", ".git"): + txt = (vault / excluded / "nested" / "note.md").read_text(encoding="utf-8") + self.assertIn(old, txt) + self.assertNotIn(new, txt) + + +class ReslugApplyTests(unittest.TestCase): + def test_apply_refuses_conflicts_before_any_move(self) -> None: + """apply_reslug_plan must raise before touching disk when conflicts exist.""" + with TemporaryDirectory() as raw: + root = Path(raw) + vault = root / "vault" + old_archive, old_assets = _write_pair(vault) + _write_pair(vault, directory="2026-08-24-canonical-title", post_id="200") + plan = plan_reslug(vault, set()) + with self.assertRaisesRegex(RuntimeError, "conflict"): + apply_reslug_plan(plan, root / "scratch") + self.assertTrue(old_archive.is_dir()) + self.assertTrue(old_assets.is_dir()) + + def test_apply_moves_pairs_and_rewrites_inbound_links(self) -> None: + """apply_reslug_plan must move both dirs and rewrite inbound links.""" + with TemporaryDirectory() as raw: + root = Path(raw) + vault = root / "vault" + _write_pair(vault) + old = "archive/threads/example/2026-08-24-wrong" + new = "archive/threads/example/2026-08-24-canonical-title" + inbound = vault / "notes" / "inbound.md" + inbound.parent.mkdir(parents=True) + inbound.write_text(f"see [[{old}/index]]\n", encoding="utf-8") + plan = plan_reslug(vault, set()) + rewritten = apply_reslug_plan(plan, root / "scratch") + self.assertTrue((vault / "archive" / "threads" / "example" / "2026-08-24-canonical-title").is_dir()) + self.assertTrue((vault / "assets" / "threads" / "example" / "2026-08-24-canonical-title").is_dir()) + self.assertIn(new, inbound.read_text(encoding="utf-8")) + self.assertIn(inbound, rewritten) + + +class ReslugFormatTests(unittest.TestCase): + def test_format_output_is_deterministic_and_complete(self) -> None: + """format_reslug_plan must enumerate noop/rename/conflict lines plus counts deterministically.""" + with TemporaryDirectory() as raw: + vault = Path(raw) / "vault" + _write_pair(vault, directory="2026-08-24-canonical-title") + _write_pair( + vault, + handle="other", + directory="2024-01-01-old", + title="Other title.", + date="2024-01-01", + post_id="500", + ) + _write_pair( + vault, + handle="busy", + directory="2024-05-05-old", + title="Busy title.", + date="2024-05-05", + post_id="600", + ) + _write_pair( + vault, + handle="busy", + directory="2024-05-05-busy-title", + title="Busy title.", + date="2024-05-05", + post_id="700", + ) + plan = plan_reslug(vault, set()) + first = format_reslug_plan(plan) + second = format_reslug_plan(plan) + self.assertEqual(first, second, "format must be deterministic") + lines = first.splitlines() + noop_lines = [line for line in lines if line.startswith("[noop]")] + rename_lines = [line for line in lines if line.startswith("[rename]")] + conflict_lines = [line for line in lines if line.startswith("[conflict]")] + self.assertGreaterEqual(len(noop_lines), 1) + self.assertEqual(len(rename_lines), 1) + self.assertEqual(len(conflict_lines), 1) + noop_text = "\n".join(noop_lines) + self.assertIn( + "archive/threads/example/2026-08-24-canonical-title", + noop_text, + ) + self.assertIn("archive/threads/other/2024-01-01-old", rename_lines[0]) + self.assertIn( + "archive/threads/other/2024-01-01-other-title", + rename_lines[0], + ) + self.assertIn("->", rename_lines[0]) + self.assertIn("archive/threads/busy", conflict_lines[0]) + self.assertIn("2024-05-05-old", conflict_lines[0]) + self.assertTrue(lines[-1].startswith("summary: ")) + self.assertIn("moves=", lines[-1]) + self.assertIn("noops=", lines[-1]) + self.assertIn("conflicts=", lines[-1]) + self.assertTrue(first.endswith("\n")) + + +class ReslugModuleOrderTests(unittest.TestCase): + def test_reslug_definitions_appear_before_main_guard(self) -> None: + """The reslug block must sit above ``if __name__ == "__main__"``.""" + module_path = Path(__file__).resolve().parent.parent / "emit_archive.py" + tree = ast.parse(module_path.read_text(encoding="utf-8")) + names: set[str] = { + "ReslugMove", + "ReslugConflict", + "ReslugPlan", + "plan_reslug", + "format_reslug_plan", + "rename_thread_pair", + "rewrite_archive_paths", + "apply_reslug_plan", + } + main_line: int | None = None + for node in tree.body: + if not isinstance(node, ast.If): + continue + test = node.test + if ( + isinstance(test, ast.Compare) + and len(test.ops) == 1 + and isinstance(test.ops[0], ast.Eq) + and isinstance(test.left, ast.Name) + and test.left.id == "__name__" + ): + main_line = node.lineno + break + self.assertIsNotNone(main_line, "if __name__ == '__main__' block not found") + first_def_line: dict[str, int] = {} + for node in ast.walk(tree): + if isinstance( + node, (ast.FunctionDef, ast.AsyncFunctionDef, ast.ClassDef) + ) and node.name in names: + first_def_line.setdefault(node.name, node.lineno) + for name in sorted(names): + self.assertIn(name, first_def_line, f"{name} not defined in module") + self.assertLess( + first_def_line[name], + main_line, + f"{name} defined at line {first_def_line[name]} " + f"is after main guard at line {main_line}", + ) + + +class ReslugNoopRewriteTests(unittest.TestCase): + def test_nonfrozen_noop_is_not_frozen_and_links_still_rewrite(self) -> None: + """A canonical nonfrozen noop must NOT enter frozen_dirs and its links must still rewrite.""" + with TemporaryDirectory() as raw: + root = Path(raw) + vault = root / "vault" + # Thread A: nonfrozen mismatched -> rename + archive_a, _ = _write_pair( + vault, + handle="author_a", + directory="2024-01-01-old", + title="A title.", + date="2024-01-01", + post_id="111", + ) + # Thread B: canonical nonfrozen noop with a cross-thread link to A's old prefix + archive_b, _ = _write_pair( + vault, + handle="author_b", + directory="2024-02-02-b-title", + title="B title.", + date="2024-02-02", + post_id="222", + ) + (archive_b / "index.md").write_text( + "---\n" + 'title: "B title."\n' + "handle: author_b\n" + 'post_id: "222"\n' + "date: 2024-02-02\n" + "draft: true\n" + "tags:\n" + " - archive\n" + " - twitter\n" + " - author_b\n" + "---\n\n" + "See [[archive/threads/author_a/2024-01-01-old/index]] for context.\n", + encoding="utf-8", + newline="\n", + ) + plan = plan_reslug(vault, set()) + self.assertIn(archive_b, plan.noops) + self.assertNotIn(archive_b, plan.frozen_dirs) + self.assertNotIn(archive_b, plan.frozen) + rewritten = apply_reslug_plan(plan, root / "scratch") + new_text = (archive_b / "index.md").read_text(encoding="utf-8") + self.assertIn( + "[[archive/threads/author_a/2024-01-01-a-title/index]]", + new_text, + ) + self.assertNotIn("2024-01-01-old", new_text) + self.assertIn(archive_b / "index.md", rewritten) + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/twitter/tests/test_tw_media_commands.py b/scripts/twitter/tests/test_tw_media_commands.py index 7c45877..9893b68 100644 --- a/scripts/twitter/tests/test_tw_media_commands.py +++ b/scripts/twitter/tests/test_tw_media_commands.py @@ -11,6 +11,7 @@ from tempfile import TemporaryDirectory from unittest.mock import patch from twitter import tw as tw_module +from twitter.emit_archive import ReslugConflict, ReslugPlan from twitter.models import PostData, PostMetrics, ThreadData, load_thread from twitter.tw import ( _capture_ids, @@ -24,6 +25,7 @@ from twitter.tw import ( build_parser, cmd_add_branch, cmd_emit, + cmd_reslug, ) @@ -458,5 +460,91 @@ class TwMediaCommandTests(unittest.TestCase): self.assertTrue(args.confirm_origin_unavailable) +class ReslugCommandParserTests(unittest.TestCase): + def test_reslug_parser_dry_run_defaults(self) -> None: + args = build_parser().parse_args(["reslug", "--all"]) + self.assertEqual(args.cmd, "reslug") + self.assertTrue(args.all_threads) + self.assertFalse(args.apply) + + def test_reslug_parser_apply_flag(self) -> None: + args = build_parser().parse_args(["reslug", "--all", "--apply"]) + self.assertEqual(args.cmd, "reslug") + self.assertTrue(args.all_threads) + self.assertTrue(args.apply) + + +class ReslugCommandDispatchTests(unittest.TestCase): + def test_reslug_dry_run_does_not_apply(self) -> None: + plan = ReslugPlan( + vault=Path("/tmp"), + moves=(), + noops=(), + frozen=(), + frozen_dirs=(), + conflicts=(), + ) + with ( + patch.object(tw_module, "plan_reslug", return_value=plan) as plan_fn, + patch.object(tw_module, "format_reslug_plan", return_value="") as fmt, + patch.object(tw_module, "apply_reslug_plan") as apply, + redirect_stdout(StringIO()), + ): + result = cmd_reslug(Namespace(all_threads=True, apply=False)) + self.assertEqual(result, 0) + plan_fn.assert_called_once() + fmt.assert_called_once() + apply.assert_not_called() + + def test_reslug_conflicts_return_two_without_apply(self) -> None: + plan = ReslugPlan( + vault=Path("/tmp"), + moves=(), + noops=(), + frozen=(), + frozen_dirs=(), + conflicts=(ReslugConflict(Path("/tmp/x"), "bad"),), + ) + with ( + patch.object(tw_module, "plan_reslug", return_value=plan), + patch.object(tw_module, "format_reslug_plan", return_value=""), + patch.object(tw_module, "apply_reslug_plan") as apply, + redirect_stdout(StringIO()), + ): + result = cmd_reslug(Namespace(all_threads=True, apply=False)) + self.assertEqual(result, 2) + apply.assert_not_called() + + def test_reslug_clean_apply_calls_apply_once_with_plan_and_scratch(self) -> None: + plan = ReslugPlan( + vault=Path("/tmp"), + moves=(), + noops=(), + frozen=(), + frozen_dirs=(), + conflicts=(), + ) + with ( + patch.object(tw_module, "plan_reslug", return_value=plan), + patch.object(tw_module, "format_reslug_plan", return_value=""), + patch.object(tw_module, "apply_reslug_plan", return_value=()) as apply, + redirect_stdout(StringIO()), + ): + result = cmd_reslug(Namespace(all_threads=True, apply=True)) + self.assertEqual(result, 0) + apply.assert_called_once() + positional = apply.call_args.args + self.assertEqual(positional[0], plan) + self.assertEqual(positional[1], tw_module.SCRATCH) + + +class ReslugParserNoCrossContaminationTests(unittest.TestCase): + def test_emit_and_refresh_parser_have_no_reslug_attr(self) -> None: + emit_args = build_parser().parse_args(["emit", "--id", "100"]) + refresh_args = build_parser().parse_args(["refresh", "--id", "100"]) + self.assertFalse(hasattr(emit_args, "reslug")) + self.assertFalse(hasattr(refresh_args, "reslug")) + + if __name__ == "__main__": unittest.main() diff --git a/scripts/twitter/tw.py b/scripts/twitter/tw.py index 33d4c75..5ec5813 100644 --- a/scripts/twitter/tw.py +++ b/scripts/twitter/tw.py @@ -36,6 +36,7 @@ try: from frozen import frozen_match, load_frozen_ids, require_writable from backup_assets import backup_thread, load_destination_root from catbox_client import load_userhash, upload_file + from emit_archive import apply_reslug_plan, format_reslug_plan, plan_reslug from fallback_media import activate_fallback, find_existing_fallback, restore_origin from media_audit import audit_thread from media_migrate import migrate_legacy_thread @@ -43,6 +44,7 @@ except ImportError: # pragma: no cover - script-mode import from frozen import frozen_match, load_frozen_ids, require_writable from backup_assets import backup_thread, load_destination_root from catbox_client import load_userhash, upload_file + from emit_archive import apply_reslug_plan, format_reslug_plan, plan_reslug from fallback_media import activate_fallback, find_existing_fallback, restore_origin from media_audit import audit_thread from media_migrate import migrate_legacy_thread @@ -809,6 +811,19 @@ def cmd_restore_origin(args: argparse.Namespace) -> int: return 0 +def cmd_reslug(args: argparse.Namespace) -> int: + """Audit or apply the one-time corpus-wide thread-directory rename.""" + plan = plan_reslug(VAULT, load_frozen_ids(FROZEN)) + print(format_reslug_plan(plan), end="") + if plan.conflicts: + return 2 + if not args.apply: + print("dry-run: explicit --apply required to write") + return 0 + apply_reslug_plan(plan, SCRATCH) + return 0 + + def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser(description=__doc__) sub = parser.add_subparsers(dest="cmd", required=True) @@ -907,6 +922,13 @@ def build_parser() -> argparse.ArgumentParser: help="capture this reply node's visible subtree; repeatable", ) + reslug = sub.add_parser( + "reslug", + help="audit or apply canonical thread directory names", + ) + reslug.add_argument("--all", dest="all_threads", action="store_true", required=True) + reslug.add_argument("--apply", action="store_true") + return parser @@ -927,6 +949,7 @@ _COMMANDS: dict[str, Callable[[argparse.Namespace], int]] = { "backup": cmd_backup, "fallback": cmd_fallback, "restore-origin": cmd_restore_origin, + "reslug": cmd_reslug, }