---
title: 'Bitcoin Mempools Cleared: Is Nobody Using Bitcoin?'
+type: missive
date: 2025-02-09
modified: 2025-10-24
description: Bitcoin mempools have cleared before and there's no immediate reason to panic.
---
title: Minimum UTXO Value
+type: missive
date: 2023-08-04
modified: 2025-02-07
description: A look at what Bitcoin dust is, historical fee rates, how fees are calculated, and a decision on a minimum UTXO value to stay above the dust threshold.
---
title: Monetary System Enshittification
+type: missive
date: 2024-03-01
modified: 2025-01-27
description: Is the US monetary system experiencing enshittification? And how do we solve it?
---
title: 'R1 vs. o1: AI as Commodity or Moat'
+type: missive
date: 2025-01-27
modified: 2025-10-24
description: Is DeepSeek's R1 an existential threat to OpenAI?
---
title: 'Removing a Drive from a Btrfs Array'
+type: marginalia
date: 2023-07-05
modified: 2024-12-23
description: If a drive is failing in an array, Btrfs could block attempts at removing the drive due to corrupted files. A quick write-up of how to get it removed.
---
-category: movie
+type: movie
title: 28 Days Later
date: 2025-06-06
modified: 2025-12-07
---
-category: movie
+type: movie
title: A Cinderella Story
date: 2026-03-15
modified: 2026-03-16
---
-category: movie
+type: movie
title: A Complete Unknown
date: 2025-06-04
modified: 2025-06-04
---
-category: movie
+type: movie
title: Boiling Point
date: 2026-04-11
modified: 2026-04-11
---
-category: movie
+type: movie
title: Bugonia
date: 2025-10-30
modified: 2025-11-01
---
-category: movie
+type: movie
title: Burning
date: 2025-02-28
modified: 2025-03-02
---
-category: movie
+type: movie
title: Call Me By Your Name
date: 2026-03-22
modified: 2026-03-23
---
-category: movie
+type: movie
title: Casino Royale
date: 2025-12-14
modified: 2025-12-16
---
-category: movie
+type: movie
title: Caught Stealing
date: 2025-09-12
modified: 2025-09-13
---
-category: movie
+type: movie
title: Challengers
date: 2024-12-24
modified: 2024-12-26
---
-category: movie
+type: movie
title: Chef
date: 2026-03-14
modified: 2026-03-16
---
-category: movie
+type: movie
title: Conclave
date: 2025-03-02
modified: 2025-03-18
---
-category: movie
+type: movie
title: Death Becomes Her
date: 2025-10-02
modified: 2025-10-07
---
-category: movie
+type: movie
title: 'Den of Thieves: Pantera'
date: 2025-10-18
modified: 2025-10-19
---
-category: movie
+type: movie
title: Donnie Darko
date: 2026-01-07
modified: 2026-01-09
---
-category: movie
+type: movie
title: 'F1: The Movie'
date: 2025-10-16
modified: 2025-10-17
---
-category: movie
+type: movie
title: Fallen Angels
date: 2025-08-02
modified: 2025-10-24
---
-category: movie
+type: movie
title: Gnomeo & Juliet
date: 2026-03-01
modified: 2026-03-02
---
-category: movie
+type: movie
title: Hamnet
date: 2026-02-13
modified: 2026-02-14
---
-category: book
+type: book
title: House of Huawei
date: 2025-07-13
modified: 2025-12-27
---
-category: movie
+type: movie
title: The Hunchback of Notre Dame
date: 2025-03-04
modified: 2025-03-22
---
-category: movie
+type: movie
title: It's What's Inside
date: 2025-03-01
modified: 2025-03-02
---
-category: movie
+type: movie
title: Jurassic Park
date: 2025-09-10
modified: 2025-09-13
---
-category: movie
+type: movie
title: Marty Supreme
date: 2026-01-21
modified: 2026-01-23
---
-category: movie
+type: movie
title: Materialists
date: 2025-08-14
modified: 2025-08-15
---
-category: movie
+type: movie
title: Moulin Rouge!
date: 2025-12-25
modified: 2025-12-26
---
-category: movie
+type: movie
title: Mulholland Drive
date: 2025-12-06
modified: 2025-12-07
---
-category: movie
+type: movie
title: Noah
date: 2025-12-24
modified: 2025-12-25
---
-category: movie
+type: movie
title: Nosferatu
date: 2025-09-09
modified: 2025-09-13
---
-category: movie
+type: movie
title: One Battle After Another
date: 2025-10-01
modified: 2025-10-04
---
-category: movie
+type: movie
title: 'Patlabor: The Movie'
date: 2026-01-11
modified: 2026-01-11
---
-category: movie
+type: movie
title: People We Meet on Vacation
date: 2026-02-12
modified: 2026-02-14
---
-category: movie
+type: movie
title: Perfect Days
date: 2025-02-15
modified: 2025-02-15
---
-category: movie
+type: movie
title: Problemista
date: 2025-11-04
modified: 2025-11-06
---
-category: movie
+type: movie
title: Sinners
date: 2025-05-02
modified: 2025-05-02
---
-category: movie
+type: movie
title: 'Star Wars: Episode III - Revenge of the Sith'
date: 2025-09-05
modified: 2025-09-07
---
-category: movie
+type: movie
title: Subservience
date: 2024-12-25
modified: 2024-12-26
---
-category: movie
+type: movie
title: Superman
date: 2025-10-04
modified: 2025-10-04
---
-category: movie
+type: movie
title: Taipei Story
date: 2025-12-27
modified: 2025-12-28
---
-category: movie
+type: movie
title: The Apprentice
date: 2025-09-06
modified: 2025-09-07
---
-category: movie
+type: movie
title: The Boy and the Heron
date: 2024-12-21
modified: 2024-12-23
---
-category: movie
+type: movie
title: The Godfather
date: 2025-11-16
modified: 2025-11-19
---
-category: movie
+type: movie
title: The Little Mermaid
date: 2026-01-01
modified: 2026-01-01
---
-category: movie
+type: movie
title: 'The Lord of the Rings: The Fellowship of the Ring'
date: 2025-11-26
modified: 2025-11-30
---
-category: movie
+type: movie
title: The Pianist
date: 2026-04-11
modified: 2026-04-11
---
-category: movie
+type: movie
title: The Social Network
date: 2025-12-28
modified: 2025-12-29
---
-category: movie
+type: movie
title: The Swan Princess
date: 2026-03-17
modified: 2026-03-18
---
-category: movie
+type: movie
title: Thunderbolts*
date: 2026-01-01
modified: 2026-01-01
---
-category: movie
+type: movie
title: Tick, Tick... Boom!
date: 2025-12-27
modified: 2025-12-28
---
-category: movie
+type: movie
title: Wake Up Dead Man
date: 2025-12-15
modified: 2025-12-16
---
-category: movie
+type: movie
title: Warfare
date: 2025-04-11
modified: 2025-04-11
---
-category: movie
+type: movie
title: When Harry Met Sally...
date: 2025-12-30
modified: 2026-01-01
---
-category: movie
+type: movie
title: 'Wicked: For Good'
date: 2025-11-25
modified: 2025-11-25
---
-category: movie
+type: movie
title: Wicked
date: 2024-11-29
modified: 2025-06-04
>{modifiedDate}</time
>
</li>
+ <li
+ data-pagefind-meta={`type:${entryData.type}`}
+ data-pagefind-filter={`type:${entryData.type}`}
+ >
+ Type: {entryData.type}
+ </li>
{entryData.tags && <li>Tags: {entryData.tags.join(', ')}</li>}
{
entryData.posse && (
--- /dev/null
+<span class="badge">
+ <slot />
+</span>
+
+<style>
+ .badge {
+ margin-inline-end: 0.5rem;
+ display: inline-block;
+ padding: 0.15rem 0.5rem;
+ color: var(--color-text);
+ background-color: transparent;
+ border: 1px solid var(--color-border);
+ border-radius: 0;
+ font-family: var(--font-sans);
+ font-size: 0.8rem;
+ line-height: 1.2;
+ white-space: nowrap;
+ }
+</style>
---
import { getCollection, type CollectionKey } from 'astro:content';
+import Badge from '@components/ui/badge.astro';
import sortByDate from '@utils/sortByDate';
import generateContentUrl from '@utils/generateContentUrl';
interface Props {
collection: CollectionKey;
+ limit?: number;
}
-const { collection } = Astro.props;
+const { collection, limit } = Astro.props;
const entries = await getCollection(collection);
const sorted = sortByDate(entries);
+const displayedEntries =
+ typeof limit === 'number' ? sorted.slice(0, limit) : sorted;
---
<dl>
{
- sorted.map((entry) => (
+ displayedEntries.map((entry) => (
<>
<dt>
<a href={generateContentUrl(entry)}>
<h4>{entry.data.title}</h4>
</a>
</dt>
- {entry.data.description && <dd>{entry.data.description}</dd>}
+ <dd>
+ <Badge>{entry.data.type}</Badge>
+ {entry.data.description && entry.data.description}
+ </dd>
</>
))
}
const articles = defineCollection({
loader: glob({ pattern: '**/*.{md,mdx}', base: 'content/articles' }),
- schema: baseSchema,
+ schema: baseSchema.extend({
+ type: z.enum(['marginalia', 'missive']),
+ }),
});
const podcasts = defineCollection({
loader: glob({ pattern: '**/*.{md,mdx}', base: 'content/reviews' }),
schema: baseSchema.extend({
rating: z.int().gt(0).lte(5),
- category: z.enum(['book', 'game', 'movie', 'music', 'show']),
+ type: z.enum(['book', 'game', 'movie', 'music', 'show']),
}),
});
const { Content } = await render(item);
const content = await container.renderToString(Content);
const categories = (item.data.tags ?? []).concat(item.collection);
- if (item.collection === 'reviews') {
- categories.push(item.data.category);
- }
+ categories.push(item.data.type);
let title: string;
let description: string;
---
import Base from '@layouts/base.astro';
-
-const contributions = [
- {
- title: 'Git',
- url: 'https://git.otsuka.systems',
- },
- {
- title: 'Arch User Repository',
- url: 'https://aur.archlinux.org/packages?O=0&SeB=M&K=cotsuka&outdated=&SB=p&SO=d&PP=50&submit=Go',
- },
- {
- title: 'ArchWiki',
- url: 'https://wiki.archlinux.org/title/Special:Contributions/Cotsuka',
- },
- {
- title: 'GitHub',
- url: 'https://github.com/search?q=author%3Acotsuka&type=pullrequests',
- },
- {
- title: 'Wikipedia',
- url: 'https://en.wikipedia.org/wiki/Special:Contributions/Cotsuka',
- },
-];
+import ContentList from '@components/ui/contentlist.astro';
---
<Base
vehicles, and built the internal tech stack that glues everything together.
</p>
</section>
- <section data-pagefind-body>
- <h2>Contributions</h2>
- <ul>
- {
- contributions.map((contribution) => {
- return (
- <li>
- <a href={contribution.url}>{contribution.title}</a>
- </li>
- );
- })
- }
- </ul>
+ <section data-pagefind-ignore>
+ <h2>Latest Articles</h2>
+ <ContentList collection="articles" limit={5} />
</section>
</article>
</Base>
export async function getStaticPaths() {
const reviews = await getCollection('reviews');
return reviews.map((review) => ({
- params: { category: review.data.category, id: review.id },
+ params: { type: review.data.type, id: review.id },
props: { entry: review },
}));
}
export async function getStaticPaths() {
const reviews = await getCollection('reviews');
return reviews.map((review) => ({
- params: { category: review.data.category, id: review.id },
+ params: { type: review.data.type, id: review.id },
props: { entry: review },
}));
}
<table>
<thead>
<tr>
- <th scope="col">Category</th>
+ <th scope="col">Type</th>
<th scope="col">Title</th>
<th scope="col">Rating</th>
</tr>
{
sortedReviews.map((review) => (
<tr>
- <td>{review.data.category}</td>
+ <td>{review.data.type}</td>
<td>
<h4>
<a href={generateContentUrl(review)}>{review.data.title}</a>
<div class="searchFilters" aria-label="Search result filters">
<pagefind-filter-dropdown filter="category" label="Category"
></pagefind-filter-dropdown>
+ <pagefind-filter-dropdown filter="type" label="Type"
+ ></pagefind-filter-dropdown>
<pagefind-filter-dropdown
filter="tag"
label="Tag"
.searchFilters {
display: grid;
- grid-template-columns: repeat(2, minmax(0, 1fr));
+ grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 1rem;
margin-block: 1rem;
}
case 'podcasts':
return `/podcasts/${item.id}/`;
case 'reviews':
- return `/reviews/${item.data.category}/${item.id}/`;
+ return `/reviews/${item.data.type}/${item.id}/`;
}
}