brettkromkamp / contextualise
- среда, 12 февраля 2020 г. в 00:20:16
Python
Contextualise is a simple and flexible tool particularly suited for organising information-heavy projects and activities consisting of unstructured and widely diverse data and information resources
Contextualise is a simple and flexible tool particularly suited for organising information-heavy projects and activities consisting of unstructured and widely diverse data and information resources -- think of investigative journalism, personal and professional research projects, world building (for books, movies or computer games) and many kinds of hobbies.
Contextualise's topic view
Contextualise's interactive network graph view (allowing for navigation between topics)
Contextualise's interactive 3D viewer
Contextualise's main dependency is TopicDB, an open source topic maps-based graph library. Topic maps provide a way to describe complex relationships between abstract concepts and real-world (information) resources.
I built and published my first knowledge documentation tool in 2007 which I was still using until very recently, almost unmodified, twelve years later. If I remember correctly, it was built with PHP version 5.2.5! Twelve years is an eternity in software terms. Nowadays, my preferred choice for web development is Python together with the Flask web development framework. What's more, after twelve years of using my own and other knowledge management tools, I have several improvements in mind for the next version (many of which are simplifications, for that matter). And perhaps one of the most important reasons for building a new tool like this is that I want it to be open source: both Contextualise (the web application) and TopicDB (the actual topic maps engine on top of which Contextualise is built -- also written by me) are licensed with the permissive open source MIT license.
The following provides an overview of Contextualise's existing (and planned) feature set:
Existing Features
Missing Version 1.0 Features
For a more exhaustive list of missing features take a look at Contextualise's list of issues.
Contextualise officially supports Python 3.6–3.8.
If you have Git installed on your system, it is possible to install the development version of Contextualise.
Certain build prerequisites need to be met including the presence of a C compiler, the Python
header files, the libpq header files and the pg_config program as outlined, here: Build
prerequisites.
Then do:
$ git clone https://github.com/brettkromkamp/contextualise $ cd contextualise $ pip install -e .
The pip install -e . command allows you to follow the development branch as it changes by creating links in the
right places and installing the command line scripts to the appropriate locations.
Then, if you want to update Contextualise at any time, in the same directory do:
$ git pull
TopicDB, the topic maps engine on top of which Contextualise is built is regularly updated. However, the version of TopicDB published on PyPI could lag behind. For that reason, it is recommended that you also install TopicDB directly from GitHub:
$ pip uninstall topic-db $ git clone https://github.com/brettkromkamp/topic-db.git $ cd topic-db $ pip install -e .
Then, if you want to update TopicDB at any time, in the same directory do:
$ git pull
After having installed Contextualise, you would have to separately install and configure the PostgreSQL database. Brief
instructions on how to do so are provided, here: Setting up the TopicDB
database. You need to ensure that the
database username, password and database name match with the settings.ini file in the project's root folder.
Finally, to run the application in development mode you need to change to the project's top-level directory and set
two environment variables followed by running the flask command with the run parameter:
$ export FLASK_APP=contextualise $ export FLASK_ENV=development $ flask run
You should see something similar to the following in the terminal:
* Serving Flask app "contextualise" (lazy loading) * Environment: development * Debug mode: on * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 521-258-444
Opening the browser and navigating to http://127.0.0.1:5000/ should result in showing the application's Welcome
page.
The Contextualise Welcome page
Flask's built-in server is not suitable for production purposes. However, it is quite straightforward to run Contextualise using Gunicorn, a Python WSGI HTTP server:
$ gunicorn -w 4 -b 0.0.0.0:5000 contextualise.wsgi:app
For further information for properly running a flask application in production, take a look at Flask's own documentation.
Support for running Contextualise within Docker is still in development. To run it from the root of a local clone of the source:
Copy settings-docker-sample.ini to settings.ini file in the root and replace your email settings. For example:
[DATABASE] Username = postgres Password = postgres Database = postgres Host = db Port = 5432 [EMAIL] Username = changeme Password = changeme Server = mail.changeme.com Sender = Change Me
Run docker-compose-up
Several users (with the roles of admin and user, respectively) are created by the application for testing
purposes. To log in as the admin user, provide the following credentials:
admin@contextualise.io (user name) and Passw0rd1 (password). To log in as a non-admin user, provide the
following credentials: user@contextualise.io and Passw0rd1.
Pending.
Pending.
Currently, I am using Contextualise for worldbuilding purposes of the Brave Robot fictional universe including its Codex Roboticus.