{"id":388543,"date":"2024-06-29T08:00:33","date_gmt":"2024-06-29T08:00:33","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=388543"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-06-29T08:00:33","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=388543","title":{"rendered":"<span>\u041a\u0430\u043a \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 png, \u043d\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u044f \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0441\u0430\u043d\u0438\u0442\u0430\u0440\u043e\u0432<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5a6\/9d9\/942\/5a69d994230c1cfb7688793a3b5a5af9.png\" alt=\"\" title=\"\" width=\"521\" height=\"517\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5a6\/9d9\/942\/5a69d994230c1cfb7688793a3b5a5af9.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u043c\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u0432\u044b\u0448\u0435.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043f\u043e\u0441\u043c\u0435\u044f\u043b\u0441\u044f. \u0410 \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f: \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u0431\u044b\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0431\u0430\u0437\u044b \u0440\u0430\u0432\u043d\u043e\u0446\u0435\u043d\u0435\u043d \u0435\u0451 \u0441\u043d\u044d\u043f\u0448\u043e\u0442\u0443?<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u043d\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0430\u0437\u044b, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 1 \u043a 1 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u0415\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0438\u0437 \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0430\u0437\u0443.<\/p>\n<p>\u0418\u043b\u0438&#8230; \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0431\u0430\u0437\u043e\u0439!<\/p>\n<p>\u0422\u0443\u0442, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0441\u0445\u0438\u0442\u0440\u0438\u0442\u044c \u0438 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c:<\/p>\n<ol>\n<li>\n<p> \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 sql \u0441\u043a\u0440\u0438\u043f\u0442 \u0432 \u043c\u0435\u043b\u043a\u043e\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0430 \u043f\u043e\u0442\u043e\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0441\u043e \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430<\/p>\n<\/li>\n<li>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c sql \u0441\u043a\u0440\u0438\u043f\u0442 \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f (4 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c). \u0422\u043e\u0433\u0434\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c.<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u043b\u0435\u043d\u0438\u0432\u044b\u0435 \u0438 \u0441\u043a\u0443\u0447\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b. \u041a\u0443\u0434\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u0443 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 \u043d\u0435\u0439 \u043a\u0430\u043a \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c. \u0420\u0438\u0441\u043e\u0432\u0430\u043b\u0438 \u0432 \u043f\u0435\u0439\u043d\u0442\u0435 \u0438 \u0444\u043e\u0442\u043e\u0448\u043e\u043f\u0435, \u0430 \u043d\u0435 \u0432 \u044d\u0442\u0438\u0445 \u0441\u043a\u0443\u0447\u043d\u044b\u0445 sql \u043a\u043e\u043d\u0441\u043e\u043b\u044f\u0445 \u0438 UI \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438.<\/p>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438 \u0441\u0432\u043e\u0435\u0439 \u044d\u0442\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u0430\u0437\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a (DBA-artist). \u041d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0451 \u043d\u0443\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043a\u0438\u0439 api, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b \u0432\u0441\u0435 \u044d\u0442\u0438 \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u0435\u043c\u0443 \u043f\u043e\u0434\u0430\u0432\u0430\u0439 json-\u044b.<\/p>\n<p>\u041a\u0430\u043a \u0432\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435\u0441\u0451\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440. <\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. <\/p>\n<h2>\u0424\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>\u0411\u0435\u0437\u0443\u043c\u043d\u043e \u0432\u0435\u043b\u0438\u043a \u0441\u043e\u0431\u043b\u0430\u0437\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0430\u0439\u0442. \u042d\u0442\u043e \u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u0435\u0435. \u0414\u043b\u044f \u043c\u0430\u0448\u0438\u043d\u044b. \u041d\u043e \u0446\u0435\u043b\u044c &#8212; \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0430\u0439\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u0432\u0438\u0434\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438, \u0430 \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e. \u0414\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043d\u0430\u0434\u043e \u043a\u0430\u043a-\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c. \u0412\u0435\u0440\u043d\u0435\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u043c\u0435\u0442\u0430-\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u201c\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445\u201d. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u043d\u0435\u043a\u0438\u0439 \u043c\u0430\u0440\u043a\u0435\u0440\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043c \u043d\u0430\u0448\u0438\u0445 DBA-\u0430\u0440\u0442\u0438\u0441\u0442\u043e\u0432 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u044b \u044d\u0442\u0438\u043c \u0446\u0432\u0435\u0442\u043e\u043c. \u0412\u0441\u0451, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 &#8212; \u0434\u0430\u043d\u043d\u044b\u0435. \u0421\u043d\u0430\u0440\u0443\u0436\u0438 &#8212; \u043d\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>\u0426\u0432\u0435\u0442 \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u0442\u0430\u043a\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0445\u043e\u0440\u043e\u0448 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0441\u044f \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0431\u044b\u043b\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u201c\u043f\u0440\u043e\u0441\u0442\u044b\u043c\u201d, \u0442.\u043a. \u0446\u0432\u0435\u0442\u0430 \u0432\u0440\u043e\u0434\u0435 <code>0xFF0000<\/code>, <code>0x00FF00<\/code> \u0438 \u0438\u0436\u0435 \u0441 \u043d\u0438\u043c\u0438 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0447\u0430\u0441\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u044b\u0445.\u00a0<\/p>\n<p>\u0412\u044b\u0431\u043e\u0440 \u043f\u0430\u043b \u043d\u0430 <code>0xBADBEE<\/code> &#8212; \u043d\u0435\u0436\u043d\u043e-\u0433\u043e\u043b\u0443\u0431\u043e\u0439 \u0446\u0432\u0435\u0442, \u0445\u043e\u0440\u043e\u0448\u043e \u0441\u043c\u043e\u0442\u0440\u044f\u0449\u0438\u0439\u0441\u044f \u043d\u0430 \u0431\u0435\u043b\u043e\u043c \u0444\u043e\u043d\u0435, \u0438 \u0441 \u043c\u043d\u0435\u043c\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c. \u041d\u0443 \u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u0441\u0430\u043c\u0443 \u0431\u0430\u0437\u0443 \u044f \u0442\u043e\u0436\u0435 \u0442\u0430\u043a \u043d\u0430\u0437\u0432\u0430\u043b.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2a1\/d3b\/0a0\/2a1d3b0a0d6f04524048321d5b4b80b4.png\" width=\"338\" height=\"266\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2a1\/d3b\/0a0\/2a1d3b0a0d6f04524048321d5b4b80b4.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0432\u0430\u043c\u0438 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u0411\u0414 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0442\u0438\u043f\u0430 \u201c\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u201d. \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 badbee, \u0434\u0430\u0442\u044c \u0435\u043c\u0443 \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u0430 \u043f\u043e\u0442\u043e\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c, \u0442\u043e \u043e\u043d \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u043d\u0430\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0438\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 json:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e6d\/4a9\/51a\/e6d4a951a87e6e2e9284ab960b56e34a.png\" width=\"286\" height=\"223\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e6d\/4a9\/51a\/e6d4a951a87e6e2e9284ab960b56e34a.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0418, \u043a\u0441\u0442\u0430\u0442\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0438 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u0432\u043e\u044e \u0431\u0430\u0437\u0443.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c<\/summary>\n<div class=\"spoiler__content\">\n<ol>\n<li>\n<p><code>git clone https:\/\/github.com\/AlexeyGrishin\/badbee.git<\/code><\/p>\n<\/li>\n<li>\n<p>\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0434\u043e\u043a\u0435\u0440<\/p>\n<\/li>\n<li>\n<p><code>docker build -t badbee .<\/code><\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 <code>db\/temp.png<\/code><\/p>\n<\/li>\n<li>\n<p><code>docker run -d --rm --name badbee -e DB_FILE=temp.png -p 3030:3030 -v \"$pwd\/db:\/usr\/badbee\/db\" badbee<\/code><\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 <a href=\"http:\/\/localhost:3030\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost:3030<\/a> . \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c \u0447\u0442\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u043e\u0442\u043a\u0440\u044b\u043b\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432\u044b\u0448\u0435 \u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0432 <code>temp.png<\/code><\/p>\n<\/li>\n<li>\n<p>\u043d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435 \u0438 F5<\/p>\n<\/li>\n<\/ol>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441 \u0434\u043e\u043a\u0435\u0440\u043e\u043c, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a:<\/p>\n<ol>\n<li>\n<p><code>git clone https:\/\/github.com\/AlexeyGrishin\/badbee.git<\/code><\/p>\n<\/li>\n<li>\n<p>Install rust &amp; cargo from <a href=\"https:\/\/www.rust-lang.org\/tools\/install\" rel=\"noopener noreferrer nofollow\">https:\/\/www.rust-lang.org\/tools\/install<\/a><\/p>\n<\/li>\n<li>\n<p>Install wasm-pack from <a href=\"https:\/\/rustwasm.github.io\/wasm-pack\/installer\/\" rel=\"noopener noreferrer nofollow\">https:\/\/rustwasm.github.io\/wasm-pack\/installer\/<\/a><\/p>\n<\/li>\n<li>\n<p><code>cargo build<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>cd web-client<\/code><\/p>\n<\/li>\n<li>\n<p><code>wasm-pack build --out-dir ..\/static --target web<\/code><\/p>\n<\/li>\n<li>\n<p><code>cd ..<\/code><\/p>\n<\/li>\n<li>\n<p><code>cargo run --package web-server<\/code> <\/p>\n<\/li>\n<li>\n<p><a href=\"http:\/\/localhost:3030\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost:3030<\/a><\/p>\n<p>\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c visual studio build tools, \u043d\u043e \u0432\u0430\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u043a\u0430\u0436\u0443\u0442 \u0438\u043b\u0438 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0438, \u0438\u043b\u0438 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0441\u0431\u043e\u0440\u043a\u0438<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/details>\n<h3>\u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438<\/h3>\n<p>\u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438. \u0425\u043e\u0442\u044f \u0431\u044b \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0438\u0445 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0435\u0441\u0442. \u042f \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u0438 \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043b\u0435\u0432\u043e\u0433\u043e \u0443\u0433\u043b\u0430. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u0447\u043d\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 id \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0411\u0414, \u0435\u0433\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0414\u0430, \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c, \u0442\u043e \u0435\u0451 id \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f, \u0445\u043e\u0442\u044f \u0441\u0430\u043c\u0430 \u043e\u043d\u0430 \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u041d\u0443 \u0438 \u043b\u0430\u0434\u043d\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u043c\u0435\u0442\u044c \u044d\u0442\u043e \u0432\u0432\u0438\u0434\u0443.<\/p>\n<h3>\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u041e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0443\u0436\u043d\u044b \u0440\u0435\u0434\u043a\u043e. \u0427\u0430\u0449\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u201c\u043a\u043e\u043b\u043e\u043d\u043e\u043a\u201d \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u0439. \u0418 \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1b4\/678\/24d\/1b467824da7431751110ed4846e7389e.png\" width=\"577\" height=\"247\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1b4\/678\/24d\/1b467824da7431751110ed4846e7389e.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"float\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/000\/842\/55f\/00084255feea4afaa2d82144488610f5.png\" width=\"292\" height=\"341\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/000\/842\/55f\/00084255feea4afaa2d82144488610f5.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0423 \u043d\u0430\u0441 \u0443\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0431\u0430\u0437\u0430, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u044b \u0438 \u0438\u0445 \u043f\u0438\u0442\u043e\u043c\u0446\u044b, \u043f\u0440\u0438\u0447\u0451\u043c \u043f\u0438\u0442\u043e\u043c\u0446\u0435\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0440\u044b\u0431\u043a\u0438, \u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0433\u0440\u0443\u0441\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f \u0431\u0435\u0437 \u043f\u0438\u0442\u043e\u043c\u0446\u0435\u0432.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c07\/8d6\/716\/c078d6716a19c5422412d887d6562a34.png\" width=\"746\" height=\"649\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c07\/8d6\/716\/c078d6716a19c5422412d887d6562a34.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0431\u0430\u0437\u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0442\u043e \u0432 \u043d\u0438\u0445 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0438 \u0438\u0441\u043a\u0430\u0442\u044c. \u042f \u0438\u043c\u0435\u044e \u0432\u0432\u0438\u0434\u0443 &#8212; \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e. \u0413\u043b\u0430\u0437\u0430\u043c\u0438-\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0432\u0441\u0451 \u043b\u0435\u0433\u043a\u043e.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u044f \u0432\u0432\u043e\u0436\u0443 \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u201c\u0441\u0442\u043e\u043b\u0431\u0446\u0430\u201d &#8212; \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0437\u0430\u0433\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u201ccolumn\u201d \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0432\u044b\u0448\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3ee\/a2c\/0c7\/3eea2c0c7f22f132cb1ab490141a812b.png\" width=\"880\" height=\"425\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3ee\/a2c\/0c7\/3eea2c0c7f22f132cb1ab490141a812b.png\"\/><figcaption><\/figcaption><\/figure>\n<p><em>\u041a\u0441\u0442\u0430\u0442\u0438 \u0432\u0441\u0451 \u0447\u0442\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043e \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f &#8212; \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u201c\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438\u201d.<\/em><\/p>\n<p>\u0412\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434 \u0446\u0432\u0435\u0442\u043d\u044b\u043c\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c\u0438 \u0441\u0432\u0435\u0440\u0445\u0443, \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u043c\u0438 \u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u043e\u043b\u0431\u0446\u0443. \u042d\u0442\u0430 \u0431\u0430\u0437\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e \u0432 \u201c\u0441\u0438\u043d\u0435\u043c\u201d \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u0443 \u043d\u0430\u0441 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043e\u043c\u043e\u0432, \u0430 \u0432 \u201c\u043a\u0440\u0430\u0441\u043d\u043e\u043c\u201d \u0441\u0442\u043e\u043b\u0431\u0446\u0435 &#8212; \u0437\u0430\u043f\u0438\u0441\u0438 \u043b\u044e\u0434\u0435\u0439.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/40b\/410\/ad0\/40b410ad0cb358686f4e67895694de07.png\" width=\"218\" height=\"180\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/40b\/410\/ad0\/40b410ad0cb358686f4e67895694de07.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e27\/38b\/b44\/e2738bb448b324d5fbc780dbb2f69ffe.png\" width=\"280\" height=\"213\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e27\/38b\/b44\/e2738bb448b324d5fbc780dbb2f69ffe.png\"\/><figcaption><\/figcaption><\/figure>\n<h3>\u0422\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u0425\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 &#8212; \u044d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u043e\u043b\u0435\u0437\u043d\u043e. \u041d\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0412 \u0431\u0430\u0437\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u0441\u0442\u0440\u043e\u043a\u0438, \u0438 \u0447\u0438\u0441\u043b\u0430, \u0438 \u0434\u0440\u0443\u0433\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043f\u0440\u0438\u0447\u0451\u043c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u0432\u0438\u0434\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a, \u0430 \u0432 \u201c\u043c\u0430\u0448\u0438\u043d\u043d\u043e\u201d-\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u043c \u0432\u0438\u0434\u0435. \u041f\u043e\u0431\u043e\u0440\u0435\u043c \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435, \u0438 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u043c \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0438\u043d\u0430\u0447\u0435.<\/p>\n<p>\u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 &#8212; \u044d\u0442\u043e \u0431\u0443\u043b\u0435\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u201c\u043f\u0443\u0441\u0442\u043e\u0442\u0430\u201d (\u0431\u0435\u043b\u044b\u0439 \u0446\u0432\u0435\u0442) &#8212; \u044d\u0442\u043e false. \u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0442\u0430 &#8212; \u0437\u043d\u0430\u0447\u0438\u0442 true. \u0412 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043b\u0435\u0433\u043a\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u201c\u0437\u0430\u043b\u0438\u0432\u043a\u0430\u201d \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0418 \u0442\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441: \u043a\u0430\u043a \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c, \u0433\u0434\u0435 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0432\u0432\u0438\u0434\u0443 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u0430 \u0433\u0434\u0435 &#8212; \u0431\u0443\u043b\u0435\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435? \u041d\u0443\u0436\u043d\u0430 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0441\u0445\u0435\u043c\u0430. \u0418 \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0442\u0443\u0442 \u0436\u0435, \u0432 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435.<\/p>\n<p>\u041f\u043e\u0434\u0443\u043c\u0430\u0432 \u043d\u0430\u0434 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438, \u044f \u0440\u0435\u0448\u0438\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u043a\u0438 \u0442\u0438\u043f\u043e\u0432 \u0432 \u0443\u0433\u043e\u043b\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ffc\/73b\/71c\/ffc73b71ca77d856289c3201d5b7c0f7.png\" width=\"332\" height=\"362\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ffc\/73b\/71c\/ffc73b71ca77d856289c3201d5b7c0f7.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0426\u0432\u0435\u0442 \u043d\u0435\u0432\u0430\u0436\u0435\u043d, \u0432\u0430\u0436\u043d\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0418\u043a\u043e\u043d\u043e\u0447\u043a\u0430 \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0431\u0443\u043a\u0432\u0443 b &#8212; \u044d\u0442\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0431\u0443\u043b\u0435\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/27c\/fc4\/4c9\/27cfc44c92b7c2f200492758b4740173.png\" width=\"102\" height=\"62\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/27c\/fc4\/4c9\/27cfc44c92b7c2f200492758b4740173.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/026\/aca\/831\/026aca8310a50e9eb3699241948a7a52.png\" width=\"207\" height=\"154\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/026\/aca\/831\/026aca8310a50e9eb3699241948a7a52.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0447\u0438\u0441\u043b\u0430. \u0427\u0438\u0441\u043b\u0430\u043c\u0438 \u043c\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u043c. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u201c\u0447\u0435\u0433\u043e-\u0442\u043e\u201d \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e &#8212; \u0442\u043e \u043f\u0440\u043e\u0449\u0435 \u044d\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u0438 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/600\/729\/0ae\/6007290aec6953ad4c029a078a444009.png\" width=\"416\" height=\"166\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/600\/729\/0ae\/6007290aec6953ad4c029a078a444009.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u043e\u0441\u0442\u0430\u0432 \u043a\u043e\u0442\u0430: 2 \u0433\u043b\u0430\u0437\u0430, 2 \u0443\u0445\u0430, 1 \u0440\u043e\u0442 \u0438 6 \u0443\u0441\u043e\u0432<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8a6\/e25\/3b9\/8a6e253b918dd09128882f53aa7a54a5.png\" width=\"187\" height=\"174\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8a6\/e25\/3b9\/8a6e253b918dd09128882f53aa7a54a5.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0439:<\/p>\n<ol>\n<li>\n<p> \u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a = 0<\/p>\n<\/li>\n<li>\n<p> \u0418\u0449\u0435\u0442\u0441\u044f \u043d\u0435 \u201c\u043f\u0443\u0441\u0442\u043e\u0439\u201d \u043f\u0438\u043a\u0441\u0435\u043b\u044c (\u0446\u0432\u0435\u0442 != \u0431\u0435\u043b\u044b\u0439). \u0415\u0441\u043b\u0438 \u043d\u0430\u0448\u043b\u0438:<\/p>\n<ol>\n<li>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043d\u0430 1<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u201cflood fill\u201d \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044f \u0432\u0441\u0435 \u043d\u0435-\u043f\u0443\u0441\u0442\u044b\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u0441 \u044d\u0442\u0438\u043c<\/p>\n<\/li>\n<li>\n<p> \u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u0441 \u0448\u0430\u0433\u0430 2, \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044f \u043f\u0438\u043a\u0441\u0435\u043b\u0438, \u0437\u0430\u043f\u043e\u043c\u043d\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0448\u0430\u0433\u0435 2.2<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>\u0423 \u043a\u043e\u0442\u0438\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0438\u043c\u044f. \u0415\u0433\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u201c\u043c\u0430\u0448\u0438\u043d\u0435\u201d, \u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443 \u0432 paint-\u0435 &#8212; \u0442\u0430\u043a\u043e\u0432\u044b \u043d\u0430\u0448\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f. \u0417\u043d\u0430\u0447\u0438\u0442, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0435\u0433\u043a\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f. \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u043e\u043d\u043e\u0448\u0438\u0440\u0438\u043d\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u043a\u0430\u043a \u043d\u0435\u043b\u044c\u0437\u044f \u043b\u0443\u0447\u0448\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bb3\/fd5\/f97\/bb3fd5f97f68034d5d10dd7c791f8621.png\" width=\"532\" height=\"97\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bb3\/fd5\/f97\/bb3fd5f97f68034d5d10dd7c791f8621.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u043e, \u0447\u0442\u043e \u043e\u043d \u043c\u0435\u043b\u043a\u0438\u0439, \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u043b\u044e\u0441\u044b \u0438 \u043c\u0438\u043d\u0443\u0441\u044b.<\/p>\n<p>\u041f\u043b\u044e\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u041b\u0435\u0433\u043a\u043e \u201c\u043f\u0438\u0441\u0430\u0442\u044c\u201d \u043a\u0430\u0440\u0430\u043d\u0434\u0430\u0448\u043e\u043c \u0432 \u043f\u0435\u0439\u043d\u0442\u0435, \u0431\u0443\u043a\u0432\u044b \u043f\u0440\u043e\u0441\u0442\u044b\u0435<\/p>\n<\/li>\n<li>\n<p>\u041b\u0435\u0433\u043a\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u044c<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u0438\u043d\u0443\u0441\u044b:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cc0\/0ab\/71a\/cc00ab71af2a60cfaa44bb54eeb89344.png\" width=\"300\" height=\"200\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cc0\/0ab\/71a\/cc00ab71af2a60cfaa44bb54eeb89344.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0431\u0430\u0437\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fe1\/d5f\/71f\/fe1d5f71f69bd410af4dcb0be369a1c5.png\" alt=\"\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u044d\u0442\u043e, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 - \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\" title=\"\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u044d\u0442\u043e, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 - \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\" width=\"685\" height=\"216\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fe1\/d5f\/71f\/fe1d5f71f69bd410af4dcb0be369a1c5.png\"\/><figcaption>\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u044d\u0442\u043e, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 &#8212; \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/figcaption><\/figure>\n<p>\u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 &#8212; \u044d\u0442\u043e float. \u041a\u0430\u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442 0 \u0434\u043e 1 &#8212; \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u044b, \u0434\u043e\u043b\u044f \u0447\u0435\u0433\u043e-\u0442\u043e. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043a\u0430\u043a \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043e\u043b\u044e!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dde\/397\/b7a\/dde397b7adf12b5c05f35416ae5a55ae.png\" width=\"681\" height=\"207\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dde\/397\/b7a\/dde397b7adf12b5c05f35416ae5a55ae.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e &#8212; \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u044b\u0442\u043e\u0441\u0442\u0438 \u043a\u043e\u0442\u0438\u043a\u0430. <\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bec\/bb8\/678\/becbb86781df8a14721b62712791cbb4.png\" width=\"314\" height=\"382\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bec\/bb8\/678\/becbb86781df8a14721b62712791cbb4.png\"\/><figcaption><\/figcaption><\/figure>\n<p>76% &#8212; \u043d\u0435\u043f\u043b\u043e\u0445\u043e.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eeb\/9aa\/570\/eeb9aa5708c8841f3a5375e3a6e2c411.png\" width=\"422\" height=\"366\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eeb\/9aa\/570\/eeb9aa5708c8841f3a5375e3a6e2c411.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0410 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043e\u0442\u043c\u0435\u0447\u0430\u0442\u044c \u043d\u0435 \u043e\u0434\u043d\u0443 \u0434\u043e\u043b\u044e, \u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0446\u0432\u0435\u0442\u0430\u043c\u0438? \u042d\u0442\u0430\u043a\u0438\u0439 \u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0438\u0439 \u0441\u0430\u043c \u0437\u0430 \u0441\u0435\u0431\u044f pie chart?\u00a0<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0434\u043d\u044f \u043a\u043e\u0442\u0438\u043a\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 \u0446\u0432\u0435\u0442 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 \u043d\u0435\u043a\u0443\u044e \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u0430 \u043b\u0435\u0433\u0435\u043d\u0434\u0430 \u0441\u0432\u0435\u0440\u0445\u0443 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043d\u0435 \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/65b\/fb5\/256\/65bfb5256b3084c71e1bfda2a9c9f659.png\" width=\"522\" height=\"601\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/65b\/fb5\/256\/65bfb5256b3084c71e1bfda2a9c9f659.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b16\/7ab\/728\/b167ab728b13ab3ac93a67d5033df3d8.png\" width=\"230\" height=\"81\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b16\/7ab\/728\/b167ab728b13ab3ac93a67d5033df3d8.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0442\u043e \u0436, \u043d\u0430\u0448 \u043a\u043e\u0442\u0438\u043a \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u043c\u043d\u043e\u0433\u043e \u0442\u044b\u0433\u044b\u0434\u044b\u043a\u0430\u0435\u0442, \u043a\u0430\u043a \u0441\u043b\u043e\u043d, \u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u0440\u044b\u0431\u043e\u0432 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0447\u0430\u0449\u0435, \u0447\u0435\u043c \u0435\u0441\u0442. \u0412 \u043d\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u0435 \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e!<\/p>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438<\/h3>\n<p>\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0432\u044b\u0448\u0435 \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u0438 2 \u0434\u043e\u043c\u0438\u043a\u0430 \u0438 3 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430. \u0425\u043e\u0447\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0441\u0435\u043b\u0438\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0432 \u043f\u043e \u0434\u043e\u043c\u0430\u043c, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043e\u043c\u043e\u0432 \u0438 \u043b\u044e\u0434\u0435\u0439 \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438, \u043d\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044f \u0438\u0445 \u0432 \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u043a\u043e\u043b\u0431\u0430\u0441\u0443.<\/p>\n<p>\u041d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0441\u0441\u044b\u043b\u043a\u0438. \u0412\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043e\u043d\u0438 \u043a\u0430\u043a \u043f\u0443\u0441\u0442\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 \u0442\u0438\u043f\u043e\u043c \u201c\u0441\u0441\u044b\u043b\u043a\u0430\u201d. \u0418 \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u0432 \u0442\u0438\u043f\u043e\u0432, \u0446\u0432\u0435\u0442 \u0442\u0443\u0442 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ec1\/899\/65b\/ec189965b5443b0b22cb434e95059cf7.png\" width=\"912\" height=\"648\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ec1\/899\/65b\/ec189965b5443b0b22cb434e95059cf7.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0441\u044b\u043b\u043a\u0438, \u043a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u044b \u043e\u0442 \u201c\u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430\u201d \u043a \u201c\u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u043c\u0443\u201d (\u0430 \u0442\u043e\u0447\u043d\u0435\u0435 &#8212; \u043a \u0437\u0430\u043f\u0438\u0441\u0438). \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c (\u0442\u043e\u0442 \u0436\u0435 flood fill, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435) \u0442\u043e\u043b\u0435\u0440\u0430\u043d\u0442\u0435\u043d \u043a \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0438\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/40d\/3a6\/dfa\/40d3a6dfacc7b946f28a405c2491cba8.png\" width=\"670\" height=\"654\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/40d\/3a6\/dfa\/40d3a6dfacc7b946f28a405c2491cba8.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u043f\u0435\u0440\u0435\u0435\u0434\u0435\u0442 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439, \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0435\u0440\u0435\u0442\u044c \u043e\u0434\u043d\u0443 \u043b\u0438\u043d\u0438\u044e \u0438 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1cc\/587\/82f\/1cc58782f0ec0809a182fedc4193c4ea.png\" alt=\"\u0422\u0443\u0442 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u043a\u0430\u043a \u0432 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 id \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f \u0434\u043e\u043c\u0430\" title=\"\u0422\u0443\u0442 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u043a\u0430\u043a \u0432 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 id \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f \u0434\u043e\u043c\u0430\" width=\"310\" height=\"663\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1cc\/587\/82f\/1cc58782f0ec0809a182fedc4193c4ea.png\"\/><figcaption>\u0422\u0443\u0442 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u043a\u0430\u043a \u0432 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 id \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f \u0434\u043e\u043c\u0430<\/figcaption><\/figure>\n<h2>\u0414\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p>\u041a\u0430\u043a\u0438\u0445-\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u0438\u0439 \u0442\u0443\u0442 \u043d\u0435\u0442. \u041a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u201c\u0431\u0430\u0437\u0430\u201d \u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u0432\u044b\u0448\u0435. \u0421\u043d\u0430\u0447\u0430\u043b\u0430, \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u201c\u0441\u0445\u0435\u043c\u044b\u201d, \u0442.\u043a. \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043c\u043e\u0434\u0435\u043b\u044c &#8212; \u0433\u0434\u0435 \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, \u043a\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u043a\u0430\u043a \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f flood fill, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438.<\/p>\n<p>\u0421\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0443\u0436\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u0412 \u0442\u0435\u043e\u0440\u0438\u0438 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u0441\u0445\u0435\u043c\u0443 \u0438 \u0432\u0438\u0434\u0435\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u043e \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u0435\u043e\u0440\u0438\u0438.\u00a0<\/p>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u044f \u0432\u0437\u044f\u043b rust. \u0422\u0443\u043f\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0430\u0432\u043d\u043e \u0445\u043e\u0442\u0435\u043b \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430 \u043d\u0451\u043c \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432\u0435\u0449\u0438 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u0440\u0438\u0442\u0438\u043a\u0443.<\/p>\n<details class=\"spoiler\">\n<summary>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u0440\u0438\u0442\u0438\u043a\u0430<\/summary>\n<div class=\"spoiler__content\">\n<p>\u042f \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0441\u044c \u0443\u0431\u0435\u0436\u0434\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0444\u0440\u0430\u0437\u044b \u0432\u0440\u043e\u0434\u0435 \u201c\u043f\u043e\u043b\u043d\u0430\u044f \u0445\u0440\u0435\u043d\u044c\u201d, \u201c\u0442\u0443\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0432\u0441\u0451\u201d, \u201c\u0437\u0430\u0447\u0435\u043c \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c\u201d \u0438 \u0438\u0436\u0435 \u0441 \u043d\u0438\u043c \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0440\u0438\u0442\u0438\u043a\u043e\u0439. \u041e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0441\u0430\u043c\u043e\u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f. \u041a\u0440\u0438\u0442\u0438\u043a\u0430 &#8212; \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043a\u0440\u0438\u0442\u0438\u043a\u0443\u0435\u043c\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0441\u0443\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u0445 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043a\u0440\u0438\u0442\u0438\u043a\u0443\u0435\u043c\u043e\u043c\u0443 \u0441\u0442\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0435 &#8212; \u044d\u0442\u043e \u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u043a\u0430.<\/p>\n<\/div>\n<\/details>\n<p>\u0421 \u043a\u043e\u0434\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0442\u0443\u0442: <a href=\"https:\/\/github.com\/AlexeyGrishin\/badbee\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/AlexeyGrishin\/badbee<\/a><\/p>\n<h3>\u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/h3>\n<p>\u0422\u0443\u0442 \u044f \u0432\u044b\u0434\u0435\u043b\u0438\u043b 2 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0438. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441 \u201c\u044f\u0434\u0440\u043e\u043c\u201d \u0431\u0430\u0437\u044b, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0435\u0441\u0442\u044c \u0430\u043f\u0438 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438. \u0418 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 http \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u0431\u0430\u0437\u0435 \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u0432 json.<\/p>\n<p>\u0414\u043b\u044f \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432\u0437\u044f\u043b warp(<a href=\"https:\/\/github.com\/seanmonstar\/warp\/\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/seanmonstar\/warp\/<\/a>). \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0435\u0433\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0445\u0432\u0430\u043b\u0438\u0432\u0430\u044e\u0442, \u0447\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u043c\u043d\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0435\u0433\u043e \u201c\u0433\u0440\u043e\u043a\u043d\u0443\u0442\u044c\u201d. \u042f \u043f\u043e\u0441\u043b\u0443\u0448\u043d\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u044b, \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u0445 \u043f\u043e\u0434 \u0441\u0435\u0431\u044f, \u043d\u043e \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u044d\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u043a \u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 &#8212; \u043f\u043e\u043d\u044f\u0442\u044c \u0431\u044b\u043b\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0432\u0430\u0442\u043e. \u0415\u0441\u043b\u0438 \u0431\u0440\u0430\u0442\u044c express.js \u0438 \u0435\u0433\u043e middleware, \u0442\u043e \u0442\u0430\u043c \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043a\u0430\u043a-\u0442\u043e \u043f\u0440\u043e\u0449\u0435 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u041d\u043e \u0442\u043e node.js \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f, \u0434\u0443\u043c\u0430\u044e \u0432 warp \u043c\u043d\u043e\u0433\u043e\u0435 \u043d\u0430\u0432\u043e\u0440\u043e\u0447\u0435\u043d\u043e \u0432 \u0443\u0433\u043e\u0434\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442 \u0441 \u0431\u0430\u0437\u0430\u043c\u0438 \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0430\u043a\u0442\u043e\u0440\u043e\u0432. \u041a\u0430\u0436\u0434\u0430\u044f \u0431\u0430\u0437\u0430 (\u0434\u0430, \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a-\u0431\u0430\u0437) &#8212; \u044d\u0442\u043e \u0430\u043a\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u201c\u043b\u0451\u0433\u043a\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435\u201d (\u0441\u043a\u043e\u0440\u0435\u0435 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u0435, \u0438\u043b\u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0443 tokio). \u0412\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0430\u043a\u0442\u043e\u0440\u0443 \u0431\u0430\u0437\u044b \u0438 \u0436\u0434\u0451\u0442 \u043e\u0442\u0432\u0435\u0442\u0430, \u043d\u0435 \u043c\u0435\u0448\u0430\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c \u043a \u0434\u0440\u0443\u0433\u0438\u043c \u0431\u0430\u0437\u0430\u043c.<\/p>\n<p>\u0410\u043a\u0442\u043e\u0440 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"rust\">while let Some(message) = rx.recv().await {    if let DBMessage::Shutdown = message {        break;    }    db.handle(message).await }  async fn handle(&amp;mut self, message: DBMessage) -> () {    match message {        DBMessage::Shutdown => {...},        DBMessage::SetModel { model, image } => {...}        DBMessage::CloneRecord { x, y, tx } => {...}        DBMessage::GetRecords { query, tx } => {...}        ...        DBMessage::Sync => {...}    } } <\/code><\/pre>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u201c\u043f\u043e-\u0441\u0442\u0430\u0440\u0438\u043d\u043a\u0435\u201d, \u0447\u0435\u0440\u0435\u0437 mutex-\u044b. \u041d\u043e \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0437\u0430\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0434\u0440\u044f\u0434 \u0432 <code>Arc&lt;Mutex&lt;Box&lt;...>>><\/code> \u043c\u0435\u043d\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0442\u043e\u043c\u0438\u043b\u0438. \u0421 \u0430\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u043a\u043e\u0434 \u0441\u0442\u0430\u043b \u043f\u043e\u0447\u0438\u0449\u0435 \u0438 \u043f\u043e\u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435, \u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043a\u0430 \u043f\u043e\u043d\u0438\u043c\u0430\u044e \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0430\u0442\u044c (\u043a\u0430\u043a \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e &#8212; \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u043c\u043e\u0433\u0443 \u043c\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432).<\/p>\n<p>\u0410\u043a\u0442\u043e\u0440 \u0432 \u0442\u0430\u043a\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u201c\u043e\u0434\u043d\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u043c\u201d. \u041f\u043e\u043a\u0430 \u043e\u043d \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0434\u043d\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 GetRecords) \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435. \u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043b 10000 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0430 \u0435\u0449\u0451 \u043a\u0442\u043e-\u0442\u043e 1, \u0442\u043e \u044d\u0442\u043e\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u043f\u043e\u043a\u0430 \u0441\u043e\u0431\u0435\u0440\u0443\u0442\u0441\u044f 10000 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e. \u0410 \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043d\u0430 \u0434\u0438\u0441\u043a \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0441 \u0434\u0438\u0441\u043a\u0430&#8230;\u00a0<\/p>\n<p>\u041d\u043e, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u0435\u043b\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u0435\u043d\u0438\u0435. \u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 &#8212; \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0447\u0442\u0435\u043d\u0438\u044f \u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u201c\u043f\u0443\u043b\u0443\u201d \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b&#8230; \u0421\u0442\u043e\u043f, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u0438\u0445 \u0441\u043d\u043e\u0432\u0430 \u043d\u0430\u0434\u043e \u0432 \u043c\u044e\u0442\u0435\u043a\u0441\u044b \u0437\u0430\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c, \u0430 \u043a\u0430\u043a \u0440\u0430\u0437 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0443\u0439\u0442\u0438&#8230; \u0412 \u043e\u0431\u0449\u0435\u043c, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u0432 \u043c\u0438\u0440\u0435 \u0430\u043a\u0442\u043e\u0440\u043e\u0432, \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 rust.<\/p>\n<figure class=\"float\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c4a\/04b\/f75\/c4a04bf7576c69bf965e1ea73c3fedf6.png\" width=\"223\" height=\"198\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c4a\/04b\/f75\/c4a04bf7576c69bf965e1ea73c3fedf6.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 rust \u043c\u043d\u0435 \u0441\u043a\u043e\u0440\u0435\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c, \u0447\u0435\u043c \u043d\u0435\u0442. Borrow checker \u0438\u043d\u043e\u0433\u0434\u0430 \u0445\u043e\u0447\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0433\u043e, \u043d\u043e \u0437\u0430\u0442\u043e \u0435\u0441\u043b\u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u043e\u0441\u044c &#8212; \u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0411\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432 4 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u0430, \u0430 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0441 \u043c\u0435\u043b\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 5 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442 RAM (5 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442! \u041d\u0435 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442!). \u042f \u0443\u0436\u0435 \u043e\u0442\u0432\u044b\u043a \u043e\u0442 \u0442\u0430\u043a\u0438\u0445 \u0447\u0438\u0441\u0435\u043b \u0432 \u043a\u0440\u043e\u0432\u0430\u0432\u043e\u043c \u044d\u043d\u0442\u0435\u0440\u043f\u0440\u0430\u0439\u0437\u0435.<\/p>\n<p>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u043b\u0438\u0441\u044c \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u043e\u043c\u0443-\u0442\u043e \u0438\u0437 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e.<\/p>\n<h4>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a<\/h4>\n<p>\u041d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f \u043f\u0440\u0435\u043d\u0435\u0431\u0440\u0451\u0433 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043e\u043a. \u0412 \u044f\u0437\u044b\u043a\u0430\u0445 \u0441 exception-\u0430\u043c\u0438 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u0440\u043e\u043a\u0430\u0442\u044b\u0432\u0430\u043b &#8212; \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0442\u043e\u043c try\/catch-\u0435\u0439 \u043d\u0430\u0441\u043e\u0432\u0430\u0442\u044c. \u0412 \u0440\u0430\u0441\u0442\u0435 \u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435 \u043f\u0440\u043e\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442. \u041f\u043e\u043d\u0430\u0442\u044b\u043a\u0430\u0432 \u0432\u0435\u0437\u0432\u0435 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 <code>unwrap<\/code>() \u044f \u043f\u043e\u0442\u043e\u043c \u0447\u0430\u0441\u0442\u0435\u043d\u044c\u043a\u043e \u0441 \u0431\u043e\u043b\u044c\u044e \u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0430\u0434\u0430\u0435\u0442 (\u043f\u0440\u0438\u0447\u0451\u043c \u0441\u043e\u0432\u0441\u0435\u043c) \u0442\u043e \u0442\u0430\u043c \u0442\u043e \u0442\u0443\u0442 \u0438\u0437-\u0437\u0430 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043c\u0435\u043b\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a. \u0410 \u043a\u043e\u0433\u0434\u0430 \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0441\u0432\u043e\u0451\u043c api, \u0442\u043e \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e \u0432\u0441\u0435\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0437\u0430\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u0432 <code>Result<\/code>, \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u044b \u043e\u0448\u0438\u0431\u043e\u043a, \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>?<\/code> \u0438 \u0432\u0441\u0451 \u043f\u0440\u043e\u0447\u0435\u0435. \u041e\u043d\u043e \u0442\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u043b\u043e, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043d\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437 \u044f \u043f\u043e\u0442\u0440\u0430\u0447\u0443 \u043b\u0438\u0448\u043d\u0438\u0435 \u043f\u0430\u0440\u0443 \u0441\u0435\u043a\u0443\u043d\u0434 \u0438 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u044e \u0438 <code>Result<\/code>, \u0438 \u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u0432\u043c\u0435\u0441\u0442\u043e <code>unwrap()<\/code>.<\/p>\n<h4>\u042f\u0432\u043d\u044b\u0435 \u0438 \u043d\u0435\u044f\u0432\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/h4>\n<p>\u041e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u043d\u044b\u043c \u043c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0442\u0440\u0435\u0439\u0442\u043e\u0432 From\/Into. \u041a\u0430\u043a \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a\u0430\u044f-\u043d\u0438\u0431\u0443\u0434\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432 api \u0432 java:<\/p>\n<pre><code class=\"java\">public Something createSomething(String value) { ... }<\/code><\/pre>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0430\u0432\u0442\u043e\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0437\u0430\u043c\u043e\u0440\u043e\u0447\u0438\u043b\u0441\u044f \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043e\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0410 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0435\u0442. \u0422\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u0441\u0435 \u0441\u0432\u043e\u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0432 \u0441\u0442\u0440\u043e\u043a\u0438 \u044f\u0432\u043d\u043e \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.\u00a0<\/p>\n<p>\u0412 rust \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"rust\">fn create_something&lt;T>(value: T) -> Something where T: Into&lt;String> { ... }<\/code><\/pre>\n<p>\u0427\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u201c\u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0441\u044e\u0434\u0430 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 <code>String<\/code>\u201d. \u0418 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0442\u0438\u043f\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c <code>trait From<\/code> &#8212; \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0438 \u0442\u0438\u043f\u044b \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u041f\u0440\u0438\u0447\u0451\u043c \u0442\u0443\u0442 <code>&lt;T><\/code> &#8212; \u044d\u0442\u043e \u043d\u0435 \u0442\u0438\u043f\u0430 \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u0430 \u0432 java, \u0430 \u0441\u043a\u043e\u0440\u0435\u0435 \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442 \u0432 C++. \u0422\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0442\u0438\u043f\u0430 \u0441\u043e\u0437\u0434\u0430\u0441\u0442\u0441\u044f \u0441\u0432\u043e\u044f \u0432\u0435\u0440\u0441\u0438\u044f <code>create_something<\/code>, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 <code>String<\/code> (\u0438, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c \u0445\u0438\u0442\u0440\u043e \u0437\u0430\u0438\u043d\u043b\u0430\u0439\u043d\u0435\u043d\u043e \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e &#8212; \u044f \u0431\u044b \u043e\u0436\u0438\u0434\u0430\u043b).<\/p>\n<h4>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440<\/h4>\n<p>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0432 rust &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0430. \u0412 \u043a\u043e\u0438-\u0442\u043e \u0432\u0435\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u043e\u0440\u0451\u0442 \u043d\u0430 \u0442\u0435\u0431\u044f \u043a\u0430\u043a \u043f\u043e\u043b\u043e\u0443\u043c\u043d\u044b\u0439, \u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043c\u043e\u0447\u044c \u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u043d\u0443 \u0440\u0430\u0437\u0432\u0435 \u043d\u0435 \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044c?<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/807\/57b\/5e6\/80757b5e6c89f8ca9445aedeaa46cce8.png\" width=\"918\" height=\"241\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/807\/57b\/5e6\/80757b5e6c89f8ca9445aedeaa46cce8.png\"\/><figcaption><\/figcaption><\/figure>\n<h3>\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/h3>\n<p>\u0422.\u043a. \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b api \u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0431\u044b\u043b \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u043a\u043b\u0438\u0435\u043d\u0442, \u0442\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u0438 \u0435\u0433\u043e \u0442\u043e\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 rust, \u0431\u043b\u0430\u0433\u043e rust \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0432 web assembly.<\/p>\n<p>\u041d\u0430 \u043f\u0440\u043e\u0431\u0443 \u0432\u0437\u044f\u043b \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a sauron (<a href=\"https:\/\/github.com\/ivanceras\/sauron\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/ivanceras\/sauron<\/u><\/a>). \u041a\u0430\u043a \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0432\u0437\u044f\u043b \u0447\u0438\u0441\u0442\u043e \u0438\u0437-\u0437\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u043d\u044b\u0445 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0435\u0432 \u0432\u044b\u0431\u043e\u0440\u0430 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u0431\u044b\u043b\u043e.<\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u043e\u0439 \u0441 \u043d\u0438\u043c \u044f \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0434\u043e\u0432\u043e\u043b\u0435\u043d. \u0427\u0435\u043c-\u0442\u043e \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u043b \u043c\u043d\u0435 elm. \u041d\u0443 \u0438 react \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u043e\u0436\u0435. \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043a\u0440\u0443\u0442\u043e \u0442\u043e, \u0447\u0442\u043e jsx-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e rust-\u043e\u0432\u0441\u043a\u0438\u0445 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432. \u041f\u0440\u0438\u0447\u0451\u043c \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0432 rust &#8212; \u044d\u0442\u043e \u043d\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0432 C\/C++. \u0422\u0430\u043c \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0430 \u0441\u0442\u0440\u043e\u043a, \u0437\u0434\u0435\u0441\u044c \u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0430\u0437\u0431\u043e\u0440, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0434\u0430\u0441\u0442 \u043e\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442 \u043e \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0430\u0445 \u0432 \u043d\u043e\u0433\u0443.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"rust\">fn boolean_view(value: serde_json::Value, rec_id: &amp;str, field_idx: usize) -> Node&lt;Msg> {    let rec_id = rec_id.to_string();    let value = value.as_bool().unwrap();    node! [ &lt;span>        &lt;input            type = { \"checkbox\" }            checked = { value }            on_checked=move |e| { Msg::PatchRequested { id: rec_id.clone(), fi: field_idx, new_value: json!{ e } } }        \/>    &lt;\/span> ] } <\/code><\/pre>\n<p>\u0427\u0442\u043e \u043c\u043d\u0435 \u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c. \u0418\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0435\u044f\u0441\u043d\u043e \u043a\u0430\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0430 \u043c\u043d\u0435 \u043d\u0430\u0434\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c Node&lt;Msg>, \u0433\u0434\u0435 Node &#8212; \u044d\u0442\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442 virtual dom, \u0430 Msg &#8212; enum \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438, \u0438 \u0432\u043e\u0442 \u043e\u043d \u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043d \u0434\u043b\u044f \u043c\u043e\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041a\u0430\u043a \u0432\u044b\u043d\u043e\u0441\u0438\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u044b \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u0430\u043a \u0440\u0435\u044e\u0437\u0430\u0442\u044c \u0438\u0445, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0438 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f &#8212; \u043d\u0435\u044f\u0441\u043d\u043e. \u042f \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u044e, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435, \u043d\u043e \u044f \u043d\u0435 \u0443\u0432\u0438\u0434\u0435\u043b \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043d\u0435 \u0432\u0441\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u0430\u043a\u0440\u043e\u0441\u0430\u0445, \u0447\u0442\u043e \u0432\u044b\u043d\u0443\u0436\u0434\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 node \u0432\u0440\u0443\u0447\u043d\u0443\u044e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 &#8212; image onload). \u042d\u0442\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u043d\u0435 \u0442\u0430\u043a \u0441\u0442\u0440\u0430\u0448\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442, \u043d\u043e \u043c\u043d\u0435 \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043a\u043e\u0433\u0434\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435.<\/p>\n<p>\u0421\u043e\u0431\u044b\u0442\u0438\u0435 on_mount \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c, \u043d\u043e \u043e\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 dom element \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0438 \u0434\u043e \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b. \u0422\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0434 \u0441\u0430\u043c\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c, \u0430 \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0435\u0433\u043e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432 dom &#8212; \u0443\u0436\u0435 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f.<\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043c\u0443\u0447\u0430\u0432\u0448\u0438\u0441\u044c, \u044f \u0441\u043c\u043e\u0433 \u0442\u0430\u043a\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0443\u044e \u0440\u0438\u0441\u043e\u0432\u0430\u043b\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0442\u0438\u043f\u0430 image.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/46d\/802\/9c0\/46d8029c0b6f5a5893fcc56b9a7be2ab.gif\" width=\"501\" height=\"462\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/46d\/802\/9c0\/46d8029c0b6f5a5893fcc56b9a7be2ab.gif\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u0435\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e: <a href=\"https:\/\/github.com\/AlexeyGrishin\/badbee\/blob\/demo\/web-client\/src\/field_view.rs#L53\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/AlexeyGrishin\/badbee\/blob\/demo\/web-client\/src\/field_view.rs#L53<\/u><\/a><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0430\u0431\u043e\u0440 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 400 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/86d\/7c9\/a85\/86d7c9a858fc5141963662995f476132.png\" width=\"614\" height=\"107\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/86d\/7c9\/a85\/86d7c9a858fc5141963662995f476132.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0435 \u0441 \u0447\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043c\u043d\u043e\u0433\u043e \u044d\u0442\u043e \u0438\u043b\u0438 \u043c\u0430\u043b\u043e \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041d\u043e \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043c\u043d\u043e\u0433\u043e\u0432\u0430\u0442\u043e, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u044d\u0442\u043e \u0443\u0436\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a, \u0430 \u043d\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u043b\u0438\u0441\u0442\u0438\u043d\u0433. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u0440\u043e\u0436\u043e\u0440\u043b\u0438\u0432\u044b\u0439.<\/p>\n<h2>\u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u0444\u0430\u0439\u043b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/h2>\n<p>\u0412\u044b\u0448\u0435 \u044f \u043f\u0438\u0441\u0430\u043b, \u0447\u0442\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 5 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442. \u0425\u043e\u0440\u043e\u0448\u043e, \u0430 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 &#8212; \u0431\u043e\u043b\u044c\u0448\u0430\u044f?<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 10000\u044540000 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, 32 \u0446\u0432\u0435\u0442\u0430, PNG. \u0417\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u043d\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 287 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442, \u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 9000 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 (\u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 &#8212; 8 \u043f\u043e\u043b\u0435\u0439).<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0451 \u0432 \u0441\u0442\u0430\u0442\u044c\u044e \u0438\u043b\u0438 \u043d\u0430 github \u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435 \u0431\u0443\u0434\u0443.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bd5\/452\/9b5\/bd54529b5793413609623ded5fa9795d.png\" width=\"354\" height=\"233\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bd5\/452\/9b5\/bd54529b5793413609623ded5fa9795d.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439 \u0432 \u0434\u043e\u043a\u0435\u0440\u0435 (\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043d\u0430 husky_bigger.png)<\/p>\n<p><code>docker run -d --rm --name badbee -e DB_FILE=husky_bigger.png -p 3030:3030 -v \"$pwd\/db:\/usr\/badbee\/db\"\u00a0 badbee<\/code><\/p>\n<p>\u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e \u043a\u043b\u0438\u0435\u043d\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7f7\/a71\/978\/7f7a719781316a6d0d83405691986ed9.png\" width=\"606\" height=\"826\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7f7\/a71\/978\/7f7a719781316a6d0d83405691986ed9.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u043e\u0441\u044c. 10 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c.<\/p>\n<p>\u0410 \u0447\u0442\u043e \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438?<\/p>\n<figure class=\"float\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/291\/a09\/b73\/291a09b73493050d02b4fe1df73693fa.png\" width=\"315\" height=\"247\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/291\/a09\/b73\/291a09b73493050d02b4fe1df73693fa.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0423\u0436\u0435 \u043d\u0435 \u0442\u0430\u043a \u043a\u0440\u0443\u0442\u043e. \u041d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u043e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0442. PNG &#8212; \u0441\u0436\u0430\u0442\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442. \u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0442\u043e\u0447\u043a\u0430\u043c\u0438, \u043d\u0430\u0434\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0432 \u0431\u043e\u043b\u0435\u0435 \u043f\u043b\u043e\u0441\u043a\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c. 10000 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043d\u0430 40000 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043d\u0430 4 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c &#8212; \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0435 \u0441\u0430\u043c\u044b\u0435 1.5 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430.<\/p>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0443\u0436\u0435 \u043d\u0435 \u0442\u0430\u043a \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e, \u043a\u0430\u043a \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b. \u0410 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u0431\u0443\u0434\u0435\u0442 \u0432 10 \u0440\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0435? \u041f\u043b\u044e\u0441 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u0441\u0451 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u0440\u0430\u0437\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0431\u0443\u0434\u0443\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043a\u0443\u0441\u043e\u0447\u043a\u0438, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0443\u0441\u0442\u044c \u043f\u043e\u0434\u0440\u0433\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0441 \u0434\u0438\u0441\u043a\u0430, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>\u041d\u043e \u0442\u0443\u0442 \u043d\u0430\u0441 \u0436\u0434\u0451\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. PNG \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0436\u0430\u0442\u0438\u0435 Deflate &#8212; \u043f\u043e \u0441\u0443\u0442\u0438 \u0442\u043e\u0442 \u0436\u0435 zip. \u0418 (\u043f\u043e\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u043c\u0435\u043d\u044f, \u0435\u0441\u043b\u0438 \u044f \u043e\u0448\u0438\u0431\u0430\u044e\u0441\u044c) \u043d\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0432 \u043e\u0431\u0449\u0435\u043c \u0432\u0438\u0434\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0438\u0437 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b zip \u0430\u0440\u0445\u0438\u0432\u0430 \u043d\u0435 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0432 \u0442\u043e \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435. \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0437 png \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438\u0437 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b.<\/p>\n<p>\u0418 \u0442\u043e\u0433\u0434\u0430 \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442&#8230;<\/p>\n<h2>BMP!<\/h2>\n<p>\u042d\u0442\u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0441\u0436\u0430\u0442\u0438\u044f, \u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e (\u043f\u0440\u0430\u0432\u0434\u0430 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0441\u043d\u0438\u0437\u0443 \u0432\u0432\u0435\u0440\u0445, \u0442.\u0435. \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0430\u0439\u043b\u0430 \u0438\u0434\u0451\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f, \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 &#8212; \u043f\u0435\u0440\u0432\u0430\u044f).<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bcd\/d77\/d53\/bcdd77d539d5fb72eacec1c26810f6ca.png\" alt=\"https:\/\/binaryworld.net\/main\/CodeDetail.aspx?CodeId=3685\" title=\"https:\/\/binaryworld.net\/main\/CodeDetail.aspx?CodeId=3685\" width=\"459\" height=\"549\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bcd\/d77\/d53\/bcdd77d539d5fb72eacec1c26810f6ca.png\"\/><figcaption>https:\/\/binaryworld.net\/main\/CodeDetail.aspx?CodeId=3685<\/figcaption><\/figure>\n<p>\u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0437\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0438, \u0438 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0445 \u0441 \u0434\u0438\u0441\u043a\u0430 \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u0438 (\u0438 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0442\u043e\u0436\u0435).<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 png \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 rust image (<a href=\"https:\/\/github.com\/image-rs\/image\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/image-rs\/image<\/u><\/a>), \u0442\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 bmp \u043d\u0430\u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0438\u043b \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u043e\u0434\u0430 (<a href=\"https:\/\/github.com\/AlexeyGrishin\/badbee\/blob\/demo\/backend\/src\/io\/bmp_on_disk.rs\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/AlexeyGrishin\/badbee\/blob\/demo\/backend\/src\/io\/bmp_on_disk.rs<\/u><\/a>)\u00a0<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043c \u043d\u0430\u0448 png \u0432 bmp \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f.<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430. \u041e\u043d \u0441\u0442\u0430\u043b 1.2\u0413\u0431. \u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 1.5? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 bmp \u043d\u0435\u0442 \u0430\u043b\u044c\u0444\u0430-\u043a\u0430\u043d\u0430\u043b\u0430, \u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 24 \u0431\u0438\u0442\u0430 (3 \u0431\u0430\u0439\u0442\u0430), \u0430 \u043d\u0435 32.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u044d\u0442\u0438\u043c \u0444\u0430\u0439\u043b\u043e\u043c.<\/p>\n<p><code>docker run -d --rm --name badbee -e DB_FILE=husky_bigger.bmp -e BMP_KEEP_IN_MEM_INV=1 -p 3030:3030 -v \"$pwd\/db:\/usr\/badbee\/db\"\u00a0 badbee<\/code><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2a6\/fce\/d28\/2a6fced28e3077cc715ac73b5153d5f5.png\" width=\"603\" height=\"839\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2a6\/fce\/d28\/2a6fced28e3077cc715ac73b5153d5f5.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u0441\u0451 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u0433\u0440\u0443\u0437\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043e\u043b\u044c\u0448\u0435. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0444\u0430\u0439\u043b \u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0430 \u043f\u043e\u043b\u043e\u0441\u043a\u0430\u043c\u0438 \u043f\u043e 1024 \u043f\u0438\u043a\u0441\u0435\u043b\u044f. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u044f \u0432\u044b\u0434\u0430\u043b \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043a\u043e\u0434, \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u0440\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 image.<\/p>\n<p>\u0427\u0442\u043e \u043f\u043e \u0440\u0430\u0441\u0445\u043e\u0434\u0443 \u043f\u0430\u043c\u044f\u0442\u0438?<\/p>\n<figure class=\"float\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f7e\/c30\/da7\/f7ec30da7eb9aa77e2354c9ad58f3bf3.png\" width=\"318\" height=\"211\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f7e\/c30\/da7\/f7ec30da7eb9aa77e2354c9ad58f3bf3.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u043e. <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c, \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>BMP_KEEP_IN_MEM_INV<\/code>. \u0415\u0433\u043e \u0441\u043c\u044b\u0441\u043b &#8212; \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e, \u0447\u0442\u043e \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430\u0434\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 <code>1\/BMP_KEEP_IN_MEM_INV<\/code> \u043e\u0442 \u043e\u0431\u044a\u0451\u043c\u0430 \u0444\u0430\u0439\u043b\u0430. \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437 \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 1, \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 6<\/p>\n<p><code>docker run -d --rm --name badbee -e DB_FILE=husky_bigger.bmp -e BMP_KEEP_IN_MEM_INV=6 -p 3030:3030 -v \"$pwd\/db:\/usr\/badbee\/db\"\u00a0 badbee<\/code><\/p>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0448\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0437\u0430 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d91\/d44\/4ab\/d91d444ab99d9bd45699014e904da90d.png\" width=\"184\" height=\"40\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d91\/d44\/4ab\/d91d444ab99d9bd45699014e904da90d.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0410 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0442\u0430\u043b\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bd3\/d96\/c80\/bd3d96c80bec2663f4efeed6e95dad3f.png\" width=\"296\" height=\"215\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bd3\/d96\/c80\/bd3d96c80bec2663f4efeed6e95dad3f.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u043b\u0438\u0441\u0442\u0430\u0442\u044c \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u0442\u0443\u0434\u0430 \u0441\u044e\u0434\u0430, \u0442\u043e \u0432 \u043b\u043e\u0433\u0430\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a \u043e\u043d \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442\/\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043a\u0443\u0441\u043e\u0447\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/47b\/15f\/81d\/47b15f81d6c9495fe2024c213fc2b5c4.png\" width=\"273\" height=\"297\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/47b\/15f\/81d\/47b15f81d6c9495fe2024c213fc2b5c4.png\"\/><figcaption><\/figcaption><\/figure>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0422\u0443\u0442 \u044f \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u043d\u0430\u044e \u0447\u0442\u043e \u043f\u0438\u0441\u0430\u0442\u044c. \u0417\u0430\u043c\u0435\u0440\u044b \u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441\u0430? \u041f\u043b\u0430\u043d\u044b \u043d\u0430 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435? \u0421\u0444\u0435\u0440\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f? \u041c\u044b \u0442\u043e\u0447\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0445 \u0432 png?<\/p>\n<p>\u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0444\u043e\u0440\u043c\u0430\u0442 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432. \u0412 \u0433\u0435\u0439\u043c\u0434\u0438\u0437\u0430\u0439\u043d\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440. \u0417\u0430\u0447\u0435\u043c \u0442\u044e\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044e\u043d\u0438\u0442\u043e\u0432 \u0432 \u0441\u043a\u0443\u0447\u043d\u043e\u043c json, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u044f\u043c\u043e \u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430\u0445 \u0432 \u0444\u043e\u0442\u043e\u0448\u043e\u043f\u0435?<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u043a\u0430\u043a \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c docker-compose.png<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/12a\/c2e\/4db\/12ac2e4dbaf4d6036743ae11ea6f990d.png\" width=\"672\" height=\"528\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/12a\/c2e\/4db\/12ac2e4dbaf4d6036743ae11ea6f990d.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u042d\u0442\u043e \u0438 \u043a\u043e\u043d\u0444\u0438\u0433, \u0438 \u0441\u0445\u0435\u043c\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u043b\u0430\u043a\u043e\u043d\u0435. \u041c\u043e\u0436\u043d\u043e \u0441\u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0438 \u0434\u043e\u043c\u0430 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6a9\/4cf\/3ec\/6a94cf3ec2a8868538f3e7ea5242d790.png\" alt=\"\u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 &quot;\u0446\u0432\u0435\u0442&quot; - \u0441\u0430\u043c\u044b\u0439 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u043f\u043e\u0440\u0442\u0430\" title=\"\u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 &quot;\u0446\u0432\u0435\u0442&quot; - \u0441\u0430\u043c\u044b\u0439 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u043f\u043e\u0440\u0442\u0430\" width=\"375\" height=\"730\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6a9\/4cf\/3ec\/6a94cf3ec2a8868538f3e7ea5242d790.png\"\/><figcaption>\u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 &#171;\u0446\u0432\u0435\u0442&#187; &#8212; \u0441\u0430\u043c\u044b\u0439 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u043f\u043e\u0440\u0442\u0430<\/figcaption><\/figure>\n<p>\u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 &#8212; \u044d\u0442\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u0430\u043c \u0411\u0414. \u0412\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b, \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b. \u0410 \u0442\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0432 \u043b\u044e\u0431\u043e\u043c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435, \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0441\u0445\u0435\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u0441\u0432\u044f\u0437\u0435\u0439.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451. \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0431\u044d\u043a\u0430\u043f\u044b. \u0418 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u0442\u043e\u0436\u0435. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439.<\/p>\n<p><a href=\"https:\/\/github.com\/AlexeyGrishin\/badbee\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u044d\u0442\u043e \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u0435<\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \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\/590469\/\"> https:\/\/habr.com\/ru\/articles\/590469\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u043c\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u0432\u044b\u0448\u0435.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043f\u043e\u0441\u043c\u0435\u044f\u043b\u0441\u044f. \u0410 \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f: \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u0431\u044b\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0431\u0430\u0437\u044b \u0440\u0430\u0432\u043d\u043e\u0446\u0435\u043d\u0435\u043d \u0435\u0451 \u0441\u043d\u044d\u043f\u0448\u043e\u0442\u0443?<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u043d\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0430\u0437\u044b, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 1 \u043a 1 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u0415\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0438\u0437 \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0430\u0437\u0443.<\/p>\n<p>\u0418\u043b\u0438&#8230; \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0431\u0430\u0437\u043e\u0439!<\/p>\n<p>\u0422\u0443\u0442, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0441\u0445\u0438\u0442\u0440\u0438\u0442\u044c \u0438 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c:<\/p>\n<ol>\n<li>\n<p> \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 sql \u0441\u043a\u0440\u0438\u043f\u0442 \u0432 \u043c\u0435\u043b\u043a\u043e\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0430 \u043f\u043e\u0442\u043e\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0441\u043e \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430<\/p>\n<\/li>\n<li>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c sql \u0441\u043a\u0440\u0438\u043f\u0442 \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f (4 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c). \u0422\u043e\u0433\u0434\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c.<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u043b\u0435\u043d\u0438\u0432\u044b\u0435 \u0438 \u0441\u043a\u0443\u0447\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b. \u041a\u0443\u0434\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u0443 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 \u043d\u0435\u0439 \u043a\u0430\u043a \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c. \u0420\u0438\u0441\u043e\u0432\u0430\u043b\u0438 \u0432 \u043f\u0435\u0439\u043d\u0442\u0435 \u0438 \u0444\u043e\u0442\u043e\u0448\u043e\u043f\u0435, \u0430 \u043d\u0435 \u0432 \u044d\u0442\u0438\u0445 \u0441\u043a\u0443\u0447\u043d\u044b\u0445 sql \u043a\u043e\u043d\u0441\u043e\u043b\u044f\u0445 \u0438 UI \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438.<\/p>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438 \u0441\u0432\u043e\u0435\u0439 \u044d\u0442\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u0430\u0437\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a (DBA-artist). \u041d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0451 \u043d\u0443\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043a\u0438\u0439 api, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b \u0432\u0441\u0435 \u044d\u0442\u0438 \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u0435\u043c\u0443 \u043f\u043e\u0434\u0430\u0432\u0430\u0439 json-\u044b.<\/p>\n<p>\u041a\u0430\u043a \u0432\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435\u0441\u0451\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440. <\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. <\/p>\n<h2>\u0424\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>\u0411\u0435\u0437\u0443\u043c\u043d\u043e \u0432\u0435\u043b\u0438\u043a \u0441\u043e\u0431\u043b\u0430\u0437\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0430\u0439\u0442. \u042d\u0442\u043e \u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u0435\u0435. \u0414\u043b\u044f \u043c\u0430\u0448\u0438\u043d\u044b. \u041d\u043e \u0446\u0435\u043b\u044c &#8212; \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0430\u0439\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u0432\u0438\u0434\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438, \u0430 \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e. \u0414\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043d\u0430\u0434\u043e \u043a\u0430\u043a-\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c. \u0412\u0435\u0440\u043d\u0435\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u043c\u0435\u0442\u0430-\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u201c\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445\u201d. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u043d\u0435\u043a\u0438\u0439 \u043c\u0430\u0440\u043a\u0435\u0440\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043c \u043d\u0430\u0448\u0438\u0445 DBA-\u0430\u0440\u0442\u0438\u0441\u0442\u043e\u0432 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u044b \u044d\u0442\u0438\u043c \u0446\u0432\u0435\u0442\u043e\u043c. \u0412\u0441\u0451, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 &#8212; \u0434\u0430\u043d\u043d\u044b\u0435. \u0421\u043d\u0430\u0440\u0443\u0436\u0438 &#8212; \u043d\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>\u0426\u0432\u0435\u0442 \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u0442\u0430\u043a\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0445\u043e\u0440\u043e\u0448 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0441\u044f \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0431\u044b\u043b\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u201c\u043f\u0440\u043e\u0441\u0442\u044b\u043c\u201d, \u0442.\u043a. \u0446\u0432\u0435\u0442\u0430 \u0432\u0440\u043e\u0434\u0435 <code>0xFF0000<\/code>, <code>0x00FF00<\/code> \u0438 \u0438\u0436\u0435 \u0441 \u043d\u0438\u043c\u0438 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0447\u0430\u0441\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u044b\u0445.\u00a0<\/p>\n<p>\u0412\u044b\u0431\u043e\u0440 \u043f\u0430\u043b \u043d\u0430 <code>0xBADBEE<\/code> &#8212; \u043d\u0435\u0436\u043d\u043e-\u0433\u043e\u043b\u0443\u0431\u043e\u0439 \u0446\u0432\u0435\u0442, \u0445\u043e\u0440\u043e\u0448\u043e \u0441\u043c\u043e\u0442\u0440\u044f\u0449\u0438\u0439\u0441\u044f \u043d\u0430 \u0431\u0435\u043b\u043e\u043c \u0444\u043e\u043d\u0435, \u0438 \u0441 \u043c\u043d\u0435\u043c\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c. \u041d\u0443 \u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u0441\u0430\u043c\u0443 \u0431\u0430\u0437\u0443 \u044f \u0442\u043e\u0436\u0435 \u0442\u0430\u043a \u043d\u0430\u0437\u0432\u0430\u043b.<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0432\u0430\u043c\u0438 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u0411\u0414 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0442\u0438\u043f\u0430 \u201c\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u201d. \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 badbee, \u0434\u0430\u0442\u044c \u0435\u043c\u0443 \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u0430 \u043f\u043e\u0442\u043e\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c, \u0442\u043e \u043e\u043d \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u043d\u0430\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0438\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 json:<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0418, \u043a\u0441\u0442\u0430\u0442\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0438 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u0432\u043e\u044e \u0431\u0430\u0437\u0443.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c<\/summary>\n<div class=\"spoiler__content\">\n<ol>\n<li>\n<p><code>git clone https:\/\/github.com\/AlexeyGrishin\/badbee.git<\/code><\/p>\n<\/li>\n<li>\n<p>\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0434\u043e\u043a\u0435\u0440<\/p>\n<\/li>\n<li>\n<p><code>docker build -t badbee .<\/code><\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 <code>db\/temp.png<\/code><\/p>\n<\/li>\n<li>\n<p><code>docker run -d --rm --name badbee -e DB_FILE=temp.png -p 3030:3030 -v \"$pwd\/db:\/usr\/badbee\/db\" badbee<\/code><\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 <a href=\"http:\/\/localhost:3030\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost:3030<\/a> . \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c \u0447\u0442\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u043e\u0442\u043a\u0440\u044b\u043b\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432\u044b\u0448\u0435 \u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0432 <code>temp.png<\/code><\/p>\n<\/li>\n<li>\n<p>\u043d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435 \u0438 F5<\/p>\n<\/li>\n<\/ol>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441 \u0434\u043e\u043a\u0435\u0440\u043e\u043c, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a:<\/p>\n<ol>\n<li>\n<p><code>git clone https:\/\/github.com\/AlexeyGrishin\/badbee.git<\/code><\/p>\n<\/li>\n<li>\n<p>Install rust &amp; cargo from <a href=\"https:\/\/www.rust-lang.org\/tools\/install\" rel=\"noopener noreferrer nofollow\">https:\/\/www.rust-lang.org\/tools\/install<\/a><\/p>\n<\/li>\n<li>\n<p>Install wasm-pack from <a href=\"https:\/\/rustwasm.github.io\/wasm-pack\/installer\/\" rel=\"noopener noreferrer nofollow\">https:\/\/rustwasm.github.io\/wasm-pack\/installer\/<\/a><\/p>\n<\/li>\n<li>\n<p><code>cargo build<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>cd web-client<\/code><\/p>\n<\/li>\n<li>\n<p><code>wasm-pack build --out-dir ..\/static --target web<\/code><\/p>\n<\/li>\n<li>\n<p><code>cd ..<\/code><\/p>\n<\/li>\n<li>\n<p><code>cargo run --package web-server<\/code> <\/p>\n<\/li>\n<li>\n<p><a href=\"http:\/\/localhost:3030\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost:3030<\/a><\/p>\n<p>\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c visual studio build tools, \u043d\u043e \u0432\u0430\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u043a\u0430\u0436\u0443\u0442 \u0438\u043b\u0438 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0438, \u0438\u043b\u0438 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0441\u0431\u043e\u0440\u043a\u0438<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/details>\n<h3>\u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438<\/h3>\n<p>\u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438. \u0425\u043e\u0442\u044f \u0431\u044b \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0438\u0445 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0435\u0441\u0442. \u042f \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u0438 \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043b\u0435\u0432\u043e\u0433\u043e \u0443\u0433\u043b\u0430. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u0447\u043d\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 id \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0411\u0414, \u0435\u0433\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0414\u0430, \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c, \u0442\u043e \u0435\u0451 id \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f, \u0445\u043e\u0442\u044f \u0441\u0430\u043c\u0430 \u043e\u043d\u0430 \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u041d\u0443 \u0438 \u043b\u0430\u0434\u043d\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u043c\u0435\u0442\u044c \u044d\u0442\u043e \u0432\u0432\u0438\u0434\u0443.<\/p>\n<h3>\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u041e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0443\u0436\u043d\u044b \u0440\u0435\u0434\u043a\u043e. \u0427\u0430\u0449\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u201c\u043a\u043e\u043b\u043e\u043d\u043e\u043a\u201d \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u0439. \u0418 \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<figure class=\"float\"><figcaption><\/figcaption><\/figure>\n<p>\u0423 \u043d\u0430\u0441 \u0443\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0431\u0430\u0437\u0430, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u044b \u0438 \u0438\u0445 \u043f\u0438\u0442\u043e\u043c\u0446\u044b, \u043f\u0440\u0438\u0447\u0451\u043c \u043f\u0438\u0442\u043e\u043c\u0446\u0435\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0440\u044b\u0431\u043a\u0438, \u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0433\u0440\u0443\u0441\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f \u0431\u0435\u0437 \u043f\u0438\u0442\u043e\u043c\u0446\u0435\u0432.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0431\u0430\u0437\u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0442\u043e \u0432 \u043d\u0438\u0445 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0438 \u0438\u0441\u043a\u0430\u0442\u044c. \u042f \u0438\u043c\u0435\u044e \u0432\u0432\u0438\u0434\u0443 &#8212; \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e. \u0413\u043b\u0430\u0437\u0430\u043c\u0438-\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0432\u0441\u0451 \u043b\u0435\u0433\u043a\u043e.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u044f \u0432\u0432\u043e\u0436\u0443 \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u201c\u0441\u0442\u043e\u043b\u0431\u0446\u0430\u201d &#8212; \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0437\u0430\u0433\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u201ccolumn\u201d \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0432\u044b\u0448\u0435.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><em>\u041a\u0441\u0442\u0430\u0442\u0438 \u0432\u0441\u0451 \u0447\u0442\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043e \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f &#8212; \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u201c\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438\u201d.<\/em><\/p>\n<p>\u0412\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434 \u0446\u0432\u0435\u0442\u043d\u044b\u043c\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c\u0438 \u0441\u0432\u0435\u0440\u0445\u0443, \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u043c\u0438 \u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u043e\u043b\u0431\u0446\u0443. \u042d\u0442\u0430 \u0431\u0430\u0437\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e \u0432 \u201c\u0441\u0438\u043d\u0435\u043c\u201d \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u0443 \u043d\u0430\u0441 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043e\u043c\u043e\u0432, \u0430 \u0432 \u201c\u043a\u0440\u0430\u0441\u043d\u043e\u043c\u201d \u0441\u0442\u043e\u043b\u0431\u0446\u0435 &#8212; \u0437\u0430\u043f\u0438\u0441\u0438 \u043b\u044e\u0434\u0435\u0439.<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<h3>\u0422\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u0425\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 &#8212; \u044d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u043e\u043b\u0435\u0437\u043d\u043e. \u041d\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0412 \u0431\u0430\u0437\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u0441\u0442\u0440\u043e\u043a\u0438, \u0438 \u0447\u0438\u0441\u043b\u0430, \u0438 \u0434\u0440\u0443\u0433\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043f\u0440\u0438\u0447\u0451\u043c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u0432\u0438\u0434\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a, \u0430 \u0432 \u201c\u043c\u0430\u0448\u0438\u043d\u043d\u043e\u201d-\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u043c \u0432\u0438\u0434\u0435. \u041f\u043e\u0431\u043e\u0440\u0435\u043c \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435, \u0438 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u043c \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0438\u043d\u0430\u0447\u0435.<\/p>\n<p>\u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 &#8212; \u044d\u0442\u043e \u0431\u0443\u043b\u0435\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u201c\u043f\u0443\u0441\u0442\u043e\u0442\u0430\u201d (\u0431\u0435\u043b\u044b\u0439 \u0446\u0432\u0435\u0442) &#8212; \u044d\u0442\u043e false. \u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0442\u0430 &#8212; \u0437\u043d\u0430\u0447\u0438\u0442 true. \u0412 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043b\u0435\u0433\u043a\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u201c\u0437\u0430\u043b\u0438\u0432\u043a\u0430\u201d \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0418 \u0442\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441: \u043a\u0430\u043a \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c, \u0433\u0434\u0435 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0432\u0432\u0438\u0434\u0443 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u0430 \u0433\u0434\u0435 &#8212; \u0431\u0443\u043b\u0435\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435? \u041d\u0443\u0436\u043d\u0430 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0441\u0445\u0435\u043c\u0430. \u0418 \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0442\u0443\u0442 \u0436\u0435, \u0432 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435.<\/p>\n<p>\u041f\u043e\u0434\u0443\u043c\u0430\u0432 \u043d\u0430\u0434 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438, \u044f \u0440\u0435\u0448\u0438\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u043a\u0438 \u0442\u0438\u043f\u043e\u0432 \u0432 \u0443\u0433\u043e\u043b\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0426\u0432\u0435\u0442 \u043d\u0435\u0432\u0430\u0436\u0435\u043d, \u0432\u0430\u0436\u043d\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0418\u043a\u043e\u043d\u043e\u0447\u043a\u0430 \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0431\u0443\u043a\u0432\u0443 b &#8212; \u044d\u0442\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0431\u0443\u043b\u0435\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0447\u0438\u0441\u043b\u0430. \u0427\u0438\u0441\u043b\u0430\u043c\u0438 \u043c\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u043c. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u201c\u0447\u0435\u0433\u043e-\u0442\u043e\u201d \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e &#8212; \u0442\u043e \u043f\u0440\u043e\u0449\u0435 \u044d\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u0438 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0421\u043e\u0441\u0442\u0430\u0432 \u043a\u043e\u0442\u0430: 2 \u0433\u043b\u0430\u0437\u0430, 2 \u0443\u0445\u0430, 1 \u0440\u043e\u0442 \u0438 6 \u0443\u0441\u043e\u0432<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0439:<\/p>\n<ol>\n<li>\n<p> \u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a = 0<\/p>\n<\/li>\n<li>\n<p> \u0418\u0449\u0435\u0442\u0441\u044f \u043d\u0435 \u201c\u043f\u0443\u0441\u0442\u043e\u0439\u201d \u043f\u0438\u043a\u0441\u0435\u043b\u044c (\u0446\u0432\u0435\u0442 != \u0431\u0435\u043b\u044b\u0439). \u0415\u0441\u043b\u0438 \u043d\u0430\u0448\u043b\u0438:<\/p>\n<ol>\n<li>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043d\u0430 1<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u201cflood fill\u201d \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044f \u0432\u0441\u0435 \u043d\u0435-\u043f\u0443\u0441\u0442\u044b\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u0441 \u044d\u0442\u0438\u043c<\/p>\n<\/li>\n<li>\n<p> \u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u0441 \u0448\u0430\u0433\u0430 2, \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044f \u043f\u0438\u043a\u0441\u0435\u043b\u0438, \u0437\u0430\u043f\u043e\u043c\u043d\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0448\u0430\u0433\u0435 2.2<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>\u0423 \u043a\u043e\u0442\u0438\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0438\u043c\u044f. \u0415\u0433\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u201c\u043c\u0430\u0448\u0438\u043d\u0435\u201d, \u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443 \u0432 paint-\u0435 &#8212; \u0442\u0430\u043a\u043e\u0432\u044b \u043d\u0430\u0448\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f. \u0417\u043d\u0430\u0447\u0438\u0442, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0435\u0433\u043a\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f. \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u043e\u043d\u043e\u0448\u0438\u0440\u0438\u043d\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u043a\u0430\u043a \u043d\u0435\u043b\u044c\u0437\u044f \u043b\u0443\u0447\u0448\u0435.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u043e, \u0447\u0442\u043e \u043e\u043d \u043c\u0435\u043b\u043a\u0438\u0439, \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u043b\u044e\u0441\u044b \u0438 \u043c\u0438\u043d\u0443\u0441\u044b.<\/p>\n<p>\u041f\u043b\u044e\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u041b\u0435\u0433\u043a\u043e \u201c\u043f\u0438\u0441\u0430\u0442\u044c\u201d \u043a\u0430\u0440\u0430\u043d\u0434\u0430\u0448\u043e\u043c \u0432 \u043f\u0435\u0439\u043d\u0442\u0435, \u0431\u0443\u043a\u0432\u044b \u043f\u0440\u043e\u0441\u0442\u044b\u0435<\/p>\n<\/li>\n<li>\n<p>\u041b\u0435\u0433\u043a\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u044c<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u0438\u043d\u0443\u0441\u044b:<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0431\u0430\u0437\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><figcaption>\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u044d\u0442\u043e, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 &#8212; \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/figcaption><\/figure>\n<p>\u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 &#8212; \u044d\u0442\u043e float. \u041a\u0430\u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442 0 \u0434\u043e 1 &#8212; \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u044b, \u0434\u043e\u043b\u044f \u0447\u0435\u0433\u043e-\u0442\u043e. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043a\u0430\u043a \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043e\u043b\u044e!<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e &#8212; \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u044b\u0442\u043e\u0441\u0442\u0438 \u043a\u043e\u0442\u0438\u043a\u0430. <\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>76% &#8212; \u043d\u0435\u043f\u043b\u043e\u0445\u043e.<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0410 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043e\u0442\u043c\u0435\u0447\u0430\u0442\u044c \u043d\u0435 \u043e\u0434\u043d\u0443 \u0434\u043e\u043b\u044e, \u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0446\u0432\u0435\u0442\u0430\u043c\u0438? \u042d\u0442\u0430\u043a\u0438\u0439 \u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0438\u0439 \u0441\u0430\u043c \u0437\u0430 \u0441\u0435\u0431\u044f pie chart?\u00a0<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0434\u043d\u044f \u043a\u043e\u0442\u0438\u043a\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 \u0446\u0432\u0435\u0442 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 \u043d\u0435\u043a\u0443\u044e \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u0430 \u043b\u0435\u0433\u0435\u043d\u0434\u0430 \u0441\u0432\u0435\u0440\u0445\u0443 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043d\u0435 \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f).<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0442\u043e \u0436, \u043d\u0430\u0448 \u043a\u043e\u0442\u0438\u043a \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u043c\u043d\u043e\u0433\u043e \u0442\u044b\u0433\u044b\u0434\u044b\u043a\u0430\u0435\u0442, \u043a\u0430\u043a \u0441\u043b\u043e\u043d, \u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u0440\u044b\u0431\u043e\u0432 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0447\u0430\u0449\u0435, \u0447\u0435\u043c \u0435\u0441\u0442. \u0412 \u043d\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u0435 \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e!<\/p>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438<\/h3>\n<p>\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0432\u044b\u0448\u0435 \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u0438 2 \u0434\u043e\u043c\u0438\u043a\u0430 \u0438 3 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430. \u0425\u043e\u0447\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0441\u0435\u043b\u0438\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0432 \u043f\u043e \u0434\u043e\u043c\u0430\u043c, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043e\u043c\u043e\u0432 \u0438 \u043b\u044e\u0434\u0435\u0439 \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438, \u043d\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044f \u0438\u0445 \u0432 \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u043a\u043e\u043b\u0431\u0430\u0441\u0443.<\/p>\n<p>\u041d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0441\u0441\u044b\u043b\u043a\u0438. \u0412\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043e\u043d\u0438 \u043a\u0430\u043a \u043f\u0443\u0441\u0442\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 \u0442\u0438\u043f\u043e\u043c \u201c\u0441\u0441\u044b\u043b\u043a\u0430\u201d. \u0418 \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u0432 \u0442\u0438\u043f\u043e\u0432, \u0446\u0432\u0435\u0442 \u0442\u0443\u0442 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0441\u044b\u043b\u043a\u0438, \u043a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u044b \u043e\u0442 \u201c\u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430\u201d \u043a \u201c\u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u043c\u0443\u201d (\u0430 \u0442\u043e\u0447\u043d\u0435\u0435 &#8212; \u043a \u0437\u0430\u043f\u0438\u0441\u0438). \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c (\u0442\u043e\u0442 \u0436\u0435 flood fill, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435) \u0442\u043e\u043b\u0435\u0440\u0430\u043d\u0442\u0435\u043d \u043a \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0438\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432.\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u043f\u0435\u0440\u0435\u0435\u0434\u0435\u0442 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439, \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0435\u0440\u0435\u0442\u044c \u043e\u0434\u043d\u0443 \u043b\u0438\u043d\u0438\u044e \u0438 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e.<\/p>\n<figure class=\"\"><figcaption>\u0422\u0443\u0442 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u043a\u0430\u043a \u0432 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 id \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f \u0434\u043e\u043c\u0430<\/figcaption><\/figure>\n<h2>\u0414\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p>\u041a\u0430\u043a\u0438\u0445-\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u0438\u0439 \u0442\u0443\u0442 \u043d\u0435\u0442. \u041a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u201c\u0431\u0430\u0437\u0430\u201d \u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u0432\u044b\u0448\u0435. \u0421\u043d\u0430\u0447\u0430\u043b\u0430, \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u201c\u0441\u0445\u0435\u043c\u044b\u201d, \u0442.\u043a. \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043c\u043e\u0434\u0435\u043b\u044c &#8212; \u0433\u0434\u0435 \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, \u043a\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u043a\u0430\u043a \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f flood fill, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438.<\/p>\n<p>\u0421\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0443\u0436\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u0412 \u0442\u0435\u043e\u0440\u0438\u0438 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u0441\u0445\u0435\u043c\u0443 \u0438 \u0432\u0438\u0434\u0435\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u043e \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u0435\u043e\u0440\u0438\u0438.\u00a0<\/p>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u044f \u0432\u0437\u044f\u043b rust. \u0422\u0443\u043f\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0430\u0432\u043d\u043e \u0445\u043e\u0442\u0435\u043b \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430 \u043d\u0451\u043c \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432\u0435\u0449\u0438 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u0440\u0438\u0442\u0438\u043a\u0443.<\/p>\n<details class=\"spoiler\">\n<summary>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u0440\u0438\u0442\u0438\u043a\u0430<\/summary>\n<div class=\"spoiler__content\">\n<p>\u042f \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0441\u044c \u0443\u0431\u0435\u0436\u0434\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0444\u0440\u0430\u0437\u044b \u0432\u0440\u043e\u0434\u0435 \u201c\u043f\u043e\u043b\u043d\u0430\u044f \u0445\u0440\u0435\u043d\u044c\u201d, \u201c\u0442\u0443\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0432\u0441\u0451\u201d, \u201c\u0437\u0430\u0447\u0435\u043c \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c\u201d \u0438 \u0438\u0436\u0435 \u0441 \u043d\u0438\u043c \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0440\u0438\u0442\u0438\u043a\u043e\u0439. \u041e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0441\u0430\u043c\u043e\u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f. \u041a\u0440\u0438\u0442\u0438\u043a\u0430 &#8212; \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043a\u0440\u0438\u0442\u0438\u043a\u0443\u0435\u043c\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0441\u0443\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u0445 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043a\u0440\u0438\u0442\u0438\u043a\u0443\u0435\u043c\u043e\u043c\u0443 \u0441\u0442\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0435 &#8212; \u044d\u0442\u043e \u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u043a\u0430.<\/p>\n<\/div>\n<\/details>\n<p>\u0421 \u043a\u043e\u0434\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0442\u0443\u0442: <a href=\"https:\/\/github.com\/AlexeyGrishin\/badbee\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/AlexeyGrishin\/badbee<\/a><\/p>\n<h3>\u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/h3>\n<p>\u0422\u0443\u0442 \u044f \u0432\u044b\u0434\u0435\u043b\u0438\u043b 2 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0438. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441 \u201c\u044f\u0434\u0440\u043e\u043c\u201d \u0431\u0430\u0437\u044b, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0435\u0441\u0442\u044c \u0430\u043f\u0438 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438. \u0418 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 http \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u0431\u0430\u0437\u0435 \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u0432 json.<\/p>\n<p>\u0414\u043b\u044f \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432\u0437\u044f\u043b warp(<a href=\"https:\/\/github.com\/seanmonstar\/warp\/\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/seanmonstar\/warp\/<\/a>). \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0435\u0433\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0445\u0432\u0430\u043b\u0438\u0432\u0430\u044e\u0442, \u0447\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u043c\u043d\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0435\u0433\u043e \u201c\u0433\u0440\u043e\u043a\u043d\u0443\u0442\u044c\u201d. \u042f \u043f\u043e\u0441\u043b\u0443\u0448\u043d\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u044b, \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u0445 \u043f\u043e\u0434 \u0441\u0435\u0431\u044f, \u043d\u043e \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u044d\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u043a \u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 &#8212; \u043f\u043e\u043d\u044f\u0442\u044c \u0431\u044b\u043b\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0432\u0430\u0442\u043e. \u0415\u0441\u043b\u0438 \u0431\u0440\u0430\u0442\u044c express.js \u0438 \u0435\u0433\u043e middleware, \u0442\u043e \u0442\u0430\u043c \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043a\u0430\u043a-\u0442\u043e \u043f\u0440\u043e\u0449\u0435 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u041d\u043e \u0442\u043e node.js \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f, \u0434\u0443\u043c\u0430\u044e \u0432 warp \u043c\u043d\u043e\u0433\u043e\u0435 \u043d\u0430\u0432\u043e\u0440\u043e\u0447\u0435\u043d\u043e \u0432 \u0443\u0433\u043e\u0434\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442 \u0441<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-388543","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/388543","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=388543"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/388543\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=388543"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=388543"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=388543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}