From James' Coffee Wiki
Revision as of 23:24, 9 August 2023 by Capjamesg (talk | contribs)
Jump to navigation Jump to search

Projects are projects on which I have worked.

Personal Projects

My guiding principles for building personal projects are:

  • Build something that I will use myself;
  • Open source code where appropriate;
  • Write documentation on how to get started with my open source code and;
  • Write a blog post announcing a larger projects.

I like to experiment with new programming languages, especially for small, limited-scope projects.

Computer Vision

  • VisionScript: An abstract programming language for computer vision.
    • VisionScript features a programming language, a REPL, a cloud Notebook environment, and a cloud deployment solution integrated with the CLI and Notebook environment
    • VisionScript Documentation

ML and AI

  • James Bot: An AI chatbot that references my blog, wiki, and other sources to answer questions. Powered by ChatGPT.
  • personal-notebooks: Notebooks for personal experiments with machine learning and computer vision.
  • Find how similar your voice is to Taylor Swift (WIP).
    • Uses demucs for vocal isolation
    • Offers two algorithms:
      • SpeechBrain speaker verification
      • ImageBind for audio embeddings on which similarity scores are computed
  • Compete to make a sound closest to the prompt of the day.
    • Uses CLAP by LAION AI for sound comparison
  • I, Spy: I, Spy mixed with a scavenger hunt. Take a photo and you'll get a label "Warmer" or "Colder" showing how if your photo is close to the prompt of the day. When you take a photo of the prompt of the day (i.e. a cat), you win!


  • indieweb-utils: A Python library with over a dozen functions useful for building IndieWeb and publishing tools, including implementations of parts of the W3C IndieAuth and Webmention specifications and the Post Type Discovery W3C Note. Functions include:
    • Original post discovery implementation
    • Discover feeds on a web page
    • Get representative h-card on a page
    • Page name discovery implementation
    • Authorship discovery
    • Endpoint discovery
    • Get post reply URLs
    • URL canonicalization
    • Add hashtags and person tags to a string
    • Remove URL tracking parameters
    • Slugify a URL
    • Generate reply contexts
    • Discover IndieAuth endpoints
    • Retrieve RelMeAuth links
    • Retrieve a h-app item
    • Discover Webmention endpoint
    • Send a Webmention
    • Discover a Trackback endpoint
    • Send and validate trackbacks
    • Really Simple Discovery (RSD) implementation
    • Reduce size of a given image
    • Process a Salmention
    • Paginate a sequence
  • pyatproto: Abstract Python functions for engaging with BlueSky and AT Protocol implementations.
  • getsitemap: Retrieve URLs from a sitemap. Recursive retrieval supported.
  • pysurprisal: Calculate surprisal for words in text.
  • mf2py (maintainer): Python microformats2 parsing library
    • wrote library documentation
    • helped to manage Python 2 deprecation
    • modernized test suite

Specification Implementations

  • Cinnamon: An implementation of the Microsub draft specification.
  • Micropub: An implementation of the W3C Micropub specification used to post content on websites.
  • Trackback Server: A front-end using the Trackback functionality built into indieweb-utils.
  • Webmention Receiver: An implementation of the W3C Webmention specification to send and receive Webmentions.
  • IndieAuth Server: Authenticate with a website using the IndieAuth protocol.
  • Salmention: A playground for experimenting with the Salmention protocol.
  • WebSub: An implementation of the W3C WebSub specification.

JavaScript Utilities

  • commandk.js: A script to enable Command + K search on a website.
  • highlight.js: Inline text highlights for web pages. Also available as a browser extension.
  • seasonal.js: Change an emoji on your website for different seasonal events.
  • fragmention.js: An implementation of the Fragmentation specification in JavaScript.
  • hovercard.js: A script to load cards when you hover over a link in an article.
  • darkmode.js: Trigger dark mode and light mode on your website.
  • spa.js: Turn a website into a Single-Page Web App (SPA). Not finished.
  • linkaside.js: Display cards for all of the outgoing links on a web page.

Web Utilities

  • Generate shareable, embeddable links for Bluesky posts.
  • Generate shareable, embeddable links for Mastodon and other posts, marked up with mf2.
  • Calculate NLP insights on an article (reading time, most surprising words, most common bigrams, and more).




  • IndieWeb Search: A search engine for the IndieWeb community. Indexed over 410,000 documents at peak.
    • Elasticsearch used for storing data
    • Back-end API for interfacing with Elasticsearch
    • Front-end contains logic for parsing various microformats to return featured snippets
    • Link graph analysis for calculating weights for ranking
    • Custom-built crawler. Algorithms for:
      • Identifying thin content
      • Parsing link headers
      • Discovering new content
      • Validating whether a URL is eligible to be crawled
      • Identifying canonical links
      • Suspending crawling if a target server slows down notably
      • Filtering nofollow links
      • And more
  • Microformats to Mediawiki: Turn documents marked up with microformats2 into MediaWiki markup. Posts the MediaWiki markup to a wiki instance.
  • Novacast: Internal linking API powered by embeddings.
  • Semantic Search with CLIP: Simple script that uses CLIP to enable semantic search on a directory of images.
  • HyperText Coffee Pot: A Python implementation of the HyperText Coffee Pot Control Protocol.
  • markdown-revision-extension: A proposed extension to markdown used for making inline revisions to text.
  • index: A tool to create an index for my blog content using NLP.
  • An aggregate map generator for use with microformats data.



  • MediaWiki Sparkline Generator: Generate sparklines showing the number of contributions made by a contributor on a MediaWiki instance.
  • markdown-html-link-rot: A script to substitute invalid links in markdown and HTML with a link to an Internet Archive backup.
  • Microsub OPML Utilities: Import OPML files into a Microsub server and export Microsub subscriptions to an OPML file.
  • Static Site Webring: A webring for static websites, built with Ruby and Sinatra.
  • Planet: An aggregator that shows new posts from tech blogs I follow. Built with Ruby and Sinatra.







IndieWeb Events

Professional Projects



External Writing

Barista Magazine


Steampunk Coffee

Coffee People

  • Story featured in print edition