Синхронизация личной базы знаний по программированию в Zim

velkin velkin

Введение


Предыдущая тема.
Систематизация личной базы знаний по программированию в Zim

Но эта личная база знаний находится на десктопе. Встал вопрос, как синхронизироваться хотя бы с ноутбуком, чтобы можно было работать где угодно.

Сразу отбрасываю чужие сервисы, то есть те, которые мне не принадлежат.
1. Dropbox.
2. GitHub.

Я им не доверял до санкций против России, а теперь уж точно не стоит ими пользоваться. Значит надо запустить свой сервис.

Выбор программы для синхронизации


Мне известны разные программы, но я бы выделил три из них.
1. Rsync. Односторонняя синхронизация без версионирования.
2. Syncthing. Многосторонняя синхронизация без версионирования.
3. Git. Многосторонняя синхронизация с версионированием.

Rsync


Мне нравится Rsync, он срабатывает правильно, главное не ошибиться в параметрах запуска. Можно пользоваться графическим интерфейсом Grsync. Но односторонняя синхронизация не всегда является хорошей идеей.

Syncthing


Можно использовать Syncthing, но результат не поддаётся чёткому контролю, а версионирования нет. Постоянно работают какие-то процессы, грузят систему. Хотя есть многосторонняя синхронизация, но лично для меня это программа непредсказуема. Я не могу гарантировать правильную работу, может вылезти какая-то нестыковка в синхронизации.

Git


И наконец Git. С одной стороны версионирование это хорошо, ничего не потеряется. А с другой оно по умолчанию хранит версии возможно уже ненужных файлов. Опять же с большими файлами и архивами оно работает не так чтобы быстро.

Но если подумать, то именно Git является инструментом программиста наиболее подходящим для хранения личной базы в Zim. Потому что Zim в качестве страниц использует текстовые файлы *.txt. У Zim нет привычки создавать пустые папки в которых нет файлов, которые Git естественно не будет добавлять.

Но самая большая проблема Git это множество ненужных команд. Чтобы синхронизироваться, надо использовать команды pull, add, commit, push. В commit ещё и выдумывать название. А я бы хотел синхронизацию, которая от меня ничего не требует.

И я подумал, может быть использовать в названии коммита первичный ключ. Походил по интернету, и там первый совет использовать временной штамп. Потом я ещё обнаружил, что кто-то даёт коммиту одно и тоже имя, например, "sync".

Ещё я нашёл программу git-auto-sync по запросу "автосинхронизация с git". Я её даже установил, но дальше мне лень стало разбираться, и я воспользовался советом создать батник, то есть файл формата DOS Batch.

Скрипты для синхронизации


В результате поиска по интернету и склеивания чужого кода со своими задумками у меня получилось два файла.

D:\git\zim_start.bat


Этот скрипт запускает два раза другой скрипт zim_sync.bat для синхронизации с git на сервере. А между ними запускает zim.exe, в котором можно работать.
@echo off
cls
:: ZIM SYNC
echo -------------------------------- ZIM SYNC START --------------------------------
echo starting...
call "D:\git\zim_sync.bat"
:: ZIM RUN
echo ----------------------------------- ZIM RUN ------------------------------------
set zimexe=C:\Program Files\Zim Desktop Wiki\zim.exe
echo zimexe: "%zimexe%"
call "%zimexe%" --gui --standalone
:: ZIM SYNC
echo ------------------------------- ZIM SYNC FINISH --------------------------------
echo finishing...
call "D:\git\zim_sync.bat

Минус только в том, что zim.exe сам по себе не закрывается как все остальные программы, когда выбираешь Файл > Выход или нажимаешь справа вверху на крестик окна. Потому приходится дополнительно открывать "Диспетчер задач", на вкладке "Подробности" нахожу zim.exe и из контекстного меню запускаю "Снять задачу". Тогда скрипт продолжает работать дальше.

Почему так происходит я не знаю. Я уже даже добавлял команду --standalone, а к ней ещё и --gui, которая идёт по умолчанию, но нет всё равно не работает. А так я вижу, что в папке.
%USERPROFILE%\AppData\Roaming\zim\cache\zim\notebook-D_git_zim

Что-то может происходить с файлом index.db. В общем я эту проблему пока не решил и нажимаю "Снять задачу" zim.exe после выхода из Zim. Результатом окончания синхронизации служит автоматическое закрытие окошка командной оболочки, я это вижу по значку на панели задач, даже если оно свёрнуто.

D:\git\zim_sync.bat


А это сам скрипт ручной синхронизации. Потому я могу на всякий случай синхронизироваться в любое время не открывая Zim.

Скрипт создаёт временной штамп вида "%YYYY%-%MM%-%DD% %HH%:%Min%:%Sec%" и если были изменения, то происходит получение данных из репозитория, коммит всех изменений с именем временного штампа и отправка изменений на сервер. Предполагается, что мне не понадобится ручное слияние, если я не буду менять данные на разных компьютерах одновременно. А предыдущий скрипт гарантирует, что изменения будут сохранены на сервере до перехода к другому компьютеру.
@echo off
:: get timestamp
echo -------------------------------- GET TIMESTAMP ---------------------------------
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
set "timestamp=%YYYY%-%MM%-%DD% %HH%:%Min%:%Sec%"
echo timestamp: "%timestamp%"
:: set directory
echo ------------------------------- CHANGE DIRECTORY -------------------------------
set gitdir=d:/git/zim
echo gitdir: "%gitdir%"
cd /D "%gitdir%"
:: git pull
echo ----------------------------------- GIT PULL -----------------------------------
call git pull origin master
:: git commit
echo ---------------------------------- GIT COMMIT ----------------------------------
call git add --all
call git commit -m "%timestamp%"
:: git push
echo ----------------------------------- GIT PUSH -----------------------------------
call git push origin master

Ярлыки для синхронизации


И для них я сделал два ярлыка Windows на рабочем столе.

Синхронизация личной базы знаний.lnk
D:\git\zim_sync.bat

Личная база знаний.lnk
D:\git\zim_start.bat

http://files.rsdn.org/99832/zim_sync_01.png

Настройка Git


На сервере для репозитория я использую папку "/git/zim/", где "/" корневой каталог. В папке "git/" лежат все папки с инициализированными репозиториями git. И "zim/" это сама папка с личной базой знаний, в терминологии Zim это блокнот.

Установка программ на сервере


Для доступа к серверу в Windows можно использовать PuTTY, для примера скачать отсюда.

Для сервера на Debian, git и ssh устанавливаются из репозитория из под рута.
su
apt install git ssh

Но это по памяти, я сейчас не поручусь, что так и было.

Создание ключей на сервере


А ключи генерируются из под пользователя, то есть не из под рута.
ssh-keygen -t RSA

Рекомендуемый алгоритм другой, но мне сойдёт и так.

В папке ~/.ssh пользователя получатся файлы.
id_rsa
id_rsa.pub

1. Нужно переименовать на сервере id_rsa.pub в authorized_keys. Обычно ключи добавляют в authorized_keys, но у меня даже этого файла не было.
2. Переместить файл id_rsa на клиентские машины. В Windows это папка "%USERPROFILE%\.ssh".

И тогда git команды push и pull не будут требовать пароля и скрипты будут проходить сами по себе до конца.

Создание репозитория на клиенте


1. Открываем Git Bash, который появится после установки Git в Windows.
2. И набираем не забыв сменить user на имя учётной записи пользователя сервера и xx.xx.xx.xx на ip-адрес сервера.
cd d:/git/zim
git init
git remote add origin ssh://user@xx.xx.xx.xx:22/git/zim/

Путь удалённого репозитория можно посмотреть так.
git remote -v

Выведет, что-то типа такого, где user это имя учётной записи на сервере, а xx.xx.xx.xx это ip-адрес сервера.
origin  ssh://user@xx.xx.xx.xx:22/git/zim/ (fetch)
origin  ssh://user@xx.xx.xx.xx:22/git/zim/ (push)

У меня на маршрутизаторе порт 22 из интернета проброшен на порт сервера 22 в локальной сети. Естественно для подключения к интернету используется статический ip.

Создание репозитория на сервере


1. Заходим на сервер через Putty от пользователя, не от рута.
1. Набираем.
cd /git
mkdir zim
cd ./zim
git init --bare

И всё, потом можно на клиенте в Git Bash набрать.
git add --all
git commit -m "начало"
git push origin master

Или просто запустить скрипты опубликованные выше, тем более всё затевалось ради них.

Список коммитов


А вот и список коммитов, который у меня со временем получился.
git log --pretty=oneline
5a838971721e91ae941f332f061890bc30e28b87 (HEAD -> master) 2023-10-03 20:04:44
68c4ab05243e5a0d7cbd0ccf62f49a3069a85066 2023-10-03 16:15:24
8f19cbef73e901de1e2aea80e1d7258674c0adbc 2023-10-03 14:49:04
d4474382e35f580dbdabcfc18ec77b683455a33b 2023-10-03 04:25:42
890e39fb7132b3d716714140effc665dee0414fe 2023-10-03 03:54:26
fb30e2cc0878527b824e30f148971fd1bd7a7556 2023-10-03 00:50:24
56c03f8cd58ff25dcaee55459ed2d73dffffd5e8 начало

Итоги


Вы можете оценить идею и реализацию описанные в статье. А так же рассказать, что используете сами. Я испробовал этот самодельный способ. Походил пару часов со старым нетбуком 2011 года выпуска. И не смотря на низкую производительность "железа" пока что всё работает.
Shmj
Shmj
03.10.2023 10:44
Здравствуйте, velkin, Вы писали:

V>Предыдущая тема.

V>Систематизация личной базы знаний по программированию в Zim

Вроде ж сообщество решило использовать Obsidian, который обладает аналогичным функционалом, но хранит все в Markdown.

Мне сначала не понравилось, но посколько народ сказал слово — пришлось все настроить и сейчас, после установки 10-ка плагинов — все-таки ОК.

Ваше отношение к Obsidian?
velkin
velkin
04.10.2023 12:02
Здравствуйте, Shmj, Вы писали:

S>Вроде ж сообщество решило использовать Obsidian, который обладает аналогичным функционалом, но хранит все в Markdown.

S>Мне сначала не понравилось, но посколько народ сказал слово — пришлось все настроить и сейчас, после установки 10-ка плагинов — все-таки ОК.
S>Ваше отношение к Obsidian?

У меня установлен Obsidian. Я его открыл и понял, что им надо учиться пользоваться, и тогда я его закрыл. Zim мне знаком уже очень давно, когда ещё никакого Obsidian не было. А в те времена Zim был лучшим аутлайнером, тем что он хотя бы не глючил при наполнении данными.

В статье Новая эра личных баз знаний я писал, что вместо Markdown, AsciiDoc, Doxygen и других лучше использовать HTML. Существенным различием от той темы до темы Систематизация личной базы знаний по программированию в Zim является открытие библиотечного каталога, который чётко разделяет систематический каталог и предметный каталог.

Zim

Первый выпуск 20 сентября 2005
Лицензия GNU GPL
Операционная система GNU/Linux, MacOS, Windows


Obsidian

Первый выпуск 30 марта 2020
Лицензия Freemium
Операционная система GNU/Linux, MacOS, Windows, Android, iOS


Если бы я вернулся в прошлое в 1998-2000 годы, то совместил то, что я писал про HTML в статье Новая эра личных баз знаний и предметный каталог. А содержимое страниц использовал как систематический каталог. Таким образом у меня бы получился статический сайт. По большому счёту языки разметки отличные от HTML не нужны. Я бы даже предпочёл чтобы Zim использовал обычный HTML.

И я бы использовал самый упрощённый синтаксис, чтобы и без браузера было легко читать текст. Тем более некоторые теги явно избыточны, о чём рассуждал в статье Немного html бредятины bius против strongeminsdel. Сейчас браузеры позволяют редактировать html не вылезая из них, так что это тоже интересное направление. А в те времена была программа Adobe Dreamweaver (первый выпуск 1 декабря 1997).

У меня так-то много идей чего не хватает в текстовых редакторах, которые так же могли бы редактировать HTML. Тот же Qt имеет QPlainTextEdit для отображения простого текста и QTextEdit для отображения HTML. По большому счёту очень много всего не реализовано. А поскольку то, что мне нужно не реализовано нигде, я решил не менять Zim на что-то другое.

Вот он вроде не особо глючит при моём способе ведения личной базы знаний даже на днищенском "железе", а у меня реально есть днищенское "железо". И и на том как говорится спасибо. А там надо или свой редактор делать, или до этого мне надеюсь хватит Zim. Я в него запихнул все исходники Qt и всю книгу "Язык программирования C++" Бьерна Страуструпа, и он не перегрузился, работает.

Если подвести итоги почему я забил на Obsidian:
1. Потому что Obsidian проприетарный, и я не знаю, что из этого выйдет.
2. Я уже знаком как пользоваться Zim, у него свободная лицензия, и он не глючит выше допустимого, а с Obsidian ещё нужно разбираться с неизвестным результатом.

Потому я ничего не могу сказать плохого про Obsidian, но и хорошего тоже. И раз уж у меня пошла движуха с Zim, то я пока развиваю эту тему. А то у меня давным давно были проблемы с Zim. Без предметного каталога по страницам всё терялось, была реальная файлопомойка. А теперь мне даже поиск не нужен, я могу найти любые данные из тысяч страниц просто выбрав их по памяти.
Senyai
Senyai
04.10.2023 06:55
Здравствуйте, velkin, Вы писали:

V>

Введение


V>Предыдущая тема.

V>Систематизация личной базы знаний по программированию в Zim

V>Но эта личная база знаний находится на десктопе. Встал вопрос, как синхронизироваться хотя бы с ноутбуком, чтобы можно было работать где угодно.


V>Сразу отбрасываю чужие сервисы, то есть те, которые мне не принадлежат.

V>1. Dropbox.
V>2. GitHub.

V>Я им не доверял до санкций против России, а теперь уж точно не стоит ими пользоваться. Значит надо запустить свой сервис.


V>

Выбор программы для синхронизации


V>Мне известны разные программы, но я бы выделил три из них.

V>1. Rsync. Односторонняя синхронизация без версионирования.
V>2. Syncthing. Многосторонняя синхронизация без версионирования.
V>3. Git. Многосторонняя синхронизация с версионированием.

V>

Rsync


V>Мне нравится Rsync, он срабатывает правильно, главное не ошибиться в параметрах запуска. Можно пользоваться графическим интерфейсом Grsync. Но односторонняя синхронизация не всегда является хорошей идеей.


V>

Syncthing


V>Можно использовать Syncthing, но результат не поддаётся чёткому контролю, а версионирования нет. Постоянно работают какие-то процессы, грузят систему. Хотя есть многосторонняя синхронизация, но лично для меня это программа непредсказуема. Я не могу гарантировать правильную работу, может вылезти какая-то нестыковка в синхронизации.


V>

Git


V>И наконец Git. С одной стороны версионирование это хорошо, ничего не потеряется. А с другой оно по умолчанию хранит версии возможно уже ненужных файлов. Опять же с большими файлами и архивами оно работает не так чтобы быстро.


V>Но если подумать, то именно Git является инструментом программиста наиболее подходящим для хранения личной базы в Zim. Потому что Zim в качестве страниц использует текстовые файлы *.txt. У Zim нет привычки создавать пустые папки в которых нет файлов, которые Git естественно не будет добавлять.


V>Но самая большая проблема Git это множество ненужных команд. Чтобы синхронизироваться, надо использовать команды pull, add, commit, push. В commit ещё и выдумывать название. А я бы хотел синхронизацию, которая от меня ничего не требует.


V>И я подумал, может быть использовать в названии коммита первичный ключ. Походил по интернету, и там первый совет использовать временной штамп. Потом я ещё обнаружил, что кто-то даёт коммиту одно и тоже имя, например, "sync".


V>Ещё я нашёл программу git-auto-sync по запросу "автосинхронизация с git". Я её даже установил, но дальше мне лень стало разбираться, и я воспользовался советом создать батник, то есть файл формата DOS Batch.


V>

Скрипты для синхронизации


V>В результате поиска по интернету и склеивания чужого кода со своими задумками у меня получилось два файла.


V>

D:\git\zim_start.bat


V>Этот скрипт запускает два раза другой скрипт zim_sync.bat для синхронизации с git на сервере. А между ними запускает zim.exe, в котором можно работать.

V>
V>@echo off
V>cls
V>:: ZIM SYNC
V>echo -------------------------------- ZIM SYNC START --------------------------------
V>echo starting...
V>call "D:\git\zim_sync.bat"
V>:: ZIM RUN
V>echo ----------------------------------- ZIM RUN ------------------------------------
V>set zimexe=C:\Program Files\Zim Desktop Wiki\zim.exe
V>echo zimexe: "%zimexe%"
V>call "%zimexe%" --gui --standalone
V>:: ZIM SYNC
V>echo ------------------------------- ZIM SYNC FINISH --------------------------------
V>echo finishing...
V>call "D:\git\zim_sync.bat
V>

V>Минус только в том, что zim.exe сам по себе не закрывается как все остальные программы, когда выбираешь Файл > Выход или нажимаешь справа вверху на крестик окна. Потому приходится дополнительно открывать "Диспетчер задач", на вкладке "Подробности" нахожу zim.exe и из контекстного меню запускаю "Снять задачу". Тогда скрипт продолжает работать дальше.

V>Почему так происходит я не знаю. Я уже даже добавлял команду --standalone, а к ней ещё и --gui, которая идёт по умолчанию, но нет всё равно не работает. А так я вижу, что в папке.

V>
V>%USERPROFILE%\AppData\Roaming\zim\cache\zim\notebook-D_git_zim
V>

V>Что-то может происходить с файлом index.db. В общем я эту проблему пока не решил и нажимаю "Снять задачу" zim.exe после выхода из Zim. Результатом окончания синхронизации служит автоматическое закрытие окошка командной оболочки, я это вижу по значку на панели задач, даже если оно свёрнуто.

V>

D:\git\zim_sync.bat


V>А это сам скрипт ручной синхронизации. Потому я могу на всякий случай синхронизироваться в любое время не открывая Zim.


V>Скрипт создаёт временной штамп вида "%YYYY%-%MM%-%DD% %HH%:%Min%:%Sec%" и если были изменения, то происходит получение данных из репозитория, коммит всех изменений с именем временного штампа и отправка изменений на сервер. Предполагается, что мне не понадобится ручное слияние, если я не буду менять данные на разных компьютерах одновременно. А предыдущий скрипт гарантирует, что изменения будут сохранены на сервере до перехода к другому компьютеру.

V>
V>@echo off
V>:: get timestamp
V>echo -------------------------------- GET TIMESTAMP ---------------------------------
V>for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
V>set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
V>set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
V>set "timestamp=%YYYY%-%MM%-%DD% %HH%:%Min%:%Sec%"
V>echo timestamp: "%timestamp%"
V>:: set directory
V>echo ------------------------------- CHANGE DIRECTORY -------------------------------
V>set gitdir=d:/git/zim
V>echo gitdir: "%gitdir%"
V>cd /D "%gitdir%"
V>:: git pull
V>echo ----------------------------------- GIT PULL -----------------------------------
V>call git pull origin master
V>:: git commit
V>echo ---------------------------------- GIT COMMIT ----------------------------------
V>call git add --all
V>call git commit -m "%timestamp%"
V>:: git push
V>echo ----------------------------------- GIT PUSH -----------------------------------
V>call git push origin master
V>

V>

Ярлыки для синхронизации


V>И для них я сделал два ярлыка Windows на рабочем столе.


V>Синхронизация личной базы знаний.lnk

V>
V>D:\git\zim_sync.bat
V>

V>Личная база знаний.lnk
V>
V>D:\git\zim_start.bat
V>

V>Image: zim_sync_01.png

V>

Настройка Git


V>На сервере для репозитория я использую папку "/git/zim/", где "/" корневой каталог. В папке "git/" лежат все папки с инициализированными репозиториями git. И "zim/" это сама папка с личной базой знаний, в терминологии Zim это блокнот.


V>Для доступа к серверу в Windows можно использовать PuTTY, для примера скачать отсюда.


V>Для сервера на Debian, git и ssh устанавливаются из репозитория из под рута.

V>
V>su
V>apt install git ssh
V>

V>Но это по памяти, я сейчас не поручусь, что так и было.

V>А ключи генерируются из под пользователя, то есть не из под рута.

V>
V>ssh-keygen -t RSA
V>

V>Рекомендуемый алгоритм другой, но мне сойдёт и так.

V>В папке ~/.ssh пользователя получатся файлы.

V>
V>id_rsa
V>id_rsa.pub
V>

V>1. Нужно переименовать на сервере id_rsa.pub в authorized_keys. Обычно ключи добавляют в authorized_keys, но у меня даже этого файла не было.
V>2. Переместить файл id_rsa на клиентские машины. В Windows это папка "%USERPROFILE%\.ssh".

V>И тогда git команды push и pull не будут требовать пароля и скрипты будут проходить сами по себе до конца.


V>

Создание репозитория на клиенте


V>1. Открываем Git Bash, который появится после установки Git в Windows.

V>2. И набираем не забыв сменить user на имя учётной записи пользователя сервера и xx.xx.xx.xx на ip-адрес сервера.
V>
V>cd d:/git/zim
V>git init
V>git remote add origin ssh://user@xx.xx.xx.xx:22/git/zim/
V>

V>Путь удалённого репозитория можно посмотреть так.
V>
V>git remote -v
V>

V>Выведет, что-то типа такого, где user это имя учётной записи на сервере, а xx.xx.xx.xx это ip-адрес сервера.
V>
V>origin  ssh://user@xx.xx.xx.xx:22/git/zim/ (fetch)
V>origin  ssh://user@xx.xx.xx.xx:22/git/zim/ (push)
V>

V>У меня на маршрутизаторе порт 22 из интернета проброшен на порт сервера 22 в локальной сети. Естественно для подключения к интернету используется статический ip.

V>

Создание репозитория на сервере


V>1. Заходим на сервер через Putty от пользователя, не от рута.

V>1. Набираем.
V>
V>cd /git
V>mkdir zim
V>cd ./zim
V>git init --bare
V>

V>И всё, потом можно на клиенте в Git Bash набрать.
V>
V>git add --all
V>git commit -m "начало"
V>git push origin master
V>

V>Или просто запустить скрипты опубликованные выше, тем более всё затевалось ради них.

V>

Список коммитов


V>А вот и список коммитов, который у меня со временем получился.

V>
V>git log --pretty=oneline
V>5a838971721e91ae941f332f061890bc30e28b87 (HEAD -> master) 2023-10-03 20:04:44
V>68c4ab05243e5a0d7cbd0ccf62f49a3069a85066 2023-10-03 16:15:24
V>8f19cbef73e901de1e2aea80e1d7258674c0adbc 2023-10-03 14:49:04
V>d4474382e35f580dbdabcfc18ec77b683455a33b 2023-10-03 04:25:42
V>890e39fb7132b3d716714140effc665dee0414fe 2023-10-03 03:54:26
V>fb30e2cc0878527b824e30f148971fd1bd7a7556 2023-10-03 00:50:24
V>56c03f8cd58ff25dcaee55459ed2d73dffffd5e8 начало
V>

V>

Итоги


V>Вы можете оценить идею и реализацию описанные в статье. А так же рассказать, что используете сами. Я испробовал этот самодельный способ. Походил пару часов со старым нетбуком 2011 года выпуска. И не смотря на низкую производительность "железа" пока что всё работает.
Senyai
Senyai
04.10.2023 07:01
Прошу прощения, я убрал цитирование, текст написал, а rsdn прикололся. Короче fossil-scm.org/ я для себя использую, там и редактирование wiki есть.
velkin
velkin
04.10.2023 02:28
Здравствуйте, Senyai, Вы писали:

S>Прошу прощения, я убрал цитирование, текст написал, а rsdn прикололся.


Справа вверху над сообщениями есть две кнопки, "Редактировать сообщение" и "Модерирование". В модерировании можно удалить сообщение, если на него не было ответов. Но если ответ есть, то можно отредактировать сообщение стерев его текст, чтобы не было оверквотинга, то есть излишнего цитирования. А то модераторы за этим иногда следят.

S>Короче fossil-scm.org/ я для себя использую, там и редактирование wiki есть.


Никогда им не пользовался и первый раз про него слышу.

Почитал.
Системы контроля версий: Fossil, часть I
Системы контроля версий: Fossil, часть II

Понравилось также, что весь репозиторий — это тоже один файл (SQLite база данных), который можно просто скопировать, чтобы забрать домой или установить на другой компьютер на работе

Идея интересная, хотя принципиальной разницы с Git я не вижу. А вот если брать не системы контроля версий, а персональные информационные менеджеры, то они явно разделены на те, которые используют отдельные файлы для хранения страниц и те которые используют базы данных.

Про повреждение базы данных особого смысла говорить нет, ведь файлы тоже можно повредить. Но вот что мне не нравилось в персональных информационных менеджерах основанных на базах данных, так это то, что они начинали тормозить при заполнении базы данных. Потому что с базами данных тоже надо уметь работать и оптимизровать.

Итак, первый способ идентификации версии файла — начальный фрагмент хэша. Другой способ — дата и время создания файла записанное в одном из форматов: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS. Подробнее смотрите здесь.

Напоминает то, что я сделал, только у меня не указан часовой пояс. В принципе в зависимости от инструмента всё можно свести к идеи синхронизации с репозиторием на сервере при открытии и закрытии программы личной базы знаний. Так же понятно, что некоторые персональные информационные менеджеры имеют внутренние механизмы синхронизации и не нуждаются в том же Git или Fossil.

В любом случае, если каждый напишет, чем он пользуется, это даст возможность выбора тем, кто ещё ничем не пользуется или планирует сменить используемые программы на другие. На мой взгляд главный критерий успеха это содержимое личной базы знаний. Моя личная база знаний получив оболочку из Zim и Git начала расти, но что там в итоге получится вопрос времени.
Джеффри
Джеффри
04.10.2023 07:22
Здравствуйте, velkin, Вы писали:

V>Вы можете оценить идею и реализацию описанные в статье. А так же рассказать, что используете сами.

Тоже веду личную базу знаний (не только по программированию, а вообще). Перепробовал много разных инструментов текстовые файлы, md файлы, OneNote, WikidPad.

В итоге остановился на, кмк, идеальном варианте — MediaWiki, тот же движок который используется в Википедии. Крутится в докере на домашнем сервере, соответственно доступна со всех домашних устройств, история редактирования страниц из коробки, визуальное редактирование, таблицы, картинки, настроил ежедневный бэкап базы на облако.
graniar
graniar
05.10.2023 06:33
Здравствуйте, Джеффри, Вы писали:

Д>В итоге остановился на, кмк, идеальном варианте — MediaWiki, тот же движок который используется в Википедии.


А я с нее начинал. Это может хороший инструмент для создания контента для общего пользования, но для ведения личной базы — важно минимизировать трудозатраты. Пока редактируешь тэги — забываешь, чего собственно хотел написать. WYSIWYG с удобством создания новых страниц и гиперссылок на них — то что надо. Реализовал на TexMacs.
Shmj
Shmj
08.10.2023 11:26
Здравствуйте, velkin, Вы писали:

V>Предыдущая тема.

V>Систематизация личной базы знаний по программированию в Zim

Вопрос такой. Вы вроде-бы давали где-то ссылки на готовые базы для этого Zim, если не путаю. Но сейчас не могу найти. Есть ли что готовое, чтобы посмотреть как оно в сборе ну и вообще может что полезное найду.
velkin
velkin
08.10.2023 03:02

Почему я не продвигаю мою методику работы с Zim


S>Вопрос такой. Вы вроде-бы давали где-то ссылки на готовые базы для этого Zim, если не путаю. Но сейчас не могу найти. Есть ли что готовое, чтобы посмотреть как оно в сборе ну и вообще может что полезное найду.


Нет, я не давал таких ссылок и даже объяснил почему.

1. Структура моей личной базы знаний иногда меняется.


Это значит я не могу сказать, что вот эти приёмы работы с Zim гарантированно являются лучшими и проверены годами, а не просто несколькими месяцами в режиме разработки и отладки.

2. Я постоянно узнаю что-то новое.


Я начинал со стенограмм для кода, теперь использую вставки кода с синтаксической подсветкой. Я понял, что у страниц могут быть подстраницы для описания однотипных признаков предмета как в интернет магазине.

3. По большому счёту это мало кому надо кроме меня.


И даже если и надо, люди всё равно не знают, что им это надо. Потому тут надо или писать книгу или забить и просто пользоваться. А писать книгу преждевременно, ведь я сам только начал этим пользоваться. Да и смысла нет, мне ведь никто за это не заплатит, а личная база знаний будет всё время меняться, что книга за ней не поспеет.

Готовый шаблон личной базы знаний Zim


Давай так, раз тебе это интересно, я дам тебе шаблон, вырезав его из своей личной базы знаний.

Скачать: zim_template.zip

Я тебе там написал README.txt, чтобы объяснить основы установки.

Там есть тёмная тема, но не очень хорошая из-за панели инструментов. Мне просто лень было искать другую, потому что там в других темах были проблемы с содержимым. Хочешь другую тему читай статью, в ней написано откуда я их брал.

Ещё там есть стили и инструкция в README.txt по их установке, чтобы сразу установить всё. Я так переношу Zim с компьютера на компьютер. И батники и ярлыки синхронизации, но git всё равно надо настраивать отдельно, это добавил для удобства.

И сам блокнот Zim это как раз личная база знаний, но без содержимого. Может и надо было дать пример как оформлять страницы предметного каталога, как делать для них подстраницы для признаков предмета, но я уже выше написал, почему я такое не делаю.

У Zim я пока нашёл только одну серьёзную проблему, он хранит страницы в файлах, а кеширует их для индексации и массовых изменений в базе данных. Там можно тоже кое-что сделать, но мне не очень нравится сам процесс, который нужно ждать.

В общем попробуй. Система далека от идеала, но я пока лучше именно для себя не нашёл. Поработаю с этим, а потом посмотрим. Я тут на днях решил, что буду всё туда запихивать, книги, документы, слайды и так далее.

Не знаю как git на это отреагирует, когда счёт пойдёт на гигабайты или даже десятки гигабайт. Но ведь так удобно открывать файлы со страниц. Тем более внутри блокнота Zim используются внутренние ссылки.

Особенно хорошо получается, если засовывать файлы в подпапку страницы, то есть имеющей тоже название, что и текстовый файл страниц, и давать оттуда ссылки.

http://files.rsdn.org/99832/zim_book.png