{"id":322142,"date":"2021-04-26T21:00:59","date_gmt":"2021-04-26T21:00:59","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=322142"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=322142","title":{"rendered":"\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0438 \u0432\u044b\u0437\u043e\u0432 \u043b\u044f\u043c\u0431\u0434 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 docker\/deploy\/\u2026"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0443 \u043c\u0435\u043d\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441, \u0430 \u043a\u0430\u043a \u044f \u0435\u0433\u043e \u0431\u0443\u0434\u0443 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 jar\/war\/docker \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430, \u0430 \u043f\u043e\u0442\u043e\u043c \u0435\u0449\u0435 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0438 \u0435\u0449\u0435 \u043c\u043d\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0435\u043b\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439 \u0447\u0442\u043e\u0431 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0441\u0443\u043d\u0443\u0442\u044c \u043a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<p>\u0411\u044b\u043b\u043e \u0431\u044b \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u043e\u0434, \u043a\u0430\u043a \u043b\u044f\u043c\u0431\u0434\u0443, \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043b\u044f\u043c\u0431\u0434\u0443 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0442\u0430\u043a \u0436\u0435 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0435\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c.<\/p>\n<p>\u041d\u043e \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043c\u044b\u0441\u043b\u044c \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u043e\u0449\u0435, \u0438 \u0443 \u043c\u0435\u043d\u044f \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<pre><code class=\"java\">1 | var query = TcpQuery 2 |    .create(IEnv.class).host(\"myserver.com\").port(9988) 3 |      .build(); 4 | 5 |  query.apply(  6 |      env -&gt; env.processes().stream().filter( 7 |          p -&gt; p.getName().contains(\"java\") 8 |      ) 9 |      .collect(Collectors.toList()) 10|  ).forEach(System.out::println);<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430 java,<\/p>\n<ul>\n<li>\n<p>\u0421\u0442\u0440\u043e\u043a\u0438 \u0441 1 \u043f\u043e 5 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438 10 &#8212; \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435<\/p>\n<\/li>\n<li>\n<p>\u0410 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 6 \u043f\u043e 9 (\u0442\u0435\u043b\u043e \u043b\u044f\u043c\u0431\u0434\u044b env-&gt;&#8230;) \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u044d\u0442\u043e \u043d\u0435 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434, \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043a\u043e\u0434 \u043d\u0430 Java (11).<\/p>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u0434 \u0441\u0442\u0440\u043e\u043a \u0441 6 \u043f\u043e 9 (\u0441\u0430\u043c\u043e \u0442\u0435\u043b\u043e \u043b\u044f\u043c\u0431\u0434\u044b) \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043f\u0440\u0438 \u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u043e \u044d\u0442\u043e\u043c \u043a\u0443\u0441\u043a\u0435 \u043a\u043e\u0434\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u043e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0443 \u0441\u0435\u0431\u044f, \u0438 \u043e\u0442\u0434\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0443 &#8212; \u0430 \u044f \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u043e\u0433\u043e deploy, \u043d\u0435 \u0432\u044b\u0445\u043e\u0434\u044f \u0438\u0437 IDE (Idea\/Eclipse\/etc&#8230;).<\/p>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Serializable Lambda \u0432 Java, \u0438 \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0431\u0430\u0439\u0442-\u043a\u043e\u0434 \u0442\u0430\u043a\u0438\u0445 \u043b\u044f\u043c\u0431\u0434 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0442.\u0435. \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e <strong>\u0432 \u0442\u0435\u043e\u0440\u0438\u0438<\/strong> \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0445 \u0441\u0445\u0435\u043c deploy \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 api (\u044d\u0442\u043e \u043c\u043e\u044f \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u044f).<\/p>\n<hr>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 IEnv:<\/p>\n<pre><code class=\"java\">public interface IEnv { \tList&lt;OsProc&gt; processes(); }<\/code><\/pre>\n<p>\u041a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432<\/p>\n<pre><code class=\"java\">public class OsProc implements Serializable { \tpublic Optional&lt;Integer&gt; getPpid(){ return ... } \tpublic int getPid(){ return ... } \tpublic void setPid(int pid){ ... } \tpublic String getName(){ return ... } \tpublic Optional&lt;String&gt; getCmdline(){ return ... } }<\/code><\/pre>\n<p>\u0418 \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u044f \u043f\u0435\u0440\u0435\u0434\u0430\u044e \u043b\u044f\u043c\u0431\u0434\u0443 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440<\/p>\n<pre><code class=\"java\">var query = TcpQuery    .create(IEnv.class).host(\"myserver.com\").port(9988)  \t.build();    query.apply(  \tenv -&gt; env.processes().stream().filter(      \tp -&gt; p.getName().contains(\"java\")  \t)  \t.collect(Collectors.toList())  ).forEach(System.out::println);<\/code><\/pre>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 &#8212; \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 ?<\/h2>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/607\/663\/4f8\/6076634f8eade86b1262c1d52e88a66a.png\" width=\"596\" height=\"636\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Java<\/p>\n<ol>\n<li>\n<p>\u041c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0430\u0431\u043e\u0440 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c Client.java<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434 &#8212; \u0444\u0430\u0439\u043b Client.class<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 query.apply() &#8212; \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043b\u044f\u043c\u0431\u0434\u0443 env -&gt; env.proc&#8230;toList())<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f query.apply():<\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043b\u044f\u043c\u0431\u0434\u0443<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043b\u044f\u043c\u0431\u0434\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Client) \u0438 \u043c\u0435\u0442\u043e\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 lambda1) \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u043b\u044f\u043c\u0431\u0434\u0443<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u044b\u0441\u043a\u0438\u0432\u0430\u0435\u0442 \u0441\u0440\u0435\u0434\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430 (Client.class) \u0438 \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043b\u044f\u043c\u0431\u0434\u044b \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440<\/p>\n<ol>\n<li>\n<p>\u0421\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434 \u043b\u044f\u043c\u0431\u0434\u044b<\/p>\n<\/li>\n<li>\n<p>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u043b\u0430\u0441\u0441 \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043b\u044f\u043c\u0431\u0434\u0435<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043c\u0435\u0442\u043e\u0434\u0430 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 \u0435\u0433\u043e \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/p>\n<ol>\n<li>\n<p>\u0421\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u0430\u043d\u0435\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\/\u043c\u0435\u0442\u043e\u0434\/\u043b\u044f\u043c\u0431\u0434\u0443<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0433\u043e \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 query.apply()<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0431\u0435\u0437 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 IDE \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432.<\/p>\n<h2>\u041a\u0430\u043a \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f? <\/h2>\n<p>\u0427\u0442\u043e \u0431\u044b \u0441 \u044d\u0442\u0438\u043c \u043f\u043e \u0438\u0433\u0440\u0430\u0442\u044c, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u043c\u043e\u0438\u043c pet project-\u043e\u043c:<\/p>\n<p>v 1.0 <a href=\"https:\/\/github.com\/gochaorg\/trambda\/releases\/tag\/1.0\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/gochaorg\/trambda\/releases\/tag\/1.0<\/a><\/p>\n<p>maven<\/p>\n<pre><code class=\"xml\">&lt;dependency&gt;   &lt;groupId&gt;xyz.cofe&lt;\/groupId&gt;   &lt;artifactId&gt;trambda&lt;\/artifactId&gt;   &lt;version&gt;1.0&lt;\/version&gt;   &lt;type&gt;pom&lt;\/type&gt; &lt;\/dependency&gt;  &lt;dependency&gt;   &lt;groupId&gt;xyz.cofe&lt;\/groupId&gt;   &lt;artifactId&gt;trambda-core&lt;\/artifactId&gt;   &lt;version&gt;1.0&lt;\/version&gt; &lt;\/dependency&gt;  &lt;dependency&gt;   &lt;groupId&gt;xyz.cofe&lt;\/groupId&gt;   &lt;artifactId&gt;trambda-tcp&lt;\/artifactId&gt;   &lt;version&gt;1.0&lt;\/version&gt; &lt;\/dependency&gt;<\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0443 \u0432\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043a\u0430\u043a\u0430\u044f \u043d\u0438\u0431\u0443\u0434\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0441\u0435\u0442\u0438 (TCP)<\/p>\n<p>\u0412 \u043c\u043e\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f <a href=\"https:\/\/github.com\/gochaorg\/trambda\/tree\/abce53ed079c61bd348486a3cbe4cde595de3394\/trambda-demo\/tr-demo-api\/src\/main\/java\/xyz\/cofe\/trambda\/demo\/api\" rel=\"noopener noreferrer nofollow\"><u>\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/u><\/a>, \u0432 \u043d\u0435\u0439 \u0432\u0441\u0435\u0433\u043e \u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<ul>\n<li>\n<p>OsProc.java &#8212; \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u041e\u0421 (\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0432\u044b\u0448\u0435)<\/p>\n<\/li>\n<li>\n<p>IEnv.java &#8212; \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0434\u043b\u044f \u041e\u0421 (\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0432\u044b\u0448\u0435)<\/p>\n<\/li>\n<li>\n<p>LinuxEnv.java &#8212; \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0434\u043b\u044f \u041e\u0421 Linux &#8212; \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f IEnv<\/p>\n<\/li>\n<\/ul>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"java\">package xyz.cofe.trambda.demo.api;  import org.junit.jupiter.api.Test;  public class LinuxEnvTest {    @Test    public void test(){        var env = new LinuxEnv();        env.processes().stream()            .filter(p-&gt;p.getName().equalsIgnoreCase(\"java\"))            .forEach(System.out::println);    } }<\/code><\/pre>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/50c\/4c1\/43f\/50c4c143f2f6015d0a5f8a53f64e11fa.png\" width=\"512\" height=\"211\"><figcaption><\/figcaption><\/figure>\n<p>LinuxEnv &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043b\u0430\u0441\u0441, \u043e\u043d \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0442\u0430\u043a:<\/p>\n<pre><code class=\"java\">package xyz.cofe.trambda.demo.api;  import java.util.ArrayList; import java.util.List; import xyz.cofe.io.fs.File;  public class LinuxEnv implements IEnv {    @Override    public List&lt;OsProc&gt; processes(){        ArrayList&lt;OsProc&gt; procs = new ArrayList&lt;&gt;();        File procDir = new File(\"\/proc\");        procDir.dirList().stream()            .filter( d -&gt; d.getName().matches(\"\\\\d+\") &amp;&amp; d.isDir() )            .map(OsProc::linuxProc)            .forEach(procs::add);        return procs;    } }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0435\u0433\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u0435\u043d, \u043e\u043d \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \/proc \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u041e\u0421, (\u0434\u043b\u044f Linux \u0432\u0441\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\/\u043f\u043e\u0434\u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \/proc)<\/p>\n<p>\u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c <a href=\"https:\/\/github.com\/gochaorg\/trambda\/tree\/master\/trambda-demo\/tr-demo-api\" rel=\"noopener noreferrer nofollow\"><u>\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443<\/u><\/a> (\u0438\u043b\u0438 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0441\u0432\u043e\u044e\u2026)<\/p>\n<p>\u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 (git commit 67ec260)<\/p>\n<pre><code class=\"bash\">&gt; git clone https:\/\/github.com\/gochaorg\/trambda.git \u041a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u00abtrambda\u00bb... remote: Enumerating objects: 978, done. remote: Counting objects: 100% (978\/978), done. remote: Compressing objects: 100% (464\/464), done. remote: Total 978 (delta 308), reused 862 (delta 195), pack-reused 0 \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432: 100% (978\/978), 715.70 KiB | 559.00 KiB\/s, \u0433\u043e\u0442\u043e\u0432\u043e. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439: 100% (308\/308), \u0433\u043e\u0442\u043e\u0432\u043e.<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438<\/p>\n<pre><code class=\"bash\">user@user-Modern-14-A10RB:22:10:35:~\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438\/sample-tr: &gt; cd trambda\/trambda-demo\/tr-demo-api\/ user@user-Modern-14-A10RB:22:10:49:~\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438\/sample-tr\/trambda\/trambda-demo\/tr-demo-api: &gt; mvn clean package install ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  13.933 s [INFO] Finished at: 2021-04-18T22:11:11+05:00 [INFO] ------------------------------------------------------------------------<\/code><\/pre>\n<p>\u0412 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 target \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0444\u0430\u0439\u043b jar \u0441 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439<\/p>\n<pre><code class=\"bash\">user@user-Modern-14-A10RB:22:13:13:~\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438\/sample-tr\/trambda\/trambda-demo\/tr-demo-api: &gt; ll target\/ \u0438\u0442\u043e\u0433\u043e 48 drwxrwxr-x 10 user user 4096 \u0430\u043f\u0440 18 22:11 .\/ drwxrwxr-x  4 user user 4096 \u0430\u043f\u0440 18 22:11 ..\/ drwxrwxr-x  3 user user 4096 \u0430\u043f\u0440 18 22:11 classes\/ drwxrwxr-x  3 user user 4096 \u0430\u043f\u0440 18 22:11 generated-sources\/ drwxrwxr-x  3 user user 4096 \u0430\u043f\u0440 18 22:11 generated-test-sources\/ drwxrwxr-x  2 user user 4096 \u0430\u043f\u0440 18 22:11 maven-archiver\/ drwxrwxr-x  3 user user 4096 \u0430\u043f\u0440 18 22:11 maven-status\/ drwxrwxr-x  4 user user 4096 \u0430\u043f\u0440 18 22:11 site\/ drwxrwxr-x  2 user user 4096 \u0430\u043f\u0440 18 22:11 surefire-reports\/ drwxrwxr-x  3 user user 4096 \u0430\u043f\u0440 18 22:11 test-classes\/ -rw-rw-r--  1 user user 6337 \u0430\u043f\u0440 18 22:11 tr-demo-api-1.0-SNAPSHOT.jar<\/code><\/pre>\n<h2>\u0417\u0430\u043f\u0443\u0441\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u0433\u0434\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043e\u0431\u0440\u0430\u043d\u0430 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 github \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0430\u0440\u0445\u0438\u0432<\/p>\n<pre><code class=\"bash\">user@user-Modern-14-A10RB:22:37:25:~\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438\/sample-tr: &gt; wget https:\/\/github.com\/gochaorg\/trambda\/releases\/download\/1.0\/trambda-tcp-serv-cli.zip --2021-04-18 22:37:31--  https:\/\/github.com\/gochaorg\/trambda\/releases\/download\/1.0\/trambda-tcp-serv-cli.zip \u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442\u0441\u044f github.com (github.com)... 140.82.121.4 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a github.com (github.com)|140.82.121.4|:443... \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e. HTTP-\u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d. \u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043e\u0442\u0432\u0435\u0442\u0430... 302 Found \u0410\u0434\u0440\u0435\u0441: https:\/\/github-releases.githubusercontent.com\/350075998\/47380d00-9b40-11eb-90a4-4e353f42e67c?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20210418%2Fus-east-1%2Fs3%2Faws4_request&amp;X-Amz-Date=20210418T173731Z&amp;X-Amz-Expires=300&amp;X-Amz-Signature=97ade1f58bfbe1eaa320805179987e8c4df730b9f5eddf24c05662fb676caafe&amp;X-Amz-SignedHeaders=host&amp;actor_id=0&amp;key_id=0&amp;repo_id=350075998&amp;response-content-disposition=attachment%3B%20filename%3Dtrambda-tcp-serv-cli.zip&amp;response-content-type=application%2Foctet-stream [\u043f\u0435\u0440\u0435\u0445\u043e\u0434] --2021-04-18 22:37:31--  https:\/\/github-releases.githubusercontent.com\/350075998\/47380d00-9b40-11eb-90a4-4e353f42e67c?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20210418%2Fus-east-1%2Fs3%2Faws4_request&amp;X-Amz-Date=20210418T173731Z&amp;X-Amz-Expires=300&amp;X-Amz-Signature=97ade1f58bfbe1eaa320805179987e8c4df730b9f5eddf24c05662fb676caafe&amp;X-Amz-SignedHeaders=host&amp;actor_id=0&amp;key_id=0&amp;repo_id=350075998&amp;response-content-disposition=attachment%3B%20filename%3Dtrambda-tcp-serv-cli.zip&amp;response-content-type=application%2Foctet-stream \u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442\u0441\u044f github-releases.githubusercontent.com (github-releases.githubusercontent.com)... 185.199.111.154, 185.199.108.154, 185.199.109.154, ... \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a github-releases.githubusercontent.com (github-releases.githubusercontent.com)|185.199.111.154|:443... \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e. HTTP-\u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d. \u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043e\u0442\u0432\u0435\u0442\u0430... 200 OK \u0414\u043b\u0438\u043d\u0430: 12107487 (12M) [application\/octet-stream] \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432: \u00abtrambda-tcp-serv-cli.zip\u00bb  trambda-tcp-serv-cli.zip                                    100%[========================================================================================================================================&gt;]  11,55M  3,75MB\/s    \u0437\u0430 3,1s      2021-04-18 22:37:35 (3,75 MB\/s) - \u00abtrambda-tcp-serv-cli.zip\u00bb \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d [12107487\/12107487]  user@user-Modern-14-A10RB:22:37:35:~\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438\/sample-tr: &gt; ll \u0438\u0442\u043e\u0433\u043e 11836 drwxrwxr-x  3 user user     4096 \u0430\u043f\u0440 18 22:37 .\/ drwxr-xr-x 11 user user     4096 \u0430\u043f\u0440 18 22:00 ..\/ drwxrwxr-x 10 user user     4096 \u0430\u043f\u0440 18 22:10 trambda\/ -rw-rw-r--  1 user user 12107487 \u0430\u043f\u0440 12 03:36 trambda-tcp-serv-cli.zip user@user-Modern-14-A10RB:22:37:42:~\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438\/sample-tr: &gt; unzip trambda-tcp-serv-cli.zip  Archive:  trambda-tcp-serv-cli.zip    creating: trambda-tcp-serv-cli\/    creating: trambda-tcp-serv-cli\/jars\/   inflating: trambda-tcp-serv-cli\/jars\/asm-9.1.jar     inflating: trambda-tcp-serv-cli\/jars\/jline-2.14.6.jar     inflating: trambda-tcp-serv-cli\/jars\/iofun-1.0.jar     inflating: trambda-tcp-serv-cli\/jars\/groovy-swing-3.0.7.jar     inflating: trambda-tcp-serv-cli\/jars\/groovy-console-3.0.7.jar     inflating: trambda-tcp-serv-cli\/jars\/groovy-xml-3.0.7.jar     inflating: trambda-tcp-serv-cli\/jars\/trambda-tcp-serv-cli-1.0.jar     inflating: trambda-tcp-serv-cli\/jars\/ecolls-1.10.jar     inflating: trambda-tcp-serv-cli\/jars\/trambda-core-1.0.jar     inflating: trambda-tcp-serv-cli\/jars\/slf4j-api-1.7.25.jar     inflating: trambda-tcp-serv-cli\/jars\/asm-tree-9.1.jar     inflating: trambda-tcp-serv-cli\/jars\/asm-util-9.1.jar     inflating: trambda-tcp-serv-cli\/jars\/fs-1.2.jar     inflating: trambda-tcp-serv-cli\/jars\/logback-classic-1.2.3.jar     inflating: trambda-tcp-serv-cli\/jars\/trambda-tcp-1.0.jar     inflating: trambda-tcp-serv-cli\/jars\/groovy-groovysh-3.0.7.jar     inflating: trambda-tcp-serv-cli\/jars\/groovy-templates-3.0.7.jar     inflating: trambda-tcp-serv-cli\/jars\/asm-analysis-9.1.jar     inflating: trambda-tcp-serv-cli\/jars\/text-1.0.jar     inflating: trambda-tcp-serv-cli\/jars\/logback-core-1.2.3.jar     inflating: trambda-tcp-serv-cli\/jars\/groovy-3.0.7.jar     inflating: trambda-tcp-serv-cli\/jars\/cbuffer-1.3.jar      creating: trambda-tcp-serv-cli\/bin\/   inflating: trambda-tcp-serv-cli\/bin\/trambda-tcp-serv.bat     inflating: trambda-tcp-serv-cli\/bin\/trambda-tcp-serv   user@user-Modern-14-A10RB:22:37:50:~\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438\/sample-tr: &gt; rm trambda-tcp-serv-cli.zip <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043d\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 trambda-tcp-serv-cli\/jars<\/p>\n<pre><code class=\"bash\">ser@user-Modern-14-A10RB:22:40:47:~\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438\/sample-tr: &gt; cp -v trambda\/trambda-demo\/tr-demo-api\/target\/tr-demo-api-1.0-SNAPSHOT.jar trambda-tcp-serv-cli\/jars\/ 'trambda\/trambda-demo\/tr-demo-api\/target\/tr-demo-api-1.0-SNAPSHOT.jar' -&gt; 'trambda-tcp-serv-cli\/jars\/tr-demo-api-1.0-SNAPSHOT.jar'<\/code><\/pre>\n<p>\u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430, <a href=\"https:\/\/github.com\/gochaorg\/trambda\/blob\/67ec260db6c73f656e4f36e913216421fde9c398\/trambda-tcp-serv-cli\/src\/test\/samples\/sample-1.groovy\" rel=\"noopener noreferrer nofollow\"><u>\u0441\u043a\u0440\u0438\u043f\u0442<\/u><\/a> \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 groovy (\u043d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0439\u0442\u0435\u0441\u044c, \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c, \u0432\u0441\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u0433\u043e\u043b\u043e\u0439 Java)<\/p>\n<p>\u0412\u043e\u0437\u044c\u043c\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430: <\/p>\n<pre><code class=\"bash\">&gt; cat trambda\/trambda-tcp-serv-cli\/src\/test\/samples\/sample-1.groov<\/code><\/pre>\n<pre><code class=\"java\">\/\/ \u0421\u0435\u0440\u0432\u0438\u0441 xyz.cofe.trambda.demo.api.LinuxEnv  \/\/ \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 9988, \u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0441 \u043b\u044e\u0431\u043e\u0433\u043e IP app.service( \"0.0.0.0:9988\", new xyz.cofe.trambda.demo.api.LinuxEnv() ) {     daemon false     \/\/ \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438     security {         \/\/ \u041a\u0430\u043a\u0438\u0435 API\/\u041c\u0435\u0442\u043e\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0438\u0437\u0432\u043d\u0435         allow {             \/\/ method(\"System\") {             \/\/     methodOwner ==~ \/java.lang.System\/ &amp;&amp; methodName in ['gc']             \/\/ }             \/\/ field( \"System.out\" ) {             \/\/     fieldOwner ==~ \/java.lang.System\/ &amp;&amp; fieldName in ['out','in','err'] &amp;&amp; readAccess             \/\/ }             invoke( 'Java compiler' ){                 methodOwner ==~ \/java\\.lang\\.invoke\\.(LambdaMetafactory|StringConcatFactory)\/             }             invoke( 'Java collections' ){                 methodOwner ==~ \/java\\.util\\.(stream\\.(Stream|Collectors)|(List))\/             }             invoke( 'Java lang' ){                 methodOwner ==~ \/java\\.lang\\.String\/             }             invoke( 'Api '){                 methodOwner ==~ \/xyz\\.cofe\\.trambda\\.demo\\.api\\.(IEnv|OsProc)\/             }         }         \/\/ \u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 - \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u043c \u0432\u044b\u0437\u043e\u0432         deny {             any(\"ban all\")         }     } }<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440<\/p>\n<pre><code class=\"bash\">user@user-Modern-14-A10RB:22:56:08:~\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438\/sample-tr: &gt; bash .\/trambda-tcp-serv-cli\/bin\/trambda-tcp-serv -s trambda\/trambda-tcp-serv-cli\/src\/test\/samples\/sample-1.groovy # [main] INFO  x.c.t.tcp.serv.cli.TcpServerCLI - starting xyz.cofe.trambda.tcp.serv.cli.TcpServerCLI  # [main] INFO  x.c.t.tcp.serv.cli.TcpServerCLI - executeScript( \"trambda\/trambda-tcp-serv-cli\/src\/test\/samples\/sample-1.groovy\", UTF-8 )  # [main] INFO  x.c.t.tcp.serv.cli.TcpServerCLI - registry class xyz.cofe.trambda.demo.api.LinuxEnv on 0.0.0.0:9988  # [main] INFO  x.c.t.tcp.serv.cli.TcpServerCLI - starting service xyz.cofe.trambda.demo.api.LinuxEnv@55e7a35c on \/0.0.0.0:9988  # [main] DEBUG x.c.t.tcp.serv.cli.TcpServerCLI - create server socket  # [main] DEBUG x.c.t.tcp.serv.cli.TcpServerCLI - bind server socket \/0.0.0.0:9988  # [main] DEBUG x.c.t.tcp.serv.cli.TcpServerCLI - server started <\/code><\/pre>\n<p>\u0412\u0441\u0435, \u0441\u0435\u0440\u0432\u0435\u0440 \u0437\u0430\u043f\u0443\u0449\u0435\u043d, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f<\/p>\n<h2>\u0417\u0430\u043f\u0443\u0441\u043a \u043a\u043b\u0438\u0435\u043d\u0442\u0430<\/h2>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 (<a href=\"https:\/\/github.com\/gochaorg\/trambda\/blob\/67ec260db6c73f656e4f36e913216421fde9c398\/trambda-demo\/tr-demo-client\/src\/test\/java\/xyz\/cofe\/trambda\/demo\/client\/ClientTest.java\" rel=\"noopener noreferrer nofollow\"><u>ClientTest.java<\/u><\/a>)<\/p>\n<pre><code class=\"java\">package xyz.cofe.trambda.demo.client;  import java.util.stream.Collectors; import org.junit.jupiter.api.Test; import xyz.cofe.trambda.demo.api.IEnv; import xyz.cofe.trambda.tcp.TcpQuery;  public class ClientTest {    @Test    public void test01(){        var query = TcpQuery            .create(IEnv.class).host(\"localhost\").port(9988)            .build();         query.apply(            env -&gt; env.processes().stream().filter(p -&gt;                p.getName().contains(\"java\"))            .collect(Collectors.toList())        ).forEach(System.out::println);    } }<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043e\u043d \u0432\u044b\u0432\u0435\u0434\u0435\u0442, \u0447\u0430\u0441\u0442\u044c \u043b\u043e\u0433\u043e\u0432 \u044f \u043e\u043f\u0443\u0449\u0443 &#8212; \u0442.\u043a. \u0434\u043b\u044f \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u043d\u0438 \u043d\u0435 \u0432\u0430\u0436\u043d\u044b<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3a2\/c73\/6b8\/3a2c736b84e4bf4692702e284979301b.png\" width=\"601\" height=\"133\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d1a\/1ef\/ad8\/d1a1efad8d5212669585cd9caed5c80b.png\" width=\"598\" height=\"680\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/59c\/32d\/7b9\/59c32d7b998b229b6a7e110b937a4a9d.png\" width=\"580\" height=\"302\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/78c\/53a\/82b\/78c53a82b8199e19607e20e97b10541d.png\" width=\"609\" height=\"130\"><figcaption><\/figcaption><\/figure>\n<h2>\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 ?<\/h2>\n<p>\u0447\u0430\u0441\u0442\u044c \u043b\u043e\u0433\u043e\u0432 \u044f \u043e\u043f\u0443\u0449\u0443 &#8212; \u0442.\u043a. \u0434\u043b\u044f \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u043d\u0438 \u043d\u0435 \u0432\u0430\u0436\u043d\u044b<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/213\/385\/183\/21338518340e3b020a6c8ee8a98a3bac.png\" width=\"595\" height=\"648\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ca2\/1cc\/a41\/ca21cca411fc0ac748f27fb4b765b9d8.png\" width=\"607\" height=\"739\"><figcaption><\/figcaption><\/figure>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/h2>\n<p>\u0421\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u0447\u0435\u0440\u0435\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u044c \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"java\">\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 TCP \u0441\u043e\u043a\u0435\u0442\u0430 ServerSocket ssocket = new ServerSocket(port);  \/\/ \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0441\u043e\u043a\u0435\u0442 ssocket.setSoTimeout(1000*5);  \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440 server = new TcpServer&lt;IEnv&gt;(     \/\/ \u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u043e\u043a\u0435\u0442     ssocket,          \/\/ \u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438     s -&gt; new LinuxEnv(),          \/\/ \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c     SecurityFilters.create(s -&gt; {                  \/\/ \u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u0432\u044b\u0437\u043e\u0432\u044b \u0441\u0442\u0440\u043e\u0433\u043e - \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432          s.allow( a -&gt; {                          \/\/ \u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c\u044b\u0439 API \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430              a.invoke(\"demo api\", c-&gt;                 c.getOwner().matches(                     \"xyz\\\\.cofe\\\\.trambda\\\\.tcp\\\\.demo\\\\.([\\\\w\\\\d]+)\"));                          \/\/ \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u043c\u0438             a.invoke(\"java collections api\", c-&gt;c.getOwner().matches(                 \"java\\\\.util\\\\.(List)|java\\\\.util\\\\.stream\\\\.([\\\\w\\\\d]+)\"));                          \/\/ \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 Java \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438             a.invoke(\"java lang api\", c-&gt;                 c.getOwner().matches(\"java\\\\.lang\\\\.(String)\"));                          \/\/ \u041c\u0435\u0442\u043e\u0434\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Java             a.invoke(\"java compiler\", c-&gt;                 c.getOwner().matches(                     \"java\\\\.lang\\\\.invoke\\\\.(LambdaMetafactory|StringConcatFactory)\"));         });                  \/\/ \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u043c         s.deny().any(\"by default\");     }) );  \/\/ \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0447\u0442\u043e Thread \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043a\u0430\u043a \u0444\u043e\u043d\u043e\u0432\u044b\u0439 server.setDaemon(true);  \/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440 server.start();\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 TCP \u0441\u043e\u043a\u0435\u0442\u0430 ServerSocket ssocket = new ServerSocket(port);  \/\/ \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0441\u043e\u043a\u0435\u0442 ssocket.setSoTimeout(1000*5);<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u0432\u0440\u043e\u0434\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c, \u043d\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0439<\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u043c\u0435\u044e\u0442 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442, \u043d\u0435\u0436\u0435\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043f\u0438\u0441\u043a\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u044e\u0449\u0438\u0435, \u0442\u0430\u043a \u0438 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430<\/p>\n<\/li>\n<li>\n<p>Java \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442&nbsp;<\/p>\n<ul>\n<li>\n<p>\u0432\u044b\u0437\u043e\u0432\u044b LambdaMetafactory \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043b\u044f\u043c\u0431\u0434\u044b \u0432 \u0441\u0432\u043e\u0435\u043c \u043a\u043e\u0434\u0435<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u0437\u043e\u0432\u044b StringConcatFactory \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 + \u043a \u0441\u0442\u0440\u043e\u043a\u0430\u043c<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0412\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u043e\u043b\u044f\u043c \u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u044c &#8212; \u0441\u043c. <a href=\"https:\/\/github.com\/gochaorg\/trambda\/blob\/abce53ed079c61bd348486a3cbe4cde595de3394\/trambda-core\/src\/main\/java\/xyz\/cofe\/trambda\/sec\/SecurityFilters.java\" rel=\"noopener noreferrer nofollow\"><u>SecurityFilters.java \/&nbsp; PredicateBuilder#field<\/u><\/a><\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0442\u0430\u043c \u0434\u0430\u0436\u0435 \u043a\u0430\u043a <strong>Object.toString()<\/strong> \u0442\u043e, \u0436\u0435 \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 <a href=\"https:\/\/github.com\/gochaorg\/trambda\" rel=\"noopener noreferrer nofollow\"><u>github<\/u><\/a> \u0438\u043b\u0438 <a href=\"https:\/\/gochaorg.github.io\/trambda\/intro.html\" rel=\"noopener noreferrer nofollow\"><u>git pages<\/u><\/a><\/p>\n<h2>\u0427\u0435\u043c \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e?<\/h2>\n<p>\u0420\u0435\u0437\u043e\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u0447\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438 \u0447\u0435\u043c \u043e\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u044c\u0441\u044f \u043e\u0442 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 RMI, gRPC ? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u044f<\/p>\n<p>\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u043c\u043d\u043e\u0433\u043e, \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u0443. \u042d\u0442\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432:<\/p>\n<ul>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<ul>\n<li>\n<p>\u0421\u0442\u0440\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \/ \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/li>\n<li>\n<p>\u0413\u0438\u0431\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \/ \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\/\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/p>\n<ul>\n<li>\n<p>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b<\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0442\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0426\u0438\u043a\u043b\u044b\/\u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b\/\u0444\u0443\u043d\u043a\u0446\u0438\u0438\/\u043e\u0431\u044a\u0435\u043a\u0442\u044b\u2026<\/p>\n<\/li>\n<li>\n<p>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0421\u043b\u0430\u0431\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u0440\u043e\u0433\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c<\/p>\n<ul>\n<li>\n<p>\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u0442.\u0434.<\/p>\n<\/li>\n<li>\n<p>\u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u2026 \u0438 \u0442.\u0434.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0448\u0435\u043d\u0438\u0439<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0447\u0442\u043e \u0431\u044b \u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0445\u043e\u0434\u0443 \u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p><strong>\u0424\u0438\u0447\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p><strong>Java-RMI<\/strong><\/p>\n<\/td>\n<td>\n<p><strong>SOAP<\/strong><\/p>\n<\/td>\n<td>\n<p><strong>REST-JSON<\/strong><\/p>\n<\/td>\n<td>\n<p><strong>SQL<\/strong><\/p>\n<\/td>\n<td>\n<p><strong>GraphQL<\/strong><\/p>\n<\/td>\n<td>\n<p><strong>Hadoop<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\u0421\u0442\u0440\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/td>\n<td>\n<p>+\/-<\/p>\n<\/td>\n<td>\n<p>+\/-<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\u0413\u0438\u0431\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/td>\n<td>\n<p>+\/-<\/p>\n<\/td>\n<td>\n<p>+\/-<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\u041f\u0440\u043e\u0441\u0442\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\u0426\u0438\u043a\u043b\u044b\/\u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b\/\u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b\u2026<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>?<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>?<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\u0421\u043b\u0430\u0431\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\u0421\u0442\u0440\u043e\u0433\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p>?<\/p>\n<\/td>\n<td>\n<p>?<\/p>\n<\/td>\n<td>\n<p>?<\/p>\n<\/td>\n<td>\n<p>+\/-<\/p>\n<\/td>\n<td>\n<p>?<\/p>\n<\/td>\n<td>\n<p>?<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\u041f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>?<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0445\u043e\u0434\u0443 \u043e\u043f\u0440\u043e\u0431\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>?<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>&#8212;<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\u041f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>?<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>+<\/p>\n<\/td>\n<td>\n<p>?<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<ul>\n<li>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 (Java-RMI, SOAP, REST-JSON, GraphQL)<\/p>\n<ul>\n<li>\n<p>\u0427\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 (Java-RMI, SOAP, GraphQL)<\/p>\n<\/li>\n<li>\n<p>\u0414\u0440\u0443\u0433\u0438\u0435 (REST-JSON, Hadoop) \u0441\u043e \u0441\u043b\u0430\u0431\u043e \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b-\u0432\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0435\u0449\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 (SQL, Hadoop)<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0442\u0440\u043e\u0433\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u0437 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0445 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 SQL<\/p>\n<p>\u0412 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0435\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0441 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430\u043c\u0438<\/p>\n<ul>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (*)<\/p>\n<ul>\n<li>\n<p>\u0413\u0438\u0431\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \/ \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \/ \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0442\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0426\u0438\u043a\u043b\u044b\/\u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b\/\u0444\u0443\u043d\u043a\u0446\u0438\u0438\/<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b\u2026 (**)<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432<\/p>\n<ul>\n<li>\n<p>\u0421\u0442\u0440\u043e\u0433\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c (***)<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0448\u0435\u043d\u0438\u0439<\/p>\n<ul>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0445\u043e\u0434\u0443 \u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (****)<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u041e\u0433\u043e\u0432\u043e\u0440\u043a\u0438<\/p>\n<ul>\n<li>\n<p>(*)<\/p>\n<ul>\n<li>\n<p>\u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c Serializable<\/p>\n<\/li>\n<li>\n<p>\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u043f\u0440\u043e\u0431\u0430\u0446\u0438\u044f Proxy \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>(**)<\/p>\n<ul>\n<li>\n<p>\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u043f\u0440\u043e\u0431\u0430\u0446\u0438\u044f Proxy \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 &#8212; \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>(***)<\/p>\n<ul>\n<li>\n<p>\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434\u0430, \u0431\u0435\u0437 \u0443\u0447\u0435\u0442\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, <a href=\"https:\/\/gochaorg.github.io\/trambda\/plan.html\" rel=\"noopener noreferrer nofollow\"><u>\u0441\u043c \u043f\u043b\u0430\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/u><\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>(****)<\/p>\n<ul>\n<li>\n<p>\u0435\u0449\u0435 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e, <a href=\"https:\/\/gochaorg.github.io\/trambda\/plan.html\" rel=\"noopener noreferrer nofollow\"><u>\u0441\u043c \u043f\u043b\u0430\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/u><\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f<\/h2>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u0442, \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0440\u0430\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f<\/p>\n<ul>\n<li>\n<p>\u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 Java \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 SQL WHERE (\u0443\u0436\u0435 \u0435\u0441\u0442\u044c)<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 RPC\/RMI\/SOAP\/\u2026 (\u0443\u0436\u0435 \u0435\u0441\u0442\u044c)<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/p>\n<\/li>\n<li>\n<p>\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (\u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430)<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u0430\u044f \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f JAVA\/Kotlin\/Scala \u043a\u043e\u0434\u0430 \u0432 \u0446\u0435\u043b\u0435\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b (SQL, MongoDB, REST, \u2026)<\/p>\n<p>\u0414\u0430\u043d\u043d\u043e\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434\u0430 \u0432 \u043a\u043e\u0434 AST\/Java\/\u2026, \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0442\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435 JAD<\/p>\n<p>\u0427\u0442\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u0435\u0434\u0435\u0442 \u043a \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044e \u0438\u0437\u0434\u0435\u0440\u0436\u0435\u043a \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u041f\u041e.<\/p>\n<h2>\u041a\u0430\u043a \u0436\u0435 \u043e\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 ?<\/h2>\n<p>\u0418\u0434\u0435\u044f \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u0430, \u0432\u0435\u0441\u044c \u043a\u043e\u0434 Java \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u043e\u043c \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c .class, \u0430 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 java \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441, \u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a: obj.getClass()<\/p>\n<p>\u0427\u0435\u0440\u0435\u0437 \u043e\u0431\u044a\u0435\u043a\u0442 Class \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0447\u0435\u0440\u0435\u0437 Class.getResource(<em>\u2018\u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430<\/em>\u2019) \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c URL \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<p><em>\u201c\u0413\u043b\u0430\u0434\u043a\u043e \u0431\u044b\u043b\u043e \u043d\u0430 \u0431\u0443\u043c\u0430\u0433\u0435, \u043d\u043e \u0437\u0430\u0431\u044b\u043b\u0438 \u043f\u0440\u043e \u043e\u0432\u0440\u0430\u0433\u0438\u201d<\/em><\/p>\n<p>\u0422\u0430\u043a\u043e\u0432\u0430 \u0431\u044b\u043b\u0430 \u0438\u0434\u0435\u044f, \u043d\u043e\u2026 \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b<\/p>\n<h2>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043a\u0430\u043a \u043d\u0430\u0439\u0442\u0438 \u0431\u0430\u0439\u0442 \u043a\u043e\u0434?<\/h2>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434<\/p>\n<pre><code class=\"java\">package xyz.cofe.trambda.l1;  import java.util.function.Function; import org.junit.jupiter.api.Test;  public class SimpleLambdaTest {    @Test    public void javaLambda01(){        Function&lt;Function&lt;String,String&gt;,String&gt; test = (f) -&gt; {            System.out.println(\"f=\"+f.getClass());            return null;        };        test.apply( x -&gt; x.repeat(4) );    } }<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0442\u0435\u0441\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0442 \u044d\u0442\u043e:<\/p>\n<p>f=class xyz.cofe.trambda.l1.SimpleLambdaTest$$Lambda$235\/0x0000000800142040<\/p>\n<p>\u041f\u043e \u0438\u0434\u0435\u0435 \u0443 \u043d\u0430\u0441 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 test-classes\/ \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0444\u0430\u0439\u043b SimpleLambdaTest$$Lambda$235, \u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u0432\u0438\u0434\u043d\u043e<\/p>\n<pre><code class=\"bash\">user@user-Modern-14-A10RB:00:41:32:~\/code\/trambda\/trambda-core\/target\/test-classes\/xyz\/cofe\/trambda\/l1: &gt; ll \u0438\u0442\u043e\u0433\u043e 12 drwxrwxr-x 2 user user 4096 \u0430\u043f\u0440 25 00:40 .\/ drwxrwxr-x 5 user user 4096 \u0430\u043f\u0440 25 00:40 ..\/ -rw-rw-r-- 1 user user 2162 \u0430\u043f\u0440 25 00:40 SimpleLambdaTest.class<\/code><\/pre>\n<p>\u0422\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u0430\u0439\u0442 \u043a\u043e\u0434<\/p>\n<pre><code class=\"bash\">&gt; javap -p SimpleLambdaTest.class  Compiled from \"SimpleLambdaTest.java\" public class xyz.cofe.trambda.l1.SimpleLambdaTest {   public xyz.cofe.trambda.l1.SimpleLambdaTest();   public void javaLambda01();   private static java.lang.String lambda$javaLambda01$1(java.lang.String);   private static java.lang.String lambda$javaLambda01$0(java.util.function.Function); } <\/code><\/pre>\n<p>\u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u0433\u0434\u0435-\u0442\u043e lambda$javaLambda01$1 \u0438\u043b\u0438 lambda$javaLambda01$0 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043a\u043e\u0434 \u043d\u0430\u0448\u0435\u0439 \u043b\u044f\u043c\u0431\u0434\u044b, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043b\u0433\u043e \u0433\u0430\u0434\u0430\u0442\u044c, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043d\u0430\u0448 \u043f\u043e\u0434\u0445\u043e\u0434<\/p>\n<p>\u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c class \u0438 \u043b\u044f\u043c\u0431\u0434\u0443 \u0432 Java \u0441 \u0440\u0430\u0437\u0431\u0435\u0433\u0443 \u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f, \u0430 \u0433\u0430\u0434\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u0443\u0442\u044c \u043d\u0430 \u043a\u043e\u0441\u0442\u044b\u043b\u0438.<\/p>\n<p>\u0412 Java \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Serializable, \u0438 \u044d\u0442\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u043b\u044f\u043c\u0431\u0434\u0443<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a<\/p>\n<pre><code class=\"java\">package xyz.cofe.trambda.l2;  import java.io.Serializable; import java.util.function.Function;  public interface Fn&lt;A,Z&gt; extends Function&lt;A,Z&gt; , Serializable { }<\/code><\/pre>\n<p>\u0438\u043b\u0438 \u0432\u043e\u0442 \u0442\u0430\u043a<\/p>\n<pre><code class=\"java\">Runnable r = (Runnable &amp; Serializable)() -&gt; System.out.println(\"Serializable!\");<\/code><\/pre>\n<p>\u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Java \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u043a\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u0432\u044b\u0448\u0435 \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0435\u0433\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c<\/p>\n<pre><code class=\"java\">package xyz.cofe.trambda.l2;  import java.lang.invoke.SerializedLambda; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.function.Function; import org.junit.jupiter.api.Test;  public class SerialLambdaTest {    @Test    public void serLambda01(){        Fn&lt;Fn&lt;String,String&gt;,String&gt; test = (lambda) -&gt; {            System.out.println(\"lambda=\"+lambda.getClass());             Method writeReplace = null;            try{                writeReplace = lambda.getClass().getDeclaredMethod(\"writeReplace\");                writeReplace.setAccessible(true);                 SerializedLambda sl = (SerializedLambda) writeReplace.invoke(lambda);                System.out.println(sl);            } catch( NoSuchMethodException | InvocationTargetException | IllegalAccessException e ) {                e.printStackTrace();            }             return null;        };        test.apply( x -&gt; x.repeat(4) );    } }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0438\u043c, \u0435\u0433\u043e \u0440\u0430\u0437\u0431\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0436\u0435.<\/p>\n<pre><code class=\"bash\">lambda=class xyz.cofe.trambda.l2.SerialLambdaTest$$Lambda$235\/0x0000000800142040 SerializedLambda[capturingClass=class xyz.cofe.trambda.l2.SerialLambdaTest,  functionalInterfaceMethod=xyz\/cofe\/trambda\/l2\/Fn.apply:(Ljava\/lang\/Object;) Ljava\/lang\/Object;,  implementation=invokeStatic  xyz\/cofe\/trambda\/l2\/SerialLambdaTest.lambda$serLambda01$3fed5817$1: (Ljava\/lang\/String;)Ljava\/lang\/String;,  instantiatedMethodType=(Ljava\/lang\/String;)Ljava\/lang\/String;, numCaptured=0] <\/code><\/pre>\n<p>\u0410 \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u0431\u0430\u0439\u0442 \u043a\u043e\u0434\u0430 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c<\/p>\n<pre><code class=\"bash\">user@user-Modern-14-A10RB:00:51:48:~\/code\/trambda\/trambda-core\/target\/test-classes\/xyz\/cofe\/trambda\/l2: &gt; javap -p SerialLambdaTest.class  Compiled from \"SerialLambdaTest.java\" public class xyz.cofe.trambda.l2.SerialLambdaTest {   public xyz.cofe.trambda.l2.SerialLambdaTest();   public void serLambda01();   private static java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda);   private static java.lang.String lambda$serLambda01$3fed5817$1(java.lang.String);   private static java.lang.String lambda$serLambda01$47b6c34$1(xyz.cofe.trambda.l2.Fn); } <\/code><\/pre>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c &#8212; \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043c\u0435\u0442\u043e\u0434 $deserializeLambda$ \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434, \u0435\u0441\u0442\u044c \u0444\u0430\u043a\u0442 \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 Serializable \u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430.<\/p>\n<p>java.lang.invoke.SerializedLambda &#8212; \u044d\u0442\u043e final \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0440\u044f\u0434 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e<\/p>\n<ul>\n<li>\n<p>String  getImplClass() &#8212; \u0418\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>String  getImplMethodName() &#8212; \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 stdout \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442<\/p>\n<p>implementation=invokeStatic xyz\/cofe\/trambda\/l2\/SerialLambdaTest.<strong>lambda$serLambda01$3fed5817$1<\/strong>:(Ljava\/lang\/String;)Ljava\/lang\/String;<\/p>\n<p>\u0418 \u0432 \u0431\u0430\u0439\u0442 \u043a\u043e\u0434\u0435:<\/p>\n<p>private static java.lang.String <strong>lambda$serLambda01$3fed5817$1<\/strong>(java.lang.String);<\/p>\n<p>\u0422.\u0435. \u043c\u043e\u0436\u043d\u043e \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0430\u0439\u0442-\u043a\u043e\u0434 \u0434\u043b\u044f \u043b\u044f\u043c\u0431\u0434\u044b<\/p>\n<h2>\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0430\u0439\u0442 \u043a\u043e\u0434\u0430<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c \u0431\u0430\u0439\u0442 \u043a\u043e\u0434 \u043b\u044f\u043c\u0431\u0434\u044b &#8212; \u0434\u0435\u043b\u043e \u0442\u0435\u0445\u043d\u0438\u043a\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"java\">SerializedLambda sl = (SerializedLambda)writeReplace.invoke(lambda); var implClassName = sl.getImplClass()  var implClassUrl = labmda.getClass().getResource(\"\/\"+implClassName.replace(\".\",\"\/\")+\".class\");<\/code><\/pre>\n<p>implClassUrl &#8212; \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0444\u0430\u0439\u043b \u043a\u043b\u0430\u0441\u0441\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e \u0431\u0430\u0439\u0442 \u043a\u043e\u0434<\/p>\n<p>\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0431\u0430\u0439\u0442 \u043a\u043e\u0434 \u0438\u0437 URL \u043a\u0430\u043a \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0430\u0439\u0442\u043e\u0432<\/p>\n<pre><code class=\"java\">byte[] classByteCode = null; try{    classByteCode = IOFun.readBytes(implClassUrl); } catch( IOException e ) {    throw new IOError(e); }<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u043d\u0430\u0431\u043e\u0440 \u0431\u0430\u0439\u0442\u043e\u0432 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"https:\/\/asm.ow2.io\/\" rel=\"noopener noreferrer nofollow\">ASM<\/a> \u0434\u043b\u044f \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u0431\u0430\u0439\u0442 \u043a\u043e\u0434\u0430<\/p>\n<pre><code class=\"java\">var classReader = new ClassReader(classByteCode);<\/code><\/pre>\n<p>\u0438 \u0447\u0438\u0442\u0430\u0435\u043c \u0431\u0430\u0439\u0442 \u043a\u043e\u0434 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430<\/p>\n<pre><code class=\"java\">ClassVisitor cv = new ClassVisitor(Opcodes.ASM9) {    @Override    public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {        if( methName.equals(name) &amp;&amp; descriptor!=null &amp;&amp; descriptor.equals(methSign) ){            mdef0.set(new MethodDef(access,name,descriptor,signature,exceptions));            return dump(byteCodes::add);        }        return null;    } };  cr.accept(cv, 0);<\/code><\/pre>\n<p><code>MethodVisior<\/code> &#8212; \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0431\u0430\u0439\u0442 \u043a\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430. \u041c\u0435\u0442\u043e\u0434\u044b \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0430\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <code>MethodDump extends MethodVisitor<\/code>:<\/p>\n<pre><code class=\"java\">package xyz.cofe.trambda; public class MethodDump extends MethodVisitor implements Opcodes { ...  @Override public void visitParameter(String name, int access){    emit(new MParameter(name,access)); }  @Override public void visitInsn(int opcode){    emit(new MInsn(opcode)); }  ... }<\/code><\/pre>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u0430\u0439\u0442 \u043a\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432 visit<em>XXXX<\/em>(&#8230;) &#8212; \u0438\u0445 \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 (\u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043a\u0430\u0437\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c)<\/p>\n<p>\u041f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u044b\u0437\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f visitInsn( op ) \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f new MInsn(op), \u0430 \u043f\u043e\u0442\u043e\u043c \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0448\u0435 emit(..) \u0433\u0434\u0435 \u0443\u0436\u0435 \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0435\u0442\u044c<\/p>\n<h2>\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438\u0437 \u0431\u0430\u0439\u0442 \u043a\u043e\u0434\u0430<\/h2>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043a\u043e\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u043f\u043e \u0441\u0435\u0442\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043d\u0430\u0431\u043e\u0440\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u044d\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u0431\u0430\u0439\u0442 \u043a\u043e\u0434 (\u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438)<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043c\u043e\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 xyz.cofe.trambda.MethodRestore \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c<\/p>\n<pre><code class=\"java\">public synchronized byte[] generate(){   \/\/ \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0438\u043c\u044f \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430   binClassName = className.replace('.', '\/');  \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c ClassWriter (\u0447\u0430\u0441\u0442\u044c ASM)  \/\/ \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b visitXXXX( op ) var cw = new ClassWriter(ClassWriter.COMPUTE_MAXS|ClassWriter.COMPUTE_FRAMES); cw.visit(Opcodes.V11,    Opcodes.ACC_PUBLIC|Opcodes.ACC_SUPER,    binClassName,null,    \"java\/lang\/Object\", null );  \/\/ \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0430 var mv = cw.visitMethod(   acc, \/\/ \u0444\u043b\u0430\u0433\u0438 \u043a\u0430\u043a static public   name, \/\/ \u0438\u043c\u044f \u043c\u0435\u0442\u043e\u0434\u0430   desc, \/\/ \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u0435\u0442\u043e\u0434\u0430   sign, \/\/ \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c Generic \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b   excepts); \/\/ \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434  \/\/ \u041f\u043e\u0442\u043e\u043c \u0432 \u0446\u0438\u043a\u043b\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430  \/\/ \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 visitXXXX() \/\/ \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u0434 \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e \u0438 \u0431\u044b\u043b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d for( var bc : byteCodes ){    if( bc instanceof MCode )build((MCode) bc);    else if( bc instanceof MEnd )build((MEnd) bc);    else if( bc instanceof MLabel )build((MLabel) bc);    else if( bc instanceof MLineNumber )build((MLineNumber) bc);    else if( bc instanceof MVarInsn )build((MVarInsn) bc);   ... }  \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0431\u0430\u0439\u0442 \u043a\u043e\u0434 return cw.toByteArray(); }   \/\/ \u0412\u044b\u0437\u043e\u0432 visitCode() - \u043d\u0430\u0447\u0430\u043b\u043e \u043c\u0435\u0442\u043e\u0434\u0430 protected void build(MCode code){ mv.visitCode(); } \/\/ \u0412\u044b\u0437\u043e\u0432 visitEnd() - \u043a\u043e\u043d\u0435\u0446 \u043c\u0435\u0442\u043e\u0434\u0430 protected void build(MEnd end){ mv.visitEnd(); } protected void build(MTypeInsn tinst){    mv.visitTypeInsn(tinst.getOpcode(), tinst.getOperand()); }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0431\u0430\u0439\u0442 \u043a\u043e\u0434, \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0432\u043e\u0439 <code>ClassLoader<\/code><\/p>\n<pre><code class=\"java\">var byteCode = new MethodRestore()    .className(clName)    .methodName(\"lambda1\")    .methodDef(mdef)    .generate();  ClassLoader cl = new ClassLoader(ClassLoader.getSystemClassLoader()) {    @Override    protected Class&lt;?&gt; findClass(String name) throws ClassNotFoundException{        if( name!=null &amp;&amp; name.equals(clName) ){            return defineClass(name,byteCode,0,byteCode.length);        }        return super.findClass(name);    } };<\/code><\/pre>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441<\/p>\n<pre><code class=\"java\">System.out.println(\"try read class \"+clName); Class c = null; try{    c = Class.forName(clName,true,cl);    System.out.println(\"class found \"+c); } catch( ClassNotFoundException e ) {    e.printStackTrace();    return; }<\/code><\/pre>\n<p>\u0418\u0449\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u043c\u0435\u0442\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430<\/p>\n<pre><code class=\"java\">Method m = null; System.out.println(\"methods\"); for( var delMeth : c.getDeclaredMethods() ){   System.out.println(\"\"+delMeth);   if( delMeth.getName().equals(methName) ){     m = delMeth;   } }<\/code><\/pre>\n<p>\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438<\/p>\n<pre><code class=\"java\">try{    Object arg0 = \"abc\";    System.out.println(\"call with \"+arg0);    Object res = m.invoke(null, arg0);    System.out.println(\"result \"+res); } catch( IllegalAccessException | InvocationTargetException e ) {    e.printStackTrace(); }<\/code><\/pre>\n<h2>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f<\/h2>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0443 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c \u0440\u044f\u0434 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439<\/p>\n<ol>\n<li>\n<p>\u041d\u0435 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442<\/p>\n<ol>\n<li>\n<p>\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f Kotlin \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u0442.\u043a. Kotlin \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442 \u043b\u044f\u043c\u0431\u0434\u044b, \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0441 Scala<\/p>\n<\/li>\n<li>\n<p>\u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 (Groovy, JavaScript) \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0430\u0432\u0435\u0440\u043d\u043e \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 &#8212; \u043d\u043e \u0442\u0430\u043c \u043d\u0430\u0432\u0435\u0440\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0438 \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043b\u044f\u043c\u0431\u0434\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c AST \u0434\u0435\u0440\u0435\u0432\u043e \u043b\u044f\u043c\u0431\u0434 &#8212; \u0432\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0438\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0447\u0435\u043c \u0431\u044b \u044d\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u043b\u043e\u0441\u044c.<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u0413\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c &#8212; \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0438 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 &#8212; \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u0430\u044f, \u043d\u043e \u0435\u0449\u0435 \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043c\u043e\u0436\u0435\u0442 Java \u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u0430\u044f, \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0431\u0430\u0439\u0442-\u043a\u043e\u0434\u043e\u043c \u043d\u0435\u0436\u0435\u043b\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0437\u043d\u0430\u0442\u044c \u043e \u043a\u0430\u043a\u0438\u0445 \u043b\u0438\u0431\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u0445 \u043d\u043e\u0432\u043e\u0439 Java<\/p>\n<\/li>\n<li>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0435 \u0432\u0435\u0441\u044c \u0431\u0430\u0439\u0442 \u043a\u043e\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442, \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0435 \u0432\u0435\u0441\u044c \u0431\u0430\u0439\u0442 \u043a\u043e\u0434 \u0438\u043c\u0435\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 &#8212; \u043d\u0430\u0432\u0435\u0440\u043d\u043e \u044d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u043c\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e &#8212; \u044d\u0442\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u043e \u0441\u0435\u0442\u0438<\/p>\n<ol>\n<li>\n<p>\u0412\u043e\u043f\u0440\u043e\u0441 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 &#8212; \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u043c\u043e, \u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u043e\u043f\u0438\u043b\u0438\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u043f\u0438\u043b\u044c\u043d\u0438\u043a\u043e\u043c<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u043c\u043e\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 TCP, \u043d\u043e \u044d\u0442\u043e\u0442 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0432\u0430\u043c, \u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0435\u0433\u043e, \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043b\u044f\u043c\u0431\u0434\u044b \u0438 \u0435\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0438\u043a\u0430\u043a, \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0442 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c.<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/554518\/\"> https:\/\/habr.com\/ru\/post\/554518\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0443 \u043c\u0435\u043d\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441, \u0430 \u043a\u0430\u043a \u044f \u0435\u0433\u043e \u0431\u0443\u0434\u0443 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 jar\/war\/docker \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430, \u0430 \u043f\u043e\u0442\u043e\u043c \u0435\u0449\u0435 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0438 \u0435\u0449\u0435 \u043c\u043d\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0435\u043b\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439 \u0447\u0442\u043e\u0431 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0441\u0443\u043d\u0443\u0442\u044c \u043a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<p>\u0411\u044b\u043b\u043e \u0431\u044b \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u043e\u0434, \u043a\u0430\u043a \u043b\u044f\u043c\u0431\u0434\u0443, \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043b\u044f\u043c\u0431\u0434\u0443 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0442\u0430\u043a \u0436\u0435 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0435\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c.<\/p>\n<p>\u041d\u043e \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043c\u044b\u0441\u043b\u044c \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u043e\u0449\u0435, \u0438 \u0443 \u043c\u0435\u043d\u044f \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<pre><code class=\"java\">1 | var query = TcpQuery 2 |    .create(IEnv.class).host(\"myserver.com\").port(9988) 3 |      .build(); 4 | 5 |  query.apply(  6 |      env -&gt; env.processes().stream().filter( 7 |          p -&gt; p.getName().contains(\"java\") 8 |      ) 9 |      .collect(Collectors.toList()) 10|  ).forEach(System.out::println);<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430 java,<\/p>\n<ul>\n<li>\n<p>\u0421\u0442\u0440\u043e\u043a\u0438 \u0441 1 \u043f\u043e 5 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438 10 &#8212; \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435<\/p>\n<\/li>\n<li>\n<p>\u0410 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 6 \u043f\u043e 9 (\u0442\u0435\u043b\u043e \u043b\u044f\u043c\u0431\u0434\u044b env-&gt;&#8230;) \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u044d\u0442\u043e \u043d\u0435 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434, \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043a\u043e\u0434 \u043d\u0430 Java (11).<\/p>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u0434 \u0441\u0442\u0440\u043e\u043a \u0441 6 \u043f\u043e 9 (\u0441\u0430\u043c\u043e \u0442\u0435\u043b\u043e \u043b\u044f\u043c\u0431\u0434\u044b) \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043f\u0440\u0438 \u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u043e \u044d\u0442\u043e\u043c \u043a\u0443\u0441\u043a\u0435 \u043a\u043e\u0434\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u043e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0443 \u0441\u0435\u0431\u044f, \u0438 \u043e\u0442\u0434\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0443 &#8212; \u0430 \u044f \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u043e\u0433\u043e deploy, \u043d\u0435 \u0432\u044b\u0445\u043e\u0434\u044f \u0438\u0437 IDE (Idea\/Eclipse\/etc&#8230;).<\/p>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Serializable Lambda \u0432 Java, \u0438 \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0431\u0430\u0439\u0442-\u043a\u043e\u0434 \u0442\u0430\u043a\u0438\u0445 \u043b\u044f\u043c\u0431\u0434 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0442.\u0435. \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e <strong>\u0432 \u0442\u0435\u043e\u0440\u0438\u0438<\/strong> \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0445 \u0441\u0445\u0435\u043c deploy \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 api (\u044d\u0442\u043e \u043c\u043e\u044f \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u044f).<\/p>\n<hr>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 IEnv:<\/p>\n<pre><code class=\"java\">public interface IEnv { \tList&lt;OsProc&gt; processes(); }<\/code><\/pre>\n<p>\u041a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432<\/p>\n<pre><code class=\"java\">public class OsProc implements Serializable { \tpublic Optional&lt;Integer&gt; getPpid(){ return ... } \tpublic int getPid(){ return ... } \tpublic void setPid(int pid){ ... } \tpublic String getName(){ return ... } \tpublic Optional&lt;String&gt; getCmdline(){ return ... } }<\/code><\/pre>\n<p>\u0418 \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u044f \u043f\u0435\u0440\u0435\u0434\u0430\u044e \u043b\u044f\u043c\u0431\u0434\u0443 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440<\/p>\n<pre><code class=\"java\">var query = TcpQuery    .create(IEnv.class).host(\"myserver.com\").port(9988)  \t.build();    query.apply(  \tenv -&gt; env.processes().stream().filter(      \tp -&gt; p.getName().contains(\"java\")  \t)  \t.collect(Collectors.toList())  ).forEach(System.out::println);<\/code><\/pre>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 &#8212; \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 ?<\/h2>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Java<\/p>\n<ol>\n<li>\n<p>\u041c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0430\u0431\u043e\u0440 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c Client.java<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434 &#8212; \u0444\u0430\u0439\u043b Client.class<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 query.apply() &#8212; \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043b\u044f\u043c\u0431\u0434\u0443 env -&gt; env.proc&#8230;toList())<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f query.apply():<\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043b\u044f\u043c\u0431\u0434\u0443<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043b\u044f\u043c\u0431\u0434\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Client) \u0438 \u043c\u0435\u0442\u043e\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 lambda1) \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u043b\u044f\u043c\u0431\u0434\u0443<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u044b\u0441\u043a\u0438\u0432\u0430\u0435\u0442 \u0441\u0440\u0435\u0434\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430 (Client.class) \u0438 \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043b\u044f\u043c\u0431\u0434\u044b \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440<\/p>\n<ol>\n<li>\n<p>\u0421\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434 \u043b\u044f\u043c\u0431\u0434\u044b<\/p>\n<\/li>\n<li>\n<p>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u043b\u0430\u0441\u0441 \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043b\u044f\u043c\u0431\u0434\u0435<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043c\u0435\u0442\u043e\u0434\u0430 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 \u0435\u0433\u043e \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/p>\n<ol>\n<li>\n<p>\u0421\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u0430\u043d\u0435\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\/\u043c\u0435\u0442\u043e\u0434\/\u043b\u044f\u043c\u0431\u0434\u0443<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0433\u043e \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 query.apply()<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0431\u0435\u0437 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 IDE \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432.<\/p>\n<h2>\u041a\u0430\u043a \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f? <\/h2>\n<p>\u0427\u0442\u043e \u0431\u044b \u0441 \u044d\u0442\u0438\u043c \u043f\u043e \u0438\u0433\u0440\u0430\u0442\u044c, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u043c\u043e\u0438\u043c pet project-\u043e\u043c:<\/p>\n<p>v 1.0 <a href=\"https:\/\/github.com\/gochaorg\/trambda\/releases\/tag\/1.0\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/gochaorg\/trambda\/releases\/tag\/1.0<\/a><\/p>\n<p>maven<\/p>\n<pre><code class=\"xml\">&lt;dependency&gt;   &lt;groupId&gt;xyz.cofe&lt;\/groupId&gt;   &lt;artifactId&gt;trambda&lt;\/artifactId&gt;   &lt;version&gt;1.0&lt;\/version&gt;   &lt;type&gt;pom&lt;\/type&gt; &lt;\/dependency&gt;  &lt;dependency&gt;   &lt;groupId&gt;xyz.cofe&lt;\/groupId&gt;   &lt;artifactId&gt;trambda-core&lt;\/artifactId&gt;   &lt;version&gt;1.0&lt;\/version&gt; &lt;\/dependency&gt;  &lt;dependency&gt;   &lt;groupId&gt;xyz.cofe&lt;\/groupId&gt;   &lt;artifactId&gt;trambda-tcp&lt;\/artifactId&gt;   &lt;version&gt;1.0&lt;\/version&gt; &lt;\/dependency&gt;<\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0443 \u0432\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043a\u0430\u043a\u0430\u044f \u043d\u0438\u0431\u0443\u0434\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0441\u0435\u0442\u0438 (TCP)<\/p>\n<p>\u0412 \u043c\u043e\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f <a href=\"https:\/\/github.com\/gochaorg\/trambda\/tree\/abce53ed079c61bd348486a3cbe4cde595de3394\/trambda-demo\/tr-demo-api\/src\/main\/java\/xyz\/cofe\/trambda\/demo\/api\" rel=\"noopener noreferrer nofollow\"><u>\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/u><\/a>, \u0432 \u043d\u0435\u0439 \u0432\u0441\u0435\u0433\u043e \u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<ul>\n<li>\n<p>OsProc.java &#8212; \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u041e\u0421 (\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0432\u044b\u0448\u0435)<\/p>\n<\/li>\n<li>\n<p>IEnv.java &#8212; \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0434\u043b\u044f \u041e\u0421 (\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0432\u044b\u0448\u0435)<\/p>\n<\/li>\n<li>\n<p>LinuxEnv.java &#8212; \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0434\u043b\u044f \u041e\u0421 Linux &#8212; \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f IEnv<\/p>\n<\/li>\n<\/ul>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"java\">package xyz.cofe.trambda.demo.api;  import org.junit.jupiter.api.Test;  public class LinuxEnvTest {    @Test    public void test(){        var env = new LinuxEnv();        env.processes().stream()            .filter(p-&gt;p.getName().equalsIgnoreCase(\"java\"))            .forEach(System.out::println);    } }<\/code><\/pre>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>LinuxEnv &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043b\u0430\u0441\u0441, \u043e\u043d \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0442\u0430\u043a:<\/p>\n<pre><code class=\"java\">package xyz.cofe.trambda.demo.api;  import java.util.ArrayList; import java.util.List; import xyz.cofe.io.fs.File;  public class LinuxEnv implements IEnv {    @Override    public List&lt;OsProc&gt; processes(){        ArrayList&lt;OsProc&gt; procs = new ArrayList&lt;&gt;();        File procDir = new File(\"\/proc\");        procDir.dirList().stream()            .filter( d -&gt; d.getName().matches(\"\\\\d+\") &amp;&amp; d.isDir() )            .map(OsProc::linuxProc)            .forEach(procs::add);        return procs;    } }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0435\u0433\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u0435\u043d, \u043e\u043d \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \/proc \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u041e\u0421, (\u0434\u043b\u044f Linux \u0432\u0441\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\/\u043f\u043e\u0434\u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \/proc)<\/p>\n<p>\u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c <a href=\"https:\/\/github.com\/gochaorg\/trambda\/tree\/master\/trambda-demo\/tr-demo-api\" rel=\"noopener noreferrer nofollow\"><u>\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443<\/u><\/a> (\u0438\u043b\u0438 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0441\u0432\u043e\u044e\u2026)<\/p>\n<p>\u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 (git commit 67ec260)<\/p>\n<pre><code class=\"bash\">&gt; git clone https:\/\/github.com\/gochaorg\/trambda.git \u041a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u00abtrambda\u00bb... remote: Enumerating objects: 978, done. remote: Counting objects: 100% (978\/978), done. remote: Compressing objects: 100% (464\/464), done. remote: Total 978 (delta 308), reused 862 (delta 195), pack-reused 0 \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432: 100% (978\/978), 715.70 KiB | 559.00 KiB\/s, \u0433\u043e\u0442\u043e\u0432\u043e. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439: 100% (308\/308), \u0433\u043e\u0442\u043e\u0432\u043e.<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438<\/p>\n<pre><code class=\"bash\">user@user-Modern-14-A10RB:22:10:35:~\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438\/sample-tr: &gt; cd trambda\/trambda-demo\/tr-demo-api\/ user@user-Modern-14-A10RB:22:10:49:~\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438\/sample-tr\/trambda\/trambda-demo\/tr-demo-api: &gt; mvn clean package install ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time:  13.933 s [INFO] Finished at: 2021-04-18T22:11:11+05:00 [INFO] ------------------------------------------------------------------------<\/code><\/pre>\n<p>\u0412 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 target \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0444\u0430\u0439\u043b jar \u0441 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439<\/p>\n<pre><code class=\"bash\">user@user-Modern-14-A10RB:22:13:13:~\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438\/sample-tr\/trambda\/trambda-demo\/tr-demo-api: &gt; ll target\/ \u0438\u0442\u043e\u0433\u043e 48 drwxrwxr-x 10 user user 4096 \u0430\u043f\u0440 18 22:11 .\/ drwxrwxr-x  4 user user 4096 \u0430\u043f\u0440 18 22:11 ..\/ drwxrwxr-x  3 user user 4096 \u0430\u043f\u0440 18 22:11 classes\/ drwxrwxr-x  3 user user 4096 \u0430\u043f\u0440 18 22:11 generated-sources\/ drwxrwxr-x  3 user user 4096 \u0430\u043f\u0440 18 22:11 generated-test-sources\/ drwxrwxr-x  2 user user 4096 \u0430\u043f\u0440 18 22:11 maven-archiver\/ drwxrwxr-x  3 user user 4096 \u0430\u043f\u0440 18 22:11 maven-status\/ drwxrwxr-x  4 user user 4096 \u0430\u043f\u0440 18 22:11 site\/ drwxrwxr-x  2 user user 4096 \u0430\u043f\u0440 18 22:11 surefire-reports\/ drwxrwxr-x  3 user user 4096 \u0430\u043f\u0440 18 22:11 test-classes\/ -rw-rw-r--  1 user user 6337 \u0430\u043f\u0440 18 22:11 tr-demo-api-1.0-SNAPSHOT.jar<\/code><\/pre>\n<h2>\u0417\u0430\u043f\u0443\u0441\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u0433\u0434\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043e\u0431\u0440\u0430\u043d\u0430 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 github \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0430\u0440\u0445\u0438\u0432<\/p>\n<pre><code class=\"bash\">user@user-Modern-14-A10RB:22:37:25:~\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438\/sample-tr: &gt; wget https:\/\/github.com\/gochaorg\/trambda\/releases\/download\/1.0\/trambda-tcp-serv-cli.zip --2021-04-18 22:37:31--  https:\/\/github.com\/gochaorg\/trambda\/releases\/download\/1.0\/trambda-tcp-serv-cli.zip \u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442\u0441\u044f github.com (github.com)... 140.82.121.4 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a github.com (github.com)|140.82.121.4|:443... \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e. HTTP-\u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d. \u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043e\u0442\u0432\u0435\u0442\u0430... 302 Found \u0410\u0434\u0440\u0435\u0441: https:\/\/github-releases.githubusercontent.com\/350075998\/47380d00-9b40-11eb-90a4-4e353f42e67c?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20210418%2Fus-east-1%2Fs3%2Faws4_request&amp;X-Amz-Date=20210418T173731Z&amp;X-Amz-Expires=300&amp;X-Amz-Signature=97ade1f58bfbe1eaa320805179987e8c4df730b9f5eddf24c05662fb676caafe&amp;X-Amz-SignedHeaders=host&amp;actor_id=0&amp;key_id=0&amp;repo_id=350075998&amp;response-content-disposition=attachment%3B%20filename%3Dtrambda-tcp-serv-cli.zip&amp;response-content-type=application%2Foctet-stream [\u043f\u0435\u0440\u0435\u0445\u043e\u0434] --2021-04-18 22:37:31--  https:\/\/github-releases.githubusercontent.com\/350075998\/47380d00-9b40-11eb-90a4-4e353f42e67c?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20210418%2Fus-east-1%2Fs3%2Faws4_request&amp;X-Amz-Date=20210418T173731Z&amp;X-Amz-Expires=300&amp;X-Amz-Signature=97ade1f58bfbe1eaa320805179987e8c4df730b9f5eddf24c05662fb676caafe&amp;X-Amz-SignedHeaders=host&amp;actor_id=0&amp;key_id=0&amp;repo_id=350075998&amp;response-content-disposition=attachment%3B%20filename%3Dtrambda-tcp-serv-cli.zip&amp;response-content-type=application%2Foctet-stream \u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442\u0441\u044f github-releases.githubusercontent.com (github-releases.githubusercontent.com)... 185.199.111.154, 185.199.108.154, 185.199.109.154, ... \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a github-releases.githubusercontent.com (github-releases.githubusercontent.com)|185.199.111.154|:443... \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e. HTTP-\u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d. \u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043e\u0442\u0432\u0435\u0442\u0430... 200 OK \u0414\u043b\u0438\u043d\u0430: 12107487 (12M) [application\/octet-stream] \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432: \u00abtrambda-tcp-serv-cli.zip\u00bb  trambda-tcp-serv-cli.zip                                    100%[========================================================================================================================================&gt;]  11,55M  3,75MB\/s    \u0437\u0430 3,1s      2021-04-18 22:37:35 (3,75 MB\/s) - \u00abtrambda-tcp-serv-cli.zip\u00bb \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d [12107487\/12107487]  user@user-Modern-14-A10RB:22:37:35:~\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438\/sample-tr: &gt; ll \u0438\u0442\u043e\u0433\u043e 11836 drwxrwxr-x  3 user user     4096 \u0430\u043f\u0440 18 22:37 .\/ drwxr-xr-x 11 user user     4096 \u0430\u043f\u0440 18 22:00 ..\/ drwxrwxr-x 10 user user     4096 \u0430\u043f\u0440 18 22:10 trambda\/ -rw-rw-r--  1 user user 12107487 \u0430\u043f\u0440 12<\/code><\/pre>\n<\/hr>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-322142","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/322142","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=322142"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/322142\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=322142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=322142"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=322142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}