{"id":500767,"date":"2026-10-29T09:30:10","date_gmt":"2026-10-29T06:30:10","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=500767"},"modified":"2026-10-29T09:30:10","modified_gmt":"2026-10-29T06:30:10","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=500767","title":{"rendered":"UI-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439 \u0438 AI-\u0430\u0433\u0435\u043d\u0442\u043e\u0432: Rust, C, C++, ASM, 6 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c, 900 \u041a\u0411"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e \u0432\u043e\u043f\u043b\u043e\u0449\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u0430\u043c\u044b\u0435 \u0441\u043c\u0435\u043b\u044b\u0435 \u0438\u0434\u0435\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044e LLM. \u042f \u0432\u0435\u0440\u044e, \u0447\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0430\u043c\u043e\u0439 \u0438\u0434\u0435\u0438 \u0441\u0442\u0430\u043b\u0430 \u0432\u044b\u0448\u0435 \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u0432\u0441\u0451 \u0440\u0435\u0448\u0430\u0435\u0442.<\/p>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0445\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043b\u0451\u0433\u043a\u0438\u0439 UI-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a. \u041e\u043d \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Rust, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 Windows (x64, ARM), macOS, Linux, Android, iOS\/iPadOS \u0438 \u0434\u0430\u0436\u0435 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0447\u0435\u0440\u0435\u0437 WASM (\u043e\u043d\u043b\u0430\u0439\u043d-\u0434\u0435\u043c\u043e \u043d\u0430 GitHub Pages). \u0421\u043d\u0430\u0431\u0436\u0451\u043d \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 Rust, C, C++ \u0438 \u0434\u0430\u0436\u0435 ASM.<\/p>\n<p>\u041e\u0442\u043b\u0438\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0438\u043c\u0435\u0435\u0442 \u0434\u0432\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u2013 \u043b\u0438\u0431\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 UI \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439, \u043b\u0438\u0431\u043e \u0436\u0435 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442 UI \u0432 JSON \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0441 \u043d\u0438\u043c \u043c\u043e\u0433\u043b\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c AI-\u0430\u0433\u0435\u043d\u0442\u044b \u0431\u0435\u0437 \u0441\u043d\u044f\u0442\u0438\u044f \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u043e\u0432. \u042d\u0442\u0430 \u0436\u0435 \u0444\u0438\u0448\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0431\u0440\u043e\u0441\u0438\u0442\u044c UI \u043f\u043e SSH (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043d\u0438\u0436\u0435).<\/p>\n<h3>\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0438\u0434\u0435\u044f \u2013 JSON \u0432\u043e \u0432\u0441\u0451\u043c<\/h3>\n<p>\u0425\u043e\u0442\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u0435 JSON-\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0442\u0447\u0435\u0439 \u0432\u043e \u044f\u0437\u044b\u0446\u0435\u0445, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b \u0435\u0433\u043e \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u044b\u043c. \u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0435\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435, \u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u0435\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0430 (\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0443\u0442\u0438\u043b\u0438\u0442, \u0430 \u043d\u0435 \u0434\u043b\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438).<\/p>\n<p>\u041d\u0438\u0436\u043d\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0443\u043c\u0435\u0435\u0442 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e JSON-\u043a\u0430\u0434\u0440 \u0438\u0437 9 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432. \u0412\u043e\u0442 \u043e\u043d\u0438:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041f\u0440\u0438\u043c\u0438\u0442\u0438\u0432<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>rect<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>[x, y, w, h]<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>fill<\/code>, <code>stroke<\/code>, <code>width<\/code>, <code>radius<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441\u043e \u0441\u043a\u0440\u0443\u0433\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0443\u0433\u043b\u0430\u043c\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>line<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>[x1, y1, x2, y2]<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>color<\/code>, <code>width<\/code>, <code>cap<\/code> (<code>butt<\/code> \/ <code>round<\/code>)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043e\u0442\u0440\u0435\u0437\u043e\u043a<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>circle<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>[cx, cy, r]<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>fill<\/code>, <code>stroke<\/code>, <code>width<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043a\u0440\u0443\u0433<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>tri<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>[x1, y1, x2, y2, x3, y3]<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>fill<\/code>, <code>stroke<\/code>, <code>width<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a (\u0441\u0442\u0440\u0435\u043b\u043a\u0438, \u0433\u0430\u043b\u043e\u0447\u043a\u0438)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>poly<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>[[x, y], [x, y], \u2026]<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>fill<\/code>, <code>stroke<\/code>, <code>width<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0437\u0430\u043c\u043a\u043d\u0443\u0442\u044b\u0439 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a (\u0441\u0435\u043a\u0442\u043e\u0440\u044b \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432, \u0441\u0432\u043e\u0438 \u0444\u0438\u0433\u0443\u0440\u044b)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>text<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\"\u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430\"<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>at: [x, y]<\/code>, <code>size<\/code>, <code>color<\/code>, <code>font<\/code>, <code>bold<\/code>, <code>italic<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0442\u0440\u043e\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430; \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u043b\u043e\u0439 \u044d\u043a\u0440\u0430\u043d\u043e\u0432<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>image<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>[x, y, w, h]<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>src<\/code>, <code>fit<\/code> (<code>cover<\/code> \/ <code>contain<\/code> \/ <code>fill<\/code>), <code>radius<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>clip<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>[x, y, w, h]<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>items: [\u2026]<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0433\u0440\u0443\u043f\u043f\u0430, \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u043d\u0430\u044f \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0443 (\u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>hit<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>[x, y, w, h]<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>id<\/code>, <code>cursor<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u043b\u044f \u043c\u044b\u0448\u0438 \u0438 \u043a\u0430\u0441\u0430\u043d\u0438\u0439 (\u043d\u0435 \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0423\u0440\u043e\u0432\u043d\u0435\u043c \u0432\u044b\u0448\u0435 \u0432 JSON \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u043d\u0430\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Row, Text, IconButton \u0438 \u043f\u0440\u043e\u0447\u0438\u0435. JSON \u0441\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043f\u0440\u0438 \u0441\u043f\u0443\u0441\u043a\u0435 \u043d\u0430 \u043d\u0438\u0436\u043d\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u0442\u0430\u043a, \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438 9 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432.<\/p>\n<p>\u0412\u0441\u0451 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043f\u043e\u0434 \u0432\u0441\u0435 6 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u0442\u0432\u0430:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0431\u044d\u043a\u0435\u043d\u0434<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">macOS<\/p>\n<\/td>\n<td>\n<p align=\"left\">AppKit, CoreGraphics, CoreText, ImageIO \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u043d\u0442\u0430\u0439\u043c Objective-C<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">iOS<\/p>\n<\/td>\n<td>\n<p align=\"left\">UIKit, CADisplayLink, \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434 CoreGraphics\/CoreText, \u0447\u0442\u043e \u0438 \u043d\u0430 macOS<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Android<\/p>\n<\/td>\n<td>\n<p align=\"left\">JNI \u0432\u0440\u0443\u0447\u043d\u0443\u044e, <code>android.graphics.Canvas<\/code>, \u043f\u0440\u043e\u0441\u043b\u043e\u0439\u043a\u0430 \u043d\u0430 Java ~300 \u0441\u0442\u0440\u043e\u043a; APK \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437 Gradle<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Windows<\/p>\n<\/td>\n<td>\n<p align=\"left\">Win32, Direct2D, DirectWrite \u0438 WIC, COM \u0432\u0440\u0443\u0447\u043d\u0443\u044e; DPI \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430, \u0442\u0451\u043c\u043d\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Linux<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0432\u043e\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 Wayland \u0438 X11 (xcb), Cairo + Pango, xkbcommon \u2013 \u0432\u0441\u0451 \u0447\u0435\u0440\u0435\u0437 <code>dlopen<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442 libc<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0411\u0440\u0430\u0443\u0437\u0435\u0440<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>wasm32-unknown-unknown<\/code> \u0431\u0435\u0437 wasm-bindgen, canvas 2D; C\/C++ \u0447\u0435\u0440\u0435\u0437 Emscripten<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><em>\u0414\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c 9 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 (\u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432) \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0439.<\/em><\/p>\n<h3>\u0421\u0432\u043e\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/h3>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0432\u044b\u0441\u043e\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 JSON \u0441\u0432\u043e\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">#include &lt;uison_widgets.hpp&gt;using namespace uison::widgets;template &lt;class F&gt;uison::Node Pill(std::string text, F on_click) {    return Box({        .padding = {8, 22},        .fill = uison::json(R\"({ state: {            normal: \"$theme.primary\", hover: \"$theme.primaryHover\", pressed: \"$theme.primaryPressed\" } })\"),        .radius = 999,  \/\/ more than half the height: the ends become semicircles        .align = \"center\",        .interactive = true,        .on_click = on_click,        .child = Text(text, {.bold = true, .color = \"$theme.onPrimary\"}),    });}int main() {    auto screen = Column({.padding = 24, .gap = 16, .cross = \"start\", .children = {        Text(\"Pressed {@n} times\", {.size = 20}),        Pill(\"Press me\", [](uison::Cx&amp; cx) {            cx.data().set(\"n\", cx.data().get&lt;int&gt;(\"n\") + 1);        }),    }});    uison::Ui ui(screen, {.size = {360, 140}, .data = uison::obj{{\"n\", 0}}});    return ui.run(\"Pill\");}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u0418\u043b\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 JSON:<\/p>\n<pre><code class=\"json\">{  Pill: {    params: { text: \"\" },    interactive: true,  \/\/ the node gets hover \/ pressed states and a click    body: {      Box: {        padding: [8, 22],        radius: 999,  \/\/ more than half the height: the ends become semicircles        align: \"center\",        fill: { state: {          normal: \"$theme.primary\",          hover: \"$theme.primaryHover\",          pressed: \"$theme.primaryPressed\",        } },        child: { Text: { text: \"$text\", bold: true, color: \"$theme.onPrimary\" } },      },    },  },}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u0441\u0435 \u044d\u0442\u0438 \u043d\u043e\u0432\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0434\u043e\u0439\u0434\u044f \u0434\u043e \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0441\u043b\u043e\u044f, \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u044b \u0432 JSON \u0438\u0437 9 \u0442\u0435\u0445 \u0441\u0430\u043c\u044b\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0432\u044b\u0448\u0435.<\/p>\n<h3>\u0420\u0435\u043d\u0434\u0435\u0440\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c<\/h3>\n<p>\u041d\u043e\u0432\u044b\u0439 \u043a\u0430\u0434\u0440 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e \u0441\u0442\u0430\u0440\u044b\u043c \u043f\u043e\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043d\u043e (\u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 LCS, \u0433\u0440\u0443\u043f\u043f\u044b clip \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438). \u0418\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0435, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0438 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u0430\u044e\u0442 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u201c\u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f\u201d, \u0438 \u0431\u044d\u043a\u0435\u043d\u0434 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0445.<\/p>\n<p>\u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u043a\u0430\u0434\u0440 \u043f\u043e\u0447\u0442\u044b \u0438\u0437 2000 \u043f\u0438\u0441\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0430\u0440\u0443 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0441\u0442\u0440\u043e\u043a.<\/p>\n<h3>\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0436\u0438\u0437\u043d\u0435\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u0438\u0434\u0435\u044f?<\/h3>\n<p>\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0439 \u0436\u0435 \u0438\u0434\u0435\u0438 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440. HTML \u0438 CSS \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u0432 JSON, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0448\u0435\u043c\u0443 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0443.<\/p>\n<p>\u0421\u0430\u043c uison \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043f\u0440\u043e HTML \u0438 CSS. \u041e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 JSON \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0435\u0433\u043e \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438, \u0442\u0430\u043a \u0438 \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/45\/f4\/b0\/45f4b04fe6bd06d3e52b0ffe75fd2af9.png\" alt=\"Wiki \u0432 JSON\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/45\/f4\/b0\/45f4b04fe6bd06d3e52b0ffe75fd2af9.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/45\/f4\/b0\/45f4b04fe6bd06d3e52b0ffe75fd2af9.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Wiki \u0432 JSON<\/figcaption><\/div>\n<\/figure>\n<h3>stdin \u0438 stdout \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u043a\u043d\u0430: UI \u043f\u043e SSH<\/h3>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0438\u0437\u0443 \u0443 \u043d\u0430\u0441 JSON, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c, \u0430 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0435\u0441\u0442\u044c \u2013 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0432 \u0433\u043e\u043b\u043e\u043c \u0432\u0438\u0434\u0435. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0435\u0439 \u043f\u043e SSH \u0442\u0430\u043a, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435.<\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043f\u0440\u043e SSH. \u041e\u043d\u0430 \u043f\u0438\u0448\u0435\u0442 \u043a\u0430\u0434\u0440\u044b \u0432 stdout \u0438 \u0447\u0438\u0442\u0430\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u0437 stdin. \u0421\u0435\u0440\u0432\u0435\u0440\u0443 \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e sshd, \u043d\u0438 X11, \u043d\u0438 VNC, \u043d\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.<\/p>\n<p>\u041f\u043b\u0435\u0435\u0440 \u0443\u043c\u0435\u0435\u0442 \u0441\u0430\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0451 \u0441 &#8212;console.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/64\/6c\/2e\/646c2e16fa978d8bfa5d9aafc361ddf8.png\" alt=\"\u041f\u043b\u0435\u0435\u0440 uison\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/64\/6c\/2e\/646c2e16fa978d8bfa5d9aafc361ddf8.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/64\/6c\/2e\/646c2e16fa978d8bfa5d9aafc361ddf8.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043b\u0435\u0435\u0440 uison<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043b\u0435\u0435\u0440 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d <a href=\"https:\/\/github.com\/uisonlab\/uison-ssh-player\" rel=\"noopener nofollow\">\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c<\/a>. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0434\u0430\u0436\u0435 \u0434\u043b\u044f Android \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u043b\u0435\u0444\u043e\u043d. \u0412 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c JSON-\u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438 \u043a\u0430\u0434\u0440\u044b \u0440\u0435\u043d\u0434\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/de\/b4\/61\/deb46150d13747ccc542dac2d7a0e210.png\" alt=\"JSON \u0440\u0435\u043d\u0434\u0435\u0440 \u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u043b\u0435\u0435\u0440\u0430\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/de\/b4\/61\/deb46150d13747ccc542dac2d7a0e210.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/de\/b4\/61\/deb46150d13747ccc542dac2d7a0e210.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>JSON \u0440\u0435\u043d\u0434\u0435\u0440 \u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u043b\u0435\u0435\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<h3>\u0420\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0438\u0434\u0435\u0438: \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f AI-\u0430\u0433\u0435\u043d\u0442\u043e\u0432<\/h3>\n<p>\u041e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041e\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043a\u043d\u043e \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c JSON-\u043a\u0430\u0434\u0440\u044b \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440\u0443 \u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 AI-\u0430\u0433\u0435\u043d\u0442\u0443.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0417\u0430\u043f\u0443\u0441\u043a<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u0442\u043e \u043d\u0430 \u0442\u043e\u043c \u043a\u043e\u043d\u0446\u0435<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u0438\u0434\u0451\u0442 \u0432 stdout<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>todo<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0427\u0435\u043b\u043e\u0432\u0435\u043a<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0438\u0447\u0435\u0433\u043e: \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043a\u043d\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>todo --console<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043b\u0435\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0438\u0441\u0443\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">JSON-\u043a\u0430\u0434\u0440\u044b: \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438, \u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>todo --agent<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u0440\u0438\u043f\u0442 \u0438\u043b\u0438 AI-\u0430\u0433\u0435\u043d\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">JSON \u0441\u043e \u0441\u043c\u044b\u0441\u043b\u043e\u043c: \u0440\u043e\u043b\u0438, \u0438\u043c\u0435\u043d\u0430, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>todo --mcp<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">Claude Code \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 MCP-\u043a\u043b\u0438\u0435\u043d\u0442\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u043e\u0442 \u0436\u0435 \u0441\u043c\u044b\u0441\u043b, \u043d\u043e \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 MCP<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0421 \u0444\u043b\u0430\u0433\u043e\u043c &#8212;mcp \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f MCP-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f Claude Code, Cursor \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 AI-\u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 claude mcp add todo \u2013 .\/todo &#8212;mcp, \u043a\u043e\u0434\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u0410\u0433\u0435\u043d\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 snapshot \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u044d\u043a\u0440\u0430\u043d \u0442\u0435\u043a\u0441\u0442\u043e\u043c, \u0430 \u043f\u043e\u0442\u043e\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 click, type, choose. \u0412 \u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0430\u0433\u0435\u043d\u0442 \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u00abMilk\u00bb \u0432 \u043f\u043e\u043b\u0435 \u0438 \u0436\u043c\u0451\u0442 Enter:<\/p>\n<pre><code class=\"json\">\u2192 {\"jsonrpc\":\"2.0\",\"id\":4,\"method\":\"tools\/call\",\"params\":{\"name\":\"type\",\"arguments\":{\"key\":\"draft\/1\/0\",\"text\":\"Milk\",\"submit\":true}}}\u2190 {\"jsonrpc\":\"2.0\",\"id\":4,\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"ok\\nchanges (+ added, - removed, ~ changed):\\n+ checkbox \\\"Milk\\\" #4\/0 unchecked\\n+ button \\\"trash\\\" #del-4\\n+ text \\\"3\\\"\\n+ text \\\"1 of 4 done\\\"\\n+ text \\\"Remaining: 3\\\"\\n- text \\\"2\\\"\\n- text \\\"1 of 3 done\\\"\\n- text \\\"Remaining: 2\\\"\\n~ #draft\/1\/0 focused\\n\"}],\"isError\":false}}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043f\u0443\u043d\u043a\u0442 \u00abMilk\u00bb \u0438 \u0435\u0433\u043e \u043a\u043d\u043e\u043f\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f, \u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0441\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u0441 \u00ab1 of 3\u00bb \u043d\u0430 \u00ab1 of 4\u00bb. \u041d\u0430\u0436\u0430\u0442\u044c \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u0430\u0433\u0435\u043d\u0442 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442, \u043a\u0430\u043a \u043d\u0435 \u0441\u043c\u043e\u0433 \u0431\u044b \u0447\u0435\u043b\u043e\u0432\u0435\u043a: \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043e\u0442\u0432\u0435\u0442\u0438\u0442, \u0447\u0442\u043e \u043a\u043d\u043e\u043f\u043a\u0430 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u0430.<\/p>\n<h3>\u0420\u0430\u0437\u043c\u0435\u0440 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c<\/h3>\n<p>\u041f\u043e\u043a\u0430\u0436\u0443 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u2013 Disk Usage \u043d\u0430 macOS. \u041e\u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0432 \u0434\u0432\u0443\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445: \u043d\u0430 <a href=\"https:\/\/github.com\/MarketKernel\/disk-usage\" rel=\"noopener nofollow\">egui<\/a> \u0438 \u043d\u0430 <a href=\"https:\/\/github.com\/uisonlab\/uison-disk-usage\" rel=\"noopener nofollow\">uison<\/a>, \u043e\u0431\u0430 \u043d\u0430 Rust. \u0412\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0435\u0441\u0442\u043e\u0432:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c<\/p>\n<\/th>\n<th>\n<p align=\"left\">egui (\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b)<\/p>\n<\/th>\n<th>\n<p align=\"left\">uison<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, macOS arm64<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>5,1 \u041c\u0411<\/strong> (5 126 464 \u0411)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>0,9 \u041c\u0411<\/strong> (923 216 \u0411), <strong>\u221282 %<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u043c\u0435\u0440 \u0441 <code>opt-level = \"s\"<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">4,5 \u041c\u0411 (4 450 560 \u0411)<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,9 \u041c\u0411, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 5 \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 <code>Cargo.lock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>362<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>0<\/strong> \u0432\u043d\u0435\u0448\u043d\u0438\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0435\u0439\u0442\u044b uison)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0430\u043c\u044f\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u043e\u043a\u043d\u0430, \u0431\u0435\u0437 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">122 \u041c\u0411<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>55 \u041c\u0411<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">152 \u041c\u0411<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>97 \u041c\u0411<\/strong>, \u221236 %<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0438\u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">167\u2013176 \u041c\u0411<\/p>\n<\/td>\n<td>\n<p align=\"left\">183\u2013184 \u041c\u0411<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u0442\u0440\u043e\u043a Rust<\/p>\n<\/td>\n<td>\n<p align=\"left\">3 198<\/p>\n<\/td>\n<td>\n<p align=\"left\">3 547 + 479 \u0441\u0442\u0440\u043e\u043a JSON \u044d\u043a\u0440\u0430\u043d\u0430<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442<\/h3>\n<p>\u0412\u0441\u0451 \u0435\u0441\u0442\u044c \u0432 \u0443\u0440\u043e\u043a\u0430\u0445 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435. \u0423\u0440\u043e\u043a\u0438 \u0434\u043b\u044f <a href=\"https:\/\/github.com\/uisonlab\/uison\/tree\/main\/docs\/ru\/rust\" rel=\"noopener nofollow\">Rust<\/a>, <a href=\"https:\/\/github.com\/uisonlab\/uison\/tree\/main\/docs\/ru\/c\" rel=\"noopener nofollow\">C<\/a>, <a href=\"https:\/\/github.com\/uisonlab\/uison\/tree\/main\/docs\/ru\/cpp\" rel=\"noopener nofollow\">C++<\/a>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u0440\u0430\u0442\u043a\u0430\u044f \u0432\u0432\u043e\u0434\u043d\u0430\u044f \u0434\u043b\u044f <a href=\"https:\/\/github.com\/uisonlab\/uison\/blob\/main\/docs\/ru\/asm.md\" rel=\"noopener nofollow\">ASM<\/a>.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0443, \u043a\u0430\u043a \u0441\u0442\u0430\u0440\u0442\u0430\u043d\u0443\u0442\u044c \u043d\u0430 Rust.<\/p>\n<h4>\u0428\u0430\u0433 1. \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c uison<\/h4>\n<pre><code class=\"bash\">cargo new hello &amp;&amp; cd hellocargo add uison<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h4>\u0428\u0430\u0433 2: \u0417\u0430\u043c\u0435\u043d\u044f\u0435\u043c src\/main.rs<\/h4>\n<pre><code class=\"rust\">use uison::prelude::*;fn main() {    let screen = center(column().gap(12).cross(\"center\").children([        text(\"Pressed {@n} times\").size(20),        button(\"+1\").key(\"inc\").on_click(|cx| cx.data.edit(\"n\", |n: &amp;mut i32| *n += 1)),    ]));    let mut ui = Ui::from_node(screen).with_size(320.0, 200.0);    ui.data.set(\"n\", 0);    run(ui, \"Hello\");}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h4>\u0428\u0430\u0433 3: \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c<\/h4>\n<p><code>cargo run --release<\/code><\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u043e\u043a\u043d\u043e \u0441\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u043c. {@n} \u2013 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c: \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u0435\u043d\u044f\u0435\u0442 n, \u0438 \u0442\u0435\u043a\u0441\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c, \u0431\u0435\u0437 \u0440\u0443\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0438.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0431\u044b\u043b\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439, \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u043a\u043e\u043d\u0435\u0446 Cargo.toml \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0441\u0431\u043e\u0440\u043a\u0438:<\/p>\n<pre><code class=\"yaml\">[profile.release]opt-level = \"s\"lto = truecodegen-units = 1panic = \"abort\"strip = true<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h3>\u0418\u0442\u043e\u0433\u0438 \u0438 \u0441\u0441\u044b\u043b\u043a\u0438<\/h3>\n<p>\u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0435 \u0441\u0442\u0430\u0432\u0438\u0442 \u0441\u0432\u043e\u0435\u0439 \u0446\u0435\u043b\u044c\u044e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c Qt \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 GUI-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438. uison \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438, \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438, \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u0438 \u0444\u043e\u0440\u043c\u0430\u043c\u0438. \u0414\u043b\u044f \u0438\u0433\u0440 \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c:<\/p>\n<ul>\n<li>\n<p>GitHub-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0430: <a href=\"https:\/\/github.com\/uisonlab\/uison\" rel=\"noopener nofollow\">uisonlab\/uison<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/uisonlab\/uison\/releases\" rel=\"noopener nofollow\">\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0431\u043e\u0440\u043a\u0438<\/a> (\u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e GitHub Actions, \u0430 \u044d\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044f, \u0447\u0442\u043e \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u0430 \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043b\u0435\u0432\u043e\u0435).<\/p>\n<\/li>\n<li>\n<p>\u041f\u043b\u0435\u0435\u0440 SSH \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e \u0447\u0435\u0440\u0435\u0437 SSH: <a href=\"https:\/\/github.com\/uisonlab\/uison-ssh-player\" rel=\"noopener nofollow\">uisonlab\/uison-ssh-player<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/uisonlab.github.io\/uison\/\" rel=\"noopener nofollow\">WASM-\u0434\u0435\u043c\u043e<\/a> \u043d\u0430 GitHub Pages.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1100946\/\">https:\/\/habr.com\/ru\/articles\/1100946\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e \u0432\u043e\u043f\u043b\u043e\u0449\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u0430\u043c\u044b\u0435 \u0441\u043c\u0435\u043b\u044b\u0435 \u0438\u0434\u0435\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044e LLM. \u042f \u0432\u0435\u0440\u044e, \u0447\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0430\u043c\u043e\u0439 \u0438\u0434\u0435\u0438 \u0441\u0442\u0430\u043b\u0430 \u0432\u044b\u0448\u0435 \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u0432\u0441\u0451 \u0440\u0435\u0448\u0430\u0435\u0442.\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0445\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043b\u0451\u0433\u043a\u0438\u0439 UI-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a. \u041e\u043d \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Rust, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 Windows (x64, ARM), macOS, Linux, Android, iOS\/iPadOS \u0438 \u0434\u0430\u0436\u0435 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0447\u0435\u0440\u0435\u0437 WASM (\u043e\u043d\u043b\u0430\u0439\u043d-\u0434\u0435\u043c\u043e \u043d\u0430 GitHub Pages). \u0421\u043d\u0430\u0431\u0436\u0451\u043d \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 Rust, C, C++ \u0438 \u0434\u0430\u0436\u0435 ASM.\u041e\u0442\u043b\u0438\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0438\u043c\u0435\u0435\u0442 \u0434\u0432\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u2013 \u043b\u0438\u0431\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 UI \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439, \u043b\u0438\u0431\u043e \u0436\u0435 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442 UI \u0432 JSON \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0441 \u043d\u0438\u043c \u043c\u043e\u0433\u043b\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c AI-\u0430\u0433\u0435\u043d\u0442\u044b \u0431\u0435\u0437 \u0441\u043d\u044f\u0442\u0438\u044f \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u043e\u0432. \u042d\u0442\u0430 \u0436\u0435 \u0444\u0438\u0448\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0431\u0440\u043e\u0441\u0438\u0442\u044c UI \u043f\u043e SSH (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043d\u0438\u0436\u0435).\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0438\u0434\u0435\u044f \u2013 JSON \u0432\u043e \u0432\u0441\u0451\u043c\u0425\u043e\u0442\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u0435 JSON-\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0442\u0447\u0435\u0439 \u0432\u043e \u044f\u0437\u044b\u0446\u0435\u0445, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b \u0435\u0433\u043e \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u044b\u043c. \u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0435\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435, \u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u0435\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0430 (\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0443\u0442\u0438\u043b\u0438\u0442, \u0430 \u043d\u0435 \u0434\u043b\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438).\u041d\u0438\u0436\u043d\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0443\u043c\u0435\u0435\u0442 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e JSON-\u043a\u0430\u0434\u0440 \u0438\u0437 9 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432. \u0412\u043e\u0442 \u043e\u043d\u0438:\u041f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435rect[x, y, w, h]fill, stroke, width, radius\u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441\u043e \u0441\u043a\u0440\u0443\u0433\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0443\u0433\u043b\u0430\u043c\u0438line[x1, y1, x2, y2]color, width, cap (butt \/ round)\u043e\u0442\u0440\u0435\u0437\u043e\u043acircle[cx, cy, r]fill, stroke, width\u043a\u0440\u0443\u0433tri[x1, y1, x2, y2, x3, y3]fill, stroke, width\u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a (\u0441\u0442\u0440\u0435\u043b\u043a\u0438, \u0433\u0430\u043b\u043e\u0447\u043a\u0438)poly[[x, y], [x, y], \u2026]fill, stroke, width\u0437\u0430\u043c\u043a\u043d\u0443\u0442\u044b\u0439 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a (\u0441\u0435\u043a\u0442\u043e\u0440\u044b \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432, \u0441\u0432\u043e\u0438 \u0444\u0438\u0433\u0443\u0440\u044b)text&#187;\u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430&#187;at: [x, y], size, color, font, bold, italic\u0441\u0442\u0440\u043e\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430; \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u043b\u043e\u0439 \u044d\u043a\u0440\u0430\u043d\u043e\u0432image[x, y, w, h]src, fit (cover \/ contain \/ fill), radius\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430clip[x, y, w, h]items: [\u2026]\u0433\u0440\u0443\u043f\u043f\u0430, \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u043d\u0430\u044f \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0443 (\u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430)hit[x, y, w, h]id, cursor\u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u043b\u044f \u043c\u044b\u0448\u0438 \u0438 \u043a\u0430\u0441\u0430\u043d\u0438\u0439 (\u043d\u0435 \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f)\u0423\u0440\u043e\u0432\u043d\u0435\u043c \u0432\u044b\u0448\u0435 \u0432 JSON \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u043d\u0430\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Row, Text, IconButton \u0438 \u043f\u0440\u043e\u0447\u0438\u0435. JSON \u0441\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043f\u0440\u0438 \u0441\u043f\u0443\u0441\u043a\u0435 \u043d\u0430 \u043d\u0438\u0436\u043d\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u0442\u0430\u043a, \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438 9 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432.\u0412\u0441\u0451 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043f\u043e\u0434 \u0432\u0441\u0435 6 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u0442\u0432\u0430:\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0431\u044d\u043a\u0435\u043d\u0434macOSAppKit, CoreGraphics, CoreText, ImageIO \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u043d\u0442\u0430\u0439\u043c Objective-CiOSUIKit, CADisplayLink, \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434 CoreGraphics\/CoreText, \u0447\u0442\u043e \u0438 \u043d\u0430 macOSAndroidJNI \u0432\u0440\u0443\u0447\u043d\u0443\u044e, android.graphics.Canvas, \u043f\u0440\u043e\u0441\u043b\u043e\u0439\u043a\u0430 \u043d\u0430 Java ~300 \u0441\u0442\u0440\u043e\u043a; APK \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437 GradleWindowsWin32, Direct2D, DirectWrite \u0438 WIC, COM \u0432\u0440\u0443\u0447\u043d\u0443\u044e; DPI \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430, \u0442\u0451\u043c\u043d\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043aLinux\u0441\u0432\u043e\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 Wayland \u0438 X11 (xcb), Cairo + Pango, xkbcommon \u2013 \u0432\u0441\u0451 \u0447\u0435\u0440\u0435\u0437 dlopen, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442 libc\u0411\u0440\u0430\u0443\u0437\u0435\u0440wasm32-unknown-unknown \u0431\u0435\u0437 wasm-bindgen, canvas 2D; C\/C++ \u0447\u0435\u0440\u0435\u0437 Emscripten\u0414\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c 9 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 (\u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432) \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0439.\u0421\u0432\u043e\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0432\u044b\u0441\u043e\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 JSON \u0441\u0432\u043e\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0442 \u0442\u0430\u043a:#include &lt;uison_widgets.hpp&gt;using namespace uison::widgets;template &lt;class F&gt;uison::Node Pill(std::string text, F on_click) {    return Box({        .padding = {8, 22},        .fill = uison::json(R&#187;({ state: {            normal: &#171;$theme.primary&#187;, hover: &#171;$theme.primaryHover&#187;, pressed: &#171;$theme.primaryPressed&#187; } })&#187;),        .radius = 999,  \/\/ more than half the height: the ends become semicircles        .align = &#171;center&#187;,        .interactive = true,        .on_click = on_click,        .child = Text(text, {.bold = true, .color = &#171;$theme.onPrimary&#187;}),    });}int main() {    auto screen = Column({.padding = 24, .gap = 16, .cross = &#171;start&#187;, .children = {        Text(&#171;Pressed {@n} times&#187;, {.size = 20}),        Pill(&#171;Press me&#187;, [](uison::Cx&amp; cx) {            cx.data().set(&#171;n&#187;, cx.data().get&lt;int&gt;(&#171;n&#187;) + 1);        }),    }});    uison::Ui ui(screen, {.size = {360, 140}, .data = uison::obj{{&#171;n&#187;, 0}}});    return ui.run(&#171;Pill&#187;);}\u0418\u043b\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 JSON:{  Pill: {    params: { text: &#171;&#187; },    interactive: true,  \/\/ the node gets hover \/ pressed states and a click    body: {      Box: {        padding: [8, 22],        radius: 999,  \/\/ more than half the height: the ends become semicircles        align: &#171;center&#187;,        fill: { state: {          normal: &#171;$theme.primary&#187;,          hover: &#171;$theme.primaryHover&#187;,          pressed: &#171;$theme.primaryPressed&#187;,        } },        child: { Text: { text: &#171;$text&#187;, bold: true, color: &#171;$theme.onPrimary&#187; } },      },    },  },}\u0412\u0441\u0435 \u044d\u0442\u0438 \u043d\u043e\u0432\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0434\u043e\u0439\u0434\u044f \u0434\u043e \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0441\u043b\u043e\u044f, \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u044b \u0432 JSON \u0438\u0437 9 \u0442\u0435\u0445 \u0441\u0430\u043c\u044b\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0432\u044b\u0448\u0435.\u0420\u0435\u043d\u0434\u0435\u0440\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c\u041d\u043e\u0432\u044b\u0439 \u043a\u0430\u0434\u0440 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e \u0441\u0442\u0430\u0440\u044b\u043c \u043f\u043e\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043d\u043e (\u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 LCS, \u0433\u0440\u0443\u043f\u043f\u044b clip \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438). \u0418\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0435, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0438 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u0430\u044e\u0442 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u201c\u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f\u201d, \u0438 \u0431\u044d\u043a\u0435\u043d\u0434 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0445.\u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u043a\u0430\u0434\u0440 \u043f\u043e\u0447\u0442\u044b \u0438\u0437 2000 \u043f\u0438\u0441\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0430\u0440\u0443 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0441\u0442\u0440\u043e\u043a.\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0436\u0438\u0437\u043d\u0435\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u0438\u0434\u0435\u044f?\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0439 \u0436\u0435 \u0438\u0434\u0435\u0438 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440. HTML \u0438 CSS \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u0432 JSON, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0448\u0435\u043c\u0443 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0443.\u0421\u0430\u043c uison \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043f\u0440\u043e HTML \u0438 CSS. \u041e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 JSON \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0435\u0433\u043e \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438, \u0442\u0430\u043a \u0438 \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.Wiki \u0432 JSONstdin \u0438 stdout \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u043a\u043d\u0430: UI \u043f\u043e SSH\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0438\u0437\u0443 \u0443 \u043d\u0430\u0441 JSON, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c, \u0430 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0435\u0441\u0442\u044c \u2013 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0432 \u0433\u043e\u043b\u043e\u043c \u0432\u0438\u0434\u0435. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0435\u0439 \u043f\u043e SSH \u0442\u0430\u043a, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435.\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043f\u0440\u043e SSH. \u041e\u043d\u0430 \u043f\u0438\u0448\u0435\u0442 \u043a\u0430\u0434\u0440\u044b \u0432 stdout \u0438 \u0447\u0438\u0442\u0430\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u0437 stdin. \u0421\u0435\u0440\u0432\u0435\u0440\u0443 \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e sshd, \u043d\u0438 X11, \u043d\u0438 VNC, \u043d\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.\u041f\u043b\u0435\u0435\u0440 \u0443\u043c\u0435\u0435\u0442 \u0441\u0430\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0451 \u0441 &#8212;console.\u041f\u043b\u0435\u0435\u0440 uison\u041f\u043b\u0435\u0435\u0440 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0434\u0430\u0436\u0435 \u0434\u043b\u044f Android \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u043b\u0435\u0444\u043e\u043d. \u0412 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c JSON-\u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438 \u043a\u0430\u0434\u0440\u044b \u0440\u0435\u043d\u0434\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c:JSON \u0440\u0435\u043d\u0434\u0435\u0440 \u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u043b\u0435\u0435\u0440\u0430\u0420\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0438\u0434\u0435\u0438: \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f AI-\u0430\u0433\u0435\u043d\u0442\u043e\u0432\u041e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041e\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043a\u043d\u043e \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c JSON-\u043a\u0430\u0434\u0440\u044b \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440\u0443 \u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 AI-\u0430\u0433\u0435\u043d\u0442\u0443.\u0417\u0430\u043f\u0443\u0441\u043a\u041a\u0442\u043e \u043d\u0430 \u0442\u043e\u043c \u043a\u043e\u043d\u0446\u0435\u0427\u0442\u043e \u0438\u0434\u0451\u0442 \u0432 stdouttodo\u0427\u0435\u043b\u043e\u0432\u0435\u043a\u041d\u0438\u0447\u0435\u0433\u043e: \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043a\u043d\u043etodo &#8212;console\u041f\u043b\u0435\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0438\u0441\u0443\u0435\u0442JSON-\u043a\u0430\u0434\u0440\u044b: \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438, \u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044btodo &#8212;agent\u0421\u043a\u0440\u0438\u043f\u0442 \u0438\u043b\u0438 AI-\u0430\u0433\u0435\u043d\u0442JSON \u0441\u043e \u0441\u043c\u044b\u0441\u043b\u043e\u043c: \u0440\u043e\u043b\u0438, \u0438\u043c\u0435\u043d\u0430, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044ftodo &#8212;mcpClaude Code \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 MCP-\u043a\u043b\u0438\u0435\u043d\u0442\u044b\u0422\u043e\u0442 \u0436\u0435 \u0441\u043c\u044b\u0441\u043b, \u043d\u043e \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 MCP\u0421 \u0444\u043b\u0430\u0433\u043e\u043c &#8212;mcp \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f MCP-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f Claude Code, Cursor \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 AI-\u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 claude mcp add todo \u2013 .\/todo &#8212;mcp, \u043a\u043e\u0434\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u0410\u0433\u0435\u043d\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 snapshot \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u044d\u043a\u0440\u0430\u043d \u0442\u0435\u043a\u0441\u0442\u043e\u043c, \u0430 \u043f\u043e\u0442\u043e\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 click, type, choose. \u0412 \u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0430\u0433\u0435\u043d\u0442 \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u00abMilk\u00bb \u0432 \u043f\u043e\u043b\u0435 \u0438 \u0436\u043c\u0451\u0442 Enter:\u2192 {&#171;jsonrpc&#187;:&#187;2.0&#8243;,&#187;id&#187;:4,&#187;method&#187;:&#187;tools\/call&#187;,&#187;params&#187;:{&#171;name&#187;:&#187;type&#187;,&#187;arguments&#187;:{&#171;key&#187;:&#187;draft\/1\/0&#8243;,&#187;text&#187;:&#187;Milk&#187;,&#187;submit&#187;:true}}}\u2190 {&#171;jsonrpc&#187;:&#187;2.0&#8243;,&#187;id&#187;:4,&#187;result&#187;:{&#171;content&#187;:[{&#171;type&#187;:&#187;text&#187;,&#187;text&#187;:&#187;ok\\nchanges (+ added, &#8212; removed, ~ changed):\\n+ checkbox \\&#187;Milk\\&#187; #4\/0 unchecked\\n+ button \\&#187;trash\\&#187; #del-4\\n+ text \\&#187;3\\&#187;\\n+ text \\&#187;1 of 4 done\\&#187;\\n+ text \\&#187;Remaining: 3\\&#187;\\n- text \\&#187;2\\&#187;\\n- text \\&#187;1 of 3 done\\&#187;\\n- text \\&#187;Remaining: 2\\&#187;\\n~ #draft\/1\/0 focused\\n&#187;}],&#187;isError&#187;:false}}\u0412 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043f\u0443\u043d\u043a\u0442 \u00abMilk\u00bb \u0438 \u0435\u0433\u043e \u043a\u043d\u043e\u043f\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f, \u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0441\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u0441 \u00ab1 of 3\u00bb \u043d\u0430 \u00ab1 of 4\u00bb. \u041d\u0430\u0436\u0430\u0442\u044c \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u0430\u0433\u0435\u043d\u0442 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442, \u043a\u0430\u043a \u043d\u0435 \u0441\u043c\u043e\u0433 \u0431\u044b \u0447\u0435\u043b\u043e\u0432\u0435\u043a: \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043e\u0442\u0432\u0435\u0442\u0438\u0442, \u0447\u0442\u043e \u043a\u043d\u043e\u043f\u043a\u0430 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u0430.\u0420\u0430\u0437\u043c\u0435\u0440 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u041f\u043e\u043a\u0430\u0436\u0443 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u2013 Disk Usage \u043d\u0430 macOS. \u041e\u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0432 \u0434\u0432\u0443\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445: \u043d\u0430 egui \u0438 \u043d\u0430 uison, \u043e\u0431\u0430 \u043d\u0430 Rust. \u0412\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0435\u0441\u0442\u043e\u0432:\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044cegui (\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b)uison\u0420\u0430\u0437\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, macOS arm645,1 \u041c\u0411 (5 126 464 \u0411)0,9 \u041c\u0411 (923 216 \u0411), \u221282 %\u0420\u0430\u0437\u043c\u0435\u0440 \u0441 opt-level = &#171;s&#187;4,5 \u041c\u0411 (4 450 560 \u0411)0,9 \u041c\u0411, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 5 \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 Cargo.lock3620 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0435\u0439\u0442\u044b uison)\u041f\u0430\u043c\u044f\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u043e\u043a\u043d\u0430, \u0431\u0435\u0437 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f122 \u041c\u041155 \u041c\u0411\u041f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f152 \u041c\u041197 \u041c\u0411, \u221236 %\u041f\u0438\u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f167\u2013176 \u041c\u0411183\u2013184 \u041c\u0411\u0421\u0442\u0440\u043e\u043a Rust3 1983 547 + 479 \u0441\u0442\u0440\u043e\u043a JSON \u044d\u043a\u0440\u0430\u043d\u0430\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\u0412\u0441\u0451 \u0435\u0441\u0442\u044c \u0432 \u0443\u0440\u043e\u043a\u0430\u0445 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435. \u0423\u0440\u043e\u043a\u0438 \u0434\u043b\u044f Rust, C, C++, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u0440\u0430\u0442\u043a\u0430\u044f \u0432\u0432\u043e\u0434\u043d\u0430\u044f \u0434\u043b\u044f ASM.\u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0443, \u043a\u0430\u043a \u0441\u0442\u0430\u0440\u0442\u0430\u043d\u0443\u0442\u044c \u043d\u0430 Rust.\u0428\u0430\u0433 1. \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c uisoncargo new hello &amp;&amp; cd hellocargo add uison\u0428\u0430\u0433 2: \u0417\u0430\u043c\u0435\u043d\u044f\u0435\u043c src\/main.rsuse uison::prelude::*;fn main() {    let screen = center(column().gap(12).cross(&#171;center&#187;).children([        text(&#171;Pressed {@n} times&#187;).size(20),        button(&#171;+1&#187;).key(&#171;inc&#187;).on_click(|cx| cx.data.edit(&#171;n&#187;, |n: &amp;mut i32| *n += 1)),    ]));    let mut ui = Ui::from_node(screen).with_size(320.0, 200.0);    ui.data.set(&#171;n&#187;, 0);    run(ui, &#171;Hello&#187;);}\u0428\u0430\u0433 3: \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043ccargo run &#8212;release\u041e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u043e\u043a\u043d\u043e \u0441\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u043c. {@n} \u2013 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c: \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u0435\u043d\u044f\u0435\u0442 n, \u0438 \u0442\u0435\u043a\u0441\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c, \u0431\u0435\u0437 \u0440\u0443\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0438.\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0431\u044b\u043b\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439, \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u043a\u043e\u043d\u0435\u0446 Cargo.toml \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0441\u0431\u043e\u0440\u043a\u0438:[profile.release]opt-level = &#171;s&#187;lto = truecodegen-units = 1panic = &#171;abort&#187;strip = true\u0418\u0442\u043e\u0433\u0438 \u0438 \u0441\u0441\u044b\u043b\u043a\u0438\u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0435 \u0441\u0442\u0430\u0432\u0438\u0442 \u0441\u0432\u043e\u0435\u0439 \u0446\u0435\u043b\u044c\u044e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c Qt \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 GUI-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438. uison \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438, \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438, \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u0438 \u0444\u043e\u0440\u043c\u0430\u043c\u0438. \u0414\u043b\u044f \u0438\u0433\u0440 \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f.\u041a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c:GitHub-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0430: uisonlab\/uison\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 (\u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e GitHub Actions, \u0430 \u044d\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044f, \u0447\u0442\u043e \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u0430 \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043b\u0435\u0432\u043e\u0435).\u041f\u043b\u0435\u0435\u0440 SSH \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-500767","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/500767","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=500767"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/500767\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=500767"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=500767"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=500767"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}