<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://aubrielee.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://aubrielee.com/" rel="alternate" type="text/html" /><updated>2026-02-27T04:56:28+00:00</updated><id>https://aubrielee.com/feed.xml</id><title type="html">aubrielee</title><entry><title type="html">Aubrie Lee - Training my senses using my phone</title><link href="https://aubrielee.com/training-my-senses" rel="alternate" type="text/html" title="Aubrie Lee - Training my senses using my phone" /><published>2025-12-21T00:00:00+00:00</published><updated>2025-12-21T00:00:00+00:00</updated><id>https://aubrielee.com/training-my-senses</id><content type="html" xml:base="https://aubrielee.com/training-my-senses"><![CDATA[<h1 id="training-my-senses-using-my-phone">Training my senses using my phone</h1>

<p class="centeredText noIndent">2025.12.21</p>
<p><br /></p>

<p>I’ve explored ways to make my phone enhance my understanding of my physical and temporal world. Two of these ways are by perfecting my pitch and gauging the passage of time.</p>

<h2 id="perfecting-my-pitch">perfecting my pitch</h2>
<p>I watched a documentary called the Social Dilemma, which described how tech companies manipulate attention via notifications. I decided to be much more judicious about what I’d let my phone bother me about; I am now quick to turn off all notifications for apps that give me even a single unsolicited one.</p>

<p>Beyond that, I thought, how could I make notifications further work for my benefit? I realized I could use them to train my ear. For the notifications I do allow, such as messages from friends and family, I’ve set my default notification sound to middle C.</p>

<h2 id="marking-the-time">marking the time</h2>
<p>I have my phone vibrate at the :00, :20, and :40 marks, so that I can calibrate my sense of duration and have an idea of what time it is even if I’m not looking at a clock.</p>

<p>If I’m looking at my computer when my phone buzzes, it reminds me to spend some time looking away from my screen. Sometimes, when I’m rushing to catch a bus or train, I’ll feel my phone buzz in my purse and have a better sense of how much time I have without stopping to look at my watch.</p>

<p>In the past, I used MacroDroid to play a buzz from a list of presets, but after I had to <a href="https://verse.aubrielee.com/@Aubrie/115504160660682936">reset my phone</a>, MacroDroid no longer worked. I discovered that <a href="https://llamalab.com/automate/">Automate by LlamaLab</a> not only allowed me to achieve what MacroDroid did, it also let me customize the buzz (and Automate is free without ads, unlike MacroDroid).
<br />
<br /></p>

<p>To play different vibration patterns every 20 minutes while the phone isn’t plugged in, I use this flow:
<br />
<br /></p>
<ol>
    <li><strong>Flow beginning</strong></li>
    <br />
    <li><strong>Await time</strong>
        <br />
        Wait for :00, :20, and :40.
        <pre>Proceed = Exact</pre>

        <pre>Time of day = time(dateFormat(Now, "H"), dateFormat(Now, "m") - (dateFormat(Now, "m") % 20) + 20)</pre>
        <em>based on <a href="https://www.reddit.com/r/AutomateUser/comments/1mnohda/comment/n86j3r2/">this forum comment</a>.</em>
    </li>
    <br />
    <li><strong>Is power source plugged</strong>
        <br />
        <pre>Proceed = Immediately</pre>
        <br />
        <ul>
            <li style="margin-left:0">Yes → Loop back to block 2.
            <br />
            Don't buzz if the phone is plugged in (a proxy for when I'm sleeping).
            </li>
            <br />
            <li style="margin-left:0">No → <strong>Vibrate</strong>
                <br />
                Play two half-second buzzes (pause for 0 milliseconds, buzz for 500 milliseconds, pause for 500 milliseconds, buzz for 500 milliseconds), a 1-second buzz followed by a half-second buzz (pause for 0 seconds, buzz for 1000 milliseconds, pause for 500 milliseconds, buzz for 500 milliseconds), and a half-second buzz followed by a 1-second buzz.  
                <pre>Pattern = {"0": [0, 500, 500, 500], "1": [0, 1000, 500, 500], "2": [0, 500, 500, 1000]}[dateFormat(Now, "m") // 20]</pre>
                <em>with credit and many thanks to <a href="https://github.com/henrik-lindqvist">Henrik Lindqvist</a>.</em>  
                <br />
                <br />
                Then loop back to block 2.
            </li>
        </ul>
    </li>
</ol>
<p><br /></p>

<p>Whenever I sense these time-based vibrations, I try to take a moment to breathe, drink water, and appreciate the world around me. I call this “Rexist”—remember to reenter existence.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Training my senses using my phone]]></summary></entry><entry><title type="html">Aubrie Lee - How to make a website with Eleventy and NearlyFreeSpeech</title><link href="https://aubrielee.com/eleventy" rel="alternate" type="text/html" title="Aubrie Lee - How to make a website with Eleventy and NearlyFreeSpeech" /><published>2025-06-14T00:00:00+00:00</published><updated>2025-06-14T00:00:00+00:00</updated><id>https://aubrielee.com/eleventy</id><content type="html" xml:base="https://aubrielee.com/eleventy"><![CDATA[<h1 id="how-to-make-a-website-with-eleventy-and-nearlyfreespeech">How to make a website with Eleventy and NearlyFreeSpeech</h1>

<p class="centeredText noIndent">2025.06.14</p>

<p><br /></p>

<p>I’m mostly writing this to remind myself. I honestly don’t much care for NearlyFreeSpeech, as I find its copy and documentation to be terribly unclear. I can’t promise this little article of mine will be much clearer.</p>

<p>Eleventy is a static site generator that helps one make webpages, which one can then upload to a hosting platform like NearlyFreeSpeech via a file transfer software. This article covers:</p>
<ol>
  <li>Making a basic webpage with Eleventy.</li>
  <li>Setting up NearlyFreeSpeech hosting with a custom third-party domain.</li>
  <li>Uploading your site.</li>
</ol>

<h2 id="1-make-a-webpage-with-eleventy">1. make a webpage with eleventy</h2>

<p>You’ll set up a basic page you can visit locally on your computer. Later, you’ll upload it to the internet.</p>

<h3 id="set-up-eleventy">set up eleventy</h3>

<p class="noIndent">To simplify <a href="https://www.11ty.dev/">Eleventy’s documentation</a> in a way that makes sense to me:</p>

<ul>
  <li>Open a terminal window on your computer.</li>
  <li>Enter <code class="language-plaintext highlighter-rouge">node --version</code> to check whether you have Node.js version 18 or newer installed.</li>
  <li>If you don’t, follow <a href="https://nodejs.org/en/download/">nodejs.org’s documentation to download it</a>. That site has a “Copy to clipboard” button, but you’ll need to enter each non-comment line into your terminal one at a time.</li>
  <li>Make a folder on your computer called whatever you’d like (but use special characters at your own risk), e.g., <strong>eleventy-project</strong>.</li>
  <li>Change directory in your terminal to the <strong>eleventy-project</strong> folder. I do this by typing <code class="language-plaintext highlighter-rouge">cd</code> and then dragging the folder into the terminal window. Then hit enter. For example:</li>
</ul>
<pre>
cd /Users/Documents/eleventy-project
</pre>
<ul>
  <li>Enter into terminal:</li>
</ul>
<pre>
npx @11ty/eleventy --serve
</pre>
<p>Eleventy should start running continuously.</p>

<h3 id="make-a-rudimentary-webpage">make a rudimentary webpage</h3>

<p>In the <strong>eleventy-project</strong> folder, make a plain-text Markdown file called <strong>index.md</strong>. I rather loathe Markdown, yet here I am using it.</p>

<p>Here’s a basic page you can put in that file:</p>

<pre>
# Hello, world.

Abolish portrait mode.
</pre>

<p>Eleventy makes (? maybe you have to make it yourself) a subfolder called <strong>_site</strong>, in which it creates the main index.html and other files that you’ll later upload to NearlyFreeSpeech.</p>

<p>While it’s running, Eleventy hosts the <strong>index.html</strong> file at <code class="language-plaintext highlighter-rouge">http://localhost:8080/</code>. Enter that into your browser’s address bar, and the browser should display your site.</p>

<p>When you update and save your <strong>index.md</strong> file, your site at <code class="language-plaintext highlighter-rouge">http://localhost:8080/</code> should update, too.</p>

<h2 id="2-set-up-domain-and-hosting">2. set up domain and hosting</h2>

<p class="noIndent">You’ll set up the place that’ll hold your site online.</p>

<ul>
  <li>Rent a domain at some registrar. I try not to rent any domain for more than $12 a year. I used a third-party registrar, not NearlyFreeSpeech.</li>
  <li>Make a NearlyFreeSpeech.Net (NFSN) account. You don’t need the paid membership to use hosting.</li>
  <li>Add money to the account, on the order of $20.</li>
  <li>Make a new site. Name the site the same as your second-level domain. For example, if you rented <strong>something.com</strong>, name your NFSN site <strong>something</strong>. You do not need DNS from NFSN.</li>
</ul>

<h3 id="connect-your-third-party-domain-to-nfsn">connect your third-party domain to NFSN</h3>

<p>No amount of internet searching gave me an easy answer to this, and NFSN’s documentation sure didn’t help, so I figured it out myself by trial and retrial.</p>
<ul>
  <li>In NFSN, go to <strong>sites</strong>, then click on the short name of your site (e.g., <strong>something</strong>).</li>
  <li>On the page called <strong>something Site Information</strong>, find <strong>Web Site IP Addresses</strong>. Note those two numbers (e.g., ###.##.###.## and ####:####:##:#::####).</li>
  <li>Go to the DNS settings of your site in your third-party domain registrar.</li>
  <li>Erase any A, AAAA, and CNAME records.</li>
  <li>Set up an A record with Host being <strong>something.com</strong> and Answer being the first IP address (e.g., ###.##.###.##).</li>
  <li>Set up an AAAA record with Host being <strong>something.com</strong> and Answer being the second IP address (e.g., ####:####:##:#::####).</li>
  <li>Set up a CNAME record with Host being <strong>www.something.com</strong> and answer being <strong>something.nfshost.com</strong>.</li>
</ul>

<p><br /></p>

<p>It’ll take a while for HTTPS rather than HTTP to be enabled (not sure who enables it). When it is enabled, a 🔐 emoji will appear next to all three <strong>Site Names &amp; Aliases</strong> at the top of the site information page on NFSN.</p>

<h2 id="3-upload-your-website-using-ftp">3. upload your website using FTP</h2>

<ul>
  <li>Take note of the <strong>SSH/SFTP Information</strong> section of your NFSN site information page.</li>
  <li>Get a file transfer protocol (FTP) app. I won’t say which I use, because it isn’t accessible to screen readers.</li>
  <li>Connect to your NFSN site using the FTP app. For Host, use the <strong>SSH/SFTP Hostname</strong> from your NFSN site information page. For Username and Password, use the <strong>Username</strong> and <strong>Password</strong> from that page. For Port, use <strong>22</strong>.</li>
  <li>Once you’re connected, your FTP app should show you a directory of files locally and files on NFSN.</li>
  <li>Under the <strong>public</strong> folder of your NFSN site, upload the contents of your <strong>eleventy-project</strong> &gt; <strong>_site</strong> subfolder. Don’t upload the <strong>_site</strong> folder itself. At this point, you probably have only an index.html file.</li>
</ul>

<p><br /></p>

<p>To update files after editing them locally, just upload them to NFSN and overwrite their past versions.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[How to make a website with Eleventy and NearlyFreeSpeech]]></summary></entry><entry><title type="html">Aubrie Lee - Clothing</title><link href="https://aubrielee.com/clothing" rel="alternate" type="text/html" title="Aubrie Lee - Clothing" /><published>2024-12-02T00:00:00+00:00</published><updated>2024-12-02T00:00:00+00:00</updated><id>https://aubrielee.com/clothing</id><content type="html" xml:base="https://aubrielee.com/clothing"><![CDATA[<h1 id="my-needs-and-wants-in-clothing">My needs and wants in clothing</h1>

<p class="centeredText noIndent">2024.12.02</p>

<p><br /></p>

<p>I’m in search of clothes that are easy for others to put on me and that I enjoy wearing.</p>

<h2 id="latest">Latest</h2>
<h3 id="articles-im-missing">Articles I’m missing</h3>
<ul>
  <li>Summer gloves (long gloves)</li>
  <li>Winter gloves</li>
  <li>Summer cape with magnetic clasps</li>
  <li>Winter cape with magnetic clasps</li>
  <li>Rain cape with magnetic clasps</li>
</ul>

<h3 id="articles-i-could-use-more-of">Articles I could use more of</h3>
<ul>
  <li>Skirts</li>
  <li>Dresses</li>
</ul>

<h3 id="articles-i-already-have-a-lot-of">Articles I already have a lot of</h3>
<ul>
  <li>Black clothes</li>
</ul>

<h2 id="specifications">Specifications</h2>
<h3 id="my-sizes">My sizes</h3>
<ul>
  <li>Clothes: 4</li>
  <li>Shoes: 8 W or 8.5 W</li>
  <li>Gloves: 7.25 inch hand circumference; 3.5 inch middle finger; 2.25 inch thumb</li>
</ul>

<h3 id="things-i-like">Things I like</h3>

<p class="noIndent">Functionally, these work well:</p>
<ul>
  <li>Magnetic closures</li>
  <li>Quality zippers</li>
  <li>Midi or maxi length skirts</li>
</ul>

<p><br /></p>

<p class="noIndent">Aesthetically, I like:</p>
<ul>
  <li>Gradients</li>
  <li>Tapers</li>
  <li>Gold</li>
  <li>Elegance</li>
</ul>

<h3 id="things-that-dont-work-for-me">Things that don’t work for me</h3>

<p class="noIndent">Functionally, these do not work well:</p>
<ul>
  <li>Buttons (they are difficult to operate and get caught on my long hair)</li>
  <li>Belts</li>
  <li>Double-layer skirts with a loose inner layer (difficult to position correctly under me in wheelchair)</li>
  <li>Designs that slip off my shoulders (e.g., low backs, spaghetti straps)</li>
</ul>

<p><br /></p>

<p class="noIndent">Aesthetically, I don’t care for:</p>
<ul>
  <li>Uniform patterns (e.g., plaid, polka dots)</li>
  <li>Blockiness (e.g., tiered skirts)</li>
  <li>Orange; neon; muddy colors, especially muddy green</li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[My needs and wants in clothing]]></summary></entry><entry><title type="html">Aubrie Lee - A ramp, a tent, and a weekend well spent</title><link href="https://aubrielee.com/a-ramp-a-tent-and-a-weekend-well-spent" rel="alternate" type="text/html" title="Aubrie Lee - A ramp, a tent, and a weekend well spent" /><published>2024-06-11T00:00:00+00:00</published><updated>2024-06-11T00:00:00+00:00</updated><id>https://aubrielee.com/camping</id><content type="html" xml:base="https://aubrielee.com/a-ramp-a-tent-and-a-weekend-well-spent"><![CDATA[<h1 id="a-ramp-a-tent-and-a-weekend-well-spent">A ramp, a tent, and a weekend well spent</h1>

<p class="centeredText noIndent">2024.06.11</p>

<p><br /></p>

<p>I’ve never been mistaken for someone who likes camping. But when Elliot told me about his pre-wedding retreat in the woods, I couldn’t say no.</p>

<p>When I signed up for these three nights, Peter convinced me to choose Tent rather than Cabin. He’s gone camping many times before, he said. It’ll be fine, he said.</p>

<p>As we prepare for the trip, my dad reminds me that I should have a will.</p>

<p><br /></p>

<p>We set out in Elliot’s family van, which can fit my manual wheelchair. A mosquito attacks me before we even get there. Then, within ten minutes of arriving, I get a bite on my forehead. It swells. Anyone spending money on cosmetic fillers, just apply mosquito.</p>

<p>Later, Elliot gives me a mosquito-repellent bracelet. It seems to work well, except for the time I tambourine it at a mosquito, and the mosquito lands on it.</p>

<p>I’m worried about ticks. I tell Peter to bring duct tape. He does. I tell him he can tape his pants to his socks like the websites say. He refuses. When we arrive, the owner is walking around barefoot.</p>

<p>He says they haven’t had any ticks on campers in the past month. Translation: Campers were getting ambushed by ticks as recently as a month ago.</p>

<p>When I ask about accessibility, the owner shows me a shower stall with no bench inside. I’m not surprised, since I expect the worst. But on the third day, Peter notices that a different stall does have a shower bench. The bathroom that’s older—or, “more rustic”, in the owner’s words—is actually the more accessible one. The other one they renovated with sinks I can’t roll under.</p>

<p>Peter and I are prepared to subsist on protein bars and two boxes of vegan macaroni and cheese. But we’re delighted to find a wealth of options on shelves of plenty. At dinner, Peter, who has low vision, appreciates how people describe items and whether they’re vegan. I appreciate that everyone lets me have my food first, because my limited mouth muscles mean snails eat faster than I do.</p>

<p>At night, Peter wheels me past the cozy glow of the cabins with their clean beds and space heaters, and we arrive at our piece of meadow. Peter reminds me we’re saving money. I say we might as well be paying extra for the privilege of sleeping on the ground.</p>

<p>I can hear the wind through the trees. It sounds just like the white noise machine in the bathroom.</p>

<p><br /></p>

<p>One meaning of the name Aubrie is “ruler of the elves”. I’ve always had an affinity for fantasy forests (fantasy meaning without dirt). One morning, as I lie in the tent, I look up at the soft sunlight and pretend the floaters in my vision are fairies. One of them looks like a shrimp.</p>

<p>I had COVID two weeks ago, but after two negative tests, I had no luck using it as an excuse not to go. My cough had gotten better, but on the second day of camping, it gets much worse. Coughing is difficult to accomplish when one doesn’t have muscles, which is why I’m high-risk for respiratory complications. I hope my fellow tenters aren’t too bothered by my nighttime wildlife sounds.</p>

<p>I’m grateful that Elliot, Layla, and others keep checking up on how Peter and I are doing. I feel reassured when Elliot says we can figure something out if we need to get me off-site early. But I decide I’m in for the full core memory:</p>

<ul>
  <li>getting to know Elliot’s and Layla’s kind and often over-educated friends;</li>
  <li>being patiently understood through my speech impairment;</li>
  <li>laughing over games and Lorenzo’s hilarious sense of humor;</li>
  <li>crying at Adrian’s toast;</li>
  <li>laughing at others’ roasts;</li>
  <li>relishing lavish dishes that impress me every time;</li>
  <li>gathering at toothbrush parties;</li>
  <li>admiring the genius of whoever rested the toothpaste in the counter’s mystery nozzle;</li>
  <li>witnessing Peter and Daniel discover they both read the Caltrain High Speed Rail Compatibility Blog;</li>
  <li>seeing drum-circlers’ joy as they fall into a rising pulse;</li>
  <li>replenishing my energy with a fruit bowl D. J. caringly prepared for me;</li>
  <li>aww-ing at the right and wrong times during Elliot’s vows;</li>
  <li>watching sunlight stream and sunset bleed through the trees;</li>
  <li>feeling happy—even in a tent—because I’m with my sweet dreamy love;</li>
  <li>looking up through the tent window at clouds flowing by;</li>
  <li>receiving hello smiles and goodbye hugs.</li>
</ul>

<p><br /></p>

<p>On the way home, my airway gradually improves. By the next day, it’s significantly better. I say the coughing was from breathing in all the mosquitoes. Peter says it could have been from the wood-burning stove. I say it was because I’m allergic to camping. Peter says it was probably the wood-burning stove.</p>

<p>“Look at all those mosquito bites!” my dad remarks, pointing to my pimples.</p>

<p>When I can finally get showered again, I can’t remember whether we rinse my shampoo out or do soap first. That’s how long it’s been—I’ve forgotten how to shower.</p>

<p>People ask me how I liked camping in a tent. I call it a once-in-a-lifetime experience.</p>

<p>But really, to have a chance to sleep among constellations of flowers, to be so loved and cared for that I didn’t have to be afraid, and to be part of a community of people celebrating two souls in the universe finding each other, is an adventure I’ll treasure for the rest of my life.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[A ramp, a tent, and a weekend well spent]]></summary></entry><entry><title type="html">Aubrie Lee - My digital daily planner</title><link href="https://aubrielee.com/daily-planner" rel="alternate" type="text/html" title="Aubrie Lee - My digital daily planner" /><published>2023-09-30T00:00:00+00:00</published><updated>2023-09-30T00:00:00+00:00</updated><id>https://aubrielee.com/daily-planner</id><content type="html" xml:base="https://aubrielee.com/daily-planner"><![CDATA[<h1 id="my-digital-daily-planner-a-sheet-a-script-and-a-column-per-day">My digital daily planner: a sheet, a script, and a column per day</h1>

<p class="centeredText noIndent">2023.09.30</p>

<p><br /></p>

<p>In grade school, I used a paper “binder reminder” for my daily tasks. After that, I wanted a digital system. I tried Gantt charts, GTD, Asana, Trello, Google Docs and Calendar and Tasks and Keep, Notion, Emacs org mode, Roam. None of it worked better than the binder reminder, so I started with a simple spreadsheet and turned it into a planner that scrolls horizontally through a calendar and vertically through goals. I call it “Projectory”—a projection of the trajectory of my projects.</p>

<div class="articleImageContainer">
<img src="/media/projectory-timetrix.png" alt="Spreadsheet with dates along the top and projects down the left. Some cells in the middle have tasks in them. For example, J1 contains 2023.09.30, A5 contains “my website”, and J5 contains “write article about Projectory”. Other tasks are about going to the cardinal tech center, scheduling aquatherapy and eye appointments, organizing gopro footage, investigating espanso, and researching manual chairs and echairs." class="articleImage" />
</div>

<p class="centeredText noIndent"><em>A snapshot of my personal project management spreadsheet.</em></p>

<h2 id="rows-represent-goals">rows represent goals</h2>

<p>I previously outlined these goals in my life plan (my Archiridion), and I realized I wanted a more structured way to outline tasks within goals each day. Some of these goals are also categories for sub-goals.</p>

<p>A few fun examples:</p>
<ul>
  <li>Abod: Regarding my body and abode.</li>
  <li>Treadger: A ledger of my treasure; digital records, and records of the location of physical objects.</li>
  <li>Quand If I: My take on the quantified self.</li>
  <li>Optimel: Managing time optimally.</li>
</ul>

<h2 id="columns-represent-days">columns represent days</h2>

<p>I have the columns colored to represent days’ salience in my mind. Today is clearest, and the further a day is from today, the more obscure it is. By my observations, salience is likely logarithmic rather than linear; for example, I can easily distinguish today and yesterday, but events from yesterday seem more proximate to the day before than to today.</p>

<p>For now, I’ve decided I want to train my mind to have a four-day range of salience in either direction of today (including today). So, on any given day, the column for day 0 (today) is white, the ±1 days (yesterday and tomorrow) are gray, the ±2 days (ereyesterday and overmorrow) are a darker gray, and the ±3 days (foreyesterday and aftermorrow, perhaps) are a gray darker than that. Beyond those are the darkest gray.</p>

<p>I achieve this coloration with conditional formatting:</p>

<ul>
  <li>Darken and bold weekends (I include Friday) <br />
Custom formula: <code class="language-plaintext highlighter-rouge">=weekday(A1,1)&gt;=&gt;5</code>  <br />
Apply to row 1</li>
  <li>Make today white  <br />
Custom formula: <code class="language-plaintext highlighter-rouge">=A$1=TODAY()</code> <br />
Apply to whole sheet</li>
  <li>Make yesterday gray  <br />
Custom formula: <code class="language-plaintext highlighter-rouge">=A$1=(TODAY()-1)</code>  <br />
Apply to whole sheet</li>
  <li>Make tomorrow gray  <br />
Custom formula: <code class="language-plaintext highlighter-rouge">=A$1=(TODAY()+1)</code>  <br />
Apply to whole sheet</li>
  <li>Make the project column (column A) white  <br />
Format cells if: <code class="language-plaintext highlighter-rouge">Is not equal to</code> <code class="language-plaintext highlighter-rouge">-</code>  <br />
Apply to column A</li>
  <li>Make everything beyond ±3 days darkest gray  <br />
Custom formula: <code class="language-plaintext highlighter-rouge">=A1&lt;&gt;TODAY()</code>  <br />
Apply to whole sheet</li>
</ul>

<h2 id="moving-along-the-days">moving along the days</h2>
<p>All columns older than three days ago are hidden by a script, which I <a href="https://stackoverflow.com/questions/35208357/google-sheets-hiding-columns-based-on-date-in-row-1">adapted from this script</a>:</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">processProjectorySimplified</span><span class="p">()</span> <span class="p">{</span>
    <span class="kd">var</span> <span class="nx">sheet</span> <span class="o">=</span> <span class="nx">SpreadsheetApp</span><span class="p">.</span><span class="nx">getActiveSheet</span><span class="p">();</span>

    <span class="kd">var</span> <span class="nx">now</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">();</span> <span class="c1">// today</span>
    <span class="kd">var</span> <span class="nx">reach</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span> <span class="c1">// span of number of days ago and ahead I want to keep salient; 3 days ago is foreyesterday</span>
    <span class="kd">var</span> <span class="nx">hideThroughDate</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="nx">now</span><span class="p">);</span>
    <span class="nx">hideThroughDate</span><span class="p">.</span><span class="nx">setDate</span><span class="p">(</span><span class="nx">now</span><span class="p">.</span><span class="nx">getDate</span><span class="p">()</span> <span class="o">-</span> <span class="nx">reach</span> <span class="o">-</span> <span class="mi">1</span><span class="p">);</span> <span class="c1">// plan to hide through day before reach date, show from reach date onward</span>

    <span class="c1">// Create an array of arrays of the date cells and their dates</span>
    <span class="kd">var</span> <span class="nx">cellDates</span> <span class="o">=</span> <span class="nx">sheet</span><span class="p">.</span><span class="nx">getSheetValues</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="nx">sheet</span><span class="p">.</span><span class="nx">getLastColumn</span><span class="p">());</span> <span class="c1">// All dates in the spreadsheet in row 1</span>

    <span class="c1">// Find the index for the day just before the start day.</span>
    <span class="c1">// Starting from the left, inspect each item in cellDates and see whether it's the start day.</span>
    <span class="kd">var</span> <span class="nx">hideThroughCol</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="c1">// number of columns to hide</span>
    <span class="k">while</span><span class="p">(</span><span class="nx">hideThroughCol</span><span class="o">++</span> <span class="o">&lt;=</span> <span class="nx">sheet</span><span class="p">.</span><span class="nx">getLastColumn</span><span class="p">())</span> <span class="p">{</span>
        <span class="kd">var</span> <span class="nx">then</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="nx">cellDates</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="nx">hideThroughCol</span><span class="p">]);</span> <span class="c1">// then is this</span>

        <span class="c1">// if equal to hideThroughDate</span>
        <span class="k">if</span><span class="p">(</span><span class="nx">then</span> <span class="o">&gt;=</span> <span class="nx">hideThroughDate</span><span class="p">)</span> <span class="p">{</span>
        <span class="k">break</span><span class="p">;</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="c1">// Bounds check</span>
    <span class="k">if</span><span class="p">(</span><span class="nx">hideThroughCol</span> <span class="o">&gt;</span> <span class="nx">sheet</span><span class="p">.</span><span class="nx">getLastColumn</span><span class="p">())</span> <span class="k">return</span><span class="p">;</span>

    <span class="c1">// Hide all date columns through hideThroughDate</span>
    <span class="nx">sheet</span><span class="p">.</span><span class="nx">hideColumn</span><span class="p">(</span><span class="nx">sheet</span><span class="p">.</span><span class="nx">getRange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="nx">hideThroughCol</span><span class="p">));</span> <span class="c1">// row 1, column B, for one row, for number of columns defined by hideThroughCol</span>

    <span class="c1">// 2021.08.28 set text wrapping to clip for days before today</span>
    <span class="kd">var</span> <span class="nx">lastFewDays</span> <span class="o">=</span> <span class="nx">sheet</span><span class="p">.</span><span class="nx">getRange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nx">hideThroughCol</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="nx">sheet</span><span class="p">.</span><span class="nx">getLastRow</span><span class="p">(),</span> <span class="nx">reach</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span> <span class="c1">// add 1 to hideThroughCol to push past project column (column A); add 1 to reach to include last column hidden</span>
    <span class="nx">lastFewDays</span><span class="p">.</span><span class="nx">setWrapStrategy</span><span class="p">(</span><span class="nx">SpreadsheetApp</span><span class="p">.</span><span class="nx">WrapStrategy</span><span class="p">.</span><span class="nx">CLIP</span><span class="p">);</span>

    <span class="nx">Logger</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="dl">"</span><span class="s2">Yay!</span><span class="dl">"</span><span class="p">);</span>
<span class="p">}</span>

</code></pre></div></div>

<p>Old tasks don’t carry over. This is by design; if I don’t specifically carry a task over, it drifts away rather than cluttering my days.</p>

<h2 id="more-notes">more notes</h2>

<ul>
  <li>The main tab of Projectory is called “Timetrix” (time matrix). If I no longer prioritize a row, I put it in a tab called “Cryoritized” (deprioritized and put in cryo).</li>
  <li>I started this spreadsheet almost four years ago, in January of 2021. The sheet became slow, so now I’m archiving each quarter, whose limits I’ve defined by solstices and equinoxes. To make solstices and equinoxes teal, I compare dates to those in a sheet called Solinoxes: <br />
Custom formula: <code class="language-plaintext highlighter-rouge">=MATCH(A$1,INDIRECT("Solinoxes!A1:A"),0)</code> <br />
I hav​​e two of these entries, one of which makes the date bold and italicized.</li>
  <li>Eventually, I want to make a better way to collect today’s tasks and easily see them on my phone.</li>
</ul>

<p><br />
On 2021.05.07, I wrote in my Archiridion that I wanted to write a blog post about my project management spreadsheet. More than two years later, I’ve finally written it! Logger.log(“Yay!);</p>]]></content><author><name></name></author><summary type="html"><![CDATA[My digital daily planner: a sheet, a script, and a column per day]]></summary></entry><entry><title type="html">Aubrie Lee - How I set up my own Mastodon server and custom display name</title><link href="https://aubrielee.com/how-i-set-up-my-own-mastodon-server" rel="alternate" type="text/html" title="Aubrie Lee - How I set up my own Mastodon server and custom display name" /><published>2023-01-26T00:00:00+00:00</published><updated>2023-01-26T00:00:00+00:00</updated><id>https://aubrielee.com/how-i-set-up-my-own-mastodon-server</id><content type="html" xml:base="https://aubrielee.com/how-i-set-up-my-own-mastodon-server"><![CDATA[<h1 id="how-i-set-up-my-own-mastodon-server-and-custom-display-name">How I set up my own Mastodon server and custom display name</h1>

<p class="centeredText noIndent">2023.01.25</p>

<p><br /></p>

<p>I was curious about Mastodon but only interested in joining if I could have the name I wanted: <a href="https://verse.aubrielee.com/@Aubrie">@Aubrie@aubrielee.com</a>. The promise of open source is control and customizability, is it not?</p>

<p>I already had a personal website at aubrielee.com hosted on GitHub Pages. Rather than rent a new domain, I set up my own Mastodon instance on a subdomain, verse.aubrielee.com. Then, I changed my display name from Aubrie@verse.aubrielee.com to Aubrie@aubrielee.com by setting up HTTP redirects and editing my Mastodon .env file.</p>

<p>I’ll describe my process in more detail in case it helps anyone else.</p>

<h2 id="requirements">requirements</h2>

<p class="noIndent">I wanted to:</p>

<ul>
  <li>Keep my GitHub Pages site going on aubrielee.com</li>
  <li>Host my Mastodon instance on a subdomain of aubrielee.com</li>
  <li>Change my display name to a custom domain (@aubrielee.com instead of @subdomain.aubrielee.com)</li>
</ul>

<h2 id="process">process</h2>

<p class="noIndent">The general stages were:</p>

<ol>
  <li>Set up hosting</li>
  <li>Connect my domain</li>
  <li>Set up Mastodon</li>
  <li>Fix my admin privileges</li>
  <li>Set up a custom domain</li>
</ol>

<h3 id="setting-up-hosting">setting up hosting</h3>

<p>For hosting, I chose DigitalOcean because of its reputation. Setting up my Mastodon instance required creating a new Droplet.
<br />
<br /></p>

<p class="noIndent">To create the Droplet:</p>

<ol>
  <li>Create DigitalOcean account (here’s my <a href="https://m.do.co/c/d0e6256f5707">referral link</a> if you care to use it).</li>
  <li>Begin a new Droplet.</li>
  <li>Choose a region and datacenter.</li>
  <li>Go to Marketplace, search for Mastodon, and choose it.
 <img src="/media/mastodon_marketplace.png" alt="Search result for mastodon returns Mastodon 4.0.2 on Ubuntu 20.04" class="listImage" /></li>
  <li>Choose size. I chose the most basic option, as I’ll be the only user on my instance. For “Additional Storage”, I didn’t opt in.</li>
  <li>Choose authentication method. I read Mastodon requires SSH, not password. I set up an SSH key on my Mac via Terminal.</li>
  <li>For the final settings, I opted into monitoring but not backups. I didn’t change the hostname or project from the defaults.</li>
  <li>Choose <strong>Create Droplet</strong>. The Droplet will take a few minutes to be ready.</li>
</ol>

<h3 id="linking-a-subdomain">linking a subdomain</h3>

<p>I had aubrielee.com and wanted to set up on verse.aubrielee.com rather than rent another domain and fragment my domain architecture. This guide assumes you already have a domain—e.g., <strong>something.com</strong>—and you want to set up your Mastodon server on a subdomain—e.g., <strong>social.something.com</strong>.</p>

<ol start="9">
  <li>Go to your domain name provider or registrar. Mine is Google Domains.</li>
  <li>Find your DNS settings and resource records.</li>
  <li>Create a new record A record for social.something.com. Set type to A and host name to your chosen subdomain—e.g., just <b>social</b>. I didn’t change the default TTL.</li>
  <li>Go back to DigitalOcean. When your Droplet is ready, copy its IP address.</li>
  <li>Paste the IP address into the A record.</li>
</ol>

<h3 id="going-through-the-mastodon-setup-wizard">going through the mastodon setup wizard</h3>

<p>Now that I had the Droplet and domain connected, I could go through the setup of the Mastodon app on the Droplet.</p>

<ol start="14" class="lineWrap">
  <li>Open a command line. For me, this was via Terminal on Mac.</li>
  <li>SSH into the Droplet by typing <b>ssh root@<em>[your Droplet’s IP address]</em></b> and hitting enter. Example results:
    <pre class="commandLine">Users-iMac:~ user$ <b>ssh root@##.###.###.###</b>
The authenticity of host '##.###.###.### (##.###.###.###)' can't be established.
ECDSA key fingerprint is […].
Are you sure you want to continue connecting (yes/no)? <b>yes</b>
Warning: Permanently added ##.###.###.###' (ECDSA) to the list of known hosts.
Enter passphrase for key '/Users/user/.ssh/id_rsa':
</pre>
  </li>
  <li>Enter your SSH passphrase.</li>
  <li>Go through the wizard. For example:
    <pre>Welcome to the Mastodon first-time setup!
Domain name: <b>social.something.com</b>
Do you want to store user-uploaded files on the cloud? <b>No</b>
</pre>
  </li>
  <li>Set up SMTP if you’d like. I skipped it (I actually tried a test email to see what would happen; it failed):
    <pre>
SMTP server: <b>localhost</b>
SMTP port: <b>587</b>
SMTP username:
SMTP password:
SMTP authentication: <b>plain</b>
SMTP OpenSSL verify mode: <b>none</b>
E-mail address to send e-mails "from": <b>Mastodon &lt;notifications@social.something.com&gt;</b>
Send a test e-mail with this configuration right now? <b>no</b>
    </pre>
  </li>
  <li>Create an admin account. For example:
    <pre>It is time to create an admin account that you'll be able to use from the browser!
Username: <b>Name</b>
E-mail: <b>name@something.com</b>
You can login with the password: […]
The web interface should be momentarily accessible via https://social.something.com/
</pre>
  </li>
  <li>Save that password somewhere.</li>
  <li>Go through the final SSL notification items: enter an email address and choose whether to donate to EFF. When SSL and symlinks are ready, the wizard will say <b>Setup is complete! Login at https://social.something.com</b>.</li>
  <li>Visit your social.something.com and log in with the email and password from action 19.</li>
  <li>You can set a password different from the generated one.</li>
  <li>Go to Preferences and verify you have Administration privileges. You can also verify you can visit <a href="https:/social.something.com/admin/dashboard" class="lineWrap">https:/social.something.com/admin/dashboard</a> without error:
  <img src="/media/mastodon_admin.png" alt="Administration tab underneath Moderation tab" class="listImage" />
  </li>
</ol>

<h3 id="fixing-my-admin-privileges">fixing my admin privileges</h3>

<p>When I logged into my instance, I didn’t have an Administration tab. I changed my account role to Owner by entering my Mastodon instance via Terminal and using a tootctl command.</p>

<p>Instead of using Terminal, you can also use the console in DigitalOcean near the top right of the web interface of your Droplet. This console is now my preferred way of entering my instance, rather than SSHing in on my computer.</p>

<ol start="25">
  <li>Install Ruby at the Droplet root. I’m not sure if this was necessary, but I was following a <a href="https://github.com/mastodon/mastodon/discussions/18137">GitHub thread</a>.
    <pre>root@hostname:~# <b>apt install ruby ruby-bundler</b></pre>
  </li>
  <li>Sudo into the Mastodon app.
    <pre>root@hostname:~# <b>sudo su mastodon</b></pre>
  </li>
  <li>Change to the home directory, then to the live/bin directory.
    <pre>mastodon@hostname:/root$ <b>cd ~</b>
mastodon@hostname:~$ <b>cd live/bin/</b>
</pre>
  </li>
  <li>Use tootctl to change the role of your Name account to Owner. (You set Name in action 19.)
    <pre>mastodon@hostname:~/live/bin$ <b>RAILS_ENV=production ./tootctl accounts modify Name --role Owner</b></pre>
  </li>
</ol>

<p class="noIndent">Now you should have full admin privileges.</p>

<h3 id="setting-up-a-custom-domain">setting up a custom domain</h3>

<p>Setting up a custom domain allows your display name to be <strong>@Name@something.com</strong> instead of <strong>@Name@social.something.com</strong>. (I believe, theoretically, the display domain could be arbitrary, e.g., @Name@anythingelse.com.) To display a custom domain, I set HTML redirects in GitHub Pages for three web resources: host-meta, nodeinfo, and webfinger. I also had to edit my Mastodon .env file.</p>

<ol start="29" class="lineWrap">
  <li>
    Curl host-meta from social.something.com

    <pre>Users-iMac:~ user$ <b>curl -k https://social.something.com/.well-known/host-meta</b></pre>
  </li>
  <li>
    Copy the resulting XML and put it in a new GitHub Pages file called:

    <pre>githubpagesusername.github.io/<b>.well-known/host-meta</b></pre>
  </li>
  <li>
    Do the same for nodeinfo. Curl nodeinfo from social.something.com

    <pre>Users-iMac:~ user$ <b>curl -k https://social.something.com/.well-known/nodeinfo</b></pre>
  </li>
  <li>
    Copy the resulting JSON and put it in a new GitHub Pages file called:

    <pre>githubpagesusername.github.io/<b>.well-known/nodeinfo</b></pre>
  </li>
  <li>
    Do the same for webfinger, curling and inserting into a file.

    <pre>Users-iMac:~ user$ <b>curl -k https://social.something.com/.well-known/webfinger?resource=acct:name@social.something.com</b></pre>

    <pre>githubpagesusername.github.io/<b>.well-known/webfinger</b></pre>
  </li>
  <li>
    In your Mastodon instance, change to the /home/mastodon/live directory:

    <pre>mastodon@hostname:~$ <b>cd /home/mastodon/live</b></pre>
  </li>
  <li>
    Edit the .env.production file with a text editor like vim or nano:

    <pre>mastodon@hostname:~/live$ <b>vim .env.production</b></pre>
  </li>
  <li>
    Add this to the top of the file, as specified by Mastodon documentation, and write the file.

    <pre><b>LOCAL_DOMAIN=something.com
WEB_DOMAIN=social.something.com</b>
</pre>
  </li>
  <li>
    Exit back to the root. If you don’t, as I didn’t at first, you’ll be asked for a password until you get “3 incorrect password attempts” when trying the next sudo actions.

    <pre>mastodon@hostname:~/live$ <b>exit</b></pre>
  </li>
  <li>
    Restart Mastodon services with these commands:

    <pre>root@hostname:~# <b>systemctl restart mastodon-web</b>
root@hostname:~# <b>systemctl restart mastodon-streaming</b>
root@hostname:~# <b>systemctl restart mastodon-sidekiq</b>
</pre>
  </li>
</ol>

<p class="noIndent">Now everything should be ready! Post, boost, follow at will. Follow me, even: <a href="https://verse.aubrielee.com/@Aubrie">https://verse.aubrielee.com/@Aubrie</a>.</p>
<p><br /></p>

<p>Thank you to the people who saved me with their advice. Here are some resources I consulted along the way:</p>

<ul class="lineWrap">
  <li><a href="https://github.com/mastodon/mastodon/discussions/23047">No one can find my account even via profile URL · Discussion #23047 · mastodon/mastodon · GitHub</a></li>
  <li><a href="https://300m.com/privacy/setting-up-a-mastodon-server-at-digitalocean/">Setting up a Mastodon Server at DigitalOcean</a></li>
  <li><a href="https://www.freecodecamp.org/news/how-to-set-up-your-own-mastodon-instance/">How to Set Up Your Own Mastodon Instance</a></li>
  <li><a href="https://github.com/mastodon/mastodon/discussions/18137">Admin CLI doesn’t work out of the box for 1-click Digital Ocean installs · Discussion #18137 · mastodon/mastodon · GitHub</a></li>
  <li><a href="https://masto.host/mastodon-usernames-different-from-the-domain-used-for-installation/">Mastodon usernames different from the domain used for installation - Masto.host</a></li>
  <li><a href="https://docs.joinmastodon.org/admin/config/#federation">Configuring your environment - Mastodon documentation</a></li>
  <li><a href="https://github.com/felx/mastodon-documentation/blob/master/Running-Mastodon/Serving_a_different_domain.md">mastodon-documentation/Serving_a_different_domain.md at master</a></li>
</ul>
<p><br /></p>

<p class="noIndent">2024.02.28 Update:</p>

<p>For a long time, I’ve been wanting to embed an excerpt of my timeline into this website. I’ve now done so at <a href="https://aubrielee.com/more">https://aubrielee.com/more</a> using <a href="https://gitlab.com/idotj/mastodon-embed-timeline">i.j’s Mastodon embed timeline widget</a>. Many thanks to <a href="https://mastodon.online/@idotj">i.j</a> for being so kind and helpful in getting it set up!</p>]]></content><author><name></name></author><summary type="html"><![CDATA[How I set up my own Mastodon server and custom display name]]></summary></entry><entry><title type="html">Aubrie Lee - Impart</title><link href="https://aubrielee.com/impart" rel="alternate" type="text/html" title="Aubrie Lee - Impart" /><published>2014-08-16T00:00:00+00:00</published><updated>2014-08-16T00:00:00+00:00</updated><id>https://aubrielee.com/impart</id><content type="html" xml:base="https://aubrielee.com/impart"><![CDATA[<div class="narrow">
<p class="annotation">In my fourth year at Stanford, I took anatomy labs with Dr. John Gosling, Dr. Ian Whitmore, and Dr. Alan Detton. I then spent the summer of 2014 writing this poem, which I consider one of my best works. It was later published in Anastomosis, the humanities and literary journal of the Stanford University School of Medicine.</p>
<br />
<br />

<h1>Impart</h1>

<p class="secondIndent">The knowing limn for us these bodies of knowledge.</p>
<p class="secondIndent">As dissection disciples, we&rsquo;re knowing these bodies to learn, to treat, to numb;</p>
<p class="secondIndent">We have worn stereoscopic glasses, swiped the touch-screen table, made notes on inky paper,</p>
<p class="secondIndent">But never worn a scrub, or touched a lung, or made cuts in embalmed skin;</p>
<p class="secondIndent">By using death, we seek to know that which has been closest to us our whole lives.</p>
<br />
<p class="secondIndent">A teaching assistant tells us, &ldquo;We&rsquo;re going to do the moment of reflection soon,&rdquo; <br class="poemBreak" />as if he is used to it.</p>
<br />
<p class="secondIndent">The walkways are anastomosed between the chambers of the lab;</p>
<p class="secondIndent">Each lobe is paved with a row of ceiling lights, and below them, a row of silver tables;</p>
<p class="secondIndent">Between every port of forc&rsquo;ed light and every ventilated bench lies a blue canvas;</p>
<p class="secondIndent">Inside, wrapped by zipper and linen, floats a body that has outlasted its last memory;</p>
<p class="secondIndent">Whenever we zip the canvas closed, the body is lighter and the biohazard bag is heavier.</p>
<br />
<p class="secondIndent">A teaching assistant distributes his bouquet of scissors.</p>
<br />
<p class="secondIndent">Before lab, we don our blue identities; after lab, we wash them; and at the course&rsquo;s end, <br class="poemBreak" />we give them back.</p>
<p class="secondIndent">When the professors find a curiosity to show us, or when students grow bored of <br class="poemBreak" />quiet company,</p>
<p class="secondIndent">The ones in blue clothes move; the ones in white clothes stay.</p>
<p class="secondIndent">Our objective is to commit all body parts to our own neurons.</p>
<p class="secondIndent">Our objective is to gain immunity to instinctual humanity.</p>
<br />
<p class="secondIndent">I accidentally look at the thin cloth covering a face <br class="poemBreak" />and see the body&rsquo;s nostrils and gaping mouth.</p>
<br />
<p class="secondIndent">We slowly replace the sallow skin with linen skin; the threads catch like hair in the zippers.</p>
<p class="secondIndent">To pierce the painless epidermis may be the most painful part, and to see it bleed with seeping, streaming yellow;</p>
<p class="secondIndent">Unwrapping skin from the pledged present, we sweep the fascia cobwebs of the neck,</p>
<p class="secondIndent">We shave off pieces of the face and leave the shards on the chest;</p>
<p class="secondIndent">Beneath the skin, the scalpel seems to part the flesh without touching it.</p>
<br />
<p class="secondIndent">A student leans against a cadaver&rsquo;s arm, resting his purple-gloved hand <br class="poemBreak" />in its outstretched one.</p>
<br />
<p class="secondIndent">The symphony of oscillating saws shifts pitches as we press them into sparking tissue;</p>
<p class="secondIndent">We crown the hallowed calvaria with a rubber band and trace an artificial suture <br class="poemBreak" />with a pencil;</p>
<p class="secondIndent">Through synchrony of hammered taps and chiseled cracking, and the ripping of dura mater into jester fourths,</p>
<p class="secondIndent">The hollowed skull yields; in our hands, we halve a mind; sage, sagittal, oracular but open like a book; it drips dark red matter onto the floor.</p>
<p class="secondIndent">The dust of bone sinks like snow onto the crest of the auricle and rises like spicy smoke <br class="poemBreak" />past our turbinates.</p>
<br />
<p class="secondIndent">A group of students whoops when the sternal plate finally comes off.</p>
<br />
<p class="secondIndent">The body is fabric: mesenteric ruffles, peritoneal cloth, layers of meninges sewn by <br class="poemBreak" />sutures and spider string,</p>
<p class="secondIndent">While tendons never meant to touch the light still wear it well with their silk shimmer.</p>
<p class="secondIndent">A thick stitch on the right thigh identifies the site of cannulated preservative circulation.</p>
<p class="secondIndent">To whom belongs the hair that&rsquo;s wound in chair wheels and found stuck to <br class="poemBreak" />organs we&rsquo;ve held?</p>
<p class="secondIndent">The body serves as a table for its own detached lungs and the tools we used to detach them; it wears its heart on its sarcophagal sleeve.</p>
<br />
<p class="secondIndent">A student asks about the pronunciation of &ldquo;azygos.&rdquo; &nbsp;The teaching assistant says, <br class="poemBreak" />&ldquo;Tomater, tomahter.&rdquo; &nbsp;I say, &ldquo;You mean dura mater, dura mahter.&rdquo;</p>
<br />
<p class="secondIndent">These bodies are not just our models, but our puppets; we pose their limbs <br class="poemBreak" />and read their palms;</p>
<p class="secondIndent">Their outstretched arms beg an embrace from the rolling lights that regard them <br class="poemBreak" />without flinching.</p>
<p class="secondIndent">A cadaver on its stomach reaches into a professor&rsquo;s pocket as he dissects its shoulder.</p>
<p class="secondIndent">To show the flexion of the phalanges, a professor pulls the tendons, <br class="poemBreak" />and we see death beckon.</p>
<p class="secondIndent">To delineate the facial nerves, a professor strokes the exposed, frozen cheek <br class="poemBreak" />as if it were a lover&rsquo;s.</p>
<br />
<p class="secondIndent">I see drips of liquid on the kitchen floor at home, and for a moment, I mistake it for <br class="poemBreak" />blood from a brain.</p>
<br />
<p class="secondIndent">Our often tendency, to ask for valued ganglions, visuals at hand;</p>
<p class="secondIndent">We cross our cruciate ligament fingers psoas to remember necrotic mnemonics;</p>
<p class="secondIndent">A thing between two things; by motor car, cold beer in forty-three cans, some say to steal a real trucker&rsquo;s only apple;</p>
<p class="secondIndent">Ill, ilium, ileum, pleural, pericardial, periosteal, perineal, peroneal, peritoneal, peril;</p>
<p class="secondIndent">We remember exceptions; the exceptional are memorable.</p>
<br />
<p class="secondIndent">A teaching assistant holds a prosection of a female hip on her lap.</p>
<br />
<p class="secondIndent">At the head of the table are two heads, a young one hunched over the dead one he dissects;</p>
<p class="secondIndent">He looks it in the eye; their faces are antiparallel, with up and down inverted like <br class="poemBreak" />extraocular obliques;</p>
<p class="secondIndent">As pupils, we see two tenuous circles: the tendinous ring guides fibrous nerves, and the iris passes light through fluid glass.</p>
<p class="secondIndent">Behind the throat, the flower-calyxed larynx is cut cruciform; medical students don&rsquo;t learn the muscles for the patient&rsquo;s voice.</p>
<p class="secondIndent">On the digital anatomy table, extruded cylinders pierce the patients&rsquo; faces where their eyes should be.</p>
<br />
<p class="secondIndent">I stuff my jacket into my bag and notice that the open sleeves look like severed arteries.</p>
<br />
<p class="secondIndent">The pituitary is the keystone of the cranium, the pearl in the ossified shell,</p>
<p class="secondIndent">The center of the X made by petrous bone and lesser wing, at the center of the X mapped by the chiasm of sight,</p>
<p class="secondIndent">Ensconced in a Turkish throne and wearing the Willis circlet, surrounded by the sap of thought and life,</p>
<p class="secondIndent">A monarch at the heart of two sphenoid and ventricular butterflies that interlock like links of a chain,</p>
<p class="secondIndent">It surveys its domain from the vertex of the cliff before the cascading tiers of <br class="poemBreak" />the cranial fossa.</p>
<br />
<p class="secondIndent">I study a piecewise face. &nbsp;Its right half is stripped, its left half is intact, and its top half is peeled down over its eyes.</p>
<br />
<p class="secondIndent">The cadaver must not dry out; as water was the cells&rsquo; essence in life, so is it their <br class="poemBreak" />vessel in death.</p>
<p class="secondIndent">The body seems to be melting into its water; the limbs are still, but they dance sinusoidally in their rippling reflection;</p>
<p class="secondIndent">Twin seashells curl in an ethmoid labyrinth; the splenic artery leviathan hides beneath the chest of treasures;</p>
<p class="secondIndent">A nautilus notes a chord; semicircular canals chart the waters along Cartesian planes;</p>
<p class="secondIndent">The woven rope of chordae tendineae anchor the cuspid sails as blood flows tidally <br class="poemBreak" />through them.</p>
<br />
<p class="secondIndent">I see a fresh head. &nbsp;The neck is getting blood all over the rags. &nbsp;The fat on the inside of the neck doesn&rsquo;t cling, it spills; and the fat is not white, but saturated orange. &nbsp;The skin is compliant and still blushes around the sunken, drifting eyes. &nbsp;Nothing we&rsquo;ve seen so far has looked as real or as dead as this partial man.</p>
<br />
<p class="secondIndent">We take apart these bodies because they are made in the image of time and the world.</p>
<p class="secondIndent">In origin, round ligaments and an oval fossil draw the one-way cycle of a fetus&rsquo;s growth;</p>
<p class="secondIndent">To question parsimony and design, the tendons in the ankle trace the tangled path of systemless evolution;</p>
<p class="secondIndent">The tree of life grows in the cerebellum&rsquo;s arbor vitae, in muscles&rsquo; wood grain and red soleus sun, in the ridges of the crista terminalis illuminated from behind;</p>
<p class="secondIndent">We study existence: we see the history of the body, we see the world, and we see <br class="poemBreak" />the history of the world.</p>
<br />
<p class="secondIndent">I feel someone walk behind me and see her out of the corner of my eye. &nbsp;When I turn to look, she has already gone. &nbsp;In her place is a skeleton hanging in a frame.</p>
<br />
<p class="secondIndent">We think we are the knowing now; from bodies of knowledge, we&rsquo;ve extracted knowledge of bodies.</p>
<p class="secondIndent">I understand a little more the intricate differentiations of being, although I have yet to witness a scalpel disinter a soul.</p>
<p class="secondIndent">The students move on to seek more answers, the professors stay to answer more students, and the fragmented cadavers burn.</p>
<p class="secondIndent">By sacrificing an instrument they will never play again, the donors make themselves immortal; they become part of a deathless practice.</p>
<p class="secondIndent">These undertakings of physical introspection are older than we are, and they will live longer than will any one of us.</p>

</div>
<p><br />
<br /></p>

<embed src="Stanford%20Anastomosis%20-%20Fall-2018.pdf#page=13" width="100%" height="800px" type="application/pdf" class="inset" />

<p><br /></p>]]></content><author><name></name></author><summary type="html"><![CDATA[In my fourth year at Stanford, I took anatomy labs with Dr. John Gosling, Dr. Ian Whitmore, and Dr. Alan Detton. I then spent the summer of 2014 writing this poem, which I consider one of my best works. It was later published in Anastomosis, the humanities and literary journal of the Stanford University School of Medicine.]]></summary></entry><entry><title type="html">Aubrie Lee - Bo for Broke</title><link href="https://aubrielee.com/boforbroke" rel="alternate" type="text/html" title="Aubrie Lee - Bo for Broke" /><published>2014-06-24T00:00:00+00:00</published><updated>2014-06-24T00:00:00+00:00</updated><id>https://aubrielee.com/bo-for-broke</id><content type="html" xml:base="https://aubrielee.com/boforbroke"><![CDATA[<h1 id="bo-for-broke">Bo for Broke</h1>
<p class="centeredText">2014</p>
<p><br /></p>

<p class="noIndent annotation"><em>(Writing prompts from Bret Anthony Johnston, via Harriet, via Megan)
Spend a few minutes describing:</em></p>

<ul class="annotation">
  <li>A strange experience in a car.</li>
  <li>A strange experience in a restaurant.</li>
  <li>How the color blue would taste, smell, sound.</li>
  <li>A person’s physical characteristics in terms of food.</li>
  <li>A safe space.</li>
  <li>What you’d like to dream about tonight.</li>
  <li>Being trapped underneath a saggy mattress by a dead body.</li>
  <li>Things you find most tempting.</li>
  <li>A conflict over an umbrella.</li>
  <li>An incident underwater.</li>
  <li>Things you keep in your purse or pocket (or backpack).</li>
  <li>A science fiction story set in the White House.</li>
  <li>Your arrival at a party where every guest is naked except for you. What do you do?</li>
</ul>

<p><span class="diamondDivider">⧫</span></p>

<p>You, there. You weren’t supposed to see my porticalivolizzer. What? No, it’s not an umbrella. It’s a Model 24-8 porticalivolizzer. And of course I’m supposed to stand inside it. Clearly you don’t understand how personal teleporters work. No, you can’t try it right now, because I’m on an important mission.</p>

<p>Slash, I thought this diner dumpster would be a safe place to point port. Well, now that you know I’m an alien, what are you gonna do, huh? Oh. Sure, you can come along. You don’t have one of those homes to go back to? Well, just don’t go messin’ up my mission by howling wolf or whatever it is you sapien kids do.</p>

<p>You really want to know? I’m not supposed to talk about it. It’s highly classified stuff. Highly classified. Okay, I’ll tell you. I’m a secret agent sent to capture Potus’s dog. No, not “President”. That’s his name—Potus. What do you mean, his name is Obama? All right, kid, believe what you want.</p>

<p>What planet am I from? Not telling. I’m a secret agent, remember? My commander told me that this mission is of critical importance, and if I don’t do it wrong, I’ll finally earn my gentian badge. Hmm? Oh, no, I don’t have any other badges. The gentian badge is the lowest-level one. But shut your mouth about it, I’m gonna get it this time.</p>

<p>You’re hungry? You know what, me too. Let’s hope this place has better food in there than out here.</p>

<p><span class="diamondDivider">⧫</span></p>

<p>These sugar packets are delicious. I’ll give Earth that much—y’all know how to flavor your ingestibles. Back on Tiolun, all we have is nutritionally complete water. Hey, what’s the matter, kid? Let me pay the bill first. Check it out: these marbles will morph into whatever shape I want. I think ten dollars and forty-six cents is in order.</p>

<p>Okay, kid, what was the hurry back there? The waiter seemed normal enough to me. Claws bursting out the heels of his shoes, huh? And then you saw him crunch a cook’s neck like a juice box? Well, that ain’t related to my mission. Let’s go for a car ride.</p>

<p>The problem with teleporting is you don’t get to enjoy the views. You go from point A to point B without any of the decimals in between. Of course letters have decimals. You have to stop thinking like a sapien, kid. Maybe then you’ll get a gentian badge, too.</p>

<p><span class="diamondDivider">⧫</span></p>

<p>Taxi! Hey, can you take us to the beach? Yes, the dog one.</p>

<p>Look out the window, kid. I’ll tell ya, when you’re traveling out in space, you never get to see such a pretty parallax effect. Just glorious.</p>

<p>Oh yeah, driver? You get me? Ah, you’re from Ceuragoc! Nice. I’m from Tiolun. How long have you been on this side of the multiverse? Slash, that’s a long time. Don’t you miss home after six hundred years? Oh, wow, I’m sorry to hear that. I didn’t know. Guess news and time don’t sync across teleportals. Do you think any of the others survived? If I see them, I’ll tell them where to find you. And no matter where they are, they’ll always live on inside you. Oh, you ate them? Well, at least you got to be with them in their last moments.</p>

<p>Thanks for the ride. How much do I owe you? Sorry, I’m gonna keep the kid. Have a marble.</p>

<p><span class="diamondDivider">⧫</span></p>

<p>Don’t look so stricken, you wanted to come along. Are you afraid the driver was gonna eat you, too? You’re not even two bites and a juice box. That’s not it? Then what? Oh, I didn’t even notice. You should point it out to me next time. I would have wanted to see his pigeon foot collection.</p>

<p>Here we are—the worst place to collect driftwood. I have it on good authority that Potus’s pooch will be here in twenty minutes. Okay, I’m just guessing. But to catch your target, you’ve gotta understand your target, and this is where we’re gonna study.</p>

<p>This place is packed. You sapiens have a reputation for only caring about yourselves, but I have to take that with a grain of sand. Who would have thought that your species would spend so much time throwing bouncy spheres for some-dog-else?</p>

<p>You want to go in the water? Sure, I’ll come with you.</p>

<p>The ocean waves on Earth are so funny. It’s as if someone shook a bucket, and the water never stopped moving. Tiolun’s oceans don’t crash like that. They just spin. Kind of like the water in those white bathroom bowls that sapiens use to do their laundry.</p>

<p><span class="diamondDivider">⧫</span></p>

<p>So what do you like about Earth? Yeah, that’s true, I guess you don’t have anything else to compare it to. But at least you seem to be allowed to do what you want, and you’re only a youngling. On Tiolun, only the forward engineers have that kind of freedom. Then they decide what the rest of us have to do.</p>

<p>Why don’t I just stay on Earth with you? What, and eat sugar packets for the rest of my life while Potus’s dog goes uncaptured? Now that you mention it, it’s not a bad idea. Once I bring him back, all they’re gonna do is take selfies with him anyway, so it’s not like anyone’s future depends on it. Except mine, of course.</p>

<p>Careful, kid, the ocean never picks fights with anyone its own size. Don’t go too far out.</p>

<p>I didn’t want to be an agent. I mean, I didn’t not want to. When they told me this was what I was gonna be, I was even excited at first. But you see, my commander acts like he wants us all gone. One time during frost training, he made us cut a palm-sized square out of our shirts, then told us we couldn’t wear anything that day except that square. This other time, he buried me in the ground up to my neck, put a dead flower in my mouth, and said I couldn’t start digging my way out until the flower had come back to life. Good thing flowers come back to life on Tiolun.</p>

<p>I have thought about staying here. It’d be simple, y’know. But you saw that waiter and that cab driver. There’s something connecting a person to its planet, and when that connection breaks, a lot of other things start to break, too. Earth isn’t bad, but Tiolun…Tiolun needs me. When I end up spending the night anywhere else, Tiolun is all I can dream about. That gentian badge? I don’t want it so I can wear it. I want it so I can have that taste of worthiness in my memories, so I can breathe the smell of time moving, so I can hear every footstep of mine as the sound of me climbing towards redemption.</p>

<p>Kinda silly, huh. Oh my galaxies, kid, look over there! It’s Potus and his dog! They’re going to their armored car. This is my one chance—kid? Where’d you go? Hey, kid?</p>

<p>Oh, no. Is that the kid all the way out there? It’s not moving right.</p>

<p>The dog just bolted after something. All I have to do is port over there and snatch it…</p>

<p>I can’t see the kid’s face.</p>

<p><span class="diamondDivider">⧫</span></p>

<p>Hey there, kid. Glad you’re awake. It’s amazing how a little water can zap you sapiens. Okay, it was a lot of water. But nothing that my porticalivolizzer couldn’t get through.</p>

<p>You’ll never guess what happened. Potus and his dog were here. I’m serious. What, you think that just because I didn’t notice murderer-waiter and foot-collector that I wouldn’t pick out a particular dog from a swarm of them?</p>

<p>It’s okay, don’t mention it. Really, don’t. With my masterful agent skills, I’ll find them again. But first, we should get you somewhere warm.</p>

<p>Step in, kid. Let’s go.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Bo for Broke 2014]]></summary></entry></feed>