<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Jeff Fossett</title>
    <description>Trying things out</description>
    <link>http://jeffreyfossett.com/</link>
    <atom:link href="http://jeffreyfossett.com/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Tue, 08 Sep 2026 11:42:48 +0000</pubDate>
    <lastBuildDate>Tue, 08 Sep 2026 11:42:48 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>Indigo</title>
        <description>&lt;p&gt;E prepared a vat for indigo dying and invited me to try it out. I’d been wanting to try indigo for a while; there’s something about the natural blue I find very compelling.&lt;/p&gt;

&lt;p&gt;I enjoyed the process and maybe will write more on it at some point; the indigo vat is an interesting thing with unique requirements and a memorable smell. Indigo dye presents a lot of possibilities.&lt;/p&gt;

&lt;p&gt;I think my most sucessful pieces from this first experiment were a pair of shirts that I dyed – one kind of spiral pattern, and the other an attempt at an ombre/gradient kind of thing. The latter didn’t come out quite like I originally intended, but I still quite like the result – some nice variations in color and texture. Here are some pics:&lt;/p&gt;

&lt;!-- Single centered image (responsive via CSS variables) --&gt;
&lt;div class=&quot;post-image-wrap&quot; style=&quot;--img-width: 65%; --img-max-width: 100%;&quot;&gt;
  &lt;p&gt;&lt;img class=&quot;post-image&quot; src=&quot;/figs/2026-09-04-indigo/indigo_8178.jpg&quot; alt=&quot;Two folded indigo-dyed shirts side by side&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;!-- Side-by-side images: proportional equal-height row that fills the available width; stacks on mobile --&gt;
&lt;div class=&quot;post-image-pair&quot; data-max-height=&quot;300&quot; style=&quot;--pair-gap: 1rem; --pair-width: 100%;&quot;&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-09-04-indigo/indigo_8192.jpg&quot; alt=&quot;Close-up of the spiral pattern shirt&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-09-04-indigo/indigo_8177.jpg&quot; alt=&quot;Close-up of the ombre shirt&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
(function () {
  if (window.__imagePairInit) return;
  window.__imagePairInit = true;

  function setupPair(pair) {
    var cells = pair.querySelectorAll(&quot;.post-image-pair__cell&quot;);
    var imgs = pair.querySelectorAll(&quot;img.post-image--pair&quot;);
    if (cells.length &lt; 2 || imgs.length &lt; 2) return false;
    var sum = 0, ratios = [];
    for (var i = 0; i &lt; imgs.length; i++) {
      if (!imgs[i].naturalWidth) return false; // not measurable yet
      var r = imgs[i].naturalWidth / imgs[i].naturalHeight;
      ratios[i] = r;
      sum += r;
    }
    for (var j = 0; j &lt; cells.length; j++) cells[j].style.flexGrow = ratios[j];
    var maxH = parseFloat(pair.getAttribute(&quot;data-max-height&quot;)) || 300;
    var gap = parseFloat(getComputedStyle(pair).columnGap) || 16;
    // Cap the row so its equal height never exceeds maxH; below that it fills the width.
    pair.style.maxWidth = Math.round(maxH * sum + gap) + &quot;px&quot;;
    return true;
  }

  function setupAll() {
    var pairs = document.querySelectorAll(&quot;.post-image-pair&quot;);
    for (var i = 0; i &lt; pairs.length; i++) {
      if (!pairs[i].__paired &amp;&amp; setupPair(pairs[i])) pairs[i].__paired = true;
    }
  }

  if (document.readyState !== &quot;loading&quot;) setupAll();
  else document.addEventListener(&quot;DOMContentLoaded&quot;, setupAll);
  window.addEventListener(&quot;load&quot;, setupAll);
  document.addEventListener(&quot;load&quot;, function (e) {
    if (e.target &amp;&amp; e.target.classList &amp;&amp; e.target.classList.contains(&quot;post-image--pair&quot;)) setupAll();
  }, true);
})();
&lt;/script&gt;

&lt;p&gt;I also dyed a bandana and a pair of socks and a larger piece of fabric for sewing. Here are the socks and bandana:&lt;/p&gt;

&lt;!-- Side-by-side images: proportional equal-height row that fills the available width; stacks on mobile --&gt;
&lt;div class=&quot;post-image-pair&quot; data-max-height=&quot;300&quot; style=&quot;--pair-gap: 1rem; --pair-width: 100%;&quot;&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-09-04-indigo/indigo_8195.jpg&quot; alt=&quot;Ombre indigo-dyed bandana&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-09-04-indigo/indigo_8198.jpg&quot; alt=&quot;Pair of indigo-dyed socks&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
(function () {
  if (window.__imagePairInit) return;
  window.__imagePairInit = true;

  function setupPair(pair) {
    var cells = pair.querySelectorAll(&quot;.post-image-pair__cell&quot;);
    var imgs = pair.querySelectorAll(&quot;img.post-image--pair&quot;);
    if (cells.length &lt; 2 || imgs.length &lt; 2) return false;
    var sum = 0, ratios = [];
    for (var i = 0; i &lt; imgs.length; i++) {
      if (!imgs[i].naturalWidth) return false; // not measurable yet
      var r = imgs[i].naturalWidth / imgs[i].naturalHeight;
      ratios[i] = r;
      sum += r;
    }
    for (var j = 0; j &lt; cells.length; j++) cells[j].style.flexGrow = ratios[j];
    var maxH = parseFloat(pair.getAttribute(&quot;data-max-height&quot;)) || 300;
    var gap = parseFloat(getComputedStyle(pair).columnGap) || 16;
    // Cap the row so its equal height never exceeds maxH; below that it fills the width.
    pair.style.maxWidth = Math.round(maxH * sum + gap) + &quot;px&quot;;
    return true;
  }

  function setupAll() {
    var pairs = document.querySelectorAll(&quot;.post-image-pair&quot;);
    for (var i = 0; i &lt; pairs.length; i++) {
      if (!pairs[i].__paired &amp;&amp; setupPair(pairs[i])) pairs[i].__paired = true;
    }
  }

  if (document.readyState !== &quot;loading&quot;) setupAll();
  else document.addEventListener(&quot;DOMContentLoaded&quot;, setupAll);
  window.addEventListener(&quot;load&quot;, setupAll);
  document.addEventListener(&quot;load&quot;, function (e) {
    if (e.target &amp;&amp; e.target.classList &amp;&amp; e.target.classList.contains(&quot;post-image--pair&quot;)) setupAll();
  }, true);
})();
&lt;/script&gt;

</description>
        <pubDate>Fri, 04 Sep 2026 00:00:00 +0000</pubDate>
        <link>http://jeffreyfossett.com/2026/09/04/indigo.html</link>
        <guid isPermaLink="true">http://jeffreyfossett.com/2026/09/04/indigo.html</guid>
        
        <category>art</category>
        
        <category>plants</category>
        
        
      </item>
    
      <item>
        <title>Marketplace Stories</title>
        <description>&lt;p&gt;&lt;em&gt;The following reflection was &lt;a href=&quot;https://mailchi.mp/76f2b5e944c1/jeffs-bloglife-update-may-13-19039&quot;&gt;previously published&lt;/a&gt; via my blog/life update email on 8/14/24. I just got around to porting it over here!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Recently, I’ve been spending an unreasonable amount of time browsing posts on the virtual bazaar that is Facebook Marketplace. There’s so much odd stuff on there that — even with Facebook’s best algorithmic curation efforts&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; — it’s a digital space that retains an element of serendipity and informality &lt;a href=&quot;https://joinreboot.org/p/the-serendipity-machine&quot;&gt;that feels missing on much of the micro-targeted internet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Do I want to buy a &lt;a href=&quot;https://www.facebook.com/share/GKkRxo4fwezW8u4K/&quot;&gt;decommissioned traffic light&lt;/a&gt;? Or a &lt;a href=&quot;https://www.facebook.com/share/ogL9aTHGmPPq7tmX/&quot;&gt;HUGE fingerboard ramp lot&lt;/a&gt;? Or a &lt;a href=&quot;https://www.facebook.com/share/5zyT2GdteYdkrB6A/&quot;&gt;$4000 automatic donut-making machine&lt;/a&gt;? I’m not sure, but I certainly wouldn’t have considered it before seeing these posts (NB: the seller promises that I will “make my money back 10x fold!!” if I invest in the donut machine).&lt;/p&gt;

&lt;!-- Three side-by-side images: proportional equal-height row that fills the available width; stacks on mobile. Reuses the post-image-pair styles/JS. --&gt;
&lt;div class=&quot;post-image-pair&quot; data-max-height=&quot;500&quot; style=&quot;--pair-gap: 1rem; --pair-width: 100%;&quot;&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-09-03-marketplace-stories/traffic_light.jpg&quot; alt=&quot;Facebook Marketplace listing for a decommissioned traffic light, $100&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-09-03-marketplace-stories/fingerboard_ramps.jpg&quot; alt=&quot;Facebook Marketplace listing for a huge fingerboard ramp lot, $700&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-09-03-marketplace-stories/donut_machine.jpg&quot; alt=&quot;Facebook Marketplace listing for an automatic donut machine, $4,000&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
(function () {
  if (window.__imagePairInit) return;
  window.__imagePairInit = true;

  function setupPair(pair) {
    var cells = pair.querySelectorAll(&quot;.post-image-pair__cell&quot;);
    var imgs = pair.querySelectorAll(&quot;img.post-image--pair&quot;);
    if (cells.length &lt; 2 || imgs.length &lt; 2) return false;
    var sum = 0, ratios = [];
    for (var i = 0; i &lt; imgs.length; i++) {
      if (!imgs[i].naturalWidth) return false; // not measurable yet
      var r = imgs[i].naturalWidth / imgs[i].naturalHeight;
      ratios[i] = r;
      sum += r;
    }
    for (var j = 0; j &lt; cells.length; j++) cells[j].style.flexGrow = ratios[j];
    var maxH = parseFloat(pair.getAttribute(&quot;data-max-height&quot;)) || 300;
    var gap = parseFloat(getComputedStyle(pair).columnGap) || 16;
    // Cap the row so its equal height never exceeds maxH; below that it fills the width.
    pair.style.maxWidth = Math.round(maxH * sum + gap) + &quot;px&quot;;
    return true;
  }

  function setupAll() {
    var pairs = document.querySelectorAll(&quot;.post-image-pair&quot;);
    for (var i = 0; i &lt; pairs.length; i++) {
      if (!pairs[i].__paired &amp;&amp; setupPair(pairs[i])) pairs[i].__paired = true;
    }
  }

  if (document.readyState !== &quot;loading&quot;) setupAll();
  else document.addEventListener(&quot;DOMContentLoaded&quot;, setupAll);
  window.addEventListener(&quot;load&quot;, setupAll);
  document.addEventListener(&quot;load&quot;, function (e) {
    if (e.target &amp;&amp; e.target.classList &amp;&amp; e.target.classList.contains(&quot;post-image--pair&quot;)) setupAll();
  }, true);
})();
&lt;/script&gt;

&lt;p&gt;Marketplace posts often come with little stories attached — idiosyncratic mini-histories of an object and its relation to a person, perhaps explaining where it came from, or justifying why it’s been put up for sale despite being in complete working order.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;“Found this while cleaning out my mom’s attic — still works great!”&lt;/li&gt;
  &lt;li&gt;“Bought the wrong size :(“&lt;/li&gt;
  &lt;li&gt;“Forgot that I had this!”&lt;/li&gt;
  &lt;li&gt;“Sadly getting out of the hobby, and selling off all my gear”&lt;/li&gt;
  &lt;li&gt;“This was a gift and only used 2 or 3 times”&lt;/li&gt;
  &lt;li&gt;“Upgrading to a newer version but this still works great!”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There’s a charming honesty in these micro stories: they are little windows into some aspect of a seller’s personality or recent life events: the seller is forgetful, or careless, or busy, or a dabbler; they’re sentimental (or not), or making some life changes, or investing in their hobby; they have recently lost a parent. And so on.&lt;/p&gt;

&lt;p&gt;Sometimes, the story behind a marketplace post is so irrepressible that it pushes through a seller’s best efforts at impersonal commercial language. The briefly-used engagement ring is an recurring find of this sort:&lt;/p&gt;

&lt;!-- Side-by-side images: proportional equal-height row that fills the available width; stacks on mobile --&gt;
&lt;div class=&quot;post-image-pair&quot; data-max-height=&quot;500&quot; style=&quot;--pair-gap: 1rem; --pair-width: 100%;&quot;&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-09-03-marketplace-stories/engagement_ring.jpg&quot; alt=&quot;Facebook Marketplace listing for a &apos;Gorgeous Engagement ring&apos;, marked down from $10,000 to $9,000&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-09-03-marketplace-stories/engagement_ring_description.jpg&quot; alt=&quot;Engagement ring listing description noting the ring was worn for less than 2 weeks and is essentially brand new&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
(function () {
  if (window.__imagePairInit) return;
  window.__imagePairInit = true;

  function setupPair(pair) {
    var cells = pair.querySelectorAll(&quot;.post-image-pair__cell&quot;);
    var imgs = pair.querySelectorAll(&quot;img.post-image--pair&quot;);
    if (cells.length &lt; 2 || imgs.length &lt; 2) return false;
    var sum = 0, ratios = [];
    for (var i = 0; i &lt; imgs.length; i++) {
      if (!imgs[i].naturalWidth) return false; // not measurable yet
      var r = imgs[i].naturalWidth / imgs[i].naturalHeight;
      ratios[i] = r;
      sum += r;
    }
    for (var j = 0; j &lt; cells.length; j++) cells[j].style.flexGrow = ratios[j];
    var maxH = parseFloat(pair.getAttribute(&quot;data-max-height&quot;)) || 300;
    var gap = parseFloat(getComputedStyle(pair).columnGap) || 16;
    // Cap the row so its equal height never exceeds maxH; below that it fills the width.
    pair.style.maxWidth = Math.round(maxH * sum + gap) + &quot;px&quot;;
    return true;
  }

  function setupAll() {
    var pairs = document.querySelectorAll(&quot;.post-image-pair&quot;);
    for (var i = 0; i &lt; pairs.length; i++) {
      if (!pairs[i].__paired &amp;&amp; setupPair(pairs[i])) pairs[i].__paired = true;
    }
  }

  if (document.readyState !== &quot;loading&quot;) setupAll();
  else document.addEventListener(&quot;DOMContentLoaded&quot;, setupAll);
  window.addEventListener(&quot;load&quot;, setupAll);
  document.addEventListener(&quot;load&quot;, function (e) {
    if (e.target &amp;&amp; e.target.classList &amp;&amp; e.target.classList.contains(&quot;post-image--pair&quot;)) setupAll();
  }, true);
})();
&lt;/script&gt;

&lt;p&gt;Other times, posts raise more questions than answers. How exactly &lt;em&gt;did&lt;/em&gt; you come across this “real authentic stash book (from a real trap house)”? Will someone buy it? Is it even legal to sell what appears to be a literal army tank on Facebook Marketplace&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;? Mysteries are a kind of story, too.&lt;/p&gt;

&lt;!-- Side-by-side images: proportional equal-height row that fills the available width; stacks on mobile --&gt;
&lt;div class=&quot;post-image-pair&quot; data-max-height=&quot;500&quot; style=&quot;--pair-gap: 1rem; --pair-width: 100%;&quot;&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-09-03-marketplace-stories/stash_book.jpg&quot; alt=&quot;Facebook Marketplace listing for a real authentic stash book from a real trap house, $50, showing a hollowed-out dictionary&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-09-03-marketplace-stories/spartan_apc.jpg&quot; alt=&quot;Facebook Marketplace listing for a 1980 Spartan FV103 APC on a flatbed trailer, $85,000, in Worcester, MA&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
(function () {
  if (window.__imagePairInit) return;
  window.__imagePairInit = true;

  function setupPair(pair) {
    var cells = pair.querySelectorAll(&quot;.post-image-pair__cell&quot;);
    var imgs = pair.querySelectorAll(&quot;img.post-image--pair&quot;);
    if (cells.length &lt; 2 || imgs.length &lt; 2) return false;
    var sum = 0, ratios = [];
    for (var i = 0; i &lt; imgs.length; i++) {
      if (!imgs[i].naturalWidth) return false; // not measurable yet
      var r = imgs[i].naturalWidth / imgs[i].naturalHeight;
      ratios[i] = r;
      sum += r;
    }
    for (var j = 0; j &lt; cells.length; j++) cells[j].style.flexGrow = ratios[j];
    var maxH = parseFloat(pair.getAttribute(&quot;data-max-height&quot;)) || 300;
    var gap = parseFloat(getComputedStyle(pair).columnGap) || 16;
    // Cap the row so its equal height never exceeds maxH; below that it fills the width.
    pair.style.maxWidth = Math.round(maxH * sum + gap) + &quot;px&quot;;
    return true;
  }

  function setupAll() {
    var pairs = document.querySelectorAll(&quot;.post-image-pair&quot;);
    for (var i = 0; i &lt; pairs.length; i++) {
      if (!pairs[i].__paired &amp;&amp; setupPair(pairs[i])) pairs[i].__paired = true;
    }
  }

  if (document.readyState !== &quot;loading&quot;) setupAll();
  else document.addEventListener(&quot;DOMContentLoaded&quot;, setupAll);
  window.addEventListener(&quot;load&quot;, setupAll);
  document.addEventListener(&quot;load&quot;, function (e) {
    if (e.target &amp;&amp; e.target.classList &amp;&amp; e.target.classList.contains(&quot;post-image--pair&quot;)) setupAll();
  }, true);
})();
&lt;/script&gt;

&lt;p&gt;These stories attach to the objects themselves. Knowing (a bit of) the history of an object individualizes it — makes it singular in a way. Commercial capitalism typically erases or ignores these kinds of histories of particular objects, dissolving them with the sameness-difference boundaries of broader commodity categories. Even in offline resale clearing houses like thrift stores and pawn shops, object histories are typically invisible. This vintage shirt was donated or sold or passed along by someone — but who? when? why?&lt;/p&gt;

&lt;p&gt;Facebook Marketplace is of course not the first online resale marketplace — platforms like eBay and Craigslist long precede it chronologically&lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;. But there’s something about FB marketplace’s combination of visual-browsability (photos), locality, and informality that makes it engrossing in a different kind of way. And with the prevalence of smartphones (and FB accounts), the barrier to posting is extremely low. &lt;em&gt;Why not&lt;/em&gt; see if someone wants to buy the pre-assembled lego flower bouquet you were going to discard, or the “odd drawing” from your sketchbook?&lt;/p&gt;

&lt;!-- Side-by-side images: proportional equal-height row that fills the available width; stacks on mobile --&gt;
&lt;div class=&quot;post-image-pair&quot; data-max-height=&quot;500&quot; style=&quot;--pair-gap: 1rem; --pair-width: 100%;&quot;&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-09-03-marketplace-stories/lego_bouquet.jpg&quot; alt=&quot;Facebook Marketplace listing for a Lego flower bouquet with sunflowers, $35&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-09-03-marketplace-stories/odd_drawing.jpg&quot; alt=&quot;Facebook Marketplace listing titled Odd drawing, $8, showing a colored-pencil sketch of plants around a ring&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
(function () {
  if (window.__imagePairInit) return;
  window.__imagePairInit = true;

  function setupPair(pair) {
    var cells = pair.querySelectorAll(&quot;.post-image-pair__cell&quot;);
    var imgs = pair.querySelectorAll(&quot;img.post-image--pair&quot;);
    if (cells.length &lt; 2 || imgs.length &lt; 2) return false;
    var sum = 0, ratios = [];
    for (var i = 0; i &lt; imgs.length; i++) {
      if (!imgs[i].naturalWidth) return false; // not measurable yet
      var r = imgs[i].naturalWidth / imgs[i].naturalHeight;
      ratios[i] = r;
      sum += r;
    }
    for (var j = 0; j &lt; cells.length; j++) cells[j].style.flexGrow = ratios[j];
    var maxH = parseFloat(pair.getAttribute(&quot;data-max-height&quot;)) || 300;
    var gap = parseFloat(getComputedStyle(pair).columnGap) || 16;
    // Cap the row so its equal height never exceeds maxH; below that it fills the width.
    pair.style.maxWidth = Math.round(maxH * sum + gap) + &quot;px&quot;;
    return true;
  }

  function setupAll() {
    var pairs = document.querySelectorAll(&quot;.post-image-pair&quot;);
    for (var i = 0; i &lt; pairs.length; i++) {
      if (!pairs[i].__paired &amp;&amp; setupPair(pairs[i])) pairs[i].__paired = true;
    }
  }

  if (document.readyState !== &quot;loading&quot;) setupAll();
  else document.addEventListener(&quot;DOMContentLoaded&quot;, setupAll);
  window.addEventListener(&quot;load&quot;, setupAll);
  document.addEventListener(&quot;load&quot;, function (e) {
    if (e.target &amp;&amp; e.target.classList &amp;&amp; e.target.classList.contains(&quot;post-image--pair&quot;)) setupAll();
  }, true);
})();
&lt;/script&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Or perhaps Facebook algorithmically design the space in this way on purpose? &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/FV103_Spartan&quot;&gt;According to wikipedia&lt;/a&gt;, it’s actually an “armoured personnel carrier” developed for the British Army. How did it wind up in Worcester, MA? &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;And in general I am no particular fan of Facebook (“Meta”) or its big tech peers. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate>
        <link>http://jeffreyfossett.com/2026/09/03/marketplace-stories.html</link>
        <guid isPermaLink="true">http://jeffreyfossett.com/2026/09/03/marketplace-stories.html</guid>
        
        <category>technology</category>
        
        
      </item>
    
      <item>
        <title>Where do the Cambridge turkeys roost?</title>
        <description>&lt;p&gt;I have a longstanding interest in learning about and seeking to understand the Cambridge-area wild turkeys. Today, I wanted to try to learn more about the roosting patterns of the turkeys. In general, I know that wild turkeys roost in trees in the evenings primaily to protect themselves from predators. But I’ve only seen them up in the trees myself a few times (once around Linnean st I think, another time near Oxford street). I was curious if there was other information online from folks about where the Cambridge turkeys roost at night.&lt;/p&gt;

&lt;p&gt;I tasked Claude with investigating and had it put together this rough map from a variety of publicly-available reports online (e.g. Reddit, iNaturalist, news reports). Of course, there’s not much of a way to verify any of this, and this investigation does not claim to be exhaustive or particularly systematic. Instead, I’m treating this as a starting point; I would like to investigate some of these locations for myself and see what I can see.&lt;/p&gt;

&lt;p&gt;Anyhow, here is the map:&lt;/p&gt;

&lt;style&gt;html,body{overflow-x:hidden}&lt;/style&gt;

&lt;iframe src=&quot;/assets/turkeys/turkey_roost_map.html&quot; style=&quot;width:calc(100vw - 48px);margin-left:calc(50% - 50vw + 24px);height:85vh;min-height:520px;border:1px solid #ddd;display:block&quot; title=&quot;Cambridge MA wild turkey roost map&quot; loading=&quot;lazy&quot;&gt;&lt;/iframe&gt;

&lt;p style=&quot;font-size:14px&quot;&gt;
&lt;a href=&quot;/assets/turkeys/turkey_roost_map.html&quot; target=&quot;_blank&quot;&gt;View the map full screen&lt;/a&gt; ·
&lt;a href=&quot;/assets/turkeys/turkey_roost_reports.csv&quot;&gt;Download the source list (CSV)&lt;/a&gt;
&lt;/p&gt;

&lt;h2 id=&quot;methods-summarized-by-claude&quot;&gt;Methods (summarized by Claude)&lt;/h2&gt;

&lt;p&gt;The map draws on 40 reports compiled from public web sources (Reddit, iNaturalist, the Harvard Gazette and Crimson, local news, and a few blogs), spanning 2012 to 2026. Each report was classified as follows:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Evidence type&lt;/strong&gt;: a &lt;em&gt;roost report&lt;/em&gt; means the source describes turkeys sleeping or perched overnight, or going up into a tree at dusk / seen up at dawn. A &lt;em&gt;daytime flock location&lt;/em&gt; only records where a flock spends the day – weak evidence for a roost, though turkeys usually roost within a few hundred meters of their daytime range. The set is split evenly: 20 roost reports and 20 daytime locations.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Confidence&lt;/strong&gt;: &lt;em&gt;high&lt;/em&gt; means a firsthand account of explicit roosting at a specific spot; &lt;em&gt;medium&lt;/em&gt; means explicit roosting but a vague location, or a secondhand account; &lt;em&gt;low&lt;/em&gt; means the roosting is inferred, or the report is daytime only.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Location and uncertainty&lt;/strong&gt;: coordinates are placed by hand from the description in each source – they are not GPS points. The circle around each marker reflects a judgment of how precisely the source pins the place, from ~30-60 m for a named tree or geotag up to ~1 km for descriptions like “along the Charles.”&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Date&lt;/strong&gt;: every record carries a year. The slider in the sidebar hides older reports, and the marker outlines distinguish reports from 2024 or later (solid), 2019-2023 (thin), and before 2019 (dashed).&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 23 Aug 2026 00:00:00 +0000</pubDate>
        <link>http://jeffreyfossett.com/2026/08/23/turkey-roost-map.html</link>
        <guid isPermaLink="true">http://jeffreyfossett.com/2026/08/23/turkey-roost-map.html</guid>
        
        <category>nature</category>
        
        <category>llm</category>
        
        
      </item>
    
      <item>
        <title>AI and Society Fellowship</title>
        <description>&lt;!-- Single centered image (responsive via CSS variables) --&gt;
&lt;div class=&quot;post-image-wrap&quot; style=&quot;--img-width: 65%; --img-max-width: 100%;&quot;&gt;
  &lt;p&gt;&lt;img class=&quot;post-image&quot; src=&quot;/figs/2026-08-13-ai-and-society-fellowship/block_fellowship_page.jpg&quot; alt=&quot;Header of the Block Center&apos;s AI and Society fellowship program page&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;At the Block Center, I’ve been working on organizing a new “AI and Society” &lt;a href=&quot;https://www.cmu.edu/block-center/our-work/block-ai-society-fellowship&quot;&gt;fellowship program&lt;/a&gt; that aims to bring together students from across the university (including different schools, disciplines etc.) who want to engage around the social, political, and ethical dimensions of AI. The program is roughly modeled off of &lt;a href=&quot;https://jeffreyfossett.com/2019/06/01/techtopia-assembly.html&quot;&gt;a program&lt;/a&gt; that I participated in at the Berkman Klein Center during my PhD.&lt;/p&gt;

&lt;p&gt;I am excited to see how the program goes, and to learn from the perspectives of students on these topics – especially undegraduates – who seem to be confronted with this technology in a number of uncertain and potentially-challenging ways, both in their educational experience and in imagining the future of the job market.&lt;/p&gt;
</description>
        <pubDate>Thu, 13 Aug 2026 00:00:00 +0000</pubDate>
        <link>http://jeffreyfossett.com/2026/08/13/ai-and-society-fellowship.html</link>
        <guid isPermaLink="true">http://jeffreyfossett.com/2026/08/13/ai-and-society-fellowship.html</guid>
        
        <category>llm</category>
        
        
      </item>
    
      <item>
        <title>AI Apology Box</title>
        <description>&lt;p&gt;Press the button for an apology.&lt;/p&gt;

&lt;!-- Single centered image (responsive via CSS variables) --&gt;
&lt;div class=&quot;post-image-wrap&quot; style=&quot;--img-width: 65%; --img-max-width: 100%;&quot;&gt;
  &lt;p&gt;&lt;img class=&quot;post-image&quot; src=&quot;/figs/2026-08-08-ai-apology-box/apology_box.jpg&quot; alt=&quot;A black 3D-printed box labeled &apos;AI Apology Box&apos; with a receipt printer on top and a red button&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;!-- Single centered image (responsive via CSS variables) --&gt;
&lt;div class=&quot;post-image-wrap&quot; style=&quot;--img-width: 65%; --img-max-width: 100%;&quot;&gt;
  &lt;p&gt;&lt;img class=&quot;post-image&quot; src=&quot;/figs/2026-08-08-ai-apology-box/four_apologies.jpg&quot; alt=&quot;Four printed apology receipts laid out on a wooden table, each with a different illustration and apology from the AI&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;!-- Single centered image (responsive via CSS variables) --&gt;
&lt;div class=&quot;post-image-wrap&quot; style=&quot;--img-width: 65%; --img-max-width: 100%;&quot;&gt;
  &lt;p&gt;&lt;img class=&quot;post-image&quot; src=&quot;/figs/2026-08-08-ai-apology-box/apology_receipt.jpg&quot; alt=&quot;A printed receipt titled &apos;An Apology no. 9&apos; in which the AI apologizes for its apology being generated&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;A video in action:&lt;/p&gt;

&lt;div style=&quot;display: flex; justify-content: center;&quot;&gt;
  &lt;video src=&quot;/figs/2026-08-08-ai-apology-box/apology_box_web.mp4&quot; controls=&quot;&quot; muted=&quot;&quot; playsinline=&quot;&quot; style=&quot;max-width: 100%; width: 350px; height: auto; border-radius: 4px;&quot;&gt;
  Your browser does not support the video tag.
&lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;This project is a reworked version of &lt;a href=&quot;https://jeffreyfossett.com/2022/10/05/ai-poetry-box.html&quot;&gt;this&lt;/a&gt; older project, to better align it with the spirit of the times.&lt;/p&gt;

&lt;h2 id=&quot;reflection&quot;&gt;Reflection&lt;/h2&gt;

&lt;p&gt;I can’t decide how I feel about this apology box project; my initial thought was that it felt funny in a wry or maybe ironic sort of way. Of course, there’s an obvious emptiness to the AI “apologizing” for the various harms that people think it’s wrought; and yet it can do it so fluently. I think the risk and challenge of the project is about getting the tone right; there’s a risk of the project seeming to diminish or make light of these various grievances that people have with AI, and that is not my goal. Maybe it would be better to make the tone more deeply earnest, and less exaggerated. In the choice of grievances to emphasize, there’s also a risk of reinforcing various contestable (or at least uncertain) future imaginings – e.g. that AI will lead to significant job loss. I’m not sure how much of an issue this is for the project since at least some people do feel real fear and/or anxiety about these possible futures, whether they are likely or not. Another direction I thought could be fun would be to give more control to the viewer about the nature and/or intensity of the apology; twist this dial up to really ratchet up the profuseness of the apology. I’m not sure.&lt;/p&gt;
</description>
        <pubDate>Sat, 08 Aug 2026 00:00:00 +0000</pubDate>
        <link>http://jeffreyfossett.com/2026/08/08/ai-apology-box.html</link>
        <guid isPermaLink="true">http://jeffreyfossett.com/2026/08/08/ai-apology-box.html</guid>
        
        <category>llm</category>
        
        
      </item>
    
      <item>
        <title>Plants and Boundaries</title>
        <description>&lt;p&gt;I made &lt;a href=&quot;https://jeffreyfossett.com/notes.html#63&quot;&gt;a note&lt;/a&gt; a while ago about the theme of &lt;em&gt;plants and boundaries&lt;/em&gt;. The note was first inspired by this image from around Cambridge:&lt;/p&gt;

&lt;!-- Single centered image (responsive via CSS variables) --&gt;
&lt;div class=&quot;post-image-wrap&quot; style=&quot;--img-width: 90%; --img-max-width: 100%;&quot;&gt;
  &lt;p&gt;&lt;img class=&quot;post-image&quot; src=&quot;/figs/2026-08-03-plants-and-boundaries/paulownia_no_trespassing.jpg&quot; alt=&quot;A young paulownia with huge heart-shaped leaves growing against a brick wall, partially covering a &apos;Private Property / No Trespassing&apos; sign&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;According to iNaturalist, this is likely a &lt;a href=&quot;https://en.wikipedia.org/wiki/Paulownia&quot;&gt;Paulownia&lt;/a&gt; tree (specifically, &lt;a href=&quot;https://en.wikipedia.org/wiki/Paulownia_tomentosa&quot;&gt;Paulownia tomentosa&lt;/a&gt;), a species that is considered “invasive” in the US, at least &lt;a href=&quot;https://web.archive.org/web/20240528124823/https://www.invasivespeciesinfo.gov/terrestrial/plants/princess-tree&quot;&gt;by some&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tsusinvasives.org/home/database/paulownia-tomentosa&quot;&gt;This&lt;/a&gt; page explains more of its “invasive” characteristics:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Paulownia tormentosa is an aggressive and highly adaptable ornamental tree that grows rapidly. Also, its ability to sprout prolifically from adventitious buds on stems and roots allows it to survive fire, cutting and even bulldozing in construction areas; making it difficult to remove from established areas.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I was curious about the term “&lt;a href=&quot;https://en.wikipedia.org/wiki/Plant_development#Buds_and_shoots&quot;&gt;adventitious bud&lt;/a&gt;” – essentially a bud that shows up in a non-standard or unusual place. &lt;a href=&quot;https://www.thedailygarden.us/garden-word-of-the-day/adventitious-buds&quot;&gt;Here&lt;/a&gt; is another link which explains that “adventitious buds are rogues and outliers”.&lt;/p&gt;

&lt;p&gt;It’s amazing all the normativity of boundaries and place, both in the urban landscape and in our understandings of plants and botany: “private property”, “no trespassing”, “invasive”, “adventitious”, “aggressive”. I’ve written about these themes before.&lt;/p&gt;

&lt;p&gt;In my initial &lt;em&gt;plants and boundaries&lt;/em&gt; reflection, I thought it was interesting to notice how much of city infrastructure is itself about boundary-making. Cars can go here but not there. Stop here, go there. So much of urban politics is about contesting these boundaries; in Boston and Cambridge, for example, there’s lots of debate about the nature and presence of bike lanes – where should they be, and how permeable their boundaries should be (“paint is not infrastructure” per the bike advocates), who should be allowed in them.&lt;/p&gt;

&lt;p&gt;Against this background, I think it’s interesting to pay attention to non-human agents like plants. Plants are often expected to inhabit particular spaces in the urban environment – a garden, a median, a planter, a tree well. And yet plants are also not beholden to these boundaries in any deep way. They often transgress, trespass without malice. It’s interesting to notice when and how the urban environment responds to these violations.&lt;/p&gt;

&lt;p&gt;Sometimes the boundaries are policed, enforced; but other times, it’s seemingly impossible, or perhaps considered too trivial to be worth the effort.
&lt;!-- Side-by-side images: proportional equal-height row that fills the available width; stacks on mobile --&gt;&lt;/p&gt;
&lt;div class=&quot;post-image-pair&quot; data-max-height=&quot;400&quot; style=&quot;--pair-gap: 1rem; --pair-width: 90%;&quot;&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-08-03-plants-and-boundaries/stop_sign_leaves.jpg&quot; alt=&quot;A stop sign partially hidden behind the leafy branches of an apple tree&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-08-03-plants-and-boundaries/curb_grass.jpg&quot; alt=&quot;Tufts of grass growing out of the seams of a granite curb along a city sidewalk&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
(function () {
  if (window.__imagePairInit) return;
  window.__imagePairInit = true;

  function setupPair(pair) {
    var cells = pair.querySelectorAll(&quot;.post-image-pair__cell&quot;);
    var imgs = pair.querySelectorAll(&quot;img.post-image--pair&quot;);
    if (cells.length &lt; 2 || imgs.length &lt; 2) return false;
    var sum = 0, ratios = [];
    for (var i = 0; i &lt; imgs.length; i++) {
      if (!imgs[i].naturalWidth) return false; // not measurable yet
      var r = imgs[i].naturalWidth / imgs[i].naturalHeight;
      ratios[i] = r;
      sum += r;
    }
    for (var j = 0; j &lt; cells.length; j++) cells[j].style.flexGrow = ratios[j];
    var maxH = parseFloat(pair.getAttribute(&quot;data-max-height&quot;)) || 300;
    var gap = parseFloat(getComputedStyle(pair).columnGap) || 16;
    // Cap the row so its equal height never exceeds maxH; below that it fills the width.
    pair.style.maxWidth = Math.round(maxH * sum + gap) + &quot;px&quot;;
    return true;
  }

  function setupAll() {
    var pairs = document.querySelectorAll(&quot;.post-image-pair&quot;);
    for (var i = 0; i &lt; pairs.length; i++) {
      if (!pairs[i].__paired &amp;&amp; setupPair(pairs[i])) pairs[i].__paired = true;
    }
  }

  if (document.readyState !== &quot;loading&quot;) setupAll();
  else document.addEventListener(&quot;DOMContentLoaded&quot;, setupAll);
  window.addEventListener(&quot;load&quot;, setupAll);
  document.addEventListener(&quot;load&quot;, function (e) {
    if (e.target &amp;&amp; e.target.classList &amp;&amp; e.target.classList.contains(&quot;post-image--pair&quot;)) setupAll();
  }, true);
})();
&lt;/script&gt;

&lt;!-- Side-by-side images: proportional equal-height row that fills the available width; stacks on mobile --&gt;
&lt;div class=&quot;post-image-pair&quot; data-max-height=&quot;400&quot; style=&quot;--pair-gap: 1rem; --pair-width: 90%;&quot;&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-08-03-plants-and-boundaries/vine_over_fence.jpg&quot; alt=&quot;Grape vines spilling over the top and through the slats of a wooden fence along a brick sidewalk&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-08-03-plants-and-boundaries/tree_root_curb.jpg&quot; alt=&quot;The base of a large street tree whose roots swell over the curb and into the patched asphalt&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
(function () {
  if (window.__imagePairInit) return;
  window.__imagePairInit = true;

  function setupPair(pair) {
    var cells = pair.querySelectorAll(&quot;.post-image-pair__cell&quot;);
    var imgs = pair.querySelectorAll(&quot;img.post-image--pair&quot;);
    if (cells.length &lt; 2 || imgs.length &lt; 2) return false;
    var sum = 0, ratios = [];
    for (var i = 0; i &lt; imgs.length; i++) {
      if (!imgs[i].naturalWidth) return false; // not measurable yet
      var r = imgs[i].naturalWidth / imgs[i].naturalHeight;
      ratios[i] = r;
      sum += r;
    }
    for (var j = 0; j &lt; cells.length; j++) cells[j].style.flexGrow = ratios[j];
    var maxH = parseFloat(pair.getAttribute(&quot;data-max-height&quot;)) || 300;
    var gap = parseFloat(getComputedStyle(pair).columnGap) || 16;
    // Cap the row so its equal height never exceeds maxH; below that it fills the width.
    pair.style.maxWidth = Math.round(maxH * sum + gap) + &quot;px&quot;;
    return true;
  }

  function setupAll() {
    var pairs = document.querySelectorAll(&quot;.post-image-pair&quot;);
    for (var i = 0; i &lt; pairs.length; i++) {
      if (!pairs[i].__paired &amp;&amp; setupPair(pairs[i])) pairs[i].__paired = true;
    }
  }

  if (document.readyState !== &quot;loading&quot;) setupAll();
  else document.addEventListener(&quot;DOMContentLoaded&quot;, setupAll);
  window.addEventListener(&quot;load&quot;, setupAll);
  document.addEventListener(&quot;load&quot;, function (e) {
    if (e.target &amp;&amp; e.target.classList &amp;&amp; e.target.classList.contains(&quot;post-image--pair&quot;)) setupAll();
  }, true);
})();
&lt;/script&gt;

&lt;!-- Side-by-side images: proportional equal-height row that fills the available width; stacks on mobile --&gt;
&lt;div class=&quot;post-image-pair&quot; data-max-height=&quot;400&quot; style=&quot;--pair-gap: 1rem; --pair-width: 90%;&quot;&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-08-03-plants-and-boundaries/vines_iron_fence.jpg&quot; alt=&quot;Thick woody vines twisting through the bars of a tall black iron fence&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-08-03-plants-and-boundaries/branches_railing.jpg&quot; alt=&quot;Leafy branches growing through the circular cutouts of a weathered wooden railing&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
(function () {
  if (window.__imagePairInit) return;
  window.__imagePairInit = true;

  function setupPair(pair) {
    var cells = pair.querySelectorAll(&quot;.post-image-pair__cell&quot;);
    var imgs = pair.querySelectorAll(&quot;img.post-image--pair&quot;);
    if (cells.length &lt; 2 || imgs.length &lt; 2) return false;
    var sum = 0, ratios = [];
    for (var i = 0; i &lt; imgs.length; i++) {
      if (!imgs[i].naturalWidth) return false; // not measurable yet
      var r = imgs[i].naturalWidth / imgs[i].naturalHeight;
      ratios[i] = r;
      sum += r;
    }
    for (var j = 0; j &lt; cells.length; j++) cells[j].style.flexGrow = ratios[j];
    var maxH = parseFloat(pair.getAttribute(&quot;data-max-height&quot;)) || 300;
    var gap = parseFloat(getComputedStyle(pair).columnGap) || 16;
    // Cap the row so its equal height never exceeds maxH; below that it fills the width.
    pair.style.maxWidth = Math.round(maxH * sum + gap) + &quot;px&quot;;
    return true;
  }

  function setupAll() {
    var pairs = document.querySelectorAll(&quot;.post-image-pair&quot;);
    for (var i = 0; i &lt; pairs.length; i++) {
      if (!pairs[i].__paired &amp;&amp; setupPair(pairs[i])) pairs[i].__paired = true;
    }
  }

  if (document.readyState !== &quot;loading&quot;) setupAll();
  else document.addEventListener(&quot;DOMContentLoaded&quot;, setupAll);
  window.addEventListener(&quot;load&quot;, setupAll);
  document.addEventListener(&quot;load&quot;, function (e) {
    if (e.target &amp;&amp; e.target.classList &amp;&amp; e.target.classList.contains(&quot;post-image--pair&quot;)) setupAll();
  }, true);
})();
&lt;/script&gt;

&lt;p&gt;Occasionally, urban boundaries are explicitly designed and built to accomodate plants already inhabiting a place, whether out of respect or convenience:&lt;/p&gt;

&lt;!-- Side-by-side images: proportional equal-height row that fills the available width; stacks on mobile --&gt;
&lt;div class=&quot;post-image-pair&quot; data-max-height=&quot;400&quot; style=&quot;--pair-gap: 1rem; --pair-width: 90%;&quot;&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-08-03-plants-and-boundaries/fence_into_tree.jpg&quot; alt=&quot;A chain-link fence placed around an existing tree&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
  &lt;div class=&quot;post-image-pair__cell&quot;&gt;
    &lt;p&gt;&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-08-03-plants-and-boundaries/gate_around_tree.jpg&quot; alt=&quot;An iron gate fitted right up against a tree trunk, whose roots spill over the edge&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
(function () {
  if (window.__imagePairInit) return;
  window.__imagePairInit = true;

  function setupPair(pair) {
    var cells = pair.querySelectorAll(&quot;.post-image-pair__cell&quot;);
    var imgs = pair.querySelectorAll(&quot;img.post-image--pair&quot;);
    if (cells.length &lt; 2 || imgs.length &lt; 2) return false;
    var sum = 0, ratios = [];
    for (var i = 0; i &lt; imgs.length; i++) {
      if (!imgs[i].naturalWidth) return false; // not measurable yet
      var r = imgs[i].naturalWidth / imgs[i].naturalHeight;
      ratios[i] = r;
      sum += r;
    }
    for (var j = 0; j &lt; cells.length; j++) cells[j].style.flexGrow = ratios[j];
    var maxH = parseFloat(pair.getAttribute(&quot;data-max-height&quot;)) || 300;
    var gap = parseFloat(getComputedStyle(pair).columnGap) || 16;
    // Cap the row so its equal height never exceeds maxH; below that it fills the width.
    pair.style.maxWidth = Math.round(maxH * sum + gap) + &quot;px&quot;;
    return true;
  }

  function setupAll() {
    var pairs = document.querySelectorAll(&quot;.post-image-pair&quot;);
    for (var i = 0; i &lt; pairs.length; i++) {
      if (!pairs[i].__paired &amp;&amp; setupPair(pairs[i])) pairs[i].__paired = true;
    }
  }

  if (document.readyState !== &quot;loading&quot;) setupAll();
  else document.addEventListener(&quot;DOMContentLoaded&quot;, setupAll);
  window.addEventListener(&quot;load&quot;, setupAll);
  document.addEventListener(&quot;load&quot;, function (e) {
    if (e.target &amp;&amp; e.target.classList &amp;&amp; e.target.classList.contains(&quot;post-image--pair&quot;)) setupAll();
  }, true);
})();
&lt;/script&gt;

&lt;p&gt;Sometimes plants are themselves recruited to make or adorn a boundary, as in the case of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Hedge&quot;&gt;hedge&lt;/a&gt;. It’s interesting that wikipedia explicitly defines a hedge in boundary-making terms:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A hedge or hedgerow is a line of shrubs and sometimes trees, planted and trained to form a barrier or to mark the boundary of an area, such as between neighbouring properties.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Making such a “live fence” has some benefits as the page explains, since it allows a boundary to be made with less need for additional maintenance than might be required for, say, a fence post. According to this &lt;a href=&quot;https://web.archive.org/web/20140529130456/http://www.ppath.cornell.edu/mba_project/livefence.html&quot;&gt;source&lt;/a&gt;, there are various benefits to live fences: “Besides their main function…living fences may provide fuelwood, fodder and food, act as wind breaks or enrich the soil, depending on the species used”.&lt;/p&gt;

&lt;p&gt;I am not sure what exactly is the deeper point to draw out in all of this. Of course there are broader themes here about how boundaries are made and contested and maintained. But what do plants draw out in particular? Maybe it is something about timescale, and ideas about what is “static” or not. Boundaries often seek to present themselves as stable, impermeable, fixed in one way or another. Plants are an interesting interlocutor, then, because they are dynamic but slow to the point of often seeming “static” in human terms. So attending to plants and boundaries draws out an interesting tension of presenting static moments of what are necessarily dynamic boundary violations – dissolving the imagined stasis of both plants and boundaries. Something like this.&lt;/p&gt;
</description>
        <pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate>
        <link>http://jeffreyfossett.com/2026/08/03/plants-and-boundaries.html</link>
        <guid isPermaLink="true">http://jeffreyfossett.com/2026/08/03/plants-and-boundaries.html</guid>
        
        <category>plants</category>
        
        
      </item>
    
      <item>
        <title>Drawing Practice</title>
        <description>&lt;p&gt;I have been drawing for much of my life in different ways, but I haven’t spent much time really trying to &lt;em&gt;improve&lt;/em&gt; drawing as a skill – learning the craft and principles, doing deliberate practice, and so on. I’ve decided to make a commitment to do this for a while, starting with Brent Eviston’s course on &lt;a href=&quot;https://www.udemy.com/course/the-art-and-science-of-drawing/&quot;&gt;the basic skills of drawing&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As with other kinds of learning, I find documentation to be a helpful part of the process – a chance to reflect, analyze, and stay curious. So I’m keeping a short log of each day of practice. This post indexes the series and will update as new days are added.&lt;/p&gt;

&lt;!-- Liquid to build the ordered list of drawing days --&gt;

&lt;ul&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day1.html&quot;&gt;Day 1&lt;/a&gt; - Jul 22, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day2.html&quot;&gt;Day 2&lt;/a&gt; - Jul 23, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day3.html&quot;&gt;Day 3&lt;/a&gt; - Jul 24, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day4.html&quot;&gt;Day 4&lt;/a&gt; - Jul 25, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day5.html&quot;&gt;Day 5&lt;/a&gt; - Jul 26, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day6.html&quot;&gt;Day 6&lt;/a&gt; - Jul 27, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day7.html&quot;&gt;Day 7&lt;/a&gt; - Jul 28, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day8.html&quot;&gt;Day 8&lt;/a&gt; - Jul 29, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day9.html&quot;&gt;Day 9&lt;/a&gt; - Jul 30, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day10.html&quot;&gt;Day 10&lt;/a&gt; - Jul 31, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day11.html&quot;&gt;Day 11&lt;/a&gt; - Aug 1, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day12.html&quot;&gt;Day 12&lt;/a&gt; - Aug 2, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day13.html&quot;&gt;Day 13&lt;/a&gt; - Aug 3, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day14.html&quot;&gt;Day 14&lt;/a&gt; - Aug 4, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day15.html&quot;&gt;Day 15&lt;/a&gt; - Aug 5, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day16.html&quot;&gt;Day 16&lt;/a&gt; - Aug 6, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day17.html&quot;&gt;Day 17&lt;/a&gt; - Aug 7, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day18.html&quot;&gt;Day 18&lt;/a&gt; - Aug 8, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day19.html&quot;&gt;Day 19&lt;/a&gt; - Aug 9, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day20.html&quot;&gt;Day 20&lt;/a&gt; - Aug 10, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day21.html&quot;&gt;Day 21&lt;/a&gt; - Aug 11, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day25.html&quot;&gt;Day 25&lt;/a&gt; - Aug 15, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day26.html&quot;&gt;Day 26&lt;/a&gt; - Aug 16, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day27.html&quot;&gt;Day 27&lt;/a&gt; - Aug 17, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day31.html&quot;&gt;Day 31&lt;/a&gt; - Aug 21, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day33.html&quot;&gt;Day 33&lt;/a&gt; - Aug 23, 2026&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;/drawing/day34.html&quot;&gt;Day 34&lt;/a&gt; - Sep 8, 2026&lt;/li&gt;

&lt;/ul&gt;
</description>
        <pubDate>Sat, 25 Jul 2026 00:00:00 +0000</pubDate>
        <link>http://jeffreyfossett.com/2026/07/25/learning-to-draw.html</link>
        <guid isPermaLink="true">http://jeffreyfossett.com/2026/07/25/learning-to-draw.html</guid>
        
        <category>art</category>
        
        <category>drawing</category>
        
        
      </item>
    
      <item>
        <title>Arlington Great Meadow</title>
        <description>&lt;p&gt;&lt;a href=&quot;https://maps.app.goo.gl/x3UjhdQiQNxhYx5f7&quot;&gt;Arlington’s Great Meadow&lt;/a&gt; (AGM) is a favorite nature spot of mine in the local area. It’s readily accessible from the Minuteman bike trail, and is a nice spot for wandering or sitting in nature. I visit it often on my bike rides, and would like to learn more about it. AGM is also connected to a place labeled &lt;a href=&quot;https://maps.app.goo.gl/6q5r49BTBjYN3xnp9&quot;&gt;Joyce Miller’s Meadow&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In this post I will try to collect some resources and information about the Great Meadow area. There are some good online resources from the &lt;a href=&quot;https://foagm.org/&quot;&gt;Friends of Arlington Great Meadow&lt;/a&gt; site, including this &lt;a href=&quot;https://foagm.org/wp-content/uploads/2020/12/AGM-Trifold-2017-05-.pdf&quot;&gt;Trifold brochure&lt;/a&gt; which includes a nice map of the area:&lt;/p&gt;

&lt;!-- Single centered image (responsive via CSS variables) --&gt;
&lt;div class=&quot;post-image-wrap&quot; style=&quot;--img-width: 100%; --img-max-width: 85%;&quot;&gt;
  &lt;p&gt;&lt;img class=&quot;post-image&quot; src=&quot;/figs/2026-07-16-arlington-meadow/agm_trifold_map.jpg&quot; alt=&quot;Map of Arlington&apos;s Great Meadows from the FoAGM trifold brochure, showing trails, boardwalks, entry points, and wetland areas&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;One thing that catches my eye here is the labeling of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Vernal_pool&quot;&gt;vernal pool&lt;/a&gt;; vernal pools are apparently “seasonal pools of water that provide habitat for distinctive plants and animals. They are considered to be a unique type of wetland usually devoid of fish, and thus allow the safe development of natal amphibian and insect species unable to withstand competition or predation by fish”. On the website it says:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Infinity Pond/Vernal Pools— a certified vernal pool. Two vernal pools, including “Infinity Pond” which is certified, can be found on the north side. In these communities, 251 species of plants have been identified, including some that are uncommon.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;…and includes this image of the “infinity pond” in the dry season:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://foagm.org/wp-content/uploads/2022/11/agm-infinity-pond-dry-in-fall-finnie-1024x768.jpg&quot; alt=&quot;pond&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The FOAGM folks also have a nice &lt;a href=&quot;https://foagm.org/wp-content/uploads/2020/12/AGM-Tour-Guide.pdf&quot;&gt;tour guide document&lt;/a&gt; I want to take some notes on.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The document notes that the space was once called “alewife meadows”, suggesting that “ at one time the small alewife herring found its way from the Atlantic ocean to spawn in the water here”; I didn’t even know that the name Alewife (now also a T station) is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Alewife_(fish)&quot;&gt;fish&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Arlington purchased the meadow area in 1871 and flooded it as a water supply area, but then drained it when it was no longer needed for this in 1902.&lt;/li&gt;
  &lt;li&gt;There’s a nice walking tour documented here that I will have to try.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is an active &lt;a href=&quot;https://www.inaturalist.org/projects/arlington-s-great-meadows&quot;&gt;iNaturalist page&lt;/a&gt; for AGM that I’ll explore more.&lt;/p&gt;

</description>
        <pubDate>Thu, 16 Jul 2026 00:00:00 +0000</pubDate>
        <link>http://jeffreyfossett.com/2026/07/16/arlington-meadow.html</link>
        <guid isPermaLink="true">http://jeffreyfossett.com/2026/07/16/arlington-meadow.html</guid>
        
        <category>plants</category>
        
        <category>nature</category>
        
        
      </item>
    
      <item>
        <title>When and How to Use AI: A Framework for Reflection</title>
        <description>&lt;p&gt;&lt;em&gt;This post was prepared for a guest lecture in DESINV218 at UC Berkeley. Slides for the presentation are &lt;a href=&quot;/files/ai_use_framework_slides.pdf&quot;&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1 id=&quot;introduction&quot;&gt;Introduction&lt;/h1&gt;

&lt;p&gt;In this post, I will discuss my approach for deciding when and how to work with generative AI tools in a research context. While I will primarily focus on the setting of academic social science research of the sort I am familiar with, my hope is that this framework might be useful for others who are trying to decide when and how to work with AI in their work (if at all), and generally build an intentional relationship with this emerging technology.&lt;/p&gt;

&lt;p&gt;Note: this post assumes that the reader is familiar with the basics of different generative AI tools and their forms (e.g. ChatGPT, Cursor, Claude Code, etc.); useful introductions to these tools have been written elsewhere by others. The goal of this post is to reflect on when and how to use these tools.&lt;/p&gt;

&lt;h1 id=&quot;task-framework&quot;&gt;Task Framework&lt;/h1&gt;

&lt;p&gt;One way to approach the decision about whether and how to use AI is to think in terms of tasks. In my work, a broader research project is made up of many smaller “tasks” that need to be completed. For example, tasks might include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;developing a research idea;&lt;/li&gt;
  &lt;li&gt;searching for related literature;&lt;/li&gt;
  &lt;li&gt;reading related papers;&lt;/li&gt;
  &lt;li&gt;developing a research plan;&lt;/li&gt;
  &lt;li&gt;collecting data;&lt;/li&gt;
  &lt;li&gt;cleaning data;&lt;/li&gt;
  &lt;li&gt;analyzing data;&lt;/li&gt;
  &lt;li&gt;building charts and tables;&lt;/li&gt;
  &lt;li&gt;writing up results;&lt;/li&gt;
  &lt;li&gt;requesting feedback;&lt;/li&gt;
  &lt;li&gt;responding to referees&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;… and so on.&lt;/p&gt;

&lt;p&gt;For each of these tasks, it may or may not make sense to work with AI when completing the task. So, given a particular task, how should we decide whether (and how) to work with AI?&lt;/p&gt;

&lt;p&gt;Personally, I try to make this decision by considering several interlocking sub-questions, which I will discuss in the rest of this document:&lt;/p&gt;

&lt;html&gt;
&lt;div style=&quot;border: 2px solid #2a7ae2; background: rgba(42, 122, 226, 0.08); padding: 0.6em 1em; border-radius: 10px; margin: 1em 0; font-size: 1.1em;&quot;&gt;
&lt;strong&gt;Question 1&lt;/strong&gt;: Is this a task that AI &lt;em&gt;can do&lt;/em&gt; (or help with), in principle? Is it even possible to “use AI” when completing this task?
&lt;/div&gt;
&lt;/html&gt;

&lt;p&gt;If answer to this Question 1 is “yes”, we can then proceed to the following:&lt;/p&gt;

&lt;html&gt;
&lt;div style=&quot;border: 2px solid #2a7ae2; background: rgba(42, 122, 226, 0.08); padding: 0.6em 1em; border-radius: 10px; margin: 1em 0; font-size: 1.1em;&quot;&gt;
&lt;strong&gt;Questions 2 and 3&lt;/strong&gt;: &lt;em&gt;Should&lt;/em&gt; I work with AI for this task? And if so, &lt;em&gt;how&lt;/em&gt;?
&lt;/div&gt;
&lt;/html&gt;

&lt;p&gt;In other words, the questions are “can I?”, “should I?” and “how?”. In remainder of this document, I will discuss some considerations that I think about in answering each of these questions in the context of using AI in academic social science research.&lt;/p&gt;

&lt;h1 id=&quot;question-1-can-ai-help-here-in-principle&quot;&gt;Question 1: Can AI help here in principle?&lt;/h1&gt;

&lt;p&gt;Before we can decide whether and how to work with AI, we need to decide if AI can be helpful for a given task &lt;em&gt;in principle&lt;/em&gt;. In short, is this a task where working with AI is even an option?&lt;/p&gt;

&lt;p&gt;In some cases, the answer to this question is straightforward. For example, tasks that can directly be reduced to generating images, text, or code given some prompt can clearly be accomplished by or with the help of AI tools. This could include tasks like drafting an abstract, writing data cleaning code, or generating an illustrative figure.&lt;/p&gt;

&lt;p&gt;In other cases, the role of AI might be more indirect. Generative AI tools can be used in a lot of different ways, and it’s worth being experimental and creative in considering potential uses. A wide range of tasks can be facilitated by generating text (or code), even when text generation is not the task per se. For example, a generative AI tool could conceivably help generate:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Instructions on how to approach or complete a task “by hand” (without AI).&lt;/li&gt;
  &lt;li&gt;Code to complete a task rather than executing the task directly.&lt;/li&gt;
  &lt;li&gt;Planning or organizational support to work through a task or project.&lt;/li&gt;
  &lt;li&gt;Suggestions of papers to read to learn more about a topic.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To give a more concrete example: perhaps you would like to conduct some face-to-face interviews with research participants. Generative AI is not great fit to execute these interviews directly, but could e.g. help generate an interview script, or make suggestions of how approach this task carefully (i.e. versions of point 1 above). There are many such possibilities depending on the task and context, and the only real way to identify them is to experiment in your particular setting to see what works. This said, I will here offer two general considerations for triaging AI opportunities based on my experience:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;“Going meta” on a task often presents opportunities for AI engagement. As alluded to above, AI might not help execute a task directly, but might help in thinking about how to approach it. (Or thinking about thinking about how to approach it etc.)&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Providing context&lt;/em&gt; is a key constraint. Many tasks require particular situational understanding or context about a project to be able to accomplish. So, the ability to provide your model with such context is a key constraint for its ability to be helpful with a given task at any altitude. (There is plenty of other writing about managing context, so I will not dive in too deeply here.)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A final point I will make in this section is that the answer to “Can AI help here in principle?” also clearly depends on what AI model or tool you are working with. A few points are worth mentioning about this.&lt;/p&gt;

&lt;p&gt;First, different models and tools have different specialties which are often advertised by providers – e.g. ChatGPT Codex advertises itself as “Built for real engineering work, across multiple surfaces” – and so it’s worth knowing about these different possibilities if you are looking for opportunities to work with AI.&lt;/p&gt;

&lt;p&gt;Second, I’ve found that personal experimenation is helpful for building intuition about the capabilities of different tools. By trying out different tasks with different models, you can build a sense of what works best for you in different settings.&lt;/p&gt;

&lt;p&gt;Third and finally, it’s worth keeping in mind that answers to this question will evolve as AI tools and models continue developing; accordingly, continual re-evaluation of approach seems reasonable to me.&lt;/p&gt;

&lt;h1 id=&quot;questions-2-and-3-should-i-work-with-ai-for-this-task-and-if-so-how&quot;&gt;Questions 2 and 3: &lt;em&gt;Should&lt;/em&gt; I work with AI for this task? And if so, &lt;em&gt;how&lt;/em&gt;?&lt;/h1&gt;

&lt;p&gt;The previous section (Question 1) focused on the question of whether AI can be be helpful for a given task &lt;em&gt;in principle&lt;/em&gt;. However, just because we &lt;em&gt;can&lt;/em&gt; work with AI for a given task doesn’t mean that we necessarily &lt;em&gt;should&lt;/em&gt;, for a variety of possible reasons. Hence, in this section, I will assume that the answer to question 1 is “yes”, and we now must make the decision of if and how to work with AI for a given task.&lt;/p&gt;

&lt;p&gt;At the outset I will say that there is a lot to consider here, and I am not going to pretend to capture everything. “Should” can include a lot of things, and it’s helpful to think about what your deeper goals are in the work you are doing, what is important about it, what are your priorities, and so on. Knowing as much as possible about AI, how it works, what are its strengths/weaknesses, what are its societal risks/implications and so on, will also surely help in refining your answers.&lt;/p&gt;

&lt;p&gt;For the purposes of this post, I am going to largely bracket some of the broader societal questions currently surrounding AI which can be treated more richly elsewhere – e.g. energy usage / environmental impact, labor market consequences, questions about intellectual property &amp;amp; attribution, AI safety, and so on. All I will say is that these considerations are many, and are worth engaging with in much the way that you might for any choice you make about contemporary consumption or usage. For some people, these considerations might outweigh any conceivable benefits of working with AI tools in much the way that some people choose not to eat meat, prefer to drive an electric car, or boycott social media.&lt;/p&gt;

&lt;p&gt;In the remainder of this post, I will assume that the reader is not someone who is categorically opposed to working with AI, and will offer some narrower further considerations for thinking about whether and how to work with AI for a given task. In particular, I have personally found four questions to be helpful in making this determination:&lt;/p&gt;

&lt;html&gt;
&lt;div style=&quot;border: 2px solid #2a7ae2; background: rgba(42, 122, 226, 0.08); padding: 0.6em 1em; border-radius: 10px; margin: 1em 0; font-size: 1.1em;&quot;&gt;
&lt;strong&gt;Four questions for deciding whether and how to work with AI&lt;/strong&gt;
&lt;ul style=&quot;list-style: none; padding-left: 0; margin-top: 0.5em; margin-bottom: 0;&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.5em;&quot;&gt;(i) How much do accuracy / correctness and &quot;getting the details right&quot; matter for this task?&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.5em;&quot;&gt;(ii) How easy is it to &lt;em&gt;verify&lt;/em&gt; whether this task was completed accurately once it is done?&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.5em;&quot;&gt;(iii) How much more difficult is it to do this task “by hand” vs. with AI?&lt;/li&gt;
&lt;li&gt;(iv) What is lost/gained in doing this task “by hand” vs. “with AI” more broadly?&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/html&gt;

&lt;p&gt;In the remainder of this section, I will reflect a bit futher on each of these questions, and why I think it is relevant to the decision of whether and how to work with AI for a given task.&lt;/p&gt;

&lt;h2 id=&quot;i-how-much-do-accuracy--correctness-and-getting-the-details-right-matter-for-this-task&quot;&gt;(i) How much do accuracy / correctness and “getting the details right” matter for this task?&lt;/h2&gt;

&lt;p&gt;This question is important for working with AI because, at least in their current form, LLM tools are fundamentally fallible, sometimes in non-obvious ways. For many research tasks, a key concern is &lt;a href=&quot;https://en.wikipedia.org/wiki/Hallucination_(artificial_intelligence)&quot;&gt;hallucination&lt;/a&gt;, wherein an AI tool might invent facts or citations, sometimes confidently asserting claims that are completely wrong.&lt;/p&gt;

&lt;p&gt;But even aside from hallucination, working with AI often requires describing a broader task or goal to a model, and allowing the model to fill in the execution details (much like a manager might delegate a task to another human worker). In doing this, there is inevitably some risk of misspecification or misinterpretation. This risk becomes more of a concern for tasks where getting the all the details right is especially important.&lt;/p&gt;

&lt;p&gt;So in short, &lt;strong&gt;the more that accuracy / correctness and “getting the details right” matter for a given task, the less likely I am to work with AI for that task&lt;/strong&gt;. Or if I do work with AI, it will be in a more “hands on” way (see below).&lt;/p&gt;

&lt;h2 id=&quot;ii-how-easy-is-it-to-verify-whether-this-task-was-completed-accurately-once-it-is-done&quot;&gt;(ii) How easy is it to &lt;em&gt;verify&lt;/em&gt; whether this task was completed accurately once it is done?&lt;/h2&gt;

&lt;p&gt;This question is a complement to (i). &lt;strong&gt;If it is relatively easy to audit or verify whether a task was completed accurately, then I will be more willing to delegate that task to AI&lt;/strong&gt;, even if accuracy is very important (since I can easily confirm whether the task was completed in the desired manner).&lt;/p&gt;

&lt;p&gt;An important corrolary to this point is that–at least for cases where quality matters–I am unlikely to delegate a task to AI that I would not be able to complete myself in principle. If some aspect of task quality matters, I need to have enough understanding of that task quality to verify whether or not is present.&lt;/p&gt;

&lt;p&gt;For example, if I am running a statistical analysis on some data, I am not going to delegate the analysis to AI unless I am confident (or able to become confident) that I can confirm that the statistical analysis makes sense and was done correctly.&lt;/p&gt;

&lt;h2 id=&quot;iii-how-much-more-difficult-is-it-to-do-this-task-by-hand-vs-with-ai&quot;&gt;(iii) How much more difficult is it to do this task “by hand” vs. with AI?&lt;/h2&gt;

&lt;p&gt;This is the basic cost-benefit question. Will it actually be easier to work with AI for this task, and to what extent? &lt;strong&gt;If a task is much easier to do with AI compared to “by hand”, I am naturally more inclined to work with AI for that task&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;iv-what-is-lostgained-in-doing-this-task-by-hand-vs-with-ai-more-broadly&quot;&gt;(iv) What is lost/gained in doing this task “by hand” vs. “with AI” more broadly?&lt;/h2&gt;

&lt;p&gt;I think about this final question in three main senses.&lt;/p&gt;

&lt;p&gt;First, it’s worthwhile to think about opportunity cost of working with AI (or not) for a given task. Working with AI for one task might allow me to focus my cognitive effort on another, higher leverage task instead. For example, when building the front-end design for a website, allowing AI to handle the HTML/CSS implementation details might free me up to focus on the more important and foundational question of “How should this website actually be designed?”&lt;/p&gt;

&lt;p&gt;Second, I find it helpful to think about the broader, longer-term implications – for me, for others – of working with AI for a given task.&lt;/p&gt;

&lt;p&gt;When thinking about longer-term personal consequences, a key question is often about learning and skill development or atrophy. If I repeatedly delegate a task to AI, I am less likely to build or retain the cognitive capacity to execute that task myself. This is not inherently good or bad – it depends on the task and my priorities. Is this a skill I want to build myself, or a topic I want to learn about? Do I want to become a better writer, coder etc, or do I care more about other things?&lt;/p&gt;

&lt;p&gt;The skill atrophy question can sometimes feel remote; after all, delegating a task to AI a single time is unlikely to undermine my capacity. But “just this once” can readily become a repeated habit, especially when using AI often offers a short-term win of completing a task quickly. A helpful thought experiment for accessing long-term consequences is: &lt;strong&gt;how would my life be if I &lt;em&gt;always&lt;/em&gt; relied on AI for this type of task?&lt;/strong&gt; How would I be if I &lt;em&gt;never&lt;/em&gt; wrote my own emails, or wrote my own code, or did my own research? etc. As Kant shows us, a version of this question can also be used to think about bigger picture implications for the world. &lt;strong&gt;How would the world be if &lt;em&gt;everyone&lt;/em&gt; always relied on AI for this type of task?&lt;/strong&gt; Would that be a world we want to live in?&lt;/p&gt;

&lt;p&gt;A third and final aspect of the “what is lost/gained?” question involves reflecting on what is actually important to me about a given task, and how that relates to working with AI for the task.&lt;/p&gt;

&lt;p&gt;For example, suppose I am writing a “thank you” note or apology for a friend. For such tasks, doing them &lt;em&gt;myself&lt;/em&gt; and in my own voice is an important part of what makes these tasks worthwhile. Even if AI could write my “thank you” more quickly and adeptly, using it would undermine an important aspect of the purpose of the task, which is me personally sitting down to express my appreciation. I feel similarly for many creative or expressive tasks. Expressing my own perspective is work that only I can do.&lt;/p&gt;

&lt;p&gt;While many research tasks have clearer “right” and “wrong” answers, this is not exclusively the case. For example, explaining why a piece of research is important to the world is a more personal, expressive question. Of course, AI can readily provide a plausible-sounding answer to this kind of question; but it won’t be &lt;em&gt;my&lt;/em&gt; answer – it won’t necessarily reflect what &lt;em&gt;I&lt;/em&gt; find resonant, important, wortwhile about the research.&lt;/p&gt;

&lt;h2 id=&quot;how-should-i-work-with-ai-for-this-task&quot;&gt;&lt;em&gt;How&lt;/em&gt; should I work with AI for this task?&lt;/h2&gt;

&lt;p&gt;In most of this section, I have discussed “using AI” for a given task as though it is a black-and-white choice (“to use” or “not to use”). However, in reality, there are many different ways that I might work with AI for a given task.&lt;/p&gt;

&lt;p&gt;For my work, the main aspect of “how to use AI” that matters to me is &lt;em&gt;the extent to which I am willing to abstract myself away from the details of the execution of the task&lt;/em&gt;. In other words, am I wholly delegating this task to AI? Or am I working with AI in a more hands-on, interactive way? There is a spectrum of possibilities here which roughly correspond with different sorts of AI tools. Here is roughly how I think about it:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Level of abstraction&lt;/th&gt;
      &lt;th&gt;Human/AI role&lt;/th&gt;
      &lt;th&gt;Example&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;0. Not abstracted&lt;/strong&gt; (Zero AI)&lt;/td&gt;
      &lt;td&gt;Human fully completes task without any AI engagement&lt;/td&gt;
      &lt;td&gt;N/A&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;1. Not abstracted&lt;/strong&gt; (AI advisor)&lt;/td&gt;
      &lt;td&gt;Human fully completes task, but with advice or brainstorming support from AI. No output directly generated by AI&lt;/td&gt;
      &lt;td&gt;Using ChatGPT to brainstorm an essay idea, then writing yourself&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;2. Partially abstracted&lt;/strong&gt; (AI assistant)&lt;/td&gt;
      &lt;td&gt;Human mainly completes task, but with assistance from AI&lt;/td&gt;
      &lt;td&gt;Writing / coding in Cursor, and periodically asking AI for help e.g. with formatting, rewording etc.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;3. Partially abstracted&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;AI mainly completes task, but with oversight, direction, feedback from human&lt;/td&gt;
      &lt;td&gt;Claude Code w/ more detailed oversight &amp;amp; code review; Cursor, implementing and reviewing one step at a time&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;4. Fully abstracted&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;AI completes whole task, human reviews output&lt;/td&gt;
      &lt;td&gt;Claude Code w/ ignore all permissions&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The answers to the four questions (i-iv) above help me decide how to place myself on this spectrum.&lt;/p&gt;

&lt;p&gt;For example, if (i) accuracy is very important in a given task and (ii) it’s difficult to verify accuracy, I am likely to stick closer to one of the “not abstracted” options, retaining a high amount of granular control over the task execution. Likewise, if execution details matter very little to me and it’s easy to verify accuracy, I am more willing to move towards more complete abstraction, wholly delegating the task to AI.&lt;/p&gt;

&lt;h1 id=&quot;evaluating-some-example-tasks&quot;&gt;Evaluating Some Example Tasks&lt;/h1&gt;

&lt;p&gt;The previous section of this post provided a framework for reflecting on when and how to work with AI for a given task. In this section, I will apply this framework to several example tasks to give a sense of how I apply it in practice.&lt;/p&gt;

&lt;html&gt;
&lt;div style=&quot;border: 2px solid #2a7ae2; background: rgba(42, 122, 226, 0.08); padding: 0.6em 1em; border-radius: 10px; margin: 1em 0;&quot;&gt;
&lt;p&gt;&lt;strong&gt;Example task:&lt;/strong&gt; formatting a LaTeX table in a research paper.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Details:&lt;/strong&gt; LaTeX is a typesetting language; the user writes code that looks like the image on the left below. The code is then &quot;compiled&quot; to generate a professional-looking table like what is on the right (example from a &lt;a href=&quot;https://www.nber.org/papers/w34441&quot;&gt;recent paper&lt;/a&gt;).&lt;/p&gt;
&lt;!-- Side-by-side images: proportional equal-height row that fills the available width; stacks on mobile --&gt;
&lt;div class=&quot;post-image-pair&quot; data-max-height=&quot;300&quot; style=&quot;--pair-gap: 1rem; --pair-width: 100%;&quot;&gt;
&lt;div class=&quot;post-image-pair__cell&quot;&gt;
&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-06-16-ai-use-framework/latex_code.jpg&quot; alt=&quot;LaTeX source code for a research table&quot; loading=&quot;lazy&quot; /&gt;
&lt;/div&gt;
&lt;div class=&quot;post-image-pair__cell&quot;&gt;
&lt;img class=&quot;post-image post-image--pair&quot; src=&quot;/figs/2026-06-16-ai-use-framework/compiled_table.jpg&quot; alt=&quot;The compiled, professionally formatted table&quot; loading=&quot;lazy&quot; /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
(function () {
  if (window.__imagePairInit) return;
  window.__imagePairInit = true;

  function setupPair(pair) {
    var cells = pair.querySelectorAll(&quot;.post-image-pair__cell&quot;);
    var imgs = pair.querySelectorAll(&quot;img.post-image--pair&quot;);
    if (cells.length &lt; 2 || imgs.length &lt; 2) return false;
    var sum = 0, ratios = [];
    for (var i = 0; i &lt; imgs.length; i++) {
      if (!imgs[i].naturalWidth) return false; // not measurable yet
      var r = imgs[i].naturalWidth / imgs[i].naturalHeight;
      ratios[i] = r;
      sum += r;
    }
    for (var j = 0; j &lt; cells.length; j++) cells[j].style.flexGrow = ratios[j];
    var maxH = parseFloat(pair.getAttribute(&quot;data-max-height&quot;)) || 300;
    var gap = parseFloat(getComputedStyle(pair).columnGap) || 16;
    // Cap the row so its equal height never exceeds maxH; below that it fills the width.
    pair.style.maxWidth = Math.round(maxH * sum + gap) + &quot;px&quot;;
    return true;
  }

  function setupAll() {
    var pairs = document.querySelectorAll(&quot;.post-image-pair&quot;);
    for (var i = 0; i &lt; pairs.length; i++) {
      if (!pairs[i].__paired &amp;&amp; setupPair(pairs[i])) pairs[i].__paired = true;
    }
  }

  if (document.readyState !== &quot;loading&quot;) setupAll();
  else document.addEventListener(&quot;DOMContentLoaded&quot;, setupAll);
  window.addEventListener(&quot;load&quot;, setupAll);
  document.addEventListener(&quot;load&quot;, function (e) {
    if (e.target &amp;&amp; e.target.classList &amp;&amp; e.target.classList.contains(&quot;post-image--pair&quot;)) setupAll();
  }, true);
})();
&lt;/script&gt;

&lt;/div&gt;
&lt;/html&gt;

&lt;p&gt;Is formatting (or reformatting) a LaTeX table a good task for AI? Let’s apply the framework from above to think about this:&lt;/p&gt;

&lt;html&gt;
&lt;div class=&quot;q2-expandable&quot;&gt;
&lt;style&gt;
.q2-expandable .q2-toggle { position: absolute; left: -9999px; }
.q2-expandable .q2-sub-row { display: none; }
.q2-expandable .q2-toggle:checked ~ table .q2-sub-row { display: table-row; }
.q2-expandable .q2-toggle-label { cursor: pointer; color: #2a7ae2; font-weight: normal; font-size: 0.8em; margin-left: 0.5em; white-space: nowrap; user-select: none; }
.q2-expandable .q2-toggle-label:hover { text-decoration: underline; }
.q2-expandable .q2-hide { display: none; }
.q2-expandable .q2-toggle:checked ~ table .q2-show { display: none; }
.q2-expandable .q2-toggle:checked ~ table .q2-hide { display: inline; }
.q2-expandable .nudge { display: inline-block; padding: 0.15em 0.55em; border-radius: 6px; font-weight: 600; font-size: 0.9em; line-height: 1.4; }
.q2-expandable .nudge-up { background: rgba(54, 160, 106, 0.18); color: #2f9c66; }
.q2-expandable .nudge-down { background: rgba(207, 131, 58, 0.20); color: #c47526; }
.q2-expandable .nudge-neutral { background: rgba(130, 130, 130, 0.20); color: inherit; }
&lt;/style&gt;
&lt;input type=&quot;checkbox&quot; id=&quot;q2toggle&quot; class=&quot;q2-toggle&quot; /&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;th&gt;AI usage implication&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style=&quot;background: rgba(42, 122, 226, 0.16);&quot;&gt;
&lt;td&gt;&lt;strong&gt;Q1: Can AI help in principle?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt; — translating a table design into LaTeX is fundamentally a code-generation task, which AI tools can readily do.&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;nudge nudge-neutral&quot;&gt;AI is an option&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background: rgba(150, 100, 220, 0.20);&quot;&gt;
&lt;td&gt;&lt;strong&gt;Q2: Should I work with AI? And How?&lt;/strong&gt; &lt;label for=&quot;q2toggle&quot; class=&quot;q2-toggle-label&quot;&gt;&lt;span class=&quot;q2-show&quot;&gt;[show sub-questions ▸]&lt;/span&gt;&lt;span class=&quot;q2-hide&quot;&gt;[hide sub-questions ▾]&lt;/span&gt;&lt;/label&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;On balance, yes&lt;/strong&gt; — the considerations below mostly point toward this being a good task to delegate to AI.&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;nudge nudge-up&quot;&gt;Willing to delegate to AI (level 3–4)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class=&quot;q2-sub-row&quot; style=&quot;background: rgba(150, 100, 220, 0.07);&quot;&gt;
&lt;td style=&quot;padding-left: 1.5em;&quot;&gt;&lt;strong&gt;(i) Does accuracy matter?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes, a lot&lt;/strong&gt; — the numbers and formatting in a published table need to be exactly right.&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;nudge nudge-down&quot;&gt;↓ Less willing to delegate to AI&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class=&quot;q2-sub-row&quot; style=&quot;background: rgba(150, 100, 220, 0.07);&quot;&gt;
&lt;td style=&quot;padding-left: 1.5em;&quot;&gt;&lt;strong&gt;(ii) How easy is it to verify?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Very easy&lt;/strong&gt; — I can compile the table and visually confirm the formatting and numbers are correct and as desired.&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;nudge nudge-up&quot;&gt;↑ More willing to delegate to AI&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class=&quot;q2-sub-row&quot; style=&quot;background: rgba(150, 100, 220, 0.07);&quot;&gt;
&lt;td style=&quot;padding-left: 1.5em;&quot;&gt;&lt;strong&gt;(iii) How much harder is it by hand vs. with AI?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Much harder by hand&lt;/strong&gt; — LaTeX table syntax is finicky, idiosyncratic, and arduous to write manually.&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;nudge nudge-up&quot;&gt;↑ More willing to delegate to AI&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class=&quot;q2-sub-row&quot; style=&quot;background: rgba(150, 100, 220, 0.07);&quot;&gt;
&lt;td style=&quot;padding-left: 1.5em;&quot;&gt;&lt;strong&gt;(iv) What is lost / gained by hand vs. with AI?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;For me, little is lost by working with AI for this task&lt;/strong&gt; — I accumulate less LaTeX formatting expertise, which I am fine with because I don&apos;t care about becoming a LaTeX formatting expert; by working with AI, I also free up time to focus on higher-value questions like “what is the best way to format this table?” to clearly communicate the idea.&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;nudge nudge-up&quot;&gt;↑ More willing to delegate to AI&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/html&gt;

&lt;p&gt;So, overall, given my personal priorities, formatting a LaTeX table is a task that I am fairly comfortable delegating to AI, with the caveat that I should carefully validate for correctness afterwards.&lt;/p&gt;

&lt;p&gt;Now, let’s consider a different task.&lt;/p&gt;

&lt;html&gt;
&lt;div style=&quot;border: 2px solid #2a7ae2; background: rgba(42, 122, 226, 0.08); padding: 0.6em 1em; border-radius: 10px; margin: 1em 0;&quot;&gt;
&lt;p&gt;&lt;strong&gt;Example task:&lt;/strong&gt; cleaning a raw dataset for analysis.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Details:&lt;/strong&gt; Before any analysis can happen, a raw dataset usually needs cleaning — handling missing values, recoding and constructing variables, merging files, filtering observations, and so on. This involves many small judgment calls, each of which can be consequential for the final results. Could I hand this task off to AI?&lt;/p&gt;
&lt;/div&gt;
&lt;/html&gt;

&lt;html&gt;
&lt;div class=&quot;q2-expandable&quot;&gt;
&lt;input type=&quot;checkbox&quot; id=&quot;q2toggle2&quot; class=&quot;q2-toggle&quot; /&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;th&gt;AI usage implication&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style=&quot;background: rgba(42, 122, 226, 0.16);&quot;&gt;
&lt;td&gt;&lt;strong&gt;Q1: Can AI help in principle?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt; — data cleaning is largely a matter of writing code, which AI tools can readily produce.&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;nudge nudge-neutral&quot;&gt;AI is an option&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background: rgba(150, 100, 220, 0.20);&quot;&gt;
&lt;td&gt;&lt;strong&gt;Q2: Should I work with AI? And How?&lt;/strong&gt; &lt;label for=&quot;q2toggle2&quot; class=&quot;q2-toggle-label&quot;&gt;&lt;span class=&quot;q2-show&quot;&gt;[show sub-questions ▸]&lt;/span&gt;&lt;span class=&quot;q2-hide&quot;&gt;[hide sub-questions ▾]&lt;/span&gt;&lt;/label&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;On balance, only minimally&lt;/strong&gt; — the considerations below mostly point away from delegating this task.&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;nudge nudge-down&quot;&gt;Minimally willing to delegate to AI (level 0–2)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class=&quot;q2-sub-row&quot; style=&quot;background: rgba(150, 100, 220, 0.07);&quot;&gt;
&lt;td style=&quot;padding-left: 1.5em;&quot;&gt;&lt;strong&gt;(i) Does accuracy matter?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes, a lot&lt;/strong&gt; — small cleaning choices can be consequential for the final results, and I need to be able to stand behind them.&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;nudge nudge-down&quot;&gt;↓ Less willing to delegate to AI&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class=&quot;q2-sub-row&quot; style=&quot;background: rgba(150, 100, 220, 0.07);&quot;&gt;
&lt;td style=&quot;padding-left: 1.5em;&quot;&gt;&lt;strong&gt;(ii) How easy is it to verify?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Hard&lt;/strong&gt; — to be confident it is right, I would have to step through essentially every line, since errors can be subtle yet consequential.&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;nudge nudge-down&quot;&gt;↓ Less willing to delegate to AI&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class=&quot;q2-sub-row&quot; style=&quot;background: rgba(150, 100, 220, 0.07);&quot;&gt;
&lt;td style=&quot;padding-left: 1.5em;&quot;&gt;&lt;strong&gt;(iii) How much harder is it by hand vs. with AI?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Arduous by hand&lt;/strong&gt; — but because I have to verify the output line-by-line anyway, working with AI saves little time; I might as well write the logic myself.&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;nudge nudge-down&quot;&gt;↓ Less willing to delegate to AI&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class=&quot;q2-sub-row&quot; style=&quot;background: rgba(150, 100, 220, 0.07);&quot;&gt;
&lt;td style=&quot;padding-left: 1.5em;&quot;&gt;&lt;strong&gt;(iv) What is lost / gained by hand vs. with AI?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;A lot can be lost&lt;/strong&gt; — doing it myself builds my sense of the data and what is actually happening in the analysis (the difference between reading a book and reading a summary of it).&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;nudge nudge-down&quot;&gt;↓ Less willing to delegate to AI&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/html&gt;

&lt;p&gt;So, at least for me, “cleaning a dataset” is something I am less willing to largely delegate to AI. If I do work with AI here it would be in far less abstracted way; for example, I might have AI propose or implement the task one step at a time, and manually check/confirm that each step makes sense before moving forward.&lt;/p&gt;

&lt;p&gt;A few more rapid-fire examples from my perspective:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Asking for comments / feedback on existing work; brainstorming; making suggestions&lt;/strong&gt;. Good task. Why? Essentially, because the accuracy/quality stakes are very low. If AI gives 10 comments on my work and 9 are bad/unhelpful, I can just ignore those and address the one helpful comment.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Generating an abstract for an already-written paper&lt;/strong&gt;. Borderline task for reasons above.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Finding related research papers to read on a topic&lt;/strong&gt;. Pretty good task, again because free disposal.&lt;/li&gt;
  &lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Again, the goal here is not to tell you that you should draw the same conclusions as me about when and how to work with AI. These conclusions depend on your own goals, priorities, and tasks.&lt;/p&gt;

&lt;h1 id=&quot;complicating-the-task-framework&quot;&gt;Complicating the Task Framework&lt;/h1&gt;

&lt;p&gt;So far in this post, I have assumed that the set of tasks that make up a given project is fixed at the outset, and that our choice, consequently is whether and how to use AI for a given task.&lt;/p&gt;

&lt;p&gt;However, this is not necessarily the case. In some cases, access to AI might present new and different ways to organize or approach a project. In other words, AI might allow us to change the set of tasks, perhaps enabling us to transform one task into a different one, or presenting the possibility of approaching a set of tasks in a new way.&lt;/p&gt;

&lt;p&gt;Let me give you an example. In a recent academic project, I wanted to manually review a set of around 100 observations in a data set for validation purposes. The trouble was that these were complex observations, involving multiple screenshots as well as structured data, which all needed to be examined together.&lt;/p&gt;

&lt;p&gt;Could AI reasonably play a role in this task, taking over the verification for me? Naively deploying the framework above would suggest an answer of “probably not”. After all, this is a task where accuracy is paramount, its entire value lost if delegated to AI.&lt;/p&gt;

&lt;p&gt;However, with a bit of re-imaginging of the task, a more reasonable use of AI emerged. Using Claude Code, I was able to build a custom app interface to support the manual inspection that I planned to do; it displayed all the key information for each observation including associated screenshots and metadata, and even included LLM-generated “hints” for the manual validation task I was doing. The interface allowed me to then mark the desired validation fields, which were stored for further analysis.&lt;/p&gt;

&lt;p&gt;Here is a screenshot of the interface:&lt;/p&gt;

&lt;!-- Single centered image (responsive via CSS variables) --&gt;
&lt;div class=&quot;post-image-wrap&quot; style=&quot;--img-width: 65%; --img-max-width: 100%;&quot;&gt;
  &lt;p&gt;&lt;img class=&quot;post-image&quot; src=&quot;/figs/2026-06-16-ai-use-framework/example_interface.jpg&quot; alt=&quot;Data-labeling interface comparing Uber and Lyft ride options for the same trip&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Ultimately, the interface allowed me to complete the validation task much more quickly and accurately than I would have been able to do otherwise.&lt;/p&gt;

&lt;p&gt;Building the interface itself was a “good” AI task because I could readily verify that the interface worked in the way that I hoped, and the details of the implementation (or understanding it) were not important to me (since I am not trying to become a software engineer).&lt;/p&gt;

&lt;p&gt;Of course, I theoretically &lt;em&gt;could have&lt;/em&gt; built something like this in a world without LLM tools — but the cost and complexity would have been so unreasonable given the scope of the task that I probably would never have considered it.&lt;/p&gt;

&lt;p&gt;In short, AI here presented an alternative way to approach the broader task of “manually inspect and validate this data”. Rather than directly offload this task to AI, I could instead use AI to build the interface and facilitate its completion more readily.&lt;/p&gt;

&lt;p&gt;Identifying these kinds of possibilities requires a bit more creative work. I’ve found that this creativity is facilitated through experimentation, observation, and familiarity with the range of possible ways of engaging with LLM tools.&lt;/p&gt;

&lt;h1 id=&quot;what-does-this-look-like-for-me&quot;&gt;What does this look like for me?&lt;/h1&gt;

&lt;p&gt;To conclude, I want to share a few final thoughts about where the above considerations have landed me in terms of my practical AI worklow as an academic social science researcher.&lt;/p&gt;

&lt;p&gt;Personally, I find that most of my research tasks live somewhere between 0 and 3 on the AI abstraction spectrum outlined above. I will rarely fully delegate a research task to AI, mainly because accuracy/quality are very important for my work, and I want to check and keep a close eye on any research steps I am taking.&lt;/p&gt;

&lt;p&gt;Because of this, for most of my personal research work, my preferred interface is Cursor for a few main reasons.&lt;/p&gt;

&lt;p&gt;First, working within Cursor, &lt;strong&gt;I can readily incorporate all the context that I need&lt;/strong&gt;. I typically try to organize my projects so that there is one high-level folder that includes various project aspects (e.g. data, code, results, write-ups, references, planning materials etc.); I can then open Cursor at this altitude for shared context, even if I am working on a specific part of project only.&lt;/p&gt;

&lt;p&gt;Second, Cursor is &lt;strong&gt;very flexible across different types of AI uses&lt;/strong&gt;. Sometimes, I just want to ask a question with relevant context, sometimes I want to brainstorm, sometimes I want to get feedback or make changes, sometimes I want to build a whole thing in more agentic mode. Cursor allows me to do all of these with relevant context.&lt;/p&gt;

&lt;p&gt;Third, I find the Cursor UI very useful; it’s nice to be able to refer to specific lines or files, and to generate new documents in the same space etc and see clear diffs of what was added or removed.&lt;/p&gt;

&lt;p&gt;Finally, since Cursor is built on VSCode, it fits well with my existing workflows (which previously relied on VSCode), and can play nicely with other helpful VSCode plugins, e.g. for markdown or LaTeX formatting.&lt;/p&gt;

&lt;p&gt;In addition to Cursor, I’ll tend to reach for Claude Code if I want to do a more fully-delegated AI task, where I am less worried about the details.&lt;/p&gt;

&lt;p&gt;I will conclude by reiterating a final time: this is just the approach that works for me, based on my above thinking, priorities, and the types of tasks that I tend to do. You might have different priorities or different tasks which imply I different set of choices about whether and how to work with AI, if at all.&lt;/p&gt;
</description>
        <pubDate>Tue, 16 Jun 2026 00:00:00 +0000</pubDate>
        <link>http://jeffreyfossett.com/2026/06/16/ai-use-framework.html</link>
        <guid isPermaLink="true">http://jeffreyfossett.com/2026/06/16/ai-use-framework.html</guid>
        
        <category>llm</category>
        
        <category>technology</category>
        
        
      </item>
    
      <item>
        <title>Seance for a Stand of Oaks</title>
        <description>&lt;p&gt;With my friend Elise, I have a piece in &lt;a href=&quot;https://www.quinobequin.press/issue7&quot;&gt;Issue 7 of the Quinobequin Review&lt;/a&gt;. The issue theme is “Magic”. Our piece is called “Seance for a Stand of Oaks” and is about the Waverley Oaks which once stood at &lt;a href=&quot;https://en.wikipedia.org/wiki/Beaver_Brook_Reservation&quot;&gt;Beaver Brook Reservation&lt;/a&gt;. The Q review is print-only, so I would encourage you to order a copy if you would like to read the piece (along with other great local art &amp;amp; writing).&lt;/p&gt;

&lt;!-- Single centered image (responsive via CSS variables) --&gt;
&lt;div class=&quot;post-image-wrap&quot; style=&quot;--img-width: 65%; --img-max-width: 100%;&quot;&gt;
  &lt;p&gt;&lt;img class=&quot;post-image&quot; src=&quot;/figs/2026-05-27-seance-oaks/waverley_oaks.jpg&quot; alt=&quot;Upward view of a large leafless oak tree against a blue sky&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;

</description>
        <pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate>
        <link>http://jeffreyfossett.com/2026/05/27/seance-oaks.html</link>
        <guid isPermaLink="true">http://jeffreyfossett.com/2026/05/27/seance-oaks.html</guid>
        
        <category>art</category>
        
        <category>writing</category>
        
        
      </item>
    
  </channel>
</rss>
