diff --git a/content/notes/Backup rsync.md b/content/notes/Backup rsync.md new file mode 100644 index 0000000..8315afc --- /dev/null +++ b/content/notes/Backup rsync.md @@ -0,0 +1,200 @@ ++++ +title = "Бекап linux системы с помощью rsync" +tags = ["linux"] ++++ + +# Вносим в crontab + +``` +rsync -v --archive --compress --progress --delete-after --force --partial --exclude-from=/home/$USER/excludes.txt /home/$USER/ 192.168.50.2:/volume1/NetBackup/NeonXPLaptop +``` + +# Пример excludes.txt + +``` +.android +.AndroidStudio*/ +Android/Sdk +.gradle +.gvm +.grails/ +.grails_history +.kde/share/apps/nepomuk +.local/share/notbit +.local/libvirt +.local/share/libvirt +.vagrant +.vagrant.d +.wine +.twister +twister +.local/share/Steam +.var/app/com.valvesoftware.Steam/.local/share/Steam +.steam +Steam +.PlayOnLinux +.local/share/lutris/runners/wine/ +Видео +.docker/machine +.local/share/containers +.gvfs +.local/share/gvfs-metadata +.Private +.dbus +.cache +.var/app/*/cache +.var/app/*/.cache +.Trash +.Trash-1* +.local/share/Trash +.cddb +.aptitude +.npm +.nvm +.adobe +.macromedia +.xsession-errors +.xsession-errors.old +.wayland-errors +.local/share/RecentDocuments +.recently-used +.recently-used.xbel +recently-used.xbel +.thumbnails +.thumb +Thumbs.db +.DS_Store +.localised +.CFUserTextEncoding +.zcompdump* +.wget-hsts +.cups +.subversion +.virtualenvs +.Xauthority +.ICEauthority +.gksu.lock +.pulse +.pulse-cookie +.esd_auth +.VeraCrypt-lock-* +.kde/share/apps/RecentDocuments +.kde4/share/apps/RecentDocuments +.kde/share/apps/klipper +.kde4/share/apps/klipper +.local/share/klipper +.kde/share/apps/okular/docdata +.kde/share/apps/gwenview/recentfolders +.kde4/share/apps/okular/docdata +.kde4/share/apps/gwenview/recentfolders +.local/share/okular/docdata +.local/share/org.kde.gwenview/recentfolders +.kde/share/apps/kmess/displaypics +.kde4/share/apps/kmess/displaypics +.kde/share/apps/kmess/customemoticons +.kde4/share/apps/kmess/customemoticons +.local/share/tracker +.local/share/torbrowser +.mozilla/firefox/*/Cache +.mozilla/firefox/*/minidumps +.mozilla/firefox/*/.parentlock +.mozilla/firefox/*/urlclassifier3.sqlite +.mozilla/firefox/*/blocklist.xml +.mozilla/firefox/*/extensions.sqlite +.mozilla/firefox/*/extensions.sqlite-journal +.mozilla/firefox/*/extensions.rdf +.mozilla/firefox/*/extensions.ini +.mozilla/firefox/*/extensions.cache +.mozilla/firefox/*/XUL.mfasl +.mozilla/firefox/*/XPC.mfasl +.mozilla/firefox/*/xpti.dat +.mozilla/firefox/*/compreg.dat +.mozilla/firefox/*/pluginreg.dat +.mozilla/seamonkey/*/Cache +.mozilla/seamonkey/*/minidumps +.mozilla/seamonkey/*/.parentlock +.mozilla/seamonkey/*/blocklist.xml +.mozilla/seamonkey/*/extensions.sqlite +.mozilla/seamonkey/*/extensions.rdf +.mozilla/seamonkey/*/extensions.ini +.mozilla/seamonkey/*/xpti.dat +.mozilla/seamonkey/*/compreg.dat +.mozilla/seamonkey/*/pluginreg.dat +.thunderbird/*/Cache +.keychain +.komodoedit +.gnupg/rnd +.gnupg/random_seed +.gnupg/.#* +.gnupg/*.lock +.gnupg/gpg-agent-info-* +.config/google-chrome/ShaderCache +.config/google-chrome/*/Local Storage +.config/google-chrome/*/Session Storage +.config/google-chrome/*/Application Cache +.config/google-chrome/*/History Index * +.config/google-chrome/*/Service Worker/CacheStorage +.config/google-chrome/*/WebStorage/*/CacheStorage +.config/chromium/*/Local Storage +.config/chromium/*/Session Storage +.config/chromium/*/Service Worker/CacheStorage +.config/chromium/*/Application Cache +.config/chromium/*/History Index * +/snap/chromium/common/.cache +/snap/chromium/*/.config/chromium/*/Service Worker/CacheStorage +/snap/chromium/*/.local/share/ +.gradle/caches +/.m2/repository +.local/share/baloo +.local/share/zeitgeist +.local/share/akonadi +.purple/icons +.guayadeque/cache.db +.java/deployment/cache +.icedteaplugin +.icedtea +.gnome2/epiphany/favicon_cache +nohup.out +.config/libreoffice/4/cache +.config/*/Cache +.config/Atom/*Cache +.config/Atom/IndexedDB +.atom/compile-cache/ +.vim/bundle/* +.viminfo +.vscode-oss/extensions/* +.vscode/extensions/* +.config/Code - OSS/logs/ +.config/Code/logs/ +.config/Code/CachedData/* +.config/VSCodium/CachedExtensionVSIXs +.config/VSCode/CachedExtensionVSIXs +.config/VirtualBox/VBoxSVC.log* +.config/VirtualBox/VBoxGuestAdditions_* +.cargo +.rustup +go/pkg/mod/cache +.nv/GLCache +.config/**/blob_storage +.config/**/Application Cache +.config/**/Cache +.config/**/CachedData +.config/**/Code Cache +.config/**/GPUCache +.config/**/Service Worker/CacheStorage +.var/app/**/blob_storage +.var/app/**/Application Cache +.var/app/**/Cache +.var/app/**/CachedData +.var/app/**/Code Cache +.var/app/**/GPUCache +.var/app/**/Service Worker/CacheStorage +.config/scc/daemon.socket +Загрузки +.config/yandex-browser +Sync +snap +.local/share/TelegramDesktop +.local/share/Zeal +.thunderbird +``` \ No newline at end of file diff --git a/content/notes/Docker ALT Linux.md b/content/notes/Docker ALT Linux.md new file mode 100644 index 0000000..4cab45a --- /dev/null +++ b/content/notes/Docker ALT Linux.md @@ -0,0 +1,23 @@ ++++ +title = "Docker в AltLinux" +tags = ["linux", "docker"] ++++ + +## Установка + +Установить docker можно следующей командой: + +``` +apt-get install docker-engine +``` + +Добавить пользователя в группу docker; +``` +usermod ИМЯ_ПОЛЬЗОВАТЕЛЯ -aG docker +``` + +Затем необходимо запустить соответствующую службу: + +``` +systemctl enable --now docker +``` \ No newline at end of file diff --git a/content/notes/Docker context.md b/content/notes/Docker context.md new file mode 100644 index 0000000..4ddacdc --- /dev/null +++ b/content/notes/Docker context.md @@ -0,0 +1,11 @@ ++++ +title = "Docker context" +tags = ["linux", "docker"] ++++ + +Постоянно забываю как создавать новый контекст докера. Сохраню здесь чтобы не забыть. + +``` +docker context create curie --docker "host=ssh://neonxp.ru" +docker context use curie +``` diff --git a/content/notes/Скачивание сайта.md b/content/notes/Скачивание сайта.md new file mode 100644 index 0000000..914119b --- /dev/null +++ b/content/notes/Скачивание сайта.md @@ -0,0 +1,8 @@ ++++ +title = "Рекурсивное скачивание всего сайта" +tags = ["linux"] ++++ + + ``` + wget -rk -np -nc -U "Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20110328 Firefox/24.0" --wait=5 --random-wait https://example.com + ``` \ No newline at end of file diff --git a/content/notes/Фикс mp3 тегов.md b/content/notes/Фикс mp3 тегов.md new file mode 100644 index 0000000..948d74a --- /dev/null +++ b/content/notes/Фикс mp3 тегов.md @@ -0,0 +1,22 @@ + +++ +title = "Исправление кодировок тегов mp3 файлов" +tags = ["linux", "mp3"] ++++ + +# Установка mutagen + +``` +pip3 install mutagen +``` + +# Исправление одного файла + +``` +mid3iconv -e CP1251 -d bad.mp3 +``` + +# Исправление целой коллекции + +``` +find /media/Music/ -iname "*.mp3" -print0 | xargs -0 mid3iconv -e CP1251 -d +``` \ No newline at end of file diff --git a/content/pages/me.md b/content/pages/me.md index 0ad6a9d..b62324e 100644 --- a/content/pages/me.md +++ b/content/pages/me.md @@ -8,9 +8,9 @@ title = 'Обо мне'
  • Александр NeonXP Кирюхин
  • -
  • E-mail: i@neonxp.ru
  • -
  • Jabber: i@neonxp.ru
  • -
  • PGP: 7282 5661 A858 FFBD 0EF3 8BD5 35E3 3E1A B777 6B39
  • +
  • E-mail: i@neonxp.ru
  • +
  • Jabber: i@neonxp.ru
  • +
  • PGP: 7282 5661 A858 FFBD 0EF3 8BD5 35E3 3E1A B777 6B39
  • Казань, РТ, Российская Федерация
  • diff --git a/content/posts/2024-11-17-obsidian.md b/content/posts/2024-11-17-obsidian.md new file mode 100644 index 0000000..9b15053 --- /dev/null +++ b/content/posts/2024-11-17-obsidian.md @@ -0,0 +1,196 @@ ++++ +title = "Obsidian" +description = "" +date = 2024-11-17T22:30:37+03:00 +categories = [ "Без рубрики" ] +tags = ['it', 'joplin', 'obsidian'] +location = "Казань" ++++ + +Некоторое время назад я [писал](/posts/2024-07-13-joplin/) про заметочник Joplin. + +С тех пор мои вкусы несколько поменялись и я открыл для себя его величество [Obsidian](https://obsidian.md/). + +![Obsidian logo](/img/posts/obsidian/logo.png) + +В целом он такой же заметочник, с ± тем же функционалом, но имеет для меня одну особенность, которая буквально +переворачивает всё. Это мощнейшая система плагинов. Серьёзно, я нашел плагины которые покрывают для меня всё, кроме +одного (но об этом позже). + +## Что такое Obisidian? + +Obsidian представляет собой приложение для ведения персональных баз данных, основанное на принципах локальных файлов +Markdown. Это значит, что ваши данные хранятся в виде обычных текстовых файлов, что обеспечивает максимальную гибкость +и независимость от облачных сервисов. + +Приложение работает на операционных системах: Windows, macOS, Linux, iOS, Android. + + + +## Основные функции и преимущества + +1. **Граф связей** — да, он есть уже много где, но нельзя его не упомянуть. +2. **Markdown** — очень приятно, что все заметки хранятся в Markdown, что обеспечивает максимальную интероперабельность + и переносимость +3. **Плагины** — плагины пишутся на JS/TS и их много. Даже не так, их **МНОГО**. Что приятно, они скачиваются и лежат + в той же директории что и основное хранилище, а это важно для следующего пункта +4. **Синхронизация** — она есть. Но вроде как платная. Но мне это и не интересно, я использую Syncthing. Просто шарю + через него директорию хранилища по схеме оба ноутбука <-> NAS <-> Android. При этом синкаются все плагины и + настройки. +5. **Скорость** — не смотря на то, что он написан на проклятом электроне, работает достаточно шустро, претензий нет. +6. **Доска для рисования** — мелочь, конечно, но удобно, когда надо на скорую руку накидать небольшую схемку. В конце + этого поста как раз есть пример такой схемки. + +## Минусы + +1. **Проприетарность** — Obsidian хоть и в целом бесплатный, но он не свободный и даже не opensource. Да, это серьёзный + минус, но он компенсируется тем, что хотябы вся база данных не в проприетарном формате. И в случае чего можно будет + с наименьшими проблемами свалить куда-нибудь. +2. **Electron** — ну это скорей мой личный пунктик. Но при этом приходиться смиряться с электроном что на Obsidian что + на VSCode (VSCodium, конечно же), потому что лучше-то и нет. + +Это только то, что сейчас пришло в голову. + +## А теперь самое вкусное + +Не помню, я упоминал что у него много плагинов? :) + +Так вот, поехали, мои самые любимые: + +### Dataview + +https://blacksmithgu.github.io/obsidian-dataview/ + +Ну это просто must-have плагин, который позволяет обращаться с вашими заметками именно как с базой данных, не меньше. + +Например, можно создать новый документ, написать в него + +``` + ```dataview + TASK + WHERE status = " " + ``` +``` + +и волшебным образом вместо этого блока появятся все невыполненные задачи, а вот так + +``` + ```dataview + TASK + WHERE status = "x" + ``` +``` + +мы получим все выполненные. + +Язык запросов [очень мощный](https://blacksmithgu.github.io/obsidian-dataview/queries/structure/), в нём сто́ит +разобраться. + +Ещё есть возможность делать однострочные запросы, например, в домашней заметке (которая у меня открывается по умолчанию) +у меня есть ссылка на именно сегодняшнюю заметку ежедневного журнала. Сделано вот так: + +``` +`=link(dateformat(date(today), "yyyy.MM.dd"))` +``` + +### Templater + +https://silentvoid13.github.io/Templater/ + +Этот плагин позволяет мне задать некоторым директориям умолчальный шаблон. Например, вот такой у меня шаблон для +ежедневных журналов: + +``` +<%* +try { + // Получаем имя текущей ежедневной заметки + const noteName = tp.file.title; + + // Разбиваем полученное имя на компоненты даты + const [year, month, day] = noteName.split('.').map(Number); + + // Создаём объект Date на основе поученных компонентов + const currentNoteDate = new Date(year, month - 1, day); + + // Вычисляем предыдущий и следующий день + let previousDayDate = new Date(currentNoteDate.setDate(currentNoteDate.getDate() - 1)); + let nextDayDate = new Date(currentNoteDate.setDate(currentNoteDate.getDate() + 2)); + + // Форматируем дату обратно в "DD-MM-YYYY" + const formatDate = (date) => { + const dd = String(date.getDate()).padStart(2, '0'); + const mm = String(date.getMonth() + 1).padStart(2, '0'); + const yyyy = date.getFullYear(); + return `${yyyy}.${mm}.${dd}`; + }; + + const previousDay = formatDate(previousDayDate); + const nextDay = formatDate(nextDayDate); + + // Формируем ссылки + const baseFolder = tp.file.folder(true); + const previousNotePath = `${baseFolder}/${previousDay}.md`; + const nextNotePath = `${baseFolder}/${nextDay}.md`; + + // Выводим даты в виде ссылок + tR += `← [[${previousNotePath}|${previousDay}]] | [[${nextNotePath}|${nextDay}]] →`; +} catch (error) { + console.error("Templater Error:", error); +} +%> + +## Задачи +___ +<% +`- [ ]` +%> + +## Заметки +___ + +``` + +и переходя к сегодняшней заметке я сразу получаю такую заготовку: + +![](/img/posts/obsidian/templater.png) + +### Остальные плагины + +Остальные тоже крутые, но я их приведу просто списком: + +- [obsidian-tasks-plugin](https://publish.obsidian.md/tasks/Introduction) — помогает более богато управлять + задачами. В частности, у меня проставляет дату завершения задачи, и проставляет даты дедлайна и прочее. +- [obsidian-reminder-plugin](https://uphy.github.io/obsidian-reminder/) — трекает и напоминает про задачи +- [calendar](https://github.com/liamcain/obsidian-calendar-plugin) — просто миникалендарь в боковой панели +- [homepage](https://github.com/mirnovov/obsidian-homepage) — позволяет задать произвольную заметку "домашней" +- [obsidian-icon-folder](https://github.com/timolins/obsidian-icon-folder) — позволяет задавать директориям и заметкам + произвольные иконки. Пример есть как раз на скриншоте выше. +- [pomodoro-timer](https://github.com/eatgrass/obsidian-pomodoro-timer) — думаю, из названия и так понятно + +### А что же мне не хватает? + +Я упомянул выше что мне кое чего не хватает. А именно, постить заметку в мой блог по протоколу +[Micropub](https://indieweb.org/Micropub). + +Только из-за Obsidian и того, что он использует Markdown я опять [вернулся на Hugo](/posts/2024-11-15-hugo/), который +так же рендерится из Markdown. + +«Но Hugo это же генератор статичных сайтов, куда ты ему будешь отправлять заметку для публикации?» — можешь спросить +меня ты. А я отвечу что у меня вот такой план: + +![план-кабан](/img/posts/obsidian/publish.png) + +То что выделено красным — ещё не существует в природе. + +micropub сервер для hugo я уже начал писать. Да, есть nanopub сервер, но у него есть два серьёзных недостатка, это PHP и +то что его сделал не я. + +micropub плагин для obsidian я вижу сделать на основе существующего плагина rest-publish. Ну или как пойдёт. + +В общем, меня ждёт ещё очень много весёлого дрочева с этим всем. + +## Закругляюсь + +Пожалуй, пока на этом всё. Поделился как радостью использования Obsidian, так и планами на пет-проекты, что ещё надо-то? + +Если что, пишите комментарии. Лучше всего здесь, но можно и во всяких телеграмах-вкшках. \ No newline at end of file diff --git a/static/img/posts/obsidian/logo.png b/static/img/posts/obsidian/logo.png new file mode 100644 index 0000000..a54d748 Binary files /dev/null and b/static/img/posts/obsidian/logo.png differ diff --git a/static/img/posts/obsidian/publish.png b/static/img/posts/obsidian/publish.png new file mode 100644 index 0000000..85e60e8 Binary files /dev/null and b/static/img/posts/obsidian/publish.png differ diff --git a/static/img/posts/obsidian/templater.png b/static/img/posts/obsidian/templater.png new file mode 100644 index 0000000..d5ec186 Binary files /dev/null and b/static/img/posts/obsidian/templater.png differ diff --git a/themes/neonxp/assets/css/main.css b/themes/neonxp/assets/css/main.css index 721fa37..89ab654 100644 --- a/themes/neonxp/assets/css/main.css +++ b/themes/neonxp/assets/css/main.css @@ -23,10 +23,10 @@ height: auto; } .sidebar .toc { - position: fixed; min-width: 300px; } .h-entry { width: 100%; + max-width: 1130px; } } \ No newline at end of file diff --git a/themes/neonxp/layouts/partials/footer.html b/themes/neonxp/layouts/partials/footer.html index 66e4774..a68920c 100644 --- a/themes/neonxp/layouts/partials/footer.html +++ b/themes/neonxp/layouts/partials/footer.html @@ -13,7 +13,7 @@ diff --git a/themes/neonxp/layouts/partials/head.html b/themes/neonxp/layouts/partials/head.html index 2e7ffb0..119b138 100644 --- a/themes/neonxp/layouts/partials/head.html +++ b/themes/neonxp/layouts/partials/head.html @@ -1,6 +1,9 @@ + + + {{ if .IsHome }}{{ site.Title }}{{ else }}{{ printf "%s | %s" .Title site.Title }}{{ end }} {{ partialCached "head/css.html" . }} {{ partialCached "head/js.html" . }}