<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Present Quest</title>
    <subtitle>doing now</subtitle>
    <link rel="self" type="application/atom+xml" href="https://present.quest/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://present.quest"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-02-24T18:15:00-04:00</updated>
    <id>https://present.quest/atom.xml</id>
    <entry xml:lang="en">
        <title>D&amp;D Spell Manager v0.1.0</title>
        <published>2026-02-24T18:15:00-04:00</published>
        <updated>2026-02-24T18:15:00-04:00</updated>
        
        <author>
          <name>
            ethan
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://present.quest/spell-manager/"/>
        <id>https://present.quest/spell-manager/</id>
        
        <content type="html" xml:base="https://present.quest/spell-manager/">&lt;p&gt;Learning spells as a new D&amp;amp;D player can feel overwhelming. Especially, given all the other mechanics of the game.&lt;&#x2F;p&gt;
&lt;p&gt;I made a simple &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;spells.present.quest&#x2F;&quot;&gt;spell manager&lt;&#x2F;a&gt; over the weekend rather than searching online for something similar or paying someone. It only has the Cleric spells for now. Each spell is a “card” from &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.dndbeyond.com&#x2F;srd&quot;&gt;the System Reference Document 5.2.1 (“SRD 5.2.1”).&lt;&#x2F;a&gt; that can be prepared, favorited, filtered, or sorted.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>About</title>
        <published>2025-12-28T20:15:21-04:00</published>
        <updated>2025-12-28T20:15:21-04:00</updated>
        
        <author>
          <name>
            ethan
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://present.quest/about/"/>
        <id>https://present.quest/about/</id>
        
        <content type="html" xml:base="https://present.quest/about/">&lt;p&gt;A website for the nostalgia of the 90s&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Offline Wikipedia</title>
        <published>2025-12-27T19:40:00+00:00</published>
        <updated>2025-12-27T22:54:00+00:00</updated>
        
        <author>
          <name>
            ethan
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://present.quest/tailscaled-kiwix-quadlet/"/>
        <id>https://present.quest/tailscaled-kiwix-quadlet/</id>
        
        <content type="html" xml:base="https://present.quest/tailscaled-kiwix-quadlet/">&lt;p&gt;&lt;strong&gt;Creating an Offline Copy of Wikipedia with Tailscaled Kiwix Quadlet&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I have a new self-hosting&#x2F;local-first fascination and an old laptop that was waiting to be upcycled. I might write more about that here later. For now, I’ll cram too many links into this for the curious. Please say ‘hello’ to the first, abruptly technical post on this blog.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;inspiration&quot;&gt;&lt;a href=&quot;#inspiration&quot; class=&quot;secondary anchor&quot;&gt;&lt;small&gt;#&lt;&#x2F;small&gt;&lt;&#x2F;a&gt;Inspiration&lt;&#x2F;h1&gt;
&lt;p&gt;The other day I searched &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ecosystem.ipfs.tech&#x2F;?filters=enabled&quot;&gt;the IPFS ecosystem directory for more projects&lt;&#x2F;a&gt; because I’m enjoying &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;anytype.io&#x2F;&quot;&gt;anytype&lt;&#x2F;a&gt; as a notes app so much. I saw it listed there in a roundabout way. It’s still unclear to me how or if anytype depends on IPFS. In any case, it seems to me the IPFS ecosystem directory may have more projects with &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=9s8OA08ggbM&quot;&gt;a local-first ethos&lt;&#x2F;a&gt;. That’s when I noticed Kiwix &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ecosystem.ipfs.tech&#x2F;project&#x2F;wikipedia-on-ipfs&#x2F;&quot;&gt;listed in the directory.&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kiwix.org&#x2F;&quot;&gt;Kiwix&lt;&#x2F;a&gt; looks like it started as offline wikipedia but it seems to support so much more.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Kiwix is an open-source software that allows you to have the whole Wikipedia at your fingertips! You can browse the content of Wikipedia, TED talks, Stack Exchange, and many other resources without an internet connection. Kiwix is available on various platforms, including Windows, macOS, Linux, Android, and iOS.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;– &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kiwix&#x2F;?q=ipfs&amp;amp;type=all&amp;amp;language=&amp;amp;sort=#about-kiwix&quot;&gt;about-kiwix&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It’s unclear if that directory is maintained or if Kiwix still depends on IPFS.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; In any case, I like the idea of self-hosting an offline copy of the web resources I appreciate. I get to cosplay as my own digital librarian! Let’s give this a try.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;implementation&quot;&gt;&lt;a href=&quot;#implementation&quot; class=&quot;secondary anchor&quot;&gt;&lt;small&gt;#&lt;&#x2F;small&gt;&lt;&#x2F;a&gt;Implementation&lt;&#x2F;h1&gt;
&lt;p&gt;Someone else &lt;em&gt;must&lt;&#x2F;em&gt; have already figure out how to do this so it shouldn’t take me more than an hour, two tops, right? ..right?&lt;&#x2F;p&gt;
&lt;p&gt;I have a yaml template for tailscale-powered pods ready, so all I thought I needed was some config info for spinning up a Kiwix pod, a ZIM file, and a few symlinks. There was an additional piece of dealing with the disappointment that Kiwix doesn’t appear to index ZIM files automatically..?&lt;&#x2F;p&gt;
&lt;p&gt;Utilmately, this boiled down to three things and took about 3-4 hours in the end:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Manually creating a “library” file&lt;&#x2F;li&gt;
&lt;li&gt;Telling Kiwix to monitor the library file for changes&lt;&#x2F;li&gt;
&lt;li&gt;Coming to terms that I’d need to manual update the library file (one command) after I add a new ZIM file (offline copy of a website) to the same directory. Or setup a cronjob on the old laptop.. It’s doubtful I’d be updating that so much.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;kiwix-pod&quot;&gt;&lt;a href=&quot;#kiwix-pod&quot; class=&quot;secondary anchor&quot;&gt;&lt;small&gt;#&lt;&#x2F;small&gt;&lt;&#x2F;a&gt;Kiwix Pod&lt;&#x2F;h2&gt;
&lt;p&gt;A trip over to &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;awesome-selfhosted&#x2F;awesome-selfhosted?tab=readme-ov-file#document-management---e-books&quot;&gt;the awesome-selfhosted repo&lt;&#x2F;a&gt; pointed me to &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.kiwix.org&#x2F;en&#x2F;downloads&#x2F;kiwix-serve&#x2F;&quot;&gt;kiwix-serve&lt;&#x2F;a&gt;. I was led to &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kiwix&#x2F;kiwix-tools&#x2F;pkgs&#x2F;container&#x2F;kiwix-serve&quot;&gt;the GitHub container registry kiwix-serve.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It looks like the image is built from &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kiwix&#x2F;kiwix-tools&#x2F;blob&#x2F;main&#x2F;docker&#x2F;server&#x2F;Dockerfile#L8&quot;&gt;this Dockerfile&lt;&#x2F;a&gt;. That means I need to map to port &lt;code&gt;8080&lt;&#x2F;code&gt;  and mount &lt;code&gt;&#x2F;data&lt;&#x2F;code&gt;  when I configure the pod.&lt;br &#x2F;&gt;
Now all I need to do for this step is setup the quadlet files with this info and generate a tailscale token to add it to the tailnet.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kiwix-json&quot;&gt;&lt;a href=&quot;#kiwix-json&quot; class=&quot;secondary anchor&quot;&gt;&lt;small&gt;#&lt;&#x2F;small&gt;&lt;&#x2F;a&gt;&lt;code&gt;kiwix.json&lt;&#x2F;code&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Placed this in the tailscale config directory. Notice the port is set to &lt;code&gt;8080&lt;&#x2F;code&gt;  so it can proxy to the kiwix container in the pod.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;{
    &amp;quot;TCP&amp;quot;: {
      &amp;quot;443&amp;quot;: {
        &amp;quot;HTTPS&amp;quot;: true
      }
    },
    &amp;quot;Web&amp;quot;: {
      &amp;quot;${TS_CERT_DOMAIN}:443&amp;quot;: {
        &amp;quot;Handlers&amp;quot;: {
          &amp;quot;&#x2F;&amp;quot;: {
            &amp;quot;Proxy&amp;quot;: &amp;quot;http:&#x2F;&#x2F;127.0.0.1:8080&amp;quot;
          }
        }
      }
    },
    &amp;quot;AllowFunnel&amp;quot;: {
      &amp;quot;${TS_CERT_DOMAIN}:443&amp;quot;: false
    }
  }
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;kiwix-kube&quot;&gt;&lt;a href=&quot;#kiwix-kube&quot; class=&quot;secondary anchor&quot;&gt;&lt;small&gt;#&lt;&#x2F;small&gt;&lt;&#x2F;a&gt;&lt;code&gt;kiwix.kube&lt;&#x2F;code&gt;&lt;&#x2F;h3&gt;
&lt;pre&gt;&lt;code&gt;[Kube]
ConfigMap=kiwix.kube.d&#x2F;kiwix-secrets.yaml
Yaml=kiwix.kube.d&#x2F;kiwix.yaml
Network=kiwix.network

[Install]
WantedBy=multi-user.target
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;kiwix-network&quot;&gt;&lt;a href=&quot;#kiwix-network&quot; class=&quot;secondary anchor&quot;&gt;&lt;small&gt;#&lt;&#x2F;small&gt;&lt;&#x2F;a&gt;&lt;code&gt;kiwix.network&lt;&#x2F;code&gt;&lt;&#x2F;h3&gt;
&lt;pre&gt;&lt;code&gt;[Network]
Label=app=kiwix

#https:&#x2F;&#x2F;docs.podman.io&#x2F;en&#x2F;latest&#x2F;markdown&#x2F;podman-systemd.unit.5.html#network-units-network
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;kiwix-kube-d-kiwix-yaml&quot;&gt;&lt;a href=&quot;#kiwix-kube-d-kiwix-yaml&quot; class=&quot;secondary anchor&quot;&gt;&lt;small&gt;#&lt;&#x2F;small&gt;&lt;&#x2F;a&gt;&lt;code&gt;kiwix.kube.d&#x2F;kiwix.yaml&lt;&#x2F;code&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;It’s important to note that &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kiwix&#x2F;kiwix-tools&#x2F;pkgs&#x2F;container&#x2F;kiwix-serve&quot;&gt;ghcr.io&#x2F;kiwix&#x2F;kiwix-serve:latest&lt;&#x2F;a&gt; is an image that appears to be based on &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kiwix&#x2F;kiwix-tools&#x2F;blob&#x2F;main&#x2F;docker&#x2F;server&#x2F;Dockerfile&quot;&gt;this Dockerfile.&lt;&#x2F;a&gt; Importantly,&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kiwix&#x2F;kiwix-tools&#x2F;blob&#x2F;main&#x2F;docker&#x2F;server&#x2F;Dockerfile#L4&quot;&gt; the kiwix-serve image is derived from the ghcr.io&#x2F;kiwix&#x2F;kiwix-tools  image&lt;&#x2F;a&gt; which appears to be defined &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kiwix&#x2F;kiwix-tools&#x2F;blob&#x2F;main&#x2F;docker&#x2F;Dockerfile&quot;&gt;in this Dockerfile&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;We can see the &lt;code&gt;ENTRYPOINT&lt;&#x2F;code&gt;  for the kiwix-serve image is &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kiwix&#x2F;kiwix-tools&#x2F;blob&#x2F;main&#x2F;docker&#x2F;server&#x2F;start.sh&quot;&gt;a script called start.sh&lt;&#x2F;a&gt; which will make sure the serve defaults to start listening on port 8080. Importantly, the kiwix container needs to be started with a different default &lt;code&gt;ENTRYPOINT&lt;&#x2F;code&gt;  than what it’s been built with.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kiwix-tools.readthedocs.io&#x2F;en&#x2F;latest&#x2F;kiwix-serve.html&quot;&gt;kiwix-serve reference doc&lt;&#x2F;a&gt; shows the options we need to start this with:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;kiwix-serve --library --monitorLibrary LIBRARY_FILE_PATH
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can see this added to the command options of the &lt;code&gt;kiwix&lt;&#x2F;code&gt;  container below:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;apiVersion: v1
kind: Pod
metadata:
  name: kiwix
  labels:
    use: &amp;quot;Hosting ZIM files to Read Over HTTPS&amp;quot;
    io.containers.autoupdate: &amp;quot;registry&amp;quot;
spec:
  containers:
    - name: tailscale
      image: docker.io&#x2F;tailscale&#x2F;tailscale:latest
      env:
        - name: TS_AUTHKEY
          valueFrom:
            configMapKeyRef:
              name: kiwix-secrets
              key:  ts-authkey
        - name:  TS_SERVE_CONFIG
          value: &#x2F;config&#x2F;kiwix.json
        - name:  TS_STATE_DIR
          value: &#x2F;var&#x2F;lib&#x2F;tailscale
        - name: TS_EXTRA_ARGS
          value: --hostname=kiwix #--advertise-tags=tag:container # --advertise-exit-node
        # - name:   TS_USERSPACE
        #   value:  &amp;quot;true&amp;quot; # according to https:&#x2F;&#x2F;hub.docker.com&#x2F;r&#x2F;tailscale&#x2F;tailscale this is enabled by default
      securityContext:
        #allowPrivilegeEscalation: true
        capabilities:
          #drop:
            #- CAP_MKNOD
            #- CAP_NET_RAW
            #- CAP_AUDIT_WRITE
          add:
            - CAP_NET_ADMIN
            - CAP_NET_RAW
            - CAP_SYS_MODULE
        privileged: false    
      volumeMounts:
      - name: ts-config
        mountPath: &#x2F;config
      - name: ts-state
        mountPath: &#x2F;var&#x2F;lib
      - name: tunnel
        mountPath: &#x2F;dev&#x2F;net&#x2F;tun

    - name: kiwix
      image: ghcr.io&#x2F;kiwix&#x2F;kiwix-serve:latest
      command: [&amp;quot;kiwix-serve&amp;quot;]
      args:    [&amp;quot;--port&amp;quot;, &amp;quot;8080&amp;quot;, &amp;quot;--library&amp;quot;, &amp;quot;--monitorLibrary&amp;quot;, &amp;quot;library_zim.xml&amp;quot;]
      ports:
      - containerPort: 8080
        hostPort: 13395
        protocol: TCP
      volumeMounts:
      - name :  app-data
        mountPath: &#x2F;data:Z

  restartPolicy: Always
  dnsPolicy: Default
  volumes:
    - name: ts-config
      hostPath:
        path: &#x2F;local&#x2F;path&#x2F;to&#x2F;appdata&#x2F;kiwix&#x2F;tailscale-config
        type: Directory
    - name: ts-state 
      hostPath: 
        path: &#x2F;local&#x2F;path&#x2F;to&#x2F;appdata&#x2F;kiwix&#x2F;tailscale-state
        type: Directory
    - name: tunnel
      hostPath:
        path: &#x2F;dev&#x2F;net&#x2F;tun
        type: CharDevice
    - name: app-data 
      hostPath: 
        path: &#x2F;local&#x2F;path&#x2F;to&#x2F;appdata&#x2F;kiwix&#x2F;data
        type: Directory
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you want to get fancy, you can make the volume mounts to a network filesystem.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kiwix-kube-d-kiwix-secrets-yaml&quot;&gt;&lt;a href=&quot;#kiwix-kube-d-kiwix-secrets-yaml&quot; class=&quot;secondary anchor&quot;&gt;&lt;small&gt;#&lt;&#x2F;small&gt;&lt;&#x2F;a&gt;&lt;code&gt;kiwix.kube.d&#x2F;kiwix-secrets.yaml&lt;&#x2F;code&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;The contents of this file are obviously a secret. For now, this must be a configMap call &lt;code&gt;kiwix-secrets&lt;&#x2F;code&gt; because systemd doesn’t yet support podman secrets. This is necessary so tailscale can retrieve it’s authkey, &lt;code&gt;ts-authkey&lt;&#x2F;code&gt; , to connect to the tailnet.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zim-library&quot;&gt;&lt;a href=&quot;#zim-library&quot; class=&quot;secondary anchor&quot;&gt;&lt;small&gt;#&lt;&#x2F;small&gt;&lt;&#x2F;a&gt;ZIM Library&lt;&#x2F;h2&gt;
&lt;p&gt;The container will die without a zim file or library to start with. We need to create a library file to avoid this. To make this easier on ourselves, install kiwix-tools.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install kiwix-tools -y
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Download some zim files from &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;library.kiwix.org&#x2F;#lang=eng&quot;&gt;the Kiwix library&lt;&#x2F;a&gt; to add to our own library xml file. Pu the files in the directory that will be mounted to the &lt;code&gt;&#x2F;data&lt;&#x2F;code&gt;  dir in the kiwix pod.&lt;br &#x2F;&gt;
To create the library file, from that dir on the host (NOTE: it seems this command needs to be manually rerun to update the library file whenever you want to add a new zim to the library):&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;kiwix-manage library_zim.xml add *.zim
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now all the zim files in &lt;code&gt;&#x2F;data&lt;&#x2F;code&gt;  have been added to the library file.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;deployment&quot;&gt;&lt;a href=&quot;#deployment&quot; class=&quot;secondary anchor&quot;&gt;&lt;small&gt;#&lt;&#x2F;small&gt;&lt;&#x2F;a&gt;Deployment&lt;&#x2F;h2&gt;
&lt;p&gt;Next is to put all the the quadlet files in the right place.&lt;&#x2F;p&gt;
&lt;p&gt;After the quadlet files are in &lt;code&gt;&#x2F;etc&#x2F;containers&#x2F;systemd&#x2F;&lt;&#x2F;code&gt;  (running this as root for a proof of concept, can deal with making this rootless if I like it enough down the line) and &lt;code&gt;kiwix.json&lt;&#x2F;code&gt;  is in the tailscale config dir, next we reload the systemd daemon to generate the kiwix systemd service.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl daemon-reload
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now start &lt;code&gt;kiwix&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl start kiwix

&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;and-beyond&quot;&gt;&lt;a href=&quot;#and-beyond&quot; class=&quot;secondary anchor&quot;&gt;&lt;small&gt;#&lt;&#x2F;small&gt;&lt;&#x2F;a&gt;And Beyond&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;create-own-zim-files&quot;&gt;&lt;a href=&quot;#create-own-zim-files&quot; class=&quot;secondary anchor&quot;&gt;&lt;small&gt;#&lt;&#x2F;small&gt;&lt;&#x2F;a&gt;Create own ZIM files&lt;&#x2F;h2&gt;
&lt;p&gt;There’s an openzim tool called &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;openzim&#x2F;zimit&quot;&gt;zimit&lt;&#x2F;a&gt;  that can be used to create DIY zim files for an personal offline copy of a website.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;The Kiwix &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kiwix&#x2F;ipfs-portal&quot;&gt;ipfs-portal github repo&lt;&#x2F;a&gt; has only 15 commits. Most of which are 3-4 years old and the most recent was only to the index.html file. Seems they depend on ZIM files rather than IPFS at this point. &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kiwix.org&#x2F;en&#x2F;code&#x2F;&quot;&gt;Kiwix docs&lt;&#x2F;a&gt; reference &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.openzim.org&#x2F;wiki&#x2F;OpenZIM&quot;&gt;ZIM&lt;&#x2F;a&gt;, and it looks like the IPFS association is from 2017 and maybe was only &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;observer.com&#x2F;2017&#x2F;05&#x2F;turkey-wikipedia-ipfs&#x2F;&quot;&gt;a proof of concept for IPFS&lt;&#x2F;a&gt;.
   &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Patience and Rest</title>
        <published>2025-11-06T17:15:00+00:00</published>
        <updated>2025-11-06T17:15:00+00:00</updated>
        
        <author>
          <name>
            ethan
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://present.quest/break-glass/"/>
        <id>https://present.quest/break-glass/</id>
        
        <content type="html" xml:base="https://present.quest/break-glass/">&lt;p&gt;Today I came across a curious file before wiping my computer’s harddrive. Not one to pass up on mysterious notes from a former self, I opened &lt;code&gt;inCaseOfCritic-BreakGlass.odt&lt;&#x2F;code&gt; and found a message to a stranger I wrote almost a decade ago.&lt;&#x2F;p&gt;
&lt;p&gt;Eight years ago, I was in an online course to overcome social anxiety. A person posted on the forum that they felt too overwhelmed to engage in the coursework. They lamented how it drove them to procrastinate, creating further distance between them and their goals. I sent them what I hoped would be an encouraging message. I figured I might forget what I learned, so I saved it for my future self too.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hey L,&lt;&#x2F;p&gt;
&lt;p&gt;It sounds like you are farther along in the course than I am, but procrastinating and freaking out when we challenge ourselves is normal. I’m doing it right now! Haha&lt;&#x2F;p&gt;
&lt;p&gt;There was a time in my life where I met a bear of a man with a soft, open heart. He had been practicing Brazilian Jiu Jitsu for a decade and was answering my questions about it. Brandon was twice my weight and a foot taller than me. One day I told him, “I wouldn’t stand a chance against somebody your size on the mat. Even if I had been doing it as long as you. Even if I was really good.” He gently explained to me why I was wrong.&lt;&#x2F;p&gt;
&lt;p&gt;Brandon told me that beginners always burn themselves out trying to attack their opponent when their opponent has them pinned. He said the more experience practitioners understand this and they simply let the beginners waste their energy. Once the white belts have exhausted themselves with panic and frustration they don’t stand a chance. But if they learn to defend themselves against &lt;em&gt;their own panic&lt;&#x2F;em&gt; then they can methodically turn the tables on their opponent no matter the size difference.&lt;&#x2F;p&gt;
&lt;p&gt;Years later I went to a Jiu Jitsu class. At the beginning of the week I was frantically struggling each time I was pinned (all the time). I had learned the mechanics. But they didn’t work. It made me angry. In my anger I pushed hard against my opponent. Nothing worked. By the end of the week I had remembered Brandon’s words and those of my instructor. I started to breathe more deeply when I was pinned. I moved more slowly. I was more intentional about conserving my energy. And it worked! I wasn’t able to best my opponent by the end of the week. But my match-ups were lasting longer and longer.&lt;&#x2F;p&gt;
&lt;p&gt;J is right. It’s okay to take a break. It can feel like we are trapped under a heavyweight identity that is not serving us. I’m scared I won’t ever get over it sometimes. It’s going to take a lot of energy and intention to find our way to best our inner challengers. Maybe we try choosing to intentionally conserve our energy in the face of inner criticism?&lt;&#x2F;p&gt;
&lt;p&gt;We could end up procrastinating in times where our struggle would regularly wear us out enough. For me, my procrastination makes me fearful that I’ll lose my progress or forget the valuable lessons I’ve learned. It’s gas on a fire and it leaves me feeling burnt out. But what if it was more like Jiu Jitsu? What if we remember that we’re under heavyweight identities and we take focused action to not over-react? What if instead of misdirected force we gathered our energy? What if instead of getting worn out by our opponents we let them wear themselves out? What if we got ourselves into a position of control over our inner critics?&lt;&#x2F;p&gt;
&lt;p&gt;Let’s gather our power! Gather our energy! Let’s not give it to the inner critics. Instead we can be intentional. We can take breaks. We can choose rest instead of sliding into procrastination. We can do this.&lt;&#x2F;p&gt;
&lt;p&gt;You got this, sir. You can do it!&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;My inner critic and perfectionism has been flaring across my life these last few weeks. Work, friendships, projects, dating, civic life: everywhere I could take more action until I burn myself out. And I nearly have too. Thankfully, before beginning a new project, &lt;code&gt;inCaseOfCritic-BreakGlass.odt&lt;&#x2F;code&gt; reminded me to stop with intention and that burn-out is not a measure of success. Sometimes action is counter-productive. So I am reminded of a passage by Thich Nhat Hanh:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;When people say, “Don’t just sit there, do something,” they’re urging you to act. But if the quality of your being is poor – if you don’t have enough peace, understanding, and equanimity, if you still have a lot of anger and worries – then your actions will also be poor. Your actions should be based on the foundation of a high quality of being. Being is non-action, so the quality of action depends on the quality of non-action. Non-action is already something. There are people who don’t seem to do very much, but their presence is crucial for the well-being of the world. You may know people like this, who are steady, not always busy doing things, not making a lot of money, or being engaged in a lot of projects, but who are very important to you; the quality of their presences makes them truly available. They are contributing non-action, the high quality of their presence. To be in the here and the now – solid and fully alive – is a very positive contribution to our collective situation.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Red Lentil Curry</title>
        <published>2025-10-05T16:15:00-04:00</published>
        <updated>2025-10-05T16:15:00-04:00</updated>
        
        <author>
          <name>
            ethan
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://present.quest/red-lentil-curry/"/>
        <id>https://present.quest/red-lentil-curry/</id>
        
        <content type="html" xml:base="https://present.quest/red-lentil-curry/">&lt;p&gt;Nisha Vora’s &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rainbowplantlife.com&#x2F;vegan-red-lentil-curry&#x2F;#recipe&quot;&gt;Red Lentil Curry&lt;&#x2F;a&gt; is my go-to meal prep, potluck, make-a-guest-feel-welcome-in-the-winter recipe. If you make the spice blend in bulk it comes together in a snap and scales well with a big enough pot.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Toolbelt for Life</title>
        <published>2025-09-28T16:12:52-04:00</published>
        <updated>2025-09-28T16:12:52-04:00</updated>
        
        <author>
          <name>
            ethan
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://present.quest/spiritual-utility/"/>
        <id>https://present.quest/spiritual-utility/</id>
        
        <content type="html" xml:base="https://present.quest/spiritual-utility/">&lt;h1 id=&quot;utility&quot;&gt;&lt;a href=&quot;#utility&quot; class=&quot;secondary anchor&quot;&gt;&lt;small&gt;#&lt;&#x2F;small&gt;&lt;&#x2F;a&gt;Utility&lt;&#x2F;h1&gt;
&lt;p&gt;Laborers use tools. Tools are necessary to complete work more safely and speedily. In the factory, shop, or site the most adaptable and effective tools rise from the ranks of the toolchest. They find themselves closer at hand. These tools reside on the worker’s toolbelt.&lt;&#x2F;p&gt;
&lt;p&gt;A toolbelt shouldn’t get in the way. An awkward toolbelt can become a hazard or slow work. Each job may require a different set of most effective tools. The tools on a belt may change depending on the job.&lt;&#x2F;p&gt;
&lt;p&gt;Many jobs share common tools on a belt: a light for seeing; a knife for cutting; a marker for marking, pliers for gripping, a wrech for wrenching etc. Other jobs require special tools on the belt. Some tools are so adaptable they become more than a tool. They become a utility.&lt;&#x2F;p&gt;
&lt;p&gt;A “utility” is something that is used, serving, or working on several capacities as needed, especially.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A toolbelt is more than a tool itself. The toolbelt makes critical tools more accessible. A toolbelt carries various tools on a person at different times. A toolbelt is an organizing system, a timesaving pocket, and sometimes a cupholder. The toolbelt itself is a utility.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;choice&quot;&gt;&lt;a href=&quot;#choice&quot; class=&quot;secondary anchor&quot;&gt;&lt;small&gt;#&lt;&#x2F;small&gt;&lt;&#x2F;a&gt;Choice&lt;&#x2F;h1&gt;
&lt;p&gt;Life is laborious sometimes.&lt;&#x2F;p&gt;
&lt;p&gt;To me, it seems wise to work through life’s labored times by equipping myself with safe and speedy tools to attend the needs of the moment.&lt;&#x2F;p&gt;
&lt;p&gt;Over the years, I collected a small catalog of raincoats for weathering the labors of life. Most maladaptive for most storms. Many effective enough. Nearly all unfashionable.&lt;&#x2F;p&gt;
&lt;p&gt;For the sake of the metaphor and my rumbling stomach, let’s pretend these raincoats are “tools” one might find on a toolbelt. There’s too many for me to wear on my belt at once. It’s cumbersome and awkward. Some need to go back to the toolchest (or the closet if you’d prefer to mix metaphors).&lt;&#x2F;p&gt;
&lt;p&gt;Which will stay on the toolbelt? Many jobs share a common set of tools that could go on the belt, after all. Why not have the most adaptive and effective &lt;em&gt;set&lt;&#x2F;em&gt; of tools on my Toolbelt for Life that I can?&lt;&#x2F;p&gt;
&lt;p&gt;Many of the tools are similar enough. I’ve got six raincoats and three kinds of sunscreen. I may do best choosing the most adaptive of each type.&lt;&#x2F;p&gt;
&lt;p&gt;How should I know what the best tools are?&lt;&#x2F;p&gt;
&lt;p&gt;We have an abundance of spiritual wisdom from millenia of human history. Great and ancient teachers teach principles that resonate with our sense of shared humanity throughout the ages. Great teachers of all stripes preach principles like truth, non‑violence, compassion, and service to others. These principles are tools for us to use. And like any tool, they take practice to use and improve else our skills with them will degrade over time.&lt;&#x2F;p&gt;
&lt;p&gt;I can’t help but wonder:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Is the primary value of spiritual practice the honing of the utility of the practice’s principles for use in everyday life? Partly, so I think.&lt;&#x2F;li&gt;
&lt;li&gt;Is mindfulness the toolbelt of the spirit? Mostly partly, I think.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thefreedictionary.com&#x2F;utility&quot;&gt;The Free Dictionary&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Writing for now</title>
        <published>2025-06-27T23:32:52-04:00</published>
        <updated>2025-06-27T23:32:52-04:00</updated>
        
        <author>
          <name>
            ethan
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://present.quest/what-am-i-doing/"/>
        <id>https://present.quest/what-am-i-doing/</id>
        
        <content type="html" xml:base="https://present.quest/what-am-i-doing/">&lt;p&gt;I practice content consumption accidentally and far too often.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Every once and a while I will sense a “pattern” in the content I take in. When I’m lucky, what I’m sensing is actually a lesson that I might be able to apply in my life. Thankfully, I’m a pretty lucky guy.&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately, my memory is… awesome&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;  and what comes for me next is forgetfulness. I believe writing (and more importantly, editing) may help me focus my learning. For now, I’m rationalizing this weblog for reasons I may likely debunk in a later post.&lt;&#x2F;p&gt;
&lt;p&gt;Firstly, the perception of potential audience incentivizes me to edit and focus my thoughts in a way a diary wouldn’t.&lt;&#x2F;p&gt;
&lt;p&gt;Secondly, I want to believe this will support me to transform an accidental practice of consuming with screens to an intentional practice of creating with them.&lt;&#x2F;p&gt;
&lt;p&gt;And finally, I’d prefer to be more concise in my speech and more generous with my curiosity and listening with others. I want this to exercise the pontificating I sometimes do out of my system so I may be more present with others.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;To me “content” is information that can be consumed with a blunted focus. Books, for example, aren’t content to me because I cannot read a book accidentally. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;I read somewhere that a humble confidence in one’s memory can improve its function. Perhaps in the book “&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;artofmemory.com&#x2F;blog&#x2F;moonwalking-with-einstein-joshua-foer&#x2F;&quot;&gt;Moonwalking with Einstein&lt;&#x2F;a&gt;?” Please don’t quote me because I don’t remember. It’s been almost a decade since I lost that book at a train station and I hadn’t quite caught on to the memory palace technique by then. &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
</feed>
