Skip to content

Changelog

June 9, 2026

docs: svelte notes 1 file added · 2 files updated

Added

Updated

  • State
    Show diff
    diff --git a/src/content/docs/engineering/web/svelte/state.md b/src/content/docs/engineering/web/svelte/state.md
    index d473c00..0f641d9 100644
    --- a/src/content/docs/engineering/web/svelte/state.md
    +++ b/src/content/docs/engineering/web/svelte/state.md
    @@ -1,333 +1,117 @@
     ---
    -title: Svelte State Management
    +title: State Management
     ---
     
    -Svelte has two related state questions:
    -
    -1. where state should live in an app that spans server and client
    -2. how reactive state is expressed inside Svelte 5 components.
    -
    -SvelteKit's rule of thumb[^kit-state] is to keep server state request-scoped,
    -while Svelte 5's runes make component reactivity explicit.[^runes]
    +SvelteKit state management is mostly about where state should live in an app that spans server and client. Its rule of thumb[^kit-state] is to keep server state request-scoped and avoid shared module state for per-user data. For Svelte 5 component reactivity, see [Runes](/engineering/web/svelte/runes/).
     
     ## SvelteKit state rules
     
     ### Do not put user state in server module globals
     
     A browser is stateful, but a server process can be long-lived and shared by many users.
     A top-level variable in a server module is shared by everyone who hits that server process,
     and can also disappear when the process restarts. SvelteKit's state management docs use this
     as the core warning: do not store per-user data in shared server variables.[^kit-state]
     
     Do this instead:
     
     - authenticate users with cookies
     - persist durable user data in a database
     - return request-specific data from `load`
     - pass that data through props, context, or `$app/state`
     
     ### Keep `load` pure
     
     Do not write to stores, globals, or other shared state inside `load`. Return data from
     `load` and let SvelteKit pass it to the page. This keeps SSR safe and makes the app easier
     to reason about.[^kit-state]
     
     ```ts
     export async function load({ fetch }) {
       const response = await fetch("/api/user");
     
       return { user: await response.json() };
     }
     ```
     
     ### Use context for app-level state
     
     SvelteKit's own app state uses Svelte context on the server so that state is attached to
     the component tree instead of a process-global singleton. You can use the same pattern for
     your own state. Pass a function through context to preserve reactivity across boundaries:[^kit-state]
     
     ```svelte
     <!-- src/routes/+layout.svelte -->
     <script>
       import { setContext } from 'svelte';
     
       let { data } = $props();
     
       setContext('user', () => data.user);
     </script>
     ```
     
     ```svelte
     <!-- src/routes/user/+page.svelte -->
     <script>
       import { getContext } from 'svelte';
     
       const user = getContext('user');
     </script>
     
     <p>Welcome {user().name}</p>
     ```
     
     Prefer passing state down. During SSR, updating context state from a deeper component cannot
     change markup that a parent has already rendered; on the client, the parent can react to the
     new value, which can cause hydration flashes.[^kit-state]
     
     ### Page and layout components are reused
     
     SvelteKit preserves layout and page component instances across navigation. That means setup
     code in a component does not rerun just because `data` changed, and `onMount`/`onDestroy` do
     not rerun on every route change. Values derived from `data` must be reactive:[^kit-state]
     
     ```svelte
     <script>
       let { data } = $props();
     
       let wordCount = $derived(data.content.split(' ').length);
       let estimatedReadingTime = $derived(wordCount / 250);
     </script>
     ```
     
     If a component must be destroyed and recreated on navigation, key it by URL:
     
     ```svelte
     <script>
       import { page } from '$app/state';
     </script>
     
     {#key page.url.pathname}
       <BlogPost title={data.title} content={data.content} />
     {/key}
     ```
     
     ### Put durable navigation state in the URL
     
     If state should survive reloads or affect SSR, put it in the URL. Filters, sorting, tabs,
     and pagination often belong in search params like `?sort=price&order=ascending`. Read them
     in `load` through the `url` parameter or in components through `page.url.searchParams`.[^kit-state]
     
     For disposable UI state that should survive back/forward navigation without becoming URL or
     database state, use SvelteKit snapshots.[^kit-state]
     
    -## What runes are
    -
    -Runes are Svelte 5 syntax that controls the compiler. They begin with `$`, look like function
    -calls, and do not need imports. They are not normal JavaScript values: you cannot assign them
    -to variables or pass them as arguments, and the compiler only allows them in valid positions.[^runes]
    -
    -```svelte
    -<script>
    -  let message = $state('hello');
    -</script>
    -```
    -
    -## `$state`
    -
    -`$state` creates reactive state. The variable behaves like the value itself rather than like a
    -store object or setter API:[^state]
    -
    -```svelte
    -<script>
    -  let count = $state(0);
    -</script>
    -
    -<button onclick={() => count++}>
    -  clicks: {count}
    -</button>
    -```
    -
    -When `$state` wraps an array or plain object, Svelte creates a deeply reactive proxy.
    -Mutating a nested property or calling an array method such as `push` triggers granular updates
    -for the parts of the UI that read that property.[^state]
    -
    -```svelte
    -<script>
    -  let todos = $state([{ done: false, text: 'learn runes' }]);
    -</script>
    -
    -<button onclick={() => (todos[0].done = !todos[0].done)}>
    -  {todos[0].done ? 'done' : 'not done'}
    -</button>
    -```
    -
    -Important details:
    -
    -- Destructuring a reactive value gives you ordinary JavaScript references, not live reactive references.[^state]
    -- Class instances are not proxied, but class fields can use `$state`.[^state]
    -- Use reactive built-ins from `svelte/reactivity` for reactive `Set`, `Map`, `Date`, and `URL`.[^state]
    -- Use `$state.raw` for large objects or arrays that should only update by reassignment, not deep mutation.[^state]
    -- Use `$state.snapshot` when passing a non-proxy copy to APIs or libraries.[^state]
    -- Use `$state.eager` sparingly for immediate visual feedback during synchronized `await` updates.[^state]
    -
    -## `$derived`
    -
    -`$derived` creates reactive values from other reactive values. Component setup code runs once, so derived expressions are how you keep calculations in sync with changing state or props.[^derived]
    -
    -```svelte
    -<script>
    -  let count = $state(0);
    -  let doubled = $derived(count * 2);
    -</script>
    -
    -<button onclick={() => count++}>
    -  {count} doubled is {doubled}
    -</button>
    -```
    -
    -A `$derived` expression should be free of side effects. Svelte disallows state changes such as `count++` inside derived expressions.[^derived]
    -
    -For multi-line calculations, use `$derived.by`:
    -
    -```svelte
    -<script>
    -  let numbers = $state([1, 2, 3]);
    -
    -  let total = $derived.by(() => {
    -    let sum = 0;
    -    for (const n of numbers) sum += n;
    -    return sum;
    -  });
    -</script>
    -```
    -
    -Svelte tracks values read synchronously inside the derived expression or function body. Derived values are recalculated lazily when next read, and downstream updates are skipped if the derived value is referentially unchanged.[^derived]
    -
    -Deriveds can also be temporarily reassigned, which is useful for optimistic UI:[^derived]
    -
    -```svelte
    -<script>
    -  let { post, like } = $props();
    -  let likes = $derived(post.likes);
    -
    -  async function onclick() {
    -    likes += 1;
    -
    -    try {
    -      await like();
    -    } catch {
    -      likes -= 1;
    -    }
    -  }
    -</script>
    -
    -<button {onclick}>🧡 {likes}</button>
    -```
    -
    -## `$props`
    -
    -`$props` reads component inputs. Most components destructure the returned props object:[^props]
    -
    -```svelte
    -<script>
    -  let { adjective = 'happy' } = $props();
    -</script>
    -
    -<p>This component is {adjective}</p>
    -```
    -
    -Destructuring also supports renaming invalid identifiers, rest props, and TypeScript annotations:[^props]
    -
    -```svelte
    -<script lang="ts">
    -  interface Props {
    -    adjective: string;
    -    disabled?: boolean;
    -  }
    -
    -  let { adjective, disabled = false }: Props = $props();
    -</script>
    -```
    -
    -Props update when the parent updates. A child can temporarily reassign a prop value for local ephemeral state, but it should not mutate props it does not own unless the prop is explicitly bindable. Mutating a reactive proxy passed from a parent can update the UI but causes an ownership warning.[^props]
    -
    -For accessible form fields and labels, `$props.id()` creates an ID unique to the component instance and stable across SSR hydration.[^props]
    -
    -```svelte
    -<script>
    -  const uid = $props.id();
    -</script>
    -
    -<label for="{uid}-email">Email</label>
    -<input id="{uid}-email" type="email" />
    -```
    -
    -## `$effect`
    -
    -`$effect` runs side-effecting code when reactive dependencies change. It runs in the browser, not during server-side rendering, after the component has mounted and after DOM updates have been applied.[^effect]
    -
    -Use it for browser effects: third-party libraries, canvas drawing, analytics, subscriptions, timers, or direct DOM work.
    -
    -```svelte
    -<script>
    -  let size = $state(50);
    -  let color = $state('#ff3e00');
    -  let canvas;
    -
    -  $effect(() => {
    -    const context = canvas.getContext('2d');
    -    context.clearRect(0, 0, canvas.width, canvas.height);
    -    context.fillStyle = color;
    -    context.fillRect(0, 0, size, size);
    -  });
    -</script>
    -
    -<canvas bind:this={canvas} width="100" height="100"></canvas>
    -```
    -
    -Svelte tracks reactive values read synchronously inside the effect and reruns the effect when they change. Values read after an `await`, inside `setTimeout`, or in another asynchronous callback are not tracked.[^effect]
    -
    -An effect can return a teardown function. The teardown runs before the effect reruns and when the effect is destroyed:[^effect]
    -
    -```svelte
    -<script>
    -  let count = $state(0);
    -  let milliseconds = $state(1000);
    -
    -  $effect(() => {
    -    const interval = setInterval(() => {
    -      count += 1;
    -    }, milliseconds);
    -
    -    return () => clearInterval(interval);
    -  });
    -</script>
    -```
    -
    -Do not use `$effect` to synchronize state that can be expressed as derived state. Prefer this:[^effect]
    -
    -```svelte
    -<script>
    -  let count = $state(0);
    -  let doubled = $derived(count * 2);
    -</script>
    -```
    -
    -Advanced variants exist for rarer cases: `$effect.pre` runs before DOM updates,
    -`$effect.tracking()` reports whether code is running in a tracking context,
    -`$effect.pending()` reports pending promises in the current boundary, and
    -`$effect.root` creates a manually controlled effect scope.[^effect]
    -
     ## Choosing where state belongs
     
     | State kind                        | Put it here                           |
     | --------------------------------- | ------------------------------------- |
     | Durable user data                 | database, keyed by authenticated user |
     | Request-specific server data      | `load` return values                  |
     | App tree state during SSR         | Svelte context or `$app/state`        |
     | URL-affecting state               | URL search params                     |
     | Disposable history-entry UI state | SvelteKit snapshots                   |
    -| Component-local mutable state     | `$state`                              |
    -| Calculation from reactive inputs  | `$derived`                            |
    -| Component inputs                  | `$props`                              |
    -| Browser side effects              | `$effect`                             |
     
    -[^kit-state]: SvelteKit, “State management”, SvelteKit documentation LLM text, https://svelte.dev/docs/kit/state-management/llms.txt
    -
    -[^runes]: Svelte, “What are runes?”, Svelte documentation, https://svelte.dev/docs/svelte/what-are-runes
    -
    -[^state]: Svelte, “$state”, Svelte documentation LLM text, https://svelte.dev/docs/svelte/$state/llms.txt
    +For component-local state, derived values, component props, and browser effects, use Svelte 5 runes like `$state`, `$derived`, `$props`, and `$effect`; see [Runes](/engineering/web/svelte/runes/).
     
    -[^derived]: Svelte, “$derived”, Svelte documentation LLM text, https://svelte.dev/docs/svelte/$derived/llms.txt
    -
    -[^props]: Svelte, “$props”, Svelte documentation LLM text, https://svelte.dev/docs/svelte/$props/llms.txt
    -
    -[^effect]: Svelte, “$effect”, Svelte documentation LLM text, https://svelte.dev/docs/svelte/$effect/llms.txt
    +[^kit-state]: SvelteKit, “State management”, SvelteKit documentation LLM text, https://svelte.dev/docs/kit/state-management/llms.txt
  • Testing
    Show diff
    diff --git a/src/content/docs/engineering/web/svelte/testing.md b/src/content/docs/engineering/web/svelte/testing.md
    index aea0610..2a9042e 100644
    --- a/src/content/docs/engineering/web/svelte/testing.md
    +++ b/src/content/docs/engineering/web/svelte/testing.md
    @@ -1,17 +1,17 @@
     ---
    -title: Testing Svelte Applications
    +title: Testing Svelte Projects
     ---
     
     This page provides an overview of testing strategies for Svelte applications, covering unit
     tests, component tests, browser component tests, server tests, and end-to-end tests. It emphasizes
     testing stable behavior and contracts rather than Svelte.
     
     Svelte testing works best as a small pyramid: extract logic into unit tests, mount components
     only when behavior needs a DOM, and keep a few end-to-end tests for production-like confidence.
     The Svelte FAQ describes the usual split as unit, component, and end-to-end tests, and notes
     that you do not need to test implementation details that Svelte itself already covers.[^svelte-faq]
     
     ## Unit tests
     
     Use unit tests for business logic, validation, data transformation, state helpers, and edge cases.
     If a component is hard to test, first ask whether too much logic lives inside the component.
docs: add svelte test docs 2 files added

Added

June 7, 2026

docs: add regex by example 1 file added

Added

June 6, 2026

fix: links 16 files updated

Updated

  • Books
    Show diff
    diff --git a/src/content/docs/books.md b/src/content/docs/books.md
    index 8cf6378..88050ee 100644
    --- a/src/content/docs/books.md
    +++ b/src/content/docs/books.md
    @@ -1,12 +1,12 @@
     ---
     title: Books
     sidebar:
         badge:
             text: Start Here
             variant: success
     ---
     
     Links to notes I've taken on books.
     
    -1. [How to Take Smart Notes](/garden/writing/book-ahrens-2017/)
    -2. [How to Be Perfect](/garden/philosophy/book-schur-2023/)
    +1. [How to Take Smart Notes](/writing/book-ahrens-2017/)
    +2. [How to Be Perfect](/philosophy/book-schur-2023/)
  • Atproto
    Show diff
    diff --git a/src/content/docs/engineering/atproto/index.md b/src/content/docs/engineering/atproto/index.md
    index 3fa3ac3..dbb2383 100644
    --- a/src/content/docs/engineering/atproto/index.md
    +++ b/src/content/docs/engineering/atproto/index.md
    @@ -28,92 +28,92 @@ The AT Protocol uses a layered architecture:
     └─────────────────────────────────────────────────┘
     ```
     
     ### Identity
     
     - **DIDs (Decentralized Identifiers)**: Persistent identifiers (e.g., `did:plc:abc123`) that remain stable across server migrations.
     - **Handles**: Human-readable names (e.g., `@alice.bsky.social`) that resolve to DIDs via DNS or HTTP.
     
     ### Personal Data Servers (PDS)
     
     Every user's data lives in a **Personal Data Server**.
     
     A PDS:
     
     - Stores the user's repository (a signed, Merkle-tree-based data structure).
    -- Handles [OAuth authentication and authorization](/garden/engineering/atproto/oauth/).
    +- Handles [OAuth authentication and authorization](/engineering/atproto/oauth/).
     - Syncs data to relays and indexers.
     
     ### Relay (BGS)
     
     Relays aggregate data from many PDSs into a unified firehose, enabling:
     
     - Efficient indexing for search and discovery.
     - Feed generators to access content across the network.
     
     ### App View
     
     An **App View** consumes the firehose and provides application-specific APIs. For example, the Bluesky app view provides the social networking experience.
     
     ## Data Model
     
     ### Repositories
     
    -A **repository** is a user's complete data store, structured as a [Merkle Search Tree (MST)](/garden/engineering/atproto/mst/).
    +A **repository** is a user's complete data store, structured as a [Merkle Search Tree (MST)](/engineering/atproto/mst/).
     
    -- **Records**: Individual data items (posts, likes, follows) stored as [DAG-CBOR](/garden/engineering/atproto/cbor/).
    +- **Records**: Individual data items (posts, likes, follows) stored as [DAG-CBOR](/engineering/atproto/cbor/).
     - **Collections**: Namespaced groups of records (e.g., `app.bsky.feed.post`).
     - **Commits**: Signed snapshots of the repository state.
     
     ### Lexicons
     
     **Lexicons** are JSON schemas that define:
     
     - Record types and their fields.
     - XRPC methods (HTTP-like RPC calls).
     - Subscriptions for real-time data.
     
     Example Lexicon ID: `app.bsky.feed.post`
     
     ### AT-URIs
     
     Records are addressed using **AT-URIs**:
     
     ```sh
     at://did:plc:abc123/app.bsky.feed.post/3jqw2f7
     ```
     
     Format: `at://<authority>/<collection>/<rkey>`
     
     ## Key Technologies
     
     | Component                             | Purpose                                         |
     | ------------------------------------- | ----------------------------------------------- |
    -| [DAG-CBOR](/garden/engineering/atproto/cbor/) | Canonical binary serialization format           |
    -| [MST](/garden/engineering/atproto/mst/)       | Content-addressed, verifiable key-value storage |
    -| [CAR](/garden/engineering/atproto/car/)       | Archive format for repository export/sync       |
    +| [DAG-CBOR](/engineering/atproto/cbor/) | Canonical binary serialization format           |
    +| [MST](/engineering/atproto/mst/)       | Content-addressed, verifiable key-value storage |
    +| [CAR](/engineering/atproto/car/)       | Archive format for repository export/sync       |
     | CIDs                                  | Content identifiers linking to any data block   |
     | XRPC                                  | HTTP-based RPC protocol for API calls           |
    -| [OAuth](/garden/engineering/atproto/oauth/)   | Client authorization and account authentication |
    +| [OAuth](/engineering/atproto/oauth/)   | Client authorization and account authentication |
     
     ## Sync & Federation
     
     ### Repo Sync
     
     Repositories are synchronized using:
     
    -1. **`com.atproto.sync.getRepo`**: Full repository export as a [CAR file](/garden/engineering/atproto/car/).
    +1. **`com.atproto.sync.getRepo`**: Full repository export as a [CAR file](/engineering/atproto/car/).
     2. **`com.atproto.sync.subscribeRepos`**: Real-time firehose of commits across the network.
     
     ### Event Stream
     
     The firehose emits events:
     
     - **Commit**: New or updated records.
     - **Handle**: Handle changes.
     - **Identity**: DID document updates.
     - **Tombstone**: Account deletions.
     
     ## References
     
     - Official protocol specifications covering identity, data, and networking layers.
       [AT Protocol Specification](https://atproto.com/specs)
  • Oauth
    Show diff
    diff --git a/src/content/docs/engineering/atproto/oauth/index.mdx b/src/content/docs/engineering/atproto/oauth/index.mdx
    index d04599a..d57eee4 100644
    --- a/src/content/docs/engineering/atproto/oauth/index.mdx
    +++ b/src/content/docs/engineering/atproto/oauth/index.mdx
    @@ -76,25 +76,25 @@ pretend public clients can keep shared secrets.[^oauth21][^oauth-security]
     
     The flow is correct only if these statements hold at the end:
     
     | Binding         | Question                                                                     |
     | --------------- | ---------------------------------------------------------------------------- |
     | Account binding | Did the token response name the DID the client expected?                     |
     | Server binding  | Is the authorization-server issuer authoritative for that DID's current PDS? |
     | Token binding   | Are the tokens bound to the DPoP key for this client instance?               |
     
     This invariant explains most of the protocol's ceremony. PAR protects the
     authorization request. PKCE protects the code exchange. DPoP protects token use.
     DID and issuer checks protect account authentication.
     
     ## Further Reading
     
    -1. [Clients and Metadata](/garden/engineering/atproto/oauth/clients/)
    -2. [Identity and Discovery](/garden/engineering/atproto/oauth/identity/)
    -3. [Authorization Flow](/garden/engineering/atproto/oauth/flow/)
    -4. [Tokens and Security](/garden/engineering/atproto/oauth/tokens/)
    +1. [Clients and Metadata](/engineering/atproto/oauth/clients/)
    +2. [Identity and Discovery](/engineering/atproto/oauth/identity/)
    +3. [Authorization Flow](/engineering/atproto/oauth/flow/)
    +4. [Tokens and Security](/engineering/atproto/oauth/tokens/)
     
     ## References
     
     [^atproto-oauth]: Bluesky/AT Protocol. ["OAuth"](https://atproto.com/specs/oauth).
     [^oauth21]: IETF OAuth Working Group. ["The OAuth 2.1 Authorization Framework"](https://datatracker.ietf.org/doc/draft-ietf-oauth-v2-1/).
     [^oauth-security]: Lodderstedt, Torsten, et al. [RFC 9700: Best Current Practice for OAuth 2.0 Security](https://datatracker.ietf.org/doc/html/rfc9700).
  • Home
    Show diff
    diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx
    index bf126f1..71c42e9 100644
    --- a/src/content/docs/index.mdx
    +++ b/src/content/docs/index.mdx
    @@ -11,16 +11,16 @@ new or finds some wisdom that resonates with them.
     
     Digital gardens fascinated me for a long time. I miss the days of stumbling upon
     the [odd personal site](https://tilde.town/~dozens/sofa/) and want to be a part of
     bringing that back. I've tried keeping gardens in various iterations with tools
     like notion and even google drive, but nothing has been quite as consistent as a
     combination of [Obsidian](https://obsidian.md/) on my phone, [Neovim](https://neovim.io/)
     on my computer, and [Astro](https://astro.build/) for publishing.
     
     ## Inspiration
     
     Top of the list is definitely the [Blue Book](https://lyz-code.github.io/blue-book/)
     and the writing of [Maggie Appleton](https://maggieappleton.com/). She wrote a
     phenomenal [essay](https://maggieappleton.com/garden-history) on the history & ethos
     of digital gardens.
     
    -Also, take a look at my notes on [cultivating](/garden/writing/cultivation/) a garden.
    +Also, take a look at my notes on [cultivating](/writing/cultivation/) a garden.
  • Aristotle Problem
    Show diff
    diff --git a/src/content/docs/philosophy/aristotle-problem.md b/src/content/docs/philosophy/aristotle-problem.md
    index b618a75..42962bf 100644
    --- a/src/content/docs/philosophy/aristotle-problem.md
    +++ b/src/content/docs/philosophy/aristotle-problem.md
    @@ -5,16 +5,16 @@ title: Aristotle's Problem Domain
     Aristotle's problem domain was trying to define[^1] what makes a person good:
     
     1. What **qualities** they ought to have?
     2. How much should they have?
     3. Is everyone capable of having them?
     4. How do we get them?
     5. What does having them look like?
     
     - The end goal is happiness (eudaimonia/flourishing)
         - To do so we need virtues (things that make us good at being human)
     - We're born with potential to get virtues
         - And a natural aptitude towards some
         - We become virtuous by doing virtuous things (habitual)
     
     [^1]: Schur, Michael. How to Be Perfect: A Foolproof Guide to Making the Correct Moral Decision in Every Situation You Ever Encounter Anywhere on Earth, Forever.
    -First Simon&Schuster hardcover edition, Simon & Schuster, 2022. ([source](/garden/philosophy/book-schur-2023/))
    +First Simon&Schuster hardcover edition, Simon & Schuster, 2022. ([source](/philosophy/book-schur-2023/))
  • Bentham Scale
    Show diff
    diff --git a/src/content/docs/philosophy/bentham-scale.md b/src/content/docs/philosophy/bentham-scale.md
    index 6547092..dbda944 100644
    --- a/src/content/docs/philosophy/bentham-scale.md
    +++ b/src/content/docs/philosophy/bentham-scale.md
    @@ -1,17 +1,17 @@
     ---
     title: Bentham's Scale
     ---
     
     - Intensity
     - Duration
     - Certainty
     - Propinquity (how soon it will happen)
     - Fecundity (how much pleasure)
     - Purity ($\frac{Pleasure}{Pain}$)
     - Extent (how many people benefit)
         - If you're acting publicly, spread as much pleasure you can
     
     ## Backlinks
     
    -1. [How to Be Perfect](/garden/philosophy/book-schur-2023/)
    -2. [The Trolly Problem](/garden/philosophy/trolley-problem/)
    +1. [How to Be Perfect](/philosophy/book-schur-2023/)
    +2. [The Trolly Problem](/philosophy/trolley-problem/)
  • Book Schur 2023
    Show diff
    diff --git a/src/content/docs/philosophy/book-schur-2023.mdx b/src/content/docs/philosophy/book-schur-2023.mdx
    index efa8dad..f17761f 100644
    --- a/src/content/docs/philosophy/book-schur-2023.mdx
    +++ b/src/content/docs/philosophy/book-schur-2023.mdx
    @@ -12,57 +12,57 @@ Written by the venerable Michael Schur, creator of Parks & Recreation and of cou
     <Aside type="tip" title="Ethical Dilemma? Ask yourself..." icon='star'>
         1. What are we doing?
         2. Why are we doing it?
         3. Is there something we could do that’s better?
         4. Why is it better?
     </Aside>
     
     ---
     
     Everything has an ethical undercurrent and everything we do affects somebody
     
     Failure in trying to do the right thing is inevitable
         - But trying means we care
     
     Virtue ethics - what makes a person good or bad?
    -    - [Aristotle](/garden/philosophy/aristotle-problem/) wrestled with this
    +    - [Aristotle](/philosophy/aristotle-problem/) wrestled with this
     
     Brilliant instructors and wise friends are very important
     
     The Golden mean/goldilocks rule is that there is a spectrum that is like a see saw for virtues. If we veer to far towards one extreme, the see saw becomes imbalanced.
         - *ex.* Mildness is the golden mean of anger
         - Very challenging to define
     
     An excess of a virtue can harm the people around you
     
     If we don't take stock of our virtues, we can find ourselves moving towards extremes and these aspects can "calcify."
     
     As you practice, it becomes effortless - Schur talks about how Steve Carrell & Amy Poehler were like that with their comedy
     
     The closer we get to a golden mean, the easier it is to find others.
         - Examples include kindness and generosity
     
     Religious zealots ignore cruelty as it is not a slight against god
     
     Knowledge is how we escape cruelty
     
     ---
     
     <Aside type="note" title="The Trolley Problem" icon='information'>
         Do you let the trolley kill five workers ahead of you or do you switch to the other track and let one worker die?
     
    -    Read more here: [link](/garden/philosophy/trolley-problem/)
    +    Read more here: [link](/philosophy/trolley-problem/)
     
         ---
     
         by Philippa Foot
     </Aside>
     
     ## Quotes
     
     <Aside type="note" title="Hope" icon="open-book">
         With enough work, no one is doomed to be forever deprived of magnanimity or courage or any other desirable quality,
         the way I’m doomed to get lost every time I walk around a parking garage looking for my car.[^1]
     </Aside>
     
     ---
  • Heuristic
    Show diff
    diff --git a/src/content/docs/philosophy/heuristic.md b/src/content/docs/philosophy/heuristic.md
    index c515e78..f572033 100644
    --- a/src/content/docs/philosophy/heuristic.md
    +++ b/src/content/docs/philosophy/heuristic.md
    @@ -1,10 +1,10 @@
     ---
     title: Heuristic
     ---
     
     # Heuristic
     
     - Enter an input and get an output (philosophical algorithm or function).
     - Gives us a rule of thumb for a certain scenario,[^1]  as a guideline for our behavior
     
    -[^1]: [How to Be Perfect](/garden/philosophy/book-schur-2023/)
    +[^1]: [How to Be Perfect](/philosophy/book-schur-2023/)
  • Trolley Problem
    Show diff
    diff --git a/src/content/docs/philosophy/trolley-problem.md b/src/content/docs/philosophy/trolley-problem.md
    index 9752185..b883c23 100644
    --- a/src/content/docs/philosophy/trolley-problem.md
    +++ b/src/content/docs/philosophy/trolley-problem.md
    @@ -1,24 +1,24 @@
     ---
     title: The Trolley Problem
     ---
     
     - The problems arise when circumstances change
         - What if we're at a station with the lever and don't have the same amount of information?
         - What if we know someone on the tracks?
         - What if we push someone over a bridge to slow down the train and save everyone on the tracks?
     - Utilitarianism
         - Branch of consequentialism (only thing that matters is results)
         - The best action is what makes people the most happy (greatest happiness principle)
         - Developed by British philosophers Bentham (wanted himself studied and preserved after death) and Mill (had a rough childhood
    -- [Bentham's Scale](/garden/philosophy/bentham-scale/) is a way to quantify pleasure & pain (hedons & dolors - happiness points & sadness demerits)
    +- [Bentham's Scale](/philosophy/bentham-scale/) is a way to quantify pleasure & pain (hedons & dolors - happiness points & sadness demerits)
     - Utilitarians believe all people's happiness matters equally
     - Correlation does not imply causation
         - Humans don't often know the consequences of their actions
     - Most human actions don't have all the information - before or after
     - Critiques of utilitarianism center on the wide differences between everybody's pleasure and pain
     - When our actions can cause pain and suffering as a result, utilitarianism fails to take into account our integrity
         - Advantage of utilitarianism is a straightforward distribution (those in need get the most)
     
     ## Source/Backlink
     
    -[How to Be Perfect](/garden/philosophy/book-schur-2023/)
    +[How to Be Perfect](/philosophy/book-schur-2023/)
  • Hindley Milner
    Show diff
    diff --git a/src/content/docs/programming/functional_programming/hindley_milner.md b/src/content/docs/programming/functional_programming/hindley_milner.md
    index 74ab16c..1ecbe5f 100644
    --- a/src/content/docs/programming/functional_programming/hindley_milner.md
    +++ b/src/content/docs/programming/functional_programming/hindley_milner.md
    @@ -176,27 +176,27 @@ with Γ mapping variables to schemes. The important rules (up to `let`) are:
        - infer `Γ ⊢ e₁ : τ₁`, `Γ ⊢ e₂ : τ₂`,
        - assert `τ₁` must be `τ₂ -> β` for fresh `β`,
        - unify `τ₁` with `τ₂ -> β`, giving substitution `S`,
        - result type is `S β`.
     
     4. **Let**:
        For `let x = e₁ in e₂`:
     
        - infer `Γ ⊢ e₁ : τ₁`,
        - generalize `τ₁` to `σ = Gen(Γ, τ₁)`,
        - infer `Γ, x:σ ⊢ e₂ : τ₂`,
        - result type is `τ₂`.
     
     ## Algorithm W
     
    -See [Algorithm W](/garden/programming/functional_programming/algo-w/)
    +See [Algorithm W](/programming/functional_programming/algo-w/)
     
     ## Further Reading
     
     1. Bernstein, Max. “Damas-Hindley-Milner Inference Two Ways.” Max Bernstein, 15 Oct. 2024, <https://bernsteinbear.com/blog/type-inference/>.
     2. Diehl, Stephen. "Hindley-Milner Inference" Write You a Haskell. <https://smunix.github.io/dev.stephendiehl.com/fun/006_hindley_milner.html>.
     3. Tuhola, Henri. Hindley-Milner Type System/Algorithm W Study. <https://boxbase.org//entries/2018/mar/5/hindley-milner>.
     4. Hazelden, Phil. A Reckless Introduction to Hindley-Milner Type Inference. <https://reasonableapproximation.net/2019/05/05/hindley-milner.html>.
     
     [^1]: <https://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_system> "Hindley–Milner type system"
     [^2]: <https://www.cs.tufts.edu/~nr/cs257/archive/martin-odersky/hmx.pdf> "Type Inference with Constrained Types"
     [^3]: <https://people.eecs.berkeley.edu/~necula/Papers/DamasMilnerAlgoW.pdf> "Principal type-schemes for functional programs"
  • Autonomy In Work
    Show diff
    diff --git a/src/content/docs/writing/autonomy_in_work.md b/src/content/docs/writing/autonomy_in_work.md
    index 3e9eb08..f363106 100644
    --- a/src/content/docs/writing/autonomy_in_work.md
    +++ b/src/content/docs/writing/autonomy_in_work.md
    @@ -1,9 +1,9 @@
     ---
     title: Autonomy in Work
     ---
     
     This occurs when we are able to break down our work in to small chunks and
     steer it in a direction that is most interesting to us. This removes the need
     for us to use willpower to get things done.[^ref]
     
    -[^ref]: [How to Take Smart Notes](/garden/writing/book-ahrens-2017/) - P. 138
    +[^ref]: [How to Take Smart Notes](/writing/book-ahrens-2017/) - P. 138
  • Book Ahrens 2017
    Show diff
    diff --git a/src/content/docs/writing/book-ahrens-2017.mdx b/src/content/docs/writing/book-ahrens-2017.mdx
    index a0b9f0e..33c104e 100644
    --- a/src/content/docs/writing/book-ahrens-2017.mdx
    +++ b/src/content/docs/writing/book-ahrens-2017.mdx
    @@ -1,103 +1,103 @@
     ---
     title: How to Take Smart Notes
     ---
     
     import { Aside } from '@astrojs/starlight/components';
     
     Two-Slip boxes in one markdown file: note and reference - notes extend and relate to other notes, not in isolation
     (one note can exist in different contexts - basically, we can understand how different ideas[^1])
     
    -Read, Think, Understand - then write your note (woops) - we have to [write to externalize our ideas](/garden/writing/write_to_learn/)
    +Read, Think, Understand - then write your note (woops) - we have to [write to externalize our ideas](/writing/write_to_learn/)
     
     Life requires context switching, and notes with an index can help me pick up where I left off in the thought process. This is important for my work, as I am a knowledge worker
     
     Strip the workflow of everything that can be considered unimportant (I should probably stop using Notion for note taking - only as content management)
     
     The author advises that we always have the tools at hand - pen & paper (anything to capture with)
     
     A journal is a "graveyard for thoughts", the slip box should be for notes[^2]
     
     Asking yourself what you should learn is a useless question - it's easier to do things with a clear view of the destination
         - Deliberate practice helps us become better at making this journey[^3]
     
     > Nothing counts other than writing.
     
     The main goal[^4] of notes is to convey the truth (publishable insight)
     
     Note types: Fleeting, Permanent, Project (-specific)
     
     In order to find a topic, you need to have studied a subject
         - This makes me think of an old interview of Alexisonfire, where George says to make music, you have to listen to music.
     
     > By focusing on what is interesting and keeping written track of *your own intellectual development*,
     > topics, questions and arguments will emerge from the material without force.
     
     Rewarding work starts the positive feedback loop
         - Writing provides the feedback portion (we're forced to assess if we're understanding the material)
    -[Mere Exposure Effect](/garden/writing/mere_exposure_effect/):  If we do something a lot, we *think* we're good at it, even if we're not
    +[Mere Exposure Effect](/writing/mere_exposure_effect/):  If we do something a lot, we *think* we're good at it, even if we're not
     
     Focused attention is not very long. New technology damages our ability to practice sustained attention (where we work on one thing at a time)
     
     Creativity requires keeping an open mind and being able to switch to a narrow, analytical approach
     
     Memo-ize memories - group in to bundles, rather than discrete facts
     
     "Mind Like Water" - get knowledge out of our short term memory
     
     Willpower is like muscles - requires rest and gets exhausted quickly but can be strengthened
     
     Hand writing facilitates understanding because it is slow - college students have to understand what they hear rather than copy it down
     
     Shorter, in your own words allows us to focus on patterns, frames, and categories of an excerpt
     
     Re-reading breeds familiarity, writing forces us to confront misunderstanding
     - Cramming is for short term retention, not for learning
     
     The brain prioritizes comfort and its own happiness (like ego in The Power of Now)
         - Writing was Richard Feynman's thinking process (think outside your brain)
     
    -Forgetting can sometimes be [done by our minds](/garden/writing/active_inhibition/) as a filter so we don't get flooded with memories and associations (think join models in SQL)
    +Forgetting can sometimes be [done by our minds](/writing/active_inhibition/) as a filter so we don't get flooded with memories and associations (think join models in SQL)
     
     Memory can be measured by storage and retrieval strength
         - Storage strength can't be improved
     
     Linking is key!
         - Keep an eye towards other notes and contexts such that you can build the matrix around things you're interested in
     
    -Contradictions, paradoxes and problems help us reassess pre-existing knowledge stored in the slip-box (corrects for the [Feature Positive Effect](/garden/writing/feature_positive_effect/))
    +Contradictions, paradoxes and problems help us reassess pre-existing knowledge stored in the slip-box (corrects for the [Feature Positive Effect](/writing/feature_positive_effect/))
     
     Remember that the slip-box is just a tool[^5]
     
    -[Worldly Wisdom](/garden/writing/worldly_wisdom/): hanging life experiences on mental models
    +[Worldly Wisdom](/writing/worldly_wisdom/): hanging life experiences on mental models
     
     Spaced repitition and active recall are important for information retention.
     
     One idea per permanent note - place limits so that they stay concise.
         - Structure (experiment) and restrictions (assess what is important) are necessary for creativity
     
     The brain prioritizes information that is recently acquired and with emotions attached to it
     
     Evolution works by trial & error, not planning[^6]
     
    -- [Motivation](/garden/writing/motivation_when_studying/) is relational (students must identify with and see the purpose of their work)
    -    - And be [free](/garden/writing/autonomy_in_work/)
    +- [Motivation](/writing/motivation_when_studying/) is relational (students must identify with and see the purpose of their work)
    +    - And be [free](/writing/autonomy_in_work/)
     
     Athletes are more motivated when they imagine the training it takes to win.[^7]
     
     Build new habits to replace old ones, don't force old habits away
    -    - The [goal of learning](/garden/writing/goal_of_learning/) is to evolve
    +    - The [goal of learning](/writing/goal_of_learning/) is to evolve
     
     ## My Routine/Takeaways
     
     Keep a pen & paper handy at all times (if anything, just to avoid opening your phone when in the middle of a book)
     
     Abandon the notion of making perfect notes. Do you think the multicolored shit people made in college is something that would have helped you? Why not just make art instead?
     
     When processing notes, open up the source with anything you've highlighted
         - *ex. the Kindle notes & highlights for this book*
     
     Many of my attitudes towards learning are not conducive to learning, but to accomplishing a very specific task.
     
     Turn the writing everything and thinking about process in to a hobby
     
     [^1]: Page 20
  • Goal Of Learning
    Show diff
    diff --git a/src/content/docs/writing/goal_of_learning.md b/src/content/docs/writing/goal_of_learning.md
    index 23f92a8..9d651c7 100644
    --- a/src/content/docs/writing/goal_of_learning.md
    +++ b/src/content/docs/writing/goal_of_learning.md
    @@ -1,9 +1,9 @@
     ---
     title: Goal of Learning
     ---
     
     > The goal of learning is not to accumulate knowledge but about becoming a different person with a different way of thinking.
     
     The author is trying to say[^1] that we learn to grow, not collect.
     
    -[^1]: [How to Take Smart Notes](/garden/writing/book-ahrens-2017/)
    +[^1]: [How to Take Smart Notes](/writing/book-ahrens-2017/)
  • Motivation When Studying
    Show diff
    diff --git a/src/content/docs/writing/motivation_when_studying.md b/src/content/docs/writing/motivation_when_studying.md
    index 9724a19..f635980 100644
    --- a/src/content/docs/writing/motivation_when_studying.md
    +++ b/src/content/docs/writing/motivation_when_studying.md
    @@ -1,17 +1,17 @@
     ---
     title: Motivation when Studying
     ---
     
     - Students fail when they are not motivated
       - When they don't see the meaning in their work[^1]
       - When they can't connect it to their goals[^2]
    -  - When they lack [freedom](/garden/writing/autonomy_in_work/)
    +  - When they lack [freedom](/writing/autonomy_in_work/)
     
     - Motivation comes best from enjoying your work
       - Turn the writing everything and thinking about process in to a hobby
         - The book says artists and scientists are essentially information hobbyists.
         - Think Rivers Cuomo
     
     [^1]: Balduf, Megan. “Underachievement Among College Students.” Journal of Advanced Academics 20, no. 2 (February 2009): 274–94. <https://doi.org/10.1177/1932202X0902000204>.
     
     [^2]: Glynn, Shawn M., Gita Taasoobshirazi, and Peggy Brickman. “Science Motivation Questionnaire: Construct Validation with Nonscience Majors.” *Journal of Research in Science Teaching* 46, no. 2 (February 2009): 127–46. <https://doi.org/10.1002/tea.20267>.
  • On Writing
    Show diff
    diff --git a/src/content/docs/writing/on_writing.md b/src/content/docs/writing/on_writing.md
    index f688740..24a8105 100644
    --- a/src/content/docs/writing/on_writing.md
    +++ b/src/content/docs/writing/on_writing.md
    @@ -1,14 +1,14 @@
     ---
     title: On Writing
     sidebar:
         order: 1
         badge:
             text: Start
             variant: note
     ---
     
     This section has notes about topics related to writing stories and educational
     material. It includes information about creating a site like this, and the
     backbone of my notes, writing to learn and using a zettlekasten system.
     
    -Here's a seed: [On Cultivating a Digital Garden](/garden/writing/cultivation/)
    +Here's a seed: [On Cultivating a Digital Garden](/writing/cultivation/)
  • Write To Learn
    Show diff
    diff --git a/src/content/docs/writing/write_to_learn.md b/src/content/docs/writing/write_to_learn.md
    index 56cb71a..0b4303a 100644
    --- a/src/content/docs/writing/write_to_learn.md
    +++ b/src/content/docs/writing/write_to_learn.md
    @@ -1,14 +1,14 @@
     ---
     title: Write to Learn
     ---
     
     When you write as you learn, you create a tangible outcome out of what you've read.[^ref]
     
     I think what inhibits me is that I want everything to be perfect and pristine,
     when in reality it's the substance that matters. Notes can be messy and disorganized,
     so long as you understand what you're putting in your brain.
     
     - Write down *anything* you think is helpful to understanding or need to remember
     - When you process, then you can create perfection (the structure is important)
     
    -[^ref]: [How to Take Smart Notes](/garden/writing/book-ahrens-2017/)
    +[^ref]: [How to Take Smart Notes](/writing/book-ahrens-2017/)
build: upgrade astro 16 files updated

Updated

  • Books
    Show diff
    diff --git a/src/content/docs/books.md b/src/content/docs/books.md
    index 39758a6..8cf6378 100644
    --- a/src/content/docs/books.md
    +++ b/src/content/docs/books.md
    @@ -1,12 +1,12 @@
     ---
     title: Books
     sidebar:
         badge:
             text: Start Here
             variant: success
     ---
     
     Links to notes I've taken on books.
     
    -1. [How to Take Smart Notes](/writing/book-ahrens-2017)
    -2. [How to Be Perfect](/philosophy/book-schur-2023)
    +1. [How to Take Smart Notes](/garden/writing/book-ahrens-2017/)
    +2. [How to Be Perfect](/garden/philosophy/book-schur-2023/)
  • Atproto
    Show diff
    diff --git a/src/content/docs/engineering/atproto/index.md b/src/content/docs/engineering/atproto/index.md
    index 41487f0..3fa3ac3 100644
    --- a/src/content/docs/engineering/atproto/index.md
    +++ b/src/content/docs/engineering/atproto/index.md
    @@ -28,92 +28,92 @@ The AT Protocol uses a layered architecture:
     └─────────────────────────────────────────────────┘
     ```
     
     ### Identity
     
     - **DIDs (Decentralized Identifiers)**: Persistent identifiers (e.g., `did:plc:abc123`) that remain stable across server migrations.
     - **Handles**: Human-readable names (e.g., `@alice.bsky.social`) that resolve to DIDs via DNS or HTTP.
     
     ### Personal Data Servers (PDS)
     
     Every user's data lives in a **Personal Data Server**.
     
     A PDS:
     
     - Stores the user's repository (a signed, Merkle-tree-based data structure).
    -- Handles [OAuth authentication and authorization](/engineering/atproto/oauth).
    +- Handles [OAuth authentication and authorization](/garden/engineering/atproto/oauth/).
     - Syncs data to relays and indexers.
     
     ### Relay (BGS)
     
     Relays aggregate data from many PDSs into a unified firehose, enabling:
     
     - Efficient indexing for search and discovery.
     - Feed generators to access content across the network.
     
     ### App View
     
     An **App View** consumes the firehose and provides application-specific APIs. For example, the Bluesky app view provides the social networking experience.
     
     ## Data Model
     
     ### Repositories
     
    -A **repository** is a user's complete data store, structured as a [Merkle Search Tree (MST)](/engineering/atproto/mst).
    +A **repository** is a user's complete data store, structured as a [Merkle Search Tree (MST)](/garden/engineering/atproto/mst/).
     
    -- **Records**: Individual data items (posts, likes, follows) stored as [DAG-CBOR](/engineering/atproto/cbor).
    +- **Records**: Individual data items (posts, likes, follows) stored as [DAG-CBOR](/garden/engineering/atproto/cbor/).
     - **Collections**: Namespaced groups of records (e.g., `app.bsky.feed.post`).
     - **Commits**: Signed snapshots of the repository state.
     
     ### Lexicons
     
     **Lexicons** are JSON schemas that define:
     
     - Record types and their fields.
     - XRPC methods (HTTP-like RPC calls).
     - Subscriptions for real-time data.
     
     Example Lexicon ID: `app.bsky.feed.post`
     
     ### AT-URIs
     
     Records are addressed using **AT-URIs**:
     
     ```sh
     at://did:plc:abc123/app.bsky.feed.post/3jqw2f7
     ```
     
     Format: `at://<authority>/<collection>/<rkey>`
     
     ## Key Technologies
     
     | Component                             | Purpose                                         |
     | ------------------------------------- | ----------------------------------------------- |
    -| [DAG-CBOR](/engineering/atproto/cbor) | Canonical binary serialization format           |
    -| [MST](/engineering/atproto/mst)       | Content-addressed, verifiable key-value storage |
    -| [CAR](/engineering/atproto/car)       | Archive format for repository export/sync       |
    +| [DAG-CBOR](/garden/engineering/atproto/cbor/) | Canonical binary serialization format           |
    +| [MST](/garden/engineering/atproto/mst/)       | Content-addressed, verifiable key-value storage |
    +| [CAR](/garden/engineering/atproto/car/)       | Archive format for repository export/sync       |
     | CIDs                                  | Content identifiers linking to any data block   |
     | XRPC                                  | HTTP-based RPC protocol for API calls           |
    -| [OAuth](/engineering/atproto/oauth)   | Client authorization and account authentication |
    +| [OAuth](/garden/engineering/atproto/oauth/)   | Client authorization and account authentication |
     
     ## Sync & Federation
     
     ### Repo Sync
     
     Repositories are synchronized using:
     
    -1. **`com.atproto.sync.getRepo`**: Full repository export as a [CAR file](/engineering/atproto/car).
    +1. **`com.atproto.sync.getRepo`**: Full repository export as a [CAR file](/garden/engineering/atproto/car/).
     2. **`com.atproto.sync.subscribeRepos`**: Real-time firehose of commits across the network.
     
     ### Event Stream
     
     The firehose emits events:
     
     - **Commit**: New or updated records.
     - **Handle**: Handle changes.
     - **Identity**: DID document updates.
     - **Tombstone**: Account deletions.
     
     ## References
     
     - Official protocol specifications covering identity, data, and networking layers.
       [AT Protocol Specification](https://atproto.com/specs)
  • Oauth
    Show diff
    diff --git a/src/content/docs/engineering/atproto/oauth/index.mdx b/src/content/docs/engineering/atproto/oauth/index.mdx
    index 1c0454a..d04599a 100644
    --- a/src/content/docs/engineering/atproto/oauth/index.mdx
    +++ b/src/content/docs/engineering/atproto/oauth/index.mdx
    @@ -76,25 +76,25 @@ pretend public clients can keep shared secrets.[^oauth21][^oauth-security]
     
     The flow is correct only if these statements hold at the end:
     
     | Binding         | Question                                                                     |
     | --------------- | ---------------------------------------------------------------------------- |
     | Account binding | Did the token response name the DID the client expected?                     |
     | Server binding  | Is the authorization-server issuer authoritative for that DID's current PDS? |
     | Token binding   | Are the tokens bound to the DPoP key for this client instance?               |
     
     This invariant explains most of the protocol's ceremony. PAR protects the
     authorization request. PKCE protects the code exchange. DPoP protects token use.
     DID and issuer checks protect account authentication.
     
     ## Further Reading
     
    -1. [Clients and Metadata](/engineering/atproto/oauth/clients)
    -2. [Identity and Discovery](/engineering/atproto/oauth/identity)
    -3. [Authorization Flow](/engineering/atproto/oauth/flow)
    -4. [Tokens and Security](/engineering/atproto/oauth/tokens)
    +1. [Clients and Metadata](/garden/engineering/atproto/oauth/clients/)
    +2. [Identity and Discovery](/garden/engineering/atproto/oauth/identity/)
    +3. [Authorization Flow](/garden/engineering/atproto/oauth/flow/)
    +4. [Tokens and Security](/garden/engineering/atproto/oauth/tokens/)
     
     ## References
     
     [^atproto-oauth]: Bluesky/AT Protocol. ["OAuth"](https://atproto.com/specs/oauth).
     [^oauth21]: IETF OAuth Working Group. ["The OAuth 2.1 Authorization Framework"](https://datatracker.ietf.org/doc/draft-ietf-oauth-v2-1/).
     [^oauth-security]: Lodderstedt, Torsten, et al. [RFC 9700: Best Current Practice for OAuth 2.0 Security](https://datatracker.ietf.org/doc/html/rfc9700).
  • Home
    Show diff
    diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx
    index ba37340..bf126f1 100644
    --- a/src/content/docs/index.mdx
    +++ b/src/content/docs/index.mdx
    @@ -11,16 +11,16 @@ new or finds some wisdom that resonates with them.
     
     Digital gardens fascinated me for a long time. I miss the days of stumbling upon
     the [odd personal site](https://tilde.town/~dozens/sofa/) and want to be a part of
     bringing that back. I've tried keeping gardens in various iterations with tools
     like notion and even google drive, but nothing has been quite as consistent as a
     combination of [Obsidian](https://obsidian.md/) on my phone, [Neovim](https://neovim.io/)
     on my computer, and [Astro](https://astro.build/) for publishing.
     
     ## Inspiration
     
     Top of the list is definitely the [Blue Book](https://lyz-code.github.io/blue-book/)
     and the writing of [Maggie Appleton](https://maggieappleton.com/). She wrote a
     phenomenal [essay](https://maggieappleton.com/garden-history) on the history & ethos
     of digital gardens.
     
    -Also, take a look at my notes on [cultivating](/writing/cultivation) a garden.
    +Also, take a look at my notes on [cultivating](/garden/writing/cultivation/) a garden.
  • Aristotle Problem
    Show diff
    diff --git a/src/content/docs/philosophy/aristotle-problem.md b/src/content/docs/philosophy/aristotle-problem.md
    index 1b58c8b..b618a75 100644
    --- a/src/content/docs/philosophy/aristotle-problem.md
    +++ b/src/content/docs/philosophy/aristotle-problem.md
    @@ -5,16 +5,16 @@ title: Aristotle's Problem Domain
     Aristotle's problem domain was trying to define[^1] what makes a person good:
     
     1. What **qualities** they ought to have?
     2. How much should they have?
     3. Is everyone capable of having them?
     4. How do we get them?
     5. What does having them look like?
     
     - The end goal is happiness (eudaimonia/flourishing)
         - To do so we need virtues (things that make us good at being human)
     - We're born with potential to get virtues
         - And a natural aptitude towards some
         - We become virtuous by doing virtuous things (habitual)
     
     [^1]: Schur, Michael. How to Be Perfect: A Foolproof Guide to Making the Correct Moral Decision in Every Situation You Ever Encounter Anywhere on Earth, Forever.
    -First Simon&Schuster hardcover edition, Simon & Schuster, 2022. ([source](/philosophy/book-schur-2023))
    +First Simon&Schuster hardcover edition, Simon & Schuster, 2022. ([source](/garden/philosophy/book-schur-2023/))
  • Bentham Scale
    Show diff
    diff --git a/src/content/docs/philosophy/bentham-scale.md b/src/content/docs/philosophy/bentham-scale.md
    index 896fe3a..6547092 100644
    --- a/src/content/docs/philosophy/bentham-scale.md
    +++ b/src/content/docs/philosophy/bentham-scale.md
    @@ -1,17 +1,17 @@
     ---
     title: Bentham's Scale
     ---
     
     - Intensity
     - Duration
     - Certainty
     - Propinquity (how soon it will happen)
     - Fecundity (how much pleasure)
     - Purity ($\frac{Pleasure}{Pain}$)
     - Extent (how many people benefit)
         - If you're acting publicly, spread as much pleasure you can
     
     ## Backlinks
     
    -1. [How to Be Perfect](/philosophy/book-schur-2023)
    -2. [The Trolly Problem](/philosophy/trolley-problem)
    +1. [How to Be Perfect](/garden/philosophy/book-schur-2023/)
    +2. [The Trolly Problem](/garden/philosophy/trolley-problem/)
  • Book Schur 2023
    Show diff
    diff --git a/src/content/docs/philosophy/book-schur-2023.mdx b/src/content/docs/philosophy/book-schur-2023.mdx
    index 7ac570f..efa8dad 100644
    --- a/src/content/docs/philosophy/book-schur-2023.mdx
    +++ b/src/content/docs/philosophy/book-schur-2023.mdx
    @@ -12,57 +12,57 @@ Written by the venerable Michael Schur, creator of Parks & Recreation and of cou
     <Aside type="tip" title="Ethical Dilemma? Ask yourself..." icon='star'>
         1. What are we doing?
         2. Why are we doing it?
         3. Is there something we could do that’s better?
         4. Why is it better?
     </Aside>
     
     ---
     
     Everything has an ethical undercurrent and everything we do affects somebody
     
     Failure in trying to do the right thing is inevitable
         - But trying means we care
     
     Virtue ethics - what makes a person good or bad?
    -    - [Aristotle](/philosophy/aristotle-problem) wrestled with this
    +    - [Aristotle](/garden/philosophy/aristotle-problem/) wrestled with this
     
     Brilliant instructors and wise friends are very important
     
     The Golden mean/goldilocks rule is that there is a spectrum that is like a see saw for virtues. If we veer to far towards one extreme, the see saw becomes imbalanced.
         - *ex.* Mildness is the golden mean of anger
         - Very challenging to define
     
     An excess of a virtue can harm the people around you
     
     If we don't take stock of our virtues, we can find ourselves moving towards extremes and these aspects can "calcify."
     
     As you practice, it becomes effortless - Schur talks about how Steve Carrell & Amy Poehler were like that with their comedy
     
     The closer we get to a golden mean, the easier it is to find others.
         - Examples include kindness and generosity
     
     Religious zealots ignore cruelty as it is not a slight against god
     
     Knowledge is how we escape cruelty
     
     ---
     
     <Aside type="note" title="The Trolley Problem" icon='information'>
         Do you let the trolley kill five workers ahead of you or do you switch to the other track and let one worker die?
     
    -    Read more here: [link](/philosophy/trolley-problem)
    +    Read more here: [link](/garden/philosophy/trolley-problem/)
     
         ---
     
         by Philippa Foot
     </Aside>
     
     ## Quotes
     
     <Aside type="note" title="Hope" icon="open-book">
         With enough work, no one is doomed to be forever deprived of magnanimity or courage or any other desirable quality,
         the way I’m doomed to get lost every time I walk around a parking garage looking for my car.[^1]
     </Aside>
     
     ---
  • Heuristic
    Show diff
    diff --git a/src/content/docs/philosophy/heuristic.md b/src/content/docs/philosophy/heuristic.md
    index 52e8d59..c515e78 100644
    --- a/src/content/docs/philosophy/heuristic.md
    +++ b/src/content/docs/philosophy/heuristic.md
    @@ -1,10 +1,10 @@
     ---
     title: Heuristic
     ---
     
     # Heuristic
     
     - Enter an input and get an output (philosophical algorithm or function).
     - Gives us a rule of thumb for a certain scenario,[^1]  as a guideline for our behavior
     
    -[^1]: [How to Be Perfect](/philosophy/book-schur-2023)
    +[^1]: [How to Be Perfect](/garden/philosophy/book-schur-2023/)
  • Trolley Problem
    Show diff
    diff --git a/src/content/docs/philosophy/trolley-problem.md b/src/content/docs/philosophy/trolley-problem.md
    index e940eb5..9752185 100644
    --- a/src/content/docs/philosophy/trolley-problem.md
    +++ b/src/content/docs/philosophy/trolley-problem.md
    @@ -1,24 +1,24 @@
     ---
     title: The Trolley Problem
     ---
     
     - The problems arise when circumstances change
         - What if we're at a station with the lever and don't have the same amount of information?
         - What if we know someone on the tracks?
         - What if we push someone over a bridge to slow down the train and save everyone on the tracks?
     - Utilitarianism
         - Branch of consequentialism (only thing that matters is results)
         - The best action is what makes people the most happy (greatest happiness principle)
         - Developed by British philosophers Bentham (wanted himself studied and preserved after death) and Mill (had a rough childhood
    -- [Bentham's Scale](/philosophy/bentham-scale) is a way to quantify pleasure & pain (hedons & dolors - happiness points & sadness demerits)
    +- [Bentham's Scale](/garden/philosophy/bentham-scale/) is a way to quantify pleasure & pain (hedons & dolors - happiness points & sadness demerits)
     - Utilitarians believe all people's happiness matters equally
     - Correlation does not imply causation
         - Humans don't often know the consequences of their actions
     - Most human actions don't have all the information - before or after
     - Critiques of utilitarianism center on the wide differences between everybody's pleasure and pain
     - When our actions can cause pain and suffering as a result, utilitarianism fails to take into account our integrity
         - Advantage of utilitarianism is a straightforward distribution (those in need get the most)
     
     ## Source/Backlink
     
    -[How to Be Perfect](/philosophy/book-schur-2023)
    +[How to Be Perfect](/garden/philosophy/book-schur-2023/)
  • Hindley Milner
    Show diff
    diff --git a/src/content/docs/programming/functional_programming/hindley_milner.md b/src/content/docs/programming/functional_programming/hindley_milner.md
    index f3c9100..74ab16c 100644
    --- a/src/content/docs/programming/functional_programming/hindley_milner.md
    +++ b/src/content/docs/programming/functional_programming/hindley_milner.md
    @@ -176,27 +176,27 @@ with Γ mapping variables to schemes. The important rules (up to `let`) are:
        - infer `Γ ⊢ e₁ : τ₁`, `Γ ⊢ e₂ : τ₂`,
        - assert `τ₁` must be `τ₂ -> β` for fresh `β`,
        - unify `τ₁` with `τ₂ -> β`, giving substitution `S`,
        - result type is `S β`.
     
     4. **Let**:
        For `let x = e₁ in e₂`:
     
        - infer `Γ ⊢ e₁ : τ₁`,
        - generalize `τ₁` to `σ = Gen(Γ, τ₁)`,
        - infer `Γ, x:σ ⊢ e₂ : τ₂`,
        - result type is `τ₂`.
     
     ## Algorithm W
     
    -See [Algorithm W](/programming/functional_programming/algo-w)
    +See [Algorithm W](/garden/programming/functional_programming/algo-w/)
     
     ## Further Reading
     
     1. Bernstein, Max. “Damas-Hindley-Milner Inference Two Ways.” Max Bernstein, 15 Oct. 2024, <https://bernsteinbear.com/blog/type-inference/>.
     2. Diehl, Stephen. "Hindley-Milner Inference" Write You a Haskell. <https://smunix.github.io/dev.stephendiehl.com/fun/006_hindley_milner.html>.
     3. Tuhola, Henri. Hindley-Milner Type System/Algorithm W Study. <https://boxbase.org//entries/2018/mar/5/hindley-milner>.
     4. Hazelden, Phil. A Reckless Introduction to Hindley-Milner Type Inference. <https://reasonableapproximation.net/2019/05/05/hindley-milner.html>.
     
     [^1]: <https://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_system> "Hindley–Milner type system"
     [^2]: <https://www.cs.tufts.edu/~nr/cs257/archive/martin-odersky/hmx.pdf> "Type Inference with Constrained Types"
     [^3]: <https://people.eecs.berkeley.edu/~necula/Papers/DamasMilnerAlgoW.pdf> "Principal type-schemes for functional programs"
  • Autonomy In Work
    Show diff
    diff --git a/src/content/docs/writing/autonomy_in_work.md b/src/content/docs/writing/autonomy_in_work.md
    index ea96df5..3e9eb08 100644
    --- a/src/content/docs/writing/autonomy_in_work.md
    +++ b/src/content/docs/writing/autonomy_in_work.md
    @@ -1,9 +1,9 @@
     ---
     title: Autonomy in Work
     ---
     
     This occurs when we are able to break down our work in to small chunks and
     steer it in a direction that is most interesting to us. This removes the need
     for us to use willpower to get things done.[^ref]
     
    -[^ref]: [How to Take Smart Notes](/writing/book-ahrens-2017) - P. 138
    +[^ref]: [How to Take Smart Notes](/garden/writing/book-ahrens-2017/) - P. 138
  • Book Ahrens 2017
    Show diff
    diff --git a/src/content/docs/writing/book-ahrens-2017.mdx b/src/content/docs/writing/book-ahrens-2017.mdx
    index 19e6041..a0b9f0e 100644
    --- a/src/content/docs/writing/book-ahrens-2017.mdx
    +++ b/src/content/docs/writing/book-ahrens-2017.mdx
    @@ -1,103 +1,103 @@
     ---
     title: How to Take Smart Notes
     ---
     
     import { Aside } from '@astrojs/starlight/components';
     
     Two-Slip boxes in one markdown file: note and reference - notes extend and relate to other notes, not in isolation
     (one note can exist in different contexts - basically, we can understand how different ideas[^1])
     
    -Read, Think, Understand - then write your note (woops) - we have to [write to externalize our ideas](/writing/write_to_learn)
    +Read, Think, Understand - then write your note (woops) - we have to [write to externalize our ideas](/garden/writing/write_to_learn/)
     
     Life requires context switching, and notes with an index can help me pick up where I left off in the thought process. This is important for my work, as I am a knowledge worker
     
     Strip the workflow of everything that can be considered unimportant (I should probably stop using Notion for note taking - only as content management)
     
     The author advises that we always have the tools at hand - pen & paper (anything to capture with)
     
     A journal is a "graveyard for thoughts", the slip box should be for notes[^2]
     
     Asking yourself what you should learn is a useless question - it's easier to do things with a clear view of the destination
         - Deliberate practice helps us become better at making this journey[^3]
     
     > Nothing counts other than writing.
     
     The main goal[^4] of notes is to convey the truth (publishable insight)
     
     Note types: Fleeting, Permanent, Project (-specific)
     
     In order to find a topic, you need to have studied a subject
         - This makes me think of an old interview of Alexisonfire, where George says to make music, you have to listen to music.
     
     > By focusing on what is interesting and keeping written track of *your own intellectual development*,
     > topics, questions and arguments will emerge from the material without force.
     
     Rewarding work starts the positive feedback loop
         - Writing provides the feedback portion (we're forced to assess if we're understanding the material)
    -[Mere Exposure Effect](/writing/mere_exposure_effect):  If we do something a lot, we *think* we're good at it, even if we're not
    +[Mere Exposure Effect](/garden/writing/mere_exposure_effect/):  If we do something a lot, we *think* we're good at it, even if we're not
     
     Focused attention is not very long. New technology damages our ability to practice sustained attention (where we work on one thing at a time)
     
     Creativity requires keeping an open mind and being able to switch to a narrow, analytical approach
     
     Memo-ize memories - group in to bundles, rather than discrete facts
     
     "Mind Like Water" - get knowledge out of our short term memory
     
     Willpower is like muscles - requires rest and gets exhausted quickly but can be strengthened
     
     Hand writing facilitates understanding because it is slow - college students have to understand what they hear rather than copy it down
     
     Shorter, in your own words allows us to focus on patterns, frames, and categories of an excerpt
     
     Re-reading breeds familiarity, writing forces us to confront misunderstanding
     - Cramming is for short term retention, not for learning
     
     The brain prioritizes comfort and its own happiness (like ego in The Power of Now)
         - Writing was Richard Feynman's thinking process (think outside your brain)
     
    -Forgetting can sometimes be [done by our minds](/writing/active_inhibition) as a filter so we don't get flooded with memories and associations (think join models in SQL)
    +Forgetting can sometimes be [done by our minds](/garden/writing/active_inhibition/) as a filter so we don't get flooded with memories and associations (think join models in SQL)
     
     Memory can be measured by storage and retrieval strength
         - Storage strength can't be improved
     
     Linking is key!
         - Keep an eye towards other notes and contexts such that you can build the matrix around things you're interested in
     
    -Contradictions, paradoxes and problems help us reassess pre-existing knowledge stored in the slip-box (corrects for the [Feature Positive Effect](/writing/feature_positive_effect))
    +Contradictions, paradoxes and problems help us reassess pre-existing knowledge stored in the slip-box (corrects for the [Feature Positive Effect](/garden/writing/feature_positive_effect/))
     
     Remember that the slip-box is just a tool[^5]
     
    -[Worldly Wisdom](/writing/worldly_wisdom): hanging life experiences on mental models
    +[Worldly Wisdom](/garden/writing/worldly_wisdom/): hanging life experiences on mental models
     
     Spaced repitition and active recall are important for information retention.
     
     One idea per permanent note - place limits so that they stay concise.
         - Structure (experiment) and restrictions (assess what is important) are necessary for creativity
     
     The brain prioritizes information that is recently acquired and with emotions attached to it
     
     Evolution works by trial & error, not planning[^6]
     
    -- [Motivation](/writing/motivation_when_studying) is relational (students must identify with and see the purpose of their work)
    -    - And be [free](/writing/autonomy_in_work)
    +- [Motivation](/garden/writing/motivation_when_studying/) is relational (students must identify with and see the purpose of their work)
    +    - And be [free](/garden/writing/autonomy_in_work/)
     
     Athletes are more motivated when they imagine the training it takes to win.[^7]
     
     Build new habits to replace old ones, don't force old habits away
    -    - The [goal of learning](/writing/goal_of_learning) is to evolve
    +    - The [goal of learning](/garden/writing/goal_of_learning/) is to evolve
     
     ## My Routine/Takeaways
     
     Keep a pen & paper handy at all times (if anything, just to avoid opening your phone when in the middle of a book)
     
     Abandon the notion of making perfect notes. Do you think the multicolored shit people made in college is something that would have helped you? Why not just make art instead?
     
     When processing notes, open up the source with anything you've highlighted
         - *ex. the Kindle notes & highlights for this book*
     
     Many of my attitudes towards learning are not conducive to learning, but to accomplishing a very specific task.
     
     Turn the writing everything and thinking about process in to a hobby
     
     [^1]: Page 20
  • Goal Of Learning
    Show diff
    diff --git a/src/content/docs/writing/goal_of_learning.md b/src/content/docs/writing/goal_of_learning.md
    index 3bb72e6..23f92a8 100644
    --- a/src/content/docs/writing/goal_of_learning.md
    +++ b/src/content/docs/writing/goal_of_learning.md
    @@ -1,9 +1,9 @@
     ---
     title: Goal of Learning
     ---
     
     > The goal of learning is not to accumulate knowledge but about becoming a different person with a different way of thinking.
     
     The author is trying to say[^1] that we learn to grow, not collect.
     
    -[^1]: [How to Take Smart Notes](/writing/book-ahrens-2017)
    +[^1]: [How to Take Smart Notes](/garden/writing/book-ahrens-2017/)
  • Motivation When Studying
    Show diff
    diff --git a/src/content/docs/writing/motivation_when_studying.md b/src/content/docs/writing/motivation_when_studying.md
    index 959a16b..9724a19 100644
    --- a/src/content/docs/writing/motivation_when_studying.md
    +++ b/src/content/docs/writing/motivation_when_studying.md
    @@ -1,17 +1,17 @@
     ---
     title: Motivation when Studying
     ---
     
     - Students fail when they are not motivated
       - When they don't see the meaning in their work[^1]
       - When they can't connect it to their goals[^2]
    -  - When they lack [freedom](/writing/autonomy_in_work)
    +  - When they lack [freedom](/garden/writing/autonomy_in_work/)
     
     - Motivation comes best from enjoying your work
       - Turn the writing everything and thinking about process in to a hobby
         - The book says artists and scientists are essentially information hobbyists.
         - Think Rivers Cuomo
     
     [^1]: Balduf, Megan. “Underachievement Among College Students.” Journal of Advanced Academics 20, no. 2 (February 2009): 274–94. <https://doi.org/10.1177/1932202X0902000204>.
     
     [^2]: Glynn, Shawn M., Gita Taasoobshirazi, and Peggy Brickman. “Science Motivation Questionnaire: Construct Validation with Nonscience Majors.” *Journal of Research in Science Teaching* 46, no. 2 (February 2009): 127–46. <https://doi.org/10.1002/tea.20267>.
  • On Writing
    Show diff
    diff --git a/src/content/docs/writing/on_writing.md b/src/content/docs/writing/on_writing.md
    index 86d07c0..f688740 100644
    --- a/src/content/docs/writing/on_writing.md
    +++ b/src/content/docs/writing/on_writing.md
    @@ -1,14 +1,14 @@
     ---
     title: On Writing
     sidebar:
         order: 1
         badge:
             text: Start
             variant: note
     ---
     
     This section has notes about topics related to writing stories and educational
     material. It includes information about creating a site like this, and the
     backbone of my notes, writing to learn and using a zettlekasten system.
     
    -Here's a seed: [On Cultivating a Digital Garden](/writing/cultivation)
    +Here's a seed: [On Cultivating a Digital Garden](/garden/writing/cultivation/)
  • Write To Learn
    Show diff
    diff --git a/src/content/docs/writing/write_to_learn.md b/src/content/docs/writing/write_to_learn.md
    index 553b59e..56cb71a 100644
    --- a/src/content/docs/writing/write_to_learn.md
    +++ b/src/content/docs/writing/write_to_learn.md
    @@ -1,14 +1,14 @@
     ---
     title: Write to Learn
     ---
     
     When you write as you learn, you create a tangible outcome out of what you've read.[^ref]
     
     I think what inhibits me is that I want everything to be perfect and pristine,
     when in reality it's the substance that matters. Notes can be messy and disorganized,
     so long as you understand what you're putting in your brain.
     
     - Write down *anything* you think is helpful to understanding or need to remember
     - When you process, then you can create perfection (the structure is important)
     
    -[^ref]: [How to Take Smart Notes](/writing/book-ahrens-2017)
    +[^ref]: [How to Take Smart Notes](/garden/writing/book-ahrens-2017/)
docs: lolmets 1 file added

June 4, 2026

feat: add carbon footprint 2 files added

Added

June 2, 2026

fix: link 1 file updated

Updated

  • Motivation When Studying
    Show diff
    diff --git a/src/content/docs/writing/motivation_when_studying.md b/src/content/docs/writing/motivation_when_studying.md
    index 3b1823c..959a16b 100644
    --- a/src/content/docs/writing/motivation_when_studying.md
    +++ b/src/content/docs/writing/motivation_when_studying.md
    @@ -1,17 +1,17 @@
     ---
     title: Motivation when Studying
     ---
     
     - Students fail when they are not motivated
       - When they don't see the meaning in their work[^1]
       - When they can't connect it to their goals[^2]
    -  - When they lack [freedom](/writing/autonomy-in-work)
    +  - When they lack [freedom](/writing/autonomy_in_work)
     
     - Motivation comes best from enjoying your work
       - Turn the writing everything and thinking about process in to a hobby
         - The book says artists and scientists are essentially information hobbyists.
         - Think Rivers Cuomo
     
     [^1]: Balduf, Megan. “Underachievement Among College Students.” Journal of Advanced Academics 20, no. 2 (February 2009): 274–94. <https://doi.org/10.1177/1932202X0902000204>.
     
     [^2]: Glynn, Shawn M., Gita Taasoobshirazi, and Peggy Brickman. “Science Motivation Questionnaire: Construct Validation with Nonscience Majors.” *Journal of Research in Science Teaching* 46, no. 2 (February 2009): 127–46. <https://doi.org/10.1002/tea.20267>.
docs: what we resist persists 1 file added · 2 files updated

Added

Updated

  • Levenshtein Distance
    Show diff
    diff --git a/src/content/docs/programming/algorithms/levenshtein-distance.md b/src/content/docs/programming/algorithms/levenshtein-distance.md
    index 2df5023..d421e1d 100644
    --- a/src/content/docs/programming/algorithms/levenshtein-distance.md
    +++ b/src/content/docs/programming/algorithms/levenshtein-distance.md
    @@ -24,54 +24,55 @@ Distance: `3`
     ## Dynamic Programming
     
     Let `d[i][j]` be the edit distance between:
     
     - the first `i` characters of string `a`
     - the first `j` characters of string `b`
     
     Base cases:
     
     ```text
     d[0][j] = j
     d[i][0] = i
     ```
     
     Those mean an empty string needs `j` insertions to become a prefix of length
    -`j`, and a prefix of length `i` needs `i` deletions to become empty.[^1][^2]
    +`j`, and a prefix of length `i` needs `i` deletions to become empty.[^1]
     
    -Recurrence:
    +Recurrence[^2]:
     
     ```py
     cost = 0 if a[i - 1] == b[j - 1] else 1
     
     d[i][j] = min(
         d[i - 1][j] + 1,        # delete
         d[i][j - 1] + 1,        # insert
         d[i - 1][j - 1] + cost  # substitute or match
     )
     ```
     
     The answer is `d[len(a)][len(b)]`.
     
     ## Complexity
     
     For strings of length `m` and `n`:
     
     - time: `O(mn)`
     - memory: `O(mn)` with the full table
     - memory: `O(min(m, n))` if only the previous row is kept
     
     Use the full table when you need the edit script. Use row compression when you
     only need the distance.
     
     ## Use Case
     
     Levenshtein distance is useful for:
     
     - spell correction
     - fuzzy search
     - typo tolerance
     - approximate matching
     - comparing biological or symbolic sequences
     
     [^1]: V. I. Levenshtein, "Binary Codes Capable of Correcting Deletions, Insertions, and Reversals", 1966 English translation of the 1965 Russian paper. <https://nymity.ch/sybilhunting/pdf/Levenshtein1966a.pdf>
    +
     [^2]: Robert A. Wagner and Michael J. Fischer, "The String-to-String Correction Problem", Journal of the ACM, 1974.
  • Motivation When Studying
    Show diff
    diff --git a/src/content/docs/writing/motivation_when_studying.md b/src/content/docs/writing/motivation_when_studying.md
    index 74b4a14..3b1823c 100644
    --- a/src/content/docs/writing/motivation_when_studying.md
    +++ b/src/content/docs/writing/motivation_when_studying.md
    @@ -1,16 +1,17 @@
     ---
     title: Motivation when Studying
     ---
     
     - Students fail when they are not motivated
    -    - When they don't see the meaning in their work[^1]
    -    - When they can't connect it to their goals[^2]
    -    - When they lack [[Autonomy in Work|freedom]]
    +  - When they don't see the meaning in their work[^1]
    +  - When they can't connect it to their goals[^2]
    +  - When they lack [freedom](/writing/autonomy-in-work)
     
     - Motivation comes best from enjoying your work
    -    - Turn the writing everything and thinking about process in to a hobby
    -        - The book says artists and scientists are essentially information hobbyists.
    -        - Think Rivers Cuomo
    +  - Turn the writing everything and thinking about process in to a hobby
    +    - The book says artists and scientists are essentially information hobbyists.
    +    - Think Rivers Cuomo
     
     [^1]: Balduf, Megan. “Underachievement Among College Students.” Journal of Advanced Academics 20, no. 2 (February 2009): 274–94. <https://doi.org/10.1177/1932202X0902000204>.
    -[^2]: Glynn, Shawn M., Gita Taasoobshirazi, and Peggy Brickman. “Science Motivation Questionnaire: Construct Validation with Nonscience Majors.” _Journal of Research in Science Teaching_ 46, no. 2 (February 2009): 127–46. <https://doi.org/10.1002/tea.20267>.
    +
    +[^2]: Glynn, Shawn M., Gita Taasoobshirazi, and Peggy Brickman. “Science Motivation Questionnaire: Construct Validation with Nonscience Majors.” *Journal of Research in Science Teaching* 46, no. 2 (February 2009): 127–46. <https://doi.org/10.1002/tea.20267>.

June 1, 2026

docs: direnv note 1 file added · 3 files updated

Added

Updated

  • Engineering
    Show diff
    diff --git a/src/content/docs/engineering/index.md b/src/content/docs/engineering/index.md
    index b528bd5..797ea1c 100644
    --- a/src/content/docs/engineering/index.md
    +++ b/src/content/docs/engineering/index.md
    @@ -1,10 +1,6 @@
     ---
     title: Engineering
    -sidebar:
    -    badge:
    -        text: Start
    -        variant: note
     ---
     
     Notes on Software Engineering as an industry and various tools and practices
     that are used.
  • Home
    Show diff
    diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx
    index e885f8c..ba37340 100644
    --- a/src/content/docs/index.mdx
    +++ b/src/content/docs/index.mdx
    @@ -1,17 +1,17 @@
     ---
    -title: Owais' Places
    +title: Welcome
     description: desertthunder's digital garden homepage
     ---
     
     Hi! My name is Owais and this is my digital garden. It's a collection of notes
     I've taken on topics that interest me. This includes a lot of engineering and
     programming notes that I've taken (and continue to take) throughout my career
     and while working on personal projects. My hope is that someone learns something
     new or finds some wisdom that resonates with them.
     
     Digital gardens fascinated me for a long time. I miss the days of stumbling upon
     the [odd personal site](https://tilde.town/~dozens/sofa/) and want to be a part of
     bringing that back. I've tried keeping gardens in various iterations with tools
     like notion and even google drive, but nothing has been quite as consistent as a
     combination of [Obsidian](https://obsidian.md/) on my phone, [Neovim](https://neovim.io/)
     on my computer, and [Astro](https://astro.build/) for publishing.
  • Programming
    Show diff
    diff --git a/src/content/docs/programming/index.md b/src/content/docs/programming/index.md
    index 4720e5f..e093a0d 100644
    --- a/src/content/docs/programming/index.md
    +++ b/src/content/docs/programming/index.md
    @@ -1,30 +1,23 @@
     ---
     title: On Programming
    -sidebar:
    -    badge:
    -        text: Start
    -        variant: note
    -
     ---
     
     This will contain notes related to programming languages I've
     "learned" or am learning. Can you ever really know a
     programming language top to bottom unless you wrote it?
     
     ## Proficiencies
     
    +Updated June 2026
    +
     - TypeScript
     - Python
     - Java
     - Ruby
     - Go
    -
    -## Languages to Learn
    -
    -As of May 2024, these are languages that are on my radar to learn:
    -
    -- C++
    +- Dart
     - Elixir
    +- Gleam
     - Rust
    -- Elm
    -  - or Gleam
    +- F#
    +- OCaml

May 31, 2026

docs: BEAM me up 2 files added

May 29, 2026

docs: add Levenshtein distance algorithm notes 1 file added

May 26, 2026

docs: atproto oauth spec notes 6 files added · 1 file updated

Updated

  • Atproto
    Show diff
    diff --git a/src/content/docs/engineering/atproto/index.md b/src/content/docs/engineering/atproto/index.md
    index 1311215..41487f0 100644
    --- a/src/content/docs/engineering/atproto/index.md
    +++ b/src/content/docs/engineering/atproto/index.md
    @@ -28,83 +28,84 @@ The AT Protocol uses a layered architecture:
     └─────────────────────────────────────────────────┘
     ```
     
     ### Identity
     
     - **DIDs (Decentralized Identifiers)**: Persistent identifiers (e.g., `did:plc:abc123`) that remain stable across server migrations.
     - **Handles**: Human-readable names (e.g., `@alice.bsky.social`) that resolve to DIDs via DNS or HTTP.
     
     ### Personal Data Servers (PDS)
     
     Every user's data lives in a **Personal Data Server**.
     
     A PDS:
     
     - Stores the user's repository (a signed, Merkle-tree-based data structure).
    -- Handles authentication and authorization.
    +- Handles [OAuth authentication and authorization](/engineering/atproto/oauth).
     - Syncs data to relays and indexers.
     
     ### Relay (BGS)
     
     Relays aggregate data from many PDSs into a unified firehose, enabling:
     
     - Efficient indexing for search and discovery.
     - Feed generators to access content across the network.
     
     ### App View
     
     An **App View** consumes the firehose and provides application-specific APIs. For example, the Bluesky app view provides the social networking experience.
     
     ## Data Model
     
     ### Repositories
     
     A **repository** is a user's complete data store, structured as a [Merkle Search Tree (MST)](/engineering/atproto/mst).
     
     - **Records**: Individual data items (posts, likes, follows) stored as [DAG-CBOR](/engineering/atproto/cbor).
     - **Collections**: Namespaced groups of records (e.g., `app.bsky.feed.post`).
     - **Commits**: Signed snapshots of the repository state.
     
     ### Lexicons
     
     **Lexicons** are JSON schemas that define:
     
     - Record types and their fields.
     - XRPC methods (HTTP-like RPC calls).
     - Subscriptions for real-time data.
     
     Example Lexicon ID: `app.bsky.feed.post`
     
     ### AT-URIs
     
     Records are addressed using **AT-URIs**:
     
     ```sh
     at://did:plc:abc123/app.bsky.feed.post/3jqw2f7
     ```
     
     Format: `at://<authority>/<collection>/<rkey>`
     
     ## Key Technologies
     
    -| Component                                    | Purpose                                         |
    -| -------------------------------------------- | ----------------------------------------------- |
    +| Component                             | Purpose                                         |
    +| ------------------------------------- | ----------------------------------------------- |
     | [DAG-CBOR](/engineering/atproto/cbor) | Canonical binary serialization format           |
     | [MST](/engineering/atproto/mst)       | Content-addressed, verifiable key-value storage |
     | [CAR](/engineering/atproto/car)       | Archive format for repository export/sync       |
    -| CIDs                                         | Content identifiers linking to any data block   |
    -| XRPC                                         | HTTP-based RPC protocol for API calls           |
    +| CIDs                                  | Content identifiers linking to any data block   |
    +| XRPC                                  | HTTP-based RPC protocol for API calls           |
    +| [OAuth](/engineering/atproto/oauth)   | Client authorization and account authentication |
     
     ## Sync & Federation
     
     ### Repo Sync
     
     Repositories are synchronized using:
     
     1. **`com.atproto.sync.getRepo`**: Full repository export as a [CAR file](/engineering/atproto/car).
     2. **`com.atproto.sync.subscribeRepos`**: Real-time firehose of commits across the network.
     
     ### Event Stream
     
     The firehose emits events:
     
     - **Commit**: New or updated records.

May 25, 2026

refactor: migrate remaining mkdocs material directives to Asides from starlight 2 files added · 3 files moved · 2 files removed

Moved / renamed

Removed

  • Done
  • Submodality

May 20, 2026

docs: strategy pattern 1 file added

Added

May 17, 2026

feat: update description 1 file updated

Updated

  • Home
    Show diff
    diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx
    index 0d2eae4..e885f8c 100644
    --- a/src/content/docs/index.mdx
    +++ b/src/content/docs/index.mdx
    @@ -1,40 +1,26 @@
     ---
    -title: Desert Thunder's Digital Garden
    +title: Owais' Places
     description: desertthunder's digital garden homepage
     ---
     
    -import { Aside } from '@astrojs/starlight/components';
    -
    -<Aside type="caution" title="Currently Remodeling 🚧">
    -    I've very recently migrated this site from `mkdocs` to `astro/starlight`
    -    and am in the process of updating all of my notes. Please bear with me as
    -    some admonitions/callouts will be broken. You'll see a lot of `!!! info`,
    -    `!!! quote`, or `::: info`, `::: quote` etc. They'll be changed to be more
    -    like this block.
    -
    -    Some links will also be broken.
    -</Aside>
    -
     Hi! My name is Owais and this is my digital garden. It's a collection of notes
     I've taken on topics that interest me. This includes a lot of engineering and
    -programming notes that I've taken throughout my career and while working on
    -personal projects. My hope is that someone learns something new or finds some
    -wisdom that resonates with them.
    +programming notes that I've taken (and continue to take) throughout my career
    +and while working on personal projects. My hope is that someone learns something
    +new or finds some wisdom that resonates with them.
     
    -Digital gardens have been fascinating for me for a long time. I miss the days
    -of stumbling upon [information on an odd personal site](https://tilde.town/~dozens/sofa/)
    -on the internet and want to be a part of bringing that back. I've tried keeping
    -gardens in various iterations with tools like notion and even google drive, but
    -nothing has been quite as consistent as a combination of some plaintext editor
    -(VSCode & now Neovim) or
    -"[Knowledge IDE](https://dev.to/envoy_/obsidian-an-ide-for-your-brain-1bn7)"
    -like Obsidian.
    +Digital gardens fascinated me for a long time. I miss the days of stumbling upon
    +the [odd personal site](https://tilde.town/~dozens/sofa/) and want to be a part of
    +bringing that back. I've tried keeping gardens in various iterations with tools
    +like notion and even google drive, but nothing has been quite as consistent as a
    +combination of [Obsidian](https://obsidian.md/) on my phone, [Neovim](https://neovim.io/)
    +on my computer, and [Astro](https://astro.build/) for publishing.
     
     ## Inspiration
     
    -Top of the list is definitely the [Blue Book](https://lyz-code.github.io/blue-book/).
    -After starting a new python project and activating my virtual environment, I
    -pretty much always install mkdocs with the material theme. That site, while also
    -having some fantastic information, reminded me that I can just use mkdocs.
    +Top of the list is definitely the [Blue Book](https://lyz-code.github.io/blue-book/)
    +and the writing of [Maggie Appleton](https://maggieappleton.com/). She wrote a
    +phenomenal [essay](https://maggieappleton.com/garden-history) on the history & ethos
    +of digital gardens.
     
     Also, take a look at my notes on [cultivating](/writing/cultivation) a garden.
docs: structuring css 1 file added

Added

May 16, 2026

May 11, 2026

docs: golden tests 1 file added

Added

May 7, 2026

docs: di 3 files added
docs: flutter 3 files added

Added

docs: add constellation notes 1 file added
chore: adjust base url 14 files updated

Updated

  • Books
    Show diff
    diff --git a/src/content/docs/books.md b/src/content/docs/books.md
    index 85fadc0..39758a6 100644
    --- a/src/content/docs/books.md
    +++ b/src/content/docs/books.md
    @@ -1,12 +1,12 @@
     ---
     title: Books
     sidebar:
         badge:
             text: Start Here
             variant: success
     ---
     
     Links to notes I've taken on books.
     
    -1. [How to Take Smart Notes](/garden/writing/book-ahrens-2017)
    -2. [How to Be Perfect](/garden/philosophy/book-schur-2023)
    +1. [How to Take Smart Notes](/writing/book-ahrens-2017)
    +2. [How to Be Perfect](/philosophy/book-schur-2023)
  • Atproto
    Show diff
    diff --git a/src/content/docs/engineering/atproto/index.md b/src/content/docs/engineering/atproto/index.md
    index 7e1e465..1311215 100644
    --- a/src/content/docs/engineering/atproto/index.md
    +++ b/src/content/docs/engineering/atproto/index.md
    @@ -46,73 +46,73 @@ A PDS:
     ### Relay (BGS)
     
     Relays aggregate data from many PDSs into a unified firehose, enabling:
     
     - Efficient indexing for search and discovery.
     - Feed generators to access content across the network.
     
     ### App View
     
     An **App View** consumes the firehose and provides application-specific APIs. For example, the Bluesky app view provides the social networking experience.
     
     ## Data Model
     
     ### Repositories
     
    -A **repository** is a user's complete data store, structured as a [Merkle Search Tree (MST)](/garden/engineering/atproto/mst).
    +A **repository** is a user's complete data store, structured as a [Merkle Search Tree (MST)](/engineering/atproto/mst).
     
    -- **Records**: Individual data items (posts, likes, follows) stored as [DAG-CBOR](/garden/engineering/atproto/cbor).
    +- **Records**: Individual data items (posts, likes, follows) stored as [DAG-CBOR](/engineering/atproto/cbor).
     - **Collections**: Namespaced groups of records (e.g., `app.bsky.feed.post`).
     - **Commits**: Signed snapshots of the repository state.
     
     ### Lexicons
     
     **Lexicons** are JSON schemas that define:
     
     - Record types and their fields.
     - XRPC methods (HTTP-like RPC calls).
     - Subscriptions for real-time data.
     
     Example Lexicon ID: `app.bsky.feed.post`
     
     ### AT-URIs
     
     Records are addressed using **AT-URIs**:
     
     ```sh
     at://did:plc:abc123/app.bsky.feed.post/3jqw2f7
     ```
     
     Format: `at://<authority>/<collection>/<rkey>`
     
     ## Key Technologies
     
     | Component                                    | Purpose                                         |
     | -------------------------------------------- | ----------------------------------------------- |
    -| [DAG-CBOR](/garden/engineering/atproto/cbor) | Canonical binary serialization format           |
    -| [MST](/garden/engineering/atproto/mst)       | Content-addressed, verifiable key-value storage |
    -| [CAR](/garden/engineering/atproto/car)       | Archive format for repository export/sync       |
    +| [DAG-CBOR](/engineering/atproto/cbor) | Canonical binary serialization format           |
    +| [MST](/engineering/atproto/mst)       | Content-addressed, verifiable key-value storage |
    +| [CAR](/engineering/atproto/car)       | Archive format for repository export/sync       |
     | CIDs                                         | Content identifiers linking to any data block   |
     | XRPC                                         | HTTP-based RPC protocol for API calls           |
     
     ## Sync & Federation
     
     ### Repo Sync
     
     Repositories are synchronized using:
     
    -1. **`com.atproto.sync.getRepo`**: Full repository export as a [CAR file](/garden/engineering/atproto/car).
    +1. **`com.atproto.sync.getRepo`**: Full repository export as a [CAR file](/engineering/atproto/car).
     2. **`com.atproto.sync.subscribeRepos`**: Real-time firehose of commits across the network.
     
     ### Event Stream
     
     The firehose emits events:
     
     - **Commit**: New or updated records.
     - **Handle**: Handle changes.
     - **Identity**: DID document updates.
     - **Tombstone**: Account deletions.
     
     ## References
     
     - Official protocol specifications covering identity, data, and networking layers.
       [AT Protocol Specification](https://atproto.com/specs)
  • Home
    Show diff
    diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx
    index 4e65215..0d2eae4 100644
    --- a/src/content/docs/index.mdx
    +++ b/src/content/docs/index.mdx
    @@ -25,16 +25,16 @@ Digital gardens have been fascinating for me for a long time. I miss the days
     of stumbling upon [information on an odd personal site](https://tilde.town/~dozens/sofa/)
     on the internet and want to be a part of bringing that back. I've tried keeping
     gardens in various iterations with tools like notion and even google drive, but
     nothing has been quite as consistent as a combination of some plaintext editor
     (VSCode & now Neovim) or
     "[Knowledge IDE](https://dev.to/envoy_/obsidian-an-ide-for-your-brain-1bn7)"
     like Obsidian.
     
     ## Inspiration
     
     Top of the list is definitely the [Blue Book](https://lyz-code.github.io/blue-book/).
     After starting a new python project and activating my virtual environment, I
     pretty much always install mkdocs with the material theme. That site, while also
     having some fantastic information, reminded me that I can just use mkdocs.
     
    -Also, take a look at my notes on [cultivating](/garden/writing/cultivation) a garden.
    +Also, take a look at my notes on [cultivating](/writing/cultivation) a garden.
  • Aristotle Problem
    Show diff
    diff --git a/src/content/docs/philosophy/aristotle-problem.md b/src/content/docs/philosophy/aristotle-problem.md
    index 1e4cdab..1b58c8b 100644
    --- a/src/content/docs/philosophy/aristotle-problem.md
    +++ b/src/content/docs/philosophy/aristotle-problem.md
    @@ -5,16 +5,16 @@ title: Aristotle's Problem Domain
     Aristotle's problem domain was trying to define[^1] what makes a person good:
     
     1. What **qualities** they ought to have?
     2. How much should they have?
     3. Is everyone capable of having them?
     4. How do we get them?
     5. What does having them look like?
     
     - The end goal is happiness (eudaimonia/flourishing)
         - To do so we need virtues (things that make us good at being human)
     - We're born with potential to get virtues
         - And a natural aptitude towards some
         - We become virtuous by doing virtuous things (habitual)
     
     [^1]: Schur, Michael. How to Be Perfect: A Foolproof Guide to Making the Correct Moral Decision in Every Situation You Ever Encounter Anywhere on Earth, Forever.
    -First Simon&Schuster hardcover edition, Simon & Schuster, 2022. ([source](/garden/philosophy/book-schur-2023))
    +First Simon&Schuster hardcover edition, Simon & Schuster, 2022. ([source](/philosophy/book-schur-2023))
  • Bentham Scale
    Show diff
    diff --git a/src/content/docs/philosophy/bentham-scale.md b/src/content/docs/philosophy/bentham-scale.md
    index e08af64..896fe3a 100644
    --- a/src/content/docs/philosophy/bentham-scale.md
    +++ b/src/content/docs/philosophy/bentham-scale.md
    @@ -1,17 +1,17 @@
     ---
     title: Bentham's Scale
     ---
     
     - Intensity
     - Duration
     - Certainty
     - Propinquity (how soon it will happen)
     - Fecundity (how much pleasure)
     - Purity ($\frac{Pleasure}{Pain}$)
     - Extent (how many people benefit)
         - If you're acting publicly, spread as much pleasure you can
     
     ## Backlinks
     
    -1. [How to Be Perfect](/garden/philosophy/book-schur-2023)
    -2. [The Trolly Problem](/garden/philosophy/trolley-problem)
    +1. [How to Be Perfect](/philosophy/book-schur-2023)
    +2. [The Trolly Problem](/philosophy/trolley-problem)
  • Book Schur 2023
    Show diff
    diff --git a/src/content/docs/philosophy/book-schur-2023.mdx b/src/content/docs/philosophy/book-schur-2023.mdx
    index cda3c7b..7ac570f 100644
    --- a/src/content/docs/philosophy/book-schur-2023.mdx
    +++ b/src/content/docs/philosophy/book-schur-2023.mdx
    @@ -12,57 +12,57 @@ Written by the venerable Michael Schur, creator of Parks & Recreation and of cou
     <Aside type="tip" title="Ethical Dilemma? Ask yourself..." icon='star'>
         1. What are we doing?
         2. Why are we doing it?
         3. Is there something we could do that’s better?
         4. Why is it better?
     </Aside>
     
     ---
     
     Everything has an ethical undercurrent and everything we do affects somebody
     
     Failure in trying to do the right thing is inevitable
         - But trying means we care
     
     Virtue ethics - what makes a person good or bad?
    -    - [Aristotle](/garden/philosophy/aristotle-problem) wrestled with this
    +    - [Aristotle](/philosophy/aristotle-problem) wrestled with this
     
     Brilliant instructors and wise friends are very important
     
     The Golden mean/goldilocks rule is that there is a spectrum that is like a see saw for virtues. If we veer to far towards one extreme, the see saw becomes imbalanced.
         - *ex.* Mildness is the golden mean of anger
         - Very challenging to define
     
     An excess of a virtue can harm the people around you
     
     If we don't take stock of our virtues, we can find ourselves moving towards extremes and these aspects can "calcify."
     
     As you practice, it becomes effortless - Schur talks about how Steve Carrell & Amy Poehler were like that with their comedy
     
     The closer we get to a golden mean, the easier it is to find others.
         - Examples include kindness and generosity
     
     Religious zealots ignore cruelty as it is not a slight against god
     
     Knowledge is how we escape cruelty
     
     ---
     
     <Aside type="note" title="The Trolley Problem" icon='information'>
         Do you let the trolley kill five workers ahead of you or do you switch to the other track and let one worker die?
     
    -    Read more here: [link](/garden/philosophy/trolley-problem)
    +    Read more here: [link](/philosophy/trolley-problem)
     
         ---
     
         by Philippa Foot
     </Aside>
     
     ## Quotes
     
     <Aside type="note" title="Hope" icon="open-book">
         With enough work, no one is doomed to be forever deprived of magnanimity or courage or any other desirable quality,
         the way I’m doomed to get lost every time I walk around a parking garage looking for my car.[^1]
     </Aside>
     
     ---
  • Heuristic
    Show diff
    diff --git a/src/content/docs/philosophy/heuristic.md b/src/content/docs/philosophy/heuristic.md
    index 9990964..52e8d59 100644
    --- a/src/content/docs/philosophy/heuristic.md
    +++ b/src/content/docs/philosophy/heuristic.md
    @@ -1,10 +1,10 @@
     ---
     title: Heuristic
     ---
     
     # Heuristic
     
     - Enter an input and get an output (philosophical algorithm or function).
     - Gives us a rule of thumb for a certain scenario,[^1]  as a guideline for our behavior
     
    -[^1]: [How to Be Perfect](/garden/philosophy/book-schur-2023)
    +[^1]: [How to Be Perfect](/philosophy/book-schur-2023)
  • Trolley Problem
    Show diff
    diff --git a/src/content/docs/philosophy/trolley-problem.md b/src/content/docs/philosophy/trolley-problem.md
    index 7021f29..e940eb5 100644
    --- a/src/content/docs/philosophy/trolley-problem.md
    +++ b/src/content/docs/philosophy/trolley-problem.md
    @@ -1,24 +1,24 @@
     ---
     title: The Trolley Problem
     ---
     
     - The problems arise when circumstances change
         - What if we're at a station with the lever and don't have the same amount of information?
         - What if we know someone on the tracks?
         - What if we push someone over a bridge to slow down the train and save everyone on the tracks?
     - Utilitarianism
         - Branch of consequentialism (only thing that matters is results)
         - The best action is what makes people the most happy (greatest happiness principle)
         - Developed by British philosophers Bentham (wanted himself studied and preserved after death) and Mill (had a rough childhood
    -- [Bentham's Scale](/garden/philosophy/bentham-scale) is a way to quantify pleasure & pain (hedons & dolors - happiness points & sadness demerits)
    +- [Bentham's Scale](/philosophy/bentham-scale) is a way to quantify pleasure & pain (hedons & dolors - happiness points & sadness demerits)
     - Utilitarians believe all people's happiness matters equally
     - Correlation does not imply causation
         - Humans don't often know the consequences of their actions
     - Most human actions don't have all the information - before or after
     - Critiques of utilitarianism center on the wide differences between everybody's pleasure and pain
     - When our actions can cause pain and suffering as a result, utilitarianism fails to take into account our integrity
         - Advantage of utilitarianism is a straightforward distribution (those in need get the most)
     
     ## Source/Backlink
     
    -[How to Be Perfect](/garden/philosophy/book-schur-2023)
    +[How to Be Perfect](/philosophy/book-schur-2023)
  • Hindley Milner
    Show diff
    diff --git a/src/content/docs/programming/functional_programming/hindley_milner.md b/src/content/docs/programming/functional_programming/hindley_milner.md
    index d8454fe..f3c9100 100644
    --- a/src/content/docs/programming/functional_programming/hindley_milner.md
    +++ b/src/content/docs/programming/functional_programming/hindley_milner.md
    @@ -176,27 +176,27 @@ with Γ mapping variables to schemes. The important rules (up to `let`) are:
        - infer `Γ ⊢ e₁ : τ₁`, `Γ ⊢ e₂ : τ₂`,
        - assert `τ₁` must be `τ₂ -> β` for fresh `β`,
        - unify `τ₁` with `τ₂ -> β`, giving substitution `S`,
        - result type is `S β`.
     
     4. **Let**:
        For `let x = e₁ in e₂`:
     
        - infer `Γ ⊢ e₁ : τ₁`,
        - generalize `τ₁` to `σ = Gen(Γ, τ₁)`,
        - infer `Γ, x:σ ⊢ e₂ : τ₂`,
        - result type is `τ₂`.
     
     ## Algorithm W
     
    -See [Algorithm W](/garden/programming/functional_programming/algo-w)
    +See [Algorithm W](/programming/functional_programming/algo-w)
     
     ## Further Reading
     
     1. Bernstein, Max. “Damas-Hindley-Milner Inference Two Ways.” Max Bernstein, 15 Oct. 2024, <https://bernsteinbear.com/blog/type-inference/>.
     2. Diehl, Stephen. "Hindley-Milner Inference" Write You a Haskell. <https://smunix.github.io/dev.stephendiehl.com/fun/006_hindley_milner.html>.
     3. Tuhola, Henri. Hindley-Milner Type System/Algorithm W Study. <https://boxbase.org//entries/2018/mar/5/hindley-milner>.
     4. Hazelden, Phil. A Reckless Introduction to Hindley-Milner Type Inference. <https://reasonableapproximation.net/2019/05/05/hindley-milner.html>.
     
     [^1]: <https://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_system> "Hindley–Milner type system"
     [^2]: <https://www.cs.tufts.edu/~nr/cs257/archive/martin-odersky/hmx.pdf> "Type Inference with Constrained Types"
     [^3]: <https://people.eecs.berkeley.edu/~necula/Papers/DamasMilnerAlgoW.pdf> "Principal type-schemes for functional programs"
  • Autonomy In Work
    Show diff
    diff --git a/src/content/docs/writing/autonomy_in_work.md b/src/content/docs/writing/autonomy_in_work.md
    index 31eae5a..ea96df5 100644
    --- a/src/content/docs/writing/autonomy_in_work.md
    +++ b/src/content/docs/writing/autonomy_in_work.md
    @@ -1,9 +1,9 @@
     ---
     title: Autonomy in Work
     ---
     
     This occurs when we are able to break down our work in to small chunks and
     steer it in a direction that is most interesting to us. This removes the need
     for us to use willpower to get things done.[^ref]
     
    -[^ref]: [How to Take Smart Notes](/garden/writing/book-ahrens-2017) - P. 138
    +[^ref]: [How to Take Smart Notes](/writing/book-ahrens-2017) - P. 138
  • Book Ahrens 2017
    Show diff
    diff --git a/src/content/docs/writing/book-ahrens-2017.mdx b/src/content/docs/writing/book-ahrens-2017.mdx
    index 4e39ff5..19e6041 100644
    --- a/src/content/docs/writing/book-ahrens-2017.mdx
    +++ b/src/content/docs/writing/book-ahrens-2017.mdx
    @@ -1,103 +1,103 @@
     ---
     title: How to Take Smart Notes
     ---
     
     import { Aside } from '@astrojs/starlight/components';
     
     Two-Slip boxes in one markdown file: note and reference - notes extend and relate to other notes, not in isolation
     (one note can exist in different contexts - basically, we can understand how different ideas[^1])
     
    -Read, Think, Understand - then write your note (woops) - we have to [write to externalize our ideas](/garden/writing/write_to_learn)
    +Read, Think, Understand - then write your note (woops) - we have to [write to externalize our ideas](/writing/write_to_learn)
     
     Life requires context switching, and notes with an index can help me pick up where I left off in the thought process. This is important for my work, as I am a knowledge worker
     
     Strip the workflow of everything that can be considered unimportant (I should probably stop using Notion for note taking - only as content management)
     
     The author advises that we always have the tools at hand - pen & paper (anything to capture with)
     
     A journal is a "graveyard for thoughts", the slip box should be for notes[^2]
     
     Asking yourself what you should learn is a useless question - it's easier to do things with a clear view of the destination
         - Deliberate practice helps us become better at making this journey[^3]
     
     > Nothing counts other than writing.
     
     The main goal[^4] of notes is to convey the truth (publishable insight)
     
     Note types: Fleeting, Permanent, Project (-specific)
     
     In order to find a topic, you need to have studied a subject
         - This makes me think of an old interview of Alexisonfire, where George says to make music, you have to listen to music.
     
     > By focusing on what is interesting and keeping written track of *your own intellectual development*,
     > topics, questions and arguments will emerge from the material without force.
     
     Rewarding work starts the positive feedback loop
         - Writing provides the feedback portion (we're forced to assess if we're understanding the material)
    -[Mere Exposure Effect](/garden/writing/mere_exposure_effect):  If we do something a lot, we *think* we're good at it, even if we're not
    +[Mere Exposure Effect](/writing/mere_exposure_effect):  If we do something a lot, we *think* we're good at it, even if we're not
     
     Focused attention is not very long. New technology damages our ability to practice sustained attention (where we work on one thing at a time)
     
     Creativity requires keeping an open mind and being able to switch to a narrow, analytical approach
     
     Memo-ize memories - group in to bundles, rather than discrete facts
     
     "Mind Like Water" - get knowledge out of our short term memory
     
     Willpower is like muscles - requires rest and gets exhausted quickly but can be strengthened
     
     Hand writing facilitates understanding because it is slow - college students have to understand what they hear rather than copy it down
     
     Shorter, in your own words allows us to focus on patterns, frames, and categories of an excerpt
     
     Re-reading breeds familiarity, writing forces us to confront misunderstanding
     - Cramming is for short term retention, not for learning
     
     The brain prioritizes comfort and its own happiness (like ego in The Power of Now)
         - Writing was Richard Feynman's thinking process (think outside your brain)
     
    -Forgetting can sometimes be [done by our minds](/garden/writing/active_inhibition) as a filter so we don't get flooded with memories and associations (think join models in SQL)
    +Forgetting can sometimes be [done by our minds](/writing/active_inhibition) as a filter so we don't get flooded with memories and associations (think join models in SQL)
     
     Memory can be measured by storage and retrieval strength
         - Storage strength can't be improved
     
     Linking is key!
         - Keep an eye towards other notes and contexts such that you can build the matrix around things you're interested in
     
    -Contradictions, paradoxes and problems help us reassess pre-existing knowledge stored in the slip-box (corrects for the [Feature Positive Effect](/garden/writing/feature_positive_effect))
    +Contradictions, paradoxes and problems help us reassess pre-existing knowledge stored in the slip-box (corrects for the [Feature Positive Effect](/writing/feature_positive_effect))
     
     Remember that the slip-box is just a tool[^5]
     
    -[Worldly Wisdom](/garden/writing/worldly_wisdom): hanging life experiences on mental models
    +[Worldly Wisdom](/writing/worldly_wisdom): hanging life experiences on mental models
     
     Spaced repitition and active recall are important for information retention.
     
     One idea per permanent note - place limits so that they stay concise.
         - Structure (experiment) and restrictions (assess what is important) are necessary for creativity
     
     The brain prioritizes information that is recently acquired and with emotions attached to it
     
     Evolution works by trial & error, not planning[^6]
     
    -- [Motivation](/garden/writing/motivation_when_studying) is relational (students must identify with and see the purpose of their work)
    -    - And be [free](/garden/writing/autonomy_in_work)
    +- [Motivation](/writing/motivation_when_studying) is relational (students must identify with and see the purpose of their work)
    +    - And be [free](/writing/autonomy_in_work)
     
     Athletes are more motivated when they imagine the training it takes to win.[^7]
     
     Build new habits to replace old ones, don't force old habits away
    -    - The [goal of learning](/garden/writing/goal_of_learning) is to evolve
    +    - The [goal of learning](/writing/goal_of_learning) is to evolve
     
     ## My Routine/Takeaways
     
     Keep a pen & paper handy at all times (if anything, just to avoid opening your phone when in the middle of a book)
     
     Abandon the notion of making perfect notes. Do you think the multicolored shit people made in college is something that would have helped you? Why not just make art instead?
     
     When processing notes, open up the source with anything you've highlighted
         - *ex. the Kindle notes & highlights for this book*
     
     Many of my attitudes towards learning are not conducive to learning, but to accomplishing a very specific task.
     
     Turn the writing everything and thinking about process in to a hobby
     
     [^1]: Page 20
  • Goal Of Learning
    Show diff
    diff --git a/src/content/docs/writing/goal_of_learning.md b/src/content/docs/writing/goal_of_learning.md
    index c26e9fa..3bb72e6 100644
    --- a/src/content/docs/writing/goal_of_learning.md
    +++ b/src/content/docs/writing/goal_of_learning.md
    @@ -1,9 +1,9 @@
     ---
     title: Goal of Learning
     ---
     
     > The goal of learning is not to accumulate knowledge but about becoming a different person with a different way of thinking.
     
     The author is trying to say[^1] that we learn to grow, not collect.
     
    -[^1]: [How to Take Smart Notes](/garden/writing/book-ahrens-2017)
    +[^1]: [How to Take Smart Notes](/writing/book-ahrens-2017)
  • On Writing
    Show diff
    diff --git a/src/content/docs/writing/on_writing.md b/src/content/docs/writing/on_writing.md
    index 1cfdf25..86d07c0 100644
    --- a/src/content/docs/writing/on_writing.md
    +++ b/src/content/docs/writing/on_writing.md
    @@ -1,14 +1,14 @@
     ---
     title: On Writing
     sidebar:
         order: 1
         badge:
             text: Start
             variant: note
     ---
     
     This section has notes about topics related to writing stories and educational
     material. It includes information about creating a site like this, and the
     backbone of my notes, writing to learn and using a zettlekasten system.
     
    -Here's a seed: [On Cultivating a Digital Garden](/garden/writing/cultivation)
    +Here's a seed: [On Cultivating a Digital Garden](/writing/cultivation)
  • Write To Learn
    Show diff
    diff --git a/src/content/docs/writing/write_to_learn.md b/src/content/docs/writing/write_to_learn.md
    index 873dfbe..553b59e 100644
    --- a/src/content/docs/writing/write_to_learn.md
    +++ b/src/content/docs/writing/write_to_learn.md
    @@ -1,14 +1,14 @@
     ---
     title: Write to Learn
     ---
     
     When you write as you learn, you create a tangible outcome out of what you've read.[^ref]
     
     I think what inhibits me is that I want everything to be perfect and pristine,
     when in reality it's the substance that matters. Notes can be messy and disorganized,
     so long as you understand what you're putting in your brain.
     
     - Write down *anything* you think is helpful to understanding or need to remember
     - When you process, then you can create perfection (the structure is important)
     
    -[^ref]: [How to Take Smart Notes](/garden/writing/book-ahrens-2017)
    +[^ref]: [How to Take Smart Notes](/writing/book-ahrens-2017)

April 7, 2026

docs: ux section + narrative note 1 file added

Added

Measuring CO2 Website Carbon