319 lines
121 KiB
JSON
319 lines
121 KiB
JSON
{
|
||
"main": {
|
||
"id": "5324373015726ba8",
|
||
"type": "split",
|
||
"children": [
|
||
{
|
||
"id": "4e9db25a7859d46d",
|
||
"type": "tabs",
|
||
"children": [
|
||
{
|
||
"id": "b338ee701498f876",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "markdown",
|
||
"state": {
|
||
"file": "99 System/Archive/Основные команды git.md",
|
||
"mode": "preview",
|
||
"source": false,
|
||
"backlinks": false
|
||
},
|
||
"icon": "lucide-file",
|
||
"title": "Основные команды git"
|
||
}
|
||
},
|
||
{
|
||
"id": "3e242b36cec6a5ec",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "pdf",
|
||
"state": {
|
||
"file": "90 Library/Programming/Web/Подготовка к экзамену по веб-разработке.pdf"
|
||
},
|
||
"icon": "lucide-file-text",
|
||
"title": "Подготовка к экзамену по веб-разработке"
|
||
}
|
||
}
|
||
],
|
||
"currentTab": 1
|
||
}
|
||
],
|
||
"direction": "vertical"
|
||
},
|
||
"left": {
|
||
"id": "a9c2d5e65288011a",
|
||
"type": "split",
|
||
"children": [
|
||
{
|
||
"id": "383cca303cf4b57d",
|
||
"type": "tabs",
|
||
"children": [
|
||
{
|
||
"id": "27e6486165131cfa",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "file-explorer",
|
||
"state": {
|
||
"sortOrder": "alphabetical",
|
||
"autoReveal": true
|
||
},
|
||
"icon": "lucide-folder-closed",
|
||
"title": "Files"
|
||
}
|
||
},
|
||
{
|
||
"id": "66079465678173e5",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "search",
|
||
"state": {
|
||
"query": "tag:#gym",
|
||
"matchingCase": false,
|
||
"explainSearch": false,
|
||
"collapseAll": false,
|
||
"extraContext": false,
|
||
"sortOrder": "alphabetical"
|
||
},
|
||
"icon": "lucide-search",
|
||
"title": "Search"
|
||
}
|
||
},
|
||
{
|
||
"id": "c2541ce190da912e",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "bookmarks",
|
||
"state": {},
|
||
"icon": "lucide-bookmark",
|
||
"title": "Bookmarks"
|
||
}
|
||
},
|
||
{
|
||
"id": "673ce6e6c09cfc9c",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "tag",
|
||
"state": {
|
||
"sortOrder": "frequency",
|
||
"useHierarchy": true,
|
||
"showSearch": false,
|
||
"searchQuery": ""
|
||
},
|
||
"icon": "lucide-tags",
|
||
"title": "Tags"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"direction": "horizontal",
|
||
"width": 207
|
||
},
|
||
"right": {
|
||
"id": "38c591aa0966839e",
|
||
"type": "split",
|
||
"children": [
|
||
{
|
||
"id": "86a193b1d3159ff8",
|
||
"type": "tabs",
|
||
"children": [
|
||
{
|
||
"id": "06940eb960fc1db5",
|
||
"type": "leaf",
|
||
"pinned": true,
|
||
"state": {
|
||
"type": "terminal:terminal",
|
||
"state": {
|
||
"terminal:terminal": {
|
||
"cwd": "/home/ada/Documents/Vaults/SecondBrain",
|
||
"focus": false,
|
||
"profile": {
|
||
"args": [
|
||
"--login"
|
||
],
|
||
"executable": "/usr/bin/zsh",
|
||
"followTheme": true,
|
||
"name": "ZSH",
|
||
"platforms": {
|
||
"darwin": false,
|
||
"linux": true
|
||
},
|
||
"pythonExecutable": "python3",
|
||
"restoreHistory": true,
|
||
"rightClickAction": "copyPaste",
|
||
"successExitCodes": [
|
||
"0",
|
||
"SIGINT",
|
||
"SIGTERM"
|
||
],
|
||
"terminalOptions": {
|
||
"fontFamily": "FiraCode Nerd Font Mono",
|
||
"documentOverride": null
|
||
},
|
||
"type": "integrated",
|
||
"useWin32Conhost": false
|
||
},
|
||
"profileSourceId": "7004edff-76db-412f-95d3-5fd8e180d055",
|
||
"serial": {
|
||
"columns": 48,
|
||
"data": "\u001b[48;5;22m \u001b[2m \u001b[38;2;205;214;244;22mr(request\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mtemplate\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m context)` возвраща\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mет HTTP-ответ; `get_object_or_404` возв\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mращает объект или 404.</\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\u001b[11X\r\n\u001b[39m \u001b[2m651 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175mblock-d\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mjango\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткому блоку Django</\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[34X\r\n\u001b[39m \u001b[2m652 \u001b[32;22m+\u001b[38;2;205;214;244m </\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\u001b[25X\r\n\u001b[39m \u001b[2m653 \u001b[32;22m+\u001b[39X\r\n\u001b[39m \u001b[2m654 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-django-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mcbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[34X\r\n\u001b[39m \u001b[2m655 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango CBV</\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[14X\r\n\u001b[39m \u001b[2m656 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\u001b[1X\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../Python/Представления, шаблоны\u001b[1X\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи CBV\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango: Представления\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m шаблон\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mы и CBV</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[24X\r\n\u001b[39m \u001b[2m657 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mCBV — классовые представления\u001b[1X\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mс готовой логикой. `TemplateView` показ\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mывает шаблон\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `ListView` выводит список\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m,\u001b[38;2;205;214;244m `DetailView` выводит один объект. В U\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mRL подключаются через `\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mas_view\u001b[38;2;205;214;244m()`.</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m658 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: `ListV\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22miew` по умолчанию даёт `object_list`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mDetailView` — `\u001b[38;2;137;180;250mobject\u001b[38;2;205;214;244m`; шаблоны по умол\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mчанию `model_list\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mhtml\u001b[38;2;205;214;244m` и `model_detail\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m.\u001b[38;2;249;226;175mhtml\u001b[38;2;205;214;244m`.</\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\u001b[26X\r\n\u001b[39m \u001b[2m659 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175mblock-d\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mjango\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткому блоку Django</\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[34X\r\n\u001b[39m \u001b[2m660 \u001b[32;22m+\u001b[38;2;205;214;244m </\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\u001b[25X\r\n\u001b[39m \u001b[2m661 \u001b[32;22m+\u001b[39X\r\n\u001b[39m \u001b[2m662 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-django-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22murls\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[33X\r\n\u001b[39m \u001b[2m663 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango URLs</\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[13X\r\n\u001b[39m \u001b[2m664 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\u001b[1X\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../Python/Представления, шаблоны\u001b[1X\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи CBV\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango: Представления\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m шаблон\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mы и CBV</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m665 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`urlpatterns` связывает URL с\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mпредставлениями. `\u001b[38;2;137;180;250mpath\u001b[38;2;205;214;244m()` использует ro\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mute\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m view\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m kwargs и name. Конвертеры вр\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mоде `int`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `slug`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `uuid`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\u001b[38;2;137;180;250mpath\u001b[38;2;205;214;244m` извле\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mкают параметры. `reverse()` и `\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m% url %\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m}\u001b[38;2;205;214;244m` строят URL по имени маршрута.</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m666 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: не хар\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mдкодить URL\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m если есть именованный марш\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mрут и `reverse`/`url`.</\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m667 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-djang\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mo-urls\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткой теме</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m668 \u001b[32;22m+\u001b[38;2;205;214;244m </\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m669 \u001b[32;22m+\r\n\u001b[39m \u001b[2m670 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-django-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mtemplates\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m671 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mЯзык шаблонов Django</\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m672 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../Python/Представления, шаблоны\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи CBV\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango: Представления\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m шаблон\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mы и CBV</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m673 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDTL использует переменные `\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m{\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mvalue \u001b[38;2;147;153;178m}\u001b[38;2;205;214;244m}`, теги `\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m% tag %\u001b[38;2;147;153;178m}\u001b[38;2;205;214;244m` и фильтры `\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m{\u001b[38;2;205;214;244m{ value|\u001b[38;2;137;180;250mfilter\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m}\u001b[38;2;205;214;244m}`. Наследование строи\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mтся через `\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m% extends %\u001b[38;2;147;153;178m}\u001b[38;2;205;214;244m` и `\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m% block %\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m}\u001b[38;2;205;214;244m`. Статика подключается через `\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m% load\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m static %\u001b[38;2;147;153;178m}\u001b[38;2;205;214;244m` и `\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m% static 'path' %\u001b[38;2;147;153;178m}\u001b[38;2;205;214;244m`.</\u001b[38;2;137;180;250mp\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\r\n\u001b[39m \u001b[2m674 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: функци\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи Python с произвольными аргументами на\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mпрямую из шаблона вызывать нельзя; испо\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mльзуют теги\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m фильтры или подготовку дан\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mных во view.</\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m675 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-djang\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mo-templates\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткой теме</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m676 \u001b[32;22m+\u001b[38;2;205;214;244m </\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m677 \u001b[32;22m+\r\n\u001b[39m \u001b[2m678 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-django-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mqueries\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m679 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango queries</\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m680 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../Python/Модели и ORM\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m Модели и ORM</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m681 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mQuerySet ленив: запрос выполня\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mется при фактическом обращении к данным\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m. Методы можно цепочечно комбинировать.\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m `get()` возвращает один объект или оши\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mбку, `\u001b[38;2;137;180;250mfilter\u001b[38;2;205;214;244m()` возвращает QuerySet\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `a\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mggregate()` возвращает итоговый словарь\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m, `annotate()` добавляет вычисляемые по\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mля к объектам.</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m682 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: `selec\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mt_related` — для ForeignKey/OneToOne че\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mрез JOIN; `prefetch_related` — для Many\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mToMany и обратных связей отдельными зап\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mросами.</\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m683 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-djang\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mo-queries\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткой теме</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m684 \u001b[32;22m+\u001b[38;2;205;214;244m </\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m685 \u001b[32;22m+\r\n\u001b[39m \u001b[2m686 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-django-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mforms\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m687 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango forms</\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m688 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../Python/Работа с формами и CUD\u001b[38;2;147;153;178m.\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango: Работа с формами и CUD</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m/\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m689 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`forms\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mForm\u001b[38;2;205;214;244m` описывает форму в\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mручную\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `forms\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mModelForm\u001b[38;2;205;214;244m` строится по м\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mодели через `Meta`. `is_valid()` запуск\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mает валидацию, `cleaned_data` содержит\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mочищенные данные\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `clean_<field\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m()` вал\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mидирует поле, `clean()` — форму целиком\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m. `widget` управляет HTML-представление\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mм поля.</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m690 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: `\u001b[38;2;137;180;250mform\u001b[38;2;147;153;178m.\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22msave\u001b[38;2;205;214;244m()` есть у ModelForm; серверная вал\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mидация обязательна\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m HTML `required` не\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mзащита.</\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m691 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-djang\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mo-forms\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткой теме</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m692 \u001b[32;22m+\u001b[38;2;205;214;244m </\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m693 \u001b[32;22m+\u001b[38;2;205;214;244m </\u001b[38;2;137;180;250msection\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m694 \u001b[32;22m+\r\n\u001b[39m \u001b[2m695 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175mtop\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНаверх\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m696 \u001b[32;22m+\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mmain\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m697 \u001b[32;22m+\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mbody\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m698 \u001b[32;22m+\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mhtml\u001b[38;2;147;153;178m>\r\n\u001b[0m\u001b[48X\r\n\u001b[2m────────────────────────────────────────────────\r\n\r\n• \u001b[0mHTML собран. Проверяю технические вещи:\r\n повторяющиеся якоря, наличие целевых файлов и\r\n возможность напечатать PDF через headless\r\n Chromium.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mwhich\u001b[38;2;205;214;244m chromium\r\n\u001b[39;2m └ /usr/bin/chromium\r\n\r\n\u001b[31;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mo\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"id=\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161m[^\"\u001b[38;2;205;214;244m]+\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161m\" \"\u001b[38;2;205;214;244m90 Library/\r\n\u001b[39;2m │ \u001b[38;2;205;214;244;22mProgramming/Web/Подготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;205;214;244;22mвеб-разработке.html\u001b[38;2;166;227;161m\"\r\n\u001b[39;2m └ zsh:1: unmatched \"\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m git diff\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mstat\r\n\u001b[39;2m └ .obsidian/workspace.json | 28 ++++++++++++\r\n\u001b[0m \u001b[2m++--------------\r\n\u001b[0m \u001b[2m 1 file changed, 14 insertions(+), 14\r\n\u001b[0m \u001b[2mdeletions(-)\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mОдна проверочная команда сломалась на\r\n кавычках, без влияния на файлы. Повторяю её\r\n нормальной quoting-командой и сразу исправлю\r\n найденные дубли якорей, если будут.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m git status\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mshort\r\n\u001b[39;2m └ M .obsidian/workspace.json\r\n\u001b[0m \u001b[2m?? \"90 Library/Programming/Web/Подготовка к\r\n\u001b[0m \u001b[2mэкзамену по веб-разработке.html\"\r\n\r\n\u001b[31;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mo\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'id=\"[^\"]+\"'\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mProgramming/Web/Подготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mвеб-разработке.html\"\r\n\u001b[39;2m └ (no output)\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[36;22mrg\u001b[0m с шаблоном для атрибутов не поймал HTML,\r\n поэтому проверю через более простые поиски по\r\n \u001b[36mid=\u001b[0m и ссылкам. Заодно вижу, что \u001b[36m.obsidian/\r\n\u001b[0m \u001b[36mworkspace.json\u001b[0m уже изменён вне моей задачи,\r\n его не трогаю.\r\n\r\n\u001b[31;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"href=\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161m#[^\"\u001b[38;2;205;214;244m]+\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161m\" \"\u001b[38;2;205;214;244m90 Library/\r\n\u001b[39;2m │ \u001b[38;2;205;214;244;22mProgramming/Web/Подготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;205;214;244;22mвеб-разработке.html\u001b[38;2;166;227;161m\"\r\n\u001b[39;2m └ zsh:1: unmatched \"\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"href=\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161m#s-meta\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161m|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mid=\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161ms-meta\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161m\"\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Programming/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mWeb/Подготовка к экзамену по\r\n\u001b[39;2m │ … +1 lines\r\n └ 4 matches in 3F:\r\n\r\n … +11 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m 300: <a href=\"#s-meta\">Class Meta</a>\r\n\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"id=\"\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Programming/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mWeb/Подготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mвеб-разработке.html\"\r\n\u001b[39;2m └ 115 matches in 71F:\r\n\r\n … +237 lines (ctrl + t to view transcript)\r\n\r\n\u001b[0m \u001b[2m... +20\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mНашёл реальный конфликт якоря \u001b[36ms-meta\u001b[0m: HTML\r\n meta-теги и Django \u001b[36mClass Meta\u001b[0m. Исправляю\r\n Django-якорь на отдельный \u001b[36ms-django-meta\u001b[0m.\r\n\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 90 Library/Programming/Web/Подготовка к\r\nэкзамену по веб-разработке.html (\u001b[32m+2\u001b[0m \u001b[31m-2\u001b[0m)\r\n \u001b[2m299 \u001b[0m \u001b[38;2;205;214;244m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#s-migrations\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mМиграци\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mи\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m>\r\n\u001b[39;48;5;52m \u001b[2m300 \u001b[31;22m-\u001b[38;2;205;214;244;2m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#s-meta\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mClass Meta\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\r\n\u001b[39;22m \u001b[2m \u001b[38;2;148;226;213m>\r\n\u001b[39;48;5;22;22m \u001b[2m300 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#s-django-meta\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mClass\u001b[1X\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mMeta\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m>\r\n\u001b[0m \u001b[2m301 \u001b[0m \u001b[38;2;205;214;244m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#s-null-blank\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mnull/bl\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mank\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m>\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m471 \u001b[0m \u001b[38;2;205;214;244m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"card\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mid\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"s-migra\r\n\u001b[0m \u001b[2m \u001b[38;2;166;227;161;22mtions\"\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mМиграции\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m`makemigrati\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mons` создаёт файлы миграций из изменени\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mй моделей, `migrate` применяет их к баз\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mе данных.\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"detail-link\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhre\r\n\u001b[0m \u001b[2m \u001b[38;2;249;226;175;22mf\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#d-django-models\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mПодробно: Django m\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22models\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m></\u001b[38;2;137;180;250marticle\u001b[38;2;148;226;213m>\r\n\u001b[39;48;5;52m \u001b[2m472 \u001b[31;22m-\u001b[38;2;205;214;244;2m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"card\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mid\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"s-meta\"\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22m уровне форм/валидации Django.\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mcl\r\n\u001b[0m \u001b[2m \u001b[38;2;249;226;175;22mass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"detail-link\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#d-django-model\r\n\u001b[0m \u001b[2m \u001b[38;2;166;227;161;22ms\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mПодробно: Django models\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m></\u001b[38;2;137;180;250marticle\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22m\"$1\\n\"}'\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Programming/Web/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mПодготовка к экзамену по\r\n\u001b[39;2m │ … +1 lines\r\n └ (no output)\r\n\u001b[0m Web/Подготовка к экзамену по веб-\r\n разработке.html\\\"); s=p.read_text();\r\n ids=set(re.findall(r\\\"id=\\\\\\\"([\"'^'\"\\\\\r\n \\\"]+)\\\\\\\"\\\", s));\r\n missing=sorted(set(hrefs)-ids);\r\n print(\\\"missing\\\", missing);\r\n print(\\\"ids\\\",\r\n len(ids), \\\"hash_links\\\", len(hrefs))\"\r\n\r\n\u001b[33m⚠ Falling back from WebSockets to HTTPS\r\n\u001b[0m \u001b[33mtransport. stream disconnected before\r\n\u001b[0m \u001b[33mcompletion: Connection reset by peer (os error\r\n\u001b[0m \u001b[33m104)\r\n\r\n\u001b[31m■ stream disconnected before completion: error\r\nsending request for url\r\n(https://chatgpt.com/backend-api/codex/responses)\r\n\r\n\u001b[39;48;5;238m\u001b[48X\r\n\u001b[1;2m› \u001b[22;22mПродолжи\r\n\r\n\u001b[0m\u001b[48X\r\n\u001b[31m■ stream disconnected before completion: error\r\nsending request for url\r\n(https://chatgpt.com/backend-api/codex/responses)\r\n\r\n\u001b[39;48;5;238m\u001b[48X\r\n\u001b[1;2m› \u001b[22;22mПродолжи\r\n\r\n\u001b[0m\u001b[48X\r\n\u001b[2m• \u001b[0mПродолжаю. Осталось: собрать PDF, перенести\r\n обработанные Inbox-исходники в архив и\r\n обновить \u001b[36m99 System/INDEX.md\u001b[0m.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"generated:|Vault Index|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mtotal:\"\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"99 System\"\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mg\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"*.py\"\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mg\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"*.sh\"\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mg\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22m\"*.md\"\r\n\u001b[39;2m └ 3 matches in 1F:\r\n\r\n … +3 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m 6: # Vault Index\r\n\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m ls\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mla\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"99 System/Archive\"\r\n\u001b[39;2m └ 04 Tools/\r\n\u001b[0m \u001b[2mCourses/\r\n … +93 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2mЭкзамен - MOC.md 8.2K\r\n\u001b[0m \u001b[2mЭкзамен.pdf 179.2K\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrealpath\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Programming/Web/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mПодготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mвеб-разработке.html\"\r\n\u001b[39;2m └ /home/ada/Documents/Vaults/SecondBrain/90\r\n\u001b[0m \u001b[2mLibrary/Programming/Web/Подготовка к\r\n\u001b[0m \u001b[2mэкзамену по веб-разработке.html\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mГенерирую PDF из локального HTML через\r\n headless Chromium. Если Chromium упрётся в\r\n sandbox/Wayland, повторю с нужными флагами.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mchromium\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mheadless\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mno-sandbox\r\n\u001b[39;2m │ \u001b[38;2;147;153;178;22m--\u001b[38;2;235;160;172mdisable-gpu\r\n\u001b[39;2m │ \u001b[38;2;147;153;178;22m--\u001b[38;2;235;160;172mprint-to-pdf\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"/home/ada/Documents/Vaults\r\n\u001b[39;2m │ … +4 lines\r\n └ 160997 bytes written to file /home/ada/\r\n\u001b[0m \u001b[2mDocuments/Vaults/SecondBrain/90 Library/\r\n\u001b[0m \u001b[2mProgramming/Web/Подготовка к экзамену по\r\n\u001b[0m \u001b[2mвеб-разработке.pdf\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mPDF собрался. Перед архивированием проверяю,\r\n нет ли уже файлов с такими именами в \u001b[36m99\r\n\u001b[0m \u001b[36mSystem/Archive\u001b[0m, чтобы не перезаписать\r\n источник.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mfile\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Programming/Web/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mПодготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mвеб-разработке.pdf\"\r\n\u001b[39;2m └ 90 Library/Programming/Web/Подготовка к\r\n\u001b[0m \u001b[2mэкзамену по веб-разработке.pdf: PDF\r\n\u001b[0m \u001b[2mdocument, version 1.4, 5 page(s)\r\n\r\n\u001b[31;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m ls\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mla\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"99 System/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mArchive/00_базовые_понятия.pdf\"\r\n\u001b[39;2m └ ls: cannot access '99 System/\r\n\u001b[0m \u001b[2mArchive/00_базовые_понятия.pdf': No such\r\n\u001b[0m \u001b[2mfile or directory\r\n\r\n\u001b[31;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m ls\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mla\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"99 System/Archive/Подготовка к\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mэкзамену по Веб-Разработке.md\"\r\n\u001b[39;2m └ ls: cannot access '99 System/Archive/\r\n\u001b[0m \u001b[2mПодготовка к экзамену по Веб-Разработке.md':\r\n\u001b[0m \u001b[2mNo such file or directory\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m ls\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mla\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"00 Inbox\"\r\n\r\n\u001b[39;2m────────────────────────────────────────────────\r\n\r\n• \u001b[0mКонфликтов в архиве нет. Переношу обработанные\r\n исходники из Inbox в Archive, как в workflow\r\n ingest.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mmv\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"00 Inbox/Подготовка к экзамену по\r\n\u001b[39;2m └ (no output)\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mmv\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"00 Inbox/00_базовые_понятия.pdf\"\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"99\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mSystem/Archive/00_базовые_понятия.pdf\"\r\n\u001b[39;2m └ (no output)\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mТеперь обновляю индекс точечно: добавлю новые\r\n Markdown-заметки в их разделы,\r\n перенесённый \u001b[36m.md\u001b[0m из Inbox в Archive и поправлю\r\n дату/общее количество. PDF/HTML в индекс не\r\n входят, он индексирует \u001b[36m.md\u001b[0m.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m INDEX.md\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m read \u001b[38;2;166;227;161m\"99 System/INDEX.md\"\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mtail-lines\r\n\u001b[39;2m │ \u001b[38;2;205;214;244;22m80\r\n\u001b[39;2m └\r\n\u001b[0m \u001b[2m| Заметка | Aliases | Status | Type | Tags |\r\n … +81 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m| [[Travel Item]] | — | seed | knowledge |\r\n\u001b[0m \u001b[2m[travel] |\r\n\r\n•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mSearch\u001b[0m *.md\u001b[2m in \u001b[0m.\r\n\r\n\u001b[2m────────────────────────────────────────────────\r\n\r\n• \u001b[0mТекущий фактический счётчик Markdown-файлов —\r\n 504, значит индекс надо поднять с 497 до 504.\r\n Сейчас внесу только нужные строки, без полной\r\n перегенерации всего индекса.\r\n\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 99 System/INDEX.md (\u001b[32m+9\u001b[0m \u001b[31m-3\u001b[0m)\r\n \u001b[2m 1 \u001b[0m \u001b[38;2;147;153;178m---\r\n\u001b[39;48;5;52m \u001b[2m 2 \u001b[31;22m-\u001b[38;2;205;214;244;2mgenerated: 2026-06-03\u001b[18X\r\n\u001b[39;22m \u001b[2m 3 \u001b[31;22m-\u001b[38;2;205;214;244;2mtotal: 497\r\n\u001b[39;48;5;22;22m \u001b[2m 2 \u001b[32;22m+\u001b[38;2;205;214;244mgenerated: 2026-06-04\u001b[18X\r\n\u001b[39m \u001b[2m 3 \u001b[32;22m+\u001b[38;2;205;214;244mtotal: 504\r\n\u001b[0m \u001b[2m 4 \u001b[0m \u001b[38;2;147;153;178m---\u001b[36X\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m 11 \u001b[0m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m----------\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m----------\u001b[38;2;147;153;178m|\r\n\u001b[39;48;5;52m \u001b[2m 12 \u001b[31;22m-\u001b[38;2;147;153;178;2m|\u001b[38;2;205;214;244m Всего заметок \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m 497 \u001b[38;2;147;153;178m|\u001b[16X\r\n\u001b[39;48;5;22;22m \u001b[2m 12 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m Всего заметок \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m 504 \u001b[38;2;147;153;178m|\u001b[16X\r\n\u001b[0m \u001b[2m 13\u001b[41X\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m474 \u001b[0m \u001b[38;2;205;214;244m| [[Networking - MOC]] | Networking - M\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mOC | stable | moc | [network, networkin\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mg] |\r\n\u001b[39;48;5;22m \u001b[2m475 \u001b[32;22m+\u001b[38;2;205;214;244m| [[OAuth 2.0]] | OAuth 2.0 | seed | co\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mncept | [web, security, oauth, authoriz\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mation] |\r\n\u001b[0m \u001b[2m476 \u001b[0m \u001b[38;2;205;214;244m| [[VLSM]] | VLSM | stable | concept |\u001b[1X\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22m[network, networking] |\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m478 \u001b[0m \u001b[38;2;205;214;244m| [[Базовая настройка коммутатора]] | Б\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mазовая Настройка Коммутатора | stable |\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22m concept | [network, networking] |\r\n\u001b[39;48;5;22m \u001b[2m479 \u001b[32;22m+\u001b[38;2;205;214;244m| [[Веб-аутентификация и авторизация]]\u001b[1X\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m| Идентификация, аутентификация и автор\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mизация | seed | concept | [web, securit\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22my, authentication, authorization, oauth\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m] |\r\n\u001b[0m \u001b[2m480 \u001b[0m \u001b[38;2;205;214;244m| [[Введение в сетевую безопасность]] |\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22m Введение в сетевую безопасность | seed\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22m | concept | [networking, security, inf\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mosec] |\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m486 \u001b[0m \u001b[38;2;205;214;244m| [[Пример настройки DHCPv6]] | Пример\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mНастройки DHCPv6 | stable | concept | [\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mnetwork, networking] |\r\n\u001b[39;48;5;22m \u001b[2m487 \u001b[32;22m+\u001b[38;2;205;214;244m| [[Подсети и маска подсети]] | Маска п\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mодсети, Подсети | seed | concept | [net\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mwork, networking, subnet, ipv4] |\r\n\u001b[0m \u001b[2m488 \u001b[0m \u001b[38;2;205;214;244m| [[Режимы передачи данных в сетях]] |\u001b[1X\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mРежимы Передачи Данных В Сетях | stable\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22m | concept | [network, networking] |\r\n\u001b[0m \u001b[2m489 \u001b[0m \u001b[38;2;205;214;244m| [[Сегментация сети]] | Сегментация Се\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mти | stable | concept | [network, netwo\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mrking] |\r\n\u001b[39;48;5;22m \u001b[2m490 \u001b[32;22m+\u001b[38;2;205;214;244m| [[Сетевые порты]] | Сетевые порты | s\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22meed | concept | [network, networking, p\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22morts, tcp, udp, web] |\r\n\u001b[0m \u001b[2m491 \u001b[0m \u001b[38;2;205;214;244m| [[Сетевые устройства]] | Сетевые Устр\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mойства | stable | concept | [network, n\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22metworking] |\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m520 \u001b[0m \u001b[38;2;205;214;244m| [[DNS]] | DNS | stable | concept | [n\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22metwork, networking, protocols, dns] |\r\n\u001b[39;48;5;22m \u001b[2m521 \u001b[32;22m+\u001b[38;2;205;214;244m| [[HTTP, HTTPS и HTTP3]] | HTTP, HTTPS\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m и HTTP/3 | seed | concept | [web, netw\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mork, networking, protocols, http, https\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m, http3] |\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22motocols, icmp] |\u001b[23X\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m525 \u001b[0m \u001b[38;2;205;214;244m| [[TCP vs UDP]] | TCP Vs UDP | stable\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22m| concept | [network, networking, proto\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mcols] |\r\n\u001b[39;48;5;22m \u001b[2m526 \u001b[32;22m+\u001b[38;2;205;214;244m| [[URI, URL, URN]] | URI, URL, URN | s\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22meed | concept | [web, network, networki\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mng, uri, url, urn] |\r\n\u001b[0m \u001b[2m527\u001b[41X\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"## 99 System/Archive$|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mПодготовка Speaking|Подготовка к экзамену\"\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22m\"99 System/INDEX.md\"\r\n\u001b[39;2m └ 3 matches in 1F:\r\n\r\n … +7 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m|...\r\n\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mДобавляю в раздел Archive сам Markdown-файл с\r\n исходным списком вопросов, который был в Inbox\r\n и теперь перенесён.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m INDEX.md\r\n\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 99 System/INDEX.md (\u001b[32m+1\u001b[0m \u001b[31m-0\u001b[0m)\r\n \u001b[2m652 \u001b[0m \u001b[38;2;205;214;244m| [[Подготовка к защите ЛР2]] | Подгото\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mвка к защите ЛР2 | processing | lab | [\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mmephi] |\r\n\u001b[39;48;5;22m \u001b[2m653 \u001b[32;22m+\u001b[38;2;205;214;244m| [[Подготовка к экзамену по Веб-Разраб\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mотке]] | — | seed | concept | [] |\r\n\u001b[0m\u001b[48X\r\n\u001b[2m• \u001b[0mПроверка выявила важный момент: в HTML-тексте\r\n есть буквальные примеры тегов вроде \u001b[36m<head>\u001b[0m и\r\n \u001b[36m<form>\u001b[0m. Браузер может воспринять их как\r\n разметку, поэтому экранирую такие примеры и\r\n пересоберу PDF.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"<(doctype|html|head|body|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mtitle|meta|link|style|script|div|p|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22msection|span|a |img|br|form|label|input|\r\n\u001b[39;2m │ … +5 lines\r\n └ 351 matches in 145F:\r\n\r\n … +460 lines (ctrl + t to view transcript)\r\n\r\n\u001b[0m \u001b[2m... +182\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mЭкранировать нужно не весь файл, а только\r\n примеры тегов внутри учебного текста. Правлю\r\n эти строки вручную, чтобы не задеть настоящую\r\n HTML-разметку документа.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m Подготовка к экзамену по веб-\r\n разработке.html\r\n\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 90 Library/Programming/Web/Подготовка к\r\nэкзамену по веб-разработке.html (\u001b[32m+6\u001b[0m \u001b[31m-6\u001b[0m)\r\n \u001b[2m400 \u001b[0m \u001b[38;2;205;214;244m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"cards\"\u001b[38;2;148;226;213m>\r\n\u001b[39;48;5;52m \u001b[2m401 \u001b[31;22m-\u001b[38;2;205;214;244;2m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"card\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mid\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"s-html-\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161mstructure\"\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mСтруктура документа\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m>\r\n\u001b[39;22m \u001b[2m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mHTML5-документ начинается с `<!docty\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mpe html>`, затем `\u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mhtml\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m`, внутри `\u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mhea\r\n\u001b[39;22m \u001b[2m \u001b[38;2;137;180;250md\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m` с метаданными и `\u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mbody\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m` с видимым\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mсодержимым.\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"detail-link\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mh\r\n\u001b[39;22m \u001b[2m \u001b[38;2;249;226;175mref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#d-html\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mПодробно: HTML\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m></\u001b[38;2;137;180;250martic\r\n\u001b[39;22m \u001b[2m \u001b[38;2;137;180;250mle\u001b[38;2;148;226;213m>\r\n\u001b[39;22m \u001b[2m402 \u001b[31;22m-\u001b[38;2;205;214;244;2m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"card\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mid\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"s-html-\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161mcomments\"\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mКомментарии в HTML\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mp\r\n\u001b[39;22m \u001b[2m \u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mКомментарий пишется как `\u001b[38;2;147;153;178m<!-- текст --\r\n\u001b[39;22m \u001b[2m \u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`. Браузер его не отображает, но он ви\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mден в исходном коде.\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"detai\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161ml-link\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#d-html\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mПодробно: HTML\u001b[38;2;148;226;213m</\r\n\u001b[39;22m \u001b[2m \u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m></\u001b[38;2;137;180;250marticle\u001b[38;2;148;226;213m>\r\n\u001b[39;22m \u001b[2m403 \u001b[31;22m-\u001b[38;2;205;214;244;2m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"card\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mid\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"s-head\"\r\n\u001b[39;22m \u001b[2m \u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mТеги внутри head\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mВ `\u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mhead\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m`\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m обычно находятся `\u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mtitle\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m`, `\u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mmeta\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m`,\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m`\u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mlink\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m`, `\u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mstyle\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m`, `<\u001b[38;2;137;180;250mscript\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m` и техни\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mческие данные страницы.</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mde\r\n\u001b[39;22m \u001b[2m \u001b[38;2;137;180;250mtail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-html\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: HTM\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mL</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39;22m \u001b[2m404 \u001b[31;22m-\u001b[38;2;205;214;244;2m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-meta\u001b[38;2;205;214;244m\"\r\n\u001b[39;22m \u001b[2m \u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mМета-теги и viewport</\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`<\u001b[38;2;137;180;250mmeta\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m charset=\"\u001b[38;2;137;180;250mutf-8\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m` задаёт кодировку. `v\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244miewport` нужен адаптивной вёрстке: `wid\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mth=\u001b[38;2;137;180;250mdevice-width\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m \u001b[38;2;137;180;250minitial-scale\u001b[38;2;205;214;244m=1.0`.</\u001b[38;2;137;180;250mp\r\n\u001b[39;22m \u001b[2m \u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-html\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mПодробно: HTML</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39;48;5;22;22m \u001b[2m401 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-html-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mstructure\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mСтруктура документа</\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mHTML5-документ начинается с <\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m&l\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mt;!doctype \u001b[38;2;137;180;250mhtml\u001b[38;2;205;214;244m></\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>,\u001b[38;2;205;214;244m затем <\u001b[38;2;137;180;250mcode\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mhtml\u001b[38;2;205;214;244m></\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>,\u001b[38;2;205;214;244m внутри <\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mhead\u001b[38;2;205;214;244m></\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m с метаданными и <\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m&\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mlt;\u001b[38;2;137;180;250mbody\u001b[38;2;205;214;244m></\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m с видимым содержимым\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m.</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-ht\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mml\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: HTML</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m402 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-html-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mcomments\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mКомментарии в HTML</\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244mКомментарий пишется как <\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<!--\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mтекст --></\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m. Браузер его не ото\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mбражает\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m но он виден в исходном коде.</\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-html\u001b[38;2;205;214;244m\"\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244mПодробно: HTML</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m403 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-head\u001b[38;2;205;214;244m\"\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mТеги внутри \u001b[38;2;137;180;250mhead\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ <\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m&l\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mt;\u001b[38;2;137;180;250mhead\u001b[38;2;205;214;244m></\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m обычно находятся <\u001b[38;2;137;180;250mcod\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22me\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mtitle\u001b[38;2;205;214;244m></\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>,\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mmeta\u001b[38;2;205;214;244m&\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mgt;</\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>,\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mlink\u001b[38;2;205;214;244m></\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m<\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mstyle\u001b[38;2;205;214;244m></\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>,\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ms\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mcript\u001b[38;2;205;214;244m></\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m и технические данные с\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mтраницы.</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-html\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: HTML</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m404 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-meta\u001b[38;2;205;214;244m\"\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mМета-теги и viewport</\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m<\u001b[38;2;137;180;250mmeta\u001b[38;2;205;214;244m charset=\"\u001b[38;2;137;180;250mutf-8\u001b[38;2;205;214;244m\"></\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m зад\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mаёт кодировку. <\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mviewport</\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m ну\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mжен адаптивной вёрстке: <\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mwidth=\u001b[38;2;137;180;250mdev\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mice-width\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m \u001b[38;2;137;180;250minitial-scale\u001b[38;2;205;214;244m=1.0</\u001b[38;2;137;180;250mcode\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m.</\u001b[38;2;137;180;250mp\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-html\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mПодробно: HTML</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[0m \u001b[2m405 \u001b[0m \u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-flow\u001b[38;2;205;214;244m\"\r\n\u001b[0m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНормальный поток</\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНормальный\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22m поток — базовое расположение элементов\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22m без flex/grid/position: блочные идут с\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mверху вниз\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m строчные текут внутри строк\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mи.</\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-h\r\n\u001b[0m \u001b[2m \u001b[38;2;249;226;175;22mtml\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: HTML</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m411 \u001b[0m \u001b[38;2;205;214;244m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"card\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mid\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"s-text-\r\n\u001b[0m \u001b[2m \u001b[38;2;166;227;161;22mtable\"\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mЗаголовки, абзацы, списки, т\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mаблицы\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m`h1-h6` задают структуру\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mзаголовков, `p` — абзац, `ul/ol/li` — с\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mписки, `table/tr/th/td` — табличные дан\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mные.\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"detail-link\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#d\r\n\u001b[0m \u001b[2m \u001b[38;2;166;227;161;22m-html\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mПодробно: HTML\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m></\u001b[38;2;137;180;250marticle\u001b[38;2;148;226;213m>\r\n\u001b[39;48;5;52m \u001b[2m412 \u001b[31;22m-\u001b[38;2;205;214;244;2m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"card\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mid\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"s-img-l\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161mink\"\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mКартинки и ссылки\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mСсылк\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mа: `\u001b[38;2;148;226;213m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"...\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m`. Картинка: `\u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mimg\u001b[38;2;205;214;244m \u001b[38;2;249;226;175msr\r\n\u001b[39;22m \u001b[2m \u001b[38;2;249;226;175mc\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"...\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175malt\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"...\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m`; `alt` важен для до\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mступности и случаев, когда изображение\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mне загрузилось.\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"detail-lin\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161mk\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#d-html\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mПодробно: HTML\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m></\u001b[38;2;137;180;250ma\r\n\u001b[39;22m \u001b[2m \u001b[38;2;137;180;250mrticle\u001b[38;2;148;226;213m>\r\n\u001b[39;22m \u001b[2m413 \u001b[31;22m-\u001b[38;2;205;214;244;2m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"card\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mid\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"s-white\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161mspace\"\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mПереносы строк и пробелы\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mh3\r\n\u001b[39;22m \u001b[2m \u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mВ HTML последовательности пробелов\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mсхлопываются. Перенос строки в коде обы\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mчно не равен переносу на странице; для\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mявного переноса есть `\u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mbr\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m`.\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclas\r\n\u001b[39;22m \u001b[2m \u001b[38;2;249;226;175ms\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"detail-link\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#d-html\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mПодробно\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m: HTML\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m></\u001b[38;2;137;180;250marticle\u001b[38;2;148;226;213m>\r\n\u001b[39;48;5;22;22m \u001b[2m412 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"card\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mid\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"s-img-l\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22mink\"\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mКартинки и ссылки\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mСсылк\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mа: \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mcode\u001b[38;2;148;226;213m>\u001b[38;2;243;139;168m<\u001b[38;2;205;214;244ma href=\"...\"\u001b[38;2;243;139;168m>\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mcode\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m. К\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mартинка: \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mcode\u001b[38;2;148;226;213m>\u001b[38;2;243;139;168m<\u001b[38;2;205;214;244mimg src=\"...\" alt=\".\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m..\"\u001b[38;2;243;139;168m>\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mcode\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m; \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mcode\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244malt\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mcode\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m важен\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mдля доступности и случаев, когда изобра\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mжение не загрузилось.\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"deta\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22mil-link\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#d-html\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mПодробно: HTML\u001b[38;2;148;226;213m<\r\n\u001b[39m \u001b[2m \u001b[38;2;148;226;213;22m/\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m></\u001b[38;2;137;180;250marticle\u001b[38;2;148;226;213m>\r\n\u001b[39m \u001b[2m413 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"card\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mid\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"s-white\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22mspace\"\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mПереносы строк и пробелы\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mh3\r\n\u001b[39m \u001b[2m \u001b[38;2;148;226;213;22m><\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mВ HTML последовательности пробелов\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mсхлопываются. Перенос строки в коде обы\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mчно не равен переносу на странице; для\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mявного переноса есть \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mcode\u001b[38;2;148;226;213m>\u001b[38;2;243;139;168m<\u001b[38;2;205;214;244mbr\u001b[38;2;243;139;168m>\u001b[38;2;148;226;213m</\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mcode\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m.\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"detail-link\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22m#d-html\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mПодробно: HTML\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m></\u001b[38;2;137;180;250marticle\u001b[38;2;148;226;213m>\r\n\u001b[0m \u001b[2m414 \u001b[0m \u001b[38;2;205;214;244m \u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mdiv\u001b[38;2;148;226;213m>\u001b[29X\r\n\r\n\u001b[31;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"\u001b[38;2;147;153;178m`\u001b[38;2;148;226;213m<|>\u001b[38;2;147;153;178m`\u001b[38;2;166;227;161m|<code>[^<]*<[^/]|<\"\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22m\"90 Library/Programming/Web/Подготовка к\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mэкзамену по веб-разработке.html\"\r\n\u001b[39;2m └ zsh:1: parse error near `|'\r\n\u001b[0m \u001b[2mzsh:1: parse error in command substitution\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'`<'\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Programming/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mWeb/Подготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mвеб-разработке.html\"\r\n\u001b[39;2m └ 1 matches in 1F:\r\n\r\n … +4 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2mtr><tr><td>`POST`</td>...\r\n\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'<'\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mProgramming/Web/Подготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mвеб-разработке.html\"\r\n\u001b[39;2m └ 7 matches in 7F:\r\n\r\n … +21 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2mclass=\"detai...\r\n\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'>`'\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Programming/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mWeb/Подготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mвеб-разработке.html\"\r\n\r\n\r\n\u001b[39;2m────────────────────────────────────────────────\r\n\r\n• \u001b[0mКритичные \u001b[36m<...>\u001b[0m-примеры исправлены.\r\n Пересобираю PDF, чтобы он соответствовал\r\n исправленному HTML.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mchromium\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mheadless\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mno-sandbox\r\n\u001b[39;2m │ \u001b[38;2;147;153;178;22m--\u001b[38;2;235;160;172mdisable-gpu\r\n\u001b[39;2m │ \u001b[38;2;147;153;178;22m--\u001b[38;2;235;160;172mprint-to-pdf\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"/home/ada/Documents/Vaults\r\n\u001b[39;2m │ … +4 lines\r\n └ 475983 bytes written to file /home/ada/\r\n\u001b[0m \u001b[2mDocuments/Vaults/SecondBrain/90 Library/\r\n\u001b[0m \u001b[2mProgramming/Web/Подготовка к экзамену по\r\n\u001b[0m \u001b[2mвеб-разработке.pdf\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mДобавлю ссылку на готовый HTML/PDF в\r\n существующий MOC экзамена и уберу устаревший\r\n список “недостающих” тем, потому что HTTP/3 и\r\n OAuth теперь закрыты отдельными заметками.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m Экзамен - Веб-ориентированные\r\n\u001b[2m \u001b[0mсистемы.md\r\n\r\n\u001b[2m────────────────────────────────────────────────\r\n\r\n• \u001b[0mMOC оказался действительно устаревшим только\r\n по сетевым недостающим темам. Оставляю его\r\n коротким: добавляю готовый файл подготовки и\r\n новые сетевые ссылки.\r\n\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 90 Library/Programming/Web/Экзамен -\r\nВеб-ориентированные системы.md (\u001b[32m+6\u001b[0m \u001b[31m-6\u001b[0m)\r\n \u001b[2m 6 \u001b[0m \u001b[38;2;205;214;244mcreated: 2026-06-01\r\n\u001b[39;48;5;52m \u001b[2m 7 \u001b[31;22m-\u001b[38;2;205;214;244;2mupdated: 2026-06-01\u001b[21X\r\n\u001b[39;48;5;22;22m \u001b[2m 7 \u001b[32;22m+\u001b[38;2;205;214;244mupdated: 2026-06-04\u001b[21X\r\n\u001b[0m \u001b[2m 8 \u001b[0m \u001b[38;2;205;214;244msource: \"[[Экзамен.pdf]]\"\u001b[15X\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m18 \u001b[0m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m :--- \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m :--- \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m :--- \u001b[38;2;147;153;178m|\r\n\u001b[39;48;5;52m \u001b[2m19 \u001b[31;22m-\u001b[38;2;147;153;178;2m|\u001b[38;2;205;214;244m **Сети и основы** \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m IPv4/v6, TCP, DNS,\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m HTTP, OAuth 2.0 \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m [[IPv6]], [[TCP vs UD\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mP]], [[DNS]] \u001b[38;2;147;153;178m|\r\n\u001b[39;48;5;22;22m \u001b[2m \u001b[38;2;205;214;244;22mтке.html]]\u001b[30X\r\n\u001b[39m \u001b[2m26 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[Подготовка к экзамену по веб-разрабо\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mтке.pdf]]\r\n\u001b[0m \u001b[2m27\u001b[42X\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mФинальная проверка: якоря HTML, PDF после\r\n пересборки, пустой Inbox, архивированные\r\n исходники и итоговый git status.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mList\u001b[0m python3 -c \"import re, pathlib;\r\n p=pathlib.Path(\\\"90 Library/\r\n Programming/\r\n Web/Подготовка к экзамену по веб-\r\n разработке.html\\\"); s=p.read_text();\r\n ids=set(re.findall(r\\\"id=\\\\\\\"([\"'^'\"\\\\\r\n \\\"]+)\\\\\\\"\\\", s));\r\n print(\\\"duplicate_ids\\\",\r\n len(re.findall(r\\\"id=\\\\\\\"([\"'^'\"\\\\\r\n \\\"]+)\\\\\r\n \\\"\\\", s))-len(ids)); print(\\\"ids\\\",\r\n len(ids), \\\"hash_links\\\", len(hrefs))\"\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mfile\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Programming/Web/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mПодготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mвеб-разработке.pdf\"\r\n\u001b[39;2m └ 90 Library/Programming/Web/Подготовка к\r\n\u001b[0m \u001b[2mэкзамену по веб-разработке.pdf: PDF\r\n\u001b[0m \u001b[2mdocument, version 1.4, 8 page(s)\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m ls\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mla\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"00 Inbox\"\r\n\u001b[39;2m └ (empty)\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m ls\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mla\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"99 System/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mArchive/00_базовые_понятия.pdf\"\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"99\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mSystem/Archive/Подготовка к экзамену по\r\n\u001b[39;2m │ … +1 lines\r\n └ 99 System/Archive/00_базовые_понятия.pdf\r\n\u001b[0m \u001b[2m967.5K\r\n\u001b[0m \u001b[2m99 System/Archive/Подготовка к экзамену по\r\n\u001b[0m \u001b[2mВеб-Разработке.md 7.5K\r\n\r\n•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mSearch\u001b[0m *.md\u001b[2m in \u001b[0m.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m git status\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mshort\r\n\u001b[39;2m └ M .obsidian/workspace.json\r\n\u001b[0m \u001b[2m M \"90 Library/Programming/Web/Подготовка к\r\n … +3 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m M \"90 Library/Programming/Web/Экзамен -\r\n\u001b[0m \u001b[2mВеб-ориентированные системы.md\"\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m git diff\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mstat\r\n\u001b[39;2m └ .obsidian/workspace.json\r\n\u001b[0m \u001b[2m| 20 ++++++++------------\r\n … +7 lines (ctrl + t to view transcript)\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mpdftotext\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Programming/Web/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mПодготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mвеб-разработке.pdf\"\u001b[38;2;205;214;244m - \u001b[38;2;148;226;213m|\u001b[38;2;205;214;244m \u001b[38;2;137;180;250msed\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'1,80p'\r\n\u001b[39;2m └ 04.06.2026, 09:27\r\n\r\n … +76 lines (ctrl + t to view transcript)\r\n\r\n\u001b[0m \u001b[2mtextarea\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[36;22mgit status\u001b[0m в коротком виде не показывает новые\r\n Markdown-заметки, похоже, из-за правил\r\n отслеживания/ignore. Проверю явным режимом\r\n \u001b[36m--untracked-files=all\u001b[0m и наличие созданных\r\n файлов на диске.\r\n\r\n \u001b[2m M \"90 Library/Programming/Web/Подготовка к\r\n … +3 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m M \"90 Library/Programming/Web/Экзамен -\r\n\u001b[0m \u001b[2mВеб-ориентированные системы.md\"\r\n\r\n•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mList\u001b[0m HTTP, HTTPS и HTTP3.md\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m ls\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mla\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Networking/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mПротоколы/HTTP, HTTPS и HTTP3.md\"\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mLibrary/Networking/Протоколы/URI, URL,\r\n\u001b[39;2m │ … +5 lines\r\n └ 90 Library/Networking/OAuth 2.0.md 2.5K\r\n\u001b[0m \u001b[2mURN.md 2.3K\r\n\u001b[0m \u001b[2m90 Library/Networking/Сетевые порты.md 1.9K\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mСозданные сетевые заметки уже находятся под\r\n git-tracking, поэтому не попали как untracked.\r\n Проверю, что индекс действительно обновлён в\r\n файле и не расходится с фактическим счётчиком.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m INDEX.md\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"HTTP, HTTPS и HTTP3|OAuth\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22m2.0|Подготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mВеб-Разработке|total: 504|Всего заметок \\|\r\n\u001b[39;2m │ … +1 lines\r\n └ 5 matches in 2F:\r\n\r\n … +12 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m|...\r\n\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m git diff\u001b[38;2;148;226;213m --\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"99 System/INDEX.md\"\r\n\u001b[39;2m └\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mPDF сейчас содержит стандартный chromium-\r\n header с датой. Пересоберу с флагом без\r\n header/footer, чтобы файл выглядел как\r\n самостоятельный конспект.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mchromium\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mheadless\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mno-sandbox\r\n\u001b[39;2m │ \u001b[38;2;147;153;178;22m--\u001b[38;2;235;160;172mdisable-gpu\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mno-pdf-header-footer\r\n\u001b[39;2m │ \u001b[38;2;147;153;178;22m--\u001b[38;2;235;160;172mprint-to-pdf\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"/home/ada/Documents/Vaults\r\n\u001b[39;2m │ … +4 lines\r\n └ 440516 bytes written to file /home/ada/\r\n\u001b[0m \u001b[2mDocuments/Vaults/SecondBrain/90 Library/\r\n\u001b[0m \u001b[2mProgramming/Web/Подготовка к экзамену по\r\n\u001b[0m \u001b[2mвеб-разработке.pdf\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mfile\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Programming/Web/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mПодготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mвеб-разработке.pdf\"\r\n\u001b[39;2m └ 90 Library/Programming/Web/Подготовка к\r\n\u001b[0m \u001b[2mэкзамену по веб-разработке.pdf: PDF\r\n\u001b[0m \u001b[2mdocument, version 1.4, 8 page(s)\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m git status\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mshort\r\n\u001b[39;2m │ \u001b[38;2;147;153;178;22m--\u001b[38;2;235;160;172muntracked-files\u001b[38;2;148;226;213m=\u001b[38;2;205;214;244mall\r\n\u001b[39;2m └ M .obsidian/workspace.json\r\n\u001b[0m \u001b[2m M \"90 Library/Programming/Web/Подготовка к\r\n … +3 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m M \"90 Library/Programming/Web/Экзамен -\r\n\u001b[0m \u001b[2mВеб-ориентированные системы.md\"\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mpdftotext\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Programming/Web/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mПодготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mвеб-разработке.pdf\"\u001b[38;2;205;214;244m - \u001b[38;2;148;226;213m|\u001b[38;2;205;214;244m \u001b[38;2;137;180;250msed\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'1,24p'\r\n\u001b[39;2m └ Подготовка к экзамену по веб-разработке\r\n\u001b[0m \u001b[2mКраткий конспект по темам из файла\r\n … +23 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2mDNS\r\n\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mГотово.\r\n\r\n Создал файл подготовки:\r\n\r\n - \u001b[36m90 Library/Programming/Web/Подготовка к\r\n\u001b[0m \u001b[36mэкзамену по веб-разработке.pdf\u001b[0m — 8 страниц,\r\n без chromium header/footer.\r\n\r\n Проинджестил блок 1 в подробные заметки:\r\n Также обновил MOC \u001b[36m90 Library/Programming/Web/\r\n\u001b[0m \u001b[36mЭкзамен - Веб-ориентированные системы.md\u001b[0m и \u001b[36m99\r\n\u001b[0m \u001b[36mSystem/INDEX.md\u001b[0m.\r\n\r\n Исходники перенёс в архив:\r\n\r\n - \u001b[36m99 System/Archive/00_базовые_понятия.pdf\r\n\u001b[0m - \u001b[36m99 System/Archive/Подготовка к экзамену по\r\n\u001b[0m \u001b[36mВеб-Разработке.md\r\n\r\n\u001b[0m Проверки: якоря HTML без битых ссылок и\r\n дублей, PDF пересобран, \u001b[36m00 Inbox\u001b[0m пустой. В git\r\n ещё висит изменённый \u001b[36m.obsidian/workspace.json\u001b[0m;\r\n я его не трогал.\r\n\r\n\u001b[2m─ Worked for 6m 32s ────────────────────────────\r\n\r\n\u001b[48;5;238;22m\u001b[48X\r\n\u001b[1;2m› \u001b[22;22mКакой лучше инструмент скачать для экспорта в\r\n pdf?\r\n И убери ссылки напрямую на Vault, просто\r\n заметки из vault впиши полностью в этот\r\n конспект, В короткой инфе - самое важно, в\r\n подробной - всё, что есть\r\n\r\n\u001b[0m\u001b[48X\r\n\u001b[2m• \u001b[0mПлан: сначала отвечу по инструменту экспорта с\r\n опорой на актуальные официальные источники,\r\n затем перепишу HTML так, чтобы подробные блоки\r\n содержали полный текст заметок из vault без\r\n прямых ссылок на \u001b[36m.md\u001b[0m. После этого пересоберу\r\n PDF и проверю якоря.\r\n\r\n\u001b[2m◦\u001b[0m \u001b[1mSearching the web\r\n\r\n\u001b[22;2m•\u001b[0m \u001b[1mSearched\u001b[0m Chrome headless print to pdf command\r\n official documentation\r\n\r\n\u001b[2m────────────────────────────────────────────────\r\n\r\n• \u001b[0mПо инструменту коротко: для этого кейса лучше\r\n не скачивать отдельный конвертер, а\r\n использовать уже установленный Chromium\r\n headless. Он официально поддерживает \u001b[36m--print-\r\n\u001b[0m \u001b[36mto-pdf\u001b[0m и \u001b[36m--no-pdf-header-footer\u001b[0m; для HTML с\r\n якорями и браузерной CSS-вёрсткой это самый\r\n предсказуемый вариант. \u001b[36mWeasyPrint\u001b[0m хорош для\r\n печатной CSS-вёрстки, но может отличаться от\r\n браузерного рендера; \u001b[36mpandoc\u001b[0m сильнее для\r\n Markdown/LaTeX-документов, а PDF обычно\r\n требует отдельный PDF engine. Сейчас переделаю\r\n конспект под твоё требование.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mwhich\u001b[38;2;205;214;244m pandoc\r\n\u001b[39;2m └ /usr/bin/pandoc\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"<section class=\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161mdetails\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161m|</\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22msection>|note-source|Vault:\"\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mProgramming/Web/Подготовка к экзамену по\r\n\u001b[39;2m │ … +1 lines\r\n └ 33 matches in 25F:\r\n\r\n … +83 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m 693: </section>\r\n\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m wc\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172ml\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Programming/Web/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mПодготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mвеб-разработке.html\"\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/\r\n\u001b[39;2m │ … +17 lines\r\n └ 698 веб-разработке.html\r\n\u001b[0m \u001b[2m123 HTTP3.md\r\n … +10 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m190 CUD.md\r\n\u001b[0m \u001b[2mΣ 2207\r\n\r\n────────────────────────────────────────────────\r\n │ \u001b[38;2;166;227;161;22mimport re\r\n\u001b[39;2m │ … +287 lines\r\n └ (no output)\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mПодробная часть заменена. Проверяю, что не\r\n осталось ссылок на \u001b[36m.md\u001b[0m, что якоря целые, и что\r\n все прежние короткие ссылки ведут в\r\n существующие подробные блоки.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'href=\"[^\"]+\\.md|\\.md\">|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mVault:|note-source|data-note-title'\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mLibrary/Programming/Web/Подготовка к\r\n\u001b[39;2m │ … +1 lines\r\n … +32 lines (ctrl + t to view transcript)\r\n\r\n\u001b[0m \u001b[2m... +9\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m wc\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172ml\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Programming/Web/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mПодготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mвеб-разработке.html\"\r\n\u001b[39;2m └ 2591\r\n\r\n•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mList\u001b[0m python3 -c \"import re, pathlib;\r\n p=pathlib.Path(\\\"90 Library/\r\n Programming/\r\n Web/Подготовка к экзамену по веб-\r\n hrefs=re.findall(r\\\"href=\\\\\\\"#([\"'^'\"\\\\\r\n \\\"]+)\\\\\\\"\\\", s); print(\\\"missing\\\",\r\n len(re.findall(r\\\"id=\\\\\\\"([\"'^'\"\\\\\r\n \\\"]+)\\\\\r\n \\\"\\\", s))-len(ids)); print(\\\"ids\\\",\r\n len(ids), \\\"hash_links\\\", len(hrefs))\"\r\n \u001b[36mRead\u001b[0m Подготовка к экзамену по веб-\r\n разработке.html\r\n\r\n\u001b[2m────────────────────────────────────────────────\r\n\r\n• \u001b[36;22mpandoc\u001b[0m добавил одинаковые \u001b[36mid\u001b[0m на заголовки\r\n внутри вставленных заметок, это может ломать\r\n якоря. Уберу эти внутренние \u001b[36mid\u001b[0m, оставлю только\r\n наши управляемые якоря карточек и подробных\r\n\u001b[2m │ \u001b[38;2;166;227;161;22mfrom pathlib import Path\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mimport re\r\n\u001b[39;2m │ … +18 lines\r\n └ (no output)\r\n\r\n• \u001b[0mModel interrupted to submit steer\r\ninstructions.\r\n\r\n\u001b[48;5;238m\u001b[48X\r\n\u001b[1;2m› \u001b[22;22mИ фотки сломались, почини их тоже\r\n\r\n\u001b[0m\u001b[48X\r\n\u001b[2m• \u001b[0mПонял. Сейчас проверю все \u001b[36m<img src=...>\u001b[0m из\r\n HTML: какие пути не существуют относительно\r\n файла конспекта, исправлю относительные пути/\r\n кодирование и пересоберу PDF.\r\n\r\n\u001b[31;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mpython3\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mc\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'import bs4;\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mprint(bs4.__version__)'\r\n\u001b[39;2m └ Traceback (most recent call last):\r\n\u001b[0m \u001b[2m File \"<string>\", line 1, in <module>\r\n•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mSearch\u001b[0m *.png\u001b[2m in \u001b[0m90 Library\r\n\r\n\u001b[31;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mpython3\u001b[38;2;205;214;244m - \u001b[38;2;148;226;213m<<\u001b[38;2;166;227;161m'\u001b[38;2;203;166;247mPY\u001b[38;2;166;227;161m'\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mfrom pathlib import Path\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mfrom bs4 import BeautifulSoup\r\n\u001b[39;2m │ … +23 lines\r\n └ Traceback (most recent call last):\r\n\u001b[0m \u001b[2m File \"<stdin>\", line 2, in <module>\r\n\u001b[0m \u001b[2mModuleNotFoundError: No module named 'bs4'\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mПричина уже видна: в \u001b[36m90 Library\u001b[0m нет ни одного\r\n локального изображения, а подробные заметки\r\n содержали ссылки вида \u001b[36m\u001b[0m.\r\n Значит они ломаются не из-за HTML, а потому\r\n что исходных файлов картинок нет рядом с\r\n заметками. Сейчас найду, есть ли эти\r\n изображения в vault в других папках; если нет\r\n — уберу битые \u001b[36m<img>\u001b[0m из конспекта и оставлю\r\n подписи/текст, чтобы PDF был без сломанных\r\n картинок.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mSearch\u001b[0m *.png\u001b[2m in \u001b[0m.\r\n \u001b[36mSearch\u001b[0m *.png\u001b[2m in \u001b[0m.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mpython3\u001b[38;2;205;214;244m - \u001b[38;2;148;226;213m<<\u001b[38;2;166;227;161m'\u001b[38;2;203;166;247mPY\u001b[38;2;166;227;161m'\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mfrom pathlib import Path\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mfrom urllib.parse import unquote\r\n\u001b[39;2m │ … +19 lines\r\n └ imgs 15\r\n\u001b[0m \u001b[2mMISS ../../Networking/Протоколы/\r\n … +34 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2mhome/ada/Documents/Vaults/SecondBrain/90\r\n\u001b[0m \u001b[2mLibrary/Networking/3_NAT_image.png\r\n\r\n\u001b[0m•\u001b[1C\u001b[1mWorki\u001b[0mn\u001b[2mg\u001b[1C(2m 01s • esc to interrupt)\r\n\r\n\u001b[48;5;238;22m \u001b[47X\r\n\u001b[1m›\u001b[22m \u001b[2mSummarize recent commits\r\n\u001b[22m \r\n\u001b[0m\u001b[2X\u001b[2C\u001b[38;2;246;226;183mgpt-5.5 high\u001b[39;2m · \u001b[38;2;171;223;167;22m~/Documents/Vaults/SecondBrain\u001b[1X\u001b[2A\u001b[45D\u001b[0m",
|
||
"rows": 34,
|
||
"scrollLine": -1
|
||
}
|
||
}
|
||
},
|
||
"pinned": true,
|
||
"icon": "terminal",
|
||
"title": "Terminal: ⠋ SecondBrain"
|
||
}
|
||
},
|
||
{
|
||
"id": "1ef10fc51fc1f1e1",
|
||
"type": "leaf",
|
||
"pinned": true,
|
||
"state": {
|
||
"type": "git-view",
|
||
"state": {},
|
||
"pinned": true,
|
||
"icon": "git-pull-request",
|
||
"title": "Source Control"
|
||
}
|
||
},
|
||
{
|
||
"id": "394fb6e28d09b8f3",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "all-properties",
|
||
"state": {
|
||
"sortOrder": "frequency",
|
||
"showSearch": false,
|
||
"searchQuery": ""
|
||
},
|
||
"icon": "lucide-archive",
|
||
"title": "All properties"
|
||
}
|
||
},
|
||
{
|
||
"id": "e51be669e29cd994",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "backlink",
|
||
"state": {
|
||
"file": "90 Library/Programming/Web/Основы HTML (структура, таблицы, формы).md",
|
||
"collapseAll": false,
|
||
"extraContext": false,
|
||
"sortOrder": "alphabetical",
|
||
"showSearch": false,
|
||
"searchQuery": "",
|
||
"backlinkCollapsed": false,
|
||
"unlinkedCollapsed": true
|
||
},
|
||
"icon": "links-coming-in",
|
||
"title": "Backlinks for Основы HTML (структура, таблицы, формы)"
|
||
}
|
||
},
|
||
{
|
||
"id": "86ea4ddeaafff092",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "outgoing-link",
|
||
"state": {
|
||
"file": "90 Library/Programming/Ruby On Rails/Sidekiq - основа работы.md",
|
||
"linksCollapsed": false,
|
||
"unlinkedCollapsed": true
|
||
},
|
||
"icon": "links-going-out",
|
||
"title": "Outgoing links from Sidekiq - основа работы"
|
||
}
|
||
},
|
||
{
|
||
"id": "a0ffd3bace615787",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "outline",
|
||
"state": {
|
||
"file": "00 Inbox/Экзамен - MOC.md",
|
||
"followCursor": false,
|
||
"showSearch": false,
|
||
"searchQuery": ""
|
||
},
|
||
"icon": "lucide-list",
|
||
"title": "Outline of Экзамен - MOC"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"direction": "horizontal",
|
||
"width": 482
|
||
},
|
||
"left-ribbon": {
|
||
"hiddenItems": {
|
||
"switcher:Open quick switcher": false,
|
||
"graph:Open graph view": false,
|
||
"canvas:Create new canvas": false,
|
||
"daily-notes:Open today's daily note": false,
|
||
"templates:Insert template": false,
|
||
"command-palette:Open command palette": false,
|
||
"markdown-importer:Open format converter": false,
|
||
"random-note:Open random note": false,
|
||
"audio-recorder:Start/stop recording": false,
|
||
"bases:Create new base": false,
|
||
"omnisearch:Omnisearch": false,
|
||
"templater-obsidian:Templater": false,
|
||
"obsidian-git:Open Git source control": false,
|
||
"obsidian-excalidraw-plugin:New drawing": false,
|
||
"terminal:Open terminal": false,
|
||
"3d-graph-new:Global 3D Graph": false
|
||
}
|
||
},
|
||
"active": "06940eb960fc1db5",
|
||
"lastOpenFiles": [
|
||
"90 Library/Programming/Web/Подготовка к экзамену по веб-разработке.pdf",
|
||
"90 Library/Programming/Programming - MOC.md",
|
||
"99 System/Archive/00_базовые_понятия.pdf",
|
||
"99 System/Archive/Подготовка к экзамену по Веб-Разработке.md",
|
||
"90 Library/Networking/Веб-аутентификация и авторизация.md",
|
||
"90 Library/Programming/Web/Подготовка к экзамену по веб-разработке.html",
|
||
"90 Library/Programming/Web/Адаптивность, Flexbox и Grid.md",
|
||
"90 Library/Programming/Web/Основы веб-разработки.md",
|
||
"90 Library/Programming/Web/Основы Bootstrap.md",
|
||
"90 Library/Programming/Web/Основы HTML (структура, таблицы, формы).md",
|
||
"90 Library/Programming/Web/Основы, селекторы и блочная модель.md",
|
||
"90 Library/Programming/Web/Экзамен - Веб-ориентированные системы.md",
|
||
"90 Library/Networking/OAuth 2.0.md",
|
||
"90 Library/Networking/Подсети и маска подсети.md",
|
||
"90 Library/Networking/Сетевые порты.md",
|
||
"90 Library/Networking/Протоколы/URI, URL, URN.md",
|
||
"90 Library/Networking/Протоколы/HTTP, HTTPS и HTTP3.md",
|
||
"00 Inbox/Подготовка к экзамену по Веб-Разработке.md",
|
||
"00 Inbox/00_базовые_понятия.pdf",
|
||
"99 System/Archive/Основные команды git.md",
|
||
"99 System/Archive/Подготовка к защите ЛР2.md",
|
||
"99 System/Archive/Подготовка к экзамену по Экономическому анализу.md",
|
||
"AGENTS.md",
|
||
"90 Library/Other/Сканер отпечатка пальцев.md",
|
||
"00 Inbox/Краткая теория с важными формулами по нечетким выводам.sync-conflict-20260603-140755-23DMR5O.md",
|
||
"90 Library/Programming/Python/Работа с формами и CUD.md",
|
||
"90 Library/Programming/Python/Представления, шаблоны и CBV.md",
|
||
"90 Library/Programming/Python/Модели и ORM.md",
|
||
"90 Library/Programming/Python/Базовый синтаксис и основы.md",
|
||
"04 Tools/StudyTracker/Courses",
|
||
"04 Tools/StudyTracker/Books",
|
||
"04 Tools/SocialBase/04 Другие",
|
||
"04 Tools/SocialBase/03 Коллеги",
|
||
"04 Tools/SocialBase/02 Друзья",
|
||
"04 Tools/SocialBase/01 Семья",
|
||
"99 System/Cache/Pasted image 20260526204029.png",
|
||
"99 System/Cache/Pasted image 20260526203848.png",
|
||
"99 System/Cache/Pasted image 20260526203807.png",
|
||
"99 System/Cache/Pasted image 20260521134256.png",
|
||
"99 System/Cache/Pasted image 20260521134238.png",
|
||
"99 System/Cache/Pasted image 20260521134228.png",
|
||
"99 System/Cache/Pasted image 20260521134207.png",
|
||
"99 System/Cache/Pasted image 20260521133832.png",
|
||
"99 System/Cache/Pasted image 20260521133824.png",
|
||
"99 System/Cache/Pasted image 20260521133344.png",
|
||
"00 Inbox/Untitled.canvas"
|
||
]
|
||
} |