{"id":390044,"date":"2024-06-29T09:00:05","date_gmt":"2024-06-29T09:00:05","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=390044"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=390044","title":{"rendered":"<span>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c GigaCode \u043a \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435<\/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\/w1560\/webt\/t6\/fq\/i5\/t6fqi560_bxhtrskcx1rjyuu53e.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/t6\/fq\/i5\/t6fqi560_bxhtrskcx1rjyuu53e.png\"\/><\/p>\n<p>  \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421 \u0432\u0430\u043c\u0438 \u0410\u043d\u043d\u0430 \u0416\u0430\u0440\u043a\u043e\u0432\u0430, \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0433\u0440\u0443\u043f\u043f\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Usetech. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0432\u0430\u043c \u043f\u0440\u0438\u043d\u0435\u0441\u043b\u0430 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b. 27 \u0438\u044e\u043d\u044f 2024 \u0433\u043e\u0434\u0430 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043e\u0442\u043a\u0440\u044b\u043b\u0438 \u0438 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u043e\u0432\u0430\u043b\u0438 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0443\u044e \u0441\u0440\u0435\u0434\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 Giga IDE \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u0418\u0418-\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043e\u043c \u043e\u0442 \u00ab\u0421\u0431\u0435\u0440\u0430\u00bb \u0438 \u00ab\u0421\u0431\u0435\u0440\u0422\u0435\u0445\u0430\u00bb. \u0417\u0430\u044f\u0432\u043b\u0435\u043d\u043e, \u0447\u0442\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 \u0441\u0440\u0435\u0434\u0443 \u0418\u0418-\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442 GigaCode \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0446\u0438\u043a\u043b\u043e\u0432 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u043d\u0430 25% \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0410\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442 \u043a\u043e\u0434\u0430, \u0442\u0430\u043a \u0438 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u044f\u0437\u044b\u043a. \u0422\u0430\u043a\u0436\u0435 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434.<\/p>\n<p>  \u041c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c GigaCode AI \u043a \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435.<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e <a href=\"https:\/\/gigacode.ru\/#\/#chat\" rel=\"nofollow noopener noreferrer\">IDE GigaCode <\/a>. \u041d\u0430\u043c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u0440\u0435\u0441\u0443\u0440\u0441 GitVerse (\u0430\u043d\u0430\u043b\u043e\u0433\u0438 GitHub, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 Git), \u0433\u0434\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0421\u0431\u0435\u0440ID:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/9w\/o0\/dl\/9wo0dlwhuiakk2siizixbv4eau0.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/9w\/o0\/dl\/9wo0dlwhuiakk2siizixbv4eau0.png\"\/><br \/>  <a name=\"habracut\"><\/a><br \/>  \u041f\u043e\u0441\u043b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043c\u044b \u043e\u043a\u0430\u0436\u0435\u043c\u0441\u044f \u043d\u0430 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0435, \u0433\u0434\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u043d\u0444\u043e \u043f\u043e \u0441\u0432\u043e\u0438\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u043c, \u0441\u0432\u043e\u0435\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/md\/ze\/ns\/mdzensvaviz7cbvl9arpas_tnps.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/md\/ze\/ns\/mdzensvaviz7cbvl9arpas_tnps.png\"\/><\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b IDE \u043f\u043e\u0434 \u0441\u0432\u043e\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u041e\u0421:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/cw\/f8\/mb\/cwf8mbuezf1vb5izvmlp9ouz5e8.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/cw\/f8\/mb\/cwf8mbuezf1vb5izvmlp9ouz5e8.png\"\/><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 Mac, \u043a\u0430\u043a \u0443 \u043c\u0435\u043d\u044f, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/-1\/p9\/zv\/-1p9zvsavv8bocx-pfhv7d04ir0.png\" width=\"360\" data-src=\"https:\/\/habrastorage.org\/webt\/-1\/p9\/zv\/-1p9zvsavv8bocx-pfhv7d04ir0.png\"\/><\/p>\n<p>  \u041d\u0435 \u043f\u0443\u0433\u0430\u0439\u0442\u0435\u0441\u044c. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e Mac OS \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0438\u0437 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430. \u0414\u043b\u044f \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u0432\u0435\u0434\u0435\u043c \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:  <\/p>\n<pre><code class=\"swift\">sudo xattr -rd com.apple.quarantine \/Applications\/GIGA\\ IDE\\ CE\\ 2024.1.1.app<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c IDE. \u0422.\u043a GigaCode IDE \u0431\u0430\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 PyChar \u0438 JB Idea, \u0442\u043e \u043e\u043a\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/4p\/62\/pf\/4p62pf6-cu44rwjcxjryotozhoe.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/4p\/62\/pf\/4p62pf6-cu44rwjcxjryotozhoe.png\"\/><br \/>  \u0411\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0442\u0435\u043c\u0438 \u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u0445, \u0447\u0442\u043e \u0432 Intelij Idea:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/yt\/om\/pa\/ytompa-3gls9qsk9q_rsez7y-f0.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/yt\/om\/pa\/ytompa-3gls9qsk9q_rsez7y-f0.png\"\/><\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 Android \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c GigaChat AI-\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u0430 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u043a Android. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c <a href=\"https:\/\/gigacode.ru\/#\/#IDEs\" rel=\"nofollow noopener noreferrer\">\u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/a> \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u0443\u044e IDE.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/7v\/t8\/ga\/7vt8gaz7fm31zpktd3uhl7zqbha.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/7v\/t8\/ga\/7vt8gaz7fm31zpktd3uhl7zqbha.png\"\/><br \/>  \u041f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043d\u0430 GitVerse. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043d\u043e\u0432\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0421\u0431\u0435\u0440ID. <br \/>  \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0439\u0442\u0438 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Android Studio \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u043c\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 GigaCode:  <\/p>\n<pre><code class=\"swift\"> https:\/\/gigacode.ru\/jarvis\/updatePlugins.xml <\/code><\/pre>\n<p>  \u0412\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435 Marketplace \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 GigaCode \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u00abInstall\u00bb:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/-f\/ps\/of\/-fpsofk5tt7s5g5w5_bhsbicu7o.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/-f\/ps\/of\/-fpsofk5tt7s5g5w5_bhsbicu7o.png\"\/><br \/>  \u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c IDE \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c, \u043b\u0438\u0431\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u0430\u0448 \u043f\u043b\u0430\u0433\u0438\u043d \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d.<br \/>  \u0412\u043d\u0438\u0437\u0443 \u043e\u043a\u043d\u0430 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043a\u043d\u043e\u043f\u043a\u0430 GigaCode. \u041d\u0430\u0436\u0430\u0432 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u0441\u043d\u043e\u0432\u0430 \u043d\u0430 GitVerse, \u0433\u0434\u0435 \u043d\u0430\u0448 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 IDE \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/fx\/9m\/4i\/fx9m4iuqnltlph81zbggk_ejgfw.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/fx\/9m\/4i\/fx9m4iuqnltlph81zbggk_ejgfw.png\"\/><br \/>  \u0421\u043d\u043e\u0432\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c IDE. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c AI-\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u0430 Giga \u0432 \u0440\u0430\u0431\u043e\u0442\u0435.<br \/>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043e\u043d \u0443\u043c\u0435\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c. \u0422\u0430\u043f\u0430\u0435\u043c \u043d\u0430 \u0438\u043a\u043e\u043d\u043a\u0443 \u0447\u0430\u0442\u0430 \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/qe\/29\/wu\/qe29wuxdcyxdf_wd7izwgkxxzm4.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/qe\/29\/wu\/qe29wuxdcyxdf_wd7izwgkxxzm4.png\"\/><br \/>  \u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 Gemini AI, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0432 Koala Preview \u0432\u0435\u0440\u0441\u0438\u044e Android Studio. \u0422\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437 \u0432\u043f\u043d, \u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 Gemini \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u043f\u043e\u0434 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 IDE, \u0430 \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u044e\u0447\u0430.<\/p>\n<p>  \u0427\u0442\u043e \u0436\u0435 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f: <br \/>   \u2014 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0435\u0441\u0442 \u0434\u043b\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u043a\u043e\u0434\u0430<br \/>   \u2014 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430<br \/>   \u2014 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e.<br \/>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0432\u0435\u0441\u0442\u0438 \u0432 \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430.<\/p>\n<p>  \u0427\u0442\u043e \u0436. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0430.<br \/>  \u0418\u0442\u0430\u043a, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u043e\u0434:  <\/p>\n<pre><code class=\"kotlin\">class MainTestConfig : IConfigurator {      override fun create(view: IView): IInteractor? {         val presenter = MainTestPresenter(view = view)         val router = MainTestRouter(view = view)         val interactor: IMainTestInteractor = MainTestInteractor(             presenter = presenter,             router = router         )          view.interactor = interactor          return interactor     } } <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u0435\u0433\u043e \u0438 \u0432\u043e\u0431\u044c\u0435\u043c \u0432 \u043f\u043e\u043b\u0435 \u0447\u0430\u0442\u0430 \/test. \u041d\u0430\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u044d\u043c\u043f\u043b \u0442\u0435\u0441\u0442\u0430:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/uu\/mh\/a3\/uumha30uetivqesd5nynd9hdscq.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/uu\/mh\/a3\/uumha30uetivqesd5nynd9hdscq.png\"\/><\/p>\n<p>  \u041f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0436\u0435 \u0431\u043b\u043e\u043a\u0430 \u043a\u043e\u0434\u0430 \u0441\u044d\u043c\u043f\u043b \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u0434\u0430\u0436\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u0445\u043e\u0436\u0438\u043c \u043d\u0430 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0441 \u0438\u043c\u043f\u043e\u0440\u0442\u0430\u043c\u0438:  <\/p>\n<pre><code class=\"kotlin\">import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.Mockito.verify import org.mockito.junit.MockitoJUnitRunner  @RunWith(MockitoJUnitRunner::class) class MainTestConfigTest {      @Mock     lateinit var view: IView      lateinit var config: MainTestConfig      @Before     fun setup() {         config = MainTestConfig()     }      @Test     fun testCreate() {         val interactor = config.create(view)          assert(interactor is MainTestInteractor)     }      @Test     fun testCreate_Presenter() {         val interactor = config.create(view)          verify(view).interactor = interactor          assert(view.interactor is MainTestInteractor)     }      @Test     fun testCreate_Presenter_Router() {         val interactor = config.create(view)          assert(view.interactor is MainTestInteractor)         assert((view.interactor as MainTestInteractor).presenter is MainTestPresenter)         assert((view.interactor as MainTestInteractor).router is MainTestRouter)     } }  <\/code><\/pre>\n<p>  \u0411\u043e\u043d\u0443\u0441\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/sn\/qo\/se\/snqosenrc0ifrsc6zk_rucxwdfu.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/sn\/qo\/se\/snqosenrc0ifrsc6zk_rucxwdfu.png\"\/><\/p>\n<p>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0436\u0435 \u0431\u043b\u043e\u043a\u0430 \u043a\u043e\u0434\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b \/doc:  <\/p>\n<pre><code class=\"kotlin\">class MainTestConfig : IConfigurator {      \/**      * This method creates an instance of `MainTestInteractor` and sets it on the `view`.      *      * @param view The view to set the interactor on.      * @return The created `MainTestInteractor` instance.      *\/     override fun create(view: IView): IInteractor? {         \/\/ Create an instance of MainTestPresenter and MainTestRouter.         val presenter = MainTestPresenter(view = view)         val router = MainTestRouter(view = view)          \/\/ Create an instance of MainTestInteractor and set it on the view.         val interactor: IMainTestInter <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0442\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e.<br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043d\u0430 \u0441\u044d\u043c\u043f\u043b\u044b \u0434\u043b\u044f Android. \u041f\u043e\u043f\u0440\u043e\u0441\u0438\u043c \u043d\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c composable \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f Image \u0441 \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u043c:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/2n\/9c\/_x\/2n9c_xi9phbc2ulkesqvsmel4fm.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/2n\/9c\/_x\/2n9c_xi9phbc2ulkesqvsmel4fm.png\"\/><br \/>  \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0432\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0439 \u043a\u043e\u0434:  <\/p>\n<pre><code class=\"kotlin\">@Composable fun ImagePlaceholder(     modifier: Modifier = Modifier,     contentDescription: String? = null,     placeholder: Painter = painterResource(id = R.drawable.ic_placeholder), ) {     Image(         painter = placeholder,         contentDescription = contentDescription,         contentScale = ContentScale.Crop,         modifier = modifier     ) } <\/code><\/pre>\n<p>  \u041f\u043e\u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430\u0448 \u043f\u0440\u043e\u043c\u043f\u0442: <b>Create a composable function for image placeholder. Also add all needed imports to support Material 3<\/b><br \/>  \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434, \u043d\u043e \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430\u043c\u0438 \u043f\u043e\u0434 Material3:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/24\/zi\/1b\/24zi1bqltvpj_sxv5yb5vyu7rs8.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/24\/zi\/1b\/24zi1bqltvpj_sxv5yb5vyu7rs8.png\"\/><br \/>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0412\u043e\u0437\u044c\u043c\u0435\u043c Json \u0434\u043b\u044f SDUI \u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043c \u043d\u0430\u043c \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c:  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0434\u043b\u0438\u043d\u043d\u044b\u0439 json<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"json\">{             \"data\": [                 {                     \"type\": \"SCAFFOLD\",                     \"top_bar\": [                         {                             \"type\": \"CENTER_ALIGNED_TOP_APP_BAR\",                             \"children\": [                                 {                                     \"type\": \"TEXT\",                                     \"value\": \"Server Driven Ui\"                                 }                             ]                         }                     ],                     \"children\": [                         {                             \"type\": \"VERTICAL_LIST\",                             \"children\": [                                 {                                     \"type\": \"ROW\",                                     \"children\": [                                         {                                             \"type\": \"TEXT\",                                             \"value\": \"Hi 1\"                                         },                                         {                                             \"type\": \"IMAGE\",                                             \"value\": \"https:\/\/www.fonstola.ru\/images\/201510\/fonstola.ru_209312.jpg\"                                         }                                     ]                                 },                                 {                                     \"type\": \"ROW\",                                     \"children\": [                                         {                                             \"type\": \"TEXT\",                                             \"value\": \"Hi 2\"                                         },                                         {                                             \"type\": \"IMAGE\",                                             \"value\": \"https:\/\/fanibani.ru\/wp-content\/uploads\/2022\/12\/1617975830_18-p-kotyata-milie-i-pushistie-18.jpg\"                                         }                                     ]                                 },                                 {                                     \"type\": \"ROW\",                                     \"children\": [                                         {                                             \"type\": \"TEXT\",                                             \"value\": \"Hi 3\"                                         },                                         {                                             \"type\": \"IMAGE\",                                             \"value\": \"https:\/\/fanibani.ru\/wp-content\/uploads\/2022\/12\/pushistye-lapki-na-krasnom-barzate.jpg\"                                         }                                     ]                                 }                             ]                         }                     ]                 }             ]         }<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0415\u0441\u043b\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u0442\u0438\u043f\u0430: \u00abParse selected text to composable\u00bb, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0441 \u0441\u044d\u043c\u043f\u043b\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"kotlin\">@Composable fun Scaffold() {     val scaffold = remember { Scaffold() }     val topBar = remember { CenterAlignedTopAppBar() }     val text = remember { Text(\"Server Driven Ui\") }     val verticalList = remember { VerticalList() }     val row1 = remember { Row() }     val text1 = remember { Text(\"Hi 1\") }     val image1 = remember { Image(\"https:\/\/www.fonstola.ru\/images\/201510\/fonstola.ru_209312.jpg\") }     val row2 = remember { Row() }     val text2 = remember { Text(\"Hi 2\") }     val image2 = remember { Image(\"https:\/\/fanibani.ru\/wp-content\/uploads\/2022\/12\/1617975830_18-p-kotyata-milie-i-pushistie-18.jpg\") }     val row3 = remember { Row() }     val text3 = remember { Text(\"Hi 3\") }     val image3 = remember { Image(\"https:\/\/fanibani.ru\/wp-content\/uploads\/2022\/12\/pushistye-lapki-na-krasnom-barzate.jpg\") }      Scaffold(topBar = { topBar { text } }) {         verticalList {             row1 {                 text1                 image1             }             row2 {                 text2                 image2             }             row3 {                 text3                 image3             }         }     } } <\/code><\/pre>\n<p>  \u0414\u0430, \u043e\u043d \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439, \u0441 \u043f\u0440\u0435\u0442\u0435\u043d\u0437\u0438\u0435\u0439 \u043d\u0430 DSL \u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439. \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0435\u0439:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/zf\/qn\/bk\/zfqnbkcwvwk3cgjme18lbr-a_sq.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/zf\/qn\/bk\/zfqnbkcwvwk3cgjme18lbr-a_sq.png\"\/> <br \/>  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/u3\/pc\/fg\/u3pcfgljpow3ut4y9xpg2r6ibzm.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/u3\/pc\/fg\/u3pcfgljpow3ut4y9xpg2r6ibzm.png\"\/><br \/>  \u0422\u0443\u0442 \u0443 \u043d\u0430\u0441 \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u044b, \u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u0434\u0430\u0436\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u044d\u043a\u0440\u0430\u043d\u0430:  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"kotlin\">import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material3.CenterAlignedTopAppBar import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp import coil.compose.rememberImagePainter import kotlinx.serialization.json.Json  @Composable fun ImagePlaceholder(     modifier: Modifier = Modifier,     contentDescription: String? = null,     imageUrl: String? = null, ) {     val painter = rememberImagePainter(         data = imageUrl,         builder = {             crossfade(true)         }     )      Image(         painter = painter,         contentDescription = contentDescription,         contentScale = ContentScale.Crop,         modifier = modifier     ) }  @OptIn(ExperimentalMaterial3Api::class) @Composable fun ServerDrivenUi(json: String) {     val ui = Json.decodeFromString&lt;Ui>(json)     Scaffold(         topBar = {             CenterAlignedTopAppBar(                 title = { Text(text = ui.topBar.title) }             )         }     ) { padding ->         LazyColumn(             modifier = Modifier.padding(padding)         ) {             items(ui.children) { child ->                 Row {                     Text(text = child.text)                     ImagePlaceholder(                         modifier = Modifier                             .fillMaxWidth()                             .height(200.dp),                         contentDescription = \"Placeholder image\",                         imageUrl = child.image                     )                 }             }         }     } }  data class Ui(     val topBar: TopBar,     val children: List&lt;Child> )  data class TopBar(     val title: String )  data class Child(     val text: String,     val image: String? ) <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0430\u043c\u0438 \u0432 gradle Kotlinx.serialization \u0438 Coil (\u0432\u0435\u0440\u0441\u0438\u044e Jetpack Compose). <\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u0432\u044b\u0432\u0435\u043b\u043e \u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0441 \u043a\u0440\u0430\u0442\u043a\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/l7\/oc\/-o\/l7oc-or4qygzq759t2whqxnkkws.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/l7\/oc\/-o\/l7oc-or4qygzq759t2whqxnkkws.png\"\/><\/p>\n<p>  \u0422\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u043e \u043d\u0430\u043c \u043d\u0435\u0432\u0435\u0440\u043d\u043e, \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0414\u0443\u0431\u043b\u044c \u0435\u0449\u0435 \u0440\u0430\u0437. \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u0438 \u0438\u043c\u0435\u043d\u0430 \u043f\u043e\u043b\u0435\u0439:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/zw\/ex\/vu\/zwexvuqfjf0gw5lsbnf1_9btywe.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/zw\/ex\/vu\/zwexvuqfjf0gw5lsbnf1_9btywe.png\"\/><\/p>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0435\u0440\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0445:  <\/p>\n<pre><code class=\"kotlin\">import kotlinx.serialization.Serializable  @Serializable data class ServerDrivenUi(     val data: List&lt;Data> )  @Serializable data class Data(     val type: String,     @SerialName(\"top_bar\")     val topBar: List&lt;TopBar>,     val children: List&lt;Children> )  @Serializable data class TopBar(     val type: String,     val children: List&lt;Children> )  @Serializable data class Children(     val type: String,     val value: String? = null,     val children: List&lt;Children>? = null ) <\/code><\/pre>\n<p>  \u0423\u0436\u0435 \u0431\u043b\u0438\u0436\u0435, \u043d\u043e \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0442\u043e. \u041d\u0430\u043c \u0435\u0449\u0435 \u043d\u0443\u0436\u0435\u043d enum \u0442\u0438\u043f\u043e\u0432, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u043c\u0435\u0441\u0442\u0435.<br \/>  \u0427\u0435\u0440\u0435\u0437 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f AI \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043b\u0435\u043d\u0438\u0442\u044c\u0441\u044f:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/in\/uj\/mi\/inujmit7qhx9t_pxqiu6xohe_xi.png\" width=\"480\" data-src=\"https:\/\/habrastorage.org\/webt\/in\/uj\/mi\/inujmit7qhx9t_pxqiu6xohe_xi.png\"\/><br \/>  \u041f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u0441\u043d\u0438\u0436\u0430\u0435\u0442\u0441\u044f, \u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0411\u0443\u0434\u0442\u043e \u0431\u044b AI \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0432\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u043c. <br \/>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u043e\u0434 \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c \u0438\u0437 \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/9w\/wt\/wx\/9wwtwx67ojx0c05pt9ajc3tihoi.png\" width=\"360\" data-src=\"https:\/\/habrastorage.org\/webt\/9w\/wt\/wx\/9wwtwx67ojx0c05pt9ajc3tihoi.png\"\/><br \/>  \u0412\u0440\u0435\u043c\u0435\u043d\u0438 \u0443\u0448\u043b\u043e \u0443 \u043c\u0435\u043d\u044f \u043c\u043d\u043e\u0433\u043e. \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443 \u043c\u0435\u043d\u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u044e\u0434\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443. <br \/>  \u0427\u0435\u0440\u0435\u0437 30 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e AI \u0443\u0441\u0442\u0430\u043b, \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0441\u043b\u0443\u0448\u0430\u0442\u044c\u0441\u044f \u0438 \u0441\u0442\u0430\u043b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u0442\u043e <a href=\"https:\/\/gist.github.com\/anioutkazharkova\/e1fa1ba094745d3f9fddbef0344a013d\" rel=\"nofollow noopener noreferrer\">\u043a\u043e\u0434\u043e\u0432\u0443\u044e \u043a\u0430\u0448\u0443.<\/a> \u0422\u0430\u043a\u0436\u0435 \u043e\u043d \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0443\u0447\u0438\u0442\u044c\u0441\u044f. <br \/>  \u0415\u0441\u043b\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u043c\u0438, \u0442\u043e Gemini \u043e\u043d \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0443\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043f\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0443. \u041e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u044f\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Gemini \u0431\u0443\u0434\u0435\u0442 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439.<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435\u043f\u043b\u043e\u0445\u043e. \u041d\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432 \u043d\u0435 \u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445 \u0438 \u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442\u0435. \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447.<br \/>  \u041d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u044e IDE (\u043f\u0443\u0441\u0442\u044c \u0438 \u043d\u0430 \u0431\u0430\u0437\u0435 JB IDEA, \u0445\u043e\u0442\u044f \u043c\u043d\u043e\u0433\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0440\u043e\u0436\u0434\u0430\u043b\u0438\u0441\u044c \u0438\u0437 \u0444\u043e\u0440\u043a\u043e\u0432, \u0430 \u043d\u0435 \u0441 \u043d\u0443\u043b\u044f) \u0442\u043e\u0447\u043d\u043e \u0441\u0442\u043e\u0438\u0442.<\/p>\n<p>  <a href=\"https:\/\/gigacode.ru\/\" rel=\"nofollow noopener noreferrer\">gigacode.ru<\/a><br \/>  \u0418 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430 \u0442\u0435\u043c\u0443:<br \/>  <a href=\"https:\/\/habr.com\/ru\/companies\/sberbank\/articles\/816107\/\">habr.com\/ru\/companies\/sberbank\/articles\/816107<\/a><\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/825470\/\"> https:\/\/habr.com\/ru\/articles\/825470\/<\/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\/w1560\/webt\/t6\/fq\/i5\/t6fqi560_bxhtrskcx1rjyuu53e.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/t6\/fq\/i5\/t6fqi560_bxhtrskcx1rjyuu53e.png\"\/><\/p>\n<p>  \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421 \u0432\u0430\u043c\u0438 \u0410\u043d\u043d\u0430 \u0416\u0430\u0440\u043a\u043e\u0432\u0430, \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0433\u0440\u0443\u043f\u043f\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Usetech. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0432\u0430\u043c \u043f\u0440\u0438\u043d\u0435\u0441\u043b\u0430 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b. 27 \u0438\u044e\u043d\u044f 2024 \u0433\u043e\u0434\u0430 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043e\u0442\u043a\u0440\u044b\u043b\u0438 \u0438 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u043e\u0432\u0430\u043b\u0438 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0443\u044e \u0441\u0440\u0435\u0434\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 Giga IDE \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u0418\u0418-\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043e\u043c \u043e\u0442 \u00ab\u0421\u0431\u0435\u0440\u0430\u00bb \u0438 \u00ab\u0421\u0431\u0435\u0440\u0422\u0435\u0445\u0430\u00bb. \u0417\u0430\u044f\u0432\u043b\u0435\u043d\u043e, \u0447\u0442\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 \u0441\u0440\u0435\u0434\u0443 \u0418\u0418-\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442 GigaCode \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0446\u0438\u043a\u043b\u043e\u0432 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u043d\u0430 25% \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0410\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442 \u043a\u043e\u0434\u0430, \u0442\u0430\u043a \u0438 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u044f\u0437\u044b\u043a. \u0422\u0430\u043a\u0436\u0435 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434.<\/p>\n<p>  \u041c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c GigaCode AI \u043a \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435.<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e <a href=\"https:\/\/gigacode.ru\/#\/#chat\" rel=\"nofollow noopener noreferrer\">IDE GigaCode <\/a>. \u041d\u0430\u043c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u0440\u0435\u0441\u0443\u0440\u0441 GitVerse (\u0430\u043d\u0430\u043b\u043e\u0433\u0438 GitHub, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 Git), \u0433\u0434\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0421\u0431\u0435\u0440ID:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/9w\/o0\/dl\/9wo0dlwhuiakk2siizixbv4eau0.png\" width=\"720\" data-src=\"https:\/\/habrastorage.org\/webt\/9w\/o0\/dl\/9wo0dlwhuiakk2siizixbv4eau0.png\"\/>  <\/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-390044","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/390044","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=390044"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/390044\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=390044"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=390044"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=390044"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}