Projects: Difference between revisions

From James' Coffee Wiki
Jump to navigation Jump to search
(Add new projects)
No edit summary
 
(31 intermediate revisions by the same user not shown)
Line 11: Line 11:


I like to experiment with new programming languages, especially for small, limited-scope projects.
I like to experiment with new programming languages, especially for small, limited-scope projects.
=== Computer Vision ===
* [https://github.com/capjamesg/visionscript 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
** [https://visionscript.dev VisionScript Documentation]


=== ML and AI ===
=== ML and AI ===


* [https://github.com/capjamesg/llm-chatbot James Bot]: An AI chatbot that references my blog, wiki, and other sources to answer questions. Powered by ChatGPT.
* [https://github.com/capjamesg/llm-chatbot James Bot]: An AI chatbot that references my blog, wiki, and other sources to answer questions. Powered by ChatGPT.
* [https://github.com/capjamesg/personal-notebooks]: Notebooks for personal experiments with machine learning and computer vision.
* [https://github.com/capjamesg/personal-notebooks personal-notebooks]: Notebooks for personal experiments with machine learning and computer vision.
* [https://github.com/capjamesg/swifies.me swifties.me]: 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
* [https://github.com/capjamesg/soundbites.wtf soundbites.wtf]: Compete to make a sound closest to the prompt of the day.
** Uses CLAP by LAION AI for sound comparison
* [https://github.com/capjamesg/ispy 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!


=== Libraries ===
=== Libraries ===
Line 45: Line 59:
* [https://github.com/capjamesg/pyatproto pyatproto]: Abstract Python functions for engaging with BlueSky and AT Protocol implementations.
* [https://github.com/capjamesg/pyatproto pyatproto]: Abstract Python functions for engaging with BlueSky and AT Protocol implementations.
* [https://github.com/capjamesg/getsitemap getsitemap]: Retrieve URLs from a sitemap. Recursive retrieval supported.
* [https://github.com/capjamesg/getsitemap getsitemap]: Retrieve URLs from a sitemap. Recursive retrieval supported.
** [https://getsitemapurls.com getsitemapurls.com]: A web verison of getsitemap. Export sitemap URLs to CSV.
* [https://github.com/capjamesg/pysurprisal pysurprisal]:  Calculate surprisal for words in text.
* [https://github.com/microformats/mf2py mf2py] (maintainer): Python microformats2 parsing library
** wrote library documentation
** helped to manage Python 2 deprecation
** modernized test suite


=== Specification Implementations ===
=== Specification Implementations ===
Line 64: Line 84:
* [https://github.com/capjamesg/hovercard.js hovercard.js]: A script to load cards when you hover over a link in an article.
* [https://github.com/capjamesg/hovercard.js hovercard.js]: A script to load cards when you hover over a link in an article.
* [https://github.com/capjamesg/darkmode.js darkmode.js]: Trigger dark mode and light mode on your website.
* [https://github.com/capjamesg/darkmode.js darkmode.js]: Trigger dark mode and light mode on your website.
* [https://capjamesg.github.io/spa.js/ spa.js]: Turn a website into a Single-Page Web App (SPA). Not finished.
* [https://capjamesg.github.io/linkaside.js linkaside.js]: Display cards for all of the outgoing links on a web page.
=== Web Utilities ===
* [https://github.com/capjamesg/bsky.link bsky.link]: Generate shareable, embeddable links for Bluesky posts.
* [https://github.com/capjamesg/bsky.link bsky.link]: Generate shareable, embeddable links for Bluesky posts.
* [https://github.com/capjamesg/mf2.link mf2.link]: Generate shareable, embeddable links for Mastodon and other posts, marked up with mf2.
* [https://github.com/capjamesg/mf2.link mf2.link]: Generate shareable, embeddable links for Mastodon and other posts, marked up with mf2.
* [https://github.com/capjamesg/linguist.link linguist.link]: Calculate NLP insights on an article (reading time, most surprising words, most common bigrams, and more).
=== Documentation ===
* [https://github.com/capjamesg/python-packaging-best-practices Best Practices for Packaging Python Projects]: An e-book documenting best practices for packaging Python projects.


=== Misc. ===
=== Misc. ===
Line 90: Line 120:
* [https://github.com/capjamesg/hypertext-coffee-pot HyperText Coffee Pot]: A Python implementation of the HyperText Coffee Pot Control Protocol.
* [https://github.com/capjamesg/hypertext-coffee-pot HyperText Coffee Pot]: A Python implementation of the HyperText Coffee Pot Control Protocol.
* [https://github.com/capjamesg/markdown-revision-extension markdown-revision-extension]: A proposed extension to markdown used for making inline revisions to text.  
* [https://github.com/capjamesg/markdown-revision-extension markdown-revision-extension]: A proposed extension to markdown used for making inline revisions to text.  
* [https://github.com/capjamesg/index index]: A tool to create an index for my blog content using NLP.
* [https://github.com/capjamesg/maps.webtools.garden maps.webtools.garden]: An aggregate map generator for use with microformats data.


==== Perl ====
==== Perl ====
Line 112: Line 144:
* [https://github.com/capjamesg/screenshots Screenshots]: A Node.js wrapper around puppeteer to retrieve screenshots of web pages.
* [https://github.com/capjamesg/screenshots Screenshots]: A Node.js wrapper around puppeteer to retrieve screenshots of web pages.
* [https://github.com/capjamesg/spontaneity-rss Spontaneity RSS Feed]: RSS Feed for @telepathics' Spontaneity Generator.
* [https://github.com/capjamesg/spontaneity-rss Spontaneity RSS Feed]: RSS Feed for @telepathics' Spontaneity Generator.
* [https://github.com/capjamesg/airport-pianos]: The [https://airportpianos.org/ airportpianos.org] website.
* [https://github.com/capjamesg/airport-pianos airport-pianos]: The [https://airportpianos.org/ airportpianos.org] website.
* [https://github.com/capjamesg/stories.js]: A HTML component that enables stories on your personal website.
* [https://github.com/capjamesg/stories.js stories.js]: A HTML component that enables stories on your personal website.
* [https://github.com/capjamesg/coffeerecipes.co coffeerecipes.co source code]: The [https://coffeerecipes.co/ coffeerecipes.co] website.


==== Lisp ====
==== Lisp ====
Line 158: Line 191:
=== Roboflow ===
=== Roboflow ===


* [https://github.com/roboflow/cvevals CVevals]: Evaluate the performance of computer vision models and prompts for zero-shot models (Grounding DINO, CLIP, BLIP, BLIPv2, ImageBind, models hosted on Roboflow).
* Contributed to the following projects:
** [https://github.com/roboflow/notebooks notebooks]
** [https://github.com/roboflow/supervision supervision]
** [https://github.com/autodistill/autodistill autodistill]
** [https://github.com/roboflow/roboflow-python roboflow-python]
** [https://github.com/roboflow/quickstart-python quickstart-python]
** [https://github.com/roboflow/magic-scissors magic-scissors]
** [https://universe.roboflow.com Roboflow Universe]
* Started following autodistill modules, and maintain them with the team:
** [https://github.com/autodistill/autodistill-owl-vit autodistill-owl-vit]
** [https://github.com/autodistill/autodistill-clip autodistill-clip]
** [https://github.com/autodistill/autodistill-detic autodistill-detic]
** [https://github.com/autodistill/autodistill-yolov5 autodistill-yolov5]
** [https://github.com/autodistill/autodistill-yolonas autodistill-yolonas]
** [https://github.com/autodistill/autodistill-vit autodistill-vit]
** [https://github.com/autodistill/autodistill-grounding-dino autodistill-grounding-dino]
** [https://github.com/autodistill/autodistill-dinov2 autodistill-dinov2]
** [https://github.com/autodistill/autodistill-blip autodistill-blip]
** [https://github.com/autodistill/autodistill-albef autodistill-albef]
** [https://github.com/autodistill/autodistill-detr autodistill-detr]
* Co-created the following autodistill modules:
** [https://github.com/autodistill/autodistill-sam-clip autodistill-sam-clip]
** [https://github.com/autodistill/autodistill-fastsam autodistill-fastsam]
* [https://github.com/roboflow/cvevals CVevals]: Evaluate the performance of computer vision models and prompts for zero-shot models (Grounding DINO, CLIP, BLIP, ImageBind, models hosted on Roboflow).
* [https://github.com/roboflow/roboflow-collect Roboflow Collect]: Passively collect images for computer vision datasets on the edge. ]
* [https://github.com/roboflow/roboflow-collect Roboflow Collect]: Passively collect images for computer vision datasets on the edge. ]
* [https://github.com/roboflow/polygonzone PolygonZone]: A web application that lets you calculate the coordinates for polygons and lines on an image.
* [https://github.com/roboflow/polygonzone PolygonZone]: A web application that lets you calculate the coordinates for polygons and lines on an image.
Line 165: Line 221:
* [https://github.com/capjamesg/roboflow-tea-detector roboflow-tea-detector]: A detector to track my caffeine intake.
* [https://github.com/capjamesg/roboflow-tea-detector roboflow-tea-detector]: A detector to track my caffeine intake.
* [https://roboflow.com/models Roboflow Models v2]: Upgraded version of the Roboflow Model Directory.
* [https://roboflow.com/models Roboflow Models v2]: Upgraded version of the Roboflow Model Directory.
* [https://roboflow.com/augment/yolov8 How to Augment]: How to Augment directory (programmatic)
* [https://roboflow.com/how-to-label/yolov5 How to Label]: How to Label directory (programmatic)
* [https://roboflow.com/how-to-deploy/deploy-yolov8-to-the-nvidia-jetson How to Deploy]: How to Deploy directory (programmatic)
* [https://roboflow.com/train/grounding-dino-and-yolov8 Autodistill Tutorials]: Autodistill directory (programmatic)
* Created front-ends for [https://roboflow.com/research Research Directory], [https://roboflow.com/utilities Utilities Directory], [https://roboflow.com/templates Roboflow Templates].
* Created front-ends for [https://roboflow.com/research Research Directory], [https://roboflow.com/utilities Utilities Directory], [https://roboflow.com/templates Roboflow Templates].
* Actively contributing blog posts and editing posts from contributors. Posts I have written:
* Actively contributing blog posts and editing posts from contributors. Posts I have written:
Line 202: Line 262:
** [https://blog.roboflow.com/roboflow-inference-server-clip/ Use CLIP Zero-Shot Classification with the Roboflow Inference Server]
** [https://blog.roboflow.com/roboflow-inference-server-clip/ Use CLIP Zero-Shot Classification with the Roboflow Inference Server]
** [https://blog.roboflow.com/sxsw-scavenger-hunt-review/ From Idea to Reality: Building a Computer Vision Scavenger Hunt for SXSW]
** [https://blog.roboflow.com/sxsw-scavenger-hunt-review/ From Idea to Reality: Building a Computer Vision Scavenger Hunt for SXSW]
** [https://blog.roboflow.com/monitor-data-drift-computer-vision/ How to Detect, Monitor and Correct Computer Vision Data Drift]
** [https://blog.roboflow.com/identify-mislabeled-images-computer-vision/ How to Identify Mislabeled Images in Computer Vision Datasets]
** [https://blog.roboflow.com/what-is-dinov2/ What is DINOv2? A Deep Dive]
** [https://blog.roboflow.com/how-to-classify-images-with-dinov2/ How to Classify Images with DINOv2]
** [https://blog.roboflow.com/how-to-train-a-yolov8-classification-model/ How to Train a YOLOv8 Classification Model]
** [https://blog.roboflow.com/how-to-count-objects-in-a-zone/ How to Count Objects in a Zone]
** [https://blog.roboflow.com/autodistill/ Distill Large Vision Models into Smaller, Efficient Models with Autodistill]
** [https://blog.roboflow.com/autodistill-prompt-evaluation/ How to Evaluate Autodistill Prompts with CVevals]
** [https://blog.roboflow.com/deploy-to-snap-lens-studio/ How to Deploy a Roboflow Model to Lens Studio]
** [https://blog.roboflow.com/ai-vs-human-labeled-data/ Comparing AI-Labeled Data to Human-Labeled Data]
** [https://blog.roboflow.com/train-a-segmentation-model-no-labeling/ Train a Segmentation Model with No Labeling]
** [https://blog.roboflow.com/train-classification-model-no-labeling/ Train an Image Classification Model with No Labeling]
** [https://blog.roboflow.com/how-to-build-a-defect-detection-system/ How to Build a Defect Detection System]
** [https://blog.roboflow.com/labelme/ How to Use LabelMe: A Complete Guide]
** [https://blog.roboflow.com/roboflow-train-3-0/ Announcing Roboflow Train 3.0]
** [https://blog.roboflow.com/how-to-analyze-and-classify-video-with-clip/ How to Analyze and Classify Video with CLIP]
** [https://blog.roboflow.com/build-a-photo-memories-app-with-clip/ How to Build a Photo Memories App with CLIP]


=== CK ===
=== CK ===
Line 215: Line 292:
** https://careerkarma.com/blog/bootcamp-outcomes-survey-2021/
** https://careerkarma.com/blog/bootcamp-outcomes-survey-2021/
** https://careerkarma.com/blog/learning-to-code-experience-survey/
** https://careerkarma.com/blog/learning-to-code-experience-survey/
== External Writing ==
=== Barista Magazine ===
* [https://www.baristamagazine.com/a-future-for-packaging-with-manifesto-coffee/ A Future for Packaging With Manifesto Coffee]
* [https://www.baristamagazine.com/police-box-cafes-in-edinburgh-scotland/ The Unique Police Box Cafés of Edinburgh, Scotland]
* Edinburgh coffee roasters city guide (in print)
=== Sprudge ===
* [https://sprudge.com/edinburgh-coffee-the-sprudge-guide-191143.html Edinburgh Coffee: The Sprudge Guide]
=== Steampunk Coffee ===
* [https://www.steampunkcoffee.co.uk/blogs/steampunk-coffee-blog/tasting-pour-over-coffee-at-different-points-of-extraction Tasting pour-over coffee at different points of extraction]
* [https://www.steampunkcoffee.co.uk/blogs/steampunk-coffee-blog/why-do-a-coffee-cupping-at-home Why do a coffee cupping at home?]
* [https://www.steampunkcoffee.co.uk/blogs/steampunk-coffee-blog/coffee-filtration-a-guide Coffee Filtration: A Guide]
* [https://www.steampunkcoffee.co.uk/blogs/steampunk-coffee-blog/five-ways-to-make-coffee-at-home Five Ways to Make Coffee at Home]
* [https://www.steampunkcoffee.co.uk/blogs/steampunk-coffee-blog/brewing-with-the-aeropress-in-the-park Brewing with the Aeropress in the Park]
* [https://www.steampunkcoffee.co.uk/blogs/steampunk-coffee-blog/an-aeropress-glossary An Aeropress glossary]
* [https://www.steampunkcoffee.co.uk/blogs/steampunk-coffee-blog/lessons-from-a-home-coffee-cupping Lessons from a home coffee cupping]
* [https://www.steampunkcoffee.co.uk/blogs/steampunk-coffee-blog/how-do-i-start-brewing-coffee-at-home How Do I Start Brewing Coffee at Home?]
* [https://www.steampunkcoffee.co.uk/blogs/steampunk-coffee-blog/comparing-the-kalita-wave-and-the-v60 Comparing the Kalita Wave and the V60]
* [https://www.steampunkcoffee.co.uk/blogs/steampunk-coffee-blog/how-to-read-a-coffee-label How to Read a Coffee Label]
* [https://www.steampunkcoffee.co.uk/blogs/steampunk-coffee-blog/make-cold-brew-at-home-with-no-fancy-equipment Make cold brew at home with NO fancy equipment]
* [https://www.steampunkcoffee.co.uk/blogs/steampunk-coffee-blog/how-to-make-a-cappuccino-at-home-without-an-espresso-machine How to Make a Cappuccino at Home (without an espresso machine)]
* [https://www.steampunkcoffee.co.uk/blogs/steampunk-coffee-blog/a-glossary-of-pour-over-brewing A Pour-Over Brewing Glossary]
* [https://www.steampunkcoffee.co.uk/blogs/steampunk-coffee-blog/my-experience-cupping-coffee-with-steampunk My Experience Cupping Coffee with Steampunk]
* [https://www.steampunkcoffee.co.uk/blogs/steampunk-coffee-blog/thoughts-on-the-regular-aeropress-method Thoughts on the regular Aeropress method]
* [https://www.steampunkcoffee.co.uk/blogs/steampunk-coffee-blog/my-experience-with-the-aeropress My Experience with the Aeropress]
=== Coffee People ===
* Story featured in print edition

Latest revision as of 23:24, 9 August 2023

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.
  • swifties.me: 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
  • soundbites.wtf: 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!

Libraries

  • 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

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

Documentation

Misc.

Python

  • 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.
  • maps.webtools.garden: An aggregate map generator for use with microformats data.

Perl

Ruby

  • 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.

JavaScript

Lisp

Go

One-offs

Wikis

Web

IndieWeb Events

Professional Projects

Roboflow

CK

External Writing

Barista Magazine

Sprudge

Steampunk Coffee

Coffee People

  • Story featured in print edition