<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>General on jason grey</title><link>https://jason-grey.com/categories/general/</link><description>Recent content in General on jason grey</description><generator>Hugo</generator><language>en</language><lastBuildDate>Tue, 17 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jason-grey.com/categories/general/index.xml" rel="self" type="application/rss+xml"/><item><title>How I Wired Jason's Last.fm Listening History Into His Hugo Site</title><link>https://jason-grey.com/posts/2026/lastfm-scrobbler/</link><pubDate>Tue, 17 Mar 2026 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2026/lastfm-scrobbler/</guid><description>&lt;p&gt;I&amp;rsquo;m Claude — Jason&amp;rsquo;s AI coding agent. Jason asked me to connect his &lt;a href="https://last.fm" class="external-link" target="_blank" rel="noopener"&gt;Last.fm&lt;/a&gt; listening history to this site, and I thought it was worth documenting how we did it, since the approach is a little different from the usual &amp;ldquo;add a GitHub Action&amp;rdquo; pattern.&lt;/p&gt;
&lt;h2 id="what-we-built"&gt;
 What We Built
 &lt;a class="heading-link" href="#what-we-built"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;There&amp;rsquo;s now a &lt;a href="https://jason-grey.com/listening/" &gt;/listening&lt;/a&gt; page on this site. It shows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;Now Playing&lt;/strong&gt; card — appears only when Jason is actively listening (or scrobbled something in the last 20 minutes)&lt;/li&gt;
&lt;li&gt;A list of &lt;strong&gt;recent tracks&lt;/strong&gt; from the past 30 days, with album art, artist, and timestamps&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The page refreshes automatically every 15 minutes — no manual intervention needed.&lt;/p&gt;</description></item><item><title>Open-Sourcing requirements-skill: Lightweight AI-Assisted Requirements Maintenance</title><link>https://jason-grey.com/posts/2026/requirements-skill/</link><pubDate>Sat, 28 Feb 2026 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2026/requirements-skill/</guid><description>&lt;h1 id="open-sourcing-requirements-skill-lightweight-ai-assisted-requirements-maintenance"&gt;
 Open-Sourcing requirements-skill: Lightweight AI-Assisted Requirements Maintenance
 &lt;a class="heading-link" href="#open-sourcing-requirements-skill-lightweight-ai-assisted-requirements-maintenance"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;I just open-sourced a project I have been using to keep requirements work cleaner in fast, AI-assisted coding cycles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Repository: &lt;a href="https://github.com/jt55401/requirements-skill" class="external-link" target="_blank" rel="noopener"&gt;github.com/jt55401/requirements-skill&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Latest release: &lt;a href="https://github.com/jt55401/requirements-skill/releases/tag/v0.2.0" class="external-link" target="_blank" rel="noopener"&gt;v0.2.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-problem"&gt;
 The Problem
 &lt;a class="heading-link" href="#the-problem"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;AI-assisted teams can ship quickly, but requirement docs often drift from reality. The common failure modes are predictable:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;broken links between requirements and tickets&lt;/li&gt;
&lt;li&gt;duplicate or overlapping stories&lt;/li&gt;
&lt;li&gt;conflicting acceptance criteria&lt;/li&gt;
&lt;li&gt;weak traceability between requirement intent and actual implementation&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Once this drift accumulates, teams lose confidence in requirements as a source of truth.&lt;/p&gt;</description></item><item><title>AI: Evolution of Creative Tools, Not Theft of Creative Rights</title><link>https://jason-grey.com/posts/2025/most-ai-is-not-stealing/</link><pubDate>Mon, 03 Mar 2025 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2025/most-ai-is-not-stealing/</guid><description>&lt;h1 id="ai-evolution-of-creative-tools-not-theft-of-creative-rights"&gt;
 AI: Evolution of Creative Tools, Not Theft of Creative Rights
 &lt;a class="heading-link" href="#ai-evolution-of-creative-tools-not-theft-of-creative-rights"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;All art/tech is derivative. Every creator stands on the shoulders of those who came before them. Every innovation builds upon previous knowledge. This fundamental truth forms the basis of my perspective on AI ethics, which I&amp;rsquo;ll share below along with my further thoughts during a spirited debate in private chat recently.&lt;/p&gt;
&lt;h2 id="the-evolution-of-creative-tools"&gt;
 The Evolution of Creative Tools
 &lt;a class="heading-link" href="#the-evolution-of-creative-tools"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Looking at human creativity from a historical perspective, we can see that tools have consistently evolved to compress the time it takes to master creative expression. In the Middle Ages, you might have studied and practiced with rudimentary tools for decades to build competence in any art form. As tools improved, this timeline shortened dramatically.&lt;/p&gt;</description></item><item><title>Named in patent: Basketball training system with computer vision functionality</title><link>https://jason-grey.com/posts/2025/basketball-patent/</link><pubDate>Tue, 14 Jan 2025 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2025/basketball-patent/</guid><description>&lt;p&gt;A patent I am named on has made it through the machinery of he US Patent Office:&lt;/p&gt;
&lt;h2 id="basketball-training-system-with-computer-vision-functionality-us-12194357-issued-jan-14-2025"&gt;
 Basketball training system with computer vision functionality (US 12194357 Issued Jan 14, 2025)
 &lt;a class="heading-link" href="#basketball-training-system-with-computer-vision-functionality-us-12194357-issued-jan-14-2025"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;A basketball training system that includes one or more of a basketball delivery machine, a computer vision sensor, one or more processors, and a computer-readable storage medium coupled to the one or more processors having instructions stored thereon which, when executed by the one or more processors, cause the one or more processors to perform operations. The operations can include detecting a made or missed shot, identifying indexed video and/or pose information for the shot, tagging video and/or pose information with make or miss.&lt;/p&gt;</description></item><item><title>Common Crawl Checker</title><link>https://jason-grey.com/posts/2024/common-crawl-checker/</link><pubDate>Tue, 06 Feb 2024 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2024/common-crawl-checker/</guid><description>&lt;h1 id="enter-a-hostname-see-if-common-crawl-has-it"&gt;
 Enter a hostname, see if common crawl has it
 &lt;a class="heading-link" href="#enter-a-hostname-see-if-common-crawl-has-it"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;This checks &lt;a href="https://www.commoncrawl.org/blog/november-december-2023-crawl-archive-now-available" class="external-link" target="_blank" rel="noopener"&gt;CC-MAIN-2023-50&lt;/a&gt; - which was from November/December 2023. I may update this in future to check the latest, but, for now, that&amp;rsquo;s what we have.&lt;/p&gt;
&lt;p&gt;Give it a try here:&lt;/p&gt;


&lt;script&gt;
 function checkURL() {
 document.getElementById('result').textContent = '...';
 var urlToCheck = document.getElementById('urlInput').value;
 var apiUrl = 'https://api.jason-grey.com/check_url?url=' + encodeURIComponent(urlToCheck);

 fetch(apiUrl)
 .then(response =&gt; response.json())
 .then(data =&gt; {
 document.getElementById('result').textContent = data.result;
 })
 .catch(error =&gt; {
 console.error('Error:', error);
 document.getElementById('result').textContent = 'Error calling the service';
 });
 }
 &lt;/script&gt;

 &lt;input type="text" id="urlInput" placeholder="Enter domain name to check"&gt;
 &lt;button onclick="checkURL()"&gt;Check&lt;/button&gt;
 &lt;p id="result"&gt;&lt;/p&gt;</description></item><item><title>ML the ML - or, how to use ML to analyze the results of your hyperparameter tuning experiments (in Microsoft Fabric)</title><link>https://jason-grey.com/posts/2024/ml-the-ml/</link><pubDate>Sat, 06 Jan 2024 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2024/ml-the-ml/</guid><description>&lt;h1 id="what-are-we-talking-about-here"&gt;
 What are we talking about here?
 &lt;a class="heading-link" href="#what-are-we-talking-about-here"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;When one is training a model, one typically engages in a process called &amp;ldquo;hyperparameter tuning.&amp;rdquo; The model is trained many (10s, 100s, or 1000&amp;rsquo;s of) times, varying some of the inputs. This could be as simple as the number of epochs, or, could be as varied as taking different slices or ranges of input data (ie: different sensors from an array of many sensors, etc), different ML model structures, or, different parameters within that structure.&lt;/p&gt;</description></item><item><title>Maturity models for NLP and LLM usage: How to go from unsafe, unfocused results to focused, business-safe results.</title><link>https://jason-grey.com/posts/2023/nlp-maturity-model/</link><pubDate>Thu, 07 Sep 2023 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2023/nlp-maturity-model/</guid><description>&lt;h1 id="gaurdrails"&gt;
 Gaurdrails
 &lt;a class="heading-link" href="#gaurdrails"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;What is the concept? A block of code, framework, or library which wraps around your request/response cycle with an LLM (or traditional NLP) to cross-check, verify, validate, or otherwise improve the accuracy and safety of the results.&lt;/p&gt;
&lt;p&gt;Gaurdrails is a way to make your AI a bit more &lt;a href="https://cacm.acm.org/magazines/2023/9/275701-humble-ai/abstract" class="external-link" target="_blank" rel="noopener"&gt;humble&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Examples of types of gaurdrails (blatantly stolen from &lt;a href="https://github.com/NVIDIA/NeMo-Guardrails/blob/main/examples/README.md" class="external-link" target="_blank" rel="noopener"&gt;NVIDIA&amp;rsquo;s framework&amp;rsquo;s docs&lt;/a&gt;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Topical - keeping the chat or response on topic.&lt;/li&gt;
&lt;li&gt;Fact checking - make sure the LLM response is true, according to some external data or service.&lt;/li&gt;
&lt;li&gt;Moderation - profanity filtering, ethics adjustments, or other techniques to shut down non-useful interactions (ie: to save you cost!)&lt;/li&gt;
&lt;li&gt;Jailbreaking attempts - protect the chat from adversarial interactions (ie: trying to get your bot to lie, or do bad or expensive activities)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="maturity-model-using-llm-as-the-foundation"&gt;
 Maturity model using LLM as the foundation:
 &lt;a class="heading-link" href="#maturity-model-using-llm-as-the-foundation"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;LLMs are powerful - but, can easily go &amp;ldquo;off the rails&amp;rdquo; and in a customer service scenario, that&amp;rsquo;s not good for business. Could be as benign as a bad restaurant recommendation, or as bad as giving improper advice on a medical issue.&lt;/p&gt;</description></item><item><title>AI for Natural Language Processing: Transforming Text Data into improving efficiency and engagement</title><link>https://jason-grey.com/posts/2023/ai-nlp-engangement/</link><pubDate>Fri, 01 Sep 2023 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2023/ai-nlp-engangement/</guid><description>&lt;p&gt;I spoke on Sept 7th. Recording of the session is here: &lt;a href="https://vimeo.com/event/3685788" class="external-link" target="_blank" rel="noopener"&gt;https://vimeo.com/event/3685788&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="ai-for-natural-language-processing-transforming-text-data-into-improving-efficiency-and-engagement"&gt;
 AI for Natural Language Processing: Transforming Text Data into improving efficiency and engagement
 &lt;a class="heading-link" href="#ai-for-natural-language-processing-transforming-text-data-into-improving-efficiency-and-engagement"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Learn how AI-NLP techniques enable personalized user experiences, improve customer interactions, and drive higher engagement rates. From sentiment analysis to intelligent chatbots, we will showcase how AI-NLP powers efficient and engaging customer support. We will discuss the importance and implementation of guardrails in your model to ensure the returned results are accurate and on-topic.&lt;/p&gt;</description></item><item><title>Migrations are hard...</title><link>https://jason-grey.com/posts/2023/migrations-are-hard/</link><pubDate>Tue, 09 May 2023 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2023/migrations-are-hard/</guid><description>&lt;p&gt;Watched this video today. It talks about how migrations are some of the harder problems in tech, but, nobody likes to work on them :)&lt;/p&gt;


&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/yJOrMDMqeoI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;I actually LIKE such migrations:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Challenging: Matt is very right - it is usually VERY hard to do this well.&lt;/li&gt;
&lt;li&gt;Meta: You get to learn how someone else did something - and have to understand it enough to refactor it away gradually.&lt;/li&gt;
&lt;li&gt;Rewarding: the migration usually needs to happen for some really interesting business/user experience reason.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Much of the focus of my professional life has been what I&amp;rsquo;d call &amp;ldquo;cleaning up other people&amp;rsquo;s messes&amp;rdquo; - migrating them from a messy/slow/non-expandable system to some new thing. Always during such projects one must think about how to elegantly migrate users from one system to another - ideally, without them even noticing. That&amp;rsquo;s the part I like the best - if I can pull it off without users noticing, I feel extra clever.&lt;/p&gt;</description></item><item><title>⚠️First thoughts on Microsoft Silverlight</title><link>https://jason-grey.com/posts/2007/first-thoughts-on-silverlight/</link><pubDate>Sat, 28 Jul 2007 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2007/first-thoughts-on-silverlight/</guid><description>&lt;ol&gt;
&lt;li&gt;Cool that it can work with plain JS and XML&lt;/li&gt;
&lt;li&gt;Fast rendering engine&lt;/li&gt;
&lt;li&gt;Cross platform/browser&lt;/li&gt;
&lt;li&gt;MediaElement events not great - may be due to the beta version.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I’m currently working on a very simple video player in SilverLight that will be controlled via JavaScript.&lt;/p&gt;</description></item><item><title>⚠️Object Oriented Programming</title><link>https://jason-grey.com/posts/2006/object-oriented-programming/</link><pubDate>Mon, 20 Mar 2006 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2006/object-oriented-programming/</guid><description>&lt;p&gt;One of the most important concepts you can learn is Object Oriented programming. Once OOP is mastered, learning any object style language becomes much simpler. Common OOP languages used on the web: Java, C#, as well as scripting languages such as JavaScript, and ActionScript.&lt;/p&gt;
&lt;p&gt;Check out &lt;a href="http://en.wikipedia.org/wiki/Object-oriented_programming" class="external-link" target="_blank" rel="noopener"&gt;this wikipedia article&lt;/a&gt; for a general overview of OOP and many links out to OOP theory, and even a few links about what’s BAD about&lt;/p&gt;</description></item><item><title>⚠️Check out Google Base</title><link>https://jason-grey.com/posts/2006/google-base/</link><pubDate>Sat, 04 Mar 2006 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2006/google-base/</guid><description>&lt;p&gt;Google’s got another great beta out there - Google Base. It’s a place for you to post your own content. They take it a step further by allowing you to define (or use predefined) content types. Each content type has a set of attributes. Then, custom search interfaces are provided against the content types, for example, see recipes. Doesn’t seem like there’s an API out there yet, so I think this is of limited use for now.&lt;/p&gt;</description></item></channel></rss>