From e1b6578b2ada560a779317c26381f52109bfc791 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=AA=E3=82=AD=E8=90=8C?= Date: Sun, 24 Aug 2025 13:18:51 +0200 Subject: [PATCH] add a tagging system to the website --- .ignore | 3 + Cargo.lock | 329 ------------------ Cargo.toml | 5 +- content/_treehouse/404.dj | 11 + content/about/v2.tree | 4 +- content/code-blocks.dj | 2 + content/design/animations.tree | 8 +- content/design/digital-textures.tree | 4 +- content/design/for-the-free-soul.tree | 6 +- content/design/freehouse.tree | 4 +- content/design/sidebars.tree | 4 +- content/design/touch-panels.tree | 10 +- content/doc.dj | 14 + content/fmt.dj | 2 + content/furry.dj | 2 + content/furry/v1.tree | 8 +- content/games/minecraft-zen.tree | 34 +- content/h.dj | 2 + content/index.dj | 2 +- content/music/a-moon-shaped-pool.tree | 4 +- content/music/blue-calx.tree | 4 +- content/music/brainz.tree | 4 +- content/music/creatures.tree | 4 +- content/music/dubio.tree | 4 +- content/music/flacks.tree | 6 +- content/music/i-dont-love-me-anymore.tree | 6 +- content/music/map-of-what-is-effortless.tree | 4 +- content/music/ok-computer.tree | 4 +- content/music/syro.tree | 4 +- content/music/tilt-shift-ablaze.tree | 4 +- content/philosophy/fear-of-the-unknown.tree | 4 +- content/philosophy/hedonic-treadmill.tree | 4 +- content/philosophy/i-build-things.tree | 4 +- .../philosophy/in-wisdom-you-become-old.tree | 4 +- content/philosophy/light-streaks.tree | 4 +- content/philosophy/nicknames.tree | 6 +- content/philosophy/responsibility.tree | 8 +- content/philosophy/riki.tree | 4 +- content/philosophy/shut-up.tree | 4 +- content/programming/aoc.tree | 6 +- content/programming/buildsome.tree | 34 +- content/programming/cstring-starts-with.tree | 4 +- content/programming/cxx-without-classes.tree | 4 +- .../cxx/access-modifiers-as-labels.tree | 4 +- .../cxx/shared-unique-ptr-deleter.tree | 4 +- content/programming/haku.tree | 26 +- content/programming/javascript.tree | 4 +- content/programming/lua.tree | 4 +- content/programming/lua/classes.dj | 2 + content/programming/lua/classes.tree | 6 +- content/programming/lvalues.tree | 4 +- content/programming/new-tab.tree | 6 +- content/programming/or-types.tree | 4 +- content/programming/systems.tree | 4 +- content/programming/tairu.tree | 20 +- content/programming/vfs.tree | 22 +- content/requiem.dj | 2 + content/tag/c.dj | 7 + content/tag/cxx.dj | 24 ++ content/tag/design.dj | 52 +++ content/tag/games.dj | 16 + content/tag/graphics.dj | 8 + content/tag/javascript.dj | 26 ++ content/tag/lua.dj | 21 ++ content/tag/meow.dj | 10 + content/tag/music.dj | 28 ++ content/tag/plt.dj | 21 ++ content/tag/programming.dj | 74 ++++ content/tag/shower.dj | 19 + content/tag/treehouse.dj | 8 + content/treehouse/cmd.dj | 20 ++ content/treehouse/cmd.tree | 2 +- content/treehouse/new.tree | 5 +- src/doc.rs | 138 ++++++++ src/feed.rs | 59 ++++ src/generate.rs | 20 +- src/generate/atom.rs | 166 +++------ src/generate/doc.rs | 146 ++------ src/history.rs | 106 ------ src/lib.rs | 4 +- src/paths.rs | 0 src/sources.rs | 52 ++- src/state.rs | 14 +- src/tree.rs | 7 +- src/tree/attributes.rs | 30 +- src/tree/feed.rs | 94 ----- src/vfs/content_cache.rs | 2 +- src/vfs/path.rs | 10 +- static/css/doc.css | 9 +- static/css/main.css | 39 +-- static/js/command-line.js | 10 - template/_doc.hbs | 1 - template/_feed_atom.hbs | 30 +- template/components/_doc.hbs | 8 + template/components/_feed.hbs | 4 +- template/components/_head.hbs | 4 +- treehouse.toml | 6 +- 97 files changed, 1025 insertions(+), 979 deletions(-) create mode 100644 .ignore create mode 100644 content/_treehouse/404.dj create mode 100644 content/doc.dj create mode 100644 content/tag/c.dj create mode 100644 content/tag/cxx.dj create mode 100644 content/tag/design.dj create mode 100644 content/tag/games.dj create mode 100644 content/tag/graphics.dj create mode 100644 content/tag/javascript.dj create mode 100644 content/tag/lua.dj create mode 100644 content/tag/meow.dj create mode 100644 content/tag/music.dj create mode 100644 content/tag/plt.dj create mode 100644 content/tag/programming.dj create mode 100644 content/tag/shower.dj create mode 100644 content/tag/treehouse.dj create mode 100644 content/treehouse/cmd.dj create mode 100644 src/doc.rs create mode 100644 src/feed.rs delete mode 100644 src/history.rs delete mode 100644 src/paths.rs delete mode 100644 src/tree/feed.rs diff --git a/.ignore b/.ignore new file mode 100644 index 0000000..36923d2 --- /dev/null +++ b/.ignore @@ -0,0 +1,3 @@ +*.png +*.jpg +*.webp diff --git a/Cargo.lock b/Cargo.lock index e89722b..2fc72a7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -540,17 +540,6 @@ dependencies = [ "crypto-common", ] -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "either" version = "1.13.0" @@ -684,19 +673,6 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" -[[package]] -name = "git2" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b903b73e45dc0c6c596f2d37eccece7c1c8bb6e4407b001096387c63d0d93724" -dependencies = [ - "bitflags 2.6.0", - "libc", - "libgit2-sys", - "log", - "url", -] - [[package]] name = "glob" version = "0.3.2" @@ -855,145 +831,6 @@ dependencies = [ "cc", ] -[[package]] -name = "icu_collections" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locid" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" - -[[package]] -name = "icu_normalizer" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "utf16_iter", - "utf8_iter", - "write16", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" - -[[package]] -name = "icu_properties" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_locid_transform", - "icu_properties_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" - -[[package]] -name = "icu_provider" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_provider_macros", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "idna" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - [[package]] name = "image" version = "0.25.5" @@ -1134,18 +971,6 @@ dependencies = [ "cc", ] -[[package]] -name = "libgit2-sys" -version = "0.17.0+1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10472326a8a6477c3c20a64547b0059e4b0d086869eee31e6d7da728a8eb7224" -dependencies = [ - "cc", - "libc", - "libz-sys", - "pkg-config", -] - [[package]] name = "libwebp-sys" version = "0.9.6" @@ -1156,24 +981,6 @@ dependencies = [ "glob", ] -[[package]] -name = "libz-sys" -version = "1.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "litemap" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" - [[package]] name = "lock_api" version = "0.4.12" @@ -1851,12 +1658,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - [[package]] name = "strsim" version = "0.11.1" @@ -1886,17 +1687,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -[[package]] -name = "synstructure" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "system-deps" version = "6.2.2" @@ -1986,16 +1776,6 @@ dependencies = [ "weezl", ] -[[package]] -name = "tinystr" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" -dependencies = [ - "displaydoc", - "zerovec", -] - [[package]] name = "tokio" version = "1.41.1" @@ -2186,7 +1966,6 @@ dependencies = [ "clap", "codespan-reporting", "dashmap", - "git2", "handlebars", "image", "indexmap", @@ -2242,29 +2021,6 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" -[[package]] -name = "url" -version = "2.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - [[package]] name = "utf8parse" version = "0.2.2" @@ -2288,12 +2044,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version-compare" version = "0.2.0" @@ -2533,48 +2283,12 @@ dependencies = [ "memchr", ] -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - -[[package]] -name = "writeable" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" - [[package]] name = "xmlparser" version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" -[[package]] -name = "yoke" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - [[package]] name = "zerocopy" version = "0.7.35" @@ -2596,49 +2310,6 @@ dependencies = [ "syn", ] -[[package]] -name = "zerofrom" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "zerovec" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "zune-core" version = "0.4.12" diff --git a/Cargo.toml b/Cargo.toml index 97f0b1b..bb379f1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "treehouse" version = "0.1.0" -edition = "2021" +edition = "2024" [dependencies] anyhow = "1.0.75" @@ -13,7 +13,6 @@ chrono = { version = "0.4.35", features = ["serde"] } clap = { version = "4.3.22", features = ["derive"] } codespan-reporting = "0.11.1" dashmap = "6.1.0" -git2 = { version = "0.19.0", default-features = false, features = ["vendored-libgit2"] } handlebars = "4.3.7" image = "0.25.5" indexmap = { version = "2.2.6", features = ["serde"] } @@ -31,7 +30,7 @@ tracing-chrome = "0.7.2" tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } ulid = "1.0.0" webp = "0.3.0" -xmlparser = "0.13.6" +xmlparser = "0.13.6" # for parsing SVG [profile.dev] package.webp.opt-level = 3 diff --git a/content/_treehouse/404.dj b/content/_treehouse/404.dj new file mode 100644 index 0000000..861ef4e --- /dev/null +++ b/content/_treehouse/404.dj @@ -0,0 +1,11 @@ +title = "404" + ++++ + +Seems like what you're looking for isn't here.\ +Perhaps you pasted in an invalid URL, perhaps it has been removed.\ +Perhaps it was never written in the first place. + +Care to [go back to the index][page:index]? + +~Please feel free to report this if you think you've found a bug.~ diff --git a/content/about/v2.tree b/content/about/v2.tree index f943e3b..01c486e 100644 --- a/content/about/v2.tree +++ b/content/about/v2.tree @@ -1,5 +1,7 @@ -%% title = "who that! (about me)" +%% id = "b?01J0KRPMV7SS48B64BFCJZK7VQ" +title = "who that! (about me)" visibility = "Private" +tags = ["all", "meow"] % id = "01J09B2BZXJ989S2SGWBNZ397C" + my name's *riki!* diff --git a/content/code-blocks.dj b/content/code-blocks.dj index ec4f93a..8df125e 100644 --- a/content/code-blocks.dj +++ b/content/code-blocks.dj @@ -1,4 +1,6 @@ title = "Iterating on design for code blocks" +id = "b?01K39ZH9DSF8Q13V47V42HNM3B" +tags = ["all", "design"] +++ diff --git a/content/design/animations.tree b/content/design/animations.tree index 668616a..e5e1049 100644 --- a/content/design/animations.tree +++ b/content/design/animations.tree @@ -1,4 +1,6 @@ -%% title = "animations & perception of sluggishness" +%% id = "b?01JEPCD4EPZJ2ACJX9J15ZBFSG" +title = "animations & perception of sluggishness" +tags = ["all", "design"] % id = "01JEPBVCJXC6NBJZ90JBHNYKGR" - there's a thing I always do with my computing devices: I make the animations faster than default. @@ -8,7 +10,7 @@ I have my Transition animation, Window animation, and Animator duration scales set to .5x. % id = "01JEPBVCJXMC2Q0ZDE64YT991T" - + on GNOME, you can do that by installing [Just Perfection](https://extensions.gnome.org/extension/3843/just-perfection/). + + on GNOME, you can do that by installing [Just Perfection](https://extensions.gnome.org/extension/3843/just-perfection/). % id = "01JEPBVCJXYWY1Q5372NBJREXD" - here's where in the config panel you can find the relevant setting, as of writing this: @@ -46,7 +48,7 @@ I can move my mouse around quite quickly, and the quicker something appears in m % id = "01JEPBVCJXJ87A3KDJM4MK2JJ7" - looking at the statistics they managed to collect, I score pretty well in terms of reaction time, and pretty average in terms of aiming speed. - + % id = "01JEPBVCJXJTZYE51PVYEDG0DV" - take these with a grain of salt though, because they do not correlate these stats with anything (e.g. demographics), and the aim trainer is apparently "new." diff --git a/content/design/digital-textures.tree b/content/design/digital-textures.tree index 28704b9..cec7279 100644 --- a/content/design/digital-textures.tree +++ b/content/design/digital-textures.tree @@ -1,4 +1,6 @@ -%% title = "on digital textures" +%% id = "b?01HQ8KV8T8GRCVFDJ3EP6QE163" +title = "on digital textures" +tags = ["all", "design"] % id = "01HQ8JHZ5NP1K7PHW4MJQS65ND" - this is not about textures in the graphics programming sort of way. this is about textures in the _you can feel it under your fingers_ way diff --git a/content/design/for-the-free-soul.tree b/content/design/for-the-free-soul.tree index 67c4814..d02e9cb 100644 --- a/content/design/for-the-free-soul.tree +++ b/content/design/for-the-free-soul.tree @@ -1,4 +1,6 @@ -%% title = "design for the free soul" +%% id = "b?01JG6Y6JNRQA4SSK3TEZ0RRTEB" +title = "design for the free soul" +tags = ["all", "design", "shower"] % id = "01JG6Y2YWD4JF34E64W1GK583J" - as I'm writing this, I'm sitting in the passenger seat of a car, with my girlfriend driving us home. @@ -10,7 +12,7 @@ % id = "01JG6Y2YWDWR5A66J4JD4WV1J1" - a thought surfaces in my head... "_this car is built like a frickin' Evangelion._" - + % id = "01JG6Y2YWDPANQNMJ749RSN0YE" - armoured to shield you from the elements, protect you from crashes, and provide a comfortable driving experience. diff --git a/content/design/freehouse.tree b/content/design/freehouse.tree index 716a1aa..5eec38a 100644 --- a/content/design/freehouse.tree +++ b/content/design/freehouse.tree @@ -1,4 +1,6 @@ -%% title = "idea: freeing the hobby corners" +%% id = "b?01JHGYTZN196N51ZBS4MZGHJ73" +title = "idea: freeing the hobby corners" +tags = ["all", "design", "treehouse"] % id = "01JHGX51XQMBYYQ5VCV427N169" - also known as, _freehouse_. diff --git a/content/design/sidebars.tree b/content/design/sidebars.tree index 9d5511c..219a224 100644 --- a/content/design/sidebars.tree +++ b/content/design/sidebars.tree @@ -1,4 +1,6 @@ -%% title = "maybe don't use sidebars on your website" +%% id = "b?01HR9ZTS8RS4VJNJYSNRQYSKHZ" +title = "maybe don't use sidebars on your website" +tags = ["all", "design"] % id = "01HR9ZTS6PHTK6VRBF7S0M6MZ7" - imagine if this page had a distracting bunch of text to the right of regular content. or even worse, advertisements. diff --git a/content/design/touch-panels.tree b/content/design/touch-panels.tree index b40567d..6f8f34e 100644 --- a/content/design/touch-panels.tree +++ b/content/design/touch-panels.tree @@ -1,4 +1,6 @@ -%% title = "touch panels" +%% id = "b?01JE75N3B0Y9H53TMJJV7MJY9V" +title = "touch panels" +tags = ["all", "design"] % id = "01JE246DXAKY4V4S49576JG0P9" - 2024\. it seems like you can't go on without devices that have capacitive touch panels. @@ -63,7 +65,7 @@ % id = "01JE246DXAETP3Z6G2K31QD1XG" - instead of something obvious, here's what happens: - + % id = "01JE246DXAZ1DC9PCCX2ESRCVZ" - _when the time left is `0:00` (or when the timer's unset)_, pushing `+` sets the timer to `10:00`, _but_ you can also push `-` to set the timer to `5:00`. @@ -83,7 +85,7 @@ % id = "01JE246DXA13DS8VSC73B64RYN" + at best I need 30 seconds, but that is still very sporadic... - + % id = "01JE246DXAQKRC5Q0SD0HTSTAP" - [sencha][] leaves can be infused up to about three times before the taste starts to diminish. my first brew is 1 minute, the second is 1 minute 30 seconds, and the third is 2 minutes. @@ -152,7 +154,7 @@ % id = "01JE27CBDAWT5RBPVCHWTR30CA" - now this one I totally get why it _should_ be a touch panel---which doesn't make it any less annoying, but yeah. - + % id = "01JE27CBDA8X2FW6CG59WNJXQM" - UX-wise it's much better to be able to place your cutting board on any part of the surface, _provided it's dry of course_, than having to avoid any buttons annoyingly protruding out its top. diff --git a/content/doc.dj b/content/doc.dj new file mode 100644 index 0000000..52c09e8 --- /dev/null +++ b/content/doc.dj @@ -0,0 +1,14 @@ +title = "Document ID" +id = "doc?2025-08-24-doc" + ++++ + +If you've stumbled upon this page, this means you followed the URL stored in the `` field inside an Atom feed ``. + +I can't blame you. +It _is_ a URL after all. + +But the post you're looking for isn't here, as the `https://liquidex.house/doc` namespace is reserved for document IDs, and does not resolve to actual documents. +If your feed reader led you here, it is broken, because ``s are *not meant to be followed.* + +To read a post, follow the `` link instead! diff --git a/content/fmt.dj b/content/fmt.dj index c11a0a4..76cc6ae 100644 --- a/content/fmt.dj +++ b/content/fmt.dj @@ -1,4 +1,6 @@ title = "A string formatting library in 65 lines of C++" +id = "b?01K39HT2MW0JWTP5MNH1CHGV2Y" +tags = ["all", "programming", "cxx"] +++ diff --git a/content/furry.dj b/content/furry.dj index ccc76b3..2aca585 100644 --- a/content/furry.dj +++ b/content/furry.dj @@ -1,4 +1,6 @@ title = "furry! —w—" +id = "b?01K05F3E3DN1PY9ZWN98ZE5HVV" +tags = ["all", "shower"] +++ diff --git a/content/furry/v1.tree b/content/furry/v1.tree index 31b5e1e..03c551c 100644 --- a/content/furry/v1.tree +++ b/content/furry/v1.tree @@ -1,4 +1,6 @@ -%% title = "furry! —w—" +%% id = "b?01JCGVBXW42S8G91SGAKYCQZE1" +title = "furry! —w—" +tags = ["all", "shower"] % id = "01JCGVBXW35X3965J2MJQH1AFY" - I like fur! @@ -78,7 +80,7 @@ it's really pleasant to the touch. % id = "01JCGVBXW3GB041DMXFCWGQK23" - but the customisation options are just so boooring! everybody looks pretty much the same. - + % id = "01JCGVBXW3XQJBGZEJXSW7SET1" + you get to customise your shape and color of your hair, but not the size and placement of your ears, or the level and color of your floof? @@ -127,7 +129,7 @@ it's really pleasant to the touch. % id = "01JCGVBXW3JBY0MSFMKYF2H2WQ" - why _of course_ furries are not harmful you dumbass! what even made you think that? - + % id = "01JCGVBXW3XMBF58FSAX1BH6TB" - maybe it's time to swim out of there before the pressure crushes you? diff --git a/content/games/minecraft-zen.tree b/content/games/minecraft-zen.tree index 8062476..c1c4dd3 100644 --- a/content/games/minecraft-zen.tree +++ b/content/games/minecraft-zen.tree @@ -1,4 +1,6 @@ -%% title = "reflections on Minecraft" +%% id = "b?01JGSNTVGFX416HFWKFYKR9HZM" +title = "reflections on Minecraft" +tags = ["all", "games"] % id = "01JGRJPSTR8SPPTVCGCP26YGF7" - Minecraft has been with me for around 14 years by now; a majority of my life! I first started playing around beta `1.3_01`. @@ -91,7 +93,7 @@ % id = "01JGSC4K515MSY1K9Z2AJXNJER" - I mean, coming across 3 End Portals and seeing the portal room is glitched is kind of funny, but... - + it also feels like a bit of an ass move once you know the full story, doesn't it. % id = "01JGRJPSTRNMYAKWT96Q2N2JCM" @@ -231,7 +233,7 @@ % id = "01JGSA36C2RPJ1HYF8RTF2M5N4" - there needs to be a non-tool item next to the axe, so that you can break leaves without using up your axe's durability. that's food, because hunger in this game is a bitch. - + % id = "01JGSMFMQVCF8FHMX18DQG22R4" - I opted for items on _both_ sides, because I like the fact that I can scroll either up _or_ down to put away my axe, and it works equally well. @@ -389,7 +391,7 @@ % id = "01JGRNC1F4946XGCASYXSNVC4M" - #### graffiti (31 December) - + on New Year's Eve, we built _this_ with [ezioleq][def:person/ezioleq]: ![the boykisser on a map][pic:01JGRW9M3E0YNBY0SN6YT1PN0N] @@ -416,30 +418,30 @@ ![][pic:01JGSDKAQ870V71XV9SSNE50R8] obviously, there's one in my bedroom. - + ![][pic:01JGSDKWCET10GM0FD5M751VRH] there's one on the train station... the sign reads "SOUTH CENTRE." - + ![][pic:01JGSDMD581MF4MRTAWG376FGY] on the tree in the town square. - + ![][pic:01JGSDN6XF8QWGEKSR4A944SXK] on the ceiling in Olek's bedroom. - + ![][pic:01JGSDNRT56D1AC8W4CKT5HDFP] in a friend's house. though, it seems like his is Australian. - + ![][pic:01JGSDP9RBJ6B47TVGGBKPB306] in someone's house. must be Australian too. - + ![][pic:01JGSDPTY3Z0HW5V9DQNDWQR1W] in another someone's house. - + ![][pic:01JGSDR74AQ4MKGC5J23KVTT9C] in the walls of the [gord](https://en.wikipedia.org/wiki/Gord_%28archaeology%29) at the spawn. - + ![][pic:01JGSDRMYSBRZMAMHBAJ2QV4N0] and on my treehouse, of course. @@ -447,13 +449,13 @@ % id = "01JGRNC1F44MMXE1ZP8X1C7HPJ" - #### billboard (2 January) - + the last thing I built was this. ![a huge billboard over the whole town saying COMES][pic:01JGRXJWQH689TJ4HXT00TTJ6G] whoever knows what this is a reference to, congratulations! - + myself, I hold no regrets. % id = "01JGRNC1F479Y7MNFR41ESGG7J" @@ -502,9 +504,9 @@ - ![a powered rail loop connected to an upwards slope, with a lever that opens the loop. there are a bunch of signs around it.][pic:01JGSFCQBDN6V47SE8SC7WRMAN] > POLISH BRANCH of CERN - accelerator - + > PARTICLE ACCELERATOR - + > HADRON COLLIDER > ACCELERATION DOESN'T KILL YOU\ diff --git a/content/h.dj b/content/h.dj index ec530d3..6f0c3c0 100644 --- a/content/h.dj +++ b/content/h.dj @@ -1,4 +1,6 @@ title = "header files are cool, actually" +id = "b?01K1Y3G5N1KGCN1E9B36QTYMSZ" +tags = ["all", "programming", "c", "cxx"] +++ diff --git a/content/index.dj b/content/index.dj index 0c8120f..45f389d 100644 --- a/content/index.dj +++ b/content/index.dj @@ -1,5 +1,5 @@ title = "riki's house" -include_feed = { name = "new", title = "Blog" } +include_feed = { tag = "all", title = "Blog" } +++ diff --git a/content/music/a-moon-shaped-pool.tree b/content/music/a-moon-shaped-pool.tree index 5a386d5..90f3ffe 100644 --- a/content/music/a-moon-shaped-pool.tree +++ b/content/music/a-moon-shaped-pool.tree @@ -1,4 +1,6 @@ -%% title = "Radiohead - A Moon Shaped Pool" +%% id = "b?01H9JB094CHQHEYEBKBCHFFCKG" +title = "Radiohead - A Moon Shaped Pool" +tags = ["all", "music"] % id = "01H9JB094C60Q6DR1E7SME7Y0N" - buy: [Bandcamp](https://radiohead.bandcamp.com/album/a-moon-shaped-pool) diff --git a/content/music/blue-calx.tree b/content/music/blue-calx.tree index d715550..e07c37d 100644 --- a/content/music/blue-calx.tree +++ b/content/music/blue-calx.tree @@ -1,4 +1,6 @@ -%% title = "Aphex Twin - Blue Calx" +%% id = "b?01JCY18RY6D3CXHQ0JQ56BZH60" +title = "Aphex Twin - Blue Calx" +tags = ["all", "music"] % id = "01JCY18RY6T32XGTM21T6581Z5" - overcoming [fear of the unknown][page:philosophy/fear-of-the-unknown], episode 1. diff --git a/content/music/brainz.tree b/content/music/brainz.tree index ef7efce..a819fba 100644 --- a/content/music/brainz.tree +++ b/content/music/brainz.tree @@ -1,4 +1,6 @@ -%% title = "the ListenBrainz data set" +%% id = "b?01J73BSWA15KHTQ21T0S14NZW0" +title = "the ListenBrainz data set" +tags = ["all", "programming", "music"] % id = "01J73BSW7VS69RQ84XWRAEYEHV" - I've been using [ListenBrainz](https://listenbrainz.org) as my primary way of keeping track of my listens for a couple years now---I diff --git a/content/music/creatures.tree b/content/music/creatures.tree index 38e5b6f..c8b0263 100644 --- a/content/music/creatures.tree +++ b/content/music/creatures.tree @@ -1,4 +1,6 @@ -%% title = "the curious case of Amon Tobin's Creatures" +%% id = "b?01JBAGZAZ30K443QYPK0XBNZWM" +title = "the curious case of Amon Tobin's Creatures" +tags = ["all", "music"] % id = "01JBAGT450TPYYB0W5Q3RB017W" - I bought Amon Tobin's [Bricolage](https://amontobin.bandcamp.com/album/bricolage) way back in September last year, but only today noticed that my copy seemed to be... corrupted? diff --git a/content/music/dubio.tree b/content/music/dubio.tree index 249cd64..7b0d4b1 100644 --- a/content/music/dubio.tree +++ b/content/music/dubio.tree @@ -1,4 +1,6 @@ -%% title = "Kettel - Dubio" +%% id = "b?01JQYKYRF2RRY2DEV2Z8MSYJ4F" +title = "Kettel - Dubio" +tags = ["all", "music"] % id = "01JQYKNE7YW4VEQQZ9P3ZQEHRC" - as _Dubio_ opens with its title track, I am taken into the mountains. diff --git a/content/music/flacks.tree b/content/music/flacks.tree index 4a6655d..98462fe 100644 --- a/content/music/flacks.tree +++ b/content/music/flacks.tree @@ -1,11 +1,13 @@ -%% title = "The Flashbulb - Flacks / aBliss" +%% id = "b?01JHXVRT2HR6TXC2V9JG2XTZVB" +title = "The Flashbulb - Flacks / aBliss" +tags = ["all", "music"] % id = "01JHXV738MT1DF4T4DQWJ16PED" - walking in the mountains, you see flags waving in the distance... % id = "01JHXV738M04MAFAY7XTQKSX9R" - you take in the majesty of the rocky landscape around you. - + % id = "01JHXVEPM9NHMFJND9GRPRQ89R" - the difficulty of the hike makes your heart pound. diff --git a/content/music/i-dont-love-me-anymore.tree b/content/music/i-dont-love-me-anymore.tree index 7d64312..b1266de 100644 --- a/content/music/i-dont-love-me-anymore.tree +++ b/content/music/i-dont-love-me-anymore.tree @@ -1,4 +1,6 @@ -%% title = "Oneohtrix Point Never - I Don't Love Me Anymore" +%% id = "b?01J8ZP2EG9TM8320R9E3K1GQEC" +title = "Oneohtrix Point Never - I Don't Love Me Anymore" +tags = ["all", "music"] % id = "01J8ZKEB7JNVWZY0CDR7Y3HRA6" + a track from Oneohtrix Point Never's _Magic Oneohtrix Point Never_. [bandcamp link](https://oneohtrixpointnever.bandcamp.com/album/magic-oneohtrix-point-never) @@ -7,7 +9,7 @@ - by the way I'm listening to Magic OPN right now as I'm writing this. _Tales from the Trash Stratum_ just started playing and *(once again)* - + I thought I'd gotten a notification on Discord. I swear to fucking God, this shit gets me every time. xD diff --git a/content/music/map-of-what-is-effortless.tree b/content/music/map-of-what-is-effortless.tree index a507f15..967cbe2 100644 --- a/content/music/map-of-what-is-effortless.tree +++ b/content/music/map-of-what-is-effortless.tree @@ -1,4 +1,6 @@ -%% title = "Telefon Tel Aviv - Map of What Is Effortless" +%% id = "b?01H9R1NKBB7NCQM8GJ3907P7F7" +title = "Telefon Tel Aviv - Map of What Is Effortless" +tags = ["all", "music"] % id = "01H9R1NKBBVMRYPK024ED8P1CH" - buy: [Bandcamp](https://telefon-tel-aviv.bandcamp.com/album/map-of-what-is-effortless) diff --git a/content/music/ok-computer.tree b/content/music/ok-computer.tree index 6f2bbc4..82a6a46 100644 --- a/content/music/ok-computer.tree +++ b/content/music/ok-computer.tree @@ -1,4 +1,6 @@ -%% title = "Radiohead - OK Computer" +%% id = "b?01H969NN1ACXG26T2NHCM7BHYY" +title = "Radiohead - OK Computer" +tags = ["all", "music"] % id = "01H969NN1ACMHAYB8QX7SNCVJC" - buy: [Bandcamp](https://radiohead.bandcamp.com/album/ok-computer) diff --git a/content/music/syro.tree b/content/music/syro.tree index 8bab46d..f415527 100644 --- a/content/music/syro.tree +++ b/content/music/syro.tree @@ -1,4 +1,6 @@ -%% title = "Aphex Twin - Syro" +%% id = "b?01H9DQNG9ARCX91Z15MWTB0A6B" +title = "Aphex Twin - Syro" +tags = ["all", "music"] % id = "01H9DQNG9AYRET7KY8SBXFCH98" - buy: [Bandcamp](https://aphextwin.bandcamp.com/album/syro) diff --git a/content/music/tilt-shift-ablaze.tree b/content/music/tilt-shift-ablaze.tree index 01d6897..bc832ff 100644 --- a/content/music/tilt-shift-ablaze.tree +++ b/content/music/tilt-shift-ablaze.tree @@ -1,4 +1,6 @@ -%% title = "Floating Points - Tilt Shift / Ablaze" +%% id = "b?01JK5SN2ZBDZTFZ27J3KNT4SQV" +title = "Floating Points - Tilt Shift / Ablaze" +tags = ["all", "music"] % id = "01JK5SN2WBQ1Y4SR1BQGSKRAKG" - the two last tracks on Floating Points's latest album, [_Cascade_](https://floatingpoints.bandcamp.com/album/cascade). diff --git a/content/philosophy/fear-of-the-unknown.tree b/content/philosophy/fear-of-the-unknown.tree index e2512da..83c463c 100644 --- a/content/philosophy/fear-of-the-unknown.tree +++ b/content/philosophy/fear-of-the-unknown.tree @@ -1,4 +1,6 @@ -%% title = "fear of the unknown" +%% id = "b?01JCGVBXW39D0GJTZY53A25TXT" +title = "fear of the unknown" +tags = ["all", "shower"] % id = "01JCGVBXW41374C1TEEYH8245B" + no matter how long you live, you will always live in fear. diff --git a/content/philosophy/hedonic-treadmill.tree b/content/philosophy/hedonic-treadmill.tree index 8d08074..3596cac 100644 --- a/content/philosophy/hedonic-treadmill.tree +++ b/content/philosophy/hedonic-treadmill.tree @@ -1,4 +1,6 @@ -%% title = "hedonic treadmill" +%% id = "b?01HFYZKREV93QY3K7KNNFSW90H" +title = "hedonic treadmill" +tags = ["all", "shower"] % id = "01HFYZKREVV2CX1GYJQ18BJS78" - a concept that's incredibly useful in keeping it cool diff --git a/content/philosophy/i-build-things.tree b/content/philosophy/i-build-things.tree index 8a147b4..bc43013 100644 --- a/content/philosophy/i-build-things.tree +++ b/content/philosophy/i-build-things.tree @@ -1,4 +1,6 @@ -%% title = '"I build things"' +%% id = "b?01JBAK3T1ZSSTHRN6TTSXXBAKK" +title = '"I build things"' +tags = ["all", "shower"] % id = "01JBAK3T1ZMTJS5A9Z5VFFQR0V" - aka how to sound like the most boring software developer ever. diff --git a/content/philosophy/in-wisdom-you-become-old.tree b/content/philosophy/in-wisdom-you-become-old.tree index 82be44f..1c4ae1b 100644 --- a/content/philosophy/in-wisdom-you-become-old.tree +++ b/content/philosophy/in-wisdom-you-become-old.tree @@ -1,4 +1,6 @@ -%% title = "in wisdom you become old" +%% id = "b?01J1Q8SBGFYKDATVF85XYWMSV2" +title = "in wisdom you become old" +tags = ["all", "shower"] % id = "01J1Q8SBGFNS3ZSSA1QXN83SMH" + this is kind of weird, but recently I have noticed I no longer keep up with slang diff --git a/content/philosophy/light-streaks.tree b/content/philosophy/light-streaks.tree index 7369e71..c214822 100644 --- a/content/philosophy/light-streaks.tree +++ b/content/philosophy/light-streaks.tree @@ -1,4 +1,6 @@ -%% title = "my weird stim: writing with light streaks" +%% id = "b?01JG55SF4FRRF9RDW9KMYHAECF" +title = "my weird stim: writing with light streaks" +tags = ["all", "shower"] % id = "01JG55KYCYD0CHXQ582XTAHMP6" - a long time ago my brain built up a [stim][] that it likes to perform when bored: I draw words with my eyes. diff --git a/content/philosophy/nicknames.tree b/content/philosophy/nicknames.tree index 6c4b001..da077c5 100644 --- a/content/philosophy/nicknames.tree +++ b/content/philosophy/nicknames.tree @@ -1,4 +1,6 @@ -%% title = "on nicknames" +%% id = "b?01JBWHXTMKYRW5XXDJG9VQNF5E" +title = "on nicknames" +tags = ["all", "shower"] % id = "01JBWHXTMKTDGDBATFM9H27KZK" - my given name is Gabriel. @@ -148,7 +150,7 @@ sharing your real data online when you're a kid sounds like a _baaad_ idea. % id = "01JBWHXTMK9QAJGHHM9VRQ02M3" - also, while it supposedly helped me protect me as a kid, it also caused _so much_ unnecessary self-hate. - + % id = "01JBWHXTMK4SMAMG4W61E02ZSV" - it instilled [a fear of seeing pictures of myself](https://www.youtube.com/watch?v=aNKrcwOG-SE){.secret}. diff --git a/content/philosophy/responsibility.tree b/content/philosophy/responsibility.tree index a19bf8e..28f0e49 100644 --- a/content/philosophy/responsibility.tree +++ b/content/philosophy/responsibility.tree @@ -1,11 +1,13 @@ -%% title = "on responsibility & conformity" +%% id = "b?01JDJ0RH4DJCNS7TPCRZHRPSRF" +title = "on responsibility & conformity" +tags = ["all", "shower"] % id = "01JDJ0RH4DTY60R2Y0Y3J9FH0W" - most of us probably can't imagine holding a company talk on a tech conference while wearing a fursuit. % id = "01JDJ0RH4DBDP937C7CB2CY5EP" - I had this revelation today that it would be extremely funny if I did something like that, only for the thought of harsh reality to come knocking at my door. - + % id = "01JDJ0RH4DVMQ6T3H7EQY86QCD" - if you're giving a presentation on behalf of your company, you are _representing_ the company, so any clownage you pull will have negative consequences on the company's [PR]{title="public relations"}. @@ -57,7 +59,7 @@ what's wrong with speaking in a fluffy suit on a tech conference? % id = "01JDJ0RH4DRQW5XR9N7M7QZXCV" - there are cases where you _have_ to stay serious, where [life's on the line](https://www.youtube.com/watch?v=1QNoygm8bEY){.secret title="And therefur riki did not stay serious and did his usual secret music link shenaniganry, including a furry joke in this very sentence you're reading right now. Splendid."} and some could _fucking die or get permanently hurt_. - + % id = "01JDJ0RH4D6FT1Y7M7XGBXM83A" - but since our species's inception, we as humans have become more than just hunter-gatherers. we partake in _culture_. diff --git a/content/philosophy/riki.tree b/content/philosophy/riki.tree index 35843a0..9ecf9fc 100644 --- a/content/philosophy/riki.tree +++ b/content/philosophy/riki.tree @@ -1,4 +1,6 @@ -%% title = "nickname change!" +%% id = "b?01JGXQ5E8DHAEYFTHG0RB86VNE" +title = "nickname change!" +tags = ["all", "meow", "shower"] % id = "01JGXMY094E9AGM67T7EXAW25Z" - I'm changing my nickname from liquidex to *riki*! diff --git a/content/philosophy/shut-up.tree b/content/philosophy/shut-up.tree index b7c1dcd..56c7da3 100644 --- a/content/philosophy/shut-up.tree +++ b/content/philosophy/shut-up.tree @@ -1,4 +1,6 @@ -%% title = "just shut up sometimes" +%% id = "b?01HREVZNAH3PMMN29C6HNFQ7P9" +title = "just shut up sometimes" +tags = ["all", "shower"] % id = "01HREVZNAH8XFRMVB9G58TPV8R" - I just caught myself writing a few paragraphs long comment on [Lobsters](https://lobste.rs) without really understanding what the author of the comment meant in the broader context of the discussion, diff --git a/content/programming/aoc.tree b/content/programming/aoc.tree index 1a7447c..89a796f 100644 --- a/content/programming/aoc.tree +++ b/content/programming/aoc.tree @@ -1,4 +1,6 @@ -%% title = "Advent of Code feels" +%% id = "b?01JDZKAP3KT4AD36F6HPJTEM4Z" +title = "Advent of Code feels" +tags = ["all", "programming", "shower"] % id = "01JDZKMFQZS2VVNQ3R9WDS81TS" - I wonder if I'm the only one who can never get into [Advent of Code](https://adventofcode.com). @@ -35,7 +37,7 @@ there is always something to work on. % id = "01JDZKMFQZP2723GMYB2HMJFR2" - I like to build my software to solve real world problems---mostly my own, but I like to imagine it could one day become useful for someone else, too. - + % id = "01JDZKMFQZWF0F0G6822298N5Z" - egoistic altruism, y'know. it's why all the code I write outside of work is open source. diff --git a/content/programming/buildsome.tree b/content/programming/buildsome.tree index 8cc5581..36d9de0 100644 --- a/content/programming/buildsome.tree +++ b/content/programming/buildsome.tree @@ -1,4 +1,6 @@ -%% title = "not quite buildless" +%% id = "b?01J7C1KBZ58BR21AVFA1PMWV68" +title = "not quite buildless" +tags = ["all", "programming", "treehouse"] % id = "01J7BYKQGYPF50050K67N2MP1G" - ...buildsome? @@ -56,7 +58,7 @@ enjoy! % id = "01J7BYKQGY7QEAN677Q9AT4T0V" - I'll put _probably_ the most interesting bit right at the start. the treehouse is _not quite_ buildless. - + % id = "01J7BYKQGYRV6TKEACZ0DXNDG4" - one might even call it... buildsome? I mean, it's not quite buildful, and definitely not buildless...? @@ -147,7 +149,7 @@ enjoy! % id = "01J7BYKQGY0PR13G71PK163976" - if I _wanted_ to implement incremental builds, I feel like the dependency tracking would get pretty hellish pretty quickly. - + % id = "01J7BYKQGY75XN1HBVZ110D16P" - say a `.tree` file uses the `include_static` template directive to include some file into itself. now in addition to compiling the `.tree` file when it changes, I'd also need to recompile the `.tree` file when that `include`d`_static` file changes too---and that sort of dependency tracking is ripe for bugs as the codebase grows more complex! @@ -223,7 +225,7 @@ enjoy! % id = "01J7EMBKN42WH0BKXKDQ020F8M" - you can also provide source maps to transfer optimal minified sources by default, and let your browser's DevTools display your original sources to the user upon their request. - + % id = "01J7EMJYX91P3RE3PEBM2M3MR1" - the important part is that having _some_ form of readable sources _right on your page_ is really nice! @@ -237,7 +239,7 @@ enjoy! - the reason is that I don't want to waste time testing my website separately on release mode, so having it behave differently in subtle ways means more bugs! % id = "01J7BYKQGY6KJ6ZZX4EREEAB79" - - there are only two parts of the treehouse that behaves differently between debug and release mode. + - there are only two parts of the treehouse that behaves differently between debug and release mode. % id = "01J7BYKQGYB4G0J7TZQCF4X7W6" - generation speed, and... @@ -316,7 +318,7 @@ enjoy! async fn back_up() -> String { "".into() - } + } ``` % id = "01J7BYKQGYDY8E84BEM5V7MMGB" @@ -333,7 +335,7 @@ enjoy! % id = "01J7BYKQGYVS4CZGVC4ZHGJ7KF" - also, `tower-livereload` also has a couple disadvantages compared to the solution I've shown here. - + % id = "01J7BYKQGY3P95RM10ZZGRP2Y3" - it's slow, because it only polls the server's `/back-up` endpoint every second, which increases reload latency. I've bumped that up to polling every 100ms in my script, because I don't like slow. @@ -377,7 +379,7 @@ enjoy! % id = "01J7BYKQGYM9HD00VY2BVEZPZ0" - _customized built-in elements_, which extend _any_ built-in element. - these are applied using the `is=""` attribute on a base built-in element, like `
  • `. + these are applied using the `is=""` attribute on a base built-in element, like `
  • `. % id = "01J7BYKQGY90D6C0KF9CFSMF1A" - unfortunately customized built-in elements are practically useless, because Safari doesn't implement them, [and doesn't even plan to do so](https://github.com/WICG/webcomponents/issues/509#issuecomment-222860736)... @@ -408,7 +410,7 @@ enjoy! ``` and off we go! - + % id = "01J7BYKQGY6YE329DB9PMY8KNW" - I've found a couple useful idioms for working with custom elements. @@ -476,7 +478,7 @@ enjoy! % id = "01J7BYKQGYYBY9RDFJG8BP61QP" - and that's it! the actual value of the `?cache` parameter is never interpreted by anyone, anyhow. - it's only there so that whenever something _does_ change, we change the URL, and the browser thinks that "hey, that's a different asset! gotta download it." + it's only there so that whenever something _does_ change, we change the URL, and the browser thinks that "hey, that's a different asset! gotta download it." that way, the browser only ever downloads files that changed since your last visit. @@ -540,7 +542,7 @@ enjoy! % id = "01J7C16RSZ7NHE5N3KV57NGWT0" - okay cool we're getting somewhere, - + % id = "01J7C16RSZQPMABF0SBDH1RHA7" - "and then we could even cache that import map with a `?cache` parameter too---" @@ -589,10 +591,10 @@ enjoy! % id = "01J7BYKQGYMMCAKQX9S8JCTJW6" - as time went on though, I discovered another light markup language: [_Djot_](https://djot.net/), made by the same person who made Markdown, with _lots_ of lessons learned from his previous attempt. - + % id = "01J7BYKQGYQQP0YSWA1TEHRB9S" - I initially didn't wanna go through with it, because "_sigh_ am I really gonna have to rewrite my entire content to use Djot?" - + % id = "01J7BYKQGYSKJNTB7BGKTED4S0" + but then I did it anyways, because life's too short to have to deal with poorly designed markup languages :hat_smug: @@ -638,7 +640,7 @@ enjoy! % id = "01J7C16RSZAECM1G9CD57WX1M6" - I am pushing into a string, that literally cannot fail! (other than with an OOM, but that's a panic) - + % id = "01J7BYKQGYJMRC7DY7SNMAQ538" - the HTML generation code got cleaner, because the crate I'm using---[`jotdown`](https://lib.rs/crates/jotdown)---does not use a callback for filling in broken links. a pattern that's best known under the moniker "yeah, don't do that" in the Rust world. @@ -676,14 +678,14 @@ enjoy! % id = "01J7BYKQGYV3H2WX6VVSR9EFEF" - what's funny is that it dies dropping a `rustc-ice-YYYY-MM-DDTHH_MM_SS-NNNNN.txt` file into your current working directory, and combined with `cargo-watch` this has the super funny effect of generating tens of those files in the treehouse repo. - + % id = "01J7C16RT0H84KPGJMBK1QT84E" - I have forgotten to remove these before checking in at least once before. I don't think I ever ended up pushing that commit though, so I can't show you... [but you can see the ICE I have stored in my local Git history here](/static/text/rustc-ice-2024-07-20T21_00_23-69819.txt). % id = "01J7C16RT0R80J7KN516B06Q05" - an annoying side effect is that to fix this, I have to `^C` out of `cargo-watch`, run `cargo clean`, run `cargo-watch` again, and wait until the whole project compiles. - + % id = "01J7C16RT0XX4PZYRXAAV2M7P9" - at least it's a debug build... diff --git a/content/programming/cstring-starts-with.tree b/content/programming/cstring-starts-with.tree index 1965bee..8e519e7 100644 --- a/content/programming/cstring-starts-with.tree +++ b/content/programming/cstring-starts-with.tree @@ -1,4 +1,6 @@ -%% title = "prefix matches with C strings" +%% id = "b?01JCGAM553TJJCEJ96ADEWETQC" +title = "prefix matches with C strings" +tags = ["all", "programming", "c", "cxx"] % id = "01JCGAM55352EF247HZ358BAJ8" - one thing I realised while reading some code at work that worked with C strings: it's surprising how easy it is to match a prefix on a C string. diff --git a/content/programming/cxx-without-classes.tree b/content/programming/cxx-without-classes.tree index 43f08ed..2247598 100644 --- a/content/programming/cxx-without-classes.tree +++ b/content/programming/cxx-without-classes.tree @@ -1,4 +1,6 @@ -%% title = "C++ without Classes" +%% id = "b?01JN72M4EXSR6M120A6CW2D0X7" +title = "C++ without Classes" +tags = ["all", "programming", "cxx"] % id = "01JN6EFWCPWY65AQ27BGFDT2DV" - one thing I often see in people's code in C++ is putting _everything_ into a class. diff --git a/content/programming/cxx/access-modifiers-as-labels.tree b/content/programming/cxx/access-modifiers-as-labels.tree index 317339d..212714d 100644 --- a/content/programming/cxx/access-modifiers-as-labels.tree +++ b/content/programming/cxx/access-modifiers-as-labels.tree @@ -1,4 +1,6 @@ -%% title = "C++ syntactic pitfall: access modifiers as labels" +%% id = "b?01H9R1KJES6FC89NMC7J0FJT6P" +title = "C++ syntactic pitfall: access modifiers as labels" +tags = ["all", "programming", "cxx"] % id = "01H9R1KJES39Z6RBCKY4E71PYD" - although Java and C#'s approach to symbol privacy may be verbose, it has one great advantage: it is stateless. diff --git a/content/programming/cxx/shared-unique-ptr-deleter.tree b/content/programming/cxx/shared-unique-ptr-deleter.tree index a5fe4a9..c56ba44 100644 --- a/content/programming/cxx/shared-unique-ptr-deleter.tree +++ b/content/programming/cxx/shared-unique-ptr-deleter.tree @@ -1,4 +1,6 @@ -%% title = "freeing C memory automatically using `std::unique_ptr` and `std::shared_ptr`" +%% id = "b?01J0VNHPTRNC1HFXAQ790Y1EZB" +title = "freeing C memory automatically using `std::unique_ptr` and `std::shared_ptr`" +tags = ["all", "programming", "cxx"] % id = "01J0VN48B2E9WZ4QW0X69N2KB8" - say you need to interface with a C library such as SDL2 in your C++ code diff --git a/content/programming/haku.tree b/content/programming/haku.tree index 03ab55e..6a16d20 100644 --- a/content/programming/haku.tree +++ b/content/programming/haku.tree @@ -1,5 +1,7 @@ -%% title = "haku - writing a little programming language for fun" +%% id = "b?01J4J5N6WZQ03VTB3TZ51J7QZK" +title = "haku - writing a little programming language for fun" scripts = ["treehouse/vendor/codejar.js", "treehouse/components/literate-programming.js"] +tags = ["all", "programming", "plt"] % id = "01J3K8A0D1774SFDPKDK5G9GPV" - I've had this idea on my mind as of late, of a little pure functional programming language that would run in your browser. @@ -85,7 +87,7 @@ scripts = ["treehouse/vendor/codejar.js", "treehouse/components/literate-program | identifier | 9 | 21 | `s-expression` | | ) | 21 | 22 | `)` | | end of file | 22 | 22 | | - + % id = "01J3K8A0D1GGQ292D4MQBCGHWC" - to lex the input into tokens, we'll need to know the input string (of course), and where we currently are in the string. @@ -185,7 +187,7 @@ scripts = ["treehouse/vendor/codejar.js", "treehouse/components/literate-program } } } - + printTokens(`()((()))`); ``` @@ -376,7 +378,7 @@ scripts = ["treehouse/vendor/codejar.js", "treehouse/components/literate-program lexer.advance(state); return "error"; - }; + }; ``` % id = "01J3K8A0D1DKA8YCBCJVZXXGR4" @@ -859,7 +861,7 @@ scripts = ["treehouse/vendor/codejar.js", "treehouse/components/literate-program ``` that's... the same string. - + % id = "01J3K8A0D1XP4FQB2HZR9GV5CJ" - let's try something more complicated, with comments and such. @@ -887,10 +889,10 @@ scripts = ["treehouse/vendor/codejar.js", "treehouse/components/literate-program % id = "01J3K8A0D10DRSP49WF8YH5WSH" - of course this is hardly the _prettiest_ printer in the world. - + % id = "01J3K8A0D1VCJ7TV6CN7M07N5J" - for one, it does not even preserve your comments. - + % id = "01J3K8A0D1K3M9223YM96PS68B" - it does not add indentation either, it just blindly dumps a minimal S-expression into the console. @@ -950,7 +952,7 @@ scripts = ["treehouse/vendor/codejar.js", "treehouse/components/literate-program % id = "01J3K8A0D1F4R8KPHETV9N08YP" - it's definitely not how I would write a parser nowadays. it's pretty similar, but the syntax tree structures are quite different - it doesn't use the [lazy parsing][branch:01J3K8A0D1FYBKJ6X2W17QAK3Z] trick I talked about before. - + % id = "01J3K8A0D178J6W49AFCE9HEQ6" - I mean, it's only a trick I learned last year! @@ -1008,7 +1010,7 @@ scripts = ["treehouse/vendor/codejar.js", "treehouse/components/literate-program ``` for now we'll leave it empty. - + % id = "01J3NVV2RX2T5K473GGY3K5VBX" - in the meantime, let's prepare a couple convenient little wrappers to run our code: @@ -1092,7 +1094,7 @@ scripts = ["treehouse/vendor/codejar.js", "treehouse/components/literate-program {:program=haku} ```javascript export const builtins = {}; - + treewalk.eval = (state, node) => { switch (node.kind) { case "integer": @@ -1862,7 +1864,7 @@ scripts = ["treehouse/vendor/codejar.js", "treehouse/components/literate-program {:program=haku} ```javascript - treewalk.eval = (state, node) => { + treewalk.eval = (state, node) => { switch (node.kind) { case "integer": let sourceString = state.input.substring(node.start, node.end); @@ -2032,7 +2034,7 @@ scripts = ["treehouse/vendor/codejar.js", "treehouse/components/literate-program throw new Error(`unhandled node kind: ${node.kind}`); } }; - + builtins.fn = (state, node) => { if (node.children.length != 3) throw new Error("an `fn` must have an argument list and a result expression"); diff --git a/content/programming/javascript.tree b/content/programming/javascript.tree index f089a65..79f2fd6 100644 --- a/content/programming/javascript.tree +++ b/content/programming/javascript.tree @@ -1,8 +1,10 @@ -%% title = "JavaScript is not as bad as people make it out to be" +%% id = "b?01J293BFEBT15W0Z3XF1HEFGZT" +title = "JavaScript is not as bad as people make it out to be" scripts = [ "treehouse/components/literate-programming.js", "treehouse/vendor/codejar.js", ] +tags = ["all", "programming", "javascript", "plt"] % id = "01J291S06DS12DCFTNKJ27BNSQ" - _ooh I'm sure this one is gonna be really controversial but here I go_ diff --git a/content/programming/lua.tree b/content/programming/lua.tree index c7fe886..fc36827 100644 --- a/content/programming/lua.tree +++ b/content/programming/lua.tree @@ -1,4 +1,6 @@ -%% title = "Lua - a scripting language you can like" +%% id = "b?01HRG3VN091V715A8T54QK5PVX" +title = "Lua - a scripting language you can like" +tags = ["all", "programming", "plt", "lua"] % id = "01HRG2RJC1BATZJSGSSSF1XNFZ" - TODO: this page could really use an interactive Lua interpreter. can we have that? diff --git a/content/programming/lua/classes.dj b/content/programming/lua/classes.dj index 565470e..a603f49 100644 --- a/content/programming/lua/classes.dj +++ b/content/programming/lua/classes.dj @@ -1,4 +1,6 @@ title = "Classes in Lua" +id = "b?01JKKQZRSG5ZRNH530D75E2660" +tags = ["all", "programming", "lua"] +++ diff --git a/content/programming/lua/classes.tree b/content/programming/lua/classes.tree index cf9dfc3..d746af1 100644 --- a/content/programming/lua/classes.tree +++ b/content/programming/lua/classes.tree @@ -301,7 +301,7 @@ local Player = Entity:inherit() ```lua local Cat = {} -- We still need to override __index, so that the metatable we set in our own constructor - -- has our overridden `speak()` method. + -- has our overridden `speak()` method. Cat.__index = Cat -- To be able to call `Animal` methods from `Cat`, we set it as its metatable. -- Remember that `Animal.__index == Animal`. @@ -380,7 +380,7 @@ local Player = Entity:inherit() -- insert below the `end` of `function Class:inherit()` -- By default, let's make the base `Class` impossible to instantiate. - -- This should catch bugs if a subclass forgets to override `initialize`. + -- This should catch bugs if a subclass forgets to override `initialize`. function Class:initialize() error("this class cannot be initialized") end @@ -462,7 +462,7 @@ local Player = Entity:inherit() % id = "01JKKQHG5DQW7G1HDWYGX4WEYC" - our class library implements a Ruby-style `Object:new(args)` function for constructing new instances of our class. - Python however, uses the syntax `Object(args)` for constructing instances of objects. + Python however, uses the syntax `Object(args)` for constructing instances of objects. can you think of a way to make our class library use the Python-style syntax? % id = "01JKKQHG5D7QN029A3F1B6SYC2" diff --git a/content/programming/lvalues.tree b/content/programming/lvalues.tree index 21f2bb8..e4bc2e5 100644 --- a/content/programming/lvalues.tree +++ b/content/programming/lvalues.tree @@ -1,4 +1,6 @@ -%% title = "places, or what is up with `*x` not always meaning the same thing in different contexts" +%% id = "b?01HY5R1ZW2PYZSSP2J2KAA23DA" +title = "places, or what is up with `*x` not always meaning the same thing in different contexts" +tags = ["all", "programming", "c", "cxx", "plt"] % id = "01HY5R1ZV9DD7BV0F66Y0DHAEA" - I recently got a question from my someone telling me they doesn't understand why `*x` does not read from the pointer `x` when on the left-hand side of an assignment. diff --git a/content/programming/new-tab.tree b/content/programming/new-tab.tree index 01b9e1f..fcbfcb8 100644 --- a/content/programming/new-tab.tree +++ b/content/programming/new-tab.tree @@ -1,4 +1,6 @@ -%% title = "on changing the Firefox New Tab, and software freedom" +%% id = "b?01JX0GYB1D4W3A6FRPBG738N4F" +title = "on changing the Firefox New Tab, and software freedom" +tags = ["all", "programming"] % id = "01JX0G5CN5H8S7S3M4619R112A" - the date is 4th of June, 2025. @@ -69,7 +71,7 @@ "chrome_settings_overrides": { "homepage": "index.html" } - } + } ``` % id = "01JX0G5CN5SSANM732FB8M6ZSV" diff --git a/content/programming/or-types.tree b/content/programming/or-types.tree index 1dbb283..3006fa4 100644 --- a/content/programming/or-types.tree +++ b/content/programming/or-types.tree @@ -1,4 +1,6 @@ -%% title = "OR-types" +%% id = "b?01HTWNETT2S5NSBF3QR4HYA7HN" +title = "OR-types" +tags = ["all", "programming", "plt"] % id = "01HTWN4XAD7C41X8XKRBFZMHJ8" - last night I couldn't fall asleep because I was thinking how sites like [Anilist](https://anilist.co) implement their tag-based search systems. diff --git a/content/programming/systems.tree b/content/programming/systems.tree index 0d6a3fd..3821944 100644 --- a/content/programming/systems.tree +++ b/content/programming/systems.tree @@ -1,4 +1,6 @@ -%% title = "systems are just a bunch of code" +%% id = "b?01HV1DGFHZ65GJVQRSREKR67J9" +title = "systems are just a bunch of code" +tags = ["all", "programming", "shower"] % id = "01HV1DGFGNV3DXD8A3CW2J4RZP" - often enough I see people scared to dive deep into the internals of their favorite technologies diff --git a/content/programming/tairu.tree b/content/programming/tairu.tree index 9828aec..e65e3e9 100644 --- a/content/programming/tairu.tree +++ b/content/programming/tairu.tree @@ -1,9 +1,11 @@ -%% title = "tairu - an interactive exploration of 2D autotiling techniques" +%% id = "b?01HQ6G30PTVT5H0Z04VVRHEZQF" +title = "tairu - an interactive exploration of 2D autotiling techniques" scripts = [ "treehouse/components/literate-programming.js", "treehouse/vendor/codejar.js", ] styles = ["page/tairu.css"] +tags = ["all", "programming", "graphics", "javascript"] % id = "01HPD4XQPWM8ECT2QM6AT9YRWB" - I remember since my early days doing programming, I've been interested in how games like Terraria handle automatically tiling their terrain. @@ -209,7 +211,7 @@ styles = ["page/tairu.css"] borderWidth: 4, }); ``` - + {:program=tairu :placeholder=01HQ49TJZFMK719KSE16SG3F7B} ```output ``` @@ -436,7 +438,7 @@ styles = ["page/tairu.css"] ``` {:program=tairu :placeholder=01HQ49X8Z57FNMN3E79FYF8CMG} - ```output + ```output ``` % id = "01HQ162WWA03JAGJYCT0DRZP24" @@ -461,7 +463,7 @@ styles = ["page/tairu.css"] ``` {:program=tairu :placeholder=01HQ49YDPQXYSAT5N6P241DG3C} - ```output + ```output ``` % id = "01HQ162WWAB0AYSPGB4AEVT03Z" @@ -490,7 +492,7 @@ styles = ["page/tairu.css"] ``` {:program=tairu :placeholder=01HQ49Z8JWR75D85DGHCB34K8E} - ```output + ```output ``` % id = "01HQ1K39AS4VDW7DVTAGQ03WFM" @@ -514,7 +516,7 @@ styles = ["page/tairu.css"] % classes.branch = "tileset-four-to-eight-demo" id = "01HQ1K39ASR81NWMW8Q0MF8QMP" - enhance! - + {% NOTE djot: I don't there's a way to achieve this in Djot alone %} ``` =html
      @@ -599,7 +601,7 @@ styles = ["page/tairu.css"] ``` {:program=tairu :placeholder=01HQ4A01MPE6JT5ZZFEN9S635W} - ```output + ```output ``` % id = "01HQ1K39AS7CRBZ67N1VVHCVME" @@ -953,7 +955,7 @@ styles = ["page/tairu.css"] ``` {:program=tairu :placeholder=01HQ4A11RRXEQ850598GFBJN0B} - ```output + ```output ``` % id = "01HQ1M84GSCXTPGVPXY840WCQ6" @@ -984,7 +986,7 @@ new TilesetTileEditor({ ``` {:program=tairu :placeholder=01HQ4A45WNAEJGCT2WDMQJHK14} -```output +```output ``` :nap: {{ config.user.canonical_url }} - {{ feed.updated }} + {{ updated }} {{ config.user.title }} {{ config.user.description }} @@ -29,17 +35,17 @@ {{ config.user.canonical_url }} - {{#each feed.entries}} + {{#each feed.entries as |entry|}} - {{ ../config.user.feed_id_prefix }}/b?{{ id }} + {{ ../config.user.feed_id_prefix }}/{{ id }} {{ updated }} {{ title }} - {{#each categories as |category|}} - + {{#each tags as |tag|}} + {{/each}} - {{ summary }} + {{/each}} diff --git a/template/components/_doc.hbs b/template/components/_doc.hbs index 0afa630..0d59b17 100644 --- a/template/components/_doc.hbs +++ b/template/components/_doc.hbs @@ -4,6 +4,14 @@ {{#if (ne page.tree_path 'index')}}

      {{ page.title }}

      +
        + {{#each page.feeds as |feed|}} +
      • + + {{#if (gt (len page.feeds) 0)}}[{{ feed.name }}]{{/if}} +
      • + {{/each}} +
      {{/if}} diff --git a/template/components/_feed.hbs b/template/components/_feed.hbs index 780ef75..158014c 100644 --- a/template/components/_feed.hbs +++ b/template/components/_feed.hbs @@ -8,8 +8,8 @@
        - {{#each categories as |category|}} -
      • {{ category }}
      • + {{#each tags as |tag|}} +
      • #{{ tag }}
      • {{/each}}
      diff --git a/template/components/_head.hbs b/template/components/_head.hbs index bbed9c8..123d78f 100644 --- a/template/components/_head.hbs +++ b/template/components/_head.hbs @@ -72,6 +72,4 @@ clever to do while browser vendors figure that out, we'll just have to do a cach -{{#each feeds as |feed_name|}} - -{{/each}} + diff --git a/treehouse.toml b/treehouse.toml index c65d9a6..8867871 100644 --- a/treehouse.toml +++ b/treehouse.toml @@ -58,6 +58,8 @@ feed_id_prefix = "https://liquidex.house" [feed] tags = [ + "all", + # Hobby corners "meow", "programming", @@ -78,7 +80,6 @@ tags = [ # Projects "treehouse", - "haku", ] [redirects.path] @@ -115,6 +116,9 @@ tags = [ # 2025-07-15 furry v2 "philosophy/furry" = "furry" +# 2025-08-25 tags +"tag/all" = "index" + [emoji] [pics]