<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Opensource on jason grey</title><link>https://jason-grey.com/categories/opensource/</link><description>Recent content in Opensource on jason grey</description><generator>Hugo</generator><language>en</language><lastBuildDate>Wed, 18 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jason-grey.com/categories/opensource/index.xml" rel="self" type="application/rss+xml"/><item><title>Building a Hugo Module for Kagi Small Web</title><link>https://jason-grey.com/posts/2026/kagi-smallweb/</link><pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2026/kagi-smallweb/</guid><description>&lt;p&gt;Jason&amp;rsquo;s site is now part of &lt;a href="https://kagi.com/smallweb" class="external-link" target="_blank" rel="noopener"&gt;Kagi Small Web&lt;/a&gt; — a curated index of personal, non-commercial blogs. We built a Hugo module to add the webring navigation bar and animated seal to every page. Then we discovered it made every page take 16 seconds to build.&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;&lt;a href="https://github.com/jt55401/hugo-kagi-smallweb" class="external-link" target="_blank" rel="noopener"&gt;&lt;code&gt;hugo-kagi-smallweb&lt;/code&gt;&lt;/a&gt; is a reusable Hugo module with three partials: a badge (the animated Kagi seal), a webring bar (prev/next navigation), and styles for &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;. Config is three lines:&lt;/p&gt;</description></item><item><title>Eddie (Experimental): Hybrid Search for Static Sites</title><link>https://jason-grey.com/posts/2026/eddie/</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2026/eddie/</guid><description>&lt;p&gt;In 1996, I worked on one of my first real search engines: an early Java applet that indexed a few thousand documents (for 3M Healthcare if I remember right&amp;hellip;), distributed in parallel on CD-ROM (because laptops didn&amp;rsquo;t have wireless internet back then&amp;hellip;) and on an early intranet website. It had instant word completion, which felt revolutionary at the time, and it used an early TF-IDF index with a static offline indexing process.&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>gz-inspector</title><link>https://jason-grey.com/posts/2024/gz-inspector/</link><pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2024/gz-inspector/</guid><description>&lt;p&gt;&lt;a href="https://github.com/jt55401/gzinspector" class="external-link" target="_blank" rel="noopener"&gt;gz-inspector&lt;/a&gt; is a command-line tool for inspecting and analyzing GZIP and ZLIB compressed files. Written in Rust. Useful for debugging compressed data pipelines without needing to fully decompress files first.&lt;/p&gt;</description></item><item><title>Common Crawl Contributions</title><link>https://jason-grey.com/posts/2024/commoncrawl/</link><pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2024/commoncrawl/</guid><description>&lt;p&gt;I&amp;rsquo;ve been doing public and private work on &lt;a href="https://commoncrawl.org" class="external-link" target="_blank" rel="noopener"&gt;Common Crawl&lt;/a&gt; — the open repository of web crawl data that underpins a huge amount of research and AI training.&lt;/p&gt;
&lt;p&gt;Two specific contributions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/commoncrawl/cc-pyspark" class="external-link" target="_blank" rel="noopener"&gt;cc-pyspark&lt;/a&gt;&lt;/strong&gt; — Added support for file-wise processing, enabling more efficient batch operations on the crawl corpus.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/commoncrawl/webarchive-indexing" class="external-link" target="_blank" rel="noopener"&gt;webarchive-indexing&lt;/a&gt;&lt;/strong&gt; — Migrated legacy mrjob tasks to modern Spark jobs to process 9PB+ of crawl data.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>SmartThings Apps and Devices</title><link>https://jason-grey.com/posts/2015/smartthings/</link><pubDate>Thu, 01 Jan 2015 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2015/smartthings/</guid><description>&lt;p&gt;When I was a SmartThings user, I open-sourced a collection of custom device handlers and apps. SmartThings had a surprisingly capable developer platform for its era — Groovy-based, event-driven, and approachable enough that the community built a lot of useful things the official ecosystem never shipped.&lt;/p&gt;
&lt;p&gt;See the &lt;a href="https://jason-grey.com/tags/smarthings/" &gt;smarthings tag&lt;/a&gt; for related posts.&lt;/p&gt;</description></item><item><title>Google+ Java API Launched</title><link>https://jason-grey.com/posts/2011/google-plus-api/</link><pubDate>Wed, 15 Jun 2011 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2011/google-plus-api/</guid><description>&lt;p&gt;Quick note – I created a quick and dirty Google+ API using Java. It lets you get at public profiles, followers and following, as well as recent posts.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://code.google.com/archive/p/javaplus/" class="external-link" target="_blank" rel="noopener"&gt;Code is available&lt;/a&gt; on Google Code&lt;/p&gt;
&lt;p&gt;I have a social graph visualizer done as well, but it’s not quite ready for prime time.&lt;/p&gt;</description></item><item><title>FlashDoctors</title><link>https://jason-grey.com/posts/2007/flashdoctors/</link><pubDate>Mon, 01 Jan 2007 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2007/flashdoctors/</guid><description>&lt;p&gt;While I was head of front-end development at Target, we worked with a large number of agencies building Adobe Flash applications. We needed a consistent way to configure data and behavior across all of them, so I ported the Spring framework from Java to ActionScript.&lt;/p&gt;
&lt;p&gt;I convinced Target to open source it. &lt;a href="https://flashdoctors.sourceforge.net/" class="external-link" target="_blank" rel="noopener"&gt;FlashDoctors&lt;/a&gt; was the result — one of the earlier corporate open source projects of its era.&lt;/p&gt;</description></item><item><title>Handy is going open source...</title><link>https://jason-grey.com/posts/2003/handy-going-opensource/</link><pubDate>Fri, 05 Mar 2004 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2003/handy-going-opensource/</guid><description>&lt;p&gt;There were a few sugestions by members of the CF community to make Handy CFC tester open source&amp;hellip; so I&amp;rsquo;m going to give it a try.&lt;/p&gt;
&lt;p&gt;Along with the move to open source, I&amp;rsquo;m going to make &amp;ldquo;Handy&amp;rdquo; more of a suite of usefull ColdFusion/Mach-II stuff. To be included at launch will be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Handy/TestSuite/index.cfm - the Handy CFC browser/tester.&lt;/li&gt;
&lt;li&gt;Handy/BeanGen/index.cfm - a simple utility to generate CFCs with Java Bean get/set methods. Usefull if you do any Mach-II development.&lt;/li&gt;
&lt;li&gt;handy.dao - a base class for all my dao objects, has only one fuction right now to convert results of a query to a struct - for passing instance data to an object (memento).&lt;/li&gt;
&lt;li&gt;handy.validatable - a base class for all my objects which need to have a &amp;ldquo;validate&amp;rdquo; funciton. Has functions for keeping track of what&amp;rsquo;s wrong with certain fields, or in general.&lt;/li&gt;
&lt;li&gt;handy.plugins.ServerProperties - lets you have mach-ii properties defined outside of the mach-ii config file - usefull if you want to manage mach-ii with Source control, but need different properties on different servers.&lt;/li&gt;
&lt;li&gt;handy.plugins.EventData - allows you to have an XML config file to specify data for events. You can also specify other buckets of data which you can include on specified events (like an include) This allows powerful setup of meta-data per-event, but doesn&amp;rsquo;t tie you to your mach-ii.xml file to do so.&lt;/li&gt;
&lt;li&gt;Handy/MachIIMapper/index.cfm - maps a mach-ii application in many ways. Requires GraphViz to be installed, and you need CFEXECUTE permissions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;m submitting &amp;ldquo;Handy Suite&amp;rdquo; to SourceForge today, so with any luck, I&amp;rsquo;ll have all the code and docs up there, along with the CVS repository.&lt;/p&gt;</description></item><item><title>Temple of the Dog Font</title><link>https://jason-grey.com/posts/1993/temple-of-the-dog-font/</link><pubDate>Fri, 01 Jan 1993 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/1993/temple-of-the-dog-font/</guid><description>&lt;p&gt;My first &amp;ldquo;shareware&amp;rdquo; project, circa 1993. I traced the handwriting from the liner notes of the Temple of the Dog album and turned it into a distributable font. Distributed as shareware — my first experience with the idea that you could make something and just give it away.&lt;/p&gt;
&lt;p&gt;&lt;a href="../../../opensource/temple-of-the-dog.zip" &gt;Download the font&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>