Development Considerations¶
Why Markdown?¶
To provide a flexible base for migrating your notes to the app of your choice.
Why enlighten and not tqdm for progress bars?¶
enlighten did integrate easier with pythons logging.
Sort all iterators with arbitrary order¶
Reproducibility is more important than memory usage and speed.
# good
for item in sorted(file_or_folder.iterdir()):
# bad
for item in file_or_folder.iterdir():
Why pyinstaller and not nuitka?¶
I did have a bit experience in setting up pyinstaller. The size of the final executable seems to be much smaller with pyinstaller, too.
Why is the executable so large?¶
Pandoc is included and is standalone ~144 MB large. This has the biggest impact on the size. The module sizes in particular can be analyzed by using the following code snippet in the pyinstaller spec file:
coll = COLLECT(
exe,
a.binaries,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='jimmy_cli',
)
The resulting files can be listed and ordered by size by:
$ du -lh --max-depth=2 dist/jimmy_cli | sort -h
12K dist/jimmy_cli/_internal/src
24K dist/jimmy_cli/_internal/wheel-0.44.0.dist-info
40K dist/jimmy_cli/_internal/Markdown-3.7.dist-info
44K dist/jimmy_cli/_internal/anyblock_exporter
60K dist/jimmy_cli/_internal/cryptography-43.0.3.dist-info
60K dist/jimmy_cli/_internal/setuptools
108K dist/jimmy_cli/_internal/ossl-modules
164K dist/jimmy_cli/_internal/puremagic
296K dist/jimmy_cli/_internal/charset_normalizer
2,4M dist/jimmy_cli/_internal/yaml
11M dist/jimmy_cli/_internal/cryptography
15M dist/jimmy_cli/_internal/lib-dynload
144M dist/jimmy_cli/_internal/pypandoc
213M dist/jimmy_cli/_internal
262M dist/jimmy_cli
Why cryptography and not pycryptodome?¶
They worked both at the first implementation. cryptography
made a slightly better impression, so it was chosen.
Format Conversion Paths¶
graph TD;
File -- Plain Formats (plaintext,markdown) --> Markdown;
File -- Pandoc Unsupported Formats (anytype,colornote,tid,zim,zkn3 bbcode) --> pandoc_unsupported[Pyparsing / External Lib];
pandoc_unsupported --> Markdown;
%% pandoc paths
File -- HTML --> Beautifulsoup;
Beautifulsoup -- Preprocessed HTML String --> Pandoc;
File -- Pandoc Supported Formats --> Pandoc;
File -- Encapsulated Pandoc Supported Formats (eml,enex,notion,zoho) --> note_extraction[Extract Note];
note_extraction -- Pandoc Supported Formats --> Pandoc;
Pandoc --> Markdown;