diff --git a/.qwen/PROJECT_SUMMARY.md b/.qwen/PROJECT_SUMMARY.md new file mode 100644 index 0000000..36f363c --- /dev/null +++ b/.qwen/PROJECT_SUMMARY.md @@ -0,0 +1,112 @@ +The user wants me to create a comprehensive project summary in markdown format based on the conversation history. Let me analyze what has been done: + +1. This is a Hugo blog project with PaperMod theme +2. The site is deployed to a remote server via SFTP/WinSCP +3. Recent work included: + - Favicon configuration + - TOML structure fixes + - Russian localization + - Date format customization + - Git commits and deployment + +Let me create a comprehensive summary that captures all the important context for future sessions.# Project Summary + +## Overall Goal +Организация блога на основе Hugo с темой PaperMod для публикации контента на dedinit.ru с интеграцией Gitea (gitverse.ru) и деплоем на хостинг (myjino.ru). + +## Key Knowledge + +### Technology Stack +- **Hugo Extended** v0.155.1 (установлена через winget) +- **Тема**: PaperMod (форк `rDedInit` как submodule) +- **Хранение статей**: bundle format (папка с `index.md`) +- **Frontmatter**: YAML формат +- **Git**: Gitea сервер `gitverse.ru:kpa39l/dedinit.ru` (SSH порт 2222) +- **Деплой**: WinSCP через Makefile на `kpa39l.myjino.ru:2222` + +### Конфигурация (hugo.toml) +```toml +baseURL = 'https://dedinit.ru/' +languageCode = 'ru-ru' +timeZone = 'Europe/Moscow' +DateFormat = "02.01.2006 15:04" # формат: 06.03.2026 19:30 + +[languages.ru] + languageName = "Русский" + languageCode = "ru-ru" + weight = 1 + +[params.assets] + favicon = "images/favicon/favicon48x48.ico" + favicon16x16 = "images/favicon/favicon-16x16.png" + favicon32x32 = "images/favicon/favicon-32x32.png" +``` + +### Важные решения +1. Git-репозиторий инициализирован в папке Hugo-сайта (не во внешней папке) +2. Папка `public/` исключена из репозитория через `.gitignore` +3. Настройки PaperMod должны быть в `[params]`, а favicon — в `[params.assets]` +4. Для русификации требуется секция `[languages.ru]` (не только `languageCode`) + +### Команды +```bash +make build # собрать сайт +make deploy # собрать и задеплоить +make deploy-dry-run # симуляция деплоя +hugo server # локальный сервер разработки +``` + +## Recent Actions + +### Выполнено +1. **[DONE] Настройка favicon** + - Файлы: `static/images/favicon/*.ico`, `*.png` + - Конфигурация в `[params.assets]` + - `.gitignore` обновлён для исключения лишних файлов (zip, piscel, android-chrome) + +2. **[DONE] Исправление структуры hugo.toml** + - Объединены дублирующиеся секции `[params]` + - Настройки PaperMod перемещены в `[params]` (работает `disableSpecial1stPost`) + +3. **[DONE] Русификация темы** + - Добавлена секция `[languages.ru]` + - Формат даты: `02.01.2006 15:04` → `06.03.2026 19:30` + - Время чтения: "минута/минуты/минут" (склонение работает) + - Язык в сборке: `│ RU` + +4. **[DONE] Деплой** + - Коммит запушен в `gitverse.ru:kpa39l/dedinit.ru` + - Сайт загружен на `kpa39l.myjino.ru` через WinSCP + +### Статус репозитория +- Последний коммит: «Русификация сайта и настройка формата даты» +- Ветка: `main` (синхронизирована с origin) +- Untracked файлы: `favicon.png`, `static/` (требуют решения) + +## Current Plan + +### Текущий статус +1. **[DONE]** Установка Hugo Extended +2. **[DONE]** Создание сайта dedinit.ru +3. **[DONE]** Установка темы PaperMod (submodule) +4. **[DONE]** Настройка bundle формата статей +5. **[DONE]** Интеграция с Gitea (gitverse.ru) +6. **[DONE]** Настройка favicon +7. **[DONE]** Русификация (даты, время чтения) +8. **[DONE]** Первый деплой на myjino.ru + +### Следующие шаги [TODO] +1. Решить судьбу untracked файлов (`favicon.png`, `static/`) +2. Проверить работу сайта на dedinit.ru +3. Настроить CI/CD (опционально) +4. Добавить новые статьи в блог + +### Примечания +- После обновления Hugo требуется перезапуск терминала (обновление PATH) +- Для локальной разработки: `hugo server` +- Все изменения фиксируются в README.md и QWEN.md + +--- + +## Summary Metadata +**Update time**: 2026-03-06T11:03:13.225Z diff --git a/PAPERMOD_PARAMS.md b/PAPERMOD_PARAMS.md new file mode 100644 index 0000000..a6d26d4 --- /dev/null +++ b/PAPERMOD_PARAMS.md @@ -0,0 +1,625 @@ +# 📋 Полный справочник параметров темы rDedInit (PaperMod) + +## Описание + +Этот документ содержит **все параметры конфигурации** темы rDedInit (форк PaperMod), которые вы можете использовать в файле `hugo.toml` (или `hugo.yaml`/`config.yaml`) и во frontmatter постов. + +--- + +## 📁 Глобальные параметры (в hugo.toml) + +### Базовые параметры сайта + +| Параметр | Описание | Пример | +|----------|----------|--------| +| `baseURL` | Базовый URL сайта | `baseURL = 'https://dedinit.ru/'` | +| `languageCode` | Код языка сайта | `languageCode = 'ru-ru'` | +| `title` | Заголовок сайта | `title = 'dedinit()'` | +| `theme` | Используемая тема | `theme = 'rDedInit'` | +| `timeZone` | Часовой пояс для дат | `timeZone = 'Europe/Moscow'` | +| `preserveTaxonomyNames` | Сохранять имена таксономий | `preserveTaxonomyNames = true` | +| `metaDataFormat` | Формат frontmatter | `metaDataFormat = "yaml"` | + +--- + +## ⚙️ Параметры в секции [params] + +### 🎨 Тема и внешний вид + +| Параметр | Описание | Значения | По умолчанию | +|----------|----------|----------|--------------| +| `defaultTheme` | Тема по умолчанию | `"light"`, `"dark"`, `"auto"` | `"auto"` | +| `disableThemeToggle` | Отключить переключатель темы | `true`, `false` | `false` | +| `env` | Окружение (влияет на SEO, аналитику) | `"production"`, `"development"` | `"development"` | + +**Пример:** +```toml +[params] + defaultTheme = "auto" + disableThemeToggle = false + env = "production" +``` + +--- + +### 📝 Информация о сайте + +| Параметр | Описание | Пример | +|----------|----------|--------| +| `title` | Заголовок сайта (альтернативный) | `title = "dedinit.ru"` | +| `description` | Описание сайта для мета-тегов | `description = "Блог об_ops-ах..."` | +| `keywords` | Ключевые слова сайта | `keywords = ["блог", "программирование"]` | +| `author` | Автор сайта (по умолчанию для всех постов) | `author = "Кразя"` | +| `DateFormat` | Формат отображения даты | `DateFormat = "02.01.2006 15:04"` | +| `language` | Код языка | `language = "ru"` | +| `languageAlt` | Альтернативный код языка | `languageAlt = "ru"` | + +--- + +### 🏠 Главная страница (Home-Info Mode) + +| Параметр | Описание | Пример | +|----------|----------|--------| +| `homeInfoParams.Title` | Заголовок информационной секции | `Title = "Привет! 👋"` | +| `homeInfoParams.Content` | Содержимое информационной секции | `Content = "Добро пожаловать..."` | +| `homeInfoParams.AlignSocialIconsTo` | Выравнивание соц. иконок | `AlignSocialIconsTo = "center"` | + +**Пример:** +```toml +[params.homeInfoParams] + Title = "Привет! 👋" + Content = "Добро пожаловать в мой блог!" + AlignSocialIconsTo = "center" +``` + +--- + +### 👤 Режим профиля (Profile Mode) + +| Параметр | Описание | Значения | +|----------|----------|----------| +| `profileMode.enabled` | Включить режим профиля | `true`, `false` | +| `profileMode.title` | Заголовок профиля | Текст | +| `profileMode.subtitle` | Подзаголовок профиля | Текст | +| `profileMode.imageUrl` | Путь к изображению профиля | Путь или URL | +| `profileMode.imageTitle` | Alt-текст изображения | Текст | +| `profileMode.imageWidth` | Ширина изображения | Число (px) | +| `profileMode.imageHeight` | Высота изображения | Число (px) | +| `profileMode.buttons` | Кнопки действий | Массив `{name, url}` | + +**Пример:** +```toml +[params.profileMode] + enabled = true + title = "Имя Фамилия" + subtitle = "Разработчик, блогер, энтузиаст" + imageUrl = "/images/profile.jpg" + imageTitle = "Моё фото" + imageWidth = 150 + imageHeight = 150 + +[[params.profileMode.buttons]] + name = "Архив" + url = "/posts/" + +[[params.profileMode.buttons]] + name = "GitHub" + url = "https://github.com/username" +``` + +--- + +### 📱 Социальные иконки + +| Параметр | Описание | Пример | +|----------|----------|--------| +| `socialIcons` | Список соц. иконок | Массив `{name, url}` | + +**Пример:** +```toml +[[params.socialIcons]] + name = "telegram" + url = "https://t.me/username" + +[[params.socialIcons]] + name = "github" + url = "https://github.com/username" + +[[params.socialIcons]] + name = "linkedin" + url = "https://linkedin.com/in/username" +``` + +**Поддерживаемые платформы:** telegram, github, gitlab, twitter, x-twitter, linkedin, facebook, instagram, youtube, reddit, discord, stack-overflow, mastodon, и другие. + +--- + +### 📄 Параметры постов (глобальные) + +| Параметр | Описание | Значения | По умолчанию | +|----------|----------|----------|--------------| +| `ShowReadingTime` | Показывать время чтения | `true`, `false` | `false` | +| `ShowWordCount` | Показывать количество слов | `true`, `false` | `false` | +| `ShowShareButtons` | Показывать кнопки шеринга | `true`, `false` | `false` | +| `ShareButtons` | Какие кнопки шеринга показывать | Массив | `["twitter", "facebook", "linkedin"]` | +| `ShowBreadCrumbs` | Показывать хлебные крошки | `true`, `false` | `false` | +| `ShowPostNavLinks` | Показывать навигацию между постами | `true`, `false` | `false` | +| `ShowCodeCopyButtons` | Показывать кнопки копирования кода | `true`, `false` | `false` | +| `hideAuthor` | Скрывать информацию об авторе | `true`, `false` | `false` | +| `disableSpecial1stPost` | Отключить специальный стиль первого поста | `true`, `false` | `false` | +| `ShowAllPagesInArchive` | Показывать все страницы в архиве | `true`, `false` | `false` | +| `mainSections` | Основные секции для главной | Массив | `["posts"]` | + +**Пример:** +```toml +[params] + ShowReadingTime = true + ShowWordCount = true + ShowShareButtons = true + ShareButtons = ["telegram", "twitter", "linkedin", "reddit"] + ShowBreadCrumbs = true + ShowPostNavLinks = true + ShowCodeCopyButtons = true + mainSections = ["posts", "blog"] +``` + +--- + +### 🖼️ Обложки (Cover) + +| Параметр | Описание | Значения | +|----------|----------|----------| +| `cover.responsiveImages` | Генерировать адаптивные изображения | `true`, `false` | +| `cover.linkFullImages` | Ссылка на полное изображение | `true`, `false` | +| `cover.hidden` | Скрывать обложку в списках | `true`, `false` | +| `cover.hiddenInList` | Скрывать обложку только в списках | `true`, `false` | + +**Пример:** +```toml +[params.cover] + responsiveImages = true + linkFullImages = true +``` + +--- + +### ✏️ Редактирование постов + +| Параметр | Описание | Пример | +|----------|----------|--------| +| `editPost.URL` | URL репозитория для редактирования | `"https://github.com/user/repo/content"` | +| `editPost.Text` | Текст кнопки редактирования | `"Редактировать"` | +| `editPost.appendFilePath` | Добавлять путь к файлу в URL | `true`, `false` | + +**Пример:** +```toml +[params.editPost] + URL = "https://github.com/dedinit/dedinit.ru/content" + Text = "Предложить правки" + appendFilePath = true +``` + +--- + +### 🔍 Поиск (Fuse.js) + +| Параметр | Описание | Значения | +|----------|----------|----------| +| `fuseOpts.isCaseSensitive` | Чувствительность к регистру | `true`, `false` | +| `fuseOpts.shouldSort` | Сортировать результаты | `true`, `false` | +| `fuseOpts.location` | Позиция начала поиска | Число | +| `fuseOpts.distance` | Расстояние для поиска | Число | +| `fuseOpts.threshold` | Порог соответствия (0.0–1.0) | Число | +| `fuseOpts.minMatchCharLength` | Мин. длина совпадения | Число | +| `fuseOpts.limit` | Ограничение результатов | Число | +| `fuseOpts.keys` | Поля для поиска | Массив | + +**Пример:** +```toml +[params.fuseOpts] + isCaseSensitive = false + shouldSort = true + location = 0 + distance = 1000 + threshold = 0.4 + minMatchCharLength = 2 + limit = 10 + keys = ["title", "summary", "content"] +``` + +--- + +### 👥 Авторы + +| Параметр | Описание | Пример | +|----------|----------|--------| +| `author` | Авторы сайта по умолчанию | `author = ["Кразя"]` | + +Может быть переопределено во frontmatter поста: +```yaml +--- +author: ["Автор 1", "Автор 2"] +--- +``` + +--- + +### 📊 Footer (Подвал) + +| Параметр | Описание | Значения | +|----------|----------|----------| +| `footer.hideCopyright` | Скрыть информацию о копирайте | `true`, `false` | +| `footer.text` | Текст в подвале (до ссылки на Hugo) | Текст (markdown) | +| `hideFooter` | Полностью скрыть подвал | `true`, `false` | +| `disableScrollToTop` | Отключить кнопку "Наверх" | `true`, `false` | + +**Пример:** +```toml +[params.footer] + hideCopyright = false + text = "Сделано с ❤️" +``` + +--- + +### 🔗 Label (Логотип в шапке) + +| Параметр | Описание | Пример | +|----------|----------|--------| +| `label.text` | Текст логотипа | `text = "dedinit()"` | +| `label.icon` | Путь к иконке логотипа | `icon = "/images/logo.png"` | +| `label.iconSVG` | SVG логотипа (inline) | `iconSVG = "..."` | +| `label.iconHeight` | Высота иконки | `iconHeight = 30` | + +**Пример:** +```toml +[params.label] + text = "dedinit()" + icon = "/images/favicon/favicon48x48.ico" + iconHeight = 30 +``` + +--- + +### 📈 Аналитика и верификация + +| Параметр | Описание | Пример | +|----------|----------|--------| +| `analytics.google.SiteVerificationTag` | Тег верификации Google | `SiteVerificationTag = "XXXXXXXXXX"` | +| `analytics.yandex.SiteVerificationTag` | Тег верификации Яндекс | `SiteVerificationTag = "YYYYYYYYYY"` | +| `analytics.bing.SiteVerificationTag` | Тег верификации Bing | `SiteVerificationTag = "ZZZZZZZZZZ"` | +| `analytics.naver.SiteVerificationTag` | Тег верификации Naver | `SiteVerificationTag = "AAAAAAAAAA"` | + +**Пример:** +```toml +[params.analytics.google] + SiteVerificationTag = "XXXXXXXXXX" + +[params.analytics.yandex] + SiteVerificationTag = "YYYYYYYYYY" +``` + +**Google Analytics (в секции services):** +```toml +[services.googleAnalytics] + ID = "G-XXXXXXXXXX" +``` + +--- + +### 🎯 Прочие параметры + +| Параметр | Описание | Значения | +|----------|----------|----------| +| `CanonicalLinkText` | Текст для canonical ссылки | `"Originally published at"` | +| `displayFullLangName` | Показывать полное название языка | `true`, `false` | +| `ShowPageNums` | Показывать номера страниц в пагинации | `true`, `false` | +| `ShowRssButtonInSectionTermList` | Показывать RSS кнопку в разделах | `true`, `false` | + +--- + +### 🔧 Assets (Ресурсы) + +| Параметр | Описание | Значения | +|----------|----------|----------| +| `assets.favicon` | Путь к favicon.ico | Путь | +| `assets.favicon16x16` | Путь к favicon 16x16 | Путь | +| `assets.favicon32x32` | Путь к favicon 32x32 | Путь | +| `assets.apple_touch_icon` | Путь к Apple touch icon | Путь | +| `assets.safari_pinned_tab` | Путь к Safari pinned tab | Путь | +| `assets.theme_color` | Цвет темы для браузера | HEX цвет | +| `assets.msapplication_TileColor` | Цвет плитки MS | HEX цвет | +| `assets.disableScrollBarStyle` | Отключить стили скроллбара | `true`, `false` | +| `assets.disableFingerprinting` | Отключить fingerprinting | `true`, `false` | + +**Пример:** +```toml +[params.assets] + favicon = "images/favicon/favicon48x48.ico" + favicon16x16 = "images/favicon/favicon-16x16.png" + favicon32x32 = "images/favicon/favicon-32x32.png" + apple_touch_icon = "images/favicon/apple-touch-icon.png" + theme_color = "#2e2e33" +``` + +--- + +### 📑 Schema.org разметка + +| Параметр | Описание | Пример | +|----------|----------|--------| +| `schema.publisherType` | Тип издателя | `"Organization"`, `"Person"` | +| `schema.sameAs` | Ссылки на соц. профили | Массив URL | + +**Пример:** +```toml +[params.schema] + publisherType = "Person" + sameAs = ["https://t.me/username", "https://github.com/username"] +``` + +--- + +## 📝 Frontmatter параметры (в постах) + +Эти параметры указываются в начале каждого поста (в YAML/TOML): + +| Параметр | Описание | Пример | +|----------|----------|--------| +| `title` | Заголовок поста | `title = "Мой пост"` | +| `description` | Описание поста | `description = "Краткое описание"` | +| `date` | Дата публикации | `date = 2026-03-06T19:30:00+03:00` | +| `lastmod` | Дата последнего изменения | `lastmod = 2026-03-07T10:00:00+03:00` | +| `publishDate` | Дата публикации (альтернативная) | `publishDate = 2026-03-06` | +| `draft` | Черновик (не публиковать) | `draft = true` | +| `tags` | Теги поста | `tags = ["hugo", "blog"]` | +| `categories` | Категории поста | `categories = ["технологии"]` | +| `keywords` | Ключевые слова поста | `keywords = ["hugo", "golang"]` | +| `author` | Автор поста (переопределение) | `author = ["Имя"]` | +| `canonicalURL` | Canonical URL | `canonicalURL = "https://..."` | +| `CanonicalLinkText` | Текст canonical ссылки | `CanonicalLinkText = "Оригинал"` | + +### Параметры отображения поста + +| Параметр | Описание | Значения | +|----------|----------|----------| +| `ShowReadingTime` | Показывать время чтения | `true`, `false` | +| `ShowWordCount` | Показывать количество слов | `true`, `false` | +| `ShowBreadCrumbs` | Показывать хлебные крошки | `true`, `false` | +| `ShowPostNavLinks` | Показывать навигацию | `true`, `false` | +| `ShowShareButtons` | Показывать кнопки шеринга | `true`, `false` | +| `ShowCodeCopyButtons` | Показывать кнопки копирования | `true`, `false` | +| `ShowToc` | Показывать оглавление | `true`, `false` | +| `TocOpen` | Оглавление открыто по умолчанию | `true`, `false` | +| `UseHugoToc` | Использовать встроенный Hugo TOC | `true`, `false` | +| `disableAnchoredHeadings` | Отключить якорные заголовки | `true`, `false` | +| `hideSummary` | Скрыть саммари в списке | `true`, `false` | +| `hideMeta` | Скрыть мета-информацию | `true`, `false` | +| `hideAuthor` | Скрыть автора | `true`, `false` | +| `hideFooter` | Скрыть подвал на странице | `true`, `false` | +| `searchHidden` | Скрыть из поиска | `true`, `false` | +| `hiddenInHomeList` | Скрыть с главной страницы | `true`, `false` | +| `robotsNoIndex` | Запретить индексацию | `true`, `false` | + +### Обложка поста + +```yaml +cover: + image: "/images/cover.jpg" + alt: "Описание изображения" + caption: "Подпись к изображению" + relative: false + hidden: false + hiddenInList: false +``` + +### Редактирование поста + +```yaml +editPost: + URL: "https://github.com/user/repo/content/post.md" + Text: "Предложить правки" + appendFilePath: true +``` + +--- + +## 🗂️ Структура [outputs] + +Настройка форматов вывода для разных типов страниц: + +```toml +[outputs] + home = ["HTML", "RSS", "JSON"] # JSON нужен для поиска + page = ["HTML"] + section = ["HTML", "RSS"] + taxonomy = ["HTML", "RSS"] + term = ["HTML", "RSS"] +``` + +--- + +## 🏷️ Таксономии + +```toml +[taxonomies] + category = "categories" + tag = "tags" +``` + +--- + +## 🎨 Подсветка синтаксиса (Chroma) + +```toml +[markup.highlight] + style = "github-dark" + lineNos = true + tabWidth = 4 +``` + +**Доступные стили:** `github`, `github-dark`, `monokai`, `dracula`, `one-dark`, и другие. + +--- + +## 🌐 Многоязычность + +```toml +[languages] + [languages.ru] + languageName = "Русский" + languageCode = "ru-ru" + weight = 1 + title = "dedinit()" + [languages.ru.params] + languageAltTitle = "Russian" + + [languages.en] + languageName = "English" + languageCode = "en-us" + weight = 2 + title = "dedinit()" +``` + +--- + +## 📜 Меню + +```toml +[[menu.main]] + name = "Главная" + url = "/" + weight = 10 + +[[menu.main]] + name = "Архив" + url = "/posts/" + weight = 20 + +[[menu.main]] + name = "Категории" + url = "/categories/" + weight = 30 +``` + +--- + +## 🔑 Горячие клавиши (AccessKeys) + +| Клавиша | Действие | +|---------|----------| +| `Alt + H` | Перейти на главную | +| `Alt + T` | Переключить тему | +| `Alt + C` | Открыть/закрыть оглавление | +| `Alt + G` | Перейти к началу страницы | +| `Alt + /` | Перейти к поиску (если в меню) | + +--- + +## 📌 Пример полной конфигурации + +```toml +baseURL = 'https://dedinit.ru/' +languageCode = 'ru-ru' +title = 'dedinit()' +theme = 'rDedInit' +timeZone = 'Europe/Moscow' +preserveTaxonomyNames = true +metaDataFormat = "yaml" + +[params] + env = "production" + title = "dedinit.ru" + description = "Блог об_ops-ах" + keywords = ["блог", "программирование", "mlops", "devops"] + author = "Кразя" + DateFormat = "02.01.2006 15:04" + language = "ru" + languageAlt = "ru" + + # Тема + defaultTheme = "auto" + disableThemeToggle = false + + # Посты + ShowReadingTime = true + ShowWordCount = true + ShowShareButtons = false + ShareButtons = ["telegram", "twitter", "linkedin"] + ShowPostNavLinks = true + ShowBreadCrumbs = true + ShowCodeCopyButtons = true + disableSpecial1stPost = true + + # Главная + mainSections = ["posts"] + + # Footer + disableScrollToTop = false + +[params.assets] + favicon = "images/favicon/favicon48x48.ico" + favicon16x16 = "images/favicon/favicon-16x16.png" + favicon32x32 = "images/favicon/favicon-32x32.png" + +[params.label] + text = "dedinit()" + icon = "images/favicon/favicon48x48.ico" + iconHeight = 30 + +[outputs] + home = ["HTML", "RSS"] + page = ["HTML"] + section = ["HTML", "RSS"] + +[taxonomies] + category = "categories" + tag = "tags" + +[markup.highlight] + style = "github-dark" + lineNos = true + tabWidth = 4 + +[menu] + [[menu.main]] + name = "Главная" + url = "/" + weight = 10 + [[menu.main]] + name = "Архив" + url = "/posts/" + weight = 20 + +[languages] + [languages.ru] + languageName = "Русский" + languageCode = "ru-ru" + weight = 1 + title = "dedinit()" + +[services.googleAnalytics] + ID = "" +``` + +--- + +## 📚 Источники + +- [Официальная документация PaperMod](https://github.com/adityatelange/hugo-PaperMod/wiki) +- [Документация Hugo](https://gohugo.io/documentation/) +- [Пример конфигурации PaperMod](https://github.com/adityatelange/hugo-PaperMod/tree/exampleSite) + +--- + +## 💡 Советы + +1. **Минимальная конфигурация**: Для начала достаточно указать `title`, `description`, `author`, `defaultTheme` +2. **SEO**: Включите `env = "production"` для активации мета-тегов +3. **Производительность**: `ShowCodeCopyButtons` и `ShowReadingTime` не влияют на скорость +4. **Кастомизация**: Используйте `assets/css/extended/blank.css` для своих стилей +5. **Frontmatter**: Параметры во frontmatter переопределяют глобальные настройки + +--- + +**Документ актуален для версии темы rDedInit на базе PaperMod v9.x** diff --git a/QWEN.md b/QWEN.md index 659ba2b..0fee33b 100644 --- a/QWEN.md +++ b/QWEN.md @@ -5,44 +5,181 @@ 1. Все важные решения и изменения фиксируются в README.md 2. Взаимодействие происходит на русском языке 3. Перед применением изменений проверяется корректность принятых решений -4. Цель - максимально быстро запустить проект для публикации контента +4. Цель — максимально быстро запустить проект для публикации контента -## Текущая задача +## Описание проекта -Организация блога на основе Hugo с темой PaperMod: -- Установка Hugo расширенной версии -- Создание нового сайта dedinit.ru -- Установка темы PaperMod -- Настройка bundle хранения статей -- Интеграция с Gitea сервером gitea.nixg.ru через SSH +**dedinit.ru** — блог на основе генератора статических сайтов Hugo с кастомной темой **rDedInit** (форк PaperMod). + +**Основная цель:** платформа для публикации лонгридов с поддержкой блоков кода и подсветки синтаксиса. + +### Технические характеристики + +| Параметр | Значение | +|----------|----------| +| Генератор | Hugo Extended 0.155.1 | +| Тема | rDedInit (форк PaperMod) | +| Язык | Русский (ru-ru) | +| Формат статей | Bundle (папка с index.md) | +| Деплой | SFTP (kpa39l.myjino.ru:2222) | + +### Структура проекта + +``` +dedinit.ru/ +├── content/ +│ ├── posts/ # Статьи блога (bundle формат) +│ └── telegram/ # Telegram-посты (планируется) +├── themes/ +│ └── rDedInit/ # Кастомная тема на базе PaperMod +├── static/ +│ └── images/ +│ └── favicon/ # Favicon в стиле пиксель-арт (SmileDed) +├── public/ # Сгенерированный сайт (исключён из git) +├── layouts/ # Кастомные шаблоны (если есть) +├── assets/ # CSS/JS ресурсы +├── hugo.toml # Конфигурация Hugo +├── Makefile # Команды сборки и деплоя +└── docs/ # Документация +``` ## Проверочные действия -Перед выполнением каждого этапа будут выполняться проверки: -- Наличие установленного Hugo -- Возможность создания нового сайта -- Корректность настроек темы -- Подключение к Gitea серверу +Перед выполнением каждого этапа выполняются проверки: +- Наличие установленного Hugo (`hugo version`) +- Возможность сборки сайта (`hugo`) +- Корректность настроек темы (проверка `hugo.toml`) +- Работоспособность деплоя (`make deploy-dry-run`) + +## Команды проекта + +### Сборка и запуск + +```bash +hugo # Генерация сайта в public/ +hugo server # Локальный сервер (http://localhost:1313) +make build # Сборка через Makefile +make clean # Очистка public/ +make rebuild # Полная пересборка +``` + +### Деплой + +```bash +make deploy # Сборка + деплой на хостинг +make deploy-dry-run # Симуляция деплоя +make help # Список доступных команд +``` + +### Параметры деплоя + +| Параметр | Значение | +|----------|----------| +| Хост | kpa39l.myjino.ru | +| Порт SFTP | 2222 | +| Пользователь | kpa39l_dedinit | +| Путь | /dedinit.ru | + +## Принятые технические решения + +1. **Структура проекта**: Git-репозиторий инициализирован в папке с Hugo-сайтом +2. **Формат статей**: Bundle (папка с index.md) для удобного хранения статьи и связанных файлов +3. **Тема rDedInit**: Собственная тема на базе PaperMod с русификацией +4. **Деплой**: Кроссплатформенный (rsync для Unix, WinSCP для Windows) +5. **Favicon**: Набор в стиле пиксель-арт (SmileDed) с логотипом 48px в шапке +6. **Подсветка кода**: github-dark стиль с номерами строк + +## Конфигурация темы (hugo.toml) + +### Основные параметры + +```toml +baseURL = 'https://dedinit.ru/' +title = 'dedinit()' +theme = 'rDedInit' +timeZone = 'Europe/Moscow' +metaDataFormat = "yaml" +``` + +### Параметры PaperMod + +```toml +[params] + env = "production" + defaultTheme = "auto" + ShowReadingTime = true + ShowPostNavLinks = true + ShowBreadCrumbs = true + ShowCodeCopyButtons = true + disableSpecial1stPost = true + +[markup.highlight] + style = "github-dark" + lineNos = true + tabWidth = 4 +``` + +## Дорожная карта (ROADMAP) + +### Завершённые задачи ✅ + +- [x] Установка Hugo Extended 0.155.1 +- [x] Создание сайта dedinit.ru +- [x] Установка темы PaperMod (submodule) +- [x] Создание собственной темы rDedInit +- [x] Настройка bundle формата статей +- [x] Настройка favicon и логотипа (SmileDed) +- [x] SFTP-деплой на kpa39l.myjino.ru +- [x] Написание первых статей (6 публикаций) + +### Текущие задачи 🎯 + +- [ ] Настройка цветовой схемы темы +- [ ] Русификация интерфейса (i18n/ru.yaml) +- [ ] Визуальное оформление Telegram-постов +- [ ] Публикация новых статей + +### Планы 📈 + +- [ ] SEO оптимизация (Open Graph, sitemap) +- [ ] Аналитика (Google Analytics/Яндекс.Метрика) +- [ ] Поиск по сайту (Fuse.js) +- [ ] Комментарии (Giscus/Utterances) ## Примечания - Важно обеспечить поддержку блоков кода и подсветки синтаксиса -- Необходимо предусмотреть хранение контента на внешнем сервере - Проект должен быть готов к публикации контента как можно скорее +- Папка `public/` исключена из git-репозитория +- Для обновления Hugo: `winget install Hugo.Hugo.Extended` ## Информация о системе -- Hugo была установлена через winget -- Для обновления Hugo до последней версии используется команда: `winget install Hugo.Hugo.Extended` +- ОС: Windows 11 +- Hugo установлена через winget +- Требуется перезапуск терминала после установки/обновления Hugo - Текущая версия Hugo: 0.155.1 -- После установки/обновления Hugo требуется перезапуск терминала для обновления PATH -## Принятые решения в ходе реализации +## Полезные ссылки -1. **Структура проекта**: Git-репозиторий инициализирован в папке с Hugo-сайтом, а не во внешней папке -2. **Интеграция с Gitea**: Используется SSH-подключение по порту 2222 -3. **Файлы документации**: Все файлы документации находятся в папке проекта Hugo-сайта -4. **Исключение папки public**: Создан .gitignore файл для исключения папки public из репозитория -5. **Bundle формат статей**: Используется формат bundle (папка с index.md) для хранения статей -6. **Тема PaperMod**: Установлена как submodule с выбором совместимой версии -7. **Решение проблемы совместимости**: Выбрана версия темы, совместимая с установленной версией Hugo \ No newline at end of file +- [Документация PaperMod](https://github.com/adityatelange/hugo-PaperMod/wiki) +- [Документация Hugo](https://gohugo.io/documentation/) +- [PAPERMOD_PARAMS.md](PAPERMOD_PARAMS.md) — полный справочник параметров темы +- [ROADMAP.md](ROADMAP.md) — дорожная карта проекта +- [DEPLOY_INSTRUCTIONS.md](DEPLOY_INSTRUCTIONS.md) — инструкция по деплою + +## Файлы документации + +| Файл | Описание | +|------|----------| +| README.md | Основное описание проекта | +| ROADMAP.md | Дорожная карта развития | +| PAPERMOD_PARAMS.md | Справочник параметров темы | +| DEPLOY_INSTRUCTIONS.md | Инструкция по деплою | +| gitea-setup.md | Настройка интеграции с Gitea | +| docs/favicon-logo-setup.md | Настройка favicon и логотипа | +| Telegram_frontend.md | Оформление Telegram-постов | + +--- + +**Последнее обновление:** 5 марта 2026 г. diff --git a/Telegram_frontend.md b/Telegram_frontend.md new file mode 100644 index 0000000..625e4d2 --- /dev/null +++ b/Telegram_frontend.md @@ -0,0 +1,558 @@ +# Запрос: + +Давай посмотрим как сделать красивое представление постов из Телеграма в моём блоге с темой pappermode для hugo. Для телеграма есть вот такой виджет для встаивания поста в любой сойт. Мне очень нравится как это выглядит. https://core.telegram.org/widgets/post. Ты сможешь каким-то образом скопировать оформление и что тебе для этого от меня нужно? + +# Ответ: + +Отличная идея! Виджет Telegram выглядит действительно красиво и минималистично. Давайте разберем варианты интеграции с Hugo PaperMod. + +## Что мне нужно от вас: + +1. **Ссылка на ваш Telegram-канал** (публичный) +2. **Предпочтительный способ интеграции** (выберите один): + - Простое встраивание через iframe (официальный виджет) + - Кастомный shortcode с похожим дизайном + - Автоматический импорт постов как контента Hugo + +## Варианты решения: + +### Вариант 1: Официальный виджет Telegram (самый простой) + +Можно создавать **shortcode** для Hugo, который встраивает посты: + +```html + +
+
+ Смотреть пост в Telegram +
+ +
+``` + +**Использование:** +```markdown +{{< telegram-post "https://t.me/yourchannel/123" >}} +``` + +### Вариант 2: Кастомный стиль (полный контроль) + +Я могу помочь создать **собственный CSS-дизайн**, имитирующий стиль Telegram с: +- Адаптивной версткой +- Поддержкой темной/светлой темы PaperMod +- Кастомными цветами +- Оптимизацией под мобильные устройства + +### Вариант 3: Автоматический импорт (самый мощный) + +Создать скрипт, который: +- Скачивает посты из канала +- Конвертирует их в Markdown для Hugo +- Сохраняет медиафайлы +- Создает фронтматтер с датами и тегами + +**Какой вариант вас больше интересует?** Или, может быть, комбинация нескольких подходов? + +Также покажите, пожалуйста, ваш текущий сайт (если уже есть), чтобы я мог предложить стили, которые будут гармонично сочетаться с PaperMod. + +Отлично! Раз у вас уже есть структура с папками по ID постов, давайте определим полную структуру layouts для типа контента "telegram-posts". + +## Необходимые layouts: + +``` +layouts/ +├── telegram/ # или telegram-posts +│ ├── list.html # Страница списка всех постов +│ ├── single.html # Страница отдельного поста +│ ├── baseof.html # Базовый шаблон (опционально) +│ └── summary.html # Карточка поста для списка (важно!) +├── partials/ +│ ├── telegram-card.html # Компонент карточки поста +│ └── telegram-header.html # Шапка с аватаром и именем канала +└── shortcodes/ + └── telegram-embed.html # Шорткод для встраивания +``` + +**Ключевой момент:** `summary.html` - это то, что будет отображаться в списках (на главной, в разделах). + +## Что нужно от вас: + +1. **Как называется ваш content type?** (telegram, posts, tg-posts?) +2. **Покажите структуру папок** с одним постом: + ``` + content/ + └── telegram/ + └── 123/ + ├── index.md + ├── photo1.jpg + └── video.mp4 + ``` +3. **Какие поля во фронтматтере** index.md? (date, title, text, media и т.д.) + +Как только покажете структуру - создам: +- ✅ Карточки в стиле Telegram (копирование дизайна виджета) +- ✅ Список постов с пагинацией +- ✅ Отдельные страницы постов +- ✅ Адаптацию под PaperMod (темная/светлая тема) +- ✅ CSS стили с анимациями + +Покажите пример вашего index.md и я начну создавать шаблоны! 🚀 + + +Отлично! Теперь давайте создадим полную интеграцию. + +## План действий: + +### 1. Сначала создайте структуру в Hugo: + +```bash +cd ваш-hugo-сайт +mkdir -p content/telegram +mkdir -p layouts/telegram +mkdir -p layouts/partials +mkdir -p assets/css +``` + +### 2. Напишите скрипт синхронизации (Python): + +Создайте `scripts/sync_telegram.py`: + +```python +#!/usr/bin/env python3 +import shutil +import yaml +from pathlib import Path + +ARCHIVES_DIR = Path("../telegram-archiver/archives/dedinit") +CONTENT_DIR = Path("content/telegram") + +def sync_telegram_posts(): + CONTENT_DIR.mkdir(parents=True, exist_ok=True) + + for post_folder in ARCHIVES_DIR.iterdir(): + if not post_folder.is_dir(): + continue + + post_id = post_folder.name + dest_folder = CONTENT_DIR / post_id + dest_folder.mkdir(parents=True, exist_ok=True) + + # Копируем index.md + src_md = post_folder / "index.md" + if src_md.exists(): + # Читаем и добавляем type + content = src_md.read_text(encoding='utf-8') + if 'type: telegram' not in content: + content = content.rstrip() + "\ntype: telegram\n" + src_md.write_text(content, encoding='utf-8') + shutil.copy2(src_md, dest_folder / "index.md") + + # Копируем медиафайлы + for media_file in post_folder.glob("*"): + if media_file.name != "index.md": + shutil.copy2(media_file, dest_folder / media_file.name) + + print(f"Synced post {post_id}") + +if __name__ == "__main__": + sync_telegram_posts() +``` + +### 3. Создайте базовый шаблон `layouts/telegram/single.html`: + +```html +{{ define "main" }} +
+
+ +
+
+ {{ .Site.Params.telegram.channelName | default +
+ +
+ + +
+ {{ .Content }} +
+ + + {{ if .Params.media_files }} +
+ {{ range .Params.media_files }} + {{ if eq .type "photo" }} +
+ {{ .caption | default + {{ if .caption }} +
{{ .caption }}
+ {{ end }} +
+ {{ else if eq .type "video" }} +
+ +
+ {{ end }} + {{ end }} +
+ {{ end }} + + + +
+ + {{ template "_internal/disqus.html" . }} +
+{{ end }} +``` + +### 4. Создайте шаблон списка `layouts/telegram/list.html`: + +```html +{{ define "main" }} +
+
+

{{ .Title }}

+ {{ if .Site.Params.telegram.channelName }} +

Archive of {{ .Site.Params.telegram.channelName }}

+ {{ end }} +
+ +
+ {{ range .Pages }} + + {{ end }} +
+ + {{ template "_internal/pagination.html" . }} +
+{{ end }} +``` + +### 5. Создайте CSS стили `assets/css/telegram.css`: + +```css +/* Telegram Post Styles - PaperMod Compatible */ + +:root { + --telegram-bg: var(--theme); + --telegram-card-bg: var(--code-bg); + --telegram-text: var(--primary); + --telegram-secondary: var(--secondary); + --telegram-border: var(--border); + --telegram-blue: #2481cc; + --telegram-blue-hover: #1a68a8; +} + +/* Single Post */ +.telegram-post-container { + max-width: 640px; + margin: 0 auto; + padding: 20px; +} + +.telegram-post { + background: var(--telegram-card-bg); + border-radius: 12px; + padding: 16px; + box-shadow: 0 1px 2px rgba(0,0,0,0.1); +} + +.telegram-post-header { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 12px; +} + +.telegram-post-avatar { + width: 48px; + height: 48px; + border-radius: 50%; + overflow: hidden; + flex-shrink: 0; +} + +.telegram-post-avatar img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.telegram-post-info { + flex: 1; +} + +.telegram-post-channel { + font-weight: 600; + color: var(--telegram-blue); + font-size: 15px; +} + +.telegram-post-date { + font-size: 13px; + color: var(--telegram-secondary); +} + +.telegram-post-content { + font-size: 15px; + line-height: 1.6; + color: var(--telegram-text); + margin-bottom: 12px; +} + +.telegram-post-content p { + margin: 0 0 12px 0; +} + +.telegram-post-content p:last-child { + margin-bottom: 0; +} + +/* Media */ +.telegram-post-media { + display: flex; + flex-direction: column; + gap: 8px; + margin-bottom: 12px; +} + +.telegram-photo { + border-radius: 8px; + overflow: hidden; +} + +.telegram-photo img { + width: 100%; + height: auto; + display: block; +} + +.telegram-photo-caption { + padding: 8px; + font-size: 14px; + color: var(--telegram-secondary); + background: rgba(0,0,0,0.05); +} + +.telegram-video { + border-radius: 8px; + overflow: hidden; +} + +.telegram-video video { + width: 100%; + display: block; +} + +/* Footer */ +.telegram-post-footer { + display: flex; + justify-content: space-between; + align-items: center; + padding-top: 12px; + border-top: 1px solid var(--telegram-border); + font-size: 13px; + color: var(--telegram-secondary); +} + +.telegram-link { + color: var(--telegram-blue); + text-decoration: none; + font-weight: 500; + transition: color 0.2s; +} + +.telegram-link:hover { + color: var(--telegram-blue-hover); + text-decoration: underline; +} + +/* Posts List */ +.telegram-list-container { + max-width: 800px; + margin: 0 auto; + padding: 20px; +} + +.telegram-list-header { + margin-bottom: 32px; + text-align: center; +} + +.telegram-list-title { + font-size: 28px; + margin-bottom: 8px; +} + +.telegram-list-description { + color: var(--telegram-secondary); +} + +.telegram-posts-grid { + display: grid; + gap: 16px; +} + +.telegram-post-card { + background: var(--telegram-card-bg); + border-radius: 12px; + overflow: hidden; + transition: transform 0.2s, box-shadow 0.2s; + border: 1px solid var(--telegram-border); +} + +.telegram-post-card:hover { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(0,0,0,0.1); +} + +.telegram-post-card-link { + display: block; + text-decoration: none; + color: inherit; +} + +.telegram-post-card-header { + padding: 12px 16px; + border-bottom: 1px solid var(--telegram-border); +} + +.telegram-post-card-date { + font-size: 13px; + color: var(--telegram-secondary); +} + +.telegram-post-card-content { + padding: 16px; + font-size: 15px; + line-height: 1.6; +} + +.telegram-post-card-media { + max-height: 300px; + overflow: hidden; +} + +.telegram-post-card-media img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.telegram-post-card-footer { + padding: 12px 16px; + font-size: 13px; + color: var(--telegram-secondary); + border-top: 1px solid var(--telegram-border); +} + +/* Responsive */ +@media (max-width: 768px) { + .telegram-post-container, + .telegram-list-container { + padding: 12px; + } + + .telegram-post { + padding: 12px; + } +} +``` + +### 6. Добавьте в `config.yml`: + +```yaml +params: + telegram: + channelName: "Дед in АйТи" + channelUrl: "https://t.me/dedinit" + avatar: "images/channel-avatar.jpg" + +# Если используете модули +module: + mounts: + - source: content/telegram + target: content/telegram +``` + +### 7. Подключите CSS в `layouts/_default/baseof.html` или создайте partial: + +```html + +{{ $telegram := resources.Get "css/telegram.css" }} +{{ $telegram = $telegram | resources.Minify | resources.Fingerprint }} + +``` + +И добавьте в `layouts/telegram/baseof.html`: + +```html + + + + {{ partial "head.html" . }} + {{ partial "telegram-styles.html" . }} + + + {{ partial "header.html" . }} +
+ {{ block "main" . }}{{ end }} +
+ {{ partial "footer.html" . }} + + +``` + +### 8. Запустите синхронизацию: + +```bash +python scripts/sync_telegram.py +hugo +``` + +**Что дальше:** +1. Покажите мне пример контента из `index.md` (текст поста) +2. Скажите, нужно ли добавить поддержку видео/аудио +3. Хотите ли вы добавить фильтры по датам/тегам + +Готов доработать любой из шаблонов под ваши нужды! 🚀 \ No newline at end of file diff --git a/content/posts/20260412 kommunizm ne utopia/index.md b/content/posts/20260412 kommunizm ne utopia/index.md new file mode 100644 index 0000000..cfdcc32 --- /dev/null +++ b/content/posts/20260412 kommunizm ne utopia/index.md @@ -0,0 +1,71 @@ +--- +title: "Коммунизм не утопия" +date: 2026-04-12T18:44:16+03:00 +draft: false +tags: ["коммунизм", "нод"] +categories: ["Политика"] +--- + +# Коммунизм: утопия или научный базис будущего общества? Размышления о новом общественном договоре + +Я часто слышу вопрос, который звучит как приговор: «Разве коммунизм не утопия?» В общественном сознании этот термин давно превратился в синоним несбыточной мечты, морального прожектёрства или исторического тупика. Но я убеждён: такой взгляд проистекает не из анализа теории, а из подмены понятий. Коммунистическая идея в её марксистском ядре — не фантазия о «рае на земле», а научный метод понимания исторического движения и экономический базис подлинно гуманистического общества. Наша задача сегодня — не канонизировать прошлое, а развить диалектику марксизма-ленинизма в условиях нового технологического уклада, сформировать общественный договор, который заменит современное государство, как систему принуждения, системой взаимного развития. + +## Утопия против науки: в чём принципиальная разница + +Исторически социалистическая мысль начиналась с морального возмущения. Сен-Симон, Фурье, Оуэн предлагали «справедливые» общины, основанные на разуме и доброй воле. Но они не отвечали на два ключевых вопроса: *как* достичь нового строя и *какая сила* способна его осуществить. Их проект зависел от убеждения элит, от просвещения «сверху». + +Маркс и Энгельс совершили методологический переворот. Они показали, что социализм не изобретается разумом, а рождается из объективных противоречий самого капитализма. В работе «Развитие социализма от утопии к науке» (глава из «Анти-Дюринга», 1880) Энгельс чётко обозначил границу: утописты исходили из вечных истин справедливости, марксизм же исходит из анализа способа производства, классовой структуры и исторической динамики производительных сил [[1]]. Коммунизм здесь — не идеал, а закономерная форма разрешения противоречия между общественным характером производства и частным характером присвоения. + +## Экономический базис, а не моральный призыв + +В марксистской теории общество не строится на идеях. Идеи, право, политика, культура — это надстройка, которая формируется на основе экономического базиса: совокупности производственных отношений, соответствующих достигнутому уровню развития производительных сил [[2]]. Капитализм сам создаёт материальные предпосылки своего отрицания: обобществляет труд, создаёт мировые рынки, автоматизирует производство, но оставляет плоды этого развития в руках узкого класса собственников. + +Коммунистическая программа поэтому начинается не с лозунгов о равенстве, а с требования изменения формы собственности на средства производства и перехода к координируемому распределению общественного продукта в интересах большинства. Как писал Маркс в Предисловии к «К критике политической экономии»: «Ни одна общественная формация не погибает раньше, чем разовьются все производительные силы, для которых она даёт достаточно простора» [[2]]. Утопия игнорирует эту материальную обусловленность. Научный социализм делает её отправной точкой. + +## Гуманизм без иллюзий: человек как совокупность отношений + +Один из главных аргументов критиков коммунизма звучит так: «Человек по природе эгоистичен, поэтому общество без принуждения невозможно». Этот тезис метафизичен. Маркс в «Тезисах о Фейербахе» формулирует принципиально иную антропологию: «Сущность человека не есть абстракт, присущий отдельному индивиду. В своей действительности она есть совокупность всех общественных отношений» [[3]]. + +Человеческая «природа» исторична. Капитализм воспроизводит конкурентного, отчуждённого индивида не потому, что так заложено в биологии, а потому, что так организованы его экономические отношения. В «Экономико-философских рукописях 1844 года» [[8]] Маркс показывает, как отчуждение труда превращает человека в придаток машины, а его творческие силы — в товар. Коммунизм в этой оптике — не подавление индивидуальности, а её освобождение: «свободное развитие каждого является условием свободного развития всех» [[4]]. + +Гуманизм марксизма поэтому не сентиментален. Он практичен: система должна быть устроена так, чтобы даже в условиях несовершенства человеческих мотивов структурные условия направляли активность на созидание, а не на эксплуатацию. + +## Почему коммунизм называют утопией и уроки исторического опыта + +Скепсис понятен. Опыт СССР, как и других социалистических проектов XX века, породил сложные вопросы: бюрократическое перерождение, дефицит, репрессивные практики, технологическое отставание. Но марксистский анализ требует исторической конкретности. Социализм строился в отсталых, аграрных обществах, окружённых враждебным капиталом, в условиях гражданской войны и последующей Холодной войны. Это порождало вынужденную централизацию, ускоренную индустриализацию и оборонную автаркию, которые исторически исказили демократическую суть рабочего самоуправления. + +Ленин в «Государстве и революции» подчёркивал, что пролетарское государство — это переходная форма, задача которой — не вечное подавление, а создание условий для отмирания самого принуждения [[5]]. В поздних работах он предупреждал об опасности бюрократизма и настаивал на ленинской «культурной революции» — повышении культурного и образовательного уровня масс, кооперации и развитии советов как форм прямой демократии [[6]]. Провал или трансформация советской модели — не опровержение теории, а указание на то, что без развитых производительных сил, без зрелой общественной самодисциплины и без защиты от внешней экспансии социалистический проект вырождается. Это не аргумент против коммунизма. Это аргумент за его научное, а не догматическое развитие. + +## Технологический уклад и новый общественный договор + +Если XX век показал, что социализм нежизнеспособен без развитых производительных сил, то XXI век предоставляет эти силы в виде цифровых технологий, глобальных сетей и автоматизации. Сегодня мы живём в эпоху, о которой классики могли лишь догадываться. Цифровизация, искусственный интеллект, платформенная экономика, автоматизация рутинного труда, климатический кризис — всё это меняет материальный базис. Но диалектика марксизма остаётся рабочим инструментом. + +В «Грундриссе» Маркс предсказывал, что при высоком развитии машинерии мерой богатства станет не рабочее время, а свободное время, а труд превратится из средства выживания в форму самореализации [[7]]. Сегодня это не гипотеза, а технологическая возможность. Проблема в том, кто контролирует алгоритмы, данные и автоматизированные системы. Платформенный капитализм создаёт новую форму отчуждения: цифровое, невидимое, распределённое. Марксистский ответ на вызовы XXI века должен включать: + +1. **Общественный контроль над технологической инфраструктурой** — данные, ИИ-модели, логистические и энергетические сети как общее достояние, управляемое через демократические советы и алгоритмическую прозрачность. +2. **Декоммодификацию базовых условий жизни** — жильё, медицина, образование, транспорт, цифровая связность вне рынка, финансируемые за счёт обобществлённой добавленной стоимости автоматизации. +3. **Участие в планировании как новую форму гражданства** — не жёсткую централизованную развёрстку, а гибкую, сетевую координацию на основе открытых данных, локальных инициатив и обратной связи от сообществ. +4. **Культурный плюрализм в рамках экономической солидарности** — общественный договор не требует единомыслия. Он требует единых правил игры, где различие мировоззрений, культур и идентичностей не подавляется, а интегрируется через общие институты взаимопомощи и совместного развития. + +Такая система не будет «государством» в старом смысле. Это будет инфраструктура кооперации, где принуждение заменяется структурой, в которой приносить пользу обществу становится рационально, осмысленно и выгодно для каждого. Не потому, что люди станут «ангелами», а потому, что институты перестанут вознаграждать хищничество и начнут поощрять созидание. + +## Заключение: от догмы к методу + +Коммунистические идеи утопичны только тогда, когда их превращают в застывший набор лозунгов, оторванный от материальных условий и исторической конкретики. Но как научный метод анализа общественных противоречий и как направление движения к обществу, где развитие личности и прогресс человечества совпадают, они остаются единственной последовательной альтернативой капиталистическому тупику. + +Наша задача — не реконструировать прошлое, а спроектировать будущее. Марксизм-ленинизм должен развиваться вместе с наукой, техникой и общественными отношениями. Новый общественный договор будет жизнеспособен только тогда, когда он перестанет быть инструментом вертикали и станет горизонтальной сетью институтов, расширяющих возможности каждого. Когда каждый, независимо от происхождения, культуры или стартовых условий, сможет и захочет развиваться, потому что система будет делать это естественным, а не принудительным путём. + +Это не утопия. Это инженерная задача общественного устройства. И у нас есть все основания, чтобы её решить. + +--- + +### Использованная литература + +1. Энгельс Ф. Развитие социализма от утопии к науке. М.: Политиздат, 1988. +2. Маркс К. Предисловие к «К критике политической экономии» (1859) // Маркс К., Энгельс Ф. Соч. 2-е изд. Т. 13. М.: Госполитиздат, 1959. С. 6–9. +3. Маркс К. Тезисы о Фейербахе (1845) // Там же. Т. 3. С. 1–4. +4. Маркс К., Энгельс Ф. Манифест Коммунистической партии (1848) // Там же. Т. 4. С. 433–473. +5. Ленин В. И. Государство и революция (1917) // Полн. собр. соч. Т. 33. М.: Издательство политической литературы, 1969. С. 1–120. +6. Ленин В. И. О кооперации (1923) // Там же. Т. 45. С. 369–374. +7. Маркс К. Экономические рукописи 1857–1859 годов («Грундриссе») // Маркс К., Энгельс Ф. Соч. 2-е изд. Т. 46, ч. 2. М.: Госполитиздат, 1962. С. 217–224. +8. Маркс К. Экономико-философские рукописи 1844 года // Там же. Т. 42. С. 41–174. \ No newline at end of file diff --git a/favicon.png b/favicon.png new file mode 100644 index 0000000..80f8f01 Binary files /dev/null and b/favicon.png differ diff --git a/static/images/favicon/SmileDed/RedDed-20260307-145623.piskel b/static/images/favicon/SmileDed/RedDed-20260307-145623.piskel new file mode 100644 index 0000000..49ff4c1 --- /dev/null +++ b/static/images/favicon/SmileDed/RedDed-20260307-145623.piskel @@ -0,0 +1 @@ +{"modelVersion":2,"piskel":{"name":"RedDed","description":"","fps":16,"height":32,"width":32,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAy0lEQVRYR+2U0Q2DMAxE487RVVAyQEdgvI7AAIm6StegqYSwBEjUZxSIK4XPxEnenQ/T6Fx2FT9qAH/jwC3rovIhgpIFZ6AagPbhrWzJCdEBMwAE9pQdyHNmijnQAMw48Hi+pzYP/X0V+O36aRm4HOAV46Q0hABNNi6K87lOOCfOATMAKvmL4mIOmAHw3v9kSSmt9os7UB1A24riDlwOwA/y74gCSMr5HnEONAAzDqAgaO/VGTADsAeiVX7YATMA6DyQ6uA5IF10dP8LMhW3oaAtG7EAAAAASUVORK5CYII=\"}]}"],"hiddenFrames":[""]}} \ No newline at end of file diff --git a/static/images/favicon/SmileDed/SmileDed-20260307-150124.piskel b/static/images/favicon/SmileDed/SmileDed-20260307-150124.piskel new file mode 100644 index 0000000..893ba08 --- /dev/null +++ b/static/images/favicon/SmileDed/SmileDed-20260307-150124.piskel @@ -0,0 +1 @@ +{"modelVersion":2,"piskel":{"name":"SmileDed","description":"","fps":16,"height":32,"width":32,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAA2klEQVRYR2NkGGDAOMD2M4w6gOgQ+A8EpEQXIxAQo54oRSCDBswBpFqM7mtCIUEwBAaNA86nEnQriucNZ0OSDNVCYNQBgyYE6hyegOO26YAMSpyji9MsDdDdAQcOHAAnZ74lDsQUbHA1n2IOgNkODg54sw/BvDVoHECS95EUUy0EBo0D7O3tGQ4ePIjVPdjkqB4CIEvwAXTHUd0BpEbF0HcAzMew7EhsCBDyOcwcguXAqAMGTQgQ6xBi457kNDBoHIDLIaT6nOwQGDQOILY8IKSO6HKAkEHkygMA156VIVlpNgoAAAAASUVORK5CYII=\"}]}"],"hiddenFrames":[""]}} \ No newline at end of file diff --git a/static/images/favicon/SmileDed/SmileDed-20260307-150217.piskel b/static/images/favicon/SmileDed/SmileDed-20260307-150217.piskel new file mode 100644 index 0000000..1b02a45 --- /dev/null +++ b/static/images/favicon/SmileDed/SmileDed-20260307-150217.piskel @@ -0,0 +1 @@ +{"modelVersion":2,"piskel":{"name":"SmileDed","description":"","fps":16,"height":32,"width":32,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAA10lEQVRYR2NkGGDAOMD2M4w6gOgQ+A8EpEQXIxAQo54oRSCDBswBpFqM7mtCIUEwBAaNA86nEnQriucNZ0OSDNVCYNQBgyYE6hyegOO26YAMSpyji9MsDdDdAQcOHAAnZ74lDsQUbHA1n2IOgNkODg54sw/BvDVoHECS95EUUy0EBo0D7O3t8brl4MGDKPJUD4EBdwDMe7gcQvMQoLsDYBbCsiOxiZFQ3MPMIVgOjDpg0IQAsQ4hNu5JTgODxgG4HEKqz8kOgUHjAGLLA0LqiC4HCBlErjwAXomYIfb/HhcAAAAASUVORK5CYII=\"}]}"],"hiddenFrames":[""]}} \ No newline at end of file diff --git a/static/images/favicon/SmileDed/SmileDed-20260307-150416.piskel b/static/images/favicon/SmileDed/SmileDed-20260307-150416.piskel new file mode 100644 index 0000000..8b653ec --- /dev/null +++ b/static/images/favicon/SmileDed/SmileDed-20260307-150416.piskel @@ -0,0 +1 @@ +{"modelVersion":2,"piskel":{"name":"SmileDed","description":"","fps":16,"height":32,"width":32,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAA3klEQVRYR2NkGGDAOMD2M4w6gOgQ+A8EpEQXIxAQo54oRSCDBswBpFqM7mtCIUEwBAaNA57NCiQmSuFqpNLWg9lUC4FB4wCYz9AdhC4+fEMgnXsKOG5nfs1BSRPo4jQLAbo74MCBA+ASUPXmBJJywW31ArB6BwcHvFmdYDkwaBxAkveRFFMtBAaNA+zt7fG65eDBgyjyVA+BAXcAzHu4HELzEKC7A2AWwrIjsYmRUNzDzCFYDow6YNCEALEOITbuSU4Dg8YBuBxCqs/JDoFB4wBiywNC6oguBwgZRK48ACvXniHnb8MnAAAAAElFTkSuQmCC\"}]}"],"hiddenFrames":[""]}} \ No newline at end of file diff --git a/static/images/favicon/SmileDed/SmileDed-20260307-150523.piskel b/static/images/favicon/SmileDed/SmileDed-20260307-150523.piskel new file mode 100644 index 0000000..e7d6d9c --- /dev/null +++ b/static/images/favicon/SmileDed/SmileDed-20260307-150523.piskel @@ -0,0 +1 @@ +{"modelVersion":2,"piskel":{"name":"SmileDed","description":"","fps":16,"height":32,"width":32,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAA6ElEQVRYR2NkGGDAOMD2M4w6gOgQ+A8EpEQXIxAQo54oRSCDBswBpFqM7mtCIUEwBAaNA57NCiQmSuFqpNLWg9lUC4FB4wCYz9AdhC4+fEMgnXsKOG5nfs1BSRPo4jQLAbo74MCBA+ASUPXmBJJywW31ArB6BwcHvFmdYDkwaBxAkveRFFMtBAaNA+zt7fG65eDBgyjyVA+BAXcAyHu4HIHue6rmAvRwR3cENsup4gCYxbDsSGxiJBT3MHMIlgOjDhg0IUCsQ4iNe5LTwKBxAC6HkOpzskNg0DiA2PKAkDqiywFCBpErDwBJ754hXxAobAAAAABJRU5ErkJggg==\"}]}"],"hiddenFrames":[""]}} \ No newline at end of file diff --git a/static/images/favicon/SmileDed/SmileDed16-20260307-151033.piskel b/static/images/favicon/SmileDed/SmileDed16-20260307-151033.piskel new file mode 100644 index 0000000..6fc839f --- /dev/null +++ b/static/images/favicon/SmileDed/SmileDed16-20260307-151033.piskel @@ -0,0 +1 @@ +{"modelVersion":2,"piskel":{"name":"SmileDed16","description":"","fps":16,"height":16,"width":16,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAjUlEQVQ4T2NkoBAwUqifAasB/4EAm8GMQIAujiGASzNMI7ohWA14NisQq8+k0tYz0M+AdO4pDDO/5oBdAmMT5YIDBw78V705AasXbqsXMDg4OKB4GyMMQAbgi1qiDbC3t0cx5+DBg2A+0QbgcgXtDQDZjCsc0G0HqcWZF9ANwaYZrwHILsGlmaABxORUAMtKSRHCFyUmAAAAAElFTkSuQmCC\"}]}"],"hiddenFrames":[""]}} \ No newline at end of file diff --git a/static/images/favicon/SmileDed/SmileDed16-20260307-151258.piskel b/static/images/favicon/SmileDed/SmileDed16-20260307-151258.piskel new file mode 100644 index 0000000..6fc839f --- /dev/null +++ b/static/images/favicon/SmileDed/SmileDed16-20260307-151258.piskel @@ -0,0 +1 @@ +{"modelVersion":2,"piskel":{"name":"SmileDed16","description":"","fps":16,"height":16,"width":16,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAjUlEQVQ4T2NkoBAwUqifAasB/4EAm8GMQIAujiGASzNMI7ohWA14NisQq8+k0tYz0M+AdO4pDDO/5oBdAmMT5YIDBw78V705AasXbqsXMDg4OKB4GyMMQAbgi1qiDbC3t0cx5+DBg2A+0QbgcgXtDQDZjCsc0G0HqcWZF9ANwaYZrwHILsGlmaABxORUAMtKSRHCFyUmAAAAAElFTkSuQmCC\"}]}"],"hiddenFrames":[""]}} \ No newline at end of file diff --git a/static/images/favicon/SmileDed/SmileDed512-20260307-150629.piskel b/static/images/favicon/SmileDed/SmileDed512-20260307-150629.piskel new file mode 100644 index 0000000..a284407 --- /dev/null +++ b/static/images/favicon/SmileDed/SmileDed512-20260307-150629.piskel @@ -0,0 +1 @@ +{"modelVersion":2,"piskel":{"name":"SmileDed512","description":"","fps":16,"height":512,"width":512,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,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\"}]}"],"hiddenFrames":[]}} \ No newline at end of file diff --git a/static/images/favicon/SmileDed/favicon-1024x1024.png b/static/images/favicon/SmileDed/favicon-1024x1024.png new file mode 100644 index 0000000..9ccdb7f Binary files /dev/null and b/static/images/favicon/SmileDed/favicon-1024x1024.png differ diff --git a/static/images/favicon/SmileDed/favicon-128x128.png b/static/images/favicon/SmileDed/favicon-128x128.png new file mode 100644 index 0000000..29fe28b Binary files /dev/null and b/static/images/favicon/SmileDed/favicon-128x128.png differ diff --git a/static/images/favicon/SmileDed/favicon-192x192.png b/static/images/favicon/SmileDed/favicon-192x192.png new file mode 100644 index 0000000..445798e Binary files /dev/null and b/static/images/favicon/SmileDed/favicon-192x192.png differ diff --git a/static/images/favicon/SmileDed/favicon-256x256.png b/static/images/favicon/SmileDed/favicon-256x256.png new file mode 100644 index 0000000..59f215f Binary files /dev/null and b/static/images/favicon/SmileDed/favicon-256x256.png differ diff --git a/static/images/favicon/SmileDed/favicon-512x512.png b/static/images/favicon/SmileDed/favicon-512x512.png new file mode 100644 index 0000000..6dbd11b Binary files /dev/null and b/static/images/favicon/SmileDed/favicon-512x512.png differ diff --git a/static/images/favicon/SmileDed/favicon-64x64.png b/static/images/favicon/SmileDed/favicon-64x64.png new file mode 100644 index 0000000..bdb9ed7 Binary files /dev/null and b/static/images/favicon/SmileDed/favicon-64x64.png differ diff --git a/static/images/favicon/favicon-16x16.png b/static/images/favicon/favicon-16x16.png new file mode 100644 index 0000000..05fb823 Binary files /dev/null and b/static/images/favicon/favicon-16x16.png differ diff --git a/static/images/favicon/favicon-32x32-3.png b/static/images/favicon/favicon-32x32-3.png new file mode 100644 index 0000000..e650e13 Binary files /dev/null and b/static/images/favicon/favicon-32x32-3.png differ diff --git a/static/images/favicon/favicon-32x32.png b/static/images/favicon/favicon-32x32.png new file mode 100644 index 0000000..19e2d0e Binary files /dev/null and b/static/images/favicon/favicon-32x32.png differ diff --git a/static/images/favicon/favicon.ico b/static/images/favicon/favicon.ico new file mode 100644 index 0000000..3c2d31e Binary files /dev/null and b/static/images/favicon/favicon.ico differ diff --git a/static/images/favicon/favicon48x48.ico b/static/images/favicon/favicon48x48.ico new file mode 100644 index 0000000..2d12584 Binary files /dev/null and b/static/images/favicon/favicon48x48.ico differ