"There are only two kinds of languages: the ones people complain about and the ones nobody uses" -- Bjarne Stroustrup
MindForger is written in C++ programming language.
Contribute:
Specifications:
In case that you have any question or want to learn more about technical details please don't hesitate to contact me.
Current MindForger implementation is just an initial imperfect sketch of much broader vision. It's purpose is to demonstrate viability of thinking notebook idea and to show possible research directions.
Feel free to contribute! Don't hesitate to contact me.
Perhaps you may find useful description of my development environment:
ccache (set in QtCreator as ccache g++)qmake + makegdbvalgrindqmake + makeTools/Options/Fonts: vim dark, 12pt, zoom: 100%Whitespaces: no tabs, visible, no traling whitespacesgdbEmacs (quick edits w/ key bindings that enable my productivity)alt-x compile > cd ../.. && make (make -k for keep going)For more details see the source code.
See build on Ubuntu for how to build MindForger:
make build-dev
Unit tests are conducted by the gtest framework. Download, build and optionally install this framework before building MindForger unit tests.
Prerequisite: Google test framework
googletest and go to the checkout:cd googletest
mkdir -p build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)
sudo make install
sudo ldconfig
ls /usr/local/include/gtest/gtest.h
ls /usr/local/lib/libgtest.a /usr/local/lib/libgtest_main.a
export M8R_CPU_CORES=$(nproc)
export M8R_GIT_PATH=/home/dvorka/p/mindforger/git/mindforger
cd /home/dvorka/p/mindforger/git/mindforger/build
make test-lib
MindForger tests:
Library unit tests:
lib/test/srcbuild/test-lib-units.sh - see source code for running all/particular
test w/ or w/o valgrind/gdb/...Frontend library tests:
app/test/sikulixbuild/test-gui.shFor more details check tests source code.
MindForger has also library benchmarks:
lib/test/benchmarkbuild/test-lib-units.sh - see script source code to run particular benchark.Benchmarks are disabled by default - go to benchmark source code and remove DISABLED_ prefix
from its name. For more details see Google test framework documentation and benchmarks source code.
Scripts used to created packages for Linux distributions can be found in:
build/ubuntubuild/debianbuild/fedoraalien conversion w/ postprocessing to RPM > upload as release asset Upstream tarball is created in the same way as archive released via GitHub:
build/githubCheck make targets for MindForger supported platforms targets:
make helpPerhaps you may find useful description of my development environment:
qmake + cmake + makeFor more details see source code.
Prepare MindForger sources:
git clone https://github.com/dvorka/mindforger.gitcd mindforgergit checkout dev/1.49.0-wingit submodule initgit supmodule updateBuilding dependecies is required only once, during initial building.
Build cmake-gfm - it requires cmake on the path.
cmark-gfm directory:cd deps\cmark-gfmmkdir buildcd buildcmake -G "Visual Studio 15 2017 Win64" -DCMAKE_CONFIGURATION_TYPES=Debug;Release -DCMARK_TESTS=OFF -DCMARK_SHARED=OFF .. cmake --build . --config Release -- /mcmake --build . --config Debug -- /mcd $GIT\mindforger"C:\software\Qt\5.12.0\msvc2017_64\bin\qtenv2.bat""C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"qmake -r mindforger.pronmake.exe binary will be stored in the app\release folderGitHub:
2019/1 plan to port MindForger on Windows:
html_outline_representation.cpp and MF_NO_MD_2_HTML definecmark-GFM library ~ GitHub's MD 2 HTML renderercmark-GFM and HTML viewer Get pre-release user feedback:
"C:\software\Qt\5.12.0\msvc2017_64\bin\qtenv2.bat"set "PATH=%PATH%;$GIT\mindforger\deps\zlib-win"app\release\mindforger.exe"C:\software\Qt\5.12.0\msvc2017_64\bin\qtenv2.bat"cd $GIT\mindforgerwindeployqt app\release\mindforger.exe --dir app\release\bin --no-compiler-runtime"c:\Program Files (x86)\Inno Setup 5\ISCC.exe" /Qp /DVcRedistPath="c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Redist\MSVC\14.14.26405\vcredist_x64.exe" build\windows\installer\mindforger-setup.iss app\release\installer folderUnit tests are conducted by the gtest framework. Download, build and optionally install this framework before building MindForger unit tests.
Gtest is expected at C:\Program Files\gtest-distribution by default. If you have it somewhere else you have to update the lib\test\src\src.pro Qt project file to change path to gtest.
Than:
"C:\software\Qt\5.12.0\msvc2017_64\bin\qtenv2.bat""C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"cd $GIT\mindforger\lib\testqmake -r mindforger-lib-unit-tests.pro "CONFIG+=debug" "CONFIG+=mfdebug" nmakeset "PATH=%PATH%;$GIT\mindforger\deps\zlib-win"set M8R_GIT_PATH=$GIT\mindforgercd $GIT\mindforgerlib\test\src\debug\mindforger-lib-unit-tests.execd build/
make help
Alternatively, instead using of following above described manual steps, you can take advantage of batch files prepared for building and running MindForger, installer and unit tests. All the scripts are located in the $GIT\mindforger\build folder:
build-app.batbuild-cmake.batbuild-installer.batbuild-unit-tests.batenv.batrun-app.batrun-unit-tests.batMost important is the env.bat. It's called by others and sets up command line environment. Ammend this file to change paths based on your setup. Other scripts are self-explanatory. The run-unit-tests.bat can also take any argument. This is usefull for passing options to the gtest framework.
Continous Integration for Windows:
appveyor.yml%GIT%\mindforger\mindforger.pro%GIT%\mindforgerBuild MSVC 2017 64-bit
For setting debugger in QtCreator follow instructions in Qt documention Setting Up Debugger
Debugging Tools for Windows only. Debugging Tools for Windows only. Conventions and best practices.
Git:
master is the main development branchmaster branch must be always stablemaster branch contains the latest MindForger release source code<major>.<minor>.<patch> is developed in Git branch dev/<major>.<minor>/<patch>Git branch naming convention:
feature-<related issue id>/<feature-name>enhancement-<related issue id>/<enhancement-name>bug-<related issue id>/<description>benchmark-<related issue id>/<description>platform-<release version>/<platform-name>
dev/<release version>
stabilization/<release version>Source code documentation conventions:
MindForger technical architecture.
MindForger uses cmark-gfm for rendering of Markdown documents to HTML:
Fixes to cmark-gfm:
cmark-gfm versions used:
0.29.0.gfm.2 (September 16, 2021)0.28.3.gfm.20 (January 31, 2019) with aforementioned patches
Adding a new/updating existing MindForger l10n:
app/app.pro: TRANSLATIONS += resources/qt/translations/mindforger_en.tslupdate mindforger.pro - it will parse source code
and prepare empty file for translations (later update). This is where is new translation
written.lupdate is not present on Ubuntu, then install sudo apt-get install qttools5-dev-toolslinguist tool e.g. linguist mindforger_cs.tslrelease app/app.pro to release translations that might be used in build..qm resource to app/mf-resources.qrsexport LANGUAGE=cs_CZ && export LANG=cs_CZ.UTF-8 && ./mindforgerexport LANGUAGE=pt_BR && export LANG=pt_BR.UTF-8 && ./mindforgerSee also:
MindForger can open any file that uses Markdown format. MindForger can also open any directory that contains Markdown files (also in its sub-directories).
However, you can use MindForger's Markdown hosted DSL and repository format to get much more (mind related) features.
This section describes MD conventions that MindForger uses to store outlines.
Description:
Metadata keyword is case insensitive i.e. any other variant is valid substituation e.g. metadata, MetaData
or METADATAExample:
# Canonical Message Similarity Code
This document contains ideas related to the definition of similarity codes for
canonical messages.
## Requirements
... here comes a text.
Design goals:
Repository layout:
[ROOT]/
memory/
[DIRECTORY-NAME]/
[OUTLINE-NAME].md ... Markdown is default MF format. Source code/markup free text can be inlined
using three back apostrophes. Intentionally there is no txt, TWiki, HTML
as outline format to keep focus (txt/.../HTML can be an attachment of empty
MD file).
[OUTLINE-NAME].[ATTACH-NAME].png ... '.' is reserved character
[OUTLINE-NAME].[ATTACH-NAME].jpg
[OUTLINE-NAME].[ATTACH-NAME].gif
...
limbo/
stencils/
...
mind/ ... Git ignored directory w/ indexed knowledge base
index.mf ... MF's index can be fully rebuilt from
repository content (file internals and
Git index information), it is used by
MF runtime (navigation, ...)
fts/ ... Lucene stores its files to here
...
.gitignore
README.md ... MF generated info for nice Git repo
that can be customized by user
Example repository:
ROOT/
outlines/
My Example/
frontend-design.twiki
frontend-design.mockup.jpg
repository-design.md
repository-design.overview.png
repository-design.structure.png
ideas.txt
mind/
.gitignore
index
README.md
Description:
Multiple CI services are used to build, test and package MindForger.
GitHub Actions are used to build macOS DiskImaGe packages and tarballs:
See also .github/workflows.
AppVeyor CI is used to build Windows installer:
See also appveyor.yml.
Travis CI is no longer used due to (GitHub account related) privacy issues and coarse grained security:
See also .travis.yml.
This is analysis of release automation making MindForger release much faster and less time consuming.
Release artifacts:
TODO: employ CIs to build artifacts. TODO: flow diagram of how will MF be released.