собраны книги 2026-03-12 21:37:30
This commit is contained in:
parent
096fc7971c
commit
76ecc1301d
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
Тип: Книга
|
Тип: Книга
|
||||||
Статус: Запланировано
|
Статус: Прочитано
|
||||||
Название: Git для профессионалов
|
Название: Git для профессионалов
|
||||||
Автор:
|
Автор:
|
||||||
- Чакон Скотт
|
- Чакон Скотт
|
||||||
|
|||||||
BIN
Knowledges/Библиотека/Книги/covers/mobi-dik.jpg
Normal file
BIN
Knowledges/Библиотека/Книги/covers/mobi-dik.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 329 KiB |
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
Тип: Книга
|
Тип: Книга
|
||||||
Статус: Запланировано
|
Статус: Прочитано
|
||||||
Название: Война миров
|
Название: Война миров
|
||||||
Автор:
|
Автор:
|
||||||
- Герберт Уэллс
|
- Герберт Уэллс
|
||||||
|
|||||||
41
Knowledges/Библиотека/Книги/Моби Дик.md
Normal file
41
Knowledges/Библиотека/Книги/Моби Дик.md
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
---
|
||||||
|
Тип: Книга
|
||||||
|
Статус: В процессе
|
||||||
|
Название: Моби Дик
|
||||||
|
Автор:
|
||||||
|
- Герман Мелвилл
|
||||||
|
Количество страниц: 635
|
||||||
|
Прогресс: 73
|
||||||
|
Формат: Бумажная
|
||||||
|
Обложка: Библиотека/Книги/covers/mobi-dik.jpg
|
||||||
|
Начата: 09.03.2026
|
||||||
|
Закончена:
|
||||||
|
Оценка:
|
||||||
|
Категории:
|
||||||
|
- Классика
|
||||||
|
- Художественная литература
|
||||||
|
Ссылка:
|
||||||
|
---
|
||||||
|
|
||||||
|
# Моби Дик
|
||||||
|
|
||||||
|
![[covers/mobi-dik.jpg]]
|
||||||
|
|
||||||
|
## 📖 О книге
|
||||||
|
|
||||||
|
Роман Германа Мелвилла (1851) — одна из вершин американской литературы, изначально отвергнутая современниками и признанная шедевром лишь посмертно. Рассказчик Измаил присоединяется к экипажу китобойца «Пекод» под командованием одержимого капитана Ахава, который жаждет мести гигантскому белому киту, оторвавшему ему ногу. Охота превращается в метафизическое противостояние человека с мировым злом — и самим собой.
|
||||||
|
|
||||||
|
## 🧠 Ключевые темы
|
||||||
|
|
||||||
|
- **Одержимость и саморазрушение** — Ахав жертвует кораблём, экипажем и собственной жизнью ради мести; его одержимость — архетип человека, уничтожаемого своей целью
|
||||||
|
- **Зло и его природа** — Моби Дик как символ непостижимой враждебной силы вселенной; вопрос: является ли кит воплощением зла или человек сам проецирует на него свои страхи
|
||||||
|
- **Судьба и свобода воли** — экипаж «Пекода» — срез человечества, влекомого чужой волей навстречу гибели
|
||||||
|
- **Познание и тайна** — бесчисленные отступления о китах, море, китобойном деле как попытка объять необъятное; мир неисчерпаем и непознаваем
|
||||||
|
- **Библейская образность** — имена (Измаил, Ахав, Рахиль), мотивы грехопадения, пророчества и искупления пронизывают весь текст
|
||||||
|
|
||||||
|
## 💬 Важные цитаты
|
||||||
|
|
||||||
|
> «Зовите меня Измаил.»
|
||||||
|
|
||||||
|
> «Так сквозь густой туман моих смутных сомнений то здесь, то там проглядывает в моём сознании божественное наитие, воспламеняя мглу небесным лучом.»
|
||||||
|
|
||||||
@ -1,38 +0,0 @@
|
|||||||
|
|
||||||
## Читаю сейчас
|
|
||||||
|
|
||||||
|
|
||||||
```dataviewjs
|
|
||||||
dv.table(["Название", "Автор", "Кол-во страниц", "Файл", "Обложка"],
|
|
||||||
dv.pages('"Библиотека/Книги"')
|
|
||||||
.where(p => p.Тип == "Книга" && p.Статус == "В процессе")
|
|
||||||
.map(p => [
|
|
||||||
p.Название,
|
|
||||||
p.Автор,
|
|
||||||
p["Количество страниц"],
|
|
||||||
p.file.link,
|
|
||||||
p.Обложка ? dv.span(``) : "—",
|
|
||||||
])
|
|
||||||
)
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Запланировано
|
|
||||||
|
|
||||||
|
|
||||||
## Прочитано
|
|
||||||
|
|
||||||
|
|
||||||
```dataviewjs
|
|
||||||
dv.table(["Название", "Автор", "Кол-во страниц", "Файл", "Обложка"],
|
|
||||||
dv.pages('"Библиотека/Книги"')
|
|
||||||
.where(p => p.Тип == "Книга" && p.Статус == "Прочитано")
|
|
||||||
.map(p => [
|
|
||||||
p.Название,
|
|
||||||
p.Автор,
|
|
||||||
p["Количество страниц"],
|
|
||||||
p.file.link,
|
|
||||||
p.Обложка ? dv.span(``) : "—",
|
|
||||||
])
|
|
||||||
)
|
|
||||||
```
|
|
||||||
144
Knowledges/Статистика/Список книг.md
Normal file
144
Knowledges/Статистика/Список книг.md
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
|
||||||
|
## 📊 Статистика
|
||||||
|
|
||||||
|
```dataviewjs
|
||||||
|
const books = dv.pages('"Библиотека/Книги"').where(p => p.Тип == "Книга");
|
||||||
|
const read = books.where(p => p.Статус == "Прочитано");
|
||||||
|
const inProgress = books.where(p => p.Статус == "В процессе");
|
||||||
|
const planned = books.where(p => p.Статус == "Хочу прочитать" || p.Статус == "Запланировано");
|
||||||
|
const abandoned = books.where(p => p.Статус == "Заброшена");
|
||||||
|
|
||||||
|
const totalPages = read.array().reduce((sum, p) => sum + (Number(p["Количество страниц"]) || 0), 0);
|
||||||
|
const rated = read.where(p => p.Оценка);
|
||||||
|
const avgRating = rated.length
|
||||||
|
? (rated.array().reduce((s, p) => s + Number(p.Оценка), 0) / rated.length).toFixed(1)
|
||||||
|
: "—";
|
||||||
|
|
||||||
|
dv.table(["", ""], [
|
||||||
|
["📚 Всего книг", books.length],
|
||||||
|
["✅ Прочитано", read.length],
|
||||||
|
["📖 Читаю сейчас", inProgress.length],
|
||||||
|
["🔖 Хочу прочитать", planned.length],
|
||||||
|
["⛔ Заброшено", abandoned.length],
|
||||||
|
["📄 Страниц прочитано", totalPages.toLocaleString("ru-RU")],
|
||||||
|
["⭐ Средняя оценка", avgRating],
|
||||||
|
]);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
```dataviewjs
|
||||||
|
const books = dv.pages('"Библиотека/Книги"')
|
||||||
|
.where(p => p.Тип == "Книга" && p.Статус == "В процессе");
|
||||||
|
|
||||||
|
if (!books.length) {
|
||||||
|
dv.paragraph("*Сейчас ничего не читаю*");
|
||||||
|
} else {
|
||||||
|
dv.table(["Обложка", "Название", "Автор", "Прогресс", "Страниц"],
|
||||||
|
books.map(p => {
|
||||||
|
const total = Number(p["Количество страниц"]) || 0;
|
||||||
|
const done = Number(p.Прогресс) || 0;
|
||||||
|
const pct = total ? Math.round(done / total * 100) : 0;
|
||||||
|
const filled = Math.round(pct / 10);
|
||||||
|
const bar = "█".repeat(filled) + "░".repeat(10 - filled);
|
||||||
|
return [
|
||||||
|
p.Обложка ? dv.span(``) : "—",
|
||||||
|
p.file.link,
|
||||||
|
p.Автор ? [].concat(p.Автор).join(", ") : "—",
|
||||||
|
`\`${bar}\` ${pct}%`,
|
||||||
|
`${done} / ${total}`
|
||||||
|
];
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const details = document.createElement("details");
|
||||||
|
details.setAttribute("open", "");
|
||||||
|
const summary = document.createElement("summary");
|
||||||
|
summary.innerHTML = `<strong>📖 Читаю сейчас (${books.length})</strong>`;
|
||||||
|
details.appendChild(summary);
|
||||||
|
Array.from(this.container.childNodes).forEach(n => details.appendChild(n));
|
||||||
|
this.container.appendChild(details);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
```dataviewjs
|
||||||
|
const fmt = f => ({ "Электронная": "📱", "Бумажная": "📗", "Аудио": "🎧" }[f] ?? "");
|
||||||
|
const books = dv.pages('"Библиотека/Книги"')
|
||||||
|
.where(p => p.Тип == "Книга" && (p.Статус == "Хочу прочитать" || p.Статус == "Запланировано"))
|
||||||
|
.sort(p => p.Название, "asc");
|
||||||
|
|
||||||
|
dv.table(["Обложка", "Название", "Автор", "Страниц", "Формат", "Категория"],
|
||||||
|
books.map(p => [
|
||||||
|
p.Обложка ? dv.span(``) : "—",
|
||||||
|
p.file.link,
|
||||||
|
p.Автор ? [].concat(p.Автор).join(", ") : "—",
|
||||||
|
p["Количество страниц"] || "—",
|
||||||
|
fmt(p.Формат),
|
||||||
|
p.Категории ? [].concat(p.Категории).join(", ") : "—"
|
||||||
|
])
|
||||||
|
);
|
||||||
|
|
||||||
|
const details = document.createElement("details");
|
||||||
|
const summary = document.createElement("summary");
|
||||||
|
summary.innerHTML = `<strong>🔖 Хочу прочитать (${books.length})</strong>`;
|
||||||
|
details.appendChild(summary);
|
||||||
|
Array.from(this.container.childNodes).forEach(n => details.appendChild(n));
|
||||||
|
this.container.appendChild(details);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
```dataviewjs
|
||||||
|
const star = n => n ? `⭐ ${Number(n)}` : "—";
|
||||||
|
const fmt = f => ({ "Электронная": "📱", "Бумажная": "📗", "Аудио": "🎧" }[f] ?? f ?? "—");
|
||||||
|
const books = dv.pages('"Библиотека/Книги"')
|
||||||
|
.where(p => p.Тип == "Книга" && p.Статус == "Прочитано")
|
||||||
|
.sort(p => Number(p.Закончена) || 0, "desc");
|
||||||
|
|
||||||
|
dv.table(["Обложка", "Название", "Автор", "Год", "Оценка", "Формат", "Категория"],
|
||||||
|
books.map(p => [
|
||||||
|
p.Обложка ? dv.span(``) : "—",
|
||||||
|
p.file.link,
|
||||||
|
p.Автор ? [].concat(p.Автор).join(", ") : "—",
|
||||||
|
p.Закончена || "—",
|
||||||
|
star(p.Оценка),
|
||||||
|
fmt(p.Формат),
|
||||||
|
p.Категории ? [].concat(p.Категории).join(", ") : "—"
|
||||||
|
])
|
||||||
|
);
|
||||||
|
|
||||||
|
const details = document.createElement("details");
|
||||||
|
const summary = document.createElement("summary");
|
||||||
|
summary.innerHTML = `<strong>✅ Прочитано (${books.length})</strong>`;
|
||||||
|
details.appendChild(summary);
|
||||||
|
Array.from(this.container.childNodes).forEach(n => details.appendChild(n));
|
||||||
|
this.container.appendChild(details);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
```dataviewjs
|
||||||
|
const books = dv.pages('"Библиотека/Книги"')
|
||||||
|
.where(p => p.Тип == "Книга" && p.Статус == "Заброшена");
|
||||||
|
|
||||||
|
if (!books.length) {
|
||||||
|
dv.paragraph("*Нет заброшенных книг*");
|
||||||
|
} else {
|
||||||
|
dv.table(["Название", "Автор", "Прочитано страниц"],
|
||||||
|
books.map(p => [
|
||||||
|
p.file.link,
|
||||||
|
p.Автор ? [].concat(p.Автор).join(", ") : "—",
|
||||||
|
p.Прогресс || "—"
|
||||||
|
])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const details = document.createElement("details");
|
||||||
|
const summary = document.createElement("summary");
|
||||||
|
summary.innerHTML = `<strong>⛔ Заброшено (${books.length})</strong>`;
|
||||||
|
details.appendChild(summary);
|
||||||
|
Array.from(this.container.childNodes).forEach(n => details.appendChild(n));
|
||||||
|
this.container.appendChild(details);
|
||||||
|
```
|
||||||
Loading…
x
Reference in New Issue
Block a user