Skip to content

Instantly share code, notes, and snippets.

@jelmerderonde
Last active May 22, 2020 18:49
Show Gist options
  • Save jelmerderonde/95470243e25ec005ffc935031ecfd000 to your computer and use it in GitHub Desktop.
Save jelmerderonde/95470243e25ec005ffc935031ecfd000 to your computer and use it in GitHub Desktop.
Athens – extensibility and end-user programmability

Introduction

This page describes some ideas I've tinkered with in the last year or so. They are by no means complete. I also don't consider this to be a concrete proposal. I do hope this piece can serve to jumpstart some discussion about how Athens could become a platform for more than just storing information.

Inspiration

I've drawn on several ideas and tools developed by other people:

Motivation

Part of the usefulness of Athens (or Roam for that matter) stems from its ability to help you link pages together to create new knowledge. For me, the process of synthesizing new knowledge also entails some programming. I often try to combine some existing data with external data sources for some quick data analysis.

It would be great if Athens could not only be a store of (linked) knowledge but could also be a library of useful functions and visualizations that can be combined to analyze and act upon that knowledge.

How it could work

The primary building blocks of Athens are pages (nodes) and blocks. Right now the blocks contain only text. What if it would be relatively easy to create new types of blocks?

For example, a block that can visualize some data. Or a block that can request some data from an external API? Blocks could be linked together to create a pipeline transforming and acting on the data that passes through them.

A block would consist of three parts:

  1. It's state, which should be serializable to EDN so that it can be saved in the Athens database.
  2. Some code that handles and transforms the data passing through the block.
  3. Some code that describes the interface. Probably a React/Reagent component.

Parts 2 and 3 for a specific type of block could be reusable and exchanged between users.

Further discussion

Perhaps a good starting point for a discussion would be to determine how extensible Athens should be:

  • Do we see Athens primarily as a knowledge store and should its extensibility be limited to tools that help the user analyze this knowledge?
  • Or should users also be able to transform and extend the information in their database?
  • Or do we go even further and also consider Athens to be a platform for more general computations? Something which allows the user to create small prototypes and tools that can be reused again and again on all kinds of data. Data from the Athens database, but also from external sources.
@jelmerderonde
Copy link
Author

@avichalp, fixed it! Must have lost the links when copying-and-pasting

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment