Skip to content

Computational components

Originally the idea of a memex was to provide a personal filing and retrieval system - a personal knowledge base. The utility of such a system is linked to how effectively the owner can gather, weave, and augment information (amongst other things e.g. retrieve information).

A lot of the "Second Brain" ideas focus on people manually gathering and weaving content. Related tools provide functionality to help this manual work. For example, Foam's key features such as wikilinks, templates, tags. Features which support the manual authoring process. In addition, most software supporting this work provides also provide various computational means to automate aspects of personal knowledge management. For example, Obsidian plugins or how Josh Comeau uses MDX to create interactive components by combining Markdown and JSX through use of MDX.

Computational components defined

Computational components are the automations I've developed to help gather-weave-augment the information on my Memex.

Current computational components#

The ecosystem I'm using to assemble Memex means that these computational components are implemented using Python and using a couple of MkDocs plugins

And some deprecated/archived components:

  • life-list-gallery

    life-list-generator is/was a stand alone Python script (TODO integrate using mkdocs-gen-files) generates the life list gallery from a combination of eBird CSV file download and images saved locally.

    Replaced by wood-duck-observations approach.

  • 🚧 plant-location-generator 🚧

    Early experiment to extract plant location data from plant photos.

  • Various different functions as part of the convert-wordpress-into-memex process

    Category and archive pages, RSS feeds, and blog statistics are being generated using Python scripts.

Architecture#

There are two types of computational component based on what they generate, including:

  1. Generators; and,

    Create entire markdown files which are then translated by the SSG into HTML pages as part of building the site. Implemented using mkdocs-gen-files.

    e.g. wood-duck-observations uses a generator to transform eBird and iNaturalist data into markdown files.

  2. Macros.

    Create markdown that is inserted into an existing Markdown pages. Implemented using mkdocs-macros-plugin.

    e.g. the timeline-of-changes page uses '{{ recentChangesTimeline() }}' macro to insert a timeline of recent changes into the page.

Configuration#

Macros are configured by code within util/macros.py, for example

Python
    @env.macro
    def recentChangesTimeline( numChanges : int = -1 ):
        """
        Generate a timeline of the last numChanges changes to the current git repo.
        By default, will show all changes.
        """
        return getRecentChangesTimeline( numChanges )

mkdocs-gen-files configured via mkdocs.yml e.g. the following which configures:

YAML
plugins:
  - macros
    - gen-files:
      scripts:
        - util/generators/woodDuck.py 
        - util/generators/lifeList.py 
        - util/generators/corpusActions.py

corpus.py#

Provides a class to support corpus-manipulation. The ability to retrieve all or select part of the corpus of bubbles, increasingly based on the idea of bubbles-as-objects.

Python
from corpus import corpus
bubbles = corpus()

#-- get a list of work-history bubbles
regionWorkHistory = bubbles.get_bubble_by_type("work-history")

Object model#

The bubbles-as-objects concept is based on the idea of each bubble (Markdown file) being treated as an object.