<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>posts on harleystagner.com</title>
    <link>https://www.harleystagner.com/posts/</link>
    <description>Recent content in posts on harleystagner.com</description>
    <generator>Hugo 0.127.0</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 29 Jan 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.harleystagner.com/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>BYOK to Tangent Sync Workflow</title>
      <link>https://www.harleystagner.com/posts/byok-to-tangent-sync-workflow/</link>
      <pubDate>Thu, 29 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://www.harleystagner.com/posts/byok-to-tangent-sync-workflow/</guid>
      <description>&lt;p&gt;I just received my &lt;a href=&#34;https://byok.io/&#34;&gt;BYOK&lt;/a&gt; device and I couldn&amp;rsquo;t be happier with it. One thing that I have been experimenting with since I received it are different workflows. Most mornings I do a brain dump in a daily note with the heading &lt;code&gt;# Morning Pages&lt;/code&gt; . Over the years I have used different devices for this (Pomera DM250, iPhone, SuperNote with OCR, Laptop, iPad, and now the BYOK). One thing that is always a common part of this routine is that the note always ends up on my local computer. This is usually in an Obsidian vault, but now I&amp;rsquo;m giving &lt;a href=&#34;https://tangentnotes.com&#34;&gt;Tangent Notes&lt;/a&gt; a go. The sync workflow I&amp;rsquo;ll be writing about in this article is tool agnostic for the destination as the files just end up as plain text markdown files. The most important point is that it goes from my BYOK to my desktop without using disk mode on the BYOK.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-workflow&#34;&gt;The Workflow&lt;/h1&gt;&#xA;&lt;p&gt;For this workflow you&amp;rsquo;ll need the following tools:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;BYOK device set to sync with &lt;a href=&#34;https://byok.io/studio&#34;&gt;BYOK Studio&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;BYOK Studio account with Google Drive connection and Google Drive set to automatically sync when the BYOK syncs&lt;/li&gt;&#xA;&lt;li&gt;Github account with a repository set up to hold your notes (in my case, I have my entire Tangent Notes Workspace set up as a repository)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://zapier.com&#34;&gt;Zapier&lt;/a&gt; account for the sync automation&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;With all of these components in place, these are my workflow steps:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Write my morning pages with my BYOK device. The title is the date in the format of &lt;code&gt;YYYY-MM-DD&lt;/code&gt; (2026-01-29, for example). The first line is a markdown heading 1 that reads &lt;code&gt;# Morning Pages&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;I turn off the device when I am finished writing. This triggers an automatic sync with BYOK Studio.&lt;/li&gt;&#xA;&lt;li&gt;BYOK Studio saves the new file to my Google Drive in a specified folder.&lt;/li&gt;&#xA;&lt;li&gt;I have a Zapier job (Zap) that watches the Google Drive for new files. If the file contents begin with &lt;code&gt;# Morning Pages&lt;/code&gt;, that file is sent over to a GitHub repository with a &lt;code&gt;*.md&lt;/code&gt; extension (2026-01-29.md, for example). The file is pushed to a specified folder path I have designated for daily notes.&lt;/li&gt;&#xA;&lt;li&gt;I have this remote GitHub repository set up on my local computer so that all I need to do is issue a &lt;code&gt;pull&lt;/code&gt; from the repository to get the new file right to my Tangent Workspace (I&amp;rsquo;ve written a &lt;a href=&#34;https://www.raycast.com/&#34;&gt;Raycast&lt;/a&gt; user script to make this easier).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;zapier-job&#34;&gt;Zapier Job&lt;/h2&gt;&#xA;&lt;p&gt;The Zapier automation does most of the heavy lifting in this workflow. The automation is five steps:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Google Drive Trigger: A new file is created in the BYOK designated Google Drive folder.&lt;/li&gt;&#xA;&lt;li&gt;Files by Zapier Action: Extract the contents of the Google Drive file.&lt;/li&gt;&#xA;&lt;li&gt;Filter by Zapier Action: Only continue if, upon examining the contents of the file, the string &lt;code&gt;# Morning Pages&lt;/code&gt; is matched.&lt;/li&gt;&#xA;&lt;li&gt;Formatter by Zapier Action: This step replaces the .txt file extension with .md (this is a personal preference and depends on your use case. My file will end up in Tangent so I turn it into a markdown file.&lt;/li&gt;&#xA;&lt;li&gt;GitHub Action: Finally, the file is created in the GitHub repository that is specified.&#xA;&lt;br&gt;&#xA;I&amp;rsquo;ve created a &lt;a href=&#34;https://zapier.com/shared/06157c1fc9903930fe41bc13b5af9e381e01df29&#34;&gt;template for this Zap&lt;/a&gt; if you would like to import the automation into your own account.&lt;br&gt;&#xA;&lt;figure class=&#34;centered-figure&#34;&gt;&#xA;  &lt;img src=&#34;https://www.harleystagner.com/images/zapier-workflow.png&#34; alt=&#34;Zapier Workflow for GitHub Sync&#34; class=&#34;responsive-image&#34;&gt;&#xA;  &lt;figcaption&gt;Zapier Workflow for GitHub Sync&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;laptop-workflow&#34;&gt;Laptop Workflow&lt;/h2&gt;&#xA;&lt;p&gt;Later, if I want to interact further with that note that I started on BYOK and it has made its journey to GitHub, all I need to do is a &lt;code&gt;git pull&lt;/code&gt;. Likewise, if I want to sync files back up to GitHub from Tangent, I can do a &lt;code&gt;git push&lt;/code&gt;. Now I can write on my distraction-free BYOK before logging into my laptop for the day with the peace of mind that I can revisit the writing later with my tool of choice.&#xA;&lt;figure class=&#34;centered-figure&#34;&gt;&#xA;  &lt;img src=&#34;https://www.harleystagner.com/images/tangent-morning-page-example.png&#34; alt=&#34;Morning Pages in Tangent Notes&#34; class=&#34;responsive-image&#34;&gt;&#xA;  &lt;figcaption&gt;Morning Pages in Tangent Notes&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;bonus-raycast-scripts&#34;&gt;Bonus: Raycast Scripts&lt;/h1&gt;&#xA;&lt;p&gt;For those who are using Raycast, these are the user scripts that I created for &lt;code&gt;git pull&lt;/code&gt; and &lt;code&gt;git push&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;git-pull&#34;&gt;GIT PULL&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash -l&#xA;&#xA;# Required parameters:&#xA;# @raycast.schemaVersion 1&#xA;# @raycast.title Git Pull Tangent&#xA;# @raycast.mode fullOutput&#xA;&#xA;# Optional parameters:&#xA;# @raycast.packageName Git Tools&#xA;# @raycast.icon 🐙&#xA;&#xA;cd &amp;#34;$HOME/Documents/Tangent/HSTAGNER-JD&amp;#34; || exit 1&#xA;git pull origin main&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;git-push&#34;&gt;GIT PUSH&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash -l&#xA;&#xA;# Required parameters:&#xA;# @raycast.schemaVersion 1&#xA;# @raycast.title Git Push Tangent&#xA;# @raycast.mode fullOutput&#xA;&#xA;# Optional parameters:&#xA;# @raycast.packageName Git Tools&#xA;# @raycast.icon 🐙&#xA;# @raycast.needsConfirmation true&#xA;&#xA;cd &amp;#34;$HOME/Documents/Tangent/HSTAGNER-JD&amp;#34; || exit 1&#xA;&#xA;echo &amp;#34;Running git status...&amp;#34;&#xA;git status&#xA;&#xA;echo&#xA;echo &amp;#34;Staging changes...&amp;#34;&#xA;git add .&#xA;&#xA;echo&#xA;echo &amp;#34;Committing...&amp;#34;&#xA;git commit -m &amp;#34;Tangent Push&amp;#34;&#xA;&#xA;echo&#xA;echo &amp;#34;Pushing to origin/main...&amp;#34;&#xA;git push -u origin main&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Reading is Rebellion</title>
      <link>https://www.harleystagner.com/posts/reading-is-rebellion/</link>
      <pubDate>Mon, 20 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://www.harleystagner.com/posts/reading-is-rebellion/</guid>
      <description>&lt;p&gt;On January 20, 2025, a convicted felon became the 47th President of the United States. I’ve seen many shake their head in disbelief, wondering how we got here. I look back to the mid 1800s and partially lay the blame on the telegraph.&lt;/p&gt;&#xA;&lt;p&gt;In Walden, Henry David Thoreau wrote:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“We are in great haste to construct a magnetic telegraph from Maine to Texas; but Maine and Texas, it may be, have nothing important to communicate… We are eager to tunnel under the atlantic and bring the old world some weeks nearer to the new; but perchance the first news that will leak through into the broad flapping American ear will be that of Princess Adelaide has the whooping cough.”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I wonder what Thoreau would have thought about Jack Dorsey’s inaugural tweet, “just setting up my twttr” ?&lt;/p&gt;&#xA;&lt;p&gt;Decontextualized information, which I will shorten to the more colloquial, bullshit, is how we got here. Now we must rebel and reading is rebellion. Reading books, with actual context, and ruminating on the author’s meaning is an attack against the status quo and a much needed detour when the entire world seems to be hellbent on careening into a wall of idiocy.&lt;/p&gt;&#xA;&lt;h2 id=&#34;we-are-what-we-meme&#34;&gt;We Are What We Meme&lt;/h2&gt;&#xA;&lt;p&gt;In his book-length argument that characterized television as the death knell for reasoned discourse in the United States, Dr. Neil Postman wrote:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“We do not measure a culture by its output of undisguised trivialities but by what it claims as significant. Therein is our problem, for television is at its most trivial and, therefore, most dangerous when its aspirations are high, when it presents itself as a carrier of important cultural conversations.”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;His book, “Amusing Ourselves to Death,” was written in 1985. In 2025, replace the word television with social media and the reasons for the devolution of our culture become clear. The ease with which “information” can be shared leaps exponentially beyond what Morse could have imagined in 1844 when he sent his first electric missive, “What hath God wrought?”. What, indeed.&lt;/p&gt;&#xA;&lt;p&gt;The problem with information is that most of it is bullshit without proper context. Just because you can share it faster than your emotional intelligence can process it, doesn’t mean you truly understand what you have shared. There is still no such shortcut for wisdom. Reading books is an act of rebellion.&lt;/p&gt;&#xA;&lt;h2 id=&#34;propaganda-doesnt-exist&#34;&gt;Propaganda Doesn’t Exist&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How delighted would be all the kings, czars and führers of the past (and commisars of the present) to know that censorship is not a necessity when all political discourse takes the form of a jest.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;-Neil Postman, Amusing Ourselves to Death&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Propaganda no longer exists as a singular category. You can’t seek out propaganda. If the information you are exposed to is algorithmically chosen, the entire medium is propaganda.&lt;/p&gt;&#xA;&lt;p&gt;Disinformation and anger get the clicks. Spreading it as truth or debunking keeps you engaged. They are two sides of the same coin. You’re either waiting to see someone smash that like button or waiting to verbally trash any philistine who has the audacity to disagree. It doesn’t really matter which, as long as you stay on the platform to see the next algorithmic slice of anger slide into your feed. Reading books is an act of rebellion.&lt;/p&gt;&#xA;&lt;h2 id=&#34;reading-books-is-an-act-of-rebellion&#34;&gt;Reading Books is an Act of Rebellion&lt;/h2&gt;&#xA;&lt;p&gt;Books are algorithm proof. You can’t de-platform a book. A book comes with built-in context and you are free to examine it. A book can’t fit on a meme and there are well beyond 140 or even 280 characters.&lt;/p&gt;&#xA;&lt;p&gt;As a nation, I believe one of the best ways to slow the entropy of anti-intellectualism is to read books. While pleasure reading has its place, also read history, philosophy, memoirs, and essays. Read deeply and absorb the message. Take notes and critically think about what the author is saying, then contextualize what you read into your own life experience. Write about it. Don’t waste your intellect drifting through the algorithmic tides of information. Reading is rebellion.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Note Taking Content Broke My Writing</title>
      <link>https://www.harleystagner.com/posts/note-taking-content-broke-my-writing/</link>
      <pubDate>Sun, 12 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://www.harleystagner.com/posts/note-taking-content-broke-my-writing/</guid>
      <description>&lt;p&gt;I think watching note taking videos broke my brain. Thinking back to high school and college, I used to write some quite serviceable essays. I didn’t need linking, a personal wiki, transclusions, block references, or even atomic notes. I had primary sources, a few pages of notes, and a handful of index cards. I enjoyed writing this way. My thoughts flowed freely and I was able to draft without thinking too hard about the process.&lt;/p&gt;&#xA;&lt;p&gt;Now I have a tendency to get paralyzed in thought trying to map out an essay or article by meticulously crafting it from atomic notes that I have carefully curated. It&amp;rsquo;s bullshit. Somewhere along the way I forgot that the article is the output. Not the notes, the article.&lt;/p&gt;&#xA;&lt;p&gt;I suppose in my mind I may have imagined I was crafting a bespoke piece of architecture, brick by hand-selected brick, like a master mason. My writing process isn&amp;rsquo;t masonry though. My structures aren&amp;rsquo;t orderly. There is no geometric perfection.&lt;/p&gt;&#xA;&lt;p&gt;When I write, truly write, with passion, I&amp;rsquo;m building sandcastles along the shore amidst a rising tide. It&amp;rsquo;s messy. The building materials are ephemeral. The passages ebb and flow. Sometimes they are swept away and something new built in their place.&lt;/p&gt;&#xA;&lt;p&gt;I trusted my brain once. My only brain. I don&amp;rsquo;t actually own a second one. Thinking that I did was stifling. My brain finds patterns and connections. It brings in anecdotes I&amp;rsquo;ve read and relevant experiences I&amp;rsquo;ve had. These make my writing more contextually rich.&lt;/p&gt;&#xA;&lt;p&gt;Note taking content is addicting. It appeals to the part of my brain that wants to create order from chaos. It gives me a dopamine hit that is tagged, collated, and indexed straight into my pleasure center. I understand why these systems are created. Without elaborate systems to take notes, there&amp;rsquo;s no content about taking notes. Watching someone write on an index card or piece of paper is boring.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve even done it myself. I&amp;rsquo;ve taken notes about my elaborate system of taking notes to craft an article about taking notes. I guess I was afraid to write something real.&lt;/p&gt;&#xA;&lt;p&gt;I have been fascinated by this toxic note taking orbouros long enough. The output is the article. So, I&amp;rsquo;m going to grab some paper and pencil, maybe scatter a few note cards around, and let my brain build some sandcastles.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Importing Apple Notes to TheBrain App Using Shortcuts</title>
      <link>https://www.harleystagner.com/posts/import-apple-notes-to-thebrain-app-using-shortcuts/</link>
      <pubDate>Fri, 13 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://www.harleystagner.com/posts/import-apple-notes-to-thebrain-app-using-shortcuts/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently started using &lt;a href=&#34;https://thebrain.com&#34;&gt;TheBrain App&lt;/a&gt; more and I&amp;rsquo;m finding it extremely powerful to make connections between ideas. I&amp;rsquo;ve been so impressed that I&amp;rsquo;m likely to start using it as my daily PKM driver. However, I&amp;rsquo;m still a heavy user of Apple Notes and I like its seamless sync and ability to both enter and retrieve information quickly. So, I will still be using Apple Notes to, for example, write book or video notes after I have finished processing &lt;a href=&#34;https://readwise.io&#34;&gt;Readwise&lt;/a&gt; highlights from that source.&lt;/p&gt;&#xA;&lt;h2 id=&#34;wisdom-from-an-evening-with-ray-bradbury&#34;&gt;Wisdom From An Evening with Ray Bradbury&lt;/h2&gt;&#xA;&lt;p&gt;I highly recommend watching &lt;a href=&#34;https://youtu.be/_W-r7ABrMYU?si=Y2VAhfr-d49WnN01&#34;&gt;An Evening with Ray Bradbury&lt;/a&gt;, a lecture that Mr. Bradbury gave in 2001. It is one of my favorite things in this world to watch. I like it so much that I highlighted sections in Readwise and created a Video Note in Apple Notes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;centered-figure&#34;&gt;&#xA;  &lt;img src=&#34;https://www.harleystagner.com/images/evening-with-ray-bradbury-apple-note.png&#34; alt=&#34;An Evening With Ray Bradbury Apple Note&#34; class=&#34;responsive-image&#34;&gt;&#xA;  &lt;figcaption&gt;An Evening With Ray Bradbury Apple Note&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;While Apple Notes is quick and easy for initial note-making, I often want something more powerful for making connections between my notes. In the past, I&amp;rsquo;ve used &lt;a href=&#34;https://obsidian.md&#34;&gt;Obsidian&lt;/a&gt; and I still do for some things today. However, I&amp;rsquo;m intrigued by TheBrain App and want to start using that as my main PKM. So, in order to do that, I need to create a &amp;ldquo;thought (this is what TheBrain calls each node or object)&amp;rdquo; for each top-level bullet point in my &amp;ldquo;Evening with Ray Bradbury&amp;rdquo; Apple Note. I could create these manually, but this is a tedious undertaking as I have a lot of reference notes like this one that I&amp;rsquo;d like to import into TheBrain.&lt;/p&gt;&#xA;&lt;h2 id=&#34;apple-shortcuts-and-thebrain-api&#34;&gt;Apple Shortcuts and TheBrain API&lt;/h2&gt;&#xA;&lt;p&gt;I was delighted to find out that &lt;a href=&#34;https://api.bra.in/index.html&#34;&gt;TheBrain has an API&lt;/a&gt;. After a bit of exploring, I worked out how to accomplish an automated import using Apple Shortcuts. To get started, I needed the following:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;TheBrain API key. You can generate it on the API page.&lt;/li&gt;&#xA;&lt;li&gt;The ID for the &amp;ldquo;Brain&amp;rdquo; that you want to use for importing the Apple Note.&#xA;After I had these items, it was a matter of working out some regex magic to format the &amp;ldquo;thought&amp;rdquo; notes properly and sending them along to my Brain. Here is the end result.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;centered-figure&#34;&gt;&#xA;  &lt;img src=&#34;https://www.harleystagner.com/images/apple-note-to-thebrain-import.png&#34; alt=&#34;Apple Note to TheBrain Import&#34; class=&#34;responsive-image&#34;&gt;&#xA;  &lt;figcaption&gt;Apple Note to TheBrain Import&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m thrilled with the results and am very excited to start making more connections in my Brain.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;d like to explore the shortcut yourself, it can be found at &lt;a href=&#34;https://gist.github.com/hstagner/4fdc2ba46c71801cc60adcfa0323158a&#34;&gt;this gist&lt;/a&gt;, along with some other shortcuts that I have written for Apple Notes.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Consolidating Multiple Apple Notes Using Shortcuts</title>
      <link>https://www.harleystagner.com/posts/consolidating-multiple-apple-notes-using-shortcuts/</link>
      <pubDate>Wed, 04 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://www.harleystagner.com/posts/consolidating-multiple-apple-notes-using-shortcuts/</guid>
      <description>&lt;p&gt;As I&amp;rsquo;m using Apple Notes more, I start to miss features that were part of my workflow in &lt;a href=&#34;https://obsidian.md&#34;&gt;Obsidian&lt;/a&gt;. For example, in Obsidian it is trivial to consolidate multiple notes into one note using the &lt;a href=&#34;https://help.obsidian.md/Plugins/Note+composer&#34;&gt;Obsidian Note Composer Core Plugin&lt;/a&gt;. There is no such built-in functionality in Apple Notes. However, whenever I run into a workflow that is not built-in to an app on an Apple device, I look to Apple Shortcuts to provide a solution. As it turns out, consolidating multiple Apple Notes into a single note can be accomplished with a fairly simple shortcut. Why would I want to do this? Read on for one of my use cases.&lt;/p&gt;&#xA;&lt;h2 id=&#34;snipd-and-readwise-nearly-perfect&#34;&gt;Snipd and Readwise: Nearly Perfect&lt;/h2&gt;&#xA;&lt;p&gt;If you have read any of my previous posts, you will know that I love &lt;a href=&#34;https://readwise.io&#34;&gt;Readwise&lt;/a&gt; and have been using it for many years. For my podcasts, I use a service called &lt;a href=&#34;https://www.snipd.com/&#34;&gt;Snipd&lt;/a&gt;. Snipd is a podcast player/service that allows you to create snips of podcasts. These snips include a transcript of the audio and may include a summary generated by AI. Snipd can sync with Readwise so that all of these snips show up in my account. Then, it&amp;rsquo;s just a matter of &lt;a href=&#34;https://www.harleystagner.com/posts/import-readwise-highlights-into-apple-notes/&#34;&gt;importing my Readwise highlights into Apple Notes&lt;/a&gt; to access them.&lt;/p&gt;&#xA;&lt;p&gt;This is &lt;em&gt;nearly&lt;/em&gt; perfect. Snipd also supports uploading your own audio files. I use this feature to upload audio books that I have purchased from &lt;a href=&#34;https://libro.fm/&#34;&gt;Libro.fm&lt;/a&gt;. There is a slight annoyance with this process. When I take snips while listening to an audio book, Readwise categorizes each chapter under a separate entry. For example, my &amp;ldquo;Deep Work&amp;rdquo; by Cal Newport highlights are separated into nine tracks.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;centered-figure&#34;&gt;&#xA;  &lt;img src=&#34;https://www.harleystagner.com/images/deep-work-snipd-pre-consolidate.png&#34; alt=&#34;Deep Work Separated into Nine Tracks in Apple Notes&#34; class=&#34;responsive-image&#34;&gt;&#xA;  &lt;figcaption&gt;Deep Work Separated into Nine Tracks in Apple Notes&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;consolidating-the-notes-its-all-about-the-tagging&#34;&gt;Consolidating the Notes: It&amp;rsquo;s All About the Tagging&lt;/h2&gt;&#xA;&lt;p&gt;Ideally, I would like to quickly consolidate the nine notes into a single note. I used a shortcut to accomplish this. The workflow for consolidating my notes looks like this.&lt;/p&gt;&#xA;&lt;h3 id=&#34;tag-the-notes&#34;&gt;Tag the Notes&lt;/h3&gt;&#xA;&lt;p&gt;The first step in my consolidation workflow is to tag all of the notes that I want to consolidate with a unique tag. In my case, I chose &amp;ldquo;consolidate&amp;rdquo;. Original, I know.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;centered-figure&#34;&gt;&#xA;  &lt;img src=&#34;https://www.harleystagner.com/images/deep-work-add-consolidate-tag.png&#34; alt=&#34;Adding the consolidate tag to the notes.&#34; class=&#34;responsive-image&#34;&gt;&#xA;  &lt;figcaption&gt;Adding the consolidate tag to the notes.&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;To make this easier, I keep all of my tags used for automations like this in a &amp;ldquo;!System Tags&amp;rdquo; note. The name ensures that it will show up first when I search for the tag in my shortcut. This way, I can exclude that &amp;ldquo;!System Tags&amp;rdquo; note from the results.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;centered-figure&#34;&gt;&#xA;  &lt;img src=&#34;https://www.harleystagner.com/images/consolidate-system-tag.png&#34; alt=&#34;!System Tags Note&#34; class=&#34;responsive-image&#34;&gt;&#xA;  &lt;figcaption&gt;!System Tags Note&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;h3 id=&#34;run-the-shortcut&#34;&gt;Run the Shortcut&lt;/h3&gt;&#xA;&lt;p&gt;Now all that is left to do is run the shortcut. Let&amp;rsquo;s walk through it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;centered-figure&#34;&gt;&#xA;  &lt;img src=&#34;https://www.harleystagner.com/images/deep-work-note-with-consolidate-shortcut.png&#34; alt=&#34;Consolidate Notes Shortcut&#34; class=&#34;responsive-image&#34;&gt;&#xA;  &lt;figcaption&gt;Consolidate Notes Shortcut&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The first step searches my notes and returns all of the notes that are tagged with &amp;ldquo;consolidate&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;Since I use a note called &amp;ldquo;!System Tag&amp;rdquo; with the &amp;ldquo;consolidate&amp;rdquo; tag included, I need to exclude that note from the results. The rest are fair game, so I start the index at 2 and add the results to a list variable called &amp;ldquo;notesList&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;In this step, I remove the &amp;ldquo;consolidate&amp;rdquo; tag from the notes in &amp;ldquo;notesList&amp;rdquo; so that they will not be targeted the next time I run the shortcut.&lt;/li&gt;&#xA;&lt;li&gt;I have to give the new consolidated note a title, so I just pick one of the targeted notes and extract the title into a variable called &amp;ldquo;noteTitle&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;Now, for each note in &amp;ldquo;noteList&amp;rdquo; I copy the body of the note into a list variable called &amp;ldquo;combinedNotes&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;Almost done. I combine all of the text entries from the &amp;ldquo;combinedNotes&amp;rdquo; list using &amp;ldquo;New Lines&amp;rdquo; as the delimiter. Then I place them into a text action along with the note title.&lt;/li&gt;&#xA;&lt;li&gt;Finally, I create a new consolidated note in a designated folder using the text action in step six.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Now I have a quick way to consolidate multiple Apple Notes into a single note. At this point I would typically archive the multiple &amp;ldquo;Deep Work&amp;rdquo; notes. Take a look at my &lt;a href=&#34;https://gist.github.com/hstagner/4fdc2ba46c71801cc60adcfa0323158a&#34;&gt;Apple Shortcuts Gist on Github&lt;/a&gt; for the link to this shortcut and others.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Import Readwise Highlights into Apple Notes</title>
      <link>https://www.harleystagner.com/posts/import-readwise-highlights-into-apple-notes/</link>
      <pubDate>Wed, 28 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://www.harleystagner.com/posts/import-readwise-highlights-into-apple-notes/</guid>
      <description>&lt;p&gt;Lately, I&amp;rsquo;ve been trying to simplify my workflows. Two truths recently hit me like a surreptitious note-taking app subscription:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I use way too many apps and it stresses me out.&lt;/li&gt;&#xA;&lt;li&gt;I am all in on the Apple ecosystem (iPhone, Macbook, iPad, Watch).&#xA;I&amp;rsquo;m going to start exploring just using the damn apps that come with my devices (Reminders, Notes, Pages (maybe)). While I still think that &lt;a href=&#34;https://obsidian.md&#34;&gt;Obsidian&lt;/a&gt; will remain a part of my toolkit, I&amp;rsquo;m starting to move more to the Apple native apps for my daily drivers. One of the crucial components of my writing life is &lt;a href=&#34;https://readwise.io&#34;&gt;Readwise&lt;/a&gt;. I highlight pretty much everything I read (even if I need to do it manually, in the case of physical books and magazines). Readwise ingests all of these highlights and makes them available and searchable for me. I use the official Readwise plugin to sync these highlights with Obsidian.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;When I thought about using Apple Notes, I quickly realized that there is not an official option for syncing the highlights. However, Readwise does provide a public API. After some quick searching I came upon this &lt;a href=&#34;https://www.reddit.com/r/readwise/comments/141av0n/apple_shortcuts_for_readwise_integration/&#34;&gt;Reddit thread&lt;/a&gt;. The author gave me exactly what I was looking for via Apple Shortcuts. There was just one thing missing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;readwise-api-pagination&#34;&gt;Readwise API Pagination&lt;/h2&gt;&#xA;&lt;p&gt;When I first ran the shortcut, it looked like everything was running perfectly. However, I soon found out that the API call was only returning 26 entries. I needed to import my entire Readwise Highlights list.&lt;/p&gt;&#xA;&lt;p&gt;I was running into API Pagination (I&amp;rsquo;ll let &lt;a href=&#34;https://www.perplexity.ai/search/api-pagination-h_bn0SKYQ86hRt7i_yC2NA&#34;&gt;this Perplexity search&lt;/a&gt; handle a deeper dive on the topic.) Basically, the &lt;a href=&#34;https://readwise.io/api_deets&#34;&gt;Readwise API&lt;/a&gt; was sending the results in &amp;ldquo;pages&amp;rdquo; with a page marker number at the end of the entry. I have around 809 books, magazines, podcasts, tweets, etc. in Readwise, so 26 entries barely scratched the surface. I needed a way to do an initial sync of ALL my highlights.&lt;/p&gt;&#xA;&lt;p&gt;So, I made an adjustment to the shortcut that calls the Readwise API to track pages and keep requesting until I&amp;rsquo;ve reached the end of the results. The basic logic is this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Make an initial API call to get results.&lt;/li&gt;&#xA;&lt;li&gt;Store the results in a highlights variable to be used later for ALL the highlights.&lt;/li&gt;&#xA;&lt;li&gt;If there is a &lt;strong&gt;nextPageCursor&lt;/strong&gt; value, then make the call again.&lt;/li&gt;&#xA;&lt;li&gt;Keep looping the API call and highlights variable update until there is no value for &lt;strong&gt;nextPageCursor&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Finally, the results stored in the highlights variable are passed to the next shortcut that actually processes the highlights and creates the notes in Apple Notes.&#xA;This worked! All of my Readwise highlights are now in Apple Notes.&#xA;&lt;figure class=&#34;centered-figure&#34;&gt;&#xA;  &lt;img src=&#34;https://www.harleystagner.com/images/readwise-apple-note-final.png&#34; alt=&#34;Readwise Highlights in Apple Notes&#34; class=&#34;responsive-image&#34;&gt;&#xA;  &lt;figcaption&gt;Readwise Highlights in Apple Notes&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Still to do:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Figure out a way to parse the Readwise system tags (for outlining like .h1, .h2, etc.)&lt;/li&gt;&#xA;&lt;li&gt;Maybe some aesthetic improvements&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The shortcuts can be found &lt;a href=&#34;https://gist.github.com/hstagner/4fdc2ba46c71801cc60adcfa0323158a&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Why My Site Looks So Ugly Right Now</title>
      <link>https://www.harleystagner.com/posts/why-my-site-looks-so-ugly-right-now/</link>
      <pubDate>Sat, 10 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://www.harleystagner.com/posts/why-my-site-looks-so-ugly-right-now/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m going back to basics. I love to write and I realize lately that my website was actually a blocker to me actually getting words on the page. I&amp;rsquo;ve put too much time into site design and images and not enough into just writing.&#xA;So that&amp;rsquo;s what I&amp;rsquo;m going to do. Just write.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m starting a brand new Hugo design for my site from scratch. I&amp;rsquo;ll document what I can along the way. While I&amp;rsquo;ve been researching all of this I have come across several helpful topics and resources.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://indieweb.org/&#34;&gt;IndieWeb&lt;/a&gt;. This fascinates me and I will be adding more IndieWeb features to my site in the coming days/weeks/months.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=wcMqrb3v2SM&amp;amp;list=PLQyUGPJp0F2Sn0zPTirvZ8YXO0IMaKQfl&amp;amp;index=7&#34;&gt;Creating Your Own Hugo Theme on Youtube&lt;/a&gt;. This video has been immensely helpful to get me started.&lt;/li&gt;&#xA;&lt;li&gt;Finally &lt;a href=&#34;https://mikegrindle.com/&#34;&gt;Mike Grindle&lt;/a&gt;. His website and writing was an inspiration and what sent me down this big reset rabbit hole.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll be posting along the way so excuse my mess as I add basic functionality like RSS back to the site. I&amp;rsquo;m excited to roll up my sleeves and get started!&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Writing Workflow - From Freewrite to Here</title>
      <link>https://www.harleystagner.com/posts/writing-workflow-from-freewrite-to-here/</link>
      <pubDate>Tue, 02 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://www.harleystagner.com/posts/writing-workflow-from-freewrite-to-here/</guid>
      <description>&lt;p&gt;As I sit here typing on my Alpha, I&amp;rsquo;ve noticed something I haven&amp;rsquo;t for a long time. I&amp;rsquo;m seeing my thoughts in all of their undistracted, unfiltered glory. Music pumps into my ears from a Sony Walkman (yes, I said Walkman) as I type.&lt;br&gt;&#xA;&lt;br&gt;&#xA;I&amp;rsquo;m not staring at a screen, and I&amp;rsquo;m not seeing red spellcheck lines. I&amp;rsquo;m just typing. Trying to write in a post-smartphone world means that my attention is split. Screens are to my left, right, and center. I&amp;rsquo;m wondering how I got any writing done under these conditions.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-productivity-paradox&#34;&gt;The Productivity Paradox&lt;/h1&gt;&#xA;&lt;p&gt;I&amp;rsquo;m somewhat of a productivity and knowledge management system hoarder. I don&amp;rsquo;t know what it is, but my brain attaches itself vigorously to any new system, especially if I can automate it. PARA, Linking Your Thinking, Zettelkasten, GTD, and others have snuck into my workflows. As I type away from my screen, I&amp;rsquo;m starting to realize and understand that I don&amp;rsquo;t actually need them. Not really. As a post-internet Gen-Xer, I&amp;rsquo;ve realized that I need more than anything the space to let my thoughts breathe. I could see myself becoming addicted to the simple act of just writing again. No agendas. Nothing to optimize.&lt;br&gt;&#xA;&lt;br&gt;&#xA;That&amp;rsquo;s not to say that I don&amp;rsquo;t have a use for systems. I&amp;rsquo;ve just de-emphasized their usefulness in the beginning stages of any writing project. I&amp;rsquo;m so sold on the &amp;ldquo;draft first, edit later&amp;rdquo; mindset that I must find a compelling reason not to start drafting on one of my Freewrite devices. One of the things I love about my Alpha, even versus my original Smart Typewriter, is that I can take it out, put it on my lap, and start writing. If it is close by, then I can quickly get into this flow state. That is one of the greatest gifts I have received from this little device. It&amp;rsquo;s nearly frictionless. As much as possible, I want to replicate that frictionless feeling into the rest of my workflow, from editing to final publishing. While everything can be a perpetual work-in-progress, I&amp;rsquo;m happy with what I&amp;rsquo;ve accomplished so far with my tablet publishing workflow. Let&amp;rsquo;s take a look.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-tools&#34;&gt;The Tools&lt;/h1&gt;&#xA;&lt;p&gt;Freewrite touts itself as a drafting machine, which I&amp;rsquo;ve fully embraced. My thoughts manifest on the device in a way they never could if  I were working inside a word processor (typos and all). Having experienced a certain degree of drafting freedom, I decided early in the design phase for my writing workflow that my laptop, as a writing tool, would be too heavy for this purpose. My iPad strikes a beautiful balance between completely frictionless work and powerful features. &lt;br&gt;&#xA;&lt;br&gt;&#xA;So, I needed to get from Freewrite to my iPad. Postbox cloud syncing makes this fairly trivial. I can open the file in Dropbox on my iPad. Easy. But there&amp;rsquo;s a catch. Every app I open in my workflow introduces the risk of distracting me on my way to the true goal of editing my article. I decided to solve this with Apple shortcuts. The shortcuts I&amp;rsquo;ve created serve as the cornerstone of my semi-automated workflow.&lt;br&gt;&#xA;&lt;br&gt;&#xA;My website articles are &lt;a href=&#34;https://www.harleystagner.com/posts/hugo-to-s3-publishing-workflow/&#34;&gt;published using the Hugo static site generator and hosted on an Amazon S3 bucket&lt;/a&gt;. I can&amp;rsquo;t run Hugo on my iPad. That means I need a traditional system for the Hugo site generation process. I don&amp;rsquo;t want to move from my iPad to another machine for publishing. That&amp;rsquo;s too much friction and opportunity for distraction. So, I settled on a remote Linux system hosted on AWS. I have a small development EC2 instance that I now use to run my publishing workflow.&lt;br&gt;&#xA;&lt;br&gt;&#xA;As I&amp;rsquo;ve stated, all my drafting starts on the Freewrite. If I have quick inspiration, I start writing on my Freewrite Alpha. If I know I&amp;rsquo;m all in on a deeper drafting session, I use the Freewrite Smart Typewriter in my writing room. The point is to be able to get my thoughts down quickly. After I&amp;rsquo;m finished drafting, I copy my draft to Obsidian.&lt;br&gt;&#xA;&lt;br&gt;&#xA;I&amp;rsquo;ve been an Obsidian user for several years. I&amp;rsquo;ve tried other apps that perhaps are a little more polished out of the box but require proprietary formats or online-only access. I was already an Obsidian user, but if I were starting today, I would still pick it for one reason. It works with plain text markdown. I can&amp;rsquo;t think of a more philosophically aligned tool for the next step in my publishing process. My draft starts in plain text, so I&amp;rsquo;ll also edit in plain text. It&amp;rsquo;s a lightweight workflow, and I love it for that.&lt;br&gt;&#xA;&lt;br&gt;&#xA;I could save the draft file right into Obsidian. That would be easy enough as it is already syncing to Freewrite Postbox and my Dropbox account. I&amp;rsquo;m always looking to take my workflow one step further. I created a shortcut that will create a new note in Obsidian with the contents of my draft and the frontmatter that Hugo requires for later publishing.&lt;br&gt;&#xA;&lt;br&gt;&#xA;I use Apple Shortcuts as the automation engine for my website publishing workflow. After I finish editing my draft in Obsidian and am satisfied with the result, I have a shortcut to copy the draft and associated images to the appropriate folder on my EC2 instance. I also have shortcuts for starting the Hugo server to preview the webpage before publishing. Finally, once everything looks good, I have a shortcut to run the Hugo build process, commit all the changes to my local git repository, and push the changes to my remote Github repository. After the push, a GitHub action will copy the files from the public folder into an S3 bucket. At that point, I have published my article.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-entire-process&#34;&gt;The Entire Process&lt;/h1&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;centered-figure&#34;&gt;&#xA;  &lt;img src=&#34;https://www.harleystagner.com/images/ipad-shortcuts-hugo.png&#34; alt=&#34;iPad Blog Workflow Shortcuts&#34; class=&#34;responsive-image&#34;&gt;&#xA;  &lt;figcaption&gt;iPad Blog Workflow Shortcuts&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;It may seem like many steps, but once this workflow is set up, it will be pretty seamless for me to use. I separate my shortcuts into different phases. The whole process is just a few steps:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Draft in Freewrite&lt;/li&gt;&#xA;&lt;li&gt;Edit in Obsidian&lt;/li&gt;&#xA;&lt;li&gt;Upload to my development EC2 instance to preview&lt;/li&gt;&#xA;&lt;li&gt;Commit and push the changes to GitHub&lt;/li&gt;&#xA;&lt;li&gt;Github actions takes it from there to publish the new article to an S3 bucket.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For me, there are a few key advantages to this workflow:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I can draft quickly.&lt;/li&gt;&#xA;&lt;li&gt;I can edit and save everything in plain text&lt;/li&gt;&#xA;&lt;li&gt;I control the publishing platform (my website is hosted on S3).&lt;/li&gt;&#xA;&lt;li&gt;Finally, it was enjoyable to set this up and use it. Anything that helps me keep writing and publishing is a huge boon.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The shortcuts for my Hugo publishing workflow can be found &lt;a href=&#34;https://gist.github.com/hstagner/4f7b256b079b6ab423bd7dc28c9a06ac&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;em&gt;You can follow my other writing and connect on social media by exploring the links at &lt;a href=&#34;https://harleystagner.me&#34;&gt;harleystagner.me&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Analyzing School District Legal Spending with Python and Perplexity AI</title>
      <link>https://www.harleystagner.com/posts/analyzing-school-district-legal-spending-with-python-and-perplexity-ai/</link>
      <pubDate>Mon, 18 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://www.harleystagner.com/posts/analyzing-school-district-legal-spending-with-python-and-perplexity-ai/</guid>
      <description>&lt;h1 id=&#34;informing-parents-with-perplexity-and-python&#34;&gt;Informing Parents with Perplexity and Python&lt;/h1&gt;&#xA;&lt;p&gt;Whenever I try a new tool, I immediately look for a serious context of use. The marketing examples that vendors typically give are great for getting an idea of what the tool can do, but I really need to introduce it into my workflow. My latest project has been to create a report for parents to understand the mix of legal spending versus other spending in special education.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;centered-figure&#34;&gt;&#xA;  &lt;img src=&#34;https://www.harleystagner.com/images/se-legal-spending.png&#34; alt=&#34;Special Education Legal Spending&#34; class=&#34;responsive-image&#34;&gt;&#xA;  &lt;figcaption&gt;Special Education Legal Spending&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;due-process-costs&#34;&gt;Due Process Costs&lt;/h2&gt;&#xA;&lt;p&gt;Aside from mediation, one mechanism for disputing items related to a child&amp;rsquo;s IEP is &amp;ldquo;due process.&amp;rdquo; Due process is a formal legal proceeding for parents to present evidence to dispute an IEP finding. Disputes can fall under categories like classroom placement, services requested, or an initial assessment to qualify for an IEP. If you want to learn more about the IEP process, I wrote an &lt;a href=&#34;https://medium.com/@hstagner/navigating-the-iep-process-6b9b6cbb4ac8&#34;&gt;article on Medium&lt;/a&gt; a while back.&lt;br&gt;&#xA;&lt;br&gt;&#xA;The process is meant to be unbiased and fair. This fairness may be the case on paper, but parents are usually at a disadvantage. Depending on the case&amp;rsquo;s complexity, parents typically need to hire a lawyer specializing in education law. The school district will also have a lawyer on their side and have the capability to &amp;ldquo;outspend&amp;rdquo; any individual. The costs can add up quickly, with the majority of the burden falling to the already stressed parents if they do not win the case.&lt;br&gt;&#xA;&lt;br&gt;&#xA;I want to raise public awareness about the reality of due process and help parents stay informed. So, I created a report from publicly available data to inform parents of the spending. I used Python to gather and parse the data, with Perplexity AI as my research and coding partner.&lt;/p&gt;&#xA;&lt;h2 id=&#34;talking-through-the-code&#34;&gt;Talking Through the Code&lt;/h2&gt;&#xA;&lt;p&gt;I don&amp;rsquo;t have a background in professional Python development. My background is in solution architecture and infrastructure design. I&amp;rsquo;m a practitioner turned product manager. So, while I have utilized some light scripting in the past, I am fairly new to Python. In this regard, &lt;a href=&#34;https://www.perplexity.ai/search/serialize-spreadsheet-to-t.qIWGntTKWRp59aBMZeXQ&#34;&gt;Perplexity AI was there for me throughout the whole process&lt;/a&gt;.&lt;br&gt;&#xA;&lt;br&gt;&#xA;Here is one of the questions in a long chain of questions answered.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s a Python script that allows you to place a variable number of pie charts on a grid using Matplotlib:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; matplotlib.pyplot &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; plt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; matplotlib &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; gridspec&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;create_pie_chart&lt;/span&gt;(data, labels, title):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;Function to create a pie chart and return the Axes object.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;Args:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;data (list): List of numerical values for the pie slices.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;labels (list): List of labels for the pie slices.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;title (str): Title for the pie chart.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;Returns:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;Axes object representing the pie chart.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;fig, ax &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; plt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;subplots()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;ax&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pie(data, labels&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;labels, autopct&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%1.1f%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;ax&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set_title(title)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; ax&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Get the number of pie charts from the user&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;num_charts &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; int(input(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;How many pie charts do you want to place on the grid? &amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Create pie chart objects and store them in a list&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pie_charts &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(num_charts):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;data &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; input(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Enter the data for pie chart &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;i&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; (comma-separated): &amp;#34;&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;split(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;,&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;data &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [float(x) &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; x &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; data]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;labels &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; input(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Enter the labels for pie chart &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;i&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; (comma-separated): &amp;#34;&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;split(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;,&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;title &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; input(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Enter the title for pie chart &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;i&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;: &amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;pie_charts&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append(create_pie_chart(data, labels, title))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Calculate the number of rows and columns for the grid&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;num_cols &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; int(num_charts &lt;span style=&#34;color:#f92672&#34;&gt;**&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;num_rows &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (num_charts &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; num_cols &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;//&lt;/span&gt; num_cols&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Set up the figure and grid&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fig &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; plt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;figure(figsize&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gs &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; gridspec&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;GridSpec(num_rows, num_cols)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Place the pie chart objects on the grid&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i, ax &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; enumerate(pie_charts):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;row &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;//&lt;/span&gt; num_cols&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;col &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; num_cols&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;ax_grid &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; fig&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;add_subplot(gs[row, col])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;ax_grid&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pie(ax&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;patches[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get_facecolor(), labels&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;ax&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;texts[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get_text(), autopct&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%1.1f%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;ax_grid&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set_title(ax&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;title&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get_text())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Adjust spacing and display the figure&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;plt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;tight_layout()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;plt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;show()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Explanation:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;We define a function &lt;code&gt;create_pie_chart&lt;/code&gt; that takes the data, labels, and title as arguments, creates a pie chart using &lt;code&gt;plt.subplots()&lt;/code&gt; and &lt;code&gt;ax.pie()&lt;/code&gt;, and returns the &lt;code&gt;Axes&lt;/code&gt; object representing the pie chart.&lt;/li&gt;&#xA;&lt;li&gt;We prompt the user to enter the number of pie charts they want to place on the grid using &lt;code&gt;input()&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;We iterate &lt;code&gt;num_charts&lt;/code&gt; times and prompt the user to enter the data, labels, and title for each pie chart. We create pie chart objects by calling the &lt;code&gt;create_pie_chart&lt;/code&gt; function with the user-provided data, labels, and title, and store the returned &lt;code&gt;Axes&lt;/code&gt; objects in a list called &lt;code&gt;pie_charts&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;We calculate the number of rows and columns for the grid based on the number of pie charts. We use the square root of &lt;code&gt;num_charts&lt;/code&gt; as the number of columns and calculate the number of rows accordingly.&lt;/li&gt;&#xA;&lt;li&gt;We set up a new &lt;code&gt;Figure&lt;/code&gt; object &lt;code&gt;fig&lt;/code&gt; and create a &lt;code&gt;GridSpec&lt;/code&gt; object &lt;code&gt;gs&lt;/code&gt; with the calculated number of rows and columns.&lt;/li&gt;&#xA;&lt;li&gt;We iterate over the &lt;code&gt;pie_charts&lt;/code&gt; list using &lt;code&gt;enumerate&lt;/code&gt; to get both the index &lt;code&gt;i&lt;/code&gt; and the pie chart object &lt;code&gt;ax&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;For each iteration, we calculate the row and column positions in the grid using &lt;code&gt;row = i // num_cols&lt;/code&gt; and &lt;code&gt;col = i % num_cols&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;We create a new &lt;code&gt;Axes&lt;/code&gt; object &lt;code&gt;ax_grid&lt;/code&gt; and add it to the grid using &lt;code&gt;fig.add_subplot(gs[row, col])&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;To recreate the pie chart on the new &lt;code&gt;Axes&lt;/code&gt; object, we access the data and labels from the original pie chart object using:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ax.patches.get_facecolor()&lt;/code&gt; to get the data (colors of the pie slices)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ax.texts.get_text()&lt;/code&gt; to get the labels&#xA;We pass these to the &lt;code&gt;pie()&lt;/code&gt; method of the new &lt;code&gt;Axes&lt;/code&gt; object.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;10&#34;&gt;&#xA;&lt;li&gt;We set the title of the new &lt;code&gt;Axes&lt;/code&gt; object using &lt;code&gt;ax.title.get_text()&lt;/code&gt; to retrieve the title from the original pie chart object.&lt;/li&gt;&#xA;&lt;li&gt;Finally, we adjust the spacing between subplots using &lt;code&gt;plt.tight_layout()&lt;/code&gt; and display the figure using &lt;code&gt;plt.show()&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;This script allows the user to specify the number of pie charts they want to place on the grid and provides a flexible way to input the data, labels, and title for each pie chart. The pie charts are then dynamically placed on a grid based on the number of charts specified.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;analyzing-the-code-in-context&#34;&gt;Analyzing the Code In Context&lt;/h2&gt;&#xA;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 49.04632152588556%; height: 0;&#34;&gt;&lt;iframe&#xA;        src=&#34;https://www.loom.com/embed/a5ce4132591744f9b563fe5bd73fd13e&#34;&#xA;        frameborder=&#34;0&#34; webkitallowfullscreen mozallowfullscreen allowfullscreen&#xA;        style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%;&#34;&gt;&lt;/iframe&gt;&lt;/div&gt;&#xA;&lt;p&gt;In a few hours, I had a complete solution to create my pdf report. However, I suspect the code was not optimized, as it took a minute or two to run. I decided to try Perplexity AI again. This time, I uploaded my code and the output of cProfile (which I wouldn&amp;rsquo;t have known about had it not been for Perplexity AI) and asked for an analysis. The result blew my mind. Based on the output of the cProfile I ran on my code, Perplexity AI was able to suggest some areas for improvement.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The cProfile output provides detailed timing information for the various functions and methods called during the execution of the code. Here are some key observations and potential areas for optimization:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Data I/O and parsing&lt;/strong&gt;:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A significant amount of time (around 9.8 seconds) is spent in &lt;code&gt;readers.py:854(read_csv)&lt;/code&gt; and &lt;code&gt;common.py:645(get_handle)&lt;/code&gt;, which are related to reading CSV data from URLs.&lt;/li&gt;&#xA;&lt;li&gt;Optimizing the data ingestion process, such as using more efficient libraries or caching the data locally, could potentially improve performance.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;Matplotlib rendering&lt;/strong&gt;:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Several functions related to Matplotlib rendering, such as &lt;code&gt;table.py:417(_get_grid_bbox)&lt;/code&gt;, &lt;code&gt;backend_agg.py:452(_print_pil)&lt;/code&gt;, and &lt;code&gt;backend_agg.py:462(print_png)&lt;/code&gt;, consume a considerable amount of time.&lt;/li&gt;&#xA;&lt;li&gt;Optimizing the rendering process, such as reducing the number of plots or using a more lightweight backend, could potentially improve performance.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;Numerical operations&lt;/strong&gt;:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Functions like &lt;code&gt;formatters.py:331(__call__)&lt;/code&gt; and &lt;code&gt;formatters.py:220(catch_format_error)&lt;/code&gt;, which are likely related to formatting numerical data, take a noticeable amount of time.&lt;/li&gt;&#xA;&lt;li&gt;Optimizing these operations or using more efficient libraries like NumPy could potentially improve performance.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;String operations&lt;/strong&gt;:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Functions like &lt;code&gt;object_array.py:141(_str_replace)&lt;/code&gt; and &lt;code&gt;object_array.py:427(_str_strip)&lt;/code&gt;, which are related to string operations, consume a significant amount of time.&lt;/li&gt;&#xA;&lt;li&gt;Optimizing these operations or using more efficient string manipulation techniques could potentially improve performance.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;5&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;HTTP requests&lt;/strong&gt;:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Functions like &lt;code&gt;request.py:1307(do_open)&lt;/code&gt;, &lt;code&gt;request.py:529(_open)&lt;/code&gt;, and &lt;code&gt;client.py:278(_read_status)&lt;/code&gt; are related to making HTTP requests and handling responses.&lt;/li&gt;&#xA;&lt;li&gt;Optimizing the HTTP request process, such as using a more efficient library or implementing caching mechanisms, could potentially improve performance.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;6&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;Axis and tick formatting&lt;/strong&gt;:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Functions like &lt;code&gt;axis.py:1544(_get_tick)&lt;/code&gt; and &lt;code&gt;axis.py:2141(_get_ticks_position)&lt;/code&gt; are related to formatting axes and ticks in Matplotlib plots.&lt;/li&gt;&#xA;&lt;li&gt;Optimizing these operations or reducing the number of ticks could potentially improve performance.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;7&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;Profiling overhead&lt;/strong&gt;:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The profiling process itself introduces some overhead, as evidenced by the time spent in functions like &lt;code&gt;cProfile.run()&lt;/code&gt; and &lt;code&gt;pstats.Stats().sort_stats()&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;While this overhead is relatively small, it&amp;rsquo;s important to consider it when interpreting the profiling results.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It&amp;rsquo;s important to note that the profiling results can vary depending on the input data and the specific operations performed. Additionally, some of the time spent in certain functions may be due to external dependencies or libraries, which may require further investigation or optimization. To optimize the code effectively, it&amp;rsquo;s recommended to focus on the most time-consuming functions and operations, and consider alternative approaches, libraries, or algorithms that can potentially improve performance. Additionally, profiling with different input data sets and configurations can provide further insights into potential bottlenecks.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Follow the &lt;a href=&#34;https://www.perplexity.ai/search/can-you-make-QnVJZeOjT8OPLKwcW7_0pQ&#34;&gt;entire thread&lt;/a&gt;. What I could uncover (again, I&amp;rsquo;m a Python novice) was wild.&lt;br&gt;&#xA;&lt;br&gt;&#xA;I&amp;rsquo;m enjoying my time with Perplexity AI. It has quickly earned a spot in my daily toolkit alongside apps like &lt;a href=&#34;https://obsidian.md&#34;&gt;Obsidian&lt;/a&gt;. More importantly, it helps me promptly finish the projects I deeply care about.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;em&gt;You can follow my other writing and connect on social media by exploring the links at &lt;a href=&#34;https://harleystagner.me&#34;&gt;harleystagner.me&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Using Perplexity AI to Research Individualized Education Programs</title>
      <link>https://www.harleystagner.com/posts/using-perplexity-ai-to-research-individualized-education-programs/</link>
      <pubDate>Tue, 05 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://www.harleystagner.com/posts/using-perplexity-ai-to-research-individualized-education-programs/</guid>
      <description>&lt;h1 id=&#34;parents-dont-have-time&#34;&gt;Parents Don&amp;rsquo;t Have Time&lt;/h1&gt;&#xA;&lt;p&gt;I have a child with special needs who has had an Individualized Education Program (IEP) since she started school. She&amp;rsquo;s now a teenager, and I&amp;rsquo;m fairly well-versed in the ins and outs of the IEP process and some of the applicable laws. This knowledge has grown gradually over many years when I have had the time.&lt;br&gt;&#xA;&lt;br&gt;&#xA;The process and terminology can be confusing when first thrust upon you. It is in the child&amp;rsquo;s best interest to learn about the process so that you and your child can adequately advocate for their education. When I was learning, it was mostly by word of mouth and through the school system (which doesn&amp;rsquo;t always show you the whole picture). I did sporadic Google searches to fill in the gaps, but it was a laborious process.&lt;br&gt;&#xA;&lt;br&gt;&#xA;I wish I had the tools available now to help with that search.&lt;/p&gt;&#xA;&lt;h1 id=&#34;perplexity-ai-the-parental-research-assistant&#34;&gt;Perplexity AI: The Parental Research Assistant&lt;/h1&gt;&#xA;&lt;p&gt;My new favorite research assistant is &lt;a href=&#34;https://perplexity.ai&#34;&gt;Perplexity.AI&lt;/a&gt;. This AI-powered search engine combines internet searches with the power of generative AI to produce some very powerful results. As you&amp;rsquo;ll see below, what would have taken me many hours or days of research in the past (consisting of multiple browser tabs, reading articles, manually compiling information, etc.) can be accomplished in about 15 minutes by chatting with Perplexity.&lt;/p&gt;&#xA;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 49.04632152588556%; height: 0;&#34;&gt;&lt;iframe&#xA;        src=&#34;https://www.loom.com/embed/69d0d66514c442b98ea8400e296ccfc5&#34;&#xA;        frameborder=&#34;0&#34; webkitallowfullscreen mozallowfullscreen allowfullscreen&#xA;        style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%;&#34;&gt;&lt;/iframe&gt;&lt;/div&gt;&#xA;&lt;h2 id=&#34;what-is-an-iep&#34;&gt;What is an IEP?&lt;/h2&gt;&#xA;&lt;p&gt;I start with a fundamental question. What is an IEP? Perplexity gives a thorough response.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;An Individualized Education Program (IEP) is a written statement that is developed for each child with a disability who is attending an elementary or secondary educational institution. It is designed to ensure that the child receives specialized instruction and related services to help them succeed in school[1][2]. The IEP is developed by a team that includes individuals from various educational disciplines, the child with a disability, family members, and/or designated advocates[1].&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The IEP typically includes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The child&amp;rsquo;s present levels of academic achievement and functional performance.&lt;/li&gt;&#xA;&lt;li&gt;Measurable annual goals and objectives for the child&amp;rsquo;s education.&lt;/li&gt;&#xA;&lt;li&gt;A description of the special education and related services the child will receive.&lt;/li&gt;&#xA;&lt;li&gt;The extent to which the child will participate in the general education curriculum and in extracurricular activities.&lt;/li&gt;&#xA;&lt;li&gt;Individualized accommodations necessary for the child to be successful.&lt;/li&gt;&#xA;&lt;li&gt;Transition services for students aged 16 or older, including postsecondary goals and the services needed to achieve them[1][2][3].&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The IEP process is governed by the Individuals with Disabilities Education Act (IDEA), which mandates that eligible children receive a free appropriate public education[2]. The IEP is not just a legal document but a map that outlines the program of special education instruction, supports, and services a student needs to make progress and thrive in school[2].&lt;/p&gt;&#xA;&lt;p&gt;Citations:&#xA;[1] &lt;a href=&#34;https://www.washington.edu/accesscomputing/what-individualized-education-plan&#34;&gt;https://www.washington.edu/accesscomputing/what-individualized-education-plan&lt;/a&gt;&#xA;[2] &lt;a href=&#34;https://www.understood.org/en/articles/what-is-an-iep&#34;&gt;https://www.understood.org/en/articles/what-is-an-iep&lt;/a&gt;&#xA;[3] &lt;a href=&#34;https://sites.ed.gov/idea/regs/b/d/300.320&#34;&gt;https://sites.ed.gov/idea/regs/b/d/300.320&lt;/a&gt;&#xA;[4] &lt;a href=&#34;https://www.edweek.org/teaching-learning/what-is-an-iep-individualized-education-programs-explained/2023/07&#34;&gt;https://www.edweek.org/teaching-learning/what-is-an-iep-individualized-education-programs-explained/2023/07&lt;/a&gt;&#xA;[5] &lt;a href=&#34;https://www2.ed.gov/parents/needs/speced/iepguide/index.html&#34;&gt;https://www2.ed.gov/parents/needs/speced/iepguide/index.html&lt;/a&gt;&#xA;[6] &lt;a href=&#34;https://kidshealth.org/en/parents/iep.html&#34;&gt;https://kidshealth.org/en/parents/iep.html&lt;/a&gt;&#xA;[7] &lt;a href=&#34;https://dese.mo.gov/media/pdf/fba-bip-part-1-definition-iep&#34;&gt;https://dese.mo.gov/media/pdf/fba-bip-part-1-definition-iep&lt;/a&gt;&#xA;[8] &lt;a href=&#34;https://www.washington.edu/accesscomputing/what-difference-between-iep-and-504-plan&#34;&gt;https://www.washington.edu/accesscomputing/what-difference-between-iep-and-504-plan&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;From here, I can dig in deeper by asking a question like &amp;ldquo;What are the key terms associated with an IEP?&amp;rdquo; I won&amp;rsquo;t list the response here, but Perplexity will give a similar response listing key terms.&lt;/p&gt;&#xA;&lt;h2 id=&#34;where-can-i-find-out-state-specific-information-on-ieps&#34;&gt;Where Can I Find Out State-Specific Information on IEPs?&lt;/h2&gt;&#xA;&lt;p&gt;Much of the IEP process depends on your state and school district. Suppose I wanted to take a key term like Least Restrictive Environment (LRE) and see what my state says about LRE. In that case, I can narrow my question to a specific domain.&lt;br&gt;&#xA;&lt;br&gt;&#xA;For example, after narrowing my topic to LRE through questioning in Virginia, I might ask, &amp;ldquo;Where is this information located on doe.virginia.gov?&amp;rdquo; This will give me similar results with sources.&lt;br&gt;&#xA;&lt;br&gt;&#xA;If I want to look at the Virginia State Laws that mention LRE, I can ask, &amp;ldquo;Where is this information listed on law.lis.virginia.gov?&amp;rdquo;&lt;/p&gt;&#xA;&lt;h2 id=&#34;finding-help-about-ieps-on-linkedin&#34;&gt;Finding Help about IEPs on LinkedIn&lt;/h2&gt;&#xA;&lt;p&gt;After I&amp;rsquo;ve compiled information on LRE, I can ask, &amp;ldquo;Who is talking about this information on linkedin.com?&amp;rdquo; An example output might be:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Based on the provided LinkedIn posts, several people are discussing the concept of Least Restrictive Environment (LRE) in special education:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Jeffrey Forte, a special education lawyer, explains what LRE means under the Individuals with Disabilities Education Act (IDEA) and provides examples of different levels of LRE placements in his post[1].&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Nagla Moussa, an educator, discusses how LRE can be interpreted differently based on a student&amp;rsquo;s individual needs and disabilities[2].&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;A special education consultant emphasizes that LRE is not a physical place but a principle of including students with disabilities in the general education environment to the maximum extent appropriate[3].&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The Mighty Rights Press highlights that LRE requires schools to integrate students with disabilities in general education classrooms as much as possible[4].&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Ballou Education LLC explores how LRE in an IEP affects inclusion, going beyond just physical spaces[5].&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;John R. Van Plantinga Jr. suggests that LRE starts by allowing students with disabilities to independently engage in routines where they can learn alongside their peers[6].&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Thomas Vaccaro outlines the principles behind LRE as part of navigating special education compliance[7].&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Tara Mohundro emphasizes that placement in the LRE should be individualized for each child to receive a free appropriate public education (FAPE) [8].&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;These posts highlight the importance of LRE in ensuring students with disabilities are educated alongside their non-disabled peers to the maximum extent appropriate, while also recognizing that LRE implementation should be individualized based on each student&amp;rsquo;s unique needs and disabilities.&lt;/p&gt;&#xA;&lt;p&gt;Citations:&#xA;[1] &lt;a href=&#34;https://www.linkedin.com/pulse/what-does-least-restrictive-environment-mean-jeffrey-forte&#34;&gt;https://www.linkedin.com/pulse/what-does-least-restrictive-environment-mean-jeffrey-forte&lt;/a&gt;&#xA;[2] &lt;a href=&#34;https://www.linkedin.com/pulse/least-restrictive-environment-what-does-mean-nagla-moussa&#34;&gt;https://www.linkedin.com/pulse/least-restrictive-environment-what-does-mean-nagla-moussa&lt;/a&gt;&#xA;[3] &lt;a href=&#34;https://www.linkedin.com/pulse/least-restrictive-environment-place-special-education-consultant&#34;&gt;https://www.linkedin.com/pulse/least-restrictive-environment-place-special-education-consultant&lt;/a&gt;&#xA;[4] &lt;a href=&#34;https://www.linkedin.com/pulse/education-spotlight-least-restrictive-environment-mighty-rights-press&#34;&gt;https://www.linkedin.com/pulse/education-spotlight-least-restrictive-environment-mighty-rights-press&lt;/a&gt;&#xA;[5] &lt;a href=&#34;https://www.linkedin.com/posts/ballou-education-llc_what-is-the-least-restrictive-environment-activity-7131008212727709696-Dzxg&#34;&gt;https://www.linkedin.com/posts/ballou-education-llc_what-is-the-least-restrictive-environment-activity-7131008212727709696-Dzxg&lt;/a&gt;&#xA;[6] &lt;a href=&#34;https://www.linkedin.com/pulse/lre-opportunity-special-education-john-r-van-jr-van-plantinga-jr--u47oc?trk=articles_directory&#34;&gt;https://www.linkedin.com/pulse/lre-opportunity-special-education-john-r-van-jr-van-plantinga-jr--u47oc?trk=articles_directory&lt;/a&gt;&#xA;[7] &lt;a href=&#34;https://www.linkedin.com/pulse/navigating-landscape-special-education-compliance-thomas-vaccaro-lxqsc?trk=public_post_main-feed-card_feed-article-content&#34;&gt;https://www.linkedin.com/pulse/navigating-landscape-special-education-compliance-thomas-vaccaro-lxqsc?trk=public_post_main-feed-card_feed-article-content&lt;/a&gt;&#xA;[8] &lt;a href=&#34;https://www.linkedin.com/pulse/placement-lre-tara-mohundro&#34;&gt;https://www.linkedin.com/pulse/placement-lre-tara-mohundro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;formatting-your-sources&#34;&gt;Formatting Your Sources&lt;/h2&gt;&#xA;&lt;p&gt;Finally, suppose I wanted to format any of this information neatly. In that case, I can ask Perplexity to create a table that looks something like this one for Virginia Law Sources:&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;centered-figure&#34;&gt;&#xA;  &lt;img src=&#34;https://www.harleystagner.com/images/perplexity-lre-lis-table.png&#34; alt=&#34;Virginia Law Source Chart&#34; class=&#34;responsive-image&#34;&gt;&#xA;  &lt;figcaption&gt;Virginia Law Source Chart&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;perplexity-output&#34;&gt;Perplexity Output&lt;/h1&gt;&#xA;&lt;p&gt;If you&amp;rsquo;d like to see the output of this IEP search journey, you can follow the &lt;a href=&#34;https://www.perplexity.ai/search/What-is-an-vd.Z55UHTkGiEh3nh4f42Q&#34;&gt;link to the Perplexity results&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;em&gt;Photo by &lt;a href=&#34;https://unsplash.com/@olloweb?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&#34;&gt;Agence Olloweb&lt;/a&gt; on &lt;a href=&#34;https://unsplash.com/photos/assorted-color-pencil-Z2ImfOCafFk?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&#34;&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;br&gt;&#xA;&lt;br&gt;&#xA;&lt;em&gt;You can follow my other writing and connect on social media by exploring the links at &lt;a href=&#34;https://harleystagner.me&#34;&gt;harleystagner.me&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>I Wrote This Article Using Six Thinking Hats</title>
      <link>https://www.harleystagner.com/posts/i-wrote-this-article-using-six-thinking-hats/</link>
      <pubDate>Wed, 28 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://www.harleystagner.com/posts/i-wrote-this-article-using-six-thinking-hats/</guid>
      <description>&lt;p&gt;I am on a mission this year to retain more knowledge. In my twenties, I was obsessed with hoarding facts and reading as many books as possible. This was great, in my twenties. I could spout off facts that seemed impressive but were ultimately shallow. As I grow older, I want to conceptualize the knowledge I gain into actionable outcomes. It is no longer enough for me to know about a concept. I want it to make a real and lasting impact on my life. One of the best ways to do that is to explain it to others through writing. This is one of those attempts.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;centered-figure&#34;&gt;&#xA;  &lt;img src=&#34;https://www.harleystagner.com/images/six-thinking-hats-book-cover.jpg&#34; alt=&#34;Six Thinking Hats by Edward de Bono&#34; class=&#34;responsive-image&#34;&gt;&#xA;  &lt;figcaption&gt;Six Thinking Hats by Edward de Bono&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-six-thinking-hats-methodology&#34;&gt;The Six Thinking Hats Methodology&lt;/h1&gt;&#xA;&lt;p&gt;I recently read a book by Edward de Bono called &amp;ldquo;&lt;a href=&#34;https://app.thestorygraph.com/books/d54d0c29-b511-45dc-9252-913ced0b051b&#34;&gt;Six Thinking Hats&lt;/a&gt;.&amp;rdquo; In the book, de Bono covers the Six Thinking Hats methodology for thinking through a desired outcome. It&amp;rsquo;s an exciting concept that builds in &amp;ldquo;interrupts&amp;rdquo; to a more free-thinking flow to focus the thinking on specific angles. It has the potential to be highly effective, but I need to experience the methodology in practice before I can make a judgment. So, as a first experiment, I used the Six Thinking Hat methodology solo to brainstorm and write this article.&lt;/p&gt;&#xA;&lt;h1 id=&#34;a-hat-for-every-thought&#34;&gt;A Hat for Every Thought&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Changing masks is easier than changing faces. -&lt;em&gt;Edward de Bono&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;We all have built-in biases and ways of thinking about the world. It is part of our personality. While it is challenging, if not impossible, to change a personality, it is possible to focus thinking in a different direction temporarily. This is precisely what the Six Thinking Hats proposes. By formally announcing (to yourself or others when working collaboratively) that you are wearing a specific hat, a focusing effect will guide your thinking along the right path. Here are the six hats:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;White:&lt;/strong&gt; This hat focuses the thinking on surfacing objective facts. Gather the data.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Red:&lt;/strong&gt; This hat focuses on the emotional aspects. How do you feel about the project, solution, or idea?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Black:&lt;/strong&gt; This hat is used to focus the thinking on risks or weaknesses. What are the risks of implementation? What are the weaknesses of the proposed solution?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Yellow:&lt;/strong&gt; This hat focuses on thinking about possibilities. This hat is all about optimism. The art of the possible.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Green:&lt;/strong&gt; This hat is used to focus the thinking on new ideas or solutions. Think of fertile growth.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Blue:&lt;/strong&gt; This hat organizes all the other hats and maps out a plan for the proposed thoughts and solutions. Think of the blue hat as the orchestrator.&#xA;The surface concept of each hat is easy to understand, but I appreciated de Bono&amp;rsquo;s deep dive into each hat. The analysis offered some interesting perspectives on focusing your thinking using each hat and the associated outcomes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;white-hat&#34;&gt;White Hat&lt;/h2&gt;&#xA;&lt;p&gt;When &amp;ldquo;wearing&amp;rdquo; the white hat, the focus should be on facts and data gathering instead of solutions. How much do we know about the topic? What facts do we have? It is easy for a discussion to go down a rabbit hole of &amp;ldquo;what ifs&amp;rdquo; and solution design. I appreciate the white hat&amp;rsquo;s focus on objectivity and facts. There is a time for solution design, but only once as many facts as possible about the specific topic of discussion are known. Another critical aspect of the white hat discussion is categorizing facts into &amp;ldquo;believed to be true&amp;rdquo; and those &amp;ldquo;verified to be true.&amp;rdquo;&lt;/p&gt;&#xA;&lt;h2 id=&#34;red-hat&#34;&gt;Red Hat&lt;/h2&gt;&#xA;&lt;p&gt;When &amp;ldquo;wearing&amp;rdquo; the red hat, the focus is on acknowledging that emotions, hunches, and intuition are real and should be explored. Emotion has three main points of impact.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Strong background emotion. Start with the red hat if the topic is controversial.&lt;/li&gt;&#xA;&lt;li&gt;Initial perception. It might be helpful to &amp;ldquo;take a pulse&amp;rdquo; on how the team (or yourself) is feeling at the start of the brainstorming session and at the end.&lt;/li&gt;&#xA;&lt;li&gt;The overall solution map. It is helpful to gauge how the team feels once a solution has been decided upon and mapped out.&#xA;When discussing intuition, it is essential to consider the expertise or specialty of the person bringing up the intuitive point. Does the person have some unique experience in the topic domain? If not, the intuition should not be as strongly supported.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It can be helpful to keep the following in mind when considering the red hat thinking process:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Does the proposed action satisfy expressed desires?&lt;/li&gt;&#xA;&lt;li&gt;Does the proposed action satisfy one party at the expense of another?&lt;/li&gt;&#xA;&lt;li&gt;Weigh carefully the tradeoffs of short-term and long-term satisfaction.&#xA;Emotions can lead the discussion off track quickly. The built-in interrupting mechanism of &amp;ldquo;putting on&amp;rdquo; the red hat allows the team (or yourself) to rapidly switch from emotion to other thinking directions.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;black-hat&#34;&gt;Black Hat&lt;/h2&gt;&#xA;&lt;p&gt;When &amp;ldquo;wearing&amp;rdquo; the black hat, the focus is on risks or weaknesses in the idea or solution. Focusing on just this aspect is more effective than looking at the pros and cons simultaneously, as the brain can only focus on one of those directions at a time. Context switching kills a productive discussion. The black hat serves two roles:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Assessment. Should we move forward or abandon the idea?&lt;/li&gt;&#xA;&lt;li&gt;Design. Point out the weaknesses to shore up with a particular idea or solution.&#xA;It would help if you were cautious not to overuse the black hat. If 95% of an idea is good, focusing on the 5% that is bad is helpful in the design phase, not the assessment phase.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;yellow-hat&#34;&gt;Yellow Hat&lt;/h2&gt;&#xA;&lt;p&gt;When &amp;ldquo;wearing&amp;rdquo; the yellow hat, the focus is on positive outcomes and opportunities. You are deliberately seeking out opportunities that exist with the idea or solution. You can also explore the practical application of old ideas. However, it is essential to also support optimistic standpoints. When seeking out opportunities, it can be helpful to do the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Start with the best opportunity. If the benefits of the opportunity are poor, there is no reason to pursue it.&lt;/li&gt;&#xA;&lt;li&gt;Scale down to the likelihood of the opportunity.&lt;/li&gt;&#xA;&lt;li&gt;Finally, use the black hat to pinpoint areas of doubt.&#xA;The vision of an idea or solution becomes the benefits combined with the feasibility.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;green-hat&#34;&gt;Green Hat&lt;/h2&gt;&#xA;&lt;p&gt;When &amp;ldquo;wearing&amp;rdquo; the green hat, the focus is on &amp;ldquo;escaping&amp;rdquo; old ideas. Creative thinking is all about provocation. You must provoke your mind to focus on new ideas and perspectives. One way to accomplish this is to put forth deliberately illogical ideas. Another good exercise is to look at what usually happens and then reverse it. Finally, it can also be helpful to incorporate &amp;ldquo;creative pauses&amp;rdquo; into the thinking process to purposefully interrupt the flow in the service of creative thinking.&lt;/p&gt;&#xA;&lt;p&gt;It is essential during green hat thinking to abstain from attacking ideas. When wearing the green hat, ideas should emphasize forward movement more than judgment. What can this idea do for us? You should also look for areas that are &amp;ldquo;idea-sensitive.&amp;rdquo; Idea-sensitive areas are areas where new concepts can make a huge impact.&lt;/p&gt;&#xA;&lt;h2 id=&#34;blue-hat&#34;&gt;Blue Hat&lt;/h2&gt;&#xA;&lt;p&gt;When &amp;ldquo;wearing&amp;rdquo; the blue hat, the focus is on thinking about the thinking. What is needed to thoroughly explore the subject? The blue hat focuses the thinking in one direction to ensure everyone is on the same page. Think of this activity as map making. First, the terrain is explored. Then, possible routes are examined. In this regard, the blue hat is also responsible for choosing the order of the hats in a given discussion. This can be fixed or fluid throughout the session.&lt;/p&gt;&#xA;&lt;h1 id=&#34;utilizing-the-six-hats-method-for-writing&#34;&gt;Utilizing the Six Hats Method for Writing&lt;/h1&gt;&#xA;&lt;p&gt;When I first finished reading about the Six Hats method for thinking, my first use case would be organizing and writing an article for my website. I created a canvas in &lt;a href=&#34;https://obsidian.md&#34;&gt;Obsidian&lt;/a&gt; and got to work.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;centered-figure&#34;&gt;&#xA;  &lt;img src=&#34;https://www.harleystagner.com/images/Obsidian-Canvas-Six-Hats.png&#34; alt=&#34;Obsidian Six Thinking Hats Canvas Template&#34; class=&#34;responsive-image&#34;&gt;&#xA;  &lt;figcaption&gt;Obsidian Six Thinking Hats Canvas Template&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Here is the order I followed:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Blue&lt;/strong&gt;. Big picture. What is my topic?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;White&lt;/strong&gt;. Facts. What are the facts about my topic?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Red&lt;/strong&gt;. Feelings. How do I feel about the topic and my writing approach overall?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Yellow&lt;/strong&gt;. Benefits. Why am I writing this? What are the benefits to myself and my readers?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Blue&lt;/strong&gt;. Organize the benefits into a list.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Black&lt;/strong&gt;. Challenges. What are some of the challenges to writing the article? What are the weaknesses in my approach?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Blue&lt;/strong&gt;. Organize the challenges into a list.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Red&lt;/strong&gt;. How do I feel about the benefits and challenges I have come up with? Should they be developed further?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Green&lt;/strong&gt;. Novel ideas and application. An example might be a call to action (CTA).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Blue&lt;/strong&gt;. Organize the novel ideas and application of concepts into a list.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Blue&lt;/strong&gt;. Organize the article into a proper structure and narrative flow.&#xA;I really appreciated this process more than I thought I would. What struck me as the most useful was the ability to simplify my thinking towards a specific outcome. When an idea first hits me, my mind wanders, essentially wearing all six hats simultaneously. I eventually can organize my thoughts into something cohesive, but the Six Thinking Hats methodology helped me achieve the desired outcome much quicker.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Overall, this initial experiment was a success, and I&amp;rsquo;m looking forward to utilizing this process on other projects. A couple of ideas that I am thinking about running through this process are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Value mapping. Can I figure out my core values by using this brainstorming process? What order should I utilize?&lt;/li&gt;&#xA;&lt;li&gt;Priorities. Can I use this process to prioritize what I work on at any given interval?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;What other use cases can you think of?&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;em&gt;You can follow my other writing and connect on social media by exploring the links at &lt;a href=&#34;https://harleystagner.me&#34;&gt;harleystagner.me&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Hugo to AWS S3 Publishing Workflow</title>
      <link>https://www.harleystagner.com/posts/hugo-to-s3-publishing-workflow/</link>
      <pubDate>Fri, 22 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://www.harleystagner.com/posts/hugo-to-s3-publishing-workflow/</guid>
      <description>&lt;p&gt;After many years of dealing with dynamic, database-driven websites, I have decided to move my professional website to a static site using the &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo static site generator&lt;/a&gt;. In the process, I wanted to simplify my hosting and design philosophy for this site. I decided on two requirements.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I want the site to be hosted as a static site from cloud storage (AWS S3 for now).&lt;/li&gt;&#xA;&lt;li&gt;I want the name resolution (DNS) and Content Distribution (CDN) to be handled by a third-party (Cloudflare for now). This will make it easier to move my website to another cloud provider should I need to do so in the future.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;With these two requirements in mind, I set out to make my new site. With a static site, all I really need to do is &lt;a href=&#34;https://docs.aws.amazon.com/AmazonS3/latest/userguide/HostingWebsiteOnS3Setup.html&#34;&gt;configure the S3 storage for static website hosting&lt;/a&gt; and upload the files. However, I want to version control my files with git and automate the process of sending them to S3. Let’s take a look at the publishing workflow.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-hugo-publishing-workflow&#34;&gt;My Hugo Publishing Workflow&lt;/h2&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;centered-figure&#34;&gt;&#xA;  &lt;img src=&#34;https://www.harleystagner.com/images/hugo-publishing-workflow.png&#34; alt=&#34;Hugo Publishing Workflow&#34; class=&#34;responsive-image&#34;&gt;&#xA;  &lt;figcaption&gt;Hugo Publishing Workflow&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Write the post or webpage using a markdown editor. Sometimes this is &lt;a href=&#34;https://obsidian.md/&#34;&gt;Obsidian&lt;/a&gt; and sometimes this is &lt;a href=&#34;https://ia.net/writer&#34;&gt;iA Writer&lt;/a&gt; depending on what I am posting.&lt;/li&gt;&#xA;&lt;li&gt;Preview the post and if I like it, I commit the changes to my local git repository and then tell Hugo to build the site.&lt;/li&gt;&#xA;&lt;li&gt;Push the changes to my remote GitHub repository.&lt;/li&gt;&#xA;&lt;li&gt;A &lt;a href=&#34;https://github.com/marketplace/actions/s3-sync&#34;&gt;GitHub action&lt;/a&gt; is used to then upload the “public” folder for my website to an Amazon S3 Bucket.&lt;/li&gt;&#xA;&lt;li&gt;Now my new post or webpage is in my S3 bucket.&lt;/li&gt;&#xA;&lt;li&gt;The public can access my website over the internet. (* &lt;em&gt;Note in the diagram that DNS and CDN is provided by Cloudflare so I can move my website to another cloud provider should I need to in the future.&lt;/em&gt;)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Now I have a fast, reliable, static website that can easily be changed or added to using plain-text markdown.&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>

