<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <title>#go posts — Ben Crowder</title>
    <link>https://bencrowder.net/blog/tag/go/</link>
    <atom:link href="https://bencrowder.net/blog/tag/go/feed/" rel="self" />
    <description>Feed for blog posts tagged with #go.</description>
    <lastBuildDate>Fri, 03 Apr 2026 21:12:51 GMT</lastBuildDate>
    <language>en-US</language>
    <generator>https://bencrowder.net/</generator>

    <item>
      <title>Digest</title>
      <link>https://bencrowder.net/blog/2026/digest/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2026/digest/</guid>
      <pubDate>Fri, 03 Apr 2026 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>A couple months back I moved off Feedly (for reading RSS feeds) and switched to my own handcrafted reader, Digest.</p>
<p>It started when I came across Karin Hendrikse’s <a href="https://www.smashingmagazine.com/2024/10/build-static-rss-reader-fight-fomo/">article on building a static RSS reader</a> (oh how I love static files), and then Terry Godier’s <a href="https://terrygodier.com/phantom-obligation">post on RSS and phantom obligations</a> nudged me away from the idea that a feed reader has to be something like Feedly or Google Reader. At some point Feedly started adding more AI features (ugh) and I decided it was time to part ways and do my own thing.</p>
<p>Digest is a little command-line tool I built in Go that reads a list of feed URLs from a text file, fetches all of them in parallel, caches the responses, parses the feeds, and then compiles a list of all the posts from the day before into a static HTML file. That’s basically it. I run it manually on my laptop and rsync the HTML up to my server so I can get to it on my phone.</p>
<p>It’s been great so far. A few other thoughts and observations:</p>
<ul>
<li>Boundaries and edges feel good. It’s like a personal daily newspaper, where it’s very clear when I’ve finished for the day. Infinite rivers carry more stress, I think. Or maybe I just like checking things off lists.</li>
<li>The slight time distancing also feels good — quiet and calm. Because it’s a daily digest from the day before, it feels like less of a dopamine slot machine. No more checking Feedly dozens of times a day.</li>
<li>I originally had Digest run on my server via a cron job, but I moved back to running it manually on my laptop and I’ve found that I much prefer it this way. Fewer moving parts. (If I’m unable to generate the digest on any given day, by the way, I can pass the date as a command-line argument to the tool and it’ll compile posts for that date instead of yesterday’s.) A bit more resilient, too — I can just open the HTML file locally on my laptop if I want, no server needed.</li>
<li>At first I included the contents of each post in the file, but I’ve since trimmed it down so each entry just has the post title and link plus the blog title and the author, and I open each link in a new tab. After decades of reading RSS feeds in homogenized typographic settings (all posts in the same font, etc.), I thought I wouldn’t care to read posts on their original sites, but I was wrong. I love it. Especially since most of what I read is on the small web.</li>
</ul>
<p>As of now I have no plans to release Digest as open source, but maybe this description will inspire someone to build their own tool that meets their personal needs.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Digest">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Update on Press (the PDF compiler). I haven’t worked on it at all lately, but I wanted to document i...</title>
      <link>https://bencrowder.net/blog/2021/865/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/865/</guid>
      <pubDate>Fri, 03 Sep 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>Update on Press (the PDF compiler). I haven’t worked on it at all lately, but I wanted to document its current state for history’s sake, and as part of working in public. (I’ve also been sitting on this post for over a year.)</p>
<p>Back in 2017 I did end up <a href="https://bencrowder.net/blog/2017/517/">re-architecting Press</a> to use Low Ink as an intermediate page description language. In the process, Low Ink changed from a JSON-based idea to this:</p>
<pre><code>:page 11x8.5in
:bleedbox x=0.125in y=0.125in w=5.75in h=8.75in
:fontmap family=helv weight=regular style=normal standard=Helvetica
:yinvert
:push
:translate x=72 y=72

# ascender
:push
:translate x=0 y=1040
:strokecolor hex=#999
:linewidth 0.25pt
:line x1=0 y1=0 x2=1080 y2=0
:stroke
:push
:fillcolor hex=#999
:font family=helv size=14pt
:text x=1085 y=-3 text="ascender"
:pop
:pop

# filled glyph
:push
:translate x=1320 y=240
:fillcolor hex=#000
:moveto x=0 y=0
:pathto x=400 y=300 cx1=120 cy1=300 cx2=140 cy2=300
:pathto x=320 y=200 cx1=540 cy1=300 cx2=320 cy2=180
:lineto x=350 y=350
:lineto x=450 y=250
:lineto x=150 y=0
:moveto x=200 y=200
:lineto x=200 y=250
:lineto x=250 y=250
:lineto x=250 y=200
:lineto x=200 y=200
:fill
:pop
</code></pre>
<p>It was intended to be a fairly low-level wrapper on the PDF format, with the idea being that other libraries/apps would provide more ergonomic abstractions on top of it.</p>
<p>I initially used Python because Press started out as a library, but with the pivot to a compiler model, I think Go or Rust would probably end up being a better choice (Rust would make integrating HarfBuzz a bit easier, at any rate).</p>
<h2 id="potentialimprovements">Potential improvements</h2>
<p>To my 2021 eyes, the language design isn’t particularly elegant. I like that the parameters are named (clarity), but for most of the commands there aren’t actually that many parameters, because many of the settings that would normally be parameters are separate commands. For parameters that are clearly unambiguous, the names hamper readability. For example, I think something like this might be better:</p>
<pre><code>:line 0,0 to 1080,0
:fillcolor #345
</code></pre>
<p>I’ve also thought that <code>push</code> and <code>pop</code> could potentially be clearer as curly braces, and that the initial colons aren’t really necessary:</p>
<pre><code>{
  translate 0,1040
  strokecolor #999
  linewidth 0.25pt
  line 0,0 to 1080,0
  stroke

  {
    fillcolor #999
    font 14pt helv
    text 1085,-3 "ascender"
  }
}
</code></pre>
<h2 id="thefuture">The future</h2>
<p>My initial reason for building Press was to have an easy, programmable cross-platform way to create <a href="https://bencrowder.net/projects/tags/charts/">language chart PDFs</a> (so I could move away from PlotDevice/DrawBot), and what I’ve realized (acknowledging that I haven’t really been making language charts in recent years) is that there are some other, better options now.</p>
<p>One that seems decent is SVG, converted to PDF by way of Inkscape. Initial tests here seem like it would probably work fine.</p>
<p>Another promising option that I admittedly haven’t looked into very much yet is <a href="https://www.pagedjs.org/">Paged.js</a>. HTML and CSS are already great for declarative typesetting, and the more I’ve thought about programmatic typesetting, the more this model seems to be the future I’d want to work with (and not just because of parity with web, though that makes it much more compelling).</p>
<p>tl;dr I don’t see myself continuing on with Press, so we may as well call a mortem on it.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Update on Press (the PDF compiler). I haven’t worked on it at all lately, but I wanted to document i...">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Brief and no doubt boring update on internal tooling: As of a few days ago, I’m planning to take Vin...</title>
      <link>https://bencrowder.net/blog/2021/1223/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/1223/</guid>
      <pubDate>Fri, 04 Jun 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>Brief and no doubt boring update on internal tooling:</p>
<p>As of a few days ago, I’m planning to take Vinci (logs), Arc (notes), Storybook (fiction writing), and possibly Slash (blog) and smush them all together into a new, streamlined Django app called Writ. (Fundamentally, they’re all tools for writing, and there’s enough overlap among them that keeping them split out isn’t worth it to me.) Still in the initial design/planning stage. Looking forward to simplifying things a bit.</p>
<p>I’m no longer intent on using plain text as the data store for my apps. The main reasons I wanted to do this in the first place: a) archival durability and b) rampant minimalism. For the first, I’ll instead have all my apps export everything to plain text whenever there’s a change. It won’t be canonical, but it will be a redundant copy of the data so it’s even more archivally durable. As for the minimalism, well, sometimes one can go too far.</p>
<p>Lastly, I’m looking into hosting my site statically via Linode Object Storage (ala S3). Still exploring ramifications — redirects, etc. Main goal with this is to make my site more resilient, and even if the object storage part doesn’t work out, I’ll still move the site over to a new static engine (which I’m naming Cast, and I plan to write it in Go).</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Brief and no doubt boring update on internal tooling: As of a few days ago, I’m planning to take Vin...">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>At work I recently had a use case for Go 1.16’s new embedding feature. Incredibly easy to implement...</title>
      <link>https://bencrowder.net/blog/2021/1209/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/1209/</guid>
      <pubDate>Thu, 27 May 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>At work I recently had a use case for <a href="https://golang.org/pkg/embed/">Go 1.16’s new embedding feature</a>. Incredibly easy to implement (literally one or two minutes). Worked like a charm.</p>
<p>Tangential note that doesn’t completely relate but whatever, I’ll throw it in: every time I think back on embedding (which is not <em>that</em> often, thankfully), my brain gets all excited about compile-time execution in Jai and in Zig. (Both are languages I’ve only read about, to be clear. Might be time, though, to start building something in Zig.)</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20At work I recently had a use case for Go 1.16’s new embedding feature. Incredibly easy to implement...">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Links #41</title>
      <link>https://bencrowder.net/blog/2021/links-41/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/links-41/</guid>
      <pubDate>Wed, 14 Apr 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><a href="https://plusequals.art/">Rob Weychert’s Plus Equals</a>, a new zine about algorithmic art. The first issue was good, looking forward to future installments.</p>
<p><a href="https://riccardoscalco.it/textures/">Riccardo Scalco’s Textures.js</a>, SVG patterns for d3.js. Yum. I don’t even use d3 (at least not right now), but I’m tempted to do something with it just so I can use these.</p>
<p><a href="https://kottke.org/21/03/the-invention-of-a-new-pasta-shape">Jason Kottke on the invention of a new pasta shape</a>. Max sauceability as a concept will stick with me for a long time, I think.</p>
<p><a href="https://rytisbiel.com/2021/03/06/darker-corners-of-go/">Rytis Bieliunas on some of the darker corners of Go</a> (the programming language). I’m writing a lot of Go at work now and this was helpful.</p>
<p><a href="https://austinkleon.com/2021/02/09/blogging-as-a-forgiving-medium/">Austin Kleon on blogging as a forgiving medium</a>. The idea of continually editing and refining posts after publishing them intrigues me. I fix typos if I find them, but that’s about it at the moment.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Links #41">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Weeknotes 2.1</title>
      <link>https://bencrowder.net/blog/2021/weeknotes-2-1/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/weeknotes-2-1/</guid>
      <pubDate>Fri, 12 Mar 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<ul>
<li>Weeknotes are back, I think, and we’ll start a new season to celebrate the gap.</li>
<li>Today marks one full year since BYU announced that classes were going remote, and tomorrow is the anniversary of my work and the kids’ school following suit. One year. Whew. A bit mind-blowing. It’s certainly taken longer than we thought it would, but hope is finally upon us. My wife and I are looking forward to getting vaccinated next month, and then hopefully the trials with children go well. (We have a child with a high-risk medical condition, so we can’t really breathe easy until the whole family’s vaccinated. Which probably won’t be till the end of the year. Endure to the end!)</li>
<li>Quick update on the new job (which is great, loving it): while I still hit occasional pockets of onboarding slowness (new parts of the codebase, mainly), overall I feel like the impostor syndrome is mostly shutting the heck up. Also, Go turns out to be a great language for team-based work, at least in my view. Extremely easy to read, and it feels transparent, like it’s just you and what you’re trying to do, without the language getting in the way.</li>
<li>A couple weeks ago I messed up my back and have been dealing with the fallout since then. This time it’s taking longer to recover than it did a few years ago, which I suspect has to do at least in part with age. What a joy.</li>
<li>Art has slowed down a bit. I’m still planning to keep at it, but on a less regular basis. (It’s been my main thing for a while now and I think I’d like to focus more on other things.) When I do work on it, I’m planning to continue exploring the new texturing technique I used on <em><a href="https://bencrowder.net/blog/2021/1157/">Where Can I Turn for Peace?</a></em> (probably redo a few old pieces with it). Maybe some more Blender, too, though I’m not really sure yet how that fits in.</li>
<li>Most of my writing projects are in the planning/outlining stages, so there’s not much to show yet there, sadly. (A fact which needs to bother me more, enough so that I start actually finishing stories. Good grief. But I guess part of working in public is being incompetent in public. Here you go! And I hope that the <a href="https://bencrowder.net/blog/2021/beats/">beats idea</a> is the answer to my writing woes.)</li>
<li>I’ve finished the initial draft of lowercase letters on the Hinte typeface, and I’m in the middle of refining those and starting on the uppercase. Hoping to do much more type design going forward. (And eventually replace Literata on this site with something homegrown.)</li>
<li>As part of that endeavor, by the way, I’m itching to build that nice new web-based version of Curves. (FontForge is functional, sure, but its UI definitely does not spark joy for me.) Since I’ve already built the font-generating backend, the main remaining challenge here is just figuring out how I want the UI to work.</li>
</ul><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Weeknotes 2.1">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>I ended up tweaking my Vim syntax highlighting earlier this week (after my first post), to be more i...</title>
      <link>https://bencrowder.net/blog/2020/1030/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/1030/</guid>
      <pubDate>Thu, 17 Sep 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>I ended up tweaking my Vim syntax highlighting earlier this week (after my <a href="https://bencrowder.net/blog/2020/1029/">first post</a>), to be more in line with what Ben had posted. Here’s what I’ve come up with so far (with the disclaimer that all of this code is internal and wasn’t written with the expectation that it would ever be seen by anyone else) (and I’m also still fairly new at writing Go and Rust):</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/09/syntax-python.png" alt="syntax-python.png" title="syntax-python.png" />
        
      </figure></p>
<p>And some Rust, Go, and HTML:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/09/syntax-rust.png" alt="syntax-rust.png" title="syntax-rust.png" />
        
      </figure></p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/09/syntax-go.png" alt="syntax-go.png" title="syntax-go.png" />
        
      </figure></p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/09/syntax-html.png" alt="syntax-html.png" title="syntax-html.png" />
        
      </figure></p>
<p>These are certainly more soothing to my eyes, which was something I didn’t realize I needed. While these aren’t perfect in the least — with enough variation between languages to look almost like entirely different color themes, though I think I see that as a feature and not a bug — I’m happy with the tweaks for now and plan to stick with them.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20I ended up tweaking my Vim syntax highlighting earlier this week (after my first post), to be more i...">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Saturn intro</title>
      <link>https://bencrowder.net/blog/2020/saturn-intro/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/saturn-intro/</guid>
      <pubDate>Wed, 12 Aug 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><em>Another entry in the <a href="https://bencrowder.net/blog/2020/910/">frankly too long series</a> talking about my personal productivity tools.</em></p>
<p>Saturn is my launcher app for my phone. It’s a small Go web app. The name comes from the Saturn V rocket launcher, and I wrote it as a replacement for Launch Center Pro (when it switched to a subscription model, because apparently I am allergic to those).</p>
<h2 id="overview">Overview</h2>
<p>This is what it looks like:</p>
<p><figure class="clampvert">
        <img src="https://cdn.bencrowder.net/blog/2020/08/saturn-1.png" alt="saturn-1.png" title="saturn-1.png" />
        
      </figure></p>
<p>The blue buttons are direct links to pages. There’s a very hard to see dark textbox at the bottom, and if I type something in there, the green buttons take that and execute a search somewhere else. Finally, the pink buttons open secondary panels, like this Notebooks panel:</p>
<p><figure class="clampvert">
        <img src="https://cdn.bencrowder.net/blog/2020/08/saturn-2.png" alt="saturn-2.png" title="saturn-2.png" />
        
      </figure></p>
<p>On this panel, the lighter rectangle above the buttons is a search box that allows filtering through Vinci notebooks.</p>
<h2 id="howiusesaturn">How I use Saturn</h2>
<p>On my phone, I have it saved to my dock. It’s not set to be a PWA, because then the links would open in the in-app Safari; I prefer having them open in normal Safari.</p>
<p>I use Saturn pretty much every day. I mainly use it to set reminders,  search Amazon, Goodreads, and eReaderIQ, and get to my journal and my daily review list.</p>
<h2 id="thefuture">The future</h2>
<p>I’m largely happy with it as-is. Maybe some more refactoring of the buttons (the Search button is largely obsolete now that I’ve moved all those buttons to the main screen, for example), and it could use a little design love to make things more consistent (search boxes, for example), but that’s it.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Saturn intro">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Gate intro</title>
      <link>https://bencrowder.net/blog/2020/gate-intro/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/gate-intro/</guid>
      <pubDate>Thu, 06 Aug 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><em>Yet another entry in the <a href="https://bencrowder.net/blog/2020/910/">seemingly endless series</a> talking about my personal productivity tools.</em></p>
<p>Gate is a small quick entry app for my phone. It’s a Go web app, and the name comes from it being a gateway to my other apps. I used to use Drafts, but when it switched to a subscription model I decided to do my own thing (which worked out well for me, since I was able to make other customizations I’d long been wanting to make).</p>
<h2 id="overview">Overview</h2>
<p>The main screen looks like this:</p>
<p><figure class="clampvert">
        <img src="https://cdn.bencrowder.net/blog/2020/08/gate-1.png" alt="gate-1.png" title="gate-1.png" />
        
      </figure></p>
<p>Just a textbox and some basic controls at the bottom. When I tap the Submit button, it opens up a dialog with options for where to send the contents of the textbox (the payload):</p>
<p><figure class="clampvert">
        <img src="https://cdn.bencrowder.net/blog/2020/08/gate-2.png" alt="gate-2.png" title="gate-2.png" />
        
      </figure></p>
<p>Red buttons go to Liszt, blue to Vinci, green to Slash. And this is why I have the text-based payloads in all those apps.</p>
<h2 id="howiusegate">How I use Gate</h2>
<p>I have it saved as a PWA to the homescreen on my phone, nestled safely in my dock. I use it all the time. (I suppose I could use it from my laptop web browser as well, but I have Quill for that use case, so I never do.)</p>
<h2 id="thefuture">The future</h2>
<p>I’m happy with the app itself. There are, however, some recent bugs with text controls in PWAs in iOS Safari where the keyboard either won’t come up or can’t be dismissed, but that’s out of my control. Hoping those get fixed soon (they didn’t crop up until sometime in the last year or so, I think).</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Gate intro">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Vinci intro</title>
      <link>https://bencrowder.net/blog/2020/vinci-intro/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/vinci-intro/</guid>
      <pubDate>Sun, 02 Aug 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><em>Another entry in the <a href="https://bencrowder.net/blog/2020/910/">snore-inducing series</a> talking about my personal productivity tools.</em></p>
<p>Vinci is my journal/log app, a private blog of sorts. It’s a Python app running in Django.</p>
<h2 id="overview">Overview</h2>
<p>Vinci has notebooks which contain entries. Like most blogs, entries are displayed in reverse chronological order. It looks like this, except I usually write in English, har har:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/vinci-1.png" alt="vinci-1.png" title="vinci-1.png" />
        
      </figure></p>
<p>Editing an entry is a modal fullscreen panel, with the main textbox at top, the metadata textbox under that, and some controls at the bottom.</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/vinci-2.png" alt="vinci-2.png" title="vinci-2.png" />
        
      </figure></p>
<p>On save, Vinci splices the metadata and the text together and runs it through the payload processor.</p>
<h2 id="payloadsyntax">Payload syntax</h2>
<p>Vinci uses the text-based payload idea like <a href="https://bencrowder.net/blog/2020/liszt-intro/">Liszt</a>. Its payload syntax looks like this:</p>
<pre><code>/projects
:tags foo, bar

Worked on the [foo project](/leaf/3290) for a while. Ran into a few issues.
</code></pre>
<p>The first line is the notebook specifier. The second line (and this could have been anywhere, didn’t have to be at the top) has a command with some parameters. And the rest is Markdown.</p>
<p>There’s also a variant syntax where the first line can look like this: <code>/projects/tag/tag2/tag3</code>. I’ve started using that a little more often.</p>
<p>Because of how I like to write in my journal, I’ve also set up a special case for my <code>/journal</code> notebook, where adding an entry will either create a new entry for the day (if there isn’t one yet) or append to the existing entry, so there’s just one entry for each day. (I use Gate or Quill to jot down a paragraph and then append it quickly and easily.)</p>
<h2 id="howiusevinci">How I use Vinci</h2>
<p>I use Vinci a lot. I maintain my personal journal in it, along with logs for most areas of my life — work, school, writing, projects, church, etc. Sometimes I create notebooks for specific projects, other times I use a higher-level notebook (like <code>/projects</code>) and use tags instead. At some point I’ll probably consolidate.</p>
<p>I have a <code>/thinking</code> notebook where once each morning I think through my current tasks/projects and write out what I need to do for each. Writing things down makes a world of difference for me, across the board.</p>
<p>Each morning I also spend a few minutes reading one of my past journal entries, <a href="https://bencrowder.net/blog/2020/849/">as mentioned earlier today</a>. (A while back I scanned all my paper journals and I’ve been slowly transcribing them — we’ll get to Ditto soon — and importing them into Vinci.) Lately I’ve been reading through my 2004 college entries. My undergraduate years were great, but I am very, very glad I’m not in that phase of life anymore.</p>
<p>Lastly, I reference these notebooks fairly frequently. (When did we replace our dishwasher, what did I last work on for that project I haven’t worked on in months, etc.)</p>
<h2 id="thefuture">The future</h2>
<p>Vinci currently uses Whoosh for full-text indexing, but it’s unsupported and hasn’t been working as well for me lately. Several months ago I realized that if all my notebook entries are stored in plain text files, I can just use <code>ripgrep</code> or <code>ag</code> for fast and accurate searching, with the further benefit that in the event of my untimely demise, everything would be fairly easy for my family to copy out and preserve. (I really like plain text, can you tell?)</p>
<p>To that end, I started writing a new, smaller app in Go called Leaf. It’s going well, but I’m tempted to switch to FastAPI. Not sure yet if I will or not. (I’ve enjoyed learning Go and have used it on several small projects now, but I’m also thinking more about long-term maintenance across all these apps, and using a single stack would simplify things for me.)</p>
<p>I’m also thinking about adding a small CLI (in the web interface) that would make entry management easier — moving all entries with a specific tag to their own notebook, for example. Truth be told, I don’t know that entry management happens frequently enough to warrant a CLI, but I’m intrigued by the idea of putting a CLI in the interface, and if it goes as well as I hope it will, I see myself doing that in more of my tools. (Right now I see it as an extension of the search interface. Where right now I type <code>dishwasher</code> to search for that keyword, I’d eventually also be able to type something like <code>:move /projects#cardiff /cardiff</code>.)</p>
<p>As with Liszt, I’m also looking forward to moving to a lighter, simpler codebase. Vinci has a moderate amount of vestigial functionality that needs to go.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Vinci intro">Reply via email</a></p>]]></description>
    </item>
    
  </channel>
</rss>
