{"id":352010,"date":"2024-05-20T22:00:20","date_gmt":"2024-05-20T22:00:20","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=352010"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=352010","title":{"rendered":"<span>\u0421\u0430\u043c \u0441\u0435\u0431\u0435 Linux \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d: \u041a\u0430\u043a \u044f \u0432\u044b\u043a\u0438\u043d\u0443\u043b Android \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u0432\u043e\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0441 \u043d\u0443\u043b\u044f<\/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-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/2d\/xx\/gr\/2dxxgr4fhnzhdcftnpjckmjxaii.jpeg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/2d\/xx\/gr\/2dxxgr4fhnzhdcftnpjckmjxaii.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u041a \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u043c\u0443 \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0441\u0442\u0430\u0440\u044b\u0435 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b \u0432\u0441\u0451 \u0447\u0430\u0449\u0435 \u0438 \u0447\u0430\u0449\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442 \u0441\u0432\u043e\u0451 \u043f\u0440\u0438\u0441\u0442\u0430\u043d\u0438\u0449\u0435 \u0432 \u043c\u0443\u0441\u043e\u0440\u043d\u043e\u043c \u0431\u0430\u043a\u0435. \u041a \u043f\u0440\u043e\u0448\u043b\u044b\u043c, \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u043c \u00ab\u0434\u0440\u0443\u0437\u044c\u044f\u043c\u00bb \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u2014 \u0447\u0443\u0442\u044c \u0443\u0441\u0442\u0430\u0440\u0435\u043b \u0438 \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u043a\u0438\u043d\u0443\u043b\u0438, \u0441\u043b\u043e\u0432\u043d\u043e \u044d\u0442\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u0443\u0441\u043e\u0440. \u0418 \u0432\u0435\u0434\u044c \u043b\u044e\u0434\u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0445\u043e\u0442\u044f\u0442 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0435-\u043b\u0438\u0431\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0433\u0430\u0434\u0436\u0435\u0442\u0430\u043c \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u043b\u0435\u0442! \u041e\u0442\u0447\u0430\u0441\u0442\u0438, \u044d\u0442\u043e \u0432\u0438\u043d\u0430 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u0439 \u2014 Google \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442 \u0438 \u0434\u043e\u0431\u0438\u0432\u0430\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0448\u0443\u0441\u0442\u0440\u044b\u0435 \u0434\u0435\u0432\u0430\u0439\u0441\u044b. \u041e\u0442\u0447\u0430\u0441\u0442\u0438 \u2014 \u0432\u0438\u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0438\u0437\u043d\u0435\u0441-\u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u043d\u0435 \u0434\u0443\u043c\u0430\u044e\u0442 \u043e\u0431 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441\u043e\u0432\u0441\u0435\u043c. \u0412 \u043e\u0434\u0438\u043d \u0434\u0435\u043d\u044c \u044f \u043f\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0441\u0435\u0431\u044f \u0422\u0430\u0439\u043b\u0435\u0440\u043e\u043c \u0414\u0451\u0440\u0434\u0435\u043d\u043e\u043c \u043e\u0442 \u043c\u0438\u0440\u0430 IT \u0438 \u0440\u0435\u0448\u0438\u043b \u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432 \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u0449\u0438\u043d\u0435: \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0434\u043b\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430 \u0441 \u043d\u0443\u043b\u044f. \u0410 \u0434\u0430\u0431\u044b \u0437\u0430\u0434\u0430\u0447\u043a\u0430 \u0431\u044b\u043b\u0430 \u0435\u0449\u0451 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435, \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0443\u044e \u0438 \u0434\u0435\u0448\u0435\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u0437 2012 \u0433\u043e\u0434\u0430 \u2014 Fly IQ245 (\u0446\u0435\u043d\u0430 \u043d\u0430 \u0431\u0430\u0440\u0430\u0445\u043e\u043b\u043a\u0430\u0445 \u2014 200-300 \u0440\u0443\u0431\u043b\u0435\u0439). \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0435\u0441\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0448\u0438\u043d, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0438\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0447\u0442\u043e \u0434\u0430\u0451\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u043b\u044c\u0442\u0440\u0430\u0434\u0435\u0448\u0435\u0432\u043e\u0433\u043e \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u0438\u043a\u0430 \u0434\u043b\u044f DIY-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043b\u0438 \u0443 \u043c\u0435\u043d\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0445\u043e\u0442\u0435\u043b\u043a\u0438? \u0427\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435!<a name=\"habracut\"><\/a><\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f<\/font><\/h2>\n<p>  \u0427\u0435\u0441\u0442\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0438\u0434\u0435\u044f \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u0430 \u0435\u0449\u0451 \u0434\u0430\u0432\u043d\u043e. \u041e\u0434\u043d\u0430\u043a\u043e, \u0434\u0430\u0431\u044b \u043d\u0435 \u0437\u0430\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u043e\u043f\u044b\u0442\u043d\u043e\u0433\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u043a\u043b\u0438\u043a\u0431\u0435\u0439\u0442\u043e\u043c, \u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u044f\u0441\u043d\u044e, \u0432 \u0447\u0451\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u00ab\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0441 \u043d\u0443\u043b\u044f\u00bb:<\/p>\n<ol>\n<li> <b>\u041c\u044b \u0432\u0441\u0451 \u0435\u0449\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Linux<\/b>: \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044f\u0434\u0440\u0430 \u043c\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437 Linux, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c. \u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441 \u043d\u0443\u043b\u044f \u0437\u0430\u043d\u044f\u043b\u043e \u0431\u044b \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0431\u0435\u0437 \u0441\u0445\u0435\u043c\u044b \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e). \u041e\u0434\u043d\u0430\u043a\u043e, \u043c\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c Android \u043d\u0438\u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<\/li>\n<li> <b>\u041c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 AOSP<\/b>: \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u043e\u0431\u0440\u0430\u0437\u0430 Android. \u0412\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0436\u0435\u043b\u0435\u0437\u043e\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e API Linux. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u0437\u0432\u0443\u043a, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u0435\u043c \u043b\u043e\u0436\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430 \u043d\u0430\u0441.<\/li>\n<li> <b>\u041f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/b>: \u0434\u0430, \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u043a\u0430\u043c\u0435\u043d\u044c \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 Android. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e, \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0443\u043c\u0435\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 C. \u041f\u0440\u0438\u0447\u0451\u043c \u043e\u043d\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 C API \u2014 \u0434\u0430\u0431\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u043c\u043e\u0449\u044c \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432.<\/li>\n<\/ol>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/ca1\/9f5\/940\/ca19f5940388f5a429e74b7a025de305.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ca1\/9f5\/940\/ca19f5940388f5a429e74b7a025de305.jpg\" data-blurred=\"true\"\/><\/p>\n<p>  \u041f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u043e \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u043d\u0438\u044e Android \u0438\u0437, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, Android-\u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u043e\u0432 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e: UBPorts \u2014 \u0431\u044b\u0432\u0448\u0438\u0439 Ubuntu Touch, FireFox OS \u0438 \u0435\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a Kai OS \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, postmarketOS. \u041e\u0442\u0447\u0430\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u044e\u0434\u0430 \u043e\u0442\u043d\u0435\u0441\u0442\u0438 \u0438 Sailfish OS \u2014 \u043d\u043e \u0442\u0430\u043c \u043e\u0431\u0440\u0430\u0437\u044b \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b \u043e\u0442 Sony. \u0412\u0441\u0435 \u044d\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0445 \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0431\u0435\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u044f\u0434\u0440\u0430. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044f\u0434\u0440\u0430, \u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044f\u0434\u0440\u043e 2.6 \u2014 \u043d\u0430\u0432\u0440\u044f\u0434-\u043b\u0438 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 \u043d\u0430 \u043d\u0451\u043c.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/84c\/4d0\/674\/84c4d0674c382f119eda90046acc072d.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/84c\/4d0\/674\/84c4d0674c382f119eda90046acc072d.jpg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0414\u0440\u0443\u0433\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443-baremetal \u043f\u043e\u0434\u0445\u043e\u0434, \u043a\u043e\u0433\u0434\u0430 \u043e\u0442 Linux \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b. \u0412\u0441\u0451, \u0447\u0442\u043e \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u2014 busybox, libc \u0438 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0436\u0435\u043b\u0435\u0437\u0443, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f API \u0441\u0430\u043c\u043e\u0433\u043e \u044f\u0434\u0440\u0430. \u041a\u0430\u043a \u043f\u043e\u0434 \u044d\u0442\u043e \u0432\u0441\u0451 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u2014 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0432 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/751604\/\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439 <\/a>\u0441\u0442\u0430\u0442\u044c\u0435. \u042d\u0442\u043e\u0442 \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u2014 \u043a\u0430\u043a \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f <b>\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e<\/b> \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0447\u0442\u043e \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0443\u043c\u0435\u0442\u044c:<\/p>\n<ul>\n<li> <b>\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u0443\u044e \u0433\u0440\u0430\u0444\u0438\u043a\u0443<\/b>: \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u044f, \u0443\u043c\u0435\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0435 \u0438 \u043d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0441 \u0430\u043b\u044c\u0444\u0430-\u0431\u043b\u0435\u043d\u0434\u0438\u043d\u0433\u043e\u043c \u0438 \u0442. \u043f. <\/li>\n<li> <b>\u0423\u043c\u0435\u0442\u044c \u0437\u0432\u043e\u043d\u0438\u0442\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u043e\u0434\u0435\u043c\u043e\u043c<\/b>: \u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u043c\u043e\u0434\u0435\u043c\u043e\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c <b>AT<\/b>-\u043a\u043e\u043c\u0430\u043d\u0434 \u2014 \u043e\u0431\u0449\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0432 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0435\u0441\u0442\u044c \u043c-\u0430-\u0430-\u0430-\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043d\u044e\u0430\u043d\u0441, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u0437\u0436\u0435.<\/li>\n<li> <b>\u0418\u043c\u0435\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/b>: \u043c\u044b \u0432\u0435\u0434\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0445\u0430\u0440\u0434\u043a\u043e\u0434\u0438\u0442\u044c \u0432\u0441\u0435 \u00ab\u044d\u043a\u0440\u0430\u043d\u044b\u00bb \u0432 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435 \u0432 \u0432\u0438\u0434\u0435 \u043a\u0443\u0447\u0438 \u0441\u0442\u0435\u0439\u0442\u043e\u0432, \u0432\u0435\u0440\u043d\u043e? \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u043d\u0430\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441\u043b\u0438\u043d\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u043e\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/li>\n<li> <b>\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0432\u043e\u0434<\/b>: \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0442\u0430\u0447\u0441\u043a\u0440\u0438\u043d\u0430 \u0438 \u0436\u0435\u0441\u0442\u043e\u0432 \u2014 \u044d\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u0432\u043e\u0434\u0430.<\/li>\n<li> <b>\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 UI<\/b>: \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0451 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439: \u043a\u043d\u043e\u043f\u043a\u0438, \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f \u0438 \u0442. \u0434. \u041e \u0434\u0435\u0442\u0430\u043b\u044f\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043d\u0438\u0436\u0435 (\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u044f \u0435\u0451 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b).<\/li>\n<\/ul>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043c\u044b \u0441 \u0445\u0430\u0440\u0434\u0432\u0430\u0440\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u0418\u043c\u0435\u043d\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0432\u0430\u043c, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0448\u0438\u043d\u044b \u0432\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/font><\/h2>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0443\u044e \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u0437 2012 \u0433\u043e\u0434\u0430 \u2014 Fly IQ245 Wizard. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430 \u0431\u0430\u0437\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c 2G-\u0447\u0438\u043f\u0441\u0435\u0442\u0430: MediaTek MT6573, \u0434\u0430 \u0438 \u0441\u0442\u043e\u0438\u043b \u043e\u043a\u043e\u043b\u043e 2\u0445 \u0442\u044b\u0441\u044f\u0447 \u0440\u0443\u0431\u043b\u0435\u0439 \u043d\u043e\u0432\u044b\u043c. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u043e\u0442 \u0432 \u0447\u0451\u043c \u0441\u0443\u0442\u044c: \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u00ab\u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u043e\u0432\u0441\u043a\u0438\u0439\u00bb \u043c\u043e\u0434\u0435\u043c \u0438 \u0434\u0430\u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043d\u0438\u0442\u044c \u0441 \u043d\u0435\u0433\u043e \u043d\u0430 \u0441\u0432\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0435\u043b\u0435\u0444\u043e\u043d, \u043d\u043e\u2026 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0432\u043e\u0434 \u0438 \u0432\u044b\u0432\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430 \u043c\u043e\u0434\u0435\u043c\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0437\u0432\u0443\u043a\u043e\u0432\u0443\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 Android \u2014 \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442!<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/3f6\/201\/355\/3f6201355168b1f1d002a14775860095.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3f6\/201\/355\/3f6201355168b1f1d002a14775860095.jpg\" data-blurred=\"true\"\/><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/27f\/e0c\/6e2\/27fe0c6e23607081856f828515c6093b.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/27f\/e0c\/6e2\/27fe0c6e23607081856f828515c6093b.jpg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u043c\u044b \u0438\u0434\u0451\u043c \u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0445\u0438\u0442\u0440\u044b\u0439 \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0441\u0442\u044b\u043b\u044c: \u043c\u044b \u0440\u0430\u0441\u043f\u0430\u044f\u0435\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043c\u043e\u0434\u0435\u043c \u0441\u0430\u043c\u0438! \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0434\u0438\u043e\u043c\u043e\u0434\u0443\u043b\u044f \u0443 \u043d\u0430\u0441 \u0432\u044b\u0441\u0442\u0443\u043f\u0438\u0442 \u043c\u043e\u0434\u0443\u043b\u044c SIM800 \u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 SIMCOM. \u0418 \u0434\u0430\u0436\u0435 \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u0431\u043b\u0438\u0437\u043e\u043a \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0443 \u0432 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043b\u0430\u043d\u0435: \u0432\u0435\u0434\u044c \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u043b\u0435\u0436\u0438\u0442 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0435\u0439\u0448\u0438\u0439 \u0447\u0438\u043f\u0441\u0435\u0442 \u0438\u0437 \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0442\u0435\u0445 \u043b\u0435\u0442: MediaTek MT6261D. \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e SIM800 \u0432 \u0435\u0433\u043e \u0446\u0435\u043d\u0435 \u2014 \u043e\u043d \u0441\u0442\u043e\u0438\u0442 \u043f\u0430\u0440\u0443 \u0441\u043e\u0442\u0435\u043d \u0440\u0443\u0431\u043b\u0435\u0439, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e \u043a\u0430\u0440\u043c\u0430\u043d\u0443 \u0432\u044b\u0431\u043e\u0440 \u043c\u043e\u0434\u0435\u043c\u0430 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/420\/7ae\/dc6\/4207aedc6246e7894bb95aadfbd76e70.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/420\/7ae\/dc6\/4207aedc6246e7894bb95aadfbd76e70.jpg\" data-blurred=\"true\"\/><br \/>  <i>\u041d\u0430 \u0432\u0435\u0441\u0443 \u043f\u0430\u044f\u0442\u044c \u043a\u0440\u0430\u0439\u043d\u0435 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u0412 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u043f\u0435\u0440\u0435\u043f\u0430\u044f\u044e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e.<\/i><\/p>\n<p>  \u041d\u043e \u043a\u0430\u043a \u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c? SIM800 \u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 UART \u2014 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u0435\u043c\u043e-\u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a. \u0418 \u0432\u043e\u0442 \u0442\u0443\u0442 \u043c\u044b \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u043c\u0435\u043a\u0430\u043b\u043e\u0447\u043a\u0443. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u0432\u0438\u0434\u0438\u043c \u0442\u043e, \u0447\u0442\u043e \u044f \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043e\u043d\u0435\u0441\u0442\u0438 \u0434\u043e \u043c\u043e\u0438\u0445 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u2014 \u0430\u0436 \u0434\u0432\u0430 \u043a\u0430\u043d\u0430\u043b\u0430 UART: \u043e\u0434\u0438\u043d \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435, \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u0440\u0430\u0432\u0430. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u043f\u044f\u0442\u0430\u0447\u043a\u0438 TXD4 \u0438 RXD4:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/046\/847\/561\/046847561025a1517f33c11e7fcde5f9.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/046\/847\/561\/046847561025a1517f33c11e7fcde5f9.jpg\" data-blurred=\"true\"\/><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/a36\/f9e\/e72\/a36f9ee729c3c05b439fa3402ac69845.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a36\/f9e\/e72\/a36f9ee729c3c05b439fa3402ac69845.jpg\" data-blurred=\"true\"\/><\/p>\n<p>  \u041e\u0431\u044b\u0447\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u043a\u0430\u043d\u0430\u043b UART \u043b\u0435\u0442\u044f\u0442 \u043b\u043e\u0433\u0438 \u044f\u0434\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u0438\u043d\u043e\u0440\u043d\u043e\u0439 \u043f\u0440\u0430\u0432\u043a\u043e\u0439 U-Boot \u0432 HEX-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043c\u043e\u0434\u0435\u043c \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u00ab\u043c\u0443\u0441\u043e\u0440\u00bb \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u2014 \u0445\u0432\u0430\u0442\u0438\u0442 \u043b\u0438\u0448\u044c \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0431\u0443\u0444\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u041f\u043e\u0434\u043f\u0430\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u043a UART&#8217;\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u2014 \u0443 \u043c\u0435\u043d\u044f \u043e\u043d\u044b\u043c \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 ESP32 \u0441 \u0432\u044b\u043f\u0430\u044f\u043d\u043d\u044b\u043c \u0447\u0438\u043f\u043e\u043c.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/e5b\/1df\/08c\/e5b1df08c5a089a2da420b461e4a7bf7.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e5b\/1df\/08c\/e5b1df08c5a089a2da420b461e4a7bf7.jpg\" data-blurred=\"true\"\/><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/289\/83e\/4ff\/28983e4ff2800cb3612cdc1951045d4d.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/289\/83e\/4ff\/28983e4ff2800cb3612cdc1951045d4d.png\"\/><\/div>\n<p>  \u0423\u0432\u0438\u0434\u0435\u043b\u0438 \u043b\u043e\u0433\u0438? \u0417\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u0440\u0430 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u041f\u041a \u0438 \u0441 \u041f\u041a. UART \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0431\u0435\u0437 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0441\u0442\u0430\u0440\u0442\/\u0441\u0442\u043e\u043f \u0431\u0438\u0442\u043e\u0432 \u0438 \u0431\u043e\u0434\u0440\u0435\u0439\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 MediaTek \u0440\u0430\u0432\u0435\u043d 921600. TXD4 \u0438 RXD4 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 <b>\/dev\/ttyMT3<\/b>. \u041f\u0440\u043e\u0431\u0443\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c: \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442!<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/b88\/264\/2a8\/b882642a88feae75362c2e1f4860d1be.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b88\/264\/2a8\/b882642a88feae75362c2e1f4860d1be.png\"\/><\/p>\n<p>  \u0412\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c-\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430\u0448 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043c\u043e\u0434\u0435\u043c \u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u0438\u043c, \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <b>AT<\/b>. \u041c\u043e\u0434\u0435\u043c \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 <b>OK<\/b>! \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0441 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u043e\u043c \u0438\u0437 \u0440\u0435\u0436\u0438\u043c\u0430 <b>Factory mode<\/b> \u2014 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438 \u0440\u0435\u0436\u0438\u043c recovery, \u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u0430\u043c\u0435\u0440\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430, \u043f\u043e\u044f\u0441\u043d\u044f\u044e\u0449\u0430\u044f \u0447\u0442\u043e \u0438 \u043a\u0443\u0434\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/e51\/8b3\/dd1\/e518b3dd18b12270c2fd2c6ad237ab06.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e51\/8b3\/dd1\/e518b3dd18b12270c2fd2c6ad237ab06.png\"\/><\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 <b>\u043f\u043e\u043a\u0430<\/b> \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430. \u041f\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0444\u0442\u0430! \u042f \u0440\u0435\u0448\u0438\u043b \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u043b \u2014 \u0434\u0430\u0431\u044b \u0432\u0430\u043c \u0431\u044b\u043b \u043f\u043e\u043d\u044f\u0442\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438!<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0417\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0430\u0448\u0443 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443<\/font><\/h2>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u044f \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d \u0438\u0437 \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0435\u043a\u0430\u0432\u0435\u0440\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0448\u0438\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b recovery \u0432\u043c\u0435\u0441\u0442\u043e boot \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043f\u0440\u044f\u043c\u043e \u0432 \u043d\u0430\u0448\u0443 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443. \u0412\u0440\u0435\u043c\u044f \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c ~3-4 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0441 \u0445\u043e\u043b\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u0430. \u041e\u0447\u0435\u043d\u044c \u0434\u0430\u0436\u0435 \u043d\u0438\u0447\u0435\u0433\u043e.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/051\/7da\/6c5\/0517da6c59b0994511991b4ec9a62436.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/051\/7da\/6c5\/0517da6c59b0994511991b4ec9a62436.png\"\/><\/p>\n<p>  \u042f \u0432\u0437\u044f\u043b \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 TWRP \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430 \u0438 \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0438\u043b \u0435\u0433\u043e, \u0434\u0430\u0431\u044b \u0441\u0430\u043c \u0440\u0435\u043a\u0430\u0432\u0435\u0440\u0438 \u043d\u0435 \u043c\u0435\u0448\u0430\u043b \u0441\u0432\u043e\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043b \u043e\u0431\u0440\u0430\u0437 recovery.img \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e MtkImgTools \u0438 \u0443\u0431\u0440\u0430\u043b \u0432 init.rc \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u043b\u0443\u0436\u0431\u044b \/sbin\/recovery. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u044f \u0437\u0430\u043b\u0438\u043b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u0441\u0432\u043e\u0431\u043e\u0434\u0443 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u2014 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0447\u0435\u0440\u0435\u0437 USB \u0438 \u0447\u0438\u0441\u0442\u044b\u0439 \u0445\u043e\u043b\u0441\u0442 \u0432 \u0432\u0438\u0434\u0435 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430! \u0421\u0442\u0430\u0440\u044b\u0435 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b \u043d\u0430 \u0447\u0438\u043f\u0441\u0435\u0442\u0430\u0445 MediaTek \u0448\u044c\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 USB \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f <i>\u0442\u0435\u0441\u0442-\u043f\u043e\u0438\u043d\u0442\u0430<\/i> \u2014 \u043d\u0430 \u043c\u043e\u0435\u043c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0435 \u0435\u0433\u043e \u043c\u0435\u0441\u0442\u043e\u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e. \u0417\u0430\u043c\u044b\u043a\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d \u0431\u0435\u0437 \u0410\u041a\u0411 \u043a \u041f\u041a \u0438 \u0436\u0434\u0435\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/981\/754\/b78\/981754b789c8b36e55c7493804620f3d.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/981\/754\/b78\/981754b789c8b36e55c7493804620f3d.jpg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b! \u0412\u0430\u0436\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441: \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 Makefile \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0434\u043b\u044f Android 2.3 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <b>-fPIE<\/b> \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0440\u0430\u0442\u044c \u2014 \u0438\u043d\u0430\u0447\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043b\u0438\u043d\u043a\u0435\u0440 (\/sbin\/linker) \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043b\u0435\u0442\u0430\u0442\u044c \u0432 segmentation fault.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/c3e\/beb\/829\/c3ebeb82923faf41b0829e26a7d8d13c.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c3e\/beb\/829\/c3ebeb82923faf41b0829e26a7d8d13c.jpg\" data-blurred=\"true\"\/><\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430<\/font><\/h2>\n<p>  \u0412 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043f\u043e\u0434 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0451\u0439 \u043c\u0435\u043d\u044f \u043f\u043e\u0445\u0432\u0430\u043b\u0438\u043b\u0438 \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u044f \u0434\u0435\u043b\u044e\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u043d\u0438\u044f\u043c\u0438 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 2D-\u0433\u0440\u0430\u0444\u0438\u043a\u0438. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u044f \u043f\u043e\u0434\u043e\u0448\u0451\u043b \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0448\u0443\u0441\u0442\u0440\u044b\u0439 \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0437\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/c09\/861\/132\/c09861132b697a6001ea655a2a4fdd37.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c09\/861\/132\/c09861132b697a6001ea655a2a4fdd37.png\"\/><\/p>\n<p>  \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0440\u0430\u043d\u0435\u0435, \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0443\u043c\u0435\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438, \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b, \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0441 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0431\u0435\u0437, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0448\u0440\u0438\u0444\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u043e\u0439 \u0431\u044d\u043a\u0431\u0443\u0444\u0435\u0440\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d.<\/p>\n<p>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u044d\u0442\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c (\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e\u043c \u0441\u0442\u0430\u0440\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432), \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f RGB565 \u2014 \u0442. \u0435. 5 \u0431\u0438\u0442 \u043a\u0440\u0430\u0441\u043d\u044b\u0439, 6 \u0431\u0438\u0442 \u0437\u0435\u043b\u0435\u043d\u044b\u0439, 5 \u0431\u0438\u0442 \u0441\u0438\u043d\u0438\u0439. \u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b\u0430 \u0437\u0430\u043d\u043e\u0437\u043e\u0439 \u0432 \u0437\u0430\u0434\u043d\u0438\u0446\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440\u043e\u0432, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u044f. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0431\u0443\u0444\u0435\u0440 \u0432 \u0442\u043e\u043c \u0436\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u0447\u0442\u043e \u0438 \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440, \u043d\u043e \u0437\u0430\u0442\u0435\u043c \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0440\u0442\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u2014 RGB888 (24\u0445-\u0431\u0438\u0442\u043d\u044b\u0439 \u0446\u0432\u0435\u0442), \u0430 \u043f\u0440\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u0430\u0434\u0440\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d, \u043d\u0430 \u043b\u0435\u0442\u0443 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0446\u0432\u0435\u0442\u0430:<\/p>\n<pre><code class=\"cpp\">void CGraphics::Flip() {     for(int i = 0; i &lt; fbDesc.width; i++)     {         for(int j = 0; j &lt; fbDesc.height; j++)         {             short* absPixel = (short*)&amp;fbDesc.pixels[(j * fbDesc.lineLength) + (i * 2)];             char* absBackPixel = &amp;backBuffer[(j * fbDesc.width + i) * 3];              short c16 = ((absBackPixel[0] &amp; 0b11111000) &lt;&lt; 8) | ((absBackPixel[1] &amp; 0b11111100) &lt;&lt; 3) | (absBackPixel[2] >> 3);             *absPixel = c16;         }     }      \/\/ We should pass a bit changed VSCREENINFO structure back to FB driver, to make it update our screen     \/\/ This seems like a bit non-standard behaviour, because Android recovery uses this too: probably, something to save power.     flip = !flip;     vInfo.yres_virtual = (int)flip;     ioctl(fbDev, FBIOPUT_VSCREENINFO, &amp;vInfo); } <\/code><\/pre>\n<p>  \u041e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043d\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435: \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u043b\u0435\u0442 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 var_screeninfo, \u0433\u0434\u0435 \u0445\u043e\u0442\u044f \u0431\u044b \u0447\u0442\u043e-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043e, \u0438\u043d\u0430\u0447\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043c\u044b \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u043c. \u042d\u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0441\u0442\u044b\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0440\u043e\u0434\u043d\u043e\u043c recovery \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438, \u0430 \u0441\u0443\u0434\u044f \u043f\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 fb, \u00ab\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439\u00bb \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u043a\u0440\u0430\u043d \u2014 \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0443 ioctl (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b).<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044f \u0441\u043c\u043e\u0433 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c, \u044f \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u043d\u0438\u0431\u0443\u0434\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443. \u041f\u0443\u0441\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u043e\u0438 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">FILE* f = fopen(fileName, \"r\");      LOGF(\"Loading %s\\n\", fileName);  if(!f) {         LOGF(\"Unable to open %s\\n\", fileName); return 0; }  CTgaHeader hdr; fread(&amp;hdr, sizeof(hdr), 1, f);  if(hdr.paletteType) { LOG(\"Palette images are unsupported\\n\"); return 0; }  if(hdr.bpp != 24 &amp;&amp; hdr.bpp != 32) { LOG(\"Unsupported BPP\\n\"); return 0; }  unsigned char* buf = (unsigned char*)malloc(hdr.width * hdr.height * (hdr.bpp \/ 8));      if(!buf)     {         LOG(\"Memory exhausted\\n\");         return 0;     }  \/\/fseek(f, hdr.headerLength, SEEK_SET);  fread(buf, hdr.width * hdr.height * (hdr.bpp \/ 8), 1, f); fclose(f); CImage* ret = new CImage(); ret->Width = hdr.width; ret->Height = hdr.height; ret->Pixels = buf;     ret->IsTransparent = hdr.bpp == 32;  LOGF(\"Loaded %s %ix%i\\n\", fileName, ret->Width, ret->Height); return ret; <\/code><\/pre>\n<p>  \u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a TGA \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0441\u044f: \u044f \u0442\u0430\u0441\u043a\u0430\u044e \u0435\u0433\u043e \u0432 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442. \u041e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043b\u044e\u0431\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u044f, \u043a\u0440\u043e\u043c\u0435 \u043f\u0430\u043b\u0438\u0442\u0440\u043e\u0432\u044b\u0445, \u043d\u043e \u044f \u0435\u0433\u043e \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e \u043d\u0430 RGB888 \u0438 RGBA8888 \u2014 \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u0441 \u0430\u043b\u044c\u0444\u0430-\u043a\u0430\u043d\u0430\u043b\u043e\u043c. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0448\u0443\u0441\u0442\u0440\u044b\u0435, \u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a: <\/p>\n<pre><code class=\"cpp\">__inline void __ClipPrimitive(CFrameBuffer* fbDesc, int* dw, int* dh) {     if(*dw > fbDesc->width)         *dw = fbDesc->width - 1;      if(*dh > fbDesc->height)         *dh = fbDesc->height - 1; }  void CGraphics::PutPixel(int x, int y, CColor color) {     if(x &lt; 0 || y &lt; 0)         return;          char* col = &amp;backBuffer[(y * fbDesc.width + x) * 3];     col[0] = color.R;     col[1] = color.G;     col[2] = color.B; }  void CGraphics::PutPixelAlpha(int x, int y, CColor color, float alpha) {     if(x &lt; 0 || y &lt; 0)         return;          char* col = &amp;backBuffer[(y * fbDesc.width + x) * 3];      col[0] = (byte)(color.R * alpha + col[0] * (1.0f - alpha)); col[1] = (byte)(color.G * alpha + col[1] * (1.0f - alpha)); col[2] = (byte)(color.B * alpha + col[2] * (1.0f - alpha)); }  void CGraphics::DrawImage(CImage* img, int x, int y) {     if(img)     {         if(!img->IsTransparent)         {             for(int i = 0; i &lt; img->Height; i++)             {                 for(int j = 0; j &lt; img->Width; j++)                 {                     if(j >= fbDesc.width)                         break;                      CColor col;                     unsigned char* pixels = &amp;img->Pixels[((img->Height - i - 1) * img->Width + j) * 3];                      col.R = pixels[2];                     col.G = pixels[1];                     col.B = pixels[0];                      PutPixel(x + j, y + i, col);                 }                  if(i >= fbDesc.height)                     break;             }         }         else         {             for(int i = 0; i &lt; img->Height; i++)             {                 for(int j = 0; j &lt; img->Width; j++)                 {                     if(j >= fbDesc.width)                         break;                      CColor col;                     unsigned char* pixels = &amp;img->Pixels[((img->Height - i - 1) * img->Width + j) * 4];                      col.R = pixels[2];                     col.G = pixels[1];                     col.B = pixels[0];                     float alpha = (float)pixels[3] \/ 255;                      PutPixelAlpha(x + j, y + i, col, alpha);                 }                  if(i >= fbDesc.height)                     break;             }         }     } } <\/code><\/pre>\n<p>  PutPixel \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0438\u043d\u043b\u0430\u0439\u043d\u0438\u0442\u044c \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c. \u0412 \u0446\u0435\u043b\u043e\u043c, \u0441\u0430\u043c\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e, \u043d\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0426\u041f\u0423 \u2014 \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u043c\u044b \u0443\u043f\u0440\u0435\u043c\u0441\u044f \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435. \u0415\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u043f\u0440\u0438\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u0430\u043d\u043b\u0430\u0439\u043d\u0430\u043c\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 \u0437\u0430\u0434\u043d\u0438\u0439 \u0431\u0443\u0444\u0435\u0440.<\/p>\n<p>  \u0421\u0440\u0430\u0437\u0443 \u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u0440\u0438\u0444\u0442\u043e\u0432: \u043e\u043d\u0438 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u043c\u0438 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u043d\u043e\u0448\u0438\u0440\u0438\u043d\u043d\u044b\u0435 (\u0432\u0441\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0443\u044e \u0448\u0438\u0440\u0438\u043d\u0443) \u0438 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u043c\u0438 (\u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u00ab\u0437\u0430\u043f\u0435\u043a\u0430\u0442\u044c\u00bb \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0448\u0440\u0438\u0444\u0442\u043e\u0432). \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0438\u0441\u0443\u0435\u0442 \u0432\u0438\u043d\u0434\u043e\u0432\u044b\u0435 \u0448\u0440\u0438\u0444\u0442\u044b \u043f\u0440\u044f\u043c\u043e \u0432 \u043d\u0430\u0448 \u0441\u0430\u043c\u043e\u043f\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442:<\/p>\n<pre><code class=\"cs\">            Console.WriteLine(\"FontBake for BodyaPhone\");             Console.WriteLine(\"(C)2023 Bogdan Nikolaev\");              if (args.Length > 0)             {                 string fontName = args[0];                 int glyphSize = 16;                 Font fnt = new Font(fontName, glyphSize, FontStyle.Bold, GraphicsUnit.Pixel);                 SolidBrush brush = new SolidBrush(Color.White);                 SolidBrush bg = new SolidBrush(Color.Magenta);                  Bitmap glyph = new Bitmap(glyphSize, glyphSize);                 Graphics g = Graphics.FromImage(glyph);                 g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;                  BinaryWriter writer = new BinaryWriter(File.Create(fontName));                 writer.Write(glyphSize); \/\/ Glyph size                  byte[] glyphData = new byte[glyphSize * glyphSize * 3];                  for(int i = 0; i &lt; 255; i++)                 {                     g.FillRectangle(bg, 0, 0, glyphSize, glyphSize);                     g.DrawString(((char)i).ToString(), fnt, brush, PointF.Empty);                      var data = glyph.LockBits(new Rectangle(0, 0, glyphSize, glyphSize), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);                     System.Runtime.InteropServices.Marshal.Copy(data.Scan0, glyphData, 0, glyphData.Length);                     glyph.UnlockBits(data);                      writer.Write(glyphData);                 }             } <\/code><\/pre>\n<p>  \u0424\u043e\u0440\u043c\u0430\u0442 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u0435\u0439\u0448\u0438\u0439: <\/p>\n<blockquote><p>1 \u0431\u0430\u0439\u0442 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043d\u0430\u043c \u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u0448\u0440\u0438\u0444\u0442\u0430 \u0438 \u0434\u0430\u043b\u0435\u0435 \u0438\u0434\u0443\u0442 255 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u0414\u0430, \u044d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0442.\u043a \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u043f\u0443\u0441\u0442\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438\u0437 ASCII-\u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043d\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c.<\/p><\/blockquote>\n<p> \u041f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0432 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u0445 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u0446\u0432\u0435\u0442 Magena \u2014 \u044f\u0440\u043a\u043e-\u0440\u043e\u0437\u043e\u0432\u044b\u0439. \u042f \u043d\u0435 \u0441\u0442\u0430\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u043b\u044c\u0444\u0430-\u043a\u0430\u043d\u0430\u043b, \u0442. \u043a. \u0438\u043d\u0430\u0447\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0435 \u043b\u0430\u0433\u0438 \u043f\u0440\u0438 \u0432\u044b\u0432\u043e\u0434\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<pre><code class=\"cpp\">void CGraphics::DrawString(CFont* font, char* str, int x, int y) {     CColor col = { 64, 64, 64 };      DrawStringColored(font, str, x, y, col); }  void CGraphics::DrawStringColored(CFont* font, char* str, int x, int y, CColor colorMultiply) {     if(font &amp;&amp; str &amp;&amp; strlen(str) > 0)     {                  for(int i = 0; i &lt; strlen(str); i++)         {             DrawGlyph(font->Glyphs[str[i]], x + (i * (font->Glyphs[str[i]]->Width - 5)), y, colorMultiply);         }     } } <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u0438 \u0442\u0435\u043a\u0441\u0442\u0430! \u0427\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0432\u043e\u0434\u0430<\/font><\/h2>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/5ff\/d3a\/310\/5ffd3a310c4a53d2c6b5891cfb1ed585.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/5ff\/d3a\/310\/5ffd3a310c4a53d2c6b5891cfb1ed585.png\"\/><\/div>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432\u0432\u043e\u0434\u0430! \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f UI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0412 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b \u0442\u0430\u0447\u0441\u043a\u0440\u0438\u043d\u0430 \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043f\u043e \u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u041d\u0430 \u044d\u0442\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0442\u0430\u0447\u0441\u043a\u0440\u0438\u043d\u0430 \u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u043b \u0441\u043e\u0431\u044b\u0442\u0438\u0435 BTN_TOUCH, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0438\u0434\u0442\u0438 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0445\u0438\u0449\u0440\u0435\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u043a\u043e\u043d\u0446\u0435-\u043a\u043e\u043d\u0446\u043e\u0432, \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u0430\u0441\u0430\u043d\u0438\u044f \u043f\u0430\u043b\u044c\u0446\u0430 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">void CInput::Update() {     input_event ev; int ret = 0;     bool gotEvent = false; \/\/ Touchscreen driver sends us events each input \"frame\". So, if we don't have BTN_TOUCH event, we can track releasing finger when there are no events in current frame.  while((ret = read(evDev, &amp;ev, sizeof(input_event)) != -1)) { if(ev.code == ABS_MT_POSITION_X) TouchX = ev.value;  if(ev.code == ABS_MT_POSITION_Y) TouchY = ev.value;          gotEvent = true; }      bool pressed = gotEvent;      if(pressed &amp;&amp; TouchState == tsIdle)         TouchState = tsTouching;      if(TouchState == tsReleased)         TouchState = tsIdle;      if(!pressed &amp;&amp; TouchState == tsTouching)         TouchState = tsReleased; }  bool CInput::IsTouchedAt(int x, int y, int w, int h) {     return TouchX > x &amp;&amp; TouchY > y &amp;&amp; TouchX &lt; x + w &amp;&amp; TouchY &lt; y + h &amp;&amp; TouchState == tsReleased; }<\/code><\/pre>\n<p>  \u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u00ab\u0445\u0430\u0440\u0434\u0432\u0430\u0440\u043d\u044b\u0445\u00bb \u043a\u043d\u043e\u043f\u043e\u043a \u2014 \u0434\u043e\u043c\u043e\u0439, \u043c\u0435\u043d\u044e, \u043d\u0430\u0437\u0430\u0434 \u0438 \u0442. \u043f. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u044d\u0442\u043e \u0432\u0441\u0451 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c!<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f<\/font><\/h2>\n<p>  \u041d\u0435 \u0437\u0430\u0431\u044b\u043b \u044f \u0438 \u043f\u0440\u043e \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438. \u041d\u0443 \u043a\u043e\u043c\u0443 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u043d\u0443\u0436\u0435\u043d \u043d\u0435\u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0442\u043e\u043f\u043e\u0440\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441? \u041f\u0443\u0441\u0442\u044c \u043b\u0443\u0447\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439, \u043f\u0443\u0441\u0442\u044c \u0438 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0439!<\/p>\n<p>  \u0410\u043d\u0438\u043c\u0430\u0442\u043e\u0440 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043e\u043d\u044b\u0439 \u0438\u0437 \u0440\u0430\u043d\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 Android: \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043c\u0435\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0430\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438: \u0442\u043e \u043e\u043d \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u043c\u0438 \u043e\u0442\u0440\u0435\u0437\u043a\u0430\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 a \u0438 b, \u0432 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u00ab\u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430\u00bb \u2014 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0442 0.0f (\u043d\u0430\u0447\u0430\u043b\u043e \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438) \u0434\u043e 1.0f (\u043a\u043e\u043d\u0435\u0446 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438). \u041f\u043e\u043a\u0430 \u0432\u0440\u0435\u043c\u044f \u0442\u0438\u043a\u0430\u0435\u0442 \u0434\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 (duration), \u0430\u043d\u0438\u043c\u0430\u0442\u043e\u0440 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u0435\u043c\u0443 \u043f\u043e\u043b\u044f \u0434\u043e \u043d\u0443\u0436\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/64dbe8503add78308953860b\" data-style=\"\" id=\"64dbe8503add78308953860b\" width=\"\"><\/div>\n<\/div>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c! \u041f\u043e\u0445\u043e\u0436\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0438\u0433\u0440\u0430\u0445 \u0438 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u041e\u0421, \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043c \u043e\u043d\u0438 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b: \u0435\u0441\u0442\u044c \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\/\u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043a\u0435\u0439\u0444\u0440\u0435\u0439\u043c\u043e\u0432 (\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438), \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0438 \u0442. \u043f.<\/p>\n<pre><code class=\"cpp\">CAnimator::CAnimator() {     SetDuration(1.0f); }  CAnimator::~CAnimator() {      }  void CAnimator::SetTranslation(int xFrom, int yFrom, int xTo, int yTo) {     this->xFrom = xFrom;     this->yFrom = yFrom;     this->xTo = xTo;     this->yTo = yTo; }  void CAnimator::SetRotation(float from, float to) {     rFrom = from;     rTo = to; }  void CAnimator::SetDuration(float speed) {     duration = speed; }  float lerp(float a, float b, float f) {     return a * (1.0 - f) + (b * f); }  bool CAnimator::Update() {     Time += 0.25f;      if(Time > 1.0f)         Time = 1.0f;      X = (int)lerp((float)xFrom, (float)xTo, Time);     Y = (int)lerp((float)yFrom, (float)yTo, Time);      Rotation = lerp(rFrom, rTo, Time); }  void CAnimator::Run() {     Time = 0;      IsPlaying = true; } <\/code><\/pre>\n<p>  <\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u041c\u043e\u0434\u0435\u043c<\/font><\/h2>\n<p>  \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0440\u0430\u043d\u043d\u0435\u0435, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043c\u043e\u0434\u0435\u043c\u043e\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c AT-\u043a\u043e\u043c\u0430\u043d\u0434. \u041b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434 \u043c\u043e\u0434\u0435\u043c\u0430 \u0438\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0438 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c UI-\u043f\u043e\u0442\u043e\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0432\u044b\u0437\u044b\u0432\u0430\u044f \u043b\u0430\u0433\u0438. \u0412 SIM800 \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432\u0435\u0441\u044c GSM-\u0441\u0442\u0435\u043a, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0432\u044b\u0432\u043e\u0434 \u0437\u0432\u0443\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0443\u0441\u0438\u043b\u0438\u0442\u0435\u043b\u044c \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c \u2014 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0438 \u0438 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d \u043e\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430. \u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u044f \u043f\u043e\u0434\u0441\u043e\u0431\u0440\u0430\u043b \u0430\u0443\u0434\u0438\u043e\u0442\u0440\u0430\u043a\u0442 \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439 \u2014 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d \u043e\u0442 \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430 \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u043a \u043e\u0442 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0430, \u043d\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u0445\u0432\u0430\u0442\u0430\u0435\u0442:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/db6\/1ec\/bc0\/db61ecbc0aca3fa8a64bf3ae776fb76b.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/db6\/1ec\/bc0\/db61ecbc0aca3fa8a64bf3ae776fb76b.jpg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0412\u0430\u0436\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441: \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, tty-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 Linux \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u2014 \u0442. \u0435. \u0434\u0440\u043e\u0431\u044f\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043f\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0443 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 (\\n), \u0438\u043c\u0435\u044e\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0438 \u0442. \u0434. \u0414\u043b\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u043c\u043e\u0434\u0435\u043c\u0430 \u2014 \u043a\u043e\u0433\u0434\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043b\u0438\u043d\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430, \u0430 \u0432 \u0441\u0430\u043c \u043e\u0442\u0432\u0435\u0442 \u043c\u043e\u0433\u0443\u0442 \u00ab\u0432\u043a\u043b\u0438\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f\u00bb <b>Unsolicited<\/b>-\u043a\u043e\u043c\u0430\u043d\u0434\u044b (\u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 \u0444\u043b\u0430\u0433\u0438 \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043e\u0442 \u043c\u043e\u0434\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0439\u0442\u0438 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u2014 \u0442. \u0435. \u043f\u0440\u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u043c \u0437\u0432\u043e\u043d\u043a\u0435, \u043c\u043e\u0434\u0435\u043c \u043d\u0430\u0447\u043d\u0451\u0442 \u0444\u043b\u0443\u0434\u0438\u0442\u044c <b>RING<\/b> \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b), \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0431\u0443\u0444\u0435\u0440 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0438 \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u00ab\u043f\u043e \u043c\u0435\u0441\u0442\u0443\u00bb. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f raw-\u0440\u0435\u0436\u0438\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430:<\/p>\n<pre><code class=\"cpp\">tcgetattr(modemFd, &amp;tio);     tio.c_iflag &amp;= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);     tio.c_oflag &amp;= ~(OPOST);     tio.c_cflag |= (CS8);     tio.c_lflag &amp;= ~(ECHO | ICANON | IEXTEN | ISIG); tcsetattr(modemFd, TCSAFLUSH, &amp;tio);<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043c\u0430:<\/p>\n<pre><code class=\"cpp\">        char atBuf[16]; \/\/ Check modem presence SendAT(\"AT\\r\\n\", 250); GetATResponse((char*)&amp;atBuf, sizeof(atBuf));  if(!CheckATStatus((char*)&amp;atBuf)) { printf(\"Failed to initialize modem: Modem isn't anwered OK\\n\"); printf(\"Modem response: %s\\n\", &amp;atBuf); return; }          LOG(\"AT = OK, ready to operate\\n\");  ...  void CModem::SendAT(char* command, int waitTime) { int result = write(modemFd, command, strlen(command));  if(!result) LOGF(\"SendAT failed: %i\\n\", errno);  usleep(waitTime * 1000); }  char* CModem::GetATResponse(char* buf, int maxLen) { pollfd pfd; pfd.fd = modemFd; pfd.events = POLLIN;  memset(buf, 0, maxLen); int ev = poll(&amp;pfd, 1, 2000);  if(ev) { int num = read(modemFd, buf, maxLen); } else { LOG(\"AT Receive: Modem not responding...\\n\"); } } <\/code><\/pre>\n<p>  \u0418 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u0430\u043b\u044c\u0448\u0435. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0430\u043c\u043e\u0439 \u043f\u0440\u043e\u0441\u043b\u043e\u0439\u043a\u0438 \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0435\u043c\u043e\u043c \u0438 \u0432\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439:<\/p>\n<pre><code class=\"cpp\">void CModem::Dial(char* number) { if(strlen(number) > 32) return;  char buf[64];  char atResponse[64]; sprintf((char*)&amp;buf, \"ATD%s;\\r\\n\", number); LOGF(\"Dialing %s\\n\", buf);  SendAT(buf, 250); GetATResponse((char*)&amp;atResponse, sizeof(atResponse));  LOGF(\"Dial response: %s\\n\", &amp;atResponse); }  void CModem::Hang() { char atBuf[64];  SendAT(\"ATH\\r\\n\", 250); GetATResponse((char*)&amp;atBuf, sizeof(atBuf)); LOGF(\"ATH: %s\\n\", &amp;atBuf);  LOG(\"Hang\\n\"); } <\/code><\/pre>\n<p>  \u041f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u0437\u0432\u043e\u043d\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 Dial \u0438 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442! \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e! \u0410 \u0442\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u043e\u0433\u043e, \u0447\u0435\u0433\u043e \u0432\u044b \u0436\u0434\u0430\u043b\u0438 \u2014 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430!<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d<\/font><\/h2>\n<p>  \u041a \u0432\u044b\u0431\u043e\u0440\u0443 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u044f \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u00ab\u0441\u043b\u0438\u0437\u0430\u043b\u00bb \u0434\u0438\u0437\u0430\u0439\u043d \u043f\u0435\u0440\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 iOS. \u041a\u0430\u043a \u043f\u043e \u043c\u043d\u0435, \u044d\u0442\u043e \u043e\u0434\u043d\u0438 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 iOS \u0432\u043e\u043e\u0431\u0449\u0435 \u2014 \u0432\u0441\u0435 \u044d\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0435 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u044b \u0438 \u043f\u0435\u0440\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u044f \u043d\u0435 \u0442\u0430\u043a \u043a\u0440\u0443\u0442, \u043a\u0430\u043a \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b Apple, \u0434\u0430 \u0438 \u043c\u043e\u0449\u043d\u043e\u0433\u043e UI-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043b \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u00ab\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u00bb \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/fe1\/d74\/f10\/fe1d74f108e70dfdea04fea5bed5691f.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/fe1\/d74\/f10\/fe1d74f108e70dfdea04fea5bed5691f.jpg\" data-blurred=\"true\"\/><\/p>\n<p>  \u041d\u0430\u0447\u0430\u043b \u044f \u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430 \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u0438 \u0438 \u043f\u0440\u043e\u0434\u0443\u043c\u044b\u0432\u0430\u043d\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u00ab\u043b\u0430\u0443\u043d\u0447\u0435\u0440\u0430\u00bb. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441\u0431\u0430\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0435\u0440\u0445 \u0432\u0441\u0435\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043f\u043e\u043b\u043a\u0430 \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u2014 AppDrawer \u0438 \u0441\u0430\u043c\u0438 \u044d\u043a\u0440\u0430\u043d\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u0441\u0443\u043f\u0435\u0440\u043a\u043b\u0430\u0441\u0441\u0430 <b>CScreen<\/b>.<\/p>\n<pre><code class=\"cpp\">class CScreen { protected: CAnimator* windowAnimator; public: CScreen(); ~CScreen();  virtual void Show(); virtual void Update(); virtual void Draw(); virtual void Hide(); }; <\/code><\/pre>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u0430\u044f: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0438\u0441\u0443\u044e\u0442\u0441\u044f \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u043e\u0431\u043e\u0438, \u0437\u0430\u0442\u0435\u043c, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u2014 AppDrawer \u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u0431\u0430\u0440 \u0438 \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043e\u0432\u0435\u0440\u043b\u0435\u0438.<\/p>\n<pre><code class=\"cpp\">void CLauncher::DrawAppDrawer() { for(int i = 0; i &lt; sizeof(Apps) \/ sizeof(CAppDesc*); i++) { int x = drawerAnimator->X + (i * 75); int y = drawerAnimator->Y; Graphics->DrawImage(Apps[i]->Icon, x, y);  if(Input->IsTouchedAt(x, y, Apps[i]->Icon->Width, Apps[i]->Icon->Height)) { StartScreen(new CDialerScreen()); } } }  void CLauncher::StartScreen(CScreen* screen) { if(screen) { currentScreen = screen; currentScreen->Show(); } }  void CLauncher::Run() { CImage* test = CImage::FromFile(\"ui\/stFiller.tga\");;  while(true) { Input->Update();  Graphics->DrawImage(Wallpaper, 0, 0);  if(currentScreen) { currentScreen->Update(); currentScreen->Draw(); } else { drawerAnimator->Update(); DrawAppDrawer(); }  Status->Update(); Status->Draw();                                  if(Dialog->IsVisible())      Dialog->Draw();  Graphics->Flip(); } } <\/code><\/pre>\n<p>  \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0440\u0430\u0437\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043e\u0431\u043a\u0430\u0442\u0430\u0442\u044c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u00ab\u0441\u0438\u0441\u0442\u0435\u043c\u0443\u00bb \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0435 \u0430\u043d\u0438\u043c\u0430\u0448\u043a\u0438 \u2014 \u0432\u044b\u0435\u0437\u0436\u0430\u044e\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441\u0431\u0430\u0440 \u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0430-\u043b\u044f \u0430\u0439\u0444\u043e\u043d:<\/p>\n<pre><code class=\"cpp\">    animator = new CAnimator();     animator->SetTranslation(0, -imFiller->Height, 0, 0);     animator->Run(); <\/code><\/pre>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u0435\u043d\u044c\u043a\u043e. \u0415\u0441\u043b\u0438 \u044f \u0441\u043c\u043e\u0433\u0443 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0445\u0430\u0440\u0434\u0432\u0430\u0440\u043d\u044b\u0439 GLES, \u0442\u043e \u044d\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u0440\u0430\u0437\u044b \u043f\u043b\u0430\u0432\u043d\u0435\u0435 \u0438 \u0448\u0443\u0441\u0442\u0440\u0435\u0435 \u2014 \u043d\u0435 \u0445\u0443\u0436\u0435 \u0430\u0439\u0444\u043e\u043d\u043e\u0432 \u0442\u0435\u0445 \u043b\u0435\u0442! \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0431\u0430\u0440\u0430 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u0435\u043d\u044c\u043a\u0430\u044f, \u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0440\u0430\u0431\u043e\u0447\u0430\u044f:<\/p>\n<pre><code class=\"cpp\">gLauncher->Graphics->DrawImage(imFiller, animator->X, animator->Y);     gLauncher->Graphics->DrawImage(imBattery[(int)gLauncher->PowerManager->GetBatteryLevel()], imFiller->Width - imBattery[0]->Width - 5, animator->Y + 5);      char timeFmt[64];     time_t _time = time(0);     tm* _localTime = localtime(&amp;_time);     strftime((char*)&amp;timeFmt, sizeof(timeFmt), \"%R\", _localTime);      gLauncher->Graphics->DrawString(gLauncher->Font, (char*)&amp;timeFmt, 0, 0); <\/code><\/pre>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e, \u044f \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u2014 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043e\u043d\u0438 \u0441\u043b\u0438\u043d\u043a\u043e\u0432\u0430\u043d\u044b \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043b\u0430\u0443\u043d\u0447\u0435\u0440\u043e\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 CAppDesc, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e-\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043f\u043e\u043a\u0430\u0437\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438 \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430.<\/p>\n<pre><code class=\"cpp\">#define APP_FACTORY(clazz) CScreen* __phone_factory_##clazz () { return new clazz (); }  struct CAppDesc { char Name[16]; char IconPath[32];  CImage* Icon; CScreen* MainScreen;  CScreen*(*Factory)(); };  ...  CAppDesc _APhone = { \"Phone\", \"ui\/phone.tga\",  0, 0,  &amp;__phone_factory_CDialerScreen }; <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u044f \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043b \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u2014 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0437\u0432\u043e\u043d\u0438\u043b\u043a\u0438. \ud83d\ude42<\/p>\n<pre><code class=\"cpp\">#include &lt;monohome.h>  CDialerScreen::CDialerScreen() {     dialerButton = CImage::FromFile(\"ui\/dialer_btn.tga\");      memset(&amp;number, 0, sizeof(number)); }  CDialerScreen::~CDialerScreen() {     delete dialerButton; }  void CDialerScreen::Update() {     CScreen::Update(); }  bool DialerButton(CImage* img, int x, int y, char* str) {     bool state = CGUI::Button(img, x, y);     gLauncher->Graphics->DrawString(gLauncher->Font, str, x + (img->Width \/ 2) - 8, y + (img->Height \/ 2) - 8);      return state; }  void CDialerScreen::Draw() {     CScreen::Draw();      for(int i = 0; i &lt; 3; i++)     {         for(int j = 0; j &lt; 3; j++)         {             int num = i * 3 + j + 1;             char buf[16];             memset(&amp;buf, 0, sizeof(buf));             sprintf((char*)&amp;buf, \"%i\", num);              if(DialerButton(dialerButton, j * dialerButton->Width + 15, 65 + (i * dialerButton->Height) + windowAnimator->Y, buf))             {                 if(strlen((char*)&amp;number) &lt; 31)                     strcat((char*)&amp;number, (char*)&amp;buf);             }         }     }      if(DialerButton(dialerButton, 1 * dialerButton->Width + 15, 65 + (3 * dialerButton->Height) + windowAnimator->Y, \"0\"))             {                 if(strlen((char*)&amp;number) &lt; 31)                     strcat((char*)&amp;number, \"0\");             }      if(DialerButton(dialerButton, 0 * dialerButton->Width + 15, 65 + (3 * dialerButton->Height) + windowAnimator->Y, \"C\"))     {         gLauncher->Modem->Dial((char*)&amp;number);     }      gLauncher->Graphics->DrawString(gLauncher->Font, (char*)&amp;number, 10, 48); }<\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 Immediate GUI. \u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043a\u043d\u043e\u043f\u043a\u0443 \u043d\u043e\u043c\u0435\u0440\u043e\u043d\u0430\u0431\u0438\u0440\u0430\u0442\u0435\u043b\u044f? \u041c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0435\u0440\u0435\u0442 \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u0438 \u0434\u043e\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u043a \u043d\u0435\u0439 \u0442\u0435\u043a\u0441\u0442. \u0412\u0441\u0451 \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0445\u043e\u0442\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0436\u0435\u043d\u043e. \ud83d\ude42<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/505\/e1c\/b9d\/505e1cb9d41bd7383d2057f5a81a142c.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/505\/e1c\/b9d\/505e1cb9d41bd7383d2057f5a81a142c.jpg\" data-blurred=\"true\"\/><\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0417\u0432\u043e\u043d\u0438\u043c!<\/font><\/h2>\n<p>  \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0437\u0432\u043e\u043d\u043e\u043a \u0441 \u043d\u0430\u0448\u0435\u0439 \u043f\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u041d\u0430\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043a \u0438\u2026<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/580\/330\/368\/5803303686a67745bdbb8751899075d7.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/580\/330\/368\/5803303686a67745bdbb8751899075d7.png\"\/><\/p>\n<p>  \u0414\u0430, \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043c\u044b \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0437\u0432\u043e\u043d\u0438\u0442\u044c\u0441\u044f \ud83d\ude42<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/64dbea4b2fbe8876a6fb4110\" data-style=\"\" id=\"64dbea4b2fbe8876a6fb4110\" width=\"\"><\/div>\n<\/div>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/font><\/h2>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u044d\u0442\u043e \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0435\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043b\u044e\u0431\u043e\u043c\u0443 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c\u0443 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0443. \u0417\u0434\u0435\u0441\u044c \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u0435\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0443\u0440\u043e\u0432\u043d\u044e \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u044b\u0445 \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432: \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043d\u0443\u044e \u043a\u043d\u0438\u0433\u0443, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0421\u041c\u0421\/\u041c\u041c\u0421, \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0441 \u0438\u0433\u0440\u0430\u043c\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u0443\u0436\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e \u0438 \u0441\u0430\u043c\u0430\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0438 \u044f \u0433\u043e\u0440\u0434, \u0447\u0442\u043e \u0441\u043c\u043e\u0433 \u043d\u0435 \u043d\u0430 \u0441\u043b\u043e\u0432\u0430\u0445, \u0430 \u043d\u0430 \u0434\u0435\u043b\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c, \u043c\u043e\u0438\u043c \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0434\u0434\u0438\u043d\u0433\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e NoName-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445 \u043b\u0438\u0431\u043e \u043e\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u043a\u043e\u0432\u2026<\/p>\n<p>  \u041c\u043e\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0440\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445, \u043d\u043e \u0438 \u0432 \u0433\u0438\u043a\u043e\u0432\u0441\u043a\u0438\u0445 DIY-\u0441\u0444\u0435\u0440\u0430\u0445. \u0421\u0443\u0434\u0438\u0442\u0435 \u0441\u0430\u043c\u0438: \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\u043d\u044b\u0439 \u0434\u0438\u0441\u043f\u043b\u0435\u0439, \u0435\u043c\u043a\u043e\u0441\u0442\u043d\u043e\u0439 \u0442\u0430\u0447\u0441\u043a\u0440\u0438\u043d, \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0437\u0432\u0443\u043a, \u043a\u0430\u043c\u0435\u0440\u0430 \u2014 \u0438 \u0432\u0441\u0451 \u044d\u0442\u043e \u0437\u0430 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043f\u0430\u0440\u0443 \u0441\u043e\u0442\u0435\u043d \u0440\u0443\u0431\u043b\u0435\u0439. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043b\u044e\u0434\u044f\u043c, \u043a\u0430\u043a \u0432\u0441\u044e \u044d\u0442\u0443 \u043c\u043e\u0449\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0438\u0445 \u0446\u0435\u043b\u044f\u0445 \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0437 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445, \u0430 \u043d\u0435 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 \u043f\u043e\u043c\u043e\u0439\u043a\u0443!<br \/>  \u0421\u0435\u0439\u0447\u0430\u0441 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 Fly \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430 \u0441\u0442\u043e\u044f\u0442 \u043a\u043e\u043f\u0435\u0439\u043a\u0438, \u0430 \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0438\u0445 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0435\u0439. \u042f \u043e\u0447\u0435\u043d\u044c \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u0432\u043e\u0451 \u0438\u0437 \u0441\u0442\u0430\u0440\u044b\u0445 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u043e\u0432, \u0431\u043b\u0430\u0433\u043e \u0441\u0432\u043e\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f <a href=\"https:\/\/github.com\/monobogdan\/selfphone\/tree\/main\">\u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e \u043d\u0430 GitHub<\/a>!<\/p>\n<hr\/>\n<p>  <\/p>\n<h4><font color=\"#454cee\">\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u044d\u0442\u043e:<\/font><\/p>\n<ul>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/753062\/\">\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043a \u043b\u044e\u0431\u043e\u043c\u0443 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u0438\u043a\u0443 \u0441 SPI: \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u0430\u043d\u0443\u0430\u043b \u043e \u043f\u043e\u0438\u0441\u043a\u0435 \u044d\u043a\u0440\u0430\u043d\u0447\u0438\u043a\u043e\u0432 \u0434\u043b\u044f \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/723016\/\">Nokia N900 \u2014 \u043b\u0435\u0433\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u0439 Linux \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/597601\/\">\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 IoT \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 C# \u0434\u043b\u044f Raspberry Pi \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u0438\u043a\u043e\u0432, \u043d\u0430 Linux<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/589707\/\">\u041a\u0430\u043a \u0440\u0430\u0441\u043f\u0443\u0442\u0430\u0442\u044c \u0443\u0440\u043e\u0431\u043e\u0440\u043e\u0441 \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u0430 \u0432 Linux<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/723016\/\">\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0437\u0430\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f Linux \u2014 \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u043b\u043e?<\/a><\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/timeweb.cloud\/vds-vps?utm_source=habr&amp;utm_medium=banner&amp;utm_campaign\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/b5\/pj\/of\/b5pjofdoxth14ro-rjsrn7sbmiy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/b5\/pj\/of\/b5pjofdoxth14ro-rjsrn7sbmiy.png\"\/><\/a><\/h4>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><\/p>\n<div class=\"tm-article-poll-container\"><!--[--><\/p>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/companies\/timeweb\/articles\/754212\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">\u041a\u0430\u043a \u0432\u0430\u043c \u043f\u0440\u043e\u0435\u043a\u0442?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">77.93% <\/span><span class=\"tm-article-poll__answer-label\">\u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e! \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0432 \u0441\u0432\u043e\u0451\u043c \u0440\u043e\u0434\u0435. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0439 \u043f\u0438\u043b\u0438\u0442\u044c!<\/span><span class=\"tm-article-poll__answer-votes\">646<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 77.93%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">1.93% <\/span><span class=\"tm-article-poll__answer-label\">\u042d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043a\u0440\u0443\u0442\u043e, \u043d\u0430\u0444\u0438\u0433 \u0442\u044b \u0444\u0438\u0433\u043d\u0435\u0439 \u043c\u0430\u0435\u0448\u044c\u0441\u044f???<\/span><span class=\"tm-article-poll__answer-votes\">16<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 1.93%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">20.14% <\/span><span class=\"tm-article-poll__answer-label\">\u0410\u0432\u0442\u043e\u0440 \u043d\u0430\u0440\u043a\u043e\u043c\u0430\u043d<\/span><span class=\"tm-article-poll__answer-votes\">167<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 20.14%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 829 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.   \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 92 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. <\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/companies\/timeweb\/articles\/754212\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">\u041a\u0430\u043a \u0432\u0430\u043c DIY-\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u0432 \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">97.02% <\/span><span class=\"tm-article-poll__answer-label\">\u041f\u043b\u0430\u0442\u0438\u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u043e\u0442 bodyawm \u0438 MDXE1337. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0439 \u0432 \u0442\u043e\u043c-\u0436\u0435 \u0434\u0443\u0445\u0435!<\/span><span class=\"tm-article-poll__answer-votes\">423<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 97.02%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">2.98% <\/span><span class=\"tm-article-poll__answer-label\">\u0412\u043e\u043e\u0431\u0449\u0435 \u043a\u0430\u043a\u0430\u0448\u043a\u0430! \u041e\u0442\u043f\u0438\u0441\u0430\u043b\u0441\u044f.<\/span><span class=\"tm-article-poll__answer-votes\">13<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 2.98%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 436 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.   \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 157 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. <\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/companies\/timeweb\/articles\/754212\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">\u0415\u0441\u0442\u044c \u043b\u0438 \u0431\u0443\u0434\u0443\u0449\u0435\u0435 \u0443 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u043e\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u0438\u043a\u043e\u0432, \u0435\u0441\u043b\u0438 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u044e\u0441\u044c \u0434\u043e\u043d\u0435\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043b\u044e\u0434\u0435\u0439?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">71.07% <\/span><span class=\"tm-article-poll__answer-label\">\u0411\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0435\u0441\u0442\u044c!<\/span><span class=\"tm-article-poll__answer-votes\">452<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 71.07%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">28.93% <\/span><span class=\"tm-article-poll__answer-label\">\u041d\u0435\u0442. \u0422\u0430\u043a \u0438 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430 \u0441\u0432\u0430\u043b\u043a\u0435 \u043b\u0435\u0436\u0430\u0442\u044c \ud83d\ude41<\/span><span class=\"tm-article-poll__answer-votes\">184<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 28.93%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 636 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.   \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0441\u044f 91 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c. <\/div>\n<p><!--]--><\/div>\n<p><!--]--><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/754212\/\"> https:\/\/habr.com\/ru\/articles\/754212\/<\/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-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/2d\/xx\/gr\/2dxxgr4fhnzhdcftnpjckmjxaii.jpeg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/2d\/xx\/gr\/2dxxgr4fhnzhdcftnpjckmjxaii.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u041a \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u043c\u0443 \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0441\u0442\u0430\u0440\u044b\u0435 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b \u0432\u0441\u0451 \u0447\u0430\u0449\u0435 \u0438 \u0447\u0430\u0449\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442 \u0441\u0432\u043e\u0451 \u043f\u0440\u0438\u0441\u0442\u0430\u043d\u0438\u0449\u0435 \u0432 \u043c\u0443\u0441\u043e\u0440\u043d\u043e\u043c \u0431\u0430\u043a\u0435. \u041a \u043f\u0440\u043e\u0448\u043b\u044b\u043c, \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u043c \u00ab\u0434\u0440\u0443\u0437\u044c\u044f\u043c\u00bb \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u2014 \u0447\u0443\u0442\u044c \u0443\u0441\u0442\u0430\u0440\u0435\u043b \u0438 \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u043a\u0438\u043d\u0443\u043b\u0438, \u0441\u043b\u043e\u0432\u043d\u043e \u044d\u0442\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u0443\u0441\u043e\u0440. \u0418 \u0432\u0435\u0434\u044c \u043b\u044e\u0434\u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0445\u043e\u0442\u044f\u0442 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0435-\u043b\u0438\u0431\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0433\u0430\u0434\u0436\u0435\u0442\u0430\u043c \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u043b\u0435\u0442! \u041e\u0442\u0447\u0430\u0441\u0442\u0438, \u044d\u0442\u043e \u0432\u0438\u043d\u0430 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u0439 \u2014 Google \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442 \u0438 \u0434\u043e\u0431\u0438\u0432\u0430\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0448\u0443\u0441\u0442\u0440\u044b\u0435 \u0434\u0435\u0432\u0430\u0439\u0441\u044b. \u041e\u0442\u0447\u0430\u0441\u0442\u0438 \u2014 \u0432\u0438\u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0438\u0437\u043d\u0435\u0441-\u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u043d\u0435 \u0434\u0443\u043c\u0430\u044e\u0442 \u043e\u0431 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441\u043e\u0432\u0441\u0435\u043c. \u0412 \u043e\u0434\u0438\u043d \u0434\u0435\u043d\u044c \u044f \u043f\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0441\u0435\u0431\u044f \u0422\u0430\u0439\u043b\u0435\u0440\u043e\u043c \u0414\u0451\u0440\u0434\u0435\u043d\u043e\u043c \u043e\u0442 \u043c\u0438\u0440\u0430 IT \u0438 \u0440\u0435\u0448\u0438\u043b \u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432 \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u0449\u0438\u043d\u0435: \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0434\u043b\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430 \u0441 \u043d\u0443\u043b\u044f. \u0410 \u0434\u0430\u0431\u044b \u0437\u0430\u0434\u0430\u0447\u043a\u0430 \u0431\u044b\u043b\u0430 \u0435\u0449\u0451 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435, \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0443\u044e \u0438 \u0434\u0435\u0448\u0435\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u0437 2012 \u0433\u043e\u0434\u0430 \u2014 Fly IQ245 (\u0446\u0435\u043d\u0430 \u043d\u0430 \u0431\u0430\u0440\u0430\u0445\u043e\u043b\u043a\u0430\u0445 \u2014 200-300 \u0440\u0443\u0431\u043b\u0435\u0439). \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0435\u0441\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0448\u0438\u043d, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0438\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0447\u0442\u043e \u0434\u0430\u0451\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u043b\u044c\u0442\u0440\u0430\u0434\u0435\u0448\u0435\u0432\u043e\u0433\u043e \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u0438\u043a\u0430 \u0434\u043b\u044f DIY-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043b\u0438 \u0443 \u043c\u0435\u043d\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0445\u043e\u0442\u0435\u043b\u043a\u0438? \u0427\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435!<\/p>\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-352010","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/352010","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=352010"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/352010\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=352010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=352010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=352010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}