Initial commit

This commit is contained in:
d.klimov
2026-01-20 16:11:38 +03:00
commit d42b28060e
50 changed files with 15886 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
.obsidian/workspace.json
.obsidian/workspace-mobile.json
.trash/

11
.obsidian/app.json vendored Normal file
View File

@@ -0,0 +1,11 @@
{
"pdfExportSettings": {
"includeName": true,
"pageSize": "Letter",
"landscape": false,
"margin": "0",
"downscalePercent": 100
},
"readableLineLength": false,
"promptDelete": false
}

6
.obsidian/appearance.json vendored Normal file
View File

@@ -0,0 +1,6 @@
{
"showViewHeader": true,
"enabledCssSnippets": [
"wide-editor"
]
}

6
.obsidian/community-plugins.json vendored Normal file
View File

@@ -0,0 +1,6 @@
[
"obsidian-excalidraw-plugin",
"calendar",
"obsidian-kanban",
"obsidian-icon-folder"
]

33
.obsidian/core-plugins.json vendored Normal file
View File

@@ -0,0 +1,33 @@
{
"file-explorer": true,
"global-search": true,
"switcher": true,
"graph": true,
"backlink": true,
"canvas": true,
"outgoing-link": true,
"tag-pane": true,
"footnotes": false,
"properties": false,
"page-preview": true,
"daily-notes": true,
"templates": true,
"note-composer": true,
"command-palette": true,
"slash-command": false,
"editor-status": true,
"bookmarks": true,
"markdown-importer": false,
"zk-prefixer": false,
"random-note": false,
"outline": true,
"word-count": true,
"slides": false,
"audio-recorder": false,
"workspaces": false,
"file-recovery": true,
"publish": false,
"sync": true,
"bases": true,
"webviewer": false
}

22
.obsidian/graph.json vendored Normal file
View File

@@ -0,0 +1,22 @@
{
"collapse-filter": true,
"search": "",
"showTags": false,
"showAttachments": false,
"hideUnresolved": false,
"showOrphans": true,
"collapse-color-groups": true,
"colorGroups": [],
"collapse-display": true,
"showArrow": false,
"textFadeMultiplier": 0,
"nodeSizeMultiplier": 1,
"lineSizeMultiplier": 1,
"collapse-forces": true,
"centerStrength": 0.518713248970312,
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 1,
"close": true
}

10
.obsidian/hotkeys.json vendored Normal file
View File

@@ -0,0 +1,10 @@
{
"editor:toggle-source": [
{
"modifiers": [
"Mod"
],
"key": "["
}
]
}

1
.obsidian/page-preview.json vendored Normal file
View File

@@ -0,0 +1 @@
{}

10
.obsidian/plugins/calendar/data.json vendored Normal file
View File

@@ -0,0 +1,10 @@
{
"shouldConfirmBeforeCreate": true,
"weekStart": "locale",
"wordsPerDot": 250,
"showWeeklyNote": false,
"weeklyNoteFormat": "",
"weeklyNoteTemplate": "",
"weeklyNoteFolder": "",
"localeOverride": "system-default"
}

4459
.obsidian/plugins/calendar/main.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,10 @@
{
"id": "calendar",
"name": "Calendar",
"description": "Calendar view of your daily notes",
"version": "1.5.10",
"author": "Liam Cain",
"authorUrl": "https://github.com/liamcain/",
"isDesktopOnly": false,
"minAppVersion": "0.9.11"
}

View File

@@ -0,0 +1,819 @@
{
"copyLinkToElemenetAnchorTo100": false,
"copyFrameLinkByName": false,
"disableDoubleClickTextEditing": false,
"folder": "Excalidraw",
"cropFolder": "",
"annotateFolder": "",
"embedUseExcalidrawFolder": false,
"templateFilePath": "Excalidraw/Template.excalidraw",
"scriptFolderPath": "Excalidraw/Scripts",
"fontAssetsPath": "Excalidraw/CJK Fonts",
"loadChineseFonts": false,
"loadJapaneseFonts": false,
"loadKoreanFonts": false,
"compress": true,
"decompressForMDView": false,
"onceOffCompressFlagReset": true,
"onceOffGPTVersionReset": true,
"autosave": true,
"autosaveIntervalDesktop": 60000,
"autosaveIntervalMobile": 30000,
"drawingFilenamePrefix": "Drawing ",
"drawingEmbedPrefixWithFilename": true,
"drawingFilnameEmbedPostfix": " ",
"drawingFilenameDateTime": "YYYY-MM-DD HH.mm.ss",
"useExcalidrawExtension": true,
"cropSuffix": "",
"cropPrefix": "cropped_",
"annotateSuffix": "",
"annotatePrefix": "annotated_",
"annotatePreserveSize": false,
"previewImageType": "SVGIMG",
"renderingConcurrency": 3,
"allowImageCache": true,
"allowImageCacheInScene": true,
"displayExportedImageIfAvailable": false,
"previewMatchObsidianTheme": false,
"width": "400",
"height": "",
"overrideObsidianFontSize": false,
"dynamicStyling": "colorful",
"isLeftHanded": false,
"desktopUIMode": "tray",
"tabletUIMode": "compact",
"iframeMatchExcalidrawTheme": true,
"matchTheme": false,
"matchThemeAlways": false,
"matchThemeTrigger": false,
"defaultMode": "normal",
"defaultPenMode": "never",
"penModeDoubleTapEraser": true,
"penModeSingleFingerPanning": true,
"penModeCrosshairVisible": true,
"panWithRightMouseButton": false,
"renderImageInMarkdownReadingMode": false,
"renderImageInHoverPreviewForMDNotes": false,
"renderImageInMarkdownToPDF": false,
"allowPinchZoom": false,
"allowWheelZoom": false,
"zoomToFitOnOpen": true,
"zoomToFitOnResize": false,
"zoomToFitMaxLevel": 2,
"zoomStep": 0.05,
"zoomMin": 0.1,
"zoomMax": 30,
"linkPrefix": "📍",
"urlPrefix": "🌐",
"parseTODO": false,
"todo": "☐",
"done": "🗹",
"hoverPreviewWithoutCTRL": false,
"linkOpacity": 1,
"openInAdjacentPane": true,
"showSecondOrderLinks": true,
"focusOnFileTab": true,
"openInMainWorkspace": true,
"showLinkBrackets": false,
"syncElementLinkWithText": false,
"allowCtrlClick": true,
"forceWrap": false,
"pageTransclusionCharLimit": 200,
"wordWrappingDefault": 0,
"removeTransclusionQuoteSigns": true,
"iframelyAllowed": true,
"pngExportScale": 1,
"exportWithTheme": true,
"exportWithBackground": true,
"exportPaddingSVG": 10,
"exportEmbedScene": false,
"keepInSync": false,
"autoexportSVG": false,
"autoexportPNG": false,
"autoExportLightAndDark": false,
"autoexportExcalidraw": false,
"embedType": "excalidraw",
"embedMarkdownCommentLinks": true,
"embedWikiLink": true,
"syncExcalidraw": false,
"experimentalFileType": false,
"experimentalFileTag": "✏️",
"experimentalLivePreview": true,
"fadeOutExcalidrawMarkup": false,
"loadPropertySuggestions": false,
"experimentalEnableFourthFont": false,
"experimantalFourthFont": "Virgil",
"addDummyTextElement": false,
"zoteroCompatibility": false,
"fieldSuggester": true,
"compatibilityMode": false,
"drawingOpenCount": 0,
"library": "deprecated",
"library2": {
"type": "excalidrawlib",
"version": 2,
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/2.19.2",
"libraryItems": []
},
"imageElementNotice": true,
"mdSVGwidth": 500,
"mdSVGmaxHeight": 800,
"mdFont": "Virgil",
"mdFontColor": "Black",
"mdBorderColor": "Black",
"mdCSS": "",
"scriptEngineSettings": {},
"previousRelease": "2.19.2",
"showReleaseNotes": true,
"compareManifestToPluginVersion": true,
"showNewVersionNotification": true,
"latexBoilerplate": "\\color{blue}",
"latexPreambleLocation": "preamble.sty",
"taskboneEnabled": false,
"taskboneAPIkey": "",
"pinnedScripts": [],
"sidepanelTabs": [],
"customPens": [
{
"type": "default",
"freedrawOnly": false,
"strokeColor": "#000000",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": 0,
"penOptions": {
"highlighter": false,
"constantPressure": false,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 0.6,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "easeOutSine",
"start": {
"cap": true,
"taper": 0,
"easing": "linear"
},
"end": {
"cap": true,
"taper": 0,
"easing": "linear"
}
}
}
},
{
"type": "highlighter",
"freedrawOnly": true,
"strokeColor": "#FFC47C",
"backgroundColor": "#FFC47C",
"fillStyle": "solid",
"strokeWidth": 2,
"roughness": null,
"penOptions": {
"highlighter": true,
"constantPressure": true,
"hasOutline": true,
"outlineWidth": 4,
"options": {
"thinning": 1,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "linear",
"start": {
"taper": 0,
"cap": true,
"easing": "linear"
},
"end": {
"taper": 0,
"cap": true,
"easing": "linear"
}
}
}
},
{
"type": "finetip",
"freedrawOnly": false,
"strokeColor": "#3E6F8D",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0.5,
"roughness": 0,
"penOptions": {
"highlighter": false,
"hasOutline": false,
"outlineWidth": 1,
"constantPressure": true,
"options": {
"smoothing": 0.4,
"thinning": -0.5,
"streamline": 0.4,
"easing": "linear",
"start": {
"taper": 5,
"cap": false,
"easing": "linear"
},
"end": {
"taper": 5,
"cap": false,
"easing": "linear"
}
}
}
},
{
"type": "fountain",
"freedrawOnly": false,
"strokeColor": "#000000",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 2,
"roughness": 0,
"penOptions": {
"highlighter": false,
"constantPressure": false,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"smoothing": 0.2,
"thinning": 0.6,
"streamline": 0.2,
"easing": "easeInOutSine",
"start": {
"taper": 150,
"cap": true,
"easing": "linear"
},
"end": {
"taper": 1,
"cap": true,
"easing": "linear"
}
}
}
},
{
"type": "marker",
"freedrawOnly": true,
"strokeColor": "#B83E3E",
"backgroundColor": "#FF7C7C",
"fillStyle": "dashed",
"strokeWidth": 2,
"roughness": 3,
"penOptions": {
"highlighter": false,
"constantPressure": true,
"hasOutline": true,
"outlineWidth": 4,
"options": {
"thinning": 1,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "linear",
"start": {
"taper": 0,
"cap": true,
"easing": "linear"
},
"end": {
"taper": 0,
"cap": true,
"easing": "linear"
}
}
}
},
{
"type": "thick-thin",
"freedrawOnly": true,
"strokeColor": "#CECDCC",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": null,
"penOptions": {
"highlighter": true,
"constantPressure": true,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 1,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "linear",
"start": {
"taper": 0,
"cap": true,
"easing": "linear"
},
"end": {
"cap": true,
"taper": true,
"easing": "linear"
}
}
}
},
{
"type": "thin-thick-thin",
"freedrawOnly": true,
"strokeColor": "#CECDCC",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": null,
"penOptions": {
"highlighter": true,
"constantPressure": true,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 1,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "linear",
"start": {
"cap": true,
"taper": true,
"easing": "linear"
},
"end": {
"cap": true,
"taper": true,
"easing": "linear"
}
}
}
},
{
"type": "default",
"freedrawOnly": false,
"strokeColor": "#000000",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": 0,
"penOptions": {
"highlighter": false,
"constantPressure": false,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 0.6,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "easeOutSine",
"start": {
"cap": true,
"taper": 0,
"easing": "linear"
},
"end": {
"cap": true,
"taper": 0,
"easing": "linear"
}
}
}
},
{
"type": "default",
"freedrawOnly": false,
"strokeColor": "#000000",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": 0,
"penOptions": {
"highlighter": false,
"constantPressure": false,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 0.6,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "easeOutSine",
"start": {
"cap": true,
"taper": 0,
"easing": "linear"
},
"end": {
"cap": true,
"taper": 0,
"easing": "linear"
}
}
}
},
{
"type": "default",
"freedrawOnly": false,
"strokeColor": "#000000",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": 0,
"penOptions": {
"highlighter": false,
"constantPressure": false,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 0.6,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "easeOutSine",
"start": {
"cap": true,
"taper": 0,
"easing": "linear"
},
"end": {
"cap": true,
"taper": 0,
"easing": "linear"
}
}
}
}
],
"numberOfCustomPens": 0,
"pdfScale": 4,
"pdfBorderBox": true,
"pdfFrame": false,
"pdfGapSize": 20,
"pdfGroupPages": false,
"pdfLockAfterImport": true,
"pdfNumColumns": 1,
"pdfNumRows": 1,
"pdfDirection": "right",
"pdfImportScale": 0.3,
"gridSettings": {
"DYNAMIC_COLOR": true,
"COLOR": "#000000",
"OPACITY": 50,
"GRID_DIRECTION": {
"horizontal": true,
"vertical": true
}
},
"laserSettings": {
"DECAY_LENGTH": 50,
"DECAY_TIME": 1000,
"COLOR": "#ff0000"
},
"embeddableMarkdownDefaults": {
"useObsidianDefaults": false,
"backgroundMatchCanvas": false,
"backgroundMatchElement": true,
"backgroundColor": "#fff",
"backgroundOpacity": 60,
"borderMatchElement": true,
"borderColor": "#fff",
"borderOpacity": 0,
"filenameVisible": false
},
"markdownNodeOneClickEditing": false,
"canvasImmersiveEmbed": true,
"startupScriptPath": "",
"aiEnabled": true,
"openAIAPIToken": "",
"openAIDefaultTextModel": "gpt-3.5-turbo-1106",
"openAIDefaultTextModelMaxTokens": 4096,
"openAIDefaultVisionModel": "gpt-4o",
"openAIDefaultImageGenerationModel": "dall-e-3",
"openAIURL": "https://api.openai.com/v1/chat/completions",
"openAIImageGenerationURL": "https://api.openai.com/v1/images/generations",
"openAIImageEditsURL": "https://api.openai.com/v1/images/edits",
"openAIImageVariationURL": "https://api.openai.com/v1/images/variations",
"modifierKeyConfig": {
"Mac": {
"LocalFileDragAction": {
"defaultAction": "image-import",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-import"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": true,
"meta_ctrl": false,
"result": "link"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-url"
},
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": true,
"meta_ctrl": false,
"result": "embeddable"
}
]
},
"WebBrowserDragAction": {
"defaultAction": "image-url",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-url"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": true,
"meta_ctrl": false,
"result": "link"
},
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": true,
"meta_ctrl": false,
"result": "embeddable"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-import"
}
]
},
"InternalDragAction": {
"defaultAction": "link",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "link"
},
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": true,
"result": "embeddable"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": true,
"result": "image-fullsize"
}
]
},
"LinkClickAction": {
"defaultAction": "new-tab",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "active-pane"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "new-tab"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": true,
"meta_ctrl": false,
"result": "new-pane"
},
{
"shift": true,
"ctrl_cmd": true,
"alt_opt": true,
"meta_ctrl": false,
"result": "popout-window"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": true,
"result": "md-properties"
}
]
}
},
"Win": {
"LocalFileDragAction": {
"defaultAction": "image-import",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-import"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "link"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-url"
},
{
"shift": true,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "embeddable"
}
]
},
"WebBrowserDragAction": {
"defaultAction": "image-url",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-url"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "link"
},
{
"shift": true,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "embeddable"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-import"
}
]
},
"InternalDragAction": {
"defaultAction": "link",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "link"
},
{
"shift": true,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "embeddable"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": true,
"meta_ctrl": false,
"result": "image-fullsize"
}
]
},
"LinkClickAction": {
"defaultAction": "new-tab",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "active-pane"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "new-tab"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": true,
"meta_ctrl": false,
"result": "new-pane"
},
{
"shift": true,
"ctrl_cmd": true,
"alt_opt": true,
"meta_ctrl": false,
"result": "popout-window"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": true,
"result": "md-properties"
}
]
}
}
},
"slidingPanesSupport": false,
"areaZoomLimit": 1,
"longPressDesktop": 500,
"longPressMobile": 500,
"doubleClickLinkOpenViewMode": true,
"isDebugMode": false,
"rank": "Bronze",
"modifierKeyOverrides": [
{
"modifiers": [
"Mod"
],
"key": "Enter"
},
{
"modifiers": [
"Mod"
],
"key": "k"
},
{
"modifiers": [
"Mod"
],
"key": "G"
}
],
"showSplashscreen": true,
"pdfSettings": {
"pageSize": "A4",
"pageOrientation": "portrait",
"fitToPage": 1,
"paperColor": "white",
"customPaperColor": "#ffffff",
"alignment": "center",
"margin": "normal"
},
"disableContextMenu": false
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,12 @@
{
"id": "obsidian-excalidraw-plugin",
"name": "Excalidraw",
"version": "2.19.2",
"minAppVersion": "1.5.7",
"description": "Sketch Your Mind. An Obsidian plugin to edit and view Excalidraw drawings. Enter the world of 4D Visual PKM.",
"author": "Zsolt Viczian",
"authorUrl": "https://excalidraw-obsidian.online",
"fundingUrl": "https://ko-fi.com/zsolt",
"helpUrl": "https://github.com/zsviczian/obsidian-excalidraw-plugin#readme",
"isDesktopOnly": false
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,31 @@
{
"settings": {
"migrated": 6,
"iconPacksPath": ".obsidian/icons",
"fontSize": 16,
"emojiStyle": "native",
"iconColor": null,
"recentlyUsedIcons": [],
"recentlyUsedIconsSize": 5,
"rules": [],
"extraMargin": {
"top": 0,
"right": 4,
"bottom": 0,
"left": 0
},
"iconInTabsEnabled": false,
"iconInTitleEnabled": false,
"iconInTitlePosition": "above",
"iconInFrontmatterEnabled": false,
"iconInFrontmatterFieldName": "icon",
"iconColorInFrontmatterFieldName": "iconColor",
"iconsBackgroundCheckEnabled": false,
"iconsInNotesEnabled": true,
"iconsInLinksEnabled": true,
"iconIdentifier": ":",
"lucideIconPackType": "native",
"debugMode": false,
"useInternalPlugins": false
}
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,10 @@
{
"id": "obsidian-icon-folder",
"name": "Iconize",
"version": "2.14.7",
"minAppVersion": "0.9.12",
"description": "Add icons to anything you desire in Obsidian, including files, folders, and text.",
"author": "Florian Woelki",
"authorUrl": "https://florianwoelki.com/",
"isDesktopOnly": false
}

View File

@@ -0,0 +1,120 @@
.iconize-inline-title-wrapper {
width: var(--line-width);
max-width: var(--max-width);
margin-inline: var(--content-margin);
}
.iconize-title-icon {
max-width: var(--max-width);
margin-right: var(--size-4-2);
}
.iconize-icon-in-link {
transform: translateY(20%);
margin-right: var(--size-2-2);
display: inline-flex;
}
.iconize-icon {
border: 1px solid transparent;
margin: 0px 4px 0px 0px;
display: flex;
align-self: center;
margin: auto 0;
}
.nav-folder-title,
.nav-file-title {
align-items: center;
}
.iconize-setting input[type='color'] {
margin: 0 6px;
}
.iconize-modal.prompt-results {
margin: 0;
overflow-y: auto;
display: grid;
grid-template-columns: repeat(5, minmax(0, 1fr));
}
.prompt .iconize-subheadline {
margin-top: 12px;
font-size: 12px;
color: gray;
grid-column-start: 1;
grid-column-end: 6;
}
@media (max-width: 640px) {
.iconize-modal.prompt-results {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.prompt .iconize-subheadline {
grid-column-end: 4;
}
}
.iconize-modal.prompt-results .suggestion-item {
cursor: pointer;
white-space: pre-wrap;
display: flex;
justify-content: flex-end;
align-items: center;
flex-direction: column-reverse;
text-align: center;
font-size: 13px;
color: var(--text-muted);
padding: 16px 8px;
line-break: auto;
word-break: break-word;
line-height: 1.3;
}
.iconize-modal.prompt-results .suggestion-item.suggestion-item__center {
justify-content: center;
}
.iconize-icon-preview {
font-size: 22px;
}
.iconize-icon-preview img {
width: 16px;
height: 16px;
}
.iconize-icon-preview svg {
width: 24px;
height: 24px;
color: currentColor;
margin-bottom: 4px;
}
.iconize-dragover {
position: relative;
}
.iconize-dragover-el {
position: absolute;
width: 100%;
height: 100%;
color: var(--text-normal);
background-color: var(--background-secondary-alt);
display: flex;
align-items: center;
justify-content: center;
}
/* Custom rule modal. */
.iconize-custom-modal .modal-content {
display: flex;
align-items: center;
justify-content: center;
}
.iconize-custom-modal .modal-content input {
width: 100%;
margin-right: 0.5rem;
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,11 @@
{
"id": "obsidian-kanban",
"name": "Kanban",
"version": "2.0.51",
"minAppVersion": "1.0.0",
"description": "Create markdown-backed Kanban boards in Obsidian.",
"author": "mgmeyers",
"authorUrl": "https://github.com/mgmeyers/obsidian-kanban",
"helpUrl": "https://publish.obsidian.md/kanban/Obsidian+Kanban+Plugin",
"isDesktopOnly": false
}

File diff suppressed because one or more lines are too long

16
.obsidian/snippets/wide-editor.css vendored Normal file
View File

@@ -0,0 +1,16 @@
/* Убираем ограничение ширины */
.workspace-leaf-content {
max-width: none;
}
/* Расширяем область редактирования */
.markdown-source-view .cm-editor,
.markdown-preview-view {
max-width: none;
width: 100%;
}
/* Убираем ограничение читаемой длины строки */
.cm-content {
max-width: none;
}

View File

@@ -0,0 +1,51 @@
## Внутренние вопросы
### Отправка комментария - в рамках MVP не будет
- К чему относится комментарий (какой объект)
- Нужно ли будет что-то делать после получения комментария (отправлять Email, создавать напоминание, задачу или что-то другое)
- Логирование происходит на стороне ELMA или BPMSoft
- Данные в поле `approver` (я так понимаю это Контакт в CRM) в каком формате будут
Это будет Id контакта из CRM?
### Отправка данных по сделке
- Какой триггер у срабатывания данного метода со стороны BPMSoft - переработать логику кнопки "Отправить на согласование"
- Нужно ли как-то сохранять информацию об отправке данных в ELMA
- Если мы получаем не успешный ответ (!= 200 код), то какие сообщения на каждый код ответа показываем пользователю
### Итоговая цепочка согласований
- Это будет новый объект в системе CRM или будет просто текстовое поле в объекте Сделка
- Формат поля `chain_of_approval` в данном методе
### Отправка комментария из BPMSoft - в рамках MVP не будет
- Какой триггер у срабатывания данного метода со стороны BPMSoft
- В каком объекте будут происходить изменения
- Формат данных в поле `initiator` (это просто Id контакта из CRM)
### Отправка результата согласования
- Формат данных в поле `resolution`
Если это справочное поле, то нужно будет синхронизировать справочники, чтобы я мог по Id искать значение в справочнике
### Отмена сделки
- Какой триггер у данного события
На данный момент не существует отмены сделки, есть только `Lost` статус
## Вопросы к ELMA
### Отправка данных по сделке
- Хотелось бы увидеть полный пример формата данных в JSON
(Набор полей, их параметры и типы)
- Какие бывают коды ответов (200, 500, 401 и т. д.)
- Формат ответа после получения данных от CRM в формате JSON
```json
{
"status": 200,
"errorMessage": ""
}
```

View File

@@ -0,0 +1,200 @@
## Отправка цепочки согласований
### Основные моменты
1. URI для запроса
1. Dev `https://crm-dev.itdev.adsw.io/ServiceModel/ElmaService.svc/CreateChainOfApproval`
2. Prod `https://crm.adsw.io/ServiceModel/ElmaService.svc/CreateChainOfApproval`
2. Header для запроса `X-Elma-Service`
3. Значение Header должно храниться в системе ELMA и быть зашифрованным (для dev и prod стендов разные значения). Будут переданы позднее
4. Перед выполнением запроса необходимо расшифровать значение Header и добавить его в запрос
5. В поле `chain_of_approval` отправляются `email` по порядку, исходя из цепочки согласований
### Примеры
```
curl --location 'https://crm-dev.itdev.adsw.io/ServiceModel/ElmaService.svc/CreateChainOfApproval' \
--header 'X-Elma-Service: 123' \
--header 'Content-Type: application/json' \
--data '{
"id_crm": "123-123",
"chain_of_approval": "test1@mail.com"
}'
```
### Специальные условия
1. По матрице согласования нет подходящих условий
- Согласование происходит автоматически в системе ELMA
- ELMA отправляет запрос в формате
```json
{
    "id_crm": "035e0f7b-18d2-4f24-87d8-59f107110a01",
    "chain_of_approval": "Согласовано"
}
```
- BPMSoft при получении такого ответа автоматически согласовывает условие
### Примеры ответов
Успешный ответ
```json
{
"status": 200,
"error_message": ""
}
```
Отсутствует заголовок авторизации или он неверный
```json
{
"status": 403,
"error_message": "Выполнение запрещено. Проверьте все необходимые данные"
}
```
Пустое тело
```json
{
"status": 400,
"error_message": "Значение поля id_crm не может быть пустым"
}
```
Отсутствует поле `id_crm` или его значение пустое
```json
{
"status": 400,
"error_message": "Значение поля id_crm не может быть пустым"
}
```
Отсутствует поле `chain_of_approval` или его значение пустое
```json
{
"status": 400,
"error_message": "Значение поля chain_of_approval не может быть пустым"
}
```
Согласование с Id из поля `id_crm` не найдено в BPMSoft
```json
{
"status": 400,
"error_message": "Согласование с Id {0} не найдено в системе BPMSoft. Проверьте корректность запроса"
}
```
Контакт с email из поля `chain_of_approval` не найден в BPMSoft
```json
{
"status": 400,
"error_message": "Контакт с email {0} не найден в системе. Проверьте корректность запроса"
}
```
Внутренняя ошибка BPMSoft
```json
{
"status": 500,
"error_message": "Ошибка в процессе обработки"
}
```
## Отправка результата согласования
### Основные моменты
1. URI для запроса
1. Dev `https://crm-dev.itdev.adsw.io/ServiceModel/ElmaService.svc/ChangeApproverResolution`
2. Prod `https://crm.adsw.io/ServiceModel/ElmaService.svc/ChangeApproverResolution`
2. Header для запроса `X-Elma-Service`
3. Значение Header должно храниться в системе ELMA и быть зашифрованным (для dev и prod стендов разные значения). Будут переданы позднее
4. Перед выполнением запроса необходимо расшифровать значение Header и добавить его в запрос
5. В поле `approver` отправляется `email` согласующего
6. В поле `resolution` отправляется строка, один из вариантов ("Согласовано" или "Отклонено")
### Примеры
```
curl --location 'https://crm-dev.itdev.adsw.io/ServiceModel/ElmaService.svc/ChangeApproverResolution' \
--header 'X-Elma-Service: 123' \
--header 'Content-Type: application/json' \
--data-raw '{
"id_crm": "123-123",
"approver": "test@mail.com",
"resolution": "Согласовано"
}'
```
###
### Примеры ответов
Успешный ответ
```json
{
"status": 200,
"error_message": ""
}
```
Отсутствует заголовок авторизации или он неверный
```json
{
"status": 403,
"error_message": "Выполнение запрещено. Проверьте все необходимые данные"
}
```
Пустое тело
```json
{
"status": 400,
"error_message": "Значение поля id_crm не может быть пустым"
}
```
Отсутствует поле `id_crm` или его значение пустое
```json
{
"status": 400,
"error_message": "Значение поля id_crm не может быть пустым"
}
```
Отсутствует поле `approver` или его значение пустое
```json
{
"status": 400,
"error_message": "Значение поля approver не может быть пустым"
}
```
Отсутствует поле `resolution` или его значение пустое
```json
{
"status": 400,
"error_message": "Значение поля resolution не может быть пустым"
}
```
Согласование с Id из поля `id_crm` не найдено в BPMSoft
```json
{
"status": 400,
"error_message": "Согласование с Id {0} не найдено в системе BPMSoft. Проверьте корректность запроса"
}
```
Контакт с email из поля `approver` не найден в BPMSoft
```json
{
"status": 400,
"error_message": "Контакт с email {0} не найден в системе. Проверьте корректность запроса"
}
```
Внутренняя ошибка BPMSoft
```json
{
"status": 500,
"error_message": "Ошибка в процессе обработки"
}
```

View File

@@ -0,0 +1,36 @@
1. Добавить в `appsettings.json`
1. ```json
"BPMSoft.Configuration.ElmaService.ElmaService": [
"/ServiceModel/ElmaService.svc"
],
```
2. Добавить в `BPMSoft.WebHost.dll.config`
1. `<add key="AllowedLocations" value="ServiceModel/ElmaService.svc;...`
3. Добавить логи
```json
<logger name="ElmaSyncHelper" writeTo="ElmaSyncHelperAppender" minlevel="Debug" final="true" />
<logger name="ElmaService" writeTo="ElmaServiceAppender" minlevel="Debug" final="true" />
```
```js
callElmaService: function () {
const request = {
Id_crm: this.get("Id"),
chain_of_approval: "test1, test2"
};
const config = {
serviceName: "ElmaService",
methodName: "CreateOrderApproval",
data: {
request: request
}
};
this.callService(config, function(response) {
debugger;
}, this)
},
```

View File

@@ -0,0 +1,57 @@
## Получение данных о сделке из BPMSoft
- Отправляем один большой запрос со всеми необходимыми данными после срабатывания триггера на стороне BPMSoft
- По полям из объекта `test` в запросе необходимо будет создавать новую запись в приложении `Продукты спецификации ()`
-
| Объект CRM | Поле CRM | Код поля CRM | Тип поля | Объект ELMA | Код ELMA | Тип поля | Новое в CRM | Новое в ELMA |
| ------------------ | ------------------------------ | ---------------------- | ----------------------- | ----------------- | ----------------------------------- | -------- | :---------: | :----------: |
| NrbApproval | | | | transaction_terms | | | | |
| | Id согласования | Id | uuid | | | | - | |
| | Id сделки | NrbOrderId | uuid | | | | - | |
| | Номер сделки | NrbNumber | string | | number | string | | - |
| | Создал | CreatedById | uuid | | | | - | |
| | Статус | NrbStateDeal | uuid | | state_deal | | - | |
| | Клиент | NrbClient | uuid | | | | - | |
| | Партнер Арены | NrbPartner | uuid | | | | - | |
| | Дистрибьютор | NrbDistributor | uuid | | | | - | |
| | Сумма сделки | NrbAmountDeal | decimal | | amount_deal | money | - | - |
| | Общая скидка | NrbAverageDiscount | decimal | | discount | decimal | - | - |
| | Отсрочка | | integer | | deadment | integer | + | - |
| | Рассрочка | NrbInstallment | uuid | | | | + | |
| | Стоимость поддержки | | decimal | | the_cost_of_support | decimal | + | - |
| | Лицензии без поддержки | | bool | | license_without_support | bool | + | - |
| | Отложенная поддержка | NrbDeferredSupport | uuid | | | | + | |
| | Гарантийная поддержка | NrbWarrantySupport | uuid | | | | + | |
| | Поддержка в виде | | uuid | | | | + | |
| | PriceHold Лицензий | NrbLicensePriceHold | uuid | | | | + | |
| | PriceHold Поддержка | NrbSupportPriceHold | uuid | | | | + | |
| | PriceHold Консалтинг | NrbConsultingPriceHold | uuid | | | | + | |
| | Другие значимые условия сделки | | string | | other_significant_transaction_terms | string | + | - |
| | | | | | | | | |
| NrbApprovalProduct | | | | product_approval | | | | |
| | Продукт | NrbProductId | uuid | | | | | |
| | Количество | Quantity | int | | | | | |
| | Стоимость с учетом скидки | TotalAmount | decimal | | | | | |
| | Цена за период | Price | decimal | | | | | |
| | Форма контрактования | NrbContractForm | uuid (NrbContractForm) | | | | | |
| | Дата старта | NrbStartDate | date | | | | | |
| | Дата завершения | NrbEndDate | date | | | | | |
| | Период | NrbPeriod | uuid (NrbProductPeriod) | | | | | |
| | | | | | | | | |
Пример запроса от BPMSoft в ELMA
```json
```
## Доработки на стороне ELMA
id_approval - удалить
| Что нужно сделать | Ответственный | | | |
| ----------------- | ------------- | --- | --- | --- |
| | | | | |
| | | | | |
| | | | | |

9
Commands Claude.md Normal file
View File

@@ -0,0 +1,9 @@
Получить статистику по дням
```bash
npx ccusage@latest
```
Получить статистику в режиме реального времени
```bash
npx ccusage@latest blocks --live
```

20
Commands.md Normal file
View File

@@ -0,0 +1,20 @@
Найти процессы по порту
```bash
netstat -ano | findstr :9090 | findstr LISTENING
```
Убить процесс
```bash
taskkill /PID 8768 /F
powershell.exe -Command "Stop-Process -Id 8768 -Force"
```
Запустить npx приложение на порту
```bash
cd D:/Pet_projects/savings/react-app/savings-mobile && npx serve dist -p 3000
```
```
46U8w7EdHd6CBdrd3TyA
```

35
Hysteria2.md Normal file
View File

@@ -0,0 +1,35 @@
https://blitz.digital-home.site:443/eb4643570d60cb40ef62b5bc7c7b92c4/
```js
callTemporalService: function () {
const serviceOptions = {
// ClientData: {
// Name: this.get("Name"), // AccountId: this.get("Id") // }, OrderData: {
OrderName: this.get("Number"),
OrderDate: this.get("NrbStartDate"),
ClientId: "123-123",
ManagerProjectId: "00123036",
HeadProjectId: "00123037",
DirectorProjectId: "00123038",
OrderAmount: this.get("NrbAmountDeal"),
ProductAttribute: 1,
ProjectId: "",
OrderId: this.get("Id")
} };
ServiceHelper.callService("PresaleProjectService", "CreatePresaleProject", function (response) {
}, serviceOptions, this);
},
```
19 - 100000 (ap +)
20 - 150000 (изменение + - согласование идет) - 1 заявка
21 - 120000 () - 1 заявка (нужно перевыпуск)
22 - ... (успешный ответ) - 1 заявка успех, 2 заявку отправляем
Нужно перевыпустить (логическое - не изменяемое) - Да
Новая
Зарегистрирована
На изменении (изменение данных + согласование)

View File

@@ -0,0 +1,13 @@
Есть идея продавать готовые комплекты умного дома для людей
Есть ключевая потребность, что Алиса и остальные моменты очень дорогие, так как для устройств Zigbee нужно покупать более дорогую колонку, хочется сделать более дешевый проект, чтобы люди могли купить коробочку, в которой уже все будет настроено и им пришлось бы просто подключить ее к Алисе минимальными затратами и управлять своим умным домом через колонку, приложение или настройку автоматизаций через приложение.
Главная идея купить Raspberry Pi, корпус и установить туда необходимый софт для работы
1. Нужно понять какую версию и с какими характеристиками нужно покупать Raspberry Pi для различных задач
1. Минимальный набор умного дома - Home Assistant с установленными интеграциями
2. Набор умного дома + облако - Home Assistant и Nextcloud
3. Умный дом и медиаплеер - Home Assistant + Plex + QbitTorrent
2. Нужно сделать так, чтобы люди просто покупали коробочку, делали минимальную настройку и минимальные трудозатраты и могли подключаться к своим серверам в независимости от того, где они находятся (нужно продумать как делать красивый URL для их дома, они могут сами придумывать домен для доступа к сервисами)
3. Нужно посчитать сколько примерно денег будет стоить каждый проект, который я описал в пункте 1
4. Нужно подумать возможная ли такая реализация и какие шаги должны будет выполнить пользователь для подключения коробочки и начала работы с ней, трудозатраты пользователя должны быть минимальны
5. Подключение новых устройств умного дома должно быть быстрым и не особо сложным
-----------------

454
Smart home.md Normal file
View File

@@ -0,0 +1,454 @@
## Этап 1: Подготовка железа и Proxmox
**1.1 Установка Proxmox**
- Скачайте Proxmox VE ISO с официального сайта
- Создайте загрузочную флешку (Rufus/Etcher)
- Установите Proxmox на мини-ПК
- После установки заходите в веб-интерфейс: `https://IP-адрес:8006`
**1.2 Базовая настройка Proxmox**
bash
```bash
# Подключитесь по SSH к Proxmox
# Отключите enterprise репозиторий (если нет подписки)
nano /etc/apt/sources.list.d/pve-enterprise.list
# Закомментируйте строку (#)
# Добавьте community репозиторий
nano /etc/apt/sources.list
# Добавьте: deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
# Обновите систему
apt update && apt upgrade -y
```
## Этап 2: Регистрация домена и настройка Cloudflare
**2.1 Регистрация домена на reg.ru**
- Зарегистрируйте домен (например, `mysmarthome.ru`)
- Не настраивайте пока ничего на reg.ru
**2.2 Перенос DNS на Cloudflare**
- Создайте бесплатный аккаунт на cloudflare.com
- Добавьте ваш домен ("Add site")
- Cloudflare покажет nameservers (типа `ns1.cloudflare.com`)
- Зайдите в личный кабинет reg.ru → Управление доменом → DNS-серверы
- Замените DNS-серверы reg.ru на серверы Cloudflare
- Ждите 24 часа (обычно происходит быстрее)
**2.3 Базовая настройка Cloudflare**
- В Cloudflare: SSL/TLS → выберите **"Full (strict)"**
- Включите: "Always Use HTTPS"
## Этап 3: Создание LXC контейнера для Home Assistant
**3.1 Создание LXC через Proxmox**
bash
```bash
# В веб-интерфейсе Proxmox:
# Create CT → выберите:
# - Template: Debian 12
# - RAM: 3072 MB
# - CPU: 2 cores
# - Disk: 32 GB
# - Network: DHCP (запомните IP)
# - Unprivileged: снимите галочку (для Home Assistant нужен privileged)
```
**3.2 Установка Home Assistant в LXC**
bash
```bash
# Подключитесь к LXC через консоль Proxmox
apt update && apt upgrade -y
# Установите зависимости
apt install -y curl wget network-manager apparmor
# Установите Home Assistant через скрипт
curl -Lo installer.sh https://get.hass.io
bash installer.sh
```
Через 10-15 минут Home Assistant будет доступен: `http://IP-LXC:8123`
## Этап 4: Создание VM с Docker
**4.1 Создание Ubuntu VM**
bash
```bash
# В Proxmox веб-интерфейсе:
# Скачайте Ubuntu Server 24.04 ISO
# Create VM:
# - RAM: 10240 MB (10 ГБ)
# - CPU: 4 cores
# - Disk: 200 GB
# - Network: DHCP
```
**4.2 Установка Docker и Portainer**
bash
```bash
# Подключитесь к VM по SSH
# Обновите систему
sudo apt update && sudo apt upgrade -y
# Установите Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Добавьте текущего пользователя в группу docker
sudo usermod -aG docker $USER
# Перелогиньтесь
# Установите Docker Compose
sudo apt install docker-compose-plugin -y
# Установите Portainer
docker volume create portainer_data
docker run -d \
-p 9000:9000 \
-p 9443:9443 \
--name=portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
```
Portainer доступен: `https://IP-VM:9443`
## Этап 5: Установка сервисов через Docker Compose
**5.1 Создайте структуру папок**
bash
```bash
mkdir -p ~/docker/{gitea,nextcloud,adguard,vaultwarden,cloudflared}
cd ~/docker
```
**5.2 Gitea**
bash
```bash
cd ~/docker/gitea
nano docker-compose.yml
```
yaml
```yaml
version: "3"
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: always
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea_password
volumes:
- ./data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
depends_on:
- db
db:
image: postgres:15-alpine
restart: always
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=gitea_password
- POSTGRES_DB=gitea
volumes:
- ./postgres:/var/lib/postgresql/data
```
bash
```bash
docker compose up -d
```
**5.3 Nextcloud**
bash
```bash
cd ~/docker/nextcloud
nano docker-compose.yml
```
yaml
```yaml
version: '3'
services:
db:
image: postgres:15-alpine
restart: always
volumes:
- ./db:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=nextcloud_password
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
redis:
image: redis:alpine
restart: always
app:
image: nextcloud:latest
restart: always
ports:
- 8080:80
volumes:
- ./data:/var/www/html
environment:
- POSTGRES_HOST=db
- POSTGRES_PASSWORD=nextcloud_password
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- REDIS_HOST=redis
depends_on:
- db
- redis
```
bash
```bash
docker compose up -d
```
**5.4 AdGuard Home**
bash
```bash
cd ~/docker/adguard
nano docker-compose.yml
```
yaml
```yaml
version: '3'
services:
adguard:
image: adguard/adguardhome:latest
container_name: adguardhome
restart: always
ports:
- "53:53/tcp"
- "53:53/udp"
- "3001:3000/tcp"
volumes:
- ./work:/opt/adguardhome/work
- ./conf:/opt/adguardhome/conf
```
bash
```bash
docker compose up -d
```
**5.5 Vaultwarden**
bash
```bash
cd ~/docker/vaultwarden
nano docker-compose.yml
```
yaml
```yaml
version: '3'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
ports:
- "8081:80"
volumes:
- ./data:/data
environment:
- DOMAIN=https://vault.yourdomain.ru
```
bash
```bash
docker compose up -d
```
## Этап 6: Настройка Cloudflare Tunnel
**6.1 Создание туннеля**
- Зайдите в Cloudflare Dashboard
- Zero Trust → Networks → Tunnels → Create a tunnel
- Выберите "Cloudflared" → дайте имя (например, "home-server")
- Cloudflare покажет команду для установки
**6.2 Установка cloudflared на Docker VM**
bash
```bash
# На вашей Ubuntu VM выполните команду из Cloudflare
# Она будет примерно такой:
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb
# Авторизуйте туннель (скопируйте команду из Cloudflare)
sudo cloudflared service install <ваш-токен>
```
**6.3 Настройка маршрутов в Cloudflare**
В Cloudflare Dashboard → Tunnels → ваш туннель → Public Hostname:
Добавьте маршруты:
1. **Home Assistant**
- Subdomain: `ha`
- Domain: `yourdomain.ru`
- Service: `http://IP-вашего-LXC:8123`
2. **Nextcloud**
- Subdomain: `cloud`
- Domain: `yourdomain.ru`
- Service: `http://IP-вашей-VM:8080`
3. **Gitea**
- Subdomain: `git`
- Domain: `yourdomain.ru`
- Service: `http://IP-вашей-VM:3000`
4. **Vaultwarden**
- Subdomain: `vault`
- Domain: `yourdomain.ru`
- Service: `http://IP-вашей-VM:8081`
5. **AdGuard Home**
- Subdomain: `adguard`
- Domain: `yourdomain.ru`
- Service: `http://IP-вашей-VM:3001`
6. **Portainer**
- Subdomain: `portainer`
- Domain: `yourdomain.ru`
- Service: `https://IP-вашей-VM:9443`
- ⚠️ Включите "No TLS Verify"
## Этап 7: Финальные настройки
**7.1 Настройка Nextcloud для работы через домен**
bash
```bash
# Подключитесь к контейнеру Nextcloud
docker exec -it nextcloud-app-1 bash
# Добавьте trusted domain
nano /var/www/html/config/config.php
# Добавьте в массив trusted_domains:
'trusted_domains' =>
array (
0 => 'localhost',
1 => 'cloud.yourdomain.ru',
),
# Выйдите и перезапустите
exit
docker restart nextcloud-app-1
```
**7.2 Обновите Vaultwarden с правильным доменом**
bash
```bash
cd ~/docker/vaultwarden
nano docker-compose.yml
# Измените DOMAIN на:
- DOMAIN=https://vault.yourdomain.ru
docker compose down && docker compose up -d
```
## Этап 8: Проверка и тестирование
**8.1 Проверьте доступность сервисов**
- `https://ha.yourdomain.ru` - Home Assistant
- `https://cloud.yourdomain.ru` - Nextcloud
- `https://git.yourdomain.ru` - Gitea
- `https://vault.yourdomain.ru` - Vaultwarden
- `https://adguard.yourdomain.ru` - AdGuard Home
- `https://portainer.yourdomain.ru` - Portainer
**8.2 Проверьте SSL сертификаты** Все должны показывать зеленый замочек (Cloudflare автоматически выдает сертификаты)
## Этап 9: Безопасность
**9.1 Настройте Cloudflare Access (опционально)** Для дополнительной защиты можете добавить авторизацию перед доступом к сервисам
**9.2 Настройте бэкапы в Proxmox**
- Datacenter → Backup → Add
- Настройте автоматические бэкапы VM и LXC
**9.3 Обновите пароли** Замените все пароли в docker-compose файлах на надежные
## Полезные команды для управления
bash
```bash
# Просмотр логов
docker logs -f имя-контейнера
# Перезапуск контейнера
docker restart имя-контейнера
# Обновление образа
cd ~/docker/сервис
docker compose pull
docker compose up -d
# Просмотр всех контейнеров
docker ps -a
# Использование ресурсов
docker stats
```

1
Twilio.md Normal file
View File

@@ -0,0 +1 @@
DG8QLX7WL2H58QBBNUU4PH3S

View File

@@ -0,0 +1,578 @@
## 🐦 ВАРИАНТЫ ДЕТСКИХ ПРОБЛЕМ
### **ВАРИАНТ 1: "Я хочу помочь, но не знаю как"** ⭐ (РЕКОМЕНДУЮ)
**Ситуация от ребенка:** "На прогулке я вижу птичек, они мерзнут и ищут еду под снегом. Мне их жалко! Я хочу покормить их, но мама говорит, что хлебом нельзя. А чем тогда можно? Я не знаю!"
**Проблемный вопрос:**
- Как правильно помочь птицам зимой?
- Что они любят есть?
- Что им можно давать, а что нельзя?
**Что решается:** Ребенок узнает, как конкретно может помочь птицам, и получает инструмент реальной помощи природе.
**Мотивация:** Желание заботиться, быть полезным, помогать слабым.
---
### **ВАРИАНТ 2: "Птицы не едят то, что я им даю!"**
**Ситуация от ребенка:** "Я насыпал птичкам крошки хлеба, а они не едят! Или едят чуть-чуть и улетают. Почему? Может, они не голодные? Или им не нравится? Что им дать, чтобы они съели?"
**Проблемный вопрос:**
- Почему птицы не едят то, что я им даю?
- Что они любят больше всего?
- Как сделать так, чтобы птицы прилетали к моей кормушке?
**Что решается:** Ребенок понимает, что у птиц есть свои предпочтения, и учится их учитывать.
**Мотивация:** Любопытство, желание понять причину, успешность действия (чтобы птицы прилетали и ели).
---
### **ВАРИАНТ 3: "Я не могу узнать, какая это птица!"**
**Ситуация от ребенка:** "На прогулке я вижу разных птиц, но не знаю, как их зовут. Одна серенькая прыгает, другая желтая на ветке висит. Воспитатель говорит: 'Это воробей, а это синица'. Но я их путаю! И еще не знаю, что они любят есть."
**Проблемный вопрос:**
- Как отличить одну птицу от другой?
- Что любит воробей, а что — синица?
- Можно ли всем птицам давать одинаковую еду?
**Что решается:** Ребенок учится наблюдать, различать виды птиц и связывает внешний вид с поведением и питанием.
**Мотивация:** Познавательный интерес, желание разбираться в природе.
---
### **ВАРИАНТ 4: "Почему птицы зимой не улетают на юг, если им холодно?"**
**Ситуация от ребенка:** "Мама говорит, что многие птицы осенью улетают в теплые края. Но я зимой все равно вижу птиц! Почему они остались? Им же холодно и голодно! Может, они заблудились? Как им помочь?"
**Проблемный вопрос:**
- Почему некоторые птицы остаются зимовать?
- Как они выживают в морозы?
- Чем мы можем им помочь?
**Что решается:** Ребенок понимает разницу между перелетными и зимующими птицами, осознает важность помощи человека.
**Мотивация:** Эмпатия, желание понять и защитить.
---
### **ВАРИАНТ 5: "Я насыпал корм, а птицы не прилетают!"**
**Ситуация от ребенка:** "Я повесил кормушку и насыпал туда еды. Целый день ждал, а птицы не прилетели! Почему? Может, они меня боятся? Или еда им не нравится? Что я сделал не так?"
**Проблемный вопрос:**
- Почему птицы не прилетают к кормушке?
- Какой корм их привлечет?
- Где лучше повесить кормушку?
- Нужно ли делать что-то особенное?
**Что решается:** Ребенок учится терпению, правильному выбору места и корма, пониманию поведения птиц.
**Мотивация:** Желание добиться результата, любопытство.
---
### **ВАРИАНТ 6: "Мне скучно наблюдать — птицы все одинаковые!"**
**Ситуация от ребенка:** "Воспитатель говорит: 'Давайте понаблюдаем за птицами'. Но мне скучно просто смотреть! Я не знаю, что наблюдать. Они просто летают и клюют. Что в них интересного?"
**Проблемный вопрос:**
- Что интересного можно увидеть, наблюдая за птицами?
- Чем отличается поведение разных птиц?
- Что они любят есть?
- Как они общаются друг с другом?
**Что решается:** Ребенок учится замечать детали, сравнивать, анализировать — развивается наблюдательность.
**Мотивация:** Превратить скучное наблюдение в увлекательное исследование.
---
### **ВАРИАНТ 7: "Я боюсь, что птицы умрут от голода!"** (эмоциональный)
**Ситуация от ребенка:** "Зимой так холодно, и снега много! Птичкам нечего есть, они такие маленькие и худенькие. Мне страшно, что они умрут от голода или замерзнут. Я очень хочу им помочь!"
**Проблемный вопрос:**
- Как спасти птиц от голода зимой?
- Что им нужно, чтобы пережить зиму?
- Могу ли я, маленький ребенок, реально помочь?
**Что решается:** Ребенок получает реальный инструмент помощи, чувствует свою значимость, справляется с тревогой через действие.
**Мотивация:** Эмпатия, забота, желание защитить.
---
### **ВАРИАНТ 8: "Почему к моей кормушке прилетают только воробьи?"**
**Ситуация от ребенка:** "Я повесил кормушку, насыпал крошек. Прилетают только воробьи, каждый день одни и те же. А где синички? Где снегири? Я хочу увидеть разных птиц! Что нужно сделать?"
**Проблемный вопрос:**
- Почему прилетают только воробьи?
- Что нужно положить, чтобы прилетели синицы?
- Как привлечь редких птиц?
**Что решается:** Ребенок узнает о пищевых предпочтениях разных видов и учится создавать условия для разнообразия.
**Мотивация:** Желание увидеть что-то новое, интерес к разнообразию природы.
---
## 📊 СРАВНИТЕЛЬНАЯ ТАБЛИЦА
|Вариант|Эмоция ребенка|Сложность понимания|Практичность|Возраст|
|---|---|---|---|---|
|1. "Хочу помочь, но не знаю как"|Забота, беспомощность|Простая|⭐⭐⭐⭐⭐|5-7 лет|
|2. "Птицы не едят"|Недоумение, разочарование|Простая|⭐⭐⭐⭐|5-7 лет|
|3. "Не могу узнать птицу"|Любопытство, путаница|Средняя|⭐⭐⭐⭐|5-7 лет|
|4. "Почему не улетают"|Удивление, сочувствие|Средняя|⭐⭐⭐|6-7 лет|
|5. "Не прилетают"|Нетерпение, разочарование|Простая|⭐⭐⭐⭐⭐|5-7 лет|
|6. "Скучно наблюдать"|Скука, незаинтересованность|Простая|⭐⭐⭐⭐|5-6 лет|
|7. "Боюсь, что умрут"|Тревога, сострадание|Простая|⭐⭐⭐⭐⭐|5-7 лет|
|8. "Только воробьи"|Разочарование, любопытство|Средняя|⭐⭐⭐⭐|6-7 лет|
---
## ⭐ МОИ ТОП-3 РЕКОМЕНДАЦИИ:
### **1 МЕСТО: "Я хочу помочь, но не знаю как"**
**Почему лучший:**
- ✅ Понятен детям любого возраста (5-7 лет)
- ✅ Высокая эмоциональная вовлеченность
- ✅ Четкий практический результат
- ✅ Ребенок чувствует себя значимым
- ✅ Мотивирует на действие
- ✅ Легко презентовать родителям
**Формулировка для проекта:** "Дети видят на прогулках, что зимой птицам холодно и голодно. У них возникает естественное желание помочь, но они не знают, как это сделать правильно. Возникает проблема: чем можно кормить птиц, а чем нельзя?"
---
### **2 МЕСТО: "Я боюсь, что птицы умрут от голода"**
**Почему хорош:**
- ✅ Сильная эмоциональная составляющая
- ✅ Проект дает ребенку инструмент справиться с тревогой
- ✅ Формирует активную жизненную позицию
- ✅ Ребенок видит результат своей помощи
**Формулировка для проекта:** "С наступлением холодов дети наблюдают, как птицам трудно найти корм под снегом. У детей возникает тревога за птиц и сильное желание помочь. Но как именно помочь? Что нужно птицам, чтобы пережить зиму?"
---
### **3 МЕСТО: "Я насыпал корм, а птицы не прилетают"**
**Почему хорош:**
- ✅ Конкретная, измеримая проблема
- ✅ Мотивирует к исследованию
- ✅ Есть практический опыт до проекта
- ✅ Ребенок ищет причину неудачи
**Формулировка для проекта:** "Дети пытаются покормить птиц, но сталкиваются с тем, что птицы не всегда прилетают к кормушке или едят корм неохотно. Возникает вопрос: что любят разные птицы? Какой корм привлечет их к кормушке?"
---
## 💡 КАК ИСПОЛЬЗОВАТЬ В ПРОЕКТЕ:
### Пример оформления с вариантом 1:
**ПРОБЛЕМА ПРОЕКТА (от детей):**
_На подготовительном этапе воспитатель создает проблемную ситуацию:_
**Воспитатель:** "Ребята, смотрите в окно. Видите птичек? Они прыгают по снегу, ищут еду. Им холодно и голодно."
**Дети:** "Давайте покормим их!"
**Воспитатель:** "Хорошая идея! А чем мы их покормим?"
**Дети:** "Хлебом! Крошками! У меня дома есть печенье!"
**Воспитатель:** "Стоп! А вы знаете, что хлеб вреден для птиц? Он может вызвать у них болезни."
**Дети:** "Правда? А чем тогда кормить?"
**Воспитатель:** "Вот это и есть наша проблема! Мы хотим помочь птицам, но не знаем, чем их правильно кормить. Что же делать?"
**Дети:** "Давайте узнаем! Давайте спросим! Давайте проверим!"
**ПРОБЛЕМА СФОРМУЛИРОВАНА:** "Как правильно помочь птицам зимой? Что они любят есть?"
---
Какой вариант вам больше нравится? Или хотите, чтобы я придумал еще варианты? 😊
D
Напиши проблемы от имени ребенка на тему «Безопасный маршрут» (второй проект, который мы с тобой обсуждали)
## 🚦 ПРОБЛЕМЫ ОТ ИМЕНИ РЕБЕНКА НА ТЕМУ "БЕЗОПАСНЫЙ МАРШРУТ"
---
### **ВАРИАНТ 1: "Я боюсь переходить дорогу!"** ⭐ (РЕКОМЕНДУЮ)
**Ситуация от ребенка:** "Когда мы идем в детский сад, нам нужно переходить дорогу. Там много машин, они быстро едут! Я боюсь, что меня собьет машина. Мама держит меня за руку, но я все равно боюсь. Как правильно переходить дорогу, чтобы было безопасно?"
**Проблемный вопрос:**
- Как безопасно перейти дорогу?
- Когда можно переходить, а когда нельзя?
- Что нужно делать, чтобы машины меня заметили?
- Где самое безопасное место для перехода?
**Что решается:** Ребенок получает конкретные знания и навыки безопасного перехода дороги, страх трансформируется в уверенность через знания.
**Мотивация:** Страх, желание обезопасить себя, стремление к самостоятельности.
**Эмоция:** Тревога → Уверенность
---
### **ВАРИАНТ 2: "Я не понимаю, что означает светофор!"**
**Ситуация от ребенка:** "На перекрестке стоит светофор. Он мигает разными цветами: красный, желтый, зеленый. Мама говорит: 'Стой, красный!' или 'Можно идти, зеленый!'. Но я сам не понимаю, когда можно, а когда нельзя. А если мамы рядом нет? Я запутаюсь!"
**Проблемный вопрос:**
- Что означает каждый цвет светофора?
- Когда точно можно переходить?
- Что делать, если горит желтый?
- Как запомнить все сигналы?
**Что решается:** Ребенок понимает логику работы светофора и может применять эти знания самостоятельно.
**Мотивация:** Желание понять систему, стремление к самостоятельности.
**Эмоция:** Непонимание → Ясность
---
### **ВАРИАНТ 3: "Я хочу сам ходить в детский сад, но мама не разрешает!"**
**Ситуация от ребенка:** "Мой друг Петя живет рядом, и он уже сам ходит в детский сад! А мне мама не разрешает, говорит, что я маленький и не знаю правил. Но я уже большой! Что мне нужно знать, чтобы мама мне разрешила?"
**Проблемный вопрос:**
- Какие правила нужно знать, чтобы безопасно дойти до детского сада?
- Какой маршрут самый безопасный?
- Что может быть опасным по дороге?
- Как доказать маме, что я готов?
**Что решается:** Ребенок осознает важность знания ПДД для своей самостоятельности, получает мотивацию к обучению.
**Мотивация:** Стремление к самостоятельности, желание быть "взрослым".
**Эмоция:** Обида/Желание → Ответственность
---
### **ВАРИАНТ 4: "Почему нельзя играть рядом с дорогой?"**
**Ситуация от ребенка:** "Рядом с нашим домом дорога, а за ней — площадка с качелями. Мой мяч укатился к дороге, я хотел его взять, но мама закричала: 'Стой! Нельзя!' Почему нельзя? Машин же нет! И почему нельзя играть возле дороги?"
**Проблемный вопрос:**
- Почему дорога опасна, даже если машин не видно?
- Что может случиться, если выбежать на дорогу?
- Где можно играть безопасно?
- Что делать, если мяч укатился на дорогу?
**Что решается:** Ребенок понимает скрытые опасности дороги и учится оценивать риски.
**Мотивация:** Любопытство, желание понять запреты взрослых.
**Эмоция:** Недоумение → Понимание опасности
---
### **ВАРИАНТ 5: "Я не знаю, где безопасно переходить!"**
**Ситуация от ребенка:** "Когда мы идем в детский сад, иногда переходим дорогу по зебре, а иногда мама ведет меня в другое место. Почему? Разве нельзя переходить где удобно? Где можно переходить, а где нельзя?"
**Проблемный вопрос:**
- Что такое пешеходный переход?
- Почему нужно переходить именно там?
- Можно ли переходить в другом месте?
- Как найти безопасное место для перехода?
**Что решается:** Ребенок учится находить безопасные места для перехода дороги.
**Мотивация:** Понимание правил, логики безопасности.
**Эмоция:** Непонимание → Осознанность
---
### **ВАРИАНТ 6: "Я видел, как взрослый перешел на красный свет!"**
**Ситуация от ребенка:** "Мама говорит, что нельзя переходить на красный свет. Но вчера я видел, как дядя перебежал дорогу на красный! И его не сбила машина! Значит, можно? Почему взрослым можно, а мне нельзя?"
**Проблемный вопрос:**
- Почему некоторые взрослые нарушают правила?
- Правда ли, что нельзя переходить на красный?
- Что будет, если я нарушу правило?
- Как правильно поступать, если взрослые показывают плохой пример?
**Что решается:** Ребенок учится критически оценивать поведение других и следовать правилам независимо от чужого примера.
**Мотивация:** Поиск справедливости, понимание правил.
**Эмоция:** Смущение/Противоречие → Уверенность в правилах
---
### **ВАРИАНТ 7: "Я путаю дорожные знаки!"**
**Ситуация от ребенка:** "На дороге стоят разные знаки: треугольные, круглые, квадратные. Мама говорит: 'Смотри, это значит пешеходный переход'. А я не запоминаю! Они все похожи! Как их различать?"
**Проблемный вопрос:**
- Зачем нужны дорожные знаки?
- Что означают разные знаки?
- Как запомнить, какой знак что означает?
- Какие знаки важны для пешеходов?
**Что решается:** Ребенок учится узнавать и понимать основные дорожные знаки.
**Мотивация:** Желание разобраться, навести порядок в знаниях.
**Эмоция:** Путаница → Ясность
---
### **ВАРИАНТ 8: "Машина едет быстро — я не успею перейти!"**
**Ситуация от ребенка:** "Мы стоим на зеленый свет, можно переходить. Но машины едут так быстро! Что если я не успею перейти, и загорится красный? Машина меня собьет! Как понять, успею я или нет?"
**Проблемный вопрос:**
- Как понять, успею ли я перейти дорогу?
- Сколько времени горит зеленый свет?
- Что делать, если начал переходить, а загорелся красный?
- Как правильно рассчитать время?
**Что решается:** Ребенок учится оценивать время и расстояние, понимает, как работает светофор.
**Мотивация:** Страх, желание научиться рассчитывать время.
**Эмоция:** Страх не успеть → Уверенность в расчете
---
### **ВАРИАНТ 9: "Почему машина не останавливается на зебре?"** (сложный)
**Ситуация от ребенка:** "Воспитатель говорит, что на пешеходном переходе машины должны остановиться и пропустить пешехода. Но когда мы переходили с мамой, машина не остановилась! Почему водитель нарушил правило? Может, я что-то не так делаю?"
**Проблемный вопрос:**
- Всегда ли машины останавливаются на зебре?
- Что делать, если машина не останавливается?
- Как быть уверенным, что меня пропустят?
- Можно ли доверять водителям?
**Что решается:** Ребенок понимает, что даже на "зебре" нужно быть внимательным и убедиться, что машина остановилась.
**Мотивация:** Поиск справедливости, желание понять реальность.
**Эмоция:** Разочарование → Осторожность
---
### **ВАРИАНТ 10: "Я хочу, чтобы по дороге в садик было безопасно!"** ⭐
**Ситуация от ребенка:** "Каждый день я хожу в детский сад одной и той же дорогой. Там есть опасные места: большой перекресток, выезд из двора, место без светофора. Я хочу, чтобы было безопасно! Может, там нужен светофор? Или знак? Как сделать мой маршрут безопасным?"
**Проблемный вопрос:**
- Где на моем маршруте опасные места?
- Как их можно сделать безопаснее?
- Что нужно изменить (знаки, светофоры)?
- Как я могу помочь сделать дорогу безопаснее?
**Что решается:** Ребенок учится анализировать маршрут, выявлять опасности и думать о решениях. Проектная деятельность приобретает социальный смысл.
**Мотивация:** Желание улучшить свою среду, активная позиция.
**Эмоция:** Тревога → Проактивность
---
## 📊 СРАВНИТЕЛЬНАЯ ТАБЛИЦА
|Вариант|Эмоция ребенка|Сложность|Практичность|Социальная значимость|Возраст|
|---|---|---|---|---|---|
|1. "Боюсь переходить"|Страх → Уверенность|Простая|⭐⭐⭐⭐⭐|⭐⭐⭐|5-7 лет|
|2. "Не понимаю светофор"|Путаница → Ясность|Простая|⭐⭐⭐⭐⭐|⭐⭐⭐|5-7 лет|
|3. "Хочу сам ходить"|Обида → Ответственность|Средняя|⭐⭐⭐⭐|⭐⭐⭐⭐|6-7 лет|
|4. "Почему нельзя играть"|Недоумение → Понимание|Простая|⭐⭐⭐⭐|⭐⭐⭐|5-6 лет|
|5. "Где переходить"|Непонимание → Осознанность|Простая|⭐⭐⭐⭐⭐|⭐⭐⭐|5-7 лет|
|6. "Взрослый нарушил"|Противоречие → Уверенность|Средняя|⭐⭐⭐⭐|⭐⭐⭐⭐|6-7 лет|
|7. "Путаю знаки"|Путаница → Ясность|Средняя|⭐⭐⭐⭐|⭐⭐⭐|5-7 лет|
|8. "Не успею перейти"|Страх → Уверенность|Средняя|⭐⭐⭐⭐|⭐⭐⭐|6-7 лет|
|9. "Машина не останавливается"|Разочарование → Осторожность|Сложная|⭐⭐⭐⭐⭐|⭐⭐⭐⭐|6-7 лет|
|10. "Хочу безопасный маршрут"|Тревога → Проактивность|Средняя|⭐⭐⭐⭐⭐|⭐⭐⭐⭐⭐|6-7 лет|
---
## ⭐ МОИ ТОП-3 РЕКОМЕНДАЦИИ:
### **1 МЕСТО: "Я боюсь переходить дорогу!"**
**Почему лучший:**
- ✅ Универсален для любого возраста (5-7 лет)
- ✅ Сильная эмоциональная составляющая (страх — базовая эмоция)
- ✅ Реальная проблема каждого ребенка
- ✅ Трансформация страха в уверенность через знания
- ✅ Высокая мотивация к обучению
- ✅ Родители сразу понимают актуальность
- ✅ Четкий практический результат
**Как оформить в проекте:**
_Воспитатель создает ситуацию:_
**Воспитатель:** "Ребята, кто из вас ходит в детский сад пешком?"
_Дети поднимают руки._
**Воспитатель:** "А вам приходится переходить дорогу?"
**Дети:** "Да!"
**Воспитатель:** "Скажите честно, вам страшно, когда вы переходите дорогу?"
**Дети:** "Да, страшно! Машины быстро едут! Я боюсь, что меня собьет машина!"
**Воспитатель:** "Понимаю вас. Дорога действительно может быть опасной. Но знаете что? Если знать правила, то переходить дорогу совсем не страшно! Хотите научиться переходить дорогу правильно и безопасно?"
**Дети:** "Да, хотим!"
**ПРОБЛЕМА:** Дети боятся переходить дорогу, потому что не знают, как делать это безопасно.
**ЦЕЛЬ ПРОЕКТА:** Научиться безопасно переходить дорогу и создать модель безопасного маршрута в детский сад.
---
### **2 МЕСТО: "Я хочу, чтобы мой маршрут в садик был безопасным!"**
**Почему хорош:**
- ✅ Высокая социальная значимость
- ✅ Ребенок не просто учит правила, а создает решение
- ✅ Проактивная позиция (не "научите меня", а "давайте улучшим")
- ✅ Отлично подходит для проектной деятельности
- ✅ Можно создать реальный продукт (макет, карту маршрута)
- ✅ Вовлечение родителей (анализ маршрутов)
- ✅ Связь с жизнью
**Как оформить в проекте:**
**Воспитатель:** "Ребята, вы каждый день ходите в детский сад. Расскажите, встречаются ли вам опасные места по дороге?"
**Дети:** "Да! У меня большой перекресток без светофора! А у меня машины быстро едут! А у меня темный двор!"
**Воспитатель:** "Получается, что наши маршруты не всегда безопасны. Как вы думаете, что можно сделать, чтобы было безопаснее?"
**Дети:** "Поставить светофор! Нарисовать зебру! Повесить знаки!"
**Воспитатель:** "Отличные идеи! Давайте проведем исследование: изучим свои маршруты, найдем опасные места и придумаем, как их сделать безопаснее!"
**ПРОБЛЕМА:** Маршруты детей в детский сад содержат опасные участки, и дети хотят сделать их безопаснее.
**ЦЕЛЬ ПРОЕКТА:** Создать модель безопасного маршрута с использованием светофоров, знаков и других элементов дорожной инфраструктуры.
---
### **3 МЕСТО: "Я не понимаю, что означает светофор!"**
**Почему хорош:**
- ✅ Конкретная, понятная проблема
- ✅ Светофор — центральный элемент проекта
- ✅ Легко проверить понимание (построить светофор)
- ✅ Визуальная наглядность
- ✅ Простота для младшего возраста
- ✅ Связь с LEGO WeDo (программируемый светофор)
**Как оформить в проекте:**
**Воспитатель показывает картинку светофора:**
**Воспитатель:** "Ребята, что это?"
**Дети:** "Светофор!"
**Воспитатель:** "Правильно. А кто может объяснить, что означают его сигналы?"
**Дети:** "Красный — стоять! Зеленый — идти!"
**Воспитатель:** "А желтый?"
**Дети:** (молчание, путаются) "Можно идти? Нельзя? Приготовиться?"
**Воспитатель:** "Видите, не все так просто! А ведь светофор — это наш главный помощник на дороге. Если мы не понимаем его сигналы, мы можем попасть в опасную ситуацию. Давайте разберемся, как работает светофор!"
**ПРОБЛЕМА:** Дети не до конца понимают значение сигналов светофора и путаются, когда можно переходить дорогу.
**ЦЕЛЬ ПРОЕКТА:** Изучить работу светофора, понять значение каждого сигнала и создать программируемую модель светофора.
---
## 💡 КАК ВЫБРАТЬ ПРОБЛЕМУ:
**Для старшей группы (5-6 лет):**
- Вариант 1 "Боюсь переходить дорогу"
- Вариант 2 "Не понимаю светофор"
- Вариант 5 "Где переходить"
**Для подготовительной группы (6-7 лет):**
- Вариант 10 "Хочу безопасный маршрут" (самый проектный)
- Вариант 3 "Хочу сам ходить"
- Вариант 6 "Взрослый нарушил"
**Если делаете упор на робототехнику:**
- Вариант 2 "Не понимаю светофор" (программируемый светофор)
- Вариант 8 "Не успею перейти" (изучение времени работы светофора)
**Если делаете упор на картографию/макет:**
- Вариант 10 "Хочу безопасный маршрут"
- Вариант 5 "Где переходить"
---
## 🎯 ФИНАЛЬНАЯ РЕКОМЕНДАЦИЯ:
**Для вашего проекта я рекомендую ВАРИАНТ 1: "Я боюсь переходить дорогу!"**
**Почему:**
1. Эмоционально близка каждому ребенку
2. Универсальна для любого возраста
3. Идеально сочетается с созданием светофора и машинки из LEGO
4. Трансформирует страх в уверенность через конкретные знания
5. Понятна родителям — они сразу видят ценность проекта
6. Дает четкий измеримый результат (было страшно → стало понятно, как быть безопасным)

View File

@@ -0,0 +1,11 @@
1. Интеграция на создание клиента
1. Какой endpoint будет использоваться на стороне СУП (ссылка)
2. Какой протокол будет использоваться при интеграции (REST или SOAP)
3. По поводу авторизации ранее договаривались кастомный header в запросе (дополнительно обсудить его название и значение)
4. Ответ по созданию клиента будет синхронным или асинхронным
5. Если в п. 4 ответ асинхронный, то нужно будет договориться по поводу интеграции СУП -> СРМ (endpoint, протокол, авторизация)
2. Интеграция на создание некоммерческого проекта
1. Какой endpoint будет использоваться на стороне СУП (ссылка)
2. Какой протокол будет использоваться при интеграции (REST или SOAP)
3. По поводу авторизации ранее договаривались кастомный header в запросе (дополнительно обсудить его название и значение)
4. Ответ по созданию некоммерческого проекта будет скорее всего асинхронным (иногда потребуется дополнительное согласование для проекта), поэтому нужно будет договориться по поводу интеграции СУП -> СРМ (endpoint, протокол, авторизация)

View File

@@ -0,0 +1,26 @@
## Взаимодействие систем
### Rabbit
### Temporal
## Примеры запросов
### Создание клиента
### Создание presale-проекта
### Ответы
У меня новые вводные, схема взаимодействия должна быть следующая:
1. Я инициирую запрос в Temporal
2. Создается активность CreatePresaleProject (Отправляется POST запрос в систему ERP)
3. Эта активность должна будет периодически (раз в 10 минут, настраиваемый диапазон запрашивать данные у другой системы)
4. Если я получаю ответ, то активность CreatePresaleProject завершается и запускается UpdateOrderInCRM
5. Если получаю какую-то ошибку, то уже завершаю активность с ошибкой
Это делаем для StartOrderOnly Worker.
Учти, что POST и GET запросы должны посылаться из Temporal
Скажи, что нужно сделать, какой план?

View File

@@ -0,0 +1,74 @@
## Создание клиента
Используется endpoint с методом POST
Предлагаемый вариант
`api/1.0/openRequest/createClient`
### Запрос
```json
{
"companyId": "", // Компания
"typeId": "", // Тип заявки
"kindId": "", // Вид заявки
"name": "Альфа-Пласт",
"shortName": "Альфа-Пласт",
"managerId": "123456", // Значение ИНС (залили данные в AD и храним их в CRM. Значение без нулей в начале)
"accountId": "57ef229c-d8e4-4da5-b87a-7205e7eb7c42"
}
```
### Ответ
Успешный
```json
{
"success": true,
"errorMessage": ""
}
```
Неуспешный
```json
{
"success": false,
"errorMessage": "Текст ошибки"
}
```
## Проверка готовности создания клиента
Используется endpoint с методом GET
Предлагаемый вариант
`api/1.0/openRequest/view?accountId={accountId}`
Главная суть метода, что мы по значению `accountId` из пункта `Создание клиента` получаем готовность создания клиента.
Клиент считается созданным, если у него заполнено поле `ClientId` (уточнить как называется в базе данных поле `Код клиента из R3`)
### Ответ
Клиент еще создается
```json
{
"status": "Waiting",
"clientId": "",
"errorMessage": ""
}
```
Создание клиента завершено
```json
{
"status": "Done",
"clientId": "123-123-123",
"errorMessage": ""
}
```
Ошибка при создании клиента
```json
{
"status": "Error",
"clientId": "",
"errorMessage": "Описание ошибки"
}
```

View File

@@ -0,0 +1,85 @@
## Авторизация
Используется кастомный header `X-Erp-Integration`
Значение хранится в конфигах у системы СУП.
Для дев и прод разные значения.
Данные передаются в формате base64, при получении значения необходимо его раскодировать и сравнить со значением хранящимся в конфиге.
Если значения не соответствуют, то вернуть ошибку и код HTTP 403 - Unauthorized.
## Создание некоммерческого проекта
Используется endpoint с методом POST
Предлагаемый вариант
`api/1.0/openRequest/createPresaleProject` **Обсудить данный момент после реализации и предоставить команде CRM**
### Запрос
```json
{
"orderName": "Альфа-Пласт ADC",
"orderDate": "2025-12-31",
"clientId": "123-123-123", // Значение `Код клиента из R3`
"managerProjectId": "00123456", // Значение ИНС
"headProjectId": "00123457", // Значение ИНС
"directorProjectId": "00123458", // Значение ИНС
"orderAmount": 12345.67,
"productAttribute": 1, // (1 - ПО/ПО+ТП/ТП. 2 - Консалтинг. 3 - ПО+ТП+Консалтинг/ТП+Консалтинг/ПО+Консалтинг)
"applicationId": "57ef229c-d8e4-4da5-b87a-7205e7eb7c43",
"projectId": "" // AP ID (Пустое - создание проекта. Заполненное - редактирование проекта)
}
```
### Ответ
Успешный
```json
{
"success": true,
"errorMessage": ""
}
```
Неуспешный
```json
{
"success": false,
"errorMessage": "Текст ошибки"
}
```
## Проверка готовности создания проекта
Используется endpoint с методом GET
Предлагаемый вариант
`api/1.0/openRequest/view?applicationId={applicationId}` **Обсудить данный момент после реализации и предоставить команде CRM**
Главная суть метода, что мы по значению `applicationId` из пункта `Создание некоммерческого проекта` получаем готовность создания проекта.
Проект считается созданным, если у него заполнено поле `ProjectId` (уточнить как называется в базе данных поле `AP ID`)
### Ответ
Проект еще создается
```json
{
"status": "Waiting",
"projectId": "",
"errorMessage": ""
}
```
Создание проекта завершено
```json
{
"status": "Success",
"projectId": "123-123-124",
"errorMessage": ""
}
```
Ошибка при создании проекта
```json
{
"status": "Error",
"projectId": "",
"errorMessage": "Описание ошибки"
}
```

View File

@@ -0,0 +1,155 @@
## Статусы объектов
Заявка
- Черновик -
- На утверждении -
- На рассмотрении в ЦПРП -
- Зарегистрирована (финальный) -
- Отклонена -
Проект
- Открыт - E0001
- Закрыт (финальный) - E0002
- Приостановлен - E0003
- На закрытии в ЦПРП (финальный) - E0005
- На закрытии в ФС (финальный) - E0006
- Аннулирован (финальный) - E0009
- Закрыт для списания TS - E0027
## Процесс
1. После получения AP ID (Id проекта из САП) в CRM могут происходить изменения данных по сделке (заявке).
2. Все изменения фиксируются в системе CRM и отправляются в СУП в конце рабочего дня
3. По всем измененным заявкам вначале отправляем запрос на получение текущих статусов заявок и проектов
Пример запроса смотри в "Получение статусов заявок и проектов" (Пример запроса)
4. После получения статусов заявок и проектов система CRM отбирает только те заявки, которые могут быть изменены
1. Заявка "Зарегистрирована" и Проект "Проект открыт"
2. Заявка "Зарегистрирована" и Проект "Проект закрыт для списания TS"
5. По подходящим заявкам из п.4 система CRM формирует запросы для отправки в СУП с использованием Temporal
Пример запроса смотри в "Изменение данных по заявке - проекту" (Примеры запроса)
6. Периодически опрашиваем систему СУП о готовности изменения данных по заявке и после получения ответа изменяем статусы заявок в CRM
## Авторизация
Используется кастомный header `X-Erp-Integration`
Значение хранится в конфигах у системы СУП.
Для дев и прод разные значения.
Данные передаются в формате base64, при получении значения необходимо его раскодировать и сравнить со значением хранящимся в конфиге.
Если значения не соответствуют, то вернуть ошибку и код HTTP 403 - Unauthorized.
## Получение статусов заявок и проектов
Используется endpoint с методом POST - синхронный процесс
Предлагаемый вариант
`api/1.0/openRequest/getPresaleProjectsStatus` **Обсудить данный момент после реализации и предоставить команде CRM**
Пример запроса
```json
{
    "projects": [
        {
            "projectId": "AP001", // AP ID проекта
        },
        {
            "projectId": "AP002", // AP ID проекта
        }
    ]
}
```
Пример ответа
```json
{
    "projects": [
        {
            "projectId": "AP001", // AP ID проекта
            "applicationStatus": "...", // Id статуса заявки
            "projectStatus": "E0005" // Id статуса проекта
        },
        {
            "projectId": "AP002", // AP ID проекта
            "applicationStatus": "...", // Id статуса заявки
            "projectStatus": "E0001" // Id статуса проекта
        }
    ]
}
```
## Изменение данных по проекту
### Заявка на перевыпуск
Используется endpoint с методом POST - асинхронный процесс
Предлагаемый вариант
`api/1.0/openRequest/createPresaleProject` **Обсудить данный момент после реализации и предоставить команде CRM**
В данном процессе будет использоваться метод `createPresaleProject`, также как и для создания некоммерческого проекта, но с условием, что в параметр `projectId` будет заполнен, что даст сигнал о том, что это заявка на перевыпуск проекта.
Пример запроса
```json
{
    "orderName": "Сделка-1", // Название проекта
    "orderDate": "2025-12-31", // Дата сделки из CRM
    "clientId": "123-123", // Код клиента из R3
    "headProjectId": "00123123", // ИНС руководителя проекта
    "managerProjectId": "00123124", // ИНС менеджера по продажам
    "directorProjectId": "00123125", // ИНС директора проекта
    "orderAmount": 12345.67, // Сумма сделки
    "projectId": "AP001", // AP ID проекта
    "applicationId": "57ef229c-d8e4-4da5-b87a-7205e7eb7c43" // Id заявки в CRM
}
```
Успешный ответ
```json
{
"success": true,
"errorMessage": ""
}
```
Неуспешный ответ
```json
{
"success": false,
"errorMessage": "Текст ошибки"
}
```
### Проверка готовности проекта с измененными данными
После изменения статуса заявки на Черновик, ожидаем согласования заявки и система CRM (Temporal) будет периодически опрашивать СУП о готовности перевыпуска и согласовании изменений по проекту.
Ответ считается окончательным, если статус != Waiting, то есть Error или Success.
Предлагаемый вариант
`api/1.0/openRequest/view?applicationId={applicationId}` **Обсудить данный момент после реализации и предоставить команде CRM**
Примеры ответов
Идет согласование изменений
```json
{
"status": "Waiting",
"projectId": "",
"errorMessage": ""
}
```
Согласование изменений успешно
```json
{
"status": "Success",
"projectId": "123-123-124",
"errorMessage": ""
}
```
Ошибка или отказ по изменениям в проекте
```json
{
"status": "Error",
"projectId": "",
"errorMessage": "Описание ошибки"
}
```

View File

@@ -0,0 +1,3 @@
```
export CONFIG_FILE="configs/config.yaml
```

View File

@@ -0,0 +1,127 @@
### **ВАРИАНТ 1: "Я хочу помочь, но не знаю как"** ⭐ (РЕКОМЕНДУЮ)
**Ситуация от ребенка:** "На прогулке я вижу птичек, они мерзнут и ищут еду под снегом. Мне их жалко! Я хочу покормить их, но мама говорит, что хлебом нельзя. А чем тогда можно? Я не знаю!"
**Проблемный вопрос:**
- Как правильно помочь птицам зимой?
- Что они любят есть?
- Что им можно давать, а что нельзя?
**Что решается:** Ребенок узнает, как конкретно может помочь птицам, и получает инструмент реальной помощи природе.
**Мотивация:** Желание заботиться, быть полезным, помогать слабым.
---
### **ВАРИАНТ 2: "Птицы не едят то, что я им даю!"**
**Ситуация от ребенка:** "Я насыпал птичкам крошки хлеба, а они не едят! Или едят чуть-чуть и улетают. Почему? Может, они не голодные? Или им не нравится? Что им дать, чтобы они съели?"
**Проблемный вопрос:**
- Почему птицы не едят то, что я им даю?
- Что они любят больше всего?
- Как сделать так, чтобы птицы прилетали к моей кормушке?
**Что решается:** Ребенок понимает, что у птиц есть свои предпочтения, и учится их учитывать.
**Мотивация:** Любопытство, желание понять причину, успешность действия (чтобы птицы прилетали и ели).
---
### **ВАРИАНТ 3: "Я не могу узнать, какая это птица!"**
**Ситуация от ребенка:** "На прогулке я вижу разных птиц, но не знаю, как их зовут. Одна серенькая прыгает, другая желтая на ветке висит. Воспитатель говорит: 'Это воробей, а это синица'. Но я их путаю! И еще не знаю, что они любят есть."
**Проблемный вопрос:**
- Как отличить одну птицу от другой?
- Что любит воробей, а что — синица?
- Можно ли всем птицам давать одинаковую еду?
**Что решается:** Ребенок учится наблюдать, различать виды птиц и связывает внешний вид с поведением и питанием.
**Мотивация:** Познавательный интерес, желание разбираться в природе.
---
### **ВАРИАНТ 4: "Почему птицы зимой не улетают на юг, если им холодно?"**
**Ситуация от ребенка:** "Мама говорит, что многие птицы осенью улетают в теплые края. Но я зимой все равно вижу птиц! Почему они остались? Им же холодно и голодно! Может, они заблудились? Как им помочь?"
**Проблемный вопрос:**
- Почему некоторые птицы остаются зимовать?
- Как они выживают в морозы?
- Чем мы можем им помочь?
**Что решается:** Ребенок понимает разницу между перелетными и зимующими птицами, осознает важность помощи человека.
**Мотивация:** Эмпатия, желание понять и защитить.
---
### **ВАРИАНТ 5: "Я насыпал корм, а птицы не прилетают!"**
**Ситуация от ребенка:** "Я повесил кормушку и насыпал туда еды. Целый день ждал, а птицы не прилетели! Почему? Может, они меня боятся? Или еда им не нравится? Что я сделал не так?"
**Проблемный вопрос:**
- Почему птицы не прилетают к кормушке?
- Какой корм их привлечет?
- Где лучше повесить кормушку?
- Нужно ли делать что-то особенное?
**Что решается:** Ребенок учится терпению, правильному выбору места и корма, пониманию поведения птиц.
**Мотивация:** Желание добиться результата, любопытство.
---
### **ВАРИАНТ 6: "Мне скучно наблюдать — птицы все одинаковые!"**
**Ситуация от ребенка:** "Воспитатель говорит: 'Давайте понаблюдаем за птицами'. Но мне скучно просто смотреть! Я не знаю, что наблюдать. Они просто летают и клюют. Что в них интересного?"
**Проблемный вопрос:**
- Что интересного можно увидеть, наблюдая за птицами?
- Чем отличается поведение разных птиц?
- Что они любят есть?
- Как они общаются друг с другом?
**Что решается:** Ребенок учится замечать детали, сравнивать, анализировать — развивается наблюдательность.
**Мотивация:** Превратить скучное наблюдение в увлекательное исследование.
---
### **ВАРИАНТ 7: "Я боюсь, что птицы умрут от голода!"** (эмоциональный)
**Ситуация от ребенка:** "Зимой так холодно, и снега много! Птичкам нечего есть, они такие маленькие и худенькие. Мне страшно, что они умрут от голода или замерзнут. Я очень хочу им помочь!"
**Проблемный вопрос:**
- Как спасти птиц от голода зимой?
- Что им нужно, чтобы пережить зиму?
- Могу ли я, маленький ребенок, реально помочь?
**Что решается:** Ребенок получает реальный инструмент помощи, чувствует свою значимость, справляется с тревогой через действие.
**Мотивация:** Эмпатия, забота, желание защитить.
---
### **ВАРИАНТ 8: "Почему к моей кормушке прилетают только воробьи?"**
**Ситуация от ребенка:** "Я повесил кормушку, насыпал крошек. Прилетают только воробьи, каждый день одни и те же. А где синички? Где снегири? Я хочу увидеть разных птиц! Что нужно сделать?"
**Проблемный вопрос:**
- Почему прилетают только воробьи?
- Что нужно положить, чтобы прилетели синицы?
- Как привлечь редких птиц?
**Что решается:** Ребенок узнает о пищевых предпочтениях разных видов и учится создавать условия для разнообразия.
**Мотивация:** Желание увидеть что-то новое, интерес к разнообразию природы.

View File

@@ -0,0 +1,3 @@
- Проставить в `NrbElmaSyncEndpoint` значение `https://elma.itdev.adsw.io/pub/v1/app/approvalDeal/{0}/{1}`
- Проставить в `NrbElmaApiKey` значение токена из ELMA prod
- Синхронизировать справочники `NrbSyncBPMSoftAndElmaLookupProcess`

View File

@@ -0,0 +1,4 @@
1. Заполнить настройку "Email адрес для копии при добавлении продукта Prosperity"
2. Изменить настройку "Добавлять копию для продукта Prosperity"
3. NrbAddressEmailSender - проверить заполнение
4. Удалить объект "IT Ландшафт" из Custom перед релизом NrbITLandscape

View File

@@ -0,0 +1,2 @@
[3 сентября](obsidian://open?vault=local&file=%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7%D1%8B%2F3%20%D1%81%D0%B5%D0%BD%D1%82%D1%8F%D0%B1%D1%80%D1%8F)
[17 сентября](obsidian://open?vault=local&file=%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7%D1%8B%2F17%20%D1%81%D0%B5%D0%BD%D1%82%D1%8F%D0%B1%D1%80%D1%8F)

12
Своя игра.md Normal file
View File

@@ -0,0 +1,12 @@
| | 100 | 200 | 300 | 400 | 500 |
| --------------- | ------------------ | ------------------ | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
| Песни наоборот | Агутин - Аэропорты | Дима Билан - Держи | Звери - Районы кварталы | Корни - Ты узнаешь ее | Максим - Знаешь ли ты |
| Продолжи песню | Мы увидим сзади | Из ярких лампочек | Все твои слова | Силы не жалей | Что любят гламур |
| Вопросы от Дани | Она забыла его имя | Настольный теннис | Винни-пух | Кошка | 25 |
| Сумерки | Белла | Эдвард Каллен | Бейсбол | В балетную студию в Фениксе | Что она упала с лестницы и вылетела через окно |
| Чей плейлист | Ксюша | Даша | Света | Юля Шубина | Юля Мосина |
| Поездки | 25 тысяч шагов | Изразцы | Альберт | Княгиня Ольга | 922 |
| Факты о нас | 2 месяца | Даша Неберова | 1 год и 7 месяцев | Животные | Аллергия на текилу |
| Универ | 1832 | Норильск | Информационные технологии графического проектирования | Препод по философии (Гурьев Евгений Павлович) | Разумнова Елена Альбертовна |
| Профессия | | Канальный | Б.Н. Ельцин | Комитет по государственному контролю, использованию и охране памятников истории и культуры Санкт-Петербурга | 4 |
| Наши встречи | Уэнсдей | Август 2023 года | Учебник по металлическим конструкциям | Для смысла | Вынуть батарейки из Дашиных часов в гостиной |

View File

@@ -0,0 +1,111 @@
## Объектно-ориентирование программирование
### Абстракция
Абстрагирование — это способ выделить набор наиболее важных атрибутов и методов и исключить незначимые. Соответственно, абстракция — это использование всех таких характеристик для описания объекта. Важно представить объект минимальным набором полей и методов без ущерба для решаемой задачи.
Пример: объекту класса «программист» вряд ли понадобятся свойства «умение готовить еду» или «любимый цвет». Они не влияют на его особенности как программиста. А вот «основной язык программирования» и «рабочие навыки» — важные свойства, без которых программиста не опишешь.
Набор атрибутов и методов, доступный извне, работает как интерфейс для доступа к объекту. Через них к нему могут обращаться другие структуры данных, причем им не обязательно знать, как именно объект устроен внутри.
### Инкапсуляция
Каждый объект — независимая структура. Все, что ему нужно для работы, уже есть у него внутри. Если он пользуется какой-то переменной, она будет описана в теле объекта, а не снаружи в коде. Это делает объекты более гибкими. Даже если внешний код перепишут, логика работы не изменится.
Инкапсуляция помогает с легкостью управлять кодом. Выше мы сказали, что для обращения к объекту не нужно понимать, как работают его методы. Начальнику разработчика Ивана не обязательно знать, как именно он программирует: главное — чтобы выполнялись поставленные задачи.
Внутреннее устройство одного объекта закрыто от других: извне «видны» только значения атрибутов и результаты выполнения методов.
### Наследование
Можно создавать классы и объекты, которые похожи друг на друга, но немного отличаются — имеют дополнительные атрибуты и методы. Более общее понятие в таком случае становится «родителем», а более специфичное и подробное — «наследником».
Упомянутый программист Иван — это человек. Но «человек» — более общее определение, которое не описывает свойства, важные именно для программиста. Можно сказать, что класс «программист» унаследован от класса «человек»: программист тоже является человеком, но у него есть дополнительные свойства.
В таком случае разработчик Иван будет и человеком, и программистом одновременно. У него будут наборы свойств от обоих классов.
У одного «родителя» может быть несколько дочерних структур. Например, от «человека» можно наследовать не только «программиста», но и «директора».
Наследование позволяет реализовывать сложные схемы с четкой иерархией «от общего к частному». Это облегчает понимание и масштабирование кода. Не нужно много раз переписывать в разных объектах одни и те же свойства. Достаточно унаследовать эти объекты от одного «родителя», и «родительские» свойства применятся автоматически.
### Полиморфизм
Одинаковые методы разных объектов могут выполнять задачи разными способами. Например, у «человека» есть метод «работать». У «программиста» реализация этого метода будет означать написание кода, а у «директора» — рассмотрение управленческих вопросов. Но глобально и то, и другое будет работой.
Тут важны единый подход и договоренности между специалистами. Если метод называется delete, то он должен что-то удалять. Как именно — зависит от объекта, но заниматься такой метод должен именно удалением. Более того: если оговорено, что «удаляющий» метод называется delete, то не нужно для какого-то объекта называть его remove или иначе. Это вносит путаницу в код.
## SOLID
### Single Responsibility Principle (Принцип единственной ответственности)
Это значит, что каждый класс должен выполнять только **одну** четко определенную функцию. Если он решает более одной задачи, это может привести к сложностям в поддержке и расширении кода.
**Как следовать принципу SRP**
Сначала общую задачу нужно декомпозировать на несколько подзадач. Затем каждую подзадачу реализовать в отдельном классе.
### Open/Closed Principle (Принцип открытости/закрытости)
**Программные сущности (классы, модули, функции и т.д.) должны быть открыты для расширения, но закрыты для модификации.**
Это значит, что программные компоненты нужно спроектировать таким образом, чтобы их можно было расширять новым функционалом, не меняя исходный код. Изменения при добавлении нового кода могут сломать уже работающую логику.
**Как следовать принципу OCP**
В этом помогут абстракции, интерфейсы и наследование. Это позволит добавить новый функционал через расширение, а не модификацию существующего кода.
**Задача**
У ресторана есть система управления заказами. Нужно сделать так, чтобы она поддерживала различные виды платежей: наличные, кредитные карты и мобильные платежи.
### Liskov Substitution Principle (Принцип подстановки Барбары Лисков)
**Производные классы должны заменять свои базовые классы.**
Это значит, что объекты базовых классов должны быть заменяемы объектами производных классов без изменения ожидаемого поведения программы.
**_Базовый класс_** — это класс, от которого производные классы наследуют свойства и методы.
**Как следовать принципу LSP**
Производный класс должен сохранять все свойства базового класса и не изменять их семантику. Нужно добиться того, чтобы объекты производных классов могли безопасно заменять друг друга и базовый класс.
**Задача**
Предположим, что есть система для работы с геометрическими фигурами, в которой есть базовый класс **Shape** и производные классы **Circle** и **Square**.
### Interface Segregation Principle (Принцип разделения интерфейса)
**Клиенты не должны зависеть от интерфейсов, которые они не используют.**
Это значит, что нужно создавать только небольшие и узконаправленные интерфейсы, не перегруженные ненужными методами.
**Как следовать принципу ISP**
Каждый интерфейс должен существовать для определенных задач и содержать только те методы, которые эти задачи решают.
**Задача**
Предположим, у нас есть система управления документами с интерфейсом **Document,** содержащим методы для работы с документами, такие как **open()**, **save()** и **close().** Однако одним клиентам требуется только возможность открывать и закрывать документы, а другим — только сохранять и закрывать их.
### Dependency Inversion Principle (Принцип инверсии зависимостей)
**Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба типа модулей должны зависеть от абстракций. Абстракции не должны зависеть от деталей, но детали должны зависеть от абстракций.**
Это значит, что код должен быть организован таким образом, чтобы зависимости между компонентами программы были основаны на абстракциях, а не на конкретных реализациях. Таким образом, компоненты легко заменить или изменить без воздействия на другие части системы.
**Как следовать принципу DIP**
— Использовать интерфейсы или абстрактные классы для определения зависимостей между компонентами.
— Следовать остальным принципам SOLID, чтобы создавать хорошо структурированные и модульные системы.
— Применять шаблоны проектирования, такие как **Dependency Injection** (Внедрение зависимостей) или **Inversion of Control** (Инверсия управления), чтобы передавать зависимости извне вместо того, чтобы создавать их внутри компонентов.
**Внедрение зависимостей**: объект не создает свои зависимости самостоятельно, они предоставляются ему извне, например через конструктор, методы или свойства.
**Инверсия управления**: управление частью приложения переносится на внешний фреймворк или контейнер, управляющий жизненным циклом объектов.
**Задача**
Нужно разработать приложение для работы с базой данных студентов. Каждый студент имеет имя, возраст и список предметов, которые он изучает.

View File

@@ -0,0 +1,80 @@
## Заявка
- Черновик
- На утверждении
- На рассмотрении в ЦПРП
- Зарегистрирована (финальный)
- Отклонена
## Проект
- Открыт - 01
- Закрыт (финальный) - 02
- Приостановлен - 03
- На закрытии в ЦПРП (финальный) - 04
- На закрытии в ФС (финальный) - 05
- Аннулирован (финальный) - 06
- Закрыт для списания TS - 07
## Рассуждения
1. Когда мы получаем AP ID (Id проекта) по интеграции, то Заявка в статусе "Зарегистрирована", а проект в статусе "Открыт"
2. Мы можем посылать изменения в статусах "Зарегистрирована и Открыт" или "Зарегистрирована и Закрыт для списания TS"
3. Заявка в статусах "Черновик", "На утверждении", "На рассмотрении в ЦПРП" в CRM не хранятся, так как мы не можем получить по ним такие данные или нужно будет интегрировать статус заявки в ответ по готовности проекта.
4. Каждый день отправляем запрос по измененным данным в заявках, у которых статус "Зарегистрирована" и проект в статусе "Открыт" или "Приостановлен" или "Закрыт для списания TS".
5. Если получаем статус проекта "Закрыт" или "На закрытии в ФС" или "Аннулирован" или "На закрытии в ЦПРП", то по таким заявкам мы больше не будем отправлять данные, так как статусы проектов финальные.
6. В конечном итоге получается, что отправляются измененные данные, у которых
1. Заявка "Зарегистрирована" и Проект "Открыт"
2. Заявка "Зарегистрирована" и Проект "Приостановлен"
3. Заявка "Зарегистрирована" и Проект "Закрыт для списания TS"
4. Все измененные данные будут отправляться каждый день, пока по ним не будет получен положительный ответ, то есть будет присутствовать накопительный эффект, но как только статус проекта перейдет в финальный, то данные больше не будут посылаться в систему
## Пример запросов
```json
{
    "projects": [
        {
            "orderName": "Сделка-1", // Название проекта
            "orderDate": "2025-12-31", // Дата сделки из CRM
            "clientId": "123-123", // Код клиента
            "headProjectId": "00123123", // ИНС руководителя проекта
            "managerProjectId": "00123124", // ИНС менеджера по продажам
            "directorProjectId": "00123125", // ИНС директора проекта
            "orderAmount": 12345.67, // Сумма сделки
            "projectId": "AP001", // AP ID проекта
            "applicationId": "57ef229c-d8e4-4da5-b87a-7205e7eb7c43" // Id заявки в CRM
        },
        {
            "orderName": "Сделка-2", // Название проекта
            "orderDate": "2026-01-31", // Дата сделки из CRM
            "clientId": "123-124", // Код клиента
            "headProjectId": "00123123", // ИНС руководителя проекта
            "managerProjectId": "00123124", // ИНС менеджера по продажам
            "directorProjectId": "00123125", // ИНС директора проекта
            "orderAmount": 12348.67, // Сумма сделки
            "projectId": "AP002", // AP ID проекта
            "applicationId": "57ef229c-d8e4-4da5-b87a-7205e7eb7c44" // Id заявки в CRM
        }
    ]
}
```
## Пример ответов
```json
{
    "projects": [
        {
            "success": true, // Статус обработки (true - Успешно, false - Ошибка)
            "projectId": "AP001", // AP ID проекта
            "errorMessage": "", // Текст ошибки, если не получилось изменить
            "projectStatus": "01" // Id статуса проекта
        },
        {
            "success": false, // Статус обработки (true - Успешно, false - Ошибка)
            "projectId": "AP002", // AP ID проекта
            "errorMessage": "Нельзя менять данные в рамках текущего статуса", // Текст ошибки, если не получилось изменить
            "projectStatus": "02" // Id статуса проекта
        }
    ]
}
```

9
Токены.md Normal file
View File

@@ -0,0 +1,9 @@
tk_ed7b49b13a24516637fdcaf50a693cd13c315461
ptr_BlsQt8gitAdCORGf1393GM0kyIceijX0weA+BkIK8vk= Portainer
61db24d5de33418e85d87574433c1360 Prowlarr
7a018f8d09294257b26f80bb8b2658d2 Jellyfin
fb49609e3b7b49c5c9fba207fe0dcf28c3fc9305 gitea token

View File

@@ -0,0 +1,556 @@
## ❗ ЗА 1 МЕСЯЦ (январь-февраль 2026)
### **4. UNIVERSAL STUDIOS JAPAN БИЛЕТЫ (КРИТИЧНО!)**
**Что:** Входные билеты + Express Pass **День:** 15 марта 2026 (суббота) **Количество:** 2 билета
**Где купить:**
- 🌐 Официальный сайт USJ: [https://www.usj.co.jp/web/en/us](https://www.usj.co.jp/web/en/us) (на английском)
- 🌐 Klook.com (часто дешевле!)
**Что купить:**
**А) Входной билет (обязательно):**
- **1-Day Studio Pass**
- Цена: ~¥8,600-10,400 (зависит от даты)
- **ВАЖНО:** Выбирайте точную дату - 15 марта!
**Б) Express Pass (ОБЯЗАТЕЛЬНО!):**
- **Express Pass 7** (рекомендую): ¥10,800-24,800
- Включает: Harry Potter, Super Nintendo World, 5+ других аттракционов
- **Без очередей!**
- Или **Express Pass 4**: ¥7,800-14,800
- Включает: Harry Potter OR Nintendo, 3 других аттракциона
**ИТОГО на двоих:** ~¥38,000-70,000 ($250-470)
**⚠️ КРИТИЧНО:**
- **Суббота = ОЧЕНЬ много народу**, цены выше
- Билеты **быстро раскупаются** за месяц!
- Express Pass **ОБЯЗАТЕЛЕН** - без него очереди 1.5-2 часа
- Покупайте **ЗА 1-2 МЕСЯЦА!**
**ЧТО ПОЛУЧИТЕ:**
- QR-коды на email
- Распечатайте или сохраните на телефон
- Показывайте на входе
---
## ❗ ЗА 2-4 НЕДЕЛИ (февраль 2026)
### **5. HAKONE FREE PASS (опционально - можно купить в Японии)**
**Что:** Проездной для Хаконэ (фуникулеры, канатные дороги, автобусы, корабль) **Срок:** 2 дня **Цена:** ~¥6,100 × 2 = ¥12,200
**Где купить:**
- **В России:** Japan Experience (доставка Exchange Order)
- **В Японии:** На станции Odawara (рекомендую!)
**Рекомендация:** Покупайте в Одаваре 7 марта, проще!
---
# 📅 ЧАСТЬ 2: ПОКУПКИ В ЯПОНИИ
---
## 📍 ДЕНЬ 0: ПРИЛЕТ В ТОКИО (2 марта, вечер)
### **АЭРОПОРТ НАРИТА - СРАЗУ ПО ПРИЛЕТУ**
**Где:** После прохождения таможни, в зале прилета
---
### **1. IC-КАРТА SUICA/PASMO**
**Что это:** Электронная карта для метро/автобусов/магазинов **Где купить:**
- Автоматы на станции JR в аэропорту
- Или JR East Travel Service Center (офис JR)
**Варианты:**
**А) Welcome Suica (для туристов):**
- Цена: ¥1,000-2,000 (без депозита!)
- Срок: 28 дней
- Невозвратная
- **Рекомендую!**
**Б) Обычная Suica:**
- Цена: ¥1,000-2,000 + депозит ¥500
- Срок: 10 лет
- Возвратная (вернете депозит при возврате карты)
**Что делать:**
1. Найдите автомат с надписью "Suica" или "PASMO"
2. Выберите английский язык
3. Купите Welcome Suica за ¥2,000 (¥1,500 баланс + ¥500 стоимость)
4. Карта выдается моментально
5. Купите 2 карты (на каждого)
**Пополнение:**
- В автоматах на станциях
- В комбини (7-Eleven, FamilyMart, Lawson)
- ТОЛЬКО наличными!
- Пополняйте по ¥2,000-3,000 когда нужно
**ИТОГО:** ¥4,000 на двоих (первая покупка)
---
### **2. НАЛИЧНЫЕ ЙЕНЫ**
**Где:** Банкомат в аэропорту (7-Eleven ATM или Japan Post Bank)
**Сколько снять:**
- **Сразу:** ¥50,000-80,000 (~$340-540)
- Этого хватит на 3-4 дня
**Почему много:**
- 60% мест в Японии НЕ принимают карты
- Рестораны, храмы, рынки - только наличные
- Комбини принимают карты, но не везде
**Где еще снимать:**
- 7-Eleven (банкоматы работают 24/7 с зарубежными картами)
- Japan Post Bank
- Избегайте банкоматы обычных банков (высокие комиссии)
---
### **3. POCKET WiFi (если заказывали)**
**Где:** Стойка в зале прилета
- Ищите вашу компанию (Japan Wireless, GA, etc.)
- Покажите подтверждение
- Получите роутер + зарядку
- Залог обычно НЕ требуется
**Или купите SIM-карту:**
- В аэропорту есть киоски
- ~¥3,000-5,000 за 7-14 дней
- Но Pocket WiFi удобнее (делите на двоих)
---
### **4. ТРАНСПОРТ В ТОКИО**
**Варианты из Narita в Tokyo:**
**А) Narita Express (N'EX) - рекомендую:**
- До Tokyo Station: 60 минут, ¥3,070
- До Shinjuku: 80 минут, ¥3,250
- Комфортный, быстрый
- **НЕ покрывается никакими Pass!**
- Покупайте билет в автомате JR в аэропорту
**Б) Keisei Skyliner:**
- До Ueno: 41 минута, ¥2,570
- До Nippori: 36 минут, ¥2,570
- Самый быстрый
- НЕ покрывается Pass
**В) Airport Limousine Bus:**
- До отеля: 90-120 минут, ¥3,200
- Удобно с багажом
- Прямо до района отеля
**ИТОГО на двоих:** ¥5,140-6,500
---
## 📍 ДЕНЬ 1-3: ТОКИО (3-5 марта)
**Транспорт:** Используйте Suica для всех поездок в метро
**Расходы:**
- ¥1,000-1,500/день на человека на метро
- Пополняйте Suica в автоматах когда баланс <¥500
**Ничего покупать НЕ нужно!** Просто пользуйтесь Suica.
---
## 📍 ДЕНЬ 4: КАМАКУРА (6 марта)
### **УТРО: TOKYO STATION или SHINJUKU STATION**
**Что купить:** Билет в Камакуру туда-обратно
**Где:** Автомат JR Ticket Machine (зеленые автоматы "Midori-no-madoguchi")
**Как:**
**Из Shinjuku (если отель там):**
1. Идите на JR Shonan-Shinjuku Line
2. Купите билет Shinjuku → Kamakura (¥920)
3. Обратный билет купите в Камакуре перед возвратом
4. Время: ~1 час прямо
**Из Tokyo Station:**
1. JR Yokosuka Line
2. Билет Tokyo → Kamakura (¥920)
3. Время: ~1 час прямо
**ИТОГО:** ~¥2,000 на двоих (туда-обратно)
**⚠️ АЛЬТЕРНАТИВА:** Можно не покупать билеты - просто используйте Suica (автоматически спишется)
---
## 📍 ДЕНЬ 5: ТОКИО → ХАКОНЭ (7 марта)
### **УТРО: TOKYO STATION**
**📍 Место:** Tokyo Station, JR Ticket Office (Midori-no-madoguchi)
**Время:** 8:00-9:00 (рано, до толп)
---
### **ЧТО КУПИТЬ:**
**1) Билет на синкансэн Tokyo → Odawara**
**Как купить:**
1. Идите в **JR Ticket Office** (зеленое окно "みどりの窓口")
2. Скажите (покажите на бумажке):
- "Tokyo to Odawara, Shinkansen Kodama, 2 tickets, today, 10:00" (или ваше время)
3. Оплата: наличные или карта
4. Получите 2 билета
**Цена:** ~¥4,500 × 2 = **¥9,000**
**⚠️ ВАЖНО:**
- Садитесь только на **Kodama** или **Hikari** (НЕ Nozomi - дороже и не нужен)
- Время: ~35 минут
- Можно купить за день до (6 марта вечером)
---
### **ПО ПРИБЫТИИ В ОДАВАРА (Odawara Station)**
**📍 Место:** Odawara Station, Hakone Tourist Information Center
---
### **2) HAKONE FREE PASS (2 дня)**
**Где купить:** Odakyu Tourist Information Center (в здании станции)
**Что купить:**
- **Hakone Free Pass (2 days)** - from Odawara
- Цена: ~¥5,000 × 2 = **¥10,000**
- Срок: 7-8 марта (2 дня)
**Что включает:**
- ✅ Автобусы Hakone Tozan Bus
- ✅ Hakone Tozan Railway (поезд)
- ✅ Hakone Ropeway (канатная дорога)
- ✅ Пиратский корабль на озере Аси
- ✅ Hakone Tozan Cable Car (фуникулер)
- ✅ Скидки на онсэны и музеи
**Как купить:**
1. Найдите Odakyu Service Center (сразу на станции)
2. Скажите: "Hakone Free Pass, 2 days, 2 adults"
3. Оплата: наличные или карта
4. Получите физический Pass (пластиковая карта)
**ИТОГО за день:** ¥9,000 + ¥10,000 = **¥19,000**
---
## 📍 ДЕНЬ 6: ХАКОНЭ → КИОТО (8 марта)
### **УТРО-ДЕНЬ: ОДАВАРА СТАНЦИЯ**
**📍 Место:** Odawara Station, JR Ticket Office
**Время:** Утром, после выезда из рёкана (~10:00-11:00)
---
### **ЧТО КУПИТЬ:**
**Билет на синкансэн Odawara → Kyoto**
**⚠️ САМЫЙ ДОРОГОЙ БИЛЕТ ПОЕЗДКИ!**
**Как купить:**
1. Идите в **JR Ticket Office** (みどりの窓口)
2. Покажите на бумажке:
- "Odawara to Kyoto, Shinkansen Hikari, 2 tickets, today, 12:00" (ваше время)
3. **НЕ покупайте Nozomi** (дороже и не нужен)
4. **Hikari** или **Sakura** - подходящие поезда
5. Оплата: наличные или карта
**Цена:** ~¥13,000 × 2 = **¥26,000** 💰
**Время в пути:** ~2 часа 15 минут
**⚠️ ВАЖНО:**
- Можно купить заранее онлайн через Smart EX (если есть японская карта)
- Или за день до в Одаваре
- Или утром в день отъезда (НО может не быть мест!)
**Рекомендация:** Купите вечером 7 марта в Одаваре, чтобы гарантировать места!
---
## 📍 ДЕНЬ 7-11: КИОТО (9-13 марта)
### **ПО ПРИБЫТИИ: KYOTO STATION**
**📍 Место:** Kyoto Station, автобусная информационная стойка
---
### **ЧТО КУПИТЬ:**
**Автобусный проездной Kyoto City Bus Pass**
**Где:**
- Bus ticket office на 1 этаже Kyoto Station (сразу у выхода к автобусам)
- Или в автоматах около автобусных остановок
**Что купить:**
- **1-Day Bus Pass** (一日乗車券)
- Цена: ¥700/день
- **Купите сразу 5 штук на каждого** = ¥3,500 × 2 = **¥7,000**
**Что покрывает:**
- Безлимитные поездки на городских автобусах Киото
- Покрывает почти все храмы и достопримечательности
**Как использовать:**
- Активируется при первом использовании
- Действует до полуночи
- Показывайте водителю при выходе
**Альтернатива:**
- Можно покупать каждый день (если не уверены в количестве)
- Одна поездка: ¥230
- Pass окупается с 3-й поездки
---
### **ДЕНЬ 10: НАРА (12 марта)**
**Транспорт:** JR Nara Line из Kyoto
**Билет:**
- Покупайте в автомате или используйте Suica
- ~¥720 в одну сторону
- ~¥1,400 туда-обратно на человека
- **ИТОГО:** ¥2,800 на двоих
**Или:**
- Используйте Suica (автоматически спишется)
---
## 📍 ДЕНЬ 12: КИОТО → ОСАКА (14 марта)
### **УТРО: KYOTO STATION**
**Транспорт:** JR Tokaido Line
**Билет:**
- Покупайте в автомате JR или используйте Suica
- ~¥560 на человека
- Время: 30 минут
**⚠️ НО ЛУЧШЕ:**
---
### **🎫 АКТИВИРУЙТЕ KANSAI-HIROSHIMA PASS!**
**📍 Где:** Kyoto Station, JR Ticket Office (Midori-no-madoguchi)
**Время:** Утром перед выездом в Осаку (9:00-10:00)
**Что делать:**
1. Найдите **JR Ticket Office** (зеленое окно)
2. Покажите:
- **Exchange Order** (распечатка из России)
- **Загранпаспорт** с туристической визой
3. Заполните короткую форму
4. Получите **физический Pass** (пластиковая карта)
5. Укажите дату активации: **14 марта 2026**
**Срок действия Pass:** 14-18 марта (5 дней)
**С этого момента:**
-Все JR поезда в Kansai - БЕСПЛАТНО
- ✅ Синкансэн Osaka ↔ Hiroshima - БЕСПЛАТНО
- ✅ Паром на Миядзиму - БЕСПЛАТНО
- ✅ Haruka до аэропорта - БЕСПЛАТНО
**Киото → Осака:**
- Теперь БЕСПЛАТНО с Pass!
- Просто показывайте Pass на турникете (проход через боковые ворота с сотрудником)
---
## 📍 ДЕНЬ 12-14: ОСАКА (14-16 марта)
**Транспорт:**
- JR линии: используйте Kansai-Hiroshima Pass (бесплатно)
- Метро Osaka Metro: используйте Suica (оплачивайте отдельно)
**Опционально:**
- **Osaka Amazing Pass** (1 день: ¥2,800)
- Безлимитное метро + 40+ достопримечательностей
- Покупайте если планируете много метро и музеев
- Или просто используйте Suica (проще)
**Для USJ (15 марта):**
- У вас уже есть билеты (купили заранее!)
- Просто показывайте QR-код на входе
- До USJ: JR Yumesaki Line от Osaka Station (15 минут)
- **БЕСПЛАТНО** с Kansai-Hiroshima Pass! ✅
---
## 📍 ДЕНЬ 15: ОСАКА → ХИРОСИМА (17 марта)
### **УТРО: SHIN-OSAKA STATION**
**📍 Место:** Shin-Osaka Station, JR Ticket Office
---
### **ЧТО ДЕЛАТЬ:**
**Зарезервировать место на синкансэн**
**С Kansai-Hiroshima Pass:**
- Синкансэн Shin-Osaka → Hiroshima **БЕСПЛАТНЫЙ!**
- **НО места нужно резервировать!**
**Как:**
1. Идите в **JR Ticket Office** или автомат
2. Покажите **Kansai-Hiroshima Pass**
3. Скажите: "Reserved seat, Shin-Osaka to Hiroshima, 2 seats, today, 10:00" (ваше время)
4. **БЕСПЛАТНО!** Просто получите билеты с местами
5. Или езжайте без резерва (свободные вагоны есть)
**⭐ ПЛЮС:**
- С Kansai-Hiroshima Pass можете садиться на **Nozomi/Mizuho!**
- Это самые быстрые поезда! (1 час 20 минут вместо 1 час 40 минут)
**Время в пути:**
- Nozomi: 1 час 20 минут ⚡
- Hikari: 1 час 40 минут
**Рекомендация:**
- Резервируйте места вечером 16 марта
- Или утром 17 марта
- Или езжайте без резерва (обычно места есть в будни)
---
## 📍 ДЕНЬ 16: ХИРОСИМА → МИЯДЗИМА (18 марта)
**Транспорт:** Полностью покрыт Kansai-Hiroshima Pass!
**Хиросима → Miyajimaguchi:**
- JR Sanyo Line (27 минут)
- **БЕСПЛАТНО** с Pass ✅
**Miyajimaguchi → Miyajima Island:**
- JR Ferry (10 минут)
- **БЕСПЛАТНО** с Pass ✅
**Обратно в Осаку вечером:**
- Miyajima → Hiroshima → Shin-Osaka (синкансэн)
- Всё **БЕСПЛАТНО** с Pass ✅
**Ничего покупать НЕ нужно!**
---
## 📍 ДЕНЬ 17: ОСАКА → АЭРОПОРТ КАНСАЙ (19 марта)
### **УТРО: TENNOJI или SHIN-OSAKA STATION**
**Транспорт:** Haruka Express
**С Kansai-Hiroshima Pass:**
- Haruka Express **БЕСПЛАТНЫЙ!**
- Время: 50 минут от Shin-Osaka, 30 минут от Tennoji
**Что делать:**
1. Идите на станцию JR
2. Найдите платформу Haruka
3. Покажите **Kansai-Hiroshima Pass** на турникете
4. Садитесь на поезд
5. Приезжаете прямо в аэропорт
**⚠️ НО Pass истекает 18 марта!**
**Если Pass истек:**
- Купите билет Haruka: ~¥2,900 на человека
- Или Nankai Railway: ~¥920 (медленнее)
**Рекомендация:**
- Продлите Pass на 1 день? НЕТ, нельзя
- Купите отдельный билет Haruka за ¥2,900 × 2 = **¥5,800**

View File

@@ -0,0 +1,261 @@
## 🚄 КАК ДОБИРАТЬСЯ МЕЖДУ ГОРОДАМИ
### **Маршрут:** Токио → Хаконэ → Киото → Осака → Хиросима → Миядзима → Осака (вылет)
| Переезд | Транспорт | Время | Стоимость без JR Pass | С JR Pass |
| ----------------------- | ------------------------------ | --------- | --------------------- | --------- |
| **Токио → Хаконэ** | Синкансэн до Одавара + автобус | ~1.5 ч | ¥4,000 | ✅ Покрыто |
| **Хаконэ → Киото** | Автобус до Одавара + синкансэн | ~2.5 ч | ¥13,000 | ✅ Покрыто |
| **Киото → Осака** | JR или Kintetsu | 15-30 мин | ¥560 | ✅ Покрыто |
| **Осака → Хиросима** | Синкансэн Hikari/Sakura | ~1.5 ч | ¥10,000 | ✅ Покрыто |
| **Хиросима → Миядзима** | JR + паром | ~40 мин | ¥600 | ✅ Покрыто |
| **Хиросима → Осака** | Синкансэн Hikari/Sakura | ~1.5 ч | ¥10,000 | ✅ Покрыто |
## 🏨 ЛУЧШИЕ РАЙОНЫ ДЛЯ ПРОЖИВАНИЯ
### **ТОКИО (4 ночи)**
**🏆 Рекомендуемые районы:**
1. **Синдзюку (Shinjuku)** ⭐ Лучший выбор
- ✅ Главный транспортный хаб
- ✅ Много отелей, ресторанов
- ✅ Удобно для всех достопримечательностей
- ✅ Ночная жизнь
- 💰 ¥6,000-12,000/ночь
2. **Сибуя (Shibuya)**
- ✅ Молодежный район
- ✅ Отличный шопинг
- ✅ Хорошая транспортная развязка
- 💰 ¥7,000-13,000/ночь
3. **Асакуса (Asakusa)**
- ✅ Традиционная атмосфера
- ✅ Около храма Сэнсо-дзи
- ✅ Тише, чем Синдзюку
- ✅ Дешевле
- 💰 ¥5,000-10,000/ночь
**❌ Избегать:** Роппонги (дорого и шумно)
### **ХАКОНЭ (1-2 ночи)**
**🏆 Рекомендуемые районы:**
1. **Хаконэ-Юмото** ⭐ Лучший выбор
-У станции, удобно
- ✅ Много рёканов с онсэнами
- ✅ Магазины, рестораны
- 💰 Рёкан: ¥15,000-30,000/чел (с ужином и завтраком)
2. **Гора, Мияношита**
- ✅ Тихо, в горах
- ✅ Традиционные рёканы
- 💰 ¥20,000-40,000/чел
3. **У озера Аси**
- ✅ Виды на Фудзи
- ✅ Спокойная атмосфера
- 💰 ¥25,000-50,000/чел
**💡 Совет:** Обязательно остановитесь в **рёкане с онсэном** - это главный опыт Хаконэ!
---
### **КИОТО (5 ночей)**
**🏆 Рекомендуемые районы:**
1. **Около станции Киото** ⭐ Лучший для первого раза
- ✅ Удобно для поездок
- ✅ Автобусная развязка
- ✅ Современные отели
- ✅ Недалеко до всех храмов
- 💰 ¥6,000-12,000/ночь
2. **Гион / Хигасияма**
- ✅ Традиционная атмосфера
- ✅ Район гейш
- ✅ Пешая доступность к храмам
- 💰 ¥10,000-20,000/ночь
3. **Каварамачи (Kawaramachi)**
- ✅ Центр города
- ✅ Рестораны, шопинг
- ✅ Река Камо рядом
- 💰 ¥7,000-15,000/ночь
**❌ Избегать:** Арашияма (далеко от центра, неудобно)
---
### **ОСАКА (3 ночи)**
**🏆 Рекомендуемые районы:**
1. **Нанба / Дотонбори (Namba/Dotonbori)** ⭐ Лучший выбор
-В центре событий
- ✅ Еда, развлечения
- ✅ Метро, автобусы
- ✅ 15 минут до Universal Studios
- 💰 ¥7,000-13,000/ночь
2. **Умэда (Umeda)**
- ✅ Деловой центр
- ✅ Главный хаб транспорта
- ✅ Торговые центры
- 💰 ¥8,000-14,000/ночь
3. **Около станции Osaka**
- ✅ Удобно для синкансэна
- ✅ Хорошая развязка
- 💰 ¥6,000-11,000/ночь
---
### **ХИРОСИМА (1 ночь)**
**🏆 Рекомендуемые районы:**
1. **Около станции Hiroshima** ⭐ Лучший выбор
- ✅ Удобно для поездок
- ✅ Трамваи до всех мест
- 💰 ¥6,000-10,000/ночь
2. **Район Peace Park**
- ✅ Рядом с мемориалом
- ✅ Тихо вечером
- 💰 ¥7,000-12,000/ночь
**💡 Совет:** Хиросима компактный город, любой район подойдет
## 🗾 КРАТКАЯ ХАРАКТЕРИСТИКА КАЖДОГО ГОРОДА
### **🗼 ТОКИО (4 дня)**
**Суть:** Мегаполис контрастов - от традиционных храмов до футуристических небоскребов
**Must-see:**
- ⛩️ Храм Сэнсо-дзи (Асакуса) - старейший храм
- 🌲 Мэйдзи-дзингу - главный синтоистский храм
- 🚶 Сибуя перекресток - символ современного Токио
- 🏙️ Синдзюку - небоскребы и бесплатная смотровая
- 🐟 Рынок Тоёсу - свежайшие суши на завтрак
- 🎮 Акихабара - мировая столица аниме и электроники
**Атмосфера:** Энергичная, быстрая, современная, огромная
**Еда:** Суши, рамен, тонкацу, тэмпура, якитори
---
### **🗻 ХАКОНЭ (1-2 дня)**
**Суть:** Горный курорт с онсэнами и видами на Фудзи
**Must-see:**
- 🌋 Овакудани - вулканическая долина, черные яйца
- ⛵ Озеро Аси - пиратский корабль, виды на Фудзи
- 🛁 Онсэн в рёкане - традиционные горячие источники
- 🚡 Канатная дорога - панорамный маршрут
- ⛩️ Хаконэ-дзиндзя - тории в воде озера
**Атмосфера:** Спокойная, природная, расслабляющая
**Еда:** Хаконэ соба, кайсэки в рёкане, черные яйца
---
### **🏯 КИОТО (5 дней)**
**Суть:** Древняя столица Японии, сердце традиционной культуры
**Must-see:**
- 🦊 Фусими Инари - 10,000 красных тории
- ⛩️ Кинкаку-дзи - Золотой павильон (самый фотогеничный)
- 🎋 Бамбуковая роща Арасияма - волшебный зеленый тоннель
- 🏛️ Киёмидзу-дэра - храм на сваях с панорамой
- 🚶 Гион - район гейш, традиционные улочки
- 🦌 Нара - 1,200+ свободных оленей и гигантский Будда
**Атмосфера:** Традиционная, спокойная, духовная, историческая
**Еда:** Кайсэки, юдофу (тофу), обанзай, вегетарианская кухня
**Время:** 5 дней - идеально (можно и 4, но будет спешка)
---
### **🍜 ОСАКА (3 дня с Universal Studios)**
**Суть:** Гастрономическая столица Японии и развлечения
**Must-see:**
- 🎢 Universal Studios Japan - Harry Potter + Super Nintendo World
- 🏯 Замок Осака - один из трех великих замков
- 🌃 Дотонбори - неоновые огни, уличная еда
- 🐟 Куротомон Итиба - рынок "кухня Осаки"
- 🏙️ Умэда Sky Building - футуристическая смотровая
**Атмосфера:** Веселая, расслабленная, гастрономическая, энергичная
**Еда:**
- 🐙 Такояки (шарики с осьминогом) - символ города
- 🥞 Окономияки (японский блин)
- 🍢 Кусикацу (жареные шашлычки)
- 🦀 Крабы в ресторане Kani Doraku
- 🥩 Якинику (японское барбекю)
**Время:** 3 дня (1 полный день USJ + 2 дня город)
---
### **🕊️ ХИРОСИМА (1 день)**
**Суть:** Город-символ мира, важное историческое место
**Must-see:**
- 💣 Атомный купол - объект ЮНЕСКО, символ трагедии
- 🏛️ Музей мира - обязательное, но тяжелое эмоционально
- 🌳 Мемориальный парк Мира - кенотаф, памятник детям
- 🏯 Замок Хиросима (если есть время)
**Атмосфера:** Торжественная, трогательная, мирная
**Еда:**
- 🥞 Хиросима-яки - окономияки с лапшой (отличается от осакского!)
- 🦪 Устрицы - местная специальность
- 🐟 Анаго-меши - угорь на рисе
**Время:** 1 день достаточно (можно 2, если хотите глубже)
---
### **⛩️ МИЯДЗИМА (1 день)**
**Суть:** Священный остров с "плавающими" воротами тории
**Must-see:**
- ⛩️ Ицукусима-дзиндзя - святилище ЮНЕСКО, тории в воде
- ⛰️ Гора Мисэн - один из трех лучших видов Японии
- 🦌 Священные олени - 500+ диких оленей
- 🍁 Момидзи мандзю - пирожные-кленовые листья
- 🦪 Устрицы - свежайшие!
**Атмосфера:** Священная, умиротворенная, природная, магическая
**Еда:**
- 🦪 Устрицы (жареные, на гриле, сырые)
- 🍁 Момидзи мандзю (везите как сувенир!)
- 🐟 Анаго-меши
**Время:** 6-8 часов на острове (или ночевка для особого опыта)