vault backup: 2026-05-18 21:11:52
@@ -39,6 +39,6 @@
|
||||
"repelStrength": 6.34095634095634,
|
||||
"linkStrength": 0.504158004158004,
|
||||
"linkDistance": 250,
|
||||
"scale": 0.21784264238625786,
|
||||
"scale": 0.21784264238625775,
|
||||
"close": true
|
||||
}
|
||||
@@ -33,6 +33,7 @@
|
||||
"displaySVGInPreview": false,
|
||||
"previewImageType": "SVG",
|
||||
"renderingConcurrency": 3,
|
||||
"imageCacheRetentionDays": 30,
|
||||
"allowImageCache": true,
|
||||
"allowImageCacheInScene": true,
|
||||
"displayExportedImageIfAvailable": false,
|
||||
@@ -109,13 +110,14 @@
|
||||
"addDummyTextElement": false,
|
||||
"zoteroCompatibility": false,
|
||||
"fieldSuggester": true,
|
||||
"enableOnloadScripts": false,
|
||||
"compatibilityMode": false,
|
||||
"drawingOpenCount": 0,
|
||||
"library": "deprecated",
|
||||
"library2": {
|
||||
"type": "excalidrawlib",
|
||||
"version": 2,
|
||||
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/2.22.3",
|
||||
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/2.23.0",
|
||||
"libraryItems": []
|
||||
},
|
||||
"imageElementNotice": true,
|
||||
@@ -126,7 +128,7 @@
|
||||
"mdBorderColor": "Black",
|
||||
"mdCSS": "",
|
||||
"scriptEngineSettings": {},
|
||||
"previousRelease": "2.22.3",
|
||||
"previousRelease": "2.23.0",
|
||||
"showReleaseNotes": true,
|
||||
"excalidrawMasteryPromoCollapsed": false,
|
||||
"compareManifestToPluginVersion": false,
|
||||
@@ -489,15 +491,178 @@
|
||||
"canvasImmersiveEmbed": true,
|
||||
"startupScriptPath": "",
|
||||
"aiEnabled": true,
|
||||
"openAIAPIToken": "",
|
||||
"openAIDefaultTextModel": "gpt-5-mini",
|
||||
"openAIDefaultTextModelMaxTokens": 4096,
|
||||
"openAIDefaultVisionModel": "gpt-5-mini",
|
||||
"openAIDefaultImageGenerationModel": "gpt-image-1",
|
||||
"openAIURL": "https://api.openai.com/v1/chat/completions",
|
||||
"openAIImageGenerationURL": "https://api.openai.com/v1/images/generations",
|
||||
"openAIImageEditsURL": "https://api.openai.com/v1/images/edits",
|
||||
"openAIImageVariationURL": "https://api.openai.com/v1/images/variations",
|
||||
"aiVerboseLogging": false,
|
||||
"aiProviderProfiles": {
|
||||
"OpenAI": {
|
||||
"provider": "openai",
|
||||
"apiKey": "",
|
||||
"baseURL": "https://api.openai.com/v1"
|
||||
},
|
||||
"Anthropic": {
|
||||
"provider": "anthropic",
|
||||
"apiKey": "",
|
||||
"baseURL": "https://api.anthropic.com/v1"
|
||||
},
|
||||
"Google Gemini": {
|
||||
"provider": "google",
|
||||
"apiKey": "",
|
||||
"baseURL": "https://generativelanguage.googleapis.com/v1beta"
|
||||
},
|
||||
"xAI": {
|
||||
"provider": "xai",
|
||||
"apiKey": "",
|
||||
"baseURL": "https://api.x.ai/v1"
|
||||
},
|
||||
"OpenAI-compatible": {
|
||||
"provider": "openai-compatible",
|
||||
"apiKey": "",
|
||||
"baseURL": "https://api.openai.com/v1"
|
||||
}
|
||||
},
|
||||
"aiTextModelConfigs": {
|
||||
"gpt-5-mini": {
|
||||
"providerId": "OpenAI",
|
||||
"model": "gpt-5-mini",
|
||||
"endpoint": "",
|
||||
"multimodalSupport": true
|
||||
},
|
||||
"claude-sonnet-4-5": {
|
||||
"providerId": "Anthropic",
|
||||
"model": "claude-sonnet-4-5",
|
||||
"endpoint": "",
|
||||
"multimodalSupport": true
|
||||
},
|
||||
"gemini-2.5-pro": {
|
||||
"providerId": "Google Gemini",
|
||||
"model": "gemini-2.5-pro",
|
||||
"endpoint": "",
|
||||
"multimodalSupport": true
|
||||
},
|
||||
"grok-4-fast": {
|
||||
"providerId": "xAI",
|
||||
"model": "grok-4-fast",
|
||||
"endpoint": "",
|
||||
"multimodalSupport": true
|
||||
}
|
||||
},
|
||||
"aiImageModelConfigs": {
|
||||
"dall-e-2": {
|
||||
"providerId": "OpenAI",
|
||||
"model": "dall-e-2",
|
||||
"supportedSizes": [
|
||||
"256x256",
|
||||
"512x512",
|
||||
"1024x1024"
|
||||
],
|
||||
"supportsPromptImageTransforms": true,
|
||||
"supportsMaskImageEdits": true
|
||||
},
|
||||
"dall-e-3": {
|
||||
"providerId": "OpenAI",
|
||||
"model": "dall-e-3",
|
||||
"supportedSizes": [
|
||||
"1024x1024",
|
||||
"1792x1024",
|
||||
"1024x1792"
|
||||
],
|
||||
"supportsPromptImageTransforms": false,
|
||||
"supportsMaskImageEdits": false
|
||||
},
|
||||
"gpt-image-1": {
|
||||
"providerId": "OpenAI",
|
||||
"model": "gpt-image-1",
|
||||
"supportedSizes": [
|
||||
"1024x1024",
|
||||
"1536x1024",
|
||||
"1024x1536"
|
||||
],
|
||||
"supportsPromptImageTransforms": true,
|
||||
"supportsMaskImageEdits": true
|
||||
},
|
||||
"gpt-image-1-mini": {
|
||||
"providerId": "OpenAI",
|
||||
"model": "gpt-image-1-mini",
|
||||
"supportedSizes": [
|
||||
"1024x1024",
|
||||
"1536x1024",
|
||||
"1024x1536"
|
||||
],
|
||||
"supportsPromptImageTransforms": true,
|
||||
"supportsMaskImageEdits": true
|
||||
},
|
||||
"gpt-image-1.5": {
|
||||
"providerId": "OpenAI",
|
||||
"model": "gpt-image-1.5",
|
||||
"supportedSizes": [
|
||||
"1024x1024",
|
||||
"1536x1024",
|
||||
"1024x1536"
|
||||
],
|
||||
"supportsPromptImageTransforms": true,
|
||||
"supportsMaskImageEdits": true
|
||||
},
|
||||
"gpt-image-2": {
|
||||
"providerId": "OpenAI",
|
||||
"model": "gpt-image-2",
|
||||
"supportedSizes": [
|
||||
"1024x1024",
|
||||
"1536x1024",
|
||||
"1024x1536",
|
||||
"2048x2048"
|
||||
],
|
||||
"supportsPromptImageTransforms": true,
|
||||
"supportsMaskImageEdits": true
|
||||
},
|
||||
"gemini-2.5-flash-image": {
|
||||
"providerId": "Google Gemini",
|
||||
"model": "gemini-2.5-flash-image",
|
||||
"supportedSizes": [
|
||||
"1024x1024"
|
||||
],
|
||||
"supportsPromptImageTransforms": true,
|
||||
"supportsMaskImageEdits": false
|
||||
},
|
||||
"gemini-3.1-flash-image-preview": {
|
||||
"providerId": "Google Gemini",
|
||||
"model": "gemini-3.1-flash-image-preview",
|
||||
"supportedSizes": [
|
||||
"1024x1024"
|
||||
],
|
||||
"supportsPromptImageTransforms": true,
|
||||
"supportsMaskImageEdits": false
|
||||
},
|
||||
"gemini-3-pro-image-preview": {
|
||||
"providerId": "Google Gemini",
|
||||
"model": "gemini-3-pro-image-preview",
|
||||
"supportedSizes": [
|
||||
"1024x1024"
|
||||
],
|
||||
"supportsPromptImageTransforms": true,
|
||||
"supportsMaskImageEdits": false
|
||||
},
|
||||
"grok-imagine-image-quality": {
|
||||
"providerId": "xAI",
|
||||
"model": "grok-imagine-image-quality",
|
||||
"supportedSizes": [
|
||||
"1024x1024"
|
||||
],
|
||||
"supportsPromptImageTransforms": true,
|
||||
"supportsMaskImageEdits": false
|
||||
},
|
||||
"grok-imagine-image-pro": {
|
||||
"providerId": "xAI",
|
||||
"model": "grok-imagine-image-pro",
|
||||
"supportedSizes": [
|
||||
"1024x1024"
|
||||
],
|
||||
"supportsPromptImageTransforms": true,
|
||||
"supportsMaskImageEdits": false
|
||||
}
|
||||
},
|
||||
"aiDefaultTextModel": "gpt-5-mini",
|
||||
"aiDefaultImageGenerationModel": "gpt-image-1",
|
||||
"aiDefaultMaxOutgoingTokens": 0,
|
||||
"aiDefaultMaxResponseTokens": 4096,
|
||||
"modifierKeyConfig": {
|
||||
"Mac": {
|
||||
"LocalFileDragAction": {
|
||||
@@ -787,7 +952,6 @@
|
||||
"longPressDesktop": 500,
|
||||
"longPressMobile": 500,
|
||||
"doubleClickLinkOpenViewMode": true,
|
||||
"isDebugMode": false,
|
||||
"rank": "Bronze",
|
||||
"modifierKeyOverrides": [
|
||||
{
|
||||
@@ -819,5 +983,6 @@
|
||||
"alignment": "center",
|
||||
"margin": "normal"
|
||||
},
|
||||
"disableContextMenu": false
|
||||
"disableContextMenu": false,
|
||||
"isDebugMode": false
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"id": "obsidian-excalidraw-plugin",
|
||||
"name": "Excalidraw",
|
||||
"version": "2.22.3",
|
||||
"version": "2.23.0",
|
||||
"minAppVersion": "1.5.7",
|
||||
"description": "Sketch Your Mind. An Obsidian plugin to edit and view Excalidraw drawings. Enter the world of 4D Visual PKM.",
|
||||
"description": "Sketch Your Mind. Edit and view Excalidraw drawings. Enter the world of 4D Visual PKM.",
|
||||
"author": "Zsolt Viczian",
|
||||
"authorUrl": "https://excalidraw-obsidian.online",
|
||||
"fundingUrl": "https://ko-fi.com/zsolt",
|
||||
|
||||
@@ -8,18 +8,13 @@
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "85ff070f2dda5843",
|
||||
"id": "f669bd78b6310606",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "00 Inbox/КР - Персептрон.md",
|
||||
"mode": "source",
|
||||
"source": false,
|
||||
"backlinks": false
|
||||
},
|
||||
"type": "empty",
|
||||
"state": {},
|
||||
"icon": "lucide-file",
|
||||
"title": "КР - Персептрон"
|
||||
"title": "New tab"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -257,11 +252,31 @@
|
||||
"obsidian-excalidraw-plugin:New drawing": false
|
||||
}
|
||||
},
|
||||
"active": "85ff070f2dda5843",
|
||||
"active": "f669bd78b6310606",
|
||||
"lastOpenFiles": [
|
||||
"99 System/Cache/Pasted image 20260515090441.png",
|
||||
"99 System/Cache/Pasted image 20260515090401.png",
|
||||
"99 System/Cache/Pasted image 20260515090322.png",
|
||||
"99 System/Archive/Ruby - массивы.md",
|
||||
"90 Library/06 Programming/Ruby - массивы.md",
|
||||
"99 System/Cache/Pasted image 20260517203352.png",
|
||||
"99 System/Cache/Pasted image 20260517203317.png",
|
||||
"99 System/Cache/Pasted image 20260517203304.png",
|
||||
"99 System/Cache/Pasted image 20260517203259.png",
|
||||
"99 System/Cache/Pasted image 20260517203252.png",
|
||||
"99 System/Cache/Pasted image 20260517203235.png",
|
||||
"99 System/Cache/Pasted image 20260517203218.png",
|
||||
"99 System/Cache/Pasted image 20260517203153.png",
|
||||
"99 System/Cache/Pasted image 20260517203130.png",
|
||||
"99 System/Cache/Pasted image 20260517200426.png",
|
||||
"99 System/Archive/Ruby - основы языка.md",
|
||||
"90 Library/06 Programming/Ruby - основы языка.md",
|
||||
"00 Inbox/Infrastructure.md",
|
||||
"99 System/Cache/infra.excalidraw.md.md",
|
||||
"99 System/Archive/КР - Хопфилд.md",
|
||||
"99 System/Archive/КР - Персептрон.md",
|
||||
"99 System/Archive/КР - Кохонен.md",
|
||||
"99 System/Cache/Drawing 2026-05-17 13.43.55.excalidraw.md",
|
||||
"99 System/Cache/Drawing 2026-05-17 14.13.00.excalidraw.md",
|
||||
"00 Inbox/КР - Персептрон.md",
|
||||
"00 Inbox/Лайфхак для NPM. Как проксировать не на поддомен а на под путь.md",
|
||||
"КР - Все темы.md.tmp.122479.370c365f038f",
|
||||
"КР - Все темы.md.tmp.122479.c53da0b5a00d",
|
||||
"КР - Все темы.md",
|
||||
@@ -279,32 +294,12 @@
|
||||
"00 Inbox/КР - Хопфилд.md",
|
||||
"90 Library/11 Machine Learning/Персептрон.md",
|
||||
"00 Inbox/КР - Кохонен.md",
|
||||
"00 Inbox/КР - Персептрон.md",
|
||||
"99 System/Cache/Drawing 2026-05-14 17.24.16.excalidraw.md",
|
||||
"99 System/Cache/Drawing 2026-05-14 17.10.42.excalidraw.md",
|
||||
"99 System/Cache/Drawing 2026-05-14 17.02.08.excalidraw.md",
|
||||
"99 System/Cache/Pasted image 20260514152547.png",
|
||||
"99 System/Cache/Pasted image 20260514152232.png",
|
||||
"99 System/Cache/Drawing 2026-05-14 15.21.19.excalidraw.md",
|
||||
"99 System/Cache/Drawing 2026-05-14 15.06.37.excalidraw.md",
|
||||
"00 Inbox/Алгоритм обучения персептрона.md",
|
||||
"00 Inbox/Untitled.canvas",
|
||||
"00 Inbox/Untitled Diagram.svg",
|
||||
"90 Library/11 Machine Learning/Сеть Хэмминга.md",
|
||||
"90 Library/11 Machine Learning/Сеть Хопфилда.md",
|
||||
"90 Library/11 Machine Learning/Обратное распространение ошибки.md",
|
||||
"90 Library/11 Machine Learning/Нейронные сети.md",
|
||||
"01 Ideas/Идея от 2026-05-14.md",
|
||||
"CLAUDE.md",
|
||||
"99 System/Cache/Pasted image 20260514123429.png",
|
||||
"90 Library/09 Sport/L-карнитин.md",
|
||||
"00 Inbox/Нейронная сеть хемминга.md",
|
||||
"99 System/Archive/Функционирование сети Хопфилда.md",
|
||||
"99 System/Archive/Нейронная сеть хемминга.md",
|
||||
"99 System/Cache/Pasted image 20260514120654.png",
|
||||
"99 System/Cache/Pasted image 20260514115340.png",
|
||||
"00 Inbox/Функционирование сети Хопфилда.md",
|
||||
"99 System/Cache/Pasted image 20260512225511.png",
|
||||
"99 System/Cache/Pasted image 20260512225452.png"
|
||||
"00 Inbox/Untitled.canvas"
|
||||
]
|
||||
}
|
||||
@@ -1,158 +0,0 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags: []
|
||||
created: 2026-05-14
|
||||
updated: 2026-05-15
|
||||
title: КР - Хэмминг
|
||||
---
|
||||
|
||||
# КР - Хэмминг
|
||||
|
||||
## Что могут спросить
|
||||
|
||||
1. Что такое сеть Хэмминга и для чего она нужна?
|
||||
2. Что такое расстояние Хэмминга?
|
||||
3. Какая архитектура у сети Хэмминга?
|
||||
4. Как задаются веса первого слоя?
|
||||
5. Зачем нужен второй слой?
|
||||
6. Как работает взаимное торможение нейронов?
|
||||
7. Почему сеть Хэмминга экономнее сети Хопфилда?
|
||||
8. Чем сеть Хэмминга отличается от сети Хопфилда?
|
||||
|
||||
## Краткий ответ
|
||||
|
||||
**Сеть Хэмминга** - нейронная сеть ассоциативной памяти, которая выбирает ближайший эталонный образ. Она не восстанавливает образ полностью, а определяет, какому эталону или классу соответствует вход.
|
||||
|
||||
Идея: найти эталон с минимальным расстоянием Хэмминга до входного вектора.
|
||||
|
||||
## Расстояние Хэмминга
|
||||
|
||||
Расстояние Хэмминга - число позиций, в которых два бинарных вектора отличаются.
|
||||
|
||||
Пример:
|
||||
|
||||
$$
|
||||
X=(1,0,1,1),\quad Y=(1,1,0,1)
|
||||
$$
|
||||
|
||||
Отличаются 2 позиции, значит:
|
||||
|
||||
$$
|
||||
d_H(X,Y)=2
|
||||
$$
|
||||
|
||||
Для бинарных векторов:
|
||||
|
||||
$$
|
||||
d_H(X,Y)=\sum\limits_{i=1}^{n}[x_i\neq y_i]
|
||||
$$
|
||||
|
||||
## Архитектура
|
||||
|
||||
Сеть состоит из двух слоёв:
|
||||
|
||||
1. **Первый слой** - сравнивает входной образ со всеми эталонами.
|
||||
2. **Второй слой** - реализует конкуренцию между эталонами и оставляет одного победителя.
|
||||
|
||||
Если есть $m$ эталонов, то в первом и втором слоях по $m$ нейронов.
|
||||
|
||||
Нейроны первого слоя имеют $n$ входов, где $n$ - размерность образа.
|
||||
|
||||
Во втором слое:
|
||||
|
||||
- связь нейрона с самим собой имеет вес $+1$;
|
||||
- связи с другими нейронами имеют отрицательный вес $-\varepsilon$;
|
||||
- параметр $\varepsilon$ выбирают так:
|
||||
|
||||
$$
|
||||
0<\varepsilon<\frac{1}{m}
|
||||
$$
|
||||
|
||||
![[Pasted image 20260515090441.png]]
|
||||
|
||||
## Инициализация
|
||||
|
||||
Пусть $x_i^k$ - $i$-й элемент $k$-го эталонного образа.
|
||||
|
||||
Веса первого слоя:
|
||||
|
||||
$$
|
||||
w_{ik}=\frac{x_i^k}{2}
|
||||
$$
|
||||
|
||||
Порог:
|
||||
|
||||
$$
|
||||
T_k=\frac{n}{2}
|
||||
$$
|
||||
|
||||
Сдвигает диапазон выхода в $[0, n]$: при полном совпадении с эталоном $y_k^{(1)}=n$, при полном несовпадении — $0$.
|
||||
|
||||
где:
|
||||
|
||||
- $i=0,\dots,n-1$;
|
||||
- $k=0,\dots,m-1$;
|
||||
- $n$ - размерность входного образа;
|
||||
- $m$ - число эталонов.
|
||||
|
||||
## Алгоритм функционирования
|
||||
|
||||
1. На вход подаётся неизвестный вектор:
|
||||
|
||||
$$
|
||||
X=\{x_i:i=0,\dots,n-1\}
|
||||
$$
|
||||
|
||||
2. Первый слой вычисляет начальную близость входа к каждому эталону:
|
||||
|
||||
$$
|
||||
y_j^{(1)}=s_j^{(1)}=\sum\limits_{i=1}^{n-1}w_{ij}x_i+T_j,\ j=\overline{0,m-1}
|
||||
$$
|
||||
|
||||
3. Эти значения передаются во второй слой:
|
||||
|
||||
$$
|
||||
y_j^{(2)}=y_j^{(1)}
|
||||
$$
|
||||
|
||||
4. Во втором слое запускается конкуренция:
|
||||
|
||||
$$
|
||||
s_j^{(2)}(p+1)=y_j^{(2)}(p)-\varepsilon\sum\limits_{\substack{k=0\\k\neq j}}^{m-1}y_k^{(2)}(p)
|
||||
$$
|
||||
|
||||
5. Затем применяется пороговая функция:
|
||||
|
||||
$$
|
||||
y_j^{(2)}(p+1)=f(s_j^{(2)}(p+1))
|
||||
$$
|
||||
|
||||
6. Итерации продолжаются, пока выходы второго слоя не стабилизируются.
|
||||
|
||||
В конце активным должен остаться один нейрон. Его номер соответствует ближайшему эталону.
|
||||
|
||||
## Смысл второго слоя
|
||||
|
||||
Второй слой нужен для выбора победителя. Нейроны взаимно тормозят друг друга: чем сильнее активен один кандидат, тем сильнее он подавляет остальных.
|
||||
|
||||
В итоге остаётся нейрон, соответствующий эталону с наибольшей похожестью и минимальным расстоянием Хэмминга.
|
||||
|
||||
## Почему первый слой условный
|
||||
|
||||
Первый слой используется только один раз - чтобы посчитать начальные значения похожести. После этого сеть работает только со вторым слоем.
|
||||
|
||||
Поэтому первый слой можно заменить матрицей весов и обычным вычислением близости.
|
||||
|
||||
## Отличие от сети Хопфилда
|
||||
|
||||
| Сеть | Что делает | Результат |
|
||||
|---|---|---|
|
||||
| Хопфилда | восстанавливает образ | полный эталонный вектор |
|
||||
| Хэмминга | сравнивает с эталонами | номер ближайшего эталона |
|
||||
|
||||
Сеть Хэмминга обычно требует меньше памяти и вычислений, потому что ей не нужно восстанавливать весь образ через полную рекуррентную динамику.
|
||||
|
||||
## Мини-ответ на контрольной
|
||||
|
||||
Сеть Хэмминга - сеть ассоциативной памяти для выбора ближайшего эталонного образа. Она основана на расстоянии Хэмминга, то есть числе несовпадающих битов. Первый слой вычисляет близость входа к каждому эталону, второй слой через отрицательные обратные связи подавляет слабые варианты. В результате активным остаётся один выходной нейрон, соответствующий ближайшему образцу.
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
status: seed
|
||||
type: guide
|
||||
tags:
|
||||
- admin
|
||||
- nginx
|
||||
- reverse-proxy
|
||||
- homelab
|
||||
created: 2026-05-18
|
||||
updated: 2026-05-18
|
||||
title: Nginx Proxy Manager под path
|
||||
source: "[[Лайфхак для NPM. Как проксировать не на поддомен а на под путь]]"
|
||||
---
|
||||
|
||||
# Nginx Proxy Manager под path
|
||||
|
||||
Кейс: сервис нужно опубликовать не на отдельном поддомене вида `service.domain.ru`, а в подкаталоге основного домена: `domain.ru/<path>`.
|
||||
|
||||
## Решение
|
||||
|
||||
В Nginx Proxy Manager нужно добавить `location` для нужного маршрута и в дополнительных настройках срезать prefix перед проксированием:
|
||||
|
||||
```nginx
|
||||
rewrite ^/<path>/?(.*)$ /$1 break;
|
||||
```
|
||||
|
||||
Смысл правила:
|
||||
|
||||
- пользователь открывает `domain.ru/<path>/...`;
|
||||
- Nginx убирает `/<path>` из URI;
|
||||
- upstream получает путь так, будто сервис открыт в корне `/`.
|
||||
|
||||
## Когда это нужно
|
||||
|
||||
Подход полезен, если:
|
||||
|
||||
- не хочется заводить отдельный поддомен под мелкий сервис;
|
||||
- сервис живет за reverse proxy в homelab;
|
||||
- внешний URL должен быть компактным;
|
||||
- нужно спрятать несколько внутренних сервисов за одним доменом.
|
||||
|
||||
## Ограничения
|
||||
|
||||
Не каждый сервис нормально работает под path-prefix. Возможные проблемы:
|
||||
|
||||
- абсолютные ссылки на `/assets`, `/api`, `/static`;
|
||||
- WebSocket-маршруты;
|
||||
- OAuth/callback URL;
|
||||
- hardcoded base URL внутри приложения;
|
||||
- редиректы на `/`, из-за которых пользователь выпадает из `/<path>`.
|
||||
|
||||
Если приложение поддерживает настройку base path/base URL, лучше указать ее явно. Rewrite в proxy — рабочий хак, но не полноценная замена поддержке subpath внутри приложения.
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Infrastructure — ada-dev]] — где NPM используется как публичный и локальный reverse proxy.
|
||||
- [[CA и NGINX]] — TLS и базовая настройка Nginx.
|
||||
- [[Docker - Дополнительные знания]] — эксплуатация сервисов в контейнерах.
|
||||
@@ -0,0 +1,97 @@
|
||||
---
|
||||
status: seed
|
||||
type: knowledge
|
||||
tags:
|
||||
- programming
|
||||
- ruby
|
||||
created: 2026-05-17
|
||||
updated: 2026-05-17
|
||||
title: Ruby - массивы
|
||||
source: "[[Ruby - массивы]]"
|
||||
---
|
||||
|
||||
# Ruby — массивы
|
||||
|
||||
Массив в Ruby — экземпляр класса `Array`. Поскольку массивы являются объектами со своими методами, работа со списками данных упрощается.
|
||||
|
||||
Связанные темы: [[Ruby - основы языка]]
|
||||
|
||||
## Создание массива
|
||||
|
||||
```ruby
|
||||
a1 = [1, 2, 3] # литерал
|
||||
a2 = %w{word1 word2} # массив строк без кавычек
|
||||
a3 = ['start', nil, 5, [1, 2]] # разнотипные элементы, вложенный массив
|
||||
|
||||
a4 = Array.new # пустой массив
|
||||
a5 = Array.new(3) # [nil, nil, nil]
|
||||
a6 = Array.new(5, "Test") # ["Test", "Test", ...]
|
||||
a7 = Array.new(5) { |i| i * i } # [0, 1, 4, 9, 16]
|
||||
a8 = Array.[](1, 'a', /^A/) # через метод класса
|
||||
```
|
||||
|
||||
Ruby поддерживает многомерные массивы с элементами разной размерности.
|
||||
|
||||
## Индексация
|
||||
|
||||
```ruby
|
||||
a[0] # первый элемент
|
||||
a[-1] # последний элемент
|
||||
a[-2] # предпоследний
|
||||
```
|
||||
|
||||
### Размер
|
||||
|
||||
```ruby
|
||||
a.size # количество элементов
|
||||
a.length # синоним size
|
||||
```
|
||||
|
||||
## Поиск элементов
|
||||
|
||||
```ruby
|
||||
a.include?(obj) # => true / false
|
||||
a.index(obj) # индекс первого вхождения или nil
|
||||
```
|
||||
|
||||
## Добавление элементов
|
||||
|
||||
```ruby
|
||||
a << 4 # в конец
|
||||
a += [5] # объединение
|
||||
a.push(6) # в конец (синоним: append)
|
||||
a.unshift(0) # в начало (сдвигает остальные вправо)
|
||||
a.insert(2, x) # вставить перед элементом с индексом 2
|
||||
```
|
||||
|
||||
## Удаление элементов
|
||||
|
||||
```ruby
|
||||
a.delete(obj) # удалить все вхождения obj
|
||||
a.delete_at(index) # удалить по индексу
|
||||
a.delete_if { |x| block } # удалить все, подходящие под условие
|
||||
a.shift # удалить и вернуть первый элемент
|
||||
a.pop # удалить и вернуть последний элемент
|
||||
```
|
||||
|
||||
## Срезы
|
||||
|
||||
```ruby
|
||||
a[1..3] # диапазон индексов
|
||||
a[1, 3] # начиная с индекса 1, длиной 3
|
||||
a.values_at(0, 2, 4) # элементы по перечисленным индексам или диапазонам
|
||||
a.first(n) # первые n элементов
|
||||
a.last(n) # последние n элементов
|
||||
```
|
||||
|
||||
## Полезные методы
|
||||
|
||||
```ruby
|
||||
a.flatten # развернуть многомерный массив в одномерный
|
||||
a.flatten! # то же, но изменяет сам массив
|
||||
|
||||
a.sample # случайный элемент
|
||||
a.sample(n) # n случайных элементов
|
||||
|
||||
a.select { |x| block } # массив элементов, для которых block == true
|
||||
```
|
||||
@@ -0,0 +1,121 @@
|
||||
---
|
||||
status: seed
|
||||
type: knowledge
|
||||
tags:
|
||||
- programming
|
||||
- ruby
|
||||
created: 2026-05-17
|
||||
updated: 2026-05-17
|
||||
title: Ruby - основы языка
|
||||
source: "[[Ruby - основы языка]]"
|
||||
---
|
||||
|
||||
# Ruby — основы языка
|
||||
|
||||
Ruby — объектно-ориентированный язык, но допускает процедурный стиль написания кода. Всё является объектом, включая числа и булевы значения.
|
||||
|
||||
Связанные темы: [[Ruby On Rails]]
|
||||
|
||||
## Синтаксис
|
||||
|
||||
- Знак препинания в конце строки не нужен
|
||||
- Отступы не несут синтаксического смысла (в отличие от Python)
|
||||
- Несколько команд в одной строке разделяются через `;`
|
||||
|
||||
```ruby
|
||||
puts "Hello World!"
|
||||
puts 42; puts "next line"
|
||||
```
|
||||
|
||||
## Комментарии
|
||||
|
||||
```ruby
|
||||
# однострочный комментарий
|
||||
|
||||
=begin
|
||||
многострочный
|
||||
комментарий
|
||||
=end
|
||||
```
|
||||
|
||||
## Типы данных
|
||||
|
||||
```ruby
|
||||
"Hello".class # => String
|
||||
true.class # => TrueClass
|
||||
5.class # => Integer
|
||||
6.4.class # => Float
|
||||
nil.class # => NilClass
|
||||
```
|
||||
|
||||
### Именование
|
||||
|
||||
- Переменные — с маленькой буквы: `my_var`
|
||||
- Классы — с большой буквы: `MyClass`
|
||||
- Ключевые слова языка использовать нельзя
|
||||
|
||||
### Преобразование типов
|
||||
|
||||
**Явное:**
|
||||
|
||||
| Метод | Что делает |
|
||||
|--------|-----------------------------------------|
|
||||
| `to_i` | к целому числу (дробная часть отсекается) |
|
||||
| `to_f` | к вещественному числу |
|
||||
| `to_s` | к строке |
|
||||
|
||||
**Неявное:** при математических операциях `Integer + Float` → `Float`.
|
||||
|
||||
## Управляющие конструкции
|
||||
|
||||
```ruby
|
||||
# if без ветвления
|
||||
if a > 0
|
||||
action
|
||||
end
|
||||
|
||||
# if-elsif-else
|
||||
if a > 0
|
||||
...
|
||||
elsif a == 0
|
||||
...
|
||||
else
|
||||
...
|
||||
end
|
||||
|
||||
# unless — выполнится, если условие ложно
|
||||
unless a > 0
|
||||
action
|
||||
end
|
||||
|
||||
# case
|
||||
case a
|
||||
when 1 then puts "один"
|
||||
when 2 then puts "два"
|
||||
else puts "другое"
|
||||
end
|
||||
```
|
||||
|
||||
## Циклы
|
||||
|
||||
| Оператор | Назначение |
|
||||
|----------|-----------|
|
||||
| `loop` | бесконечный цикл; выход через `break` |
|
||||
| `while` | цикл с условием выполнения |
|
||||
| `until` | цикл, пока условие ложно |
|
||||
| `for` | итератор по перечислимому объекту |
|
||||
| `next` | пропустить текущий шаг |
|
||||
| `redo` | повторить текущий шаг заново |
|
||||
|
||||
**Диапазоны в `for`:**
|
||||
|
||||
```ruby
|
||||
for i in 1..5 # от 1 до 5 включительно
|
||||
for i in 1...5 # от 1 до 4 (5 не входит)
|
||||
```
|
||||
|
||||
**Деление с остатком:**
|
||||
|
||||
```ruby
|
||||
x, r = x.divmod(n)
|
||||
```
|
||||
@@ -0,0 +1,118 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags:
|
||||
- homelab
|
||||
- infrastructure
|
||||
- devops
|
||||
created: 2026-05-18
|
||||
updated: 2026-05-18
|
||||
title: Infrastructure — ada-dev
|
||||
source: "[[Infrastructure]]"
|
||||
---
|
||||
|
||||
# Infrastructure — ada-dev
|
||||
|
||||
Заметка фиксирует текущую схему homelab-инфраструктуры `ada-dev`: публичный VPS, домашние узлы, reverse proxy, overlay-сеть и пользовательские сервисы.
|
||||
|
||||
![[infra.excalidraw.md.md|950]]
|
||||
|
||||
## Общая схема
|
||||
|
||||
Инфраструктура состоит из трех ключевых зон:
|
||||
|
||||
- `Internet` — внешний доступ пользователей.
|
||||
- `ru-vps` с белым IP — публичная точка входа.
|
||||
- локальные узлы `mini-pc` и `cloud-pc`, связанные с VPS через ZeroTier overlay network.
|
||||
|
||||
VPS принимает внешний трафик и проксирует его дальше. Домашние сервисы не обязаны напрямую светиться в интернет: доступ к ним можно строить через публичный [[CA и NGINX|Nginx]]/NPM и приватную overlay-сеть.
|
||||
|
||||
## Узлы
|
||||
|
||||
### ru-vps
|
||||
|
||||
`ru-vps` — публичный сервер с белым IP. На схеме он выполняет роль внешнего шлюза:
|
||||
|
||||
- `NPM (публичный)` — reverse proxy для публичных доменов и маршрутов;
|
||||
- `Nginx (80, 443)` — входная точка HTTP/HTTPS;
|
||||
- `ufw` — базовый firewall;
|
||||
- `ZeroTier` — связь с домашним сегментом;
|
||||
- `Portainer Agent` — управление контейнерной средой через Portainer.
|
||||
|
||||
Практический смысл VPS — держать наружу только минимальный набор портов и не раскрывать домашнюю сеть напрямую.
|
||||
|
||||
### mini-pc
|
||||
|
||||
`mini-pc` описан как `N150 / 12 GB / 256 GB`. По схеме это небольшой домашний узел для инфраструктурных сервисов:
|
||||
|
||||
- `AdGuard Home`;
|
||||
- `NPM (локальный)`;
|
||||
- `Vaultwarden`;
|
||||
- `ZeroTier`;
|
||||
- `Portainer Agent`.
|
||||
|
||||
Логика узла: локальная инфраструктура и сервисы, которым полезно быть рядом с домашней сетью.
|
||||
|
||||
### cloud-pc
|
||||
|
||||
`cloud-pc` описан как `i5 / 16 GB / 256 GB + 5 TB`. Это более крупный узел для сервисов и хранения:
|
||||
|
||||
- `Portainer Server`;
|
||||
- `Cockpit`;
|
||||
- `Gitea + Registry`;
|
||||
- `Gitea Actions Runner`;
|
||||
- `Nextcloud`;
|
||||
- `SMB/BU/Files (5 TB HDD)`;
|
||||
- `ZeroTier`.
|
||||
|
||||
Логика узла: сервисы разработки, файлы, backup/storage и управление контейнерами.
|
||||
|
||||
## Сетевой слой
|
||||
|
||||
ZeroTier используется как overlay-сеть между VPS и домашними узлами. Это позволяет:
|
||||
|
||||
- проксировать трафик с публичного VPS на локальные сервисы;
|
||||
- не открывать сервисные порты домашней сети наружу;
|
||||
- держать управление и межузловые соединения в приватном сегменте;
|
||||
- упростить маршрутизацию между VPS, `mini-pc` и `cloud-pc`.
|
||||
|
||||
`ufw` на VPS должен ограничивать внешний периметр. Базовая модель: наружу открыты только необходимые публичные порты, а внутренние сервисы доступны через ZeroTier и reverse proxy.
|
||||
|
||||
## Reverse proxy
|
||||
|
||||
На схеме есть два уровня NPM:
|
||||
|
||||
- `NPM (публичный)` на VPS — отвечает за публичный доступ;
|
||||
- `NPM (локальный)` на `mini-pc` — может обслуживать локальные маршруты и внутренние сервисы.
|
||||
|
||||
Такой подход полезен, если нужно разделить внешний и внутренний контуры. Публичный NPM принимает домены из интернета, локальный NPM может маршрутизировать сервисы внутри homelab.
|
||||
|
||||
Смежная заметка: [[Nginx Proxy Manager под path]].
|
||||
|
||||
## Сервисы
|
||||
|
||||
Ключевые пользовательские сервисы:
|
||||
|
||||
- `Vaultwarden` — self-hosted password manager;
|
||||
- `Gitea + Registry` — Git-сервер и container registry;
|
||||
- `Gitea Actions Runner` — CI runner;
|
||||
- `Nextcloud` — файловая синхронизация;
|
||||
- `SMB/BU/Files` — файловое хранилище и backup на 5 TB HDD;
|
||||
- `AdGuard Home` — DNS/ad blocking;
|
||||
- `Cockpit` — web-управление сервером;
|
||||
- `Portainer Server/Agent` — управление контейнерами.
|
||||
|
||||
## Замечания по устойчивости
|
||||
|
||||
- Публичный VPS — критическая точка входа. Если он падает, внешний доступ к сервисам пропадает, даже если домашние узлы живы.
|
||||
- ZeroTier — критическая зависимость для связности между VPS и домашними узлами.
|
||||
- `cloud-pc` несет сразу несколько ролей: Git, registry, runner, Nextcloud и storage. Для важных данных нужен отдельный backup-контур.
|
||||
- `Vaultwarden` стоит держать максимально изолированным: отдельный volume, backup, HTTPS, минимальный доступ к админке.
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[CA и NGINX]] — TLS-сертификаты и Nginx как входной HTTP/HTTPS-слой.
|
||||
- [[VPN]] — близкая идея приватного сетевого контура.
|
||||
- [[Docker - Дополнительные знания]] — контейнерная эксплуатация сервисов.
|
||||
- [[Основы - Docker]] — базовая модель контейнеризации.
|
||||
- [[DevOps - основы]] — инфраструктура, автоматизация и эксплуатация.
|
||||
@@ -0,0 +1,381 @@
|
||||
---
|
||||
status: seed
|
||||
type: guide
|
||||
tags:
|
||||
- finance
|
||||
- investments
|
||||
- bonds
|
||||
- funds
|
||||
- gold
|
||||
created: 2026-05-18
|
||||
updated: 2026-05-18
|
||||
title: База инвестора
|
||||
source:
|
||||
- "[[78e94a8b-66be-410f-8618-0345ff3918e5]]"
|
||||
- "[[8e65f8ca-b8eb-4e10-97e1-fde245b1c9c4]]"
|
||||
- "[[a2713c5f-1e6b-429c-98cc-710b179bc017]]"
|
||||
- "[[a5d627bd-c616-43bb-8490-bdeef3f27d15]]"
|
||||
- "[[b280330d-7651-4a92-856c-869ab2b317db]]"
|
||||
- "[[b4100a43-8a47-4dad-923f-39fb309c849e]]"
|
||||
- "[[b63b403c-1855-498f-8866-2052120fff61]]"
|
||||
- "[[be737cd3-f448-4b6c-b765-8097229f153f]]"
|
||||
- "[[db7c2cfc-acde-4abe-a59e-87ab4a232034]]"
|
||||
- "[[e74de470-d705-4000-80d0-5daecd564267]]"
|
||||
---
|
||||
|
||||
# База инвестора
|
||||
|
||||
Инвестиционный портфель строится от цели, горизонта и риск-профиля. Отдельные инструменты — облигации, фонды, золото, акции — имеют смысл только внутри структуры портфеля.
|
||||
|
||||
Не является индивидуальной инвестиционной рекомендацией.
|
||||
|
||||
## Базовый алгоритм
|
||||
|
||||
1. Определить цель и горизонт: зачем инвестировать и когда нужны деньги.
|
||||
2. Определить риск-профиль: какую просадку портфеля реально выдержать без паники.
|
||||
3. Выбрать стиль: пассивный, активный или трейдинг.
|
||||
4. Выбрать стратегию: индексная, дивидендная, value, growth, облигационная, защитная.
|
||||
5. Собрать портфель из классов активов, а не из случайных идей.
|
||||
6. Проверить налоги, комиссии, ликвидность, валютные и кредитные риски.
|
||||
7. Периодически ребалансировать портфель, но не дергать его из-за каждого рыночного шума.
|
||||
|
||||
## Риск-профиль
|
||||
|
||||
Риск-профиль складывается из трех блоков:
|
||||
|
||||
- готовность к риску: отношение к волатильности, прошлый опыт, эмоциональная устойчивость;
|
||||
- возможность риска: стабильность дохода, финансовая подушка, обязательства и долги;
|
||||
- цель: горизонт инвестирования и требуемая доходность.
|
||||
|
||||
Типовые профили:
|
||||
|
||||
| Профиль | Цель | Комфортная просадка | Типовая структура |
|
||||
|---|---|---:|---|
|
||||
| Консервативный | сохранность капитала | просадка больше 5% уже дискомфортна | облигации 85-90%, акции 10-15% |
|
||||
| Умеренный | баланс риска и доходности | 15-20% без паники | акции 60%, облигации 40% |
|
||||
| Агрессивный | максимальный рост | готовность к просадкам больше 30% | акции 80-100% |
|
||||
|
||||
Из другого источника: консервативный инвестор может ориентироваться на просадку до 15%, умеренный — до 35%, агрессивный — до 60%. Это не противоречие, а разные шкалы грубости. Практический вывод: риск-профиль лучше задавать не красивым названием, а конкретной максимальной просадкой в рублях и процентах.
|
||||
|
||||
## Стили инвестирования
|
||||
|
||||
- Долгосрочный/пассивный инвестор — тратит до пары часов в месяц, держит качественные активы и фонды.
|
||||
- Активный инвестор — тратит несколько часов в неделю, следит за макроэкономикой, секторами и идеями.
|
||||
- Трейдер — работает с рынком почти ежедневно, зависит от графиков, новостей, дисциплины и риск-менеджмента.
|
||||
|
||||
Риск-профиль должен ограничивать стиль. Консерватору логичнее пассивная база и надежные инструменты. Умеренный профиль допускает пассивную базу и часть активных идей. Агрессивный профиль может использовать активные стратегии и трейдинг, если есть время и навык.
|
||||
|
||||
## Психологические ловушки
|
||||
|
||||
- стадное чувство;
|
||||
- FOMO и эмоциональный трейдинг;
|
||||
- отсутствие диверсификации;
|
||||
- инвестирование на заемные средства;
|
||||
- погоня за максимальной доходностью без понимания риска;
|
||||
- вера, что знакомая компания автоматически надежна.
|
||||
|
||||
## Макроэкономика и портфель
|
||||
|
||||
Цены активов зависят от будущих доходов, ставок, роста экономики, инфляции, курса рубля и геополитической премии за риск.
|
||||
|
||||
Ключевые индикаторы:
|
||||
|
||||
- ВВП, бизнес-настроения, безработица, зарплаты и спрос;
|
||||
- инфляция годовая и текущая;
|
||||
- ключевая ставка, доходности ОФЗ и корпоративных облигаций;
|
||||
- курс рубля;
|
||||
- нефть, газ, золото, промышленные металлы, удобрения;
|
||||
- бюджетная политика и налоги.
|
||||
|
||||
Для российского рынка после ухода значительной части нерезидентов важнее стали внутренние драйверы: прибыль компаний, ставки, инфляция, бюджет, розничные инвесторы. Доля экспортеров в капитализации снизилась примерно до 50%, но сырье и курс рубля все еще важны.
|
||||
|
||||
Практические зависимости:
|
||||
|
||||
- снижение ставок обычно поддерживает акции и длинные облигации;
|
||||
- рост ставок давит на длинные облигации и повышает привлекательность денежного рынка;
|
||||
- ослабление рубля поддерживает экспортеров и валютные/квазивалютные инструменты;
|
||||
- высокая инфляция повышает значимость флоатеров, линкеров и защитных активов;
|
||||
- геополитическая неопределенность увеличивает риск-премию и волатильность.
|
||||
|
||||
## Облигации
|
||||
|
||||
Облигация — долговой инструмент: инвестор дает деньги эмитенту, получает купоны и возврат номинала при погашении. Главная идея: доход предсказуемее, чем в акциях, но риск не нулевой.
|
||||
|
||||
Базовые понятия:
|
||||
|
||||
- эмитент — государство, регион, муниципалитет или компания;
|
||||
- номинал — сумма, которую вернут при погашении;
|
||||
- купон — процентное вознаграждение;
|
||||
- дата погашения — момент возврата номинала;
|
||||
- доходность к погашению — ожидаемая доходность при удержании до погашения и реинвестировании купонов;
|
||||
- дюрация — средний срок возврата денег и чувствительность цены к изменению доходности;
|
||||
- оферта — возможность досрочного выкупа.
|
||||
|
||||
Важный принцип: смотреть нужно не только на купон, а на доходность к погашению/оферте. Большой купон не означает хорошую сделку, если бумага куплена сильно выше номинала.
|
||||
|
||||
## Виды облигаций
|
||||
|
||||
По эмитенту:
|
||||
|
||||
- ОФЗ — федеральные облигации, базовый надежный рублевый инструмент;
|
||||
- муниципальные облигации — выше доходность, ниже ликвидность и выше риск, чем у ОФЗ;
|
||||
- корпоративные облигации — выше доходность за счет кредитного риска компании.
|
||||
|
||||
По погашению номинала:
|
||||
|
||||
- обычное погашение в конце срока;
|
||||
- амортизация — номинал возвращается частями, купонная база постепенно уменьшается;
|
||||
- индексируемый номинал — номинал растет вместе с инфляцией.
|
||||
|
||||
По купону:
|
||||
|
||||
- фиксированный купон — предсказуемые выплаты;
|
||||
- плавающий купон/флоатер — купон зависит от RUONIA, ключевой ставки, инфляции или другого индикатора;
|
||||
- флоатеры полезны при риске роста ставки, но при снижении ставки купоны уменьшаются.
|
||||
|
||||
По валюте:
|
||||
|
||||
- рублевые облигации;
|
||||
- замещающие и квазивалютные облигации — выплаты в рублях, но привязка к валюте;
|
||||
- юаневые облигации — валютная диверсификация в российской инфраструктуре.
|
||||
|
||||
Отдельные рискованные типы:
|
||||
|
||||
- субординированные облигации — ниже в очереди кредиторов, возможна отмена выплат;
|
||||
- ипотечные облигации — обеспечены ипотечными платежами, есть риск досрочного погашения;
|
||||
- ВДО — высокодоходные облигации с повышенным риском дефолта;
|
||||
- золотые облигации — номинал и купон привязаны к цене золота.
|
||||
|
||||
## Дюрация и ставка
|
||||
|
||||
Цена облигации обратно зависит от рыночной доходности и ключевой ставки:
|
||||
|
||||
- ставка растет — старые облигации дешевеют;
|
||||
- ставка падает — старые облигации дорожают;
|
||||
- чем выше дюрация, тем сильнее реакция цены.
|
||||
|
||||
Пример логики: ОФЗ с дюрацией 5 лет может дать около 5% переоценки при снижении доходности на 1 п.п. Поэтому длинные облигации — это не просто "надежно", а ставка на снижение ставок. Если ставка неожиданно вырастет, длинная бумага даст временную просадку.
|
||||
|
||||
## Как выбирать облигации
|
||||
|
||||
Чек-лист:
|
||||
|
||||
1. Оценить доходность к погашению или оферте.
|
||||
2. Сравнить доходность с ОФЗ сопоставимого срока через кредитный/G-spread.
|
||||
3. Проверить кредитный рейтинг: на старте разумнее AAA-AA, для более рискованных идей не ниже A.
|
||||
4. Проверить долговую нагрузку эмитента: Net Debt/EBITDA, динамику выручки, прибыли и процентного покрытия.
|
||||
5. Выбрать срок под свой горизонт. Деньги нужны через 2 года — не покупать 10-летнюю бумагу только ради доходности.
|
||||
6. Проверить ликвидность через объем торгов.
|
||||
7. Диверсифицировать по эмитентам и отраслям.
|
||||
8. Не пропускать оферты и пересмотр купона.
|
||||
|
||||
Красные флаги:
|
||||
|
||||
- рейтинг BB и ниже;
|
||||
- отсутствие рейтинга;
|
||||
- доходность сильно выше рынка без понятной причины;
|
||||
- маленький выпуск до 1 млрд рублей;
|
||||
- высокая долговая нагрузка;
|
||||
- долги по налогам;
|
||||
- странные сделки;
|
||||
- оборотный капитал растет быстрее выручки;
|
||||
- бизнес непонятен инвестору.
|
||||
|
||||
## Стратегии в облигациях
|
||||
|
||||
### Держать до погашения
|
||||
|
||||
Покупать облигации со сроком, близким к финансовой цели. Это снижает риск вынужденной продажи по плохой цене. Кредитный риск остается, поэтому важен надежный эмитент.
|
||||
|
||||
### Лестница облигаций
|
||||
|
||||
Покупать выпуски с разными сроками погашения. Деньги от погашений направлять в новые длинные выпуски. Плюсы: часть портфеля регулярно высвобождается, доходность фиксируется на долгий срок, купоны приходят регулярно.
|
||||
|
||||
### Золотовалютный доход
|
||||
|
||||
Использовать замещающие, квазивалютные, юаневые или золотые облигации для защиты от слабости рубля.
|
||||
|
||||
### "Зарплата" на облигациях
|
||||
|
||||
Идея — собрать портфель так, чтобы купоны приходили каждый месяц. Это не покупка одной бумаги с большим купоном, а структурирование денежных потоков.
|
||||
|
||||
Варианты:
|
||||
|
||||
- 1.0: фиксированные купоны — максимальная предсказуемость;
|
||||
- 2.0: фиксированные купоны + флоатеры — регулярность и защита от роста ставки;
|
||||
- 3.0: фиксированные купоны + флоатеры + валютные облигации — добавляется валютная диверсификация.
|
||||
|
||||
Пример принципа сборки:
|
||||
|
||||
- фиксированные — 40%;
|
||||
- флоатеры — 30%;
|
||||
- валютные — 30%.
|
||||
|
||||
Адаптация под задачу:
|
||||
|
||||
- процентный баланс: фиксированные 40%, флоатеры 40%, валютные 20%;
|
||||
- двойная фиксация ставок: фиксированные 50%, валютные 50%;
|
||||
- следование за циклом: флоатеры 50%, валютные 50%.
|
||||
|
||||
Вывод: регулярный доход требует структуры и дисциплины. Погоня за максимальным купоном часто заканчивается концентрацией кредитного риска.
|
||||
|
||||
## Высокодоходные облигации
|
||||
|
||||
ВДО — облигации компаний с рейтингом BBB+ и ниже, небольших бизнесов, компаний с высокой долговой нагрузкой или нестабильной моделью.
|
||||
|
||||
Для начинающего инвестора чаще всего не подходят. Причина простая: высокая доходность — компенсация за высокий риск, а не подарок рынка.
|
||||
|
||||
Что проверять в ВДО:
|
||||
|
||||
- чем занимается компания;
|
||||
- рынок и устойчивость бизнес-модели;
|
||||
- история бенефициаров;
|
||||
- выручка и ее динамика;
|
||||
- долговая нагрузка;
|
||||
- долги по налогам;
|
||||
- странные сделки;
|
||||
- качество оборотного капитала.
|
||||
|
||||
Главная задача начинающего инвестора — не максимальная доходность, а предсказуемый и стабильный портфель.
|
||||
|
||||
## Фонды
|
||||
|
||||
Фонд — коллективный портфель активов. Инвестор покупает пай и получает долю в портфеле, которым управляет управляющая компания.
|
||||
|
||||
Плюсы фондов:
|
||||
|
||||
- диверсификация внутри одного инструмента;
|
||||
- низкий порог входа;
|
||||
- профессиональное управление;
|
||||
- ликвидность биржевых фондов;
|
||||
- налоговая эффективность внутри фонда;
|
||||
- автоматическое реинвестирование купонов и дивидендов, если фонд не делает выплаты;
|
||||
- доступ к инструментам, которые сложно собрать самому.
|
||||
|
||||
Минусы:
|
||||
|
||||
- комиссия управления;
|
||||
- риск ошибки слежения;
|
||||
- зависимость от качества УК;
|
||||
- один фонд редко решает все задачи портфеля.
|
||||
|
||||
## Как выбирать фонд
|
||||
|
||||
Чек-лист:
|
||||
|
||||
- комиссия фонда;
|
||||
- ошибка слежения за индексом;
|
||||
- способ репликации: физическая предпочтительнее сложной двойной структуры;
|
||||
- размер активов под управлением;
|
||||
- состав и веса активов;
|
||||
- история фонда и поведение в кризисы;
|
||||
- ликвидность паев;
|
||||
- соответствие фонда текущей фазе экономического цикла.
|
||||
|
||||
Типы фондов:
|
||||
|
||||
| Тип | Когда полезен | Риск | Горизонт |
|
||||
|---|---|---|---|
|
||||
| Денежный рынок | временное размещение денег, высокая ставка | низкий | до года |
|
||||
| ОФЗ | снижение ставки, надежная облигационная база | низкий/средний из-за дюрации | от года |
|
||||
| Корпоративные облигации | премия за кредитный риск, стабильная экономика | средний | 1-3 года |
|
||||
| Валютные облигации | защита от ослабления рубля | средний | от года |
|
||||
| Золото | защитный актив и валютный риск | средний | от года |
|
||||
| Российские акции | рост капитала | высокий | от 3 лет |
|
||||
| Недвижимость | альтернативный доход | средний | от 3 лет |
|
||||
| Венчур | ставка на быстрый рост частных компаний | высокий | от 5 лет |
|
||||
|
||||
## Фонды и ставка
|
||||
|
||||
Фонд денежного рынка хорош, когда ставка высокая или растет: он дает ликвидность и ежедневный положительный доход, но не фиксирует высокую доходность на годы.
|
||||
|
||||
Фонды ОФЗ и длинных облигаций интереснее при ожидании снижения ставки: цена облигаций растет, но дюрация добавляет волатильность.
|
||||
|
||||
Корпоративные облигационные фонды дают премию за кредитный риск. Их логичнее использовать в стабильные периоды и при горизонте от года.
|
||||
|
||||
Валютные облигационные фонды нужны для снижения риска ослабления рубля, но результат зависит от курса и рублевых ставок.
|
||||
|
||||
## Золото
|
||||
|
||||
Золото — защитный актив, который используют для снижения риска портфеля в кризисы, периоды высокой инфляции, геополитической нестабильности и валютных шоков.
|
||||
|
||||
Драйверы золота:
|
||||
|
||||
- ослабление доллара;
|
||||
- реальные процентные ставки;
|
||||
- высокая инфляция;
|
||||
- геополитическая нестабильность;
|
||||
- спрос центробанков;
|
||||
- ювелирный и промышленный спрос;
|
||||
- инвестиционный спрос.
|
||||
|
||||
После 2022 года мировые центробанки заметно нарастили покупки золота, снижая долю резервов в государственных облигациях США. Доля центробанков в мировом спросе стала выше прежней.
|
||||
|
||||
Практическое правило из материалов: около 10% золота в портфеле может улучшать соотношение доходности и риска. Это не жесткая норма, а ориентир для защитной доли.
|
||||
|
||||
## Как инвестировать в золото
|
||||
|
||||
Инструменты:
|
||||
|
||||
- слитки и монеты;
|
||||
- биржевое золото;
|
||||
- фонды на золото;
|
||||
- акции и облигации золотодобытчиков;
|
||||
- золотые облигации.
|
||||
|
||||
Сравнение:
|
||||
|
||||
| Инструмент | Плюсы | Минусы |
|
||||
|---|---|---|
|
||||
| Слитки и монеты | независимость от брокера, нет НДС при покупке | спред покупки/продажи, хранение, повреждения снижают цену |
|
||||
| Биржевое золото | высокая ликвидность, быстро купить/продать | комиссия брокера/хранения |
|
||||
| Фонд на золото | низкий порог входа, ликвидность | комиссия управления |
|
||||
| Акции/облигации золотодобытчиков | потенциально выше доходность, дивиденды/купоны | риск компании и фондового рынка |
|
||||
|
||||
Налоговая логика из материалов:
|
||||
|
||||
- налог платится с дохода от продажи золотого инструмента;
|
||||
- при владении золотом, биржевым золотом и фондами больше 3 лет может применяться освобождение;
|
||||
- для акций и облигаций применимы стандартные правила налогообложения и льгота долгосрочного владения.
|
||||
|
||||
## ИИС-3
|
||||
|
||||
ИИС-3 — налоговая оболочка для инвестиций.
|
||||
|
||||
Ключевые параметры из материалов:
|
||||
|
||||
- комбинированная льгота: вычет на взнос и вычет на доход;
|
||||
- можно открыть до трех ИИС-3;
|
||||
- нет лимита на пополнение;
|
||||
- минимальный срок владения для счетов 2024-2026 годов — 5 лет, далее срок поэтапно увеличивается;
|
||||
- можно вывести деньги на дорогостоящее лечение с сохранением права на льготы;
|
||||
- можно выводить дивиденды на банковский счет;
|
||||
- с 2026 года активы на ИИС-3 застрахованы до 1,4 млн рублей у брокеров и УК, участвующих в системе возмещения.
|
||||
|
||||
## Практическая структура портфеля
|
||||
|
||||
Для старта разумнее строить не "портфель идей", а портфель ролей:
|
||||
|
||||
- ликвидная часть: денежный рынок, короткие ОФЗ, кэш;
|
||||
- защитная часть: ОФЗ, надежные облигации, золото;
|
||||
- доходная часть: корпоративные облигации инвестиционного уровня;
|
||||
- ростовая часть: акции или фонды акций;
|
||||
- валютная защита: замещающие/квазивалютные/юаневые облигации, золото.
|
||||
|
||||
Минимальный здравый подход:
|
||||
|
||||
- не брать плечи;
|
||||
- не начинать с ВДО;
|
||||
- не концентрироваться в одном эмитенте;
|
||||
- не покупать длинные облигации без понимания дюрации;
|
||||
- не держать весь портфель в одном классе активов;
|
||||
- фиксировать причину покупки до сделки.
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Производные финансовые инструменты]] — отдельный класс финансовых инструментов с другой природой риска.
|
||||
- [[Налог на доходы физических лиц (НДФЛ)]] — налогообложение инвестиционного дохода.
|
||||
- [[Налоговые вычеты]] — налоговые льготы, включая инвестиционные вычеты.
|
||||
- [[Экономическая безопасность - база]] — макроэкономический контекст: инфляция, ВВП, финансовая устойчивость.
|
||||
- [[Бухгалтерский баланс]] — анализ долговой нагрузки и финансового состояния компании.
|
||||
- [[Отчет о финансовых результатах]] — прибыль, выручка и показатели бизнеса.
|
||||
@@ -0,0 +1,11 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags: []
|
||||
created: 2025-12-17
|
||||
updated: 2026-05-17
|
||||
title: Infrastructure
|
||||
---
|
||||
|
||||
# Infrastructure
|
||||
![[infra.excalidraw.md|950]]
|
||||
@@ -0,0 +1,88 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags: []
|
||||
created: 2025-12-17
|
||||
updated: 2026-05-17
|
||||
title: Ruby - массивы
|
||||
---
|
||||
|
||||
# Ruby - массивы
|
||||
|
||||
Массив в Ruby - эксземпляр класса **Array**
|
||||
Поскольку массивы являются объектами со своими методами, то это позволяет облегчить работу со списками данных.
|
||||
|
||||
Массив задается с использованием квадратных скобок, но не только.
|
||||
```ruby
|
||||
a1 = [...]
|
||||
|
||||
a2 = %w{word1 word2}
|
||||
|
||||
a3 = ['start', nil, 5, [...]]
|
||||
|
||||
a4 = Array.new
|
||||
a5 = Array.new(3)
|
||||
a6 = Array.new(5, "Test")
|
||||
a7 = Array.new(5) { |i| i*i }
|
||||
a8 = Array.[](1, 'a', /^A/)
|
||||
a9 = Array[1, 'a', /^A/]
|
||||
```
|
||||
|
||||
Ruby позволяет создавать многомерные массивы, элементы которого могут иметь разную размерность.
|
||||
![[Pasted image 20260517200426.png]]
|
||||
## Индексация массива
|
||||
Доступ к элементам массива в Ruby осуществляется путем указщания его индекса, при этом, есть поддержка отрицательных индексом для индексации с конца.
|
||||
|
||||
### Размеры массива
|
||||
```ruby
|
||||
size == length - синонимы, позволяют узнать количество элементов в массиве
|
||||
```
|
||||
|
||||
### Поиск элементов массива
|
||||
Метод `array.include?(obj)` возвращает `true`, если объект является элементом массива `array`. Иначе - `false`.
|
||||
|
||||
Метод `array.index(obj)` возвращает индекс первого вхождения элемента в массив `array`, который равен искомому. Возврат `nil`, если такой элемент не был найден.
|
||||
|
||||
### Добавление элементов в массив
|
||||
```ruby
|
||||
a = [1,2,3]
|
||||
a << 4
|
||||
a += [5]
|
||||
a.push(6)
|
||||
```
|
||||
|
||||
Метод `array.unshift(obj)` добавляет элемент в начало массива (со сдвигом вправо уже существующих).
|
||||
Метод `array.push(obj)` добавляет элемент в конец массива (синоним - `append`).
|
||||
`array.index(index, obj)` вставляет полученные значения перед элементом с индексом `index`.
|
||||
|
||||
### Разворачивание многомерного массива в одномерный
|
||||
```ruby
|
||||
array.flatten()
|
||||
|
||||
array.flatten!() # преобразует в одномерный, заменяя первоначальный
|
||||
```
|
||||
|
||||
### Срезы массивов
|
||||
1) Использование диапазонов при индексации
|
||||
2) Использование индекса и длины подмассива
|
||||
3) `array.values_at(selector)` - возвращает массив, который состоит из элементов массива `array`, которые соответствуют передаеваемым селекторам.
|
||||
Селекторы могут быть целыми числами (индексами) или диапазонами.
|
||||
4) `array.first(n)` и `array.last(n)`, которые возвращают первые (последние) `n` элементов.
|
||||
|
||||
### Операции с массивом
|
||||
1) `array.sample(n)` выбор случайного элемента (или `n` элементов)
|
||||
2) `array.select{ |item| block }` выполняет выражение `block` для каждого элемента массива и возвращает массив, состоящий из элементов, для которых выражение принимает значение true
|
||||
### Удаление из массива
|
||||
1) `array.delete(obj)` - удаляет все элементы массива, которые равны `obj`. Если ничего не было удалено, то -> `nil`
|
||||
2) `array.delete_at(index)` удаляет элемент с индексом `index`.
|
||||
3) `array.delete_if{ |item| block }` удаляет все элементы, полходящие под условие.
|
||||
4) `array.shift` удаляет первый элемент из массива и возвращает его, если нет такого, то `nil`.
|
||||
5) `array.pop` удаляет *последний* элемент из массива и возвращает его.
|
||||
|
||||
### Полезные методы
|
||||
![[Pasted image 20260517203130.png]]
|
||||
![[Pasted image 20260517203153.png]]![[Pasted image 20260517203218.png]]
|
||||
![[Pasted image 20260517203235.png]]
|
||||
![[Pasted image 20260517203252.png]]
|
||||
![[Pasted image 20260517203317.png]]
|
||||
![[Pasted image 20260517203352.png]]
|
||||
@@ -0,0 +1,75 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags: []
|
||||
created: 2025-12-17
|
||||
updated: 2026-05-17
|
||||
title: Ruby - основы языка
|
||||
---
|
||||
|
||||
# Ruby - основы языка
|
||||
|
||||
Пусть Ruby и объектно-ориентированный язык, можно с ним работать, как с обычным процедурным языком.
|
||||
|
||||
```ruby
|
||||
puts "Hello World!"
|
||||
```
|
||||
|
||||
Команда `puts` выводит что-угодно в консоль.
|
||||
|
||||
- В конце строк ставить знаки препинания не нужно
|
||||
- Пробелы в начале строки ничего не значит, никакой табуляции
|
||||
- Если нужно написать несколько команд в одной строке, то `;` заменит перенос строки по смыслу
|
||||
|
||||
## Комментарии
|
||||
- Два вида комментариев:
|
||||
- Однострочный - символ `#`
|
||||
- Многострочный - конструкция =begin =end
|
||||
|
||||
## Типы данных
|
||||
```ruby
|
||||
puts "Hello".class -> String
|
||||
puts true.class -> TrueClass
|
||||
puts 5.class -> Integer
|
||||
puts 6.4.class -> Float
|
||||
putl nil.class -> NilClass
|
||||
```
|
||||
|
||||
### Именование
|
||||
- Переменные называются с маленькой буквы
|
||||
- Классы, обратно, именуются с большой буквы
|
||||
- Нельзя называть классы и переменные, используя ключевые слова языка
|
||||
|
||||
### Преобразование типов
|
||||
- Явное (с помощью функций)
|
||||
- `to_i` - к целому числу (отсечение дробной части для *float*)
|
||||
- `to_s` - к строке
|
||||
- `to_f` - к вещественному числу
|
||||
- Неявное (преобразование в ходе работы программы) - авто преобразование при мат.операциях (int + float = float)
|
||||
![[Pasted image 20260517175400.png]]
|
||||
![[Pasted image 20260517175655.png]]
|
||||
|
||||
## Управляющие конструкции
|
||||
|
||||
В Ruby есть три основных оператора:
|
||||
- if - без ветвления
|
||||
`if a > 0 <action> end`
|
||||
- if-elsif-else
|
||||
- unless - сработает, если условие ложно
|
||||
- case
|
||||
![[Pasted image 20260517181450.png]]
|
||||
|
||||
### Операторы цикла
|
||||
1) loop - бесконечный цикл (с условиями выхода break)
|
||||
2) while - цикл с условием выполнения
|
||||
3) next - прерывание шага цикла и моментальный переход на следующий шаг
|
||||
4) until - цикл, пока условие ложно
|
||||
5) redo - прерывание текущего шага и повторение его же
|
||||
6) for - итератор перебора перечислимого объекта
|
||||
- самый распространенный вариант - диапазоны:
|
||||
- `n..m` - все целые от `n` до `m` *включительно*
|
||||
- `n...m` - все числа не включая `m`
|
||||
|
||||
> ```ruby
|
||||
> x, r = x.divmod
|
||||
> ```
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags: []
|
||||
created: 2025-12-17
|
||||
updated: 2026-05-18
|
||||
title: Лайфхак для NPM. Как проксировать не на поддомен а на под путь
|
||||
---
|
||||
|
||||
# Лайфхак для NPM. Как проксировать не на поддомен а на под путь
|
||||
Если нужно проксировать NPM не на поддомен, а на под "локацию" `domain.ru/<path>`, то нужно в location добавить нужный маршрут, но в доп.настройках укзать срез
|
||||
```
|
||||
rewrite ^/<path>/?(.*)$ /$1 break;
|
||||
```
|
||||
@@ -0,0 +1,227 @@
|
||||
---
|
||||
|
||||
excalidraw-plugin: parsed
|
||||
tags: [excalidraw]
|
||||
|
||||
---
|
||||
==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'
|
||||
|
||||
|
||||
# Excalidraw Data
|
||||
|
||||
## Text Elements
|
||||
Infrastructure — ada-dev ^VEaxMcZ9
|
||||
|
||||
Internet ^lkuFPfoY
|
||||
|
||||
ru-vps (белый IP) ^NrxGORQ0
|
||||
|
||||
NPM (публичный) ^DBp2U44i
|
||||
|
||||
Portainer Agent ^JtZ97off
|
||||
|
||||
ZeroTier ^lBDCIlzR
|
||||
|
||||
ufw ^Y2T0g0I8
|
||||
|
||||
Nginx (80, 443) ^eLuodDGv
|
||||
|
||||
ZeroTier overlay network ^WGOH8B3E
|
||||
|
||||
|
||||
mini-pc N150 / 12 GB ^LTn3F3JW
|
||||
|
||||
AdGuard Home ^DLVQXQFf
|
||||
|
||||
NPM (локальный) ^hDXqqb6l
|
||||
|
||||
Vaultwarden ^eRsI074Q
|
||||
|
||||
ZeroTier ^B2kvJiQD
|
||||
|
||||
Portainer Agent ^xyaV3sGD
|
||||
|
||||
Cockpit ^ICBimDwY
|
||||
|
||||
Gitea Actions Runner ^MW2XuP5o
|
||||
|
||||
cloud-pc i5 / 16 GB / 5 TB ^CovPF4A1
|
||||
|
||||
Gitea + Registry ^ARo7afZk
|
||||
|
||||
Nextcloud ^pMLchFjl
|
||||
|
||||
ZeroTier ^xOh6rG9M
|
||||
|
||||
SMB/BU/Files (5 TB HDD) ^TgT6LjCy
|
||||
|
||||
Portainer Server ^jFHt0emi
|
||||
|
||||
Cockpit ^XPG4GRxG
|
||||
|
||||
управление ^jmHwNbIG
|
||||
|
||||
%%
|
||||
## Drawing
|
||||
```compressed-json
|
||||
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
|
||||
```
|
||||
%%
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
|
||||
excalidraw-plugin: parsed
|
||||
tags: [excalidraw]
|
||||
|
||||
---
|
||||
==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'
|
||||
|
||||
|
||||
# Excalidraw Data
|
||||
|
||||
## Text Elements
|
||||
%%
|
||||
## Drawing
|
||||
```compressed-json
|
||||
N4KAkARALgngDgUwgLgAQQQDwMYEMA2AlgCYBOuA7hADTgQBuCpAzoQPYB2KqATLZMzYBXUtiRoIACyhQ4zZAHoFAc0JRJQgEYA6bGwC2CgF7N6hbEcK4OCtptbErHALRY8RMpWdx8Q1TdIEfARcZgRmBShcZQUebR4AZm0ABho6IIR9BA4oZm4AbXAwUDBSiBJuCABWemIATSMAaVwABTTSyFhESsDsKI5lYPayzG5nAEYANgB2bSqAFgBORYAO
|
||||
|
||||
aenFnkXJtar+Mpgx8fnJ/cgKEnVuBIXtBOXthITplcXkyZ49oshJBEJlaTccZPbSTZLg97jZI3cZVD5nCDWQbiVDJBHMKCkNgAawQAGE2Pg2KRKgBicYICkU4aQTS4bDY5RYoQcYgEokkiSY6zMOC4QI5GkQABmhHw+AAyrAhhJBB4hRisbiAOqXSTcPjfCCKnEIKUwGXoOUVBHMgEccJ5NDjBFsPnYNSHa3ghFM4RwACSxCtqHyAF0EcLyFkvdw
|
||||
|
||||
OEJxQjCKysJVcKlTcJWRbmD6Sh1oPAUQlvgBfdEIBDEIEJca7ZKLJYIxgsdhcZ3VpisTgAOU4YiBiwS8yWu2mUeYABEMlAi9xhQQwgjNEniABRYJZHI+8ORrVCODEXCj4vW9ZvKYJFY8KHzBFEDjYsMR/DntgMsdoCf4MJFXPgAN0XBwOBS7co9NoF+LJKiIAEoGGBhCAQCgACF6UZZlWXZYkyWFdCMMg7ARAFKAPVHfQpSVfFCVQiRyUpSisJw7
|
||||
|
||||
I8II+CGTdFk2VIzl0G5DheX5WjqNIXD8MyAAxMVJWlFFtUJE0iggbC+NogTCMxXVVWIK40E1MpZP4giiN1fVDQk+V9hkmicgUgAlYRzUtIFjK0+SCIAeXtR0gRdaT7LMgjBM4KBBNwfQxSdVAvk00y6KE3yJUIIwUR4NEPPChSABUsCgABBMD63QYJhQguykp0qJSAyvi2AoX5cF3VBV1vRK5K8zI51ZdKyoqkJqsRNreO0zJWqxChkqzHpZx6hy
|
||||
|
||||
hODBBLMNWrjOYbAsXFAANbgFnmeJQoEBbCXwOprgWYyjDYAxuHTSB6AIIQUXGN8CoaiL9Es5iUx9CAkOLYymRIaLYo1BKyi+4gpQQOBVs+0gSAAWTYYgEGa3BNGCarnynaTAZQtizogWDCU60hlDpAAKE9+14cZSZJ6hUTmABKIVzIQZQI35HoCdwYmEjRXhOapxIueSWmIFu+rcN03FnKgOsVxvYygwCqbslhiGBlOrVsgRpHuExK6EWwIhQbQb
|
||||
|
||||
WEARDh5a10gda1YQoAvFEjYRfR+VxUgWzNw2LeNrVHdIZ34cRx9UCN4WyjsAArBA+mYCVTbgaHYb9zWn0nT2ynpSXGGS478FVjMunEsJgj6OshWwjEDCG7o0FmrUiQfZHk8DLFCIyIvOHHBua9CDKi4zrPr3FYPIEcZgNZInI0sh7IhHbl8U9paNHAGFpAmFJhsg7CR1f9j7pMIZhYIX6NlATgP7d35hIZIOA2GjKBo+/OAj5P6qz7KGdMAlFvJc
|
||||
|
||||
4OPxL0HJcDRiFmAfMdBRTBDTO+XMQA==
|
||||
```
|
||||
%%
|
||||
|
After Width: | Height: | Size: 630 KiB |
|
After Width: | Height: | Size: 558 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 158 KiB |
|
After Width: | Height: | Size: 575 KiB |
|
After Width: | Height: | Size: 499 KiB |
|
After Width: | Height: | Size: 391 KiB |
|
After Width: | Height: | Size: 449 KiB |
|
After Width: | Height: | Size: 589 KiB |
|
After Width: | Height: | Size: 360 KiB |
|
After Width: | Height: | Size: 444 KiB |
@@ -0,0 +1,213 @@
|
||||
---
|
||||
|
||||
excalidraw-plugin: parsed
|
||||
tags: [excalidraw]
|
||||
|
||||
---
|
||||
==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'
|
||||
|
||||
# Excalidraw Data
|
||||
|
||||
## Text Elements
|
||||
|
||||
mini-pc N150 / 12 GB / 256 GB ^mini_lbl
|
||||
|
||||
cloud-pc i5 / 16 GB / 256 GB + 5 TB ^gihc0eNQ
|
||||
|
||||
Internet ^JF8gyxg7
|
||||
|
||||
NPM (публичный) ^De5FvlCO
|
||||
|
||||
Portainer Agent ^aa6HjhlV
|
||||
|
||||
ZeroTier ^m9o2XfZR
|
||||
|
||||
ufw ^irwhPywz
|
||||
|
||||
Nginx (80, 443) ^3YCkaaEW
|
||||
|
||||
ZeroTier overlay network ^5VEs4mhQ
|
||||
|
||||
AdGuard Home ^14mDr3CI
|
||||
|
||||
NPM (локальный) ^Oynv3oBy
|
||||
|
||||
Vaultwarden ^0uUIYjrp
|
||||
|
||||
ZeroTier ^8m3hcPU4
|
||||
|
||||
Portainer Agent ^O5TryriF
|
||||
|
||||
Cockpit ^YY7Tjxu0
|
||||
|
||||
Gitea Actions Runner ^bC30cure
|
||||
|
||||
Gitea + Registry ^K59um5ww
|
||||
|
||||
Nextcloud ^suNAEYqI
|
||||
|
||||
ZeroTier ^WzKFf7RD
|
||||
|
||||
SMB/BU/Files (5 TB HDD) ^HZKjRf2E
|
||||
|
||||
Portainer Server ^7rAi7eTS
|
||||
|
||||
Cockpit ^aVjmA1Ms
|
||||
|
||||
|
||||
^Jq0JkEPn
|
||||
|
||||
Infrastructure — ada-dev ^title
|
||||
|
||||
ru-vps (белый IP) ^vps_lbl
|
||||
|
||||
%%
|
||||
## Drawing
|
||||
```compressed-json
|
||||
N4KAkARALgngDgUwgLgAQQQDwMYEMA2AlgCYBOuA7hADTgQBuCpAzoQPYB2KqATLZMzYBXUtiRoIACyhQ4zZAHoFAc0JRJQgEYA6bGwC2CgF7N6hbEcK4OCtptbErHALRY8RMpWdx8Q1TdIEfARcZgRmBShcZQUebR4AZm0ABho6IIR9BA4oZm4AbXAwUDBSiBJuaDVgtNLIWERKqCwoWrLMbgBWTuT+MphuAEZeosgKEnVuBM6AFm0ATh4AdgAO
|
||||
|
||||
ToA2GZnOhMGeTr7ISQRCZWkpg9GIa2UatBG6iGYoUjYAawQAYTZ8NlJKgDEgwQwOBbUgmlw2DeyleQg4xG+v3+Ehe1mYcFwgRy4IgADNCPh8ABlWB3dCCDy456vD4AdQmkm4fCuNPeCFJMHJTx+FUOEDhZw44TyaEG/LYmOwagGYuSDzKsOEcAAksRRah8gBdfl48hZNXcDhCIn8wgIrCVXCpflwhHC5ga42m1kIBDEIYzVadFbzJarfmMFjsLho
|
||||
|
||||
FmPIOsTgAOU4YiGw3WS2Sg06PHDZUIzAAIhlmh60HiCGF+ZphAiAKLBLI5DXa/lCODEXD5ob++YpmaDFYrbYrflEDhvI0m/ADtjQ93cIv4EtXZqYVoSFUcPWhF5CbBQEQIVCAFAJULhm85iAh6Li8ZwoMTCEZxLx+1dLzkAGK4fSE2WoS6PBdQACCRDKKG6DBHirSBkwUDmAQgGnCB0CSrieg5Lg5pMIaaDOmOVx/Kc5oEAAKi0lQrmuNKbtugT7
|
||||
|
||||
oex6nue/K4EIUBsAASuEt73huCADuhAASJxnEuqCDPEP5lJIoTEYuAAy5rDoWxY8Vc5AUNJwkQBARQAL59CUmYFug6EQfO8D3gKCBbjcNT8h0aDrD0/JfusCpjIyQwufyxynOcaCOVc1n3q5TwvOySJ/ICMy4PMboeqWUIwnaiI/BFEgArgnTECseJ4hehIkmS5mUnyrKhfS7lhvybIfJy3LFXFKnCEKIpDBKUoykM8r8kqjZqnWOpPvqCCYag2F
|
||||
|
||||
mhadnoLggy4klDoavpZQNPeCSjLprpTmKCQ9oMCT7D6kHBpwzKHVGHCxhw8ZoN68wzMkKyDDMZo5nmm2oDOc6PGW8LEFWmTZLkBSjMUwP1GZTQkYcBmVAAUi+KzKDAmDKEsWl1GA2mjANjyNs2rZiu2nbdr2B1XIOCmjaO46ToZH3KY82BCM8BjZi2uDcItkDBMoUIwOpdLkHA3DcWtXlSS0clDtOSk6XpVwVBI9ByAA+kYnBIPyy2VIEVkcLcGt
|
||||
|
||||
XJNOzBV+gyeVc4zEJMaB3cF3lCcyKzBYF3DBdVXwpSi6AAggeJbFsuKQtCPUIuFXsQACOXYPM0d5UStVFbyDWPO7DJW0ylWlbSHKFZU9WzU1kjza1uHtbA3B3d1cKquqBTY2Ua4GoZY3yxNVo8AXP3F2gnPQODaCrXU60p7F3BLOsgyLIk6anSGJ1XJGIYXVdqDJjwHZr+sz25sE+PvUppblr91YA/1DZNi2b2DITj3E32vFS1hVNkxOHy0wfVyS
|
||||
|
||||
cw6mSxTdOy0URa5RDIMBVvgTQ+BcRa1RJDQ2XRthOQ8isbQexxJuXTkMFYcQEhLHmCsJM3QcHDFul5QSvleBoOuHrckbsyoe2RICbAyQEiLE0IHBKIdkoMNROQDgGIsQAzjgVLkicqRVToWna2vBxHZwTnnJOndmqOhLo8SUUIOpymCj1GuZ9BrvmGs3Z+jxzSnkmtcBInd7QtSfi6Eeb1bpLC2PMCeT0F5MDOl0WeMY4wrWSDwX0Mx1gT23q9d+
|
||||
|
||||
s56ZlG+pWE+tY67nzxlfG+Mw1hdgSK4x45MRy2LKL8Gm0twmaxIhIUgQhnBK2YKgVAAAKQAjCCAFYQQA3CCAGkQQAnCCoBVAABQAJQXivDeO8zJgrPigG+D8+AvyUL/HBYClQwImQjFBGC+BpkIRYkLfkKEojoVICNFuqjSD4Q4ERIp6ASllLkJU2pjTWntO6biJiLF2KsAGWgbiD8EACR8sJUS+wxbfwlvJfJn0yiqXUpUNGGM5bGJARwOA+hlb
|
||||
|
||||
lKgf3U5lkojUINo8I25tHhfh4MkShlspFmztmQ4S2Kygu3uDIsKntAS+39jMdhwckph0BFHGO8whFyIkPnal5UMGZxTnQ7lFIFG2kLt3ESbV1Hl00VXZUfU4l6KblknCxi24SFwIy8VXdrGoF7tA1Ag9SjDzKGEK+aYUnzB9FvNxR0QIJC8edHxUxkirGtfdR18sXq7zenTQ+P0/o1kBmgQo6NOZg0aDAxc4JoYSFzJ0F89B8CfAAPIQpNVjeJl9
|
||||
|
||||
DLX1wZ2FJu1bUZMBTYtVOTX5+o/gzJmLF9CsyiBzYGEBua835oLYWJSECi0/uLWSpb97hIAaUIBCsprKABgiuQSKo0ot1vrXEk1HEm0GQSiqIlyVHFJdwTdVCF1UqzjS7h3s8SdBiskNh8VmVH1ZWlHKWVcArC5bnHlYrD38qkRmAQwqX2irEY1PwRc9XilLjK02XUrjaMVaG+ukBG4GNVeNUxVpOiWOIJKg1yLjWQo2rmnB20VirBnnajxA8nXL
|
||||
|
||||
3vNajYgT5jXxCb6sJwKIRHyDafIG4bQZ91ndAWB6NIBjuuLgdYfEABWkh8AADUM0YyzVcXGOa2z5seoWhIxackDr2RWvJikClXEZszetbMm3oxbQgHm2A+YtAFrgIWryu09seF/H+A7/4mqhXG9ARgoBTryJrZFFl502TgX5XduKlhroFRuklXyujO3Ra7Pl9DUre3TNgboGLIkcJZbStK2AEhFgQE+3U+URU8n/UK7OkiM7SPfTnER8jysgolcB
|
||||
|
||||
6V0pZUiQg48KDtcYO6iGrsoxmYNVTXWGhjDzbDXYdNQIUeA8Zgdm2umNTkBF7HUFWUVbzrLr3n8esRI8o0n0YQHvf1VwonH3+rE0NwMI1cfMn+WN/GQH6HmGwHgAANPEAAtVi0nMZ1FgxAeTe880dlvj2e+ZMNODa5pWxjETID6brQ29mPdm2tos+2mznahDdqHn85zj9B1hGHSDaFlQhB4goD5md5kdZooXbZMelcrhhYi0S3d9tyH+UeJS1AtD
|
||||
|
||||
s63pPWehAF6mWJRvTlk9OUEiaFysV+Ov6yslQq+yKr89Vc1SV7ygDSiNQgdUWXcDWjq7Qc1ID+DA3sn8eG9cVGOqrHKLRyZybDmzWzZEl2ebPZ1j4KdRrjb7il4urFL2ce6xVMJGClmHex2q26a+ixmJIbNQ3c44anjMaoZPcqIQUgFBJAdJgBQIwf3ZM4wviDpJd9SYlqJ5p2H2nicI4gEjlmRnncZLM22qzHa7O47d0cPtUBf5Arxzhkd8sYX+
|
||||
|
||||
EwDTvz3H6cuyZyFldc32fVbSdFh2fk4v7v54loXEcViaE6NgPEo2r0S5+ofgExAL05Xl0+Er2u32a4QOr9b37ZEv8a5AQUQGncpVQM2tjd5Veoetzc+t9Erdy0bdkNNUisANHcFoJssNB8ngPcdhrVVNux/dP8GAg9vFttPRlh1g8FNgv1ygfU494cA1olLsU8w06hbsM8Hts9gFKgEgABNT4N4XAXACsOkMvAHbNKvJTLsCHWvdTevGHFtOHMfD
|
||||
|
||||
ZWtdvRtTvHJbvTHXvbHfvcfCfCSYfUfHTEnNzQBKfSoLzZWbAX4IQZOJafzRfeLZfVAQJJIMgu6ZMB6O6LYShL8ebJIZMJMcefFfBCeVMfkQlarHYPwngVJNYLA/BSgrnMlXfGhA/KXCOVLdLcXThG/PLArRAx4AkRXerV9X/EKSrddSg92UrHXR4f/SVA3MoNREAndE3BVCA+sZVBDMtJDS0TVTlB3dDPVTDWdKbKqD3M2JxXaYYSgzbZkHgBol
|
||||
|
||||
bQgrbFeW+ZJRIDseYI7E7atSJJPBgusNPPjO7CGLPTjATToCTCsZgGYfQSQAART+yhluwE1wB81VigA7nYIzyxFeCoGBmmzJxMxePeOVg/A4EIEe2OM1VIF+MeMOKBJAVePMMsOEBsN/H8x+LYD+PRn+1KEB2B0SSUx6G6HHi9TrwpgbzkKb1OxrQMxR2My73M0s0XGs1s1QBFnx17X+X7SJ1c10NHWe3NEIFVnVlp21lRSX2CxEnTBQWTHCx4E2
|
||||
|
||||
FmDwXSX6C6FuhSBwWXR7GSACMfEeHCIrhZ0c23RtnlHiDWCWF2CWGiISCj0oT5wFyPWSwjiihiinEv2yLSNv00AQBmBymfWKL/RVzNQkQqMS2qNfya0A3qNaw0ScNaPAN0QKP60MWt3KFt1wH/DGyGNQJGPQPNUMiwNuiVOClmOuhmKWIozHjPVoyWDo29Vj22IT12MDWTwOI4yOOBPMLBIhK+IxJhKxLhI7IRKtGVjgD+C2WFH+D7O40xOxKHnL
|
||||
|
||||
zKAJNzRvmJM6HHhVK5mhzTNyTfgUK5MJz/hlmMMn3JwkB7OVnAUgXn3u143aE9HWHiAnnHidnlDNn8SWEQT8h7G0Ah1ozwR6BcmWDCPXV2HmFlL9HzTTEtK2FIRix30YniwPTfxv32AjwQEvTOyy0l2PWgF4X4WxHmQbmf0DOVzRLKLVzDNqwjNKLqJa2ALjOGATJ0SVWTOgNTNgPTPgKmgACFszADKSCzMEvRJ4Ng9s8DeA9hyMQ8RJug0w9s7p
|
||||
|
||||
KEY9Ql9zE9Wz9jWKlzK9CSwcehtoSTqY9zDCW8HsJAAAdDgHs7wbASpaMVMZIVABQaU1AAAcR4scooXWFcr4t1D6U4kGV8tfHfE/E8XnBaBWVmV9iIsWNIGgncAitRCQg2SvDQinJgIlAOX8GORjXMssqFOstsvso8r2G8o8rQu8vuWYjYg4heXZK7XeU+W3xEjEltEoDBVyqsrgBstQDsp6GKp4FKqcvKrctxCcwBV5J2K3JkKJFJwFKtGIGUCE
|
||||
|
||||
CxGIE+NMgXwlIcKlMejiGvjdXku2G903IgGcm2BQSdgUu7EejPRAsi0ni3252SKClSNwoBFdNHg9Oyxeoyiyn9IV2ETqkjK/0osi0qJ/VIpqKjL1xUUaKN06mYrNw6LYpVW6Nbm4uuE+H4pQJdzQM5LsUMl2D2k6GvhIRIzngHmWwIPtSrLFH8SwX2FTE/IbJUuMroIu2DXbOYPT38zYLOJAUenrVIASE+BVGELxNEJ0s7FmDxS9AfgpNkN3PjyY
|
||||
|
||||
1byUMMxUP1XR3UOZKgFZJxx0OmykH0Jc2PP5NMIkFhXhVyQIDFOKQ2sZylOmB2rlP2qVN7C/NQEVLOp1OiMuu2E2ItnXTurgqap5wpSQv31qxv3pX9iyM+udMjjxGjljj+pouDKBo/Wq1Bu/3BsBoFGa0AIWIgCaMYs60VFN3aItxTMQ1Rt6KmmzExoZNsLzNxvdzelmG9wVJ1IktU2kuILQAel9Cj3C0ZuMWoKbKVvO1Yyu1T2HPRO4x5s7JAVT
|
||||
|
||||
RgA4HoASDYB4oGH+MXMgGXMUzBwOuluHukLlp3PkJZr0xVvpNUK5k1qxzZI5JPL0O5JHyNqHUfrmsViYnwCgAoGWuyFWtnrp1tqC0xRINlL2oVIOuVLdrrM6E9ouo8Ouv9tuo7CDoesQr30dI+Ejr9mjo+pwrjvZSTqfyKIBtKNTiorfxTvIrovztjPayYrAJYt606PSurrMQEPruvqhKNXzPGPOviIVK7ops22ppEmvhmH23dS2MVpbwnrbPY05
|
||||
|
||||
qONYLvLPPQGSCEAAFUVQuCRNSAhYt6RC5NtKVzxCpbkgZaodprOKFbaCL66SO91aTMMctadbtD0CxqeSjy36Ta1GIBuyhTra50GcQH7yB40xwH5TFTDqYHUx4HvbEG/b9SA7UHP4TTvxHqEsI6vSMjOgMsIRsLr8vTcjcBCsAyyHU6KL06A8066sKmaG879d6HQDIMy6kyG5K6Ub1U0bcAXwuGnHAGpg+H7FLTrS3VcDSa1sjURHKyZLdgLTkx5g
|
||||
|
||||
yTMxR7ZHWbJ7GD4TBno1oqPMIAVh9AEhJBsAOlNHGVDGxbjGElTH97zHLHySq6Mkz7m9FCHG1be4XG77daPHDaJqfHTUP7x1J0eygmAsQn8mIBJpHokgCaz1Eh5tLTrUj7IAvxVg5g9o0lrSXIeh7pKCDTTT7rhIQ7IAHTnrCGRcxd8GimXr70VhH1ynRFKmKGQbwyf9KnaGmmGKGGS7IBut2m4NOnKY0yTEa7rg+J+nhiVphnDI8V5jAkdS/dJm
|
||||
|
||||
QJxKlWxGzYyCUwkxkgkmVnGy1mzs9j2bFHTzsa57VG9nU1OhCJSAYADk+mLmwB8STG97JbJGLHkWW1tybHnmaSyg29VbUcBm1CmSvn3Hm6h9n6DDm9ZrTb0A9BoQ4A1BQTAmbzxTAsIWoWthtBtgHJJ5oj/DtW3a1gkhuwdS9oOw3UkwC78X4zCXYsMGUjsmXrj9T9z8Y6CHw4fYMLfZ2Zk62XyLmXP1WXs7aLGnobIAi7uX4by6oDkahXOKRWOG
|
||||
|
||||
RaBjxtTWpXw2MDW6gl/QXIsEJL5se6VjVNZgHoHIZG7G1L6CjXrsZ7G7bzTiF7KguCuClhCIRNMAhBUgHWnXrmXWrq3X7nj7HmtMjKXn7HkdHGPnb7ND777MN3PGX6/mjDfG9mSkOApzk3wTQX7C7bQGxQs2c2Zg9p8UWEnZvDuBFhHyXJ/yNgmK7SbqpFbY0GiXMnkKQzBcvSW2z8L8sLr1qW46785dfqSH/rGWB3QyWXqL+3FEADOXDcwM4amG
|
||||
|
||||
EaK72LgO4DRXcAYYJXcz13H6Zs3o8VZgvbphSyliuhKFRG5ncFLToi1hz3VKWyr22Mb2lG12Tjdmc8JBNBPgo9GZAhRbHXxabnXXD7Za1OqTQPfXEdL7IONaQ2YPvn4PfnvHkOAXY3W8rDiARThRsPgGM3uBCNwL/E7p/F5iiZKCJlaNtBCbhgdoOwbUGPqstg62B4/QFh5gOvc30xx4AwAow6sGktO3cmIWg4r9Q4vTiB8t5gsoGWGsmWJOh2pO
|
||||
|
||||
R32Wx2xRmmK5p3+X8RBXKTF2rQABpbTtzgeaVtsCeNYCxis+1T0D1yz3u3gW6JitMZZ/jVZi9xztm5z6e1zvxpE7zFE6wyE74gc+cvTwE37scic1KpgIH/s2E79oLv9tcjcsLrpkD/VxzZLsfGNvx1QY55IBAaMB41NnZxdAr9U4rvxLBYYW+Crlo0SbYFMe6B6erxV5JyLbaOYeYv0dc+6eUVYAuxI5ke0/rslzt1MJ2BIci0bz03CtEPhTEQi2
|
||||
|
||||
bko+b8oyTqh6TnVKGtbrllprrNpzSgV1TtH9TjhmSfpwSzAxYWjCPPxCSwYSeQ9+8B398lMUS+z8+y9z7qepgk1iH5EzL2H2ckHgLn9hTAmIkix23im2xhz+oE5DL1Egq1AQgToYqrytysqjYUqgAam/FQEIh8qfD8tqrxUCpGWCvGVCt/HCqAgQjmVxCDDitgjr6aCSr0xSu2TYf2UOWyo0gB+IGT9T/T8Gs8tz/z8L8qseRqq4nqqsY+XSZ+Uo
|
||||
|
||||
VBQT4H6H7T6crNlH+Gvcrz7T8n4J3GpS5b0yTLRx72dUGaFwAAbvbTfBbJ77o6/NJK+p/K7ds2FEhq+Z7uoa+QaJVSeNLwUMmDbJ6k2zjrDd22/HTtpoB4B4geAmgTCgURIr1NqQC3DOsOxQFa9ZO47QurDTlStM2iW3S3BxR6IcMAAskd22a8MN2QlMUMpkSCuEZm13OUEwLOhiMiazCQmjq1e56t3uzGdSte2+5+9b+pPdggJn25nohA+gToBQ
|
||||
|
||||
FB4yYjGFeX9hH1ubbRnEL3T1tY0MoY8/WMXd5nFx7wsk+8dVAfEl0jav1Uu7mTzugGFCLgB+N/SNEA3TYP9UAYOc0gRkIwph5ivyVnGPAd4aklm/obVl6GK6NcpghGbQHWUka2lSORHcLMx3rZ9dMGYvSKNFHeq8cxuXCOOt9WyiP4kBpDMTqgLV6LcNey3BptGXorydmi+A/XoQMN7bdje87UgVaGjCUCRB1AvTpuxlaPROwtGQ7EqzbDcDKabA
|
||||
|
||||
mSisFUyOJCMuCD3mBy94bMOawghwe50hICZmAQgaMP+ArBcEAAjiLQR5XNw+IkJJDsF9AR5UejQl+NSUmrK03mgbKDvF0MFaFjBetQ/l42x7v10uAfVEvYJ4ZgtJSeHcRswm0AbA/QkjebD6AMo+D7Ip1ZhLdGYT7AFSaYI6jW0DppMgBxLPdI2xQo5MeAaWPJpAPG4vUSmZTPtqUMKHA1ih7HdkNQxk4xldeinAgYmTqHEDwue3TVB0laELCTuN
|
||||
|
||||
Aj3EmE2DhYUk9vbwQsipoyU9sP/OUlMKi4QB5GGlFzvMO+Hz0RyEgOkEYH24vg8QSwViHXV2GKD9hoOSWqoJOFWMT63rC4c2Wi7XCG6N9O4drSMEP1dCEbQ8q8JQ5WCpRCURsMwC+EZ4cOoTSAJNF9BFdewVPMrrTxgYPRqu9Nb/qzwpo1smOKI4Oqx3DqYiXqEAqlviLjqEj8ixFfIXN3E5FD0BS3TAbrmwE69KhxdTboyJ26yEWRU0YnkgUGKA
|
||||
|
||||
FJWQzLkVfACJ88z0R1Msh1lYHB57utNc7i5HUHKUGMcfKUYay+6+9webQzPB5w4ISA+IX2fbiJlYhwCKwofRHsoP1HHD1Bp/M4U81NFK1/WV9INlaIME2iHhdo/WghyjZ8k0ufjccrFWh6kBlYYQUgEGFy5ODHC/o5/kGJp5dg6efdImuGI4F1cgi0Y9dLGMAHxiQBWTJMeS3PSIDMsfHNMZ21pb0tiRhYt/B/hqwlCMJkNYsUAVLFTslOM7VhiQ
|
||||
|
||||
PYZWhfsK7HMsd3aH2jOhO6IJMsCI4TMhRpGLsU7ymBBJfcFjWjBKMuHSjBBE4lgtzXNYuilgpAf8IQCWAIBCIxINcXsLEIqCtxpwykrH0946CLR3DT5glzDYdCrx5g8fLeL2bxs3gibf7oHxJ7BNfhYTVAF+Mp6ldfxUlCES4JlJkEHIXEvFPM0GExieWUgdJmiNJZgDO2XHNtqmMyGds3QPpIsMryDK5iyR+YnCQUKwE0jCJevUurUJYZI0uiu4
|
||||
|
||||
obD0zklUSGxOnJsR0NoEdY9g82a+FHnt5uoOJdAvYLdGWDWo+JZo0cQIPHFbMpxCo37hJhEz6B/wgwMgXkG1FaUlBBw8Qn6GYS+Sdxqkn1pcMPGxdnG0He4bBxMF6Ssexlc/i6NeLGQ58a1cyHOWcGWlV8/wwEaELY5bogBB7RIRiIpHYMvSUdAOGFMPzy8CKgidCUlNqxYTM6lIzXkWJSkw0FO1Q9KQyMykdMGhu3DMpowt6yFSpZ6LBD0EkYSU
|
||||
|
||||
ruww+7gIw67bRmp49McT7zD6KSiYkhPUkBxN4RdtBkAccuaE2bowJxYAVyKUGSDAxYMYAambTLADzYGZ29FtOuG+D6APwMgd0B0jYAUzwuzwLEFAB4omJzQygcLtkGIDiyEQks4WVEFir/gQexwI8NLIRAqzfiasxEiH35BBAywFAUmQbTMFIdDJlg2cVNDeJeZPRcPQco4SOmnTnJzXJ2ezykTJAUgfoM2FHiI7bAJelpdQULxthLB4gOpHdqBJ
|
||||
|
||||
CIi8khQUwECmPSGy9nSL0xXm9JE5UjEsX0jAeZGbDMBjgZQ7XgRIBlVCOs5Y0GUbznYQyemQhAqU6BhnjFHEebfFCTVYlk1eAwFVVjJTUG1dCamMuRtjMYK4yJaymSjokBUny1ZpLU8mT72BjMzs89M9GIzOZmey6ytvX2UTR9ABzs8XoUOQEWxbBEHenQdmQoJyRcyDAvM/MALKFnEyRZsVOWY4D1gazZZEs++dwwyDBoRo/jcyaiVjQQB9AbAU
|
||||
|
||||
8JUD+CaA1A38gkJgH5mCycQsoumYCLfKzzD5JUpWQBFVkhAyJjwGWVrKxI6yrQesq4AbKxLGz9JZs/kL/MYBkCSAF82sAyHUAbMnRRkraSCRBaWTrgOCv4dsBDmuE3U90boV4TdrQUzqe2fFG6lJLjwzpHWOBg73myeTFgx7UYfEPsgey1gqYaYJLwsYphCZJLUXjHLShxyvohTZCU0HwrJycQ70nMaSOqb4EqiSubObnOpEVDC5ZY4iUQMrHCsM
|
||||
|
||||
y72aGWmVKlmxHE6xbsMjJblNzA8wo+7rm16HbQC6Q4mgiOIEnjiB5wXIeQqRHlGjwuak6YWUEnmUy6gM80GHPKPmlBqZzgYYOIseiLBoRDAn0C91KAuRfya85RZNLujdh4FgXMmCfJ5lqBz5EC4SIJUQW3yFZL85PO/I+GA8oYP8v+eZEAXALhloC8BZfKEF0zZ5MClMI0v1oyyelz848RgH6WClwS2XfJpAF/n/yJA4y3ZviEIBgLiAFC4SIvJx
|
||||
|
||||
YLE6ZSy8RKLIwUF4UFD8x5VguhKwl9Z4CfBXwJNmOj1JeytgKQvIUdLmAVCyQDQo2lvD/en8oZXtOwUfKtqB2bNr4u1aqYVFHrCZMsG0BkE0ktGIEXdDwSiL8Ev5Rid2COEVtDRkE7nOwt2DPloiziZJOovRGgDYJQ3bEZkSelpEk5AiYxanN+mYTKGt0uplnNCA2LkpdiidngOLmOKKx4MqsRmS4LuLOKpUhxJI16FMrOxkOZuUQRWKEJ8U+wQc
|
||||
|
||||
W9yiV9ytuu9DcfZRJKUqiZOUxvJF0uHpK5hTM7JXAvnlQxqZxK4IvMWLa+h5QVquoOuWxW0rr49KzYD2EaWA58ALSs+dMsgU2qQoos1ZVLL6UMEBlMKtEgCoOXoAjlIC05TGsuWgwblNMhZYMDuW4KEQiay0RspTUgIB+Oy7+fsrGWkAgFxyqZeco6XGtoF1yl1QDnzKILXlzy4meguQXqz3l9s3BV8qNk/LCFx/YhYCoQBkK21FM0FWoHBXJ5aF
|
||||
|
||||
Fs4EveMnIw8mFB0xwhsGQS7UomUDWRc5NwRzBHoL5PFBYz2h4tQK+KFBLtGWDdBNgmwQOekz8LatRhlpVMEmFUGwVrpLKoVTflPTwS8R4UgxeiCMXRUTl2YlXnFPMXYShVacv6RKtwGAzpV9I5hpAVInMiMyX2JVWMVbr1K0wZ6UzswNkodjZm93J9dtF9yR4e56zBRqXKBzOtzVyPM9kkuJkpLJRDqjtVkr4w5LLmVM0GHaUfV7Rws1GN9dnmcC
|
||||
|
||||
fq8E+GX9ZaQCQzBw1A4KNW0rzWKyE1T8pNestfkAx35F5NWDl2GUNqAFTaiZc2lbUXKO1YAQtR7OuWlq0F5anTZWv005B35ta4zbspGWZrC6FmltbmsXWxqBN6MBzW+Sc0hkHlw61BWUCHXayB1U0FhXFonXGz5pegxadaLcaPCfmpsmdVcBIXzrgVS6sFRCujZQq9mcMBGEjBRigsupkLHdHWWq5GdJ4ZsPSrxOclJhXZZQJEdfHiD/kJ4QSDrl
|
||||
|
||||
6qZVByjUUcm6bUxvxvV3S8c2OuHG5VK8TF8Gsxe/kFW1MUNtRVbgXMlUYbGGWG5TrO2ykVyNOvbOsZKkt4GdJpkRSIRJVu7UaVi08c7vdCUpGr/lrUpzjjPXFjT96vYSCpQWmljz9xJlBPiuGaCkBhQMG4ZP0h2xMrhkoyEKn5EKSLgEqcbAGDurtTN9lkrfc8iQGIA+jW8nfNKiAmMi4g8IWVfAO1XQBg6mAkOqftVWeSz9ccDVRfi1RUhtVQdO
|
||||
|
||||
QWncdlGrrTytzoy2RAATRJoU06aJhfVqNhhivQ8oGjBNOTDqDcUwwURQ7xDmNyOwLkIImegxlxj0GgGmCcBvum4NHpc2jtpBoV48qodyAj6QKvV7Ib+VeE/6btqLn7aahIMnDVlO765SNOCEv/EfAu21yLUPPbalIRipsSLOD253mi3q7ezGNBrNqV9oUmDzkkswItKPNPrA7kdGkaMB0jIEWUqkgAfhBAAwiA1IGkgADhBAA4iCABeEFaQ9Jy+M
|
||||
|
||||
OgKsXyCpjIJkme1Ha3nR3TlMdSyNvR+GID46IWmyR8e/PNq7Se+FOqnRAGz1kDqkRekvRXur0tJa9AUKqk8n8raEWdQApfq1TUgJ8p9M+4vWXqr017edeW9dSYV+5CZRM4mKTOLtUYNbrojibNtesjyphaMTKxXcFBrZVdX9iwS0r7gmKd0ddLHaCedKqaDc2UFLH3a6KQkQaeEUGi3TFLIqraM5BY63Q7rQ2Ts0pvLA3ixqZHEzqx1wbAIRtwxD
|
||||
|
||||
A8EJHXsH4qmbh6glK8LBLRimKCjdWzNVJfwM+39zvteo5TCnu7pca41PGy4aZXQACyHx2yCyv+AnS8qCiJfHbEMivAI6q+SOsKijpx1o6udneoUVjp7146Cdg+rvoiQkPeZEUGVXvpToT7CHt1pAVAOIZTm84V9M/XWhvqapb72dO+nKkIah7bIrDBhk/X8v510LBdL2N7J9h+x1a79RsZxCggrYGr14PoQlc5I/Ldb0EUicIRPA66+E7oWCZhIL
|
||||
|
||||
3SaMGNF0c1lbHPZW4jOVcvQxQgeW2xTkD62sA5tvQN0NaRQM7AxlPd1gzy58qnpmUOQLCyPctK33Du0oMgRqDKMleDZ3rniimaw497dEoT06i8ZXB1JDHy9ZaCflghiAF9iYBsBCIhADHVIZyD16wwshpvYju/Ct6VD7etQ430WTxUzjve/vchCJ0YQQE5hIw7hEyoERTDbhtYxsa2M7GKUdhxnQ4fn6NVyEzh2ohzs+PrHXgPx9Q0/V8M3iN1JO
|
||||
|
||||
/PIXmLyl5b9D7GyU7DiACK1F8oHYHWQLq4pwh6+KYHMHCyddSOiwdcg9DkUUIQDiYg3TS0gPgbnpZRpbXypJHpzqjlijk6hvqOpS6Rru7DYjVaPHb2jGnCFnND1SXbc0owpFh1zZ6BKw9tUjrOvG2rFtY9Mw5jS0Z3psaftBabgx60B3p67VLU1Y5TioB1619vAQ4xX2b3V8lotfeCJUDEAXHDomhm49oYH0PGdkICc06PsaJvGjkHxjSOafp2r7
|
||||
|
||||
aqbyIE6ztyMChwTIZqnD4aP5n6/egu7grwX4KCFQj6J30Tum6DVdbYkjCRfsF644oLgIc4k/h3ApgU8V/oZTER1G05GJtQGqbZxxPzcdmTXK1kzYazGidTFnJ23Rtvt2+7yhfJ+xURIO0kSPdsW03laFyFRkujV88Yoz1mC2kSzipluUMZ7ErFVgubboYat4HGr497BxPXEuT2pJDTSx84SaaVqrHowM+apE7GoBOEiOS+3Y9eCtNl9G9tp445Mk
|
||||
|
||||
dMzIJALp8HZcdird6PTfenQ96eH0z5/TE7QM330qB3nzQmAB870GfMJBXzfx6fgCfX1RnN9bOsE64az33mqkj5tCxhYdFJnIVAu84pcWuK3FaxVA6cc4JciPlf1crNYLRgsa8K/BeKHeRHP3miLbOEQ+UwjIjz4JrSNJmM4FIKPaKijI3PRbAfQCLbuzcGK3X2c+lcmwauE4c/nILqYGBTwMoUypzaMuKemUs6ud0beiDa0jRNKjRRvTDkbhjzvN
|
||||
|
||||
yZalxMamPuswuoWar1PxK9sAOy83uOvMg6IT3x7Y5YbnWkBI1MAUaMdgoB/Bhwlp0vjafkMt6lDAEM44Bd+MxV3TTp3HeBa9OoQ9DZhNNWTrgvBnKgkJzY2FdQARWorMVn+vFbDP2GcLdeBfnhZjMr8QrUJ6q7VdwDRXIdcV0gAlYPKUW/DCJyoPzWzCC1haWZmDVCy61utcEFB7sA5BD3HVcz7C86gkyureSA6LCbNh1w7C9hgh7khIo2bpMDdp
|
||||
|
||||
tqQ2bbopgMsn4DbJvIb2ZW39nyRg5nk1tpHNycxzWBiAHy1lUmWF2GZJkBZcXNWXOLOpCeI5ZbksJlTFqu6tq3CVvaWDH273sedmNJ74i27NPSaKCuZ7Kg/4YgC5SWqkBiAqAPiAYAhbQ6PzyVyvqlZr7KHcrqhoC26dAtM2f5np+44VeJ3zVFqy1L4eTveMT7CbxN5auTcptNXsLjwxwyCfwsgo4zBNomyTbJsU2sgiZl4VRf8MCYl6K9NehvVm
|
||||
|
||||
vODVMcQVYHzy4lmwVd7/ANdxIQY7XldvuCIUtYG3+gYKR1MbVJc0UyXvYD07VCbqgFm7Xpkhns7UdqYoHEp6lz67pfW6NG/rOB7U/UMBtNDNUvZc7VKYD25oqT8rOI9qodSDC7uK8IjqGvTAIIJjkSqYyaq8u6nODySPbNjd4MzSM9aVhCznuqQNJAAfCCAAuEEAAMIA0kAAyIAvvIv4hpDDet8ylftPx9Gb/55m1lcpo5XJ7HN/K1zYsPD64Ul5
|
||||
|
||||
CcFbWMPj7d9zdqpG3a7u93+7ktq05GdavAnvkctv/ArYkB76d7Hd7u33eP3PDEOx/TaYLo0baNdG+jA244WJqAiMjbvX3FsHHj/jV4WK629td9rK64m+wDrn4mtRdgUwGwSS02f10tmXq3tjs6UYesqXYNz1yo69YSl26PrdR7607ocUTmnFcq0yxpxEzEG8aFcRxFsBwQBLQ9MN3OxHqGA7Als+q/c8wclHTH0bI03UUkixtJgcbyxkcasYkxf0
|
||||
|
||||
f6f9LgIlZkPl9R7ihhm+lfZuZWYT2Vtm3PduMQXubjxyoPQGke/1Sb/9UqyYYn1SOTQMjkx3I+X1YWj7c/E+9GeX6X30Alj7+sY9PC2PMep+zW+NYkAHMjmJzM5l/alJ3QYWLkZ2zz2Z7REYGoDraxIVtt/9qsKRyeLdCWYZHPJ2RoAe7fyMMnwBcljB4nK7OB3VLcGvBxpYHM1GhzudL6zgP0vR3/ruB5xUDZ6bDXPrC5uNZ4t2qAOsE3YqZrDf
|
||||
|
||||
bk0bfcJJaeK9oPNl2jzpqyu8I5ruiO67QOvG43YkCVXoTvSPYzTcUd02x704tveo+Auz2EIOjgq0vaePeZGFrx8xwn1WdhXD7EZxx9ITatOHz7sZwixVdCvT3p1yZ8HoLstbWtbWhAPpmibmvMgHIT5Y9pwIJrv6x4ERrBJiw7o4s92yTjh4+W1Z4JAxtpLJ2dZyfIPQD7sEDUyZKPFOsHpTnB8HbAOh3CH2l2p5HYaOYbBTh23DfgYzL6BaHLdX
|
||||
|
||||
NIw4mGysJKnG7O2IzCVLY9gPDyYyjf4fTPRpVdkRxec0FXnjZqx8w4+K8PYPqbSVrZ3aeUcOmJ7CEfZ6zeuPs3jni9offoeBYptLnm9z4wq88PWHSXDyBnQ4+Z24XnnHV1xxAEtdTklXpLr534/P17Nn2r7d9p+1Cd/Co8yCHNkqQ3IR5BhX4fBHA2tvlt+eVbURU1sOtLNjhySWIZQjdu4v6TqDuOiFJ463WMh9183Y9aDs1PB2BD969S45b1Op
|
||||
|
||||
VLuwy4y6nN4aem3j+c/WJrkeKPcbhNMLRjsth6BjYja1P+V2gph3LrBtG+K6EfiEpXYj2VysYT7fAE2lmt8/setNqufzpxtRx3oOdaOjnnN5Kno59POnX4ZkzDsnbH1C2F3J75d5hbtf3OHXTj9qy47ecSBF3pkm9xRY1tjWfXLo7zr5x3BBubJ0RD2dEVza+5FgYeDFRR32vEJRKUN67YJfujIr5NsIpbBsGxdNVcnk2sAzfnzdFOFtJTy3eU6Q
|
||||
|
||||
P4Oam1Tohzpfwl6W63vkpp3HbwNxqCDuANgGy/04cv14vsxGf0O/Jw2SYRZQDjwN4f8Ty7LG7y5K7mfSvjR4j97asZcpqAQgVhrcCGAqSsR4QU5dZ++dVdfmlHJxtK3s+3e6uW++r/dx30Pfvy0OGHC5xe6DMT65PV/RT9BE4Aqe1P0921+GaZ0n9+Izj7fbZ/k+4AHPyn1AKp/Q6fO+d8Jn94LokHzApBMgi03CtEFSlaMxtwMb6GiI9vHEltpI
|
||||
|
||||
PDNq4s9QJdtuIIdYmHW8+jmb863rrxd0JUKhTolwR5JdEfcHJHyp29fI/Vvtt1HvbbR9jvCmy5opqhxw3WQp2BKad0gw71tLOIgk1UthzQed5Kk8VDkQYRErHq9ypnFdiV8I/bFK6FnxpuVwnzs8Ke8+7EVQDSAGDyPh7DcOQ9s41fj3VHc9nV13r1faOTPDMSCyAkv4hABbZV3z/Z4O9mYswLwE73Y7vceeZbZ951y+/QB7f/PP3o7/9/VtP3vn
|
||||
|
||||
gLJ4KsPWFbDl28XpS2Ec6hbzVTsDjwr4SjdjxEggIlhJqSCHWlXayLtANamxWHWia18bsHEKAPC8LryQtKDNul4KXi3Ad+r+S4rdkfuTrXupyWJ+sGWmjbu7r/Hd6+tONOmw1j/RLDDDBdgswQIfbyRd8uZKIlFhPKDs4l2lvTGmUXHbE/rfHuwUI07jZ2+fHowLQAfhp9XefmR7l33Tyo/0+un7vRnx7wvYPenPKgNgqAHYLMfmus91viyYD/c+
|
||||
|
||||
AnH3Tr59xPqt+2CQ/PjuE8bS1sgJlRqo9UZqMA85m6BswCIWeh67wyvCFNZyAGqwLhO4RDkWJ5T9snsK0n6R3FlkaQcs+tFKWar77f0VwGS3yrtSy9aa+VuWvaByj47vQ3O7OvzRiXwx5O0cNfMg3jt8qu5E9A/t8LAURqvYeh4aynCommO9RueXRPMz6dxt9N8BX0e87rq1VensquFH2nx37+a1fOmDPbv7HcZ89+mfvfEgQZStQD+XuT/azxiP
|
||||
|
||||
8fteefhQp9kMAvOnVhpA3OoXr47fuKZgJjzii4suI8Aq4sC7OCziHAz+wQriCLKkBPtdBLMv5BGIgSv/G7IZ0XWkmBkGSLFkYxmWbo36e26RC36FuCcrV4d+pLoUQNeENCHaaWWdIL60u/Jo05dexllL6J2U0DBqSmQ3p25XwVpKJTJg9vDwbq+vYoIq00zCB6yLexsmK6reU7r9r7+s7oFYW+GkMSBkCPFAoA8UmjAoAvghIOEDVI+/O5R8Q2YN
|
||||
|
||||
mAD25/md5wYF3uq5O+mrjd7aud/hoa7ulQAa5e+RrpUCjc7oh95XOnxjoF6BBgUYEmBFSFUjmB5NlYED2bns1bS2jrrLZg+E+sEH6BhgcYHBAEQVEGWB1gXD7Xiifv47oA4kpJLSSskhn736ZUkVxGcHYIEga6+KEWwR4OAcBK5e+AT1oB0VSo3KEYJ7FggPQ5AWV684Htvk4oShLq36KWeFHV6IGLARS5sBP0hR40uVHlHb0uDbpOYimnujOaao
|
||||
|
||||
QgHL6eK6YN0DKYfQtnadQU3k5ZDA0wA5CS0SNhM6iuInob67+agY9wF0ZvtJ4o28rh4buuxIEwBvip3gcbruChk4HXeLvizb3+Whk/7PeZniAhbqj4s+IfB09oLY2eZhq8FMAqAO8Gvirnr/73u//k85JBUfvCEiGbwdCEaOvyqNbheUAYiQ9SfUgNJT+jFhLqdQjQZTzryywHWSLAbtEsziKyAR5JZGvoEm6iQKbgaLpuOCKV44ulAUMGAgeHjV
|
||||
|
||||
7+20GpME50fPhYpaW/fvMGD+DTksFi+RlkdprBXFBpwMQ0/pZb40D0OqzBE9vJt7SBKxN0ITChGJv7KBO/mt7jS8ulNKH+tqloGVAb7mZK2+mzpf6OB1/i4G3+rvu4EPee7iCF+sL3se5LuJVhvaf+GkE6Efu1wGiHA+iQaD7YhnxhGEwaXrpAE/OqxhZQuhpfHDoOBG7np5nGDfIZ4P+c9msi4gAmDDCbCyQDDBvAFYB0ituHIhj7ZmFQUTTIIf
|
||||
|
||||
iHsDWkxSmHLAOowqG5eEPoF7TuS1bAHSiQaTp1y3QWCIWY9gNJhIHleObjh5ekeIPdBMINoKMFc+EoRUYG02ABoD+cpHsL5VucoTW47hQ/mQ4dO7btqEUcWrEjJw2yAbgh4Iu0BwZJIlHAtib+dHhL4Whcdo8FzuI4uP6yEyYZKK6GPNsTKwh8FrlSzQLrumEg+QAVJbRh4fl7ocMpeDpDgA2MNcBwAcAKSCXwDJNADHAathIDNgQ1m0AMA2xhQA
|
||||
|
||||
8UnPnOGdARYMJw6CMJAZrNA+gKSAccNLAuHygeEX5yEUKoNRFERd1p2YTBfQMrSURHmtREZBzAZGQ8RLEdRG0R8UgHjCRVEZkBiRWuEQ6SRfEZkCsQbXtxHMRUkfoCpoNHgqDyRUAKxGZAL4NmG/B4kNpG6R+gPpEbOmYSpEiAIkZkDqQbevmFFAxkaJF9qMWsByORmQBWCayLkaOpxeFEdZF9SIPIRB2ER8ExFWRakS+BDQSkeSCaYTwNgCvARI
|
||||
|
||||
G4pigVXDgiSML6taTTADvITIxRcUfgCKqYoHAwLY8xLgjS0QIoM5lAasAYAN0DAAQC44rsNiqjCuwDwCk4bkfoBKRuqIAS1OCIHhGwgJAHb5aR3UcQCkgCAGyRGR/UWQKjKHkbgAQI2gjHYkAQuEAg8UPwCAikAygJCBVIZsP2CSUfABQgHA/OICID2h3iaBYg2sCtG4Aa0SQityT0NtFPmDmj0hNRqkXsZ0IGkY558IrkfBjsQFoAchrKQCNkCT
|
||||
|
||||
RwQIZDH2frEQArSLeEchYRCQaojMQg4DGGPA+gFiAfApANGD6I0EXspwxTABNFTR/0XBy6EhdJoAiYqKMwDEgRyHABjRp4OjF/RDnIQbQQjAIRBsAPwJVEZ4YQMEBKex0K8x1ogUbOj12SzsmQGA7wUzHPRI4pGrPA/4Ep7UxtMZAhn8j9BACOAzAL9EewXOouBkC2QJsHqSUojpodIgQHiBMA2QCvAYARyBjF4RWYImpkxb0ADFUEC6ukqExNmI
|
||||
|
||||
mx6wxsZjEPuzGJgC8xqKCGAkx5kH+Foww8LBrhAHMJjDaQQAA===
|
||||
```
|
||||
%%
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
created: 2026-04-20
|
||||
updated: 2026-05-14
|
||||
updated: 2026-05-17
|
||||
title: Агент — контекст и инструкции для этого хранилища
|
||||
---
|
||||
|
||||
@@ -116,6 +116,7 @@ Vault — второй мозг владельца. Агент помогает
|
||||
Триггер: команда `ingest` или новые файлы в `00 Inbox/`.
|
||||
|
||||
Если ingest запрошен для файла в `01 Ideas/`, не переносить его в `90 Library/` и не архивировать. Нужно оформить саму идею на месте: сохранить авторскую формулировку, выделить основную мысль, добавить структуру и релевантные ссылки на существующие заметки.
|
||||
- если в исходнике есть картинки, изучить их и принять решение - вынести из них информацию в заметку или оставить картинку в конечной заметке.
|
||||
|
||||
Перед выполнением вывести план:
|
||||
|
||||
|
||||