View on GitHub

mindforger-repository

MindForger documentation repository.

MindForger User Documentation

Table of contents:

This document briefly describes key MindForger features.

CLI and man

For information on MindForger command line options read the manual page:

man mindforger

For command options see the help file:

$ mindforger --help

Usage: mindforger [options] [<directory>|<file>]
Thinking notebook.

Options:
  -t, --theme <theme>            Use 'dark', 'light' or other GUI <theme>.
  -c, --config-file-path <file>  Load configuration from given <file>.
  -v, --version                  Displays version information.
  -h, --help                     Displays this help.

Arguments:
  [<directory>|<file>]           MindForger repository or directory/file with
                                 Markdown file(s) to open

Repository

MindForger can be used to:

If you run MindForger without parameters, then it opens the default MindForger repository:

$ mindforger

If MindForger default repository doesn’t exist, then it is created on MindForger first start in:

~/mindforger-repository

Repository structure looks like this:

$ tree mindforger-repository/

mindforger-repository/
├── limbo
├── memory
├── mind
└── stencils
    ├── notebooks
    └── notes

Markdown file

MindForger can be used to edit a single Markdown file:

mindforger analysis.md

If the given file exists, then it’s opened for editing, otherwise a new Markdown file with this name is created and opened.

Markdown directory

You can open any directory and MindForger will find all Markdown files within the directory and its sub-directories and open them for search, navigation and editing:

$ mindforger a-git-repository-with-interesting-content

For example, you can find an interesting Git repository on GitHub or BitBucket, clone it to your machine and open it with MindForger to easily navigate it.

Configuration

MindForger can be configured either from UI:

… or using configuration file (while MindForger is NOT running):

Review .mindforger.md for configuration option details and descriptions.

Markdown

This section provides a brief overview of MindForger’s Markdown editor and Markdown IDE features.

Markdown editor

MindForger can be used as a Markdown editor.

It allows you to easily write Markdown documents in a WYSIWYG text editor with Markdow syntax hints and an HTML rendered preview.

MindForger terminology:

MindForger represents any Markdown as follows

Markdown outline

In order to enable quick navigation and refactoring of Markdown documents, MindForger shows Markdown documents (Notebooks) as an outline of Markdown sections (Notes) allowing you to efficiently choose/read/edit/refactor a particular section.

Image

Check side-by-side Markdown document text view and MindForger view in the image above:

As you can see, MindForger represents the hierarchy of sections (prefixed/underlined in Markdown syntax with/by #, - or =) as a tree - called an outline:

Image

For switching between section (pre)view and edit mode refer to the next section.

View vs Edit mode

Image

If you want to edit a section either double-click anywhere in the rendered preview on the right (MindForger window) or choose:

… and drop to Note/Notebook editor.

DnD allows easy import of attachments/images to MindForger repository - either by value (choose Copy in attachment/image dialog) or by reference (path to the file on local file system is used).

Live Preview

Easily toggle live HTML preview of edited Markdown with shortcut or edit panel buttons.

Markdown format

Markdown is a plain text formatting syntax introduced by John Gruber. Markdown allows you to write using an easy-to-read, easy-to-write plain text format, easily rendered as HTML.

MindForger uses Markdown-based DSL. There are many flavors of Markdown - for Markdown syntax documentation please refer to:

Sub-sections of this section provide Markdown syntax overview and rendering demonstration. As you read particular Markdown syntax features, be sure to open each section for edit (to check syntax) and experiment with menu Format/*.

Text

Monospace text, emph text, bold text, italic text, bold text, deleted text.


💡 edit this Note to see the syntax

Keyboard keys

You can use Alt+f b to make marked text bold.


💡 edit this Note to see the syntax

Images

See Markdown source of this Note to learn image syntax.

Image from web:

MindForger logo

Image from current MindForger repository:

MF screenshot


💡 edit this Note to see the syntax
💡 click menu Format/Image or press Alt+f m to insert image.

See Markdown source of this Note to learn link syntax.

Link to web:

Automatic web link:

Link to a Notebook in active MindForger repository:

Link to a Note in active MindForger repository:

Link to a file on the filesystem:

Link to a directory on the filesystem:


💡 edit this Note to see the syntax
💡 click menu Format/Link or press Alt+f l to insert link.

Smarty pants

Smarty pants like like:


💡 edit this Note to see the syntax

HR

Horizontal…


… rulers …


… split screen horizontally. ___

List

Bullet list:

Numbered list:

  1. why
    1. ?
  2. how
    1. ?
  3. what
    1. ?

💡 edit this Note to see the syntax

Tasks

Task list:


💡 edit this Note to see the syntax

Blockquote

Riddle:

frodo and glum,

riddles

in the dark


💡 edit this Note to see the syntax

Tables

Pets:

Snake Turtle
Karkulka Ema
Frontend Backend
Qt C++

Columns can be aligned to left/right or centered:

Left Center Right
This is frontend This is middle-ware This is backend
Js ESB C++

💡 edit this Note to see the syntax

Source code with syntax highlighting

There are multiple options how a block of source code can be written in Markdown.

IMPORTANT: note leading empty lines before code blocks.


1) Tab indentation w/o language spec and w/o syntax highlighting:

public static void main(string[] args) {
	return 0;
}

2) Code block w/ language spec:

public static void main(string[] args) {
    return 0;
}

or w/o language spec:

public static void main(string[] args) {
    return 0;
}

3) Fenced block w/ language spec:

public static void main(string[] args) {
    return 0;
}

or w/o language spec:

public static void main(string[] args) {
    return 0;
}

💡 edit this Note to see the syntax

Math

MathJax handles inline expressions like: x^2 + y^2 = z^2 or block expressions like: \(\frac{D\rho}{Dt} = 0.\)

Check MathJax documentation and/or cheatsheet for more examples.

Quadratic equation root: When (a \ne 0), there are two solutions to (ax^2 + bx + c = 0) and they are \(x = {-b \pm \sqrt{b^2-4ac} \over 2a}.\)

Sum: \(\sum_{i=0}^n i^2 = \frac{(n^2+n)(2n+1)}{6}\)

Limit: \(\lim_{x\to 0}\)

Sqrt: \(\left(\frac{\sqrt x}{y^3}\right)\)


Alternatively you can use https://www.codecogs.com to render expression to image and include it in Markdown.


💡 edit this Note to see the syntax
💡 if math expressions are not rendered, then you must enable MathJax using menu Mind/Adapt/Markdown

MathJax

MathJax cheetsheet:

Limit block:

\[\lim_{x\to 0}\]

Diagrams

Flowchart diagram:

graph TD;
    A-->B;
    A-->C;
    B-->D;
    C-->D;

Sequence diagram - note different Mermaid diagram markup encapsulation element which has different background rendering that code block:

sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts
prevail! John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good!

GANTT diagram:

gantt
        dateFormat  YYYY-MM-DD
        title GANTT diagrams in MindForger
        section A section
        Completed task            :done,    des1, 2014-01-06,2014-01-08
        Active task               :active,  des2, 2014-01-09, 3d
        Future task               :         des3, after des2, 5d
        Future task2              :         des4, after des3, 5d
        section Critical tasks
        Completed task in the critical line :crit, done, 2014-01-06,24h
        Implement parser and jison          :crit, done, after des1, 2d
        Create tests for parser             :crit, active, 3d
        Future task in critical line        :crit, 5d
        Create tests for renderer           :2d
        Add to mermaid                      :1d

💡 edit this Note to see the syntax
💡 if math expressions are not rendered, then you must enable them using menu Mind/Adapt/Markdown

Comments

If you want line or multi-line comment that is strictly for yourself (readers of the converted document should not be able to see it, even with “view source”) you could (ab)use the link labels (for use with reference style links) that are available in the core Markdown specification.

Single line comment:

Multi-line comment:

Note that two conditions are important:


If you need inline comment, then use HTML comments:


💡 edit this Note to see the syntax

Drag & Drop Images and Files

This feature is being implemented.

Custom HTML Preview CSS

If you want to change color, font size, rendering of HTML preview, then it can be done using custom CSS.

You can either use your custom CSS - there is no UI for such change:

  1. make sure MindForger is not running
  2. download CSS you like https://github.com/dvorka/mindforger/tree/master/app/resources/qt/css (dark or light and choose Raw)
  3. edit downloaded CSS file and change font size, …
  4. open $HOME/.mindforger.md and change path to your CSS, e.g.
...
* Markdown CSS theme: /home/USERNAME/my.css
...

This will ensure that CSS from given path will be loaded by HTML preview since the next time MindForger is started.

Markdown IDE

MindForger is more than just Markdown editor - it is integrated development environment (IDE) for the development of Markdown document collections (repositories, documentation, books, etc.):

You can open any directory and MindForger will find all Markdown files within that directory and all its sub-directories and make them available for search, navigation and editation:

$ mindforger a-github-repository-with-interesting-content

Where a-github-repository-with-interesting-content is a directory containing Markdown documents.


💡 if you openeded more than one MindForger document, you can see all documents indexed by MindForger by clicking menu View/Notebooks

Stencils

Image

Stencil represents a common pattern that can be used in various situations e.g. to solve a task. It might be a how to (like how to change a car wheel) that once created, you may want to use repeatedly w/ possibility of customization.

Notebook stencil corresponds to application of a problem/semantic domain to another problem. Once you have a modus operandi or you know how to do that, than this is the case.

You can use a stencil when creating a new notebook or note - check Stencils drop-down in the dialog opened using menu Notebook/New or Note/New.

MindForger repositories (including the default one) contain stencils for both notebooks and notes:

<mindforger repository>/
├── ...
└── stencils
    ├── notebooks
    └── notes

MindForger is shipped with an initial set of stencils for meeting notes, software analysis/design, GROW model etc.

You can easily extend outlines just by copying Markdown file to stencils/notes or stencils/notebooks directory.

Notebook structure refactoring

Image

Hierarchy of Notes (Markdown document sections) can be easily changed using operations introduced by outliners. Note can be…

To manipulate a note, choose it in the outline view (tree of notes/Markdown sections on the left) and either use shortcuts (ctrl+up, ctrl+down, ctrl+left, ctrl+right) or menu Note/Promote, …

Note refactoring

Note (Markdown section) can be refactoring (along with its child notes) between different Notebooks (Markdown documents):

Note and its child notes will be moved to the target notebook.

Search

Ability to find a specific Notebook or Note is one of the most important MindForger features. Notebooks and Notes can be found by:


💡 see menu Recall for search options

Fulltext

Use menu Recall/Full-text Search to search for notes using full-text search. Result shows notes Markdown source with highlighted matches.

Search scope:

Search scope:

Search scope:

Switch thinking/sleeping mode based on whether you need mind features for the particular repository or not - consider performance/CPU consumption vs features trade-off.

TAYS: Think as you Search

This feature is being implemented.

TAYR: Think as you Read

TAYR

MindForger is able to suggest relevant notes as you browse and read:

In the screenshot above you can see relevant notes (lower left corner) for the selected note My 3D Printer MK2S by Prusa RESEARCH.

TAYW: Think as you Write

TAYW

MindForger is able to suggest relevant notes as you write note content in the editor:

In the screenshot above you can see relevant notes (lower left corner) for the selected word graph (notice cursor between letter g and r on the current line with light-gray background).

TAYB: Think as you Browse - Knowledge Graph Navigator

Navigator

Knowledge graph navigator allows you to browse notebooks, notes, tags and other resources in visually.

Navigator can be either activated using toolbar or using CtrlShiftk keyboard shortcut. It is scope sensitive e.g. if you activate navigator while viewing note, then this note becomes central node of the visualization.

Knowledge graph can be zoomed, shuffled and its edgest can be (globally) stretched/shrinked.

Recognize what matters

Named-entity Recognition

Image

This feature is being implemented.

Semantic Search and Domain

This feature is being implemented.

Word embeddings based search, associations and navigation.

Autolinking: Associate as you Read

Autolinking

Autolinking discovers relevant notes in your MindForger repository and/or Markdown document and automatically injects links to the text. In the screenshot above all links were injected i.e. source text (Markdown) is just plain text without links.

Autolinking helps in immediately finding remarks related to the notebooks and notes you are browsing.

Autolinking also saves the time - you don’t have to create/change/maintain links in your remarks.

Tips and tricks:

Forgetting

Motto: “Computers need to forget”. – Viktor Mayer-Schönberger

Before I deep dive to MindForger features let me formulate a few questions to explain the motivation behind forgetting/scoping related functionality:

I believe that if a concept makes it to long term memory (LTM), then it can be never forgotten. It’s in LTM and it always be there. The only question is how many association/links it has. In the worst case it may happen that there is no association path it it - it ends as an island or orphan better said. If it’s not reminded or not used for long time, association can get weaker and weaker and such concepts is diving deeper and deeper to LTM. However, it is always there. Thus it’s just about the lookup. According to my experience a strong emotional experience or return to the deeper paths of LTM (talking about your friends or family about your early childhood) helps to remind such concepts and in the latter case even strongly bind them to upper level LTM (move them up in the memory) and refresh such memories so that you can remind them later much more easier.

If there would be no possibility of the selection of sensed informations and all the sensing will be fixed in our memory, its capacity would be fully used very soon.

MindForger, as computer program, needs to forget. But forgetting does NOT mean deleting of information.

MindForger maintains all the remarks you ever written (see limbo), but works with/shows only with a scope configurable by you.

Time Scope

Use menu Mind/Scope or Alt+m c to configure time scope.


Consider the following situations:

This is where MindForger time scope functionality comes in - you can restrict the scope (notes working set) by time. For example:

In particular you can set global time scope:

In particular you can set note specific time scope that overrides global time scope:


Scoping using tag(s) allows you to limit notebook working set only to notebooks having specified set of tags. It’s useful when you work with bigger MindForger repositoriers and you don’t want to be distracted by unrelated notebooks.

Scoping using tags can be combined (AND) with scoping using time.

Limbo

MindForger does not delete notebooks - it moves them to a location called Limbo that can be found in ${ACTIVE_MF_REPOSITORY}/limbo. This is where you can delete Markdown documents permanently.

MindForger, in its current implementation, does delete notes. They are not moved to a note Limbo. If you use menu Note/Forget, then the note is deleted.

Side note: I personally use CMS (Git) - I have full history of notebooks and notes. Tracking of all notes would be useful, however HW resource consumption intensive. This is also why I don’t want to duplicate this (already sophisticated) functionality within MindForger.

Productivity

MindForger aims to help you when you study, write a document/paper/article/book or want to achieve a goal.

Therefore it enables you to…

When creating (menu Notebook/New) or editing notebook (edit mode More... button) you can specify:

Image

These properties are in turn shown in notebooks view (menu View/Notebooks) and Eisenhower matrix.

Eisenhower matrix

Image

Wikipedia: Eisenhower matrix stems from a quote attributed to Dwight D. Eisenhower: “I have two kinds of problems, the urgent and the important. The urgent are not important, and the important are never urgent.”

Using the Eisenhower Decision Principle, tasks are evaluated using the criteria important/unimportant and urgent/not urgent, and then placed in according quadrants in an Eisenhower Matrix (also known as an “Eisenhower Box” or “Eisenhower Decision Matrix”). Tasks are then handled as follows:

Tasks in

  1. Important/Urgent quadrant are done immediately and personally e.g. crises, deadlines, problems.
  2. Important/Not Urgent quadrant get an end date and are done personally e.g. relationships, planning, recreation.
  3. Unimportant/Urgent quadrant are delegated e.g. interruptions, meetings, activities.
  4. Unimportant/Not Urgent quadrant are dropped e.g. time wasters, pleasant activities, trivia.

This method is said to have been used by U.S. President Dwight D. Eisenhower.

Eisenhower matrix on tags

Kanban on Tags

Home notebook

You can mark any notebook as home and it will be opened:

Home notebook can be set/unset using menu Navigator/Make Home.

Dashboard

Open Dashboard view with Ctrl-Shift-d.

Cheatsheets

See MindForger cheetsheet(s):

Editor:

Views: