<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>automation on Nan Xiao | 肖楠</title>
    <link>https://nanx.me/tags/automation/</link>
    <description>Recent content in automation on Nan Xiao | 肖楠</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Wed, 15 Jul 2026 21:03:00 +0000</lastBuildDate>
    <atom:link href="https://nanx.me/tags/automation/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Introducing bisectrunk: Parallel Git bisection for real-world regressions</title>
      <link>https://nanx.me/blog/post/bisectrunk/</link>
      <pubDate>Wed, 15 Jul 2026 21:03:00 +0000</pubDate>
      <guid>https://nanx.me/blog/post/bisectrunk/</guid>
      <description>The Broad, Los Angeles. Photo by Logan DeBorde. I’m delighted to announce the first public release of bisectrunk, a Rust CLI for parallel Git bisection of real-world software regressions.&#xA;You give it a known-good revision, a known-bad revision, and a few shell hooks that describe how your ecosystem installs and tests a commit. It then finds the commit that changed the result by evaluating several candidates at once, each in its own isolated environment.</description>
    </item>
    <item>
      <title>Two small Python automation tools: asciilint and playwright-byob</title>
      <link>https://nanx.me/blog/post/asciilint-playwright-byob/</link>
      <pubDate>Thu, 09 Jul 2026 01:24:00 +0000</pubDate>
      <guid>https://nanx.me/blog/post/asciilint-playwright-byob/</guid>
      <description>Bright sunroom with plants and dining table. Photo by Clay Banks. In the past week, besides fully indulging myself in the food scene and outdoor activities of the SF Bay Area, I started building a few new personal automation and developer tooling projects. This post shares two of them: asciilint checks that your text files contain only the characters you want, and playwright-byob lets Playwright drive the Chrome you already have installed.</description>
    </item>
    <item>
      <title>revdeprun 2.1.0: hunting bottlenecks and a new speedrun record</title>
      <link>https://nanx.me/blog/post/revdeprun-2-1-0/</link>
      <pubDate>Wed, 24 Dec 2025 19:01:00 +0000</pubDate>
      <guid>https://nanx.me/blog/post/revdeprun-2-1-0/</guid>
      <description>A race car pit crew in action during a pit stop. Photo by Paul Krüger. I’m excited to announce revdeprun 2.1.0, a major update to my Rust CLI tool for automating R package reverse dependency checks. This release is really two updates in one: version 2.0.0 accelerated dependency installation, while 2.1.0 addressed two more bottlenecks I discovered during testing. The combined result is a much faster workflow from start to finish.</description>
    </item>
    <item>
      <title>DM Mono with Fira Code ligatures</title>
      <link>https://nanx.me/blog/post/dm-mono-ligaturized/</link>
      <pubDate>Sat, 06 Dec 2025 23:57:00 +0000</pubDate>
      <guid>https://nanx.me/blog/post/dm-mono-ligaturized/</guid>
      <description>I’ve created a ligaturized version of DM Mono by adding Fira Code ligatures. You can download it from GitHub: https://github.com/nanxstats/dm-mono-ligaturized.&#xA;Ligaturized DM Mono in action: Running Homebrew in Ghostty. Theme: Dracula+. Why ligatures? I’ll confess: I can’t start real work until I’ve found a coding font that fits the vibe of the day. My dotfiles are fairly basic, but they include an extensive list of free and commercial monospaced fonts that I rotate through regularly.</description>
    </item>
    <item>
      <title>Reverse dependency check speedrun: a data.table case study</title>
      <link>https://nanx.me/blog/post/revdep-speedrun/</link>
      <pubDate>Wed, 05 Nov 2025 08:51:00 +0000</pubDate>
      <guid>https://nanx.me/blog/post/revdep-speedrun/</guid>
      <description>Monument Valley Navajo Tribal Park. Photo by Elvis Liang. A week ago, I announced revdeprun, a Rust CLI tool for automating R package reverse dependency checks. Since then, I have been iterating rapidly: 16 crates.io releases in a week! These updates focused on both correctness and speed. The tool has evolved from its initial v0.1.0 to v1.4.2, and the workflow now leverages pak for dependency resolution and xfun for the checking1.</description>
    </item>
    <item>
      <title>revdeprun: Rust CLI for R package reverse dependency check automation</title>
      <link>https://nanx.me/blog/post/revdeprun/</link>
      <pubDate>Mon, 27 Oct 2025 17:42:00 +0000</pubDate>
      <guid>https://nanx.me/blog/post/revdeprun/</guid>
      <description>Smoke and speed: a race car mid-drift on the track. Photo by Jack Stapleton. Update (2025-10-31): revdeprun 1.0.0 switched to using a custom workflow to pre-install binary dependencies for checking reverse dependencies, and run parallel checks using xfun::rev_check(). This significantly improves performance and reliability. Read the release notes here. This post has been updated to reflect these changes.&#xA;I’m glad to announce the release of revdeprun, a Rust CLI tool that makes it easy to run reverse dependency checks on cloud instances1.</description>
    </item>
    <item>
      <title>Prevent RStudio 2024.12.0 from adding ProjectID to .Rproj files</title>
      <link>https://nanx.me/blog/post/rstudio-projectid/</link>
      <pubDate>Sun, 09 Feb 2025 20:42:00 +0000</pubDate>
      <guid>https://nanx.me/blog/post/rstudio-projectid/</guid>
      <description>Git diff showing the ProjectID field added by RStudio 2024.12.0.&#xA;Terminal: Ghostty. Theme: Dracula+. Font family: Iosevka Term. Update (2025-02-13): The issue still exists in RStudio 2024.12.1. The fix still applies.&#xA;Update (2025-03-05): The issue has been fixed in RStudio &amp;gt;= 2025.04.0+323.&#xA;TL;DR: The fix The following script detects newly added ProjectID lines in .Rproj files using git diff. If detected, it removes the line and saves the modified .</description>
    </item>
    <item>
      <title>Skip RStudio splash screen</title>
      <link>https://nanx.me/blog/post/rstudio-splash-screen/</link>
      <pubDate>Tue, 17 Dec 2024 00:42:00 +0000</pubDate>
      <guid>https://nanx.me/blog/post/rstudio-splash-screen/</guid>
      <description>Skating at Venice Beach, Los Angeles. Photo by Josh Hild. Update (2025-05-05): RStudio release planned for August 2025 will include a global option to turn off the splash screen and support click-to-close behavior.&#xA;Starting with RStudio IDE version 2024.12.0+467, a redesigned splash screen replaces the previous app logo. This change was introduced in rstudio/rstudio#15347 and it looks like this:&#xA;New splash screen design in RStudio IDE 2024.12+. While visually polished, the new splash screen feels slightly too shiny (no pun intended) and adds a delay to the perceived time before I can first interact with the UI.</description>
    </item>
    <item>
      <title>Create Engaging Word Cloud Visualizations from Your Research</title>
      <link>https://nanx.me/blog/post/research-word-cloud/</link>
      <pubDate>Fri, 23 Jun 2023 21:00:00 +0000</pubDate>
      <guid>https://nanx.me/blog/post/research-word-cloud/</guid>
      <description>Many outstanding researchers and labs have created visualizations of their research using word clouds. In this post, I present a simple, automated “paper2wordcloud” workflow to create eye-catching word cloud visualizations. It combines the efficiency of automation with the power of human intuition and aesthetic sense. The figure below was created using my published papers.&#xA;A word cloud visualization generated for my papers using this workflow. The general steps in the workflow are:</description>
    </item>
    <item>
      <title>Context-Free R Package Release Checklist Generation with usethis</title>
      <link>https://nanx.me/blog/post/r-package-release-checklist/</link>
      <pubDate>Mon, 12 Jun 2023 20:30:00 +0000</pubDate>
      <guid>https://nanx.me/blog/post/r-package-release-checklist/</guid>
      <description>The release checklist generation function described in this post is also available in this GitHub Gist.&#xA;Photo by David Marcu. Software release at scale An agile, automated, and reliable release process is a key component of continuous delivery for modern software engineering teams. In particular, releasing new versions of R packages often involves going through a sequence of manual and automated checks to ensure quality and compliance. To scale up such efforts within a development team, it is crucial to follow a consistent release checklist.</description>
    </item>
    <item>
      <title>A General-Purpose Link Checker for R Markdown and Quarto Projects</title>
      <link>https://nanx.me/blog/post/rmarkdown-quarto-link-checker/</link>
      <pubDate>Mon, 16 Jan 2023 20:30:00 +0000</pubDate>
      <guid>https://nanx.me/blog/post/rmarkdown-quarto-link-checker/</guid>
      <description>The link checker code in this post is also available in this GitHub Gist.&#xA;Puffins in the rain, Iceland. Photo by Yves Alarie.&#xA;Previously on link checking… We discussed the link rot issue before. We also built a simple link checker for blogdown projects based on the XML sitemap generated by Hugo. In reality, I maintain many more bookdown projects and Quarto projects than blogdown projects. Searching site: bookdown::bookdown_sitealso shows that there are 10,000+ bookdown projects hosted on GitHub alone.</description>
    </item>
    <item>
      <title>GUI Automation with RobotJS</title>
      <link>https://nanx.me/blog/post/gui-automation-robotjs/</link>
      <pubDate>Mon, 05 Sep 2022 20:30:00 +0000</pubDate>
      <guid>https://nanx.me/blog/post/gui-automation-robotjs/</guid>
      <description>The code in this post is also available in this GitHub Gist.&#xA;Disclaimer: the tools and configurations mentioned in this post are only discussed as technical examples; they do not constitute an endorsement. Use at your own risk.&#xA;Photo by Martin Reisch. Today’s internet is not like it was 20 years ago for an older millennial like me. Only judging by its appearance, the internet today is plagued with cookie consent popups and paywalls.</description>
    </item>
    <item>
      <title>Automate HTML to PDF Printing with {promises} and {chromote}</title>
      <link>https://nanx.me/blog/post/chromote-pdf-automation/</link>
      <pubDate>Sat, 20 Aug 2022 00:15:00 +0000</pubDate>
      <guid>https://nanx.me/blog/post/chromote-pdf-automation/</guid>
      <description>The R code in this post is also available in this GitHub Gist.&#xA;Photo by Bank Phrom.&#xA;chromote is an R package that allows one to automate tasks driven by web browsers. It works by providing an API to communicate with Chromium-based browsers via the Chrome DevTools Protocol (CDP). For example, CDP can help us load and print HTML pages to PDF files programmatically, similar to what one could do in the web browser GUI but with mouse clicks.</description>
    </item>
    <item>
      <title>A Simple Link Checker for Hugo and Blogdown Websites</title>
      <link>https://nanx.me/blog/post/link-checker/</link>
      <pubDate>Tue, 22 Feb 2022 20:00:00 +0000</pubDate>
      <guid>https://nanx.me/blog/post/link-checker/</guid>
      <description>Photo by Katie Treadway.&#xA;Some background I have been blogging with Hugo/blogdown for a while. One housekeeping task I have always wanted to automate with R is scanning the entire website to ensure that all the links are still working. It is essential for maintaining an enjoyable reading experience without archiving too many external links.&#xA;Conceptually, the requirement for a generic broken link checker is quite simple:&#xA;Get the links to all pages on the site.</description>
    </item>
  </channel>
</rss>
