惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
C
Check Point Blog
博客园 - Franky
V
Visual Studio Blog
云风的 BLOG
云风的 BLOG
aimingoo的专栏
aimingoo的专栏
Microsoft Security Blog
Microsoft Security Blog
V2EX - 技术
V2EX - 技术
AI
AI
Hacker News - Newest:
Hacker News - Newest: "LLM"
Jina AI
Jina AI
S
Security @ Cisco Blogs
Security Archives - TechRepublic
Security Archives - TechRepublic
H
Hacker News: Front Page
H
Hackread – Cybersecurity News, Data Breaches, AI and More
O
OpenAI News
Attack and Defense Labs
Attack and Defense Labs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
爱范儿
爱范儿
H
Heimdal Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
G
Google Developers Blog
G
GRAHAM CLULEY
V
V2EX
The Register - Security
The Register - Security
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
Schneier on Security
Schneier on Security
M
MIT News - Artificial intelligence
Stack Overflow Blog
Stack Overflow Blog
Help Net Security
Help Net Security
大猫的无限游戏
大猫的无限游戏
C
CERT Recently Published Vulnerability Notes
The GitHub Blog
The GitHub Blog
V
Vulnerabilities – Threatpost
The Last Watchdog
The Last Watchdog
J
Java Code Geeks
S
Secure Thoughts
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
量子位
NISL@THU
NISL@THU
K
Kaspersky official blog
Engineering at Meta
Engineering at Meta
T
Threatpost
Recent Commits to openclaw:main
Recent Commits to openclaw:main
宝玉的分享
宝玉的分享
Security Latest
Security Latest
T
The Exploit Database - CXSecurity.com
博客园_首页
A
Arctic Wolf

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Личная библиотека в Obsidian: книги, цитаты и мысли в одной базе данных
psheno322 · 2026-05-06 · via Все публикации подряд на Хабре

Уровень сложностиПростой

Время на прочтение5 мин

Охват и читатели694

Мнение

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

Список «хочу прочитать» давно перевалил за сотню. Когда наконец добираешься до книги — появляется другая проблема: хочется зафиксировать цитату или мысль, но непонятно куда. Заметки в телефоне, вкладка в браузере, стикер на полях — через месяц это всё теряется. Обычный подход «одна заметка на книгу» не работал: либо файл разрастался до неприличия, либо я просто забывал его открывать. Тогда я перестал искать «правильный» плагин и спроектировал систему с нуля в Obsidian. В этой статье я покажу архитектуру, реальные шаблоны и конфигурацию баз данных — так, чтобы это можно было повторить.


Архитектура: три уровня, не один файл

Главная ошибка большинства читательских систем — складывать всё в одну заметку. Пересказ сюжета, цитаты, собственные мысли, ссылки на другие книги — всё это разная информация с разным сроком годности и разной частотой обращения.

В моей системе три типа объектов:

  • Книга — карточка с метаданными (автор, статус, жанр, темы, обложка). Без текста.

  • Цитата — отдельная заметка с дословным фрагментом, привязанная к книге.

  • Мысль — отдельная заметка с моим личным соображением, возникшим при чтении.

Цитата и мысль — не разделы внутри книги, а самостоятельные заметки. Это принципиально: они живут в своих папках, попадают в свои базы данных и могут ссылаться на другие заметки в vault независимо от источника.


Заметка о книге: YAML + живая карточка

Каждая книга создаётся через шаблон Templater. Шаблон задаёт вопросы интерактивно: автор, статус, жанр, темы, страна происхождения, URL обложки.

<%*
const title = tp.file.title;
const author = await tp.system.prompt("Автор") || "";
const statusOptions = ["Буду читать", "Читаю", "Прочитано"];
const status = await tp.system.suggester(statusOptions, statusOptions) || "";
const cover = await tp.system.prompt("URL обложки (Enter если нет)", "") || "";
const genreOptions = ["Fiction", "Non-Fiction"];
const genre = await tp.system.suggester(genreOptions, genreOptions) || "";
const direction = await tp.system.prompt("Темы (Enter если нет)", "") || "";
const countryOptions = ["Иностранное", "Отечественное"];
const country = await tp.system.suggester(countryOptions, countryOptions) || "";
-%>

На выходе — frontmatter со всеми полями и callout-карточка с inline-полями Meta Bind:

---
author: Клаус Шваб
tags:
  - литература
status: Прочитано
cover: https://...
Жанр: Non-Fiction
Темы: технологии, общество
Страна: Иностранное
---

> [!book]+ 📖 Четвёртая промышленная революция
> ![cover](https://...)
>
> | | |
> |---|---|
> | **Автор** | `INPUT[text:author]` |
> | **Жанр** | `INPUT[inlineSelect(option(Fiction),option(Non-Fiction)):Жанр]` |
> | **Темы** | `INPUT[inlineList:Темы]` |
> | **Страна** | `INPUT[inlineSelect(option(Иностранное),option(Отечественное)):Страна]` |
> | **Статус** | `INPUT[inlineSelect(option(Буду читать),option(Читаю),option(Прочитано)):status]` |

INPUT[] — это синтаксис Meta Bind. Поля в таблице кликабельны прямо в режиме чтения: можно поменять статус с «Читаю» на «Прочитано» не открывая frontmatter. Это мелочь, но она убирает "трение".


Templater: цитаты создаются в два клика

Вот где начинается автоматизация. Когда я хочу сохранить цитату, я создаю новую заметку в папке Цитаты/ — Templater подхватывает шаблон автоматически.

Шаблон делает четыре вещи:

  1. Показывает список всех книг из папки литература/ (кроме самих баз данных — файлы, начинающиеся с 00, отфильтрованы).

  2. Вытаскивает автора из frontmatter выбранной книги — вводить вручную не нужно.

  3. Просит ввести название цитаты (первые слова или тема) и переименовывает файл.

  4. Открывает книгу и добавляет обратную ссылку в раздел # Цитаты.

<%*
const litFolder = 'ЖИЗНЬ/литература/';
const books = app.vault.getMarkdownFiles()
  .filter(f => f.path.startsWith(litFolder)
    && !f.path.includes('/Цитаты')
    && !f.name.startsWith('00'))
  .map(f => f.basename)
  .sort((a, b) => a.localeCompare(b, 'ru'));

const book = await tp.system.suggester(books, books, false, 'Из какой книги?');
if (!book) return;

const bookFile = app.vault.getFileByPath(litFolder + book + '.md');
const bookMeta = app.metadataCache.getFileCache(bookFile);
const author = bookMeta?.frontmatter?.author || '';

const title = await tp.system.prompt('Название / первые слова цитаты');
if (!title) return;

await tp.file.rename(title);

const bookContent = await app.vault.read(bookFile);
let newBookContent;
if (bookContent.includes('# Цитаты')) {
  newBookContent = bookContent.replace('# Цитаты\n', '# Цитаты\n- [[' + title + ']]\n');
} else {
  newBookContent = bookContent.trimEnd() + '\n\n# Цитаты\n- [[' + title + ']]\n';
}
await app.vault.modify(bookFile, newBookContent);
-%>

Шаблон для мыслей (Мысль.md) идентичен — только фильтрует ещё и папку /Мысли и пишет в раздел # Мысли книги.


Двусторонние связи без ручной работы

После выполнения шаблона происходит следующее. В заметке цитаты:

---
tags:
  - цитата
book: "[[Четвёртая промышленная революция]]"
author: Клаус Шваб
---

Бенефициарами инноваций четвёртой промышленной революции в основном
являются те, кто обеспечивает интеллектуальный и физический капитал...

В заметке книги автоматически появляется:

# Цитаты
- [[Бенефициарами инноваций четвёртой промышленной революции]]

Связь двусторонняя: из книги видно все цитаты, из цитаты — источник через поле book. Никакого ручного труда — шаблон делает всё сам в момент создания.

[скриншот: заметка о книге с заполненными разделами Цитаты и Мысли — списки вики-ссылок]


Obsidian Bases: три базы, пять видов

Bases — встроенный плагин базы данных в Obsidian. Файлы .base лежат прямо в папке литература/ рядом с заметками.

00 Литература.base

Пять видов одной базы:

Карточки — визуальная галерея книг с обложками, автором и статусом. Сортировка по имени.

Представление — полная таблица, сгруппированная по жанрам. Колонки: название, жанр, статус, автор, страна, темы. Сортировка многоуровневая: статус → жанр → автор.

📚 Буду читать — таблица только с нечитанными книгами, по автору.

📖 Читаю — только текущее чтение.

✅ Прочитано — архив прочитанного.

00 Цитаты.base и 00 Мысли.base

Оба устроены одинаково: таблица с колонками «название», «книга», «автор». Сортировка по автору, потом по книге. Это позволяет быстро найти все цитаты конкретного автора — даже если они из разных его книг.


Что в итоге

Сейчас в системе 98 книг, больше 20 цитат и несколько десятков мыслей. Самое ценное — не количество, а то, что каждая сохранённая цитата немедленно связана с источником и попадает в базу. Я не трачу время на организацию после факта — шаблон делает всё в момент захвата.

Три вещи, которые сделали систему рабочей:

  • Разделение на типы заметок — книга, цитата и мысль не смешиваются в одном файле.

  • Templater с JS — автоматизация на уровне создания, а не сортировки.

  • Bases с несколькими видами — одни данные, разные способы смотреть.

Если узнали себя в этой проблеме — напишите в комментариях, как сейчас фиксируете цитаты и мысли по прочитанному. Расскажу, что можно докрутить под ваш контекст. Больше про системы в Obsidian — в моём тг-канале.