{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Jason A. Heppler",
  "home_page_url": "https://jasonheppler.org/",
  "feed_url": "https://jasonheppler.org/feed.json",
  "authors": [{"name": "Jason Heppler"}],
  "items": [
    {
      "id": "https://jasonheppler.org/2026/03/24/restoring-old-digital-history/",
      "url": "https://jasonheppler.org/2026/03/24/restoring-old-digital-history/",
      "title": "Restoring Old Digital History",
      "content_html": "\u003cp\u003eIf there\u0026rsquo;s one thing I\u0026rsquo;ve come to appreciate about generative AI, it\u0026rsquo;s the ability to automate routine things. One of my digital history sites\u0026mdash;\u003ca href=\"http://framingredpower.org/\"\u003ethe first one I ever made\u003c/a\u003e\u0026mdash;broke at some point. It\u0026rsquo;s an old site that really should\u0026rsquo;ve always been a static site, but static site generators were not quite a thing when I first made this project. Instead, I had a mix of HTML and PHP that assembled the site.\u003c/p\u003e\n\u003cp\u003eSo a few weeks ago, I posed Claude a task: take this site and convert it into Hugo. That work finished within an hour\u0026mdash;a task that most certainly would\u0026rsquo;ve taken me a few weeks to work through, and much of that work pretty tedious. I\u0026rsquo;ve since had Claude\u0026rsquo;s help in converting all of my digital history projects into Hugo sites. They\u0026rsquo;re now easier to maintain, easier to deploy (I\u0026rsquo;ve moved all of my sites to Cloudflare, which deploys from a GitHub commit), and should stick around a lot longer.\u003c/p\u003e\n\u003cp\u003eHere are the sites I\u0026rsquo;ve updated in the past month.\u003c/p\u003e\n\u003ch2 id=\"framing-red-power\"\u003e\u003ca href=\"https://framingredpower.org\"\u003eFraming Red Power\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eA companion website I created for my Master\u0026rsquo;s thesis, Framing Red Power sought to analyze media coverage of the Trail of Broken Treaties protest in 1972 that culminated in Indigenous activists occupying the Bureau of Indian Affairs. With Claude\u0026rsquo;s help I fixed up a number of things.\u003c/p\u003e\n\u003cp\u003eFirst, the site had completely broken and was only providing unstyled HTML. As part of the Hugo conversion, I asked Claude to also add in a modern CSS framework and slightly modernized the design. The site, otherwise, remains exactly the same as it did when I launched it in 2009.\u003c/p\u003e\n\u003cp\u003eThe other big fix was to reconstitute text analysis tools that stopped working ages ago. At one point \u003ca href=\"https://cdrh.unl.edu/person/brian-l-pytlik-zillig/\"\u003eBrian Pytlik Zillig\u003c/a\u003e at the \u003ca href=\"https://cdrh.unl.edu/\"\u003eCenter for Digital Research in the Humanities\u003c/a\u003e had developed a tool called TokenX (\u003ca href=\"https://dh-abstracts.library.virginia.edu/works/751\"\u003efor example\u003c/a\u003e) for running text analysis and building visualizations, but it\u0026rsquo;s been offline for quite some time. So, \u003ca href=\"https://framingredpower.org/sources/text-analysis/\"\u003eI rebuilt the text analysis section\u003c/a\u003e of the site with Observable and recreated some of the visualizations that I\u0026rsquo;d long lost. I also updated \u003ca href=\"https://framingredpower.org/sources/protestmap/\"\u003ethe map interface\u003c/a\u003e, which once relied on Google My Maps but now is self-contained using Leaflet. I created \u003ca href=\"https://framingredpower.org/sources/text-analysis-methods/\"\u003ea methodologies page\u003c/a\u003e about creating these visualization as well.\u003c/p\u003e\n\u003cp\u003eI consider Framing Red Power a completed research project.\u003c/p\u003e\n\u003ch2 id=\"heading\"\u003e\u003ca href=\"https://progressivewildwest.org/\"\u003e\u0026ldquo;Self-sustaining and a good citizen\u0026rdquo;:  William F. Cody and the Progressive Wild West\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI was once the project manager for the \u003ca href=\"https://codyarchive.org\"\u003eWilliam F. Cody Archive\u003c/a\u003e and a research affiliate with the \u003ca href=\"https://centerofthewest.org/\"\u003eBuffalo Bill Center of the West\u003c/a\u003e as Doug Seefeldt, Frank Christianson, Jeremy Johnston, and a few of my graduate school colleagues aimed to launch \u003ca href=\"https://www.codystudies.org/\"\u003eCody Studies\u003c/a\u003e to examine the life and legacy of William F. Cody. In this role I pursued research on Indigenous peoples employed by his Wild West exhibition, resulting in the project above. I argued that while other scholars have suggested that employment with Cody allowed Indigenous peoples to continue practicing in cultural and religious traditions otherwise outlawed on reservations, Cody saw his exhibition nevertheless as a potential vehicle for the Progressive project of \u0026ldquo;civilizing\u0026rdquo; Native Americans.\u003c/p\u003e\n\u003cp\u003eThe first step here was getting the site converted to Hugo from Jekyll, which was pretty straightforward. The bigger task was to update a section of the site I called a \u003ca href=\"https://progressivewildwest.org/concept-map/\"\u003econcept map of narrative themes\u003c/a\u003e: a way of visualizing \u003ca href=\"https://progressivewildwest.org/1913/07/28/letter-from-john-r.-brennan-to-cato-sells/\"\u003eannotations\u003c/a\u003e across primary sources that served to collect together pieces of evidence that drove my argument. Here\u0026rsquo;s the kicker, though: this piece of scholarly work was two parts, where annotations existed in the transcribed sources and then the visualization was a hand-coded HTML page of those annotations. Nothing was automated, although that was always the idea; it was a tremendous amount of work.\u003c/p\u003e\n\u003cp\u003eHugo, however, has allowed me to finally automate this visualization. With Claude\u0026rsquo;s assistance, I replaced all my hand annotations with Hugo shortcodes that handled the annotations in the documents and allowed me to derive that data via a Python script. I finally made this work the way I\u0026rsquo;d always wanted to (at the time I\u0026rsquo;d played with ideas of using XML and XSLT but never fully got around to it, thankfully). This has been a tremendously helpful thing to have.\u003c/p\u003e\n\u003cp\u003eThe site currently exists exactly as it did when I published it in 2012, but I am returning to this project as I do fresh research. Having it in Hugo will make new additions much easier.\u003c/p\u003e\n\u003ch2 id=\"machines-in-the-valley\"\u003e\u003ca href=\"https://machinesinthevalley.org\"\u003eMachines in the Valley\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMachines in the Valley is a companion website to my book. This one I hand-converted from Jekyll to Hugo myself a couple of years ago, but did turn to Claude recently to just have it do a once-over on the design and CSS work (which did fix a few things that I\u0026rsquo;d broke).\u003c/p\u003e\n\u003cp\u003eWhen I converted this to Hugo in 2024 right as my book was published, I\u0026rsquo;d moved the CSS from Bootstrap to Tailwind in addition to getting things into a new static site generator. Doing that work also meant some slight layout changes that helped let the visualizations take over the browser window in a way that I felt gave readers a better viewport for working with the visualizations. I also took the time to clean up a few visualizations and create two new ones based on data I\u0026rsquo;d collected but never got around to publishing.\u003c/p\u003e\n\u003cp\u003eI consider this project done.\u003c/p\u003e\n\u003ch2 id=\"what-is-digital-humanities\"\u003e\u003ca href=\"https://whatisdigitalhumanities.com/\"\u003eWhat Is Digital Humanities?\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe most popular thing I\u0026rsquo;ve ever made, which takes definitions from past Day of DH events and presents a random definition each time you visit the page or ask for a new definition. Perpetual answers to the perpetual question, as I say.\u003c/p\u003e\n\u003cp\u003eNo real updates here from coding agents, just a note that a few years ago I rewrote some of the randomization scripts and added a button refresh to get new definitions on demand. This, also, is on Cloudflare now. I guess this project is done?\u003c/p\u003e\n\u003ch2 id=\"jasonhepplerorg\"\u003e\u003ca href=\"https://jasonheppler.org\"\u003eJasonHeppler.org\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhile we\u0026rsquo;re at it, I\u0026rsquo;ll reiterate that I\u0026rsquo;ve migrated this website to Cloudflare in addition to \u003ca href=\"/2026/03/02/a-new-design-for-readability/\"\u003ea pretty major code audit\u003c/a\u003e.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eThese updates weren\u0026rsquo;t just about tidying up or fixing old projects, though\u0026mdash;they\u0026rsquo;re about the broader challenge of keeping digital work alive. Part of my interest here is related to my work at \u003ca href=\"https://rrchnm.org\"\u003eRRCHNM\u003c/a\u003e\u0026mdash;we have, after all, thirty-plus years of projects and some subset of those projects are ones we are committed to sustaining. Among the hats I wear at the Center, one is aiding with our sustainability work. As part of that effort we\u0026rsquo;ve \u003ca href=\"https://sustainabledh.org/\"\u003etried to make sites static\u003c/a\u003e so they remain accessible and usable: some of those are simple \u003ccode\u003ewget\u003c/code\u003e workflows that we lightly clean up and serve, but others are entire conversions from something database-driven like Omeka or Wordpress to Hugo.\u003c/p\u003e\n\u003cp\u003eI want my digital history work to stick around, and plain old HTML is the most sustainable format we currently have for the Internet. Getting these old projects into a more modern shape feels great.\u003c/p\u003e\n",
      "summary": "\u003cp\u003eIf there\u0026rsquo;s one thing I\u0026rsquo;ve come to appreciate about generative AI, it\u0026rsquo;s the ability to automate routine things. One of my digital history sites\u0026mdash;\u003ca href=\"http://framingredpower.org/\"\u003ethe first one I ever made\u003c/a\u003e\u0026mdash;broke at some point. It\u0026rsquo;s an old site that really should\u0026rsquo;ve always been a static site, but static site generators were not quite a thing when I first made this project. Instead, I had a mix of HTML and PHP that assembled the site.\u003c/p\u003e",
      "date_published": "2026-03-24T00:00:00Z",
      "tags": ["digital-history","development"]
    },
    {
      "id": "https://jasonheppler.org/2026/03/09/vibing-digital-history/",
      "url": "https://jasonheppler.org/2026/03/09/vibing-digital-history/",
      "title": "Vibing Digital History",
      "content_html": "\u003cp\u003eOne thing I\u0026rsquo;ve been thinking about is a persistent critique\u0026mdash;one I\u0026rsquo;ve expressed myself and think is completely valid\u0026mdash;that code generated by Claude or Codex immediately becomes technical debt. That is, it\u0026rsquo;s tantamount to producing spaghetti or legacy code that you cannot understand because you did not write it (which, of course, is \u003ca href=\"/2025/12/22/generative-ai-and-the-work-of-history/\"\u003ea similar concern\u003c/a\u003e I have about generative AI producing things like historiographical essays).\u003c/p\u003e\n\u003cp\u003eBut as my pal Lincoln Mullen \u003ca href=\"https://lincolnmullen.com/blog/behind-ahead/\"\u003ejust wrote\u003c/a\u003e, the barrier to entry for most things we do in digital history\u0026mdash;building websites, creating maps, designing data visualizations, preparing data\u0026mdash;can be reduced considerably. I\u0026rsquo;ve spent my career building these kinds of skills to do this kind of work, and now a machine can do them in a fraction of the time it takes me.\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e Here\u0026rsquo;s an example.\u003c/p\u003e\n\u003cp\u003eI am in the throes of a research project for a book on the politics around land, agriculture, environmentalism, and land management on the Great Plains. It occurred to me recently that I need to stretch my timeline backwards a bit to the Bankhead-Jones Act of 1937. I\u0026rsquo;ll save a fuller history for some other time, but in short: Bankhead-Jones empowered the federal government to purchase just over 11 million acres of farmland deemed \u0026ldquo;submarginal.\u0026rdquo; The administration of the program traveled from the Bureau of Agricultural Economics until 1938, to the Soil Conservation Service until 1953, to the U.S. Forest Service which continues the administration of these lands today. Importantly, however, this established a federal presence across a region that had been almost entirely in private hands.\u003c/p\u003e\n\u003cp\u003eI wanted to see these lands, in part because one thing that\u0026rsquo;s complicated about writing this regional history I\u0026rsquo;m working on is the quilted patchwork of public and private land ownership and management that happens on the grasslands. So I asked \u003ca href=\"https://code.claude.com/docs/en/overview\"\u003eClaude\u003c/a\u003e: without any input from me, find the data and make this map. It took about fifteen minutes.\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"/2026/03/09/vibing-digital-history/bankhead-jones-map.png\"\n       alt=\"Map of land subject to the Bankhead-Jones Farm Tenant Act of 1937\"\n       width=\"2880\"\n       height=\"1488\"\n       loading=\"lazy\"\n       decoding=\"async\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/projects/bankhead/\"\u003eHere\u0026rsquo;s the interactive version\u003c/a\u003e. This is the kind of thing I\u0026rsquo;ve been building for years\u0026mdash;an interactive map of data to understand more clearly how something worked or influenced a place. A map of this nature would\u0026rsquo;ve taken me, at best, half a day: finding the data, doing any data formatting necessary for a web map, making the website, making the map filterable or interactive. Claude did everything with no input from me in fifteen minutes.\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e\u003c/p\u003e\n\u003cp\u003eGenerative AI is really bad at doing history. But it \u003cem\u003ecan\u003c/em\u003e enable me to do good history.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eBack to technical debt. In something like this I think it matters a lot less about whether I know how this was made. First, the code is small enough that it\u0026rsquo;s easy for me to know what it did. And, frankly, generative AI (given the right prompts) is very disciplined about documenting code. Second, this isn\u0026rsquo;t a big system. If I were working on software for a bank, a large Internet service company, or Apple, that\u0026rsquo;d be one thing\u0026mdash;I think the time investment perhaps doesn\u0026rsquo;t pay off as well because you need to really pay attention to what coding agents are doing.\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e\u003c/p\u003e\n\u003cp\u003eThe point here is that if these tools are enabling a software developer with a decade of experience in digital humanities to create things in a fraction of the time it once took, then these tools are phenomenally \u003cem\u003eempowering\u003c/em\u003e for someone just starting out or with almost no coding experience at all. In this case I think there really isn\u0026rsquo;t a debt: it\u0026rsquo;s a small or one-off visualization, not a complex system. Rather than a debt, this is an investment in one\u0026rsquo;s intellectual work. The rote or routine work can free up your time to focus on the \u003cem\u003ehistory\u003c/em\u003e rather than the \u003cem\u003etechnology\u003c/em\u003e. Not to speak for my fellow digital historians, but I think that\u0026rsquo;s been the point this whole time: the technology was a means to an end\u0026mdash;of doing new kinds of history that we couldn\u0026rsquo;t do (at least, not as easily) without digital tools. Generative AI has shifted this considerably.\u003c/p\u003e\n\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\n\u003chr\u003e\n\u003col\u003e\n\u003cli id=\"fn:1\"\u003e\n\u003cp\u003eI find this predicament both humbling but also exhilarating. If doing less of the heavy tech work means I can do more of the history work, I think that\u0026rsquo;s a great leap in the right direction.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli id=\"fn:2\"\u003e\n\u003cp\u003eIf I intend to do more with this map I\u0026rsquo;d probably take over the design work on this since I like doing that sort of thing. But the routine work of setting up the map and data means I can move on to things more intellectually satisfying.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli id=\"fn:3\"\u003e\n\u003cp\u003eCoding agents are good, but not great. I still frequently catch things from unused variables it assigned to more efficient ways of achieving a solution. The agents still tend to be rather boilerplate in their solutions\u0026mdash;but that\u0026rsquo;s not always a bad thing.\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n",
      "summary": "\u003cp\u003eOne thing I\u0026rsquo;ve been thinking about is a persistent critique\u0026mdash;one I\u0026rsquo;ve expressed myself and think is completely valid\u0026mdash;that code generated by Claude or Codex immediately becomes technical debt. That is, it\u0026rsquo;s tantamount to producing spaghetti or legacy code that you cannot understand because you did not write it (which, of course, is \u003ca href=\"/2025/12/22/generative-ai-and-the-work-of-history/\"\u003ea similar concern\u003c/a\u003e I have about generative AI producing things like historiographical essays).\u003c/p\u003e\n\u003cp\u003eBut as my pal Lincoln Mullen \u003ca href=\"https://lincolnmullen.com/blog/behind-ahead/\"\u003ejust wrote\u003c/a\u003e, the barrier to entry for most things we do in digital history\u0026mdash;building websites, creating maps, designing data visualizations, preparing data\u0026mdash;can be reduced considerably. I\u0026rsquo;ve spent my career building these kinds of skills to do this kind of work, and now a machine can do them in a fraction of the time it takes me.\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e Here\u0026rsquo;s an example.\u003c/p\u003e",
      "date_published": "2026-03-09T00:00:00Z",
      "tags": ["artificial-intelligence","digital-history"]
    },
    {
      "id": "https://jasonheppler.org/2026/03/05/the-obsidian-hugo-workflow/",
      "url": "https://jasonheppler.org/2026/03/05/the-obsidian-hugo-workflow/",
      "title": "The Obsidian-Hugo Workflow",
      "content_html": "\u003cp\u003eI wanted to jot down my current workflow for this website. I mentioned in my recent post on the redesign of this site that I have a new workflow in place where I can do everything right from the comfort of Obsidian. To get this to work I had a few things to set up first.\u003c/p\u003e\n\u003cp\u003eWhile the following might seem slightly complicated (and certainly it is more techy than just running a WordPress website), it\u0026rsquo;s really just three pieces: an Obsidian vault that just opens my Hugo folder; GitHub for the files; Cloudflare for the deployment and hosting.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eObsidian → GitHub → Cloudflare\u003c/p\u003e\u003c/blockquote\u003e\n\u003ch2 id=\"setting-up-the-vault\"\u003eSetting up the Vault\u003c/h2\u003e\n\u003cp\u003eTo get this system to play nicely with Hugo, I had a few things to adjust. In settings:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eUnder \u003cstrong\u003eFiles and Links\u003c/strong\u003e, toggle off wikilinks so you can use standard markdown links.\u003c/li\u003e\n\u003cli\u003eThe \u003cstrong\u003eNew link format\u003c/strong\u003e should be set to \u0026ldquo;Path from current file.\u0026rdquo;\u003c/li\u003e\n\u003cli\u003eInstall the \u003ca href=\"https://github.com/Vinzent03/obsidian-git\"\u003eGit plugin\u003c/a\u003e. Make sure git is active in your site\u0026rsquo;s folder.\u003c/li\u003e\n\u003cli\u003eI use Hugo page bundling to keep images with posts (and take advantage of Hugo\u0026rsquo;s image processing should I need it). In Obsidian, I set the \u003cstrong\u003eDefault location for new attachments\u003c/strong\u003e to \u0026ldquo;Same folder as current file\u0026rdquo; to make this work.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eTo keep git (and Hugo) happy, \u003ccode\u003e.obsidian/\u003c/code\u003e should be included in your \u003ccode\u003e.gitignore\u003c/code\u003e. That directory churns constantly and you don\u0026rsquo;t want git to clobber what\u0026rsquo;s there. Similarly, adding \u003ccode\u003e.obsidian\u003c/code\u003e to Hugo\u0026rsquo;s \u003ccode\u003eignoreFiles\u003c/code\u003e configuration means \u003ccode\u003ehugo server\u003c/code\u003e doesn\u0026rsquo;t try and constantly render changes in that directory when watching for file changes. If you wanted, you could also exclude some of the other Hugo directories that don\u0026rsquo;t deal with content. For example, you might set Obsidian to exclude \u003ccode\u003elayouts/\u003c/code\u003e, \u003ccode\u003eassets/\u003c/code\u003e, \u003ccode\u003estatic/\u003c/code\u003e, and other Hugo directories from the file browser so the vault feels like a writing environment rather than a code project.\u003c/p\u003e\n\u003cp\u003eThe other change is I had to bulk update all of my tags to use kebab-case since Obsidian doesn\u0026rsquo;t accept tags with spaces in them. This actually works great: I get the auto-complete of Obsidian so I don\u0026rsquo;t duplicate tags, and in the front end of Hugo I can still render the tags with spaces in them.\u003c/p\u003e\n\u003ch2 id=\"github-and-cloudflare\"\u003eGitHub and Cloudflare\u003c/h2\u003e\n\u003cp\u003eThis couldn\u0026rsquo;t be easier. The Cloudflare integration with GitHub is fantastic. It\u0026rsquo;s just a matter of setting up \u003ca href=\"https://pages.cloudflare.com/\"\u003eCloudflare Pages\u003c/a\u003e and directing it to the correct repository. To build the site I pass \u003ccode\u003ehugo\u003c/code\u003e as a build command within Cloudflare\u0026rsquo;s Pages settings. Cloudflare does the rest. And Cloudflare fits with one of \u003ca href=\"/2026/03/02/a-new-design-for-readability/\"\u003emy other goals\u003c/a\u003e, which was driving down the carbon output of this website. Since Cloudflare is \u003ca href=\"https://blog.cloudflare.com/understand-and-reduce-your-carbon-impact-with-cloudflare/\"\u003ecommitted to running their systems on 100% renewable energy\u003c/a\u003e, this helps my goal considerably.\u003c/p\u003e\n\u003cp\u003eOne of the most satisfying parts of this whole setup is I can publish new posts straight from Obsidian. The Git plugin means I can hit ⌘ + P and choose \u003cstrong\u003eGit: Commit\u003c/strong\u003e to prepare a post for deployment, and similarly ⌘ + P and choose \u003cstrong\u003eGit: Push\u003c/strong\u003e after a commit to run the actual deployment (or, more simply if I\u0026rsquo;m just ready for a post to go right away, \u003cstrong\u003eGit: Commit-and-sync\u003c/strong\u003e). All from the comfort of my Obsidian vault. No terminals, no rsync, no VS Code.\u003c/p\u003e\n\u003cp\u003eThe slightly scary part of this was moving my DNS records\u0026mdash;especially since my email is tied to my domain, I really didn\u0026rsquo;t want to screw that up. I had to have some conversations with \u003ca href=\"https://claude.ai\"\u003eClaude\u003c/a\u003e to make sure I understood it all, but it didn\u0026rsquo;t lead me astray and even helped troubleshoot a mistake I made.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eUpdate\u003c/strong\u003e: One additional thing I\u0026rsquo;d meant to mention is each of the components of my website that I update exist as their own Hugo folder. So, essays are inside a \u003ccode\u003e/blog/\u003c/code\u003e folder, my shorter notes exist in a \u003ccode\u003e/notes/\u003c/code\u003e folder, commonplace in my \u003ccode\u003e/links/\u003c/code\u003e folder, and my reading log is in my \u003ccode\u003e/books/\u003c/code\u003e folder. The books content is quite simple and, really, only reads the YAML content contained in the markdown files unless I\u0026rsquo;ve indicated there exists a review inside the file (in which case, a book gets a \u003ccode\u003ereviewed\u003c/code\u003e tag and either points to the external review or opens the page here on the site to read a review.) Treating my Hugo website folder as an Obsidian vault also means I can access all other other pages: my about page, publications, teaching, and so on are all accessible within Obsidian as well.\u003c/p\u003e\n",
      "summary": "\u003cp\u003eI wanted to jot down my current workflow for this website. I mentioned in my recent post on the redesign of this site that I have a new workflow in place where I can do everything right from the comfort of Obsidian. To get this to work I had a few things to set up first.\u003c/p\u003e\n\u003cp\u003eWhile the following might seem slightly complicated (and certainly it is more techy than just running a WordPress website), it\u0026rsquo;s really just three pieces: an Obsidian vault that just opens my Hugo folder; GitHub for the files; Cloudflare for the deployment and hosting.\u003c/p\u003e",
      "date_published": "2026-03-05T00:00:00Z",
      "tags": ["tech-life"]
    },
    {
      "id": "https://jasonheppler.org/2026/03/02/computers-cant-surprise/",
      "url": "https://jasonheppler.org/2026/03/02/computers-cant-surprise/",
      "title": "Computers Can't Surprise",
      "content_html": "\u003cp\u003eRichard Beard, \u0026ldquo;\u003ca href=\"https://aeon.co/essays/sure-ai-can-do-writing-but-memoir-not-so-much\"\u003eComputers Can\u0026rsquo;t Surprise\u003c/a\u003e\u0026rdquo;:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eTo escape the dead man’s handle of cliché, readers live in hope for organic associations, speculative leaps and surprise inferences. Whereas, to an AI, which is fed the answer before the question, ‘surprise’ remains an elusive concept.\u003c/p\u003e\n\u003cp\u003e. . .\u003c/p\u003e\n\u003cp\u003eAn LLM’s calculation of the most likely sequence of words is the \u003cem\u003eleast\u003c/em\u003e likely way to create great writing. Anyone working at a more emotionally engaged level than statistical probability, genuinely creating new work, has a better chance of resonating with readers, however that affinity is expressed.\u003c/p\u003e\n\u003cp\u003e. . .\u003c/p\u003e\n\u003cp\u003e. . . the rest of us can defy AI creep by defending and encouraging the human ambition to make art, unassisted, whether successful or otherwise. Art is an affirmation of human existence, the transmission and reception of messages about encounter and connection. One inner life can touch another and, for best results, nurture a creative process that no LLM can imitate.\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003eI keep coming back to this idea: there are things that generative, agentic systems are very good at. But creativity remains one of the things that will likely never be \u0026ldquo;solvable\u0026rdquo; by LLMs because they\u0026rsquo;re only as good as what they\u0026rsquo;re trained on. They cannot create new things because, by definition, their outputs are simply probabilistic orderings of words that I described as \u0026ldquo;\u003ca href=\"/2025/12/22/generative-ai-and-the-work-of-history/\"\u003esentenced shaped\u003c/a\u003e.\u0026rdquo; Those aren\u0026rsquo;t words generated by thought, by feeling, by hours of thinking and deep research. It\u0026rsquo;s just a regurgitation of a training set.\u003c/p\u003e\n",
      "summary": "\u003cp\u003eRichard Beard, \u0026ldquo;\u003ca href=\"https://aeon.co/essays/sure-ai-can-do-writing-but-memoir-not-so-much\"\u003eComputers Can\u0026rsquo;t Surprise\u003c/a\u003e\u0026rdquo;:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eTo escape the dead man’s handle of cliché, readers live in hope for organic associations, speculative leaps and surprise inferences. Whereas, to an AI, which is fed the answer before the question, ‘surprise’ remains an elusive concept.\u003c/p\u003e\n\u003cp\u003e. . .\u003c/p\u003e\n\u003cp\u003eAn LLM’s calculation of the most likely sequence of words is the \u003cem\u003eleast\u003c/em\u003e likely way to create great writing. Anyone working at a more emotionally engaged level than statistical probability, genuinely creating new work, has a better chance of resonating with readers, however that affinity is expressed.\u003c/p\u003e",
      "date_published": "2026-03-02T00:00:00Z",
      "tags": ["artificial-intelligence"]
    },
    {
      "id": "https://jasonheppler.org/2026/03/02/a-new-design-for-readability/",
      "url": "https://jasonheppler.org/2026/03/02/a-new-design-for-readability/",
      "title": "A New Design for Readability",
      "content_html": "\u003cp\u003eMy website just went through a big re-design and I wanted to document some of the changes here. I entered this design work with some self-imposed constraints:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eReduce the carbon footprint to less than 0.185g of CO2.\u003c/li\u003e\n\u003cli\u003eFocus on functionality, get rid of everything else.\u003c/li\u003e\n\u003cli\u003eChoose good, readable typefaces that evoke a book. As \u003ca href=\"https://www.robinsloan.com\"\u003eRobin Sloan says\u003c/a\u003e, this site will aspire to the speed and privacy of the printed page.\u003c/li\u003e\n\u003cli\u003eAudit the entire codebase, use more modern tooling to help with maintenance. Cut a bunch of CSS I no longer need or use.\u003c/li\u003e\n\u003cli\u003eEnsure functionality without Javascript.\u003c/li\u003e\n\u003cli\u003eUse only three typefaces (serif, sans, and mono), ideally hosted locally. Fall back to system fonts.\u003c/li\u003e\n\u003cli\u003eKeep the navigation simple.\u003c/li\u003e\n\u003cli\u003eKeep the color scheme simple (for some reason I had over twenty different colors defined in my \u003ccode\u003e:root\u003c/code\u003e rules before the redesign.)\u003c/li\u003e\n\u003cli\u003eBe consistent with headings, layouts, and unified design and typography.\u003c/li\u003e\n\u003cli\u003eSet up a blogging environment that connects Obsidian and Hugo.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eMuch of this design work was inspired by some of my favorite sites, like \u003ca href=\"https://vhbelvadi.com/\"\u003eV.H. Belvadi\u003c/a\u003e (whose sidebar navigation inspired my own), \u003ca href=\"https://maggieappleton.com\"\u003eMaggie Appleton\u003c/a\u003e, \u003ca href=\"https://lincolnmullen.com\"\u003eLincoln Mullen\u003c/a\u003e, \u003ca href=\"https://robinrendle.com\"\u003eRobin Rendle\u003c/a\u003e, \u003ca href=\"https://manuelmoreale.com/?ref=jasonheppler.org\"\u003eManuel Moreale\u003c/a\u003e, \u003ca href=\"https://blog.jim-nielsen.com/?ref=jasonheppler.org\"\u003eJim Nielsen\u003c/a\u003e, \u003ca href=\"https://gwern.net/?ref=jasonheppler.org\"\u003eGwern\u003c/a\u003e, \u003ca href=\"https://aworkinglibrary.com/\"\u003eA Working Library\u003c/a\u003e, and \u003ca href=\"https://notetoself.studio\"\u003eGina Trapani\u003c/a\u003e. The big purpose of the redesign, aside from major code cleanup, is \u003cem\u003ereadability\u003c/em\u003e. This site has gone through several major redesigns (I believe this is Version 9) since its inception nearly twenty years ago, along with countless fiddling and tweaking.\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e I wanted to simplify all of this so that the thing that matters for readers arriving on the site is the \u003cem\u003econtent\u003c/em\u003e. Everything else gets out of the way: navigation is tucked away in a slide-out rather than in a navigation bar, keyboard shortcuts help users move around easily, and text takes the primary viewing area on all screen sizes.\u003c/p\u003e\n\u003cp\u003eThe cleanup of CSS and images was a major help. The CSS cleanup was particularly useful: not only cleaning out a bunch of dead rules I was no longer using that lingered from past redesigns, but I also migrated over to a modern tooling stack (Tailwind) to make layouts and maintenance easier. I also took steps to ensure that any Javascript usage is a progressive enhancement: the site works perfectly well even if \u003ccode\u003enoscript\u003c/code\u003e is running in a reader\u0026rsquo;s browser. I reduced the CSS file by a few thousand lines (why I had something like twenty different color variables I\u0026rsquo;m not sure.) As for images, I converted all of them from \u003ccode\u003epng\u003c/code\u003e / \u003ccode\u003ejpg\u003c/code\u003e to \u003ccode\u003ewebp\u003c/code\u003e for performance/sustainability. And, to help with performance more generally, I put all of the Hugo posts into page bundles which allows me to use \u003ca href=\"https://gohugo.io/content-management/image-processing/\"\u003eHugo\u0026rsquo;s image processing tools\u003c/a\u003e on any image asset on the site.\u003c/p\u003e\n\u003cp\u003eI also migrated long-form posts back over from micro.blog after \u003ca href=\"/2025/01/21/friction/\"\u003ea year-long experiment\u003c/a\u003e. I\u0026rsquo;ll still be doing micro posts at micro.blog, and the main reason for leaving isn\u0026rsquo;t micro.blog at all\u0026mdash;it\u0026rsquo;s a terrific service and I love the work \u003ca href=\"https://www.manton.org\"\u003eManton\u003c/a\u003e has done in creating the platform. I\u0026rsquo;ll still be spending a lot of time there. But I wanted a bit more control over the look and feel of my website, and while I developed a micro.blog theme to mimic my old site design it felt a bit clunky to have two themes. It meant any change I made to my main website I had to go and figure out in a micro.blog theme as well (or vice versa), which was just too much overhead. Maintaining two themes for different platforms is, admittedly, a self-imposed headache\u0026mdash;but, I like having a consistent interface for readers. So I\u0026rsquo;ve moved all my content (except microposts) back into my website. Back home.\u003c/p\u003e\n\u003cp\u003eAlongside readability became ease of moving around the site. I added a few keyboard shortcuts to the site that allows you to jump to different pages on the site. These shortcuts should avoid any existing browser shortcuts, but I may have to tweak these a little over time.\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eKeyboard Shortcut\u003c/th\u003e\n          \u003cth\u003eResult\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003e/\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eOpen navigation menu\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003e⌘ + E\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eOpen Essays page\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003e⌘ + J\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eOpen Notes page\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003e⌘ + I\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eOpen Publications page\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003e⌘ + Y\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eOpen Digital History page\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003e⌘ + B\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eOpen Bookshelf page\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003e⌘ + /\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eOpen About page\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003e⌘ + K\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eOpen Search page\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eThe climate goal was a tough one, made all the harder because I wasn\u0026rsquo;t using a 100% renewable web host. Despite how much I love Reclaim Hosting, I decided to move this website to Cloudflare and \u003ca href=\"https://www.cloudflare.com/impact/\"\u003etheir sustainability goals\u003c/a\u003e. The reduction of file sizes, DOM elements on the page, minimizing energy emitted by your device when visiting my site, and web-friendly images all have a positive impact. I\u0026rsquo;m not quite hitting my 0.185g goal, but I did significantly reduce what this site was measuring before the redesign: I cut this by 80% with these changes. My measurement according to Digital Beacon went from 2.4g to 0.479g. I\u0026rsquo;ll still be working on ways to get that number lower.\u003c/p\u003e\n\u003cp\u003eWith readability as a key focus came a different way of thinking about the content I have on this site. For a while now I\u0026rsquo;ve felt a kind of constraint over the kinds of things I \u003cem\u003eshould\u003c/em\u003e blog about versus using this space as something that can accept any kind of writing. So now this site has three main areas: \u003ca href=\"/blog/\"\u003eEssays\u003c/a\u003e for longer-form, argument-driven pieces; \u003ca href=\"/notes/\"\u003eNotes\u003c/a\u003e for shorter form pieces, or incomplete thoughts or ideas; and \u003ca href=\"/links/\"\u003eCommonplace\u003c/a\u003e as a way to simply collect things I find interesting. The RSS feed currently provides all of these areas in a single stream. One outstanding task is to implement \u003ca href=\"https://indieweb.org/POSSE\"\u003ePOSSE\u003c/a\u003e so posts end up broadcasted out on the fediverse.\u003c/p\u003e\n\u003cp\u003eThe other big change is the workflow I have now for Obsidian and Hugo. This has been delightful. I mentioned above that I\u0026rsquo;ve migrated this site to Cloudflare, which has a really great integration with Github. In short, what happens is that Cloudflare watches for changes in my \u003ccode\u003emain\u003c/code\u003e branch. If it detects a change, Cloudflare will automatically rebuild the site without my having to intervene at all. So when I\u0026rsquo;m writing, it now looks something like this: I\u0026rsquo;ve opened my website folder as its own Obsidian vault, giving me access to all of my posts and pages. Using the \u003ca href=\"https://github.com/SilentVoid13/Templater\"\u003eTemplater plugin\u003c/a\u003e, I create a new post with the structure that Hugo expects and set the draft status to true. When I have a draft post ready to go, I toggle the draft status to false and use the \u003ca href=\"https://github.com/Vinzent03/obsidian-git\"\u003eObsidian Git plugin\u003c/a\u003e to run a \u003ccode\u003egit commit\u003c/code\u003e then \u003ccode\u003egit push\u003c/code\u003e into my \u003ccode\u003emain\u003c/code\u003e branch. Cloudflare picks up the commit and deploys the site. All without having left Obsidian. No terminals. No VSCode. No direct git usage. I can do everything right inside of Obsidian (and if I need to preview anything first, running a \u003ccode\u003elocalhost\u003c/code\u003e side by side with the content I\u0026rsquo;m writing or editing and having it instantly refresh is really nice.)\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e I\u0026rsquo;ve been working with websites for over twenty years and this is maybe the easiest time I\u0026rsquo;ve ever had in creating content for a website.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://code.claude.com/docs/en/overview\"\u003eClaude Code\u003c/a\u003e was amazingly helpful in all of this. Like any generative AI, it needs a human. But, like other computational tools we use, it\u0026rsquo;s very good at mechanical or repetitive tasks. Helping me work through converting 200+ images to \u003ccode\u003ewepb\u003c/code\u003e, renaming hundreds of files, and massive CSS and HTML auditing is all work that would\u0026rsquo;ve taken me a considerable amount of time. I first thought this redesign and new deployment process would take me at least a month; I finished it in a weekend. It\u0026rsquo;s also much more disciplined about writing good git commits than I am. Yet as I note in the footer to this site, nothing here is AI-generated: by which I mean, the words, thoughts, ideas, philosophies, and research all come from me and it remains so. Same with the design: it took a lot of back and forth with a coding agent to get things how I envisioned them. That all required human judgment, it was never given over to the agentic system to devise on its own.\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;m really pleased and delighted with the results. As with any of these redesigns, certainly there are things that broke or don\u0026rsquo;t look quite right despite my effort to make sure everything is working and looks good on various screen sizes. If you spot an issue, it\u0026rsquo;d be swell if you\u0026rsquo;d let me know. Find \u003ca href=\"/about/\"\u003emy email\u003c/a\u003e or \u003ca href=\"https://bsky.app/profile/jasonheppler.org\"\u003ehit me up on bsky\u003c/a\u003e or \u003ca href=\"https://social.jasonheppler.org\"\u003emicro.blog\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\n\u003chr\u003e\n\u003col\u003e\n\u003cli id=\"fn:1\"\u003e\n\u003cp\u003eOne of these days I\u0026rsquo;ll try and compile a list of these design changes with the aid of the Internet Archive.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli id=\"fn:2\"\u003e\n\u003cp\u003eI have a few settings turned on in Obsidian to make the editing environment more Hugo-friendly. I\u0026rsquo;ll write this up in the future note.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n",
      "summary": "\u003cp\u003eMy website just went through a big re-design and I wanted to document some of the changes here. I entered this design work with some self-imposed constraints:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eReduce the carbon footprint to less than 0.185g of CO2.\u003c/li\u003e\n\u003cli\u003eFocus on functionality, get rid of everything else.\u003c/li\u003e\n\u003cli\u003eChoose good, readable typefaces that evoke a book. As \u003ca href=\"https://www.robinsloan.com\"\u003eRobin Sloan says\u003c/a\u003e, this site will aspire to the speed and privacy of the printed page.\u003c/li\u003e\n\u003cli\u003eAudit the entire codebase, use more modern tooling to help with maintenance. Cut a bunch of CSS I no longer need or use.\u003c/li\u003e\n\u003cli\u003eEnsure functionality without Javascript.\u003c/li\u003e\n\u003cli\u003eUse only three typefaces (serif, sans, and mono), ideally hosted locally. Fall back to system fonts.\u003c/li\u003e\n\u003cli\u003eKeep the navigation simple.\u003c/li\u003e\n\u003cli\u003eKeep the color scheme simple (for some reason I had over twenty different colors defined in my \u003ccode\u003e:root\u003c/code\u003e rules before the redesign.)\u003c/li\u003e\n\u003cli\u003eBe consistent with headings, layouts, and unified design and typography.\u003c/li\u003e\n\u003cli\u003eSet up a blogging environment that connects Obsidian and Hugo.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eMuch of this design work was inspired by some of my favorite sites, like \u003ca href=\"https://vhbelvadi.com/\"\u003eV.H. Belvadi\u003c/a\u003e (whose sidebar navigation inspired my own), \u003ca href=\"https://maggieappleton.com\"\u003eMaggie Appleton\u003c/a\u003e, \u003ca href=\"https://lincolnmullen.com\"\u003eLincoln Mullen\u003c/a\u003e, \u003ca href=\"https://robinrendle.com\"\u003eRobin Rendle\u003c/a\u003e, \u003ca href=\"https://manuelmoreale.com/?ref=jasonheppler.org\"\u003eManuel Moreale\u003c/a\u003e, \u003ca href=\"https://blog.jim-nielsen.com/?ref=jasonheppler.org\"\u003eJim Nielsen\u003c/a\u003e, \u003ca href=\"https://gwern.net/?ref=jasonheppler.org\"\u003eGwern\u003c/a\u003e, \u003ca href=\"https://aworkinglibrary.com/\"\u003eA Working Library\u003c/a\u003e, and \u003ca href=\"https://notetoself.studio\"\u003eGina Trapani\u003c/a\u003e. The big purpose of the redesign, aside from major code cleanup, is \u003cem\u003ereadability\u003c/em\u003e. This site has gone through several major redesigns (I believe this is Version 9) since its inception nearly twenty years ago, along with countless fiddling and tweaking.\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e I wanted to simplify all of this so that the thing that matters for readers arriving on the site is the \u003cem\u003econtent\u003c/em\u003e. Everything else gets out of the way: navigation is tucked away in a slide-out rather than in a navigation bar, keyboard shortcuts help users move around easily, and text takes the primary viewing area on all screen sizes.\u003c/p\u003e",
      "date_published": "2026-03-02T00:00:00Z",
      "tags": ["personal","indie-web"]
    },
    {
      "id": "https://jasonheppler.org/2026/01/27/my-ideal-library/",
      "url": "https://jasonheppler.org/2026/01/27/my-ideal-library/",
      "title": "My Ideal Library",
      "content_html": "\u003cp\u003eI\u0026rsquo;m in the process of slowly trying to inventory my library using \u003ca href=\"https://www.librarything.com/profile/hepplerj\"\u003eLibraryThing\u003c/a\u003e (where I\u0026rsquo;ve been for twenty years!). I\u0026rsquo;m mostly focused on physical books\u0026mdash;I don\u0026rsquo;t own many ebooks or audio books, the physical books are most near and dear to me. I estimate so far that my personal library runs around 800 books currently (on top of 50 or so ebooks and maybe 10 audiobooks). These books all reside in my home library, a space I renovated a couple of years ago to be my work-from-home space as well as my general writing studio that I refer to as the Bunkhouse.\u003c/p\u003e\n\u003cdiv class=\"microblog_collection\"\u003e\u003cimg src=\"img-4929-m.webp\" alt=\"A wooden bookshelf is filled with a diverse collection of books on various topics.\" data-microblog-lightbox=\"img-4929-xl.webp\"\u003e\u003cimg src=\"img-4956-m.webp\" alt=\"A cozy room features a large wall of bookshelves filled with books, a leather armchair with a pillow, and wall-mounted decorative items like rifles and framed art.\" data-microblog-lightbox=\"img-4956-xl.webp\"\u003e\u003cimg src=\"img-5059-m.webp\" alt=\"A stack of books with titles related to American landscapes and cowboy culture is positioned on top of a wooden surface, accompanied by framed art and photographs in the background.\" data-microblog-lightbox=\"img-5059-xl.webp\"\u003e\u003cimg src=\"img-5061-m.webp\" alt=\"A bookshelf displays a collection of books alongside an antler and a small stone, with framed photos on the wall behind.\" data-microblog-lightbox=\"img-5061-xl.webp\"\u003e\u003cimg src=\"img-5062-m.webp\" alt=\"A small bowl containing pinecones and rocks is placed on a table with a warm brown surface.\" data-microblog-lightbox=\"img-5062-xl.webp\"\u003e\u003cimg src=\"img-5063-m.webp\" alt=\"A wall-mounted display features rifles and fishing rods, alongside framed pictures and a floor lamp.\" data-microblog-lightbox=\"img-5063-xl.webp\"\u003e\u003cimg src=\"img-5064-m.webp\" alt=\"A wooden plaque with three round meteorological instruments is mounted on a wall beneath a hanging horseshoe, next to a framed picture.\" data-microblog-lightbox=\"img-5064-xl.webp\"\u003e\u003cimg src=\"img-5066-m.webp\" alt=\"A wall display features a wooden clock, two cowboy hats, a calendar, and several coiled ropes.\" data-microblog-lightbox=\"img-5066-xl.webp\"\u003e\u003c/div\u003e\n\u003cp\u003eOne of the things I like to see is see other people\u0026rsquo;s libraries and work spaces. I often clip these into Obsidian or Apple Notes for reference later on as a kind of \u0026ldquo;interior design\u0026rdquo; inspiration. I have lots of these: \u003ca href=\"https://jamierubin.net/2025/09/17/cormac-mccarthys-library/\"\u003eCormac McCarthy\u003c/a\u003e, \u003ca href=\"https://www.newyorker.com/culture/the-new-yorker-interview/going-home-with-wendell-berry\"\u003eWendell Berry\u003c/a\u003e, \u003ca href=\"https://www.kansascity.com/entertainment/books/article102040987.html\"\u003eCandice Millard\u003c/a\u003e, \u003ca href=\"https://fromabirdseyeview.com/?tag=david-mccullough-writing-shed\"\u003eDavid McCollough\u003c/a\u003e, \u003ca href=\"https://messaging-custom-newsletters.nytimes.com/dynamic/render?isViewInBrowser=true\u0026amp;productCode=JBO\u0026amp;uri=nyt%3A%2F%2Fnewsletter%2F02ab91a0-3651-59a3-bf98-26de64b1d5df\"\u003eJamelle Bouie\u003c/a\u003e, \u003ca href=\"https://www.nytimes.com/2014/06/19/garden/he-found-his-corner-of-the-sky.html\"\u003ePeter Heller\u003c/a\u003e, and many others. I think of these the same way we might look at architectural magazines or (my other favorite) wood shops (like \u003ca href=\"https://offermanwoodshop.com/film-photo-rental/\"\u003eNick Offerman\u003c/a\u003e or \u003ca href=\"https://parkzer.com/2024/06/15/adam-savage-cave/\"\u003eAdam Savage\u003c/a\u003e): they’re creative spaces where people I admire do their work, and I’m always intrigued on how other creatives use their space.\u003c/p\u003e\n\u003cp\u003eHeading out to my work space is walking into my ideal library: the design, the book subjects, (the coffee), all tailored to my interests and needs.\u003c/p\u003e\n",
      "summary": "\u003cp\u003eI\u0026rsquo;m in the process of slowly trying to inventory my library using \u003ca href=\"https://www.librarything.com/profile/hepplerj\"\u003eLibraryThing\u003c/a\u003e (where I\u0026rsquo;ve been for twenty years!). I\u0026rsquo;m mostly focused on physical books\u0026mdash;I don\u0026rsquo;t own many ebooks or audio books, the physical books are most near and dear to me. I estimate so far that my personal library runs around 800 books currently (on top of 50 or so ebooks and maybe 10 audiobooks). These books all reside in my home library, a space I renovated a couple of years ago to be my work-from-home space as well as my general writing studio that I refer to as the Bunkhouse.\u003c/p\u003e",
      "date_published": "2026-01-27T14:06:47-06:00",
      "tags": ["personal","farm life"]
    },
    {
      "id": "https://jasonheppler.org/2026/01/11/fluent-and-stranded/",
      "url": "https://jasonheppler.org/2026/01/11/fluent-and-stranded/",
      "title": "“Fluent and Stranded”",
      "content_html": "\u003cp\u003e\u003ca href=\"https://davefriedman.substack.com/p/where-large-language-models-break\"\u003eDave Friedman\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eTwo frontier AIs debated a strategic question and quickly slid from sensible analysis into confident, theatrical nonsense. The collapse revealed a hard limit of today\u0026rsquo;s large language models: they can interpolate beautifully, but they cannot build new world models.\u003c/p\u003e\n\u003cp\u003e. . .\u003c/p\u003e\n\u003cp\u003eThe ending of the exchange felt like Waiting for Godot rewritten in transformer weights: circular, performative, drenched in the style of profundity but detached from any grounding. The models weren’t intentionally imitating Beckett. They arrived there naturally, because absurdist dialogue is what happens when linguistic engines exhaust their epistemic runway. Vladimir and Estragon talk in circles because they have nothing but the talking; the world outside the stage never materializes.\u003c/p\u003e\u003c/blockquote\u003e\n",
      "summary": "\u003cp\u003e\u003ca href=\"https://davefriedman.substack.com/p/where-large-language-models-break\"\u003eDave Friedman\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eTwo frontier AIs debated a strategic question and quickly slid from sensible analysis into confident, theatrical nonsense. The collapse revealed a hard limit of today\u0026rsquo;s large language models: they can interpolate beautifully, but they cannot build new world models.\u003c/p\u003e\n\u003cp\u003e. . .\u003c/p\u003e\n\u003cp\u003eThe ending of the exchange felt like Waiting for Godot rewritten in transformer weights: circular, performative, drenched in the style of profundity but detached from any grounding. The models weren’t intentionally imitating Beckett. They arrived there naturally, because absurdist dialogue is what happens when linguistic engines exhaust their epistemic runway. Vladimir and Estragon talk in circles because they have nothing but the talking; the world outside the stage never materializes.\u003c/p\u003e",
      "date_published": "2026-01-11T07:13:31-06:00",
      "tags": ["artificial intelligence"]
    },
    {
      "id": "https://jasonheppler.org/2026/01/08/how-i-use-obsidian-redux/",
      "url": "https://jasonheppler.org/2026/01/08/how-i-use-obsidian-redux/",
      "title": "How I Use Obsidian Redux",
      "content_html": "\u003cp\u003eA little over a year ago \u003ca href=\"/2024/07/15/how-i-use-obsidian/\"\u003eI wrote about\u003c/a\u003e how I use Obsidian for historical research. While it hasn\u0026rsquo;t changed substantially since I wrote that piece, there are some updates to the system I\u0026rsquo;d been wanting to write up. An email from a friend with questions about that piece, and this is basically the email I wrote back to him.\u003c/p\u003e\n\u003cp\u003eThe core question my friend asked about was the separation between the two tools I use to manage sources: Tropy, for image management, and Obsidian, for note management (and Zotero, I suppose, for bibliographic management). After \u003ca href=\"https://social.jasonheppler.org/2025/05/27/busy-week-at-the-archives/\"\u003emy visit\u003c/a\u003e to the American Heritage Center back in May, I came home with some 4,000-plus photographs to organize. To start, I spent my evenings after the archives closed for the day throwing everything into Tropy and organizing what I\u0026rsquo;d captured: metadata about where the source came from, dates, the type of item, as well as my quick note about what sorts of themes, people, or organizations appeared in these sources (which I used Tropy\u0026rsquo;s tagging system to categorize). But I knew I didn\u0026rsquo;t want to keep all of my notes in Tropy; I wanted those in Obsidian. A couple of months later, I realized how much friction I was feeling trying to keep these two systems in sync.\u003c/p\u003e\n\u003cp\u003eSo I wrestled with the division between Tropy and Obsidian for a while, in part because it got to be a real chore to keep things up to date. In Obsidian, I use properties for primary sources that include metadata about the item (date, location in the archives, people, organizations, locations, themes I identify) and, for a time, kept an \u003ccode\u003eitem\u003c/code\u003e property that was just a link to the item in Tropy (you can right click on an item in Tropy and copy that item\u0026rsquo;s URL which is something like \u003ccode\u003etropy://tropy_item_path\u003c/code\u003e). Then, if I needed to consult the actual source, I could open up that item in Tropy just by clicking a link.\u003c/p\u003e\n\u003cp\u003eThat was useful, but the problem was I was trying to keep two sets of metadata: the material in Tropy, and the material in Obsidian. Since Obsidian is my note-taking space, it was there that I identified further details about a source\u0026mdash;people that appeared or were mentioned or related, or themes I felt emerged from reading sources, and so on. I didn\u0026rsquo;t have an easy way to get those back into Tropy to keep all of that data in sync. I played around with some scripting to keep them in sync, but it was more trouble than it was worth. I even made an attempt at writing an Obsidian plugin for Tropy. But then it dawned on me \u003ca href=\"https://social.jasonheppler.org/2025/09/17/it-dawned-on-me-that/\"\u003ethree months ago\u003c/a\u003e that I actually could do all of this \u003cem\u003ewithout\u003c/em\u003e Tropy.\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e\u003c/p\u003e\n\u003cimg src=\"screenshot-2025-12-16-at-8.55.47am.webp\" width=\"600\" height=\"390\" alt=\"Obsidian displays metadata for a letter sent from Sherlock and Kleckner to Bush on November 30, 1988, including properties like author, recipient, and location.\"\u003e\n\u003cp\u003eSo what I do now is: I collect photographs of sources into a single PDF, which I can drag and drop into Obsidian. Obsidian allows you to set a central location for attachments\u0026mdash;in my case, I created a \u003ccode\u003eMiscellaneous/Attachments\u003c/code\u003e folder in Obsidian for these. For that to work, in Obsidian\u0026rsquo;s settings you can set the \u0026ldquo;Default location for new attachments\u0026rdquo; to \u0026ldquo;In the folder specified below\u0026rdquo; which, in my case, is the above folder. This also solves a second problem: occasionally I wanted to look at a source while on my iPad, and since Tropy has no iPad equivalent I couldn\u0026rsquo;t do that. This system solves that problem since the attachments are part of Obsidian Sync. \u003c/p\u003e\n\u003cimg src=\"screenshot-2025-12-16-at-8.55.53am.webp\" width=\"600\" height=\"390\" alt=\"A letter addressed to then-Governor George Bush from the Coalition for Fiscal Responsability is displayed on a computer screen, with a network graph and file directory visible on the left side.\"\u003e\n\u003cp\u003eI\u0026rsquo;ve also replaced many of the DataView plugin views I was using with Obsidian\u0026rsquo;s new Bases for more easily sorting and filtering my sources (and, I suspect, is more future-proofed). Here, for example, are all correspondence sources sorted by date:\u003c/p\u003e\n\u003cimg src=\"screenshot-2025-12-23-at-8.38.56am.webp\" width=\"600\" height=\"379\" alt=\"Obsidian Bases showing a chronologically sorted list of correspondence.\"\u003e\n\u003cp\u003eZotero has been a much easier thing to sync up with Obsidian, thanks to the \u003ca href=\"https://github.com/mgmeyers/obsidian-zotero-integration\"\u003eZotero Integration plugin\u003c/a\u003e. Using the plugin I can pull in data from Zotero to Obsidian very easily: the bibliographic information, a link to the Zotero item, and any notes I\u0026rsquo;ve taken in Zotero all get pulled into their own note Obsidian. I use Zotero\u0026rsquo;s PDF reader to highlight material and take notes, all of which sync into Obsidian. This makes it quite nice for building up a historiographic synthesis and incorporating reading notes into the rest of my notes.\u003c/p\u003e\n\u003cp\u003eSince folks might be curious, the theme I’m using is \u003ca href=\"https://github.com/aaaaalexis/obsidian-baseline\"\u003eBaseline\u003c/a\u003e. The full list of plugins I\u0026rsquo;m currently using:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lukeleppan/better-word-count\"\u003eBetter Word Count\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/liamcain/obsidian-calendar-plugin\"\u003eCalendar\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/saml-dev/obsidian-custom-js\"\u003eCustomJS\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/blacksmithgu/obsidian-dataview\"\u003eDataView\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ycnmhd/obsidian-enhanced-annotations\"\u003eEnhanced Annotations\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zsviczian/obsidian-excalidraw-plugin\"\u003eExcalidraw\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tmcw/obsidian-freeform\"\u003eFreeform\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ryanpcmcquen/obsidian-focus-mode\"\u003eFocus Mode\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Vinzent03/obsidian-git\"\u003eGit\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kevboh/longform\"\u003eLongform\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/esm7/obsidian-map-view\"\u003eMapview\u003c/a\u003e (I\u0026rsquo;m considering replacing this with \u003ca href=\"https://help.obsidian.md/bases/views/map\"\u003ethe new Bases support for maps\u003c/a\u003e\u0026mdash;this lets me look at my sources in place)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/otaviocc/obsidian-microblog\"\u003eMicro.publish\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KubaMiszcz/MultiStateCheckBoxSwitcher\"\u003eMulti State Checkbox Switcher\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lynchjames/note-refactor-obsidian\"\u003eNote Refactor\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/isaaclyman/novel-word-count-obsidian\"\u003eNovel Word Count\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/scambier/obsidian-omnisearch\"\u003eOmnisearch\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vslinko/obsidian-outliner\"\u003eOutliner\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OliverBalfour/obsidian-pandoc\"\u003ePandoc Plugin\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/michaellee/stille\"\u003eStille\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgmeyers/obsidian-style-settings\"\u003eStyle Settings\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/obsidian-tasks-group/obsidian-tasks\"\u003eTasks\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliecm/obsidian-tidy-footnotes\"\u003eTidy Footnotes\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgmeyers/obsidian-zotero-integration\"\u003eZotero Integration\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\n\u003chr\u003e\n\u003col\u003e\n\u003cli id=\"fn:1\"\u003e\n\u003cp\u003eTo be clear, this is not a criticism of Tropy. I think Tropy is a great piece of software (yes I\u0026rsquo;m affiliated with the research center that created it, but I had no hand in it\u0026mdash;it pre-dates my time at RRCHNM). But for the way I work, Tropy fit uneasily into my workflow.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n",
      "summary": "\u003cp\u003eA little over a year ago \u003ca href=\"/2024/07/15/how-i-use-obsidian/\"\u003eI wrote about\u003c/a\u003e how I use Obsidian for historical research. While it hasn\u0026rsquo;t changed substantially since I wrote that piece, there are some updates to the system I\u0026rsquo;d been wanting to write up. An email from a friend with questions about that piece, and this is basically the email I wrote back to him.\u003c/p\u003e\n\u003cp\u003eThe core question my friend asked about was the separation between the two tools I use to manage sources: Tropy, for image management, and Obsidian, for note management (and Zotero, I suppose, for bibliographic management). After \u003ca href=\"https://social.jasonheppler.org/2025/05/27/busy-week-at-the-archives/\"\u003emy visit\u003c/a\u003e to the American Heritage Center back in May, I came home with some 4,000-plus photographs to organize. To start, I spent my evenings after the archives closed for the day throwing everything into Tropy and organizing what I\u0026rsquo;d captured: metadata about where the source came from, dates, the type of item, as well as my quick note about what sorts of themes, people, or organizations appeared in these sources (which I used Tropy\u0026rsquo;s tagging system to categorize). But I knew I didn\u0026rsquo;t want to keep all of my notes in Tropy; I wanted those in Obsidian. A couple of months later, I realized how much friction I was feeling trying to keep these two systems in sync.\u003c/p\u003e",
      "date_published": "2026-01-08T07:53:45-06:00",
      "tags": ["tech life","academia"]
    },
    {
      "id": "https://jasonheppler.org/2025/12/27/two-quotations-on-interfaces/",
      "url": "https://jasonheppler.org/2025/12/27/two-quotations-on-interfaces/",
      "title": "Two Quotations on Interfaces",
      "content_html": "\u003cp\u003e\u003ca href=\"https://wattenberger.com/thoughts/our-interfaces-have-lost-their-senses\"\u003eAmelia Wattenberger\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWe\u0026rsquo;ve been successfully removing all friction from our apps \u0026ndash; think about how effortless it is to scroll through a social feed. But is that what we want? Compare the feeling of doomscrolling to kneading dough, playing an instrument, sketching\u0026hellip; these take effort, but they\u0026rsquo;re also deeply satisfying. When you strip away too much friction, meaning and satisfaction go with it.\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003ca href=\"https://resonantcomputing.org\"\u003eThe Resonant Computing Manifesto\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eGreat technology does more than solve problems. It weaves itself into the world we inhabit. At its best, it can expand our capacity, our connectedness, our sense of what\u0026rsquo;s possible. Technology can bring out the best in us. Our current technological landscape, however, does the opposite.\u003c/p\u003e\u003c/blockquote\u003e\n",
      "summary": "\u003cp\u003e\u003ca href=\"https://wattenberger.com/thoughts/our-interfaces-have-lost-their-senses\"\u003eAmelia Wattenberger\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWe\u0026rsquo;ve been successfully removing all friction from our apps \u0026ndash; think about how effortless it is to scroll through a social feed. But is that what we want? Compare the feeling of doomscrolling to kneading dough, playing an instrument, sketching\u0026hellip; these take effort, but they\u0026rsquo;re also deeply satisfying. When you strip away too much friction, meaning and satisfaction go with it.\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003ca href=\"https://resonantcomputing.org\"\u003eThe Resonant Computing Manifesto\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eGreat technology does more than solve problems. It weaves itself into the world we inhabit. At its best, it can expand our capacity, our connectedness, our sense of what\u0026rsquo;s possible. Technology can bring out the best in us. Our current technological landscape, however, does the opposite.\u003c/p\u003e",
      "date_published": "2025-12-27T20:41:43-06:00",
      "tags": ["tech life","twoquotes"]
    },
    {
      "id": "https://jasonheppler.org/2025/12/22/generative-ai-and-the-work-of-history/",
      "url": "https://jasonheppler.org/2025/12/22/generative-ai-and-the-work-of-history/",
      "title": "Generative AI and the Work of History",
      "content_html": "\u003cblockquote\u003e\n\u003cp\u003eI write entirely to find out what I’m thinking, what I’m looking at, what I see and what it means. \u0026mdash;\u003ca href=\"https://lithub.com/joan-didion-why-i-write/\"\u003eJoan Didion\u003c/a\u003e\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003eDespite my self-imposed exile from social media, a conversation managed to still reach me from Bluesky over the last few days of my fellow historians making the point (and arguing with generative AI enthusiasts) that generative AI cannot do the work we do. This happens to exactly line up with my point a few months ago at the Western History Association conference: while I find some of the machine learning aspects of generative AI \u003cem\u003epotentially\u003c/em\u003e interesting (if not yet proven actually useful), I in no way see generative AI, broadly, useful for the work we do because it cannot do the work we do.\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e\u003c/p\u003e\n\u003cp\u003eAt the \u003ca href=\"https://westernhistory.org\"\u003eWestern History Association\u003c/a\u003e in Albuquerque back in October, I head the pleasure of joining Cameron Blevins, Rachel Birch, and Amanda Regan on the topic of generative AI for History. Given that panel and the recent discussions on social media I thought it worth trying to articulate where I stand on this in December 2025, through seven declarative statements. I\u0026rsquo;ve previously written some thoughts about generative AI for History \u003ca href=\"/2022/10/16/ai-art/\"\u003ehere\u003c/a\u003e and \u003ca href=\"/2024/05/23/made-by-me/\"\u003ehere\u003c/a\u003e, and, broadly, \u003ca href=\"/tags/artificial-intelligence/\"\u003eusing this tag\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 id=\"1-generative-ai-cannot-understand-context\"\u003e1. Generative AI cannot understand context\u003c/h2\u003e\n\u003cp\u003eOne of my earliest thoughts about generative AI\u0026mdash;in trying to think about how it might be useful\u0026mdash;was to envision a system (\u003ca href=\"https://en.wikipedia.org/wiki/As_We_May_Think\"\u003eá la Vannevar Bush\u003c/a\u003e) where an AI might be able to suggest connections or patterns among primary sources. I wondered for a time if there couldn\u0026rsquo;t be made a prompt system that allowed me to ask a generative AI a question about my sources (imagine them fully transcribed, and a model trained against them) and receive useful responses in return: that sources A, B, C, F, G, and T speak to Theme 1, while some other collection of sources speak to some other theme, or these few sources seem to related to these other collection of sources.\u003c/p\u003e\n\u003cp\u003eIn short, I wanted a way to usefully query my notes and have a conversation with them. I do a lot of this sort of thing already, which I suspect many of my colleagues do as well: in my notes that I take, I\u0026rsquo;m often jotting down sources that I think speak to one another or refute one another; and, often, I\u0026rsquo;ll have something like a \u0026ldquo;synthesis\u0026rdquo; note that tries to bring together various sources into some insight or idea that could represent something as small as a paragraph, or a chapter, or even the argument of a book. Could generative AI not so much streamline this process, but provide me another tool as part of this process?\u003c/p\u003e\n\u003cp\u003eIn my experience, this envisioning has fallen completely flat. I\u0026rsquo;ve not had a good experience in trying to get such a system in place, including training models against some corpus of transcribed sources (what\u0026rsquo;s referred to as \u003ca href=\"https://cloud.google.com/use-cases/retrieval-augmented-generation\"\u003eRetrieval-Augmented Generation\u003c/a\u003e). It might do decently well in early conversations with a user, but it isn\u0026rsquo;t particularly good at understanding broader contexts and seems, over time, to lose the thread. Plus, not only do \u0026ldquo;hallucinations\u0026rdquo; exist, \u003ca href=\"https://openai.com/index/why-language-models-hallucinate/\"\u003ethey can\u0026rsquo;t be eliminated\u0026mdash;they\u0026rsquo;re mathematically inherent to LLMs\u003c/a\u003e. The work we produce as historians must be 1) trustworthy, and 2) accurately cited. Why would I ever trust a generative AI to achieve those for me?\u003c/p\u003e\n\u003ch2 id=\"2-generative-ai-cannot-understand-historical-ambiguity\"\u003e2. Generative AI cannot understand historical ambiguity\u003c/h2\u003e\n\u003cp\u003eRelatedly, generative AI is bad at understanding ambiguity. Since models work by creating text based on what it was trained on, it means that if I feed it my sources to learn from\u0026mdash;incomplete, ambiguous, and biased as they inherently are\u0026mdash;then that\u0026rsquo;s what I\u0026rsquo;m going to get back in return. If I train one model on speeches delivered at Democratic political conventions and another on speeches delivered at Republican political conventions, I will get very different answers if I ask each model questions about cities, women, national security, natural resources, Japan, the role of federal agencies, political parties, and so on. The models can only understand what they were trained upon: ambiguous and biased sources go in, ambiguous and biased content come out. It might pretend to know something about bias if you question it, but it\u0026rsquo;s unlikely to actually wrestle with it in any useful way.\u003c/p\u003e\n\u003cp\u003eNor can generative AI (as we like to say) read against the grain or sit with the silences. Entire books have been written about what\u0026rsquo;s \u003cem\u003emissing\u003c/em\u003e in our archival sources: people, ideologies, events, experiences\u0026mdash;only a fraction of human experience is ever documented anyway, and yet through our scholarly methods, professional ethics, and sophisticated readings of primary and secondary sources can we come to know things about the silences \u003cem\u003eand\u003c/em\u003e the loudness of the archives. Generative AI simply cannot: again, without having something to work with, it cannot give answers. You might press it on such a question (you might ask, for example, why no women are included in a correspondence network of elites and get some reasonable response) but it\u0026rsquo;s not going to consistently return to a consistent answer nor\u0026mdash;and this is key\u0026mdash;suggest some new way of thinking about sources. Thus,\u003c/p\u003e\n\u003ch2 id=\"3-generative-ai-cannot-generate-new-knowledge\"\u003e3. Generative AI cannot generate new knowledge\u003c/h2\u003e\n\u003cp\u003eOne of the points raised by one of my fellow panelists is that generative AI, with the introduction of \u003ca href=\"https://machinelearning.apple.com/research/illusion-of-thinking\"\u003ereasoning models\u003c/a\u003e, has gotten pretty-good-to-very-good at writing historiographical essays. That is, if I want a historiographical essay on American environmentalism I can prompt Claude or Gemini or ChatGPT to draft one for me that results in a reasonably good essay in about fifteen minutes that could plausibly pass muster for graduate-level work. That\u0026rsquo;s wild.\u003c/p\u003e\n\u003cp\u003eIt\u0026rsquo;s also useless.\u003c/p\u003e\n\u003cp\u003eMy book wouldn\u0026rsquo;t exist without a historiographical essay. What drew me to write my second book about Silicon Valley was thanks in large part to Professor \u003ca href=\"https://www.clemson.edu/cah/about/facultybio.html?id=4341\"\u003eDoug Seefeldt\u003c/a\u003e who, in the course of an independent study with him, assigned me the task of writing a historiographical essay on what I called \u0026ldquo;New Economies in the New American West.\u0026rdquo; The assignment introduced me to a body of works and approaches (environmental history, urban history) that I\u0026rsquo;d not really been exposed to previously. In fact, before I took this independent study, I thought my dissertation topic was going to be a continuation of the work I did for my Master\u0026rsquo;s thesis\u0026mdash;to continue exploring the history of the American Indian Movement.\u003c/p\u003e\n\u003cp\u003eBut in writing this essay Professor Seefeldt introduced me to a variety of new works that completely reshaped my thinking: John Findlay, Margaret O\u0026rsquo;Mara, Gerald Nash, Hal Rothman, Charles Wilkinson, Carl Abbott, Kevin Fernlund, Lisa McGirr, R. Douglas Hurt, Kevin Kruse, Robert Kaplan, Arthur Gómez, Roger Lotchin, and Raye Ringholtz, to name a few, which necessarily spun off into many more authors and their scholarly or popular works. It was in the midst of writing this and thinking about all of these works collectively that I turned to Silicon Valley not as an idea or an economy, but as a \u003cem\u003eplace\u003c/em\u003e. \u003ca href=\"https://jasonheppler.org/publications/silicon-valley/\"\u003eThe rest is history, I guess\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eBy comparison, I just asked Claude to write me a similar historiographical essay, noting these same historians above and generally on the same topic I wrote my essay about. \u003ca href=\"https://claude.ai/chat/725b993f-7165-4724-9631-99860518ce7b\"\u003eIt did a reasonable job\u003c/a\u003e, in about eight minutes. But it\u0026rsquo;s a lot less helpful than putting the time into reading the books and articles I needed to read in order to write my essay: our brains are orders of magnitude better at handling ambiguity, finding patterns, asking questions, understanding context, remembering, filtering, and synthesizing. Now imagine I didn\u0026rsquo;t write my own essay but instead started here: asking a generative AI to give me an essay to inform me. Even if I wanted to take this as a starting point to understand something about the historiographical debates and evolution of environmental and urban history in the American West, this exercise would still be unhelpful. Setting aside whether it got the details, summaries, and facts correct, I\u0026rsquo;d still be left with the fact that \u003cem\u003eI hadn\u0026rsquo;t read these pieces\u003c/em\u003e\u0026mdash;I can\u0026rsquo;t claim to know them, or understand them, or speak to how they build off or talk to one other, or diverge from their understandings from one another; or, taken collectively, how these scholarly works try to tell us something about historical fact. My own thinking wouldn\u0026rsquo;t be embedded in the writing.\u003c/p\u003e\n\u003cp\u003eAnd, more substantively, let\u0026rsquo;s remember \u003ca href=\"/2024/05/23/made-by-me/\"\u003ehow generative AI works\u003c/a\u003e: it\u0026rsquo;s trained on what already exists. It cannot create new knowledge\u0026mdash;it\u0026rsquo;s not in the archives, for one matter\u0026mdash;and it will never be in a place to train itself on new knowledge that it itself created. At best, we\u0026rsquo;re talking about software that\u0026rsquo;s very good at making sentences seem sentence-shaped. Historical research, writing, and communication is considerably deeper than that.\u003c/p\u003e\n\u003ch2 id=\"4-generative-ai-is-toxic-in-classrooms\"\u003e4. Generative AI is toxic in classrooms\u003c/h2\u003e\n\u003cp\u003eI\u0026rsquo;m stealing this one from my fellow panelist, Cameron\u0026mdash;I said just a few months ago that generative AI \u003ca href=\"https://bsky.app/profile/jasonheppler.org/post/3lvqmu3hrzt2k\"\u003ehas no place in the classroom\u003c/a\u003e and it\u0026rsquo;s a position I still stick to. Admittedly I don\u0026rsquo;t teach very often, but I have a hard time seeing the application of generative AI in the classroom.\u003c/p\u003e\n\u003cp\u003ePart of the issue here is how generative AI undercuts learning\u0026mdash;that is, it removes what in education we refer to as \u0026ldquo;\u003ca href=\"https://www.nytimes.com/2022/04/05/science/education-learning-challenge.html\"\u003eproductive struggle\u003c/a\u003e.\u0026rdquo; In our panel Cameron referred to this as a \u0026ldquo;friction reducer,\u0026rdquo; by smoothing off areas of necessary friction where learning happens. The result, clearly, is learning \u003cem\u003edoesn\u0026rsquo;t\u003c/em\u003e happen. And, as I note below, the entire mode of LLMs is to give you an answer no matter what\u0026mdash;they\u0026rsquo;re designed to be agreeable and follow any line of thought or reasoning you prompt without any pushback.\u003c/p\u003e\n\u003cp\u003eYet that pushback is invaluable in education\u0026mdash;some of my best moments with educators (and my colleagues) throughout my life has been when they disagreed with my ideas or pushed back against some line of thinking. Most certainly I\u0026rsquo;ve found this frustrating at various times, but also productive. It\u0026rsquo;s the kind of thing that sharpens your thinking, or forces you to consider a question or problem from another angle, or wholly toss out ideas or arguments and consider new ones.\u003c/p\u003e\n\u003cp\u003eThe state of affairs, however, is distressing: anything I can do on a computer a generative AI could probably do as well as (and in some cases, better than) our students: analyzing primary sources, historiography, book reviews, research projects are all within the reach of generative AI. Making assignments genAI-proof is an increasingly difficult task.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe demise of writing matters, because writing is not a second thing that happens after thinking. The act of writing is an act of thinking. This is as true for professionals as it is for students. . . . If reading and writing “rewired” the logic engine of the human brain, the decline of reading and writing are unwiring our cognitive superpower at the very moment that a greater machine appears to be on the horizon. \u0026mdash;Derek Thompson, \u003ca href=\"https://www.derekthompson.org/p/the-end-of-thinking\"\u003e“The End of Thinking”\u003c/a\u003e (2025)\u003c/p\u003e\u003c/blockquote\u003e\n\u003ch2 id=\"5-generative-ai-is-okay-at-summarizing\"\u003e5. Generative AI is okay at summarizing\u003c/h2\u003e\n\u003cp\u003eThere\u0026rsquo;s a key problem in how LLMs operate that make them pretty ill-suited for historical work: they always want to get to \u0026ldquo;yes,\u0026rdquo; even if that \u0026ldquo;yes\u0026rdquo; is wrong. While I have found LLMs generally pretty poor at understanding context or relationships among primary sources or ambiguity, I\u0026rsquo;ll grant that they do a decent job summarizing a document. If I feed a generative AI a set of sources to transcribe (more on that below) and also ask for a summary of the document, I find that the big models (Anthropic, Google, OpenAI) do a reasonably good job at providing me a summary.\u003c/p\u003e\n\u003cp\u003eLet\u0026rsquo;s consider an example. Here\u0026rsquo;s a letter I was recently reading over from my archival research in Wyoming this summer.\u003c/p\u003e\n\u003cimg src=\"letter-example.webp\" width=\"600\" height=\"636\" alt=\"Auto-generated description: A letter from the Coalition for Fiscal Restraint, dated November 30, 1988, congratulates Vice President George Bush on his election victory and urges him to focus on decreasing taxes and government spending.\"\u003e\n\u003cdetails close\u003e \n\u003csummary\u003eTranscript of the letter\u003c/summary\u003e \n\u003cp\u003eDear Mr. Vice President:\u003c/p\u003e \u003cp\u003eWe are writing on behalf of the Coalition for Fiscal Restraint (COFRE) formed in September for the purpose of promoting economic growth, prosperity and opportunity by opposing any tax increases and by supporting deficit reduction through restraints on the growth of federal spending.\u003c/p\u003e \u003cp\u003eWe congratulate you both on your victory and on your position throughout the presidential campaign in opposition to any increase in taxes. It is to this latter point that our letter is addressed.\u003c/p\u003e \u003cp\u003eOur coalition has now grown to over thirty major trade associations, corporations, and citizens groups. We expect our membership to increase considerably between now and the convening of the 101st Congress.\u003c/p\u003e \u003cp\u003eThe purpose of this letter is to pledge our support to you in your commitment to oppose any increase in taxes.\u003c/p\u003e \u003cp\u003eOur members do not feel that additional federal revenue would be used to reduce the federal deficit, and we would welcome the opportunity to work with you to restrain the growth of federal spending in order to achieve this objective.\u003c/p\u003e \u003cp\u003eRespectfully,\u003c/p\u003e \u003cp\u003e[Signed] Norman R. Sherlock\u003cbr\u003e Norman R. Sherlock\u003cbr\u003e President and CEO\u003cbr\u003e American Bus Association\u003c/p\u003e \u003cp\u003e[Signed] Dean Kleckner\u003cbr\u003e Dean Kleckner\u003cbr\u003e President\u003cbr\u003e American Farm Bureau Federation\u003c/p\u003e \u003cp\u003e(continued)\u003c/p\u003e \n\u003c/details\u003e\n\u003cp\u003eI asked Claude to summarize the document, and it provided this:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThis is a letter from the Coalition for Fiscal Restraint (COFRE) to President-elect George H.W. Bush dated November 30, 1988, shortly after his election victory. The coalition, comprising over 30 major trade associations and business groups, pledges its support for Bush\u0026rsquo;s campaign promise to oppose tax increases.\u003c/p\u003e\n\u003cp\u003eThe letter congratulates Bush on his electoral victory and his stance against raising taxes, emphasizing the coalition\u0026rsquo;s commitment to promoting economic growth through deficit reduction via spending restraints rather than tax increases. The signatories represent a broad cross-section of American business interests, including agriculture, transportation, manufacturing, retail, energy, and various trade associations.\u003c/p\u003e\n\u003cp\u003eThis document reflects the political and economic climate of the late 1980s, when deficit reduction and the \u0026ldquo;no new taxes\u0026rdquo; pledge were central issues in American politics.\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003eNot a bad summary, although the conclusion about \u0026ldquo;reflect[ing] the political and economic climate of the late 1980s\u0026rdquo; is somewhat superficial. What would be the value in having these summaries? For me there are (potentially) two things that are helpful here: 1) it serves as a brief reminder of what the document is about, and 2) it can be resurfaced pretty easily with keyword searching. I often do small summaries in my notes anyway, and this brief overview can be helpful to quickly situate a document as I\u0026rsquo;m going through my notes. The risk here, of course, is that the summary isn\u0026rsquo;t in my own words; not only that, but because I didn\u0026rsquo;t think about how to write the summary it\u0026rsquo;s possible I also didn\u0026rsquo;t \u0026ldquo;cement\u0026rdquo; the document in my mind the same way summarizing something myself could.\u003c/p\u003e\n\u003cp\u003eSo, the summaries are good. But I\u0026rsquo;m more doubtful about their usefulness.\u003c/p\u003e\n\u003ch2 id=\"6-generative-ai-is-pretty-good-at-transcription\"\u003e6. Generative AI is pretty good at transcription\u003c/h2\u003e\n\u003cp\u003eTo an extent. Sometimes.\u003c/p\u003e\n\u003cp\u003eIn some of the experimentation we\u0026rsquo;ve done at \u003ca href=\"https://rrchnm.org\"\u003eRRCHNM\u003c/a\u003e we\u0026rsquo;ve found that generative AI is pretty good at transcribing images of documents\u0026mdash;I\u0026rsquo;d even go so far as to say it\u0026rsquo;s the best OCR I\u0026rsquo;ve ever used. Some of the models even do a decently good job at both transcribing a foreign language and translating it (my colleague Amanda Madden has been experimenting with this on 16th century Italian records, and it has worked remarkably well). It also does a great job on documents that are structured: with the right amount of instruction, we\u0026rsquo;ve successfully had Claude read Census schedules that are organized as forms and reliably extract data that gets returned as structured data we can then visualize. We\u0026rsquo;re hoping to test this kind of thing at a larger scale over a greater number of documents.\u003c/p\u003e\n\u003cp\u003eThis seems like a good use for this tool: to handle some of this routine data work that can then free up our time to do more intellectually interesting work. And in this case\u0026mdash;of literally transcribing integers into structured data\u0026mdash;is a different process from, say, transcribing documents by hand (that come with their own details that matter to researchers: the marginalia you might come across, the hand something is written in and if it changes, and so on). This kind of recorded data-to-structured data workflow is the sort of thing I think really could help in historical work.\u003c/p\u003e\n\u003cp\u003eBut, it comes with a caveat: we\u0026rsquo;ve also seen, as time goes on, that the generative AI seems to \u0026ldquo;forget\u0026rdquo; its earlier work. That is, the longer a chat happens, the less reliable an AI gets from the documents it\u0026rsquo;s been working with. On a technical level, I would assume this is related to the \u0026ldquo;hallucination\u0026rdquo; problem I noted above. And, again, it leads me to wonder about any actual time-saving that happens. Do we see an error rate akin to what we might get from a research assistant? It\u0026rsquo;s hard to say, currently.\u003c/p\u003e\n\u003ch2 id=\"7-generative-ai-is-pretty-good-at-coding\"\u003e7. Generative AI is pretty good at coding\u003c/h2\u003e\n\u003cp\u003eGenerative AI for programming is kind of remarkable. I\u0026rsquo;ll admit to turning to these coding agents for help when I\u0026rsquo;m stuck on a problem, or need further clarity about documentation, or want the agent to handle some repetitive task. In those contexts I think generative AI works quite well. The problem, though, is turning over the work of programming fully to a generative AI\u0026mdash;what we\u0026rsquo;ve come to call \u0026ldquo;vibe-coding.\u0026rdquo;\u003c/p\u003e\n\u003cp\u003eOn the one hand, this is incredibly empowering. Students in a digital history course can build things in a semester that could, prior to generative AI, take considerably longer. That means building a prototype or proof of concept for a digital project can come together much more quickly: you don\u0026rsquo;t have to really \u003cem\u003eknow\u003c/em\u003e Javascript to make a visualization or a map, and at the end of a semester (heck, even midway through a semester) you can have a working example. But, generative AI for programming offers the same trap that it\u0026rsquo;s application in other facets of work lie: that is, if you are an inexperienced programmer and willingly accept what the AI offers you, you are not bringing the expertise required to know when a coding agent is wrong. Sure, what it offered might give you the desired outcome. But that doesn\u0026rsquo;t necessarily mean it \u003cem\u003eworks\u003c/em\u003e. And, like my above examples with writing historiography or productive struggle, what are we losing if we turn over \u003cem\u003elearning\u003c/em\u003e a language to \u003cem\u003eusing\u003c/em\u003e a language?\u003c/p\u003e\n\u003cp\u003eWhat worries me too, aside from the apparent disregard for the craft of coding, is the technical debt that comes with vibe-coding. If a developer has allowed a coding agent to take the wheel to produce what the developer prompt engineers\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e, and doesn\u0026rsquo;t take the time to understand what it produced, what happens when something breaks? Or there\u0026rsquo;s a security problem? \u003ca href=\"https://en.wikipedia.org/wiki/Technical_debt\"\u003eTechnical debt\u003c/a\u003e is tricky enough to deal with; technical debt with no human in the mix is utterly terrifying. Computer code, after all, exists not just for the computer to follow a set of instructions. In fact, the design of many high level languages\u0026mdash;Python, Haskell, Ruby\u0026mdash;are designed for readability. We write code \u003cem\u003efor other humans\u003c/em\u003e. Programs are precise; LLMs are inherently not.\u003c/p\u003e\n\u003cp\u003eNot to mention the drudgery of prompt-review-accept-revise is to outsource the fun parts of being a programmer. As Simon Højberg \u003ca href=\"https://hojberg.xyz/the-programmer-identity-crisis/#user-content-fnref-1\"\u003ewrites\u003c/a\u003e, \u0026ldquo;It’s disturbing how agreeable we are to the AI hype narrative and actively participate in the planned erasure of our craft, and so willingly offer up our means of thinking.\u0026rdquo; I\u0026rsquo;d hate for my programming work to be reduced to reviewing outputs, refining prompts, and pressing the return key.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eTaken together, I cannot envision a future where generative AI and the process of writing prompts can aid our work as researchers, teachers, and communicators. It\u0026rsquo;s a fundamental undervaluing of the labor, craft, and skill of our work. Promoters of generative AI like to suggest that it\u0026rsquo;s here and we must adapt, or be cast aside. Or, that our students are using it (\u003ca href=\"https://www.axios.com/2025/10/19/ai-resistance-students-coders\"\u003eare they?\u003c/a\u003e) so we \u003cem\u003emust\u003c/em\u003e find ways to incorporate it. That\u0026rsquo;s hogwash.\u003c/p\u003e\n\u003cp\u003eThe fundamental limit these systems face is that AI cannot bring historical expertise, critical analysis, or methodological sophistication to our work. These systems do two things, and they do them well: First, they give you an answer no matter what, even if it\u0026rsquo;s completely wrong. Second, they predict the next most likely pattern to string together convincing-sounding sentences based on what they\u0026rsquo;ve seen before. That\u0026rsquo;s it. They cannot generate new knowledge. They cannot make arguments that are genuinely surprising or original. They cannot tell you that your question is wrong or that you\u0026rsquo;re looking in the wrong archive or that you\u0026rsquo;ve misunderstood the context. They cannot work with uncertainty the way historians must. They cannot say \u0026ldquo;I don\u0026rsquo;t know\u0026rdquo; or \u0026ldquo;the evidence doesn\u0026rsquo;t support any strong conclusion.\u0026rdquo; They just generate plausible text.\u003c/p\u003e\n\u003cp\u003eI don\u0026rsquo;t know any historian who is suggesting we outsource our analysis, our writing, or our teaching (despite what some administrators might hope). Generative AI might help with time-consuming preparatory tasks like data extraction or transcription. But here\u0026rsquo;s what gives me real pause: historical research is fundamentally hands-on work with unreliable sources and incomplete records. \u003cmark\u003eWe\u0026rsquo;re trying to understand the truth of something\u003c/mark\u003e by working with unreliable narrators, by sitting with silences and ambiguities, by learning what questions documents can and cannot answer. These AI systems are only as good as their training data. Put unreliable things in, you get unreliable things out\u0026mdash;but without the contextual understanding to know what\u0026rsquo;s unreliable or why it matters.\u003c/p\u003e\n\u003cp\u003eI think we need to be asking not \u0026ldquo;how do we adopt AI\u0026rdquo;\u0026mdash;we need to be asking \u0026ldquo;does this actually serve the work of History?\u0026rdquo; Does it make us better historians? Writers? Educators? Does it produce better history? I\u0026rsquo;m not convinced.\u003c/p\u003e\n\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\n\u003chr\u003e\n\u003col\u003e\n\u003cli id=\"fn:1\"\u003e\n\u003cp\u003eAnd before some tech bros swoop in to tell me I don\u0026rsquo;t know what I\u0026rsquo;m talking about because I\u0026rsquo;m one of \u003cem\u003ethose\u003c/em\u003e humanities \u003cem\u003enerds\u003c/em\u003e, know that I\u0026rsquo;m also a software developer who thinks about, writes about, reads about, and even sometimes uses generative AI tools every day. I\u0026rsquo;ve also been a digital historian working in the world of machine learning, computation, and data visualization for over a decade. I got it.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli id=\"fn:2\"\u003e\n\u003cp\u003eIt\u0026rsquo;s a real stretch to call this \u0026ldquo;engineering.\u0026rdquo;\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n",
      "summary": "\u003cblockquote\u003e\n\u003cp\u003eI write entirely to find out what I’m thinking, what I’m looking at, what I see and what it means. \u0026mdash;\u003ca href=\"https://lithub.com/joan-didion-why-i-write/\"\u003eJoan Didion\u003c/a\u003e\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003eDespite my self-imposed exile from social media, a conversation managed to still reach me from Bluesky over the last few days of my fellow historians making the point (and arguing with generative AI enthusiasts) that generative AI cannot do the work we do. This happens to exactly line up with my point a few months ago at the Western History Association conference: while I find some of the machine learning aspects of generative AI \u003cem\u003epotentially\u003c/em\u003e interesting (if not yet proven actually useful), I in no way see generative AI, broadly, useful for the work we do because it cannot do the work we do.\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e\u003c/p\u003e",
      "date_published": "2025-12-22T00:00:00Z",
      "tags": ["academia","digital-history","artificial-intelligence"]
    },
    {
      "id": "https://jasonheppler.org/2025/12/12/the-christmas-movie-rotation/",
      "url": "https://jasonheppler.org/2025/12/12/the-christmas-movie-rotation/",
      "title": "The Christmas Movie Rotation",
      "content_html": "\u003cp\u003eEvery year we have a rotation of Christmas movies that we watch this time of year. We’re kicked off \u003ca href=\"https://social.jasonheppler.org/2025/12/12/watched-klaus/\"\u003ewith Klaus tonight\u003c/a\u003e, and still have more to go. These are, of course, a mix of things that we watch with the kids or just the adults.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://www.imdb.com/title/tt4729430/\"\u003eKlaus\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://m.imdb.com/title/tt2709692/\"\u003eGrinch\u003c/a\u003e (2018)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.imdb.com/title/tt0104940/\"\u003eThe Muppet\u0026rsquo;s Christmas Carol\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.imdb.com/title/tt0097958/\"\u003eNational Lampoon\u0026rsquo;s Christmas Vacation\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=5n7VI0rC8ZA\"\u003eGrevinnen og hovmesteren\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.imdb.com/title/tt0033045/\"\u003eThe Shop Around the Corner\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.imdb.com/title/tt0038650/\"\u003eIt\u0026rsquo;s a Wonderful Life\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIn year\u0026rsquo;s past I tried the 1984 George Scott \u003cem\u003e\u003ca href=\"https://www.imdb.com/title/tt0087056/\"\u003eChristmas Carol\u003c/a\u003e\u003c/em\u003e, but it didn\u0026rsquo;t stick. I worked \u003cem\u003eDie Hard\u003c/em\u003e in last year, I imagine that\u0026rsquo;ll be in for a re-watch this season as well.\u003c/p\u003e\n",
      "summary": "\u003cp\u003eEvery year we have a rotation of Christmas movies that we watch this time of year. We’re kicked off \u003ca href=\"https://social.jasonheppler.org/2025/12/12/watched-klaus/\"\u003ewith Klaus tonight\u003c/a\u003e, and still have more to go. These are, of course, a mix of things that we watch with the kids or just the adults.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://www.imdb.com/title/tt4729430/\"\u003eKlaus\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://m.imdb.com/title/tt2709692/\"\u003eGrinch\u003c/a\u003e (2018)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.imdb.com/title/tt0104940/\"\u003eThe Muppet\u0026rsquo;s Christmas Carol\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.imdb.com/title/tt0097958/\"\u003eNational Lampoon\u0026rsquo;s Christmas Vacation\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=5n7VI0rC8ZA\"\u003eGrevinnen og hovmesteren\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.imdb.com/title/tt0033045/\"\u003eThe Shop Around the Corner\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.imdb.com/title/tt0038650/\"\u003eIt\u0026rsquo;s a Wonderful Life\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIn year\u0026rsquo;s past I tried the 1984 George Scott \u003cem\u003e\u003ca href=\"https://www.imdb.com/title/tt0087056/\"\u003eChristmas Carol\u003c/a\u003e\u003c/em\u003e, but it didn\u0026rsquo;t stick. I worked \u003cem\u003eDie Hard\u003c/em\u003e in last year, I imagine that\u0026rsquo;ll be in for a re-watch this season as well.\u003c/p\u003e",
      "date_published": "2025-12-12T20:37:17-06:00",
      "tags": ["personal"]
    },
    {
      "id": "https://jasonheppler.org/2025/10/25/two-quotes-on-the-land/",
      "url": "https://jasonheppler.org/2025/10/25/two-quotes-on-the-land/",
      "title": "Two Quotes on the Land",
      "content_html": "\u003cp\u003eAldo Leopold:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWhat more delightful avocation than to take a piece of land and by cautious experimentation to prove how it works. What more substantial service to conservation than to practice it on one\u0026rsquo;s own land?\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003eEdward Abbey:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eMay your trails be crooked, winding, lonesome, dangerous, leading go the most amazing view. May your mountains rise into and above the clouds. It is not enough to fight for the land; it is even more important to enjoy it. While you can.\u003c/p\u003e\u003c/blockquote\u003e\n",
      "summary": "\u003cp\u003eAldo Leopold:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWhat more delightful avocation than to take a piece of land and by cautious experimentation to prove how it works. What more substantial service to conservation than to practice it on one\u0026rsquo;s own land?\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003eEdward Abbey:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eMay your trails be crooked, winding, lonesome, dangerous, leading go the most amazing view. May your mountains rise into and above the clouds. It is not enough to fight for the land; it is even more important to enjoy it. While you can.\u003c/p\u003e",
      "date_published": "2025-10-25T00:00:00Z",
      "tags": ["twoquotes"]
    },
    {
      "id": "https://jasonheppler.org/2025/02/27/the-farmall-h-restoration-february/",
      "url": "https://jasonheppler.org/2025/02/27/the-farmall-h-restoration-february/",
      "title": "The Farmall H Restoration, February Update",
      "content_html": "\u003cp\u003eWith the weather starting to warm up in Nebraska, I\u0026rsquo;ve had a chance to start coming to terms with the Farmall H restoration project. I\u0026rsquo;m starting up a new series on this, and you can follow along in the \u003ca href=\"/tags/restoration/\"\u003erestoration category\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eIn my test drives I\u0026rsquo;ve done since getting it home and some closer inspections across the tractor, I\u0026rsquo;ve come to find a few things to look into. Here\u0026rsquo;s a brief rundown:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSecond gear of the transmission, or perhaps the final drive, whines a bit. This isn\u0026rsquo;t particularly surprising\u0026mdash;second gear was typically the heavy \u0026ldquo;working\u0026rdquo; gear for pulling plows or other equipment, so having worn down teeth on a gear is to be expected. However, International Harvester didn\u0026rsquo;t make this the \u003cem\u003eeasiest\u003c/em\u003e thing to get in to (it\u0026rsquo;ll involve removing the gas tank, seat, steering tree, and of course popping the cover off the housing).\u003c/li\u003e\n\u003cli\u003eI want to re-wire everything. A previous owner started this with new headlights, but didn\u0026rsquo;t finish it. I\u0026rsquo;ll likely pick up a new wiring kit and replace everything. Relatedly, I need a new battery box.\u003c/li\u003e\n\u003cli\u003eThe manifold is in pretty rough shape. Not only is it pretty well worn and pockmarked, but there\u0026rsquo;s a smattering of old welding along the exhaust outlet that must\u0026rsquo;ve come from a prior owner trying to weld on a straight pipe. I\u0026rsquo;ve already picked up a restoration quality muffler, so this project is partially done already. The manifold itself, however, will take some saving up to buy new unless I can find a good one at a swap meet or new old stock.\u003c/li\u003e\n\u003cli\u003eThe sediment bowl and fuel shutoff leak. And, unfortunately, I discovered the sediment bowl is cracked. Luckily, these things are cheap to replace and I already have one on the way.\u003c/li\u003e\n\u003cli\u003eThe tires need replacing. The seller I bought the tractor from had a spare set of rear tires, so I\u0026rsquo;m halfway to having this fixed. I\u0026rsquo;ll likely hire a mobile tire repair crew for this work\u0026mdash;I lack the equipment to break and set tire beads, and they\u0026rsquo;ll be able to get it done more quickly and safely than I can.\u003c/li\u003e\n\u003cli\u003eA previous owner re-routed the choke rod and installed the on/off switch and a light switch onto the steering tree. I\u0026rsquo;d like to reroute all of this to its original 1946 positions.\u003c/li\u003e\n\u003cli\u003eRegarding the driver’s area, I need a new steering wheel, new shifter, replace the seat shock, and replace the seat.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eCertainly this list will continue to grow.\u003c/p\u003e\n\u003cp\u003eMy first step in the past week has been to drain everything: gasoline, oil, transmission fluid, hydraulic fluid, and coolant. The oil was quite dark, leading me to suspect it\u0026rsquo;s been quite a while since it\u0026rsquo;s been changed. Same goes for the transmission fluid: it shouldn\u0026rsquo;t be sludgy and rust colored, as you might see in the pictures. All the more reason I want to open up the transmission casing, both to check the gears closely but also get all the sludge and grime out of there.\u003c/p\u003e\n\u003cp\u003eSpeaking of which, there are layers of grime, grease, and dirt on this machine that have likely been there for decades. I\u0026rsquo;ve just started the work of trying to clean this up. Even shop-quality de-greaser is struggling to cut through the thick of it. A lot of it will come off as I start stripping off old paint, since one of my plans is to repaint the whole tractor. The good news is I suspect most of the work on the whole tractor is largely cosmetic. I intend to dig into the engine a bit just to check everything over, but the tractor runs great otherwise.\u003c/p\u003e\n\u003cdiv class=\"masonry-grid\"\u003e\n  \u003cimg src=\"farmall-feb25-1eb7ba065b-2.webp\" alt=\"A red tractor is parked inside a well-organized garage with various tools and equipment on the walls and workbench.\"\u003e\n  \u003cimg src=\"farmall-feb25-de77cf9cd6-2.webp\" alt=\"A red Farmall tractor is parked in front of an old, weathered red barn surrounded by bare trees and patches of snow on the ground.\"\u003e\n  \u003cimg src=\"farmall-feb25-img-5575-2.webp\" alt=\"Three vintage manuals for Farmall tractors, including a parts catalog, operator's manual, and serviceman's guide, are displayed on a leather chair.\"\u003e\n  \u003cimg src=\"farmall-feb25-img-6140.webp\" alt=\"A hammer and a chisel with a yellow handle are placed inside a rusty metal container along with some coiled wires.\"\u003e\n  \u003cimg src=\"farmall-feb25-img-6143-2.webp\" alt=\"Underneath the vehicle, there is a circular metal component attached with supports and surrounded by pipes and tubing, indicating part of an automotive system.\"\u003e\n  \u003cimg src=\"farmall-feb25-img-6187.webp\" alt=\"A partially disassembled mechanical component with exposed gears is shown on a red surface.\"\u003e\n  \u003cimg src=\"farmall-feb25-img-6145-2.webp\" alt=\"An old, worn-out engine with rusted parts and red paint is displayed in a workshop setting.\"\u003e\n  \u003cimg src=\"farmall-feb25-img-6158-2.webp\" alt=\"A vintage red tractor with worn paint is parked inside a corrugated metal shed.\"\u003e\n  \u003cimg src=\"farmall-feb25-img-6161-2.webp\" alt=\"A cat is lounging comfortably on the seat of a red tractor.\"\u003e\n  \u003cimg src=\"farmall-feb25-img-6185-2.webp\" alt=\"A chain is attached to a rusty metal frame above a green container, with cardboard and a white bucket in the background.\"\u003e\n  \u003cimg src=\"farmall-feb25-img-6190.webp\" alt=\"An old, weathered farm tractor is shown in a workshop setting.\"\u003e\n  \u003cimg src=\"farmall-feb25-img-6192.webp\" alt=\"A large tire leans against a white wooden building in bright sunlight.\"\u003e\n\u003c/div\u003e\n",
      "summary": "\u003cp\u003eWith the weather starting to warm up in Nebraska, I\u0026rsquo;ve had a chance to start coming to terms with the Farmall H restoration project. I\u0026rsquo;m starting up a new series on this, and you can follow along in the \u003ca href=\"/tags/restoration/\"\u003erestoration category\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eIn my test drives I\u0026rsquo;ve done since getting it home and some closer inspections across the tractor, I\u0026rsquo;ve come to find a few things to look into. Here\u0026rsquo;s a brief rundown:\u003c/p\u003e",
      "date_published": "2025-02-27T20:56:28-06:00",
      "tags": ["restoration"]
    },
    {
      "id": "https://jasonheppler.org/2025/02/20/living-in-the-news/",
      "url": "https://jasonheppler.org/2025/02/20/living-in-the-news/",
      "title": "Living in the News",
      "content_html": "\u003cp\u003e\u003ca href=\"https://ckarchive.com/b/4zuvhehpp24m4t6ovveola6g9z777s5\"\u003eOliver Burkeman\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[V]arious acquaintances – and me too, in some ways – started doing what I called “living inside the news.” They seemed to view the world they accessed through news sites and social media as somehow more real than their immediate surroundings. The latter was a place they merely dropped into from time to time, before hurrying back to the main event.\u003c/p\u003e\n\u003cp\u003e[ . . . ]\u003c/p\u003e\n\u003cp\u003eKeeping your centre of gravity immediate and local is the opposite of all that. It means treating the world of national and international events as a place that you visit – to campaign or persuade, donate or volunteer, to do whatever you feel is demanded of you – and that you then return from, in order to gain perspective, and to spend time doing some of the other things a meaningful life is about.\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003eThis is why I\u0026rsquo;m trying to keep to \u003ca href=\"/2024/11/08/becoming-newsresilient/\"\u003enews-resiliency\u003c/a\u003e: there\u0026rsquo;s too much national and geopolitical news, and too much of it I cannot even meaningfully act on (except in \u003ca href=\"https://5calls.org/\"\u003ea few ways\u003c/a\u003e). It\u0026rsquo;s not to claim ignorance; rather, it\u0026rsquo;s to reclaim my attention. The whole point of the flurry of terrible news and decisions is to consume all of one\u0026rsquo;s time, energy, and attention. Don\u0026rsquo;t let them take it from you.\u003c/p\u003e\n",
      "summary": "\u003cp\u003e\u003ca href=\"https://ckarchive.com/b/4zuvhehpp24m4t6ovveola6g9z777s5\"\u003eOliver Burkeman\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[V]arious acquaintances – and me too, in some ways – started doing what I called “living inside the news.” They seemed to view the world they accessed through news sites and social media as somehow more real than their immediate surroundings. The latter was a place they merely dropped into from time to time, before hurrying back to the main event.\u003c/p\u003e\n\u003cp\u003e[ . . . ]\u003c/p\u003e\n\u003cp\u003eKeeping your centre of gravity immediate and local is the opposite of all that. It means treating the world of national and international events as a place that you visit – to campaign or persuade, donate or volunteer, to do whatever you feel is demanded of you – and that you then return from, in order to gain perspective, and to spend time doing some of the other things a meaningful life is about.\u003c/p\u003e",
      "date_published": "2025-02-20T15:38:05-06:00",
      "tags": ["personal","productivity"]
    },
    {
      "id": "https://jasonheppler.org/2025/02/03/recovering-u.s.-government-data-and-websites/",
      "url": "https://jasonheppler.org/2025/02/03/recovering-u.s.-government-data-and-websites/",
      "title": "Recovering U.S. Government Data and Websites",
      "content_html": "\u003cp\u003eA number of years ago I founded, along with Brandon Locke and Sarah Melton, \u003ca href=\"https://endangereddataweek.org\"\u003eEndangered Data Week\u003c/a\u003e, designed to highlight threats to publicly available data as well as train folks to work with data. And while EDW wound down in 2020, the work and skills remain essential. The \u003ca href=\"https://eotarchive.org/\"\u003eEnd of Term Web Archiving team\u003c/a\u003e has been working hard to archive datasets and government websites that were at risk of being taken offline or have gone offline since January 20, as have the good folks over at \u003ca href=\"https://www.reddit.com/r/DataHoarder/\"\u003er/DataHoarder\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eToday, the \u003cem\u003eNew York Times\u003c/em\u003e \u003ca href=\"https://www.nytimes.com/2025/02/02/upshot/trump-government-websites-missing-pages.html?unlocked_article_code=1.uE4.S5qA.5T9J8TTW9Pxx\u0026amp;smid=url-share\"\u003ehas a good piece\u003c/a\u003e on the government websites that have gone offline.\u003c/p\u003e\n",
      "summary": "\u003cp\u003eA number of years ago I founded, along with Brandon Locke and Sarah Melton, \u003ca href=\"https://endangereddataweek.org\"\u003eEndangered Data Week\u003c/a\u003e, designed to highlight threats to publicly available data as well as train folks to work with data. And while EDW wound down in 2020, the work and skills remain essential. The \u003ca href=\"https://eotarchive.org/\"\u003eEnd of Term Web Archiving team\u003c/a\u003e has been working hard to archive datasets and government websites that were at risk of being taken offline or have gone offline since January 20, as have the good folks over at \u003ca href=\"https://www.reddit.com/r/DataHoarder/\"\u003er/DataHoarder\u003c/a\u003e.\u003c/p\u003e",
      "date_published": "2025-02-03T12:31:40-06:00",
      "tags": ["data","advocacy"]
    },
    {
      "id": "https://jasonheppler.org/2025/01/21/own-your-turf/",
      "url": "https://jasonheppler.org/2025/01/21/own-your-turf/",
      "title": "Own Your Turf",
      "content_html": "\u003cp\u003e\u003ca href=\"https://www.404media.co/decentralized-social-media-is-the-only-alternative-to-the-tech-oligarchy/\"\u003eJason Koebler\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIf it wasn’t already obvious, the last 72 hours have made it crystal clear that it is urgent to build and mainstream alternative, decentralized social media platforms that are resistant to government censorship and control, are not owned by oligarchs and dominated by their algorithms, and in which users own their follower list and can port it elsewhere easily and without restriction.\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003ca href=\"https://www.mollywhite.net/micro/entry/202501190959\"\u003eMolly White\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe TikTok ban, the Musk Twitter takeover, the Facebook moderation policy changes, the Republicans’ rapidly intensifying crackdowns on speech… let these be the proof you needed to move anything you care about online to a space you control.\u003c/p\u003e\u003c/blockquote\u003e\n",
      "summary": "\u003cp\u003e\u003ca href=\"https://www.404media.co/decentralized-social-media-is-the-only-alternative-to-the-tech-oligarchy/\"\u003eJason Koebler\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIf it wasn’t already obvious, the last 72 hours have made it crystal clear that it is urgent to build and mainstream alternative, decentralized social media platforms that are resistant to government censorship and control, are not owned by oligarchs and dominated by their algorithms, and in which users own their follower list and can port it elsewhere easily and without restriction.\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003ca href=\"https://www.mollywhite.net/micro/entry/202501190959\"\u003eMolly White\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe TikTok ban, the Musk Twitter takeover, the Facebook moderation policy changes, the Republicans’ rapidly intensifying crackdowns on speech… let these be the proof you needed to move anything you care about online to a space you control.\u003c/p\u003e",
      "date_published": "2025-01-21T22:24:34-06:00",
      "tags": ["web","indie web","twoquotes"]
    },
    {
      "id": "https://jasonheppler.org/2025/01/21/friction/",
      "url": "https://jasonheppler.org/2025/01/21/friction/",
      "title": "Friction",
      "content_html": "\u003cp\u003eWhen it comes to types of work I do, I like a certain amount of friction—what Alan Jacobs calls “\u003ca href=\"https://blog.ayjay.org/smooth-things-and-rough-ground/\"\u003econstructive friction\u003c/a\u003e.” The friction I mean here are the tools I use and how they can introduce the kind of friction that I find useful. Usually this means I tend to prefer tools that do \u003cem\u003eless\u003c/em\u003e—it’s one of the reasons \u003ca href=\"https://social.jasonheppler.org/2023/11/29/default-apps-for/\"\u003eI often stick to default apps\u003c/a\u003e. Sure, I could (and once did, for a \u003cem\u003elong\u003c/em\u003e time) use Omnifocus to set up the perfect GTD environment loaded with perspectives for any possible slicing and dicing I could think of among my task list. But at some point that just became \u003cem\u003efiddling\u003c/em\u003e, not \u003cem\u003edoing\u003c/em\u003e. I have a similar relationship with \u003ca href=\"https://getdrafts.com/\"\u003eDrafts\u003c/a\u003e, an app I love using but also has a degree of non-friction that often means the things I put there are often lost in the bucket of, er, drafts.\u003c/p\u003e\n\u003cp\u003eOne place where I felt friction getting in the way of what I wanted to do was blogging.\u003c/p\u003e\n\u003cp\u003eI moved my website to Hugo years ago; before that it ran on Jekyll, and before that Wordpress. But something happened along the way: my writing in that space dwindled, and you can see it looking over my yearly archives. There are lots of likely reasons: life became busier, especially after having children; social media sucked up time and attention in a way that was detrimental; I had other writing outlets, or other kinds of writing I had to finish (like a dissertation or \u003ca href=\"https://www.oupress.com/9780806193748/silicon-valley-and-the-environmental-inequalities-of-high-tech-urbanism/\"\u003ebook\u003c/a\u003e) that took my attention. But I’ve come to realize lately that the tool itself was also getting in my way.\u003c/p\u003e\n\u003cp\u003eI’m someone who spends at least 70% of his workday in the command line. In the process of \u003ca href=\"https://rrchnm.org/\"\u003ebuilding digital history\u003c/a\u003e I’m doing almost everything there: using \u003ca href=\"https://neovim.io/\"\u003evim\u003c/a\u003e for code editing, \u003ca href=\"https://github.com/jesseduffield/lazygit\"\u003emanaging\u003c/a\u003e GitHub Issues and commits, even \u003ca href=\"https://neomutt.org/\"\u003eemail\u003c/a\u003e. I like working from the command line: it’s efficient, it gets out of the way, and it’s powerful. And often, the more I can do from there using just a keyboard the better. But blogging from the command line became one of those things that had more friction than necessary.\u003c/p\u003e\n\u003cp\u003eThis isn’t to say Hugo is a bad static site generator. We use it at \u003ca href=\"https://rrchnm.org\"\u003eRRCHNM\u003c/a\u003e for any static site; I continue to use it for my main website and don’t plan on moving anytime soon. But I found myself bumping up against a couple things.\u003c/p\u003e\n\u003cp\u003eFirst: The whole process felt clunky. Or maybe I\u0026rsquo;ve just lost my patience with it. If I had an idea for a post, I had to navigate to my website directory on my computer. Then I had to fire off the bash script I wrote to generate a new markdown file (with some basic YAML metadata). Then I had to open that file, make a few changes to the metadata, and then I could start writing. Once I felt like the draft reached a state of publishable, I removed a \u003ccode\u003edraft\u003c/code\u003e flag from the metadata, built the site locally to test things out, then pushed the change to GitHub, \u003cem\u003ethen\u003c/em\u003e fired off another custom script that used \u003ccode\u003ersync\u003c/code\u003e to update the live site.\u003c/p\u003e\n\u003cp\u003eThat’s a lot of steps for one post. And if I was writing more than one thing in a week—let alone in a day—that was a lot of steps to have to repeat.\u003c/p\u003e\n\u003cp\u003eI also had a tendency to fiddle—to tweak some aspect of my site design or layout that distracted from actually writing.\u003c/p\u003e\n\u003cp\u003eHugo, in this case, was getting in my way.\u003c/p\u003e\n\u003cp\u003eSecond: I wanted to be able to write from more than just my laptop. I’m a pretty frequent user of a keyboard and my iPad, but writing for my blog from the iPad was a difficult task. I explored some ways to get around this—things like using GitHub Actions or Netlify to have my website rebuild and redeploy anytime I pushed a change up to GitHub. But, again, that started to feel like a lot of steps just to write a blog post. I wanted to write, not set up technical infrastructure to write.\u003c/p\u003e\n\u003cp\u003eSo, Hugo from the command line became less of a space for me to write. It was \u003cmark\u003eun-constructive friction\u003c/mark\u003e.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eOver the holidays, I \u003ca href=\"https://social.jasonheppler.org/2025/01/06/over-the-weekend-i-finished/\"\u003emigrated\u003c/a\u003e my blog to Micro.blog. It’s been the perfect remedy: I can use mb’s web editor, or I can write in my preferred text editor, or MarsEdit, or Obsidian. For the first time in a while, I feel \u003cem\u003ecompelled\u003c/em\u003e to blog and I can only credit the \u003cem\u003eease\u003c/em\u003e at which I can now write and publish as the key shift. It\u0026rsquo;s a nice feeling.Micro.blog comes with all sorts of other advantages, including handling things I use to handle on my own:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eI continue to own my own turf. While it’s not on my server anymore, the blog does live under my domain. And \u003ca href=\"https://www.manton.org/\"\u003eManton\u003c/a\u003e has done a terrific job making it very easy to export the data if I ever decide to move elsewhere or return to Hugo.\u003c/li\u003e\n\u003cli\u003eOne of the things Micro.blog handles really well is different kinds of post. It handles tweet-length posts with ease, but over 300 characters gives you a title form to turn a short-form piece into something longer.\u003c/li\u003e\n\u003cli\u003eIt’s a great community, and Micro.blog makes it super simple to find communities. The \u003ca href=\"https://micro.blog/discover\"\u003eDiscover\u003c/a\u003e page is a great way to find folks with similar interests, thanks especially to its emoji system of tagging those interest (🍿 for movies, 📷 for photography, 📚 for books, and more).\u003c/li\u003e\n\u003cli\u003eIn addition to blogging, Micro.blog supports \u003ca href=\"https://www.manton.org/2018/04/12/wavelength-for-microblog.html\"\u003emicrocasts\u003c/a\u003e for short-form podcasts and, recently, introduced a concept of photo collections to easily make photo grids in posts. If you’re looking for an Instagram replacement, mb has you covered.\u003c/li\u003e\n\u003cli\u003eMicro.blog lacks the incentive to shitpost, build your brand, troll, be toxic, or otherwise do things that our algorithmically-driven feeds have amplified on the web.\u003c/li\u003e\n\u003cli\u003eMicro.blog has a built-in \u003ca href=\"https://micro.blog/books/search\"\u003ereading tracker\u003c/a\u003e that allows you to track your reading. But, since these are just posts, you can also easily expand these into long-form thoughts or review of a book.\u003c/li\u003e\n\u003cli\u003eMicro.blog has some nice simple apps for working with the service. There’s the \u003ca href=\"https://help.micro.blog/t/third-party-apps/46\"\u003eofficial app\u003c/a\u003e itself, but also \u003ca href=\"https://epilogue.micro.blog/\"\u003eEpilogue\u003c/a\u003e for working with book tracking or \u003ca href=\"https://sunlit.io/\"\u003eSunlit\u003c/a\u003e for just scrolling through photos.\u003c/li\u003e\n\u003cli\u003eThere’s no likes, no follower counts, no re-posts, no algorithms. When folks reply on micro.blog, it’s much more thoughtful and well-intentioned than any comment section you’ll find on the web.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eMicro.blog as a place, then, is the right kind of constructive friction: ease of use for me, but also by design discourages the kind of toxicity the web has become. It has removed a piece of un-constructive friction in my digital life: including this piece, I have written three longer-form posts since the start of the year. In all of 2024 on my old blog, I only wrote five things. The ease of writing and the ease of handling different post lengths, at least so far, has helped unlock an outlet for my writing.\u003c/p\u003e\n",
      "summary": "\u003cp\u003eWhen it comes to types of work I do, I like a certain amount of friction—what Alan Jacobs calls “\u003ca href=\"https://blog.ayjay.org/smooth-things-and-rough-ground/\"\u003econstructive friction\u003c/a\u003e.” The friction I mean here are the tools I use and how they can introduce the kind of friction that I find useful. Usually this means I tend to prefer tools that do \u003cem\u003eless\u003c/em\u003e—it’s one of the reasons \u003ca href=\"https://social.jasonheppler.org/2023/11/29/default-apps-for/\"\u003eI often stick to default apps\u003c/a\u003e. Sure, I could (and once did, for a \u003cem\u003elong\u003c/em\u003e time) use Omnifocus to set up the perfect GTD environment loaded with perspectives for any possible slicing and dicing I could think of among my task list. But at some point that just became \u003cem\u003efiddling\u003c/em\u003e, not \u003cem\u003edoing\u003c/em\u003e. I have a similar relationship with \u003ca href=\"https://getdrafts.com/\"\u003eDrafts\u003c/a\u003e, an app I love using but also has a degree of non-friction that often means the things I put there are often lost in the bucket of, er, drafts.\u003c/p\u003e",
      "date_published": "2025-01-21T09:36:28-06:00",
      "tags": ["tech life","writing","indie web"]
    },
    {
      "id": "https://jasonheppler.org/2025/01/21/lamentable-word/",
      "url": "https://jasonheppler.org/2025/01/21/lamentable-word/",
      "title": "Lamentable Word",
      "content_html": "\u003cp\u003e\u003ca href=\"https://www.antipope.org/charlie/blog-static/2013/10/why-microsoft-word-must-die.html\"\u003eCharlie Stross\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe reason I want Word to die is that until it does, it is unavoidable. I do not write novels using Microsoft Word. I use a variety of other tools, from Scrivener (a program designed for managing the structure and editing of large compound documents, which works in a manner analogous to a programmer’s integrated development environment if Word were a basic text editor) to classic text editors such as Vim. But somehow, the major publishers have been browbeaten into believing that Word is the sine qua non of document production systems. They have warped and corrupted their production workflow into using Microsoft Word .doc[x] files as their raw substrate, even though this is a file format ill-suited for editorial or typesetting chores. And they expect me to integrate myself into a Word-centric workflow, even though it’s an inappropriate, damaging, and laborious tool for the job. It is, quite simply, unavoidable. And worse, by its very prominence, we become blind to the possibility that our tools for document creation could be improved. It has held us back for nearly 25 years already; I hope we will find something better to take its place soon.\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003ca href=\"https://www.thenewatlantis.com/text-patterns/no-microsoft-word-really-is-that-bad\"\u003eAlan Jacobs\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIn every book that I work on, the worst moment of the entire endeavor occurs when I have to convert my plain-text draft into Word format for my editors. I don’t have to open Word to do that, thanks to pandoc, whose use I explain \u003ca href=\"http://text-patterns.thenewatlantis.com/2014/07/the-right-tools-for-job.html\"\u003ehere\u003c/a\u003e; but I know then that I have only a short time before they send me back an edited text which I will \u003cem\u003ehave\u003c/em\u003e to open in Word. And from that point on there can be no joy in the labor, only misery. Microsoft Word is not just a terrible program. It is a terrible, horrible, no good, very bad program. It is the program than which no worse can be conceived. We hates it, preciousss. \u003cem\u003eWe hates it\u003c/em\u003e.\u003c/p\u003e\u003c/blockquote\u003e\n",
      "summary": "\u003cp\u003e\u003ca href=\"https://www.antipope.org/charlie/blog-static/2013/10/why-microsoft-word-must-die.html\"\u003eCharlie Stross\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe reason I want Word to die is that until it does, it is unavoidable. I do not write novels using Microsoft Word. I use a variety of other tools, from Scrivener (a program designed for managing the structure and editing of large compound documents, which works in a manner analogous to a programmer’s integrated development environment if Word were a basic text editor) to classic text editors such as Vim. But somehow, the major publishers have been browbeaten into believing that Word is the sine qua non of document production systems. They have warped and corrupted their production workflow into using Microsoft Word .doc[x] files as their raw substrate, even though this is a file format ill-suited for editorial or typesetting chores. And they expect me to integrate myself into a Word-centric workflow, even though it’s an inappropriate, damaging, and laborious tool for the job. It is, quite simply, unavoidable. And worse, by its very prominence, we become blind to the possibility that our tools for document creation could be improved. It has held us back for nearly 25 years already; I hope we will find something better to take its place soon.\u003c/p\u003e",
      "date_published": "2025-01-21T08:30:46-06:00",
      "tags": ["writing","twoquotes"]
    },
    {
      "id": "https://jasonheppler.org/2025/01/21/two-quotes-on-owning-your-turf/",
      "url": "https://jasonheppler.org/2025/01/21/two-quotes-on-owning-your-turf/",
      "title": "Two Quotes on Owning Your Turf",
      "content_html": "\u003cp\u003e\u003ca href=\"https://www.404media.co/decentralized-social-media-is-the-only-alternative-to-the-tech-oligarchy/\"\u003eJason Koebler\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIf it wasn’t already obvious, the last 72 hours have made it crystal clear that it is urgent to build and mainstream alternative, decentralized social media platforms that are resistant to government censorship and control, are not owned by oligarchs and dominated by their algorithms, and in which users own their follower list and can port it elsewhere easily and without restriction.\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003ca href=\"https://www.mollywhite.net/micro/entry/202501190959\"\u003eMolly White\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe TikTok ban, the Musk Twitter takeover, the Facebook moderation policy changes, the Republicans’ rapidly intensifying crackdowns on speech… let these be the proof you needed to move anything you care about online to a space you control.\u003c/p\u003e\u003c/blockquote\u003e\n",
      "summary": "\u003cp\u003e\u003ca href=\"https://www.404media.co/decentralized-social-media-is-the-only-alternative-to-the-tech-oligarchy/\"\u003eJason Koebler\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIf it wasn’t already obvious, the last 72 hours have made it crystal clear that it is urgent to build and mainstream alternative, decentralized social media platforms that are resistant to government censorship and control, are not owned by oligarchs and dominated by their algorithms, and in which users own their follower list and can port it elsewhere easily and without restriction.\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003ca href=\"https://www.mollywhite.net/micro/entry/202501190959\"\u003eMolly White\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe TikTok ban, the Musk Twitter takeover, the Facebook moderation policy changes, the Republicans’ rapidly intensifying crackdowns on speech… let these be the proof you needed to move anything you care about online to a space you control.\u003c/p\u003e",
      "date_published": "2025-01-21T00:00:00Z",
      "tags": ["twoquotes","indie-web"]
    },
    {
      "id": "https://jasonheppler.org/2025/01/19/returning-to-firefox/",
      "url": "https://jasonheppler.org/2025/01/19/returning-to-firefox/",
      "title": "Returning to Firefox",
      "content_html": "\u003cp\u003eFor the \u003ca href=\"https://social.jasonheppler.org/2025/01/16/ive-been-trying-out-the/\"\u003epast few weeks\u003c/a\u003e I\u0026rsquo;ve been using the Zen browser, a fork of Firefox that comes with some preference changes and nice interface updates: the vertical tabs are really nice, as is the workspace management. And, since it\u0026rsquo;s a fork of Firefox, all of my usual Firefox add-ons and my Mozilla account can sync with Zen.\u003c/p\u003e\n\u003cp\u003eBut, there were a few mild annoyances I kept running into, one being that Zen didn\u0026rsquo;t (yet) support Passkeys which I now use for a number of places since I\u0026rsquo;m all-in on Apple Passwords. But I also had some general concerns about Zen not keeping up with the update pace of Firefox itself, especially if security updates were needed. So, I decided to give Firefox a full try again.\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;ve been a Safari user for a long while now (I stopped actively using Chrome years ago but Firefox was always around, especially the \u003ca href=\"https://www.mozilla.org/en-US/firefox/developer/\"\u003edevelopment version\u003c/a\u003e for my day to day work). But Safari worked great, and its seamless syncing between my laptop and iOS devices was an added bonus. Plus I try to keep my apps \u003ca href=\"https://social.jasonheppler.org/2023/11/29/default-apps-for/\"\u003eas close to default as I can\u003c/a\u003e, so Safari made sense. But as someone who cares a lot about the open web and the organizations that support it, I\u0026rsquo;ve always had a soft spot for Mozilla (including \u003ca href=\"https://foundation.mozilla.org/en/initiatives/mozilla-open-leaders/round-6/mentors/\"\u003eworking with the Foundation\u003c/a\u003e) and Zen made me realize how much I missed supporting their cause.\u003c/p\u003e\n\u003cp\u003eSo I had some misgivings about Zen, and I\u0026rsquo;d rather support Firefox itself. So I decided to do some poking around and see how much of Zen\u0026rsquo;s features I liked I could replicate in Firefox. It turns out, I\u0026rsquo;ve basically achieved everything I like about Zen.\u003c/p\u003e\n\u003cimg src=\"screenshot-2025-01-18-at-9.17.53am.png\" width=\"600\" height=\"381\" alt=\"Auto-generated description: A webpage featuring Mozilla's mission statement about internet privacy, AI trust, and accountability for tech companies, along with grant and fellowship details.\"\u003e  \n\u003ch2 id=\"vertical-tabs\"\u003eVertical Tabs\u003c/h2\u003e\n\u003cp\u003eVertical tabs became a hot thing with the release of Arc: rather than page tabs across the top of your browser window like we\u0026rsquo;ve been doing for the past two decades, tabs are arranged to the left or right of the page viewer. The reason for this seems obvious: the horizontal tabs are limited by space because there\u0026rsquo;s only so much screen width the tabs can occupy before the must start shrinking down into smaller and smaller tabs. But vertical tabs stack, meaning you can scroll through a list instead of scan horizontally. In addition, features like tab grouping in vertical lists means any repeat URLs you have are collected together. For example, if you have multiple tabs open from economist.com, some implementations of vertical tabs will stack all of those open tabs under an Economist header and indent all related URLs to keep things organized. I typically keep my open tabs to a minimum, but on days when I\u0026rsquo;m doing a lot of work in the browser having these tabs grouped this way is a vastly superior experience to a horizontal tab bar.\u003c/p\u003e\n\u003cp\u003eZen implements this feature really well and gives you a few options to how those lay out: you can have a full sidebar that shows you a snippet of a page\u0026rsquo;s title, or you can do compact mode which reduces the vertical tabs to just the side\u0026rsquo;s favicons (this is my preference \u0026ndash; on mouseover, you get a preview of the page which for me mostly negates the need of seeing the title. But popping open the compact view is straightforward if I need to see more information.)\u003c/p\u003e\n\u003cp\u003eThe good news is that Firefox introduced an experimental version of this about five months ago and it can be easily enabled in the latest release.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eNavigate to \u003ccode\u003eabout:config\u003c/code\u003e and tell Firefox you accept the risks.\u003c/li\u003e\n\u003cli\u003eIn the search bar for the preferences, search for \u003ccode\u003everticalTabs\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eYou\u0026rsquo;re looking for the setting called \u003ccode\u003esidebar.verticalTabs\u003c/code\u003e. On that line, double click to set \u003ccode\u003esidebar.verticalTabs\u003c/code\u003e from \u003ccode\u003eFalse\u003c/code\u003e to \u003ccode\u003eTrue\u003c/code\u003e and the window will instantly switch the tabs.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eThat\u0026rsquo;s it. It\u0026rsquo;s still experimental, which is why we have to go through the \u003ccode\u003eabout:config\u003c/code\u003e instead of general settings. But so far in my experience it\u0026rsquo;s rock solid.\u003c/p\u003e\n\u003cp\u003eNow, there\u0026rsquo;s one missing feature here. Zen has a concept of Workspaces for your tabs, which sort of works how Apple implemented a similar feature in Safari (and, I believe, Microsoft Edge also does). I can have different workspaces, like Work or Home or Research, and throw tabs into those workspaces. When I toggle between these workspaces, only those tabs that belong to that workspace appear in my tab navigation. I find this really helpful for organizing active tabs. It\u0026rsquo;s a feature I only sometimes remembered to use in Safari, but in Zen/Firefox I use it constantly because it\u0026rsquo;s just a click away right alongside the tabs.\u003c/p\u003e\n\u003cp\u003eFirefox doesn\u0026rsquo;t have a native way to do this (\u003ca href=\"https://news.ycombinator.com/item?id=41307555\"\u003eyet\u003c/a\u003e?), but I\u0026rsquo;ve been giving the add-on \u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/simple-tab-groups/\"\u003eSimple Tab Groups\u003c/a\u003e a try and it mostly replicates the experience. It\u0026rsquo;s not quite as visually smooth as Zen\u0026rsquo;s implementation, but for now it\u0026rsquo;s close enough for me.\u003c/p\u003e\n\u003ch2 id=\"firefox-view\"\u003eFirefox View\u003c/h2\u003e\n\u003cp\u003eOne feature I\u0026rsquo;ve not seen any other browser implement is what Mozilla calls Firefox View, and it\u0026rsquo;s really nice. View collects all of your tabs (currently open, recently closed, and tabs from other devices) all in one place in a simple interface. It\u0026rsquo;s a nice way to to fetch something from another device or find something in my browsing history.\u003c/p\u003e\n\u003cimg src=\"screenshot-2025-01-18-at-9.22.47am.png\" width=\"600\" height=\"381\" alt=\"Auto-generated description: A screenshot of the Firefox browser displays the Recent browsing section, showing a list of open and recently closed tabs alongside a sidebar menu with several navigation options.\"\u003e  \n\u003ch2 id=\"ios--ipados\"\u003eiOS / iPadOS\u003c/h2\u003e\n\u003cp\u003eThe one misgiving I have about Firefox is not Mozilla\u0026rsquo;s fault: the iOS/iPadOS app.\u003c/p\u003e\n\u003cp\u003eApple restricts how much third party browsers are able to do, meaning that they are really just wrappers around Safari/WebKit (that is, it\u0026rsquo;s Safari under the hood with different user chrome). This means my plugins are not usable since Apple\u0026rsquo;s WebKit plugin architecture is proprietary and \u003ca href=\"https://support.mozilla.org/en-US/kb/add-ons-firefox-ios\"\u003eonly Safari can install plugins\u003c/a\u003e.\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e A potential work-around especially for things like tracking blocking is \u003ca href=\"https://www.mozilla.org/en-US/firefox/browsers/mobile/focus/\"\u003eFirefox Focus\u003c/a\u003e, but because it\u0026rsquo;s designed to be privacy centric it does not include your Mozilla profile.\u003c/p\u003e\n\u003cp\u003eFor now that means I\u0026rsquo;m sticking with Safari on my phone and iPad because I still want access to the plugins I use. I might lose some potential helpful integrations this way (like tab syncing), but I\u0026rsquo;m perfectly happy with Safari.\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e\u003c/p\u003e\n\u003ch2 id=\"zen-features-ive-ignored\"\u003eZen features I\u0026rsquo;ve ignored\u003c/h2\u003e\n\u003cp\u003eThere are a few things Zen does that I would place into the realm of \u0026ldquo;window management\u0026rdquo;: things like web panels and split view, which are neat but not things I usually need so they\u0026rsquo;re not coming over to my Firefox. (There are ways to do this through add-ons, though, if you do like these features. Poke around \u003ca href=\"https://old.reddit.com/r/firefox/\"\u003ethe Firefox subreddit\u003c/a\u003e and you can find ways to do these things.)\u003c/p\u003e\n\u003cp\u003eI think what Zen is doing is actually very good: innovations in browsers, especially ones not built with Chromium, is a good thing for the web and a good thing for users. And, perhaps, Firefox will \u003ca href=\"https://www.npr.org/2024/06/17/g-s1-4912/apple-app-store-obsolete-sherlocked-tapeacall-watson-copy\"\u003esherlock\u003c/a\u003e a few of these features into the core browser. But I want to support Firefox, and I appreciate Zen demonstrating another way to experience how we interact with the web.\u003c/p\u003e\n\u003ch2 id=\"extensions\"\u003eExtensions\u003c/h2\u003e\n\u003cp\u003eHere are the current add-ons I have for Firefox:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://www.zotero.org/download/\"\u003eZotero\u003c/a\u003e: Bibliographic management, and probably the one digital tool I\u0026rsquo;ve been using the longest.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/unpaywall/\"\u003eUnpaywall\u003c/a\u003e: Another scholarly tool. An open database of 20+ million scholarly works. If I\u0026rsquo;m on a page for an article, it notifies me if there\u0026rsquo;s a legal open access version and provides a link to it.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/\"\u003euBlock\u003c/a\u003e: The go-to for content blocking.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/ublacklist/\"\u003euBlacklist\u003c/a\u003e: I primarily use this to block AI slop and content farms results in my Google search. Works great.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/chrome-mask/?utm_source=addons.mozilla.org\u0026amp;utm_medium=referral\u0026amp;utm_content=search\"\u003eChrome Mask\u003c/a\u003e: Optionally make Firefox look like Chrome to websites.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/bot-sentinel/?utm_source=addons.mozilla.org\u0026amp;utm_medium=referral\u0026amp;utm_content=search\"\u003eBot Sentinel\u003c/a\u003e: Notify me if an online account is a bot, toxic account, content farm, or toll. Less useful now that I never go on Twitter but I keep it around.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers/\"\u003eFirefox Multi-Account Containers\u003c/a\u003e: Keep cookies separated by containers.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/privacy-badger17/?utm_source=addons.mozilla.org\u0026amp;utm_medium=referral\u0026amp;utm_content=search\"\u003ePrivacy Badger\u003c/a\u003e: An extra layer of tracker blocking on the web.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/simple-tab-groups/\"\u003eSimple Tab Groups\u003c/a\u003e: For workspace-like tab management.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/view-page-archive/?utm_source=addons.mozilla.org\u0026amp;utm_medium=referral\u0026amp;utm_content=search\"\u003eWeb Archives\u003c/a\u003e: Come across a page that no longer exists? This extension looks it up in the Internet Archive and delivers an older version of it.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/udm-14/?utm_source=addons.mozilla.org\u0026amp;utm_medium=referral\u0026amp;utm_content=search\"\u003e\u0026amp;udm=14\u003c/a\u003e: I don\u0026rsquo;t Google\u0026rsquo;s AI-generated results helpful in my search results. This lets me avoid it by appending \u003ccode\u003e\u0026amp;udm=14\u003c/code\u003e to Google search results.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/adaptive-tab-bar-colour/?utm_source=addons.mozilla.org\u0026amp;utm_medium=referral\u0026amp;utm_content=search\"\u003eAdaptive Tab Bar Color\u003c/a\u003e: Color the tab bar the same as a site\u0026rsquo;s theme.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/icloud-passwords/?utm_source=addons.mozilla.org\u0026amp;utm_medium=referral\u0026amp;utm_content=search\"\u003eiCloud Passwords\u003c/a\u003e: I use Apple Passwords, and this Apple-created add-on integrates Passwords with Firefox. Not excellent yet, at least not as seamless as using in Safari. Occasionally causes some sites to become slow.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/firefox-translations/?utm_source=addons.mozilla.org\u0026amp;utm_medium=referral\u0026amp;utm_content=search\"\u003eFirefox Translations\u003c/a\u003e: Mozilla\u0026rsquo;s implementation of a site translation tool.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/fakespot-fake-reviews-amazon/\"\u003eFakespot\u003c/a\u003e: An excellent tool for spotting bot-manipulated reviews in places like Amazon and other online stores.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\n\u003chr\u003e\n\u003col\u003e\n\u003cli id=\"fn:1\"\u003e\n\u003cp\u003e\u003ca href=\"https://help.kagi.com/orion/browser-extensions/macos-extensions.html\"\u003eThe Orion browser\u003c/a\u003e by Kagi can install Chrome and Firefox extensions through what must\u0026rsquo;ve been a monumental amount of engineering work, but I\u0026rsquo;ve not given this a try yet.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli id=\"fn:2\"\u003e\n\u003cp\u003eI\u0026rsquo;m of two minds about this restriction. I would love to see more creative approaches to mobile browsing by allowing third party browser engines on iOS devices. On the other hand, not even Android supports Chrome\u0026rsquo;s extensions all that well. So I\u0026rsquo;m also doubtful that extensions will work well on mobile devices with custom browsers, at least not on par with their implementation on desktops.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n",
      "summary": "\u003cp\u003eFor the \u003ca href=\"https://social.jasonheppler.org/2025/01/16/ive-been-trying-out-the/\"\u003epast few weeks\u003c/a\u003e I\u0026rsquo;ve been using the Zen browser, a fork of Firefox that comes with some preference changes and nice interface updates: the vertical tabs are really nice, as is the workspace management. And, since it\u0026rsquo;s a fork of Firefox, all of my usual Firefox add-ons and my Mozilla account can sync with Zen.\u003c/p\u003e\n\u003cp\u003eBut, there were a few mild annoyances I kept running into, one being that Zen didn\u0026rsquo;t (yet) support Passkeys which I now use for a number of places since I\u0026rsquo;m all-in on Apple Passwords. But I also had some general concerns about Zen not keeping up with the update pace of Firefox itself, especially if security updates were needed. So, I decided to give Firefox a full try again.\u003c/p\u003e",
      "date_published": "2025-01-19T19:16:46-06:00",
      "tags": ["tech life"]
    }
  ]
}
