<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>McGinnis, Will</title>
    <link>https://mcginniscommawill.com/</link>
    <description>Recent content on McGinnis, Will</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 13 Mar 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://mcginniscommawill.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Chapter 1: The Old Country</title>
      <link>https://mcginniscommawill.com/guides/mcginnis-family-history/01-the-old-country/</link>
      <pubDate>Tue, 23 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/mcginnis-family-history/01-the-old-country/</guid>
      <description>&lt;p&gt;The journey of the McGinnis family to America did not begin in Ireland. It began an unknown number of years before, when on an uncertain date the Celts came to what would become Ireland. Or perhaps even before that.&lt;/p&gt;&#xA;&lt;p&gt;We can track or ancestery back to an individual in the 18th century, but before that we have only history and Ireland so that is where we will begin.&lt;/p&gt;&#xA;&lt;h2 id=&#34;once-upon-an-island-there-was-a-celt&#34;&gt;Once Upon An Island There Was A Celt&lt;/h2&gt;&#xA;&lt;span class=&#34;marginfig-wrapper&#34;&gt;&#xA;  &lt;label for=&#34;marginfig-1773562349323924792&#34; class=&#34;marginfig-toggle&#34;&gt;◊&lt;/label&gt;&#xA;  &lt;input type=&#34;checkbox&#34; id=&#34;marginfig-1773562349323924792&#34; class=&#34;marginfig-checkbox&#34; /&gt;&#xA;  &lt;span class=&#34;marginfig&#34;&gt;&#xA;    &lt;img src=&#34;https://mcginniscommawill.com/images/mcginnis/turoe-stone.jpg&#34; alt=&#34;The Turoe Stone, an Iron Age carved granite pillar&#34; class=&#34;marginfig-thumb&#34; onclick=&#34;openMarginfigModal(&#39;\/images\/mcginnis\/turoe-stone.jpg&#39;, &#39;The Turoe Stone, an Iron Age carved granite pillar&#39;, &#39;The Turoe Stone (c. 100 BC), County Galway. Its intricate La Tène spirals testify to Celtic artistic sophistication.&#39;)&#34; /&gt;&lt;span class=&#34;marginfig-caption&#34;&gt;The Turoe Stone (c. 100 BC), County Galway. Its intricate La Tène spirals testify to Celtic artistic sophistication.&lt;/span&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&#xA;&#xA;&lt;div id=&#34;marginfig-modal&#34; class=&#34;marginfig-modal&#34; onclick=&#34;closeMarginfigModal(event)&#34;&gt;&#xA;  &lt;div class=&#34;marginfig-modal-content&#34; onclick=&#34;event.stopPropagation()&#34;&gt;&#xA;    &lt;button class=&#34;marginfig-modal-close&#34; onclick=&#34;closeMarginfigModal(event)&#34;&gt;&amp;times;&lt;/button&gt;&#xA;    &lt;img id=&#34;marginfig-modal-img&#34; src=&#34;&#34; alt=&#34;&#34; /&gt;&#xA;    &lt;p id=&#34;marginfig-modal-caption&#34; class=&#34;marginfig-modal-caption&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Liquidation Preferences: A Complete Breakdown</title>
      <link>https://mcginniscommawill.com/guides/venture-capital-deals-guide/01-liquidation-preferences/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/venture-capital-deals-guide/01-liquidation-preferences/</guid>
      <description>&lt;p&gt;Liquidation preferences are one of those terms that show up in every venture deal, and yet surprisingly few people on either side of the table fully understand how they work. Small changes in these terms can have massive implications for how money actually flows when a company exits.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Chapter 2: The Crossing</title>
      <link>https://mcginniscommawill.com/guides/mcginnis-family-history/02-the-crossing/</link>
      <pubDate>Tue, 23 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/mcginnis-family-history/02-the-crossing/</guid>
      <description>&lt;p&gt;Imagine standing on the docks at Belfast or Newry, looking out at a wooden ship that would be your home for the next two months.&lt;label for=&#34;aside-1773562349344093910&#34; class=&#34;aside-toggle&#34;&gt;~&lt;/label&gt;&#xA;&lt;input type=&#34;checkbox&#34; id=&#34;aside-1773562349344093910&#34; class=&#34;aside-checkbox&#34; /&gt;&#xA;&lt;span class=&#34;aside&#34;&gt;We don&amp;rsquo;t know exactly which port our McGinnis ancestor sailed from, but Belfast and Newry were the busiest for Ulster emigrants, and the McGinnis name was most common in nearby County Down.&lt;/span&gt;&#xA; Behind you: everything you&amp;rsquo;ve ever known. The farm. The church. The graves of your parents. Ahead: a voyage across 3,000 miles of open ocean to a land you&amp;rsquo;ve only heard described in letters and pamphlets.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Protective Provisions in Venture Deals</title>
      <link>https://mcginniscommawill.com/guides/venture-capital-deals-guide/02-key-protective-provisions/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/venture-capital-deals-guide/02-key-protective-provisions/</guid>
      <description>&lt;p&gt;Protective provisions are one of the most important governance mechanisms in venture deals, and one of the least understood. They&amp;rsquo;re the veto rights that give preferred stockholders the ability to block certain corporate actions, and they live in the company&amp;rsquo;s certificate of incorporation (the charter). Without them, investors holding a minority of shares would have almost no ability to influence major decisions. With them, a single class of preferred stock can prevent the company from selling itself, issuing new shares, or taking on debt. I spent years at Aumni looking at how these provisions actually appeared across thousands of executed financing agreements, and the gap between what people think is standard and what actually shows up in signed documents was consistently surprising.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Complete Guide to QSBS for Venture Investors</title>
      <link>https://mcginniscommawill.com/guides/venture-capital-deals-guide/03-qsbs-complete-guide/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/venture-capital-deals-guide/03-qsbs-complete-guide/</guid>
      <description>&lt;p&gt;There&amp;rsquo;s a tax benefit hiding in plain sight that most people in venture capital have heard of but surprisingly few fully understand. It&amp;rsquo;s called Qualified Small Business Stock, or QSBS, and it lives in Section 1202 of the Internal Revenue Code. Done right, QSBS can let early shareholders exclude up to $10 million (or more) in capital gains from federal taxes when they sell their shares.&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s not a typo. Potentially zero federal capital gains tax on millions of dollars of gains. The gap between &amp;ldquo;knowing about QSBS&amp;rdquo; and &amp;ldquo;actually getting the benefit&amp;rdquo; is where most of the money gets left on the table. This post covers how it works, how to multiply the benefit, the mistakes that blow it up, the edge cases that create ambiguity, and how the industry&amp;rsquo;s approach has changed over time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Valuation Standards and Regulations in Venture Capital</title>
      <link>https://mcginniscommawill.com/guides/venture-capital-deals-guide/04-valuation-standards/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/venture-capital-deals-guide/04-valuation-standards/</guid>
      <description>&lt;p&gt;If you spend enough time around venture-backed companies and the funds that invest in them, you&amp;rsquo;ll hear people throw around terms like &amp;ldquo;409A valuation,&amp;rdquo; &amp;ldquo;ASC 820,&amp;rdquo; and &amp;ldquo;Rule 2a-5&amp;rdquo; as if they&amp;rsquo;re all part of the same thing. They&amp;rsquo;re related, sure, but they serve different purposes, apply to different parties, and operate under different assumptions. During my time as Head of Data Science at Aumni, I saw how much confusion these standards caused, even among people who dealt with them regularly. Let me try to untangle the three main valuation standards and regulations that govern how private companies and venture funds determine fair value.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How Startups Actually Get Valued</title>
      <link>https://mcginniscommawill.com/guides/venture-capital-deals-guide/05-how-startups-get-valued/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/venture-capital-deals-guide/05-how-startups-get-valued/</guid>
      <description>&lt;p&gt;Startup valuation is one of those topics where everyone has a take and almost nobody has the full picture. People see a headline number on TechCrunch and form an opinion about whether the market is hot or cold, rational or insane. Having spent years analyzing thousands of venture deals at Aumni, I can tell you that the headline number is the least interesting part. What actually drives startup valuations is a combination of investor incentives, company fundamentals, market dynamics, and compositional effects that make the data trickier to interpret than it looks at first glance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How Venture Valuations Move Through Market Cycles</title>
      <link>https://mcginniscommawill.com/guides/venture-capital-deals-guide/06-venture-valuation-cycles/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/venture-capital-deals-guide/06-venture-valuation-cycles/</guid>
      <description>&lt;p&gt;Venture markets move in cycles, and the pricing of individual funding rounds is where those cycles show up first. When I was Head of Data Science at Aumni, I spent years tracking how venture valuations shifted through booms and corrections. The 2022-2024 period gave us a textbook case study: a full cycle from peak to trough to selective recovery, all visible in the data if you knew where to look. The patterns weren&amp;rsquo;t unique to that period. They&amp;rsquo;re structural features of how venture capital reprices, and they&amp;rsquo;ll show up again in the next correction and the one after that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Valuation Methods for Venture Portfolios</title>
      <link>https://mcginniscommawill.com/guides/venture-capital-deals-guide/07-venture-valuation-methods/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/venture-capital-deals-guide/07-venture-valuation-methods/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;ve spent any time in venture capital finance, you&amp;rsquo;ve wrestled with a deceptively simple question: what is this investment actually worth right now? For public companies, you look at the stock price and move on. For private companies, the answer involves a mix of methodology, judgment, imperfect data, and the occasional philosophical debate. The gap between textbook approaches and real-world practice is worth understanding whether you&amp;rsquo;re a fund manager, a finance team member, or just someone curious about how the venture sausage gets made.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DPI, RVPI, TVPI, and IRR: Key Metrics for Evaluating VC Fund Performance</title>
      <link>https://mcginniscommawill.com/guides/venture-capital-deals-guide/08-dpi-rvpi-tvpi-irr/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/venture-capital-deals-guide/08-dpi-rvpi-tvpi-irr/</guid>
      <description>&lt;div class=&#34;callout callout--info&#34;&gt;&#xA;  This post is for informational and educational purposes only. Nothing here is legal, tax, or investment advice. Consult qualified professionals before making any decisions based on this content.&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;When you&amp;rsquo;re evaluating a venture capital fund&amp;rsquo;s performance, four metrics come up again and again: Distributed to Paid-In (DPI), Residual Value to Paid-In (RVPI), Total Value to Paid-In (TVPI), and Internal Rate of Return (IRR). Each one captures a different piece of the picture, and understanding how they work together is more useful than fixating on any single number.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Complete Guide to Convertible Instruments in Venture</title>
      <link>https://mcginniscommawill.com/guides/venture-capital-deals-guide/09-convertible-instruments/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/venture-capital-deals-guide/09-convertible-instruments/</guid>
      <description>&lt;p&gt;Convertible instruments are everywhere in startup financing, but I&amp;rsquo;ve found that a surprising number of people (including founders who have signed them) don&amp;rsquo;t fully understand the mechanics. When I was Head of Data Science at Aumni, we had visibility into thousands of these instruments across the venture ecosystem, and the data told a consistently clear story about how they&amp;rsquo;re structured, how they&amp;rsquo;ve evolved, and where things go wrong. This post is my attempt to put all of that into one place: what convertible notes and SAFEs actually are, how valuation caps work, why bridge rounds after a Series A look different from early-stage convertibles, and what happens when these instruments hang around longer than anyone planned for.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How Startups Can Manage Equity Dilution</title>
      <link>https://mcginniscommawill.com/guides/venture-capital-deals-guide/10-equity-dilution/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/venture-capital-deals-guide/10-equity-dilution/</guid>
      <description>&lt;p&gt;Dilution is one of those topics that every founder worries about but few approach systematically. The math is straightforward: every time you issue new shares, the percentage ownership of existing shareholders goes down. What&amp;rsquo;s less straightforward is how to manage that dilution across multiple rounds of financing, and how the structural choices you make early on compound over time. At Aumni, where I was Head of Data Science, we saw the dilution math play out across thousands of companies. A few patterns stood out in terms of what founders can actually control, and some of the less glamorous deal terms (like audited financial requirements) turned out to matter more than most people think.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Dynamics of Venture Fundraising</title>
      <link>https://mcginniscommawill.com/guides/venture-capital-deals-guide/11-fundraising-dynamics/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/venture-capital-deals-guide/11-fundraising-dynamics/</guid>
      <description>&lt;p&gt;Venture fundraising has a set of structural dynamics that shift predictably through market cycles. Lead investor ownership percentages, syndicate size, the mix of activity across stages, and (most telling of all) how long it takes companies to raise their next round. These dials move when the market moves. If you understand the pattern, you can read the cycle in real time rather than waiting for the headlines to catch up. I spent years looking at this data as Head of Data Science at Aumni, where we had extracted and anonymized data from more than 100,000 venture transactions representing over 40,000 investors. The 2020-2024 period gave us an unusually complete view of a full cycle: resilience, boom, correction, and partial recovery.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How Deal Terms Vary by Stage and Region</title>
      <link>https://mcginniscommawill.com/guides/venture-capital-deals-guide/12-stage-regional-patterns/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/venture-capital-deals-guide/12-stage-regional-patterns/</guid>
      <description>&lt;p&gt;Venture deal terms are not one-size-fits-all. Where a company sits in its lifecycle and where it&amp;rsquo;s based both shape the terms that end up in signed documents, sometimes in ways that run counter to the conventional wisdom. At Aumni, we had a unique vantage point on this because our dataset wasn&amp;rsquo;t just tracking valuations and round sizes. We had the actual legal provisions from tens of thousands of executed financing agreements. That depth let us ask questions that most market reports can&amp;rsquo;t touch, and the answers were often surprising. This post pulls together two threads from that work: how stage dynamics create structural patterns (and paradoxes) in early-stage markets, and how geography influences deal terms in ways that matter for both founders and investors.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Venture Fund Audit Guide</title>
      <link>https://mcginniscommawill.com/guides/venture-capital-deals-guide/13-fund-audit-guide/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/venture-capital-deals-guide/13-fund-audit-guide/</guid>
      <description>&lt;p&gt;Nobody loves audit season. Having worked with hundreds of venture funds at Aumni, I saw firsthand how the annual audit could range from &amp;ldquo;mildly annoying but manageable&amp;rdquo; to &amp;ldquo;absolute fire drill that consumes the entire finance team for weeks.&amp;rdquo; The difference almost always came down to preparation, communication, and data quality. The funds that had their act together before year-end sailed through. The ones that scrambled to pull documents together in January were miserable.&lt;/p&gt;&#xA;&lt;p&gt;What follows is a comprehensive guide drawn from all of that experience: the practical steps, the checklists, the timeline, and a case for why treating your audit as a data quality exercise (rather than a compliance chore) can pay off well beyond tax season.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fund Economics: Fees, Terms, and Portfolio Monitoring</title>
      <link>https://mcginniscommawill.com/guides/venture-capital-deals-guide/14-fund-economics/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/venture-capital-deals-guide/14-fund-economics/</guid>
      <description>&lt;p&gt;Venture fund economics are one of those topics where the broad strokes are widely known (the famous &amp;ldquo;2 and 20&amp;rdquo;) but the details matter enormously and change constantly. During my time as Head of Data Science at Aumni, I spent years working with thousands of limited partnership agreements and portfolio company datasets. That gave me a front-row seat to how fund terms are actually structured, how they&amp;rsquo;re evolving, and how investors use portfolio-level data to make better decisions. In this post, I want to pull together three threads that are deeply interconnected: management fee structures and step-downs, the broader evolution of LPA terms toward LP-friendly provisions, and the practical work of evaluating cash runway across a portfolio of companies. These topics live in different corners of the venture capital world, but they all come back to the same fundamental question: how do the economics of a fund actually work, and who benefits?&lt;/p&gt;</description>
    </item>
    <item>
      <title>KPI Monitoring for Venture Portfolios</title>
      <link>https://mcginniscommawill.com/guides/venture-capital-deals-guide/15-kpi-monitoring/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/venture-capital-deals-guide/15-kpi-monitoring/</guid>
      <description>&lt;div class=&#34;callout callout--info&#34;&gt;&#xA;  This post is for informational and educational purposes only. Nothing here is legal, tax, or investment advice. Consult qualified professionals before making any decisions based on this content.&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;KPI monitoring in venture capital sounds straightforward on paper: collect data from your companies, track how they&amp;rsquo;re doing, flag problems early. In practice, it&amp;rsquo;s one of the most operationally tricky parts of running a fund. After working through this problem from the data side across more than 10,000 portfolio company data points, I&amp;rsquo;ve seen how the right frameworks, stage-appropriate metrics, and well-designed collection processes separate great portfolio operations from mediocre ones.&lt;/p&gt;</description>
    </item>
    <item>
      <title>LP/GP Dynamics in Venture Capital</title>
      <link>https://mcginniscommawill.com/guides/venture-capital-deals-guide/16-lp-gp-dynamics/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/venture-capital-deals-guide/16-lp-gp-dynamics/</guid>
      <description>&lt;p&gt;The relationship between limited partners and general partners is the foundation of venture capital. Everything in the asset class (fund formation, deal sourcing, portfolio construction, exits) flows through that relationship. But the LP/GP dynamic is changing, and in ways that matter for anyone who participates in venture, whether you&amp;rsquo;re writing checks, allocating capital, or building a company that takes venture money. When I was Head of Data Science at Aumni, I spent years looking at the data that sits underneath these relationships, and the patterns were often surprising. The way LPs evaluate emerging managers, the growing importance of liquidity paths, the underappreciated power of co-investor networks, and the push for standardization across private markets are all reshaping how venture capital actually works on a day-to-day basis.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TrueSkill: Microsoft&#39;s Rating System for Xbox Live</title>
      <link>https://mcginniscommawill.com/posts/2026-03-13-trueskill-rating-system/</link>
      <pubDate>Fri, 13 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-03-13-trueskill-rating-system/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve explored Elo and the Glicko family of rating systems so far. Now it&amp;rsquo;s time to dive into a more modern approach: Microsoft&amp;rsquo;s TrueSkill system.&lt;/p&gt;&#xA;&lt;p&gt;Developed for Xbox Live matchmaking, TrueSkill represents a significant advancement in rating system design, incorporating Bayesian inference to handle uncertainty in a sophisticated way.&lt;/p&gt;</description>
    </item>
    <item>
      <title>hugo-frontmatter-mcp: Tests, CI, and uvx Support</title>
      <link>https://mcginniscommawill.com/posts/2026-03-11-hugo-frontmatter-mcp-update/</link>
      <pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-03-11-hugo-frontmatter-mcp-update/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/wdm0006/hugo-frontmatter-mcp&#34;&gt;hugo-frontmatter-mcp&lt;/a&gt; has been one of my most quietly useful MCP servers. I use it on this blog constantly. Whenever I&amp;rsquo;m working on posts with Claude, the model doesn&amp;rsquo;t have to guess at YAML formatting or try to hand-edit frontmatter. It just calls the tools. Tags get added correctly, dates are formatted right, descriptions get set without accidentally nuking the rest of the metadata. It solved a small problem so completely that I stopped thinking about it.&lt;/p&gt;&#xA;&lt;p&gt;The embarrassing part was that it had essentially no tests. It worked, but &amp;ldquo;works on my machine&amp;rdquo; is a bad answer when you&amp;rsquo;re modifying files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing Vanity: Sync Your GitHub Contributions Across Accounts</title>
      <link>https://mcginniscommawill.com/posts/2026-03-10-introducing-vanity/</link>
      <pubDate>Tue, 10 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-03-10-introducing-vanity/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;ve ever had more than one GitHub account - a personal one and a work one, or an old employer&amp;rsquo;s account you can&amp;rsquo;t log into anymore - you know the feeling. Your contribution graph on each account only tells part of the story. You shipped every day last year, but your personal GitHub looks like you took three months off because that work happened on a different account.&lt;/p&gt;&#xA;&lt;p&gt;This has bugged me for years. So I built &lt;a href=&#34;https://github.com/wdm0006/vanity&#34;&gt;vanity&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Maintaining Open Source Libraries Nobody Uses</title>
      <link>https://mcginniscommawill.com/posts/2026-03-09-maintaining-oss-nobody-uses/</link>
      <pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-03-09-maintaining-oss-nobody-uses/</guid>
      <description>&lt;p&gt;I maintain a handful of open source Python libraries.&lt;/p&gt;&#xA;&lt;p&gt;A couple of them do well. &lt;a href=&#34;https://github.com/wdm0006/pygeohash&#34;&gt;pygeohash&lt;/a&gt; is in the top 1% most downloaded Python packages, with over a hundred million installs.&lt;/p&gt;&#xA;&lt;p&gt;But I also maintain &lt;a href=&#34;https://github.com/wdm0006/elote&#34;&gt;elote&lt;/a&gt;, &lt;a href=&#34;https://github.com/wdm0006/keeks&#34;&gt;keeks&lt;/a&gt;, and &lt;a href=&#34;https://github.com/wdm0006/git-pandas&#34;&gt;git-pandas&lt;/a&gt;. These are small libraries with tiny small audiences, and maintaining them is a fundamentally different experience than maintaining something people actually depend on.&lt;/p&gt;&#xA;&lt;p&gt;And that&amp;rsquo;s the vast majority of open source.&lt;/p&gt;&#xA;&lt;p&gt;Nobody writes about maintaining a library with 200 GitHub stars. All the open source discourse is about burnout from massive projects, corporate free-loading, and the tragedy of the commons. Those are real problems. But they&amp;rsquo;re not my problems. My problems are quieter and weirder.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bankroll Management with Keeks: Strategy Comparison</title>
      <link>https://mcginniscommawill.com/posts/2026-03-06-strategy-comparison/</link>
      <pubDate>Fri, 06 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-03-06-strategy-comparison/</guid>
      <description>&lt;p&gt;In this final post of our series on bankroll management strategies in Keeks, we&amp;rsquo;ll bring everything together with a comparison of all the approaches we&amp;rsquo;ve explored. We&amp;rsquo;ll help you understand which strategy might be best for your specific situation, risk tolerance, and goals.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rampart v0.3: Default Branch Support and HTML Reports</title>
      <link>https://mcginniscommawill.com/posts/2026-03-04-rampart-default-branches-and-html-reports/</link>
      <pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-03-04-rampart-default-branches-and-html-reports/</guid>
      <description>&lt;p&gt;Two small but useful additions to &lt;a href=&#34;https://github.com/wdm0006/rampart&#34;&gt;rampart&lt;/a&gt; landed this week: automatic default branch resolution and HTML report output.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Your Ideas Deserve Better Than Apple Notes</title>
      <link>https://mcginniscommawill.com/posts/2026-03-03-your-ideas-deserve-better-than-apple-notes/</link>
      <pubDate>Tue, 03 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-03-03-your-ideas-deserve-better-than-apple-notes/</guid>
      <description>&lt;p&gt;I have about 140 ideas in &lt;a href=&#34;https://apps.apple.com/us/app/idea-log/id6755640991&#34;&gt;idea.log&lt;/a&gt; right now. Before I built it, those ideas lived in Apple Notes. Or they didn&amp;rsquo;t live anywhere, which was more often the problem.&lt;/p&gt;&#xA;&lt;p&gt;The Notes app is fine for grocery lists and meeting notes. But ideas are different. An idea needs a next step. It needs a status. It needs to be findable six weeks later when you suddenly have a free Saturday afternoon and want to build something.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Team MCP Servers - From Personal Tools to Shared Infrastructure</title>
      <link>https://mcginniscommawill.com/posts/2026-03-02-team-mcp-server-infrastructure/</link>
      <pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-03-02-team-mcp-server-infrastructure/</guid>
      <description>&lt;p&gt;I should say upfront: for single-user utilities, many or even most of the things people build as MCP servers should probably just be skills. A skills file lives in the repo, ships with the code, and progressive disclosure works. You don&amp;rsquo;t need a server running to give Claude a few custom commands.&lt;/p&gt;&#xA;&lt;p&gt;But there&amp;rsquo;s a specific case where skills files stop making sense and MCP servers start making a lot of sense: when you&amp;rsquo;re sharing tools, prompts, and resources across a team. And in that case, the question isn&amp;rsquo;t just &amp;ldquo;should I use MCP&amp;rdquo; but &amp;ldquo;should I host it.&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bankroll Management with Keeks: The Naive Strategy</title>
      <link>https://mcginniscommawill.com/posts/2026-02-27-naive-strategy/</link>
      <pubDate>Fri, 27 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-02-27-naive-strategy/</guid>
      <description>&lt;p&gt;In our previous posts, we&amp;rsquo;ve explored sophisticated bankroll management strategies from the Kelly Criterion to Dynamic Bankroll Management. Today, we&amp;rsquo;ll examine the Naive Strategy - a simple approach that serves as a useful baseline for comparison and, surprisingly, is still commonly used by many bettors and investors.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI Regulation One Year Later: What Changed in 2025</title>
      <link>https://mcginniscommawill.com/posts/2026-02-26-ai-regulation-updates-2026/</link>
      <pubDate>Thu, 26 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-02-26-ai-regulation-updates-2026/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This article represents a practitioner&amp;rsquo;s interpretation of the relevant rules and regulations in place at the time of writing. I am not a lawyer, and readers should consult with their own legal counsel and compliance teams before taking any action based on this information.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;About a year ago, I published a &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-02-19-global-ai-regulation-overview/&#34;&gt;series on AI regulation around the world&lt;/a&gt;, covering how seven major jurisdictions were approaching AI governance. At the time, a lot of the frameworks I wrote about were still proposals, guidelines, or works in progress. A year later, the picture looks quite different. Laws that were drafts are now enforceable. Countries that relied on voluntary guidelines have enacted their first binding legislation. And the US has managed to create a regulatory environment that&amp;rsquo;s somehow both more permissive and more contentious than before.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve gone back and updated each post in the series with the latest developments. This post summarizes what changed across the board.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing Rampart: Branch Protection Rules Across All Your Repos</title>
      <link>https://mcginniscommawill.com/posts/2026-02-25-introducing-rampart/</link>
      <pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-02-25-introducing-rampart/</guid>
      <description>&lt;p&gt;I have too many GitHub repos with no branch protection at all. Most of them are personal projects where it doesn&amp;rsquo;t matter much, but a few have collaborators, are depended on by other projects, or are public-facing enough that I&amp;rsquo;d really prefer nobody (including me) force-pushes to main by accident.&lt;/p&gt;&#xA;&lt;p&gt;The GitHub UI makes it easy to set branch protection for one repo. But doing it consistently across thirty repos is tedious. And keeping them consistent over time - when new repos get created, when you decide to change a rule, when you want to check that nothing has drifted - is the kind of thing that only works if it&amp;rsquo;s automated.&lt;/p&gt;&#xA;&lt;p&gt;So I built &lt;a href=&#34;https://github.com/wdm0006/rampart&#34;&gt;rampart&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>category_encoders in the Wild: A Tour of the Research</title>
      <link>https://mcginniscommawill.com/posts/2026-02-24-category-encoders-in-the-wild/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-02-24-category-encoders-in-the-wild/</guid>
      <description>&lt;p&gt;When you publish an open source library, you have some idea of who might use it. Data scientists, ML&#xA;engineers, maybe some Kaggle competitors. What you don&amp;rsquo;t expect is that one day you&amp;rsquo;ll find your little&#xA;categorical encoding library cited in a paper about cleaning toxic chemicals out of water. Or predicting&#xA;how pills dissolve. Or catching financial criminals. But here we are.&lt;/p&gt;&#xA;&lt;p&gt;Ages ago I did a series of blog posts here on different categorical encoding techniques and threw the code for it up on github. Gradually I worked on it to make it installable, and eventually got it into scikit-learn-contrib and the Journal of Open Source Software. Years ago I handed over maintenance of the project to a few incredible maintainers who have continued to keep it humming and growing since then.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Winter Reading List 2026</title>
      <link>https://mcginniscommawill.com/posts/2026-02-23-winter-reading-list-2026/</link>
      <pubDate>Mon, 23 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-02-23-winter-reading-list-2026/</guid>
      <description>&lt;p&gt;Following my &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-10-31-fall-reading-list/&#34;&gt;fall reading list&lt;/a&gt;, here&amp;rsquo;s what I&amp;rsquo;ve been reading this winter. This season&amp;rsquo;s theme emerged naturally: people consumed by ideas. Whether proving a theorem, building a dictionary, or fighting concepts that erase themselves from memory, each of these books follows someone gripped by something larger than themselves.&lt;/p&gt;&#xA;&lt;h2 id=&#34;fermats-last-theoremhttpswwwamazoncomdp1568583605tagmcginnis04-20&#34;&gt;&lt;a href=&#34;https://www.amazon.com/dp/1568583605?tag=mcginnis04-20&#34;&gt;Fermat&amp;rsquo;s Last Theorem&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;by Amir Aczel&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Aczel traces the centuries-long quest to prove Fermat&amp;rsquo;s Last Theorem, from that famous margin note in 1637 through generations of mathematicians who tried and failed, all the way to Andrew Wiles&amp;rsquo; proof in 1995. Wiles spent seven years working on it in secret, barely telling anyone what he was up to, which is almost unheard of in academic math.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bankroll Management with Keeks: Dynamic Strategies</title>
      <link>https://mcginniscommawill.com/posts/2026-02-20-dynamic-bankroll-management/</link>
      <pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-02-20-dynamic-bankroll-management/</guid>
      <description>&lt;p&gt;In our previous posts, we&amp;rsquo;ve explored various bankroll management strategies, from the mathematically optimal Kelly Criterion to the capital-preserving CPPI. Today, we&amp;rsquo;ll examine Dynamic Bankroll Management, an adaptive approach that adjusts bet sizing based on recent performance and market conditions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Case for a Dumb Idea App</title>
      <link>https://mcginniscommawill.com/posts/2026-02-18-case-for-a-dumb-idea-app/</link>
      <pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-02-18-case-for-a-dumb-idea-app/</guid>
      <description>&lt;p&gt;Every productivity app eventually becomes Notion.&lt;/p&gt;&#xA;&lt;p&gt;It starts simple. A clean interface, one job done well. Then someone requests folders. Then tags. Then recurring tasks, kanban boards, calendar integration, collaboration, templates, an API, and a plugin system. Before long you need a YouTube tutorial to figure out how to add a note.&lt;/p&gt;</description>
    </item>
    <item>
      <title>python-skills: Packaging Library Development as Claude Skills</title>
      <link>https://mcginniscommawill.com/posts/2026-02-17-python-skills-marketplace/</link>
      <pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-02-17-python-skills-marketplace/</guid>
      <description>&lt;p&gt;Last year I wrote a &lt;a href=&#34;https://mcginniscommawill.com/guides/python-library-development-guide/&#34;&gt;comprehensive guide to Python library development&lt;/a&gt; covering everything from project setup to PyPI publishing to security auditing. It&amp;rsquo;s thorough, but it has a limitation: it&amp;rsquo;s a document you have to go read and then apply yourself.&lt;/p&gt;&#xA;&lt;p&gt;So I packaged the whole thing into &lt;a href=&#34;https://github.com/wdm0006/python-skills&#34;&gt;python-skills&lt;/a&gt;, a set of 12 Claude skills that you can install and immediately have that expertise applied automatically when you&amp;rsquo;re working on Python libraries. Ask Claude to set up a new library, and it knows about pyproject.toml, uv, ruff, pre-commit, and GitHub Actions. Ask it to review your test suite, and it knows about fixtures, parametrization, and property-based testing with Hypothesis.&lt;/p&gt;&#xA;&lt;p&gt;But before I get into the specifics, let me back up for anyone who hasn&amp;rsquo;t used skills or marketplaces yet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Training a Deep Q-Network for Trading</title>
      <link>https://mcginniscommawill.com/posts/2026-02-16-training-a-deep-q-network-for-trading/</link>
      <pubDate>Mon, 16 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-02-16-training-a-deep-q-network-for-trading/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been working on a trading algorithm that uses reinforcement learning to make buy, hold, and sell decisions. Not a toy project but a real system I&amp;rsquo;m training on Lambda Cloud with actual capital on the line eventually. The core is a Deep Q-Network, and getting it to train stably has been an education in all the things that can go wrong with RL.&lt;/p&gt;&#xA;&lt;p&gt;This post covers how DQNs work and the techniques I&amp;rsquo;m using to train ours. I&amp;rsquo;m not going to detail the specific features or trading strategy, but I do want to explain the modeling approach because there&amp;rsquo;s a lot of hard-won knowledge in making these things actually converge.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bankroll Management with Keeks: CPPI</title>
      <link>https://mcginniscommawill.com/posts/2026-02-13-cppi/</link>
      <pubDate>Fri, 13 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-02-13-cppi/</guid>
      <description>&lt;p&gt;In our previous posts, we&amp;rsquo;ve explored various bankroll management strategies, from the mathematically optimal Kelly Criterion to the straightforward Fixed Fraction approach. Today, we&amp;rsquo;ll examine a strategy that prioritizes capital preservation: Constant Proportion Portfolio Insurance (CPPI).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ruff vs Traditional Bandit - A Performance Comparison</title>
      <link>https://mcginniscommawill.com/posts/2026-02-10-ruff-bandit-vs-traditional/</link>
      <pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-02-10-ruff-bandit-vs-traditional/</guid>
      <description>&lt;p&gt;When Ruff announced it had reimplemented Bandit&amp;rsquo;s security rules in Rust, my first thought was skepticism. Another tool trying to be everything to everyone, I figured. But after spending a week benchmarking Ruff against traditional Bandit on a real codebase: it was 25 times faster.&lt;/p&gt;&#xA;&lt;p&gt;That performance difference fundamentally changes how you can use security scanning in your development workflow. When security scans that used to take five minutes now complete in twelve seconds, you can afford to run them on every commit, integrate them into your editor, and provide real-time feedback to developers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reviving Graduate School MATLAB with Claude Code</title>
      <link>https://mcginniscommawill.com/posts/2026-02-09-parga-reviving-matlab-with-ai/</link>
      <pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-02-09-parga-reviving-matlab-with-ai/</guid>
      <description>&lt;p&gt;Every researcher has a graveyard of old code. Mine includes MATLAB scripts from graduate school that once optimized rocket motor geometries, tuned CubeSat attitude controllers, and ran parallel genetic algorithms across networked lab computers. For years, these files sat in a folder called &amp;ldquo;grad_school_matlab&amp;rdquo; on backup drives, technically functional but practically useless.&lt;/p&gt;&#xA;&lt;p&gt;Then some new models came out and I needed something interesting to try them out on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bankroll Management with Keeks: Fixed Fraction</title>
      <link>https://mcginniscommawill.com/posts/2026-02-06-fixed-fraction/</link>
      <pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-02-06-fixed-fraction/</guid>
      <description>&lt;p&gt;In our previous posts, we&amp;rsquo;ve explored mathematically sophisticated bankroll management strategies like the Kelly Criterion, Fractional Kelly, Drawdown-Adjusted Kelly, and OptimalF. Today, we&amp;rsquo;ll examine a simpler approach: the Fixed Fraction strategy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Scientific Method as a Decision Framework</title>
      <link>https://mcginniscommawill.com/posts/2026-02-03-scientific-method-business/</link>
      <pubDate>Tue, 03 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-02-03-scientific-method-business/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been writing about decision frameworks for a while now. &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-05-10-pdca-quality-control/&#34;&gt;PDCA&lt;/a&gt; for continuous improvement, &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-10-27-nursing-decision-cycle/&#34;&gt;ASPIRE&lt;/a&gt; for real-time clinical response, &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-11-03-recognition-primed-decisions/&#34;&gt;RPD&lt;/a&gt; for split-second pattern matching. And somewhere along the way, I realized something that should have been obvious: they&amp;rsquo;re all the same thing.&lt;/p&gt;&#xA;&lt;p&gt;Not identical, obviously. But they&amp;rsquo;re all adaptations of the scientific method to different time scales and contexts. Once you see it, you can&amp;rsquo;t unsee it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I Write Software With AI</title>
      <link>https://mcginniscommawill.com/posts/2026-02-02-how-i-write-software-with-ai/</link>
      <pubDate>Mon, 02 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-02-02-how-i-write-software-with-ai/</guid>
      <description>&lt;p&gt;My software development workflow has gotten messier since I started using AI tools heavily. That sounds like a criticism but it&amp;rsquo;s not. The mess is the point.&lt;/p&gt;&#xA;&lt;p&gt;The fundamental shift is simple: writing the wrong code used to be expensive. Now it&amp;rsquo;s cheap. When spinning up a throwaway script takes minutes instead of hours, you can afford to explore more dead ends. You can write code you know you&amp;rsquo;ll delete just to understand the problem better. The economics of exploration have changed.&lt;/p&gt;&#xA;&lt;p&gt;I mostly build data and AI backend services, the kind of systems where you&amp;rsquo;re wrangling datasets, training models, and wrapping them in APIs. Here&amp;rsquo;s how that process looks now.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bankroll Management with Keeks: OptimalF</title>
      <link>https://mcginniscommawill.com/posts/2026-01-30-optimalf/</link>
      <pubDate>Fri, 30 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-01-30-optimalf/</guid>
      <description>&lt;p&gt;In our previous posts, we explored the Kelly Criterion, Fractional Kelly, and Drawdown-Adjusted Kelly strategies. Today, we&amp;rsquo;ll examine OptimalF, a different approach to bankroll management developed by trading system expert Ralph Vince.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Integrating Bandit into CI/CD Pipelines</title>
      <link>https://mcginniscommawill.com/posts/2026-01-27-bandit-ci-cd-integration/</link>
      <pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-01-27-bandit-ci-cd-integration/</guid>
      <description>&lt;p&gt;The first time I tried adding Bandit to our CI pipeline, I broke every deployment for a week. The tool failed every build and effectively shut down our ability to ship features. It&amp;rsquo;s hard not to instantly regret it.&lt;/p&gt;&#xA;&lt;p&gt;Integrating security tools is as much a change management problem as a technical one. The goal is building sustainable processes that improve security over time without grinding development to a halt.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Evergreen Gets Even Evergreener</title>
      <link>https://mcginniscommawill.com/posts/2026-01-26-evergreen-gets-even-evergreener/</link>
      <pubDate>Mon, 26 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-01-26-evergreen-gets-even-evergreener/</guid>
      <description>&lt;p&gt;Last fall I used AI agents, a mix of claude code and codex, to write a custom personal CRM in a language I don&amp;rsquo;t know: Swift. Originally it was to keep track of the members of the &lt;a href=&#34;https://www.atlantaaidinner.com&#34;&gt;Atlanta AI Dinner&lt;/a&gt; group, but it quickly became my goto for all personal contact management.&lt;/p&gt;&#xA;&lt;p&gt;It has a pretty simple premise: just be the CRM for claude. My main interactions happen through claude desktop, connected to Evergreen via it&amp;rsquo;s packaged MCP. That makes things like management, enrichment, and connections to other tools like gsuite a no brainer, claude just does it. Evergreen then is really just an MCP-connected local database.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Restaurant Oracle: Find Your Next Meal</title>
      <link>https://mcginniscommawill.com/library/restaurant-oracle/</link>
      <pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/library/restaurant-oracle/</guid>
      <description>&lt;p&gt;I keep a list of restaurants I think people should try. But instead of just handing you the whole list (where&amp;rsquo;s the fun in that?), I built this thing instead.&lt;/p&gt;&#xA;&lt;p&gt;Enter your address below and I&amp;rsquo;ll tell you which restaurant from my list is closest to you. That&amp;rsquo;s your next spot. No scrolling through options, no decision fatigue. Just trust the process.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;div class=&#34;restaurant-finder&#34;&gt;&#xA;  &lt;div class=&#34;restaurant-finder__input-section&#34;&gt;&#xA;    &lt;label for=&#34;address-input&#34; class=&#34;restaurant-finder__label&#34;&gt;&#xA;      Enter your address to discover your destiny:&#xA;    &lt;/label&gt;&#xA;    &lt;div class=&#34;restaurant-finder__input-group&#34;&gt;&#xA;      &lt;input&#xA;        type=&#34;text&#34;&#xA;        id=&#34;address-input&#34;&#xA;        class=&#34;restaurant-finder__input&#34;&#xA;        placeholder=&#34;123 Main St, Atlanta, GA&#34;&#xA;        autocomplete=&#34;street-address&#34;&#xA;      /&gt;&#xA;      &lt;button id=&#34;find-restaurant-btn&#34; class=&#34;restaurant-finder__button&#34;&gt;&#xA;        Find My Spot&#xA;      &lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;p class=&#34;restaurant-finder__hint&#34;&gt;&#xA;      We&#39;ll find the one restaurant you need to try next. No peeking at the full list.&#xA;    &lt;/p&gt;</description>
    </item>
    <item>
      <title>Bankroll Management with Keeks: Drawdown-Adjusted Kelly</title>
      <link>https://mcginniscommawill.com/posts/2026-01-23-drawdown-adjusted-kelly/</link>
      <pubDate>Fri, 23 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-01-23-drawdown-adjusted-kelly/</guid>
      <description>&lt;p&gt;In our previous posts, we explored the Kelly Criterion and Fractional Kelly strategies. Today, we&amp;rsquo;ll examine a more dynamic approach: Drawdown-Adjusted Kelly, which automatically adjusts bet sizing based on recent performance to limit drawdowns.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managing Bandit False Positives Without Breaking Security</title>
      <link>https://mcginniscommawill.com/posts/2026-01-22-bandit-false-positives/</link>
      <pubDate>Thu, 22 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-01-22-bandit-false-positives/</guid>
      <description>&lt;p&gt;Six months after I adopted Bandit, I realized we had a false positive problem. Not because the tool was broken, but because we&amp;rsquo;d gotten sloppy about how we handled legitimate security warnings. We were adding &lt;code&gt;# nosec&lt;/code&gt; comments everywhere, effectively turning off security scanning one line at a time.&lt;/p&gt;&#xA;&lt;p&gt;The wake-up call came during a review when we discovered that some &lt;code&gt;# nosec&lt;/code&gt; comments were suppressing real vulnerabilities, not false positives. We&amp;rsquo;d trained ourselves to ignore Bandit&amp;rsquo;s warnings instead of understanding them. It was a sobering reminder that security tools are only as good as the discipline with which you use them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Atlanta AI Dinner: What&#39;s Coming in 2026</title>
      <link>https://mcginniscommawill.com/posts/2026-01-20-atlanta-ai-dinner-2026-plans/</link>
      <pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-01-20-atlanta-ai-dinner-2026-plans/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://atlantaaidinner.com&#34;&gt;Atlanta AI Dinner&lt;/a&gt; has been going for a while now, and we&amp;rsquo;ve had some really great events over the past year. The format works: 6-8 people around a table, no pitches, no panels, just real conversation about AI with people actually building things. It&amp;rsquo;s small and intimate by design.&lt;/p&gt;&#xA;&lt;p&gt;If you haven&amp;rsquo;t visited the site recently, it got a refresh and looks a bit prettier now. We&amp;rsquo;ve also added a calendar so people can peek in at the types of things we do.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bankroll Management with Keeks: Fractional Kelly</title>
      <link>https://mcginniscommawill.com/posts/2026-01-16-fractional-kelly/</link>
      <pubDate>Fri, 16 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-01-16-fractional-kelly/</guid>
      <description>&lt;p&gt;In our previous post on the Kelly Criterion, we explored the mathematically optimal strategy for maximizing long-term bankroll growth. Today, we&amp;rsquo;ll look at a popular variation: Fractional Kelly, which trades some theoretical growth for reduced volatility and better sleep at night.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scenario Planning for When You Don&#39;t Know What&#39;s Coming</title>
      <link>https://mcginniscommawill.com/posts/2026-01-14-scenario-planning/</link>
      <pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-01-14-scenario-planning/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve written about frameworks that help you respond when a situation unfolds - &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-05-10-pdca-quality-control/&#34;&gt;PDCA&lt;/a&gt; for systematic improvement, &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-10-27-nursing-decision-cycle/&#34;&gt;ASPIRE&lt;/a&gt; for real-time clinical judgment, &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-11-03-recognition-primed-decisions/&#34;&gt;RPD&lt;/a&gt; for split-second pattern matching. But all of them assume you know what you&amp;rsquo;re facing.&lt;/p&gt;&#xA;&lt;p&gt;What about when you don&amp;rsquo;t?&lt;/p&gt;&#xA;&lt;p&gt;A nuclear plant has to prepare for accidents it hopes never happen. A hospital system needs mass casualty protocols for events that may never occur. Emergency management agencies plan for disaster combinations they can only imagine. The future is genuinely uncertain, and you can&amp;rsquo;t wait for it to arrive before you start preparing.&lt;/p&gt;&#xA;&lt;p&gt;This is where scenario planning comes in.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Complete Guide to Long-Term Airbnb Stays with a Three-Year-Old</title>
      <link>https://mcginniscommawill.com/posts/2026-01-12-long-term-airbnb-with-toddler/</link>
      <pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-01-12-long-term-airbnb-with-toddler/</guid>
      <description>&lt;p&gt;We&amp;rsquo;re currently doing some construction on our house, which means we&amp;rsquo;ve been living in an Airbnb for a few months with our three-year-old. If you&amp;rsquo;ve never had this experience, let me paint you a picture: imagine your most anxiety-inducing &amp;ldquo;this isn&amp;rsquo;t our stuff&amp;rdquo; nightmare, then add a tiny human whose primary hobbies include finding markers and testing the limits of gravity with beverages.&lt;/p&gt;&#xA;&lt;p&gt;This guide is less about finding the perfect long-term rental (get one with a washer/dryer, the end) and more about the cleaning knowledge I&amp;rsquo;ve accumulated through a series of increasingly panicked Google searches.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Verification and Validation: Building the Right Thing Right</title>
      <link>https://mcginniscommawill.com/posts/2026-01-08-verification-and-validation/</link>
      <pubDate>Thu, 08 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-01-08-verification-and-validation/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;ve spent any time around systems engineers, you&amp;rsquo;ve probably heard the terms &amp;ldquo;verification&amp;rdquo; and &amp;ldquo;validation&amp;rdquo; thrown around with an almost religious reverence. To the uninitiated, they sound interchangeable. They&amp;rsquo;re not, and understanding the difference can save you from building something that works perfectly but solves the wrong problem.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bet A Day: An App for Practicing Decisions Under Uncertainty</title>
      <link>https://mcginniscommawill.com/posts/2026-01-06-bet-a-day/</link>
      <pubDate>Tue, 06 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-01-06-bet-a-day/</guid>
      <description>&lt;p&gt;Over Christmas break, I also built an iOS app called Bet A Day. The pitch is simple: make one stock market prediction per day, then reflect on whether your decision was good or bad, independent of whether you won or lost.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s not a trading app. No real money changes hands. The stock market is just a convenient source of daily outcomes with enough uncertainty to make things interesting.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-problem-i-wanted-to-solve&#34;&gt;The Problem I Wanted to Solve&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve written before about &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-11-06-resulting&#34;&gt;resulting&lt;/a&gt;, the tendency to judge decisions by their outcomes rather than their quality at the time they were made. It&amp;rsquo;s one of those cognitive biases that sounds easy to avoid in theory but is surprisingly hard to escape in practice.&lt;/p&gt;</description>
    </item>
    <item>
      <title>idea.log: An iPhone App for Capturing Ideas on the Go</title>
      <link>https://mcginniscommawill.com/posts/2026-01-05-idea-log-an-iphone-app-for-capturing-ideas/</link>
      <pubDate>Mon, 05 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-01-05-idea-log-an-iphone-app-for-capturing-ideas/</guid>
      <description>&lt;p&gt;I ride bikes a lot. And when I&amp;rsquo;m out on a ride, sometimes ideas pop into my head. &lt;label for=&#34;sn-1773562363374200180&#34; class=&#34;sidenote-toggle&#34;&gt;*&lt;/label&gt;&#xA;&lt;input type=&#34;checkbox&#34; id=&#34;sn-1773562363374200180&#34; class=&#34;sidenote-checkbox&#34; /&gt;&#xA;&lt;span class=&#34;sidenote&#34;&gt;Most are terrible but it&amp;rsquo;s probably 2 an hour on average.&lt;/span&gt;&#xA; A feature for a side project, a blog post topic, a solution to a problem I&amp;rsquo;ve been stuck on. The problem is that by the time I get home, half of them have evaporated. The ones I do remember, I often never follow up on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trail Report: Palmer Woods, Michigan</title>
      <link>https://mcginniscommawill.com/posts/2026-01-04-palmer-woods-trail-report/</link>
      <pubDate>Sun, 04 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-01-04-palmer-woods-trail-report/</guid>
      <description>&lt;p&gt;Every summer my family goes to North West Michigan to visit family and escape the summer heat in Atlanta. I really can&amp;rsquo;t recommend it enough.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trail Report: Coldwater Mountain</title>
      <link>https://mcginniscommawill.com/posts/2026-01-03-coldwater-mountain-trail-report/</link>
      <pubDate>Sat, 03 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-01-03-coldwater-mountain-trail-report/</guid>
      <description>&lt;p&gt;Coldwater Mountain has earned its reputation as one of the Southeast&amp;rsquo;s premier mountain biking destinations. With over 40 miles of purpose-built trails ranging from flowing beginner routes to technical expert-only lines, this IMBA Ride Center offers something for every rider.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Year&#39;s Start: Looking Forward to 2026</title>
      <link>https://mcginniscommawill.com/posts/2026-01-02-years-start-looking-forward-2026/</link>
      <pubDate>Fri, 02 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2026-01-02-years-start-looking-forward-2026/</guid>
      <description>&lt;p&gt;Every year I try to find a theme. Something short enough to remember, specific enough to guide decisions, vague enough to apply broadly. Earlier this year I wrote about &amp;ldquo;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-03-10-do-a-small-thing-well/&#34;&gt;do a small thing well&lt;/a&gt;&amp;rdquo; as a mantra for avoiding burnout. &lt;label for=&#34;sn-1773562363327552847&#34; class=&#34;sidenote-toggle&#34;&gt;*&lt;/label&gt;&#xA;&lt;input type=&#34;checkbox&#34; id=&#34;sn-1773562363327552847&#34; class=&#34;sidenote-checkbox&#34; /&gt;&#xA;&lt;span class=&#34;sidenote&#34;&gt;The process itself became part of the point. Using AI as a tool for abstract planning felt appropriately meta for someone who spends most of their time thinking about AI.&lt;/span&gt;&#xA;This year I tried something different: I used AI to help me develop the theme through a more structured process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Year&#39;s End: Looking Back at 2025</title>
      <link>https://mcginniscommawill.com/posts/2025-12-31-years-end-looking-back-2025/</link>
      <pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-12-31-years-end-looking-back-2025/</guid>
      <description>&lt;p&gt;2025 was a year of transitions, but not always change. It felt like a focusing, and in ways an acceleration.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-career-move&#34;&gt;The Career Move&lt;/h2&gt;&#xA;&lt;p&gt;Early in the year I decided it was time to move onto something smaller again, a fund or a startup, and I began slowly keeping an eye out. After an on brand mix of serendipity (saw a linkedin joke) and followup, I decided to accept a new role in August. In October I joined &lt;a href=&#34;https://www.scalevp.com/&#34;&gt;Scale Venture Partners&lt;/a&gt; as Chief Data Scientist. After years building ML systems for venture data at Aumni and JPMorgan Chase, I&amp;rsquo;m now working directly with a VC firm to embed AI infrastructure into their investment process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Project Diaries in ContextSwitch: Your AI-Powered Development Journal</title>
      <link>https://mcginniscommawill.com/posts/2025-12-29-contextswitch-diary-features/</link>
      <pubDate>Mon, 29 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-12-29-contextswitch-diary-features/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been using ContextSwitch to manage my todos for a while now, but the new &lt;strong&gt;diary feature&lt;/strong&gt; has made it much more valuable. Combined with Claude Code hooks, it&amp;rsquo;s become an automated daily journal that keeps me honest about what I&amp;rsquo;m actually accomplishing, and provides a long term memory of project decisions and progress.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-are-diary-entries&#34;&gt;What Are Diary Entries?&lt;/h2&gt;&#xA;&lt;p&gt;The diary feature in ContextSwitch is a structured journaling system built right into your todo database. Unlike traditional diary apps, these entries are designed specifically for tracking project work, decisions, and development progress. Each entry can include:&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI Tools I Actually Use</title>
      <link>https://mcginniscommawill.com/posts/2025-12-25-ai-tools-i-actually-use/</link>
      <pubDate>Thu, 25 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-12-25-ai-tools-i-actually-use/</guid>
      <description>&lt;p&gt;I build software that incorporates AI, which means I spend a lot of time thinking about what these tools can and can&amp;rsquo;t do. But I&amp;rsquo;m also a user. Here&amp;rsquo;s what I actually use day-to-day, stripped of any evangelism or hand-waving about the future.&lt;/p&gt;&#xA;&lt;h2 id=&#34;claude-desktop-my-main-interface&#34;&gt;Claude Desktop: My Main Interface&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://claude.ai/desktop&#34;&gt;Claude Desktop&lt;/a&gt; is my general-purpose AI interface. I use it for most things that aren&amp;rsquo;t code, like drafting, research, architecture discussions, etc. It&amp;rsquo;s not perfect, but it&amp;rsquo;s become a pretty central part of my workflow.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Guide to the Guides</title>
      <link>https://mcginniscommawill.com/posts/2025-12-23-a-guide-to-the-guides/</link>
      <pubDate>Tue, 23 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-12-23-a-guide-to-the-guides/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been building out a collection of guides on this site that are a bit different from regular blog posts. These are living documents that I update over time as things change or as I discover new things worth adding. Think of them as curated reference pages rather than point-in-time posts.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s what&amp;rsquo;s available:&lt;/p&gt;&#xA;&lt;h2 id=&#34;business&#34;&gt;Business&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://mcginniscommawill.com/library/atlanta-ai-guide/&#34;&gt;Atlanta AI Guide&lt;/a&gt; - A look at AI in Atlanta: its history, present, and future. Covers the companies, people, and institutions that make up the local AI ecosystem.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PyGeoHash 2025: A Year of Transformation</title>
      <link>https://mcginniscommawill.com/posts/2025-12-22-pygeohash-year-in-review/</link>
      <pubDate>Mon, 22 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-12-22-pygeohash-year-in-review/</guid>
      <description>&lt;p&gt;As 2025 winds down, I wanted to take a moment to reflect on what&amp;rsquo;s been a transformative year for PyGeoHash. When I created this library back in 2015 as a Python 3 fork of the original geohash module, I never imagined it would still be going strong a decade later, let alone undergo the kind of fundamental transformation it experienced this year.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tapedeck: Albums That Hold Up Over Time</title>
      <link>https://mcginniscommawill.com/library/tapedeck/</link>
      <pubDate>Mon, 22 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/library/tapedeck/</guid>
      <description>&lt;button class=&#34;izzy-mode-toggle&#34; onclick=&#34;toggleIzzyMode()&#34;&gt;&#xA;  &lt;span class=&#34;emoji&#34;&gt;🦄&lt;/span&gt; Izzy Mode&#xA;&lt;/button&gt;&#xA;&lt;!-- Floating decorations for Izzy Mode --&gt;&#xA;&lt;div class=&#34;izzy-decorations&#34;&gt;&#xA;  &lt;span class=&#34;izzy-decoration&#34;&gt;🦄&lt;/span&gt;&#xA;  &lt;span class=&#34;izzy-decoration&#34;&gt;🌈&lt;/span&gt;&#xA;  &lt;span class=&#34;izzy-decoration&#34;&gt;⭐&lt;/span&gt;&#xA;  &lt;span class=&#34;izzy-decoration&#34;&gt;🎀&lt;/span&gt;&#xA;  &lt;span class=&#34;izzy-decoration&#34;&gt;🌸&lt;/span&gt;&#xA;  &lt;span class=&#34;izzy-decoration&#34;&gt;✨&lt;/span&gt;&#xA;&lt;/div&gt;&#xA;&lt;!-- Izzy&#39;s intro message --&gt;&#xA;&lt;div class=&#34;izzy-intro&#34;&gt;&#xA;  &lt;span class=&#34;emoji-big&#34;&gt;🎵🦄🎶&lt;/span&gt;&#xA;  &lt;p&gt;Welcome to Izzy&#39;s Music! These are my favorite songs to dance to!&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;!-- Dad&#39;s content (normal mode) --&gt;&#xA;&lt;div class=&#34;dad-content&#34;&gt;&#xA;&lt;p&gt;A collection of albums I keep coming back to. No particular order.&lt;/p&gt;&#xA;&lt;button id=&#34;play-random-album&#34; class=&#34;play-random-btn&#34;&gt;&#xA;  &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;    &lt;polygon points=&#34;5 3 19 12 5 21 5 3&#34;&gt;&lt;/polygon&gt;&#xA;  &lt;/svg&gt;&#xA;  Play Random Album&#xA;&lt;/button&gt;&#xA;&lt;div id=&#34;albumshelf-1773562349537146060&#34; class=&#34;albumshelf-grid &#34;&gt;&#xA;  &#xA;&lt;div class=&#34;album-card album-card--playable&#34;&#xA;  data-audio-player&#xA;  data-title=&#34;80&amp;#39;z&#34;&#xA;  data-artist=&#34;bb trickz&#34;&#xA;  data-image=&#34;/images/covers/albums/itunes_1804394843.jpg&#34;data-spotify=&#34;67YvgeZeleDvyK1sdaxi6G&#34;&gt;&#xA;  &lt;div class=&#34;album-card__link album-card__link--playable&#34;&gt;&#xA;    &lt;div class=&#34;album-card__cover&#34;&gt;&#xA;      &lt;img src=&#34;https://mcginniscommawill.com/images/covers/albums/itunes_1804394843.jpg&#34; alt=&#34;Cover of 80&amp;#39;z by bb trickz&#34; loading=&#34;lazy&#34; class=&#34;album-card__img--loaded&#34; /&gt;&#xA;      &lt;div class=&#34;album-card__placeholder&#34; style=&#34;display: none;&#34;&gt;&#xA;        &lt;span&gt;80&amp;#39;z&lt;/span&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div class=&#34;album-card__play-overlay&#34;&gt;&#xA;        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;48&#34; height=&#34;48&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;currentColor&#34;&gt;&#xA;          &lt;path d=&#34;M8 5v14l11-7z&#34;/&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;album-card__info&#34;&gt;&#xA;      &lt;h4 class=&#34;album-card__title&#34;&gt;80&amp;#39;z&lt;/h4&gt;&#xA;      &lt;p class=&#34;album-card__artist&#34;&gt;bb trickz&lt;/p&gt;</description>
    </item>
    <item>
      <title>Aphorisms: Quotes and Wisdom Worth Remembering</title>
      <link>https://mcginniscommawill.com/library/aphorisms/</link>
      <pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/library/aphorisms/</guid>
      <description>&lt;p&gt;A collection of aphorisms, quotes, creeds, or pithy phrases I&amp;rsquo;ve come across or heard and find worth remembering for one reason or another.&lt;/p&gt;&#xA;&lt;div class=&#34;quotebook &#34;&gt;&#xA;  &#xA;  &lt;div class=&#34;quotebook__hero&#34;&gt;&#xA;    &lt;div class=&#34;quotebook__hero-label&#34;&gt;Quote of the Day&lt;/div&gt;&#xA;    &lt;div class=&#34;quotebook__hero-quote&#34;&gt;&lt;/div&gt;&#xA;    &lt;div class=&#34;quotebook__hero-actions&#34;&gt;&#xA;      &lt;button class=&#34;quotebook__hero-copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;18&#34; height=&#34;18&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;          &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;          &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;        &lt;/svg&gt;&#xA;        &lt;span class=&#34;quotebook__hero-copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;      &lt;/button&gt;&#xA;      &lt;button class=&#34;quotebook__hero-share&#34; type=&#34;button&#34; aria-label=&#34;Share quote&#34; title=&#34;Share on X&#34;&gt;&#xA;        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;18&#34; height=&#34;18&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;currentColor&#34;&gt;&#xA;          &lt;path d=&#34;M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z&#34;/&gt;&#xA;        &lt;/svg&gt;&#xA;        &lt;span&gt;Share&lt;/span&gt;&#xA;      &lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &#xA;  &lt;div class=&#34;quotebook__filter&#34; style=&#34;display: none;&#34;&gt;&#xA;    &lt;span class=&#34;quotebook__filter-text&#34;&gt;Showing quotes by &lt;strong class=&#34;quotebook__filter-author&#34;&gt;&lt;/strong&gt;&lt;/span&gt;&#xA;    &lt;button class=&#34;quotebook__filter-clear&#34; type=&#34;button&#34;&gt;Show all&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &#xA;  &lt;div class=&#34;quotebook__controls&#34;&gt;&#xA;    &lt;button class=&#34;quotebook__shuffle&#34; aria-label=&#34;Shuffle quotes&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;18&#34; height=&#34;18&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;path d=&#34;M21.5 2v6h-6M2.5 22v-6h6M2 11.5a10 10 0 0 1 18.8-4.3M22 12.5a10 10 0 0 1-18.8 4.2&#34;/&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span&gt;Shuffle&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;span class=&#34;quotebook__count&#34;&gt;&lt;/span&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &#xA;  &lt;div class=&#34;quotebook__quotes&#34;&gt;&#xA;    &#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;If someone followed you around for a week, would they believe you were serious about your goals?&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Cycling coach&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;It&amp;rsquo;s important to know how good you&amp;rsquo;re not&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Cycling coach&#34;&gt;Cycling coach&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Richard Feynman&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Study hard what interests you the most in the most undisciplined, irreverent and original manner possible.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Richard Feynman&#34;&gt;Richard Feynman&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Greg LeMond&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;It doesn&amp;rsquo;t get any easier; you just get faster.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Greg LeMond&#34;&gt;Greg LeMond&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Cycling coach&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Acumen is knowing what the fuck is going on around you&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Cycling coach&#34;&gt;Cycling coach&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Hunter S. Thompson&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Life should not be a journey to the grave with the intention of arriving safely in a pretty and well preserved body, but rather to skid in broadside in a cloud of smoke, thoroughly used up, totally worn out, and loudly proclaiming &amp;lsquo;Wow! What a Ride!&amp;rsquo;&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Hunter S. Thompson&#34;&gt;Hunter S. Thompson&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Eddy Merckx&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Ride as much or as little, or as long or as short as you feel. But ride.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Eddy Merckx&#34;&gt;Eddy Merckx&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Kent Beck&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Make it work, make it right, make it fast.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Kent Beck&#34;&gt;Kent Beck&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Richard Feynman&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;The first principle is that you must not fool yourself and you are the easiest person to fool.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Richard Feynman&#34;&gt;Richard Feynman&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Rob Wise&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Never give one thing two names, or two things the same name&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Rob Wise&#34;&gt;Rob Wise&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Cormac McCarthy&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;You never know what worse luck your bad luck has saved you from.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Cormac McCarthy&#34;&gt;Cormac McCarthy&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Donald Rumsfeld&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;You go to war with the army you have, not the army you might want or wish to have at a later time.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Donald Rumsfeld&#34;&gt;Donald Rumsfeld&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Seneca&#34; data-source=&#34;On the Brevity of Life&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;We are not given a short life but we make it short, and we are not ill-supplied but wasteful of it&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Seneca&#34;&gt;Seneca&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;On the Brevity of Life&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Douglas Adams&#34; data-source=&#34;The Hitchhiker&amp;#39;s Guide to the Galaxy&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;I refuse to answer that question on the grounds that I don&amp;rsquo;t know the answer&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Douglas Adams&#34;&gt;Douglas Adams&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;The Hitchhiker&amp;#39;s Guide to the Galaxy&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Douglas Adams&#34; data-source=&#34;The Hitchhiker&amp;#39;s Guide to the Galaxy&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;I&amp;rsquo;d far rather be happy than right any day&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Douglas Adams&#34;&gt;Douglas Adams&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;The Hitchhiker&amp;#39;s Guide to the Galaxy&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Adrian Newey&#34; data-source=&#34;How to Build a Car&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;One thing I learnt from almost flunking those exams was that distraction is the enemy of performance&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Adrian Newey&#34;&gt;Adrian Newey&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;How to Build a Car&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Warren Buffett&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Rule No. 1: Never lose money. Rule No. 2: Never forget rule No. 1.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Warren Buffett&#34;&gt;Warren Buffett&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Young Dolph&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Rule No. 1: Get the money first. Rule No. 2: don&amp;rsquo;t forget to get the money&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Young Dolph&#34;&gt;Young Dolph&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Stanley McChrystal&#34; data-source=&#34;On Character&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Similarly, the best professionals I&amp;rsquo;ve known have chosen the life they live and understand that there&amp;rsquo;s no harm in &amp;rsquo;embracing the suck,&amp;rsquo; wrapping even the most difficult situations in the appearance of an enjoyable experience. And if the psychological reaction of forcing yourself to feign love for something you don&amp;rsquo;t enjoy brings you to like it, that&amp;rsquo;s helpful, too.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Stanley McChrystal&#34;&gt;Stanley McChrystal&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;On Character&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Lewis Grizzard&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Life is like a dogsled race. If you ain&amp;rsquo;t the lead dog, the scenery never changes.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Lewis Grizzard&#34;&gt;Lewis Grizzard&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Bryan Cantrill&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Do not fall into the trap of anthropomorphizing Larry Ellison. You need to think of Larry Ellison the way you think of a lawnmower. You don&amp;rsquo;t anthropomorphize your lawnmower, the lawnmower just mows the lawn - you stick your hand in there and it&amp;rsquo;ll chop it off, the end. You don&amp;rsquo;t think &amp;lsquo;oh, the lawnmower hates me&amp;rsquo; - lawnmower doesn&amp;rsquo;t give a shit about you, lawnmower can&amp;rsquo;t hate you. Don&amp;rsquo;t anthropomorphize the lawnmower. Don&amp;rsquo;t fall into that trap about Oracle.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Bryan Cantrill&#34;&gt;Bryan Cantrill&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Firefighters don&amp;rsquo;t get mad at fires&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Upton Sinclair&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;It is difficult to get a man to understand something when his salary depends upon his not understanding it.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Upton Sinclair&#34;&gt;Upton Sinclair&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Mike Alder&#34; data-source=&#34;Newton&amp;#39;s flaming laser sword&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;What cannot be settled by experiment is not worth debating&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Mike Alder&#34;&gt;Mike Alder&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Newton&amp;#39;s flaming laser sword&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Vannevar Bush&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;In these days, when there is a tendency to specialize so closely, it is well for us to be reminded that the possibilities of being at once broad and deep did not pass with Leonardo Da Vinci or even Benjamin Franklin. Men of our profession - we teachers - are bound to be impressed by the tendency of youths of strikingly capable minds to become interested in one small corner of science and uninterested in the rest of the world&amp;hellip; It is unfortunate when a brilliant and creative mind insists upon living in a modern monastic cell.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Vannevar Bush&#34;&gt;Vannevar Bush&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Vannevar Bush&#34; data-source=&#34;Essay to the National Institute for Textile Research, 1932&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;In our modern tempo, that industry is in danger which is in a static state.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Vannevar Bush&#34;&gt;Vannevar Bush&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Essay to the National Institute for Textile Research, 1932&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Charlie Munger&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;The safest way to try to get what you want is to try to deserve what you want.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Charlie Munger&#34;&gt;Charlie Munger&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Douglas Adams&#34; data-source=&#34;The Hitchhiker&amp;#39;s Guide to the Galaxy&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;In the beginning the Universe was created. This has made a lot of people very angry and been widely regarded as a bad move.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Douglas Adams&#34;&gt;Douglas Adams&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;The Hitchhiker&amp;#39;s Guide to the Galaxy&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Tim Krabbe&#34; data-source=&#34;The Rider&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Because after the finish all the suffering turns to memories of pleasure, and the greater the suffering, the greater the pleasure.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Tim Krabbe&#34;&gt;Tim Krabbe&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;The Rider&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Tim Krabbe&#34; data-source=&#34;The Rider&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Road racing imitates life, the way it would be without the corruptive influence of civilization. When you see an enemy lying on the ground, what&amp;rsquo;s your first reaction? To help him to his feet. In road racing, you kick him to death.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Tim Krabbe&#34;&gt;Tim Krabbe&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;The Rider&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Chad Harbach&#34; data-source=&#34;The Art of Fielding&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;A soul isn&amp;rsquo;t something a person is born with but something that must be built, by effort and error, study and love.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Chad Harbach&#34;&gt;Chad Harbach&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;The Art of Fielding&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Epictetus&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Wealth consists not in having great possessions, but in having few wants.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Epictetus&#34;&gt;Epictetus&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Celeste Ng&#34; data-source=&#34;Little Fires Everywhere&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;One had followed the rules, and one had not. But the problem with rules was that they implied a right way and a wrong way to do things. When, in fact, most of the time they were simply ways, none of them quite wrong or quite right.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Celeste Ng&#34;&gt;Celeste Ng&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Little Fires Everywhere&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;William S. Burroughs&#34; data-source=&#34;Naked Lunch&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Be just and if you can&amp;rsquo;t be just be arbitrary.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by William S. Burroughs&#34;&gt;William S. Burroughs&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Naked Lunch&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Ernest Hemingway&#34; data-source=&#34;The Sun Also Rises&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;How did you go bankrupt? Two ways. Gradually, then suddenly.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Ernest Hemingway&#34;&gt;Ernest Hemingway&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;The Sun Also Rises&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Malcolm Gladwell&#34; data-source=&#34;The Bomber Mafia&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Without persistence, principles are meaningless. You don&amp;rsquo;t give up. You double down.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Malcolm Gladwell&#34;&gt;Malcolm Gladwell&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;The Bomber Mafia&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Warren Buffett&#34; data-source=&#34;quoted in The Quants by Scott Patterson&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Beware of geeks bearing formulas.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Warren Buffett&#34;&gt;Warren Buffett&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;quoted in The Quants by Scott Patterson&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Charlie Munger&#34; data-source=&#34;quoted in The Quants by Scott Patterson&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;People assume that if they use higher mathematics and computer models they&amp;rsquo;re doing the Lord&amp;rsquo;s work. They&amp;rsquo;re usually doing the devil&amp;rsquo;s work.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Charlie Munger&#34;&gt;Charlie Munger&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;quoted in The Quants by Scott Patterson&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Abraham Lincoln&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Character is like a tree; reputation is its shadow.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Abraham Lincoln&#34;&gt;Abraham Lincoln&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;John Malone&#34; data-source=&#34;Born to be Wired&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;The most valuable assets in any business are people and relationships. I may have neglected to appreciate this at the time, when we were down in the fray. Now that I am a bit older and slowing down, just a little, I have realized that, all along, the most important element was who was involved, not what.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by John Malone&#34;&gt;John Malone&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Born to be Wired&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Michael Pollan&#34; data-source=&#34;A Place of My Own&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Daydreaming does not enjoy tremendous prestige in our culture, which tends to regard it as unproductive thought. Writers perhaps appreciate its importance better than most, since a fair amount of what they call work consists of little more than daydreaming edited.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Michael Pollan&#34;&gt;Michael Pollan&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;A Place of My Own&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Michael Pollan&#34; data-source=&#34;A Place of My Own&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;I wanted not only a room of my own, but a room of my own making.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Michael Pollan&#34;&gt;Michael Pollan&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;A Place of My Own&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;John Ruskin&#34; data-source=&#34;quoted in A Place of My Own by Michael Pollan&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;No good work whatever can be perfect, and the demand for perfection is always a sign of a misunderstanding of the ends of art.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by John Ruskin&#34;&gt;John Ruskin&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;quoted in A Place of My Own by Michael Pollan&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Nick Offerman&#34; data-source=&#34;Gumption&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Find out what makes you kinder, what opens you up and brings out the most loving, generous, and unafraid version of you - and go after those things as if nothing else matters. Because, actually, nothing else does.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Nick Offerman&#34;&gt;Nick Offerman&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Gumption&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Nick Offerman&#34; data-source=&#34;Gumption&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Part of what defines gumption involves a willingness, even a hunger, for one&amp;rsquo;s mettle to be challenged.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Nick Offerman&#34;&gt;Nick Offerman&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Gumption&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Herbert A. Simon&#34; data-source=&#34;quoted in Gumption by Nick Offerman&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;What information consumes is rather obvious: it consumes the attention of its recipients. Hence a wealth of information creates a poverty of attention.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Herbert A. Simon&#34;&gt;Herbert A. Simon&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;quoted in Gumption by Nick Offerman&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Ted Turner&#34; data-source=&#34;Call Me Ted&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Early to bed, early to rise, work like hell and advertise!&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Ted Turner&#34;&gt;Ted Turner&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Call Me Ted&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Ted Turner&#34; data-source=&#34;Call Me Ted&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Son, you be sure to set your goals so high that you can&amp;rsquo;t possibly accomplish them in one lifetime. That way you&amp;rsquo;ll always have something ahead of you.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Ted Turner&#34;&gt;Ted Turner&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Call Me Ted&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Ted Turner&#34; data-source=&#34;Call Me Ted&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Whether you&amp;rsquo;re talking about a person or a country, it&amp;rsquo;s okay to be rich and it&amp;rsquo;s okay to be powerful, just as long as you&amp;rsquo;re humble and cooperative. But if you combine being rich and powerful with being arrogant and uncooperative, people won&amp;rsquo;t cut you much slack.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Ted Turner&#34;&gt;Ted Turner&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Call Me Ted&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Edward O. Thorp&#34; data-source=&#34;A Man for All Markets&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;In the abstract, life is a mixture of chance and choice. Chance can be thought of as the cards you are dealt in life. Choice is how you play them.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Edward O. Thorp&#34;&gt;Edward O. Thorp&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;A Man for All Markets&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Greg LeMond&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;I have always struggled to achieve excellence. One thing that cycling has taught me is that if you can achieve something without a struggle, it&amp;rsquo;s not going to be satisfying.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Greg LeMond&#34;&gt;Greg LeMond&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Edward O. Thorp&#34; data-source=&#34;A Man for All Markets&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;I also learned the value of withholding judgement until I could make a decision based on evidence.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Edward O. Thorp&#34;&gt;Edward O. Thorp&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;A Man for All Markets&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Annie Duke&#34; data-source=&#34;Thinking in Bets&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;What makes a decision great is not that it has a great outcome. A great decision is the result of a good process.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Annie Duke&#34;&gt;Annie Duke&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Thinking in Bets&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Chris Voss&#34; data-source=&#34;Never Split the Difference&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;The person across the table is never the problem. The unsolved issue is. So focus on the issue.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Chris Voss&#34;&gt;Chris Voss&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Never Split the Difference&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Nassim Nicholas Taleb&#34; data-source=&#34;Skin in the Game&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;If you do not take risks for your opinion, you are nothing.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Nassim Nicholas Taleb&#34;&gt;Nassim Nicholas Taleb&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Skin in the Game&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Nassim Nicholas Taleb&#34; data-source=&#34;Skin in the Game&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Don&amp;rsquo;t tell me what you &amp;rsquo;think,&amp;rsquo; just tell me what&amp;rsquo;s in your portfolio.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Nassim Nicholas Taleb&#34;&gt;Nassim Nicholas Taleb&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Skin in the Game&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Michael Lewis&#34; data-source=&#34;Boomerang&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;The basic problem is people want things they don&amp;rsquo;t want to pay for.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Michael Lewis&#34;&gt;Michael Lewis&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Boomerang&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Brad Feld&#34; data-source=&#34;Venture Deals&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;The only thing that we know about financial predictions of startups is that 100 percent of them are wrong.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Brad Feld&#34;&gt;Brad Feld&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Venture Deals&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Brad Feld&#34; data-source=&#34;Venture Deals&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Failure is a key part of entrepreneurship, but, as with many things in life, attitude impacts outcome.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Brad Feld&#34;&gt;Brad Feld&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Venture Deals&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Brad Feld&#34; data-source=&#34;Venture Deals&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;There are only a few key things most VCs look at: the problem you are solving, the size of the opportunity, the strength of the team, the level of competition, your plan of attack, and current status.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Brad Feld&#34;&gt;Brad Feld&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Venture Deals&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Beau Miles&#34; data-source=&#34;The Backyard Adventurer&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;I&amp;rsquo;ve come to realise that everything is a waste of time unless you think of it otherwise.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Beau Miles&#34;&gt;Beau Miles&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;The Backyard Adventurer&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Nick Offerman&#34; data-source=&#34;Where the Deer and the Antelope Play&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;I know of no better way to make a friend than to pitch in on hard work together, and the shittier the conditions, the faster the friendship forms.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Nick Offerman&#34;&gt;Nick Offerman&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;Where the Deer and the Antelope Play&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Seneca&#34; data-source=&#34;On the Brevity of Life&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;There is nothing the busy man is less busied with than living: there is nothing that is harder to learn.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Seneca&#34;&gt;Seneca&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;On the Brevity of Life&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Tim Peters&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren&amp;rsquo;t special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one&amp;ndash; and preferably only one &amp;ndash;obvious way to do it. Although that way may not be obvious at first unless you&amp;rsquo;re Dutch. Now is better than never. Although never is often better than right now. If the implementation is hard to explain, it&amp;rsquo;s a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea - let&amp;rsquo;s do more of those!&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Tim Peters&#34;&gt;Tim Peters&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;George Petrie&#34; data-source=&#34;1943&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;I believe that this is a practical world and that I can count only on what I earn. Therefore, I believe in work, hard work. I believe in education, which gives me the knowledge to work wisely and trains my mind and my hands to work skillfully. I believe in honesty and truthfulness, without which I cannot win the respect and confidence of my fellow men. I believe in a sound mind, in a sound body and a spirit that is not afraid, and in clean sports that develop these qualities. I believe in obedience to law because it protects the rights of all. I believe in the human touch, which cultivates sympathy with my fellow men and mutual helpfulness and brings happiness for all. I believe in my Country, because it is a land of freedom and because it is my own home, and that I can best serve that country by &amp;lsquo;doing justly, loving mercy, and walking humbly with my God.&amp;rsquo; And because Auburn men and women believe in these things, I believe in Auburn and love it.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by George Petrie&#34;&gt;George Petrie&lt;/button&gt;&lt;cite class=&#34;aphorism__source&#34;&gt;1943&lt;/cite&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;figure class=&#34;aphorism&#34; data-author=&#34;Michel de Montaigne&#34; data-source=&#34;&#34;&gt;&#xA;  &lt;blockquote class=&#34;aphorism__quote&#34;&gt;&#xA;    &lt;span class=&#34;aphorism__text&#34;&gt;Let both be looked for, but place character and intelligence before knowledge.&lt;/span&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &lt;div class=&#34;aphorism__footer&#34;&gt;&#xA;    &lt;figcaption class=&#34;aphorism__attribution&#34;&gt;&lt;button class=&#34;aphorism__author&#34; type=&#34;button&#34; aria-label=&#34;Show more quotes by Michel de Montaigne&#34;&gt;Michel de Montaigne&lt;/button&gt;&#xA;    &lt;/figcaption&gt;&#xA;    &lt;button class=&#34;aphorism__copy&#34; type=&#34;button&#34; aria-label=&#34;Copy quote to clipboard&#34; title=&#34;Copy quote&#34;&gt;&#xA;      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;        &lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;&gt;&lt;/rect&gt;&#xA;        &lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;span class=&#34;aphorism__copy-text&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;script&gt;&#xA;(function() {&#xA;  document.addEventListener(&#39;DOMContentLoaded&#39;, function() {&#xA;    const quotebooks = document.querySelectorAll(&#39;.quotebook&#39;);&#xA;&#xA;    quotebooks.forEach(function(quotebook) {&#xA;      const container = quotebook.querySelector(&#39;.quotebook__quotes&#39;);&#xA;      const quotes = Array.from(container.querySelectorAll(&#39;.aphorism&#39;));&#xA;      const shuffleBtn = quotebook.querySelector(&#39;.quotebook__shuffle&#39;);&#xA;      const heroQuote = quotebook.querySelector(&#39;.quotebook__hero-quote&#39;);&#xA;      const countEl = quotebook.querySelector(&#39;.quotebook__count&#39;);&#xA;      const filterEl = quotebook.querySelector(&#39;.quotebook__filter&#39;);&#xA;      const filterAuthor = quotebook.querySelector(&#39;.quotebook__filter-author&#39;);&#xA;      const filterClear = quotebook.querySelector(&#39;.quotebook__filter-clear&#39;);&#xA;&#xA;      &#xA;      countEl.textContent = quotes.length + &#39; quotes&#39;;&#xA;&#xA;      &#xA;      function seededRandom(seed) {&#xA;        const x = Math.sin(seed) * 10000;&#xA;        return x - Math.floor(x);&#xA;      }&#xA;&#xA;      function getDateSeed() {&#xA;        const now = new Date();&#xA;        return now.getFullYear() * 10000 + (now.getMonth() + 1) * 100 + now.getDate();&#xA;      }&#xA;&#xA;      &#xA;      let qotdData = { text: &#39;&#39;, author: &#39;&#39;, source: &#39;&#39; };&#xA;&#xA;      &#xA;      function setQuoteOfDay() {&#xA;        const seed = getDateSeed();&#xA;        const index = Math.floor(seededRandom(seed) * quotes.length);&#xA;        const quote = quotes[index];&#xA;        const text = quote.querySelector(&#39;.aphorism__text&#39;).textContent;&#xA;        const author = quote.dataset.author;&#xA;        const source = quote.dataset.source;&#xA;&#xA;        &#xA;        qotdData = { text, author, source };&#xA;&#xA;        let html = &#39;&lt;blockquote class=&#34;quotebook__hero-text&#34;&gt;&#39; + text + &#39;&lt;/blockquote&gt;&#39;;&#xA;        if (author || source) {&#xA;          html += &#39;&lt;div class=&#34;quotebook__hero-attribution&#34;&gt;&#39;;&#xA;          if (author) html += &#39;&lt;span class=&#34;quotebook__hero-author&#34;&gt;&#39; + author + &#39;&lt;/span&gt;&#39;;&#xA;          if (source) html += &#39;&lt;cite class=&#34;quotebook__hero-source&#34;&gt;&#39; + source + &#39;&lt;/cite&gt;&#39;;&#xA;          html += &#39;&lt;/div&gt;&#39;;&#xA;        }&#xA;        heroQuote.innerHTML = html;&#xA;      }&#xA;&#xA;      setQuoteOfDay();&#xA;&#xA;      &#xA;      const heroCopyBtn = quotebook.querySelector(&#39;.quotebook__hero-copy&#39;);&#xA;      if (heroCopyBtn) {&#xA;        heroCopyBtn.addEventListener(&#39;click&#39;, function() {&#xA;          let copyText = &#39;&#34;&#39; + qotdData.text + &#39;&#34;&#39;;&#xA;          if (qotdData.author) copyText += &#39; — &#39; + qotdData.author;&#xA;          if (qotdData.source) copyText += &#39;, &#39; + qotdData.source;&#xA;&#xA;          navigator.clipboard.writeText(copyText).then(function() {&#xA;            const copyTextEl = heroCopyBtn.querySelector(&#39;.quotebook__hero-copy-text&#39;);&#xA;            copyTextEl.textContent = &#39;Copied!&#39;;&#xA;            heroCopyBtn.classList.add(&#39;quotebook__hero-copy--success&#39;);&#xA;            setTimeout(function() {&#xA;              copyTextEl.textContent = &#39;Copy&#39;;&#xA;              heroCopyBtn.classList.remove(&#39;quotebook__hero-copy--success&#39;);&#xA;            }, 2000);&#xA;          });&#xA;        });&#xA;      }&#xA;&#xA;      &#xA;      const heroShareBtn = quotebook.querySelector(&#39;.quotebook__hero-share&#39;);&#xA;      if (heroShareBtn) {&#xA;        heroShareBtn.addEventListener(&#39;click&#39;, function() {&#xA;          let shareText = &#39;&#34;&#39; + qotdData.text + &#39;&#34;&#39;;&#xA;          if (qotdData.author) shareText += &#39; — &#39; + qotdData.author;&#xA;          shareText += &#39;\n\n&#39; + window.location.href;&#xA;&#xA;          const tweetUrl = &#39;https://twitter.com/intent/tweet?text=&#39; + encodeURIComponent(shareText);&#xA;          window.open(tweetUrl, &#39;_blank&#39;, &#39;width=550,height=420&#39;);&#xA;        });&#xA;      }&#xA;&#xA;      &#xA;      function shuffle() {&#xA;        for (let i = quotes.length - 1; i &gt; 0; i--) {&#xA;          const j = Math.floor(Math.random() * (i + 1));&#xA;          if (i !== j) {&#xA;            container.insertBefore(quotes[i], quotes[j]);&#xA;            container.insertBefore(quotes[j], quotes[i].nextSibling);&#xA;            [quotes[i], quotes[j]] = [quotes[j], quotes[i]];&#xA;          }&#xA;        }&#xA;      }&#xA;&#xA;      &#xA;      shuffle();&#xA;&#xA;      &#xA;      if (shuffleBtn) {&#xA;        shuffleBtn.addEventListener(&#39;click&#39;, shuffle);&#xA;      }&#xA;&#xA;      &#xA;      quotes.forEach(function(quote) {&#xA;        const copyBtn = quote.querySelector(&#39;.aphorism__copy&#39;);&#xA;        if (copyBtn) {&#xA;          copyBtn.addEventListener(&#39;click&#39;, function() {&#xA;            const text = quote.querySelector(&#39;.aphorism__text&#39;).textContent;&#xA;            const author = quote.dataset.author;&#xA;            const source = quote.dataset.source;&#xA;&#xA;            let copyText = &#39;&#34;&#39; + text + &#39;&#34;&#39;;&#xA;            if (author) copyText += &#39; — &#39; + author;&#xA;            if (source) copyText += &#39;, &#39; + source;&#xA;&#xA;            navigator.clipboard.writeText(copyText).then(function() {&#xA;              const copyTextEl = copyBtn.querySelector(&#39;.aphorism__copy-text&#39;);&#xA;              copyTextEl.textContent = &#39;Copied!&#39;;&#xA;              copyBtn.classList.add(&#39;aphorism__copy--success&#39;);&#xA;              setTimeout(function() {&#xA;                copyTextEl.textContent = &#39;Copy&#39;;&#xA;                copyBtn.classList.remove(&#39;aphorism__copy--success&#39;);&#xA;              }, 2000);&#xA;            });&#xA;          });&#xA;        }&#xA;      });&#xA;&#xA;      &#xA;      let currentFilter = null;&#xA;&#xA;      function filterByAuthor(author) {&#xA;        currentFilter = author;&#xA;        filterAuthor.textContent = author;&#xA;        filterEl.style.display = &#39;flex&#39;;&#xA;&#xA;        let visibleCount = 0;&#xA;        quotes.forEach(function(quote) {&#xA;          if (quote.dataset.author === author) {&#xA;            quote.style.display = &#39;block&#39;;&#xA;            quote.classList.add(&#39;aphorism--highlighted&#39;);&#xA;            visibleCount++;&#xA;          } else {&#xA;            quote.style.display = &#39;none&#39;;&#xA;            quote.classList.remove(&#39;aphorism--highlighted&#39;);&#xA;          }&#xA;        });&#xA;        countEl.textContent = visibleCount + &#39; of &#39; + quotes.length + &#39; quotes&#39;;&#xA;      }&#xA;&#xA;      function clearFilter() {&#xA;        currentFilter = null;&#xA;        filterEl.style.display = &#39;none&#39;;&#xA;        quotes.forEach(function(quote) {&#xA;          quote.style.display = &#39;block&#39;;&#xA;          quote.classList.remove(&#39;aphorism--highlighted&#39;);&#xA;        });&#xA;        countEl.textContent = quotes.length + &#39; quotes&#39;;&#xA;      }&#xA;&#xA;      &#xA;      quotes.forEach(function(quote) {&#xA;        const authorBtn = quote.querySelector(&#39;.aphorism__author&#39;);&#xA;        if (authorBtn) {&#xA;          authorBtn.addEventListener(&#39;click&#39;, function() {&#xA;            const author = quote.dataset.author;&#xA;            if (currentFilter === author) {&#xA;              clearFilter();&#xA;            } else {&#xA;              filterByAuthor(author);&#xA;            }&#xA;          });&#xA;        }&#xA;      });&#xA;&#xA;      &#xA;      if (filterClear) {&#xA;        filterClear.addEventListener(&#39;click&#39;, clearFilter);&#xA;      }&#xA;    });&#xA;  });&#xA;})();&#xA;&lt;/script&gt;</description>
    </item>
    <item>
      <title>Blogroll: Blogs and Websites I Enjoy Reading</title>
      <link>https://mcginniscommawill.com/library/blogroll/</link>
      <pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/library/blogroll/</guid>
      <description>&lt;p&gt;A collection of blogs and personal websites I enjoy reading.&lt;/p&gt;&#xA;&lt;h2 id=&#34;blogs&#34;&gt;Blogs&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://antirez.com/&#34;&gt;antirez&lt;/a&gt; - Salvatore Sanfilippo&amp;rsquo;s blog. Creator of Redis, writes about distributed systems and programming.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://lucumr.pocoo.org/&#34;&gt;Armin Ronacher&lt;/a&gt; - Creator of Flask and Rye. Python, Rust, and opinions on programming languages.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.benkuhn.net/&#34;&gt;Ben Kuhn&lt;/a&gt; - Productivity, project management, startups, and understanding how things work.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.bitsaboutmoney.com/&#34;&gt;Bits about Money&lt;/a&gt; - Patrick McKenzie on financial infrastructure and systems thinking.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://credistick.com/&#34;&gt;Credistick&lt;/a&gt; - Dan Gray&amp;rsquo;s blog on venture capital, startup valuation, and technology.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.eladgil.com/&#34;&gt;Elad Gil&lt;/a&gt; - Startup scaling, operations, and the mechanics of high-growth companies.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://grepmeetsworld.blog/&#34;&gt;Greg Poirier&lt;/a&gt; - Technical storytelling, engineering management, and leadership.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.iamcharliegraham.com/&#34;&gt;I Am Charlie Graham&lt;/a&gt; - Charlie Graham&amp;rsquo;s blog on product, data, and startups.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://substack.com/@ianwitherspoon&#34;&gt;I Know a Place&lt;/a&gt; - Ian Witherspoon&amp;rsquo;s stories about local businesses and the people behind them.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jonbirdsong.com/&#34;&gt;Jon Birdsong&lt;/a&gt; - Entrepreneurship, real estate development in Atlanta, and life lessons.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.makingsoftware.com/&#34;&gt;Making Software&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.bloomberg.com/opinion/authors/ARbTQlRLRjE/matthew-s-levine&#34;&gt;Matt Levine (Money Stuff)&lt;/a&gt; - Bloomberg&amp;rsquo;s finance columnist. Corporate law, derivatives, and meme stocks explained with dry wit.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://nedbatchelder.com/&#34;&gt;Ned Batchelder&lt;/a&gt; - Python deep dives, software development, and the human side of coding.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://simonwillison.net/&#34;&gt;Simon Willison&lt;/a&gt; - AI, open source, web development, and TIL posts.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://vickiboykis.com/&#34;&gt;Vicki Boykis&lt;/a&gt; - Machine learning, cultural commentary, and technical deep-dives.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Bookshelf: Books I&#39;ve Enjoyed and Recommend</title>
      <link>https://mcginniscommawill.com/library/bookshelf/</link>
      <pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/library/bookshelf/</guid>
      <description>&lt;button class=&#34;izzy-mode-toggle&#34; onclick=&#34;toggleIzzyMode()&#34;&gt;&#xA;  &lt;span class=&#34;emoji&#34;&gt;🦄&lt;/span&gt; Izzy Mode&#xA;&lt;/button&gt;&#xA;&lt;!-- Floating decorations for Izzy Mode --&gt;&#xA;&lt;div class=&#34;izzy-decorations&#34;&gt;&#xA;  &lt;span class=&#34;izzy-decoration&#34;&gt;🦄&lt;/span&gt;&#xA;  &lt;span class=&#34;izzy-decoration&#34;&gt;🌈&lt;/span&gt;&#xA;  &lt;span class=&#34;izzy-decoration&#34;&gt;⭐&lt;/span&gt;&#xA;  &lt;span class=&#34;izzy-decoration&#34;&gt;🎀&lt;/span&gt;&#xA;  &lt;span class=&#34;izzy-decoration&#34;&gt;🌸&lt;/span&gt;&#xA;  &lt;span class=&#34;izzy-decoration&#34;&gt;✨&lt;/span&gt;&#xA;&lt;/div&gt;&#xA;&lt;!-- Izzy&#39;s intro message --&gt;&#xA;&lt;div class=&#34;izzy-intro&#34;&gt;&#xA;  &lt;span class=&#34;emoji-big&#34;&gt;🦄🌈✨&lt;/span&gt;&#xA;  &lt;p&gt;Welcome to Izzy&#39;s Bookshelf! These are my favorite books!&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;!-- Dad&#39;s content (normal mode) --&gt;&#xA;&lt;div class=&#34;dad-content&#34;&gt;&#xA;&lt;h2 id=&#34;in-progress&#34;&gt;In Progress&lt;/h2&gt;&#xA;&lt;div class=&#34;bookshelf-grid &#34;&gt;&#xA;  &#xA;&lt;div class=&#34;book-card&#34;&gt;&#xA;  &lt;a href=&#34;https://www.amazon.com/dp/1250033314?tag=mcginnis04-20&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; class=&#34;book-card__link&#34;&gt;&#xA;    &lt;div class=&#34;book-card__cover&#34;&gt;&#xA;      &lt;img src=&#34;https://covers.openlibrary.org/b/isbn/1250033314-M.jpg&#34; alt=&#34;Cover of The Fish That Ate the Whale&#34; loading=&#34;lazy&#34; class=&#34;book-card__img--loaded&#34; /&gt;&#xA;      &lt;div class=&#34;book-card__placeholder&#34; style=&#34;display: none;&#34;&gt;&#xA;        &lt;span&gt;The Fish That Ate the Whale&lt;/span&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;book-card__info&#34;&gt;&#xA;      &lt;h4 class=&#34;book-card__title&#34;&gt;The Fish That Ate the Whale&lt;/h4&gt;&#xA;      &lt;p class=&#34;book-card__author&#34;&gt;Rich Cohen&lt;/p&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div class=&#34;book-card&#34;&gt;&#xA;  &lt;a href=&#34;https://www.amazon.com/dp/1578645018?tag=mcginnis04-20&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; class=&#34;book-card__link&#34;&gt;&#xA;    &lt;div class=&#34;book-card__cover&#34;&gt;&#xA;      &lt;img src=&#34;https://mcginniscommawill.com/images/covers/books/1578645018.jpg&#34; alt=&#34;Cover of Poor Charlie&amp;#39;s Almanack&#34; loading=&#34;lazy&#34; class=&#34;book-card__img--loaded&#34; /&gt;&#xA;      &lt;div class=&#34;book-card__placeholder&#34; style=&#34;display: none;&#34;&gt;&#xA;        &lt;span&gt;Poor Charlie&amp;#39;s Almanack&lt;/span&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;book-card__info&#34;&gt;&#xA;      &lt;h4 class=&#34;book-card__title&#34;&gt;Poor Charlie&amp;#39;s Almanack&lt;/h4&gt;&#xA;      &lt;p class=&#34;book-card__author&#34;&gt;Charlie Munger&lt;/p&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div class=&#34;book-card&#34;&gt;&#xA;  &lt;a href=&#34;https://www.amazon.com/dp/0231116438?tag=mcginnis04-20&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; class=&#34;book-card__link&#34;&gt;&#xA;    &lt;div class=&#34;book-card__cover&#34;&gt;&#xA;      &lt;img src=&#34;https://mcginniscommawill.com/images/covers/books/0231116438.jpg&#34; alt=&#34;Cover of The Essential Writings of Vannevar Bush&#34; loading=&#34;lazy&#34; class=&#34;book-card__img--loaded&#34; /&gt;&#xA;      &lt;div class=&#34;book-card__placeholder&#34; style=&#34;display: none;&#34;&gt;&#xA;        &lt;span&gt;The Essential Writings of …&lt;/span&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;book-card__info&#34;&gt;&#xA;      &lt;h4 class=&#34;book-card__title&#34;&gt;The Essential Writings of Vannevar Bush&lt;/h4&gt;&#xA;      &lt;p class=&#34;book-card__author&#34;&gt;G. Pascal Zachary&lt;/p&gt;</description>
    </item>
    <item>
      <title>Claude Skills: Teaching Your AI Assistant Context-Aware Expertise</title>
      <link>https://mcginniscommawill.com/posts/2025-12-18-claude-skills-context-aware-expertise/</link>
      <pubDate>Thu, 18 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-12-18-claude-skills-context-aware-expertise/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been building a lot of native macOS apps lately using AI pair programmers. &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-09-05-vibe-coding-personal-crm/&#34;&gt;Evergreen&lt;/a&gt;, &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-10-03-contextswitch-agent-coordination/&#34;&gt;ContextSwitch&lt;/a&gt;, and several others. The productivity is incredible, but there&amp;rsquo;s a problem: AI-generated code has patterns.&lt;/p&gt;&#xA;&lt;p&gt;Not bugs exactly. Just&amp;hellip; slop. Obvious comments that restate what the code does. Over-engineered abstractions for simple operations. Verbose documentation on trivial functions. Template boilerplate that was never filled in.&lt;/p&gt;&#xA;&lt;p&gt;Each instance is harmless. Cumulatively, they make your codebase harder to maintain and slower to navigate.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building Blog Header Art with Claude Skills</title>
      <link>https://mcginniscommawill.com/posts/2025-12-15-building-blog-header-art-with-claude-skills/</link>
      <pubDate>Mon, 15 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-12-15-building-blog-header-art-with-claude-skills/</guid>
      <description>&lt;p&gt;I got tired of manually creating header images for blog posts. Each one needed to match the site&amp;rsquo;s indigo/purple color scheme, work on dark backgrounds, and look consistently styled. So I built a Claude Code skill that generates them automatically.&lt;/p&gt;&#xA;&lt;p&gt;The result: type &lt;code&gt;/header-image&lt;/code&gt;, and get a custom header image that&amp;rsquo;s already integrated into your post. Here&amp;rsquo;s how it works.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-are-claude-skills&#34;&gt;What Are Claude Skills?&lt;/h2&gt;&#xA;&lt;p&gt;Claude Code (claude.ai/code) lets you extend its capabilities by creating &amp;ldquo;skills&amp;rdquo;: specialized tools that live in your codebase under &lt;code&gt;.claude/skills/&lt;/code&gt;. Think of them as reusable AI workflows that understand your project&amp;rsquo;s specific needs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deep Research Systems: Architectural Differences That Matter</title>
      <link>https://mcginniscommawill.com/posts/2025-12-08-deep-research-systems-comparison/</link>
      <pubDate>Mon, 08 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-12-08-deep-research-systems-comparison/</guid>
      <description>&lt;p&gt;When OpenAI announced &amp;ldquo;deep research&amp;rdquo; in early 2025, it sounded like marketing speak. But the term actually refers to something specific: AI systems that can spend minutes or hours investigating a question, searching multiple sources, and synthesizing findings into comprehensive reports.&lt;/p&gt;&#xA;&lt;p&gt;The confusing part? Every major AI lab has built one of these systems, and they all work differently. After digging into the technical papers and benchmarks, I realized these are fundamentally different architectures with different strengths.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI Agents Will Break Our Markets (Unless We Fix Them First)</title>
      <link>https://mcginniscommawill.com/posts/2025-12-04-ai-agents-economy/</link>
      <pubDate>Thu, 04 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-12-04-ai-agents-economy/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been thinking about AI agents as tools that help humans work faster. But a recent paper from Hadfield and Koh asks a more interesting question: what happens when AI agents don&amp;rsquo;t just assist with markets, but actually participate in them?&lt;/p&gt;&#xA;&lt;p&gt;The paper is &amp;ldquo;&lt;a href=&#34;https://arxiv.org/pdf/2509.01063&#34;&gt;An Economy of AI Agents&lt;/a&gt;&amp;rdquo; and it bridges economics and AI research in a way that makes both fields look naive. Economists assume away problems that AI agents will definitely have. AI researchers build agents without considering the institutional structures that make markets work.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Native Structured Outputs: When to Skip the Framework</title>
      <link>https://mcginniscommawill.com/posts/2025-12-01-native-structured-outputs/</link>
      <pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-12-01-native-structured-outputs/</guid>
      <description>&lt;p&gt;In my &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-11-27-structured-extraction-with-llms/&#34;&gt;previous post&lt;/a&gt; I covered three Python frameworks for getting structured data from LLMs: instructor, outlines, and pydantic-ai. But there&amp;rsquo;s another option I didn&amp;rsquo;t mention: using the native structured output features built directly into OpenAI and Anthropic&amp;rsquo;s APIs.&lt;/p&gt;&#xA;&lt;p&gt;This is an interesting tradeoff. You get vendor lock-in, but you also get features that frameworks can&amp;rsquo;t easily replicate.&lt;/p&gt;&#xA;&lt;h2 id=&#34;openais-structured-outputs&#34;&gt;OpenAI&amp;rsquo;s Structured Outputs&lt;/h2&gt;&#xA;&lt;p&gt;OpenAI launched Structured Outputs in August 2024. Unlike JSON mode (which just makes the model very likely to output valid JSON), Structured Outputs guarantees 100% schema adherence.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comparing Python Libraries for Structured LLM Extraction</title>
      <link>https://mcginniscommawill.com/posts/2025-11-27-structured-extraction-with-llms/</link>
      <pubDate>Thu, 27 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-11-27-structured-extraction-with-llms/</guid>
      <description>&lt;p&gt;Most enterprise uses of LLMs require structured output. You need JSON objects that fit into databases, validate against schemas, and integrate with existing systems. You can&amp;rsquo;t just take free-form text and hope it works.&lt;/p&gt;&#xA;&lt;p&gt;The problem is that LLMs generate text. Ask for JSON and you might get it wrapped in markdown code blocks, with extra commentary, missing fields, or wrong types. You get &lt;code&gt;&amp;quot;founded&amp;quot;: &amp;quot;2015&amp;quot;&lt;/code&gt; as a string when you need an integer. You get &lt;code&gt;&amp;quot;employee_count&amp;quot;: &amp;quot;approximately 450&amp;quot;&lt;/code&gt; when you need a number.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Personal Blogs and the Small Web</title>
      <link>https://mcginniscommawill.com/posts/2025-11-24-personal-blogs-and-the-small-web/</link>
      <pubDate>Mon, 24 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-11-24-personal-blogs-and-the-small-web/</guid>
      <description>&lt;p&gt;The beating heart of the internet has also been people just sorta putting things out there.&lt;/p&gt;&#xA;&lt;p&gt;While social media platforms fight over engagement metrics and algorithmic feeds, people are rediscovering something that feels almost radical to some: owning their own little space on the web.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-brief-history&#34;&gt;A Brief History&lt;/h2&gt;&#xA;&lt;p&gt;Personal blogging exploded in 1999. That year alone saw the launch of Blogger, LiveJournal, and Xanga. Suddenly, you didn&amp;rsquo;t need to know HTML or FTP to have your own website. Blogger, created by Pyra Labs in August 1999, introduced permalinks, permanent URLs for each post that made sharing and linking trivially easy. Google saw the potential and acquired them in 2003.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From Theory to Practice: Building Real Decision Models with Petersburg</title>
      <link>https://mcginniscommawill.com/posts/2025-11-20-from-theory-to-practice-petersburg/</link>
      <pubDate>Thu, 20 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-11-20-from-theory-to-practice-petersburg/</guid>
      <description>&lt;p&gt;Last year I wrote about &lt;a href=&#34;https://mcginniscommawill.com/posts/2024-04-15-decision-making-under-uncertainty/&#34;&gt;decision making under uncertainty&lt;/a&gt;, exploring how expected value calculations break down when facing real-world complexity. I mentioned at the end that I&amp;rsquo;d built some cool simulations using a project called petersburg, but I didn&amp;rsquo;t have the images handy and never followed up.&lt;/p&gt;&#xA;&lt;p&gt;Well, I&amp;rsquo;ve spent some time between JPMC and SVP jobs cleaning up that project, adding examples and case studies, and I think it&amp;rsquo;s worth revisiting. because the code is cleaner and also because I&amp;rsquo;ve realized that having a practical tool for modeling these decisions changes how you think about them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I Tested LLM Prompt Caching With Anthropic and OpenAI</title>
      <link>https://mcginniscommawill.com/posts/2025-11-17-llm-prompt-caching-comparison/</link>
      <pubDate>Mon, 17 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-11-17-llm-prompt-caching-comparison/</guid>
      <description>&lt;p&gt;I spent $1.00 and a Saturday morning testing prompt caching with Anthropic and OpenAI. Here&amp;rsquo;s what actually happened when I measured cache hits, token counts, and real costs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-setup&#34;&gt;The Setup&lt;/h2&gt;&#xA;&lt;p&gt;Prompt caching lets you reuse parts of your LLM prompts across multiple API calls. Instead of the model reprocessing the same 10,000-token document every time, it caches the internal computation and retrieves it on subsequent calls. The promise: 50-90% cost savings.&lt;/p&gt;</description>
    </item>
    <item>
      <title>MCPB: One-Click Installation for MCP Servers</title>
      <link>https://mcginniscommawill.com/posts/2025-11-13-mcpb-one-click-mcp-installation/</link>
      <pubDate>Thu, 13 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-11-13-mcpb-one-click-mcp-installation/</guid>
      <description>&lt;p&gt;Anthropic released &lt;a href=&#34;https://github.com/anthropics/mcpb&#34;&gt;MCPB (MCP Bundles)&lt;/a&gt;, a packaging format that lets you install MCP servers with a single click, similar to how Chrome extensions or VS Code plugins work. No more wrestling with config files or dependency management. It pruports to be a simple way to distribute local MCPs to users.&lt;/p&gt;&#xA;&lt;p&gt;I recently updated my &lt;a href=&#34;https://github.com/wdm0006/writing-tools-mcp&#34;&gt;writing-tools-mcp&lt;/a&gt; server to support the format, and the installation experience is genuinely better. But I&amp;rsquo;m still trying to figure out where this fits in the bigger picture.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Governance in AI Agent Security</title>
      <link>https://mcginniscommawill.com/posts/2025-11-10-prompt-injection-governance/</link>
      <pubDate>Mon, 10 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-11-10-prompt-injection-governance/</guid>
      <description>&lt;p&gt;Two papers dropped in the last month that should make anyone deploying AI agents nervous. Not because they reveal new attacks, but because they prove our defenses don&amp;rsquo;t work.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://simonwillison.net/2025/Nov/2/new-prompt-injection-papers/&#34;&gt;Simon Willison summarized both&lt;/a&gt;, but the governance implications deserve more attention.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-bad-news&#34;&gt;The Bad News&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://arxiv.org/abs/2510.09023&#34;&gt;&amp;ldquo;The Attacker Moves Second&amp;rdquo;&lt;/a&gt; from researchers at OpenAI, Anthropic, and Google DeepMind tested 12 published prompt injection defenses that claimed near-zero vulnerability rates. Adaptive attacks broke them with 90%+ success rates. Human red-teamers: 100% success.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Resulting: Why Good Decisions Sometimes Look Bad</title>
      <link>https://mcginniscommawill.com/posts/2025-11-06-resulting/</link>
      <pubDate>Thu, 06 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-11-06-resulting/</guid>
      <description>&lt;p&gt;Annie Duke talks about a concept called &amp;ldquo;resulting&amp;rdquo; in her book &lt;em&gt;Thinking in Bets&lt;/em&gt;: the tendency to judge decisions by their outcomes rather than their quality at the time they were made. It&amp;rsquo;s a useful shorthand for what psychologists have studied as outcome bias since the 1980s. But the more I&amp;rsquo;ve thought about it, the more I think the problem isn&amp;rsquo;t just a matter of individual judgment errors, outcome bias creates systemically perverse incentives in organizations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Decision Making Frameworks</title>
      <link>https://mcginniscommawill.com/guides/decision-making-frameworks-guide/</link>
      <pubDate>Mon, 03 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/decision-making-frameworks-guide/</guid>
      <description>&lt;h2 id=&#34;making-better-decisions-systematically&#34;&gt;Making Better Decisions, Systematically&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been collecting decision-making frameworks for years, partly out of professional necessity and partly because I find it genuinely interesting how different fields have solved the same fundamental problem: how do you choose well when you don&amp;rsquo;t have all the information?&lt;/p&gt;&#xA;&lt;p&gt;What I&amp;rsquo;ve learned is that no single framework works everywhere. The right approach depends on the situation: how much time you have, how much data is available, whether you&amp;rsquo;re deciding alone or as a group, and what the stakes are. This series covers the range, from formal analytical methods to the rapid intuitive approaches used by firefighters and emergency room nurses.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Recognition-Primed Decisions: Expert Intuition Under Pressure</title>
      <link>https://mcginniscommawill.com/posts/2025-11-03-recognition-primed-decisions/</link>
      <pubDate>Mon, 03 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-11-03-recognition-primed-decisions/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve explored how systematic frameworks like &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-05-10-pdca-quality-control/&#34;&gt;PDCA&lt;/a&gt; and &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-10-27-nursing-decision-cycle/&#34;&gt;the nursing decision cycle&lt;/a&gt; enable structured decision-making even under pressure. But what happens when there&amp;rsquo;s no time for even the most compressed systematic process? When decisions must be made in seconds, not minutes, based on pattern recognition rather than deliberate analysis?&lt;/p&gt;&#xA;&lt;p&gt;A firefighter rushes into a burning building, assesses the situation in seconds, and makes a life-or-death call. A seasoned ER doctor instantly recognizes subtle symptoms and initiates a critical treatment protocol. A military commander in combat identifies a threat pattern and orders an immediate response. How do these experts make high-stakes decisions so quickly, often with incomplete information and under intense pressure? They&amp;rsquo;re not just guessing; they&amp;rsquo;re leveraging a sophisticated cognitive process known as &lt;strong&gt;Recognition-Primed Decision Making (RPD)&lt;/strong&gt;: a framework that reveals how experience transforms into lightning-fast intuition in life-critical moments.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fall Reading List 2025</title>
      <link>https://mcginniscommawill.com/posts/2025-10-31-fall-reading-list/</link>
      <pubDate>Fri, 31 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-10-31-fall-reading-list/</guid>
      <description>&lt;p&gt;Fall has been a season of decision-making and risk for me, both in what I&amp;rsquo;ve been reading and thinking about. Following up on my &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-09-01-summer-reading-list/&#34;&gt;summer reading list&lt;/a&gt;, here&amp;rsquo;s what&amp;rsquo;s been on rotation this fall. Unlike the summer&amp;rsquo;s eclectic mix of fish history and F1 engineering, this season had an unintentional theme: how smart people think about uncertainty, probability, and building things that last.&lt;/p&gt;&#xA;&lt;h2 id=&#34;thinking-in-betshttpswwwamazoncomdp0735216371tagmcginnis04-20&#34;&gt;&lt;a href=&#34;https://www.amazon.com/dp/0735216371?tag=mcginnis04-20&#34;&gt;Thinking in Bets&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;by Annie Duke&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Professional poker player turned decision strategist Annie Duke makes a compelling case that we should think about decisions the way poker players think about hands. Life isn&amp;rsquo;t chess where perfect information leads to perfect outcomes. It&amp;rsquo;s poker, where you make the best decision you can with incomplete information and then accept that sometimes you&amp;rsquo;ll still lose.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Nursing Decision Cycle: Clinical Judgment Under Pressure</title>
      <link>https://mcginniscommawill.com/posts/2025-10-27-nursing-decision-cycle/</link>
      <pubDate>Mon, 27 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-10-27-nursing-decision-cycle/</guid>
      <description>&lt;p&gt;Throughout this series on decision making structures, we&amp;rsquo;ve explored how different industries approach high-stakes decision making under uncertainty. We&amp;rsquo;ve seen, for example, how &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-05-10-pdca-quality-control/&#34;&gt;PDCA (Plan-Do-Check-Act)&lt;/a&gt; provides a systematic framework for continuous improvement in manufacturing and nuclear operations. But what happens when there&amp;rsquo;s no time for deliberate planning cycles? When decisions must be made in minutes, not days, and lives hang in the balance?&lt;/p&gt;&#xA;&lt;p&gt;In a busy emergency room, a patient arrives with complex, potentially life-threatening symptoms. Within minutes, a nurse must assess the situation, analyze potential causes, plan immediate interventions, implement them precisely, and constantly re-evaluate the patient&amp;rsquo;s response. This isn&amp;rsquo;t chaos; it&amp;rsquo;s a highly structured decision-making process honed over decades in an environment where mistakes can have immediate and severe consequences. The &lt;strong&gt;Nursing Process&lt;/strong&gt; represents one of healthcare&amp;rsquo;s most critical frameworks for making high-stakes decisions under uncertainty and time pressure. It&amp;rsquo;s a real-time adaptation of systematic decision-making that shares DNA with PDCA but operates at a fundamentally different tempo.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Joining Scale Venture Partners as Chief Data Scientist</title>
      <link>https://mcginniscommawill.com/posts/2025-10-20-joining-scale-venture-partners/</link>
      <pubDate>Mon, 20 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-10-20-joining-scale-venture-partners/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m excited to share that I&amp;rsquo;ve joined &lt;a href=&#34;https://www.scalevp.com/&#34;&gt;Scale Venture Partners&lt;/a&gt; as Chief Data Scientist. After spending the last few years building AI/ML systems to extract insights from venture data at Aumni and JPMorgan Chase, I&amp;rsquo;m now working directly with a VC firm to embed those capabilities and more into their investment process.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-opportunity&#34;&gt;The Opportunity&lt;/h2&gt;&#xA;&lt;p&gt;Scale operates in what we call the &amp;ldquo;messy middle&amp;rdquo; of venture: between pure seed investing and late-stage traction plays. It&amp;rsquo;s the stage where pattern recognition matters, but the patterns are subtle. Where timing is everything, but the signals are noisy. Where the best founders often break conventional molds, making traditional screening approaches insufficient.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Keeks 0.3.0: Introducing the Merton Share Strategy</title>
      <link>https://mcginniscommawill.com/posts/2025-10-15-keeks-0_3_0-release/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-10-15-keeks-0_3_0-release/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m excited to announce &lt;strong&gt;Keeks 0.3.0&lt;/strong&gt;, which introduces a powerful new betting strategy based on Robert Merton&amp;rsquo;s portfolio optimization work. This release also adds the ability to calculate maximum entry prices for one-time gambles, complete with examples that explore the famous St. Petersburg paradox.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What Two Failed Vibe Coding Projects Taught Me About AI Assistants</title>
      <link>https://mcginniscommawill.com/posts/2025-10-13-vibe-coding-lessons/</link>
      <pubDate>Mon, 13 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-10-13-vibe-coding-lessons/</guid>
      <description>&lt;p&gt;I built two projects over the past year or so that will probably never see production. Both consumed weeks of real time in agregagte and served as testing grounds for every new model and coding assistant that dropped in that time: Cursor, Claude Code, Codex, MCPs, the whole parade. While neither shipped, I learned more from these failures than from most of my successful projects.&lt;/p&gt;&#xA;&lt;p&gt;Having some kind of complicated but unimportant project somewhere on the backburner is an incredibly useful thing these days. When something new comes out, we can all of course throw it a toy problem, but having real representative problems of low real-world consequence is the best case.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a Personal Prompt Library with MCP and Lexicon</title>
      <link>https://mcginniscommawill.com/posts/2025-10-10-contextswitch-lexicon-mcp-prompts/</link>
      <pubDate>Fri, 10 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-10-10-contextswitch-lexicon-mcp-prompts/</guid>
      <description>&lt;p&gt;I keep finding myself typing the same prompts over and over. &amp;ldquo;Run make lint and fix all issues.&amp;rdquo; &amp;ldquo;Do an audit and create contextswitch tickets for tech debt.&amp;rdquo; &amp;ldquo;Review this code and suggest improvements.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;These aren&amp;rsquo;t one-off requests. They&amp;rsquo;re workflows I repeat constantly across different projects. And every time, I&amp;rsquo;m either retyping them from memory or hunting through chat history to copy-paste the exact phrasing that worked well last time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Evergreen Gets Serious: Building Tools That Think With You</title>
      <link>https://mcginniscommawill.com/posts/2025-10-08-evergreen-gets-serious/</link>
      <pubDate>Wed, 08 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-10-08-evergreen-gets-serious/</guid>
      <description>&lt;p&gt;A month ago I built Evergreen, a personal CRM in Swift despite never having written Swift before. It worked well enough. I could track contacts, log interactions, and stay on top of follow-ups for the Atlanta AI dinners.&lt;/p&gt;&#xA;&lt;p&gt;But as I actually used it, I started noticing the gaps. The data model was too simple. I couldn&amp;rsquo;t capture enough detail about what I was doing or what needed doing. And while the MCP integration let Claude help manage the data, it was pretty basic.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Angel Portfolio Cira 2021-2023 Update</title>
      <link>https://mcginniscommawill.com/posts/2025-10-06-portfolio-update/</link>
      <pubDate>Mon, 06 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-10-06-portfolio-update/</guid>
      <description>&lt;p&gt;A few years back, I was in a position to make some small angel investments through SPVs, writing checks into early-stage companies with clear tailwinds from major macro trends. As I wrote in my &lt;a href=&#34;https://mcginniscommawill.com/posts/2021-10-15-introducing-angel-investing-series/&#34;&gt;original angel investing post&lt;/a&gt;, I focused on businesses I could understand, early-stage deals with sane valuations, and founders with advantages that mattered.&lt;/p&gt;&#xA;&lt;p&gt;The thesis centered on companies positioned to benefit from lasting Covid-19 behavior changes, climate acceleration, space commercialization, and AI/ML improvements. After about 2 years, my role has made continued angel investing impractical, but those early bets have continued executing. This post summarizes how those companies have performed since investment, using only publicly available information. Nothing here constitutes investment advice.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Keeping Claude Code, Cursor, and Codex on Track with ContextSwitch</title>
      <link>https://mcginniscommawill.com/posts/2025-10-03-contextswitch-agent-coordination/</link>
      <pubDate>Fri, 03 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-10-03-contextswitch-agent-coordination/</guid>
      <description>&lt;p&gt;Working with AI coding agents is great until you switch between tools. You spend an hour getting Claude Code set up with context, then a new great model comes out and you need to jump into Cursor to try it out, and suddenly you&amp;rsquo;re re-explaining the entire project plan. Again.&lt;/p&gt;&#xA;&lt;p&gt;The same happens when the projects get truly large and complex. For a toy project the internal agents&amp;rsquo; project management tools work well, but for a large application or long term development that project context gets lost in the noise (or in 20 markdown files in the repo).&lt;/p&gt;</description>
    </item>
    <item>
      <title>MCP Prompts and Resources: The Hidden Gems</title>
      <link>https://mcginniscommawill.com/posts/2025-09-29-mcp-prompts-resources-guide/</link>
      <pubDate>Mon, 29 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-09-29-mcp-prompts-resources-guide/</guid>
      <description>&lt;p&gt;When people talk about Model Context Protocol (MCP), they usually focus on tools: those executable functions that let AI models take actions in the world. But MCP has two other powerful features that are less understood but equally important: prompts and resources.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-mcp-again&#34;&gt;What is MCP Again?&lt;/h2&gt;&#xA;&lt;p&gt;Model Context Protocol is like USB for AI integrations. Instead of building custom connections between every AI application and every data source or tool, MCP provides a standardized way for them to communicate.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Competitive Intelligence from Job Postings: Reading the Tea Leaves</title>
      <link>https://mcginniscommawill.com/posts/2025-09-22-competitive-intelligence-job-postings/</link>
      <pubDate>Mon, 22 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-09-22-competitive-intelligence-job-postings/</guid>
      <description>&lt;p&gt;&lt;em&gt;This is the fourth in a four-part series on analyzing job postings from different perspectives: as a candidate, as a hiring manager, as an HR partner, and as a competitive analyst.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Slack integration engineer posting appeared on your competitor&amp;rsquo;s jobs page on a Tuesday. By itself, unremarkable-every SaaS company eventually builds Slack integrations. But this was the third API-focused engineering role they&amp;rsquo;d posted in six weeks, following a developer relations manager and a partnerships engineer. Pattern recognition kicks in: they were building an ecosystem strategy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The HR Audit: Job Posting Compliance and Risk Management</title>
      <link>https://mcginniscommawill.com/posts/2025-09-19-auditing-job-postings-hr-compliance/</link>
      <pubDate>Fri, 19 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-09-19-auditing-job-postings-hr-compliance/</guid>
      <description>&lt;p&gt;&lt;em&gt;This is the third in a four-part series on analyzing job postings from different perspectives: as a candidate, as a hiring manager, as an HR partner, and as a competitive analyst.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;: This post is for informational purposes only and does not constitute legal advice. I am not a lawyer. Employment law varies significantly by jurisdiction and changes frequently. Always consult with qualified legal counsel for specific compliance questions and before implementing any HR policies or practices.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing Job Postings That Actually Work: A Hiring Manager&#39;s Guide</title>
      <link>https://mcginniscommawill.com/posts/2025-09-17-writing-job-postings-hiring-manager/</link>
      <pubDate>Wed, 17 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-09-17-writing-job-postings-hiring-manager/</guid>
      <description>&lt;p&gt;&lt;em&gt;This is the second in a four-part series on analyzing job postings from different perspectives: as a candidate, as a hiring manager, as an HR partner, and as a competitive analyst.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I learned to write job postings the hard way. I wrote them without a ton of care and got zero candidates, or a million, or had it rejected by someone wiser than me for breaking a rule I&amp;rsquo;d never heard of. After the turmoil of resume spam and awkward interviews, I realized the job posting wasn&amp;rsquo;t just a requirement checklist. It was the first conversation between me and my future team member, and I was failing that conversation badly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reading Between the Lines: How to Analyze Job Postings as a Candidate</title>
      <link>https://mcginniscommawill.com/posts/2025-09-15-reading-job-postings-as-a-candidate/</link>
      <pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-09-15-reading-job-postings-as-a-candidate/</guid>
      <description>&lt;p&gt;&lt;em&gt;This is the first in a four-part series on analyzing job postings from different perspectives: as a candidate, as a hiring manager, as an HR partner, and as a competitive analyst.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve spent years reading job postings from every possible angle. As a job seeker early in my career, as someone who&amp;rsquo;s written dozens of job descriptions, and as an investor or competitor trying to understand what companies are actually building. The most underutilized skill in job searching might be learning to read job postings like a detective rather than just a checklist of requirements.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Smoked Chicken with Alabama White Sauce</title>
      <link>https://mcginniscommawill.com/posts/2025-09-12-smoked-chicken-alabama-white-sauce/</link>
      <pubDate>Fri, 12 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-09-12-smoked-chicken-alabama-white-sauce/</guid>
      <description>&lt;p&gt;Alabama white sauce is one of those regional barbecue gems that I think is wildly underrated but also I totally get why&#xA;mayo based BBQ sauce hasn&amp;rsquo;t really caught on. It should though, it&amp;rsquo;s tangy, creamy, and cuts through rich smoked meat&#xA;like nothing else.&lt;/p&gt;&#xA;&lt;p&gt;The sauce was invented at Big Bob Gibson&amp;rsquo;s in Decatur, Alabama back in 1925, and it&amp;rsquo;s been their signature ever since.&#xA;Traditionally it&amp;rsquo;s served with smoked chicken, and once you try it, you&amp;rsquo;ll understand why it&amp;rsquo;s stuck around for a&#xA;century.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Two Ways: Grilled Marinated Wings</title>
      <link>https://mcginniscommawill.com/posts/2025-09-10-grilled-marinated-wings/</link>
      <pubDate>Wed, 10 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-09-10-grilled-marinated-wings/</guid>
      <description>&lt;p&gt;In Atlanta we have what we call fake fall. It&amp;rsquo;s late August or early September, and you&amp;rsquo;ve survived the worst of summer.&#xA;College football is back, and maybe your team won. You&amp;rsquo;ve got your sweaters out, you&amp;rsquo;re ready.&lt;/p&gt;&#xA;&lt;p&gt;You get one glorious weekend of nice temperatures to lure you into comfort, and then you get wrecked by 2 more weeks of&#xA;summer.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s a good thing to cook on your false fall weekend, embrace the delusion: grilled wings.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Internet Economy Battle Royale: Bots vs Content</title>
      <link>https://mcginniscommawill.com/posts/2025-09-08-internet-economy-battle-royale/</link>
      <pubDate>Mon, 08 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-09-08-internet-economy-battle-royale/</guid>
      <description>&lt;p&gt;Something fascinating is happening to the economic foundation of the internet. While we&amp;rsquo;ve been debating whether AI will&#xA;take our jobs, a quieter battle has been raging over who gets paid when machines read our content.&lt;/p&gt;&#xA;&lt;p&gt;Recently, Coinbase announced x402, a protocol that lets AI agents pay for web resources directly over HTTP. Around the&#xA;same time, Cloudflare rolled out more aggressive bot management tools, including their &amp;ldquo;AI Labyrinth&amp;rdquo; feature that traps&#xA;unauthorized crawlers in maze-like link structures. These are early skirmishes in a fundamental restructuring of how&#xA;value flows on the internet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vibe Coding a Personal CRM in Swift (Having Never Written Swift)</title>
      <link>https://mcginniscommawill.com/posts/2025-09-05-vibe-coding-personal-crm/</link>
      <pubDate>Fri, 05 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-09-05-vibe-coding-personal-crm/</guid>
      <description>&lt;p&gt;So I had a problem. The Atlanta AI dinner series was growing, and I was starting to lose track of who I&amp;rsquo;d met, what we&amp;rsquo;d&#xA;talked about, and when I should follow up. I needed a CRM, but not the enterprise bloatware you&amp;rsquo;re thinking of. Just&#xA;something simple, local, and private that could help me keep track of folks and keep this thing going.&lt;/p&gt;&#xA;&lt;p&gt;I could have probably used the free tier of a basic CRM. Hell, I could have built it in Python in an afternoon. But&#xA;where&amp;rsquo;s the fun in that?&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Mensarius Oath: When Ancient Banking Meets Modern Ethics</title>
      <link>https://mcginniscommawill.com/posts/2025-09-03-mensarius-oath/</link>
      <pubDate>Wed, 03 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-09-03-mensarius-oath/</guid>
      <description>&lt;p&gt;I stumbled across something called &amp;ldquo;The Mensarius Oath&amp;rdquo; recently and pulled the string that led from ancient Roman&#xA;banking to modern venture capital ethics. It&amp;rsquo;s a story about how we keep trying to solve the same fundamental problem:&#xA;how do you make finance serve society instead of the other way around?&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-original-mensarii&#34;&gt;The Original Mensarii&lt;/h2&gt;&#xA;&lt;p&gt;Our story starts in ancient Rome, 352 BCE. The Republic is facing a debt crisis. Citizens are drowning in obligations&#xA;they can&amp;rsquo;t meet, social unrest is brewing, and the normal mechanisms of private banking aren&amp;rsquo;t cutting it. So the state&#xA;does something interesting: they create the quinqueviri mensarii: a five-person commission of public bankers tasked with&#xA;solving the crisis.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Summer Reading List 2025</title>
      <link>https://mcginniscommawill.com/posts/2025-09-01-summer-reading-list/</link>
      <pubDate>Mon, 01 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-09-01-summer-reading-list/</guid>
      <description>&lt;p&gt;Summer&amp;rsquo;s winding down, and I&amp;rsquo;ve been fortunate to get through some excellent books over the past few months. I generally&#xA;listen to audiobooks when riding bikes, doing long drives, or yard work. This summer I&amp;rsquo;ve been fortunate enough to do&#xA;quite a bit of both, and have been able to enjoy some great books in the process. Here&amp;rsquo;s a quick rundown of what&amp;rsquo;s been&#xA;on my reading list, along with why each one caught my attention.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Management Technical Debt: The Hidden Costs of Quick Fixes</title>
      <link>https://mcginniscommawill.com/posts/2025-08-29-engineering-management-technical-debt/</link>
      <pubDate>Fri, 29 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-08-29-engineering-management-technical-debt/</guid>
      <description>&lt;p&gt;Consider a common scenario in startup management: an engineering team drowning in meetings prompts a simple fix: all decisions flow through a single manager. Problem solved! Fewer meetings, faster choices, everyone can focus on coding again.&lt;/p&gt;&#xA;&lt;p&gt;Six months later, that manager is working 70-hour weeks, has become a bottleneck for every product decision, and the team is frustrated that nothing can move forward without approval. What seemed like an elegant solution created a nightmare harder to fix than the original problem.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Metrics That Actually Matter (And the Ones That Don&#39;t)</title>
      <link>https://mcginniscommawill.com/posts/2025-08-27-metrics-that-actually-matter/</link>
      <pubDate>Wed, 27 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-08-27-metrics-that-actually-matter/</guid>
      <description>&lt;p&gt;I saw a startup deck once and counted something like 47 different metrics across the slides. When I asked the founder which three numbers would tell them if the business was healthy or dying, they couldn&amp;rsquo;t answer clearly. They were measuring everything and understanding nothing.&lt;/p&gt;&#xA;&lt;p&gt;This is the curse of modern analytics: we can track anything, so we think we should track everything. But most metrics are just noise dressed up as insights. The real skill is figuring out which few numbers actually matter for your business.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SQL Injection Detection with Bandit Rule B608: Beyond the Basics</title>
      <link>https://mcginniscommawill.com/posts/2025-08-25-sql-injection-detection-b608/</link>
      <pubDate>Mon, 25 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-08-25-sql-injection-detection-b608/</guid>
      <description>&lt;p&gt;Your entire database can be wiped by a single malicious HTTP request. We&amp;rsquo;re often been so focused on scaling our Python application that we miss a classic SQL injection vulnerability in some user search endpoint. One &lt;code&gt;&#39;; DROP TABLE users; --&lt;/code&gt; comment later, and three months of customer data vanishes into the digital ether.&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s why Bandit&amp;rsquo;s B608 rule exists and why SQL injection remains one of the most dangerous and persistent vulnerabilities in web applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Advanced Bandit Configuration: Custom Rules and Team Workflows</title>
      <link>https://mcginniscommawill.com/posts/2025-08-22-advanced-bandit-configuration/</link>
      <pubDate>Fri, 22 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-08-22-advanced-bandit-configuration/</guid>
      <description>&lt;p&gt;Three months into using Bandit on your team&amp;rsquo;s Python services, you hit a wall. The default configuration flags legitimate test files as security risks, misses domain-specific vulnerabilities, and generates too much noise for developers to take seriously. You need Bandit to understand your codebase like a team member, not like a generic security tool.&lt;/p&gt;&#xA;&lt;p&gt;Bandit&amp;rsquo;s real power isn&amp;rsquo;t in its out-of-the-box rules-it&amp;rsquo;s in how you can customize it to fit your specific security requirements and development culture.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trail Report: Sope Creek, Atlanta&#39;s Urban Singletrack Oasis</title>
      <link>https://mcginniscommawill.com/posts/2025-08-20-sope-creek-trail-report/</link>
      <pubDate>Wed, 20 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-08-20-sope-creek-trail-report/</guid>
      <description>&lt;p&gt;Nestled in the heart of East Cobb, Sope Creek offers a unique blend of technical singletrack, historical ruins, and natural beauty, all within minutes of Atlanta&amp;rsquo;s perimeter.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trail Report: Vomet Comet - A Rollercoaster of Technical Thrills</title>
      <link>https://mcginniscommawill.com/posts/2025-08-18-vomet-comet-trail-report/</link>
      <pubDate>Mon, 18 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-08-18-vomet-comet-trail-report/</guid>
      <description>&lt;p&gt;The Vomet Comet isn&amp;rsquo;t just a trail, it&amp;rsquo;s a secret handshake. Just steps away from the pedestrian and at times mind-numbing silver comet trail, the vomet comet is a rowdy unexpected diversion. It&amp;rsquo;s earned its nauseating nickname honestly. Brutally steep climbs, questionable features, and rocks that will make you deeply regret riding a gravel bike.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deciding with Incomplete Data: When Perfect Information Isn&#39;t Possible</title>
      <link>https://mcginniscommawill.com/posts/2025-08-11-incomplete-data/</link>
      <pubDate>Mon, 11 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-08-11-incomplete-data/</guid>
      <description>&lt;p&gt;A trauma team has three minutes to decide on emergency surgery without lab results. A wildfire commander must evacuate neighborhoods while wind patterns remain unclear. A military unit advances despite incomplete intelligence about enemy positions.&lt;/p&gt;&#xA;&lt;p&gt;These aren&amp;rsquo;t failures of planning, they&amp;rsquo;re the reality of high-stakes decision making. When lives hang in the balance, waiting for perfect information is often more dangerous than acting with uncertainty.&lt;/p&gt;</description>
    </item>
    <item>
      <title>High-Reliability Organizations: When Failure Isn&#39;t an Option</title>
      <link>https://mcginniscommawill.com/posts/2025-08-08-high-reliability-organizations/</link>
      <pubDate>Fri, 08 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-08-08-high-reliability-organizations/</guid>
      <description>&lt;p&gt;A nuclear power plant operator spots a pressure reading that&amp;rsquo;s slightly off. An air traffic controller notices two planes on converging paths. A surgeon sees a subtle change in a patient&amp;rsquo;s vital signs.&lt;/p&gt;&#xA;&lt;p&gt;In these moments, the wrong decision, or no decision, could kill people. These aren&amp;rsquo;t just high-stakes environments; they&amp;rsquo;re &lt;strong&gt;High-Reliability Organizations (HROs)&lt;/strong&gt; where failure isn&amp;rsquo;t an option.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cowboy Caviar: Fresh Tex-Mex Bean and Corn Salad</title>
      <link>https://mcginniscommawill.com/posts/2025-08-04-cowboy-caviar/</link>
      <pubDate>Mon, 04 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-08-04-cowboy-caviar/</guid>
      <description>&lt;p&gt;A colorful and zesty bean salad that&amp;rsquo;s as addictive as it is nutritious. This crowd-pleasing dip is perfect with tortilla chips or as a side dish.&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Cowboy Caviar&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 8-10&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 20 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Total:&lt;/strong&gt; 2&amp;#43; hours (marinating)&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;h5 id=&#34;for-the-salad&#34;&gt;For the Salad&lt;/h5&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1 can (15 oz) black beans, drained and rinsed&lt;/li&gt;&#xA;&lt;li&gt;1 can (15 oz) black-eyed peas, drained and rinsed&lt;/li&gt;&#xA;&lt;li&gt;1 can (15 oz) corn kernels, drained (or 1½ cups fresh/frozen corn)&lt;/li&gt;&#xA;&lt;li&gt;1 red bell pepper, diced&lt;/li&gt;&#xA;&lt;li&gt;1 green bell pepper, diced&lt;/li&gt;&#xA;&lt;li&gt;1 small red onion, finely diced&lt;/li&gt;&#xA;&lt;li&gt;2-3 Roma tomatoes, seeded and diced&lt;/li&gt;&#xA;&lt;li&gt;1 jalapeño pepper, seeded and minced (optional)&lt;/li&gt;&#xA;&lt;li&gt;½ cup fresh cilantro, chopped&lt;/li&gt;&#xA;&lt;li&gt;1 avocado, diced (add just before serving)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h5 id=&#34;for-the-dressing&#34;&gt;For the Dressing&lt;/h5&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;¼ cup olive oil&lt;/li&gt;&#xA;&lt;li&gt;¼ cup red wine vinegar&lt;/li&gt;&#xA;&lt;li&gt;2 tablespoons lime juice (about 1 lime)&lt;/li&gt;&#xA;&lt;li&gt;1 tablespoon honey&lt;/li&gt;&#xA;&lt;li&gt;1 teaspoon ground cumin&lt;/li&gt;&#xA;&lt;li&gt;1 teaspoon chili powder&lt;/li&gt;&#xA;&lt;li&gt;1 teaspoon garlic powder&lt;/li&gt;&#xA;&lt;li&gt;1 teaspoon salt&lt;/li&gt;&#xA;&lt;li&gt;½ teaspoon black pepper&lt;/li&gt;&#xA;&lt;li&gt;¼ teaspoon smoked paprika (optional)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;instructions&#34;&gt;Instructions&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Prepare Vegetables:&lt;/strong&gt; Drain and rinse the black beans and black-eyed peas. Dice the bell peppers, red onion, and tomatoes. Mince the jalapeño if using. Chop the cilantro.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Efficiency Trap: When Optimization Kills Growth</title>
      <link>https://mcginniscommawill.com/posts/2025-08-01-the-efficiency-trap/</link>
      <pubDate>Fri, 01 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-08-01-the-efficiency-trap/</guid>
      <description>&lt;p&gt;Many startup pitch decks I&amp;rsquo;ve seen in the last couple of years have a slide about &amp;ldquo;capital efficiency.&amp;rdquo; Unit economics have never been more scrutinized. Since the venture downturn, the entire startup ecosystem has become obsessed with doing more with less.&lt;/p&gt;&#xA;&lt;p&gt;This makes sense after the frenzy of 2022-2023. Easy money disappeared, and companies that couldn&amp;rsquo;t prove profitability got crushed. The market correction was necessary and healthy.&lt;/p&gt;&#xA;&lt;p&gt;Is it possible for the pendulum to swing too far though? Some companies certainly do overcorrect, they&amp;rsquo;re building businesses that are efficient but not scalable, profitable but not valuable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Passive Resistance Problem: When Good Employees Go Quiet</title>
      <link>https://mcginniscommawill.com/posts/2025-07-30-passive-resistance-problem/</link>
      <pubDate>Wed, 30 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-07-30-passive-resistance-problem/</guid>
      <description>&lt;p&gt;You know the type: eight-year veteran, technically solid, never misses deadlines, attends every meeting. On paper, they&amp;rsquo;re a model employee. But something&amp;rsquo;s changed. They nod along, accept assignments without complaint, and deliver exactly what&amp;rsquo;s asked: nothing more, nothing less.&lt;/p&gt;&#xA;&lt;p&gt;There&amp;rsquo;s of course nothing strictly wrong with this, they&amp;rsquo;re doing exactly what they&amp;rsquo;re asked, but the spark that once made them a standout performer has dimmed to barely visible embers.&lt;/p&gt;&#xA;&lt;p&gt;They&amp;rsquo;ve become what I call a &amp;ldquo;passive resister&amp;rdquo;, someone who complies with everything but nothing more. This is one of the most challenging performance issues to address because it doesn&amp;rsquo;t look like a performance problem at all.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Things That Look Like Work But Aren&#39;t</title>
      <link>https://mcginniscommawill.com/posts/2025-07-28-things-that-look-like-work/</link>
      <pubDate>Mon, 28 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-07-28-things-that-look-like-work/</guid>
      <description>&lt;p&gt;I spent hours the other day reorganizing my digital files. Moved things into better folders, renamed documents with consistent naming conventions, cleaned up my desktop. It felt important and looked very professional when my wife walked by my office.&lt;/p&gt;&#xA;&lt;p&gt;I accomplished absolutely nothing.&lt;/p&gt;&#xA;&lt;p&gt;This is the curse of knowledge work: so much of what looks like legitimate work is actually just elaborate procrastination dressed up in business casual.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-performance-of-productivity&#34;&gt;The Performance of Productivity&lt;/h2&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a whole category of activities that have all the visual markers of being productive without actually producing anything useful. They&amp;rsquo;re not quite procrastination because they&amp;rsquo;re work-adjacent, but they&amp;rsquo;re not quite work because they don&amp;rsquo;t move anything forward.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Integrated Venture Engineering: Building Profitable Ventures by Design</title>
      <link>https://mcginniscommawill.com/posts/2025-07-25-integrated-venture-engineering/</link>
      <pubDate>Fri, 25 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-07-25-integrated-venture-engineering/</guid>
      <description>&lt;p&gt;Most startups fail because they treat profitability as an afterthought. They build a product first, then try to figure out how to make money from it. By the time they realize their cost structure is broken, they&amp;rsquo;re already locked into a business model that can&amp;rsquo;t work.&lt;/p&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a better way, and it comes from an unexpected place: systems engineering.&lt;/p&gt;&#xA;&lt;p&gt;Cornell&amp;rsquo;s Center for Sustainable Global Enterprise has developed something called Integrated Venture Engineering (IVE), and it&amp;rsquo;s fundamentally different from how most people think about building new businesses. Instead of starting with a product and hoping to find a profitable business model, IVE treats profitability as an engineering requirement from the very beginning.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Decision-Modeling vs. Process-Modeling: Why the Space Between Matters</title>
      <link>https://mcginniscommawill.com/posts/2025-07-23-decision-modeling-vs-process-modeling/</link>
      <pubDate>Wed, 23 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-07-23-decision-modeling-vs-process-modeling/</guid>
      <description>&lt;p&gt;Most companies design and reason about their operations around processes. They map out workflows, document procedures, and optimize the steps between inputs and outputs. This made sense in the industrial age when work was predictable and standardization was the goal.&lt;/p&gt;&#xA;&lt;p&gt;But in a world where some tasks are better done by humans, others by AI, and still others by traditional automation, process-modeling becomes a constraint. When you lock in the &amp;ldquo;how,&amp;rdquo; you limit your ability to adapt as capabilities change.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Three Pillars of Product Success: Why Good Ideas Still Fail</title>
      <link>https://mcginniscommawill.com/posts/2025-07-21-three-pillars-product-success/</link>
      <pubDate>Mon, 21 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-07-21-three-pillars-product-success/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve watched a lot of smart people build things that nobody wanted. I&amp;rsquo;ve also watched people want things that couldn&amp;rsquo;t be built, and people get excited about things that turned out to be completely useless once they actually had them.&lt;/p&gt;&#xA;&lt;p&gt;After seeing this pattern repeat itself across everything from AI startups to kitchen gadgets, I&amp;rsquo;ve started thinking about product success as requiring three distinct pillars. Miss any one of them, and you&amp;rsquo;re probably going to have a bad time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Three Ways Wispr Flow Actually Makes Sense</title>
      <link>https://mcginniscommawill.com/posts/2025-07-18-wispr-flow-three-use-cases/</link>
      <pubDate>Fri, 18 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-07-18-wispr-flow-three-use-cases/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been testing Wispr Flow for a few weeks now, and honestly, I was skeptical. Voice dictation has been around forever, and it&amp;rsquo;s usually terrible. But this one actually works, so here are three scenarios where it genuinely makes your life better.&lt;/p&gt;&#xA;&lt;h2 id=&#34;for-developers-vibe-coding-is-real&#34;&gt;For Developers: &amp;ldquo;Vibe Coding&amp;rdquo; Is Real&lt;/h2&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re a developer, you&amp;rsquo;ve probably heard about &amp;ldquo;vibe coding&amp;rdquo; by now. It&amp;rsquo;s basically describing what you want in plain English and letting AI write the code. Wispr Flow makes this ridiculously smooth.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Speed-Quality Paradox: When Fast Decisions Kill Startups</title>
      <link>https://mcginniscommawill.com/posts/2025-07-17-startup-decision-making-speed-quality/</link>
      <pubDate>Thu, 17 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-07-17-startup-decision-making-speed-quality/</guid>
      <description>&lt;p&gt;&amp;ldquo;Move fast and break things&amp;rdquo; became Silicon Valley gospel for a reason. In the startup world, speed often matters more than perfection. The company that ships first, iterates fastest, and adapts most quickly usually wins. But I&amp;rsquo;ve watched promising startups destroy themselves by taking this philosophy too far-making critical decisions so quickly that they broke the wrong things.&lt;/p&gt;&#xA;&lt;p&gt;The challenge: knowing when speed matters most, when quality matters most, and how to optimize for the right one at the right time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI Prompts for Real Life: Templates That Actually Work</title>
      <link>https://mcginniscommawill.com/posts/2025-07-16-ai-prompts-everyday-tasks/</link>
      <pubDate>Wed, 16 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-07-16-ai-prompts-everyday-tasks/</guid>
      <description>&lt;p&gt;Everyone knows AI can help with work tasks, but what about the mundane stuff that actually eats up your time? Here are the prompts I actually use for handling everyday life admin - the kind of stuff that&amp;rsquo;s boring but necessary.&lt;/p&gt;&#xA;&lt;p&gt;Note that I&amp;rsquo;m typically using Claude with the gmail integrations and the Notion MCP configured, so it has access to my emails, calendar, etc.&lt;/p&gt;&#xA;&lt;h2 id=&#34;email-and-communication-management&#34;&gt;Email and Communication Management&lt;/h2&gt;&#xA;&lt;h3 id=&#34;email-triage&#34;&gt;Email Triage&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;I have [number] unread emails in gmail. Help me figure out which ones actually need responses and which are just noise.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;difficult-conversations&#34;&gt;Difficult Conversations&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Help me write a polite but firm email to [recipient] about [issue]. The tone should be [supportive/professional/friendly] while also being [clear about boundaries/addressing the problem/getting results]. The situation is: [brief context]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;declining-requests&#34;&gt;Declining Requests&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Draft a response to this [volunteer request/invitation/commitment]. I&amp;#39;d like to help but can&amp;#39;t commit to [specific constraint]. Here&amp;#39;s the original message: [paste message]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;professional-follow-ups&#34;&gt;Professional Follow-ups&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Write a professional but friendly message to [contractor/service provider] who&amp;#39;s [running behind schedule/not responding/need clarification on]. I need to [specific outcome] without being pushy.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;household-task-organization&#34;&gt;Household Task Organization&lt;/h2&gt;&#xA;&lt;h3 id=&#34;overwhelm-management&#34;&gt;Overwhelm Management&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;I need to organize all the tasks in my notion todo list. Help me prioritize what&amp;#39;s urgent vs what can wait.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;document-organization&#34;&gt;Document Organization&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Turn this pile of [medical records/insurance forms/receipts] into something organized I can actually use. Here&amp;#39;s what I have: [list documents/notes]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;task-breakdown&#34;&gt;Task Breakdown&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;I need to [specific large task like &amp;#34;organize garage&amp;#34; or &amp;#34;plan move&amp;#34;]. Break this down into manageable steps I can actually complete, considering I have [time constraints/other limitations].&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;bill-management-and-budgeting&#34;&gt;Bill Management and Budgeting&lt;/h2&gt;&#xA;&lt;h3 id=&#34;budget-analysis&#34;&gt;Budget Analysis&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Analyze our monthly recurring expenses and help me identify what we could cut if we needed to save [specific amount]. Here are our current expenses: [list expenses with amounts]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;tax-preparation&#34;&gt;Tax Preparation&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;I need to set up a simple system for tracking tax-deductible expenses throughout the year. I&amp;#39;m [employment status] and typically deduct [types of expenses].&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;financial-decision-making&#34;&gt;Financial Decision Making&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;I&amp;#39;m comparing [number] different [insurance quotes/loan offers/service plans]. Help me understand what I should actually compare beyond just price. Here are the options: [details]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;appointment-and-schedule-management&#34;&gt;Appointment and Schedule Management&lt;/h2&gt;&#xA;&lt;h3 id=&#34;scheduling-optimization&#34;&gt;Scheduling Optimization&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Help me figure out the best time to schedule [number] different appointments without disrupting [work schedule/family commitments]. Please analyze my calendar and find the ideal times.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;coordination-logistics&#34;&gt;Coordination Logistics&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;I need to coordinate a [repair/delivery/service] appointment when someone will be home. Help me figure out the logistics.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;recurring-appointment-tracking&#34;&gt;Recurring Appointment Tracking&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Create a system for tracking all the recurring appointments we need - [doctor checkups/car maintenance/etc]. Create todo list items for them in notion and reminders in my calendar.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;home-and-life-management&#34;&gt;Home and Life Management&lt;/h2&gt;&#xA;&lt;h3 id=&#34;project-planning&#34;&gt;Project Planning&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;I&amp;#39;m planning to [home improvement project/life change]. Help me think through everything I need to consider, including timeline, budget, and potential complications.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;maintenance-systems&#34;&gt;Maintenance Systems&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Create a household maintenance schedule for [house type/living situation]. I need to stay on top of [seasonal tasks/regular upkeep] without it becoming overwhelming. Create todo list items in notion and reminders in my calendar.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;emergency-preparedness&#34;&gt;Emergency Preparedness&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Help me create a [emergency plan/disaster kit/important documents list] for a family of [number] in [location/housing type]. Keep it practical and actually doable.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;research-and-decision-making&#34;&gt;Research and Decision Making&lt;/h2&gt;&#xA;&lt;h3 id=&#34;service-provider-selection&#34;&gt;Service Provider Selection&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;I need to find a [contractor/service provider/professional] for [specific need]. What questions should I ask, what should I look for, and what are red flags to avoid?&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;product-comparison&#34;&gt;Product Comparison&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;I&amp;#39;m trying to choose between [products/services] for [specific use case]. My priorities are [list priorities] and my budget is [amount]. Help me compare these options: [list options]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;local-research&#34;&gt;Local Research&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;I&amp;#39;m new to [area/situation] and need to find [services/resources]. What should I be looking for and where should I start? My specific needs are: [list needs]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;problem-diagnosis&#34;&gt;Problem Diagnosis&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;I&amp;#39;m having an issue with [appliance/system/process]. Before I call a professional, help me troubleshoot what might be wrong and what information I should gather.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;tips-for-better-prompts&#34;&gt;Tips for Better Prompts&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Be Specific About Constraints:&lt;/strong&gt; Instead of &amp;ldquo;help me organize,&amp;rdquo; say &amp;ldquo;help me organize my home office that I use 3 days a week, has limited storage, and needs to work for both computer work and craft projects.&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>The New Collaboration Patterns: How AI is Reshaping Human Teamwork</title>
      <link>https://mcginniscommawill.com/posts/2025-07-15-ai-human-collaboration-patterns/</link>
      <pubDate>Tue, 15 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-07-15-ai-human-collaboration-patterns/</guid>
      <description>&lt;p&gt;Six months ago, most team workflows looked predictable: brainstorming sessions, research phases, documentation writing, and iterative reviews. Today, those same teams operate fundamentally differently. Not because they changed their processes, but because AI has become a real-time participant in their work.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s what that actually looks like in practice.&lt;/p&gt;&#xA;&lt;h2 id=&#34;real-time-research-loops-the-encyclopedia&#34;&gt;Real-Time Research Loops: The Encyclopedia&lt;/h2&gt;&#xA;&lt;p&gt;The biggest change is how teams handle information gaps during conversations. Instead of the traditional &amp;ldquo;I&amp;rsquo;ll research that and get back to you,&amp;rdquo; teams now split-screen their discussions-one person talking while another pulls up relevant data, competitor analysis, or market research in real-time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Regular Person&#39;s AI Stack: Tools That Actually Help</title>
      <link>https://mcginniscommawill.com/posts/2025-07-14-everyday-ai-stack/</link>
      <pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-07-14-everyday-ai-stack/</guid>
      <description>&lt;p&gt;Everyone&amp;rsquo;s talking about AI, but most of the conversation is either too technical or too hyped up. Here&amp;rsquo;s the thing: there are actually some AI tools that regular people can use right now to make their daily lives genuinely better. Not revolutionary, not life-changing, just better.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been using what I call my &amp;ldquo;everyday AI stack&amp;rdquo; for the past few months. Let me walk you through how it actually works by showing you how I planned my last family vacation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data-Driven Decisions vs. Data-Justified Decisions</title>
      <link>https://mcginniscommawill.com/posts/2025-07-11-data-driven-vs-data-justified-decisions/</link>
      <pubDate>Fri, 11 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-07-11-data-driven-vs-data-justified-decisions/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve all been there. Someone walks into your office and says they need data to support changing the pricing strategy. They want charts, cohort analysis, competitive benchmarking, the whole nine yards. Make it look thorough and data-driven.&lt;/p&gt;&#xA;&lt;p&gt;The problem is, they&amp;rsquo;ve already decided to change pricing. They just need you to find the numbers that prove they&amp;rsquo;re right.&lt;/p&gt;&#xA;&lt;p&gt;This is the difference between data-driven decisions and data-justified decisions, and most companies think they&amp;rsquo;re doing the first when they&amp;rsquo;re actually doing the second.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Family Financial Policies: Clear Guidelines That Prevent Conflicts</title>
      <link>https://mcginniscommawill.com/posts/2025-07-09-family-financial-policies/</link>
      <pubDate>Wed, 09 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-07-09-family-financial-policies/</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclaimer: This content is for educational purposes only and does not constitute financial, legal, or investment advice. Please consult with qualified professionals before implementing financial policies or making significant financial decisions.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ultra-wealthy families rely on written financial policies to guide consistent decision-making and prevent conflicts. The good news? You don&amp;rsquo;t need millions to benefit from this approach.&lt;/p&gt;&#xA;&lt;p&gt;Any family can implement simple policies to reduce conflicts, improve consistency, and ensure financial decisions align with their values. Whether you&amp;rsquo;re managing a modest household budget or substantial assets, clear policies eliminate the stress of making the same decisions repeatedly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Family Office</title>
      <link>https://mcginniscommawill.com/guides/family-office-guide/</link>
      <pubDate>Wed, 09 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/family-office-guide/</guid>
      <description>&lt;h2 id=&#34;family-office-principles-for-the-rest-of-us&#34;&gt;Family Office Principles for the Rest of Us&lt;/h2&gt;&#xA;&lt;p&gt;The term &amp;ldquo;family office&amp;rdquo; usually conjures images of ultra-wealthy dynasties with dedicated staff managing billions. But the core idea behind a family office, treating your family&amp;rsquo;s finances with the same rigor and intentionality you&amp;rsquo;d apply to a business, is something anyone can benefit from.&lt;/p&gt;&#xA;&lt;p&gt;This series takes the best practices from traditional family offices and makes them accessible. You don&amp;rsquo;t need a trust fund or a team of advisors to organize your financial life, communicate clearly about money with your family, and make better decisions about the resources you have.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Chatham House Rule: What It Means and Why It Matters</title>
      <link>https://mcginniscommawill.com/posts/2025-07-07-chatham-house-rules/</link>
      <pubDate>Mon, 07 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-07-07-chatham-house-rules/</guid>
      <description>&lt;p&gt;You&amp;rsquo;re at a conference or high-level meeting, and someone says, &amp;ldquo;This session operates under the Chatham House Rule.&amp;rdquo; Everyone nods knowingly while you&amp;rsquo;re sitting there thinking, &amp;ldquo;What the hell is a Chatham House, and why do they get to make rules?&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been in exactly this situation more times than I care to admit. It&amp;rsquo;s one of those things that sounds important and official, but no one ever actually explains what it means. So here&amp;rsquo;s the full story.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The FTC vs. &#39;98% Accurate&#39; Claims: Lessons from the Workado Settlement</title>
      <link>https://mcginniscommawill.com/posts/2025-07-04-ftc-workado-settlement/</link>
      <pubDate>Fri, 04 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-07-04-ftc-workado-settlement/</guid>
      <description>&lt;h2 id=&#34;when-the-coin-toss-beat-the-ai&#34;&gt;When the Coin Toss Beat the AI&lt;/h2&gt;&#xA;&lt;p&gt;In May 2025, the Federal Trade Commission reached a landmark settlement with Workado LLC that fundamentally changed how AI detection companies can market their products. The devastating finding: Workado&amp;rsquo;s &amp;ldquo;AI Content Detector,&amp;rdquo; marketed as &amp;ldquo;98% accurate&amp;rdquo; at identifying AI-generated text, actually performed at just 53% accuracy in independent testing-barely better than flipping a coin.&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;Consumers trusted Workado&amp;rsquo;s AI Content Detector to help them decipher whether AI was behind a piece of writing, but the product did no better than a coin toss,&amp;rdquo; said Chris Mufarrige, Director of the FTC&amp;rsquo;s Bureau of Consumer Protection.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ghost Letters: The Hidden Signatures AI Leaves in Your Text</title>
      <link>https://mcginniscommawill.com/posts/2025-07-02-ghost-letters/</link>
      <pubDate>Wed, 02 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-07-02-ghost-letters/</guid>
      <description>&lt;p&gt;Ever notice something weird when you copy text from ChatGPT or Claude and paste it into your document? Maybe the quotes look fancier than usual, or there&amp;rsquo;s a dash that seems&amp;hellip; different somehow. You&amp;rsquo;re not losing your mind. AI tools are leaving their fingerprints all over our text, and once you start noticing them, you&amp;rsquo;ll see them everywhere.&lt;/p&gt;&#xA;&lt;p&gt;These signatures come in two flavors: the ones you can see (if you know what to look for) and the ones that are completely invisible. Both tell a story about how AI works, why it behaves this way, and what that means for anyone trying to spot machine-generated content.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Return on Luck: How to Actually Capitalize on Lucky Breaks</title>
      <link>https://mcginniscommawill.com/posts/2025-06-30-return-on-luck/</link>
      <pubDate>Mon, 30 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-30-return-on-luck/</guid>
      <description>&lt;p&gt;Last week I wrote about &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-06-23-increasing-surface-area-for-luck/&#34;&gt;increasing your surface area for luck&lt;/a&gt;-putting yourself in more optional scenarios where good things can find you. But that&amp;rsquo;s only half the equation.&lt;/p&gt;&#xA;&lt;p&gt;The other half is what happens when luck actually shows up. And here&amp;rsquo;s the uncomfortable truth: most people are terrible at capitalizing on the opportunities they create.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-follow-through-problem&#34;&gt;The Follow-Through Problem&lt;/h2&gt;&#xA;&lt;p&gt;I see this constantly. Someone goes to a conference, has great conversations, collects business cards, gets genuinely excited about potential collaborations&amp;hellip; and then does absolutely nothing with any of it. The cards sit on their desk for three months before getting thrown away. The LinkedIn connections get sent but never messaged. The &amp;ldquo;we should definitely grab coffee&amp;rdquo; conversations never turn into actual coffee.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Coconut Milk Poached Kobia in a Tagine with Dill and Lemon</title>
      <link>https://mcginniscommawill.com/posts/2025-06-28-coconut-milk-poached-kobia-with-tajin/</link>
      <pubDate>Sat, 28 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-28-coconut-milk-poached-kobia-with-tajin/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been experimenting with my tagine ever since my wife bought me one. The conical clay lid does something magical to whatever you&amp;rsquo;re cooking - it circulates steam in this gentle way that keeps everything incredibly moist while concentrating flavors.&lt;/p&gt;&#xA;&lt;p&gt;This coconut milk poached kobia was born out of wanting to try something different in the tagine beyond the usual. The clay pot&amp;rsquo;s even heat distribution makes it perfect for gentle poaching, and there&amp;rsquo;s something about the earthy quality it imparts that plays beautifully with the rich coconut milk and fresh herbs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What I Wish I Knew About Management When I Was an IC</title>
      <link>https://mcginniscommawill.com/posts/2025-06-27-what-i-wish-i-knew-about-management/</link>
      <pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-27-what-i-wish-i-knew-about-management/</guid>
      <description>&lt;p&gt;I fell into managment out of necessity not an active choice, as often happens in startups. When you find yourself in a management role in these technical fields, you of course think you know everything, but quickly realize that you had no idea.&lt;/p&gt;&#xA;&lt;p&gt;Not wrong in a &amp;ldquo;this is terrible&amp;rdquo; way, but wrong in a &amp;ldquo;the job is fundamentally different than I imagined&amp;rdquo; way. Here&amp;rsquo;s what I wish someone had told me before I made the jump.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simon&#39;s Decision Framework: A Simple Structure for Complex Decisions</title>
      <link>https://mcginniscommawill.com/posts/2025-06-25-simon-decision-framework/</link>
      <pubDate>Wed, 25 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-25-simon-decision-framework/</guid>
      <description>&lt;p&gt;We make thousands of decisions every day, but when the stakes are high, we need a better approach than just &amp;ldquo;winging it.&amp;rdquo; Herbert Simon, a Nobel Prize-winning economist and cognitive scientist, gave us a deceptively simple framework that works whether you&amp;rsquo;re managing a crisis, building an AI system, or just trying to make better choices in your daily life.&lt;/p&gt;&#xA;&lt;p&gt;His framework has three phases: Intelligence, Design, and Choice. Think of it as &amp;ldquo;Figure out what&amp;rsquo;s happening,&amp;rdquo; &amp;ldquo;Come up with options,&amp;rdquo; and &amp;ldquo;Pick one and do it.&amp;rdquo; Simple enough, but there&amp;rsquo;s real power in this structure.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Increasing Your Surface Area for Luck</title>
      <link>https://mcginniscommawill.com/posts/2025-06-23-increasing-surface-area-for-luck/</link>
      <pubDate>Mon, 23 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-23-increasing-surface-area-for-luck/</guid>
      <description>&lt;h2 id=&#34;the-thing-about-luck&#34;&gt;The Thing About Luck&lt;/h2&gt;&#xA;&lt;p&gt;I used to think luck was mostly random. You&amp;rsquo;re either the person who finds a twenty-dollar bill on the sidewalk or you&amp;rsquo;re not. You either meet the right person at the right time, or you don&amp;rsquo;t. Pure chance.&lt;/p&gt;&#xA;&lt;p&gt;But the more I pay attention, the more I notice that &amp;ldquo;lucky&amp;rdquo; people seem to have a lot more optional scenarios in their lives. They go to more things. They say yes to more invitations. They put themselves in situations where interesting things might happen, even when there&amp;rsquo;s no immediate payoff in sight.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Decision-Making Frameworks That Prevent Family Financial Conflicts</title>
      <link>https://mcginniscommawill.com/posts/2025-06-20-decision-making-frameworks/</link>
      <pubDate>Fri, 20 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-20-decision-making-frameworks/</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclaimer: This content is for educational purposes only and does not constitute financial, legal, or investment advice. Please consult with qualified professionals before making significant financial decisions.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;One of the most valuable functions of a family office is providing structured frameworks for financial decision-making. Ultra-wealthy families use sophisticated governance systems to determine who makes which decisions and how they&amp;rsquo;re made. These frameworks prevent conflicts, improve outcomes, and strengthen family harmony.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Password Management and Digital Security for Your Family</title>
      <link>https://mcginniscommawill.com/posts/2025-06-18-password-management-digital-security/</link>
      <pubDate>Wed, 18 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-18-password-management-digital-security/</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclaimer: This content is for educational purposes only and does not constitute cybersecurity or financial advice. Please consult with qualified professionals for specific security recommendations and implementations.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ultra-wealthy families employ dedicated cybersecurity teams to protect their digital assets and information. While you don&amp;rsquo;t need that level of protection, implementing strong password management and basic digital security practices is essential for every family in today&amp;rsquo;s connected world, regardless of income or net worth.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Career Audit: Skills, Joy, and Market Value Sweet Spot</title>
      <link>https://mcginniscommawill.com/posts/2025-06-17-skill-inventory-career-audit/</link>
      <pubDate>Tue, 17 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-17-skill-inventory-career-audit/</guid>
      <description>&lt;p&gt;The most successful career moves happen at the intersection of three things: what you&amp;rsquo;re good at, what you enjoy, and what the market values. Most people focus on one or two of these, then wonder why they feel stuck or unfulfilled.&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve all learned this the hard way in one way or another. Here&amp;rsquo;s the framework I wish I&amp;rsquo;d had for doing a real audit of where you stand and where you might want to go.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Family Financial Meeting: A Step-by-Step Guide</title>
      <link>https://mcginniscommawill.com/posts/2025-06-16-family-financial-meetings/</link>
      <pubDate>Mon, 16 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-16-family-financial-meetings/</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclaimer: This content is for educational purposes only and does not constitute financial, legal, or investment advice. Please consult with qualified professionals before making financial decisions.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ultra-wealthy families often hold formal family meetings with detailed agendas and professional facilitators. While that level of formality isn&amp;rsquo;t necessary, regular family financial meetings are one of the most valuable family office concepts you can adopt, regardless of your wealth level.&lt;/p&gt;&#xA;&lt;p&gt;These meetings work for any family willing to invest the time. Whether you&amp;rsquo;re managing a household budget of $50,000 or $500,000 annually, they create dedicated space for important financial conversations, align family members around shared goals, and strengthen your family&amp;rsquo;s relationship with money.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Burstiness: The Rhythm Detector AI Can&#39;t Fake (Yet)</title>
      <link>https://mcginniscommawill.com/posts/2025-06-13-burstiness-rhythm-detector/</link>
      <pubDate>Fri, 13 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-13-burstiness-rhythm-detector/</guid>
      <description>&lt;h2 id=&#34;the-human-writing-heartbeat&#34;&gt;The Human Writing Heartbeat&lt;/h2&gt;&#xA;&lt;p&gt;If perplexity is the thermometer of AI detection, then burstiness is the EKG. It measures the natural rhythm and variation in human writing: something AI models struggle to replicate convincingly.&lt;/p&gt;&#xA;&lt;p&gt;Think about how you naturally write. Sometimes you craft long, complex sentences with multiple clauses and detailed explanations that wind through several ideas. Other times you write short. Punchy. Direct.&lt;/p&gt;&#xA;&lt;p&gt;That variation? That&amp;rsquo;s burstiness. And it&amp;rsquo;s surprisingly hard for AI to fake.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Perplexity 101: How Language Models Measure Surprise</title>
      <link>https://mcginniscommawill.com/posts/2025-06-11-perplexity-101/</link>
      <pubDate>Wed, 11 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-11-perplexity-101/</guid>
      <description>&lt;h2 id=&#34;the-mystery-of-too-perfect-text&#34;&gt;The Mystery of &amp;ldquo;Too Perfect&amp;rdquo; Text&lt;/h2&gt;&#xA;&lt;p&gt;You&amp;rsquo;ve probably heard the term &amp;ldquo;perplexity&amp;rdquo; thrown around in discussions about language models, but what does it actually mean?&lt;/p&gt;&#xA;&lt;p&gt;Think of it as a confidence meter for how well a language model can predict the next word in a sequence. Low perplexity means the model finds the text predictable.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-perplexity-actually-measures&#34;&gt;What Perplexity Actually Measures&lt;/h2&gt;&#xA;&lt;p&gt;At its core, perplexity measures uncertainty. Imagine playing a word prediction game where you guess the next word in a sentence. High confidence means low perplexity and vice versa.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Testing the Waters: Explore Career Paths Without Burning Bridges</title>
      <link>https://mcginniscommawill.com/posts/2025-06-10-career-path-decision-framework/</link>
      <pubDate>Tue, 10 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-10-career-path-decision-framework/</guid>
      <description>&lt;p&gt;The question I get asked most often isn&amp;rsquo;t about technical problems or specific tools. It&amp;rsquo;s this: &amp;ldquo;How do I know if I should go into management?&amp;rdquo; Or product. Or consulting. Or stay technical and aim for staff/principal roles, or go found a startup.&lt;/p&gt;&#xA;&lt;p&gt;The honest answer? You probably don&amp;rsquo;t know until you try. But here&amp;rsquo;s the thing: you can try without making permanent decisions. You can test the waters before jumping in.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Launching Atlanta AI Dinner: Just Good People and Better Conversation</title>
      <link>https://mcginniscommawill.com/posts/2025-06-09-launching-atlanta-ai-dinner/</link>
      <pubDate>Mon, 09 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-09-launching-atlanta-ai-dinner/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been to enough &amp;ldquo;AI networking events&amp;rdquo; to know the drill. You walk into a room full of people clutching business cards, half-listening to conversations while scanning name tags for their next mark. Someone inevitably corners you to pitch their revolutionary data platform that&amp;rsquo;s &amp;ldquo;totally different from everything else out there.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve had fantastic conversations at these, met great people, and even have actually found good vendors. But it&amp;rsquo;s not always the vibe.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Moroccan-Inspired Spiced Chicken Thighs with Couscous: One-Pan Magic</title>
      <link>https://mcginniscommawill.com/posts/2025-06-08-spiced-chicken-thighs-couscous/</link>
      <pubDate>Sun, 08 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-08-spiced-chicken-thighs-couscous/</guid>
      <description>&lt;p&gt;Here&amp;rsquo;s a killer way to turn your chicken thighs and couscous into something flavorful, comforting, and a little bit fancy without much effort.&lt;/p&gt;&#xA;&lt;p&gt;This dish combines the warmth of North African spices with the convenience of a braised finish in the oven, a technique that prevents the couscous from burning while ensuring everything cooks evenly.&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Spiced Chicken Thighs with Couscous&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 4&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 15 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 35-40 min&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Chicken thighs&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Couscous&lt;/strong&gt; (about 1 cup, Moroccan style)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Onion&lt;/strong&gt;, sliced&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Garlic&lt;/strong&gt;, minced&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Carrots and bell peppers&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Raisins or dried apricots&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Chicken broth or water&lt;/strong&gt; (1.5 cups, hot)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Olive oil&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h5 id=&#34;spices&#34;&gt;Spices&lt;/h5&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Cumin (1 tsp)&lt;/li&gt;&#xA;&lt;li&gt;Paprika (1 tsp)&lt;/li&gt;&#xA;&lt;li&gt;Cinnamon (½ tsp)&lt;/li&gt;&#xA;&lt;li&gt;Turmeric (½ tsp)&lt;/li&gt;&#xA;&lt;li&gt;Salt &amp;amp; pepper&lt;/li&gt;&#xA;&lt;li&gt;Harissa or chili flakes for heat&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h5 id=&#34;for-finishing&#34;&gt;For Finishing&lt;/h5&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Fresh herbs:&lt;/strong&gt; parsley, mint&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Lemon or preserved lemon&lt;/strong&gt; (zest + juice or chopped peel)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;instructions&#34;&gt;Instructions&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Preheat oven&lt;/strong&gt; to 300°F (150°C).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Microwave Egg Fluff: The Weird Technique That Actually Works</title>
      <link>https://mcginniscommawill.com/posts/2025-06-07-microwave-egg-fluff/</link>
      <pubDate>Sat, 07 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-07-microwave-egg-fluff/</guid>
      <description>&lt;h2 id=&#34;when-weird-actually-works&#34;&gt;When Weird Actually Works&lt;/h2&gt;&#xA;&lt;p&gt;Look, I know what you&amp;rsquo;re thinking. Mayonnaise in scrambled eggs? In the microwave? This sounds like the kind of thing someone would suggest at 2 AM after too many drinks. But hear me out, because it works.&lt;/p&gt;&#xA;&lt;p&gt;The secret here is that mayonnaise is eggs and oil already. When you whisk it with a fresh egg, you&amp;rsquo;re creating this airy, emulsified mixture that puffs up beautifully in the microwave. The result is something that tastes like a cross between a fluffy omelet and a soufflé, with way less effort than either.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Consumption vs. Creation: Finding Balance in Your Leisure Time</title>
      <link>https://mcginniscommawill.com/posts/2025-06-06-consumption-vs-creation-leisure/</link>
      <pubDate>Fri, 06 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-06-consumption-vs-creation-leisure/</guid>
      <description>&lt;h2 id=&#34;the-two-faces-of-free-time&#34;&gt;The Two Faces of Free Time&lt;/h2&gt;&#xA;&lt;p&gt;After a long day, sometimes all I want is to collapse on the couch and let Netflix, YouTube, or the endless scroll of Instagram Reels wash over me. This is what I call &lt;strong&gt;consumption-based leisure&lt;/strong&gt;: relaxing by passively taking in content, entertainment, or information. It&amp;rsquo;s easy, it&amp;rsquo;s everywhere, and it&amp;rsquo;s designed to be as frictionless as possible. Content producers are amazingly good at their job.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI for Small Business: Real-World Ways to Get Started</title>
      <link>https://mcginniscommawill.com/posts/2025-06-04-llms-in-the-real-world/</link>
      <pubDate>Wed, 04 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-04-llms-in-the-real-world/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;re a small business owner, you&amp;rsquo;ve probably heard that AI is going to &amp;ldquo;revolutionize everything.&amp;rdquo; But what does that actually mean for your day-to-day? Spoiler: it&amp;rsquo;s not about replacing your team with robots or building a self-driving delivery van (unless you really want to).&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-everyday-ai-toolkit-for-small-business&#34;&gt;The Everyday AI Toolkit for Small Business&lt;/h3&gt;&#xA;&lt;p&gt;AI used to be a very niche technology: mainly for startups and large companies with significant funding for expensive developers and infrastructure. But that&amp;rsquo;s largely changed, fast.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tinto de Verano: Spain&#39;s Perfect Summer Drink</title>
      <link>https://mcginniscommawill.com/posts/2025-06-03-tinto-de-verano-recipe/</link>
      <pubDate>Tue, 03 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-03-tinto-de-verano-recipe/</guid>
      <description>&lt;p&gt;While tourists in Spain order sangria, locals drink something better and infinitely simpler: tinto de verano.&lt;/p&gt;&#xA;&lt;p&gt;Tinto de verano literally translates to &amp;ldquo;summer red wine&amp;rdquo; - red wine mixed with lemon soda. That&amp;rsquo;s it. No chopped fruit, no brandy, no sugar. Just wine, lemon soda, and maybe a lemon slice.&lt;/p&gt;&#xA;&lt;p&gt;The lemon soda adds just enough sweetness and fizz to make any red wine refreshing on a hot day, and you can actually taste the wine you&amp;rsquo;re drinking.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From Data Scientist to Manager: Models to Mentorship</title>
      <link>https://mcginniscommawill.com/posts/2025-06-02-from-ds-to-manager/</link>
      <pubDate>Mon, 02 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-02-from-ds-to-manager/</guid>
      <description>&lt;p&gt;Transitioning from data scientist to manager is a profound shift: one that extends far beyond a change in job title. It is a move from technical execution to organizational stewardship, from optimizing models to enabling people. This journey is both challenging and rewarding, demanding new skills, deeper self-awareness, and a broader perspective on what it means to create value.&lt;/p&gt;&#xA;&lt;h2 id=&#34;letting-go-of-the-notebook-but-not-the-craft&#34;&gt;Letting Go of the Notebook, But Not the Craft&lt;/h2&gt;&#xA;&lt;p&gt;One of the most difficult adjustments is stepping back from direct technical work. As a manager, your primary responsibility is no longer to write code or optimize pipelines, but to build an environment where others can excel. Delegation is not a loss of impact; rather, it is a way to multiply it. The challenge is to remain technically engaged (staying current with tools and trends) while ensuring you are not a bottleneck for your team. Purposeful involvement, such as code reviews or contributing to shared libraries, allows you to maintain technical credibility and foster a culture of learning, without overshadowing your team&amp;rsquo;s ownership of the core data science work.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hainanese Chicken Rice: The Ultimate Comfort Food Trinity</title>
      <link>https://mcginniscommawill.com/posts/2025-06-01-hainanese-chicken-rice/</link>
      <pubDate>Sun, 01 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-06-01-hainanese-chicken-rice/</guid>
      <description>&lt;p&gt;Some dishes are more than the sum of their parts, and Hainanese chicken rice is the perfect example. It&amp;rsquo;s deceptively simple-poached chicken, fragrant rice, and a trio of sauces. But when done right, it achieves that magical balance where every component enhances the others.&lt;/p&gt;&#xA;&lt;p&gt;The beauty of Hainanese chicken rice lies in its restraint. There&amp;rsquo;s no heavy seasoning or complex preparation-just quality ingredients treated with respect and attention to detail. So make sure you buy good stuff.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blogs I Love to Read</title>
      <link>https://mcginniscommawill.com/posts/2025-05-30-favorite-blogs/</link>
      <pubDate>Fri, 30 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-30-favorite-blogs/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been writing this blog for a while now, and while I&amp;rsquo;ve developed my own voice and style, I&amp;rsquo;ve been heavily influenced by the blogs I read regularly. There&amp;rsquo;s something special about finding writers who consistently put out thoughtful, engaging content that makes you think differently about the world. These are the blogs I keep coming back to, the ones that have shaped my own writing and thinking.&lt;/p&gt;&#xA;&lt;h2 id=&#34;greg-poirier---grepmeetsworldblog&#34;&gt;Greg Poirier - grepmeetsworld.blog&lt;/h2&gt;&#xA;&lt;p&gt;Greg&amp;rsquo;s writing is a masterclass in technical storytelling. Whether he&amp;rsquo;s diving into the intricacies of software engineering or sharing insights about leadership, his posts always strike a perfect balance between technical depth and accessibility. His recent series on engineering management and technical leadership has been particularly insightful.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bandit Severity Levels: Understanding High, Medium, and Low Findings</title>
      <link>https://mcginniscommawill.com/posts/2025-05-29-bandit-severity-levels-explained/</link>
      <pubDate>Thu, 29 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-29-bandit-severity-levels-explained/</guid>
      <description>&lt;p&gt;The first time I ran Bandit on a legacy codebase, it returned 312 security findings. My immediate thought was: &amp;ldquo;Where do I even start?&amp;rdquo; Some issues seemed catastrophic, others looked like nitpicks, and many fell somewhere in between. The raw number of findings was overwhelming, but what really saved my sanity was understanding Bandit&amp;rsquo;s two-dimensional classification system.&lt;/p&gt;&#xA;&lt;p&gt;Bandit doesn&amp;rsquo;t just tell you what&amp;rsquo;s wrong-it tells you how wrong it is and how confident it is about that assessment. This approach transforms an overwhelming flood of alerts into a manageable prioritization framework.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Your Family Financial Dashboard: Seeing the Complete Picture</title>
      <link>https://mcginniscommawill.com/posts/2025-05-28-family-financial-dashboard/</link>
      <pubDate>Wed, 28 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-28-family-financial-dashboard/</guid>
      <description>&lt;p&gt;One of the most valuable services a family office provides is comprehensive financial reporting: giving family members a clear, real-time view of their complete financial picture. While ultra-wealthy families often have custom-built dashboards costing tens of thousands of dollars, you don&amp;rsquo;t need that kind of budget to create an effective financial dashboard for your family.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-a-financial-dashboard-matters&#34;&gt;Why a Financial Dashboard Matters&lt;/h2&gt;&#xA;&lt;p&gt;Most families have their finances scattered across multiple accounts and institutions, making it difficult to see the complete picture. Without a dashboard, you can&amp;rsquo;t effectively manage what you don&amp;rsquo;t measure. Regular monitoring helps you stay accountable to your financial goals and plans, while making it easier for spouses and partners to stay on the same page financially. When opportunities or challenges arise, having all your financial information in one place helps you make better decisions. It also simplifies collaboration with your financial advisors, enabling them to provide more integrated advice.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bandit&#39;s Hardcoded Password Detection: Rules B105-B107 in Practice</title>
      <link>https://mcginniscommawill.com/posts/2025-05-27-hardcoded-password-detection-b105-b107/</link>
      <pubDate>Tue, 27 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-27-hardcoded-password-detection-b105-b107/</guid>
      <description>&lt;p&gt;Picture this: you&amp;rsquo;re reviewing a pull request at 2 AM, trying to ship a critical bug fix before morning. Hidden in line 247 of a configuration file, you find &lt;code&gt;DATABASE_PASSWORD = &amp;quot;prod_db_2023!&amp;quot;&lt;/code&gt;. Your heart sinks as you realize this password has been sitting in your GitHub repository for three months, visible to anyone with read access.&lt;/p&gt;&#xA;&lt;p&gt;This scenario plays out more often than you&amp;rsquo;d think. Hardcoded passwords are like digital land mines-they seem harmless until they explode in your face. Bandit&amp;rsquo;s rules B105, B106, and B107 exist specifically to catch these ticking time bombs before they make it to production.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bandit Security Rules: Complete Python Vulnerability Guide</title>
      <link>https://mcginniscommawill.com/posts/2025-05-26-bandit-security-rules-complete-guide/</link>
      <pubDate>Mon, 26 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-26-bandit-security-rules-complete-guide/</guid>
      <description>&lt;p&gt;When you first run Bandit on a production codebase, you&amp;rsquo;ll get back a 47-page report filled with cryptic rule numbers like B105, B608, and B301. My initial reaction to that is normally panic, followed by the urge to add &lt;code&gt;# nosec&lt;/code&gt; comments everywhere and call it a day. But here&amp;rsquo;s the thing about security tools-they&amp;rsquo;re only as good as your understanding of what they&amp;rsquo;re actually telling you.&lt;/p&gt;&#xA;&lt;p&gt;Bandit organizes its security checks into logical categories, each targeting different types of vulnerabilities that can creep into Python applications. Think of it as having a security expert looking over your shoulder, pointing out potential issues before they become real problems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Practical MCP Use: Real-World Workflows with Model Context Protocol</title>
      <link>https://mcginniscommawill.com/posts/2025-05-24-practical-mcp-use/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-24-practical-mcp-use/</guid>
      <description>&lt;p&gt;In the ever-evolving landscape of developer productivity, finding tools that genuinely streamline your workflow is a constant challenge. Over the past few months, I&amp;rsquo;ve been experimenting with the Model Context Protocol (MCP) in Cursor, and I&amp;rsquo;ve published four open-source MCP servers that have become essential to my daily routine. In this post, I&amp;rsquo;ll walk through what MCP is, introduce each server, and share some honest thoughts on their practical value at this point in time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Juggling Projects? Analyze Multiple Repos at Once with GitPandas</title>
      <link>https://mcginniscommawill.com/posts/2025-05-23-multi-repo/</link>
      <pubDate>Fri, 23 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-23-multi-repo/</guid>
      <description>&lt;p&gt;So, you&amp;rsquo;ve got your Git analysis chops honed with &lt;code&gt;gitpandas&lt;/code&gt; on a single repository. Nice! But what happens when your project isn&amp;rsquo;t just one repo? Maybe you&amp;rsquo;re wrangling microservices, managing a monorepo with distinct sub-projects, or just have a collection of related tools living in separate folders. Analyzing them one by one is a drag.&lt;/p&gt;&#xA;&lt;p&gt;Fear not! &lt;code&gt;gitpandas&lt;/code&gt; has a nifty tool called &lt;code&gt;ProjectDirectory&lt;/code&gt; designed exactly for this scenario. It lets you treat a directory full of Git repositories as a single entity for analysis. Let&amp;rsquo;s see how it works.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Remote Work vs Asynchronous Work: Why Async Wins, Wherever You Are</title>
      <link>https://mcginniscommawill.com/posts/2025-05-22-remote-vs-async-work/</link>
      <pubDate>Thu, 22 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-22-remote-vs-async-work/</guid>
      <description>&lt;p&gt;When people talk about &amp;ldquo;remote work,&amp;rdquo; they often assume it means working asynchronously. But that&amp;rsquo;s not always true. Remote work just means you&amp;rsquo;re not in the same physical place as your team. Asynchronous work, on the other hand, is about not needing everyone to be online or working at the same time. The are related but distinct concepts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;you-can-mix-and-match&#34;&gt;You Can Mix and Match&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Synchronous Remote Work:&lt;/strong&gt; Your team is spread out, but everyone is expected to be online at the same time. Think of a distributed team that has daily standups on Zoom at 9am sharp, and expects instant Slack replies all day. You have core hours that everyone is expected to work at the same time. The type and mode of work is similar to normal in person work, but you&amp;rsquo;re on zoom instead of in person. You&amp;rsquo;re remote, but not async.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Group Decision Making: Team Dynamics in Life-Critical Situations</title>
      <link>https://mcginniscommawill.com/posts/2025-05-21-group-decision-making/</link>
      <pubDate>Wed, 21 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-21-group-decision-making/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/2025/05/group-decision-making.png&#34; alt=&#34;group decision making&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Imagine this: A flight crew faces a sudden storm. A trauma team in a hospital juggles multiple critical patients. On a nuclear submarine, officers must act fast when a system malfunctions. In all these cases, teams have to make big decisions, fast, with limited information, and the stakes couldn&amp;rsquo;t be higher. So, how do organizations make sure their teams get these decisions right, even under pressure?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stargazers CLI Update: Nested Commands, Account Trends, and Plotting!</title>
      <link>https://mcginniscommawill.com/posts/2025-05-20-stargazers-update-post/</link>
      <pubDate>Tue, 20 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-20-stargazers-update-post/</guid>
      <description>&lt;p&gt;Big news for users of the &lt;a href=&#34;https://github.com/wdm0006/stargazers&#34;&gt;stargazers&lt;/a&gt; CLI! The latest update brings a cleaner command structure and some powerful new features for analyzing your GitHub stars and forks. (&lt;a href=&#34;https://github.com/wdm0006/stargazers/commit/211908aef933d9e503570f22098c788367c01715&#34;&gt;See the commit here&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;h2 id=&#34;all-commands-now-under-stargazers&#34;&gt;All Commands Now Under &lt;code&gt;stargazers&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Previously, the CLI had separate entry points for different commands. Now, everything is neatly organized under the main &lt;code&gt;stargazers&lt;/code&gt; command. This means you&amp;rsquo;ll run subcommands like:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;stargazers repos ...&#xA;stargazers forkers ...&#xA;stargazers account-trend ...&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This change makes the CLI more intuitive and easier to extend in the future.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mutation Testing with mumut for Pygeohash</title>
      <link>https://mcginniscommawill.com/posts/2025-05-19-mutation-testing/</link>
      <pubDate>Mon, 19 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-19-mutation-testing/</guid>
      <description>&lt;p&gt;Ensuring the reliability and correctness of a library like &lt;code&gt;pygeohash&lt;/code&gt; is paramount. While traditional code coverage metrics tell us which lines of code our tests &lt;em&gt;execute&lt;/em&gt;, they don&amp;rsquo;t tell us how &lt;em&gt;well&lt;/em&gt; those lines are tested. Did our tests actually check the logic, or did they just run through it? This is where mutation testing comes in.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-mutation-testing&#34;&gt;What is Mutation Testing?&lt;/h2&gt;&#xA;&lt;p&gt;Mutation testing is a powerful technique for evaluating the quality of a test suite. The core idea is simple yet effective:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Decision Journals: Learning from High-Stakes Decisions</title>
      <link>https://mcginniscommawill.com/posts/2025-05-18-decision-journals/</link>
      <pubDate>Sun, 18 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-18-decision-journals/</guid>
      <description>&lt;p&gt;Picture this: In a hospital trauma center, a team scrambles to save a life, making split-second decisions. On an aircraft carrier, commanders weigh whether to keep flying as a storm rolls in. In a nuclear plant, operators must act fast when something goes wrong. These moments are intense, risky, and packed with lessons. But if we don&amp;rsquo;t write them down and study them, those lessons fade, and mistakes get repeated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pad Kra Pao (Thai Basil Stir-Fry)</title>
      <link>https://mcginniscommawill.com/posts/2025-05-17-pad-kra-pao/</link>
      <pubDate>Sat, 17 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-17-pad-kra-pao/</guid>
      <description>&lt;p&gt;Pad Kra Pao is the ultimate Thai comfort food: fast, spicy, and deeply satisfying. The secret? Get a good sear on your ground pork and use the right basil (holy basil if you can find it, otherwise Thai basil).&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Pad Kra Pao&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 2-3&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 10 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 10 min&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1 lb ground pork&lt;/li&gt;&#xA;&lt;li&gt;4 cloves garlic, minced&lt;/li&gt;&#xA;&lt;li&gt;2-4 Thai chilies, sliced (adjust to taste)&lt;/li&gt;&#xA;&lt;li&gt;1 shallot, thinly sliced&lt;/li&gt;&#xA;&lt;li&gt;2 tbsp neutral oil&lt;/li&gt;&#xA;&lt;li&gt;2 tbsp soy sauce, mix dark and light&lt;/li&gt;&#xA;&lt;li&gt;1 tbsp fish sauce&lt;/li&gt;&#xA;&lt;li&gt;1 tsp sugar&lt;/li&gt;&#xA;&lt;li&gt;1 cup holy basil leaves (or Thai basil)&lt;/li&gt;&#xA;&lt;li&gt;Cooked jasmine rice, for serving&lt;/li&gt;&#xA;&lt;li&gt;Fried egg, for topping&lt;/li&gt;&#xA;&lt;li&gt;Sliced cucumber on the side&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;instructions&#34;&gt;Instructions&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Prep everything first.&lt;/strong&gt; This goes fast!&lt;/li&gt;&#xA;&lt;li&gt;Heat oil in a wok or skillet over high heat. Add ground pork and let it sear, don&amp;rsquo;t stir too much at first. You want crispy, browned bits.&lt;/li&gt;&#xA;&lt;li&gt;Add garlic and chilies, stir-fry until fragrant.&lt;/li&gt;&#xA;&lt;li&gt;Toss in onion (if using), then add soy sauce, fish sauce, and sugar. Stir well.&lt;/li&gt;&#xA;&lt;li&gt;Turn off the heat and fold in the basil. Let it wilt from the residual heat.&lt;/li&gt;&#xA;&lt;li&gt;Serve over hot jasmine rice, topped with a crispy fried egg.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h4 id=&#34;notes&#34;&gt;Notes&lt;/h4&gt;&#xA;&lt;p&gt;Holy basil gives the most authentic flavor, but Thai basil works in a pinch. Regular Italian basil is not it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Digging into Code Churn with GitPandas</title>
      <link>https://mcginniscommawill.com/posts/2025-05-16-gitpandas-edit-rates/</link>
      <pubDate>Fri, 16 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-16-gitpandas-edit-rates/</guid>
      <description>&lt;p&gt;Alright, let&amp;rsquo;s talk about Git history. Sometimes you just &lt;em&gt;know&lt;/em&gt; a certain part of the codebase feels&amp;hellip; messy. Maybe it&amp;rsquo;s that one module everyone&amp;rsquo;s afraid to touch, or a feature that seems to break every other week. Wouldn&amp;rsquo;t it be cool if you could quantify that gut feeling? Turns out, you can, and a neat little Python library called &lt;code&gt;gitpandas&lt;/code&gt; makes it pretty straightforward.&lt;/p&gt;&#xA;&lt;p&gt;Today, we&amp;rsquo;re diving into &lt;strong&gt;code churn&lt;/strong&gt;. In simple terms, churn tells you how often lines of code are added, deleted, or modified in a file or set of files. High churn can sometimes (but not always!) indicate areas with potential instability, complex logic, or frequent refactoring. It&amp;rsquo;s a useful metric for understanding the evolution of your project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Refactoring Library Interfaces</title>
      <link>https://mcginniscommawill.com/posts/2025-05-15-from-clunky-to-elegant/</link>
      <pubDate>Thu, 15 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-15-from-clunky-to-elegant/</guid>
      <description>&lt;p&gt;In our previous posts, we explored &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-02-03-art-of-api-design/&#34;&gt;API design principles&lt;/a&gt; and &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-02-06-designing-for-developer-joy/&#34;&gt;developer ergonomics&lt;/a&gt;. Now, let&amp;rsquo;s tackle a common challenge: how do you take an existing library interface from clunky to elegant without breaking existing code?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Context-Aware Library Design: Build for Your Users</title>
      <link>https://mcginniscommawill.com/posts/2025-05-14-context-aware-library-design/</link>
      <pubDate>Wed, 14 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-14-context-aware-library-design/</guid>
      <description>&lt;p&gt;After diving into &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-02-03-art-of-api-design/&#34;&gt;API design principles&lt;/a&gt;, &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-02-06-designing-for-developer-joy/&#34;&gt;developer ergonomics&lt;/a&gt;, and &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-05-15-from-clunky-to-elegant/&#34;&gt;refactoring interfaces&lt;/a&gt;, let&amp;rsquo;s tackle a neat trick: making your library smart enough to feel right for &lt;em&gt;everyone&lt;/em&gt;, from beginners to experts, without becoming a tangled mess.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Who Holds the Keys? Calculating Bus Factor with GitPandas</title>
      <link>https://mcginniscommawill.com/posts/2025-05-13-bus-factor/</link>
      <pubDate>Tue, 13 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-13-bus-factor/</guid>
      <description>&lt;p&gt;Ever had that nagging feeling about &amp;ldquo;what if Alice from accounting gets hit by a bus?&amp;rdquo; Okay, maybe not &lt;em&gt;exactly&lt;/em&gt; that, but the underlying concern is real in software projects too. What happens if a key developer leaves? How much knowledge walks out the door with them? This concept is often (somewhat morbidly) called the &lt;strong&gt;Bus Factor&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In essence, the bus factor is the minimum number of team members that have to suddenly disappear from a project before the project stalls due to lack of knowledgeable personnel. A low bus factor (like 1 or 2) indicates a high risk - too much critical knowledge is concentrated in too few people.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building Your Digital Vault: Secure Document Organization Made Simple</title>
      <link>https://mcginniscommawill.com/posts/2025-05-12-digital-vault/</link>
      <pubDate>Mon, 12 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-12-digital-vault/</guid>
      <description>&lt;p&gt;One of the most practical family office functions is maintaining a secure, organized repository of important documents. Ultra-wealthy families employ dedicated staff to manage thousands of documents, from tax returns to estate plans to investment statements. But you don&amp;rsquo;t need staff or specialized software to create your own digital vault: just a thoughtful approach and some basic technology.&lt;/p&gt;&#xA;&lt;p&gt;A well-organized digital vault saves time, reduces stress, and ensures that critical information is available when needed. It&amp;rsquo;s also one of the greatest gifts you can give your loved ones, who would otherwise face the daunting task of hunting down important documents during already difficult times.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crafting Simple Chili Crush: A Spicy Homemade Condiment</title>
      <link>https://mcginniscommawill.com/posts/2025-05-11-simple-chili-crush/</link>
      <pubDate>Sun, 11 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-11-simple-chili-crush/</guid>
      <description>&lt;p&gt;Chili crush (also called chili crisp or chili oil) is a versatile condiment featuring crispy, crunchy bits of chili, aromatics, and spices suspended in oil. This simplified version delivers complex flavor with minimal effort, creating a customizable condiment that transforms everything from eggs and rice to noodles and roasted vegetables. Unlike many store-bought versions, this homemade chili crush contains no preservatives and can be adjusted to your preferred level of heat.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PDCA Quality Control: Applying Plan-Do-Check-Act in Modern Industries</title>
      <link>https://mcginniscommawill.com/posts/2025-05-10-pdca-quality-control/</link>
      <pubDate>Sat, 10 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-10-pdca-quality-control/</guid>
      <description>&lt;p&gt;When organizations face high-consequence decisions under uncertainty (whether in healthcare, aviation, or nuclear power), the initial decision is just the beginning. How do these organizations ensure their decisions lead to desired outcomes while managing risks? How do they learn and adapt when lives or critical infrastructure are at stake? The &lt;strong&gt;PDCA Cycle (Plan-Do-Check-Act)&lt;/strong&gt;, developed by W. Edwards Deming at Bell Labs and refined through decades of use in high-reliability organizations like Toyota, provides a systematic framework for making and implementing critical decisions while continuously learning from outcomes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Family Mission Statement: Foundation of Financial Clarity</title>
      <link>https://mcginniscommawill.com/posts/2025-05-09-family-mission-statement/</link>
      <pubDate>Fri, 09 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-09-family-mission-statement/</guid>
      <description>&lt;p&gt;When people are asked about their financial goals, most respond with numbers: &amp;ldquo;We want to retire with $2 million&amp;rdquo; or &amp;ldquo;We need to save $100,000 for college.&amp;rdquo; But many successful families, from billionaires to teachers, start with something deeper: a clear understanding of their core values and purpose.&lt;/p&gt;&#xA;&lt;p&gt;In the family office world, this understanding is typically captured in a family mission statement: a concise declaration of what matters most to your family and what you hope to accomplish with your resources. It serves as the foundation for all financial decisions, ensuring that your money serves your deepest values rather than the other way around.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Red Teaming: How to Stress-Test Your Most Important Decisions</title>
      <link>https://mcginniscommawill.com/posts/2025-05-08-red-teaming/</link>
      <pubDate>Thu, 08 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-08-red-teaming/</guid>
      <description>&lt;p&gt;The executive team sat around the conference table, confidence radiating from their faces. They tested the technology, confirmed market demand, and projected strong returns with their financial models, so they considered the new product strategy bulletproof. Then someone asked a simple question: &amp;ldquo;What are we missing?&amp;rdquo; The room fell silent. Despite months of planning, nobody had systematically tried to find the plan&amp;rsquo;s weaknesses. I&amp;rsquo;ve witnessed this scene repeatedly across industries, and too often, teams let preventable oversights lead to costly failures.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting Things Done: High-Stakes Decisions Need Clear Minds</title>
      <link>https://mcginniscommawill.com/posts/2025-05-07-getting-things-done/</link>
      <pubDate>Wed, 07 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-07-getting-things-done/</guid>
      <description>&lt;p&gt;Picture this: You&amp;rsquo;re a senior analyst about to make a multi-million dollar investment recommendation, a corporate lawyer finalizing a critical merger agreement. In these high-stakes scenarios, the quality of your decisions can make or break careers, companies, and systems. Meanwhile, your mind is drowning in a flood of inputs: hundreds of unread emails, constant Slack notifications, endless meeting requests, and urgent phone calls. Don&amp;rsquo;t forget the growing pile of reports demanding your attention. This information overload is more than just stressful; it&amp;rsquo;s a recipe for costly mistakes. This is where &lt;strong&gt;Getting Things Done (GTD)&lt;/strong&gt; comes in. GTD is a methodology that transforms how we handle complex decision-making in an age of overwhelming information.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Coordinating Financial Advisors: Streamlining for Better Outcomes</title>
      <link>https://mcginniscommawill.com/posts/2025-05-06-coordinating-financial-advisors/</link>
      <pubDate>Tue, 06 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-06-coordinating-financial-advisors/</guid>
      <description>&lt;p&gt;One of the most powerful aspects of a family office is how it coordinates various financial professionals to work as an integrated team rather than in silos. This coordination eliminates dangerous blind spots and creates significantly better outcomes.&lt;/p&gt;&#xA;&lt;p&gt;The good news? You don&amp;rsquo;t need a full-fledged family office to implement this approach. With some simple strategies, you can get your existing advisors working together more effectively, regardless of your wealth level.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The ECF Rating System: The British Approach to Chess Ratings</title>
      <link>https://mcginniscommawill.com/posts/2025-05-05-ecf-rating-system/</link>
      <pubDate>Mon, 05 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-05-ecf-rating-system/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve covered some heavy hitters in our rating systems series so far: &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-03-25-elo-rating-system/&#34;&gt;Elo&lt;/a&gt;, and the &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-04-29-glicko1-rating-system/&#34;&gt;Glicko family&lt;/a&gt;. Now let&amp;rsquo;s explore something a bit more niche but fascinating in its own right: the ECF (English Chess Federation) rating system.&lt;/p&gt;&#xA;&lt;p&gt;While not as widely used outside of British chess circles, the ECF system offers some interesting design choices that make it worth studying.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing Tools MCP: A Toolkit for Better Writing</title>
      <link>https://mcginniscommawill.com/posts/2025-05-05-writing-tools-mcp/</link>
      <pubDate>Mon, 05 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-05-writing-tools-mcp/</guid>
      <description>&lt;p&gt;I just released a new tool that I&amp;rsquo;m pretty excited about: &lt;a href=&#34;https://github.com/wdm0006/writing-tools-mcp&#34;&gt;Writing Tools MCP&lt;/a&gt;, a Model Context Protocol server that provides text analysis capabilities to help improve your writing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Loonshots: Nurturing Crazy Ideas That Transform Industries</title>
      <link>https://mcginniscommawill.com/posts/2025-05-04-loonshots-book-review/</link>
      <pubDate>Sun, 04 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-04-loonshots-book-review/</guid>
      <description>&lt;h2 id=&#34;loonshots-where-crazy-ideas-go-to-grow-up&#34;&gt;Loonshots: Where Crazy Ideas Go to Grow Up&lt;/h2&gt;&#xA;&lt;p&gt;Look, I&amp;rsquo;ll be honest - when I first picked up Safi Bahcall&amp;rsquo;s &lt;em&gt;Loonshots&lt;/em&gt;, I was skeptical. Another innovation book? Really? But about 20 pages in, I realized this wasn&amp;rsquo;t your typical &amp;ldquo;innovation is important&amp;rdquo; business book. Instead, it&amp;rsquo;s a surprisingly fresh take on why some wild ideas survive and others die, told through the lens of physics (yes, physics!) and fascinating historical tales.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI in Atlanta: History, Present, and Future Guide</title>
      <link>https://mcginniscommawill.com/library/atlanta-ai-guide/</link>
      <pubDate>Sat, 03 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/library/atlanta-ai-guide/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Last Updated: February 7, 2026&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;changelog&#34;&gt;Changelog&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;February 2026&lt;/strong&gt;: Added Airia (enterprise AI orchestration, $100M funding, AirWatch founder pedigree), Danti (geospatial AI knowledge engine, Space Force contracts), Obvious (formerly Flatfile, collaborative AI agent platform), CogBias AI (cognitive bias detection), and Watchtower AI (data engineering AI agents) to startup roster and historical timeline&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;August 2025&lt;/strong&gt;: Added Atlanta AI Commission governance section; updated Flock Safety funding details; added Georgia Tech AI Makerspace compute infrastructure; expanded Emory AI.Health institute coverage; updated startup roster and community events&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;May 2025&lt;/strong&gt;: Initial comprehensive guide launch&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;table-of-contents&#34;&gt;Table of Contents&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#1-introduction-why-atlanta&#34;&gt;1. Introduction: Why Atlanta?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#2-historical-evolution-of-atlanta-ai&#34;&gt;2. Historical Evolution of Atlanta AI&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#21-foundations-2000-2009-planting-the-seeds&#34;&gt;2.1 Foundations (2000‑2009): Planting the Seeds&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#22-rise-2010-2015-gaining-momentum&#34;&gt;2.2 Rise (2010‑2015): Gaining Momentum&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#23-acceleration-2016-2020-hitting-escape-velocity&#34;&gt;2.3 Acceleration (2016‑2020): Hitting Escape Velocity&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#24-modern-boom-2021-2025-full-throttle&#34;&gt;2.4 Modern Boom (2021‑2025): Full Throttle&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#3-current-ecosystem-landscape&#34;&gt;3. Current Ecosystem Landscape&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#31-startup-sectors-wheres-the-action&#34;&gt;3.1 Startup Sectors: Where&amp;rsquo;s the Action?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#32-research-anchors-the-brain-trusts&#34;&gt;3.2 Research Anchors: The Brain Trusts&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#33-corporate-ai-hubs-the-big-players&#34;&gt;3.3 Corporate AI Hubs: The Big Players&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#4-investment-support-infrastructure-fueling-the-fire&#34;&gt;4. Investment &amp;amp; Support Infrastructure: Fueling the Fire&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#5-talent-education-pipeline-feeding-the-growth&#34;&gt;5. Talent &amp;amp; Education Pipeline: Feeding the Growth&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#6-community-events-where-people-connect&#34;&gt;6. Community &amp;amp; Events: Where People Connect&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#7-startup-case-studies-deep-dives&#34;&gt;7. Startup Case Studies: Deep Dives&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#71-flock-safety-computer-vision-takes-flight-for-public-safety&#34;&gt;7.1 Flock Safety: Computer Vision Takes Flight for Public Safety&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#72-pindrop-securing-the-soundwaves-against-fraud&#34;&gt;7.2 Pindrop: Securing the Soundwaves Against Fraud&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#73-codoxo-ai-as-the-watchdog-for-healthcare-billing&#34;&gt;7.3 Codoxo: AI as the Watchdog for Healthcare Billing&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#74-document-crunch-making-sense-of-construction-chaos-with-nlp&#34;&gt;7.4 Document Crunch: Making Sense of Construction Chaos with NLP&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#8-opportunities-challenges-the-road-ahead&#34;&gt;8. Opportunities &amp;amp; Challenges: The Road Ahead&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#9-how-to-get-involved-plugging-in&#34;&gt;9. How to Get Involved: Plugging In&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#10-future-outlook-2025-2030-whats-next&#34;&gt;10. Future Outlook (2025‑2030): What&amp;rsquo;s Next?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;1-introduction-why-atlanta&#34;&gt;1. Introduction: Why Atlanta?&lt;/h2&gt;&#xA;&lt;p&gt;So, why Atlanta? Atlanta is a lot of things, but peel back the layers, and you&amp;rsquo;ll find a surprisingly deep-rooted, rapidly accelerating hub for Artificial Intelligence. The ecosystem speaks for itself. We&amp;rsquo;re talking about a metro area with dozens of AI-first startups plus hundreds of AI-enabled teams inside Atlanta&amp;rsquo;s corporate giants, boasting billion-dollar &amp;ldquo;unicorns&amp;rdquo; like &lt;a href=&#34;https://www.flocksafety.com/&#34;&gt;Flock Safety&lt;/a&gt;, and fueled by a steady stream of talent from Georgia Tech and Emory.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lavender Crème Brûlée: A Floral Twist on a Classic</title>
      <link>https://mcginniscommawill.com/posts/2025-05-03-lavender-creme-brulee/</link>
      <pubDate>Sat, 03 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-03-lavender-creme-brulee/</guid>
      <description>&lt;p&gt;Crème brûlée is a classic dessert that&amp;rsquo;s surprisingly simple to make at home. This version adds a subtle floral note by infusing the cream with culinary lavender, creating an elegant twist on the traditional vanilla version. The key is letting the lavender steep in the hot cream mixture to extract its delicate flavor without becoming overwhelming.&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Lavender Crème Brûlée&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 4&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 15 min &amp;#43; 30 min steep&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 35 min&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2 cups heavy cream&lt;/li&gt;&#xA;&lt;li&gt;2 tablespoons culinary lavender buds&lt;/li&gt;&#xA;&lt;li&gt;4 large egg yolks&lt;/li&gt;&#xA;&lt;li&gt;⅓ cup granulated sugar&lt;/li&gt;&#xA;&lt;li&gt;1 teaspoon vanilla extract&lt;/li&gt;&#xA;&lt;li&gt;4 tablespoons turbinado sugar (for the caramelized top)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;equipment&#34;&gt;Equipment&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Medium saucepan&lt;/li&gt;&#xA;&lt;li&gt;Fine-mesh strainer&lt;/li&gt;&#xA;&lt;li&gt;Whisk&lt;/li&gt;&#xA;&lt;li&gt;4 ramekins (6-8oz each)&lt;/li&gt;&#xA;&lt;li&gt;Baking dish large enough to hold ramekins&lt;/li&gt;&#xA;&lt;li&gt;Kitchen torch (or broiler)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;method&#34;&gt;Method&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Infuse the cream&lt;/strong&gt;: In a medium saucepan, combine heavy cream and lavender buds. Heat over medium heat until just simmering (small bubbles around the edges). Remove from heat, cover, and let steep for 30 minutes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exploring Dad Lore: Stories That Shape Generations</title>
      <link>https://mcginniscommawill.com/posts/2025-05-02-on-dad-lore/</link>
      <pubDate>Fri, 02 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-02-on-dad-lore/</guid>
      <description>&lt;p&gt;Growing up, my childhood was filled with tales, non sequiturs, and mysteries that baffle and amaze me to this day. My father and grandfathers were the master storytellers in their own unique ways.&lt;/p&gt;&#xA;&lt;p&gt;My grandfathers weaved narratives that were as grand and mythical as the tales in &amp;ldquo;Big Fish.&amp;rdquo; As many times as you were sure they were made up some evidence to the contrary would appear to set you straight. My father on the other hand is a master of the lore drop, casually mentioning some insane tidbit off hand and moving on to a new topic before anyone can process it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Build-Measure-Learn: Faster Decisions, Smarter Products</title>
      <link>https://mcginniscommawill.com/posts/2025-05-01-build-measure-learn/</link>
      <pubDate>Thu, 01 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-05-01-build-measure-learn/</guid>
      <description>&lt;p&gt;Remember the traditional product development playbook? Months of market research, detailed requirement documents, lengthy development cycles, a big launch, and then&amp;hellip; hope. Hope that customers actually wanted what you meticulously built. Hope that your initial assumptions were correct. Too often, this approach leads to wasted resources, missed market windows, and products nobody uses. The &lt;strong&gt;Lean Startup&lt;/strong&gt; movement, popularized by Eric Ries, offered a radical alternative centered on the &lt;strong&gt;Build-Measure-Learn (BML) feedback loop&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Glicko-2: Adding Volatility to the Rating Equation</title>
      <link>https://mcginniscommawill.com/posts/2025-04-30-glicko2-rating-system/</link>
      <pubDate>Wed, 30 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-30-glicko2-rating-system/</guid>
      <description>&lt;p&gt;In our previous posts, we explored &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-03-25-elo-rating-system/&#34;&gt;Elo Rating System&lt;/a&gt; and &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-04-29-glicko1-rating-system/&#34;&gt;Glicko-1 Rating System&lt;/a&gt;. Glicko-1 improved on Elo by tracking rating reliability, but it still missed something important: some players are just more consistent than others.&lt;/p&gt;&#xA;&lt;p&gt;Enter Glicko-2, which adds a third dimension to the rating equation: volatility.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Glicko Rating System: When Confidence Matters</title>
      <link>https://mcginniscommawill.com/posts/2025-04-29-glicko1-rating-system/</link>
      <pubDate>Tue, 29 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-29-glicko1-rating-system/</guid>
      <description>&lt;p&gt;In our &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-03-25-elo-rating-system/&#34;&gt;previous post&lt;/a&gt;, we explored the Elo rating system - the grandfather of competitive rankings. While Elo is elegant in its simplicity, it has some limitations. One of the biggest is that it treats all ratings as equally reliable, whether they&amp;rsquo;re based on thousands of games or just a handful.&lt;/p&gt;&#xA;&lt;p&gt;Enter the Glicko rating system, which addresses this limitation by tracking how confident we should be in that rating.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Handling Deprecation: Gracefully Retiring Features</title>
      <link>https://mcginniscommawill.com/posts/2025-04-28-handling-deprecation/</link>
      <pubDate>Mon, 28 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-28-handling-deprecation/</guid>
      <description>&lt;p&gt;Breaking changes are like going to the dentist - nobody likes them, but sometimes they&amp;rsquo;re necessary for long-term health. Whether you&amp;rsquo;re improving your API design, addressing security concerns, or removing features that are causing more trouble than they&amp;rsquo;re worth, you&amp;rsquo;ll eventually need to deprecate some part of your library.&lt;/p&gt;&#xA;&lt;p&gt;But here&amp;rsquo;s the thing: while breaking changes are sometimes necessary, breaking your users&amp;rsquo; code without warning is never okay. In this post, I&amp;rsquo;ll share my battle-tested approach to deprecating features in a way that keeps your users happy and your codebase clean.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Think Like a CEO: The Family Office Mindset Anyone Can Adopt</title>
      <link>https://mcginniscommawill.com/posts/2025-04-27-family-office-mindset/</link>
      <pubDate>Sun, 27 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-27-family-office-mindset/</guid>
      <description>&lt;p&gt;The most valuable thing to learn from family offices isn&amp;rsquo;t about complex investment strategies or tax loopholes. It&amp;rsquo;s about mindset. Ultra-wealthy families approach their finances with the same strategic thinking they bring to their businesses. They don&amp;rsquo;t just react to financial events; they proactively manage their wealth with clear goals and strategies.&lt;/p&gt;&#xA;&lt;p&gt;The good news? This mindset shift costs absolutely nothing to adopt, yet it can transform how you manage your family&amp;rsquo;s finances regardless of your net worth.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Honey Sriracha Brussels Sprouts</title>
      <link>https://mcginniscommawill.com/posts/2025-04-26-honey-sriracha-brussels-sprouts/</link>
      <pubDate>Sat, 26 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-26-honey-sriracha-brussels-sprouts/</guid>
      <description>&lt;p&gt;These Brussels sprouts transform from bitter to irresistible when cooked in rendered bacon fat until crispy, then finished with a sweet-spicy glaze. The combination of caramelized edges, smoky bacon, and the honey-sriracha finish creates a side dish that&amp;rsquo;s both sophisticated and addictive.&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Honey Sriracha Brussels Sprouts&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 4&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 10 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 20 min&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;4 ounces lardons or thick-cut bacon, diced&lt;/li&gt;&#xA;&lt;li&gt;1 pound Brussels sprouts, trimmed and halved&lt;/li&gt;&#xA;&lt;li&gt;1 medium yellow onion, thinly sliced&lt;/li&gt;&#xA;&lt;li&gt;3 cloves garlic, thinly sliced&lt;/li&gt;&#xA;&lt;li&gt;2 tablespoons honey&lt;/li&gt;&#xA;&lt;li&gt;1-2 tablespoons sriracha (adjust to taste)&lt;/li&gt;&#xA;&lt;li&gt;Kosher salt and freshly ground black pepper&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;equipment&#34;&gt;Equipment&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Large skillet (preferably cast iron or stainless steel)&lt;/li&gt;&#xA;&lt;li&gt;Tongs or wooden spoon&lt;/li&gt;&#xA;&lt;li&gt;Measuring spoons&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;method&#34;&gt;Method&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Render the bacon&lt;/strong&gt;: Cook lardons or bacon in a large skillet over medium heat until fat is rendered and bacon is crispy. Remove bacon with a slotted spoon and set aside, leaving the fat in the pan.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Channel Sales vs Affiliate Marketing: What Are You Really Selling?</title>
      <link>https://mcginniscommawill.com/posts/2025-04-25-channel-vs-affiliate/</link>
      <pubDate>Fri, 25 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-25-channel-vs-affiliate/</guid>
      <description>&lt;p&gt;Previously I wrote about how business is fundamentally simple: make something, sell it for more than it costs. Today, let&amp;rsquo;s use that concept in action to better understand it. We will use it to clear up something that often gets muddled: the difference between channel sales and affiliate marketing.&lt;/p&gt;&#xA;&lt;p&gt;Both of these models help other companies sell their products, but they&amp;rsquo;re fundamentally different businesses because &lt;em&gt;what they&amp;rsquo;re actually selling&lt;/em&gt; is different. Understanding this difference is crucial for choosing the right model and avoiding costly mistakes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>McCabe Complexity: The Python Metric You Should Care About</title>
      <link>https://mcginniscommawill.com/posts/2025-04-24-understanding-mccabe-complexity/</link>
      <pubDate>Thu, 24 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-24-understanding-mccabe-complexity/</guid>
      <description>&lt;p&gt;Ever looked at a function and thought &amp;ldquo;this is too complex&amp;rdquo; but couldn&amp;rsquo;t quite explain why? Let me introduce you to McCabe complexity - a metric that puts a number on that gut feeling.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simple Dijon Vinaigrette: The Only Dressing You Need</title>
      <link>https://mcginniscommawill.com/posts/2025-04-23-simple-dijon-vinaigrette/</link>
      <pubDate>Wed, 23 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-23-simple-dijon-vinaigrette/</guid>
      <description>&lt;p&gt;A good vinaigrette is the foundation of countless meals, and this simple Dijon version has the perfect balance of acidity, richness, and flavor. Made directly in a jar with a tight-fitting lid, this dressing requires no special equipment, minimal cleanup, and comes together in under two minutes. The basic formula can be endlessly customized with different oils, vinegars, and add-ins to suit whatever you&amp;rsquo;re serving.&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Simple Dijon Vinaigrette&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; ~½ cup&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 2 min&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1 tablespoon Dijon mustard&lt;/li&gt;&#xA;&lt;li&gt;3 tablespoons vinegar (red wine, white wine, or champagne vinegar work best)&lt;/li&gt;&#xA;&lt;li&gt;½ teaspoon kosher salt&lt;/li&gt;&#xA;&lt;li&gt;¼ teaspoon freshly ground black pepper&lt;/li&gt;&#xA;&lt;li&gt;1 small shallot, minced (about 2 tablespoons) - optional&lt;/li&gt;&#xA;&lt;li&gt;1 clove garlic, finely minced or grated - optional&lt;/li&gt;&#xA;&lt;li&gt;½ teaspoon honey or maple syrup - optional&lt;/li&gt;&#xA;&lt;li&gt;6 tablespoons (¼ cup + 2 tablespoons) extra virgin olive oil&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;equipment&#34;&gt;Equipment&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;8oz mason jar with tight-fitting lid (or any jar with a secure lid)&lt;/li&gt;&#xA;&lt;li&gt;Measuring spoons&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;method&#34;&gt;Method&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Layer ingredients&lt;/strong&gt;: Add all ingredients to the jar in the order listed. The mustard should go in first, as it helps emulsify the dressing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Virtual Family Office: Bringing Wealth Management Down to Earth</title>
      <link>https://mcginniscommawill.com/posts/2025-04-22-virtual-family-office-concept/</link>
      <pubDate>Tue, 22 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-22-virtual-family-office-concept/</guid>
      <description>&lt;p&gt;In our previous post, we explored what traditional family offices are and the valuable functions they serve for ultra-wealthy families. But what if you don&amp;rsquo;t have $100 million? Can you still benefit from the family office approach?&lt;/p&gt;&#xA;&lt;p&gt;Enter the virtual family office (VFO): a scaled-down, flexible version of the traditional family office that brings sophisticated wealth management principles within reach for families with more modest means.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-a-virtual-family-office&#34;&gt;What Is a Virtual Family Office?&lt;/h2&gt;&#xA;&lt;p&gt;A virtual family office adapts the comprehensive, coordinated approach of traditional family offices without the overhead of a dedicated staff and physical office space. Instead of hiring full-time employees, a VFO typically:&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Only Business Mental Model You Need: Make Something, Sell It</title>
      <link>https://mcginniscommawill.com/posts/2025-04-21-business-mental-models/</link>
      <pubDate>Mon, 21 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-21-business-mental-models/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve spent years building data science teams and products, and one thing keeps surprising me: we all tend to overcomplicate business. We get caught up in frameworks, KPIs, OKRs, and the latest management philosophies. But strip away all the complexity, and business is remarkably simple: make something people want, then sell it for more than it costs to make.&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s it. That&amp;rsquo;s the tweet.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m fully aware that I in fact write here quite a bit about just that: frameworks, management philosophies, and things like that. So before you get too far it: those things still help! But this post is about remembering the actual goal so that you use those tools to that end, not as theatre.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Logging Best Practices for Library Developers</title>
      <link>https://mcginniscommawill.com/posts/2025-04-20-python-logging-best-practices/</link>
      <pubDate>Sun, 20 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-20-python-logging-best-practices/</guid>
      <description>&lt;p&gt;As someone who&amp;rsquo;s developed a few Python libraries (&lt;a href=&#34;https://github.com/scikit-learn-contrib/category_encoders&#34;&gt;category-encoders&lt;/a&gt;, &lt;a href=&#34;https://github.com/wdm0006/elote&#34;&gt;elote&lt;/a&gt;, etc.), I&amp;rsquo;ve learned that good logging can make the difference between a library that&amp;rsquo;s a joy to use and one that makes you want to pull your hair out. Let&amp;rsquo;s dive into what I&amp;rsquo;ve learned about logging best practices for Python library developers.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-golden-rules-of-library-logging&#34;&gt;The Golden Rules of Library Logging&lt;/h2&gt;&#xA;&lt;p&gt;Before we get into the nitty-gritty details, let&amp;rsquo;s establish some fundamental principles:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Spargelzeit: German White Asparagus Pasta</title>
      <link>https://mcginniscommawill.com/posts/2025-04-19-german-white-asparagus-pasta/</link>
      <pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-19-german-white-asparagus-pasta/</guid>
      <description>&lt;p&gt;In Germany, springtime is marked by &amp;ldquo;Spargelzeit&amp;rdquo; (asparagus time), a cultural phenomenon centered around white asparagus. This pale cousin of green asparagus appears on every restaurant menu between April and June, celebrated for its delicate, complex flavor. This pasta dish is inspired by a traditional German preparation that showcases white asparagus in a light cream sauce, allowing its subtle flavor to shine.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/recipes/asparagus.png&#34; alt=&#34;recipe guide&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;This dish celebrates the subtle flavor of white asparagus without overwhelming it. When you have an ingredient this seasonal and special, the key is not to mask it but to complement it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Traits of High-Performers: What to Look for in Interviews</title>
      <link>https://mcginniscommawill.com/posts/2025-04-18-hiring-high-agency-people/</link>
      <pubDate>Fri, 18 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-18-hiring-high-agency-people/</guid>
      <description>&lt;p&gt;When it comes to job interviews, there&amp;rsquo;s more to consider than just technical skills and job requirements. Over the years, I&amp;rsquo;ve noticed a few traits that consistently set high-performers apart. These are worth assessing in interviews, and they can make a significant difference in team dynamics and project outcomes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What Is a Family Office and Why Should You Care?</title>
      <link>https://mcginniscommawill.com/posts/2025-04-17-what-is-a-family-office/</link>
      <pubDate>Thu, 17 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-17-what-is-a-family-office/</guid>
      <description>&lt;p&gt;When I mention &amp;ldquo;family office&amp;rdquo; in conversation, I usually get one of two responses: a blank stare or &amp;ldquo;isn&amp;rsquo;t that just for billionaires?&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s true that traditional family offices serve the ultra-wealthy, but the principles behind them can benefit families at almost any wealth level. In this new series my goal is to demystify what family offices actually do and why you might want to pay attention.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Finding Your World-Class Niche</title>
      <link>https://mcginniscommawill.com/posts/2025-04-16-finding-your-world-class-niche/</link>
      <pubDate>Wed, 16 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-16-finding-your-world-class-niche/</guid>
      <description>&lt;p&gt;Being &amp;ldquo;the best in the world&amp;rdquo; means finding the precise intersection where your unique capabilities, passion, and opportunity converge to create unmatched value-not competing in the largest possible arena.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing &#39;stargazers&#39;: A Tool to Understand Your GitHub Audience</title>
      <link>https://mcginniscommawill.com/posts/2025-04-16-introducing-stargazers-tool/</link>
      <pubDate>Wed, 16 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-16-introducing-stargazers-tool/</guid>
      <description>&lt;p&gt;Building and maintaining an open-source project involves more than just writing code. Understanding &lt;em&gt;who&lt;/em&gt; is interested in your work (your stargazers and forkers) can provide invaluable insights into your community&amp;rsquo;s growth, reach, and potential. Where are they located? What other projects do they star? Answering these questions helps tailor communication, prioritize features, and build stronger connections.&lt;/p&gt;&#xA;&lt;p&gt;Years ago, the team at Cockroach Labs shared a fascinating analysis in their post, &amp;ldquo;&lt;a href=&#34;https://www.cockroachlabs.com/blog/what-can-we-learn-from-our-github-stars/&#34;&gt;What Can We Learn from Our GitHub Stars?&lt;/a&gt;&amp;rdquo;. They correlated star growth with events like press mentions and conference talks, demonstrating the power of understanding your audience dynamics. While incredibly insightful, replicating their analysis required significant effort, dealing directly with the GitHub API, managing rate limits, and processing large amounts of data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>HashingEncoder: Tackling Extreme Cardinality with the Hashing Trick</title>
      <link>https://mcginniscommawill.com/posts/2025-04-15-hashing-encoder/</link>
      <pubDate>Tue, 15 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-15-hashing-encoder/</guid>
      <description>&lt;p&gt;In our journey through categorical encoding techniques, we&amp;rsquo;ve explored &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-03-27-onehot-encoder&#34;&gt;OneHotEncoder&lt;/a&gt;, &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-04-10-ordinal-encoder&#34;&gt;OrdinalEncoder&lt;/a&gt;, and &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-04-13-binary-encoder&#34;&gt;BinaryEncoder&lt;/a&gt;. Today, we&amp;rsquo;ll tackle an approach designed for extreme cardinality: the HashingEncoder from &lt;a href=&#34;https://github.com/scikit-learn-contrib/category_encoders&#34;&gt;category_encoders&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When you&amp;rsquo;re dealing with millions of unique categories or streaming data where new categories appear constantly, traditional encoding methods break down. That&amp;rsquo;s where the hashing trick comes in.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Secret to Change Management: Transform While You Perform</title>
      <link>https://mcginniscommawill.com/posts/2025-04-14-leading-through-change/</link>
      <pubDate>Mon, 14 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-14-leading-through-change/</guid>
      <description>&lt;p&gt;The most difficult challenge for leaders implementing organizational change: maintaining operational effectiveness while designing and executing the transformation. Military organizations have mastered this critical balance, providing valuable lessons for civilian leaders facing similar challenges.&lt;/p&gt;</description>
    </item>
    <item>
      <title>BinaryEncoder: The Space-Efficient Alternative to One-Hot Encoding</title>
      <link>https://mcginniscommawill.com/posts/2025-04-13-binary-encoder/</link>
      <pubDate>Sun, 13 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-13-binary-encoder/</guid>
      <description>&lt;p&gt;In our previous posts, we explored &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-03-27-onehot-encoder&#34;&gt;OneHotEncoder&lt;/a&gt; and &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-04-10-ordinal-encoder&#34;&gt;OrdinalEncoder&lt;/a&gt;, two fundamental approaches to handling categorical data. Today, we&amp;rsquo;ll dive into a clever (or hacky) middle ground: the BinaryEncoder from &lt;a href=&#34;https://github.com/scikit-learn-contrib/category_encoders&#34;&gt;category_encoders&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Binary encoding attempts to offer a compromise between the dimensionality explosion of one-hot encoding and the potentially problematic ordinality of ordinal encoding. It was one of the experiments from my original blog series on the subject, and while it does acheive the goal of lower resulting dimension than one-hot encoding, it&amp;rsquo;s not really based on any particular mathematical theory and is more akin to the hashing trick: convinient in some specific cases. Let&amp;rsquo;s explore how it works and when to use it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Elevating Celery: A Velvety Celery Soup Recipe</title>
      <link>https://mcginniscommawill.com/posts/2025-04-12-celery-soup/</link>
      <pubDate>Sat, 12 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-12-celery-soup/</guid>
      <description>&lt;p&gt;Celery is often relegated to a supporting role in cooking: the background component in soups and stocks or a vehicle for dips. This soup turns that dynamic on its head, showcasing celery as the primary flavor in a velvety, satisfying dish that might just change how you think about this underappreciated vegetable.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/recipes/celery_soup.png&#34; alt=&#34;recipe guide&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;What makes this soup special isn&amp;rsquo;t some complex technique or rare ingredient. It&amp;rsquo;s the counterintuitive approach of treating celery as worthy of being showcased rather than hidden.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Technology Readiness Levels</title>
      <link>https://mcginniscommawill.com/guides/technology-readiness-levels-guide/</link>
      <pubDate>Fri, 11 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/technology-readiness-levels-guide/</guid>
      <description>&lt;h2 id=&#34;nasas-framework-for-knowing-how-ready-your-technology-actually-is&#34;&gt;NASA&amp;rsquo;s Framework for Knowing How Ready Your Technology Actually Is&lt;/h2&gt;&#xA;&lt;p&gt;NASA developed Technology Readiness Levels in the 1970s to answer a deceptively simple question: how close is this technology to being ready for a real mission? The framework gives you a 1-to-9 scale that tracks progress from &amp;ldquo;we think this might work in theory&amp;rdquo; all the way to &amp;ldquo;it&amp;rsquo;s been proven in operation.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;I got interested in TRLs because I kept seeing the same problem in startups: teams would confuse a working prototype with a production-ready system, or investors would treat a research breakthrough as if it were ready to ship. TRLs give you a shared vocabulary for talking about technology maturity without the hand-waving.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TRL vs Other Maturity Models: A Comparative Analysis</title>
      <link>https://mcginniscommawill.com/posts/2025-04-11-trl-vs-other-models/</link>
      <pubDate>Fri, 11 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-11-trl-vs-other-models/</guid>
      <description>&lt;p&gt;&amp;ldquo;So which framework should we use?&amp;rdquo; a colleague might ask when confronted with the many options for assessing technology maturity. If you&amp;rsquo;ve ever tried to navigate frameworks like TRLs, CMM, MVP, and Lean Startup, the abundance of acronyms and methodologies can be overwhelming.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s explore these four common approaches to determine when each might be most valuable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OrdinalEncoder: When Order Matters in Categorical Data</title>
      <link>https://mcginniscommawill.com/posts/2025-04-10-ordinal-encoder/</link>
      <pubDate>Thu, 10 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-10-ordinal-encoder/</guid>
      <description>&lt;p&gt;In our &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-03-27-onehot-encoder&#34;&gt;previous post&lt;/a&gt;, we explored one-hot encoding, which creates binary columns for each category. But what if your categorical variable has a natural order, or you need a more compact representation? That&amp;rsquo;s where ordinal encoding comes in.&lt;/p&gt;&#xA;&lt;p&gt;Today, we&amp;rsquo;ll dive into the OrdinalEncoder from the &lt;a href=&#34;https://github.com/scikit-learn-contrib/category_encoders&#34;&gt;category_encoders&lt;/a&gt; library - a simple yet powerful tool for handling categorical data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building with EOS</title>
      <link>https://mcginniscommawill.com/guides/eos-guide/</link>
      <pubDate>Wed, 09 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/eos-guide/</guid>
      <description>&lt;h2 id=&#34;the-entrepreneurial-operating-system-for-tech-companies&#34;&gt;The Entrepreneurial Operating System for Tech Companies&lt;/h2&gt;&#xA;&lt;p&gt;EOS, the Entrepreneurial Operating System, is one of those frameworks that sounds like corporate buzzword soup until you actually try it. I was skeptical at first. Another operating system for businesses? But after implementing it and seeing what it did for team alignment and execution, I became a convert.&lt;/p&gt;&#xA;&lt;p&gt;The catch is that EOS was designed for general small-to-mid-size businesses, not specifically for technology companies. A lot of the standard guidance doesn&amp;rsquo;t account for the realities of software development, product iteration, or the kind of rapid change that tech teams deal with daily. This series covers how to make EOS work in that context.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Measuring Success: EOS Metrics for Technology Organizations</title>
      <link>https://mcginniscommawill.com/posts/2025-04-09-eos-measuring-success/</link>
      <pubDate>Wed, 09 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-09-eos-measuring-success/</guid>
      <description>&lt;p&gt;&lt;em&gt;This is Part 5 of our Building with EOS series. Check out &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-02-08-eos-introduction&#34;&gt;Part 1&lt;/a&gt; for the fundamentals of EOS, &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-02-24-eos-core-components&#34;&gt;Part 2&lt;/a&gt; for core components, &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-03-19-eos-technology-implementation&#34;&gt;Part 3&lt;/a&gt; for tech implementation, and &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-04-02-eos-product-development&#34;&gt;Part 4&lt;/a&gt; for enhancing product development.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;What gets measured gets managed,&amp;rdquo; they say. But in tech companies, figuring out exactly what to measure can feel like trying to count clouds. Should you track lines of code? User satisfaction? System uptime? Let&amp;rsquo;s cut through the confusion and focus on what actually drives results.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Makefiles: The Unsung Hero of Python Development</title>
      <link>https://mcginniscommawill.com/posts/2025-04-08-makefiles-for-python/</link>
      <pubDate>Tue, 08 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-08-makefiles-for-python/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been building Python libraries for years, and there&amp;rsquo;s one tool that consistently makes my life easier: the humble Makefile. Yes, that decades-old build automation tool from the C world. It might seem old school, but it&amp;rsquo;s become an essential part of my Python development workflow, and today I want to show you why.&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-a-makefile-anyway&#34;&gt;What&amp;rsquo;s a Makefile Anyway?&lt;/h2&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re coming from a pure Python background, you might be wondering what Make is and why we&amp;rsquo;re talking about it. Make is a build automation tool that&amp;rsquo;s been around since 1976. Think of it as a simple way to define shortcuts for common commands in your project. Instead of remembering and typing out long commands, you can define them once in a Makefile and run them with a simple &lt;code&gt;make command&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Atlanta Creek Restoration: Reviving Waterways for Wildlife &amp; Community</title>
      <link>https://mcginniscommawill.com/posts/2025-04-07-atlanta-creek-restoration/</link>
      <pubDate>Mon, 07 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-07-atlanta-creek-restoration/</guid>
      <description>&lt;p&gt;As a cyclist who has traversed Atlanta&amp;rsquo;s urban landscape for years, I&amp;rsquo;ve had a front-row seat to the remarkable transformation of our city&amp;rsquo;s creeks. Pedaling along the evolving trails that trace Peachtree Creek, Nancy Creek, Tanyard Creek, and Proctor Creek has given me a unique perspective on these waterways. What once felt like forgotten backwaters, concrete channels I&amp;rsquo;d grudgingly ride past to get somewhere else, have gradually morphed into centerpieces of my favorite routes. Each season brings new changes: fresh trail segments, emerging vegetation, returning wildlife, and increasing numbers of fellow Atlantans rediscovering these urban oases.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Modern Python Package Publishing: PyGeoHash&#39;s New CI/CD Pipeline</title>
      <link>https://mcginniscommawill.com/posts/2025-04-06-pygeohash-publishing/</link>
      <pubDate>Sun, 06 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-06-pygeohash-publishing/</guid>
      <description>&lt;p&gt;Gone are the days of manually building wheels and uploading them to PyPI - we now have a fully automated pipeline using GitHub Actions and PyPI&amp;rsquo;s Trusted Publisher system. Let me walk you through how we set this up, because it&amp;rsquo;s pretty cool.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-old-way-vs-the-new-way&#34;&gt;The Old Way vs The New Way&lt;/h2&gt;&#xA;&lt;p&gt;Back in the day (like, last month), releasing PyGeoHash went something like this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Build the source distribution locally&lt;/li&gt;&#xA;&lt;li&gt;Build wheels for each platform (hopefully)&lt;/li&gt;&#xA;&lt;li&gt;Find that PyPI token I stored somewhere &amp;ldquo;safe&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Cross fingers and upload&lt;/li&gt;&#xA;&lt;li&gt;Realize I forgot to build wheels for ARM&lt;/li&gt;&#xA;&lt;li&gt;Do it all again&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Now? I just tag a release, and GitHub Actions does everything else. Let&amp;rsquo;s dive into how this works.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crafting Fermented Hot Sauce: A Tangy, Flavorful Adventure</title>
      <link>https://mcginniscommawill.com/posts/2025-04-05-fermented-hot-sauce/</link>
      <pubDate>Sat, 05 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-05-fermented-hot-sauce/</guid>
      <description>&lt;p&gt;Fermented hot sauce has a depth and complexity that far surpasses the vinegar-based varieties on supermarket shelves. Through lacto-fermentation (the same process that creates sauerkraut and kimchi), simple peppers transform into a tangy, funky, and deeply flavorful condiment. The best part? It&amp;rsquo;s surprisingly easy to make at home with minimal ingredients and equipment.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/recipes/hotsauce.png&#34; alt=&#34;recipe guide&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a basic template that can be customized with different peppers and aromatics.&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Lacto-Fermented Hot Sauce&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 20 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 1-4 weeks fermentation&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1 pound fresh chili peppers (any variety: jalapeños, habaneros, fresnos, or a mix)&lt;/li&gt;&#xA;&lt;li&gt;1-2 cloves garlic (optional)&lt;/li&gt;&#xA;&lt;li&gt;1-2 tablespoons salt (non-iodized)&lt;/li&gt;&#xA;&lt;li&gt;Filtered water&lt;/li&gt;&#xA;&lt;li&gt;Optional additions: 1 carrot, 1 small onion, fruit pieces like mango or pineapple&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;equipment&#34;&gt;Equipment&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1-quart mason jar with lid&lt;/li&gt;&#xA;&lt;li&gt;Fermentation weight or small zip-top bag filled with water&lt;/li&gt;&#xA;&lt;li&gt;Airlock lid or regular lid (if using regular, you&amp;rsquo;ll need to &amp;ldquo;burp&amp;rdquo; it daily)&lt;/li&gt;&#xA;&lt;li&gt;Gloves for handling hot peppers&lt;/li&gt;&#xA;&lt;li&gt;Blender&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;method&#34;&gt;Method&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Prepare the peppers&lt;/strong&gt;: Wearing gloves, remove stems from peppers. For a milder sauce, remove seeds and pith; for hotter sauce, leave them in. Roughly chop peppers and garlic if using.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Military-Style Decision Making: A Secret for Business Choices</title>
      <link>https://mcginniscommawill.com/posts/2025-04-04-strategic-decision-making/</link>
      <pubDate>Fri, 04 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-04-strategic-decision-making/</guid>
      <description>&lt;p&gt;Let&amp;rsquo;s face it - making big decisions is hard. Leaders either get paralyzed by analysis or rush into poorly-conceived actions. The problem? Most of us never learned a systematic approach to decision-making.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PyGeoHash Gets Type Hints: A Journey into Modern Python</title>
      <link>https://mcginniscommawill.com/posts/2025-04-03-pygeohash-type-hints/</link>
      <pubDate>Thu, 03 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-03-pygeohash-type-hints/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been on a bit of a maintenance kick lately with PyGeoHash, and the latest update brings something I&amp;rsquo;m particularly excited about: comprehensive type hints and a new &lt;code&gt;types&lt;/code&gt; module. If you&amp;rsquo;ve been following along, you know I&amp;rsquo;ve been working on modernizing PyGeoHash, and this is another big step in that direction.&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-new&#34;&gt;What&amp;rsquo;s New?&lt;/h2&gt;&#xA;&lt;p&gt;The latest PR adds two major features to PyGeoHash:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Type Hints Throughout&lt;/strong&gt;: Every function and class now has proper type annotations, making it crystal clear what goes in and what comes out.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;A New Types Module&lt;/strong&gt;: A dedicated module for type-related functionality, including pandas integration and validation helpers.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;But why should you care? Well, if you&amp;rsquo;re like me and spend way too much time trying to figure out what type of object you&amp;rsquo;re supposed to pass to a function, this update is for you.&lt;/p&gt;</description>
    </item>
    <item>
      <title>EOS in Action: Enhancing Product Development and Technical Operations</title>
      <link>https://mcginniscommawill.com/posts/2025-04-02-eos-product-development/</link>
      <pubDate>Wed, 02 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-02-eos-product-development/</guid>
      <description>&lt;p&gt;&lt;em&gt;This is Part 4 of our Building with EOS series. Check out &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-02-08-eos-introduction&#34;&gt;Part 1&lt;/a&gt; for the fundamentals of EOS, &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-02-24-eos-core-components&#34;&gt;Part 2&lt;/a&gt; for a deep dive into core components, and &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-03-19-eos-technology-implementation&#34;&gt;Part 3&lt;/a&gt; for implementing EOS in tech organizations.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ever feel like your product development process is like trying to build a plane while flying it? You&amp;rsquo;re juggling feature requests, technical debt, and operational challenges - all while trying to innovate and scale. That&amp;rsquo;s where EOS comes in, bringing method to the madness without killing the magic. ✈️&lt;/p&gt;</description>
    </item>
    <item>
      <title>Optimal Bankroll Management with Keeks: The Kelly Criterion</title>
      <link>https://mcginniscommawill.com/posts/2025-04-01-kelly-criterion/</link>
      <pubDate>Tue, 01 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-04-01-kelly-criterion/</guid>
      <description>&lt;p&gt;In this first post of our series on bankroll management strategies in Keeks, we&amp;rsquo;ll dive into the Kelly Criterion - the mathematical foundation of optimal betting and the inspiration behind the library&amp;rsquo;s name.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ode to Crestlawn Cemetery: A Tranquil Sanctuary in Atlanta</title>
      <link>https://mcginniscommawill.com/posts/2025-03-31-crestlawn-cemetery-ode/</link>
      <pubDate>Mon, 31 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-31-crestlawn-cemetery-ode/</guid>
      <description>&lt;p&gt;Nestled along Marietta Boulevard in Atlanta, &lt;strong&gt;Crestlawn Cemetery&lt;/strong&gt; offers a quiet retreat from the city&amp;rsquo;s relentless energy. Sprawling across 145 acres of rolling hills and established trees, this cemetery may be less known than its historic siblings like Oakland or Westview, yet it holds its own unique place in Atlanta&amp;rsquo;s tapestry of memorial grounds. For me, it isn&amp;rsquo;t just a resting place for those who have passed: it&amp;rsquo;s a living archive of history, a sanctuary of reflection, and a daily source of inspiration. Whether I&amp;rsquo;m riding, running, or simply walking through its peaceful lanes, I find myself drawn into its embrace of tranquility and beauty.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Documenting Your Library&#39;s API: Best Practices</title>
      <link>https://mcginniscommawill.com/posts/2025-03-30-documenting-library-api/</link>
      <pubDate>Sun, 30 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-30-documenting-library-api/</guid>
      <description>&lt;p&gt;Every time I start using a new Python library, I find myself immediately looking for two things: code examples and the API reference. While examples show you how to use a library, it&amp;rsquo;s the API reference that becomes your constant companion - the place you return to again and again to check exactly how that one function works or what parameters that one class accepts.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I&amp;rsquo;ll share what I&amp;rsquo;ve learned about creating API documentation that your users will actually want to read (and can find what they need in). We&amp;rsquo;ll be using Sphinx with its powerful &lt;code&gt;autodoc&lt;/code&gt; extension, which turns your docstrings into a beautiful, searchable reference.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crafting the Perfect Pastis Cocktail: A Taste of Provence</title>
      <link>https://mcginniscommawill.com/posts/2025-03-29-pastis-cocktail/</link>
      <pubDate>Sat, 29 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-29-pastis-cocktail/</guid>
      <description>&lt;p&gt;Pastis, the iconic anise-flavored spirit of southern France, is traditionally a commercial product made by distilleries. But you can create a remarkably good homemade version through infusion. While not identical to commercial brands like Ricard or Pernod (which are carefully guarded secret recipes), this homemade version captures the essential character and makes for a rewarding DIY project with delicious results.&lt;/p&gt;&#xA;&lt;p&gt;This recipe creates a simplified pastis through infusion rather than distillation. It won&amp;rsquo;t have the exact same profile as commercial versions, but it delivers the characteristic anise flavor and the signature clouding effect when water is added.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adapting TRLs for Software Development: A Practical Guide</title>
      <link>https://mcginniscommawill.com/posts/2025-03-28-trl-software-development/</link>
      <pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-28-trl-software-development/</guid>
      <description>&lt;p&gt;&amp;ldquo;But software is different!&amp;rdquo; If you&amp;rsquo;ve tried applying hardware-centric TRLs to software projects, you&amp;rsquo;ve likely encountered resistance. Here&amp;rsquo;s the good news: you can adapt TRLs to work brilliantly in the software world with one clear approach.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OneHotEncoder: The Workhorse of Categorical Encoding</title>
      <link>https://mcginniscommawill.com/posts/2025-03-27-onehot-encoder/</link>
      <pubDate>Thu, 27 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-27-onehot-encoder/</guid>
      <description>&lt;p&gt;When I first started working with machine learning models years ago, I quickly ran into a fundamental problem: most algorithms can&amp;rsquo;t directly handle categorical data. They need numbers, not text. And that&amp;rsquo;s how my journey with categorical encoding began, eventually leading to the creation of the &lt;a href=&#34;https://github.com/scikit-learn-contrib/category_encoders&#34;&gt;category_encoders&lt;/a&gt; library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building Leadership Resilience: Lessons from Military Experience</title>
      <link>https://mcginniscommawill.com/posts/2025-03-26-leadership-resilience/</link>
      <pubDate>Wed, 26 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-26-leadership-resilience/</guid>
      <description>&lt;p&gt;When everything&amp;rsquo;s going smoothly, leadership can feel almost effortless. It&amp;rsquo;s when challenges arise (market shifts, team conflicts, unexpected crises) that true leadership resilience becomes essential. Military leadership principles has shown that resilience isn&amp;rsquo;t just about personal grit; it&amp;rsquo;s a learnable skill that transforms how leaders and their teams navigate difficulty.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Elo Rating System: The Grandfather of Competitive Rankings</title>
      <link>https://mcginniscommawill.com/posts/2025-03-25-elo-rating-system/</link>
      <pubDate>Tue, 25 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-25-elo-rating-system/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve always been fascinated by how we quantify the unquantifiable. How do you put a number on something as complex as chess skill? Or the quality of a product? Or even which taco joint in Atlanta deserves your hard-earned dollars?&lt;/p&gt;&#xA;&lt;p&gt;Enter the Elo rating system - the OG of competitive rankings and the first algorithm I implemented in &lt;a href=&#34;https://github.com/wdm0006/elote&#34;&gt;Elote&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI Regulation Around the World</title>
      <link>https://mcginniscommawill.com/guides/ai-regulation-guide/</link>
      <pubDate>Mon, 24 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/ai-regulation-guide/</guid>
      <description>&lt;h2 id=&#34;how-the-world-is-learning-to-regulate-ai&#34;&gt;How the World Is Learning to Regulate AI&lt;/h2&gt;&#xA;&lt;p&gt;AI regulation is one of those topics that sounds dry until you realize it determines what you can and can&amp;rsquo;t build, where you can sell it, and what happens when something goes wrong. I started tracking this space because I kept running into questions about compliance while working on AI projects, and I realized there was no single place that laid out how different countries were approaching the problem.&lt;/p&gt;</description>
    </item>
    <item>
      <title>South Korea&#39;s Comprehensive AI Basic Act: A New Era in AI Regulation</title>
      <link>https://mcginniscommawill.com/posts/2025-03-24-south-korea-ai-regulation-overview/</link>
      <pubDate>Mon, 24 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-24-south-korea-ai-regulation-overview/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This article represents a practitioner&amp;rsquo;s interpretation of the relevant rules and regulations in place at the time of writing. I am not a lawyer, and readers should consult with their own legal counsel and compliance teams before taking any action based on this information.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;South Korea has emerged as a pioneer in AI regulation with the passage of its groundbreaking AI Basic Act in January 2024, establishing one of the world&amp;rsquo;s most comprehensive regulatory frameworks for artificial intelligence. This landmark legislation represents South Korea&amp;rsquo;s commitment to fostering innovation while ensuring robust oversight of AI development and deployment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automating Docs Deployment with GitHub Actions and Pages</title>
      <link>https://mcginniscommawill.com/posts/2025-03-23-automating-docs-deployment/</link>
      <pubDate>Sun, 23 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-23-automating-docs-deployment/</guid>
      <description>&lt;p&gt;Picture this: you&amp;rsquo;ve just fixed a critical bug in your Python library, updated all the docstrings, and added a new tutorial. You&amp;rsquo;re ready to push the changes, but then you remember&amp;hellip; you need to rebuild and deploy the documentation. Again. Manually. For the third time today.&lt;/p&gt;&#xA;&lt;p&gt;If this sounds familiar, you&amp;rsquo;re not alone. I&amp;rsquo;ve been there, and I&amp;rsquo;ve learned that automating documentation deployment isn&amp;rsquo;t just a nice-to-have - it&amp;rsquo;s essential for maintaining your sanity and ensuring your docs stay in sync with your code. In this post, I&amp;rsquo;ll show you how to set up GitHub Actions workflows that automatically build your Sphinx docs and deploy them to GitHub Pages every time you push to master.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crafting Code Examples: From Snippets to Real-World Scenarios</title>
      <link>https://mcginniscommawill.com/posts/2025-03-22-crafting-useful-code-examples/</link>
      <pubDate>Sat, 22 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-22-crafting-useful-code-examples/</guid>
      <description>&lt;p&gt;You know that feeling when you find a new library, and the first thing you do is scroll straight past all the carefully written prose to find the code examples? Yeah, me too. We developers are a predictable bunch - we learn best by example, and we&amp;rsquo;re always in a hurry to see the code in action.&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s why, after years of maintaining Python libraries and watching users interact with documentation, I&amp;rsquo;ve learned that your code examples aren&amp;rsquo;t just supplementary material - they&amp;rsquo;re often the main course. In this post, I&amp;rsquo;ll share what I&amp;rsquo;ve learned about crafting code examples that users actually want to read and can easily use.&lt;/p&gt;</description>
    </item>
    <item>
      <title>US AI Regulation: A State-by-State Analysis</title>
      <link>https://mcginniscommawill.com/posts/2025-03-21-us-ai-regulation-overview/</link>
      <pubDate>Fri, 21 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-21-us-ai-regulation-overview/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This article represents a practitioner&amp;rsquo;s interpretation of the relevant rules and regulations in place at the time of writing. I am not a lawyer, and readers should consult with their own legal counsel and compliance teams before taking any action based on this information.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The United States presents a unique and complex landscape for AI regulation, characterized by a decentralized approach that combines federal guidance with state-level innovation. Unlike the EU&amp;rsquo;s comprehensive AI Act or China&amp;rsquo;s centralized framework, the US has adopted a more nuanced strategy that reflects its traditional preference for sector-specific regulation and market-driven solutions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Implementing llms.txt for Better AI Accessibility</title>
      <link>https://mcginniscommawill.com/posts/2025-03-20-llms-txt-implementation/</link>
      <pubDate>Thu, 20 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-20-llms-txt-implementation/</guid>
      <description>&lt;p&gt;In my ongoing effort to make my website more accessible and useful to AI systems, I&amp;rsquo;ve implemented a new feature: the &lt;code&gt;llms.txt&lt;/code&gt; file. This file serves as a guide for language models (like ChatGPT, Claude, and others) to better understand and navigate the content on my site.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-llmstxt&#34;&gt;Why llms.txt?&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;code&gt;llms.txt&lt;/code&gt; file is a new standard that aims to do for language models what &lt;code&gt;robots.txt&lt;/code&gt; does for search engines. By providing a clear, structured overview of my site&amp;rsquo;s content, I can help AI systems deliver more accurate and relevant information to users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Implementing EOS: Balancing Agility and Structure in Tech</title>
      <link>https://mcginniscommawill.com/posts/2025-03-19-eos-technology-implementation/</link>
      <pubDate>Wed, 19 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-19-eos-technology-implementation/</guid>
      <description>&lt;p&gt;&lt;em&gt;This is Part 3 of our Building with EOS series. Check out &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-02-08-eos-introduction/&#34;&gt;Part 1&lt;/a&gt; for the fundamentals of EOS, and &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-02-24-eos-core-components/&#34;&gt;Part 2&lt;/a&gt; for a deep dive into Vision, Traction, and Healthy Teams.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;But we&amp;rsquo;re different - we&amp;rsquo;re a tech company!&amp;rdquo; I hear this all the time when discussing EOS implementation. And you know what? You&amp;rsquo;re right: tech companies do face unique challenges. But that doesn&amp;rsquo;t mean EOS can&amp;rsquo;t work for you. When properly adapted, it can actually become your secret weapon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Keeks 0.1.0 Release: Optimal Bankroll Management Made Simple</title>
      <link>https://mcginniscommawill.com/posts/2025-03-18-keeks-0_1_0-release/</link>
      <pubDate>Tue, 18 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-18-keeks-0_1_0-release/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m excited to announce the release of &lt;strong&gt;Keeks 0.1.0&lt;/strong&gt;, my Python library for optimal bankroll allocation and betting strategies.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;ve ever wondered how to mathematically optimize your betting or investment strategy, Keeks might be just what you&amp;rsquo;ve been looking for.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Japan&#39;s Human-Centric Approach to AI Regulation</title>
      <link>https://mcginniscommawill.com/posts/2025-03-17-japan-ai-regulation-overview/</link>
      <pubDate>Mon, 17 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-17-japan-ai-regulation-overview/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This article represents a practitioner&amp;rsquo;s interpretation of the relevant rules and regulations in place at the time of writing. I am not a lawyer, and readers should consult with their own legal counsel and compliance teams before taking any action based on this information.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Japan has developed a unique approach to AI regulation that reflects its cultural values and technological aspirations. Unlike the more prescriptive frameworks seen in the EU or China, Japan has chosen to emphasize human-centric principles and international collaboration while maintaining flexibility through soft law mechanisms. This distinctive strategy aligns with Japan&amp;rsquo;s vision of becoming an &amp;ldquo;AI-ready society&amp;rdquo; while ensuring ethical and responsible AI development.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Chile Colorado Recipe</title>
      <link>https://mcginniscommawill.com/posts/2025-03-16-chile-colorado/</link>
      <pubDate>Sun, 16 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-16-chile-colorado/</guid>
      <description>&lt;p&gt;A simple yet flavorful recipe for classic Chile Colorado, a traditional Mexican stew made with tender pork simmered in a rich red chile sauce.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2 lbs boneless pork shoulder, cut into 1-inch cubes&lt;/li&gt;&#xA;&lt;li&gt;2 tbsp cooking oil (like canola or vegetable)&lt;/li&gt;&#xA;&lt;li&gt;1 large onion, chopped&lt;/li&gt;&#xA;&lt;li&gt;4 cloves garlic, minced&lt;/li&gt;&#xA;&lt;li&gt;4 dried Ancho chiles, stemmed and seeded&lt;/li&gt;&#xA;&lt;li&gt;4 dried Guajillo chiles, stemmed and seeded&lt;/li&gt;&#xA;&lt;li&gt;1-2 dried Chiles de Árbol (optional, for heat), stemmed&lt;/li&gt;&#xA;&lt;li&gt;4 cups beef or chicken broth, divided&lt;/li&gt;&#xA;&lt;li&gt;1 tsp ground cumin&lt;/li&gt;&#xA;&lt;li&gt;1 tsp dried oregano (preferably Mexican oregano)&lt;/li&gt;&#xA;&lt;li&gt;1/2 tsp salt, plus more to taste&lt;/li&gt;&#xA;&lt;li&gt;1/4 tsp black pepper&lt;/li&gt;&#xA;&lt;li&gt;Optional garnishes: chopped cilantro, diced onion, warm tortillas&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;instructions&#34;&gt;Instructions&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Prepare the Chiles:&lt;/strong&gt; Toast the dried chiles (Ancho, Guajillo, and Chiles de Árbol if using) in a dry skillet over medium heat for 1-2 minutes per side, until fragrant but not burnt. Be careful not to scorch them, as this will make the sauce bitter.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Soak the Chiles:&lt;/strong&gt; Place the toasted chiles in a bowl and cover with 2 cups of hot broth or water. Let them soak for 20-30 minutes until softened.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Brown the Pork:&lt;/strong&gt; While the chiles soak, heat the oil in a large pot or Dutch oven over medium-high heat. Season the pork cubes with salt and pepper. Brown the pork in batches, ensuring not to overcrowd the pot. Remove the browned pork and set aside.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Sauté Aromatics:&lt;/strong&gt; Add the chopped onion to the pot and cook until softened, about 5 minutes. Add the minced garlic and cook for another minute until fragrant.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Make the Chile Sauce:&lt;/strong&gt; Drain the soaked chiles, reserving the soaking liquid. Place the chiles, sautéed onion and garlic mixture, cumin, and oregano into a blender. Add 1 cup of the reserved soaking liquid (or fresh broth if preferred). Blend until smooth. If the sauce is too thick, add a little more liquid. Strain the sauce through a fine-mesh sieve into the pot, pressing on the solids to extract as much liquid as possible. Discard the solids.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Simmer the Stew:&lt;/strong&gt; Return the browned pork to the pot with the chile sauce. Add the remaining 2 cups of broth (or enough to almost cover the pork). Bring the mixture to a simmer, then reduce the heat to low, cover, and cook for 1.5 to 2.5 hours, or until the pork is very tender. Stir occasionally.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Finish and Serve:&lt;/strong&gt; Taste and adjust seasoning with salt and pepper if needed. If the sauce is too thin, you can simmer it uncovered for a bit longer to thicken. Serve hot, garnished with cilantro and onion if desired, alongside warm tortillas.&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Getting Started with Sphinx for Python Project Documentation</title>
      <link>https://mcginniscommawill.com/posts/2025-03-15-getting-started-sphinx/</link>
      <pubDate>Sat, 15 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-15-getting-started-sphinx/</guid>
      <description>&lt;p&gt;Let me tell you about the day I first discovered Sphinx. I was maintaining a small Python library that had grown&amp;hellip; not so small anymore. My docstrings were getting out of hand, README was turning into a novel, and users were starting to ask questions that were definitely answered somewhere in that mess. Sound familiar?&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s when I found Sphinx, and it changed how I think about documentation. Sphinx is the secret weapon that powers the docs for Python itself, along with most major Python libraries you use daily. It turns your scattered documentation into a professional, searchable website, complete with cross-references, syntax highlighting, and even PDF generation if you&amp;rsquo;re feeling fancy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Art of Leadership Communication: Building Trust and Alignment</title>
      <link>https://mcginniscommawill.com/posts/2025-03-14-leadership-communication/</link>
      <pubDate>Fri, 14 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-14-leadership-communication/</guid>
      <description>&lt;p&gt;Communication stands as a cornerstone of effective leadership, serving as the primary tool for building trust, creating alignment, and driving organizational success. Drawing from military leadership principles and Thayer Leadership insights, we explore how leaders can develop and deploy communication strategies that build strong, cohesive teams.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Elote 1.0.0 Release: Rating Systems Made Simple</title>
      <link>https://mcginniscommawill.com/posts/2025-03-13-elote-1_0_0-release/</link>
      <pubDate>Thu, 13 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-13-elote-1_0_0-release/</guid>
      <description>&lt;p&gt;After what feels like forever (and honestly, it kind of has been), I&amp;rsquo;m thrilled to announce that &lt;strong&gt;Elote 1.0.0&lt;/strong&gt; has been released.&lt;/p&gt;&#xA;&lt;p&gt;For those who haven&amp;rsquo;t been following along, Elote is my little Python library for implementing and comparing rating systems like the Elo system used in chess.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The UK&#39;s Pro-Innovation Approach to AI Regulation</title>
      <link>https://mcginniscommawill.com/posts/2025-03-12-uk-ai-regulation-overview/</link>
      <pubDate>Wed, 12 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-12-uk-ai-regulation-overview/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This article represents a practitioner&amp;rsquo;s interpretation of the relevant rules and regulations in place at the time of writing. I am not a lawyer, and readers should consult with their own legal counsel and compliance teams before taking any action based on this information.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In the wake of Brexit, the United Kingdom has carved out a distinctive approach to AI regulation that sets it apart from both the EU&amp;rsquo;s comprehensive framework and the US&amp;rsquo;s decentralized model. The UK&amp;rsquo;s strategy emphasizes innovation while ensuring responsible development, reflecting its ambition to become a global leader in AI development and governance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PyGeoHash v3.0.0: Faster, Freer, and More Pythonic</title>
      <link>https://mcginniscommawill.com/posts/2025-03-11-pygeohash-v3-release/</link>
      <pubDate>Tue, 11 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-11-pygeohash-v3-release/</guid>
      <description>&lt;p&gt;Remember that Python geohashing library I mentioned a couple days ago? Well, I&amp;rsquo;ve got some exciting news to share: PyGeoHash v3.0.0 has officially landed! This isn&amp;rsquo;t just any incremental update, it&amp;rsquo;s a complete overhaul that addresses some long-standing issues while dramatically improving performance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Do a Small Thing Well: A Sustainable Approach to Productivity</title>
      <link>https://mcginniscommawill.com/posts/2025-03-10-do-a-small-thing-well/</link>
      <pubDate>Mon, 10 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-10-do-a-small-thing-well/</guid>
      <description>&lt;p&gt;I often feel bombarded with an endless stream of tasks, projects, and responsibilities.&lt;/p&gt;&#xA;&lt;p&gt;The sheer volume of work can feel overwhelming, leading many of us down the path to burnout. I&amp;rsquo;ve been there, I&amp;rsquo;ve seen many others unforutnately experience the same. I&amp;rsquo;m not sure there&amp;rsquo;s a universal solution, but I have found a way to manage my work load that has helped me avoid burnout and improve my productivity.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Cursor for Open Source Library Maintenance</title>
      <link>https://mcginniscommawill.com/posts/2025-03-09-cursor-for-library-maintenance/</link>
      <pubDate>Sun, 09 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-09-cursor-for-library-maintenance/</guid>
      <description>&lt;p&gt;The maintenance burden of open source software projects is significant. Even for relatively simple libraries, the accumulation of issues, feature requests, dependency updates, and keeping up with language evolution can quickly become overwhelming. As a result, many promising projects fall into neglect, with maintainers unable to dedicate the time required to keep things running smoothly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simple Napa Cabbage Kimchi (Mak Kimchi)</title>
      <link>https://mcginniscommawill.com/posts/2025-03-08-kimchi/</link>
      <pubDate>Sat, 08 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-08-kimchi/</guid>
      <description>&lt;p&gt;Learn to make flavorful, spicy, and tangy Korean fermented cabbage.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/recipes/kimchi.png&#34; alt=&#34;recipe guide&#34;&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Mak Kimchi&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 30 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 1-5 days fermentation&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1 medium head napa cabbage (about 2 lbs)&lt;/li&gt;&#xA;&lt;li&gt;1/2 cup kosher salt (or coarse sea salt)&lt;/li&gt;&#xA;&lt;li&gt;Water&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h5 id=&#34;kimchi-paste&#34;&gt;Kimchi Paste&lt;/h5&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1/2 cup gochugaru (Korean chili flakes - adjust to desired spice level)&lt;/li&gt;&#xA;&lt;li&gt;1/4 cup fish sauce (or soy sauce/miso paste for vegetarian)&lt;/li&gt;&#xA;&lt;li&gt;1 tbsp salted shrimp (saeujeot) (optional, adds umami)&lt;/li&gt;&#xA;&lt;li&gt;1 tbsp granulated sugar&lt;/li&gt;&#xA;&lt;li&gt;2 tbsp minced garlic (about 5-6 cloves)&lt;/li&gt;&#xA;&lt;li&gt;1 tsp minced ginger&lt;/li&gt;&#xA;&lt;li&gt;1/2 cup water or dashima (kelp) broth&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h5 id=&#34;vegetables&#34;&gt;Vegetables&lt;/h5&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1 cup Korean radish (mu) or daikon radish, cut into matchsticks&lt;/li&gt;&#xA;&lt;li&gt;1/2 cup carrot, cut into matchsticks&lt;/li&gt;&#xA;&lt;li&gt;4-5 scallions, cut into 1-inch pieces&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;instructions&#34;&gt;Instructions&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Prepare Cabbage:&lt;/strong&gt; Cut the napa cabbage lengthwise into quarters, then chop crosswise into 1-2 inch wide pieces. Rinse thoroughly.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Salt Cabbage:&lt;/strong&gt; In a large bowl, toss the cabbage pieces with the kosher salt, ensuring salt gets between the leaves. Add just enough water to barely cover the cabbage. Let it sit for 1.5 - 2 hours, turning the cabbage every 30 minutes to ensure even salting. The cabbage should become pliable and wilted.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Rinse Cabbage:&lt;/strong&gt; Thoroughly rinse the salted cabbage under cold running water 3-4 times to remove excess salt. Drain well in a colander for at least 15-20 minutes, gently squeezing out excess water.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Make Kimchi Paste:&lt;/strong&gt; While the cabbage drains, combine all the Kimchi Paste ingredients (gochugaru, fish sauce, salted shrimp (if using), sugar, garlic, ginger, water/broth) in a medium bowl. Mix well until it forms a smooth paste.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Combine:&lt;/strong&gt; In a large mixing bowl, combine the drained cabbage, radish matchsticks, carrot matchsticks, and chopped scallions.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Mix with Paste:&lt;/strong&gt; Add the kimchi paste to the bowl with the cabbage and vegetables. Wearing gloves (highly recommended to protect hands from chili and salt), thoroughly mix everything together, ensuring the paste evenly coats all the vegetables.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Pack into Jar:&lt;/strong&gt; Pack the kimchi mixture tightly into a clean glass jar (or multiple jars) or an airtight container, pressing down to remove air pockets. Leave about 1-2 inches of headspace at the top.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Ferment:&lt;/strong&gt; Seal the jar loosely (or use an airlock lid). Let the jar sit at room temperature (out of direct sunlight) for 1-5 days. Check daily, pressing down the kimchi to keep it submerged under its brine. You&amp;rsquo;ll see bubbles forming, indicating fermentation. Taste a piece daily starting on day 2. Ferment longer for a more sour taste.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Refrigerate:&lt;/strong&gt; Once the kimchi reaches your desired level of sourness, tighten the lid and store it in the refrigerator. It will continue to ferment slowly in the fridge. It&amp;rsquo;s best after aging for at least a week in the fridge but can be eaten sooner.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Serve:&lt;/strong&gt; Serve as a side dish (banchan) with Korean meals or use it in cooking (kimchi jjigae, kimchi fried rice).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>India&#39;s Emerging AI Regulatory Landscape: A Pro-Innovation Approach</title>
      <link>https://mcginniscommawill.com/posts/2025-03-07-india-ai-regulation-overview/</link>
      <pubDate>Fri, 07 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-07-india-ai-regulation-overview/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This article represents a practitioner&amp;rsquo;s interpretation of the relevant rules and regulations in place at the time of writing. I am not a lawyer, and readers should consult with their own legal counsel and compliance teams before taking any action based on this information.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;India currently has no specific laws or regulations that directly regulate artificial intelligence. But the country has developed several frameworks and guidelines that outline its vision for AI development and deployment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Effective Docstrings: Google vs. NumPy vs. reStructuredText Styles</title>
      <link>https://mcginniscommawill.com/posts/2025-03-06-writing-effective-docstrings/</link>
      <pubDate>Thu, 06 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-06-writing-effective-docstrings/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve reviewed thousands of lines of Python code in my career, and I can tell you this with certainty: the difference between a library I love using and one I dread often comes down to its docstrings. You know what I mean - those triple-quoted strings (&lt;code&gt;&amp;quot;&amp;quot;&amp;quot;like this&amp;quot;&amp;quot;&amp;quot;&lt;/code&gt;) that turn a mysterious function into a well-documented friend.&lt;/p&gt;&#xA;&lt;p&gt;But here&amp;rsquo;s the thing: writing good docstrings is more than just dropping some comments into your code. It&amp;rsquo;s about creating clear, consistent documentation that both humans and tools (like Sphinx&amp;rsquo;s &lt;code&gt;autodoc&lt;/code&gt;) can understand. In this post, I&amp;rsquo;ll share what I&amp;rsquo;ve learned about writing docstrings that actually help people use your code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TRL 6-9: From Prototype to Operational System</title>
      <link>https://mcginniscommawill.com/posts/2025-03-05-trl-deployment-stages/</link>
      <pubDate>Wed, 05 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-05-trl-deployment-stages/</guid>
      <description>&lt;p&gt;The finish line is in sight! Welcome to TRL 6-9, where promising prototypes transform into battle-tested operational systems. This is where the magic happens - when your technology steps out of the lab and into the real world.&lt;/p&gt;&#xA;&lt;p&gt;In this post we will dive into what it looks like to go from successful demonstration to successful deployment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PyGeoHash 2.1.0: Modernizing a Geospatial Python Library</title>
      <link>https://mcginniscommawill.com/posts/2025-03-04-pygeohash-new-release/</link>
      <pubDate>Tue, 04 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-04-pygeohash-new-release/</guid>
      <description>&lt;p&gt;Back in 2015, I created PyGeoHash as a Python 3 compatible fork of the GPL3-licensed geohash library. After nearly a decade of neglect, I&amp;rsquo;m excited to announce the release of PyGeoHash 2.1.0, which brings significant modernization and new features to this lightweight geospatial library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>China&#39;s AI Regulatory Framework: A Comprehensive Analysis</title>
      <link>https://mcginniscommawill.com/posts/2025-03-03-china-ai-regulation-overview/</link>
      <pubDate>Mon, 03 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-03-china-ai-regulation-overview/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This article represents a practitioner&amp;rsquo;s interpretation of the relevant rules and regulations in place at the time of writing. I am not a lawyer, and readers should consult with their own legal counsel and compliance teams before taking any action based on this information.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;China&amp;rsquo;s approach to artificial intelligence regulation represents a distinctive blend of innovation promotion and strict oversight. Unlike the EU&amp;rsquo;s primarily risk-based framework or the US&amp;rsquo;s more sector-specific approach, China has developed a comprehensive regulatory system that emphasizes social stability and national strategic objectives while maintaining a strong focus on technological advancement.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Geohash: When Clever Isn&#39;t Always Smart</title>
      <link>https://mcginniscommawill.com/posts/2025-03-02-geohash-limitations-pitfalls/</link>
      <pubDate>Sun, 02 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-02-geohash-limitations-pitfalls/</guid>
      <description>&lt;h2 id=&#34;geohash-the-good-the-bad-and-the-jagged-edges&#34;&gt;Geohash: The Good, The Bad, and The Jagged Edges&lt;/h2&gt;&#xA;&lt;p&gt;Geohash is one of those beautifully simple ideas that feels &lt;em&gt;just right&lt;/em&gt; when you first encounter it. Take a messy pair of latitude and longitude coordinates, run them through a clever algorithm, and &lt;em&gt;poof&lt;/em&gt; - you get a short, shareable string that represents a rectangular area on the map. Indexing spatial data suddenly seems easier, proximity queries look doable with simple string prefixes, and you feel like a geo-wizard.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Where Did All the RAM Go? Memory Profiling with Memray</title>
      <link>https://mcginniscommawill.com/posts/2025-03-01-testing-profiling-memray/</link>
      <pubDate>Sat, 01 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-03-01-testing-profiling-memray/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve benchmarked our code&amp;rsquo;s speed (&lt;code&gt;pytest-benchmark&lt;/code&gt;) and profiled where it spends CPU time (&lt;code&gt;pyinstrument&lt;/code&gt;). But there&amp;rsquo;s another critical performance dimension: &lt;strong&gt;memory usage&lt;/strong&gt;. A library that consumes excessive amounts of RAM can slow down entire applications, lead to crashes in memory-constrained environments, or indicate subtle bugs like memory leaks.&lt;/p&gt;&#xA;&lt;p&gt;Especially for libraries handling data or running for extended periods, understanding memory allocation patterns is crucial. Just like with CPU time, we need specialized tools to see what&amp;rsquo;s happening under the hood.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TRL 4-5: Laboratory and Relevant Environment Validation</title>
      <link>https://mcginniscommawill.com/posts/2025-02-28-trl-validation-stages/</link>
      <pubDate>Fri, 28 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-28-trl-validation-stages/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ll never forget my first real technology validation project. In the midst of engineering school, I thought I had it all figured out. The math worked perfectly on paper, the simulations looked beautiful, and the prototype was working fine. It was, of course, an algorithmic trading system.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Get a Crosswalk Installed in Atlanta: A Practical Guide</title>
      <link>https://mcginniscommawill.com/posts/2025-02-27-atlanta-crosswalk-guide/</link>
      <pubDate>Thu, 27 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-27-atlanta-crosswalk-guide/</guid>
      <description>&lt;p&gt;Getting a crosswalk installed in Atlanta might seem like a daunting bureaucratic process, but it&amp;rsquo;s actually something that regular citizens can influence. This guide will walk you through the practical steps to advocate for a new crosswalk in your neighborhood.&lt;/p&gt;&#xA;&lt;h2 id=&#34;understanding-the-basics&#34;&gt;Understanding the Basics&lt;/h2&gt;&#xA;&lt;p&gt;Crosswalks in Atlanta are managed by the Department of Transportation (ATLDOT), which evaluates requests based on several key factors. The department considers the volume of both pedestrian and vehicle traffic at the proposed location. They also look at the site&amp;rsquo;s proximity to community facilities like schools and parks, any history of pedestrian incidents in the area, and the distance to existing crosswalks. Understanding these criteria can help you build a stronger case for your request.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Claude 3.7 and new Cursor: first impressions</title>
      <link>https://mcginniscommawill.com/posts/2025-02-26-claude-37-cursor-first-impressions/</link>
      <pubDate>Wed, 26 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-26-claude-37-cursor-first-impressions/</guid>
      <description>&lt;p&gt;Anthropic finally released Claude 3.7, and Cursor has a new version with some interesting features. Let&amp;rsquo;s take a look at what&amp;rsquo;s new and some first impressions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Experiential Learning: Lessons from Battle-Tested Leaders</title>
      <link>https://mcginniscommawill.com/posts/2025-02-26-experiential-learning/</link>
      <pubDate>Wed, 26 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-26-experiential-learning/</guid>
      <description>&lt;p&gt;True leadership capability isn&amp;rsquo;t developed in a classroom: it&amp;rsquo;s forged through experience, challenge, and practical application. You learn by doing, and more often than not, by failing.&lt;/p&gt;&#xA;&lt;p&gt;The military&amp;rsquo;s approach to leadership development, as a result, emphasizes the critical role of experiential learning in building effective leaders.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Finding the Slowdown: Profiling Python Code with Pyinstrument</title>
      <link>https://mcginniscommawill.com/posts/2025-02-25-testing-profiling-pyinstrument/</link>
      <pubDate>Tue, 25 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-25-testing-profiling-pyinstrument/</guid>
      <description>&lt;p&gt;In our last post, we used &lt;code&gt;pytest-benchmark&lt;/code&gt; to measure the overall speed of our library&amp;rsquo;s functions. Benchmarking is great for spotting &lt;em&gt;that&lt;/em&gt; something is slow or &lt;em&gt;if&lt;/em&gt; a change introduced a performance regression. But it doesn&amp;rsquo;t tell you &lt;em&gt;why&lt;/em&gt; it&amp;rsquo;s slow.&lt;/p&gt;&#xA;&lt;p&gt;Is one specific line of code the culprit? Is it spending too much time in a helper function? Is an underlying library call taking longer than expected? To answer these questions, we need to move beyond benchmarking and into the realm of &lt;strong&gt;profiling&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Core Components of EOS: Vision, Traction, and Healthy Teams</title>
      <link>https://mcginniscommawill.com/posts/2025-02-24-eos-core-components/</link>
      <pubDate>Mon, 24 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-24-eos-core-components/</guid>
      <description>&lt;p&gt;&lt;em&gt;This is Part 2 of our Building with EOS series. In Part 1, we introduced the fundamentals of the Entrepreneur Operating System and why it matters for modern organizations.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The success of any organization depends on three fundamental components: a clear vision that provides direction, consistent execution that delivers results, and a cohesive team that can implement effectively. The Entrepreneur Operating System (EOS) framework structures these elements into Vision, Traction, and Healthy Teams.&lt;/p&gt;&#xA;&lt;p&gt;In this post, we will examine how these components function together to support organizational success.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Atlanta Sidewalk Laws: Ownership, Maintenance, and Development</title>
      <link>https://mcginniscommawill.com/posts/2025-02-23-atlanta-sidewalk-law/</link>
      <pubDate>Sun, 23 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-23-atlanta-sidewalk-law/</guid>
      <description>&lt;p&gt;Every morning, as I consider walking my daughter to school, I&amp;rsquo;m reminded of Atlanta&amp;rsquo;s peculiar relationship with its sidewalks. The journey should be simple - we live barely a mile from the school, and most of the route offers a pleasant walk through our neighborhood. But there&amp;rsquo;s a catch: a 50-foot stretch along a busy road where the sidewalk mysteriously vanishes, forcing pedestrians to either brave the narrow shoulder or find another route entirely. This missing link in our neighborhood&amp;rsquo;s pedestrian infrastructure isn&amp;rsquo;t just an inconvenience; it&amp;rsquo;s a daily reminder of the complex web of regulations, responsibilities, and bureaucracy that governs Atlanta&amp;rsquo;s sidewalks.&lt;/p&gt;&#xA;&lt;p&gt;This personal frustration led me down a rabbit hole of research into how Atlanta manages its sidewalk infrastructure, and what I discovered was both fascinating and somewhat perplexing. Walk down any street in Atlanta, and you&amp;rsquo;ll likely encounter a similar patchwork of conditions - from pristine concrete paths to crumbling walkways, and yes, those baffling gaps where sidewalks should be but aren&amp;rsquo;t. This inconsistency stems from Atlanta&amp;rsquo;s unique approach to sidewalk management, which differs significantly from most major American cities.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-peculiar-case-of-atlantas-sidewalk-ownership&#34;&gt;The Peculiar Case of Atlanta&amp;rsquo;s Sidewalk Ownership&lt;/h2&gt;&#xA;&lt;p&gt;Unlike many cities where the municipal government takes full responsibility for sidewalk maintenance, Atlanta follows an unusual model. While the city owns the right-of-way where sidewalks are located, the responsibility for maintaining these walkways falls squarely on the shoulders of adjacent property owners. This arrangement, codified in &lt;a href=&#34;https://library.municode.com/ga/atlanta/codes/code_of_ordinances?nodeId=COORATGEVOII_CH138STSIOTPUPL_ARTIVIMWIRI-W_DIV3SICUCUGUDR&#34;&gt;City Code Section 138-14&lt;/a&gt;, creates a complex dynamic between public infrastructure and private responsibility.&lt;/p&gt;&#xA;&lt;p&gt;This system often surprises new property owners, who may not realize they could be held legally liable for injuries resulting from poorly maintained sidewalks adjacent to their property. The arrangement affects both homeowners and business owners throughout the city, creating what some critics call a &amp;ldquo;tragedy of the commons&amp;rdquo; situation for Atlanta&amp;rsquo;s pedestrian infrastructure.&lt;/p&gt;&#xA;&lt;h2 id=&#34;when-sidewalks-need-repair-a-tale-of-three-paths&#34;&gt;When Sidewalks Need Repair: A Tale of Three Paths&lt;/h2&gt;&#xA;&lt;p&gt;The process of repairing Atlanta&amp;rsquo;s sidewalks can unfold in several ways, each following its own distinct path through the city&amp;rsquo;s bureaucracy. Property owners who notice deterioration can take the initiative to begin repairs themselves, but they must first navigate the permit process through the Department of Public Works and hire a licensed contractor who understands the city&amp;rsquo;s specifications.&lt;/p&gt;&#xA;&lt;p&gt;Sometimes, the city itself identifies problems through inspections or citizen complaints. When this happens, property owners receive a notice giving them 45 days to complete necessary repairs. If they don&amp;rsquo;t comply, the city can step in to make the repairs - but property owners shouldn&amp;rsquo;t celebrate this intervention, as they&amp;rsquo;ll ultimately receive the bill for the work.&lt;/p&gt;&#xA;&lt;p&gt;A third path to repair comes through the Renew Atlanta Infrastructure Bond Program, which has become something of a saving grace for some property owners. This program prioritizes repairs in high-traffic areas and near schools and transit stations, offering a way for some neighborhoods to bypass the traditional property owner responsibility model.&lt;/p&gt;&#xA;&lt;h2 id=&#34;building-new-sidewalks-from-vision-to-reality&#34;&gt;Building New Sidewalks: From Vision to Reality&lt;/h2&gt;&#xA;&lt;p&gt;The story of how new sidewalks come to be in Atlanta is particularly relevant to situations like our missing 50-foot segment on a school route. While new developments must include sidewalks as part of their construction, filling gaps in existing neighborhoods presents a more challenging puzzle. These gaps, which might seem arbitrary to residents, often have historical explanations - perhaps predating sidewalk requirements, or resulting from changing property lines over time. But regardless of their origin, these missing links can transform an otherwise walkable route into an unnecessarily dangerous journey.&lt;/p&gt;&#xA;&lt;p&gt;For residents seeking to add sidewalks to their neighborhoods, particularly near schools where pedestrian safety is paramount, the journey typically begins with ATL311, the city&amp;rsquo;s service request system. But success often requires a strategic approach:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Document the Need: Photograph the missing segment, record pedestrian usage (especially students), and note any safety incidents.&lt;/li&gt;&#xA;&lt;li&gt;Build Community Support: Connect with other parents and neighbors who share the same safety concerns.&lt;/li&gt;&#xA;&lt;li&gt;Engage with the School: Partner with the school administration and PTA to strengthen your advocacy.&lt;/li&gt;&#xA;&lt;li&gt;Navigate the System: Work through your Neighborhood Planning Unit (NPU) and City Council representative, emphasizing the connection to school safety.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The city&amp;rsquo;s Sidewalk Cost Sharing Program can be particularly effective for school routes, as these projects often receive higher priority. While the process can take months or even years, determined communities have successfully navigated it to bring new sidewalks to their streets, especially when children&amp;rsquo;s safety is at stake.&lt;/p&gt;&#xA;&lt;h2 id=&#34;following-the-money-how-sidewalks-get-funded&#34;&gt;Following the Money: How Sidewalks Get Funded&lt;/h2&gt;&#xA;&lt;p&gt;The financial aspect of Atlanta&amp;rsquo;s sidewalk infrastructure involves a complex web of funding sources. The city&amp;rsquo;s infrastructure bond programs, including Renew Atlanta Bonds and TSPLOST funding, provide significant resources for sidewalk improvements. But these funds are finite and must be distributed across the city&amp;rsquo;s many needs.&lt;/p&gt;&#xA;&lt;p&gt;The Cost Sharing Program offers a middle ground, allowing property owners to split the expense with the city. This approach has proven particularly effective in areas where multiple neighbors coordinate their efforts. In historic districts, the process includes additional layers of oversight and permitting, reflecting the city&amp;rsquo;s commitment to preserving its architectural heritage while improving infrastructure.&lt;/p&gt;&#xA;&lt;h2 id=&#34;design-standards-where-engineering-meets-accessibility&#34;&gt;Design Standards: Where Engineering Meets Accessibility&lt;/h2&gt;&#xA;&lt;p&gt;Atlanta&amp;rsquo;s sidewalk design requirements reflect a careful balance between durability, accessibility, and aesthetic considerations. The city&amp;rsquo;s standard specifications cover everything from the concrete mix to the width and slope of the walkway. These requirements aren&amp;rsquo;t arbitrary - they&amp;rsquo;re the result of decades of engineering experience and accessibility advocacy.&lt;/p&gt;&#xA;&lt;p&gt;ADA compliance adds another crucial layer to these specifications. Proper slope calculations, curb ramp designs, and surface textures aren&amp;rsquo;t just technical requirements - they&amp;rsquo;re essential features that make the city navigable for all residents. The attention to these details marks the difference between a sidewalk that serves its community and one that creates barriers.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-path-forward-recent-developments-and-future-plans&#34;&gt;The Path Forward: Recent Developments and Future Plans&lt;/h2&gt;&#xA;&lt;p&gt;Atlanta&amp;rsquo;s approach to sidewalk management is evolving. The city&amp;rsquo;s Transportation Plan represents a significant shift toward a more systematic approach to infrastructure maintenance and development. This plan includes the first comprehensive sidewalk inventory in the city&amp;rsquo;s history, providing crucial data for prioritizing repairs and new construction.&lt;/p&gt;&#xA;&lt;p&gt;The Vision Zero Atlanta initiative has added momentum to sidewalk improvements by connecting them to public safety goals. By focusing on eliminating pedestrian fatalities, the initiative has helped highlight the critical role that well-maintained sidewalks play in public safety.&lt;/p&gt;&#xA;&lt;h2 id=&#34;taking-action-how-to-engage-with-sidewalk-issues&#34;&gt;Taking Action: How to Engage with Sidewalk Issues&lt;/h2&gt;&#xA;&lt;p&gt;Whether you&amp;rsquo;re dealing with a crumbling sidewalk or advocating for new pedestrian infrastructure in your neighborhood, Atlanta provides several channels for engagement. The ATL311 system serves as the primary point of contact, accessible through its website, mobile app, or by phone at (404) 546-0311.&lt;/p&gt;&#xA;&lt;p&gt;Beyond reporting issues, residents can engage with advocacy organizations like PEDS and the Atlanta Bicycle Coalition, which have successfully pushed for policy changes and infrastructure improvements. These groups provide resources and training for effective advocacy, helping residents navigate the complex process of improving Atlanta&amp;rsquo;s pedestrian infrastructure.&lt;/p&gt;&#xA;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;City of Atlanta Code of Ordinances. (2024). &lt;a href=&#34;https://library.municode.com/ga/atlanta/codes/code_of_ordinances?nodeId=PTIIICOORANDECO_PT3STSIPUPL_CH138STSIPUPL&#34;&gt;Chapter 138 - Streets, Sidewalks and Other Public Places&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Atlanta Department of Transportation. (2023). &lt;a href=&#34;https://www.atlantaga.gov/government/departments/transportation/atlanta-transportation-plan&#34;&gt;Atlanta Transportation Plan&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Renew Atlanta. (2024). &lt;a href=&#34;https://renewatlanta.atlantaga.gov/&#34;&gt;Infrastructure Bond Program&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;PEDS. (2023). &lt;a href=&#34;https://www.peds.org/sidewalk-maintenance/&#34;&gt;Sidewalk Maintenance in Atlanta: A Guide for Property Owners&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;City of Atlanta Department of Public Works. (2024). &lt;a href=&#34;https://www.atlantaga.gov/home/showpublisheddocument/53221/637681239420370000&#34;&gt;Standard Details for Construction&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Atlanta City Council. (2023). &lt;a href=&#34;https://citycouncil.atlantaga.gov/standing-committees/transportation-committee&#34;&gt;Transportation Committee Reports&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Atlanta Regional Commission. (2023). &lt;a href=&#34;https://atlantaregional.org/plans-reports/bike-pedestrian-plan-walk-bike-thrive/&#34;&gt;Walk. Bike. Thrive!: Atlanta Regional Bicycle and Pedestrian Plan&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Georgia Department of Transportation. (2024). &lt;a href=&#34;http://www.dot.ga.gov/PartnerSmart/DesignManuals/PedFacilities/GDOT%20Pedestrian%20and%20Streetscape%20Guide.pdf&#34;&gt;Pedestrian and Streetscape Guide&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;American Planning Association - Georgia Chapter. (2023). &lt;a href=&#34;https://georgia.planning.org/policy-and-advocacy/complete-streets/&#34;&gt;Complete Streets Policy Implementation in Atlanta&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;U.S. Department of Justice. (2010). &lt;a href=&#34;https://www.ada.gov/2010ADAstandards_index.htm&#34;&gt;ADA Standards for Accessible Design&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>How Fast Is It? Benchmarking Your Code with Pytest-Benchmark</title>
      <link>https://mcginniscommawill.com/posts/2025-02-22-testing-benchmark/</link>
      <pubDate>Sat, 22 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-22-testing-benchmark/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve covered testing functionality (&lt;code&gt;pytest&lt;/code&gt;), ensuring test coverage (&lt;code&gt;coverage.py&lt;/code&gt;), testing across environments (&lt;code&gt;tox&lt;/code&gt;), and isolating code with mocking. Now, let&amp;rsquo;s talk about speed. While correctness is usually the primary goal, the performance of your library code can be critical, especially if it&amp;rsquo;s intended for use in loops, data processing pipelines, or other potentially hot code paths.&lt;/p&gt;&#xA;&lt;p&gt;But how do you reliably measure how fast a piece of your code runs? Simply timing it once with &lt;code&gt;time.time()&lt;/code&gt; isn&amp;rsquo;t very accurate due to variations in system load, caching, and other factors. You need a more systematic approach - you need &lt;strong&gt;benchmarking&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>EU AI Act: A Practical Guide for Practitioners</title>
      <link>https://mcginniscommawill.com/posts/2025-02-21-eu-ai-act-overview/</link>
      <pubDate>Fri, 21 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-21-eu-ai-act-overview/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This article represents a practitioner&amp;rsquo;s interpretation of the relevant rules and regulations in place at the time of writing. I am not a lawyer, and readers should consult with their own legal counsel and compliance teams before taking any action based on this information.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The European Union&amp;rsquo;s Artificial Intelligence Act represents a watershed moment in technology regulation. As the world&amp;rsquo;s first comprehensive attempt to govern AI based on its potential impact, the Act will fundamentally reshape how technology is developed and deployed globally. Whether this transformation proves to be for better or worse will largely depend on how organizations understand and implement its requirements.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Tale of Two Egg Dishes: Shakshuka and Huevos Rancheros</title>
      <link>https://mcginniscommawill.com/posts/2025-02-20-shakshuka-huevos-rancheros/</link>
      <pubDate>Thu, 20 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-20-shakshuka-huevos-rancheros/</guid>
      <description>&lt;p&gt;Both Shakshuka and Huevos Rancheros are delicious breakfast (or whatever) dishes that feature eggs poached in a flavorful tomato-based sauce. They&amp;rsquo;re both super easy and you can riff on them endlessly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Global AI Regulation in 2025: A Comparative Overview</title>
      <link>https://mcginniscommawill.com/posts/2025-02-19-global-ai-regulation-overview/</link>
      <pubDate>Wed, 19 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-19-global-ai-regulation-overview/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This article represents a practitioner&amp;rsquo;s interpretation of the relevant rules and regulations in place at the time of writing. I am not a lawyer, and readers should consult with their own legal counsel and compliance teams before taking any action based on this information.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As artificial intelligence continues to transform our world, governments and regulatory bodies are racing to establish frameworks that ensure responsible AI development while fostering innovation.&lt;/p&gt;&#xA;&lt;p&gt;This article introduces a new comprehensive series examining AI regulation across major jurisdictions, offering a glimpse into how different regions are approaching this critical challenge.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Silos to Shared Libraries: Guide to Inner Source Adoption</title>
      <link>https://mcginniscommawill.com/posts/2025-02-18-silos-to-shared-libraries/</link>
      <pubDate>Tue, 18 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-18-silos-to-shared-libraries/</guid>
      <description>&lt;p&gt;In our previous posts, we explored inner source principles and building developer communities. Now, let&amp;rsquo;s get practical. How do you actually transition from siloed team-specific code to shared libraries? Let&amp;rsquo;s explore a detailed roadmap for success, based on patterns I&amp;rsquo;ve seen out in the wild.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Foundations of Leadership: The Role of Character</title>
      <link>https://mcginniscommawill.com/posts/2025-02-17-leadership-foundations/</link>
      <pubDate>Mon, 17 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-17-leadership-foundations/</guid>
      <description>&lt;p&gt;Welcome to the inaugural entry of our &lt;strong&gt;Leadership Excellence&lt;/strong&gt; series. In this series, I&amp;rsquo;ll share personal insights and practical lessons on what it means to lead with integrity and purpose. It&amp;rsquo;s intended as a companion to the parallel series on the NASA TRL system and the Entrepreneur Operating System (EOS).&lt;/p&gt;&#xA;&lt;p&gt;While this series is heavily inspired by the teaching of the Thayer Leadership program, which I would highly recommend, I&amp;rsquo;ve scattered other inpriations and personal observations throughout.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mastering Mocking in Python with pytest-mock</title>
      <link>https://mcginniscommawill.com/posts/2025-02-16-testing-mocking/</link>
      <pubDate>Sun, 16 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-16-testing-mocking/</guid>
      <description>&lt;p&gt;Let me tell you about the time I spent two days debugging what I thought was a complex integration issue, only to realize I was actually testing against a production API instead of my mock. Oops. If you&amp;rsquo;ve ever been there (and let&amp;rsquo;s be honest, we all have), you know why mocking is such a crucial skill in the testing world. Let&amp;rsquo;s dive into what mocking is, why it matters, and how to do it right in Python.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building Your Internal Library Developer Community</title>
      <link>https://mcginniscommawill.com/posts/2025-02-15-building-internal-library-community/</link>
      <pubDate>Sat, 15 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-15-building-internal-library-community/</guid>
      <description>&lt;p&gt;In our previous post on inner source, we explored the concept of inner source and its benefits. Now, let&amp;rsquo;s tackle what I consider the most crucial aspect: building and nurturing the community of developers who will make your inner source initiative successful. Drawing from my experience both in open source and corporate environments, I&amp;rsquo;ll share practical strategies for creating a thriving internal library development community.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TRL 1-3: Concept to Proof-of-Concept in Tech Development</title>
      <link>https://mcginniscommawill.com/posts/2025-02-14-trl-deep-dive-early-stages/</link>
      <pubDate>Fri, 14 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-14-trl-deep-dive-early-stages/</guid>
      <description>&lt;p&gt;Every transformative technology begins with a fundamental observation.&lt;/p&gt;&#xA;&lt;p&gt;In my previous posts, I&amp;rsquo;ve explored &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-01-23-nasa-technology-readiness-levels/&#34;&gt;NASA&amp;rsquo;s Technology Readiness Levels&lt;/a&gt; and their practical application in &lt;a href=&#34;https://mcginniscommawill.com/posts/2024-02-17-nasa-trl-software-mapping/&#34;&gt;software development&lt;/a&gt;. Now, as part of a deeper series on TRLs, we&amp;rsquo;ll examine the crucial early stages that transform scientific discoveries into technological possibilities.&lt;/p&gt;&#xA;&lt;p&gt;Before the emergence of smartphones, autonomous vehicles, or breakthrough medical treatments, there was a moment of scientific curiosity that sparked a journey of discovery. This exploration of Technology Readiness Levels (TRLs) 1-3 examines that critical path from initial concept to early validation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Will It Blend? Testing Across Environments with Tox</title>
      <link>https://mcginniscommawill.com/posts/2025-02-13-testing-tox/</link>
      <pubDate>Thu, 13 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-13-testing-tox/</guid>
      <description>&lt;p&gt;As library developers, we have a responsibility that application developers often don&amp;rsquo;t: our code needs to work reliably in environments we don&amp;rsquo;t control. Users might install our library on different operating systems, with various Python versions (3.8, 3.9, 3.10, 3.11, 3.12&amp;hellip;), and alongside different versions of &lt;em&gt;other&lt;/em&gt; libraries.&lt;/p&gt;&#xA;&lt;p&gt;Just running &lt;code&gt;pytest&lt;/code&gt; in your local development environment only verifies it works &lt;em&gt;there&lt;/em&gt;. How can you be confident it won&amp;rsquo;t break for someone using an older Python version you promised to support? Or what if a user has an older version of a dependency installed? This is the problem that &lt;strong&gt;tox&lt;/strong&gt; elegantly solves.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why Does it Smell? Atlanta&#39;s R.M. Clayton Water Treatment Plant</title>
      <link>https://mcginniscommawill.com/posts/2025-02-12-rm-clayton-plant-smell/</link>
      <pubDate>Wed, 12 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-12-rm-clayton-plant-smell/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;ve ever visited Standing Peachtree Park or driven along Atlanta Road near the Chattahoochee River, you&amp;rsquo;ve likely encountered an unmistakable odor. That distinctive smell comes from the R.M. Clayton Water Reclamation Center, Atlanta&amp;rsquo;s largest wastewater treatment facility. While the plant plays a crucial role in the city&amp;rsquo;s infrastructure, recent issues have brought it into the spotlight for both its olfactory impact and environmental concerns.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inner Source: Bringing Open Source Culture Inside Your Organization</title>
      <link>https://mcginniscommawill.com/posts/2025-02-11-inner-source-introduction/</link>
      <pubDate>Tue, 11 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-11-inner-source-introduction/</guid>
      <description>&lt;p&gt;Over the years of maintaining open source libraries and running large data science teams in complex conglomerates, I&amp;rsquo;ve noticed something fascinating: the practices that make open source development successful can be incredibly powerful inside organizations too. This approach, known as inner source, brings the collaborative spirit and efficiency of open source development into corporate environments.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data Science Things Roundup #13</title>
      <link>https://mcginniscommawill.com/posts/2025-02-10-data-science-things-roundup-13/</link>
      <pubDate>Mon, 10 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-10-data-science-things-roundup-13/</guid>
      <description>&lt;p&gt;In this edition of Data Science Things Roundup, I&amp;rsquo;m sharing three interesting developments from the world of data science that caught my attention recently.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Are Your Tests Enough? Measuring Coverage with Coverage.py</title>
      <link>https://mcginniscommawill.com/posts/2025-02-09-testing-coverage/</link>
      <pubDate>Sun, 09 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-09-testing-coverage/</guid>
      <description>&lt;p&gt;In the last post, we talked about why testing is vital for Python libraries and how &lt;code&gt;pytest&lt;/code&gt; makes writing those tests easier. You might now have a growing suite of tests, and they all pass - fantastic! But how do you know if those tests are &lt;em&gt;actually&lt;/em&gt; running through all the important logic in your library?&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s surprisingly easy to write tests that look good but miss critical edge cases or entire code paths. Maybe that obscure &lt;code&gt;if&lt;/code&gt; block handling a rare configuration hasn&amp;rsquo;t been triggered? Maybe the error handling for a specific exception was never tested? This is where &lt;strong&gt;code coverage&lt;/strong&gt; comes in.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exploring EOS: A Guide to the Entrepreneurial Operating System</title>
      <link>https://mcginniscommawill.com/posts/2025-02-08-eos-introduction/</link>
      <pubDate>Sat, 08 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-08-eos-introduction/</guid>
      <description>&lt;p&gt;Early on in the days of Predikto we were running like a real startup: in absolute chaos. Things were getting done, and well, but it was a mix of luck and hard work, we were in fight or flight mode 24/7. Part of the way in, our CEO Mario brought in the Entreprenuer Operating System (EOS) to help us get our act together.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Evolution of Cursor Rules: A More Granular Approach to AI Guidance</title>
      <link>https://mcginniscommawill.com/posts/2025-02-07-cursor-rules-evolution/</link>
      <pubDate>Fri, 07 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-07-cursor-rules-evolution/</guid>
      <description>&lt;p&gt;In our &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-01-12-ai-software-development-evolution/&#34;&gt;previous post&lt;/a&gt; about AI&amp;rsquo;s impact on software development, we discussed how &lt;code&gt;.cursorrules&lt;/code&gt; files were becoming an integral part of modern codebases. Since then, Cursor has evolved its approach to AI guidance, introducing a more powerful and flexible system: Project Rules.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Designing for Developer Joy: Python Library Ergonomics</title>
      <link>https://mcginniscommawill.com/posts/2025-02-06-designing-for-developer-joy/</link>
      <pubDate>Thu, 06 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-06-designing-for-developer-joy/</guid>
      <description>&lt;p&gt;In our &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-02-03-art-of-api-design/&#34;&gt;previous post&lt;/a&gt;, we explored the principles of good API design. Today, let&amp;rsquo;s dive into what makes a library not just functional, but genuinely enjoyable to use. After years of maintaining open source libraries, I&amp;rsquo;ve learned that developer joy often comes from the small details - those little moments where a library feels like it&amp;rsquo;s reading your mind.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Art and History of General Dynamics&#39; Atoms for Peace Campaign</title>
      <link>https://mcginniscommawill.com/posts/2025-02-05-atoms-for-peace-campaign/</link>
      <pubDate>Wed, 05 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-05-atoms-for-peace-campaign/</guid>
      <description>&lt;p&gt;I have no idea how I first stumbled across the striking modernist artwork of General Dynamics&amp;rsquo; Atoms for Peace campaign. But somewhere along the way I did, and I&amp;rsquo;ve been fascinated by it ever since. I grew up in more of an art family than an engineering one, and in particular was a Kandinsky/Bauhaus kid. So not suprisingly, I was drawn to the Atoms for Peace work. But it also struck me as so incredibly weird. Why was a defense contractor doing this? What was the story behind it?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why Your Library Needs Pytest (And How to Get Started)</title>
      <link>https://mcginniscommawill.com/posts/2025-02-04-testing-pytest-intro/</link>
      <pubDate>Tue, 04 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-04-testing-pytest-intro/</guid>
      <description>&lt;p&gt;So, you&amp;rsquo;ve built a Python library. Maybe it solves a niche problem, maybe it&amp;rsquo;s the next big thing. You&amp;rsquo;ve poured hours into crafting the API, writing documentation, and maybe even setting up linting (go you!). But&amp;hellip; have you written tests?&lt;/p&gt;&#xA;&lt;p&gt;I get it. Writing tests can sometimes feel like eating your vegetables - you know it&amp;rsquo;s good for you, but it&amp;rsquo;s not always the most exciting part of the meal. For library developers, though, testing isn&amp;rsquo;t just good practice; it&amp;rsquo;s fundamental to building trust and ensuring your code doesn&amp;rsquo;t unexpectedly break for the people relying on it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Art of API Design: Making the Right Things Easy</title>
      <link>https://mcginniscommawill.com/posts/2025-02-03-art-of-api-design/</link>
      <pubDate>Mon, 03 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-03-art-of-api-design/</guid>
      <description>&lt;p&gt;After years of maintaining libraries like &lt;a href=&#34;https://github.com/scikit-learn-contrib/category_encoders&#34;&gt;category-encoders&lt;/a&gt; and &lt;a href=&#34;https://github.com/wdm0006/pygeohash&#34;&gt;pygeohash&lt;/a&gt;, I&amp;rsquo;ve learned that good API design is more art than science. It&amp;rsquo;s about creating interfaces that feel natural and intuitive, making the right things easy and the wrong things hard. Let&amp;rsquo;s explore how to achieve this delicate balance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Secure Coding Practices for Python Library Developers</title>
      <link>https://mcginniscommawill.com/posts/2025-02-02-secure-coding-practices/</link>
      <pubDate>Sun, 02 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-02-secure-coding-practices/</guid>
      <description>&lt;p&gt;&amp;ldquo;It&amp;rsquo;s just a simple utility function,&amp;rdquo; I thought to myself as I reviewed the code. &amp;ldquo;What could go wrong?&amp;rdquo; Then I saw it: the function was blindly executing shell commands based on user input. One carefully crafted argument later, and someone could have turned our helpful library into their personal backdoor.&lt;/p&gt;&#xA;&lt;p&gt;When you&amp;rsquo;re building a Python library, you&amp;rsquo;re not just writing code; you&amp;rsquo;re creating something that other developers will trust and incorporate into their systems. That trust comes with responsibility. In this post, I&amp;rsquo;ll share the security practices I&amp;rsquo;ve learned that help me sleep better at night knowing I&amp;rsquo;m not accidentally creating vulnerabilities for my users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How Skis Are Made: From Wood to Carbon Fiber</title>
      <link>https://mcginniscommawill.com/posts/2025-02-01-how-skis-are-made/</link>
      <pubDate>Sat, 01 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-02-01-how-skis-are-made/</guid>
      <description>&lt;p&gt;As a mechanical engineer who spent years working in bike shops and obsessing over every component of my bicycles, it felt strange to realize I&amp;rsquo;d spent the last five years skiing without really understanding what was under my feet. My wife introduced me to skiing, and being the impatient learner I am, I jumped straight into the deep end of the sport. While she was already carving up the slopes with grace, I was focused on just staying upright and keeping up.&lt;/p&gt;&#xA;&lt;p&gt;It more or less worked, and soon enough I was able to keep up.&lt;/p&gt;&#xA;&lt;p&gt;This year, as I was getting our skis ready for our first trip of the season, I found myself staring at the numbers printed on the sidewall of my skis. Despite two mechanical engineering degrees and a lifetime of taking things apart to understand them, I realized I had no idea what these numbers meant or how these pieces of equipment were actually made. For someone who can talk for hours about bicycle frame geometry and component materials, this knowledge gap felt like a challenge I needed to address.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s be honest - modern skis are pretty incredible pieces of tech. They&amp;rsquo;ve come a long way from the wooden planks people used to strap to their feet. I spent weeks diving into the history and science of ski manufacturing, and what I found was fascinating. Here&amp;rsquo;s what I learned about how we went from basic wooden boards to the high-tech gear we use today.&lt;/p&gt;&#xA;&lt;h2 id=&#34;historical-evolution&#34;&gt;Historical Evolution&lt;/h2&gt;&#xA;&lt;p&gt;The first skis were basically just pieces of wood - we&amp;rsquo;re talking simple planks carved from pine or birch. Archaeologists found one in Sweden that&amp;rsquo;s about 6,500 years old (the Hoting ski). Back then, people weren&amp;rsquo;t hitting the slopes for fun - these were just tools to get around in winter. And let me tell you, they must have been pretty rough to use.&lt;/p&gt;&#xA;&lt;p&gt;Things started getting interesting in the 1930s when manufacturers figured out they could glue different layers of wood together. Companies like Northland and Splitkein were the first to try this, and it was revolutionary - the skis were lighter and tougher than the old solid wood ones.&lt;/p&gt;&#xA;&lt;h2 id=&#34;key-characteristics-of-modern-skis&#34;&gt;Key Characteristics of Modern Skis&lt;/h2&gt;&#xA;&lt;h3 id=&#34;dimensions-and-shape&#34;&gt;Dimensions and Shape&lt;/h3&gt;&#xA;&lt;p&gt;The fundamental shape of a modern ski is defined by its dimensions at three critical points: the tip (or shovel), waist, and tail. These measurements, particularly the waist width, play a crucial role in determining the ski&amp;rsquo;s intended use and performance characteristics. Narrow-waisted skis, typically ranging from 65-85mm underfoot, excel on groomed terrain where quick edge-to-edge transitions are essential. All-mountain skis feature mid-range waist widths of 85-100mm, offering versatility across various conditions. Powder-oriented skis extend beyond 100mm underfoot, providing the flotation needed for deep snow conditions.&lt;/p&gt;&#xA;&lt;p&gt;The hourglass shape you see when you look down at your skis? That&amp;rsquo;s called the sidecut, and it&amp;rsquo;s probably the most important part of how your skis work. This shape creates the ski&amp;rsquo;s turning radius, with deeper sidecuts producing tighter turns and shallower ones enabling longer, more stable arcs. Racing skis demonstrate the extremes of this spectrum, from slalom skis with tight 12-meter radii to the much straighter profiles of downhill skis with 30-meter-plus turning radii.&lt;/p&gt;&#xA;&lt;h3 id=&#34;profile-and-camber&#34;&gt;Profile and Camber&lt;/h3&gt;&#xA;&lt;p&gt;You know that springy feeling you get when you press down on a ski? That&amp;rsquo;s thanks to something called camber - basically an upward arch built into the middle of the ski. It&amp;rsquo;s been around pretty much forever, and it&amp;rsquo;s what gives you that snappy, energetic feel when you&amp;rsquo;re carving turns on groomed runs.&lt;/p&gt;&#xA;&lt;p&gt;But then someone had a wild idea: what if we did the opposite? Instead of curving up in the middle, they started making skis that curved up at the tips and tails - they called it &amp;ldquo;rocker&amp;rdquo; (think of a rocking chair). At first, people thought it was crazy. But turns out, it made skiing powder way easier and helped beginners stay afloat in deep snow.&lt;/p&gt;&#xA;&lt;p&gt;These days, most skis are actually a mix of both - they&amp;rsquo;ve got the traditional camber under your feet for control, but rocker at the tips and tails to help you float and pivot easier. It&amp;rsquo;s kind of like having your cake and eating it too.&lt;/p&gt;&#xA;&lt;h3 id=&#34;edge-design-and-base-construction&#34;&gt;Edge Design and Base Construction&lt;/h3&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s talk about what actually touches the snow - the edges and base of your ski. The edges are pretty straightforward: they&amp;rsquo;re strips of hardened steel that grip the snow when you&amp;rsquo;re turning. But there&amp;rsquo;s some clever engineering going on here. These steel strips sit at a specific angle (usually between 87 and 89 degrees) to the base. Too sharp and you&amp;rsquo;ll catch edges; too dull and you&amp;rsquo;ll slide all over the place. Race skis usually have thicker edges (up to 2.4mm) because racers are constantly filing them down to keep them sharp.&lt;/p&gt;&#xA;&lt;p&gt;The base is another piece of tech that most people never think about. It&amp;rsquo;s made from this stuff called P-tex, and you can get it in two flavors: sintered or extruded. Sintered bases are the fancy version - they&amp;rsquo;re made by basically squishing polyethylene powder under intense heat and pressure. They hold wax better and go faster, but they&amp;rsquo;ll cost you more. Think of it like the difference between cast iron and non-stick pans - both work, but serious cooks usually prefer cast iron.&lt;/p&gt;&#xA;&lt;h3 id=&#34;flex-patterns&#34;&gt;Flex Patterns&lt;/h3&gt;&#xA;&lt;p&gt;Every ski has its own unique way of bending, both lengthwise and twisting. Think of it like a diving board - you want it to flex, but not too much. The tips and tails are usually softer to help absorb bumps and make it easier to start turns. The middle is stiffer to give you stability when you&amp;rsquo;re really laying into a turn.&lt;/p&gt;&#xA;&lt;p&gt;The twist factor (engineers call it torsional rigidity) is super important too. Race skis are built like steel beams - they barely twist at all, which gives you incredible edge grip but also means they&amp;rsquo;ll punish any mistakes. All-mountain skis have more give to them, making them more forgiving when you&amp;rsquo;re not quite on your A-game. Or when you don&amp;rsquo;t have an A-game like me.&lt;/p&gt;&#xA;&lt;h2 id=&#34;modern-manufacturing-process&#34;&gt;Modern Manufacturing Process&lt;/h2&gt;&#xA;&lt;h3 id=&#34;core-materials&#34;&gt;Core Materials&lt;/h3&gt;&#xA;&lt;p&gt;The heart of any ski is its core. Wood is still king for high-end skis - specifically stuff like poplar, beech, and ash. Why? Because nothing else matches wood&amp;rsquo;s natural ability to dampen vibrations while still feeling lively under your feet. It&amp;rsquo;s like how wooden baseball bats just feel different than aluminum ones.&lt;/p&gt;&#xA;&lt;p&gt;Some companies use foam cores instead, usually in their cheaper models. It&amp;rsquo;s lighter and cheaper to make, but honestly? It doesn&amp;rsquo;t feel quite the same. There are also some wild experiments with honeycomb structures in racing skis - super light and stiff, but you&amp;rsquo;ll need to take out a second mortgage to afford them.&lt;/p&gt;&#xA;&lt;h3 id=&#34;layer-construction&#34;&gt;Layer Construction&lt;/h3&gt;&#xA;&lt;p&gt;Think of a ski like a really high-tech sandwich. The bottom layer is the P-tex base - that&amp;rsquo;s what actually slides on the snow. Around the edges, you&amp;rsquo;ve got those steel strips we talked about earlier for grip. Then comes the fun part: layers of fiberglass or carbon fiber that give the ski its personality. The wood core sits right in the middle of all this, and some manufacturers add extra reinforcement in specific spots to fine-tune how the ski performs. The whole thing gets topped off with a protective layer that also happens to make your skis look pretty.&lt;/p&gt;&#xA;&lt;h3 id=&#34;manufacturing-steps&#34;&gt;Manufacturing Steps&lt;/h3&gt;&#xA;&lt;p&gt;So how do they actually put all this together? First, they prep the core - usually with these amazing CNC machines that carve the wood down to exactly the right thickness in exactly the right places. It&amp;rsquo;s kind of like watching a robot sculptor at work. Then comes the really tricky part: bending those steel edges to match the ski&amp;rsquo;s shape perfectly and gluing them to the base.&lt;/p&gt;&#xA;&lt;p&gt;The next step is laying down all those different materials in exactly the right order and position. Get this wrong, and you&amp;rsquo;ve got yourself a very expensive piece of wall art instead of a ski. They use epoxy to glue everything together, and it has to be spread just right - too much in one spot or too little in another, and the whole thing could fall apart on the slopes.&lt;/p&gt;&#xA;&lt;p&gt;Finally, they squeeze the whole stack in a heated press. This part can take anywhere from 20 minutes to several hours, depending on how fancy the construction is. When it comes out, you&amp;rsquo;ve got yourself a ski!&lt;/p&gt;&#xA;&lt;h2 id=&#34;key-technological-breakthroughs&#34;&gt;Key Technological Breakthroughs&lt;/h2&gt;&#xA;&lt;p&gt;The history of ski tech is basically a highlight reel of materials science. The 1950s brought us fiberglass - suddenly skis didn&amp;rsquo;t fall apart after a season of hard use. The &amp;rsquo;60s gave us P-tex bases (goodbye wooden bottoms!), and by the &amp;rsquo;80s, we were playing with carbon fiber to make skis lighter and snappier.&lt;/p&gt;&#xA;&lt;p&gt;These days, we&amp;rsquo;re getting into more advanced materials still. Nano-materials graphene have been incoporated, and then: the shape revolution of the &amp;rsquo;90s.&lt;/p&gt;&#xA;&lt;h2 id=&#34;modern-manufacturing-challenges&#34;&gt;Modern Manufacturing Challenges&lt;/h2&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s the thing about making skis - it&amp;rsquo;s kind of like baking a really complicated cake. The temperature has to be just right during the pressing process, or things go sideways fast. Too hot, and your resin turns to goo; too cold, and it doesn&amp;rsquo;t stick properly. And just like that cake, everything needs to be distributed evenly - get a bubble in your layup, and that&amp;rsquo;s a weak spot waiting to ruin someone&amp;rsquo;s day on the mountain.&lt;/p&gt;&#xA;&lt;p&gt;Those steel strips become particularly tricky to work with, especially around the tips and tails. Think about it - you&amp;rsquo;re trying to permanently attach metal to plastic while bending it in multiple directions. It&amp;rsquo;s like trying to wrap a present with one hand tied behind your back, except this present needs to handle high-speed impacts and freezing temperatures.&lt;/p&gt;&#xA;&lt;h2 id=&#34;future-trends&#34;&gt;Future Trends&lt;/h2&gt;&#xA;&lt;p&gt;So what&amp;rsquo;s next for ski manufacturing? The industry is going green in a big way - we&amp;rsquo;re talking about skis made from recycled materials and bio-based composites. It&amp;rsquo;s not just marketing either - these new materials are actually performing as well as (or better than) the traditional stuff.&lt;/p&gt;&#xA;&lt;p&gt;The real exciting stuff is happening in the custom ski world. Imagine walking into a shop, getting your measurements and skiing style analyzed, and having a pair of skis 3D-printed just for you. We&amp;rsquo;re not quite there yet, but that&amp;rsquo;s where things are heading. Some companies are already experimenting with 3D-printed binding plates and structural elements.&lt;/p&gt;&#xA;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Masia, S. (2004). &lt;a href=&#34;https://www.skiinghistory.org/history/evolution-modern-ski-technology&#34;&gt;&amp;ldquo;The Evolution of Modern Ski Technology&amp;rdquo;&lt;/a&gt;. Skiing Heritage Journal.&lt;/li&gt;&#xA;&lt;li&gt;Lind, D., &amp;amp; Sanders, S. P. (1996). &lt;a href=&#34;https://link.springer.com/book/10.1007/978-1-4757-2414-6&#34;&gt;&amp;ldquo;The Physics of Skiing: Skiing at the Triple Point&amp;rdquo;&lt;/a&gt;. Springer-Verlag.&lt;/li&gt;&#xA;&lt;li&gt;Glenne, B. (1987). &lt;a href=&#34;https://doi.org/10.1080/02640418708729754&#34;&gt;&amp;ldquo;Mechanics of Skis&amp;rdquo;&lt;/a&gt;. Journal of Sports Sciences, 5(3), 209-228.&lt;/li&gt;&#xA;&lt;li&gt;Clifton, P. M. (2011). &lt;a href=&#34;https://link.springer.com/article/10.1007/s12283-011-0067-2&#34;&gt;&amp;ldquo;Evolution and Innovation in Ski Design&amp;rdquo;&lt;/a&gt;. Sports Engineering, 14(1), 49-59.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.fis-ski.com/en/inside-fis/document-library/alpine-documents&#34;&gt;International Ski Federation Technical Reports (2020-2023)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Nachbauer, W., et al. (2016). &lt;a href=&#34;https://doi.org/10.1007/978-3-319-26481-6_3&#34;&gt;&amp;ldquo;Effects of Snow and Air Conditions on Ski Friction&amp;rdquo;&lt;/a&gt;. The Engineering Approach to Winter Sports.&lt;/li&gt;&#xA;&lt;li&gt;Brouillette, M. (2002). &lt;a href=&#34;https://doi.org/10.1243/095440602760204846&#34;&gt;&amp;ldquo;On measuring the flexural rigidity distribution of golf shafts&amp;rdquo;&lt;/a&gt;. Sports Engineering, 5(2), 67-78. (Methodology applied to ski flex testing)&lt;/li&gt;&#xA;&lt;li&gt;Fischer, C., et al. (2019). &lt;a href=&#34;https://doi.org/10.3390/app9163459&#34;&gt;&amp;ldquo;What Static and Dynamic Properties Should Slalom Skis Possess?&amp;rdquo;&lt;/a&gt; Applied Sciences, 9(17), 3459.&lt;/li&gt;&#xA;&lt;li&gt;Subic, A., et al. (2008). &lt;a href=&#34;https://doi.org/10.1007/978-0-387-45951-6_16&#34;&gt;&amp;ldquo;Engineering Design in Skiing Equipment&amp;rdquo;&lt;/a&gt;. The Engineering of Sport 7.&lt;/li&gt;&#xA;&lt;li&gt;Hobæk, T. C., et al. (2017). &lt;a href=&#34;https://doi.org/10.1016/j.proeng.2016.06.249&#34;&gt;&amp;ldquo;Sustainable Materials in Alpine Skis&amp;rdquo;&lt;/a&gt;. Procedia Engineering, 147, 322-327.&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Taming the Python Chaos: Linting &amp; Formatting with Ruff</title>
      <link>https://mcginniscommawill.com/posts/2025-01-30-linting-formatting-ruff/</link>
      <pubDate>Thu, 30 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-01-30-linting-formatting-ruff/</guid>
      <description>&lt;p&gt;Let&amp;rsquo;s be honest, wading through inconsistent Python code can feel like hacking through a dense jungle with a butter knife. Different quote styles, weird indentation, unused imports lurking in the shadows&amp;hellip; it&amp;rsquo;s exhausting and, frankly, slows everyone down.&lt;/p&gt;&#xA;&lt;p&gt;This is where the dynamic duo of &lt;strong&gt;linting&lt;/strong&gt; and &lt;strong&gt;formatting&lt;/strong&gt; ride to the rescue. They might sound like boring chores, but trust me, they are fundamental for writing maintainable, readable, and less buggy Python code. And nowadays, with tools like &lt;code&gt;ruff&lt;/code&gt;, they&amp;rsquo;re faster and easier to implement than ever.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Guide: Developing High-Quality Python Libraries</title>
      <link>https://mcginniscommawill.com/guides/python-library-development/</link>
      <pubDate>Wed, 29 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/python-library-development/</guid>
      <description>&lt;p&gt;Welcome to the comprehensive guide on developing high-quality Python libraries! Building a library that others rely on involves more than just writing functional code. It&amp;rsquo;s about crafting a complete package that is reliable, secure, easy to use, and maintainable over time.&lt;/p&gt;&#xA;&lt;p&gt;This guide consolidates best practices and insights gathered from maintaining popular open-source and libraries and using countless others. Think of it as a roadmap covering the key areas you need to master.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Handling Sensitive Data Securely Within Your Python Library</title>
      <link>https://mcginniscommawill.com/posts/2025-01-29-handling-sensitive-data/</link>
      <pubDate>Wed, 29 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-01-29-handling-sensitive-data/</guid>
      <description>&lt;p&gt;Accidentally exposed API keys and credentials in public repositories remain one of the most common security issues in modern software development. Despite the widespread awareness of this risk, these incidents continue to occur across organizations of all sizes. Let&amp;rsquo;s explore comprehensive strategies for keeping sensitive data secure in Python libraries, so you can build more robust and secure applications from the start.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-makes-data-sensitive&#34;&gt;What Makes Data Sensitive?&lt;/h2&gt;&#xA;&lt;p&gt;Before diving into implementation details, it&amp;rsquo;s crucial to understand what constitutes sensitive data:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Decoding Library Updates: Understanding Semantic Versioning (SemVer)</title>
      <link>https://mcginniscommawill.com/posts/2025-01-28-semantic-versioning/</link>
      <pubDate>Tue, 28 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-01-28-semantic-versioning/</guid>
      <description>&lt;p&gt;When you release a new version of your Python library, how do users know what to expect? Will updating break their existing code? Does it just contain bug fixes, or are there exciting new features? Without a clear system, version numbers are just arbitrary labels, leading to confusion and the dreaded &amp;ldquo;dependency hell.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;This is why &lt;strong&gt;Semantic Versioning (SemVer)&lt;/strong&gt; has become the de facto standard for libraries and software across many ecosystems, including Python. It&amp;rsquo;s a simple set of rules that imbues version numbers with clear meaning, making life easier for both maintainers and users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dependency Security: Managing Vulnerabilities with pip-audit</title>
      <link>https://mcginniscommawill.com/posts/2025-01-27-dependency-security-pip-audit/</link>
      <pubDate>Mon, 27 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-01-27-dependency-security-pip-audit/</guid>
      <description>&lt;p&gt;Picture this: a developer updates a dependency with a simple patch version bump. Everything seems fine until a security researcher emails: &amp;ldquo;Your library is vulnerable to remote code execution.&amp;rdquo; The issue wasn&amp;rsquo;t in the library&amp;rsquo;s code; it was in a dependency that wasn&amp;rsquo;t being checked for known vulnerabilities.&lt;/p&gt;&#xA;&lt;p&gt;This scenario highlights a crucial aspect of Python supply chain security. Even if your library&amp;rsquo;s code is secure, vulnerable dependencies can still put your users at risk. Let&amp;rsquo;s explore how &lt;code&gt;pip-audit&lt;/code&gt; can help catch these issues before they become problems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Center of Your Python Project: Understanding pyproject.toml</title>
      <link>https://mcginniscommawill.com/posts/2025-01-26-pyproject-toml-explained/</link>
      <pubDate>Sun, 26 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-01-26-pyproject-toml-explained/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;ve started a new Python project recently or looked at the structure of modern libraries, you&amp;rsquo;ve undoubtedly encountered a file named &lt;code&gt;pyproject.toml&lt;/code&gt; sitting in the project root. What is this file, and why has it become so important? Gone are the days of juggling &lt;code&gt;setup.py&lt;/code&gt;, &lt;code&gt;setup.cfg&lt;/code&gt;, &lt;code&gt;requirements.txt&lt;/code&gt;, &lt;code&gt;MANIFEST.in&lt;/code&gt;, and separate configuration files for every single tool (&lt;code&gt;.isort.cfg&lt;/code&gt;, &lt;code&gt;.flake8&lt;/code&gt;, &lt;code&gt;.coveragerc&lt;/code&gt;, etc.). &lt;code&gt;pyproject.toml&lt;/code&gt; aims to bring order to this configuration chaos.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bandit Security Rules: Finding Common Python Security Issues</title>
      <link>https://mcginniscommawill.com/posts/2025-01-25-intro-to-bandit/</link>
      <pubDate>Sat, 25 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-01-25-intro-to-bandit/</guid>
      <description>&lt;p&gt;Security vulnerabilities in Python code can often go unnoticed during development. While code reviews help catch many issues, automated tools like Ruff with its Bandit integration can systematically identify common security pitfalls before they make it to production. This article introduces Ruff&amp;rsquo;s implementation of Bandit&amp;rsquo;s security rules, providing a faster and more integrated approach to Python security scanning.&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-static-analysis-and-why-should-you-care&#34;&gt;What&amp;rsquo;s Static Analysis, and Why Should You Care?&lt;/h2&gt;&#xA;&lt;p&gt;Static Application Security Testing (SAST) analyzes code without executing it, identifying potential security vulnerabilities through pattern matching and code structure analysis. Finding security issues during development is significantly more cost-effective and less stressful than addressing them in production environments.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Don&#39;t Forget the Fine Print: Licensing Your Python Library</title>
      <link>https://mcginniscommawill.com/posts/2025-01-24-licensing-your-project/</link>
      <pubDate>Fri, 24 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-01-24-licensing-your-project/</guid>
      <description>&lt;p&gt;You&amp;rsquo;ve written some brilliant Python code, packaged it neatly, maybe even set up tests and CI. You&amp;rsquo;re ready to share it with the world! But wait&amp;hellip; how &lt;em&gt;exactly&lt;/em&gt; are people allowed to use it? Can they incorporate it into their commercial product? If they modify it, do they have to share their changes? These questions are answered by the &lt;strong&gt;open-source license&lt;/strong&gt; you choose.&lt;/p&gt;&#xA;&lt;p&gt;Ignoring licensing doesn&amp;rsquo;t mean your code is free for all; it usually means the opposite! Without an explicit license, default copyright law applies, granting you exclusive rights and generally forbidding others from copying, distributing, or modifying your work. If you &lt;em&gt;want&lt;/em&gt; people to use your library, you &lt;em&gt;must&lt;/em&gt; choose a license.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NASA Technology Readiness Levels</title>
      <link>https://mcginniscommawill.com/posts/2025-01-23-nasa-technology-readiness-levels/</link>
      <pubDate>Thu, 23 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-01-23-nasa-technology-readiness-levels/</guid>
      <description>&lt;p&gt;Ever wondered how NASA decides if a technology is ready for space? Enter Technology Readiness Levels (TRLs) - the space agency&amp;rsquo;s framework that&amp;rsquo;s become the gold standard for measuring technological maturity. From its beginnings in the space program to its current status as a global innovation tool, the TRL framework has quite a story to tell.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-birth-of-a-framework-&#34;&gt;The Birth of a Framework 🚀&lt;/h2&gt;&#xA;&lt;p&gt;Picture NASA in the mid-1970s: the space age has come and is in full swing, technology is advancing at breakneck speed, and engineers need a reliable way to assess if new tech is truly ready for the final frontier. Stan Sadin at NASA Headquarters in 1974 introduced an idea: a systematic way to evaluate technological maturity.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building and Engaging a Community Around Your Open Source Library</title>
      <link>https://mcginniscommawill.com/posts/2025-01-22-building-engaging-community/</link>
      <pubDate>Wed, 22 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-01-22-building-engaging-community/</guid>
      <description>&lt;p&gt;I remember the exact moment I realized the power of community in open source. It was when someone I&amp;rsquo;d never met submitted a pull request that fixed a bug I hadn&amp;rsquo;t even noticed yet. They&amp;rsquo;d been using my library in a way I hadn&amp;rsquo;t anticipated, found an edge case, and not only reported it but fixed it. That&amp;rsquo;s when it hit me: a thriving community is what makes open source truly powerful.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Library Author&#39;s Dilemma: Managing Python Dependencies</title>
      <link>https://mcginniscommawill.com/posts/2025-01-21-dependency-management/</link>
      <pubDate>Tue, 21 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-01-21-dependency-management/</guid>
      <description>&lt;p&gt;Building a Python library often means standing on the shoulders of giants - leveraging the fantastic work already done in other packages. Need to make HTTP requests? Use &lt;code&gt;requests&lt;/code&gt; or &lt;code&gt;httpx&lt;/code&gt;. Need numerical computing? &lt;code&gt;numpy&lt;/code&gt; is your friend. Adding dependencies can save you immense amounts of time and effort.&lt;/p&gt;&#xA;&lt;p&gt;But here&amp;rsquo;s the catch: every dependency you add is a choice with consequences. For library authors, managing dependencies isn&amp;rsquo;t just about making &lt;em&gt;your&lt;/em&gt; life easier; it&amp;rsquo;s about being a good citizen in the Python ecosystem and not making &lt;em&gt;your users&amp;rsquo;&lt;/em&gt; lives harder. It&amp;rsquo;s a careful balancing act.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data Science Things Roundup #12</title>
      <link>https://mcginniscommawill.com/posts/2025-01-20-data-science-things-roundup-11/</link>
      <pubDate>Mon, 20 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-01-20-data-science-things-roundup-11/</guid>
      <description>&lt;p&gt;After a long hiatus, I&amp;rsquo;m bringing back the Data Science Things Roundup series. For those new here, this is where I share three interesting things from the world of data science that caught my attention. I tend to focus on developments that might have flown under the radar - while breakthroughs like &lt;a href=&#34;https://github.com/deepseek-ai/DeepSeek-R1&#34;&gt;DeepSeek-R1&lt;/a&gt; are incredibly exciting, there&amp;rsquo;s already extensive coverage elsewhere. Instead, I aim to highlight lesser-known but equally fascinating developments that deserve more attention.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hearty Beef Shortrib Ragu: A Winter Comfort Dish</title>
      <link>https://mcginniscommawill.com/posts/2025-01-19-beef-shortrib-ragu/</link>
      <pubDate>Sun, 19 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-01-19-beef-shortrib-ragu/</guid>
      <description>&lt;p&gt;This beef shortrib ragu is a labor of love that transforms basic ingredients into something spectacular. The long, slow cooking process creates a rich, deeply flavored sauce that&amp;rsquo;s perfect over pasta or mashed potatoes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/recipes/ragu.png&#34; alt=&#34;recipe guide&#34;&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Beef Shortrib Ragu&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 6-8&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 30 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 3-4 hours&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;h5 id=&#34;for-the-ragu&#34;&gt;For the Ragu&lt;/h5&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;3-4 lbs beef shortribs&lt;/li&gt;&#xA;&lt;li&gt;4 medium onions, diced&lt;/li&gt;&#xA;&lt;li&gt;5-6 carrots, shredded&lt;/li&gt;&#xA;&lt;li&gt;5-6 celery stalks, diced&lt;/li&gt;&#xA;&lt;li&gt;1 head of garlic, cloves peeled&lt;/li&gt;&#xA;&lt;li&gt;2-3 tbsp tomato paste&lt;/li&gt;&#xA;&lt;li&gt;2 cans (28 oz each) whole San Marzano tomatoes&lt;/li&gt;&#xA;&lt;li&gt;4 cups beef stock&lt;/li&gt;&#xA;&lt;li&gt;2 tbsp kosher salt&lt;/li&gt;&#xA;&lt;li&gt;Fresh ground black pepper&lt;/li&gt;&#xA;&lt;li&gt;1 tsp red pepper flakes&lt;/li&gt;&#xA;&lt;li&gt;2 tbsp Italian seasoning blend&lt;/li&gt;&#xA;&lt;li&gt;Fresh basil and sage for garnish&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h5 id=&#34;for-serving&#34;&gt;For Serving&lt;/h5&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1 lb rigatoni pasta (or &lt;a href=&#34;https://mcginniscommawill.com/posts/2024-05-12-mothers-day-colcannon-coq-au-vin/&#34;&gt;colcannon&lt;/a&gt; for a twist)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;instructions&#34;&gt;Instructions&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Prep the Meat&lt;/strong&gt;: Season the shortribs generously with salt. Let them come to room temperature before cooking.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Avoiding Common Pitfalls: Injection Flaws in Python Libraries</title>
      <link>https://mcginniscommawill.com/posts/2025-01-18-avoiding-injection-flaws/</link>
      <pubDate>Sat, 18 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-01-18-avoiding-injection-flaws/</guid>
      <description>&lt;p&gt;Many developers think injection vulnerabilities are only a concern for web applications. But the reality is quite different - libraries and command-line tools are just as susceptible to these attacks. When a library processes untrusted input without proper safeguards, it can expose all of its users to serious security risks.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s explore how injection flaws can sneak into Python libraries and, more importantly, how to prevent them. Whether you&amp;rsquo;re building data processing tools, configuration managers, or system utilities, these lessons will help you write more secure code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Art of Saying No: Defining Your Python Library&#39;s Scope</title>
      <link>https://mcginniscommawill.com/posts/2025-01-17-defining-library-scope/</link>
      <pubDate>Fri, 17 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-01-17-defining-library-scope/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve all been there, right? You start with a neat little Python script that solves one specific problem. It works beautifully. Then you think, &amp;ldquo;Hey, I could reuse this!&amp;rdquo; and decide to turn it into a proper library. Awesome.&lt;/p&gt;&#xA;&lt;p&gt;But then&amp;hellip; the feature creep begins.&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;It would be cool if it also did &lt;em&gt;this&lt;/em&gt;&amp;hellip;&amp;rdquo;&#xA;&amp;ldquo;What if I added support for &lt;em&gt;that&lt;/em&gt; obscure edge case?&amp;rdquo;&#xA;&amp;ldquo;My colleague needs it to integrate with &lt;em&gt;this other system&lt;/em&gt;&amp;hellip;&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tap, tap, is this thing still on?</title>
      <link>https://mcginniscommawill.com/posts/2025-01-16-first-post/</link>
      <pubDate>Thu, 16 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-01-16-first-post/</guid>
      <description>&lt;h2 id=&#34;im-back&#34;&gt;I&amp;rsquo;m back.&lt;/h2&gt;&#xA;&lt;p&gt;For many years I regularly posted on willmcginnis.com. I was contributing to the open source community, writing about &lt;a href=&#34;https://mcginniscommawill.com/tags/machine-learning/&#34;&gt;machine learning&lt;/a&gt;, &lt;a href=&#34;https://mcginniscommawill.com/tags/software-development/&#34;&gt;software development&lt;/a&gt;, and &lt;a href=&#34;https://mcginniscommawill.com/tags/atlanta/&#34;&gt;Atlanta&lt;/a&gt;. At some point the startup I was helping run at the time, &lt;a href=&#34;https://www.crunchbase.com/organization/predikto&#34;&gt;Predikto&lt;/a&gt;, was acquired by UTC and my world got extremely busy and in some ways chaotic.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SDLC in the Age of AI</title>
      <link>https://mcginniscommawill.com/posts/2025-01-12-ai-software-development-evolution/</link>
      <pubDate>Sun, 12 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2025-01-12-ai-software-development-evolution/</guid>
      <description>&lt;p&gt;As we navigate the rapidly evolving landscape of software development, it&amp;rsquo;s becoming increasingly clear that AI is not just another tool in our arsenal; it&amp;rsquo;s fundamentally changing how we approach programming. This shift is particularly evident in how we&amp;rsquo;re starting to think about code organization and documentation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Finnish Salmon Soup (Lohikeitto)</title>
      <link>https://mcginniscommawill.com/posts/2024-12-20-recipe-finnish-salmon-soup/</link>
      <pubDate>Fri, 20 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2024-12-20-recipe-finnish-salmon-soup/</guid>
      <description>&lt;p&gt;First I&amp;rsquo;ll just say: &amp;ldquo;wait isn&amp;rsquo;t this a tech blog? why is there a post about soup?&amp;rdquo;. It&amp;rsquo;s my corner of the internet and I like soup. We&amp;rsquo;ve had this soup multiple times recently, and it&amp;rsquo;s good. You should try this soup.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/recipes/salmon_soup.png&#34; alt=&#34;recipe guide&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Favorite Side Dishes</title>
      <link>https://mcginniscommawill.com/posts/2024-11-15-favorite-side-dishes/</link>
      <pubDate>Fri, 15 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2024-11-15-favorite-side-dishes/</guid>
      <description>&lt;p&gt;Sometimes the side dishes make the meal. Here are three of my favorite sides from different culinary traditions, each bringing its own character to the table while being simple enough for weeknight cooking.&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Hungarian Cucumber Salad (Uborkasaláta)&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 4-6&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 15 min &amp;#43; 1 hour chill&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;p&gt;A refreshing combination of thin-sliced cucumbers in a creamy, tangy dressing. The key is slicing the cucumbers paper-thin and letting them release their water before dressing. This is a perfect accompaniment to &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-01-19-beef-shortrib-ragu/&#34;&gt;beef shortrib ragu&lt;/a&gt; or any rich, hearty dish.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Classic Salmon Croquettes</title>
      <link>https://mcginniscommawill.com/posts/2024-11-07-salmon-croquettes/</link>
      <pubDate>Thu, 07 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2024-11-07-salmon-croquettes/</guid>
      <description>&lt;p&gt;Salmon croquettes (or salmon patties) are a throwback classic for a reason. They&amp;rsquo;re easy, use pantry staples like canned salmon, and taste great. Perfect served with some tartar sauce or just a squeeze of lemon.&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Salmon Croquettes&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 4-6 patties&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 10 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 10 min&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1 can (14-15 oz) pink or red salmon, drained, skin and bones removed (or about 1.5 cups cooked leftover salmon, flaked)&lt;/li&gt;&#xA;&lt;li&gt;1/2 cup breadcrumbs (plus more for coating, optional)&lt;/li&gt;&#xA;&lt;li&gt;1/4 cup finely chopped onion and green onion&lt;/li&gt;&#xA;&lt;li&gt;1 tbsp chopped fresh parsley&lt;/li&gt;&#xA;&lt;li&gt;1 large egg, lightly beaten&lt;/li&gt;&#xA;&lt;li&gt;1 tbsp mayonnaise or mustard&lt;/li&gt;&#xA;&lt;li&gt;1 tsp lemon juice&lt;/li&gt;&#xA;&lt;li&gt;Salt and freshly ground black pepper to taste&lt;/li&gt;&#xA;&lt;li&gt;2-3 tbsp vegetable oil or butter for frying&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;instructions&#34;&gt;Instructions&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;In a medium bowl, flake the drained salmon with a fork. Ensure any large bones or skin pieces are removed.&lt;/li&gt;&#xA;&lt;li&gt;Add the breadcrumbs, chopped onion, parsley, beaten egg, mayonnaise/mustard, and lemon juice to the bowl.&lt;/li&gt;&#xA;&lt;li&gt;Mix gently until just combined. Don&amp;rsquo;t overmix. Season with salt and pepper.&lt;/li&gt;&#xA;&lt;li&gt;Shape the mixture into small patties (about 4-6 depending on size). If the mixture is too wet, add a bit more breadcrumbs. If desired, you can coat the patties lightly in additional breadcrumbs for extra crispiness.&lt;/li&gt;&#xA;&lt;li&gt;Heat the oil or butter in a large skillet over medium heat.&lt;/li&gt;&#xA;&lt;li&gt;Carefully place the patties in the hot skillet. Cook for about 4-5 minutes per side, until golden brown and heated through.&lt;/li&gt;&#xA;&lt;li&gt;Remove the croquettes from the skillet and drain on paper towels.&lt;/li&gt;&#xA;&lt;li&gt;Serve immediately.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Trail Report: Riverwalk Atlanta</title>
      <link>https://mcginniscommawill.com/posts/2024-11-01-riverwalk-atlanta-trail-report/</link>
      <pubDate>Fri, 01 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2024-11-01-riverwalk-atlanta-trail-report/</guid>
      <description>&lt;p&gt;Hidden along the banks of the Chattahoochee River, behind Whittier Mill Park, lies one of Atlanta&amp;rsquo;s best-kept secrets: the Riverwalk trails. These hand-cut, volunteer-maintained paths offer an experience that feels remarkably remote despite being within city limits.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/trails/riverwalk_1.jpeg&#34; alt=&#34;trail&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;trail-overview&#34;&gt;Trail Overview&lt;/h2&gt;&#xA;&lt;p&gt;These trails are unique in that they&amp;rsquo;re unmarked and informal - part of their charm is in the exploration. While this guide will give you an overview, the best approach is to arrive with an adventurous spirit and be ready to discover your own path. The network weaves along the Chattahoochee River, providing constant reminders of Atlanta&amp;rsquo;s most significant natural feature.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Filipino Chicken Adobo</title>
      <link>https://mcginniscommawill.com/posts/2024-08-07-chicken-adobo/</link>
      <pubDate>Wed, 07 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2024-08-07-chicken-adobo/</guid>
      <description>&lt;p&gt;Chicken Adobo is often considered the national dish of the Philippines, and it&amp;rsquo;s incredibly easy to see why. It&amp;rsquo;s a savory, tangy, and deeply flavorful dish made with simple ingredients. Chicken simmers away in a mixture of soy sauce, vinegar, garlic, and spices until it&amp;rsquo;s fall-off-the-bone tender. Serve it over rice!&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Filipino Chicken Adobo&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 4&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 10 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 45-60 min&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2 lbs chicken pieces (thighs and drumsticks work best, bone-in, skin-on preferred)&lt;/li&gt;&#xA;&lt;li&gt;1/2 cup soy sauce (use Filipino soy sauce if available, otherwise standard)&lt;/li&gt;&#xA;&lt;li&gt;1/2 cup white vinegar (cane vinegar is traditional, but white distilled works)&lt;/li&gt;&#xA;&lt;li&gt;1 whole head of garlic, cloves smashed and peeled&lt;/li&gt;&#xA;&lt;li&gt;1 tsp whole black peppercorns&lt;/li&gt;&#xA;&lt;li&gt;2-3 dried bay leaves&lt;/li&gt;&#xA;&lt;li&gt;1 tbsp vegetable oil (optional, for browning)&lt;/li&gt;&#xA;&lt;li&gt;Steamed rice, for serving&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;instructions&#34;&gt;Instructions&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Heat oil in a large pot, Dutch oven, or skillet with a lid over medium-high heat. Brown the chicken pieces on all sides. Remove chicken and set aside. This adds extra flavor but isn&amp;rsquo;t strictly necessary.&lt;/li&gt;&#xA;&lt;li&gt;Combine the soy sauce, vinegar, smashed garlic cloves, black peppercorns, and bay leaves in the same pot.&lt;/li&gt;&#xA;&lt;li&gt;Return the chicken pieces to the pot. Make sure they are mostly submerged in the liquid. Add a splash of water if needed to cover.&lt;/li&gt;&#xA;&lt;li&gt;Bring the mixture to a boil, then immediately reduce the heat to low.&lt;/li&gt;&#xA;&lt;li&gt;Cover the pot and let it simmer gently for 30-45 minutes, or until the chicken is very tender. Do not stir.&lt;/li&gt;&#xA;&lt;li&gt;Once the chicken is tender, remove the lid. Increase the heat slightly and let the sauce simmer and reduce for another 10-15 minutes, or until it thickens slightly. You can skim off excess fat if desired.&lt;/li&gt;&#xA;&lt;li&gt;Remove the bay leaves before serving.&lt;/li&gt;&#xA;&lt;li&gt;Serve hot over steamed rice, spooning plenty of the sauce over the chicken and rice.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Simple Summer Succotash</title>
      <link>https://mcginniscommawill.com/posts/2024-06-15-succotash/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2024-06-15-succotash/</guid>
      <description>&lt;p&gt;Succotash is one of those classic American side dishes that just screams summer. It&amp;rsquo;s simple, fresh, and versatile. This is a basic version, feel free to add other veggies like zucchini or okra if you have them on hand.&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Summer Succotash&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 4-6&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 10 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 20 min&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1 tbsp olive oil or butter&lt;/li&gt;&#xA;&lt;li&gt;1 small onion, finely chopped&lt;/li&gt;&#xA;&lt;li&gt;1 red bell pepper, seeded and chopped&lt;/li&gt;&#xA;&lt;li&gt;2 cups fresh or frozen corn kernels&lt;/li&gt;&#xA;&lt;li&gt;1 1/2 cups fresh or frozen lima beans (or edamame)&lt;/li&gt;&#xA;&lt;li&gt;1/2 cup vegetable broth or water&lt;/li&gt;&#xA;&lt;li&gt;1 tbsp chopped fresh parsley or basil&lt;/li&gt;&#xA;&lt;li&gt;Salt and freshly ground black pepper to taste&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;instructions&#34;&gt;Instructions&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Heat the olive oil or butter in a large skillet or saucepan over medium heat.&lt;/li&gt;&#xA;&lt;li&gt;Add the chopped onion and bell pepper. Sauté until softened, about 5-7 minutes.&lt;/li&gt;&#xA;&lt;li&gt;Stir in the corn and lima beans. Cook for another 2-3 minutes.&lt;/li&gt;&#xA;&lt;li&gt;Pour in the vegetable broth or water. Bring to a simmer, then reduce heat, cover, and cook until the vegetables are tender, about 10-15 minutes (less time for fresh, more for frozen).&lt;/li&gt;&#xA;&lt;li&gt;Remove from heat. Stir in the fresh herbs.&lt;/li&gt;&#xA;&lt;li&gt;Season generously with salt and pepper to taste.&lt;/li&gt;&#xA;&lt;li&gt;Serve warm.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>The Art of Design in Technical Startups</title>
      <link>https://mcginniscommawill.com/posts/2024-06-15-design-communication-startups/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2024-06-15-design-communication-startups/</guid>
      <description>&lt;p&gt;&lt;em&gt;The following is excerpted and adapted from my private notes during my time at Predikto (2014-2018), exploring the critical role of design in technology companies.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Invisible Hand of Startup Culture</title>
      <link>https://mcginniscommawill.com/posts/2024-05-15-startup-culture-role-separation/</link>
      <pubDate>Wed, 15 May 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2024-05-15-startup-culture-role-separation/</guid>
      <description>&lt;p&gt;&lt;em&gt;The following is excerpted and adapted from my private notes during my time at Predikto (2014-2018), exploring the qualitative aspects of building and maintaining healthy startup cultures.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mother&#39;s Day Comfort: Colcannon and Coq au Vin</title>
      <link>https://mcginniscommawill.com/posts/2024-05-12-mothers-day-colcannon-coq-au-vin/</link>
      <pubDate>Sun, 12 May 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2024-05-12-mothers-day-colcannon-coq-au-vin/</guid>
      <description>&lt;p&gt;While colcannon and coq au vin might seem like an unlikely pairing, this combination of French countryside cooking and Ireland&amp;rsquo;s best take on mashed potatoes creates a memorable meal worthy of any special occasion. The rich wine sauce from the coq au vin finds a perfect companion in the buttery, cabbage-flecked colcannon. This has become one of our favorite celebration meals, joining other comfort food classics like &lt;a href=&#34;https://mcginniscommawill.com/posts/2025-01-19-beef-shortrib-ragu/&#34;&gt;beef shortrib ragu&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Colcannon&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 6-8&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 15 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 25 min&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2 lbs Yukon Gold potatoes, peeled and quartered&lt;/li&gt;&#xA;&lt;li&gt;1 small head of cabbage, finely shredded&lt;/li&gt;&#xA;&lt;li&gt;1 cup whole milk&lt;/li&gt;&#xA;&lt;li&gt;1 cup (2 sticks) butter, divided&lt;/li&gt;&#xA;&lt;li&gt;1 bunch of green onions, finely chopped (about 1 cup)&lt;/li&gt;&#xA;&lt;li&gt;2 tsp kosher salt, or to taste&lt;/li&gt;&#xA;&lt;li&gt;Fresh ground black pepper&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;instructions&#34;&gt;Instructions&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Boil potatoes in salted water until tender (about 15-20 minutes)&lt;/li&gt;&#xA;&lt;li&gt;Meanwhile, in a separate pan, sauté cabbage in 4 tablespoons butter until soft (about 10 minutes)&lt;/li&gt;&#xA;&lt;li&gt;Heat milk with half the remaining butter and green onions&lt;/li&gt;&#xA;&lt;li&gt;Drain potatoes, mash thoroughly&lt;/li&gt;&#xA;&lt;li&gt;Fold in the cabbage mixture and warm milk mixture&lt;/li&gt;&#xA;&lt;li&gt;Season generously with salt and black pepper&lt;/li&gt;&#xA;&lt;li&gt;Serve hot with a well of melted butter in the center&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Coq au Vin&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 4-6&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 20 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 1.5 hours&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1 whole chicken (3-4 lbs), cut into 8 pieces&lt;/li&gt;&#xA;&lt;li&gt;8 oz bacon lardons or thick-cut bacon, diced&lt;/li&gt;&#xA;&lt;li&gt;1 large onion, diced&lt;/li&gt;&#xA;&lt;li&gt;2 carrots, cut into 1-inch chunks&lt;/li&gt;&#xA;&lt;li&gt;8 oz cremini mushrooms, quartered&lt;/li&gt;&#xA;&lt;li&gt;3 cloves garlic, minced&lt;/li&gt;&#xA;&lt;li&gt;2 cups red wine (preferably Burgundy or Pinot Noir)&lt;/li&gt;&#xA;&lt;li&gt;2 cups chicken stock&lt;/li&gt;&#xA;&lt;li&gt;2 bay leaves&lt;/li&gt;&#xA;&lt;li&gt;4 sprigs fresh thyme&lt;/li&gt;&#xA;&lt;li&gt;2 tbsp butter&lt;/li&gt;&#xA;&lt;li&gt;2 tbsp olive oil&lt;/li&gt;&#xA;&lt;li&gt;2 tsp kosher salt&lt;/li&gt;&#xA;&lt;li&gt;Fresh ground black pepper&lt;/li&gt;&#xA;&lt;li&gt;2 tablespoons flour&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;instructions&#34;&gt;Instructions&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Season chicken pieces with salt and pepper&lt;/li&gt;&#xA;&lt;li&gt;In a large Dutch oven, crisp the bacon lardons, remove and set aside&lt;/li&gt;&#xA;&lt;li&gt;Brown chicken pieces in the bacon fat until golden, remove and set aside&lt;/li&gt;&#xA;&lt;li&gt;In the same pot, sauté onions, carrots, and mushrooms until softened&lt;/li&gt;&#xA;&lt;li&gt;Add garlic, cook for 1 minute&lt;/li&gt;&#xA;&lt;li&gt;Sprinkle flour over vegetables, cook for 2 minutes&lt;/li&gt;&#xA;&lt;li&gt;Add wine, stock, bay leaves, and thyme&lt;/li&gt;&#xA;&lt;li&gt;Return chicken and bacon to the pot&lt;/li&gt;&#xA;&lt;li&gt;Simmer covered for 1 hour or until chicken is tender&lt;/li&gt;&#xA;&lt;li&gt;Adjust seasoning and serve hot over colcannon&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Serve both dishes hot, with the coq au vin&amp;rsquo;s rich sauce pooling around a generous mound of colcannon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trail Report: Southside Park</title>
      <link>https://mcginniscommawill.com/posts/2024-05-01-southside-park-trail-report/</link>
      <pubDate>Wed, 01 May 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2024-05-01-southside-park-trail-report/</guid>
      <description>&lt;p&gt;Southside Park is Atlanta&amp;rsquo;s only (official) ITP mountain bike trail system. Located in south Atlanta, it&amp;rsquo;s become a favorite among local riders for quick after-work sessions and skills development. Also pretty banging for trail running (w/ Atlanta Snack Club ideally).&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/trails/southside_park_1.jpeg&#34; alt=&#34;trail&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;trail-system-overview&#34;&gt;Trail System Overview&lt;/h2&gt;&#xA;&lt;p&gt;With about 8 miles of singletrack, Southside isn&amp;rsquo;t huge, but the quality is super high. The trails here are surprisingly technical for being so close to the city, and they&amp;rsquo;ve got a raw, old-school handcut feel that&amp;rsquo;s getting harder to find these days. Particularly on the hickory loop it get&amp;rsquo;s very rocky and very hard, fast.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Startup Leadership Guide</title>
      <link>https://mcginniscommawill.com/guides/startup-leadership-guide/</link>
      <pubDate>Sat, 20 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/startup-leadership-guide/</guid>
      <description>&lt;h2 id=&#34;a-field-manual-for-building-and-running-technology-companies&#34;&gt;A Field Manual for Building and Running Technology Companies&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve spent years leading teams at startups and large companies. Through that experience, I&amp;rsquo;ve learned that building a successful tech company is like conducting an orchestra-every part needs to work together smoothly, from daily operations to your most senior technical experts. You&amp;rsquo;re often figuring out the plan as you go, which makes leadership both challenging and essential.&lt;/p&gt;&#xA;&lt;p&gt;In this guide, I share practical lessons from my experiences. It&amp;rsquo;s not just theory; it&amp;rsquo;s a hands-on manual for leaders who are actively building their companies.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Decision Making Under Uncertainty: Lessons from Practice</title>
      <link>https://mcginniscommawill.com/posts/2024-04-15-decision-making-under-uncertainty/</link>
      <pubDate>Mon, 15 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2024-04-15-decision-making-under-uncertainty/</guid>
      <description>&lt;p&gt;&lt;em&gt;The following is excerpted and adapted from my private notes during my time at Predikto (2014-2018), exploring how to make complex decisions under uncertainty in technical startups.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Atlanta Restaurant Guide</title>
      <link>https://mcginniscommawill.com/library/atlanta-restaurant-guide/</link>
      <pubDate>Thu, 21 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/library/atlanta-restaurant-guide/</guid>
      <description>&lt;p&gt;Let me start with a disclaimer: food is incredibly personal, and what I love might not be what you love. This guide is simply a collection of restaurants that I&amp;rsquo;ve enjoyed in Atlanta over the years. Your mileage may vary, and that&amp;rsquo;s perfectly fine! Think of this as less of a definitive &amp;ldquo;best of&amp;rdquo; list and more of a personal food diary of places that have left an impression on me.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Atlanta VC Directory</title>
      <link>https://mcginniscommawill.com/library/atlanta-vc-directory/</link>
      <pubDate>Tue, 19 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/library/atlanta-vc-directory/</guid>
      <description>&lt;p&gt;A curated list of active venture capital firms and investors in the Atlanta metropolitan area. This resource is maintained to help founders connect with potential investors in the local ecosystem.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: While I strive to keep this directory current, the Atlanta ecosystem is constantly evolving. If you notice any missing firms, outdated information, or have suggestions for improvements, please reach out to me on &lt;a href=&#34;https://www.linkedin.com/in/wmcginnis&#34;&gt;LinkedIn&lt;/a&gt; or &lt;a href=&#34;https://twitter.com/willmcginniser&#34;&gt;Twitter/X&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;table-of-contents&#34;&gt;Table of Contents&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#market-overview&#34;&gt;Market Overview&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#early-stage-firms&#34;&gt;Early Stage Firms&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#growth-stage-firms&#34;&gt;Growth Stage Firms&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#specialized-investors&#34;&gt;Specialized Investors&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#growth-stage-private-equity&#34;&gt;Growth Stage Private Equity&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#corporate-venture-arms&#34;&gt;Corporate Venture Arms&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#family-offices&#34;&gt;Family Offices&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#angel-groups&#34;&gt;Angel Groups&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#accelerators--venture-studios&#34;&gt;Accelerators &amp;amp; Venture Studios&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#individual-angel-investors&#34;&gt;Individual Angel Investors&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#references&#34;&gt;References&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;market-overview&#34;&gt;Market Overview&lt;/h2&gt;&#xA;&lt;p&gt;Atlanta has emerged as a leading technology hub in the Southeast, distinguished by its diverse and dynamic startup ecosystem[1][10]. The city&amp;rsquo;s startup landscape is particularly strong in several key sectors that leverage the region&amp;rsquo;s historical strengths: Enterprise Software, FinTech, Healthcare Technology, Supply Chain &amp;amp; Logistics, and Cybersecurity. This focus aligns naturally with Atlanta&amp;rsquo;s position as a major corporate hub, home to numerous Fortune 500 companies that often become strategic partners and customers for local startups[10].&lt;/p&gt;</description>
    </item>
    <item>
      <title>Science vs. Engineering in Startups: A Tale of Two Methodologies</title>
      <link>https://mcginniscommawill.com/posts/2024-03-15-science-engineering-methodology-startups/</link>
      <pubDate>Fri, 15 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2024-03-15-science-engineering-methodology-startups/</guid>
      <description>&lt;p&gt;&lt;em&gt;The following is excerpted and adapted from my private notes during my time at &lt;a href=&#34;https://www.crunchbase.com/organization/predikto&#34;&gt;Predikto&lt;/a&gt; (2014-2018), exploring the intersection of scientific and engineering methodologies in startup environments. This is part of a series on startup structure and methodology, following &lt;a href=&#34;https://mcginniscommawill.com/posts/2024-01-18-startup-structure-and-information-flow/&#34;&gt;Startup Structure and Information Flow&lt;/a&gt; and &lt;a href=&#34;https://mcginniscommawill.com/posts/2024-04-15-decision-making-under-uncertainty/&#34;&gt;Decision Making Under Uncertainty&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>NASA Technology Readiness Levels: A Software Development Perspective</title>
      <link>https://mcginniscommawill.com/posts/2024-02-17-nasa-trl-software-mapping/</link>
      <pubDate>Sat, 17 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2024-02-17-nasa-trl-software-mapping/</guid>
      <description>&lt;p&gt;NASA&amp;rsquo;s Technology Readiness Levels (TRLs) have become a standard way to assess the maturity of technologies in certain industries like aerospace and defense. Originally developed by &lt;a href=&#34;https://www.nasa.gov/directorates/heo/scan/engineering/technology/technology_readiness_level/&#34;&gt;NASA in the 1970s&lt;/a&gt;, TRLs provide a consistent framework for evaluating how close a technology is to being deployment-ready. This framework has become increasingly relevant for modern software development, particularly in &lt;a href=&#34;https://mcginniscommawill.com/posts/2024-03-15-science-engineering-methodology-startups/&#34;&gt;technical startups&lt;/a&gt; dealing with emerging technologies.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Succulent Meals: A Curated Recipe Collection</title>
      <link>https://mcginniscommawill.com/guides/recipe-guide/</link>
      <pubDate>Thu, 08 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/recipe-guide/</guid>
      <description>&lt;p&gt;A collection of recipes I&amp;rsquo;ve written about over the years, organized by category. Each recipe links to a detailed post with full instructions and often a story behind the dish. This is democracy manifest.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pasta-and-gnocchi&#34;&gt;Pasta and Gnocchi&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2021-03-15-sweet-potato-gnocchi/&#34;&gt;Sweet Potato Gnocchi&lt;/a&gt; - A cyclist&amp;rsquo;s comfort food, perfect for batch cooking and post-ride recovery&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2020-07-20-gordon-ramsay-style-bolognese/&#34;&gt;Gordon Ramsay-Style Bolognese&lt;/a&gt; - A quick and flavorful take on the classic sauce&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-01-19-beef-shortrib-ragu/&#34;&gt;Beef Short Rib Ragu&lt;/a&gt; - A rich, slow-cooked Italian classic&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-04-19-german-white-asparagus-pasta/&#34;&gt;Spargelzeit: German White Asparagus Pasta&lt;/a&gt; - A classic spring dish featuring Germany&amp;rsquo;s beloved white asparagus in a delicate cream sauce&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;soups-and-stews&#34;&gt;Soups and Stews&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2024-12-20-recipe-finnish-salmon-soup/&#34;&gt;Finnish Salmon Soup (Lohikeitto)&lt;/a&gt; - A comforting Nordic classic with fresh salmon and dill&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-04-12-celery-soup/&#34;&gt;Celery Soup&lt;/a&gt; - A simple yet surprisingly delicious soup that elevates celery from background ingredient to star of the show&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;sauces-and-condiments&#34;&gt;Sauces and Condiments&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2022-03-15-salsa-de-cacahuate/&#34;&gt;Salsa de Cacahuate&lt;/a&gt; - A complex Mexican peanut salsa&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-04-05-fermented-hot-sauce/&#34;&gt;Fermented Hot Sauce&lt;/a&gt; - A foolproof method for making lacto-fermented hot sauce at home with just peppers, salt, and time&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-03-08-kimchi/&#34;&gt;Napa Cabbage Kimchi (Mak Kimchi)&lt;/a&gt; - A straightforward recipe for classic Korean fermented napa cabbage.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2023-05-15-peruvian-green-sauce-recipe/&#34;&gt;Peruvian Green Sauce (Aji Verde)&lt;/a&gt; - A ridiculously easy and flavorful recipe for Peruvian green sauce (Aji Verde). Creamy, spicy, herby - you&amp;rsquo;ll want to put this on everything.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2023-07-08-homemade-ginger-syrup/&#34;&gt;Homemade Ginger Syrup&lt;/a&gt; - Whip up a batch of spicy, sweet homemade ginger syrup. Perfect for making your own killer ginger ale or adding a kick to cocktails and tea.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-04-23-simple-dijon-vinaigrette/&#34;&gt;Simple Dijon Vinaigrette&lt;/a&gt; - A versatile, foolproof vinaigrette that elevates any salad with minimal effort and cleanup&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-05-11-simple-chili-crush/&#34;&gt;Simple Chili Crush&lt;/a&gt; - A versatile homemade chili crisp with crispy aromatics and customizable heat levels, perfect for adding depth to any dish&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;cocktails-and-spirits&#34;&gt;Cocktails and Spirits&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2020-06-15-making-limoncello/&#34;&gt;Homemade Limoncello&lt;/a&gt; - A bright, citrusy Italian digestif perfect for summer evenings&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-03-29-pastis-cocktail/&#34;&gt;Homemade Pastis&lt;/a&gt; - A simplified recipe for the classic French anise-flavored spirit&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2023-11-01-melloncello-recipe/&#34;&gt;Homemade Melloncello (Cantaloupe Liqueur)&lt;/a&gt; - Capture the taste of summer with this easy recipe for homemade Melloncello, a sweet and fragrant cantaloupe liqueur perfect for sipping chilled.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2023-09-22-banana-liqueur-cocktails/&#34;&gt;Banana Old Fashioned: A Surprisingly Good Twist&lt;/a&gt; - Don&amp;rsquo;t knock it till you try it! A recipe for a Banana Old Fashioned, using that dusty bottle of banana liqueur for a subtle, fruity depth.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-06-03-tinto-de-verano-recipe/&#34;&gt;Tinto de Verano: Spain&amp;rsquo;s Perfect Summer Drink&lt;/a&gt; - The simplest Spanish cocktail that beats sangria every time. Just red wine, lemon soda, and a slice of lemon - refreshing summer perfection.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;mains&#34;&gt;Mains&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2024-05-12-mothers-day-colcannon-coq-au-vin/&#34;&gt;Mother&amp;rsquo;s Day Colcannon and Coq au Vin&lt;/a&gt; - Classic Irish and French comfort dishes&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2019-08-15-basil-tomato-chicken-sausage/&#34;&gt;Chicken Sausage&lt;/a&gt; - Fresh homemade sausage&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-02-20-shakshuka-huevos-rancheros/&#34;&gt;Shakshuka and Huevos Rancheros&lt;/a&gt; - Two classic egg dishes: Middle Eastern Shakshuka and Mexican Huevos Rancheros&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-06-07-microwave-egg-fluff/&#34;&gt;Microwave Egg Fluff&lt;/a&gt; - A surprisingly delicious and fluffy microwave egg technique using mayonnaise&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-03-16-chile-colorado/&#34;&gt;Chile Colorado Recipe&lt;/a&gt; - Traditional Mexican pork stew in red chile sauce&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2024-08-07-chicken-adobo/&#34;&gt;Filipino Chicken Adobo&lt;/a&gt; - A simple yet flavorful recipe for classic Filipino chicken adobo.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2024-11-07-salmon-croquettes/&#34;&gt;Classic Salmon Croquettes&lt;/a&gt; - Easy and delicious salmon patties, perfect for a quick weeknight meal.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-05-17-pad-kra-pao/&#34;&gt;Pad Kra Pao (Thai Basil Stir-Fry)&lt;/a&gt; - The ultimate Thai comfort food: fast, spicy ground pork stir-fried with holy basil and served over rice with a fried egg&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-06-08-spiced-chicken-thighs-couscous/&#34;&gt;Moroccan-Inspired Spiced Chicken Thighs with Couscous&lt;/a&gt; - One-pan magic with warm North African spices, finished in the oven to prevent burning&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-06-01-hainanese-chicken-rice/&#34;&gt;Hainanese Chicken Rice&lt;/a&gt; - Master the art of perfectly poached chicken, fragrant rice cooked in chicken fat&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-06-28-coconut-milk-poached-kobia-with-tajin/&#34;&gt;Coconut Milk Poached Kobia&lt;/a&gt; - A simple yet elegant fish dish featuring kobia poached in coconut milk&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-09-10-grilled-marinated-wings/&#34;&gt;Two Ways: Grilled Marinated Wings&lt;/a&gt; - Perfectly grilled chicken wings with two distinct marinades: lemon pepper and fish sauce&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-09-12-smoked-chicken-alabama-white-sauce/&#34;&gt;Smoked Chicken with Alabama White Sauce&lt;/a&gt; - Smoky grilled chicken elevated with tangy, creamy Alabama white BBQ sauce&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;sides&#34;&gt;Sides&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2024-11-15-favorite-side-dishes/&#34;&gt;Favorite Side Dishes&lt;/a&gt; - A collection of go-to side dish recipes&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2024-06-15-succotash/&#34;&gt;Simple Summer Succotash&lt;/a&gt; - A quick and classic recipe for succotash, perfect as a side dish.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-04-26-honey-sriracha-brussels-sprouts/&#34;&gt;Honey Sriracha Brussels Sprouts&lt;/a&gt; - Crispy Brussels sprouts caramelized in bacon fat and finished with a sweet-spicy glaze&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-08-04-cowboy-caviar/&#34;&gt;Cowboy Caviar&lt;/a&gt; - A fresh and zesty Tex-Mex salad perfect for summer gatherings&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;desserts&#34;&gt;Desserts&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2025-05-03-lavender-creme-brulee/&#34;&gt;Lavender Creme Brulee&lt;/a&gt; - An elegant twist on the classic dessert featuring subtle floral notes from culinary lavender and a perfectly caramelized sugar top&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;breads-and-tortillas&#34;&gt;Breads and Tortillas&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2019-11-25-flour-tortillas-with-lard/&#34;&gt;Traditional Flour Tortillas&lt;/a&gt; - Authentic Mexican-style tortillas made with lard&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2020-05-12-no-knead-beer-bread/&#34;&gt;No-Knead Beer Bread&lt;/a&gt; - A rustic bread using beer for extra depth and flavor&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2022-09-03-72-hour-fermented-pizza-dough/&#34;&gt;72-Hour Fermented Pizza Dough&lt;/a&gt; - Long-fermented Neapolitan-style pizza dough&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mcginniscommawill.com/posts/2023-07-18-authentic-corn-tortillas/&#34;&gt;Authentic Corn Tortillas&lt;/a&gt; - Traditional Mexican corn tortillas from masa harina&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;on-the-wishlist&#34;&gt;On the Wishlist&lt;/h2&gt;&#xA;&lt;p&gt;Things I want to cook but haven&amp;rsquo;t gotten around to yet. These are recipes I&amp;rsquo;ve researched, bookmarked, or thought about for a while. A reminder that cooking, like democracy, is something you must participate in. When I finally make them, they&amp;rsquo;ll graduate to proper posts above.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Complete Guide to Mountain Biking in Atlanta</title>
      <link>https://mcginniscommawill.com/library/atlanta-mtb-guide/</link>
      <pubDate>Sat, 20 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/library/atlanta-mtb-guide/</guid>
      <description>&lt;p&gt;Atlanta&amp;rsquo;s mountain biking scene offers something for everyone, whether you&amp;rsquo;re looking for a quick after-work ride or planning a full weekend adventure. This guide breaks down the best trails based on when you&amp;rsquo;re most likely to ride them.&lt;/p&gt;&#xA;&lt;p&gt;This guide is a work in progress, and I&amp;rsquo;ll be adding more content over time. I&amp;rsquo;ve ridden these all many times of course, but dont have pictures of them all yet.&lt;/p&gt;&#xA;&lt;h2 id=&#34;weekday-rides-itp--close-in&#34;&gt;Weekday Rides (ITP &amp;amp; Close-In)&lt;/h2&gt;&#xA;&lt;p&gt;These trails are perfect for after-work sessions or quick rides when time is limited. All are either inside the perimeter or just outside, making them accessible for most Atlanta residents within 30 minutes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Will&#39;s Guide to Atlanta&#39;s Natural Parks and Green Spaces</title>
      <link>https://mcginniscommawill.com/library/atlanta-parks-guide/</link>
      <pubDate>Sat, 20 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/library/atlanta-parks-guide/</guid>
      <description>&lt;p&gt;As someone who has spent years exploring Atlanta&amp;rsquo;s green spaces, I&amp;rsquo;ve developed a strong preference for parks that offer a true escape from the urban environment. This guide focuses on parks where nature takes center stage - places where you can forget you&amp;rsquo;re in a major city, where concrete gives way to dirt paths, and where the sounds of birds override the hum of traffic. While I&amp;rsquo;ll note which parks have playgrounds (as a parent, I know how crucial this information is), this guide emphasizes the more naturalistic aspects of each space.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Startup Structure and Information Flow</title>
      <link>https://mcginniscommawill.com/posts/2024-01-18-startup-structure-and-information-flow/</link>
      <pubDate>Thu, 18 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2024-01-18-startup-structure-and-information-flow/</guid>
      <description>&lt;p&gt;&lt;em&gt;The following is excerpted and adapted from my private notes during my time at &lt;a href=&#34;https://www.crunchbase.com/organization/predikto&#34;&gt;Predikto&lt;/a&gt; (2014-2018), exploring how information flows through startups and its impact on company structure. This is part of a series on startup organization and methodology, including posts on &lt;a href=&#34;https://mcginniscommawill.com/posts/2024-03-15-science-engineering-methodology-startups/&#34;&gt;Science vs. Engineering in Startups&lt;/a&gt; and &lt;a href=&#34;https://mcginniscommawill.com/posts/2024-04-15-decision-making-under-uncertainty/&#34;&gt;Decision Making Under Uncertainty&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trail Report: Chewacla State Park</title>
      <link>https://mcginniscommawill.com/posts/2023-11-26-chewacla-state-park/</link>
      <pubDate>Sun, 26 Nov 2023 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2023-11-26-chewacla-state-park/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s amazing how much can change in a decade. During my time as an undergraduate and graduate student at Auburn University, Auburn had a handful of basic trails at best - more of a &amp;ldquo;better than nothing&amp;rdquo; option than a destination. Fast forward to today, and the state park has undergone nothing short of a renaissance, now with over 20 miles of some of the most impressive singletrack I&amp;rsquo;ve ridden.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Homemade Melloncello (Cantaloupe Liqueur)</title>
      <link>https://mcginniscommawill.com/posts/2023-11-01-melloncello-recipe/</link>
      <pubDate>Wed, 01 Nov 2023 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2023-11-01-melloncello-recipe/</guid>
      <description>&lt;p&gt;If you love Limoncello, get ready to meet its delightful summer cousin: Melloncello! Made with fragrant cantaloupe instead of lemons, this homemade liqueur is very sweet, smooth, and tastes like pure sunshine.&lt;/p&gt;&#xA;&lt;p&gt;It follows the same basic principle - infusing fruit into high-proof alcohol and then sweetening it with simple syrup. It takes a bit of patience for the infusion, but the process itself is incredibly simple, and the result is a beautiful, unique liqueur perfect for sipping ice-cold after dinner or adding a summery twist to cocktails.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Angel Investing</title>
      <link>https://mcginniscommawill.com/guides/angel-investing-guide/</link>
      <pubDate>Mon, 30 Oct 2023 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/guides/angel-investing-guide/</guid>
      <description>&lt;h2 id=&#34;my-angel-investing-journey&#34;&gt;My Angel Investing Journey&lt;/h2&gt;&#xA;&lt;p&gt;I started angel investing because I wanted to put my money where my mouth was. After years of working at startups and advising founders, I figured the best way to learn was to actually write checks. This series documents that journey: the thesis I developed, the deals I made, and what I learned along the way.&lt;/p&gt;&#xA;&lt;p&gt;Every investment review in this series is written with the same goal: to be honest about what I saw, what I thought, and what happened. Some of these companies have done well. Others haven&amp;rsquo;t. That&amp;rsquo;s the nature of early-stage investing, and pretending otherwise wouldn&amp;rsquo;t help anyone.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Investment Review: Scout Space Systems</title>
      <link>https://mcginniscommawill.com/posts/2023-10-30-investment-scout-space-systems/</link>
      <pubDate>Mon, 30 Oct 2023 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2023-10-30-investment-scout-space-systems/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my angel investing series where I review investments after they&amp;rsquo;re completed. These posts are not investment advice, solicitations, or offers of any kind. They are simply my thoughts on companies I&amp;rsquo;ve invested in and how they fit into my thesis.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;For background on my approach to angel investing and my investment thesis, see my &lt;a href=&#34;https://mcginniscommawill.com/posts/2021-10-15-introducing-angel-investing-series&#34;&gt;introduction to this series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;company-overview&#34;&gt;Company Overview&lt;/h2&gt;&#xA;&lt;p&gt;Scout Space Systems is building a plug and play sattelite data collection platform. As more and more things get launched, there are more and more things to avoid, and the scout systems platform helps spacecraft autonomosly avoid collisions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Banana Old Fashioned: A Surprisingly Good Twist</title>
      <link>https://mcginniscommawill.com/posts/2023-09-22-banana-liqueur-cocktails/</link>
      <pubDate>Fri, 22 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2023-09-22-banana-liqueur-cocktails/</guid>
      <description>&lt;p&gt;Got a bottle of banana liqueur gathering dust? Before you dismiss it, consider this: it makes a surprisingly good Old Fashioned. The liqueur adds a subtle sweetness and fruity depth that pairs beautifully with bourbon or rye. Seriously, give it a try.&lt;/p&gt;&#xA;&lt;p&gt;It sounds a bit weird on paper, but the key is balance. You&amp;rsquo;re not making a banana bomb, just adding a nuanced layer to a classic.&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Banana Old Fashioned&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 1&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 5 min&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;2 oz Bourbon or Rye Whiskey:&lt;/strong&gt; Choose something decent you enjoy sipping.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;¼ oz Banana Liqueur:&lt;/strong&gt; Quality matters here.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;1-2 dashes Angostura Bitters:&lt;/strong&gt; Classic choice. Feel free to experiment with chocolate or mole bitters too.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Optional: 1 bar spoon Simple Syrup:&lt;/strong&gt; (1:1 or 2:1 ratio). Adjust based on the sweetness of your liqueur and your personal preference. You might not need any.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Orange Peel:&lt;/strong&gt; For garnish.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Large Ice Cube:&lt;/strong&gt; For serving (or fresh regular ice).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;instructions&#34;&gt;Instructions&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Combine:&lt;/strong&gt; Add the whiskey, banana liqueur, bitters, and simple syrup (if using) to a mixing glass.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Add Ice:&lt;/strong&gt; Fill the mixing glass generously with ice.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Stir:&lt;/strong&gt; Stir continuously with a bar spoon for about 30 seconds. You want it well-chilled and slightly diluted, but not watery.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Strain:&lt;/strong&gt; Strain the mixture into a chilled rocks glass over a large ice cube.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Garnish:&lt;/strong&gt; Take a fresh orange peel, twist it over the surface of the drink to express the oils, then drop it into the glass or run it around the rim and discard.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Enjoy this unexpectedly delicious take on a classic! Let me know what you think.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Investment Review: Jericho Security</title>
      <link>https://mcginniscommawill.com/posts/2023-08-24-investment-jericho-security/</link>
      <pubDate>Thu, 24 Aug 2023 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2023-08-24-investment-jericho-security/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my angel investing series where I review investments after they&amp;rsquo;re completed. These posts are not investment advice, solicitations, or offers of any kind. They are simply my thoughts on companies I&amp;rsquo;ve invested in and how they fit into my thesis.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;For background on my approach to angel investing and my investment thesis, see my &lt;a href=&#34;https://mcginniscommawill.com/posts/2021-10-15-introducing-angel-investing-series&#34;&gt;introduction to this series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;company-overview&#34;&gt;Company Overview&lt;/h2&gt;&#xA;&lt;p&gt;Jericho Security is building a new approach to security training for enterprises. They&amp;rsquo;re using AI to help better prepare employees for the rapidly changing threat landscape.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trail Report: Ludington School Forest Trails</title>
      <link>https://mcginniscommawill.com/posts/2023-08-15-ludington-school-forest/</link>
      <pubDate>Tue, 15 Aug 2023 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2023-08-15-ludington-school-forest/</guid>
      <description>&lt;p&gt;Much like the &lt;a href=&#34;https://mcginniscommawill.com/posts/2020-07-04-point-washington-trails&#34;&gt;trails at Point Washington State Forest&lt;/a&gt;, the School Forest Trails in Ludington aren&amp;rsquo;t destination riding - but they absolutely should be part of your summer beach vacation plans if you find yourself on Michigan&amp;rsquo;s west coast (which you should).&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/trails/luddington_1.jpeg&#34; alt=&#34;Ludington School Forest Trails&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The trail system offers about 5-10 miles of purpose-built singletrack through a quintessential Michigan forest, more than is on the offiical map I think. What makes these trails special is their setting - you&amp;rsquo;re riding through a dense canopy with a carpet of ferns below, creating an almost magical atmosphere that&amp;rsquo;s particularly stunning in the summer months. The trails are well-thought-out, allowing you to easily string together longer rides by combining different loops.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Authentic Corn Tortillas</title>
      <link>https://mcginniscommawill.com/posts/2023-07-18-authentic-corn-tortillas/</link>
      <pubDate>Tue, 18 Jul 2023 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2023-07-18-authentic-corn-tortillas/</guid>
      <description>&lt;p&gt;Corn tortillas are the foundation of Mexican cuisine, dating back thousands of years. Made with just masa harina (nixtamalized corn flour) and water, these are quick and easy to make, and a trillion times better than store bought.&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Authentic Corn Tortillas&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 15-18 tortillas&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 10 min &amp;#43; 30 min rest&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 15 min&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2 cups (240g) masa harina (corn flour)&lt;/li&gt;&#xA;&lt;li&gt;1½ to 2 cups (350-475ml) warm water&lt;/li&gt;&#xA;&lt;li&gt;½ teaspoon salt&lt;/li&gt;&#xA;&lt;li&gt;Extra masa harina for handling&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;method&#34;&gt;Method&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Make the Dough&lt;/strong&gt;: Mix masa harina and salt in a large bowl. Gradually add 1½ cups warm water while mixing. Knead until dough forms. Add more water if needed. Dough should feel like soft play-dough. Cover and rest 30 minutes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Homemade Ginger Syrup (Your Shortcut to Amazing Ginger Ale)</title>
      <link>https://mcginniscommawill.com/posts/2023-07-08-homemade-ginger-syrup/</link>
      <pubDate>Sat, 08 Jul 2023 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2023-07-08-homemade-ginger-syrup/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;ve only ever had ginger ale from a can, you&amp;rsquo;re missing out. Homemade ginger syrup makes all the difference - it&amp;rsquo;s got that fresh, fiery kick that the commercial stuff just can&amp;rsquo;t match. And the best part? It&amp;rsquo;s ridiculously easy to make.&lt;/p&gt;&#xA;&lt;p&gt;Seriously, it&amp;rsquo;s just ginger, sugar, and water simmered together until your whole kitchen smells warm and spicy. Once you have a bottle of this golden goodness in your fridge, you&amp;rsquo;re just a splash of soda water away from the most refreshing ginger ale you&amp;rsquo;ve ever had.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Investment Review: Switchyards</title>
      <link>https://mcginniscommawill.com/posts/2023-06-07-investment-switchyards/</link>
      <pubDate>Wed, 07 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2023-06-07-investment-switchyards/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my angel investing series where I review investments after they&amp;rsquo;re completed. These posts are not investment advice, solicitations, or offers of any kind. They are simply my thoughts on companies I&amp;rsquo;ve invested in and how they fit into my thesis.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;For background on my approach to angel investing and my investment thesis, see my &lt;a href=&#34;https://mcginniscommawill.com/posts/2021-10-15-introducing-angel-investing-series&#34;&gt;introduction to this series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;company-overview&#34;&gt;Company Overview&lt;/h2&gt;&#xA;&lt;p&gt;Switchyards is reimagining the neighborhood workspace. They&amp;rsquo;re building beautiful, community-focused workspaces in residential neighborhoods rather than downtown areas, meeting people where they actually live and creating local communities around work. Their vibe is significantly better than you&amp;rsquo;re thinking.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Peruvian Green Sauce (Aji Verde): The Most Addicting Sauce Ever?</title>
      <link>https://mcginniscommawill.com/posts/2023-05-15-peruvian-green-sauce-recipe/</link>
      <pubDate>Mon, 15 May 2023 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2023-05-15-peruvian-green-sauce-recipe/</guid>
      <description>&lt;p&gt;Alright, let&amp;rsquo;s talk about Aji Verde, aka Peruvian Green Sauce. If you&amp;rsquo;ve ever been to a Peruvian chicken joint, you&amp;rsquo;ve probably seen those squeeze bottles of bright green stuff on the table. That&amp;rsquo;s it. And let me tell you, it&amp;rsquo;s dangerously good. Creamy, spicy, packed with cilantro and lime - it makes pretty much anything taste incredible.&lt;/p&gt;&#xA;&lt;p&gt;Put this on roast chicken (obviously), tacos, eggs, roasted veggies, fries, or honestly, just eat it with a spoon. No judgment here.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From Weekend Hack to Core Tool: The category_encoders Journey</title>
      <link>https://mcginniscommawill.com/posts/2022-12-27-category-encoders-journey/</link>
      <pubDate>Tue, 27 Dec 2022 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2022-12-27-category-encoders-journey/</guid>
      <description>&lt;p&gt;Every year during the quiet week between Christmas and New Year&amp;rsquo;s, I find myself checking in on &lt;a href=&#34;https://github.com/scikit-learn-contrib/category_encoders&#34;&gt;category_encoders&lt;/a&gt;. What started as a weekend programming experiment has evolved into something I never could have imagined.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-humble-beginnings&#34;&gt;The Humble Beginnings&lt;/h2&gt;&#xA;&lt;p&gt;The project began as a simple playground for experimenting with different categorical encoding methods. It was just me, tinkering with various approaches to handle categorical variables in machine learning pipelines. The initial version was rough around the edges - more of a proof of concept than a production-ready library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Investment Review: DeepSentinel</title>
      <link>https://mcginniscommawill.com/posts/2022-10-28-investment-deepsentinel/</link>
      <pubDate>Fri, 28 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2022-10-28-investment-deepsentinel/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my angel investing series where I review investments after they&amp;rsquo;re completed. These posts are not investment advice, solicitations, or offers of any kind. They are simply my thoughts on companies I&amp;rsquo;ve invested in and how they fit into my thesis.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;For background on my approach to angel investing and my investment thesis, see my &lt;a href=&#34;https://mcginniscommawill.com/posts/2021-10-15-introducing-angel-investing-series&#34;&gt;introduction to this series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;company-overview&#34;&gt;Company Overview&lt;/h2&gt;&#xA;&lt;p&gt;DeepSentinel is building AI-powered security systems for businesses and homes. Their technology combines advanced computer vision with human monitoring to provide real-time threat detection and response, dramatically reducing false positives while improving response times.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Investment Review: Seer.ai</title>
      <link>https://mcginniscommawill.com/posts/2022-10-18-investment-seer-ai/</link>
      <pubDate>Tue, 18 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2022-10-18-investment-seer-ai/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my angel investing series where I review investments after they&amp;rsquo;re completed. These posts are not investment advice, solicitations, or offers of any kind. They are simply my thoughts on companies I&amp;rsquo;ve invested in and how they fit into my thesis.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;For background on my approach to angel investing and my investment thesis, see my &lt;a href=&#34;https://mcginniscommawill.com/posts/2021-10-15-introducing-angel-investing-series&#34;&gt;introduction to this series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;company-overview&#34;&gt;Company Overview&lt;/h2&gt;&#xA;&lt;p&gt;Finally, something in the space part of my thesis. Seer.ai is a data and analytics platform for spatiotemporal data.&lt;/p&gt;&#xA;&lt;p&gt;More satelites, more geospatial data, more need for platforms to extract value from it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Investment: Cambrium Bio</title>
      <link>https://mcginniscommawill.com/posts/2022-09-27-investment-cambrium-bio/</link>
      <pubDate>Tue, 27 Sep 2022 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2022-09-27-investment-cambrium-bio/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my angel investing series where I review investments after they&amp;rsquo;re completed. These posts are not investment advice, solicitations, or offers of any kind. They are simply my thoughts on companies I&amp;rsquo;ve invested in and how they fit into my thesis.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;For background on my approach to angel investing and my investment thesis, see my &lt;a href=&#34;https://mcginniscommawill.com/posts/2021-10-15-introducing-angel-investing-series&#34;&gt;introduction to this series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;company-overview&#34;&gt;Company Overview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.cambrium.bio&#34;&gt;Cambrium Bio&lt;/a&gt; is using synthetic biology to create sustainable alternatives to luxury materials. Their initial focus is on creating bio-identical proteins found in luxury goods, enabling high-end fashion and cosmetics brands to create sustainable products without compromising on quality or performance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>72-Hour Fermented Pizza Dough</title>
      <link>https://mcginniscommawill.com/posts/2022-09-03-72-hour-fermented-pizza-dough/</link>
      <pubDate>Sat, 03 Sep 2022 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2022-09-03-72-hour-fermented-pizza-dough/</guid>
      <description>&lt;p&gt;This pizza dough recipe uses a long, cold fermentation process to develop complex flavors and perfect texture. The extended fermentation time breaks down proteins and starches, resulting in a more digestible dough with better flavor and a beautiful brown crust. This recipe is inspired by traditional Neapolitan pizza-making techniques.&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;72-Hour Fermented Pizza Dough&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 4 pizzas&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 30 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Total:&lt;/strong&gt; 72 hours&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;p&gt;For 4 pizza doughs (250g each):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;600g &amp;ldquo;00&amp;rdquo; flour (or bread flour)&lt;/li&gt;&#xA;&lt;li&gt;400g cold water (66% hydration)&lt;/li&gt;&#xA;&lt;li&gt;12g fine sea salt (2%)&lt;/li&gt;&#xA;&lt;li&gt;2g active dry yeast (0.3%)&lt;/li&gt;&#xA;&lt;li&gt;15g extra virgin olive oil (optional, for softer crust)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;method&#34;&gt;Method&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Initial Mix&lt;/strong&gt; (Day 1): Dissolve yeast in 50g of the water. Mix flour and remaining water until no dry flour remains. Let rest 30 minutes (autolyse). Add salt, yeast mixture, and oil if using. Mix until dough comes together. Cover and rest 30 minutes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exploring Cochran Mill Trails: A Mountain Biking Haven</title>
      <link>https://mcginniscommawill.com/posts/2022-06-15-cochran-mill-trails/</link>
      <pubDate>Wed, 15 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2022-06-15-cochran-mill-trails/</guid>
      <description>&lt;p&gt;Just outside the bustle of Atlanta lies Cochran Mill Park, home to some of the most natural-feeling trails in the metro area. Unlike the more manicured trail systems that dominate the region, these handcut trails offer a refreshingly raw mountain biking experience that feels more discovered than designed.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/trails/cochran_mill_1.jpeg&#34; alt=&#34;Cochran Mill Park trails&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The trail system is beautifully simple - two main loops that provide distinctly different experiences. The Yellow Trail offers 5.7 miles of approachable intermediate riding, while the Red Trail steps things up with 6.1 miles of more technical terrain featuring more challenging rock sections. Both loops maintain that authentic cross-country singletrack feel that&amp;rsquo;s becoming increasingly rare in modern trail systems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Investment Review: Beyond Aero</title>
      <link>https://mcginniscommawill.com/posts/2022-05-26-investment-beyond-aero/</link>
      <pubDate>Thu, 26 May 2022 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2022-05-26-investment-beyond-aero/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my angel investing series where I review investments after they&amp;rsquo;re completed. These posts are not investment advice, solicitations, or offers of any kind. They are simply my thoughts on companies I&amp;rsquo;ve invested in and how they fit into my thesis.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;For background on my approach to angel investing and my investment thesis, see my &lt;a href=&#34;https://mcginniscommawill.com/posts/2021-10-15-introducing-angel-investing-series&#34;&gt;introduction to this series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;company-overview&#34;&gt;Company Overview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.beyond.aero/&#34;&gt;Beyond Aero&lt;/a&gt; is developing zero-emission hydrogen-propelled private aircraft. Their approach targets the private aviation market first, where customers are both price-insensitive and increasingly conscious of their environmental impact. This follows a similar pattern to Tesla&amp;rsquo;s entry into the automotive market - starting with high-end vehicles to fund the development of more accessible options.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Investment Review: Alga Biosciences</title>
      <link>https://mcginniscommawill.com/posts/2022-04-30-investment-alga-biosciences/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2022-04-30-investment-alga-biosciences/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my angel investing series where I review investments after they&amp;rsquo;re completed. These posts are not investment advice, solicitations, or offers of any kind. They are simply my thoughts on companies I&amp;rsquo;ve invested in and how they fit into my thesis.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;For background on my approach to angel investing and my investment thesis, see my &lt;a href=&#34;https://mcginniscommawill.com/posts/2021-10-15-introducing-angel-investing-series&#34;&gt;introduction to this series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;company-overview&#34;&gt;Company Overview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.algabio.com&#34;&gt;Alga Biosciences&lt;/a&gt; is developing novel approaches to greenhouse gas reduction using engineered algae strains. Their initial product is an engineered algae food additive for livestock that can reduce methane emissions by up to 90%. This approach is particularly compelling because it addresses one of agriculture&amp;rsquo;s largest environmental impacts while simultaneously improving feed efficiency.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Salsa de Cacahuate (Mexican Peanut Salsa)</title>
      <link>https://mcginniscommawill.com/posts/2022-03-15-salsa-de-cacahuate/</link>
      <pubDate>Tue, 15 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2022-03-15-salsa-de-cacahuate/</guid>
      <description>&lt;p&gt;Salsa de Cacahuate is a lesser-known Mexican salsa that deserves more attention. This peanut-based sauce combines the richness of roasted peanuts with the heat of chiles de árbol and the depth of roasted garlic. While not as common as tomato-based salsas, it&amp;rsquo;s incredible on tacos, grilled meats, or as a dip.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/recipes/cacahuate.png&#34; alt=&#34;recipe guide&#34;&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Salsa de Cacahuate&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; ~2 cups&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 15 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 20 min&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1 cup raw peanuts (unsalted)&lt;/li&gt;&#xA;&lt;li&gt;6-8 chiles de árbol (adjust to taste)&lt;/li&gt;&#xA;&lt;li&gt;4 cloves garlic, unpeeled&lt;/li&gt;&#xA;&lt;li&gt;2 roma tomatoes&lt;/li&gt;&#xA;&lt;li&gt;1/2 white onion&lt;/li&gt;&#xA;&lt;li&gt;2 tablespoons vegetable oil&lt;/li&gt;&#xA;&lt;li&gt;1 cup water (or more for desired consistency)&lt;/li&gt;&#xA;&lt;li&gt;1 teaspoon salt (or to taste)&lt;/li&gt;&#xA;&lt;li&gt;1/2 teaspoon Mexican oregano (optional)&lt;/li&gt;&#xA;&lt;li&gt;1 tablespoon apple cider vinegar&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;instructions&#34;&gt;Instructions&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In a dry skillet over medium heat, toast the peanuts until golden brown and fragrant, about 5-7 minutes. Stir constantly to prevent burning. Set aside.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Investment Review: Semicab</title>
      <link>https://mcginniscommawill.com/posts/2022-01-20-investment-semicab/</link>
      <pubDate>Thu, 20 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2022-01-20-investment-semicab/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my angel investing series where I review investments after they&amp;rsquo;re completed. These posts are not investment advice, solicitations, or offers of any kind. They are simply my thoughts on companies I&amp;rsquo;ve invested in and how they fit into my thesis.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;For background on my approach to angel investing and my investment thesis, see my &lt;a href=&#34;https://mcginniscommawill.com/posts/2021-10-15-introducing-angel-investing-series&#34;&gt;introduction to this series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;company-overview&#34;&gt;Company Overview&lt;/h2&gt;&#xA;&lt;p&gt;Semicab is building a collaborative transportation platform that connects shippers, carriers, and brokers in real-time. They&amp;rsquo;re essentially creating a marketplace that helps reduce empty miles in trucking while providing better visibility and efficiency for all parties involved in freight movement.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Investment Review: The Essential (formerly Move.co)</title>
      <link>https://mcginniscommawill.com/posts/2022-01-19-investment-the-essential/</link>
      <pubDate>Wed, 19 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2022-01-19-investment-the-essential/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my angel investing series where I review investments after they&amp;rsquo;re completed. These posts are not investment advice, solicitations, or offers of any kind. They are simply my thoughts on companies I&amp;rsquo;ve invested in and how they fit into my thesis.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;For background on my approach to angel investing and my investment thesis, see my &lt;a href=&#34;https://mcginniscommawill.com/posts/2021-10-15-introducing-angel-investing-series&#34;&gt;introduction to this series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;company-overview&#34;&gt;Company Overview&lt;/h2&gt;&#xA;&lt;p&gt;The Essential (formerly Move.co) is a members only, private label delivery food service. Think costco, but online, and high end.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trail Report: Rope Mill</title>
      <link>https://mcginniscommawill.com/posts/2022-01-15-rope-mill-trail-report/</link>
      <pubDate>Sat, 15 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2022-01-15-rope-mill-trail-report/</guid>
      <description>&lt;p&gt;Rope Mill Park has evolved into one of metro Atlanta&amp;rsquo;s bigger mountain biking destinations, offering a diverse blend of flow trails and technical challenges along the shores of Lake Allatoona. These are classic SORBA machine built trails, and are close enough to the also popular Blankets Creek to make for a big double day if you&amp;rsquo;re ambitious.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/trails/rope_mill_1.jpeg&#34; alt=&#34;trail&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;trail-system-overview&#34;&gt;Trail System Overview&lt;/h2&gt;&#xA;&lt;p&gt;The park features approximately 12 miles of purpose-built singletrack divided into distinct trails of varying difficulty. The system is well-marked and maintained, making it easy to navigate while providing progression opportunities for riders of all abilities.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Investment Review: Homeroom</title>
      <link>https://mcginniscommawill.com/posts/2022-01-10-investment-homeroom/</link>
      <pubDate>Mon, 10 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2022-01-10-investment-homeroom/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my angel investing series where I review investments after they&amp;rsquo;re completed. These posts are not investment advice, solicitations, or offers of any kind. They are simply my thoughts on companies I&amp;rsquo;ve invested in and how they fit into my thesis.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;For background on my approach to angel investing and my investment thesis, see my &lt;a href=&#34;https://mcginniscommawill.com/posts/2021-10-15-introducing-angel-investing-series&#34;&gt;introduction to this series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;company-overview&#34;&gt;Company Overview&lt;/h2&gt;&#xA;&lt;p&gt;Homeroom is a platform that connects tenants to property owners for co-living. Think of it as a modernized version of AirBnB, but for co-living.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Investment Review: Flexbase</title>
      <link>https://mcginniscommawill.com/posts/2021-12-10-investment-flexbase/</link>
      <pubDate>Fri, 10 Dec 2021 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2021-12-10-investment-flexbase/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my angel investing series where I review investments after they&amp;rsquo;re completed. These posts are not investment advice, solicitations, or offers of any kind. They are simply my thoughts on companies I&amp;rsquo;ve invested in and how they fit into my thesis.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;For background on my approach to angel investing and my investment thesis, see my &lt;a href=&#34;https://mcginniscommawill.com/posts/2021-10-15-introducing-angel-investing-series&#34;&gt;introduction to this series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;company-overview&#34;&gt;Company Overview&lt;/h2&gt;&#xA;&lt;p&gt;Flexbase is building a vertical payments platform for the construction industry. They are focused on solving the problem of how to pay subcontractors in a timely manner, without the need for personal guarantees. With Flexbase,&#xA;companies can issue a card to employees, 1099s, or whoever, and then they can go buy the things they need to get&#xA;jobs done, and pay the card back once the job is complete and the client pays.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing My Angel Investing Journey</title>
      <link>https://mcginniscommawill.com/posts/2021-10-15-introducing-angel-investing-series/</link>
      <pubDate>Fri, 15 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2021-10-15-introducing-angel-investing-series/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been working in, with, and around startups for years now. In the next couple of years, I now have a goal to learn more about the investment side of our industry by making a series of angel investments. In this post, I&amp;rsquo;ll outline my approach to angel investing, including my investment thesis, target sectors and stages, deal flow and evaluation process, and portfolio construction approach.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sweet Potato Gnocchi: A Cyclist&#39;s Comfort Food</title>
      <link>https://mcginniscommawill.com/posts/2021-03-15-sweet-potato-gnocchi/</link>
      <pubDate>Mon, 15 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2021-03-15-sweet-potato-gnocchi/</guid>
      <description>&lt;p&gt;I first discovered this recipe during my college years on PezCycling News - a fantastic resource for cycling culture, racing news, and surprisingly good recipes. This sweet potato gnocchi became a staple in my kitchen, and I&amp;rsquo;d regularly make huge batches to freeze. It&amp;rsquo;s the perfect combination of complex carbs and satisfying texture, ideal for post-ride recovery or a cozy dinner.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/recipes/gnocci.png&#34; alt=&#34;recipe guide&#34;&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Sweet Potato Gnocchi&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 4-6&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 30 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 1 hour (including baking)&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2 large sweet potatoes (about 700g)&lt;/li&gt;&#xA;&lt;li&gt;2½ cups all-purpose flour, plus extra for dusting&lt;/li&gt;&#xA;&lt;li&gt;1 large egg&lt;/li&gt;&#xA;&lt;li&gt;1 tsp salt&lt;/li&gt;&#xA;&lt;li&gt;¼ tsp nutmeg (optional)&lt;/li&gt;&#xA;&lt;li&gt;Black pepper to taste&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;method&#34;&gt;Method&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Cook the Sweet Potatoes&lt;/strong&gt;: Preheat oven to 400°F (200°C). Pierce sweet potatoes several times with a fork. Bake for 45-60 minutes until very tender. Let cool slightly, then peel.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gordon Ramsay&#39;s Spaghetti Bolognese: A Classic Italian Recipe</title>
      <link>https://mcginniscommawill.com/posts/2020-07-20-gordon-ramsay-style-bolognese/</link>
      <pubDate>Mon, 20 Jul 2020 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2020-07-20-gordon-ramsay-style-bolognese/</guid>
      <description>&lt;p&gt;A rich, flavorful bolognese sauce doesn&amp;rsquo;t have to simmer all day. This version, inspired by Gordon Ramsay&amp;rsquo;s method, uses grated vegetables to create a quick yet delicious sauce that&amp;rsquo;s ready quickly.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/recipes/bolognaise.png&#34; alt=&#34;recipe guide&#34;&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Gordon Ramsay-Style Bolognese&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 4&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 15 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 30 min&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1 tbsp olive oil&lt;/li&gt;&#xA;&lt;li&gt;½ onion, grated (about 100g)&lt;/li&gt;&#xA;&lt;li&gt;1 carrot, grated (about 100g)&lt;/li&gt;&#xA;&lt;li&gt;4 cloves garlic, minced&lt;/li&gt;&#xA;&lt;li&gt;2 tsp dried oregano&lt;/li&gt;&#xA;&lt;li&gt;500g lean beef mince&lt;/li&gt;&#xA;&lt;li&gt;2 tbsp tomato paste&lt;/li&gt;&#xA;&lt;li&gt;150ml red wine&lt;/li&gt;&#xA;&lt;li&gt;800g canned chopped tomatoes&lt;/li&gt;&#xA;&lt;li&gt;2 tsp Worcestershire sauce&lt;/li&gt;&#xA;&lt;li&gt;4 tbsp whole milk&lt;/li&gt;&#xA;&lt;li&gt;Salt and black pepper to taste&lt;/li&gt;&#xA;&lt;li&gt;300g dried spaghetti&lt;/li&gt;&#xA;&lt;li&gt;Parmesan cheese, to serve&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;method&#34;&gt;Method&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Prep&lt;/strong&gt;: Grate the onion and carrot. Mince the garlic.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trail Report: Point Washington State Forest Trails</title>
      <link>https://mcginniscommawill.com/posts/2020-07-04-point-washington-trails/</link>
      <pubDate>Sat, 04 Jul 2020 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2020-07-04-point-washington-trails/</guid>
      <description>&lt;p&gt;The Point Washington State Forest trail system offers a surprisingly enjoyable network of singletrack through Florida&amp;rsquo;s coastal pine forests, just minutes from the popular beaches of 30A. In an area where road riding ranges from sketchy to downright dangerous and trail options are limited, these trails are a welcome refuge for cyclists trying to avoid getting hit by tourists.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/trails/30a_1.jpeg&#34; alt=&#34;Point Washington State Forest trails&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Longleaf Greenway Trail, stretching 7.5 miles through the forest, provides a gentle introduction to Florida trail riding. Starting from the Blue Mountain Beach parking lot, the trail immediately sets the tone with a wooden bridge crossing over Red Fish Lake before winding through the pine forest. While mostly flat, the trail keeps things interesting with basically random sandy turns that take some attention at speed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making Limoncello: A Taste of Italian Summer</title>
      <link>https://mcginniscommawill.com/posts/2020-06-15-making-limoncello/</link>
      <pubDate>Mon, 15 Jun 2020 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2020-06-15-making-limoncello/</guid>
      <description>&lt;p&gt;There&amp;rsquo;s something magical about sipping limoncello on a warm summer evening. This bright, citrusy Italian digestif captures the essence of Mediterranean sunshine in every glass. While you could easily pick up a bottle at your local liquor store, there&amp;rsquo;s an incomparable satisfaction in crafting your own.&lt;/p&gt;&#xA;&lt;p&gt;You can also do this with any citruis, grapefruit is superb.&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Homemade Limoncello&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; ~1.5 liters&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 30 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Total:&lt;/strong&gt; 6-12 weeks&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;10-12 fresh, unwaxed lemons, wash them well&lt;/li&gt;&#xA;&lt;li&gt;750ml of high-proof neutral spirit (vodka or grain alcohol)&lt;/li&gt;&#xA;&lt;li&gt;3½ cups water&lt;/li&gt;&#xA;&lt;li&gt;2½ cups sugar&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;equipment&#34;&gt;Equipment&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Glass jars for infusing&lt;/li&gt;&#xA;&lt;li&gt;Bottles for storage&lt;/li&gt;&#xA;&lt;li&gt;Fine-mesh strainer&lt;/li&gt;&#xA;&lt;li&gt;Coffee filters&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;method&#34;&gt;Method&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Prep the Lemons&lt;/strong&gt;: The key here is to only zest the yellow part of the lemon - the white pith will make your limoncello bitter. I&amp;rsquo;ve found a microplane or peeler works best for this, though traditional recipes often use a paring knife.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Baking No-Knead Beer Bread: A Simple, Flavorful Recipe</title>
      <link>https://mcginniscommawill.com/posts/2020-05-12-no-knead-beer-bread/</link>
      <pubDate>Tue, 12 May 2020 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2020-05-12-no-knead-beer-bread/</guid>
      <description>&lt;p&gt;This no-knead bread recipe uses beer instead of water, adding complex flavors and helping with fermentation thanks to the yeast present in the beer. The long, slow fermentation develops gluten without kneading and creates a beautiful, open crumb structure. A dark beer like a stout or porter will work best.&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;No-Knead Beer Bread&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 1 loaf&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 10 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 45-50 min&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Total:&lt;/strong&gt; 14-20 hours&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;3 cups (400g) bread flour&lt;/li&gt;&#xA;&lt;li&gt;1½ teaspoons salt&lt;/li&gt;&#xA;&lt;li&gt;¼ teaspoon instant yeast&lt;/li&gt;&#xA;&lt;li&gt;1½ cups (350ml) room temperature beer&lt;/li&gt;&#xA;&lt;li&gt;Extra flour for dusting&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;equipment&#34;&gt;Equipment&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Large mixing bowl&lt;/li&gt;&#xA;&lt;li&gt;Dutch oven or heavy covered pot&lt;/li&gt;&#xA;&lt;li&gt;Parchment paper&lt;/li&gt;&#xA;&lt;li&gt;Kitchen scale (recommended)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;method&#34;&gt;Method&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Mix the Dough&lt;/strong&gt;: In a large bowl, combine flour, salt, and yeast. Pour in the beer and stir until a shaggy dough forms. The dough will be wet and sticky - this is correct. Cover bowl with plastic wrap or a damp towel.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Traditional Flour Tortillas with Lard</title>
      <link>https://mcginniscommawill.com/posts/2019-11-25-flour-tortillas-with-lard/</link>
      <pubDate>Mon, 25 Nov 2019 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2019-11-25-flour-tortillas-with-lard/</guid>
      <description>&lt;p&gt;These flour tortillas are made the traditional way with lard (manteca), which gives them their characteristic flakiness and tender texture. While you can substitute vegetable shortening, I wouldn&amp;rsquo;t.&lt;/p&gt;&#xA;&lt;div class=&#34;recipe-card&#34;&gt;&#xA;  &lt;header class=&#34;recipe-card__header&#34;&gt;&#xA;    &lt;h3 class=&#34;recipe-card__title&#34;&gt;Traditional Flour Tortillas with Lard&lt;/h3&gt;&#xA;    &lt;div class=&#34;recipe-card__meta&#34;&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Servings:&lt;/strong&gt; 12 tortillas&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Prep:&lt;/strong&gt; 15 min &amp;#43; 40 min rest&lt;/span&gt;&lt;span class=&#34;recipe-card__meta-item&#34;&gt;&lt;strong&gt;Cook:&lt;/strong&gt; 15 min&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;div class=&#34;recipe-card__content&#34;&gt;&#xA;    &lt;h4 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;3 cups (375g) all-purpose flour&lt;/li&gt;&#xA;&lt;li&gt;1 teaspoon salt&lt;/li&gt;&#xA;&lt;li&gt;1 teaspoon baking powder&lt;/li&gt;&#xA;&lt;li&gt;⅓ cup (75g) lard, room temperature&lt;/li&gt;&#xA;&lt;li&gt;1 cup (240ml) warm water&lt;/li&gt;&#xA;&lt;li&gt;Extra flour for rolling&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;method&#34;&gt;Method&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Make the Dough&lt;/strong&gt;: Whisk together flour, salt, and baking powder. Add lard and work into flour with fingertips. Mixture should resemble coarse crumbs. Gradually add warm water while mixing. Knead until smooth, about 5 minutes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Homemade Chicken Sausage with Basil and Thyme</title>
      <link>https://mcginniscommawill.com/posts/2019-08-15-basil-tomato-chicken-sausage/</link>
      <pubDate>Thu, 15 Aug 2019 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2019-08-15-basil-tomato-chicken-sausage/</guid>
      <description>&lt;p&gt;Making sausage at home might seem daunting, but with the right equipment and some patience, it&amp;rsquo;s a rewarding project that gives you complete control over the ingredients and flavors. This chicken sausage, brightened with fresh basil and tomatoes, is lighter than traditional pork sausages but doesn&amp;rsquo;t sacrifice on flavor.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s adapted from Rhulman&amp;rsquo;s recipe, which is a great resource for making sausage at home. Buy his book, and read it like a novel, it&amp;rsquo;s spectacular and eye opening. The absolute bible for at home charcuteries.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trail Report: Basque MTB in Hondarribia</title>
      <link>https://mcginniscommawill.com/posts/2019-05-01-basque-mtb-hondarribia/</link>
      <pubDate>Wed, 01 May 2019 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2019-05-01-basque-mtb-hondarribia/</guid>
      <description>&lt;p&gt;Sometimes the best way to get back into something is to dive in head first. That&amp;rsquo;s exactly what I did with this week-long guided mountain biking tour in the Basque Country of Spain with BasqueMTB, based out of Hondarribia.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/trails/basque_1.jpeg&#34; alt=&#34;Basque Country mountain biking trails&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Despite not being in the best shape at the time, this trip served as the perfect kick in the ass to get back in the saddle as it were. The format was just forgiving enough: each day we&amp;rsquo;d get shuttled to a trailhead, tackle some challenging sections, break for lunch, hit a few more trails, and then return to town for well-deserved tapas. The shuttling cut down on the climbing a good bit, but there was still enough pedaling that I barely made it each day.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reflecting on 2018: A Year of Growth and Transitions</title>
      <link>https://mcginniscommawill.com/posts/2018-12-25-years-end-2018/</link>
      <pubDate>Tue, 25 Dec 2018 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2018-12-25-years-end-2018/</guid>
      <description>&lt;p&gt;I haven&amp;rsquo;t posted a ton this year. It turns out, though, that this has been a symptom of having a very eventful year more-so than of disinterest.&lt;/p&gt;&#xA;&lt;p&gt;Some of you may have seen that earlier this year my startup, Predikto, was acquired by United Technologies. The acquisition was covered in &lt;a href=&#34;http://www.utc.com/News/News-Center/Pages/United-Technologies-Acquires-Predikto-Inc.aspx&#34;&gt;UTC&amp;rsquo;s news center&lt;/a&gt; and the &lt;a href=&#34;https://blogs.wsj.com/cio/2018/08/20/united-technologies-buys-analytics-firm-predikto-to-boost-predictive-maintenance/&#34;&gt;Wall Street Journal&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The process of building and running a company is difficult and stressful, but the process of selling one is worse. While incredibly exciting, cathartic, and encouraging, many of my side projects fell by the wayside. PedalWrencher has been shut down, and Category Encoders has found a fantastic co-maintainer JanMotl, who has done great work to keep the project chugging along.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Category Encoders v1.2.8 Release</title>
      <link>https://mcginniscommawill.com/posts/2018-06-04-category-encoders-v1-2-8-release/</link>
      <pubDate>Mon, 04 Jun 2018 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2018-06-04-category-encoders-v1-2-8-release/</guid>
      <description>&lt;p&gt;Been a while since a release, but category encoders has continued to advance with the help of lots of great contributors. I&amp;rsquo;ve just released v1.2.8, with primarily bugfixes, as well as some new features allowing a user to optionally add the category names in the output column names of some encoders.&lt;/p&gt;&#xA;&lt;p&gt;Check out the new release on &lt;a href=&#34;https://pypi.org/project/category_encoders/&#34;&gt;PyPI&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Or just:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install -U category_encoders&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;There are some open issues, looking for contributors as well, so if you&amp;rsquo;d like to get involved, drop a message on the &lt;a href=&#34;https://github.com/scikit-learn-contrib/categorical-encoding/issues&#34;&gt;GitHub project&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TechEmergence Podcast and Atlanta AI Article</title>
      <link>https://mcginniscommawill.com/posts/2018-06-03-techemergence-podcast-atlanta-ai/</link>
      <pubDate>Sun, 03 Jun 2018 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2018-06-03-techemergence-podcast-atlanta-ai/</guid>
      <description>&lt;p&gt;I recently had the opportunity to join Daniel Faggella on the TechEmergence podcast to discuss predictive maintenance and the growing AI ecosystem in Atlanta. The conversation covered a range of topics from industrial applications of AI to the unique characteristics of Atlanta&amp;rsquo;s technology community.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rethinking Innovation Labs: Bridging Promises and Reality</title>
      <link>https://mcginniscommawill.com/posts/2018-04-16-on-innovation-labs/</link>
      <pubDate>Mon, 16 Apr 2018 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2018-04-16-on-innovation-labs/</guid>
      <description>&lt;p&gt;Innovation labs have become increasingly popular in large corporations over the past decade. These dedicated spaces and teams are meant to foster creativity, drive innovation, and help companies stay competitive in rapidly evolving markets. But their effectiveness and value proposition deserve careful scrutiny.&lt;/p&gt;</description>
    </item>
    <item>
      <title>On Discipline of Creation</title>
      <link>https://mcginniscommawill.com/posts/2018-04-07-on-discipline-of-creation/</link>
      <pubDate>Sat, 07 Apr 2018 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2018-04-07-on-discipline-of-creation/</guid>
      <description>&lt;p&gt;Engineering is at its core a creative endeavor. Entrepreneurship as well. To excel at either is to be fundamentally good at consistently creating solutions to problems, at creating semantic understandings of problems, and to communicate one&amp;rsquo;s work well.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data Engineering Podcast</title>
      <link>https://mcginniscommawill.com/posts/2018-02-20-data-engineering-podcast/</link>
      <pubDate>Tue, 20 Feb 2018 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2018-02-20-data-engineering-podcast/</guid>
      <description>&lt;p&gt;I recently had the opportunity to join Tobias Macey on the Data Engineering Podcast to discuss my work at Predikto and share insights about data engineering in the industrial IoT space. We covered a range of topics including predictive maintenance, the challenges of working with industrial data, and the evolution of data engineering practices in heavy industry.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Category Encoders published in JOSS</title>
      <link>https://mcginniscommawill.com/posts/2018-01-26-category-encoders-published-joss/</link>
      <pubDate>Fri, 26 Jan 2018 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2018-01-26-category-encoders-published-joss/</guid>
      <description>&lt;p&gt;The Journal of Open Source Software (JOSS) is a formal academic peer-reviewed journal (ISSN 2475-9066), intended to be &amp;ldquo;developer friendly&amp;rdquo;. What does that really mean? If you have a project on github, that has some novel value, and is well written, then in probably 30-40 minutes of working time, you can put together a submission.&lt;/p&gt;&#xA;&lt;p&gt;The reviews all take place in github issues, and I got some helpful feedback there, made changes, and eventually got accepted. The process end to end took around a month, and was pretty painless.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Problem with Industrial IoT</title>
      <link>https://mcginniscommawill.com/posts/2018-01-16-problem-with-industrial-iot/</link>
      <pubDate>Tue, 16 Jan 2018 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2018-01-16-problem-with-industrial-iot/</guid>
      <description>&lt;p&gt;The Industrial Internet of Things (IIoT) has been heralded as the next great revolution in manufacturing. The promise of connecting every device, sensor, and machine to gather data and optimize processes is compelling. Yet the reality of implementing IIoT solutions has proven to be much more challenging than initially anticipated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Revisiting Python support in Apache Flink</title>
      <link>https://mcginniscommawill.com/posts/2018-01-11-revisiting-python-support-apache-flink/</link>
      <pubDate>Thu, 11 Jan 2018 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2018-01-11-revisiting-python-support-apache-flink/</guid>
      <description>&lt;p&gt;A couple of years ago I wrote two posts on the fledgling support for python in Apache Flink. To this day, a pretty significant amount of the people who end up on this site from google, end up here after a search for how to use python and flink together, so I thought it would be a good idea to check back in.&lt;/p&gt;&#xA;&lt;p&gt;I pulled down the bleeding-edge version of flink, exactly the same as I did last time, and set things up:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tendencies of Data Engineers and Scientists</title>
      <link>https://mcginniscommawill.com/posts/2018-01-09-tendencies-data-engineers-scientists/</link>
      <pubDate>Tue, 09 Jan 2018 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2018-01-09-tendencies-data-engineers-scientists/</guid>
      <description>&lt;p&gt;In a previous post, I defined the key difference between data engineers and data scientists: data engineers apply engineering methodologies to data problems, while data scientists apply the scientific method to data problems. This fundamental difference in approach leads to interesting dynamics when these roles interact within organizations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I Made a Model, Now What?</title>
      <link>https://mcginniscommawill.com/posts/2018-01-04-i-made-a-model-now-what/</link>
      <pubDate>Thu, 04 Jan 2018 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2018-01-04-i-made-a-model-now-what/</guid>
      <description>&lt;p&gt;Last October, I had the pleasure of giving a talk at PyData Atlanta - a fantastic meetup that I highly recommend for anyone in the Atlanta area. While I&amp;rsquo;d given lightning talks before, this was my first longer format presentation, and the feedback was positive.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Year&#39;s End: Looking back on 2017</title>
      <link>https://mcginniscommawill.com/posts/2017-12-28-years-end-looking-back-2017/</link>
      <pubDate>Thu, 28 Dec 2017 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2017-12-28-years-end-looking-back-2017/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Note: This post has been migrated from my previous blog. Some links and references may point to posts that haven&amp;rsquo;t been migrated to this new site.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As 2017 draws to a close, I&amp;rsquo;m looking back on a year of posts and on what all I did in open source. This past year had decidedly fewer posts than 2016, where I was posting a few times a month pretty consistently, but there were still some nice posts that I&amp;rsquo;ve enjoyed looking back over.&lt;/p&gt;</description>
    </item>
    <item>
      <title>On taking things too seriously: holiday edition</title>
      <link>https://mcginniscommawill.com/posts/2017-12-09-taking-things-seriously-holiday-edition/</link>
      <pubDate>Sat, 09 Dec 2017 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2017-12-09-taking-things-seriously-holiday-edition/</guid>
      <description>&lt;p&gt;For some reason Atlanta got a pretty significant amount of snow yesterday, and because of that I&amp;rsquo;ve been mostly stuck at home. When faced with that kind of time on hand, sometimes I spend too much time on things that don&amp;rsquo;t really matter all that much. Recently, I&amp;rsquo;ve been fascinated with rating systems (see a post on Elote here), so that was in the front of my mind this week.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Elote: a python package of rating systems</title>
      <link>https://mcginniscommawill.com/posts/2017-12-06-elote-python-package-rating-systems/</link>
      <pubDate>Wed, 06 Dec 2017 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2017-12-06-elote-python-package-rating-systems/</guid>
      <description>&lt;p&gt;Recently I&amp;rsquo;ve been interesting in rating systems. Around here the application most front of mind for those is college football rankings. In general, imagine any case you have a large population of things you want to rank, and only a limited set of head-to-head matchups between those things to use for building your ratings. Without a direct comparison point between each possible pair, you&amp;rsquo;ve got to try to be clever.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ripyr: sampled metrics on datasets using python&#39;s asyncio</title>
      <link>https://mcginniscommawill.com/posts/2017-11-28-ripyr-sampled-metrics-datasets-using-pythons-asyncio/</link>
      <pubDate>Tue, 28 Nov 2017 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2017-11-28-ripyr-sampled-metrics-datasets-using-pythons-asyncio/</guid>
      <description>&lt;p&gt;Today I&amp;rsquo;d like to introduce a little python library I&amp;rsquo;ve toyed around with here and there for the past year or so, ripyr. Originally it was written just as an excuse to try out some newer features in modern python: asyncio and type hinting. The whole package is type hinted, which turned out to be a pretty low level of effort to implement, and the asyncio ended up being pretty speedy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Category Encoders v1.2.5 Release</title>
      <link>https://mcginniscommawill.com/posts/2017-11-22-category-encoders-v1-2-5-release/</link>
      <pubDate>Wed, 22 Nov 2017 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2017-11-22-category-encoders-v1-2-5-release/</guid>
      <description>&lt;p&gt;This release was actually cut a couple of weeks ago, but I forgot to put a post here. It&amp;rsquo;s been a release of mainly incremental changes, but also one of increased contributions from the community, so while not a huge feature-packed release, it&amp;rsquo;s one I&amp;rsquo;m particularly proud of. Here&amp;rsquo;s to more like this.&lt;/p&gt;&#xA;&lt;p&gt;It was around 4 months since the last release, which I think is a pretty decent cadence, considering our level of development.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Standing Peachtree Park</title>
      <link>https://mcginniscommawill.com/posts/2017-11-20-standing-peachtree-park/</link>
      <pubDate>Mon, 20 Nov 2017 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2017-11-20-standing-peachtree-park/</guid>
      <description>&lt;p&gt;Standing Peachtree Park is one of Atlanta&amp;rsquo;s lesser-known historical sites, yet it holds significant importance in the city&amp;rsquo;s history. Located at the confluence of Peachtree Creek and the Chattahoochee River, this site marks one of the earliest settlements in what would become Atlanta.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data Science Things Roundup #11</title>
      <link>https://mcginniscommawill.com/posts/2017-09-23-data-science-things-roundup-11/</link>
      <pubDate>Sat, 23 Sep 2017 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2017-09-23-data-science-things-roundup-11/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Note: This post has been migrated from my previous blog. Some links to previous roundups or external resources may no longer be available.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Once again time for the data science things roundup, a few links of articles or projects I&amp;rsquo;ve stumbled across and found interesting. This is the 11th one in the extremely irregular series, so if you think it&amp;rsquo;s cool, check out some of the others.&lt;/p&gt;&#xA;&lt;p&gt;This time we&amp;rsquo;ve got quite a diverse set of links, so without any more delay:&lt;/p&gt;</description>
    </item>
    <item>
      <title>git-pandas Caching: Faster Analysis</title>
      <link>https://mcginniscommawill.com/posts/2017-07-25-git-pandas-caching-faster-analysis/</link>
      <pubDate>Tue, 25 Jul 2017 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2017-07-25-git-pandas-caching-faster-analysis/</guid>
      <description>&lt;p&gt;The git-pandas library has been around for a while now, providing tools to analyze git repositories using pandas DataFrames. One of the common pieces of feedback has been about performance - analyzing large repositories can be slow, especially when running multiple analyses on the same data.&lt;/p&gt;&#xA;&lt;p&gt;To address this, I&amp;rsquo;ve added caching to the repository objects. This means that when you run an analysis, the results are cached in memory. Subsequent analyses that need the same data will use the cached version instead of re-querying git, resulting in significant performance improvements.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Category Encoders v1.2.4 Release</title>
      <link>https://mcginniscommawill.com/posts/2017-07-12-category-encoders-v1-2-4-release/</link>
      <pubDate>Wed, 12 Jul 2017 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2017-07-12-category-encoders-v1-2-4-release/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m happy to announce the release of category_encoders v1.2.4! This release includes several improvements and bug fixes to make the library more robust and easier to use.&lt;/p&gt;&#xA;&lt;p&gt;Key updates in this version:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Added support for pandas categorical types&lt;/li&gt;&#xA;&lt;li&gt;Improved handling of missing values across all encoders&lt;/li&gt;&#xA;&lt;li&gt;Better error messages when input validation fails&lt;/li&gt;&#xA;&lt;li&gt;Fixed several edge cases in the BaseN encoder&lt;/li&gt;&#xA;&lt;li&gt;Updated documentation with more examples&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can install or upgrade to the latest version using pip:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data Science Things Roundup #10</title>
      <link>https://mcginniscommawill.com/posts/2017-04-19-data-science-things-roundup-10/</link>
      <pubDate>Wed, 19 Apr 2017 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2017-04-19-data-science-things-roundup-10/</guid>
      <description>&lt;p&gt;Hey all, I haven&amp;rsquo;t done one of these in quite a while, but thought I&amp;rsquo;d share a few more articles I&amp;rsquo;ve found interesting recently.&lt;/p&gt;&#xA;&lt;h2 id=&#34;an-analysis-of-twitter-influencers-in-the-field-of-data-science--big-data&#34;&gt;An analysis of twitter influencers in the field of data science &amp;amp; big data&lt;/h2&gt;&#xA;&lt;p&gt;This is a pretty in depth medium article that goes through some of the concepts in network analysis, through the lens of twitter data. It&amp;rsquo;s not an area I know a ton about, but I found it approachable and really interesting. Check it out &lt;a href=&#34;https://medium.com/@swainjo/an-analysis-of-twitter-influencers-in-the-field-of-data-science-big-data-48b0809027ef&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data Science Things Roundup #9</title>
      <link>https://mcginniscommawill.com/posts/2017-03-12-data-science-things-roundup-9/</link>
      <pubDate>Sun, 12 Mar 2017 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2017-03-12-data-science-things-roundup-9/</guid>
      <description>&lt;p&gt;Things got a bit busy and I feel off the wagon posting, but here we are back for the ninth edition of the data science things roundup.  If you haven&amp;rsquo;t seen previous editions, it&amp;rsquo;s basically just 3 data science or python related articles or packages that I&amp;rsquo;ve stumbled across recently and thought were interesting.  This time we have a great paper and 2 python packages, so dig in.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-few-useful-things-to-know-about-machine-learning&#34;&gt;A few useful things to know about machine learning&lt;/h2&gt;&#xA;&lt;p&gt;In this paper, Pedro Domginos out of University of Washington, who you may know from a bunch of books, papers and other great work in AI and machine learning lays out in very simple terms his positions on the field of machine learning for practitioners.  Feature engineering is key, more data beats better algorithms, generalization is critical, and ensembles tend to be a good idea.  This is absolutely worth the read, and worth printing out and keeping nearby. Check it out &lt;a href=&#34;http://homes.cs.washington.edu/~pedrod/papers/cacm12.pdf&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data Science Things Roundup #8</title>
      <link>https://mcginniscommawill.com/posts/2017-01-25-data-science-things-roundup-8/</link>
      <pubDate>Wed, 25 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2017-01-25-data-science-things-roundup-8/</guid>
      <description>&lt;p&gt;Time again for the Tuesday-regular data science things roundup.  I&amp;rsquo;ve definitely fallen into a repeatable routine here (3 new links every Tuesday at 10EST), but may play with the format of this some in the future, so if you have any feedback (good, bad, or indifferent), leave a comment below.  In previous editions we talked about some lower-level tooling and dataviz, but this week we swing back towards machine learning and algorithms a little bit.&lt;/p&gt;</description>
    </item>
    <item>
      <title>BaseN Encoding Grid Search in Category Encoders</title>
      <link>https://mcginniscommawill.com/posts/2016-12-18-basen-encoding-grid-search-category-encoders/</link>
      <pubDate>Sun, 18 Dec 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-12-18-basen-encoding-grid-search-category-encoders/</guid>
      <description>&lt;p&gt;One of the more interesting encoders in the category_encoders library is the BaseN encoder. The idea behind it is to take a categorical variable and convert it into a series of binary variables, similar to one-hot encoding, but with a different base. For example, if we have a categorical variable with 8 unique values, we could encode it in base 2 with 3 binary variables (2³ = 8).&lt;/p&gt;&#xA;&lt;p&gt;The advantage of this is that we can potentially represent our categorical variables with fewer features than one-hot encoding would require, while still maintaining the ability to represent all of our categories uniquely. The disadvantage is that we introduce a potentially meaningless ordering to our categories.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Category Encoders accepted into scikit-learn-contrib</title>
      <link>https://mcginniscommawill.com/posts/2016-11-20-category-encoders-accepted-scikit-learn-contrib/</link>
      <pubDate>Sun, 20 Nov 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-11-20-category-encoders-accepted-scikit-learn-contrib/</guid>
      <description>&lt;p&gt;In the past I&amp;rsquo;ve posted a few times about a library I&amp;rsquo;m working on called category encoders. The idea of it is to provide a complete toolbox of scikit-learn compatible transformers for the encoding of categorical variables in different ways.&lt;/p&gt;&#xA;&lt;p&gt;Scikit-learn is an extremely popular python package that extends Numpy and Scipy to provide rich machine learning functionality. It&amp;rsquo;s one of the most active python open source projects and generally has a reputation for being extremely high quality.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data Science Things Roundup #7</title>
      <link>https://mcginniscommawill.com/posts/2016-11-10-data-science-things-roundup-7/</link>
      <pubDate>Thu, 10 Nov 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-11-10-data-science-things-roundup-7/</guid>
      <description>&lt;p&gt;This weeks edition of the Data Science Things Roundup is pretty python-heavy, as opposed to previous editions that were a bit more machine learning and dataviz heavy.  At the end of the day, some kind of software is backing most of data science, so getting a bit lower level can be useful sometimes.  This week we look at a couple of ways to increase performance in python codebases and one way to generalize them a little better.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Category Encoders now on conda-forge</title>
      <link>https://mcginniscommawill.com/posts/2016-09-17-category-encoders-now-conda-forge/</link>
      <pubDate>Sat, 17 Sep 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-09-17-category-encoders-now-conda-forge/</guid>
      <description>&lt;p&gt;My scikit-learn compatible library of categorical data encoders (&lt;code&gt;category_encoders&lt;/code&gt;) is now published on conda-forge! Conda, if you didn&amp;rsquo;t know, is an open source package manager for python (and other things) developed primarily by continuum analytics. Thanks to continuum developer &lt;a href=&#34;https://github.com/bollwyvl&#34;&gt;@bollwyvl&lt;/a&gt; for doing pretty much all of the work to get it working.&lt;/p&gt;&#xA;&lt;p&gt;Check out the category_encoders feedstock here: &lt;a href=&#34;https://github.com/conda-forge/category_encoders-feedstock&#34;&gt;https://github.com/conda-forge/category_encoders-feedstock&lt;/a&gt; and check out the other packages on conda forge here: &lt;a href=&#34;https://conda-forge.github.io/feedstocks.html&#34;&gt;https://conda-forge.github.io/feedstocks.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you haven&amp;rsquo;t already checked out conda or category_encoders, try out both, and let me know what you think.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data Science Things Roundup #6</title>
      <link>https://mcginniscommawill.com/posts/2016-07-20-data-science-things-roundup-6/</link>
      <pubDate>Wed, 20 Jul 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-07-20-data-science-things-roundup-6/</guid>
      <description>&lt;p&gt;Time again for the weekly data science things roundup.  If you haven&amp;rsquo;t seen this before, check out some of the previous ones to get a feel for it.  Each Tuesday I run through 3 things I&amp;rsquo;ve found interesting and bookmarked recently, generally related to python and data science (with some admitted diversions).&lt;/p&gt;&#xA;&lt;p&gt;This week is pretty calendar heavy.  Dates are weird for a lot of reasons (shoutout leap-seconds), but among them is the irregularity in months.  There are a bunch of ways to show data ordered by date, and one particularly nice way (you probably know it from github) is heatmaps. This week I&amp;rsquo;ve got two implementations of that visual and another more business focused article.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing unified glob-syntax in git-pandas</title>
      <link>https://mcginniscommawill.com/posts/2016-06-15-introducing-unified-glob-syntax-git-pandas/</link>
      <pubDate>Wed, 15 Jun 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-06-15-introducing-unified-glob-syntax-git-pandas/</guid>
      <description>&lt;p&gt;In an effort to improve the user interface to git-pandas, I&amp;rsquo;m introducing a new way of specifying which files in a repository you care about, which will become the sole way of specifying this kind of thing in version 2.0.0. Currently, for any given function, you can specify a list of extensions you&amp;rsquo;d like to include, and a list of directories you&amp;rsquo;d like to exclude. A toy example would be:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Parallelizing cumulative blame in git-pandas with joblib</title>
      <link>https://mcginniscommawill.com/posts/2016-06-12-parallelizing-cumulative-blame-git-pandas-joblib/</link>
      <pubDate>Sun, 12 Jun 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-06-12-parallelizing-cumulative-blame-git-pandas-joblib/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been a little while since I&amp;rsquo;ve posted anything about git-pandas, as I&amp;rsquo;ve been working on getting a sister project, twitter-pandas up and running. Work has continued though, and today I&amp;rsquo;d like to show a currently experimental feature, parallelized cumulative blame.&lt;/p&gt;&#xA;&lt;p&gt;Cumulative blame is one of the more popular features used in git-pandas, as it can be used to easily create a pretty interesting plot that shows the growth of a project over time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exit Interviews in Startups</title>
      <link>https://mcginniscommawill.com/posts/2016-05-05-exit-interviews-startups/</link>
      <pubDate>Thu, 05 May 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-05-05-exit-interviews-startups/</guid>
      <description>&lt;p&gt;Exit interviews are a critical but often overlooked practice in startups. While larger companies have formalized processes for gathering feedback when employees leave, startups often skip this valuable opportunity for insight, either due to the emotional nature of departures or the pressure to focus on immediate operational needs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>When do I work on what?</title>
      <link>https://mcginniscommawill.com/posts/2016-04-30-when-do-i-work-on-what/</link>
      <pubDate>Sat, 30 Apr 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-04-30-when-do-i-work-on-what/</guid>
      <description>&lt;p&gt;In past posts, I&amp;rsquo;ve shown that it&amp;rsquo;s pretty easy to create organization wide punchcards with git-pandas. Today, I put together a little twist on that particular visualization, to split my projects into two cohorts: open and closed source. My work at Predikto is, as work tends to be, mostly closed source (though we try to contribute to projects when we can). The work I do outside of Predikto is, in general, open source.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building an Engineering Team Around Ownership</title>
      <link>https://mcginniscommawill.com/posts/2016-04-28-building-engineering-team-around-ownership/</link>
      <pubDate>Thu, 28 Apr 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-04-28-building-engineering-team-around-ownership/</guid>
      <description>&lt;p&gt;Small, talented teams have an inherent challenge: the individuals that make them up are talented. In a small, talented engineering team, the engineers understand architecture, the architects understand engineering, and the product managers understand the technical side of things. While this cross-functional knowledge seems beneficial on the surface - enabling empathy and better questions - it comes with a significant downside: people tend to overstep their roles.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Estimating the time spent on a project with git-pandas</title>
      <link>https://mcginniscommawill.com/posts/2016-04-16-estimating-time-spent-project-git-pandas/</link>
      <pubDate>Sat, 16 Apr 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-04-16-estimating-time-spent-project-git-pandas/</guid>
      <description>&lt;p&gt;I stumbled across a conversation recently on the Tech404 slack channel (a pretty good public slack group for Atlanta area software folks) about mostly taxes, but nestled in the middle was this project: &lt;code&gt;git_time_extractor&lt;/code&gt;. In the past I&amp;rsquo;ve noticed a kind of weird concentration of git related open source projects among Atlanta developers, I&amp;rsquo;m not sure if that says more about Atlanta or git&amp;rsquo;s abstruseness.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, git time extractor is one of a few projects that will rip through your commit history in a given repository and piece together an estimate of how much time was spent writing the code behind them. This can be useful for taxes, general time tracking, reporting or just plain old vanity. The 3 projects I know of that do this are:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data Science Things Roundup #5</title>
      <link>https://mcginniscommawill.com/posts/2016-03-15-data-science-things-roundup-5/</link>
      <pubDate>Tue, 15 Mar 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-03-15-data-science-things-roundup-5/</guid>
      <description>&lt;p&gt;Time again for the 5th edition of the data science things roundup, named suspiciously similarly to the much more established Data Science Roundup by RJ Metrics (but we won&amp;rsquo;t worry about that this week).  In previous weeks we&amp;rsquo;ve seen some pretty cool ML and Data Science libraries, mostly in python, this week we branch out a little bit in more engineering-level projects (databases and deployment).&lt;/p&gt;&#xA;&lt;h2 id=&#34;space-invaders-with-deep-q-learning&#34;&gt;Space Invaders with Deep-Q Learning&lt;/h2&gt;&#xA;&lt;p&gt;By far the most compelling applications of machine learning for the general public is reinforcement learning.  Models that are playing games like go, Atari or whatever else seem to just be interesting to people.  I can&amp;rsquo;t say I disagree, and the backing algorithm is in many cases Deep Q Learning.  In this post, the concept of Q learning is introduced and some sample code shows it learning to play space invaders, super fun. Check it out &lt;a href=&#34;http://maciejjaskowski.github.io/2016/03/09/space-invaders.html&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automating documentation workflow with sphinx and github pages</title>
      <link>https://mcginniscommawill.com/posts/2016-02-29-automating-documentation-workflow-with-sphinx-and-github-pages/</link>
      <pubDate>Mon, 29 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-02-29-automating-documentation-workflow-with-sphinx-and-github-pages/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve got a large and growing list of open source projects I try to keep up to date. Some are better documented than others, but I&amp;rsquo;m working on making them all very simple to get started with. In light of that, I&amp;rsquo;ve done some hacking around on how to get the workflow of github pages and sphinx nailed down.&lt;/p&gt;&#xA;&lt;p&gt;For a while I was manually building the docs in the master branch, copying the html out to a temp directory, then switching to the gh-pages branch and pasting it all in there. As annoying as that was, it didn&amp;rsquo;t happen that often.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pypi-publisher: a simple cli for publishing python libraries</title>
      <link>https://mcginniscommawill.com/posts/2016-02-24-pypi-publisher-a-simple-cli-for-publishing-python-libraries/</link>
      <pubDate>Wed, 24 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-02-24-pypi-publisher-a-simple-cli-for-publishing-python-libraries/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve just finished the first release of pypi-publisher (ppp), a library for simple command line publishing of python libraries. You can grab the source or an install here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/wdm0006/pypi-publisher&#34;&gt;https://github.com/wdm0006/pypi-publisher&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In previous posts, I&amp;rsquo;ve shown how with a cookiecutter framework and some fast typing, you can release a package to pypi in pretty much no time at all. In it&amp;rsquo;s current state, ppp can cut down on that slightly. But as it grows to support more distribution types and more robust linting it will really cut down on the boring parts of releasing python code. Today it handles 4 main tasks:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using survival analysis and git-pandas to estimate code quality</title>
      <link>https://mcginniscommawill.com/posts/2016-02-21-using-survival-analysis-and-git-pandas-to-estimate-code-quality/</link>
      <pubDate>Sun, 21 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-02-21-using-survival-analysis-and-git-pandas-to-estimate-code-quality/</guid>
      <description>&lt;p&gt;Survival analysis is a statistical technique for determining the likelihood of events to happen over a timeline. It was originally based heavily in the medical/actuarial profession, where it would answer questions like: given this set of conditions, how likely is a person to survive X years? In previous posts, we&amp;rsquo;ve seen that we can tap into a huge amount of data in git repositories with git-pandas. In this post, we will try to derive a measure of relative code quality in a large open source project amongst committers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Journalism and the Perfect Pitch Deck</title>
      <link>https://mcginniscommawill.com/posts/2016-02-15-journalism-and-the-perfect-pitch-deck/</link>
      <pubDate>Mon, 15 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-02-15-journalism-and-the-perfect-pitch-deck/</guid>
      <description>&lt;p&gt;Having been pretty immersed in the VC funded startup experience at Predikto for a couple of years now, I have (counter to what I would have ever thought), taken an intellectual curiosity to pitch decks, including studying great examples like LinkedIn&amp;rsquo;s fantastically annotated deck from their Series B.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git-pandas v1.0.0, or how to check for a stable release</title>
      <link>https://mcginniscommawill.com/posts/2016-02-02-git-pandas-v1-0-0-release-stability-checking/</link>
      <pubDate>Tue, 02 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-02-02-git-pandas-v1-0-0-release-stability-checking/</guid>
      <description>&lt;p&gt;In the process of making the v1.0.0 release of git-pandas, I had one primary goal: to simplify and solidify the interface to git-pandas objects (the ProjectDirectory and the Repository). At the end of the day, the usefulness of a project like git-pandas versus one off analysis or rolling your own interface is consistent and predictable interfaces to commonly used functions.&lt;/p&gt;&#xA;&lt;p&gt;So with that in mind, I was interested in the various input parameters for the functions. What I wanted to avoid was something like:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Github.com cumulative blame in 5 lines of python</title>
      <link>https://mcginniscommawill.com/posts/2016-01-31-github-com-cumulative-blame-5-lines-python/</link>
      <pubDate>Sun, 31 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-01-31-github-com-cumulative-blame-5-lines-python/</guid>
      <description>&lt;p&gt;Git-pandas has gotten to be pretty capable. Currently in the master branch and soon to be in the v1.0.0 release, we&amp;rsquo;ve included a github.com interface to git-pandas via the GitHubProfile class. With this, in just a few lines of code, you can see how your profile has grown over time:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;gitpandas.utilities.plotting&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plot_cumulative_blame&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;gitpandas&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GitHubProfile&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GitHubProfile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;username&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;wdm0006&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ignore_forks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;verbose&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;blame&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cumulative_blame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;branch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;master&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;extensions&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;py&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;by&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;project&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ignore_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;docs&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;limit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;skip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;plot_cumulative_blame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Will give you a beautiful plot.&lt;/p&gt;&#xA;&lt;p&gt;Super simple, so check it out:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/wdm0006/git-pandas&#34;&gt;https://github.com/wdm0006/git-pandas&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Decision Strategies: Beyond Expected Value</title>
      <link>https://mcginniscommawill.com/posts/2016-01-28-decision-strategies-beyond-expected-value/</link>
      <pubDate>Thu, 28 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-01-28-decision-strategies-beyond-expected-value/</guid>
      <description>&lt;p&gt;Oftentimes when making some kind of uncertain decision, the decision maker will use a measure such as expected value to make that decision. Imagine the case of a single coin flip where the better pays 5 dollars to play, and gets 2 dollars for heads and 10 dollars for tails. The expected value of this game is to pay 5 dollars to enter and make 6 dollars, giving an expected one dollar profit.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data-driven engineering team management with gitnoc and git-pandas</title>
      <link>https://mcginniscommawill.com/posts/2016-01-19-data-driven-engineering-team-management-with-gitnoc-and-git-pandas/</link>
      <pubDate>Tue, 19 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-01-19-data-driven-engineering-team-management-with-gitnoc-and-git-pandas/</guid>
      <description>&lt;p&gt;The management of engineering projects is very very different when it scales outside of one developer, and even more so when it scales outside of one repository. Devops and source control aside, as the number of contributors and repos increases, the ability for a manager to keep track of each developer and repository relative to each other increases in kind.&lt;/p&gt;&#xA;&lt;p&gt;Data, especially incomplete data, cannot solve this problem entirely. There are contexts and biases that do not show up in git histories. Gitnoc aims to be a visualization layer on the lower-level git-pandas library to allow for data-driven human-in-the-loop management of engineering teams. The idea is to put as much relevant, concise data in front of the manager as possible, to let them good decisions quickly. It&amp;rsquo;s no where near complete, but a few examples of the kinds of decisions that can be informed (but not made) by git data:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Create organization-wide punchcards with git-pandas</title>
      <link>https://mcginniscommawill.com/posts/2016-01-17-create-organization-wide-punchcards-git-pandas/</link>
      <pubDate>Sun, 17 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-01-17-create-organization-wide-punchcards-git-pandas/</guid>
      <description>&lt;p&gt;In preparation for the v1.0.0 release of git-pandas, I&amp;rsquo;m going through the library and trying to stabilize the inputs and outputs across all functions. The idea is that there should be a common language for interacting with these objects, whether they by single repositories or project directories, and regardless of which function you are interacting with.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m also trying to lower the barrier to entry for getting interesting use out of the library by providing some higher level functions that quickly provide some value. In light of that, I&amp;rsquo;ve added in a utilities directory with canned plotting functions for painless visualization.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Write Comprehensions and Alienate People</title>
      <link>https://mcginniscommawill.com/posts/2016-01-08-write-comprehensions-alienate-people/</link>
      <pubDate>Fri, 08 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-01-08-write-comprehensions-alienate-people/</guid>
      <description>&lt;p&gt;Python list comprehensions are a powerful feature that can make code more concise and readable. But like any powerful tool, they can also be misused to create code that&amp;rsquo;s virtually incomprehensible. Here&amp;rsquo;s a guide to writing comprehensions that will make your colleagues wonder if you&amp;rsquo;re actually writing Python or inventing a new language.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gitpandas v0.0.6: python 2.7, fileowners, file-wise blame and examples</title>
      <link>https://mcginniscommawill.com/posts/2016-01-07-gitpandas-v0-0-6-python-2-7-fileowners-file-wise-blame-examples/</link>
      <pubDate>Thu, 07 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2016-01-07-gitpandas-v0-0-6-python-2-7-fileowners-file-wise-blame-examples/</guid>
      <description>&lt;p&gt;After the last release about two weeks ago, I&amp;rsquo;ve focused the development in git-pandas around testing, documentation, and bugfixes in preparation for the first major release, v1.0.0. In this release, we&amp;rsquo;ve added:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Support for python 2.7&lt;/li&gt;&#xA;&lt;li&gt;Testing and integration with Travis-CI and Coveralls&lt;/li&gt;&#xA;&lt;li&gt;Revision name was added to the file change history dataframe&lt;/li&gt;&#xA;&lt;li&gt;Blame can be done file-wise throughout the project directory or repository rather than at the repository level&lt;/li&gt;&#xA;&lt;li&gt;Bus factor returns a dataframe&lt;/li&gt;&#xA;&lt;li&gt;A helper function in repository for determining file owners by majority blame was added&lt;/li&gt;&#xA;&lt;li&gt;Bugfix in cumulative blame in repositories with heavy refactors&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So things remain on track for a v1.0.0 release in the coming weeks, I still welcome any contributors, feedback, or criticism along the way. You can get the latest release on PyPI with:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Market-Product fit vs Product-Market fit</title>
      <link>https://mcginniscommawill.com/posts/2015-12-28-market-product-fit-vs-product-market-fit/</link>
      <pubDate>Mon, 28 Dec 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-12-28-market-product-fit-vs-product-market-fit/</guid>
      <description>&lt;p&gt;Marc Andreessen originally coined the phrase product/market fit in the statement: &amp;ldquo;Product/market fit means being in a good market with a product that can satisfy that market.&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git-Pandas v0.0.5: coverage.py, risk, and more</title>
      <link>https://mcginniscommawill.com/posts/2015-12-25-git-pandas-v0-0-5-coverage-py-risk/</link>
      <pubDate>Fri, 25 Dec 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-12-25-git-pandas-v0-0-5-coverage-py-risk/</guid>
      <description>&lt;p&gt;The fifth release of git-pandas just hit pypi, install with:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install -U git-pandas&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It includes a few neat features:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Basic introduction of support for .coverage files as well, including checking if that exists at all in the first place&lt;/li&gt;&#xA;&lt;li&gt;A file change rate table that includes time rates of addition, change and other metrics aimed at identifying files that may be at a higher than normal risk of bugs&lt;/li&gt;&#xA;&lt;li&gt;Updated docstrings and normalized APIs&lt;/li&gt;&#xA;&lt;li&gt;Added days option to a couple of functions to pull the last X days rather than last X rows.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The next couple of releases are planned out:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Common Data Pitfalls for Recurring Machine Learning Systems</title>
      <link>https://mcginniscommawill.com/posts/2015-12-20-common-data-pitfalls-for-recurring-machine-learning-systems/</link>
      <pubDate>Sun, 20 Dec 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-12-20-common-data-pitfalls-for-recurring-machine-learning-systems/</guid>
      <description>&lt;p&gt;Many data science and machine learning resources exist for the analysis of static datasets, but often in the real world, solutions and systems need to work in an automated fashion on recurring data. This presents a unique challenge, because when the system is being designed and built, you know that you don&amp;rsquo;t have all of the data. You will, by design, be getting new data every day, week or however often. It turns out, this new and unseen data is often pretty messed up.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Visualize all of your git repositories with gitnoc and git-pandas</title>
      <link>https://mcginniscommawill.com/posts/2015-12-13-visualize-all-of-your-git-repositories-with-gitnoc-and-git-pandas/</link>
      <pubDate>Sun, 13 Dec 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-12-13-visualize-all-of-your-git-repositories-with-gitnoc-and-git-pandas/</guid>
      <description>&lt;p&gt;In a few past posts, I&amp;rsquo;ve shown you some of the functionality of one of my projects: git-pandas. You can do aggregate analysis of all of those, or you can even do a cumulative blame across them all. But with a little bit of extra code, you can start to see where aggregated, higher level analysis of git repositories can be useful for a team.&lt;/p&gt;&#xA;&lt;p&gt;GitNOC is a flask/d3/redis based app that, with git-pandas behind the scenes, gives you cumulative blame charts and a file change rate table for as many &amp;lsquo;profiles&amp;rsquo; as you want. In GitNOC, a profile is just a set of configurations for:&lt;/p&gt;</description>
    </item>
    <item>
      <title>CyberLaunch: An Accelerator for Machine Learning Companies</title>
      <link>https://mcginniscommawill.com/posts/2015-12-08-cyberlaunch-an-accelerator-for-machine-learning-companies/</link>
      <pubDate>Tue, 08 Dec 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-12-08-cyberlaunch-an-accelerator-for-machine-learning-companies/</guid>
      <description>&lt;p&gt;Atlanta has a new accelerator focused on machine learning and information security companies, called CyberLaunch. It is a rebranding of a previous accelerator called SparkLabs, and is run by the same team. The accelerator is focused on companies that are building products in the machine learning and information security spaces, and is looking to invest in companies that are building products that solve real problems in these spaces.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data Science Things Roundup #4</title>
      <link>https://mcginniscommawill.com/posts/2015-12-05-data-science-things-roundup-4/</link>
      <pubDate>Sat, 05 Dec 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-12-05-data-science-things-roundup-4/</guid>
      <description>&lt;p&gt;Time for another edition of the data science things roundup, where I round up some data science things for ya&amp;rsquo;ll.  Todays collections are uncharacteristically R heavy.  It&amp;rsquo;s usually pretty python and machine learning heavy, so if you find something you like here, be sure to check out previous editions as well.  Without further adieu:&lt;/p&gt;&#xA;&lt;h2 id=&#34;scikit-learn-groups&#34;&gt;Scikit-Learn Groups&lt;/h2&gt;&#xA;&lt;p&gt;Scikit-learn groups (skl-groups) is a python library for operating on sets of features (aka &amp;ldquo;groups&amp;rdquo;).  It can be particularly useful for less-structured data, and locally interesting subsets like &amp;ldquo;galaxy clusters that are made up of individual galaxies&amp;rdquo; or &amp;ldquo;a set of tweets from a given area and time&amp;rdquo;.  Rather than constructing one long feature vector for the set, a bag of respective features for the members of the group can be used.  Super interesting library. Check it out &lt;a href=&#34;https://dougalsutherland.github.io/skl-groups/index.html&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Beyond One-Hot: An Exploration of Categorical Variables</title>
      <link>https://mcginniscommawill.com/posts/2015-11-29-beyond-one-hot-an-exploration-of-categorical-variables/</link>
      <pubDate>Sun, 29 Nov 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-11-29-beyond-one-hot-an-exploration-of-categorical-variables/</guid>
      <description>&lt;p&gt;In machine learning, data are king. The algorithms and models used to make predictions with the data are important, and very interesting, but ML is still subject to the idea of garbage-in-garbage-out. With that in mind, let&amp;rsquo;s look at a little subset of those input data: categorical variables.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Analyzing GitPython and Pandas With GitPandas</title>
      <link>https://mcginniscommawill.com/posts/2015-11-19-analyzing-gitpython-and-pandas-with-gitpandas/</link>
      <pubDate>Thu, 19 Nov 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-11-19-analyzing-gitpython-and-pandas-with-gitpandas/</guid>
      <description>&lt;p&gt;A couple of weeks ago I posted about a new open source python library I started called git-pandas. The github page for it is here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/wdm0006/git-pandas&#34;&gt;https://github.com/wdm0006/git-pandas&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The basic idea is to provide an interface to a git repository or collection of git repositories via pandas DataFrames. With this, we can do some interesting analysis. In this example we will analyze the two projects that make git-pandas possible: GitPython and pandas. To get started, make a new directory to put everything in, and clone the 3 repositories (we will use the bleeding edge version of git-pandas):&lt;/p&gt;</description>
    </item>
    <item>
      <title>Create a pip-installable python package in 2 minutes</title>
      <link>https://mcginniscommawill.com/posts/2015-11-12-create-a-pip-installable-python-package-in-2-minutes/</link>
      <pubDate>Thu, 12 Nov 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-11-12-create-a-pip-installable-python-package-in-2-minutes/</guid>
      <description>&lt;p&gt;Between cookiecutter, cookiecutter-pipproject, github.com and some reasonably fast typing, you can now get version 0 of a project up to pypi and pip installable in pretty much no time at all (not that you should actually do that, but you know what I mean).&lt;/p&gt;&#xA;&lt;p&gt;The down and dirty:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install cookiecutter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cookiecutter https://github.com/wdm0006/cookiecutter-pipproject.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; projectname&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add -A&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s1&#34;&gt;&amp;#39;first commit&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote add origin foo://bar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push origin master&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git tag &lt;span class=&#34;o&#34;&gt;{{&lt;/span&gt;version&lt;span class=&#34;o&#34;&gt;}}&lt;/span&gt; -m &lt;span class=&#34;s1&#34;&gt;&amp;#39;adds the version you entered in cookiecutter as the first tag for release&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push --tags origin master&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;touch .pypirc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nano .pypirc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;add snippet from below&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python setup.py register -r pypitest&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python setup.py sdist upload -r pypitest&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And then you have it, the package is up on the test pypi server. Simply repeat the last two commands with pypi instead of pypitest to push to the real pip server.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blame the world with git-pandas</title>
      <link>https://mcginniscommawill.com/posts/2015-11-10-blame-the-world-with-git-python/</link>
      <pubDate>Tue, 10 Nov 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-11-10-blame-the-world-with-git-python/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve just pushed the first release of git-pandas to pypi, so you can now:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install git-pandas&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then in a few lines:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;gitpandas.project&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ProjectDirectory&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;projd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ProjectDirectory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;working_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;foo/bar/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;blame&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;projd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extensions&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;py&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ignore_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;lib&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Get the aggregated git blame of every project within a directory and its subdirectories, in the form of a pandas DataFrame. For fun, vanity, and probably not profit.&lt;/p&gt;&#xA;&lt;p&gt;For now blame and commit history are the supported functions, be I aim to gradually add more as time goes on. The primary goal is to simply provide a dumb pandas-based interface to singular repositories, and then roll those up to the project directory level (so aggregates across a collection of repositories). The secondary goal is to provide interesting use cases and examples as we come across them, the first of which was this aggregated git blame one.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data Science vs. Data Engineering</title>
      <link>https://mcginniscommawill.com/posts/2015-10-31-data-science-vs-data-engineering/</link>
      <pubDate>Sat, 31 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-10-31-data-science-vs-data-engineering/</guid>
      <description>&lt;p&gt;Data Science is a relatively young term for a relatively old field. In general, it tends to be applied statistics plus some other skill-base - stats+computer science, stats+software engineering, stats+data visualization, etc. There&amp;rsquo;s ongoing debate about the term itself, with some arguing that data science is more of an evolution of statistics than a separate field.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sklearn-Extensions: Collecting Useful Scikit-Learn Add-ons</title>
      <link>https://mcginniscommawill.com/posts/2015-10-20-sklearn-extensions/</link>
      <pubDate>Tue, 20 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-10-20-sklearn-extensions/</guid>
      <description>&lt;p&gt;From time to time I come across an interesting blog post, gist, or other snippet of code related to scikit-learn that is pretty cool. Historically, that has yielded a new bookmark, and maybe some toying around later on, but little actual usage. As it turns out, the ridiculously strong support of the core scikit-learn project and the larger projects adjacent to it give little reason to branch out into the world beyond (at least for toy projects and learning&amp;rsquo;s sake).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Grapht: graph connectedness and dimensionality</title>
      <link>https://mcginniscommawill.com/posts/2015-09-29-grapht-graph-connectedness-and-dimensionality/</link>
      <pubDate>Tue, 29 Sep 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-09-29-grapht-graph-connectedness-and-dimensionality/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been toying around with &lt;a href=&#34;https://en.wikipedia.org/wiki/Graph_theory&#34;&gt;graph stuff&lt;/a&gt; from time to time for a while now.  I still have pretty much no idea what I am doing, but I enjoy having a field to dive into on occasion. As part of that, I&amp;rsquo;ve been working on a toy project on github for playing with graphs: &lt;a href=&#34;https://github.com/wdm0006/grapht&#34;&gt;Grapht&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;At this stage, all it really does is some basic creation of graphs as sparse adjacency matrices, and some simple calculations on those graphs.  Something I was interested in (for some reason), was the interaction between conntectedness/sparsity and dimension in the adjacency matrices of directed graphs.  So first, a quick overview of what I&amp;rsquo;m talking about:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cookiecutter-Flask (and some other stuff)</title>
      <link>https://mcginniscommawill.com/posts/2015-09-28-cookiecutter-flask-and-some-other-stuff/</link>
      <pubDate>Mon, 28 Sep 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-09-28-cookiecutter-flask-and-some-other-stuff/</guid>
      <description>&lt;p&gt;For web projects I&amp;rsquo;ve come to really appreciate projects such as &lt;a href=&#34;https://github.com/audreyr/cookiecutter&#34;&gt;cookiecutter&lt;/a&gt; and &lt;a href=&#34;https://github.com/sloria/cookiecutter-flask&#34;&gt;cookiecutter-flask&lt;/a&gt;, that remove a ton of boiler plate work from the beginning of development.  The parts they automate tend to be the most boring anyway.  As a Flask user, I&amp;rsquo;ve found myself using sloria&amp;rsquo;s cookiecutter pretty often, but I kept modifying the same things, so I thought it prudent to fork it and make my own changes.&lt;/p&gt;&#xA;&lt;p&gt;A quick overview of differences between my fork and the original:&lt;/p&gt;</description>
    </item>
    <item>
      <title>TAG YP Technologist of the Year: The Results</title>
      <link>https://mcginniscommawill.com/posts/2015-09-23-tag-yp-technologist-of-the-year-2/</link>
      <pubDate>Wed, 23 Sep 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-09-23-tag-yp-technologist-of-the-year-2/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m thrilled to announce that I was selected as the winner of the Technology Association of Georgia&amp;rsquo;s Young Professional Technologist of the Year award. It&amp;rsquo;s an incredible honor to receive this recognition from such a prestigious organization.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TAG Young Professional Technologist of the Year</title>
      <link>https://mcginniscommawill.com/posts/2015-09-19-tag-yp-technologist-of-the-year/</link>
      <pubDate>Sat, 19 Sep 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-09-19-tag-yp-technologist-of-the-year/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m honored and humbled to share that I&amp;rsquo;ve been named the Technology Association of Georgia&amp;rsquo;s Young Professional Technologist of the Year. This recognition from TAG, one of the largest state technology associations in North America, is a testament to the incredible work we&amp;rsquo;re doing at Predikto and the vibrant tech community in Atlanta.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data Science Things Roundup #3</title>
      <link>https://mcginniscommawill.com/posts/2015-09-10-data-science-things-roundup-3/</link>
      <pubDate>Thu, 10 Sep 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-09-10-data-science-things-roundup-3/</guid>
      <description>&lt;p&gt;Time again for the 3rd edition of the data science things roundup, where I share a few data science things I&amp;rsquo;ve come across recently.  Check out previous editions here and here.&lt;/p&gt;&#xA;&lt;h2 id=&#34;self-organizing-maps-with-tensorflow&#34;&gt;Self Organizing Maps with TensorFlow&lt;/h2&gt;&#xA;&lt;p&gt;Google&amp;rsquo;s open sourcing of TensorFlow late last year caused a pretty big splash in the machine learning and data science communities, and since then a ton of tutorials, examples and projects have popped up around it.  One such example from soon after it&amp;rsquo;s release was Sachin Joglekar&amp;rsquo;s tutorial of creating a self organizing map (SOM).  SOMs are interesting as one of the relatively few unsupervised neural network applications, and are a refreshing respite from image classification. Check it out &lt;a href=&#34;https://codesachin.wordpress.com/2015/11/28/self-organizing-maps-with-googles-tensorflow/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data Science Things Roundup #2</title>
      <link>https://mcginniscommawill.com/posts/2015-05-20-data-science-things-roundup-2/</link>
      <pubDate>Wed, 20 May 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-05-20-data-science-things-roundup-2/</guid>
      <description>&lt;p&gt;This is the second edition of the now-regular series of posts: Data Science Things Roundup, where I round up data science things (as you&amp;rsquo;d probably guessed).  Last week we had a scikit-learn extension, a GUI framework for python CLIs and some writing about how kaggle winners won their competitions.  This week is a bit more data-science-y, so dig in.&lt;/p&gt;&#xA;&lt;h2 id=&#34;lifelines&#34;&gt;Lifelines&lt;/h2&gt;&#xA;&lt;p&gt;If you haven&amp;rsquo;t already checked out lifelines or the author&amp;rsquo;s (Cam Davidson-Pilon) book &lt;a href=&#34;https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers&#34;&gt;Probabilistic Programming and Bayesian Methods for Hackers&lt;/a&gt;, you really should.  I used lifelines in a previous post where we used survival analysis to try to estimate the quality of different chunks of code.  The library itself is really great though, so read the book, use the library, and let me know what you do with it.  Check it out &lt;a href=&#34;https://github.com/CamDavidsonPilon/lifelines&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pedal Wrencher: A Strava-Powered Bike Maintenance Tracker</title>
      <link>https://mcginniscommawill.com/posts/2015-03-16-pedal-wrencher/</link>
      <pubDate>Mon, 16 Mar 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-03-16-pedal-wrencher/</guid>
      <description>&lt;p&gt;Another weekend project has found a home on the public internet.  I&amp;rsquo;ve just launched &lt;a href=&#34;https://www.pedalwrencher.com&#34;&gt;www.pedalwrencher.com&lt;/a&gt;.  It is a little project that uses flask, Strava&amp;rsquo;s API, and twilio to track how much people ride their bikes, and send them notifications when they hit certain milage points where maintenance is recommended.  So you will get something like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/2015/03/textshot.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The idea is that this should always be free to users, and that I never keep very much data, or sell the data itself.  If enough people use this, then there are some interesting things that can be done along the lines of recommending local bike shops to the users or even concierge sale and shipment of the replacement parts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data Science Things Roundup #1</title>
      <link>https://mcginniscommawill.com/posts/2015-02-15-data-science-things-roundup-1/</link>
      <pubDate>Sun, 15 Feb 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-02-15-data-science-things-roundup-1/</guid>
      <description>&lt;p&gt;This is the first in a new series of posts.  There are a few of these around the internet that I like, notably:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ds_ldn&amp;rsquo;s Data Machina&lt;/li&gt;&#xA;&lt;li&gt;RJMetrics&amp;rsquo; Data Science Roundup&lt;/li&gt;&#xA;&lt;li&gt;Jeremy Singer-Vine&amp;rsquo;s Data is Plural&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Mine will probably be way less consistent, so if you like this, then for sure subscribe to those as well.  Anyway, here are a few things I&amp;rsquo;ve stumbled across related to data science or python recently that you may also find interesting.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Grad School Diets: How Stress Shows Up in Spending Data</title>
      <link>https://mcginniscommawill.com/posts/2015-02-14-grad-school-diets/</link>
      <pubDate>Sat, 14 Feb 2015 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2015-02-14-grad-school-diets/</guid>
      <description>&lt;p&gt;Today I noticed that my bank puts out a yearly spending report based on things charged to your credit card.  Most of my expenses are pretty consistent (about the same amount of gas per month, for instance), but one particular category stuck out to me.&lt;/p&gt;&#xA;&lt;p&gt;For some context ahead of time, last year I completed my M.S. at Auburn.  In the process, I took 12 hours of graduate engineering classes in the Spring while also writing and eventually defending my thesis.  All in all, it was probably too much to do at once, and I just barely got out in one piece.  The stress of all of this is now clearly demonstrable, thanks to some data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Solving Inherent Stickiness in SaaS: The Power of Convexity</title>
      <link>https://mcginniscommawill.com/posts/2014-11-02-inherent-stickiness/</link>
      <pubDate>Sun, 02 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2014-11-02-inherent-stickiness/</guid>
      <description>&lt;p&gt;In the startup community, especially among SaaS companies, there&amp;rsquo;s frequent discussion about making products &amp;ldquo;sticky&amp;rdquo;. While Health IT and on-premises solutions are often cited as naturally sticky, we need to examine what stickiness really means and how to achieve it sustainably.&lt;/p&gt;</description>
    </item>
    <item>
      <title>G-G Surface Generation</title>
      <link>https://mcginniscommawill.com/posts/2012-06-19-g-g-surface-generation/</link>
      <pubDate>Tue, 19 Jun 2012 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2012-06-19-g-g-surface-generation/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Note: This post has been migrated from my old WanderTech blog. The original post contained example G-G surface plots which are currently missing. I&amp;rsquo;ll update this post if I can track down the original images.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The G-G surface is a scatter plot showing all accelerations generated by a car or bike in the longitudinal (forward and back) and lateral (side to side) directions. They can be very useful in determining things such as the turning and handling capabilities of the vehicle, as well as braking and acceleration. This type of information is useful for comparing tires, suspension setups, or riders&amp;rsquo;/drivers&amp;rsquo; handling abilities.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing WanderDAQ: Versatile Arduino Data Acquisition</title>
      <link>https://mcginniscommawill.com/posts/2012-06-19-wanderdaq/</link>
      <pubDate>Tue, 19 Jun 2012 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2012-06-19-wanderdaq/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Note: This post has been migrated from my old WanderTech blog. The original post contained various product photos and diagrams which are currently missing. I&amp;rsquo;ll update this post if I can track down the original images.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The WanderDAQ shield plugs directly into the Arduino Pro 3.3v board, and can collect data from any analog sensor in 2 different ways (Over serial or on a microSD card). The Pro&amp;rsquo;s 6 analog pins, 6 of the digital pins, both 3.3v power and the 4 ground pins are broken out into terminal blocks. These allow the user to securely fasten the sensor&amp;rsquo;s wiring with screws rather than solder. All of this combines to make a flexible, robust, modify-able solution to quickly and cheaply gathering data in the field. We are working on integrating a logic level converter into revision 3 to allow for use with the more ubiquitous 5v Arduinos.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Parameter Estimation with Virtual Elevation</title>
      <link>https://mcginniscommawill.com/posts/2012-06-19-parameter-estimation/</link>
      <pubDate>Tue, 19 Jun 2012 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2012-06-19-parameter-estimation/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Note: This post has been migrated from my old WanderTech blog. The original post contained various screenshots of the Virtual Elevation software which are currently missing. I&amp;rsquo;ll update this post if I can track down the original images.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Virtual Elevation is a parameter estimation tool used to estimate constants associated with any dynamic system. Using Monte Carlo Methods and some proprietary optimization techniques, any two fully de-coupled parameters can be simultaneously estimated quickly and accurately.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing AutoChung: Estimating Cycling Aerodynamics</title>
      <link>https://mcginniscommawill.com/posts/2012-06-15-autochung/</link>
      <pubDate>Fri, 15 Jun 2012 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2012-06-15-autochung/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Note: This post has been migrated from my old WanderTech blog.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I have posted ad-nauseum in the past about parameter estimation, conference papers, bike parameter .exes and noise like that. It&amp;rsquo;s finally starting to be pretty concrete.&lt;/p&gt;&#xA;&lt;p&gt;There is now an overview of an early stage desktop application (maybe a webapp down the road) to estimate drag coefficient and coefficient of rolling resistance using the methodology I developed on top of the Chung method. I hope to make it pretty user friendly and painless, so at this point I am just trying to find new and exciting ways to break it before releasing it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Miscellaneous MATLAB</title>
      <link>https://mcginniscommawill.com/posts/2012-06-10-miscellaneous-matlab/</link>
      <pubDate>Sun, 10 Jun 2012 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2012-06-10-miscellaneous-matlab/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Note: This post has been migrated from my old WanderTech blog. The original post contained various code snippets and examples that have been reformatted for this version.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For whatever reason I have ended up doing a large amount of work in MATLAB. In school, with controls and simulation projects, prototyping for personal projects, and some finance work back in my glory days. Throughout all of it, I&amp;rsquo;ve come across a few helpful things the hard way.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mastering Data Acquisition with Arduino</title>
      <link>https://mcginniscommawill.com/posts/2012-05-29-data-acquisition/</link>
      <pubDate>Tue, 29 May 2012 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2012-05-29-data-acquisition/</guid>
      <description>&lt;p&gt;As part of a larger project, I needed to gather some data remotely. In my case it was accelerometer and frequency data from a reed switch. Either way, I needed a robust way to log data from a variety of sensors onto a memory card of some kind remotely. I decided that the simplest way was probably with Arduino, and quickly hacked together something that worked well enough on a breadboard, then took things a little far and started using the opportunity to learn to use EagleCAD.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reflections on Bike Racing: Lessons from the Road</title>
      <link>https://mcginniscommawill.com/posts/2012-05-18-bike-racing/</link>
      <pubDate>Fri, 18 May 2012 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2012-05-18-bike-racing/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Note: This post has been migrated from my old WanderTech blog. The original post contained various photos from bike races that are unfortunately no longer available.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So this blog is mostly intended to house my projects and engineering related endeavors, but I wanted to do at least one about bike racing. Racing has taught me a lot of mostly decent things, with a few admitted bad influences. Through doing a lot of racing and growing up in the past 5 or 6 years, I managed to accumulate some stories and platitudes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hill Climbing Optimization: A Stochastic Algorithm Variant</title>
      <link>https://mcginniscommawill.com/posts/2012-05-12-hill-climbing/</link>
      <pubDate>Sat, 12 May 2012 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2012-05-12-hill-climbing/</guid>
      <description>&lt;p&gt;For the past year or so I have used what I have called a &amp;lsquo;stochastic hill climbing algorithm&amp;rsquo; to handle most non-time sensitive optimization problems.  It has been useful particularly in parameter estimation for the car, finding the ideal power file for a cyclist over a course, and a few other types of problem.  Recently though, I realized that what I had been calling a &amp;lsquo;stochastic hill climbing algorithm&amp;rsquo;, wasn&amp;rsquo;t really that at all.  I&amp;rsquo;m not sure what it is, so I figured I would document it, and maybe someone would tell me.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Estimating Road Edges from GPS Data</title>
      <link>https://mcginniscommawill.com/posts/2012-02-17-more-roads/</link>
      <pubDate>Fri, 17 Feb 2012 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2012-02-17-more-roads/</guid>
      <description>&lt;p&gt;So I fleshed out a little bit of the idea from the previous post.  Basically all this is right now is something that takes GPS data (longitude, latitude and elevation) and estimates the edges of the road.  Here&amp;rsquo;s a nice picture.  I still need to do some unit conversion stuff, actually have it be able to parse .gpx files from scratch, and generate the terrain map itself, but it looks cool for now.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Notes on Building Terrain Maps from GPS Data</title>
      <link>https://mcginniscommawill.com/posts/2012-02-16-notes/</link>
      <pubDate>Thu, 16 Feb 2012 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2012-02-16-notes/</guid>
      <description>&lt;p&gt;On a subject related to the previous post (Vehicle Dynamics), here is how I am thinking of trying to impliment the terrain maps built from real road data.  I am going to try to build some of these from GPS .gpx or .tcx files whenever I have time.  Probably in MATLAB, but maybe in C for speed and excitement.   Fair warning, these are my actual back of the envelope scribbles, so I would be very impressed with myself if a single word was spelled right.   I thought it would be interesting to post some &amp;ldquo;before&amp;rdquo; pictures instead of just &amp;ldquo;afters&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vehicle Dynamics Simulation in MATLAB</title>
      <link>https://mcginniscommawill.com/posts/2012-02-16-vehicle-dynamics/</link>
      <pubDate>Thu, 16 Feb 2012 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2012-02-16-vehicle-dynamics/</guid>
      <description>&lt;p&gt;I am taking a class this semester on Vehicle Dynamics, which as it turns out, is mostly a class on simulating complicated things (cars) doing complicated things (driving).  I kind of like that, and have for the whole semester so far been developing a single MATLAB object to handle all of the things we learn as we learn them.  At first it wasn&amp;rsquo;t too interesting, just a class that would simulate cars rolling down hills or steady state turning.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Beacon Stem: Designing a Bike Stem with Integrated Light</title>
      <link>https://mcginniscommawill.com/posts/2012-01-06-beacon-stem/</link>
      <pubDate>Fri, 06 Jan 2012 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2012-01-06-beacon-stem/</guid>
      <description>&lt;p&gt;A while back I had an idea for a bicycle stem that had a light integrated into it.  Of course the lack of angle adjust-ability would make it a somewhat cosmetic piece unless it came with a set of shims for the lens or something like that, but a large flood light for in-town commuting would at the very least look cool and augment the streetlights.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s what I came up with:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Motion Capture with MATLAB and a Webcam</title>
      <link>https://mcginniscommawill.com/posts/2012-01-05-motion-capture/</link>
      <pubDate>Thu, 05 Jan 2012 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2012-01-05-motion-capture/</guid>
      <description>&lt;p&gt;Last semester, I had a class project where we had to develop a model for a car or truck&amp;rsquo;s suspension.  We used a half car model and had 2 people stand over the rear axel of a truck and jump out, then analyzed the reposnse to find the parameters of the model.  Most groups just held a tape measure up against the car and videotaped it, which we also did as a backup, but I also wrote a quick MATLAB script to capture the response of the system.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a DIY Sous Vide Controller with Arduino</title>
      <link>https://mcginniscommawill.com/posts/2012-01-04-sous-vide/</link>
      <pubDate>Wed, 04 Jan 2012 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2012-01-04-sous-vide/</guid>
      <description>&lt;p&gt;Sous-vide is basically magic.  Not just because it is done with electricity, either.&lt;/p&gt;&#xA;&lt;p&gt;The general idea is that if you vacuum pack food, in most cases meats, and then put them in a water bath which is held at the exact target temperature.  This creates a slow, damp cooking process in which it is impossible for the food to be overcooked.   In real life it produces a strange grey lump of food perfection, so it helps to quickly sear the meat in an iron skillet afterwards to give it some color/glaze, but its worth planning for the internal temperature to rise a degree or two during searing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Turning Fast: Generating G-G Diagrams from iPhone Data</title>
      <link>https://mcginniscommawill.com/posts/2012-01-04-turning-fast/</link>
      <pubDate>Wed, 04 Jan 2012 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2012-01-04-turning-fast/</guid>
      <description>&lt;p&gt;After reading this guy: &lt;a href=&#34;http://cozybeehive.blogspot.com/2009/10/g-g-diagram-applied-to-bicycle-racing.html&#34;&gt;http://cozybeehive.blogspot.com/2009/10/g-g-diagram-applied-to-bicycle-racing.html&lt;/a&gt; , I decided that it would be cool to be able to generate G-G diagrams from rides and compare them to friends, yourself, things like that.  At first it seemed like a complex idea, needed to get accelerometers a DAQ, some kind of interface, ect.  Then I remembered: I have a phone.&lt;/p&gt;&#xA;&lt;p&gt;Kids these days, have it so easy.  Just download this: &lt;a href=&#34;http://www.wavefrontlabs.com/Wavefront_Labs/Sensor_Data.html&#34;&gt;http://www.wavefrontlabs.com/Wavefront_Labs/Sensor_Data.html&lt;/a&gt; , mount your iPhone to your stem, and go shred some mountain bike trails.  You get home, your phone automatically connects to the wifi, and bam, your data is floating in the magic internet tubes in your house.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Home Again: Rediscovering Georgia&#39;s Trails After Racing Adventures</title>
      <link>https://mcginniscommawill.com/posts/2010-04-25-home-again/</link>
      <pubDate>Sun, 25 Apr 2010 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2010-04-25-home-again/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: This is an old post migrated from a bike racing blog I had for a time, GHBRA, or the Georgia Homeless Bike Racer Association. It was a pretty infromal log of our travel and experiences racing bikes as teenagers.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So after 22 days on the road and couches/air mattresses, I have finally come home, and to amazing weather no less.&lt;/p&gt;&#xA;&lt;p&gt;I managed to get back to some singletrack, which was cool:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Conquering GMR: A Cyclist&#39;s Journey on Glendora Mountain Road</title>
      <link>https://mcginniscommawill.com/posts/2010-03-23-gmr/</link>
      <pubDate>Tue, 23 Mar 2010 13:07:00 -0700</pubDate>
      <guid>https://mcginniscommawill.com/posts/2010-03-23-gmr/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: This is an old post migrated from a bike racing blog I had for a time, GHBRA, or the Georgia Homeless Bike Racer Association. It was a pretty infromal log of our travel and experiences racing bikes as teenagers.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So after being humbled in spectacular fashion at San Dimas, I found myself with an unexpected day off. Of course I had to go find the top of Glendora Mountain Road, and almost 2 hours later, I decided it was worthy of a picture, or in this case, 5. The view is that big.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cycling Adventure on Glendora Mountain Road</title>
      <link>https://mcginniscommawill.com/posts/2010-03-17-glendora/</link>
      <pubDate>Wed, 17 Mar 2010 19:06:00 -0700</pubDate>
      <guid>https://mcginniscommawill.com/posts/2010-03-17-glendora/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: This is an old post migrated from a bike racing blog I had for a time, GHBRA, or the Georgia Homeless Bike Racer Association. It was a pretty infromal log of our travel and experiences racing bikes as teenagers.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So I got to ride without leg warmers today. In fact, it was in the mid 80s, not a cloud in the sky, and downright pleasant. The ride for the day was to wander up the Glendora mountain road for a while, then either find another way back or turn around. It ended up being over 90 mins of steady climbing in some of the most spectacular terrain I have ever ridden, followed by some solid descending and a leisurely ride home. Pretty awesome, I highly reccomend it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cycling Websites and Race Reports: A Journey Through GHBRA</title>
      <link>https://mcginniscommawill.com/posts/2010-03-10-websites/</link>
      <pubDate>Wed, 10 Mar 2010 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2010-03-10-websites/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: This is an old post migrated from a bike racing blog I had for a time, GHBRA, or the Georgia Homeless Bike Racer Association. It was a pretty infromal log of our travel and experiences racing bikes as teenagers.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So the team went down to Rouge Roubiax last weekend. It was about as expected, dirt, sketchy, fast, dissapointing.&lt;/p&gt;&#xA;&lt;p&gt;I ended up feeling pretty bad at the start but right as the legs were coming around, my day was ended by the worst timed flat in this history of time. Olheiser went on to do his thing and ride to a strong 5th, despite some bad luck. It was definitely a cool race though, I will definitely go back next year, if for nothing else than to hang out with our awesome hosts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Body Thermometer is So Confused Right Now</title>
      <link>https://mcginniscommawill.com/posts/2010-01-31-my-body-thermometer-is-so-confused/</link>
      <pubDate>Sun, 31 Jan 2010 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2010-01-31-my-body-thermometer-is-so-confused/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: This is an old post migrated from a bike racing blog I had for a time, GHBRA, or the Georgia Homeless Bike Racer Association. It was a pretty infromal log of our travel and experiences racing bikes as teenagers.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So alot has been going on. Went to tour of the Bahamas, got a tan, beat of former tour de france winner, and pretty much no one else. We ate well, but mostly badly, almost got killed trying to remember to ride on the left side of the road and generally had a great time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cycling Adventures in Macon, GA: A Weekend Getaway</title>
      <link>https://mcginniscommawill.com/posts/2009-12-30-macon-ga/</link>
      <pubDate>Wed, 30 Dec 2009 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2009-12-30-macon-ga/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: This is an old post migrated from a bike racing blog I had for a time, GHBRA, or the Georgia Homeless Bike Racer Association. It was a pretty infromal log of our travel and experiences racing bikes as teenagers.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, it&amp;rsquo;s cold in the mountains, so I spent the weekend at my winter home, Christian&amp;rsquo;s place in the Maconga.&lt;/p&gt;&#xA;&lt;p&gt;Here are some pictures from the weekend in no particular order:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Discovering Blairsville: A Summer Revelation in Georgia</title>
      <link>https://mcginniscommawill.com/posts/2009-11-28-revelation/</link>
      <pubDate>Sat, 28 Nov 2009 20:35:00 -0800</pubDate>
      <guid>https://mcginniscommawill.com/posts/2009-11-28-revelation/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: This is an old post migrated from a bike racing blog I had for a time, GHBRA, or the Georgia Homeless Bike Racer Association. It was a pretty infromal log of our travel and experiences racing bikes as teenagers.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So if there is one general theme to take away from this past week of posts it is: Blairsville Georgia is basically awesome. Since all of the pictures have been wintery and cold, here is Blairsville in the summer:&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Superlative Burrito: Navigating Mexican Menus with Ease</title>
      <link>https://mcginniscommawill.com/posts/2009-11-29-superlative-burrito/</link>
      <pubDate>Sun, 29 Nov 2009 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2009-11-29-superlative-burrito/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: This is an old post migrated from a bike racing blog I had for a time, GHBRA, or the Georgia Homeless Bike Racer Association. It was a pretty infromal log of our travel and experiences racing bikes as teenagers.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Mexican restaurants can be confusing.&lt;/p&gt;&#xA;&lt;p&gt;Garbled pseudo-Spanish describing what is basically the same ingredients combined slightly differently covers bright menus.  It seems like every time I goto a Mexican place (very often), I find some new kind of food that I have never even heard of.  Then there is the wall of words that is the combinations.  Combo&amp;rsquo;s 1 through 100 include every possible  combination of rice, beans, tacos, burritos and enchiladas.  Every possible combination, other than the one you want, of course.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Discovering Pine Mountain: A Cyclist&#39;s Paradise in Georgia</title>
      <link>https://mcginniscommawill.com/posts/2009-11-26-pine-mountain-ga/</link>
      <pubDate>Thu, 26 Nov 2009 00:00:00 -0800</pubDate>
      <guid>https://mcginniscommawill.com/posts/2009-11-26-pine-mountain-ga/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: This is an old post migrated from a bike racing blog I had for a time, GHBRA, or the Georgia Homeless Bike Racer Association. It was a pretty infromal log of our travel and experiences racing bikes as teenagers.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, basically, Pine Mountain rocks.  I have had the pleasure of being spoiled rotten by the gaps.  My favorite 1 hour ride when I go home is to ride up and over wolfpen, around lake windfeild scott, then back up and over and back home.  So needless to say, at this point, I&amp;rsquo;m snobbish about my climbing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rediscovering Dirt Roads: Cycling Adventures in North Georgia</title>
      <link>https://mcginniscommawill.com/posts/2009-11-23-dirt-roads-again/</link>
      <pubDate>Mon, 23 Nov 2009 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2009-11-23-dirt-roads-again/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: This is an old post migrated from a bike racing blog I had for a time, GHBRA, or the Georgia Homeless Bike Racer Association. It was a pretty infromal log of our travel and experiences racing bikes as teenagers.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So the dirt roads in north Georgia, are not at all like the dirt roads in south Alabama.  First of all, they are gravel.  Also, they go straight up.  Here is some proof of why they are better here.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Land of Milk and Honey</title>
      <link>https://mcginniscommawill.com/posts/2009-11-18-land-of-milk-and-honey/</link>
      <pubDate>Wed, 18 Nov 2009 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2009-11-18-land-of-milk-and-honey/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: This is an old post migrated from a bike racing blog I had for a time, GHBRA, or the Georgia Homeless Bike Racer Association. It was a pretty infromal log of our travel and experiences racing bikes as teenagers.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So this week hasn&amp;rsquo;t been too entertaining.  Physics and Calculus definately hinder ROA (rate of adventures) at times.  But on the horizon, there is some good wandering/bike riding to be done.  In 2 short days I will return to the land of milk and honey: Union County, GA.  Now, I&amp;rsquo;m far too young for nostalgia, the idea that you can be nostalgic before you are 50 depresses me.  But I can still reminice.  So here are some pictures of mountian adventures of yesteryear.  Get excited.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Role of a Super Domestique in Professional Cycling</title>
      <link>https://mcginniscommawill.com/posts/2009-11-16-super-domestique/</link>
      <pubDate>Mon, 16 Nov 2009 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2009-11-16-super-domestique/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: This is an old post migrated from a bike racing blog I had for a time, GHBRA, or the Georgia Homeless Bike Racer Association. It was a pretty infromal log of our travel and experiences racing bikes as teenagers.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Domestique:&#xA;&lt;img src=&#34;https://mcginniscommawill.com/images/ghbra/domes1.jpg&#34; alt=&#34;chestnut knob&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Super Domestique:&#xA;&lt;img src=&#34;https://mcginniscommawill.com/images/ghbra/domes2.JPG&#34; alt=&#34;chestnut knob&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Georgia Homeless Bike Racer Association</title>
      <link>https://mcginniscommawill.com/posts/2009-11-10-georgia-homeless-bike-racer-association/</link>
      <pubDate>Tue, 10 Nov 2009 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/posts/2009-11-10-georgia-homeless-bike-racer-association/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: This is an old post migrated from a bike racing blog I had for a time, GHBRA, or the Georgia Homeless Bike Racer Association. It was a pretty infromal log of our travel and experiences racing bikes as teenagers.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You&amp;rsquo;ve done it.&lt;/p&gt;&#xA;&lt;p&gt;You&amp;rsquo;ve shown up at a strangers house with a pillow, 2 bikes and a razor.&lt;/p&gt;&#xA;&lt;p&gt;This blog is a tribute to you. It is for the champions of the couch, the wanderlust kings, the incessant travelers who use bike racing as a half hearted excuse to wander the country eating pizza and drinking coffee. Here at the Georgia Homeless Bike Racer Association we love nothing more than packing up the car and heading to an abandoned middle school at 5am as long as we win enough money to cover waffle house afterwards. This is a space to share the stories of our escapades.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About Me</title>
      <link>https://mcginniscommawill.com/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/about/</guid>
      <description>&lt;!-- Optional: Replace the placeholder with your actual headshot image --&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mcginniscommawill.com/images/headshot.jpg&#34; alt=&#34;Professional Headshot of Will McGinnis&#34;&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;hi-im-will-mcginnis&#34;&gt;Hi, I&amp;rsquo;m Will McGinnis&lt;/h1&gt;&#xA;&lt;p&gt;I&amp;rsquo;m an entrepreneur and data science executive with over a decade of experience at the intersection of AI/ML, technology, and business strategy. Currently, I serve as Chief Data Scientist at Scale Venture Partners, where I&amp;rsquo;m building AI infrastructure to augment investment decision-making.&lt;/p&gt;&#xA;&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;My educational background is in Mechanical Engineering, in which I received a B.S. and M.S. from Auburn University. My research work in undergrad and graduate school focused on multi-body dynamics and system wear, using large scale numeric simulations and optimization techniques to understand and improve wear performance in complex aerospace systems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>BetaDay</title>
      <link>https://mcginniscommawill.com/projects/betaday/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/projects/betaday/</guid>
      <description>&lt;p&gt;BetaDay is an iOS app I built to get better at making decisions under uncertainty. Every day, it presents a stock and asks: will it go up or down? You make your call, assign a confidence level, and the next day you find out how you did.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Daily Predictions&lt;/strong&gt;: One stock prediction per day with confidence levels&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Four-Quadrant Retrospective&lt;/strong&gt;: See your results organized by confident-right, confident-wrong, uncertain-right, uncertain-wrong&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Decision Quality Tracking&lt;/strong&gt;: Track calibration over time, not just whether you were right&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Historical Review&lt;/strong&gt;: Browse past predictions and see how your judgment evolves&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Market Data&lt;/strong&gt;: Real stock market data so the randomness is genuine&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;how-it-works&#34;&gt;How It Works&lt;/h2&gt;&#xA;&lt;p&gt;The point isn&amp;rsquo;t to become a stock picker. The point is to practice the meta-skill of knowing how much you know. The four-quadrant view is the key insight: being confidently wrong is very different from being uncertainly wrong, and the app helps you see which quadrant you tend to land in.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Category Encoders</title>
      <link>https://mcginniscommawill.com/oss/category_encoders/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/category_encoders/</guid>
      <description>&lt;p&gt;Category Encoders is a scikit-learn-contrib library providing a comprehensive set of encoders for categorical variables. I authored this project but am no longer the day-to-day maintainer. It has grown into one of the most widely-used categorical encoding libraries in the Python ecosystem.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;15+ Encoding Methods&lt;/strong&gt;: OneHot, Target, Binary, Hashing, Leave-One-Out, and more&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Scikit-learn Compatible&lt;/strong&gt;: Full pipeline and transformer API support&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Handles Missing Values&lt;/strong&gt;: Built-in strategies for missing data&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Feature Engineering&lt;/strong&gt;: Advanced encodings for high-cardinality features&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install category-encoders&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;category_encoders&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;ce&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Target encoding&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;encoder&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ce&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TargetEncoder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cols&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;category_column&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;X_encoded&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;encoder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fit_transform&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Binary encoding for high-cardinality&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;encoder&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ce&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BinaryEncoder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cols&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;high_card_column&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;X_encoded&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;encoder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fit_transform&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Use in sklearn pipelines&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sklearn.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pipe&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;encoder&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ce&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;OrdinalEncoder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;classifier&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RandomForestClassifier&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;academic-citation&#34;&gt;Academic Citation&lt;/h2&gt;&#xA;&lt;p&gt;Category Encoders was published in the Journal of Open Source Software (JOSS) and has been cited in numerous academic papers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ContextSwitch</title>
      <link>https://mcginniscommawill.com/projects/contextswitch/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/projects/contextswitch/</guid>
      <description>&lt;p&gt;ContextSwitch is a kanban board designed for the way I actually work with AI coding agents. The core idea: drop a &lt;code&gt;todo.db&lt;/code&gt; SQLite database in your repo and every agent (Claude Code, Cursor, Codex) can read and write to the same task list through MCP.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Shared Task Board&lt;/strong&gt;: A single SQLite database that all your AI agents can access through MCP&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Visual Kanban&lt;/strong&gt;: HTMX-powered web interface with drag-and-drop columns&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MCP Server&lt;/strong&gt;: Exposes task management as MCP tools so agents can check status, claim tasks, and mark things done&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Project Diaries&lt;/strong&gt;: Automated development journals that track decisions, progress, and blockers using Claude Code hooks&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Lexicon Integration&lt;/strong&gt;: Personal prompt library that turns your templates into MCP slash commands&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;how-it-works&#34;&gt;How It Works&lt;/h2&gt;&#xA;&lt;p&gt;When you&amp;rsquo;re juggling multiple AI agents on a project, the hard part is coordination. ContextSwitch gives them a shared state by putting the task database right in the repo. Start the MCP server, and agents can see what needs doing, what&amp;rsquo;s in progress, and what&amp;rsquo;s blocked.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cookiecutter PIP Project</title>
      <link>https://mcginniscommawill.com/oss/cookiecutter-pipproject/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/cookiecutter-pipproject/</guid>
      <description>&lt;p&gt;A modern, production-ready cookiecutter template for Python packages that follows best practices. This template sets up a complete development environment with all the tools needed to build, test, and publish professional Python libraries.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Modern Python&lt;/strong&gt;: Python 3.8+ with type hints&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Testing&lt;/strong&gt;: pytest with coverage reporting&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;CI/CD&lt;/strong&gt;: GitHub Actions workflows included&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: Sphinx documentation setup&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Linting&lt;/strong&gt;: Ruff, Black, and mypy configured&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Publishing&lt;/strong&gt;: Ready for PyPI deployment&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Install cookiecutter&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install cookiecutter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Create a new project&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cookiecutter gh:wdm0006/cookiecutter-pipproject&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;what-you-get&#34;&gt;What You Get&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;your-project/&#xA;├── src/your_project/&#xA;│   └── __init__.py&#xA;├── tests/&#xA;├── docs/&#xA;├── .github/workflows/&#xA;├── pyproject.toml&#xA;├── README.md&#xA;└── LICENSE&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Elote</title>
      <link>https://mcginniscommawill.com/oss/elote/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/elote/</guid>
      <description>&lt;p&gt;Elote is a Python library implementing various rating and ranking algorithms. Named after the Mexican street corn, it provides implementations of Elo, Glicko, ECF, DWZ, and other competitive rating systems.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Multiple Rating Systems&lt;/strong&gt;: Elo, Glicko, Glicko-2, ECF, DWZ, and more&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Simple API&lt;/strong&gt;: Easy-to-use interface for all rating calculations&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Head-to-Head&lt;/strong&gt;: Direct comparison and match simulation&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Ensemble Methods&lt;/strong&gt;: Combine multiple rating systems&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install elote&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;elote&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;EloCompetitor&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;player1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;EloCompetitor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;player2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;EloCompetitor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Simulate a match where player1 wins&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;player1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;beat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;player2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Player 1 rating: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;player1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rating&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Player 2 rating: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;player2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rating&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Get expected win probability&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;prob&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;player1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;expected_score&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;player2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Evergreen</title>
      <link>https://mcginniscommawill.com/projects/evergreen/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/projects/evergreen/</guid>
      <description>&lt;p&gt;Evergreen is a personal CRM I built for macOS and iOS because every CRM I tried was designed for salespeople, not for someone who just wants to keep track of the people in their life. It started as a 12-hour vibe coding experiment in Swift (a language I&amp;rsquo;d never written before) and grew into something I actually use every day.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Contacts&lt;/strong&gt;: Full contact management with relationship context, notes, and interaction history&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Network View&lt;/strong&gt;: Visual network graph showing how your contacts relate to each other&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Analytics&lt;/strong&gt;: Insights into your communication patterns and relationship health&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Actions&lt;/strong&gt;: Track follow-ups, introductions, and other relationship tasks&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MCP Integration&lt;/strong&gt;: Connect to Claude and other AI assistants for smart prompts and relationship insights&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Cross-Platform&lt;/strong&gt;: Native macOS and iOS apps with shared data via iCloud&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;how-it-works&#34;&gt;How It Works&lt;/h2&gt;&#xA;&lt;p&gt;Evergreen organizes around four tabs: contacts for the core database, network for the relationship graph, analytics for patterns, and actions for follow-ups. The MCP integration means I can ask Claude things like &amp;ldquo;who haven&amp;rsquo;t I talked to in a while?&amp;rdquo; or &amp;ldquo;draft a follow-up email to someone I met at a conference&amp;rdquo; and it pulls the right context.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flink Python Examples</title>
      <link>https://mcginniscommawill.com/oss/flink-python-examples/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/flink-python-examples/</guid>
      <description>&lt;p&gt;A comprehensive collection of Apache Flink examples using PyFlink for stream and batch processing. This repository provides practical, working examples for learning and building real-time data processing applications.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Stream Processing&lt;/strong&gt;: Real-time data processing examples&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Batch Processing&lt;/strong&gt;: Batch ETL and analytics examples&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Table API&lt;/strong&gt;: SQL and Table API usage patterns&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Connectors&lt;/strong&gt;: Kafka, filesystem, and database integrations&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;State Management&lt;/strong&gt;: Stateful processing patterns&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;examples-included&#34;&gt;Examples Included&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Word count (streaming and batch)&lt;/li&gt;&#xA;&lt;li&gt;Kafka consumer/producer&lt;/li&gt;&#xA;&lt;li&gt;Window aggregations&lt;/li&gt;&#xA;&lt;li&gt;State backend configuration&lt;/li&gt;&#xA;&lt;li&gt;Custom serialization&lt;/li&gt;&#xA;&lt;li&gt;CEP (Complex Event Processing)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;getting-started&#34;&gt;Getting Started&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Clone the repository&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/wdm0006/flink-python-examples&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Install PyFlink&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install apache-flink&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Run an example&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python examples/word_count_streaming.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Free Coffee Chats: Meet Me in Atlanta</title>
      <link>https://mcginniscommawill.com/coffee/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/coffee/</guid>
      <description>&lt;h2 id=&#34;lets-chat-over-coffee&#34;&gt;Let&amp;rsquo;s Chat Over Coffee&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m always interested in meeting new people and having interesting conversations about technology, startups, and software engineering. If you&amp;rsquo;re in the Atlanta area and want to talk about:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Software development&lt;/li&gt;&#xA;&lt;li&gt;Machine learning and AI&lt;/li&gt;&#xA;&lt;li&gt;Startups and entrepreneurship&lt;/li&gt;&#xA;&lt;li&gt;The Atlanta tech scene&lt;/li&gt;&#xA;&lt;li&gt;Something interesting you&amp;rsquo;re working on&lt;/li&gt;&#xA;&lt;li&gt;Potential collaborations or projects&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I&amp;rsquo;d be happy to buy you a coffee and chat. I&amp;rsquo;m particularly interested in connecting with other technologists, entrepreneurs, and people building interesting things.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git Pandas</title>
      <link>https://mcginniscommawill.com/oss/git-pandas/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/git-pandas/</guid>
      <description>&lt;p&gt;Git Pandas wraps GitPython to produce pandas DataFrames for Git repository analysis. It enables data-driven analysis of Git repositories with features for commit history, blame information, and project-level insights.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Commit Analysis&lt;/strong&gt;: Convert commit history into pandas DataFrames&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Blame Data&lt;/strong&gt;: Analyze file ownership and contribution patterns&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Project Aggregation&lt;/strong&gt;: Analyze multiple repositories together&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Caching&lt;/strong&gt;: Redis-backed caching for faster repeated analysis&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Visualizations&lt;/strong&gt;: Built-in punchcard and contribution charts&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install git-pandas&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;gitpandas&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Repository&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;repo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Repository&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/path/to/repo&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Get commit history as DataFrame&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;commits&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;commit_history&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Analyze file blame&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;blame&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Generate punchcard data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;punchcard&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;punchcard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>GitNOC</title>
      <link>https://mcginniscommawill.com/oss/gitnoc/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/gitnoc/</guid>
      <description>&lt;p&gt;GitNOC is a network operations center (NOC) style dashboard for visualizing Git repository activity and health. Built on top of git-pandas, it provides real-time visibility into your development team&amp;rsquo;s activity.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Activity Dashboards&lt;/strong&gt;: Visual overview of repository activity&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Team Metrics&lt;/strong&gt;: Developer contribution analytics&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Health Indicators&lt;/strong&gt;: Repository health and activity metrics&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Multi-Repo Support&lt;/strong&gt;: Monitor entire organizations&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Web Interface&lt;/strong&gt;: Browser-based dashboard&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install gitnoc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Start the dashboard for a single repo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnoc /path/to/repo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Monitor multiple repositories&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnoc /path/to/repos/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Specify port&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnoc /path/to/repo --port &lt;span class=&#34;m&#34;&gt;8080&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;dashboard-views&#34;&gt;Dashboard Views&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Commit activity heatmaps&lt;/li&gt;&#xA;&lt;li&gt;Developer contribution charts&lt;/li&gt;&#xA;&lt;li&gt;File change frequency&lt;/li&gt;&#xA;&lt;li&gt;Branch activity visualization&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Hugo Frontmatter MCP</title>
      <link>https://mcginniscommawill.com/oss/hugo-frontmatter-mcp/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/hugo-frontmatter-mcp/</guid>
      <description>&lt;p&gt;Hugo Frontmatter MCP is a Model Context Protocol server for reading, updating, validating, and batch-processing YAML frontmatter in Hugo content files. It exposes 14+ tools covering everything from individual field updates to directory-wide tag management.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Field Management&lt;/strong&gt;: Read and modify individual frontmatter fields (title, date, description, draft status)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;List Operations&lt;/strong&gt;: Add, remove, and manage list fields like tags and images&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Batch Processing&lt;/strong&gt;: Directory-wide operations for listing all tags, finding posts by tag, renaming tags&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Date Validation&lt;/strong&gt;: Check date format consistency across all content files&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;14+ Tools&lt;/strong&gt;: Comprehensive coverage of frontmatter operations&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Direct&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uvx --from git+https://github.com/wdm0006/hugo-frontmatter-mcp hugo-frontmatter-mcp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Via Smithery&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx -y @smithery/cli install @wdm0006/hugo-frontmatter-mcp --client claude&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Or add to your MCP client config&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;hugo-frontmatter&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;: &lt;span class=&#34;s2&#34;&gt;&amp;#34;uvx&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;args&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;--from&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;git+https://github.com/wdm0006/hugo-frontmatter-mcp&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;hugo-frontmatter-mcp&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;p&gt;All operations require absolute file or directory paths. The server exposes tools for field retrieval, metadata updates, tag and image management, and batch validation across your Hugo content directory.&lt;/p&gt;</description>
    </item>
    <item>
      <title>idea.log</title>
      <link>https://mcginniscommawill.com/projects/idealog/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/projects/idealog/</guid>
      <description>&lt;p&gt;idea.log is an iPhone app for capturing ideas when they happen, whether you&amp;rsquo;re biking, walking, or just don&amp;rsquo;t want to context-switch into a full notes app. The whole thing is designed around speed: open, capture, close.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Fast Capture&lt;/strong&gt;: Launch and record an idea in seconds, with minimal friction&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Siri Integration&lt;/strong&gt;: Capture ideas hands-free using voice commands&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;First-Step System&lt;/strong&gt;: Every idea gets a concrete first step, turning vague thoughts into actionable items&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Share with Agent&lt;/strong&gt;: Export ideas as structured prompts for AI tools to help with execution&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Semantic Search&lt;/strong&gt;: Find past ideas by meaning, not just keywords&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Status Tracking&lt;/strong&gt;: Ideas flow from captured to explored to in-progress to done&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;how-it-works&#34;&gt;How It Works&lt;/h2&gt;&#xA;&lt;p&gt;Most idea apps try to be everything: notes, tasks, projects, wikis. idea.log does one thing. You have an idea, you capture it, and you move on. Later, you come back and add a first step, which is the single most important thing for turning an idea into something real.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Keeks</title>
      <link>https://mcginniscommawill.com/oss/keeks/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/keeks/</guid>
      <description>&lt;p&gt;Keeks is a Python library for optimal bankroll management and betting strategies. It implements the Kelly Criterion and various fractional Kelly strategies for making mathematically optimal betting decisions.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Kelly Criterion&lt;/strong&gt;: Full and fractional Kelly calculations&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Risk Management&lt;/strong&gt;: Conservative betting strategies&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Simulation&lt;/strong&gt;: Monte Carlo bankroll simulations&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Multiple Outcomes&lt;/strong&gt;: Support for multi-outcome scenarios&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install keeks&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;keeks&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;KellyCriterion&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Create a Kelly calculator&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;kelly&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;KellyCriterion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bankroll&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Calculate optimal bet size&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# For a bet with 60% win probability and 2:1 odds&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;bet_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kelly&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bet_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;win_prob&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;odds&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;2.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Optimal bet: $&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bet_size&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.2f&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Makefile MCP</title>
      <link>https://mcginniscommawill.com/oss/makefile-mcp/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/makefile-mcp/</guid>
      <description>&lt;p&gt;Makefile MCP turns your Makefile targets into MCP tools that AI assistants can discover and run. Each target becomes a callable tool (e.g., &lt;code&gt;make_build&lt;/code&gt;, &lt;code&gt;make_test&lt;/code&gt;), bridging your build system and AI workflows.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Dynamic Tool Generation&lt;/strong&gt;: Each Makefile target automatically becomes an MCP tool&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Description Extraction&lt;/strong&gt;: Pulls target descriptions from Makefile comments&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Include/Exclude Filtering&lt;/strong&gt;: Control which targets are exposed to AI assistants&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Built-in Metadata Tools&lt;/strong&gt;: &lt;code&gt;list-available-targets&lt;/code&gt; and &lt;code&gt;get-makefile-info&lt;/code&gt; for discovery&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Dry-Run Mode&lt;/strong&gt;: Preview what a target would do without executing it&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Run directly&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uvx --from git+https://github.com/wdm0006/makefile-mcp makefile-mcp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Or add to your MCP client config&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;makefile&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;: &lt;span class=&#34;s2&#34;&gt;&amp;#34;uvx&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;args&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;--from&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;git+https://github.com/wdm0006/makefile-mcp&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;makefile-mcp&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;p&gt;Point the server at your Makefile and it discovers all targets. AI assistants can then list available targets, inspect what they do, and execute them directly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mutmut MCP</title>
      <link>https://mcginniscommawill.com/oss/mutmut-mcp/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/mutmut-mcp/</guid>
      <description>&lt;p&gt;Mutmut MCP brings mutation testing into your AI coding workflow. It wraps mutmut as an MCP server so Claude and other AI assistants can run mutation tests, inspect surviving mutations, and recommend where your test coverage needs work.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Run Mutation Tests&lt;/strong&gt;: Execute mutation testing across Python projects from your AI assistant&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Inspect Survivors&lt;/strong&gt;: See which mutations survived your test suite&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Coverage Recommendations&lt;/strong&gt;: Get specific suggestions for improving test coverage&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Retest Mutations&lt;/strong&gt;: Retest individual or batch survivors after fixing tests&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Cache Management&lt;/strong&gt;: Manage the mutmut cache system&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Six MCP Tools&lt;/strong&gt;: Full mutation testing workflow exposed as tools&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Direct&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uvx --from git+https://github.com/wdm0006/mutmut-mcp mutmut-mcp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Via Smithery&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx -y @smithery/cli install @wdm0006/mutmut-mcp --client claude&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Or clone and run locally&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/wdm0006/mutmut-mcp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; mutmut-mcp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv sync&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run mutmut-mcp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;p&gt;Add to your MCP client configuration, then ask your AI assistant to run mutation tests on your project. It will execute mutmut, report results, and help you identify and fix test coverage gaps.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ParGA</title>
      <link>https://mcginniscommawill.com/oss/parga/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/parga/</guid>
      <description>&lt;p&gt;ParGA is a parallel genetic algorithm library written in Rust with Python bindings via PyO3. It delivers 5-50x speedups over pure Python GA libraries by auto-selecting the best execution strategy based on your fitness function&amp;rsquo;s cost.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Unified API&lt;/strong&gt;: Single &lt;code&gt;GA&lt;/code&gt; class that auto-selects the best execution strategy&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Auto-Parallelization&lt;/strong&gt;: Automatically parallelizes expensive fitness functions&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Island Model&lt;/strong&gt;: Multiple migration topologies (ring, star, ladder, fully connected, random)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Diverse Operators&lt;/strong&gt;: Tournament, roulette, and rank selection; single-point, two-point, uniform, and blend crossover; Gaussian, uniform, and polynomial mutation&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Rust Backend&lt;/strong&gt;: Fast execution for lightweight fitness functions&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Process Pools&lt;/strong&gt;: Parallel pools for expensive fitness evaluations&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Python&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install parga&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Rust&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Add to Cargo.toml:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# parga = &amp;#34;0.1&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;parga&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GA&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;fitness&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;xi&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;xi&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ga&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fitness_fn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fitness&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dimensions&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ga&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The library measures your fitness function&amp;rsquo;s cost during initialization and picks the most efficient strategy automatically: Rust backend for fast functions, parallel process pools for expensive ones.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pyculiar</title>
      <link>https://mcginniscommawill.com/oss/pyculiar/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/pyculiar/</guid>
      <description>&lt;p&gt;Pyculiar implements S-H-ESD (Seasonal Hybrid Extreme Studentized Deviate) for detecting anomalies in time series data. It&amp;rsquo;s a minimal pure Python port of Twitter&amp;rsquo;s AnomalyDetection R package, with only numpy and pandas as dependencies.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;S-H-ESD Algorithm&lt;/strong&gt;: Seasonal Hybrid ESD for robust anomaly detection&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Minimal Dependencies&lt;/strong&gt;: Only numpy and pandas required&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Direction Control&lt;/strong&gt;: Detect positive, negative, or both types of anomalies&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Configurable Granularity&lt;/strong&gt;: Day, hour, minute, second, or millisecond&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Threshold Filtering&lt;/strong&gt;: Optional filtering thresholds and expected value output&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;C Performance&lt;/strong&gt;: Core algorithm implemented in C for speed&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install pyculiar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pyculiar&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;detect_ts&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# DataFrame with two columns: unix timestamps and values&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;your_timeseries.csv&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;results&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;detect_ts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;max_anoms&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.02&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;both&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;alpha&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.05&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Key parameters include &lt;code&gt;max_anoms&lt;/code&gt; (0.0-0.49 for maximum anomaly proportion), &lt;code&gt;alpha&lt;/code&gt; (significance threshold), &lt;code&gt;direction&lt;/code&gt; (pos, neg, or both), and &lt;code&gt;granularity&lt;/code&gt; for time resolution.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PyGeoHash</title>
      <link>https://mcginniscommawill.com/oss/pygeohash/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/pygeohash/</guid>
      <description>&lt;p&gt;PyGeoHash is a Python library for working with geohashes, providing encoding, decoding, and distance calculations. It&amp;rsquo;s designed to be fast, simple, and Pythonic.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Encode/Decode&lt;/strong&gt;: Convert latitude/longitude to geohash and back&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Distance Calculations&lt;/strong&gt;: Calculate distances between geohashes&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Neighbor Finding&lt;/strong&gt;: Find adjacent geohashes in any direction&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Type Hints&lt;/strong&gt;: Full type annotation support for modern Python development&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install pygeohash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pygeohash&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pgh&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Encode a location&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;geohash&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pgh&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;encode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;42.6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;5.6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Returns: &amp;#39;ezs42e44yx96&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Decode a geohash&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;lat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lon&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pgh&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ezs42&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Returns: (42.6, -5.6)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Get neighbors&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;neighbors&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pgh&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;neighbors&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ezs42&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Rampart</title>
      <link>https://mcginniscommawill.com/oss/rampart/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/rampart/</guid>
      <description>&lt;p&gt;Rampart audits and enforces GitHub branch protection rules consistently across repositories for users or organizations. Define your protection rules in YAML, then audit compliance or automatically fix non-compliant repos.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Audit Mode&lt;/strong&gt;: Check all repos against your defined protection rules&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Apply Mode&lt;/strong&gt;: Automatically fix non-compliant repositories&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;YAML Configuration&lt;/strong&gt;: Define 11 distinct rule categories in a config file&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Org-Wide or Single Repo&lt;/strong&gt;: Target an entire organization or individual repositories&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;HTML Reports&lt;/strong&gt;: Generate compliance reports&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;CI/CD Ready&lt;/strong&gt;: Non-zero exit codes for pipeline integration&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Dry-Run&lt;/strong&gt;: Preview changes before applying them&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Smart Filtering&lt;/strong&gt;: Automatically excludes forks and archived projects&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Homebrew&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install wdm0006/tap/rampart&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Or Go install&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;go install github.com/wdm0006/rampart@latest&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Requires GitHub CLI (&lt;code&gt;gh&lt;/code&gt;) installed and authenticated with admin access to managed repos.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Random Post</title>
      <link>https://mcginniscommawill.com/random/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/random/</guid>
      <description></description>
    </item>
    <item>
      <title>ReleaseRadar</title>
      <link>https://mcginniscommawill.com/oss/releaseradar/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/releaseradar/</guid>
      <description>&lt;p&gt;ReleaseRadar is a terminal UI tool for keeping tabs on GitHub releases across all the repositories you care about. It pulls release data, shows repo metadata, and optionally uses OpenAI to generate summaries of what changed.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Multi-Repo Tracking&lt;/strong&gt;: Monitor releases from dozens of GitHub repositories simultaneously&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Dual-Pane TUI&lt;/strong&gt;: Releases table on one side, detail view on the other&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Repository Metadata&lt;/strong&gt;: Stars, forks, language, and topics at a glance&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Changelog Fallback&lt;/strong&gt;: Parses changelogs when GitHub Releases aren&amp;rsquo;t available&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;AI Summaries&lt;/strong&gt;: Optional OpenAI integration for human-readable release summaries&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Chat Interface&lt;/strong&gt;: Conversational AI for discussing tracked releases&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Easy Management&lt;/strong&gt;: Add and remove repositories via the TUI or command line&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Homebrew&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install wdm0006/tap/releaseradar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Or build from source&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;go install github.com/wdm0006/releaseradar@latest&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Requires GitHub CLI (&lt;code&gt;gh&lt;/code&gt;) installed and authenticated. OpenAI API key is optional for AI features.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Restaurant Oracle</title>
      <link>https://mcginniscommawill.com/projects/restaurant-oracle/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/projects/restaurant-oracle/</guid>
      <description>&lt;p&gt;Restaurant Oracle is a simple tool: enter your address and it tells you which restaurant from my curated list is closest to you. No decision fatigue, no scrolling through reviews, no analysis paralysis.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-it-works&#34;&gt;How It Works&lt;/h2&gt;&#xA;&lt;p&gt;I maintain a list of restaurants I genuinely like. When you enter your address, the oracle finds the closest one and tells you to go there. That&amp;rsquo;s it. No ratings, no filters, no &amp;ldquo;sort by price&amp;rdquo; &amp;ndash; just a recommendation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stargazers</title>
      <link>https://mcginniscommawill.com/oss/stargazers/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/stargazers/</guid>
      <description>&lt;p&gt;Stargazers is a modern CLI tool to fetch, analyze, and summarize the stargazers or forkers of any public GitHub repository. Understand who is interested in your open source projects and identify potential collaborators or users.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Fetch Stargazers&lt;/strong&gt;: Get all users who starred a repository&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Fetch Forkers&lt;/strong&gt;: Get all users who forked a repository&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;User Analysis&lt;/strong&gt;: Analyze user profiles and activity&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Export Data&lt;/strong&gt;: Output to JSON or CSV&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Rate Limiting&lt;/strong&gt;: Automatic handling of GitHub API limits&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install stargazers&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Get stargazers for a repo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stargazers wdm0006/pygeohash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Get forkers&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stargazers wdm0006/pygeohash --forkers&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Export to JSON&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stargazers wdm0006/pygeohash --output stars.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# With GitHub token for higher rate limits&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_token&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stargazers wdm0006/pygeohash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>TodoList MCP</title>
      <link>https://mcginniscommawill.com/oss/todolist-mcp/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/todolist-mcp/</guid>
      <description>&lt;p&gt;TodoList MCP is an MCP server that gives AI assistants a proper todo list backed by SQLite. It also ships with a FastAPI/HTMX kanban board so humans can see and manage the same tasks visually. Both interfaces share the same database.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Six MCP Tools&lt;/strong&gt;: Add items (with priority, due dates, tags), list with filters/sorting, update fields, mark completion, delete, and access a workflow guide&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Dual Interface&lt;/strong&gt;: MCP server for AI assistants plus a kanban web board for humans&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Shared SQLite Database&lt;/strong&gt;: Both interfaces read and write to the same DB&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Drag-and-Drop Kanban&lt;/strong&gt;: Visual task management with color-coded priorities and tags&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;No Build Process&lt;/strong&gt;: The web UI uses HTMX, no JavaScript build step required&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Run directly&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uvx --from git+https://github.com/wdm0006/todolist-mcp todolist-mcp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Or add to your MCP client config&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;todolist&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;: &lt;span class=&#34;s2&#34;&gt;&amp;#34;uvx&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;args&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;--from&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;git+https://github.com/wdm0006/todolist-mcp&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;todolist-mcp&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;p&gt;The MCP server exposes tools for adding, listing, updating, completing, and deleting tasks. The kanban board runs on a local web server for visual management alongside your AI workflow.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vanity</title>
      <link>https://mcginniscommawill.com/oss/vanity/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/vanity/</guid>
      <description>&lt;p&gt;Vanity syncs your GitHub contribution graphs across multiple accounts so every account reflects your real total activity. It shares only dates and contribution counts, never code, commit messages, or repo names.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Privacy-First&lt;/strong&gt;: Shares only dates and contribution counts, no code or messages&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Multi-Account Sync&lt;/strong&gt;: Work, personal, freelance, and legacy GitHub accounts&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Import Mode&lt;/strong&gt;: Import contributions from accounts you no longer access&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Scrape Option&lt;/strong&gt;: Pull private contribution data from inaccessible accounts&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Lightweight Commits&lt;/strong&gt;: Backdated empty commits for graph unification&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Homebrew&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install wdm0006/tap/vanity&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Or Go install&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;go install github.com/wdm0006/vanity/cmd/vanity@latest&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Requires GitHub CLI (&lt;code&gt;gh&lt;/code&gt;) installed and authenticated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing Tools MCP</title>
      <link>https://mcginniscommawill.com/oss/writing-tools-mcp/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mcginniscommawill.com/oss/writing-tools-mcp/</guid>
      <description>&lt;p&gt;Writing Tools MCP is a Model Context Protocol (MCP) server that provides text analysis tools to help improve writing quality. It integrates with AI assistants like Claude to offer readability scoring, keyword analysis, and style checking.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Readability Analysis&lt;/strong&gt;: Flesch-Kincaid, Gunning Fog, and more&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Keyword Extraction&lt;/strong&gt;: TF-IDF based keyword identification&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Style Checking&lt;/strong&gt;: Passive voice, adverb usage detection&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Word Count&lt;/strong&gt;: Detailed word and sentence statistics&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MCP Compatible&lt;/strong&gt;: Works with Claude Desktop and other MCP clients&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Add to Claude Desktop config&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;writing-tools&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;: &lt;span class=&#34;s2&#34;&gt;&amp;#34;uvx&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;args&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;writing-tools-mcp&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;available-tools&#34;&gt;Available Tools&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;analyze_readability&lt;/code&gt;: Get readability scores for text&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;extract_keywords&lt;/code&gt;: Find important keywords and phrases&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;check_style&lt;/code&gt;: Identify style issues and suggestions&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;word_stats&lt;/code&gt;: Get detailed text statistics&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
