<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US">
  <id>tag:lonelyelk.ru,2008:/posts</id>
  <link type="text/html" rel="alternate" href="http://lonelyelk.ru"/>
  <link type="application/atom+xml" rel="self" href="http://lonelyelk.ru/posts.atom"/>
  <title>LonelyElk::Blog</title>
  <updated>2016-09-07T15:12:47+00:00</updated>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/57</id>
    <published>2016-09-07T15:12:47+00:00</published>
    <updated>2016-09-07T15:12:47+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/57"/>
    <title>&#1058;&#1077;&#1083;&#1077;&#1075;&#1088;&#1072;&#1084;-&#1073;&#1086;&#1090; &#1076;&#1083;&#1103; &#1071;&#1085;&#1076;&#1077;&#1082;&#1089;.&#1055;&#1044;&#1044;</title>
    <content type="html">&lt;h2&gt;&#1042;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1059;&#1074;&#1083;&#1077;&#1095;&#1077;&#1085;&#1080;&#1077; &#1095;&#1072;&#1090;-&#1073;&#1086;&#1090;&#1072;&#1084;&#1080; &#1076;&#1086;&#1082;&#1072;&#1090;&#1080;&#1083;&#1072;&#1089;&#1100; &#1080; &#1076;&#1086; &#1084;&#1077;&#1085;&#1103;. &#1050;&#1072;&#1082; &#1101;&#1090;&#1086; &#1084;&#1086;&#1078;&#1077;&#1090; &#1089;&#1083;&#1091;&#1095;&#1080;&#1090;&#1100;&#1089;&#1103; &#1085;&#1072;&#1080;&#1083;&#1091;&#1095;&#1096;&#1080;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084;,&amp;nbsp;&#8212; &#1087;&#1086; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086;&#1089;&#1090;&#1080;. &#1040; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086;&#1089;&#1090;&#1100; &#1074;&#1086;&#1079;&#1085;&#1080;&#1082;&#1083;&#1072; &#1074; &#1089;&#1086;&#1074;&#1084;&#1077;&#1089;&#1090;&#1085;&#1086;&#1084; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1080; &#1071;&#1085;&#1076;&#1077;&#1082;&#1089; &#1087;&#1086;&#1095;&#1090;&#1099; &#1076;&#1083;&#1103; &#1076;&#1086;&#1084;&#1077;&#1085;&#1072;. &#1054;&#1082;&#1072;&#1079;&#1072;&#1083;&#1086;&#1089;&#1100;, &#1095;&#1090;&#1086; &#1074;&#1077;&#1073;-&#1080;&#1085;&#1090;&#1077;&#1088;&#1092;&#1077;&#1081;&#1089; &#1076;&#1083;&#1103; &#1101;&#1090;&#1086;&#1075;&#1086; &#1089;&#1086;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1085;&#1086; &#1085;&#1077; &#1087;&#1088;&#1080;&#1089;&#1087;&#1086;&#1089;&#1086;&#1073;&#1083;&#1077;&#1085;, &#1085;&#1086; &#1077;&#1089;&#1090;&#1100; &lt;a href="https://tech.yandex.ru/pdd/doc/about-docpage/"&gt;API&lt;/a&gt;. &#1053;&#1086; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1094;&#1077;&#1083;&#1099;&#1081; &#1089;&#1072;&#1081;&#1090; &#1076;&#1083;&#1103; &#1101;&#1090;&#1086;&#1075;&#1086; &#1082;&#1072;&#1078;&#1077;&#1090;&#1089;&#1103; &#1085;&#1072;&#1082;&#1083;&#1072;&#1076;&#1085;&#1099;&#1084;, &#1072; &#1095;&#1072;&#1090;-&#1073;&#1086;&#1090;&amp;nbsp;&#8212; &#1074; &#1089;&#1072;&#1084;&#1099;&#1081; &#1088;&#1072;&#1079;. &#1048; &#1074;&#1086;&#1086;&#1073;&#1097;&#1077;, &#1084;&#1085;&#1077; &#1082;&#1072;&#1078;&#1077;&#1090;&#1089;&#1103;, &#1101;&#1090;&#1086; &#1086;&#1076;&#1080;&#1085; &#1080;&#1079; &#1089;&#1072;&#1084;&#1099;&#1093; &#1087;&#1088;&#1086;&#1076;&#1091;&#1082;&#1090;&#1080;&#1074;&#1085;&#1099;&#1093; &#1089;&#1087;&#1086;&#1089;&#1086;&#1073;&#1086;&#1074; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1090;&#1077;&#1093;&#1085;&#1086;&#1083;&#1086;&#1075;&#1080;&#1080;: &#1080;&#1085;&#1090;&#1077;&#1088;&#1092;&#1077;&#1081;&#1089; &#1082; API.&lt;/p&gt;&lt;p&gt;&#1057;&#1089;&#1099;&#1083;&#1082;&#1091; &#1085;&#1072; &#1087;&#1086;&#1083;&#1085;&#1099;&#1081; &#1090;&#1077;&#1082;&#1089;&#1090; &#1073;&#1086;&#1090;&#1072; &#1103; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1091; &#1074; &#1082;&#1086;&#1085;&#1094;&#1077;. &#1057;&#1072;&#1084; &#1073;&#1086;&#1090; &#1085;&#1077; &#1089;&#1086;&#1076;&#1077;&#1088;&#1078;&#1080;&#1090; &#1074; &#1089;&#1077;&#1073;&#1077; &#1087;&#1086;&#1083;&#1085;&#1086;&#1075;&#1086; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1086;&#1085;&#1072;&#1083;&#1072; &#1074;&#1089;&#1077;&#1075;&#1086; API, &#1072; &#1080;&#1084;&#1077;&#1077;&#1090; &#1083;&#1080;&#1096;&#1100; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1091;&#1102; &#1085;&#1072; &#1076;&#1072;&#1085;&#1085;&#1099;&#1081; &#1084;&#1086;&#1084;&#1077;&#1085;&#1090; &#1095;&#1072;&#1089;&#1090;&#1100;. &#1057;&#1077;&#1081;&#1095;&#1072;&#1089; &#1093;&#1086;&#1090;&#1077;&#1083; &#1073;&#1099; &#1087;&#1086;&#1076;&#1077;&#1083;&#1080;&#1090;&#1100;&#1089;&#1103; &#1087;&#1072;&#1088;&#1086;&#1081; &#1085;&#1072;&#1093;&#1086;&#1076;&#1086;&#1082;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1087;&#1088;&#1080;&#1075;&#1086;&#1076;&#1103;&#1090;&#1089;&#1103; &#1074;&#1089;&#1077;&#1084;, &#1082;&#1090;&#1086; &#1079;&#1072;&#1093;&#1086;&#1095;&#1077;&#1090; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1095;&#1072;&#1090;-&#1073;&#1086;&#1090;&#1086;&#1074; &#1076;&#1083;&#1103; &#1058;&#1077;&#1083;&#1077;&#1075;&#1088;&#1072;&#1084; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; node.js.&lt;/p&gt;&lt;p&gt;&lt;img alt="Chat bot" height="337" src="http://lonelyelk.ru/images/uploads/0000/0059/chatbot.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1061;&#1091;&#1082;&#1080; &#1074; &#1087;&#1088;&#1086;&#1076;&#1072;&#1082;&#1096;&#1085;&#1077;&lt;/h2&gt;&lt;p&gt;&#1059; &#1073;&#1086;&#1090;&#1086;&#1074; &#1058;&#1077;&#1083;&#1077;&#1075;&#1088;&#1072;&#1084; &#1077;&#1089;&#1090;&#1100; &#1076;&#1074;&#1072; &#1089;&#1087;&#1086;&#1089;&#1086;&#1073;&#1072; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099;: &#1082;&#1086;&#1075;&#1076;&#1072; &#1073;&#1086;&#1090; &#1089;&#1072;&#1084; &#1086;&#1073;&#1088;&#1072;&#1097;&#1072;&#1077;&#1090;&#1089;&#1103; &#1079;&#1072; &#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103;&#1084;&#1080; &#1087;&#1086; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1105;&#1085;&#1085;&#1086;&#1084;&#1091; &#1072;&#1076;&#1088;&#1077;&#1089;&#1091; (polling) &#1080; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1074;&#1077;&#1073;-&#1093;&#1091;&#1082;&#1086;&#1074;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1072; &#1089;&#1072;&#1084;&#1080; &#1076;&#1105;&#1088;&#1075;&#1072;&#1102;&#1090; &#1079;&#1072;&#1076;&#1072;&#1085;&#1085;&#1099;&#1081; &#1093;&#1091;&#1082; &#1076;&#1083;&#1103; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1095;&#1080; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093; &#1073;&#1086;&#1090;&#1091;. &#1042; &#1087;&#1088;&#1086;&#1076;&#1072;&#1082;&#1096;&#1085;&#1077;, &#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086;, &#1091;&#1076;&#1086;&#1073;&#1085;&#1077;&#1077; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1090;&#1100; &#1089; &#1093;&#1091;&#1082;&#1072;&#1084;&#1080;, &#1072; &#1087;&#1088;&#1080; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1077;&amp;nbsp;&#8212; &#1085;&#1077;&#1090;, &#1087;&#1086;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1091; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1077;&#1090;&#1089;&#1103; &#1085;&#1072; &#1083;&#1086;&#1082;&#1072;&#1083;&#1100;&#1085;&#1086;&#1081; &#1084;&#1072;&#1096;&#1080;&#1085;&#1077;. &#1050;&#1088;&#1086;&#1084;&#1077; &#1101;&#1090;&#1086;&#1075;&#1086; &#1103; &#1088;&#1077;&#1082;&#1086;&#1084;&#1077;&#1085;&#1076;&#1091;&#1102; &#1079;&#1072;&#1074;&#1077;&#1089;&#1090;&#1080; &#1076;&#1088;&#1091;&#1075;&#1086;&#1075;&#1086; &#1073;&#1086;&#1090;&#1072; &#1076;&#1083;&#1103; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1080;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1090;&#1077;, &#1082;&#1090;&#1086; &#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1102;&#1090;&#1089;&#1103; &#1074;&#1072;&#1096;&#1080;&#1084; &#1073;&#1086;&#1090;&#1086;&#1084; &#1074; &#1087;&#1088;&#1086;&#1076;&#1072;&#1082;&#1096;&#1085;&#1077;, &#1085;&#1077; &#1079;&#1072;&#1084;&#1077;&#1095;&#1072;&#1083;&#1080;, &#1082;&#1072;&#1082; &#1074;&#1099; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1072;&#1090;&#1099;&#1074;&#1072;&#1077;&#1090;&#1077;. &#1042;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1100; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1101;&#1090;&#1086; &#1103; &#1085;&#1072;&#1096;&#1105;&#1083; &#1087;&#1086;&#1082;&#1072; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1074; &#1086;&#1076;&#1085;&#1086;&#1081; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1077;: &lt;a href="https://github.com/yagop/node-telegram-bot-api"&gt;node-telegram-bot-api&lt;/a&gt; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1085;&#1077;&#1076;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1086;&#1081; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1080; &lt;i&gt;processUpdate&lt;/i&gt;. &#1044;&#1077;&#1083;&#1072;&#1077;&#1090;&#1089;&#1103; &#1101;&#1090;&#1086; &#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1086; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086;. &#1055;&#1088;&#1080; &#1080;&#1085;&#1080;&#1094;&#1080;&#1072;&#1083;&#1080;&#1079;&#1072;&#1094;&#1080;&#1080; &#1073;&#1086;&#1090;&#1072; &#1074; &#1092;&#1072;&#1081;&#1083;&#1077; &lt;b&gt;lib/bot.js&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code class='javascript'&gt;if (process.env.NODE_ENV === &amp;#39;production&amp;#39;) {
    bot = new TelegramBot(config.botToken, {polling: false});
    bot.setWebHook(config.host + config.url);
} else {
	bot = new TelegramBot(config.devBotToken, {polling: true});
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1040; &#1079;&#1072;&#1090;&#1077;&#1084; &#1091;&#1078;&#1077; &#1074; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1085;&#1086;&#1081; &#1095;&#1072;&#1089;&#1090;&#1080;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1072;&#1103;, &#1093;&#1086;&#1090;&#1100; &#1080; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1077;&#1090;&#1089;&#1103; &#1074;&#1089;&#1077;&#1075;&#1076;&#1072;, &#1080;&#1084;&#1077;&#1077;&#1090; &#1079;&#1085;&#1072;&#1095;&#1077;&#1085;&#1080;&#1077; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1076;&#1083;&#1103; &#1087;&#1088;&#1086;&#1076;&#1072;&#1082;&#1096;&#1085;&#1072;, &#1074; &#1092;&#1072;&#1081;&#1083;&#1077; &lt;b&gt;lib/web.js&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code class='javascript'&gt;app.post(config.url, function (req, res) {
    options.bot.processUpdate(req.body);
    res.status(200).send({}).end();
});&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1042;&#1077;&#1089;&#1100; &#1086;&#1089;&#1090;&#1072;&#1083;&#1100;&#1085;&#1086;&#1081; &#1082;&#1086;&#1076; &#1076;&#1083;&#1103; &#1073;&#1086;&#1090;&#1072; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1077;&#1090; &#1074; &#1086;&#1073;&#1086;&#1080;&#1093; &#1089;&#1083;&#1091;&#1095;&#1072;&#1103;&#1093; &#1086;&#1076;&#1080;&#1085;&#1072;&#1082;&#1086;&#1074;&#1086; &#1080; &#1074; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103;&#1093; &#1085;&#1077; &#1085;&#1091;&#1078;&#1076;&#1072;&#1077;&#1090;&#1089;&#1103;, &#1095;&#1090;&#1086; &#1089;&#1086;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1085;&#1086; &#1087;&#1088;&#1077;&#1082;&#1088;&#1072;&#1089;&#1085;&#1086;!&lt;/p&gt;&lt;h2&gt;&#1054;&#1087;&#1086;&#1074;&#1077;&#1097;&#1077;&#1085;&#1080;&#1077; &#1086;&#1073; &#1086;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1077;&lt;/h2&gt;&lt;p&gt;&#1042;&#1090;&#1086;&#1088;&#1086;&#1077;, &#1095;&#1090;&#1086; &#1085;&#1091;&#1078;&#1085;&#1086; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100;, &#1082;&#1072;&#1082; &#1084;&#1085;&#1077; &#1082;&#1072;&#1078;&#1077;&#1090;&#1089;&#1103;, &#1101;&#1090;&#1086; &#1086;&#1087;&#1086;&#1074;&#1077;&#1097;&#1072;&#1090;&#1100; &#1093;&#1086;&#1090;&#1100; &#1082;&#1086;&#1075;&#1086;-&#1085;&#1080;&#1073;&#1091;&#1076;&#1100; &#1086; &#1090;&#1086;&#1084;, &#1095;&#1090;&#1086; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088; &#1086;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085; &#1080;&#1083;&#1080; &#1079;&#1072;&#1087;&#1091;&#1097;&#1077;&#1085;. &#1058;&#1072;&#1082;&#1078;&#1077; &#1101;&#1090;&#1086; &#1085;&#1091;&#1078;&#1085;&#1086;, &#1077;&#1089;&#1083;&#1080; &#1087;&#1088;&#1080; &#1087;&#1077;&#1088;&#1077;&#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1077; &#1073;&#1086;&#1090;&#1072;, &#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1084;&#1077;&#1085;&#1103;&#1077;&#1090;&#1089;&#1103; &#1082;&#1072;&#1089;&#1090;&#1086;&#1084;&#1080;&#1079;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1072;&#1103; &#1082;&#1083;&#1072;&#1074;&#1080;&#1072;&#1090;&#1091;&#1088;&#1072;.&lt;/p&gt;&lt;p&gt;&#1045;&#1089;&#1083;&#1080; &#1074;&#1099; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1077;&#1090;&#1077; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &lt;a href="http://pm2.keymetrics.io/"&gt;pm2&lt;/a&gt;, &#1090;&#1086; &#1101;&#1090;&#1086;&#1090; &#1084;&#1077;&#1085;&#1077;&#1076;&#1078;&#1077;&#1088; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090; &#1076;&#1083;&#1103; &#1086;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1072; &#1090;&#1086;&#1090; &#1078;&#1077; &#1089;&#1080;&#1075;&#1085;&#1072;&#1083; &#160;&lt;i&gt;SIGINT&lt;/i&gt;, &#1095;&#1090;&#1086; &#1084;&#1099; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1084;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1086;&#1089;&#1090;&#1072;&#1085;&#1072;&#1074;&#1083;&#1080;&#1074;&#1072;&#1077;&#1084; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088; &#1074; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1077; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &lt;i&gt;Ctrl-C&lt;/i&gt;. &#1054;&#1095;&#1077;&#1085;&#1100; &#1091;&#1076;&#1086;&#1073;&#1085;&#1086;! &#1042; &#1092;&#1072;&#1081;&#1083;&#1077; &lt;b&gt;index.js&lt;/b&gt;&lt;/p&gt;&lt;pre&gt;&lt;code class='javascript'&gt;process.on(&amp;#39;SIGINT&amp;#39;, function () {
    Promise.all(config.permitUsers.map(function (userId) {
        return bot.sendMessage(userId, &amp;#39;&#1041;&#1086;&#1090; &#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1086; &#1074;&#1099;&#1082;&#1083;&#1102;&#1095;&#1072;&#1077;&#1090;&#1089;&#1103;. &#1058;&#1086;&#1083;&#1100;&#1082;&#1086; &#1089;&#1087;&#1086;&#1082;&#1086;&#1081;&#1089;&#1090;&#1074;&#1080;&#1077;!&amp;#39;, {
            reply_markup: {
                hide_keyboard: true
            }
        });
    })).then(gracefulClose).catch(function (err) {
        console.log(err);
        gracefulClose();
    });
});&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1072;&#1082;&#1080;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084;, &#1086;&#1089;&#1090;&#1072;&#1085;&#1072;&#1074;&#1083;&#1080;&#1074;&#1072;&#1103; &#1085;&#1072;&#1096; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088; &#1095;&#1077;&#1088;&#1077;&#1079; &lt;i&gt;Ctrl-C&lt;/i&gt; &#1084;&#1099; &#1074;&#1080;&#1076;&#1080;&#1084; &#1090;&#1086; &#1078;&#1077;, &#1095;&#1090;&#1086; &#1091;&#1074;&#1080;&#1076;&#1080;&#1090; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1100;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1087;&#1077;&#1088;&#1077;&#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1077;&#1090;&#1089;&#1103; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1077; &#1085;&#1072; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1077;.&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&#1055;&#1086;&#1083;&#1085;&#1099;&#1081; &#1085;&#1072; &#1090;&#1077;&#1082;&#1091;&#1097;&#1080;&#1081; &#1084;&#1086;&#1084;&#1077;&#1085;&#1090; &lt;a href="https://github.com/lonelyelk/yandex-pdd-telegram-bot"&gt;&#1082;&#1086;&#1076; &#1058;&#1077;&#1083;&#1077;&#1075;&#1088;&#1072;&#1084;-&#1073;&#1086;&#1090;&#1072; &#1076;&#1083;&#1103; &#1071;&#1085;&#1076;&#1077;&#1082;&#1089;.&#1055;&#1044;&#1044;&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;&lt;a href="https://tech.yandex.ru/pdd/doc/about-docpage/"&gt;API &#1071;&#1085;&#1076;&#1077;&#1082;&#1089;.&#1055;&#1044;&#1044;&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-16-04"&gt;&#1050;&#1072;&#1082; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080;&#1090;&#1100; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1077; node.js &#1085;&#1072; ubuntu 16.04&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/56</id>
    <published>2016-06-23T23:16:13+00:00</published>
    <updated>2016-06-23T23:16:13+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/56"/>
    <title>&#1058;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1072; Node.js</title>
    <content type="html">&lt;h2&gt;&#1042;&#1074;&#1086;&#1076;&#1085;&#1072;&#1103;&lt;/h2&gt;&lt;p&gt;&#1059;&#1078;&#1077; &#1085;&#1077; &#1088;&#1072;&#1079; &#1074; &#1101;&#1090;&#1086;&#1084; &#1073;&#1083;&#1086;&#1075;&#1077; &#1103; &#1088;&#1072;&#1090;&#1086;&#1074;&#1072;&#1083; &#1079;&#1072; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1089;&#1086;&#1073;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086;&#1075;&#1086; &#1082;&#1086;&#1076;&#1072;. &#1055;&#1086;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1091; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1084;&#1085;&#1077; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1086; &#1085;&#1072; &#1088;&#1072;&#1079;&#1085;&#1099;&#1093; &#1103;&#1079;&#1099;&#1082;&#1072;&#1093;, &#1090;&#1086; &#1080; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1087;&#1088;&#1080;&#1093;&#1086;&#1076;&#1080;&#1090;&#1089;&#1103; &#1087;&#1086;-&#1088;&#1072;&#1079;&#1085;&#1086;&#1084;&#1091;. &#1050;&#1072;&#1078;&#1076;&#1099;&#1081; &#1103;&#1079;&#1099;&#1082; &#1080;&#1084;&#1077;&#1077;&#1090; &#1089;&#1074;&#1086;&#1080; &#1087;&#1072;&#1090;&#1090;&#1077;&#1088;&#1085;&#1099;, &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1103; &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1087;&#1086;&#1083;&#1091;&#1095;&#1072;&#1077;&#1090;&#1089;&#1103; &#1085;&#1072;&#1080;&#1073;&#1086;&#1083;&#1077;&#1077; &#1091;&#1076;&#1086;&#1073;&#1085;&#1099;&#1081; &#1082;&#1086;&#1076;. &#1050;&#1072;&#1078;&#1076;&#1072;&#1103; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1072; &#1080;&#1083;&#1080; &#1089;&#1088;&#1077;&#1076;&#1072; &#1080;&#1084;&#1077;&#1077;&#1090; &#1074; &#1082;&#1072;&#1082;&#1086;&#1084;-&#1090;&#1086; &#1074;&#1080;&#1076;&#1077; &#1088;&#1077;&#1072;&#1083;&#1080;&#1079;&#1086;&#1074;&#1072;&#1085;&#1085;&#1099;&#1077; &#1087;&#1086;&#1076;&#1093;&#1086;&#1076;&#1099; &#1082; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1102;.&lt;/p&gt;&lt;p&gt;&#1044;&#1083;&#1103; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1082;&#1086;&#1076;&#1072; &#1085;&#1072; &#1085;&#1086;&#1076;&#1077; &#1103; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1102; &lt;a href="http://jasmine.github.io/"&gt;&#1078;&#1072;&#1089;&#1084;&#1080;&#1085;&lt;/a&gt;. &#1044;&#1083;&#1103; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072; &#1079;&#1072;&#1076;&#1072;&#1095; &#8212; &lt;a href="http://gulpjs.com/"&gt;&#1075;&#1072;&#1083;&#1087;&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&#1057;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103; &#1093;&#1086;&#1095;&#1091; &#1088;&#1072;&#1089;&#1089;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100; &#1086; &#1076;&#1074;&#1091;&#1093; &#1087;&#1088;&#1086;&#1089;&#1090;&#1099;&#1093; &#1087;&#1088;&#1080;&#1105;&#1084;&#1072;&#1093; &#1076;&#1083;&#1103; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1082;&#1086;&#1076;&#1072; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1072;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1103;&#1102;&#1090; &#1074;&#1099;&#1076;&#1077;&#1083;&#1103;&#1090;&#1100; &#1080; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1090;&#1086;, &#1095;&#1090;&#1086; &#1085;&#1091;&#1078;&#1085;&#1086;.&lt;/p&gt;&lt;p&gt;&lt;img alt="Staged reality" height="337" src="http://lonelyelk.ru/images/uploads/0000/0057/stagedreality.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1050;&#1090;&#1086; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1077;&#1090; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&lt;/h2&gt;&lt;p&gt;&#1055;&#1077;&#1088;&#1074;&#1086;&#1077;, &#1095;&#1090;&#1086; &#1093;&#1086;&#1090;&#1077;&#1083;&#1086;&#1089;&#1100; &#1073;&#1099; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100;, &#1101;&#1090;&#1086; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1090;&#1100; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088; &#1086;&#1090;&#1076;&#1077;&#1083;&#1100;&#1085;&#1086; &#1076;&#1083;&#1103; &#1082;&#1072;&#1078;&#1076;&#1086;&#1075;&#1086; &#1090;&#1077;&#1089;&#1090;&#1072;. &#1046;&#1077;&#1083;&#1072;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086; &#1085;&#1072; &#1076;&#1088;&#1091;&#1075;&#1086;&#1084; &#1087;&#1086;&#1088;&#1090;&#1091;. &#1052;&#1086;&#1078;&#1077;&#1090; &#1073;&#1099;&#1090;&#1100;, &#1076;&#1072;&#1078;&#1077; &#1087;&#1072;&#1088;&#1072;&#1083;&#1083;&#1077;&#1083;&#1100;&#1085;&#1086; &#1089; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1102;&#1097;&#1080;&#1084; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1086;&#1084;, &#1085;&#1072; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1084; &#1084;&#1099; &#1095;&#1090;&#1086;-&#1090;&#1086; &#1087;&#1088;&#1086;&#1073;&#1091;&#1077;&#1084; &#1088;&#1091;&#1082;&#1072;&#1084;&#1080;. &#1044;&#1083;&#1103; &#1101;&#1090;&#1086;&#1075;&#1086; &#1074; &#1085;&#1086;&#1076;&#1077; &#1077;&#1089;&#1090;&#1100; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1100; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1080;&#1090;&#1100;, &#1085;&#1072;&#1093;&#1086;&#1076;&#1080;&#1084;&#1089;&#1103; &#1083;&#1080; &#1084;&#1099; &#1074; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1086;&#1084; &#1092;&#1072;&#1081;&#1083;&#1077;, &#1080;&#1083;&#1080; &#1077;&#1075;&#1086; &#1079;&#1072;&#1075;&#1088;&#1091;&#1078;&#1072;&#1077;&#1090; &#1082;&#1072;&#1082;&#1086;&#1081;-&#1090;&#1086; &#1076;&#1088;&#1091;&#1075;&#1086;&#1081; &#1092;&#1072;&#1081;&#1083;:&lt;/p&gt;&lt;pre&gt;&lt;code class='javascript'&gt;if (require.main === module) {
	app.use(&amp;#39;/&amp;#39;, require(path.join(__dirname, &amp;#39;routes&amp;#39;, &amp;#39;main&amp;#39;))());
	var server = app.listen(5000, function () {
		...
	});
} else {
	exports = module.exports = function (options) {
		app.use(&amp;#39;/&amp;#39;, require(path.join(__dirname, &amp;#39;routes&amp;#39;, &amp;#39;main&amp;#39;))(options));
		return app;
	};
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1072;&#1082;&#1080;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084;, &#1091;&#1078;&#1077; &#1074; &#1090;&#1077;&#1089;&#1090;&#1086;&#1074;&#1086;&#1084; &#1092;&#1088;&#1077;&#1081;&#1084;&#1074;&#1086;&#1088;&#1082;&#1077; &#1084;&#1099; &#1073;&#1091;&#1076;&#1077;&#1084; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1090;&#1100;:&lt;/p&gt;&lt;pre&gt;&lt;code class='javascript'&gt;app = require(&amp;#39;index.js&amp;#39;);
server = app(...).listen(6000, function (err) {...});&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1087;&#1077;&#1088;&#1077;&#1076; &#1082;&#1072;&#1078;&#1076;&#1099;&#1084; &#1090;&#1077;&#1089;&#1090;&#1086;&#1084;, &#1072; &#1087;&#1086;&#1089;&#1083;&#1077; &#1082;&#1072;&#1078;&#1076;&#1086;&#1075;&#1086; &#1090;&#1077;&#1089;&#1090;&#1072;:&lt;/p&gt;&lt;pre&gt;&lt;code class='javascript'&gt;server.close(function (err) {...});&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1054;&#1095;&#1077;&#1085;&#1100; &#1091;&#1076;&#1086;&#1073;&#1085;&#1086;!&lt;/p&gt;&lt;h2&gt;&#1048;&#1084;&#1080;&#1090;&#1072;&#1094;&#1080;&#1103; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&lt;/h2&gt;&lt;p&gt;&#1042;&#1090;&#1086;&#1088;&#1086;&#1077;, &#1095;&#1090;&#1086; &#1073;&#1099; &#1093;&#1086;&#1090;&#1077;&#1083;&#1086;&#1089;&#1100; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1087;&#1088;&#1080; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1080; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1072;, &#8212; &#1080;&#1084;&#1080;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1084;&#1099;&#1077; &#1080;&#1084; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1080;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1082;&#1086;&#1076; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1072;, &#1072; &#1085;&#1077; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1080;. &#1057;&#1074;&#1103;&#1079;&#1082;&#1080; &#1090;&#1086;&#1078;&#1077; &#1074;&#1072;&#1078;&#1085;&#1099;, &#1085;&#1086; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1090;&#1086;&#1075;&#1076;&#1072;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1084;&#1099; &#1101;&#1090;&#1086;&#1075;&#1086; &#1089;&#1072;&#1084;&#1080; &#1093;&#1086;&#1090;&#1080;&#1084;. &#1048; &#1090;&#1091;&#1090; &#1087;&#1086;&#1103;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1099;&#1081; &#1084;&#1086;&#1084;&#1077;&#1085;&#1090;. &#1045;&#1089;&#1083;&#1080; &#1084;&#1099; &#1093;&#1086;&#1090;&#1080;&#1084; &#1080;&#1084;&#1080;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1080; &#1087;&#1088;&#1080; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1080;, &#1085;&#1072;&#1084; &#1085;&#1091;&#1078;&#1085;&#1086; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1105;&#1085;&#1085;&#1099;&#1081; &#1087;&#1072;&#1090;&#1090;&#1077;&#1088;&#1085; &#1087;&#1088;&#1080; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1080;. &#1055;&#1072;&#1090;&#1090;&#1077;&#1088;&#1085; &#1092;&#1072;&#1073;&#1088;&#1080;&#1082;. &#1058;&#1086; &#1077;&#1089;&#1090;&#1100; &#1084;&#1099; &#1085;&#1077; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1091;&#1077;&#1084; &#1089;&#1074;&#1086;&#1081; &#1082;&#1086;&#1076;, &#1085;&#1086; &#1091;&#1089;&#1090;&#1088;&#1072;&#1080;&#1074;&#1072;&#1077;&#1084; &#1072;&#1088;&#1093;&#1080;&#1090;&#1077;&#1082;&#1090;&#1091;&#1088;&#1091; &#1080; &#1089;&#1090;&#1080;&#1083;&#1100; &#1090;&#1072;&#1082;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1077;&#1075;&#1086; &#1091;&#1076;&#1086;&#1073;&#1085;&#1077;&#1077; &#1073;&#1099;&#1083;&#1086; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100;.&lt;/p&gt;&lt;p&gt;&#1042; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1089; &#1087;&#1072;&#1090;&#1090;&#1077;&#1088;&#1085;&#1086;&#1084; &#1092;&#1072;&#1073;&#1088;&#1080;&#1082;&#1080; &#1084;&#1099; &#1074;&#1086;&#1079;&#1074;&#1088;&#1072;&#1097;&#1072;&#1077;&#1084; &#1074; &#1082;&#1072;&#1095;&#1077;&#1089;&#1090;&#1074;&#1077; &#1084;&#1086;&#1076;&#1091;&#1083;&#1103; &#1085;&#1077; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;, &#1072; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1102;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1072;&#1103; &#1089;&#1086;&#1079;&#1076;&#1072;&#1105;&#1090; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090; &#1074; &#1089;&#1086;&#1086;&#1090;&#1074;&#1077;&#1090;&#1089;&#1090;&#1074;&#1080;&#1080; &#1089; &#1085;&#1072;&#1096;&#1080;&#1084;&#1080; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1072;&#1084;&#1080;:&lt;/p&gt;&lt;pre&gt;&lt;code class='javascript'&gt;exports = module.exports = function (options) {
	options = options || {};
	var customLib = options.customLib || require(...);

	/* GET main page. */
	router.get(&amp;#39;/&amp;#39;, function (req, res, next) {
		res.end(&amp;#39;Real server text. CustomLib: &amp;#39; + customLib.name);
	});

	return router;
};&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1050;&#1072;&#1082; &#1074;&#1080;&#1076;&#1085;&#1086; &#1074; &#1074;&#1099;&#1079;&#1086;&#1074;&#1072;&#1093; &#1074;&#1099;&#1096;&#1077;, &#1084;&#1099; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1105;&#1084; &#1089;&#1082;&#1074;&#1086;&#1079;&#1085;&#1099;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084; &#1085;&#1072;&#1096;&#1080; &#1086;&#1087;&#1094;&#1080;&#1080; &#1087;&#1088;&#1080; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1080;, &#1072; &#1087;&#1088;&#1080; &#1085;&#1086;&#1088;&#1084;&#1072;&#1083;&#1100;&#1085;&#1086;&#1084; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1077;, &#1085;&#1077; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1105;&#1084; &#1085;&#1080;&#1095;&#1077;&#1075;&#1086;.&lt;/p&gt;&lt;p&gt;&#1058;&#1072;&#1082;&#1080;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084;, &#1087;&#1086;&#1083;&#1091;&#1095;&#1072;&#1077;&#1090;&#1089;&#1103;, &#1095;&#1090;&#1086; &#1087;&#1088;&#1080; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1077; &#1095;&#1077;&#1088;&#1077;&#1079; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077;, &#1080;&#1083;&#1080; &#1076;&#1072;&#1078;&#1077; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1087;&#1088;&#1080; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1080; &#1090;&#1077;&#1089;&#1090;&#1086;&#1074; &#1074;&#1072;&#1078;&#1085;&#1086; &#1085;&#1077; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1090;&#1077;&#1089;&#1090;&#1099;, &#1085;&#1086; &#1080; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1082;&#1086;&#1076;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081;, &#1074;&#1086;-&#1087;&#1077;&#1088;&#1074;&#1099;&#1093;, &#1084;&#1086;&#1078;&#1085;&#1086;, &#1072; &#1074;&#1086;-&#1074;&#1090;&#1086;&#1088;&#1099;&#1093;, &#1091;&#1076;&#1086;&#1073;&#1085;&#1086; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100;.&lt;/p&gt;&lt;h2&gt;&#1044;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://github.com/lonelyelk/lonelyelk_code/tree/master/20160623_node_testing"&gt;&#1055;&#1086;&#1083;&#1085;&#1099;&#1081; &#1082;&#1086;&#1076; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088;&#1072; &#1074; &#1089;&#1073;&#1086;&#1088;&#1077;&lt;/a&gt;&lt;/p&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/55</id>
    <published>2016-06-09T22:18:44+00:00</published>
    <updated>2016-06-09T22:18:44+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/55"/>
    <title>&#1050;&#1091;&#1076;&#1072; &#1091;&#1093;&#1086;&#1076;&#1103;&#1090; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1089;&#1090;&#1099;</title>
    <content type="html">&lt;p&gt;&#1057;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103; &#1093;&#1086;&#1095;&#1091; &#1087;&#1088;&#1077;&#1076;&#1072;&#1090;&#1100;&#1089;&#1103; &#1088;&#1072;&#1079;&#1084;&#1099;&#1096;&#1083;&#1077;&#1085;&#1080;&#1103;&#1084; &#1080; &#1074;&#1099;&#1087;&#1091;&#1089;&#1090;&#1080;&#1090;&#1100; &#1089;&#1090;&#1072;&#1090;&#1100;&#1102; &#1073;&#1077;&#1079; &#1077;&#1076;&#1080;&#1085;&#1086;&#1081; &#1089;&#1090;&#1088;&#1086;&#1095;&#1082;&#1080; &#1082;&#1086;&#1076;&#1072;. &#1055;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1082;&#1072;&#1082; &#1086;&#1073;&#1097;&#1077;&#1076;&#1086;&#1089;&#1090;&#1091;&#1087;&#1085;&#1086;&#1077; &#1079;&#1085;&#1072;&#1085;&#1080;&#1077; &#1091;&#1078;&#1077; &#1089;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090; &#1085;&#1072;&#1089;&#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1076;&#1072;&#1074;&#1085;&#1086;, &#1095;&#1090;&#1086; &#1091;&#1078;&#1077; &#1077;&#1089;&#1090;&#1100; &#1083;&#1102;&#1076;&#1080;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1088;&#1086;&#1076;&#1080;&#1083;&#1080;&#1089;&#1100; &#1074; &#1101;&#1090;&#1086;&#1090; &#1087;&#1077;&#1088;&#1080;&#1086;&#1076; &#1080; &#1085;&#1072;&#1095;&#1072;&#1083;&#1080; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100;. &#1058;&#1086; &#1077;&#1089;&#1090;&#1100; &#1076;&#1083;&#1103; &#1085;&#1080;&#1093; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077;, &#1082;&#1072;&#1082; &#1087;&#1086;&#1085;&#1103;&#1090;&#1085;&#1072;&#1103; &#1089;&#1092;&#1077;&#1088;&#1072; &#1076;&#1077;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1089;&#1090;&#1080;, &#1089;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1086;&#1074;&#1072;&#1083;&#1086; &#1074;&#1089;&#1077;&#1075;&#1076;&#1072;. &#1058;&#1072;&#1082;&#1078;&#1077; &#1101;&#1090;&#1086; &#1086;&#1079;&#1085;&#1072;&#1095;&#1072;&#1077;&#1090;, &#1095;&#1090;&#1086; &#1077;&#1089;&#1090;&#1100; &#1083;&#1102;&#1076;&#1080;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1073;&#1099;&#1083;&#1080; &#1074; &#1101;&#1090;&#1086;&#1081; &#1089;&#1092;&#1077;&#1088;&#1077;, &#1072; &#1087;&#1086;&#1090;&#1086;&#1084; &#1091;&#1096;&#1083;&#1080;, &#1086;&#1089;&#1090;&#1072;&#1074;&#1080;&#1074; &#1087;&#1086;&#1089;&#1083;&#1077; &#1089;&#1077;&#1073;&#1103; &#1089;&#1083;&#1077;&#1076;&#1099;: &#1088;&#1072;&#1079;&#1085;&#1099;&#1077; &#1080; &#1087;&#1086; &#1088;&#1072;&#1079;&#1085;&#1099;&#1084; &#1087;&#1088;&#1080;&#1095;&#1080;&#1085;&#1072;&#1084;.&lt;/p&gt;&lt;p&gt;&lt;img alt="Missing people" height="337" src="http://lonelyelk.ru/images/uploads/0000/0055/missingpeople.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1041;&#1077;&#1079; &#1089;&#1083;&#1077;&#1076;&#1072;&lt;/h2&gt;&lt;p&gt;&#1053;&#1077;&#1076;&#1072;&#1074;&#1085;&#1086; &#1103; &#1087;&#1088;&#1086;&#1085;&#1080;&#1082;&#1089;&#1103; &#1085;&#1086;&#1074;&#1099;&#1084; &#1084;&#1086;&#1083;&#1086;&#1076;&#1099;&#1084; &#1103;&#1079;&#1099;&#1082;&#1086;&#1084; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &lt;a href="http://www.elm-tutorial.org/en/"&gt;elm&lt;/a&gt;. &#1063;&#1080;&#1090;&#1072;&#1083; &#1089;&#1090;&#1072;&#1090;&#1100;&#1080;, &#1087;&#1086;&#1090;&#1086;&#1084; &#1088;&#1077;&#1096;&#1080;&#1083; &#1087;&#1086;&#1090;&#1088;&#1086;&#1075;&#1072;&#1090;&#1100; &#1088;&#1091;&#1082;&#1072;&#1084;&#1080;. &#1059;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080;&#1083; &#1087;&#1086;&#1076;&#1089;&#1074;&#1077;&#1090;&#1082;&#1091; &#1089;&#1080;&#1085;&#1090;&#1072;&#1082;&#1089;&#1080;&#1089;&#1072; &#1076;&#1083;&#1103; &#1090;&#1077;&#1082;&#1089;&#1090;&#1086;&#1074;&#1086;&#1075;&#1086; &#1088;&#1077;&#1076;&#1072;&#1082;&#1090;&#1086;&#1088;&#1072;, &#1087;&#1086;&#1089;&#1090;&#1072;&#1074;&#1080;&#1083; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1080;, &#1080; &#1074;&#1076;&#1088;&#1091;&#1075;&amp;nbsp;&#8212; &#1073;&#1077;&#1076;&#1072;! &#1055;&#1086;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1091; &#1103;&#1079;&#1099;&#1082; &#1084;&#1086;&#1083;&#1086;&#1076;&#1086;&#1081; (&#1084;&#1072;&#1082;&#1089;&#1080;&#1084;&#1091;&#1084; 4 &#1075;&#1086;&#1076;&#1072; &#1077;&#1084;&#1091;), &#1090;&#1086; &#1089;&#1080;&#1085;&#1090;&#1072;&#1082;&#1089;&#1080;&#1089; &#1085;&#1077;&#1084;&#1085;&#1086;&#1075;&#1086; &#1087;&#1086;&#1084;&#1077;&#1085;&#1103;&#1083;&#1089;&#1103; &#1074; &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1077;&#1084; &#1088;&#1077;&#1083;&#1080;&#1079;&#1077;. &#1048; &#1086;&#1082;&#1072;&#1079;&#1072;&#1083;&#1086;&#1089;&#1100;, &#1095;&#1090;&#1086; &#1087;&#1086;&#1076;&#1089;&#1074;&#1077;&#1090;&#1082;&#1072; &#1085;&#1077; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1077;&#1090; &#1089; &#1085;&#1086;&#1074;&#1099;&#1084; &#1089;&#1080;&#1085;&#1090;&#1072;&#1082;&#1089;&#1080;&#1089;&#1086;&#1084;.&lt;/p&gt;&lt;p&gt;&#1071; &#1087;&#1086;&#1083;&#1077;&#1079; &#1088;&#1072;&#1079;&#1073;&#1080;&#1088;&#1072;&#1090;&#1100;&#1089;&#1103;, &#1085;&#1072;&#1095;&#1072;&#1083; &#1089;&#1090;&#1088;&#1086;&#1095;&#1080;&#1090;&#1100; &#1086;&#1090;&#1095;&#1105;&#1090;&#1099; &#1086;&#1073; &#1086;&#1096;&#1080;&#1073;&#1082;&#1072;&#1093; &#1080; &#1086;&#1073;&#1085;&#1072;&#1088;&#1091;&#1078;&#1080;&#1083; &#1090;&#1072;&#1082;&#1091;&#1102; &#1080;&#1089;&#1090;&#1086;&#1088;&#1080;&#1102;. &#1063;&#1077;&#1083;&#1086;&#1074;&#1077;&#1082;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1083; &#1080; &#1087;&#1086;&#1076;&#1076;&#1077;&#1088;&#1078;&#1080;&#1074;&#1072;&#1083; &#1087;&#1086;&#1076;&#1089;&#1074;&#1077;&#1090;&#1082;&#1091; &#1089;&#1080;&#1085;&#1090;&#1072;&#1082;&#1089;&#1080;&#1089;&#1072; &#1076;&#1083;&#1103; &#1101;&#1083;&#1084;&#1072;, &#1087;&#1086;&#1086;&#1073;&#1077;&#1097;&#1072;&#1083; &#1076;&#1086;&#1073;&#1072;&#1074;&#1080;&#1090;&#1100; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1099;&#1077; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103; &#1089;&#1088;&#1072;&#1079;&#1091; &#1087;&#1086;&#1089;&#1083;&#1077; &#1074;&#1099;&#1093;&#1086;&#1076;&#1072; &#1085;&#1086;&#1074;&#1086;&#1081; &#1074;&#1077;&#1088;&#1089;&#1080;&#1080; &#1089;&#1080;&#1085;&#1090;&#1072;&#1082;&#1089;&#1080;&#1089;&#1072;, &#1080; &#1080;&#1089;&#1095;&#1077;&#1079; &#1073;&#1077;&#1089;&#1089;&#1083;&#1077;&#1076;&#1085;&#1086;. &#1048;&#1084;&#1103; &#1077;&#1075;&#1086;&amp;nbsp; &lt;i&gt;deadfoxygandpa&lt;/i&gt;. &#1057;&#1086;&#1074;&#1087;&#1072;&#1076;&#1077;&#1085;&#1080;&#1077;?&lt;/p&gt;&lt;p&gt;&#1055;&#1086;&#1085;&#1103;&#1090;&#1085;&#1086;, &#1095;&#1090;&#1086; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090; &#1101;&#1090;&#1086;&#1090; &#1087;&#1088;&#1080;&#1102;&#1090;&#1103;&#1090;, &#1080; &lt;a href="https://github.com/wbond/package_control_channel/pull/5551"&gt;&#1091;&#1089;&#1099;&#1085;&#1086;&#1074;&#1103;&#1090;&lt;/a&gt;, &#1085;&#1086; &#1095;&#1090;&#1086; &#1073;&#1091;&#1076;&#1077;&#1090; &#1089; &#1095;&#1077;&#1083;&#1086;&#1074;&#1077;&#1082;&#1086;&#1084;? &#1050;&#1086;&#1084;&#1100;&#1102;&#1085;&#1080;&#1090;&#1080; &#1101;&#1090;&#1086;&#1075;&#1086; &#1103;&#1079;&#1099;&#1082;&#1072; &#1086;&#1095;&#1077;&#1085;&#1100; &#1084;&#1072;&#1083;&#1077;&#1085;&#1100;&#1082;&#1086;&#1077;, &#1080;, &#1085;&#1077; &#1080;&#1084;&#1077;&#1103; &#1079;&#1085;&#1072;&#1082;&#1086;&#1084;&#1099;&#1093; &#1089; &#1085;&#1080;&#1084; &#1083;&#1080;&#1095;&#1085;&#1086; &#1083;&#1102;&#1076;&#1077;&#1081;, &#1090;&#1072;&#1082; &#1085;&#1080;&#1082;&#1086;&#1075;&#1076;&#1072; &#1080; &#1085;&#1077; &#1091;&#1079;&#1085;&#1072;&#1077;&#1090;, &#1095;&#1090;&#1086; &#1089;&#1083;&#1091;&#1095;&#1080;&#1083;&#1086;&#1089;&#1100;.&lt;/p&gt;&lt;h2&gt;&#1059;&#1081;&#1090;&#1080; &#1082;&#1088;&#1072;&#1089;&#1080;&#1074;&#1086;&lt;/h2&gt;&lt;p&gt;&#1044;&#1086; &#1101;&#1090;&#1086;&#1075;&#1086; &#1089;&#1083;&#1091;&#1095;&#1072;&#1103;, &#1087;&#1088;&#1086;&#1080;&#1079;&#1086;&#1096;&#1083;&#1072; &#1080;&#1089;&#1090;&#1086;&#1088;&#1080;&#1103;, &#1087;&#1088;&#1086; &#1082;&#1086;&#1090;&#1086;&#1088;&#1091;&#1102; &#1076;&#1072;&#1078;&#1077; &#1087;&#1080;&#1089;&#1072;&#1083;&#1080; &#1074; &#1085;&#1086;&#1074;&#1086;&#1089;&#1090;&#1103;&#1093;. &#1054;&#1076;&#1080;&#1085; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1089;&#1090; &#1086;&#1073;&#1080;&#1076;&#1077;&#1083;&#1089;&#1103; &#1085;&#1072; &#1094;&#1077;&#1085;&#1090;&#1088;&#1072;&#1083;&#1100;&#1085;&#1099;&#1081; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1081; &#1084;&#1086;&#1076;&#1091;&#1083;&#1077;&#1081; &#1076;&#1083;&#1103; &#1085;&#1086;&#1076;&#1099;, &#1080; &#1091;&#1076;&#1072;&#1083;&#1080;&#1083; &#1086;&#1090;&#1090;&#1091;&#1076;&#1072; &#1074;&#1089;&#1077; &#1089;&#1074;&#1086;&#1080; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1099;. &#1052;&#1086;&#1078;&#1085;&#1086; &#1087;&#1086;&#1095;&#1080;&#1090;&#1072;&#1090;&#1100; &lt;a href="http://blog.npmjs.org/post/141577284765/kik-left-pad-and-npm"&gt;&#1088;&#1072;&#1079;&#1073;&#1086;&#1088; &#1087;&#1086;&#1083;&#1105;&#1090;&#1086;&#1074;&lt;/a&gt;. &#1058;&#1086;&#1074;&#1072;&#1088;&#1080;&#1097; &#1086;&#1082;&#1072;&#1079;&#1072;&#1083;&#1089;&#1103; &#1086;&#1095;&#1077;&#1085;&#1100; &#1087;&#1083;&#1086;&#1076;&#1086;&#1074;&#1080;&#1090;, &#1080; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1083; &#1082;&#1091;&#1095;&#1091; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;, &#1086;&#1076;&#1085;&#1072; &#1080;&#1079; &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1093;, &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1083;&#1072;&#1089;&#1100; &#1074; &#1085;&#1077;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1080;&#1093; &#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1086; &#1073;&#1086;&#1083;&#1100;&#1096;&#1080;&#1093; &#1080; &#1087;&#1086;&#1087;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1072;&#1093;. &#1050;&#1089;&#1090;&#1072;&#1090;&#1080; &#1089;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100;, &lt;a href="https://github.com/stevemao/left-pad"&gt;&#1089;&#1072;&#1084;&#1072; &#1101;&#1090;&#1072; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1072;&lt;/a&gt; &#1089;&#1076;&#1077;&#1083;&#1072;&#1085;&#1072; &#1076;&#1083;&#1103; &#1090;&#1086;&#1075;&#1086;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1076;&#1086;&#1073;&#1072;&#1074;&#1083;&#1103;&#1090;&#1100; &#1087;&#1088;&#1086;&#1073;&#1077;&#1083;&#1099; &#1074; &#1083;&#1077;&#1074;&#1091;&#1102; &#1095;&#1072;&#1089;&#1090;&#1100; &#1089;&#1090;&#1088;&#1086;&#1082;&#1080;, &#1080; &#1074;&#1077;&#1089;&#1100; &#1077;&#1105; &#1082;&#1086;&#1076; &#1079;&#1072;&#1085;&#1080;&#1084;&#1072;&#1077;&#1090; &lt;b&gt;11 &#1089;&#1090;&#1088;&#1086;&#1095;&#1077;&#1082;&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;&#1042;&#1086;&#1086;&#1073;&#1097;&#1077;, &#1101;&#1090;&#1086; &#1086;&#1090;&#1082;&#1088;&#1099;&#1074;&#1072;&#1077;&#1090; &#1073;&#1086;&#1083;&#1100;&#1096;&#1091;&#1102; &#1090;&#1077;&#1084;&#1091; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1089;&#1090;&#1086;-&#1089;&#1088;&#1072;&#1095;&#1077;&#1081; &#1080; &#1090;&#1086;&#1075;&#1086;, &#1082;&#1072;&#1082; &#1074; &#1091;&#1089;&#1083;&#1086;&#1074;&#1080;&#1103;&#1093; &#1085;&#1077;&#1087;&#1088;&#1077;&#1076;&#1089;&#1082;&#1072;&#1079;&#1091;&#1077;&#1084;&#1099;&#1093; &#1082;&#1086;&#1085;&#1092;&#1083;&#1080;&#1082;&#1090;&#1085;&#1099;&#1093; &#1084;&#1085;&#1077;&#1085;&#1080;&#1081; &#1084;&#1086;&#1078;&#1085;&#1086; &#1095;&#1090;&#1086;-&#1090;&#1086; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1087;&#1086;&#1083;&#1077;&#1079;&#1085;&#1086;&#1077;. &#1053;&#1086; &#1103; &#1086;&#1073; &#1101;&#1090;&#1086;&#1084; &#1085;&#1077; &#1073;&#1091;&#1076;&#1091;.&lt;/p&gt;&lt;h2&gt;&#1055;&#1086;&#1095;&#1077;&#1084;&#1091;&lt;/h2&gt;&lt;p&gt;&#1055;&#1077;&#1088;&#1074;&#1086;&#1081; &#1078;&#1077; &#1080;&#1089;&#1090;&#1086;&#1088;&#1080;&#1077;&#1081;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1072;&#1103; &#1086;&#1073;&#1088;&#1072;&#1090;&#1080;&#1083;&#1072; &#1084;&#1086;&#1081; &#1074;&#1085;&#1080;&#1084;&#1072;&#1085;&#1080;&#1077; &#1085;&#1072; &#1090;&#1086;, &#1095;&#1090;&#1086; &#1083;&#1102;&#1076;&#1080; &#1086;&#1090;&#1076;&#1077;&#1083;&#1077;&#1085;&#1099; &#1086;&#1090; &#1089;&#1074;&#1086;&#1077;&#1075;&#1086; &#1074;&#1080;&#1088;&#1090;&#1091;&#1072;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1087;&#1077;&#1088;&#1089;&#1086;&#1085;&#1072;&#1078;&#1072;, &#1073;&#1099;&#1083;&#1072; &#1080;&#1089;&#1090;&#1086;&#1088;&#1080;&#1103; &lt;a href="https://en.wikipedia.org/wiki/Why_the_lucky_stiff"&gt;&lt;i&gt;Why the Lucky Stiff&lt;/i&gt;&lt;/a&gt;. &#1055;&#1086; &#1077;&#1075;&#1086; &lt;a href="http://poignant.guide/"&gt;&#1091;&#1095;&#1077;&#1073;&#1085;&#1080;&#1082;&#1091;&lt;/a&gt; &#1103; &#1080;&#1079;&#1091;&#1095;&#1072;&#1083; &#1088;&#1091;&#1073;&#1080;. &#1053;&#1086; &#1074; &#1082;&#1072;&#1082;&#1086;&#1081;-&#1090;&#1086; &#1084;&#1086;&#1084;&#1077;&#1085;&#1090; &#1086;&#1085; &#1088;&#1077;&#1096;&#1080;&#1083; &#1091;&#1081;&#1090;&#1080; &#1080;&#1079; &#1080;&#1085;&#1090;&#1077;&#1088;&#1085;&#1077;&#1090;&#1072;. &#1055;&#1077;&#1088;&#1077;&#1076; &#1090;&#1077;&#1084;, &#1082;&#1072;&#1082; &#1091;&#1081;&#1090;&#1080; &#1074; &#1086;&#1092;&#1092;&#1083;&#1072;&#1081;&#1085;, &#1086;&#1085; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1083;: &#171;&#1055;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1074;&#1077;&#1089;&#1100;&#1084;&#1072; &#1085;&#1077;&#1073;&#1083;&#1072;&#1075;&#1086;&#1076;&#1072;&#1088;&#1085;&#1086;. &#1063;&#1077;&#1088;&#1077;&#1079; &#1075;&#1086;&#1076; &#1090;&#1099; &#1074;&#1080;&#1076;&#1080;&#1096;&#1100;, &#1082;&#1072;&#1082; &#1090;&#1074;&#1086;&#1102; &#1088;&#1072;&#1073;&#1086;&#1090;&#1091; &#1079;&#1072;&#1084;&#1077;&#1097;&#1072;&#1077;&#1090; &#1083;&#1091;&#1095;&#1096;&#1077; &#1089;&#1076;&#1077;&#1083;&#1072;&#1085;&#1085;&#1072;&#1103;, &#1072; &#1095;&#1077;&#1088;&#1077;&#1079; &#1085;&#1077;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1086; &#1083;&#1077;&#1090; &#1077;&#1105; &#1091;&#1078;&#1077; &#1080; &#1085;&#1077; &#1079;&#1072;&#1087;&#1091;&#1089;&#1090;&#1080;&#1090;&#1100;&#187;. &#1069;&#1090;&#1086; &#1086;&#1085; &#1089;&#1082;&#1072;&#1079;&#1072;&#1083; &#1074; 2009-&#1084;.&lt;/p&gt;&lt;p&gt;&#1057;&#1077;&#1081;&#1095;&#1072;&#1089; &#1089;&#1088;&#1086;&#1082;&#1080; &#1091;&#1089;&#1090;&#1072;&#1088;&#1077;&#1074;&#1072;&#1085;&#1080;&#1103; &#1089;&#1078;&#1072;&#1083;&#1080;&#1089;&#1100; &#1077;&#1097;&#1105; &#1073;&#1086;&#1083;&#1100;&#1096;&#1077;. &#1054; &#1095;&#1105;&#1084; &#1103; &lt;a href="http://lonelyelk.ru/posts/45"&gt;&#1087;&#1080;&#1089;&#1072;&#1083;&lt;/a&gt; &#1087;&#1086;&#1089;&#1083;&#1077; &#1087;&#1077;&#1088;&#1077;&#1088;&#1099;&#1074;&#1072;. &#1054;&#1090; &#1090;&#1086;&#1075;&#1086; &#1080; &#1089;&#1090;&#1086;&#1083;&#1087;&#1086;&#1074;-&#1072;&#1074;&#1090;&#1086;&#1088;&#1080;&#1090;&#1077;&#1090;&#1086;&#1074;, &#1090;&#1080;&#1087;&#1072; &lt;i&gt;_why&lt;/i&gt; &#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080;&#1090;&#1089;&#1103; &#1073;&#1086;&#1083;&#1100;&#1096;&#1077;, &#1072; &#1089;&#1072;&#1084;&#1080; &#1086;&#1085;&#1080; &#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1103;&#1090;&#1089;&#1103; &#1084;&#1077;&#1083;&#1100;&#1095;&#1077; &#1080; &#1079;&#1072;&#1084;&#1077;&#1090;&#1085;&#1086; &#1073;&#1099;&#1089;&#1090;&#1088;&#1086;&#1090;&#1077;&#1095;&#1085;&#1077;&#1077;. &#1053;&#1086; &#1077;&#1089;&#1083;&#1080; &#1074;&#1072;&#1084;, &#1082;&#1072;&#1082; &#1080; &#1084;&#1085;&#1077;, &#1089;&#1090;&#1088;&#1077;&#1084;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1077; &#1091;&#1089;&#1090;&#1072;&#1088;&#1077;&#1074;&#1072;&#1085;&#1080;&#1077; &#1090;&#1077;&#1093;&#1085;&#1086;&#1083;&#1086;&#1075;&#1080;&#1081; &#1087;&#1086; &#1076;&#1091;&#1096;&#1077;, &#1090;&#1086; &#1087;&#1088;&#1077;&#1076;&#1083;&#1072;&#1075;&#1072;&#1102; &#1087;&#1086;&#1084;&#1103;&#1085;&#1091;&#1090;&#1100; &#1074;&#1080;&#1088;&#1090;&#1091;&#1072;&#1083;&#1100;&#1085;&#1086;&#1081; &#1084;&#1080;&#1085;&#1091;&#1090;&#1086;&#1081; &#1084;&#1086;&#1083;&#1095;&#1072;&#1085;&#1080;&#1103; &#1091;&#1096;&#1077;&#1076;&#1096;&#1080;&#1093; &#1087;&#1077;&#1088;&#1089;&#1086;&#1085;&#1072;&#1078;&#1077;&#1081;,&amp;nbsp;&#8212; &#1080; &#1079;&#1072; &#1088;&#1072;&#1073;&#1086;&#1090;&#1091;!&lt;br /&gt;&lt;/p&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/54</id>
    <published>2016-05-26T15:36:23+00:00</published>
    <updated>2016-05-26T15:47:16+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/54"/>
    <title>&#1057;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1077; &#1089;&#1074;&#1086;&#1080;&#1093; &#1087;&#1088;&#1072;&#1074;&#1080;&#1083; &#1076;&#1083;&#1103; udev</title>
    <content type="html">&lt;h2&gt;&#1052;&#1072;&#1075;&#1080;&#1103;&lt;/h2&gt;&lt;p&gt;&#1050;&#1086;&#1075;&#1076;&#1072; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1085;&#1072;&#1095;&#1080;&#1085;&#1072;&#1077;&#1096;&#1100; &#1079;&#1085;&#1072;&#1082;&#1086;&#1084;&#1080;&#1090;&#1100;&#1089;&#1103; &#1089; &#1082;&#1086;&#1084;&#1087;&#1100;&#1102;&#1090;&#1077;&#1088;&#1086;&#1084; &#1085;&#1072; &#1091;&#1088;&#1086;&#1074;&#1085;&#1077; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1103;, &#1090;&#1086; &#1084;&#1085;&#1086;&#1075;&#1080;&#1077; &#1074;&#1077;&#1097;&#1080; &#1074;&#1086;&#1089;&#1087;&#1088;&#1080;&#1085;&#1080;&#1084;&#1072;&#1102;&#1090;&#1089;&#1103; &#1082;&#1072;&#1082; &#1089;&#1072;&#1084;&#1086; &#1089;&#1086;&#1073;&#1086;&#1081; &#1088;&#1072;&#1079;&#1091;&#1084;&#1077;&#1102;&#1097;&#1072;&#1103;&#1089;&#1103; &#1084;&#1072;&#1075;&#1080;&#1103;. &#1053;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1074;&#1089;&#1090;&#1072;&#1074;&#1083;&#1103;&#1077;&#1096;&#1100; &#1074; &#1082;&#1086;&#1084;&#1087;&#1100;&#1102;&#1090;&#1077;&#1088; &#1076;&#1080;&#1089;&#1082; &#1080;&#1083;&#1080; &#1092;&#1083;&#1101;&#1096;&#1082;&#1091;, &#1086;&#1085;&#1072; &#1087;&#1086;&#1103;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1091; &#1090;&#1077;&#1073;&#1103; &#1089;&#1088;&#1077;&#1076;&#1080; &#1087;&#1072;&#1087;&#1086;&#1082;, &#1072; &#1090;&#1086; &#1080; &#1074;&#1089;&#1087;&#1083;&#1099;&#1074;&#1072;&#1077;&#1090; &#1086;&#1082;&#1085;&#1086;&#1084; &#1087;&#1086;&#1074;&#1077;&#1088;&#1093; &#1074;&#1089;&#1077;&#1075;&#1086;. &#1048;&#1083;&#1080;, &#1095;&#1077;&#1088;&#1077;&#1079; &#1095;&#1090;&#1086; &#1084;&#1085;&#1086;&#1075;&#1086; &#1073;&#1099;&#1083;&#1086; &#1079;&#1072;&#1088;&#1072;&#1078;&#1077;&#1085;&#1086; &#1082;&#1086;&#1084;&#1087;&#1100;&#1102;&#1090;&#1077;&#1088;&#1086;&#1074;, &#1089;&#1072;&#1084;&#1086; &#1095;&#1090;&#1086;-&#1090;&#1086; &#1089; &#1092;&#1083;&#1101;&#1096;&#1082;&#1080; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1077;&#1090;&#1089;&#1103;.&lt;/p&gt;&lt;p&gt;&#1053;&#1086;, &#1095;&#1077;&#1084; &#1073;&#1086;&#1083;&#1077;&#1077; &#1087;&#1088;&#1086;&#1092;&#1077;&#1089;&#1089;&#1080;&#1086;&#1085;&#1072;&#1083;&#1100;&#1085;&#1086; &#1074;&#1086; &#1074;&#1089;&#1105; &#1074;&#1085;&#1080;&#1082;&#1072;&#1077;&#1096;&#1100;, &#1090;&#1077;&#1084; &#1073;&#1086;&#1083;&#1100;&#1096;&#1077; &#1087;&#1088;&#1080;&#1093;&#1086;&#1076;&#1080;&#1090;&#1089;&#1103; &#1080;&#1075;&#1088;&#1072;&#1090;&#1100; &#1088;&#1086;&#1083;&#1100; &#1090;&#1086;&#1075;&#1086; &#1089;&#1072;&#1084;&#1086;&#1075;&#1086; &#171;&#1074;&#1086;&#1083;&#1096;&#1077;&#1073;&#1085;&#1080;&#1082;&#1072;&#187;, &#1086;&#1090;&#1074;&#1077;&#1090;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086;&#1075;&#1086; &#1079;&#1072; &#171;&#1084;&#1072;&#1075;&#1080;&#1102;&#187;, &#1072; &#1087;&#1086; &#1089;&#1091;&#1090;&#1080;&amp;nbsp;&#8212; &#1092;&#1086;&#1082;&#1091;&#1089;&#1085;&#1080;&#1082;&#1072;. &#1044;&#1083;&#1103; &#1084;&#1077;&#1085;&#1103; &#1090;&#1072;&#1082;&#1086;&#1077; &#1085;&#1072;&#1089;&#1090;&#1091;&#1087;&#1072;&#1077;&#1090; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088;&#1085;&#1086; &#1085;&#1072; &#1076;&#1074;&#1072;&#1076;&#1094;&#1072;&#1090;&#1099;&#1081; &#1088;&#1072;&#1079; &#1086;&#1076;&#1085;&#1086;&#1086;&#1073;&#1088;&#1072;&#1079;&#1085;&#1099;&#1093; &#1076;&#1077;&#1081;&#1089;&#1090;&#1074;&#1080;&#1081;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1091;&#1078;&#1077; &#1093;&#1086;&#1095;&#1077;&#1090;&#1089;&#1103;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1086;&#1085;&#1086; &#1089;&#1072;&#1084;&#1086; &#1082;&#1072;&#1082; &#1073;&#1099; &#1087;&#1086; &#1074;&#1086;&#1083;&#1096;&#1077;&#1073;&#1089;&#1090;&#1074;&#1091; &#1089;&#1076;&#1077;&#1083;&#1072;&#1083;&#1086;&#1089;&#1100;.&lt;/p&gt;&lt;h2&gt;&#1042;&#1089;&#1090;&#1072;&#1074;&#1080;&#1083; &#1076;&#1080;&#1089;&#1082;&lt;/h2&gt;&lt;p&gt;&#1042; &#1085;&#1072;&#1096;&#1077;&#1081; &#1088;&#1072;&#1073;&#1086;&#1090;&#1077; &#1086;&#1095;&#1077;&#1085;&#1100; &#1084;&#1085;&#1086;&#1075;&#1086; &#1087;&#1088;&#1086;&#1080;&#1089;&#1093;&#1086;&#1076;&#1080;&#1090; &#1087;&#1077;&#1088;&#1077;&#1089;&#1099;&#1083;&#1082;&#1080; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093;. &#1053;&#1072; &#1090;&#1077;&#1082;&#1091;&#1097;&#1080;&#1081; &#1084;&#1086;&#1084;&#1077;&#1085;&#1090;, &#1103; &#1089;&#1095;&#1080;&#1090;&#1072;&#1102;, &#1080;&#1085;&#1090;&#1077;&#1088;&#1085;&#1077;&#1090; &#1077;&#1097;&#1105; &#1085;&#1077; &#1075;&#1086;&#1090;&#1086;&#1074;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1074;&#1072;&#1090;&#1100; &#1095;&#1077;&#1088;&#1077;&#1079; &#1085;&#1077;&#1075;&#1086; &#1072;&#1073;&#1089;&#1086;&#1083;&#1102;&#1090;&#1085;&#1086; &#1074;&#1089;&#1105;. &#1055;&#1086;&#1082;&#1072; &#1091;&#1089;&#1090;&#1072;&#1085;&#1072;&#1074;&#1083;&#1080;&#1074;&#1072;&#1102;&#1090;&#1089;&#1103; &#1088;&#1077;&#1082;&#1086;&#1088;&#1076;&#1099; &#1089;&#1082;&#1086;&#1088;&#1086;&#1089;&#1090;&#1080; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1095;&#1080; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093;, &#1085;&#1080;&#1095;&#1090;&#1086; &#1085;&#1077; &#1084;&#1086;&#1078;&#1077;&#1090; &#1087;&#1086;&#1073;&#1080;&#1090;&#1100; &#1092;&#1091;&#1088;&#1091;, &#1075;&#1088;&#1091;&#1078;&#1105;&#1085;&#1091;&#1102; &#1078;&#1105;&#1089;&#1090;&#1082;&#1080;&#1084;&#1080; &#1076;&#1080;&#1089;&#1082;&#1072;&#1084;&#1080;. &#1058;&#1072;&#1082;&#1080;&#1077; &#1076;&#1080;&#1089;&#1082;&#1080; &#1085;&#1072;&#1084; &#1085;&#1091;&#1078;&#1085;&#1086; &#1074;&#1089;&#1090;&#1072;&#1074;&#1083;&#1103;&#1090;&#1100; &#1080; &#1074;&#1099;&#1085;&#1080;&#1084;&#1072;&#1090;&#1100; &#1074; &#1082;&#1086;&#1084;&#1087;&#1100;&#1102;&#1090;&#1077;&#1088;, &#1072; &#1088;&#1072;&#1079;&#1073;&#1080;&#1088;&#1072;&#1090;&#1100;&#1089;&#1103; &#1089; &#1085;&#1080;&#1084;&#1080; &#1073;&#1091;&#1076;&#1077;&#1090; &lt;b&gt;udev&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;&lt;img alt="Sorting robot" height="337" src="http://lonelyelk.ru/images/uploads/0000/0053/sortingrobot.jpg" width="600" /&gt;&lt;/p&gt;&lt;p&gt;&#1042; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1089; &#1082;&#1086;&#1087;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077;&#1084; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093;, &#1084;&#1086;&#1078;&#1085;&#1086; &#1079;&#1072;&#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1086;&#1073;&#1086;&#1081;&#1090;&#1080;&#1089;&#1100; &#1080;&#1084;&#1077;&#1085;&#1077;&#1084; &#1090;&#1086;&#1084;&#1072; &#1087;&#1088;&#1080; &#1092;&#1086;&#1088;&#1084;&#1072;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1080;, &#1085;&#1086; &#1073;&#1099;&#1074;&#1072;&#1102;&#1090; &#1089;&#1083;&#1091;&#1095;&#1072;&#1080; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1077;&#1077;. &#1053;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1088;&#1072;&#1079;&#1073;&#1080;&#1088;&#1072;&#1077;&#1090;&#1089;&#1103; &#1089;&#1077;&#1090;&#1077;&#1074;&#1086;&#1081; &#1088;&#1101;&#1081;&#1076;-&#1085;&#1072;&#1082;&#1086;&#1087;&#1080;&#1090;&#1077;&#1083;&#1100;, &#1080; &#1086;&#1090;&#1087;&#1088;&#1072;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1076;&#1080;&#1089;&#1082; &#1086;&#1090; &#1085;&#1077;&#1075;&#1086;. &#1044;&#1083;&#1103; &#1074;&#1099;&#1103;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103; &#1095;&#1105;&#1090;&#1082;&#1080;&#1093; &#1087;&#1088;&#1080;&#1079;&#1085;&#1072;&#1082;&#1086;&#1074;, &#1087;&#1086; &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1084; &#1084;&#1099; &#1073;&#1091;&#1076;&#1077;&#1084; &#1076;&#1080;&#1089;&#1082; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1103;&#1090;&#1100;, &#1085;&#1072;&#1084; &#1085;&#1091;&#1078;&#1085;&#1086; &#1076;&#1074;&#1077; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1099;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;udevadm info -a --name=/dev/sdd1
udevadm info --query=env --name=/dev/sdd1&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1082;&#1072;&#1082; &#1091;&#1078;&#1077; &#1075;&#1086;&#1074;&#1086;&#1088;&#1080;&#1083;, &#1080;&#1084;&#1077;&#1103; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1082;&#1094;&#1080;&#1102;, &#1082;&#1072;&#1082; &#1087;&#1086;&#1076;&#1075;&#1086;&#1090;&#1086;&#1074;&#1080;&#1090;&#1100; &#1076;&#1080;&#1089;&#1082; &#1076;&#1083;&#1103; &#1082;&#1086;&#1087;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103;, &#1084;&#1086;&#1078;&#1085;&#1086; &#1074;&#1089;&#1077;&#1075;&#1076;&#1072; &#1080;&#1084;&#1077;&#1090;&#1100; &#1086;&#1076;&#1080;&#1085;&#1072;&#1082;&#1086;&#1074;&#1091;&#1102; &#1084;&#1077;&#1090;&#1082;&#1091; &#1090;&#1086;&#1084;&#1072;. &#1063;&#1077;&#1084; &#1080; &#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1084;&#1089;&#1103;: &#1089;&#1086;&#1079;&#1076;&#1072;&#1105;&#1084; &#1092;&#1072;&#1081;&#1083;&#1080;&#1082; &lt;b&gt;/etc/udev/rules.d/90-my-storage-copy.rules&lt;/b&gt;, &#1082;&#1091;&#1076;&#1072; &#1087;&#1080;&#1096;&#1077;&#1084;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;ACTION==&amp;quot;add&amp;quot;, ENV{ID_FS_USAGE}==&amp;quot;filesystem&amp;quot;, ENV{ID_FS_TYPE}==&amp;quot;ext4&amp;quot;, ENV{ID_FS_LABEL_ENC}==&amp;quot;storage-copy&amp;quot;, RUN+=&amp;quot;/usr/local/bin/storage-copy-mount.sh&amp;quot;
ACTION==&amp;quot;remove&amp;quot;, ENV{ID_FS_USAGE}==&amp;quot;filesystem&amp;quot;, ENV{ID_FS_TYPE}==&amp;quot;ext4&amp;quot;, ENV{ID_FS_LABEL_ENC}==&amp;quot;storage-copy&amp;quot;, RUN+=&amp;quot;/usr/local/bin/storage-copy-umount.sh&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1042;&#1089;&#1105;, &#1095;&#1090;&#1086; &#1074;&#1099;&#1076;&#1072;&#1074;&#1072;&#1083;&#1086;&#1089;&#1100; &#1085;&#1072;&#1084; &#1089; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1086;&#1084; &lt;i&gt;--query=env&lt;/i&gt; &#1073;&#1091;&#1076;&#1077;&#1090; &#1074; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1072;&#1093; &#1086;&#1082;&#1088;&#1091;&#1078;&#1077;&#1085;&#1080;&#1103; &#1085;&#1072;&#1096;&#1077;&#1075;&#1086; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1072; &lt;b&gt;/usr/local/bin/storage-copy-mount.sh&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;#!/bin/sh
mount_point=&amp;quot;/mnt/myrules/$(basename $DEVNAME)&amp;quot;
mkdir -p $mount_point
mount -t $ID_FS_TYPE -o ro $DEVNAME $mount_point&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;b&gt;/usr/local/bin/storage-copy-umount.sh&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;#!/bin/sh
mount_point=&amp;quot;/mnt/myrules/$(basename $DEVNAME)&amp;quot;
umount -l -f $mount_point
rmdir $mount_point&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1053;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1075;&#1072;&#1081;&#1076;&#1099; &#1085;&#1077; &#1088;&#1077;&#1082;&#1086;&#1084;&#1077;&#1085;&#1076;&#1091;&#1102;&#1090; &#1074;&#1099;&#1079;&#1099;&#1074;&#1072;&#1090;&#1100; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1091; &lt;b&gt;mount&lt;/b&gt; &#1080;&#1079; &#1087;&#1088;&#1072;&#1074;&#1080;&#1083; &lt;b&gt;udev&lt;/b&gt;, &#1085;&#1086; &#1082;&#1086;&#1075;&#1076;&#1072; &#1101;&#1090;&#1086; &#1086;&#1089;&#1090;&#1072;&#1085;&#1072;&#1074;&#1083;&#1080;&#1074;&#1072;&#1083;&#1086; &#1085;&#1072;&#1089;&#1090;&#1086;&#1103;&#1097;&#1080;&#1093; &#1074;&#1086;&#1083;&#1096;&#1077;&#1073;&#1085;&#1080;&#1082;&#1086;&#1074;? :)&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1089;&#1089;&#1080;&#1074; &#1073;&#1077;&#1079; &#1084;&#1072;&#1089;&#1089;&#1080;&#1074;&#1072;&lt;/h2&gt;&lt;p&gt;&#1042;&#1090;&#1086;&#1088;&#1086;&#1081; &#1089;&#1083;&#1091;&#1095;&#1072;&#1081;&amp;nbsp;&#8212; &#1087;&#1086;&#1083;&#1086;&#1074;&#1080;&#1085;&#1072; &#1088;&#1101;&#1081;&#1076;-&#1084;&#1072;&#1089;&#1089;&#1080;&#1074;&#1072;. &#1053;&#1091;&#1078;&#1085;&#1086; &#1089;&#1086;&#1073;&#1080;&#1088;&#1072;&#1090;&#1100; &#1080; &#1088;&#1072;&#1079;&#1073;&#1080;&#1088;&#1072;&#1090;&#1100; &#1084;&#1072;&#1089;&#1089;&#1080;&#1074;&#1099; &#1090;&#1072;&#1082;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1101;&#1090;&#1086; &#1085;&#1077; &#1087;&#1077;&#1088;&#1077;&#1089;&#1077;&#1082;&#1072;&#1083;&#1086;&#1089;&#1100; &#1089; &#1088;&#1072;&#1073;&#1086;&#1090;&#1086;&#1081; &#1086;&#1089;&#1090;&#1072;&#1083;&#1100;&#1085;&#1086;&#1081; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1099;. &#1053;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1093;&#1088;&#1072;&#1085;&#1080;&#1083;&#1080;&#1097;&#1072; &#1079;&#1072;&#1076;&#1072;&#1102;&#1090; &#1084;&#1077;&#1090;&#1082;&#1080; &#1090;&#1086;&#1084;&#1072; &#1089;&#1074;&#1086;&#1080;&#1084; &#1088;&#1072;&#1079;&#1076;&#1077;&#1083;&#1072;&#1084; &#1089; &#1080;&#1085;&#1092;&#1086;&#1088;&#1084;&#1072;&#1094;&#1080;&#1077;&#1081;, &#1072; &#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1084;&#1086;&#1078;&#1085;&#1086; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1080;&#1090;&#1100; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1087;&#1086; &#1085;&#1086;&#1084;&#1077;&#1088;&#1091; &#1087;&#1072;&#1088;&#1090;&#1080;&#1094;&#1080;&#1080;. &lt;b&gt;/etc/udev/rules.d/90-my-storage-rais.rules&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;ACTION==&amp;quot;add&amp;quot;, ENV{ID_FS_USAGE}==&amp;quot;raid&amp;quot;, ENV{ID_FS_TYPE}==&amp;quot;linux_raid_member&amp;quot;, ENV{ID_PART_ENTRY_NUMBER}==&amp;quot;3&amp;quot;, ENV{ID_FS_LABEL_ENC}!=&amp;quot;system*&amp;quot;, RUN+=&amp;quot;/usr/local/bin/storage-raid-mount.sh&amp;quot;
ACTION==&amp;quot;add&amp;quot;, ENV{ID_FS_USAGE}==&amp;quot;raid&amp;quot;, ENV{ID_FS_TYPE}==&amp;quot;linux_raid_member&amp;quot;, ENV{ID_FS_LABEL_ENC}==&amp;quot;DiskStation*&amp;quot;, RUN+=&amp;quot;/usr/local/bin/storage-raid-mount.sh&amp;quot;
ACTION==&amp;quot;remove&amp;quot;, ENV{ID_FS_USAGE}==&amp;quot;raid&amp;quot;, ENV{ID_FS_TYPE}==&amp;quot;linux_raid_member&amp;quot;, ENV{ID_PART_ENTRY_NUMBER}==&amp;quot;3&amp;quot;, ENV{ID_FS_LABEL_ENC}!=&amp;quot;system*&amp;quot;, RUN+=&amp;quot;/usr/local/bin/storage-raid-umount.sh&amp;quot;
ACTION==&amp;quot;remove&amp;quot;, ENV{ID_FS_USAGE}==&amp;quot;raid&amp;quot;, ENV{ID_FS_TYPE}==&amp;quot;linux_raid_member&amp;quot;, ENV{ID_FS_LABEL_ENC}==&amp;quot;DiskStation*&amp;quot;, RUN+=&amp;quot;/usr/local/bin/storage-raid-umount.sh&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1086; &#1077;&#1089;&#1090;&#1100;, &#1075;&#1086;&#1074;&#1086;&#1088;&#1103; &#1095;&#1077;&#1083;&#1086;&#1074;&#1077;&#1095;&#1077;&#1089;&#1082;&#1080;&#1084; &#1103;&#1079;&#1099;&#1082;&#1086;&#1084;, &#1101;&#1090;&#1086; &#1080;&#1083;&#1080; &#1088;&#1101;&#1081;&#1076;-&#1087;&#1072;&#1088;&#1090;&#1080;&#1094;&#1080;&#1103; &#1089; &#1085;&#1086;&#1084;&#1077;&#1088;&#1086;&#1084; 3, &#1085;&#1072;&#1079;&#1074;&#1072;&#1085;&#1080;&#1077; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1081; &#1085;&#1077; &#1085;&#1072;&#1095;&#1080;&#1085;&#1072;&#1077;&#1090;&#1089;&#1103; &#1089; &lt;i&gt;system&lt;/i&gt; &#1080;&#1083;&#1080; &#1088;&#1101;&#1081;&#1076;-&#1087;&#1072;&#1088;&#1090;&#1080;&#1094;&#1080;&#1103; &#1089; &#1080;&#1084;&#1077;&#1085;&#1077;&#1084;, &#1085;&#1072;&#1095;&#1080;&#1085;&#1072;&#1102;&#1097;&#1080;&#1084;&#1089;&#1103; &#1089; &lt;i&gt;DiskStation&lt;/i&gt;. &#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1085;&#1072;&#1084; &#1085;&#1091;&#1078;&#1085;&#1086; &#1089;&#1086;&#1073;&#1088;&#1072;&#1090;&#1100; &#1084;&#1072;&#1089;&#1089;&#1080;&#1074; &#1090;&#1072;&#1082;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1091; &#1085;&#1077;&#1075;&#1086; &#1073;&#1099;&#1083;&#1086; &#1091;&#1085;&#1080;&#1082;&#1072;&#1083;&#1100;&#1085;&#1086;&#1077; &#1080;&#1084;&#1103;, &#1085;&#1086; &#1087;&#1088;&#1080; &#1101;&#1090;&#1086;&#1084; &#1086;&#1076;&#1085;&#1086;&#1079;&#1085;&#1072;&#1095;&#1085;&#1086; &#1089;&#1074;&#1103;&#1079;&#1072;&#1085;&#1085;&#1086;&#1077; &#1089; &#1091;&#1089;&#1090;&#1088;&#1086;&#1081;&#1089;&#1090;&#1074;&#1086;&#1084;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1085;&#1077; &#1087;&#1083;&#1086;&#1076;&#1080;&#1090;&#1100; &#1083;&#1080;&#1096;&#1085;&#1080;&#1093; &#1089;&#1091;&#1097;&#1085;&#1086;&#1089;&#1090;&#1077;&#1081;. &#1044;&#1083;&#1103; &#1101;&#1090;&#1086;&#1075;&#1086; &#1103; &#1088;&#1077;&#1096;&#1080;&#1083; &#1090;&#1086;&#1095;&#1082;&#1091; &#1076;&#1083;&#1103; &#1084;&#1086;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1085;&#1072;&#1079;&#1099;&#1074;&#1072;&#1090;&#1100; &#1090;&#1072;&#1082; &#1078;&#1077; &#1082;&#1072;&#1082; &#1080;&#1084;&#1103; &#1091;&#1089;&#1090;&#1088;&#1086;&#1081;&#1089;&#1090;&#1074;&#1072; &#1074; &lt;i&gt;/dev&lt;/i&gt;, &#1072; &#1085;&#1086;&#1084;&#1077;&#1088; &#1088;&#1077;&#1081;&#1076;&#1072; &#1073;&#1088;&#1072;&#1090;&#1100; &#1080;&#1079; &#1082;&#1086;&#1076;&#1072; &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1077;&#1081; &#1073;&#1091;&#1082;&#1074;&#1099;. &lt;b&gt;/usr/local/bin/storage-raid-mount.sh&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;#!/bin/sh

mount_point=&amp;quot;/mnt/myrules/$(basename $DEVNAME)&amp;quot;
num=$(printf %d &amp;quot;&amp;#39;$(echo $DEVNAME | head -c8 | tail -c1)&amp;quot;)
raid_device=&amp;quot;/dev/md$num&amp;quot;

mkdir -p $mount_point
mdadm -S $raid_device
mdadm -A -R $raid_device $DEVNAME
mount -o ro $raid_device $mount_point&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1091;&#1090; &#1087;&#1088;&#1086;&#1080;&#1089;&#1093;&#1086;&#1076;&#1080;&#1090; &#1084;&#1072;&#1075;&#1080;&#1103; &#1073;&#1072;&#1096;&#1072;. &#1071; &#1087;&#1080;&#1089;&#1072;&#1083; &#1091;&#1078;&#1077;, &#1095;&#1090;&#1086; &#1074;&#1089;&#1077;&#1075;&#1076;&#1072; &#1080;&#1089;&#1087;&#1099;&#1090;&#1099;&#1074;&#1072;&#1102; &#1073;&#1086;&#1083;&#1100;&#1096;&#1086;&#1077; &#1091;&#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1089;&#1090;&#1074;&#1080;&#1077;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1095;&#1090;&#1086;-&#1090;&#1086; &#1091;&#1076;&#1072;&#1105;&#1090;&#1089;&#1103; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1085;&#1072; &#1101;&#1090;&#1086;&#1084; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1086;&#1074;&#1086;&#1084; &#1103;&#1079;&#1099;&#1082;&#1077;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;echo $DEVNAME | head -c8 | tail -c1&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1042;&#1099;&#1076;&#1072;&#1105;&#1090; &#1085;&#1072;&#1084; &#1074;&#1086;&#1089;&#1100;&#1084;&#1091;&#1102; &#1073;&#1091;&#1082;&#1074;&#1091; &#1080;&#1084;&#1077;&#1085;&#1080; &#1091;&#1089;&#1090;&#1088;&#1086;&#1081;&#1089;&#1090;&#1074;&#1072;, &#1090;&#1086; &#1077;&#1089;&#1090;&#1100; &#171;d&#187; &#1076;&#1083;&#1103; &#171;/dev/sdd3&#187;, &#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1080; &#171;f&#187; &#1076;&#1083;&#1103; &#171;/dev/sdf5&#187;.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;printf %d &amp;quot;&amp;#39;d&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1042;&#1099;&#1076;&#1072;&#1105;&#1090; &#1085;&#1072;&#1084; 100, &#1072; &#1074; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1089; &#171;f&#187;&amp;nbsp;&#8212; 102. &#1048; &#1084;&#1099; &#1087;&#1086;&#1083;&#1091;&#1095;&#1072;&#1077;&#1084; &#1080;&#1084;&#1103; &#171;/dev/md100&#187;, &#1087;&#1086;&#1076; &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1084; &#1085;&#1072;&#1089;&#1080;&#1083;&#1100;&#1085;&#1086; &#1087;&#1086;&#1076;&#1085;&#1080;&#1084;&#1072;&#1077;&#1084; &lt;i&gt;raid1&lt;/i&gt; &#1085;&#1072; &#1086;&#1076;&#1085;&#1086;&#1084; &#1076;&#1080;&#1089;&#1082;&#1077; &#1080;&#1079; &#1076;&#1074;&#1091;&#1093;. &#1048; &#1086;&#1073;&#1088;&#1072;&#1090;&#1085;&#1086; &#1090;&#1086; &#1078;&#1077; &#1089;&#1072;&#1084;&#1086;&#1077;. &lt;b&gt;/usr/local/bin/storage-raid-umount.sh&lt;/b&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;#!/bin/sh

mount_point=&amp;quot;/mnt/myrules/$(basename $DEVNAME)&amp;quot;
num=$(printf %d &amp;quot;&amp;#39;$(echo $DEVNAME | head -c8 | tail -c1)&amp;quot;)
raid_device=&amp;quot;/dev/md$num&amp;quot;

umount -l -f $mount_point
mdadm -S $raid_device
rmdir $mount_point&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1055;&#1086;&#1085;&#1103;&#1090;&#1085;&#1086;, &#1095;&#1090;&#1086; &#1089; &#1074;&#1099;&#1090;&#1072;&#1089;&#1082;&#1080;&#1074;&#1072;&#1085;&#1080;&#1077;&#1084; &#1089;&#1083;&#1086;&#1078;&#1085;&#1077;&#1077;, &#1076;&#1072;&#1078;&#1077; &#1077;&#1089;&#1083;&#1080; &#1084;&#1086;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100;, &#1082;&#1072;&#1082; &#1101;&#1090;&#1086; &#1076;&#1077;&#1083;&#1072;&#1102; &#1103;, &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1076;&#1083;&#1103; &#1095;&#1090;&#1077;&#1085;&#1080;&#1103;. &#1069;&#1090;&#1086; &#1074;&#1089;&#1105; &#1072;&#1082;&#1090;&#1091;&#1072;&#1083;&#1100;&#1085;&#1086;, &#1077;&#1089;&#1083;&#1080; &#1087;&#1086;&#1089;&#1083;&#1077; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099; &#1089; &#1076;&#1080;&#1089;&#1082;&#1086;&#1084; &#1087;&#1088;&#1086;&#1096;&#1083;&#1086; &#1079;&#1085;&#1072;&#1095;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1077; &#1074;&#1088;&#1077;&#1084;&#1103;. &#1048; &#1103; &#1087;&#1088;&#1077;&#1076;&#1087;&#1086;&#1095;&#1080;&#1090;&#1072;&#1102; &#1093;&#1086;&#1090;&#1103; &#1073;&#1099; &#1088;&#1072;&#1079;&#1084;&#1086;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1074;&#1088;&#1091;&#1095;&#1085;&#1091;&#1102;. &#1053;&#1086; &#1087;&#1088;&#1080; &#1101;&#1090;&#1086;&#1084; &#1089;&#1086;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1085;&#1086; &#1087;&#1088;&#1077;&#1082;&#1088;&#1072;&#1089;&#1085;&#1086; &#1090;&#1086;, &#1095;&#1090;&#1086; &#1074;&#1089;&#1077; &#1085;&#1072;&#1096;&#1080; &#1091;&#1089;&#1090;&#1088;&#1086;&#1081;&#1089;&#1090;&#1074;&#1072; &#1073;&#1091;&#1076;&#1091;&#1090; &#1089;&#1086;&#1079;&#1076;&#1072;&#1074;&#1072;&#1090;&#1100; &#1087;&#1072;&#1087;&#1082;&#1080; &#1080; &#1087;&#1086;&#1103;&#1074;&#1083;&#1103;&#1090;&#1100;&#1089;&#1103; &#1074; &lt;i&gt;/mnt/myrules&lt;/i&gt;, &#1082;&#1072;&#1082; &#1092;&#1083;&#1101;&#1096;&#1082;&#1080; &#1087;&#1086;&#1103;&#1074;&#1083;&#1103;&#1102;&#1090;&#1089;&#1103; &#1074; &lt;i&gt;/media&lt;/i&gt; &#1085;&#1072; &#1076;&#1077;&#1089;&#1082;&#1090;&#1086;&#1087;&#1085;&#1099;&#1093; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103;&#1093; &#1059;&#1073;&#1091;&#1085;&#1090;&#1091;.&lt;/p&gt;&lt;h2&gt;&#1044;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;p&gt;1. &lt;a href="https://www.kernel.org/pub/linux/utils/kernel/hotplug/udev/udev.html"&gt;man udev&lt;/a&gt;&lt;/p&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/53</id>
    <published>2016-05-11T23:13:23+00:00</published>
    <updated>2016-05-11T23:13:23+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/53"/>
    <title>&#1050;&#1072;&#1082; &#1087;&#1086;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100; &#1071;&#1085;&#1076;&#1077;&#1082;&#1089; &#1055;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1099; &#1075;&#1076;&#1077; &#1091;&#1075;&#1086;&#1076;&#1085;&#1086;</title>
    <content type="html">&lt;h2&gt;&#1048;&#1089;&#1090;&#1086;&#1088;&#1080;&#1103;&lt;/h2&gt;&lt;p&gt;&#1050;&#1086;&#1075;&#1076;&#1072; &#1071;&#1085;&#1076;&#1077;&#1082;&#1089; &#1055;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1099; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1087;&#1086;&#1103;&#1074;&#1080;&#1083;&#1080;&#1089;&#1100;, &#1080; &#1084;&#1099; &#1079;&#1072;&#1093;&#1086;&#1090;&#1077;&#1083;&#1080; &#1088;&#1072;&#1079;&#1084;&#1077;&#1089;&#1090;&#1080;&#1090;&#1100; &#1080;&#1093; &#1091; &#1089;&#1077;&#1073;&#1103; &#1074; &#1087;&#1086;&#1088;&#1090;&#1092;&#1086;&#1083;&#1080;&#1086; &#1085;&#1072; &#1089;&#1072;&#1081;&#1090;&#1077;, &#1085;&#1072;&#1084; &#1087;&#1088;&#1080;&#1093;&#1086;&#1076;&#1080;&#1083;&#1086;&#1089;&#1100; &#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1089;&#1090;&#1074;&#1086;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103; &#1089;&#1082;&#1088;&#1080;&#1085;&#1096;&#1086;&#1090;&#1072;&#1084;&#1080; &#1085;&#1072;&#1080;&#1073;&#1086;&#1083;&#1077;&#1077; &#1091;&#1076;&#1072;&#1095;&#1085;&#1099;&#1093; &#1088;&#1072;&#1082;&#1091;&#1088;&#1089;&#1086;&#1074;, &#1087;&#1086;&#1090;&#1086;&#1084;&#1091; &#1095;&#1090;&#1086; &#1085;&#1080;&#1082;&#1072;&#1082;&#1086;&#1075;&#1086; &#1076;&#1088;&#1091;&#1075;&#1086;&#1075;&#1086; &#1089;&#1087;&#1086;&#1089;&#1086;&#1073;&#1072; &#1087;&#1086;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100; &#1071;&#1085;&#1076;&#1077;&#1082;&#1089; &#1055;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1091; &#1082;&#1088;&#1086;&#1084;&#1077; &#1082;&#1072;&#1082; &#1085;&#1072; &#1071;&#1085;&#1076;&#1077;&#1082;&#1089; &#1055;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1072;&#1093; &#1085;&#1077; &#1073;&#1099;&#1083;&#1086;.&lt;/p&gt;&lt;p&gt;&#1057;&#1086; &#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1077;&#1084;, &#1089;&#1084;&#1077;&#1085;&#1080;&#1083;&#1089;&#1103; &#1087;&#1083;&#1077;&#1077;&#1088; &#1080; &#1087;&#1086;&#1103;&#1074;&#1080;&#1083;&#1089;&#1103; &#1082;&#1086;&#1076; &#1074;&#1089;&#1090;&#1072;&#1074;&#1082;&#1080; &#1074;&#1080;&#1076;&#1072;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&amp;quot;//panoramas.api-maps.....&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1053;&#1086; &#1085;&#1080;&#1082;&#1072;&#1082;&#1086;&#1075;&#1086; &#1089;&#1087;&#1086;&#1089;&#1086;&#1073;&#1072; &#1091;&#1087;&#1088;&#1072;&#1074;&#1083;&#1103;&#1090;&#1100;, &#1082;&#1088;&#1086;&#1084;&#1077; &#1082;&#1072;&#1082; &#1087;&#1077;&#1088;&#1077;&#1093;&#1086;&#1076;&#1080;&#1090;&#1100; &#1087;&#1086; &#1089;&#1090;&#1088;&#1077;&#1083;&#1082;&#1072;&#1084;, &#1074; &#1085;&#1105;&#1084; &#1085;&#1077; &#1087;&#1088;&#1077;&#1076;&#1091;&#1089;&#1084;&#1086;&#1090;&#1088;&#1077;&#1085;&#1086;. &#1052;&#1085;&#1077; &#1089;&#1090;&#1072;&#1083;&#1086; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1086;, &#1084;&#1086;&#1078;&#1085;&#1086; &#1083;&#1080; &#1095;&#1090;&#1086;-&#1090;&#1086; &#1089; &#1101;&#1090;&#1080;&#1084; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100;. &#1048; &#1087;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1089;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103;, &#1076;&#1086;&#1088;&#1086;&#1075;&#1086;&#1081; &#1095;&#1080;&#1090;&#1072;&#1090;&#1077;&#1083;&#1100;, &#1084;&#1099; &#1087;&#1086;&#1080;&#1075;&#1088;&#1072;&#1077;&#1084; &#1074; &#1093;&#1072;&#1082;&#1077;&#1088;&#1086;&#1074;. &#1042;&#1088;&#1077;&#1076;&#1080;&#1090;&#1100; &#1084;&#1099; &#1085;&#1080;&#1082;&#1086;&#1084;&#1091; &#1085;&#1077; &#1073;&#1091;&#1076;&#1077;&#1084;: &#1093;&#1072;&#1082;&#1077;&#1088;&#1099; &#1074;&#1088;&#1077;&#1076;&#1080;&#1090;&#1077;&#1083;&#1080;&amp;nbsp;&#8212; &#1101;&#1090;&#1086; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1095;&#1072;&#1089;&#1090;&#1100; &#1093;&#1072;&#1082;&#1077;&#1088;&#1086;&#1074;. &#1048;&#1085;&#1072;&#1095;&#1077; &#1075;&#1086;&#1074;&#1086;&#1088;&#1103;, &#1087;&#1088;&#1080;&#1089;&#1087;&#1086;&#1089;&#1086;&#1073;&#1080;&#1084; &#1087;&#1086;&#1076; &#1085;&#1072;&#1096;&#1080; &#1079;&#1072;&#1087;&#1088;&#1086;&#1089;&#1099; &#1090;&#1086;, &#1095;&#1090;&#1086; &#1080;&#1079;&#1085;&#1072;&#1095;&#1072;&#1083;&#1100;&#1085;&#1086; &#1087;&#1086;&#1076; &#1085;&#1080;&#1093; &#1085;&#1077; &#1073;&#1099;&#1083;&#1086; &#1087;&#1088;&#1077;&#1076;&#1085;&#1072;&#1079;&#1085;&#1072;&#1095;&#1077;&#1085;&#1086;.&lt;/p&gt;&lt;p&gt;&lt;img alt="Hack" height="337" src="http://lonelyelk.ru/images/uploads/0000/0051/hack.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1055;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1099;&lt;/h2&gt;&lt;p&gt;&#1057;&#1085;&#1072;&#1095;&#1072;&#1083;&#1072; &#1087;&#1086;&#1089;&#1084;&#1086;&#1090;&#1088;&#1080;&#1084; &#1085;&#1072; &#1072;&#1076;&#1088;&#1077;&#1089;. &#1057;&#1088;&#1072;&#1079;&#1091; &#1074;&#1080;&#1076;&#1085;&#1086; &#1076;&#1074;&#1077; &#1074;&#1077;&#1097;&#1080;. &#1053;&#1080;&#1082;&#1072;&#1082;&#1086;&#1075;&#1086; &#1091;&#1085;&#1080;&#1082;&#1072;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1076;&#1077;&#1085;&#1090;&#1080;&#1092;&#1080;&#1082;&#1072;&#1090;&#1086;&#1088;&#1072; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1099; &#1074; &#1085;&#1105;&#1084; &#1085;&#1077; &#1087;&#1088;&#1080;&#1089;&#1091;&#1090;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090;. &#1045;&#1089;&#1083;&#1080; &#1087;&#1077;&#1088;&#1077;&#1093;&#1086;&#1076;&#1080;&#1090;&#1100; &#1084;&#1077;&#1078;&#1076;&#1091; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1072;&#1084;&#1080; &#1085;&#1077; &#1084;&#1077;&#1085;&#1103;&#1103; &#1085;&#1072;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1074;&#1079;&#1075;&#1083;&#1103;&#1076;&#1072;, &#1080; &#1082;&#1086;&#1087;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1082;&#1086;&#1076; &#1076;&#1083;&#1103; &#1074;&#1089;&#1090;&#1072;&#1074;&#1082;&#1080; &#1085;&#1072; &#1089;&#1072;&#1081;&#1090;, &#1090;&#1086; &#1088;&#1072;&#1079;&#1083;&#1080;&#1095;&#1072;&#1090;&#1100;&#1089;&#1103; &#1073;&#1091;&#1076;&#1077;&#1090; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1086;&#1076;&#1080;&#1085; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;ll=37.61782676%2C55.75074572&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1069;&#1090;&#1086; &#1078;&#1077; &#1076;&#1086;&#1083;&#1075;&#1086;&#1090;&#1072; &#1080; &#1096;&#1080;&#1088;&#1086;&#1090;&#1072; (&#1074; &#1090;&#1072;&#1082;&#1086;&#1084; &#1087;&#1086;&#1088;&#1103;&#1076;&#1082;&#1077;) &#1095;&#1077;&#1088;&#1077;&#1079; &#1079;&#1072;&#1087;&#1103;&#1090;&#1091;&#1102;! &#1042;&#1090;&#1086;&#1088;&#1086;&#1077;, &#1089; &#1095;&#1077;&#1084; &#1089;&#1088;&#1072;&#1079;&#1091; &#1078;&#1077; &#1093;&#1086;&#1095;&#1077;&#1090;&#1089;&#1103; &#1087;&#1086;&#1074;&#1086;&#1079;&#1080;&#1090;&#1100;&#1089;&#1103;&amp;nbsp;&#8212; &#1101;&#1090;&#1086; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;size=690%2C495&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1069;&#1090;&#1086; &#1096;&#1080;&#1088;&#1080;&#1085;&#1072; &#1080; &#1074;&#1099;&#1089;&#1086;&#1090;&#1072; &#1086;&#1082;&#1085;&#1072; &#1095;&#1077;&#1088;&#1077;&#1079; &#1079;&#1072;&#1087;&#1103;&#1090;&#1091;&#1102;. &#1045;&#1089;&#1083;&#1080; &#1087;&#1086;&#1089;&#1084;&#1086;&#1090;&#1088;&#1077;&#1090;&#1100; &#1085;&#1072; &#1090;&#1086;, &#1082;&#1072;&#1082; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1077;&#1090; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;, &#1080; &#1095;&#1090;&#1086; &#1086;&#1085; &#1086;&#1089;&#1090;&#1072;&#1074;&#1083;&#1103;&#1077;&#1090; &#1087;&#1086;&#1089;&#1083;&#1077; &#1089;&#1077;&#1073;&#1103; &#1085;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1077;, &#1090;&#1086; &#1089;&#1086;&#1074;&#1089;&#1077;&#1084; &#1085;&#1077; &#1086;&#1073;&#1103;&#1079;&#1072;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086; &#1083;&#1077;&#1079;&#1090;&#1100; &#1080; &#1076;&#1077;&#1086;&#1073;&#1092;&#1091;&#1089;&#1094;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1082;&#1086;&#1076;. &#1042;&#1089;&#1105; &#1087;&#1086;&#1085;&#1103;&#1090;&#1085;&#1086;: &#1089;&#1082;&#1088;&#1080;&#1087;&#1090; &#1089;&#1086;&#1079;&#1076;&#1072;&#1105;&#1090; &#1074;&#1084;&#1077;&#1089;&#1090;&#1086; &#1089;&#1077;&#1073;&#1103; &#1090;&#1077;&#1075; &lt;i&gt;iframe&lt;/i&gt; &#1080; &#1076;&#1088;&#1091;&#1075;&#1086;&#1081; &#1090;&#1077;&#1075; &lt;i&gt;script&lt;/i&gt;, &#1072; &#1089;&#1077;&#1073;&#1103; &#1091;&#1076;&#1072;&#1083;&#1103;&#1077;&#1090;. &#1055;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &lt;b&gt;size&lt;/b&gt; &#1080; &#1079;&#1072;&#1076;&#1072;&#1105;&#1090; &#1088;&#1072;&#1079;&#1084;&#1077;&#1088;&#1099; &#1072;&#1081;&#1092;&#1088;&#1077;&#1081;&#1084;&#1072;.&lt;/p&gt;&lt;p&gt;&#1059;&#1078;&#1077; &#1101;&#1090;&#1086;&#1075;&#1086; &#1085;&#1072;&#1084; &#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1086;&#1095;&#1085;&#1086;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1089;&#1086;&#1073;&#1088;&#1072;&#1090;&#1100; &#1085;&#1077;&#1073;&#1086;&#1083;&#1100;&#1096;&#1086;&#1081; &#1087;&#1083;&#1077;&#1077;&#1088; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084; &#1089; &#1082;&#1072;&#1088;&#1090;&#1086;&#1081;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1087;&#1086; &#1082;&#1083;&#1080;&#1082;&#1077; &#1085;&#1072; &#1082;&#1072;&#1088;&#1090;&#1077; &#1086;&#1090;&#1082;&#1088;&#1099;&#1074;&#1072;&#1077;&#1090; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1091; &#1080;&#1079; &#1101;&#1090;&#1086;&#1075;&#1086; &#1080;&#1083;&#1080; &#1073;&#1083;&#1080;&#1078;&#1072;&#1081;&#1096;&#1077;&#1075;&#1086; &#1084;&#1077;&#1089;&#1090;&#1072;. &#1044;&#1083;&#1103; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088;&#1072; &#1103; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1102; &lt;a href="http://leafletjs.com/"&gt;Leaflet&lt;/a&gt;. &#1059; &#1085;&#1077;&#1075;&#1086; &#1090;&#1072;&#1082;&#1086;&#1081; &#1087;&#1088;&#1080;&#1103;&#1090;&#1085;&#1099;&#1081; &#1089;&#1080;&#1085;&#1090;&#1072;&#1082;&#1089;&#1080;&#1089; &#1080; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;!&lt;/p&gt;&lt;pre&gt;&lt;code class='javascript'&gt;var latlng = L.latLng(55.75074572, 37.61782676);
var $map = L.map(&amp;#39;map&amp;#39;, {center: latlng, zoom: 15});
L.tileLayer(&amp;#39;https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png&amp;#39;).addTo($map);

function openPanoramaAt(latlng) {
	var panoDiv = $(&amp;#39;#panorama&amp;#39;);
	var panoScript = document.createElement(&amp;#39;script&amp;#39;);
	panoScript.type = &amp;#39;text/javascript&amp;#39;;
	panoScript.src = &amp;#39;https://panoramas.api-maps.yandex.ru/embed/1.x/?lang=ru&amp;amp;ll=&amp;#39; + latlng.lng + &amp;#39;%2C&amp;#39; + latlng.lat + &amp;#39;&amp;amp;ost=dir%3A0.0%2C0.0~span%3A130%2C70.26418362927674&amp;amp;size=&amp;#39; + panoDiv.width() + &amp;#39;%2C&amp;#39; + panoDiv.height() + &amp;#39;&amp;amp;l=stv&amp;#39;;
	panoDiv.empty();
	panoDiv[0].appendChild(panoScript);
}

openPanoramaAt(latlng);

$map.on(&amp;#39;click&amp;#39;, function (me) {
	$map.panTo(me.latlng);
	openPanoramaAt(me.latlng);
});&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1050;&#1088;&#1086;&#1084;&#1077; &#1083;&#1080;&#1092;&#1083;&#1077;&#1090;&#1072; &#1103;, &#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086;, &#1083;&#1102;&#1073;&#1083;&#1102; &#1076;&#1078;&#1077;&#1081;&#1082;&#1074;&#1077;&#1088;&#1080;. &#1053;&#1086;, &#1082; &#1089;&#1086;&#1078;&#1072;&#1083;&#1077;&#1085;&#1080;&#1102;, &#1085;&#1072; &#1085;&#1105;&#1084; &#1085;&#1077;&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1074;&#1089;&#1090;&#1072;&#1074;&#1080;&#1090;&#1100; &#1090;&#1077;&#1075; &lt;i&gt;script&lt;/i&gt;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1086;&#1085; &#1079;&#1072;&#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1083;. &#1055;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1090;&#1091;&#1090; &#1085;&#1077;&#1084;&#1085;&#1086;&#1075;&#1086; &#1085;&#1072;&#1084;&#1077;&#1096;&#1072;&#1085;&#1086;.&lt;/p&gt;&lt;p&gt;&#1053;&#1086; &#1085;&#1072;&#1084; &#1085;&#1091;&#1078;&#1085;&#1086; &#1080;&#1076;&#1090;&#1080; &#1076;&#1072;&#1083;&#1100;&#1096;&#1077;. &#1042;&#1077;&#1076;&#1100; &#1074;&#1085;&#1091;&#1090;&#1088;&#1080; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084; &#1084;&#1086;&#1078;&#1085;&#1086; &#1087;&#1077;&#1088;&#1077;&#1093;&#1086;&#1076;&#1080;&#1090;&#1100; &#1087;&#1086; &#1089;&#1090;&#1088;&#1077;&#1083;&#1082;&#1072;&#1084;, &#1072; &#1091; &#1085;&#1072;&#1089; &#1101;&#1090;&#1086; &#1085;&#1080;&#1082;&#1072;&#1082; &#1085;&#1077; &#1086;&#1090;&#1086;&#1073;&#1088;&#1072;&#1078;&#1072;&#1077;&#1090;&#1089;&#1103; &#1085;&#1072; &#1082;&#1072;&#1088;&#1090;&#1077;. &#1063;&#1090;&#1086; &#1078;&#1077; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100;?&lt;/p&gt;&lt;h2&gt;&#1063;&#1077;&#1083;&#1086;&#1074;&#1077;&#1082; &#1087;&#1086;&#1089;&#1077;&#1088;&#1077;&#1076;&#1080;&#1085;&#1077;&lt;/h2&gt;&lt;p&gt;&#1063;&#1090;&#1086;&#1073;&#1099; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1080;&#1090;&#1100;, &#1095;&#1090;&#1086; &#1076;&#1077;&#1083;&#1072;&#1077;&#1090; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;, &#1091; &#1085;&#1072;&#1089; &#1080; &#1090;&#1072;&#1082; &#1091;&#1078;&#1077; &#1086;&#1090;&#1082;&#1088;&#1099;&#1090; &#1080;&#1085;&#1089;&#1087;&#1077;&#1082;&#1090;&#1086;&#1088; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099;. &#1058;&#1077;&#1087;&#1077;&#1088;&#1100;, &#1076;&#1086;&#1088;&#1086;&#1075;&#1086;&#1081; &#1095;&#1080;&#1090;&#1072;&#1090;&#1077;&#1083;&#1100;, &#1076;&#1072;&#1074;&#1072;&#1081; &#1087;&#1077;&#1088;&#1077;&#1082;&#1083;&#1102;&#1095;&#1080;&#1084;&#1089;&#1103; &#1074;&#1086; &#1074;&#1082;&#1083;&#1072;&#1076;&#1082;&#1091; &#171;&#1089;&#1077;&#1090;&#1100;&#187;.&lt;/p&gt;&lt;p&gt;&#1055;&#1077;&#1088;&#1077;&#1093;&#1086;&#1076;&#1103; &#1087;&#1086; &#1089;&#1090;&#1088;&#1077;&#1083;&#1082;&#1072;&#1084; &#1084;&#1099; &#1091;&#1074;&#1080;&#1076;&#1080;&#1084;, &#1095;&#1090;&#1086;, &#1082;&#1088;&#1086;&#1084;&#1077; &#1074;&#1089;&#1077;&#1075;&#1086; &#1087;&#1088;&#1086;&#1095;&#1077;&#1075;&#1086;, &#1087;&#1083;&#1077;&#1077;&#1088; &#1079;&#1072;&#1087;&#1088;&#1072;&#1096;&#1080;&#1074;&#1072;&#1077;&#1090; &#1092;&#1072;&#1081;&#1083;&#1080;&#1082; &#1087;&#1086; &#1072;&#1076;&#1088;&#1077;&#1089;&#1091; &lt;i&gt;https://panoramas.api-maps.yandex.ru/panorama/1.x/?l=stv&amp;lang=ru_RU&amp;...&amp;format=json&lt;/i&gt;. &#1058;&#1091;&#1090; &#1091;&#1078;&#1077; &#1085;&#1077;&#1090; &#1096;&#1080;&#1088;&#1086;&#1090;&#1099; &#1080; &#1076;&#1086;&#1083;&#1075;&#1086;&#1090;&#1099;, &#1072; &#1087;&#1088;&#1080;&#1089;&#1091;&#1090;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090; &#1080;&#1076;&#1077;&#1085;&#1090;&#1080;&#1092;&#1080;&#1082;&#1072;&#1090;&#1086;&#1088;, &#1085;&#1086; &#1077;&#1089;&#1083;&#1080; &#1086;&#1090;&#1082;&#1088;&#1099;&#1090;&#1100; &#1101;&#1090;&#1086;&#1090; &#1076;&#1078;&#1077;&#1081;&#1089;&#1086;&#1085; &#1074; &#1085;&#1086;&#1074;&#1086;&#1081; &#1074;&#1082;&#1083;&#1072;&#1076;&#1082;&#1077;, &#1090;&#1086; &#1074;&#1085;&#1091;&#1090;&#1088;&#1080; &#1085;&#1077;&#1075;&#1086; &#1084;&#1099; &#1091;&#1074;&#1080;&#1076;&#1080;&#1084; &#1085;&#1091;&#1078;&#1085;&#1099;&#1077; &#1085;&#1072;&#1084; &#1082;&#1086;&#1086;&#1088;&#1076;&#1080;&#1085;&#1072;&#1090;&#1099;:&lt;/p&gt;&lt;pre&gt;&lt;code class='javascript'&gt;JSON.parse(response).data.Data.Point.coordinates&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1086;, &#1095;&#1090;&#1086; &#1073;&#1088;&#1072;&#1091;&#1079;&#1077;&#1088; &#1074;&#1080;&#1076;&#1080;&#1090; &#1101;&#1090;&#1086; &#1079;&#1072;&#1087;&#1088;&#1086;&#1089;, &#1086;&#1079;&#1085;&#1072;&#1095;&#1072;&#1077;&#1090;, &#1095;&#1090;&#1086; &#1089;&#1082;&#1086;&#1088;&#1077;&#1077; &#1074;&#1089;&#1077;&#1075;&#1086; &#1074; &#1086;&#1089;&#1085;&#1086;&#1074;&#1077; &#1083;&#1077;&#1078;&#1080;&#1090; &lt;b&gt;XMLHttpRequest&lt;/b&gt;. &#1058;&#1072;&#1082; &#1082;&#1072;&#1082; &#1079;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1082;&#1072; &lt;b&gt;Content-Security-Policy&lt;/b&gt; &#1085;&#1077; &#1074;&#1080;&#1076;&#1085;&#1086; (&#1087;&#1086; &#1087;&#1088;&#1072;&#1074;&#1076;&#1077; &#1089;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100;, &#1085;&#1072;&#1089;&#1090;&#1088;&#1072;&#1080;&#1074;&#1072;&#1090;&#1100; &#1077;&#1075;&#1086; &#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1086; &#1089;&#1083;&#1086;&#1078;&#1085;&#1086;, &#1080; &#1086;&#1073;&#1099;&#1095;&#1085;&#1086; &#1077;&#1089;&#1083;&#1080; &#1082;&#1090;&#1086; &#1080; &#1087;&#1088;&#1086;&#1087;&#1080;&#1089;&#1099;&#1074;&#1072;&#1077;&#1090; &#1090;&#1072;&#1082;&#1086;&#1081; &#1079;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1086;&#1082;, &#1090;&#1086; &#1090;&#1072;&#1084; &#1089;&#1088;&#1077;&#1076;&#1080; &#1087;&#1088;&#1086;&#1095;&#1077;&#1075;&#1086; &#1077;&#1089;&#1090;&#1100; &lt;b&gt;unsafe-inline&lt;/b&gt;), &#1090;&#1086; &#1084;&#1099; &#1087;&#1086;&#1087;&#1088;&#1086;&#1073;&#1091;&#1077;&#1084; &#1087;&#1086;&#1076;&#1089;&#1083;&#1091;&#1096;&#1072;&#1090;&#1100;, &#1086; &#1095;&#1105;&#1084; &#1075;&#1086;&#1074;&#1086;&#1088;&#1080;&#1090; &#1087;&#1083;&#1077;&#1077;&#1088; &#1089; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1086;&#1084;.&lt;/p&gt;&lt;p&gt;&#1052;&#1086;&#1078;&#1085;&#1086; &#1085;&#1077; &#1080;&#1079;&#1086;&#1073;&#1088;&#1077;&#1090;&#1072;&#1090;&#1100; &#1074;&#1077;&#1083;&#1086;&#1089;&#1080;&#1087;&#1077;&#1076; &#1080; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1087;&#1086;&#1080;&#1089;&#1082;&#1072;&#1090;&#1100;, &lt;a href="http://stackoverflow.com/questions/6884616/intercept-all-ajax-calls"&gt;&#1082;&#1072;&#1082; &#1101;&#1090;&#1086; &#1076;&#1077;&#1083;&#1072;&#1102;&#1090; &#1091;&#1078;&#1077; &#1076;&#1086; &#1085;&#1072;&#1089;&lt;/a&gt;. &#1042; &#1085;&#1072;&#1096;&#1077;&#1084; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1087;&#1083;&#1077;&#1077;&#1088; &#1085;&#1072;&#1093;&#1086;&#1076;&#1080;&#1090;&#1089;&#1103; &#1074;&#1085;&#1091;&#1090;&#1088;&#1080; &#1075;&#1077;&#1085;&#1077;&#1088;&#1103;&#1097;&#1077;&#1075;&#1086;&#1089;&#1103; &#1085;&#1072; &#1083;&#1077;&#1090;&#1091; &#1072;&#1081;&#1092;&#1088;&#1077;&#1081;&#1084;&#1072; &#1080; &#1080;&#1084;&#1077;&#1085;&#1085;&#1086; &#1082;&#1083;&#1072;&#1089;&#1089; &#1074;&#1085;&#1091;&#1090;&#1088;&#1080; &#1101;&#1090;&#1086;&#1075;&#1086; &#1072;&#1081;&#1092;&#1088;&#1077;&#1081;&#1084;&#1072; &#1085;&#1072;&#1084; &#1080; &#1085;&#1072;&#1076;&#1086; &#1087;&#1086;&#1076;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100;. &#1044;&#1083;&#1103; &#1101;&#1090;&#1086;&#1075;&#1086; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1084; &#1084;&#1086;&#1076;&#1085;&#1099;&#1081; &#1085;&#1099;&#1085;&#1095;&#1077; &lt;b&gt;MutationObserver&lt;/b&gt;. &#1071; &#1089;&#1086;&#1073;&#1088;&#1072;&#1083; &lt;a href="https://jsfiddle.net/lonelyelk/02j5wLz2/"&gt;&#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1102;&#1097;&#1080;&#1081; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088; &#1085;&#1072; jsfiddle&lt;/a&gt;, &#1080; &#1087;&#1088;&#1077;&#1076;&#1083;&#1072;&#1075;&#1072;&#1102; &#1077;&#1075;&#1086; &#1074;&#1085;&#1080;&#1084;&#1072;&#1085;&#1080;&#1102; &#1076;&#1086;&#1088;&#1086;&#1075;&#1080;&#1093; &#1095;&#1080;&#1090;&#1072;&#1090;&#1077;&#1083;&#1077;&#1081;.&lt;/p&gt;&lt;ol&gt;&lt;lh&gt;&#1057;&#1088;&#1072;&#1079;&#1091; &#1074;&#1080;&#1076;&#1085;&#1086; &#1085;&#1077;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1086; &#1085;&#1077;&#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1082;&#1086;&#1074;:&lt;/lh&gt;&lt;li&gt;&#1056;&#1072;&#1079;&#1084;&#1077;&#1088;&#1099; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1099; &#1085;&#1077; &#1072;&#1076;&#1072;&#1087;&#1090;&#1080;&#1088;&#1091;&#1102;&#1090;&#1089;&#1103; &#1087;&#1088;&#1080; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1080; &#1088;&#1072;&#1079;&#1084;&#1077;&#1088;&#1086;&#1074; &#1086;&#1082;&#1085;&#1072;.&lt;/li&gt;&lt;li&gt;&#1053;&#1077;&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1086;&#1090;&#1089;&#1083;&#1077;&#1076;&#1080;&#1090;&#1100; &#1085;&#1072;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1074;&#1079;&#1075;&#1083;&#1103;&#1076;&#1072;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1087;&#1086;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100; &#1077;&#1075;&#1086; &#1085;&#1072; &#1082;&#1072;&#1088;&#1090;&#1077;. &#1071; &#1088;&#1099;&#1083;&#1089;&#1103; &#1074; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1072;&#1093;, &#1085;&#1086; &#1085;&#1080;&#1095;&#1077;&#1075;&#1086; &#1085;&#1077; &#1085;&#1072;&#1096;&#1105;&#1083;.&lt;/li&gt;&lt;li&gt;&#1055;&#1088;&#1080;&#1096;&#1083;&#1072; &#1073;&#1077;&#1076;&#1072;, &#1086;&#1090;&#1082;&#1091;&#1076;&#1072; &#1085;&#1077; &#1078;&#1076;&#1072;&#1083;&#1080;: &#1089;&#1083;&#1091;&#1095;&#1080;&#1083;&#1089;&#1103; &#1087;&#1088;&#1086;&#1075;&#1088;&#1077;&#1089;&#1089;!&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/ol&gt;&lt;h2&gt;&#1055;&#1088;&#1072;&#1074;&#1080;&#1083;&#1100;&#1085;&#1099;&#1081; API&lt;/h2&gt;&lt;p&gt;&#1058;&#1077;&#1084;&#1072; &#1101;&#1090;&#1086;&#1075;&#1086; &#1090;&#1086;&#1087;&#1080;&#1082;&#1072; &#1073;&#1099;&#1083;&#1072; &#1079;&#1072;&#1087;&#1083;&#1072;&#1085;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1072; &#1091; &#1084;&#1077;&#1085;&#1103; &#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1077; &#1074;&#1088;&#1077;&#1084;&#1103; &#1085;&#1072;&#1079;&#1072;&#1076;. &#1048; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1099;&#1077; &#1092;&#1080;&#1096;&#1082;&#1080; &#1073;&#1099;&#1083;&#1080; &#1086;&#1087;&#1088;&#1086;&#1073;&#1086;&#1074;&#1072;&#1085;&#1099; &#1080; &#1089;&#1076;&#1077;&#1083;&#1072;&#1085;&#1099; &#1090;&#1086;&#1078;&#1077; &#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1077; &#1074;&#1088;&#1077;&#1084;&#1103; &#1085;&#1072;&#1079;&#1072;&#1076;. &#1053;&#1086; &#1082;&#1086;&#1075;&#1076;&#1072; &#1103; &#1089;&#1077;&#1083; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1082;&#1086;&#1085;&#1082;&#1088;&#1077;&#1090;&#1085;&#1099;&#1081; &#1082;&#1086;&#1076;, &#1090;&#1086; &#1086;&#1073;&#1085;&#1072;&#1088;&#1091;&#1078;&#1080;&#1083;, &#1095;&#1090;&#1086; &#1074; &lt;a href="https://tech.yandex.ru/maps/doc/jsapi/2.1/dg/concepts/panorama-docpage/"&gt;&#1089;&#1090;&#1072;&#1085;&#1076;&#1072;&#1088;&#1090;&#1085;&#1086;&#1081; &#1087;&#1086;&#1089;&#1090;&#1072;&#1074;&#1082;&#1077; API &#1082;&#1072;&#1088;&#1090; &#1091;&#1078;&#1077; &#1077;&#1089;&#1090;&#1100; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1099;&lt;/a&gt;. &#1055;&#1088;&#1086;&#1080;&#1079;&#1086;&#1096;&#1083;&#1086; &#1101;&#1090;&#1086; &#1074; &#1087;&#1088;&#1086;&#1096;&#1083;&#1086;&#1081; &#1074;&#1077;&#1088;&#1089;&#1080;&#1080; 2.1.38 &#1086;&#1090; 31 &#1084;&#1072;&#1088;&#1090;&#1072; 2016. &#1057;&#1077;&#1081;&#1095;&#1072;&#1089; &#1103; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1083; &#1089; 2.1.39. &#1042;&#1089;&#1077;&#1075;&#1086; 42 &#1076;&#1085;&#1103; &#1082;&#1072;&#1082; &#1084;&#1086;&#1078;&#1085;&#1086; &#1089;&#1090;&#1072;&#1074;&#1080;&#1090;&#1100; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1099; &#1085;&#1072; &#1082;&#1072;&#1088;&#1090;&#1099;!&lt;/p&gt;&lt;p&gt;&#1050;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086; &#1078;&#1077;, &#1103; &#1089;&#1086;&#1073;&#1088;&#1072;&#1083; &lt;a href="https://jsfiddle.net/lonelyelk/mh8uhsy4/"&gt;&#1090;&#1072;&#1082;&#1086;&#1081; &#1078;&#1077; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088; &#1085;&#1072; API &#1071;&#1085;&#1076;&#1077;&#1082;&#1089; &#1050;&#1072;&#1088;&#1090;&lt;/a&gt;. (&#1042;&#1089;&#1105;-&#1090;&#1072;&#1082;&#1080; &#1089;&#1080;&#1085;&#1090;&#1072;&#1082;&#1089;&#1080;&#1089; &#1083;&#1080;&#1092;&#1083;&#1077;&#1090;&#1072; &#1085;&#1072;&#1084;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1103;&#1097;&#1085;&#1077;&#1077;, &#1080;&#1079;&#1074;&#1080;&#1085;&#1080;&#1090;&#1077;). &#1069;&#1090;&#1086; &#1085;&#1072;&#1089;&#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1085;&#1086;&#1074;&#1086;&#1077; &#1103;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077;, &#1095;&#1090;&#1086; &#1076;&#1072;&#1078;&#1077; &#1085;&#1077; &#1074;&#1093;&#1086;&#1076;&#1080;&#1090; &#1074; &#1089;&#1090;&#1072;&#1085;&#1076;&#1072;&#1088;&#1090;&#1085;&#1099;&#1081; &#1087;&#1086;&#1083;&#1085;&#1099;&#1081; &#1085;&#1072;&#1073;&#1086;&#1088; &#1084;&#1086;&#1076;&#1091;&#1083;&#1077;&#1081;. &#1047;&#1072;&#1084;&#1077;&#1090;&#1100;&#1090;&#1077; &#1074;&#1086; &#1074;&#1085;&#1077;&#1096;&#1085;&#1080;&#1093; &#1088;&#1077;&#1089;&#1091;&#1088;&#1089;&#1072;&#1093; &#1089;&#1083;&#1077;&#1074;&#1072; &#1103; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1083; &#1076;&#1083;&#1103; &#1079;&#1072;&#1075;&#1088;&#1091;&#1079;&#1082;&#1080; (&#1080;&#1085;&#1072;&#1095;&#1077; &#1085;&#1077; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1077;&#1090;):&lt;/p&gt;&lt;pre&gt;&lt;code&gt;load=package.full,panorama.isSupported,panorama.locate,panorama.createPlayer,panorama.Player&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1053;&#1077;&#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1082;&#1080; &#171;&#1093;&#1072;&#1082;&#1077;&#1088;&#1089;&#1082;&#1086;&#1075;&#1086;&#187; &#1084;&#1077;&#1090;&#1086;&#1076;&#1072; &#1086;&#1090;&#1089;&#1091;&#1090;&#1089;&#1090;&#1074;&#1091;&#1102;&#1090;. &#1055;&#1083;&#1077;&#1077;&#1088; &#1089;&#1083;&#1077;&#1076;&#1091;&#1077;&#1090; &#1079;&#1072; &#1088;&#1072;&#1079;&#1084;&#1077;&#1088;&#1072;&#1084;&#1080; &#1101;&#1083;&#1077;&#1084;&#1077;&#1085;&#1090;&#1072;. &#1044;&#1083;&#1103; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1086;&#1074; &#1087;&#1088;&#1086;&#1089;&#1084;&#1086;&#1090;&#1088;&#1072; &#1077;&#1089;&#1090;&#1100; &#1089;&#1087;&#1077;&#1094;&#1080;&#1072;&#1083;&#1100;&#1085;&#1099;&#1077; &#1089;&#1086;&#1073;&#1099;&#1090;&#1080;&#1103;, &#1087;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1084;&#1086;&#1078;&#1085;&#1086; &#1088;&#1080;&#1089;&#1086;&#1074;&#1072;&#1090;&#1100; &#1085;&#1072; &#1082;&#1072;&#1088;&#1090;&#1077; &#1085;&#1072;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1074;&#1079;&#1075;&#1083;&#1103;&#1076;&#1072;. &#1042; &#1084;&#1086;&#1105;&#1084; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088;&#1077; &#1101;&#1090;&#1086; &#1085;&#1077; &#1089;&#1076;&#1077;&#1083;&#1072;&#1085;&#1086;, &#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086;.&lt;/p&gt;&lt;p&gt;&#1058;&#1072;&#1082; &#1095;&#1090;&#1086; &#1089; &#1090;&#1086;&#1095;&#1082;&#1080; &#1079;&#1088;&#1077;&#1085;&#1080;&#1103; &#1076;&#1072;&#1083;&#1100;&#1085;&#1077;&#1081;&#1096;&#1077;&#1075;&#1086; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103;, &#1084;&#1086;&#1105; &#1088;&#1077;&#1096;&#1077;&#1085;&#1080;&#1077; &#1091;&#1090;&#1088;&#1072;&#1090;&#1080;&#1083;&#1086; &#1089;&#1074;&#1086;&#1102; &#1072;&#1082;&#1090;&#1091;&#1072;&#1083;&#1100;&#1085;&#1086;&#1089;&#1090;&#1100;. &#1053;&#1086; &#1089; &#1090;&#1086;&#1095;&#1082;&#1080; &#1079;&#1088;&#1077;&#1085;&#1080;&#1103; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1081;&amp;nbsp;&#8212; &#1086;&#1095;&#1077;&#1085;&#1100; &#1076;&#1072;&#1078;&#1077; &#1086;&#1090;&#1083;&#1080;&#1095;&#1085;&#1099;&#1081; &#1084;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;, &#1103; &#1089;&#1095;&#1080;&#1090;&#1072;&#1102;!&lt;/p&gt;&lt;h2&gt;&#1054;&#1090;&#1076;&#1077;&#1083;&#1100;&#1085;&#1086; &#1089;&#1089;&#1099;&#1083;&#1082;&#1080;:&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="https://jsfiddle.net/lonelyelk/02j5wLz2/"&gt;&#1050;&#1072;&#1082; &#1087;&#1088;&#1080;&#1089;&#1087;&#1086;&#1089;&#1086;&#1073;&#1080;&#1090;&#1100; &#1082;&#1086;&#1076; &#1076;&#1083;&#1103; &#1074;&#1089;&#1090;&#1072;&#1074;&#1082;&#1080; &#1071;&#1085;&#1076;&#1077;&#1082;&#1089; &#1055;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084; &#1085;&#1072; &#1089;&#1074;&#1086;&#1080; &#1082;&#1072;&#1088;&#1090;&#1099; (jsfiddle)&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;&lt;a href="https://jsfiddle.net/lonelyelk/mh8uhsy4/"&gt;&#1050;&#1072;&#1082; &#1087;&#1086;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1099; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; API &#1071;&#1085;&#1076;&#1077;&#1082;&#1089; &#1050;&#1072;&#1088;&#1090; (jsfiddle)&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/6884616/intercept-all-ajax-calls"&gt;Intercept all ajax calls (stackoverflow)&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;&lt;a href="https://tech.yandex.ru/maps/doc/jsapi/index-docpage/"&gt;API &#1071;&#1085;&#1076;&#1077;&#1082;&#1089; &#1050;&#1072;&#1088;&#1090;&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;&lt;a href="http://leafletjs.com/"&gt;&#1051;&#1091;&#1095;&#1096;&#1080;&#1081; API &#1076;&#1083;&#1103; &#1082;&#1072;&#1088;&#1090;&#1086;&#1075;&#1088;&#1072;&#1092;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080;&#1093; &#1089;&#1077;&#1088;&#1074;&#1080;&#1089;&#1086;&#1074; Leaflet&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/52</id>
    <published>2016-04-27T23:24:30+00:00</published>
    <updated>2016-04-27T23:37:44+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/52"/>
    <title>&#1057;&#1090;&#1088;&#1077;&#1083;&#1082;&#1080; &#1076;&#1083;&#1103; krpano &#1085;&#1072; &#1085;&#1077;&#1089;&#1091;&#1097;&#1077;&#1090;&#1089;&#1074;&#1091;&#1102;&#1097;&#1077;&#1084; &#1103;&#1079;&#1099;&#1082;&#1077;</title>
    <content type="html">&lt;p&gt;&#1050;&#1086;&#1075;&#1076;&#1072;-&#1090;&#1086; &#1076;&#1072;&#1074;&#1085;&#1086;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1084;&#1099; &#1085;&#1072;&#1095;&#1080;&#1085;&#1072;&#1083;&#1080; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1099; &#1076;&#1083;&#1103; &#1071;&#1085;&#1076;&#1077;&#1082;&#1089;&#1072;, &#1103; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1083; &#1076;&#1083;&#1103; &#1085;&#1080;&#1093; &#1087;&#1083;&#1077;&#1077;&#1088; &#1085;&#1072; &#1092;&#1083;&#1101;&#1096;&#1077;. &#1054;&#1085; &#1087;&#1086;&#1090;&#1086;&#1084; &#1073;&#1099;&#1083; &#1080;&#1084; &#1087;&#1086;&#1083;&#1085;&#1086;&#1089;&#1090;&#1100;&#1102; &#1089; &#1087;&#1086;&#1090;&#1088;&#1086;&#1093;&#1072;&#1084;&#1080; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1085; &#1085;&#1072; &#1087;&#1086;&#1076;&#1076;&#1077;&#1088;&#1078;&#1082;&#1091; &#1080; &#1079;&#1085;&#1072;&#1095;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086; &#1076;&#1086;&#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1085;. &#1040; &#1089;&#1077;&#1081;&#1095;&#1072;&#1089; &#1091;&#1078;&#1077;, &#1082;&#1072;&#1078;&#1077;&#1090;&#1089;&#1103;, &#1089;&#1076;&#1072;&#1085; &#1074; &#1091;&#1090;&#1080;&#1083;&#1100;. &#1053;&#1072; &#1089;&#1084;&#1077;&#1085;&#1091; &#1092;&#1083;&#1101;&#1096;&#1091; &#1087;&#1088;&#1080;&#1093;&#1086;&#1076;&#1080;&#1090; html5. &#1048; &#1074; &#1087;&#1088;&#1086;&#1095;&#1080;&#1093; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1072;&#1093;, &#1082;&#1088;&#1086;&#1084;&#1077; &#1085;&#1072;&#1096;&#1080;&#1093; &#1074;&#1085;&#1091;&#1090;&#1088;&#1077;&#1085;&#1085;&#1080;&#1093;, &#1089;&#1090;&#1072;&#1088;&#1099;&#1081; &#1087;&#1083;&#1077;&#1077;&#1088; &#1090;&#1086;&#1078;&#1077; &#1091;&#1078;&#1077; &#1085;&#1077; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090;&#1089;&#1103;.&lt;/p&gt;&lt;p&gt;&#1053;&#1086;&#1074;&#1099;&#1081; &#1087;&#1083;&#1077;&#1077;&#1088; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1087;&#1086;&#1082;&#1072; &#1090;&#1072;&#1082; &#1080; &#1085;&#1077; &#1076;&#1086;&#1093;&#1086;&#1076;&#1103;&#1090; &#1088;&#1091;&#1082;&#1080;, &#1093;&#1086;&#1090;&#1103;, &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;, &#1080; &#1087;&#1088;&#1080;&#1076;&#1105;&#1090;&#1089;&#1103; &#1101;&#1090;&#1086; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100;. &#1055;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1084;&#1099; &#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1084;&#1089;&#1103; &#1091;&#1078;&#1077; &#1075;&#1086;&#1090;&#1086;&#1074;&#1099;&#1084;&#1080; &#1087;&#1088;&#1086;&#1076;&#1091;&#1082;&#1090;&#1072;&#1084;&#1080;. &#1053;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1087;&#1083;&#1077;&#1077;&#1088; &lt;a href="http://krpano.com/"&gt;krpano&lt;/a&gt;. &#1054; &#1084;&#1086;&#1077;&#1081; &#1089; &#1085;&#1080;&#1084; &#1088;&#1072;&#1073;&#1086;&#1090;&#1077; &#1080; &#1093;&#1086;&#1095;&#1091; &#1088;&#1072;&#1089;&#1089;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100;. &#1042;&#1086;&#1090;, &#1075;&#1076;&#1077; &#1084;&#1086;&#1081; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089; &#1082; &#1088;&#1072;&#1079;&#1085;&#1099;&#1084; &#1103;&#1079;&#1099;&#1082;&#1072;&#1084; &#1089;&#1099;&#1075;&#1088;&#1072;&#1083; &#1089;&#1074;&#1086;&#1102; &#1088;&#1086;&#1083;&#1100;.&lt;/p&gt;&lt;h2&gt;&#1057;&#1090;&#1088;&#1077;&#1083;&#1082;&#1080;&lt;/h2&gt;&lt;p&gt;&#1050;&#1083;&#1072;&#1091;&#1089; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1072;&#1090;&#1099;&#1074;&#1072;&#1083; &#1089;&#1074;&#1086;&#1081; &#1087;&#1083;&#1077;&#1077;&#1088; &#1085;&#1072; &#1089;&#1090;&#1099;&#1082;&#1077; &#1101;&#1087;&#1086;&#1093;, &#1080; &#1087;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1086;&#1085; &#1091; &#1085;&#1077;&#1075;&#1086; &#1087;&#1086;&#1076;&#1076;&#1077;&#1088;&#1078;&#1080;&#1074;&#1072;&#1077;&#1090; &#1082;&#1072;&#1082; &#1092;&#1083;&#1101;&#1096;, &#1090;&#1072;&#1082; &#1080; html5. &#1055;&#1086; &#1089;&#1091;&#1090;&#1080; &#1078;&#1077; &#1101;&#1090;&#1086; &#1076;&#1074;&#1072; &#1087;&#1083;&#1077;&#1077;&#1088;&#1072;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1102;&#1090; &#1089; &#1086;&#1076;&#1085;&#1080;&#1084; &#1085;&#1072;&#1073;&#1086;&#1088;&#1086;&#1084; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093;. &#1044;&#1083;&#1103; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1099; &#1086;&#1073;&#1099;&#1095;&#1085;&#1086; &#1101;&#1090;&#1086; &#1080;&#1079;&#1086;&#1073;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1103; &#1080; &#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1077; &#1086;&#1087;&#1080;&#1089;&#1072;&#1085;&#1080;&#1077;, &#1082;&#1072;&#1082; &#1080;&#1093; &#1076;&#1088;&#1091;&#1075; &#1082; &#1076;&#1088;&#1091;&#1075;&#1091; &#1087;&#1088;&#1080;&#1083;&#1072;&#1076;&#1080;&#1090;&#1100; &#1080; &#1095;&#1090;&#1086; &#1088;&#1072;&#1079;&#1084;&#1077;&#1089;&#1090;&#1080;&#1090;&#1100; &#1087;&#1086;&#1074;&#1077;&#1088;&#1093;. &#1042; &#1076;&#1072;&#1085;&#1085;&#1086;&#1084; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#8212; &#1101;&#1090;&#1086; &#1092;&#1072;&#1081;&#1083; xml, &#1089;&#1087;&#1077;&#1094;&#1080;&#1092;&#1080;&#1082;&#1072;&#1094;&#1080;&#1103; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1075;&#1086; &#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1086; &#1093;&#1086;&#1088;&#1086;&#1096;&#1086; &#1076;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1072;.&lt;/p&gt;&lt;p&gt;&lt;img alt="Mayalanguage" height="337" src="http://lonelyelk.ru/images/uploads/0000/0049/mayalanguage.jpg" width="600" /&gt;&lt;/p&gt;&lt;p&gt;&#1055;&#1077;&#1088;&#1077;&#1076;&#1086; &#1084;&#1085;&#1086;&#1081; &#1074;&#1089;&#1090;&#1072;&#1083;&#1072; &#1079;&#1072;&#1076;&#1072;&#1095;&#1072; &#1089;&#1086;&#1079;&#1076;&#1072;&#1090;&#1100; &#1089;&#1090;&#1088;&#1077;&#1083;&#1082;&#1080; &#1082;&#1072;&#1082; &#1074; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1072;&#1093; &#1091;&#1083;&#1080;&#1094;. &#1052;&#1072;&#1090;&#1077;&#1084;&#1072;&#1090;&#1080;&#1082;&#1072; &#1091; &#1085;&#1080;&#1093; &#1085;&#1077; &#1086;&#1095;&#1077;&#1085;&#1100; &#1089;&#1083;&#1086;&#1078;&#1085;&#1072;&#1103;, &#1072; &#1076;&#1083;&#1103; &#1088;&#1077;&#1072;&#1083;&#1080;&#1079;&#1072;&#1094;&#1080;&#1080; &#1103; &#1088;&#1077;&#1096;&#1080;&#1083; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1074;&#1089;&#1090;&#1088;&#1086;&#1077;&#1085;&#1085;&#1099;&#1077; &#1074; &#1087;&#1083;&#1077;&#1077;&#1088; &#1093;&#1086;&#1090;&#1089;&#1087;&#1086;&#1090;&#1099;. &#1054;&#1085;&#1080; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1103;&#1102;&#1090; &#1088;&#1080;&#1089;&#1086;&#1074;&#1072;&#1090;&#1100; &#1084;&#1085;&#1086;&#1075;&#1086;&#1091;&#1075;&#1086;&#1083;&#1100;&#1085;&#1080;&#1082;&#1080; &#1083;&#1102;&#1073;&#1086;&#1081; &#1092;&#1086;&#1088;&#1084;&#1099; &#1087;&#1086;&#1074;&#1077;&#1088;&#1093; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1099;.&lt;/p&gt;&lt;p&gt;&#1055;&#1086;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1091; &#1082;&#1088;&#1086;&#1084;&#1077; &#1092;&#1086;&#1090;&#1086;&#1075;&#1088;&#1072;&#1092;&#1080;&#1081; &#1087;&#1083;&#1077;&#1077;&#1088; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; xml, &#1090;&#1086; &#1072;&#1074;&#1090;&#1086;&#1088;&#1091; &#1087;&#1088;&#1080;&#1096;&#1083;&#1086;&#1089;&#1100; &#1087;&#1088;&#1080;&#1076;&#1091;&#1084;&#1072;&#1090;&#1100; &#1089;&#1074;&#1086;&#1081; &#1103;&#1079;&#1099;&#1082; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1073;&#1099; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1103;&#1083; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1074;&#1085;&#1091;&#1090;&#1088;&#1080; xml. &#1052;&#1086;&#1078;&#1085;&#1086;, &#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086;, &#1074;&#1099;&#1079;&#1099;&#1074;&#1072;&#1090;&#1100; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1080; &#1076;&#1078;&#1072;&#1074;&#1072;&#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1072;, &#1085;&#1086; &#1074;&#1086;-&#1087;&#1077;&#1088;&#1074;&#1099;&#1093;, &#1101;&#1090;&#1086; &#1090;&#1086;&#1088;&#1084;&#1086;&#1079;&#1080;&#1090; &#1092;&#1083;&#1101;&#1096;&#1086;&#1074;&#1091;&#1102; &#1074;&#1077;&#1088;&#1089;&#1080;&#1102;, &#1072; &#1074;&#1086;-&#1074;&#1090;&#1086;&#1088;&#1099;&#1093;, &#1074; &#1095;&#1105;&#1084; &#1078;&#1077; &#1090;&#1091;&#1090; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;?&lt;/p&gt;&lt;p&gt;&lt;a href="http://krpano.com/docu/actions/#top"&gt;&#1071;&#1079;&#1099;&#1082;&lt;/a&gt; &#1085;&#1072;&#1087;&#1086;&#1084;&#1085;&#1080;&#1083; &#1084;&#1085;&#1077; &#1072;&#1089;&#1089;&#1077;&#1084;&#1073;&#1083;&#1077;&#1088;, &#1093;&#1086;&#1090;&#1103; &#1084;&#1085;&#1077; &#1085;&#1077; &#1076;&#1086;&#1074;&#1077;&#1083;&#1086;&#1089;&#1100; &#1085;&#1072; &#1085;&#1105;&#1084; &#1084;&#1085;&#1086;&#1075;&#1086; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100;. &#1055;&#1086; &#1089;&#1091;&#1090;&#1080; &#1101;&#1090;&#1086; &lt;a href="https://ru.wikipedia.org/wiki/&#1055;&#1086;&#1083;&#1100;&#1089;&#1082;&#1072;&#1103;_&#1085;&#1086;&#1090;&#1072;&#1094;&#1080;&#1103;"&gt;&#1087;&#1086;&#1083;&#1100;&#1089;&#1082;&#1072;&#1103; &#1085;&#1086;&#1090;&#1072;&#1094;&#1080;&#1103;&lt;/a&gt;, &#1076;&#1083;&#1103; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1081; &#1087;&#1088;&#1086;&#1097;&#1077; &#1074;&#1089;&#1077;&#1075;&#1086; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1080;&#1085;&#1090;&#1077;&#1088;&#1087;&#1088;&#1077;&#1090;&#1072;&#1090;&#1086;&#1088;. &#1055;&#1088;&#1080; &#1101;&#1090;&#1086;&#1084; &#1086;&#1090;&#1089;&#1091;&#1090;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090; &#1074;&#1083;&#1086;&#1078;&#1077;&#1085;&#1085;&#1086;&#1089;&#1090;&#1100; &#1086;&#1087;&#1077;&#1088;&#1072;&#1094;&#1080;&#1081;. &#1060;&#1091;&#1085;&#1082;&#1094;&#1080;&#1080; &#1085;&#1077; &#1074;&#1086;&#1079;&#1074;&#1088;&#1072;&#1097;&#1072;&#1102;&#1090; &#1079;&#1085;&#1072;&#1095;&#1077;&#1085;&#1080;&#1103; (&#1082;&#1088;&#1086;&#1084;&#1077; &#1086;&#1076;&#1085;&#1086;&#1081;), &#1072; &#1080;&#1079;&#1084;&#1077;&#1085;&#1103;&#1102;&#1090; &#1072;&#1088;&#1075;&#1091;&#1084;&#1077;&#1085;&#1090;&#1099;. &#1048; &#1089;&#1072;&#1084;&#1086;&#1077; &#1075;&#1083;&#1072;&#1074;&#1085;&#1086;&#1077; &#1085;&#1077; &#1079;&#1072;&#1087;&#1091;&#1090;&#1072;&#1090;&#1100;&#1089;&#1103;, &#1075;&#1076;&#1077; &#1085;&#1091;&#1078;&#1085;&#1072; &#1087;&#1077;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1072;&#1103;, &#1072; &#1075;&#1076;&#1077; &#1077;&#1105; &#1079;&#1085;&#1072;&#1095;&#1077;&#1085;&#1080;&#1077;.&lt;/p&gt;&lt;p&gt;&#1042; &#1086;&#1073;&#1097;&#1077;&#1084;, &#1076;&#1086;&#1088;&#1086;&#1075;&#1086;&#1081; &#1095;&#1080;&#1090;&#1072;&#1090;&#1077;&#1083;&#1100;, &#1101;&#1090;&#1086; &#1086;&#1095;&#1077;&#1085;&#1100; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1099;&#1081; &#1086;&#1087;&#1099;&#1090;. &#1071; &#1088;&#1077;&#1082;&#1086;&#1084;&#1077;&#1085;&#1076;&#1091;&#1102; &#1074;&#1089;&#1077;&#1084; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1093;&#1086;&#1090;&#1100; &#1080;&#1079;&#1088;&#1077;&#1076;&#1082;&#1072; &#1085;&#1072; &#1085;&#1077;&#1079;&#1085;&#1072;&#1082;&#1086;&#1084;&#1086;&#1084; &#1103;&#1079;&#1099;&#1082;&#1077;. &#1054;&#1089;&#1074;&#1077;&#1078;&#1072;&#1077;&#1090; &#1074;&#1086;&#1089;&#1087;&#1088;&#1080;&#1103;&#1090;&#1080;&#1077;. &#1045;&#1076;&#1080;&#1085;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1072;&#1103; &#1087;&#1088;&#1086;&#1073;&#1083;&#1077;&#1084;&#1072; &#1074; &#1090;&#1086;&#1084;, &#1082;&#1072;&#1082; &#1087;&#1086;&#1090;&#1086;&#1084; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1095;&#1090;&#1086;-&#1085;&#1080;&#1073;&#1091;&#1076;&#1100; &#1089;&#1083;&#1086;&#1078;&#1085;&#1077;&#1077;. &#1045;&#1089;&#1083;&#1080; &#1084;&#1085;&#1077; &#1079;&#1072;&#1093;&#1086;&#1095;&#1077;&#1090;&#1089;&#1103; &#1091;&#1089;&#1083;&#1086;&#1078;&#1085;&#1080;&#1090;&#1100; &#1084;&#1072;&#1090;&#1077;&#1084;&#1072;&#1090;&#1080;&#1082;&#1091; &#1080; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1080;&#1090;&#1100; &#1085;&#1072;&#1082;&#1083;&#1086;&#1085;&#1103;&#1090;&#1100; &#1089;&#1090;&#1088;&#1077;&#1083;&#1082;&#1080; &#1086;&#1090;&#1085;&#1086;&#1089;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086; &#1075;&#1086;&#1088;&#1080;&#1079;&#1086;&#1085;&#1090;&#1072;, &#1090;&#1086; &#1082;&#1072;&#1082; &#1073;&#1099;&#1090;&#1100;?&lt;/p&gt;&lt;h2&gt;&#1057;&#1078;&#1072;&#1090;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1044;&#1083;&#1103; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1103; &#1088;&#1077;&#1096;&#1080;&#1083; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1084;&#1080;&#1082;&#1088;&#1086;-&#1089;&#1077;&#1088;&#1074;&#1077;&#1088; node.js, &#1072; &#1074;&#1084;&#1077;&#1089;&#1090;&#1077; &#1089; &#1085;&#1080;&#1084; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1084;&#1077;&#1085;&#1090; &#1076;&#1083;&#1103; &#1080;&#1089;&#1087;&#1086;&#1083;&#1085;&#1077;&#1085;&#1080;&#1103; &#1079;&#1072;&#1076;&#1072;&#1095; &lt;b&gt;gulp&lt;/b&gt;. &#1054;&#1076;&#1085;&#1072; &#1090;&#1072;&#1082;&#1072;&#1103; &#1079;&#1072;&#1076;&#1072;&#1095;&#1072; &#8212; &#1091;&#1073;&#1080;&#1088;&#1072;&#1090;&#1100; &#1083;&#1080;&#1096;&#1085;&#1080;&#1077; &#1087;&#1088;&#1086;&#1073;&#1077;&#1083;&#1099; &#1074; &#1087;&#1088;&#1080;&#1076;&#1091;&#1084;&#1072;&#1085;&#1085;&#1086;&#1084; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1086;&#1074;&#1086;&#1084; &#1103;&#1079;&#1099;&#1082;&#1077; krpano. &#1053;&#1077; &#1089;&#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1076;&#1083;&#1103; &#1086;&#1073;&#1092;&#1091;&#1089;&#1082;&#1072;&#1094;&#1080;&#1080; &#1080;&#1083;&#1080; &#1101;&#1082;&#1086;&#1085;&#1086;&#1084;&#1080;&#1080; &#1090;&#1088;&#1072;&#1092;&#1080;&#1082;&#1072;, &#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1086; &#1086;&#1087;&#1103;&#1090;&#1100; &#1078;&#1077; &#1076;&#1083;&#1103; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1072;.&lt;/p&gt;&lt;p&gt;&#1044;&#1083;&#1103; &#1089;&#1078;&#1072;&#1090;&#1080;&#1103; xml &#1103; &#1085;&#1072;&#1096;&#1105;&#1083; pretty-data, &#1072; &#1085;&#1077;&#1076;&#1086;&#1089;&#1090;&#1072;&#1102;&#1097;&#1080;&#1081; &#1082;&#1091;&#1089;&#1086;&#1082; &#1076;&#1086;&#1087;&#1080;&#1089;&#1072;&#1083;:&lt;/p&gt;&lt;pre&gt;&lt;code class='javascript'&gt;var gulp = require(&amp;#39;gulp&amp;#39;),
	prettyData = require(&amp;#39;gulp-pretty-data&amp;#39;);

// Minify krpano action
function minifyAction() {
	function dry (file, cb) {
		file.contents = new Buffer(String(file.contents).replace(/(&amp;lt;action.+?&amp;gt;)([\s\S]+?)(&amp;lt;\/action&amp;gt;)/ig, function (str, opentag, cnt, closetag) {
			return opentag + cnt.replace(/\s*(^|[;,=!])\s*/g, &amp;quot;$1&amp;quot;) + closetag;
		}));
		cb(null, file);
	}

	return require(&amp;#39;event-stream&amp;#39;).map(dry);
}

// Minify plugin xml
gulp.task(&amp;#39;xml&amp;#39;, function () {
	return gulp.src(&amp;#39;dev/arrows.xml&amp;#39;)
		.pipe(prettyData({type: &amp;#39;minify&amp;#39;}))
		.pipe(minifyAction())
		.pipe(gulp.dest(&amp;#39;arrows/example/&amp;#39;));
});&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1042; &#1086;&#1073;&#1097;&#1077;&#1084;, &#1077;&#1089;&#1083;&#1080; &#1074;&#1076;&#1088;&#1091;&#1075; &#1074;&#1099; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090;&#1077; krpano, &#1090;&#1086; &#1084;&#1080;&#1083;&#1086;&#1089;&#1090;&#1080; &#1087;&#1088;&#1086;&#1096;&#1091; &#1079;&#1072; &#1084;&#1086;&#1080;&#1084;&#1080; &#1089;&#1090;&#1088;&#1077;&#1083;&#1086;&#1095;&#1082;&#1072;&#1084;&#1080;. &#1044;&#1083;&#1103; &#1085;&#1080;&#1093; &#1084;&#1085;&#1077; &#1090;&#1086;&#1078;&#1077; &#1087;&#1088;&#1080;&#1096;&#1083;&#1086;&#1089;&#1100; &#1080;&#1079;&#1086;&#1073;&#1088;&#1077;&#1089;&#1090;&#1080;, &#1082;&#1072;&#1082; &#1074;&#1085;&#1091;&#1090;&#1088;&#1080; xml &#1079;&#1072;&#1076;&#1072;&#1074;&#1072;&#1090;&#1100; &#1092;&#1086;&#1088;&#1084;&#1091; &#1080; &#1087;&#1086;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077; &#1086;&#1087;&#1086;&#1088;&#1085;&#1086;&#1081; &#1090;&#1086;&#1095;&#1082;&#1080; (&#1089;&#1084;. &#1087;&#1088;&#1080;&#1084;&#1077;&#1088; &#1085;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1077; &#1087;&#1083;&#1072;&#1075;&#1080;&#1085;&#1072;).&lt;/p&gt;&lt;h2&gt;&#1057;&#1089;&#1099;&#1083;&#1082;&#1080;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://arc360.ru/"&gt;&#1042;&#1080;&#1088;&#1090;&#1091;&#1072;&#1083;&#1100;&#1085;&#1099;&#1081; &#1090;&#1091;&#1088; &#1087;&#1086; &#1040;&#1088;&#1082;&#1090;&#1080;&#1082;&#1077; &#1089; &#1084;&#1086;&#1080;&#1084;&#1080; &#1089;&#1090;&#1088;&#1077;&#1083;&#1082;&#1072;&#1084;&#1080;&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&#1056;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1081; &lt;a href="https://github.com/lonelyelk/krpano-arrows"&gt;krpano-arrows&lt;/a&gt; &#1085;&#1072; &#1075;&#1080;&#1090;&#1093;&#1072;&#1073;&#1077;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://krpano.com/plugins/userplugins/arrows/#top"&gt;&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072; &#1087;&#1083;&#1072;&#1075;&#1080;&#1085;&#1072;&lt;/a&gt; &#1085;&#1072; krpano.com.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/ol&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/51</id>
    <published>2016-04-14T15:27:35+00:00</published>
    <updated>2016-04-14T15:27:35+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/51"/>
    <title>&#1040;&#1074;&#1090;&#1086;&#1084;&#1072;&#1090;&#1080;&#1095;&#1077;&#1089;&#1082;&#1086;&#1077; &#1084;&#1086;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1087;&#1072;&#1087;&#1082;&#1080; NFS</title>
    <content type="html">&lt;h2&gt;&#1048;&#1089;&#1090;&#1086;&#1095;&#1085;&#1080;&#1082; &#1074;&#1076;&#1086;&#1093;&#1085;&#1086;&#1074;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;p&gt;&#1050;&#1088;&#1086;&#1084;&#1077; &#1088;&#1072;&#1073;&#1086;&#1095;&#1080;&#1093; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1086;&#1074; &#1080; &#1089;&#1083;&#1091;&#1095;&#1072;&#1081;&#1085;&#1086;&#1075;&#1086; &#1074;&#1076;&#1086;&#1093;&#1085;&#1086;&#1074;&#1077;&#1085;&#1080;&#1103;, &#1089;&#1072;&#1084;&#1099;&#1084; &#1085;&#1072;&#1076;&#1105;&#1078;&#1085;&#1099;&#1084; &#1080;&#1089;&#1090;&#1086;&#1095;&#1085;&#1080;&#1082;&#1086;&#1084; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1077;&#1088;&#1089;&#1082;&#1080;&#1093; &#1079;&#1072;&#1076;&#1072;&#1095; &#1103;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1087;&#1086;&#1074;&#1090;&#1086;&#1088;&#1077;&#1085;&#1080;&#1077;. &#1054;&#1076;&#1085;&#1086; &#1080;&#1079; &#1089;&#1072;&#1084;&#1099;&#1093; &#1103;&#1088;&#1082;&#1080;&#1093; &#1095;&#1091;&#1074;&#1089;&#1090;&#1074; &#1091;&#1076;&#1086;&#1074;&#1083;&#1077;&#1090;&#1074;&#1086;&#1088;&#1077;&#1085;&#1080;&#1103; &#1085;&#1072;&#1089;&#1090;&#1091;&#1087;&#1072;&#1077;&#1090; &#1086;&#1090; &#1090;&#1086;&#1075;&#1086;, &#1095;&#1090;&#1086; &#1085;&#1077; &#1085;&#1091;&#1078;&#1085;&#1086; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1090;&#1086;, &#1095;&#1090;&#1086; &#1074;&#1099;&#1085;&#1091;&#1078;&#1076;&#1077;&#1085; &#1073;&#1099;&#1083; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1076;&#1086; &#1101;&#1090;&#1086;&#1075;&#1086; &#1089;&#1090;&#1086; &#1088;&#1072;&#1079;.&lt;/p&gt;&lt;p&gt;&#1042; &#1088;&#1072;&#1073;&#1086;&#1090;&#1077; &#1084;&#1099; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1084; &#1089;&#1077;&#1090;&#1077;&#1074;&#1099;&#1077; &#1093;&#1088;&#1072;&#1085;&#1080;&#1083;&#1080;&#1097;&#1072; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093;. &#1054;&#1085;&#1080; &#1085;&#1077; &#1090;&#1072;&#1082; &#1075;&#1080;&#1073;&#1082;&#1080; &#1074; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1077;, &#1082;&#1072;&#1082; &#1086;&#1073;&#1099;&#1095;&#1085;&#1099;&#1077; &#1082;&#1086;&#1084;&#1087;&#1100;&#1102;&#1090;&#1077;&#1088;&#1099;, &#1085;&#1086; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1090;&#1100; &#1084;&#1086;&#1078;&#1085;&#1086;. &#1044;&#1083;&#1103; &#1084;&#1086;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1076;&#1080;&#1089;&#1082;&#1086;&#1074; &#1085;&#1072; &#1088;&#1072;&#1073;&#1086;&#1095;&#1080;&#1077; &#1084;&#1072;&#1096;&#1080;&#1085;&#1099; &#1084;&#1099; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1084; &#1087;&#1088;&#1086;&#1090;&#1086;&#1082;&#1086;&#1083; NFS. &#1048; &#1086;&#1085;, &#1074;&#1084;&#1077;&#1089;&#1090;&#1077; &#1089; &#1101;&#1090;&#1080;&#1084;&#1080; &#1091;&#1089;&#1090;&#1088;&#1086;&#1081;&#1089;&#1090;&#1074;&#1072;&#1084;&#1080;, &#1076;&#1086;&#1089;&#1090;&#1072;&#1074;&#1083;&#1103;&#1077;&#1090; &#1084;&#1085;&#1086;&#1078;&#1077;&#1089;&#1090;&#1074;&#1086; &#1084;&#1077;&#1083;&#1082;&#1080;&#1093; &#1087;&#1088;&#1086;&#1073;&#1083;&#1077;&#1084;.&lt;/p&gt;&lt;p&gt;&#1054;&#1076;&#1085;&#1091; &#1080;&#1079; &#1090;&#1072;&#1082;&#1080;&#1093; &#1087;&#1088;&#1086;&#1073;&#1083;&#1077;&#1084; &#1088;&#1077;&#1096;&#1072;&#1077;&#1090; &lt;a href="http://lonelyelk.ru/posts/50"&gt;&#1073;&#1099;&#1089;&#1090;&#1088;&#1099;&#1081; &#1087;&#1080;&#1085;&#1075;&lt;/a&gt; &#1080;&#1079; &#1087;&#1088;&#1077;&#1076;&#1099;&#1076;&#1091;&#1097;&#1077;&#1081; &#1089;&#1090;&#1072;&#1090;&#1100;&#1080;. &#1055;&#1086;&#1090;&#1086;&#1084;&#1091; &#1095;&#1090;&#1086; &#1093;&#1091;&#1078;&#1077; &#1090;&#1086;&#1075;&#1086;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1087;&#1099;&#1090;&#1072;&#1090;&#1100;&#1089;&#1103; &#1084;&#1086;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1074;&#1099;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1085;&#1086;&#1077; &#1093;&#1088;&#1072;&#1085;&#1080;&#1083;&#1080;&#1097;&#1077; &#1084;&#1086;&#1078;&#1077;&#1090; &#1073;&#1099;&#1090;&#1100; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1074;&#1099;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1080;&#1077; &#1079;&#1072;&#1084;&#1086;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1086;&#1075;&#1086; &#1093;&#1088;&#1072;&#1085;&#1080;&#1083;&#1080;&#1097;&#1072;.&lt;/p&gt;&lt;p&gt;&#1053;&#1086; &#1089;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103; &#1084;&#1099; &#1073;&#1091;&#1076;&#1077;&#1084; &#1073;&#1086;&#1088;&#1086;&#1090;&#1100;&#1089;&#1103; &#1089; &#1090;&#1077;&#1084;, &#1095;&#1090;&#1086; &#1082;&#1072;&#1078;&#1076;&#1086;&#1077; &#1093;&#1088;&#1072;&#1085;&#1080;&#1083;&#1080;&#1097;&#1077; &#1090;&#1088;&#1077;&#1073;&#1091;&#1077;&#1090; &#1087;&#1086;-&#1088;&#1072;&#1079;&#1085;&#1086;&#1084;&#1091; &#1082; &#1085;&#1077;&#1084;&#1091; &#1086;&#1073;&#1088;&#1072;&#1097;&#1072;&#1090;&#1100;&#1089;&#1103; &#1089; &#1088;&#1072;&#1073;&#1086;&#1095;&#1077;&#1081; &#1084;&#1072;&#1096;&#1080;&#1085;&#1099;.&lt;/p&gt;&lt;p&gt;&lt;img alt="DifferentButNotMyProblem" height="337" src="http://lonelyelk.ru/images/uploads/0000/0047/differentformats.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1048;&#1084;&#1103;, &#1089;&#1077;&#1089;&#1090;&#1088;&#1072;!&lt;/h2&gt;&lt;p&gt;&#1055;&#1086;&#1089;&#1083;&#1077; &#1074;&#1099;&#1087;&#1086;&#1083;&#1085;&#1077;&#1085;&#1080;&#1103; &#1086;&#1076;&#1080;&#1085;&#1072;&#1082;&#1086;&#1074;&#1099;&#1093; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1082;&#1094;&#1080;&#1081;&amp;nbsp;&#8212; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1072; &#1072;&#1076;&#1088;&#1077;&#1089;&#1072;, &#1089;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1077; &#1087;&#1072;&#1087;&#1082;&#1080; c &#1080;&#1084;&#1077;&#1085;&#1077;&#1084;, &#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &lt;i&gt;storage&lt;/i&gt;, &#1087;&#1088;&#1077;&#1076;&#1086;&#1089;&#1090;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1082; &#1085;&#1077;&#1081; &#1076;&#1086;&#1089;&#1090;&#1091;&#1087;&#1072; &#1087;&#1086; NFS&amp;nbsp;&#8212; &#1085;&#1072; &#1093;&#1088;&#1072;&#1085;&#1080;&#1083;&#1080;&#1097;&#1072;&#1093; &#1088;&#1072;&#1079;&#1085;&#1099;&#1093; &#1084;&#1072;&#1088;&#1086;&#1082; &#1086;&#1082;&#1072;&#1079;&#1099;&#1074;&#1072;&#1102;&#1090;&#1089;&#1103; &#1076;&#1086;&#1089;&#1090;&#1091;&#1087;&#1085;&#1099; &#1088;&#1072;&#1079;&#1085;&#1099;&#1077; &#1087;&#1072;&#1087;&#1082;&#1080;. &#1058;&#1091;&#1090; &#1085;&#1072;&#1084; &#1085;&#1072; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100; &#1087;&#1088;&#1080;&#1093;&#1086;&#1076;&#1080;&#1090; &lt;b&gt;showmount&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$ showmount -e 192.168.4.50
Exports list on 192.168.4.50:
/storage
/homes
/Web
/Usb
/Recordings
/Public
/Network Recycle Bin 1
/Multimedia
/Download

$ showmount -e 192.168.4.60
Exports list on 192.168.4.60:
/volume1/storage   *&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1052;&#1099; &#1073;&#1099; &#1084;&#1086;&#1075;&#1083;&#1080; &#1085;&#1072; &#1087;&#1077;&#1088;&#1074;&#1086;&#1084; &#1093;&#1088;&#1072;&#1085;&#1080;&#1083;&#1080;&#1097;&#1077; &#1089;&#1086;&#1079;&#1076;&#1072;&#1090;&#1100; &#1088;&#1091;&#1082;&#1072;&#1084;&#1080; &#1087;&#1072;&#1087;&#1082;&#1080; &lt;i&gt;/volume1/storage&lt;/i&gt;, &#1085;&#1086; &#1074;&#1089;&#1077;&#1075;&#1076;&#1072; &#1084;&#1086;&#1078;&#1077;&#1090; &#1087;&#1086;&#1103;&#1074;&#1080;&#1090;&#1100;&#1089;&#1103; &#1091;&#1089;&#1090;&#1088;&#1086;&#1081;&#1089;&#1090;&#1074;&#1086; &#1089; &#1076;&#1088;&#1091;&#1075;&#1080;&#1084; &#1085;&#1072;&#1079;&#1074;&#1072;&#1085;&#1080;&#1077;&#1084; &#1082;&#1086;&#1088;&#1085;&#1077;&#1074;&#1086;&#1075;&#1086; &#1088;&#1072;&#1079;&#1076;&#1077;&#1083;&#1072;. &#1042;&#1086;&#1090; &#1080; &#1087;&#1077;&#1088;&#1074;&#1099;&#1081; &#1082;&#1091;&#1089;&#1086;&#1082; &#1082;&#1086;&#1076;&#1072;, &#1075;&#1076;&#1077; &#1084;&#1099; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1103;&#1077;&#1084; &#1080;&#1084;&#1103; &#1091;&#1076;&#1072;&#1083;&#1105;&#1085;&#1085;&#1086;&#1081; &#1087;&#1072;&#1087;&#1082;&#1080;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;NFSPOINT=`showmount -e $HOST | grep storage | awk &amp;#39;{print $1}&amp;#39;`&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;autofs&lt;/h2&gt;&lt;p&gt;&#1042; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1089; &#1087;&#1086;&#1089;&#1090;&#1086;&#1103;&#1085;&#1085;&#1099;&#1084;&#1080; &#1074;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1080;&#1103;&#1084;&#1080;-&#1074;&#1099;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1080;&#1103;&#1084;&#1080; &#1080; &#1087;&#1077;&#1088;&#1077;&#1085;&#1086;&#1089;&#1072;&#1084;&#1080; &#1093;&#1088;&#1072;&#1085;&#1080;&#1083;&#1080;&#1097; &#1086;&#1076;&#1085;&#1080;&#1084; &#1080;&#1079; &#1093;&#1086;&#1088;&#1086;&#1096;&#1080;&#1093; &#1088;&#1077;&#1096;&#1077;&#1085;&#1080;&#1081; &#1103;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &lt;a href="https://help.ubuntu.com/community/Autofs"&gt;autofs&lt;/a&gt;. &#1042; &#1090;&#1072;&#1082;&#1086;&#1084; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1085;&#1072;&#1084; &#1085;&#1091;&#1078;&#1085;&#1086; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1072;&#1074;&#1090;&#1086;&#1084;&#1072;&#1090;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080; &#1082;&#1086;&#1085;&#1092;&#1080;&#1075;&#1091;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1077;&#1075;&#1086; &#1087;&#1086; &#1079;&#1072;&#1087;&#1088;&#1086;&#1089;&#1091;. &#1045;&#1089;&#1083;&#1080; &#1074; &#1085;&#1072;&#1096;&#1077;&#1084; &lt;b&gt;/etc/auto.master&lt;/b&gt; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085;&#1086;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;/mnt/autofspts	/etc/auto.myrules&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1086; &#1087;&#1086; &#1079;&#1072;&#1087;&#1088;&#1086;&#1089;&#1091; &#1084;&#1086;&#1078;&#1085;&#1086; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1085;&#1091;&#1078;&#1085;&#1091;&#1102; &#1082;&#1086;&#1085;&#1092;&#1080;&#1075;&#1091;&#1088;&#1072;&#1094;&#1080;&#1102; &#1074; &lt;b&gt;/etc/auto.myrules&lt;/b&gt; &#1090;&#1072;&#1082;&#1080;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash

address=192.168.4.50
folder=somefolder

if ping -A -s16 -i0.5 -c3 -q $address &amp;gt; /dev/null 2&amp;gt;&amp;amp;1; then
	set -o pipefail
	mount_point=`showmount -e $address | grep storage | awk &amp;#39;{print $1}&amp;#39;`
	if [[ $? == 0 ]]; then
		entry=&amp;quot;$folder -fstype=nfs,rsize=8192,wsize=8192,noatime,nodiratime,intr,async $address:$mount_point&amp;quot;
		case &amp;quot;$mount_point&amp;quot; in
			/storage)
				model=&amp;quot;QNAP&amp;quot;
				;;
			/volume1/storage)
				model=&amp;quot;Synology&amp;quot;
				;;
			*)
				model=&amp;quot;unkonwn&amp;quot;
				;;
		esac
		output=&amp;quot;$address:$mount_point $model&amp;quot;
		if [ &amp;quot;x$(cat /etc/auto.myrules)&amp;quot; = &amp;quot;x$entry&amp;quot; ]; then
			echo $output
		else
			echo $entry &amp;gt; /etc/auto.myrules &amp;amp;&amp;amp; echo $output configured
		fi
	else
		exit 101
	fi
else
	exit 102
fi&lt;/code&gt;&lt;/pre&gt;&lt;ol&gt;&lt;lh&gt;&#1058;&#1091;&#1090; &#1084;&#1099; &#1076;&#1077;&#1083;&#1072;&#1077;&#1084; &#1089;&#1088;&#1072;&#1079;&#1091; &#1085;&#1077;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1086; &#1074;&#1086;&#1083;&#1096;&#1077;&#1073;&#1085;&#1099;&#1093; &#1074;&#1077;&#1097;&#1077;&#1081;:&lt;/lh&gt;&lt;li&gt;&#1055;&#1080;&#1085;&#1075;&#1091;&#1077;&#1084; &#1087;&#1077;&#1088;&#1077;&#1076; &#1090;&#1077;&#1084;, &#1082;&#1072;&#1082; &#1089;&#1084;&#1086;&#1090;&#1088;&#1077;&#1090;&#1100; &#1085;&#1072; &#1087;&#1072;&#1087;&#1082;&#1080;;&lt;/li&gt;&lt;li&gt;&#1054;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1103;&#1077;&#1084; &#1084;&#1072;&#1088;&#1082;&#1091; &#1080;&#1079; &#1091;&#1078;&#1077; &#1080;&#1079;&#1074;&#1077;&#1089;&#1090;&#1085;&#1099;&#1093; &#1093;&#1088;&#1072;&#1085;&#1080;&#1083;&#1080;&#1097;;&lt;/li&gt;&lt;li&gt;&#1057;&#1074;&#1077;&#1088;&#1103;&#1077;&#1084;, &#1095;&#1090;&#1086; &#1091;&#1078;&#1077; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085;&#1086; &#1074; &#1082;&#1086;&#1085;&#1092;&#1080;&#1075;&#1077; &#1080; &#1085;&#1077; &#1087;&#1080;&#1096;&#1077;&#1084;, &#1077;&#1089;&#1083;&#1080; &#1090;&#1072;&#1084; &#1074;&#1089;&#1105; &#1086;&#1082;;&lt;/li&gt;&lt;li&gt;&#1042;&#1086;&#1079;&#1074;&#1088;&#1072;&#1097;&#1072;&#1077;&#1084; &#1088;&#1072;&#1079;&#1085;&#1099;&#1077; &#1089;&#1090;&#1072;&#1090;&#1091;&#1089;&#1099; &#1076;&#1083;&#1103; &#1088;&#1072;&#1079;&#1085;&#1099;&#1093; &#1086;&#1096;&#1080;&#1073;&#1086;&#1082;.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/ol&gt;&lt;p&gt;&#1058;&#1091;&#1090;, &#1086;&#1076;&#1085;&#1072;&#1082;&#1086;, &#1085;&#1091;&#1078;&#1085;&#1099; &#1087;&#1088;&#1072;&#1074;&#1072; &#1089;&#1091;&#1087;&#1077;&#1088;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1103;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1074; &#1082;&#1086;&#1085;&#1092;&#1080;&#1075;. &#1054; &#1090;&#1086;&#1084;, &#1082;&#1072;&#1082; &#1103; &#1087;&#1086;&#1089;&#1090;&#1091;&#1087;&#1072;&#1102; &#1089; &#1089;&#1091;&#1087;&#1077;&#1088;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1103;&#1084;&#1080; &#1085;&#1072; &#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1093; &#1088;&#1072;&#1073;&#1086;&#1095;&#1080;&#1093; &#1084;&#1072;&#1096;&#1080;&#1085;&#1072;&#1093; &#1103; &#1088;&#1072;&#1089;&#1089;&#1082;&#1072;&#1078;&#1091; &#1076;&#1072;&#1083;&#1100;&#1096;&#1077;.&lt;/p&gt;&lt;h2&gt;sudo mount&lt;/h2&gt;&lt;p&gt;&#1042;&#1089;&#1077;&#1084; &#1093;&#1086;&#1088;&#1086;&#1096; autofs, &#1082;&#1088;&#1086;&#1084;&#1077; &#1090;&#1086;&#1075;&#1086;, &#1095;&#1090;&#1086; &#1085;&#1077; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1103;&#1077;&#1090;, &#1086;&#1087;&#1103;&#1090;&#1100; &#1090;&#1072;&#1082;&#1080;, &#1074;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1072; &#1083;&#1080; &#1084;&#1072;&#1096;&#1080;&#1085;&#1072;, &#1087;&#1088;&#1077;&#1078;&#1076;&#1077; &#1095;&#1077;&#1084; &#1083;&#1077;&#1079;&#1090;&#1100; &#1085;&#1072; &#1085;&#1077;&#1105;. &#1063;&#1090;&#1086; &#1087;&#1088;&#1080;&#1074;&#1086;&#1076;&#1080;&#1090;, &#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1082; &#1079;&#1072;&#1074;&#1080;&#1089;&#1072;&#1085;&#1080;&#1102; &#1087;&#1088;&#1086;&#1094;&#1077;&#1076;&#1091;&#1088; &#1083;&#1080;&#1089;&#1090;&#1080;&#1085;&#1075;&#1072; &#1087;&#1072;&#1087;&#1086;&#1082; &#1089;&#1086; &#1089;&#1089;&#1099;&#1083;&#1082;&#1072;&#1084;&#1080; &#1074;&#1085;&#1091;&#1090;&#1088;&#1100; &#1074;&#1085;&#1077;&#1096;&#1085;&#1080;&#1093; &#1093;&#1088;&#1072;&#1085;&#1080;&#1083;&#1080;&#1097;. &#1042;&#1087;&#1086;&#1083;&#1085;&#1077; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1086;&#1073;&#1086;&#1081;&#1090;&#1080;&#1089;&#1100; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1086;&#1081; &lt;b&gt;mount&lt;/b&gt;. &#1053;&#1086; &#1074; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1090;&#1086;&#1084;&#1072; &#1085;&#1077; &#1087;&#1088;&#1086;&#1087;&#1080;&#1089;&#1072;&#1085;&#1099; &#1074; &lt;i&gt;/etc/fstab&lt;/i&gt;, &#1076;&#1083;&#1103; &#1084;&#1086;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1085;&#1091;&#1078;&#1085;&#1099; &#1087;&#1088;&#1072;&#1074;&#1072; &#1089;&#1091;&#1087;&#1077;&#1088;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1103;. &#1040; &#1072;&#1074;&#1090;&#1086;&#1084;&#1072;&#1090;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080; &#1087;&#1088;&#1072;&#1074;&#1080;&#1090;&#1100; &lt;i&gt;/etc/fstab&lt;/i&gt; &#1086;&#1095;&#1077;&#1085;&#1100; &#1085;&#1077; &#1093;&#1086;&#1095;&#1077;&#1090;&#1089;&#1103;.&lt;/p&gt;&lt;p&gt;&#1053;&#1072; &#1084;&#1072;&#1096;&#1080;&#1085;&#1072;&#1093;, &#1075;&#1076;&#1077; &#1074;&#1089;&#1077; &#1079;&#1085;&#1072;&#1102;&#1090; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100; &#1076;&#1083;&#1103; &lt;i&gt;sudo&lt;/i&gt; &#1103; &#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1102;&#1089;&#1100; &#1089;&#1086;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1085;&#1086; &#1073;&#1077;&#1079;&#1079;&#1072;&#1089;&#1090;&#1077;&#1085;&#1095;&#1080;&#1074;&#1086; &#1089;&#1086;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1085;&#1086; &#1086;&#1087;&#1072;&#1089;&#1085;&#1086;&#1081; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1100;&#1102; &lt;i&gt;sudo&lt;/i&gt; &#1087;&#1086;&#1083;&#1091;&#1095;&#1072;&#1090;&#1100; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100; &#1080;&#1079; &#1089;&#1090;&#1072;&#1085;&#1076;&#1072;&#1088;&#1090;&#1085;&#1086;&#1075;&#1086; &#1074;&#1074;&#1086;&#1076;&#1072;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash

NAME=$1
POINT=$2
HOST=$3

if mount | grep $POINT -c &amp;gt; /dev/null; then
	./ping.sh $HOST &amp;amp;&amp;amp; echo -e &amp;quot;[\e[0;32mOK\e[0m] Already mounted $NAME&amp;quot; || ( echo -e &amp;quot;[\e[0;31mFAIL\e[0m] $NAME is mounted but unreachable. Check if it&amp;#39;s powered and connected&amp;quot; &amp;amp;&amp;amp; exit 1 )
else
	if ./ping.sh $HOST; then
		NFSPOINT=`showmount -e $HOST | grep storage | awk &amp;#39;{print $1}&amp;#39;`
		echo &amp;quot;password&amp;quot; | sudo -S -p &amp;quot;&amp;quot; mount -tnfs -o&amp;quot;rw,rsize=8192,wsize=8192,noatime,nodiratime,intr,async&amp;quot; $HOST:$NFSPOINT $POINT &amp;amp;&amp;amp; echo -e &amp;quot;[\e[0;32mOK\e[0m] Successfully mounted $NAME&amp;quot; || ( echo -e &amp;quot;[\e[0;31mFAIL\e[0m] Unable to mount $NAME&amp;quot; &amp;amp;&amp;amp; exit 1 )
	else
		echo -e &amp;quot;[\e[0;31mFAIL\e[0m] $NAME is unreachable.&amp;quot;
		exit 1
	fi
fi&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1050;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086;, &#1082;&#1091;&#1089;&#1086;&#1095;&#1077;&#1082; &lt;i&gt;echo "password" | sudo -S -p "" mount&lt;/i&gt; &#1074;&#1099;&#1079;&#1099;&#1074;&#1072;&#1077;&#1090; &#1088;&#1077;&#1079;&#1086;&#1085;&#1085;&#1099;&#1081; &#1074;&#1086;&#1087;&#1088;&#1086;&#1089;: &#171;&#1040; &#1087;&#1086;&#1095;&#1077;&#1084;&#1091; &#1073;&#1099; &#1090;&#1086;&#1075;&#1076;&#1072; &#1085;&#1077; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; sudo &#1073;&#1077;&#1079; &#1087;&#1072;&#1088;&#1086;&#1083;&#1103; &#1076;&#1083;&#1103; &#1076;&#1072;&#1085;&#1085;&#1086;&#1075;&#1086; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1103;?&#187; &#1054;&#1090;&#1074;&#1077;&#1090; &#1090;&#1091;&#1090; &#1090;&#1072;&#1082;&#1086;&#1081;, &#1095;&#1090;&#1086; &#1079;&#1072; &#1101;&#1090;&#1086;&#1081; &#1084;&#1072;&#1096;&#1080;&#1085;&#1086;&#1081; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1102;&#1090; &#1085;&#1077; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1088;&#1086;&#1073;&#1086;&#1090;&#1099;, &#1085;&#1086; &#1080; &#1083;&#1102;&#1076;&#1080;, &#1072; &#1095;&#1077;&#1083;&#1086;&#1074;&#1077;&#1082;&#1072; &#1074;&#1074;&#1086;&#1076; &#1087;&#1072;&#1088;&#1086;&#1083;&#1103;, &#1087;&#1091;&#1089;&#1090;&#1100; &#1076;&#1072;&#1078;&#1077; &#1080; &#1090;&#1072;&#1082;&#1086;&#1075;&#1086;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1074;&#1089;&#1077; &#1079;&#1085;&#1072;&#1102;&#1090;, &#1074;&#1074;&#1086;&#1076;&#1080;&#1090; &#1074; &#1073;&#1086;&#1083;&#1077;&#1077; &#1089;&#1086;&#1089;&#1088;&#1077;&#1076;&#1086;&#1090;&#1086;&#1095;&#1077;&#1085;&#1085;&#1086;&#1077; &#1080; &#1089;&#1077;&#1088;&#1100;&#1105;&#1079;&#1085;&#1086;&#1077; &#1089;&#1086;&#1089;&#1090;&#1086;&#1103;&#1085;&#1080;&#1077;.&lt;/p&gt;&lt;h2&gt;&#1042;&#1086;&#1087;&#1088;&#1086;&#1089; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;p&gt;&#1045;&#1089;&#1083;&#1080; &#1074;&#1076;&#1088;&#1091;&#1075; &#1074;&#1099; &#1079;&#1085;&#1072;&#1077;&#1090;&#1077;, &#1082;&#1072;&#1082; &#1089;&#1087;&#1088;&#1072;&#1074;&#1083;&#1103;&#1090;&#1100;&#1089;&#1103; &#1089;&#1080;&#1090;&#1091;&#1072;&#1094;&#1080;&#1077;&#1081;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1079;&#1072;&#1084;&#1086;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1086;&#1077; (&#1083;&#1102;&#1073;&#1099;&#1084; &#1089;&#1087;&#1086;&#1089;&#1086;&#1073;&#1086;&#1084;) &#1093;&#1088;&#1072;&#1085;&#1080;&#1083;&#1080;&#1097;&#1077; NFS &#1074;&#1099;&#1082;&#1083;&#1102;&#1095;&#1080;&#1083;&#1080;, &#1090;&#1086; &#1085;&#1072;&#1087;&#1080;&#1096;&#1080;&#1090;&#1077; &#1084;&#1085;&#1077;.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;sudo umount -f -l /mnt/point&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1054;&#1089;&#1086;&#1073;&#1077;&#1085;&#1085;&#1086; &#1076;&#1083;&#1103; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077;&#1074;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1090;&#1072;&#1082;&#1072;&#1103; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1072; &#1085;&#1077; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1077;&#1090;.&lt;/p&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/50</id>
    <published>2016-03-30T23:10:45+00:00</published>
    <updated>2016-03-30T23:10:45+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/50"/>
    <title>&#1041;&#1099;&#1089;&#1090;&#1088;&#1099;&#1081; &#1087;&#1080;&#1085;&#1075;</title>
    <content type="html">&lt;h2&gt;&#1055;&#1088;&#1077;&#1076;&#1080;&#1089;&#1083;&#1086;&#1074;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1057;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103; &#1093;&#1086;&#1095;&#1091; &#1088;&#1072;&#1089;&#1089;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100; &#1087;&#1088;&#1086; &#1095;&#1090;&#1077;&#1085;&#1080;&#1077; &#1084;&#1072;&#1085;&#1091;&#1072;&#1083;&#1086;&#1074;. &#1053;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1089; &#1080;&#1093; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1103; &#1074;&#1099;&#1103;&#1089;&#1085;&#1080;&#1083;, &#1095;&#1090;&#1086; &#1095;&#1090;&#1086;&#1073;&#1099; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1072;&#1090;&#1099;&#1074;&#1072;&#1090;&#1100; &#1073;&#1072;&#1096;-&#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1099; &#1085;&#1072; &#1084;&#1072;&#1082;&#1077; (&#1086;&#1085; &#1091; &#1084;&#1077;&#1085;&#1103; &#1085;&#1077; &#1090;&#1072;&#1082; &#1076;&#1072;&#1074;&#1085;&#1086;) &#1087;&#1086;&#1076; &#1083;&#1080;&#1085;&#1091;&#1082;&#1089;, &#1085;&#1091;&#1078;&#1085;&#1086; &#1089;&#1090;&#1072;&#1074;&#1080;&#1090;&#1100; &lt;a href="http://apple.stackexchange.com/questions/69223/how-to-replace-mac-os-x-utilities-with-gnu-core-utilities"&gt;coreutils&lt;/a&gt;. &#1055;&#1086;&#1090;&#1086;&#1084;&#1091; &#1095;&#1090;&#1086; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1099; &#1090;&#1077;&#1088;&#1084;&#1080;&#1085;&#1072;&#1083;&#1072; &#1074;&#1077;&#1076;&#1091;&#1090; &#1089;&#1077;&#1073;&#1103; &#1087;&#1086;-&#1088;&#1072;&#1079;&#1085;&#1086;&#1084;&#1091;, &#1080;&#1084;&#1077;&#1102;&#1090; &#1088;&#1072;&#1079;&#1085;&#1099;&#1077; &#1076;&#1086;&#1089;&#1090;&#1091;&#1087;&#1085;&#1099;&#1077; &#1086;&#1087;&#1094;&#1080;&#1080; &#1080; &#1088;&#1072;&#1079;&#1085;&#1099;&#1077; &#1076;&#1077;&#1092;&#1086;&#1083;&#1090;&#1085;&#1099;&#1077; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;.&lt;/p&gt;&lt;p&gt;&#1041;&#1072;&#1096; &#1084;&#1085;&#1077; &#1074;&#1086;&#1086;&#1073;&#1097;&#1077; &#1086;&#1095;&#1077;&#1085;&#1100; &#1085;&#1088;&#1072;&#1074;&#1080;&#1090;&#1089;&#1103;. &#1071; &#1077;&#1075;&#1086; &#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1086; &#1087;&#1083;&#1086;&#1093;&#1086; &#1079;&#1085;&#1072;&#1102;, &#1086;&#1085; &#1086;&#1095;&#1077;&#1085;&#1100; &#1076;&#1088;&#1077;&#1074;&#1085;&#1080;&#1081; &#1080; &#1085;&#1077;&#1084;&#1085;&#1086;&#1075;&#1086; &#1091;&#1088;&#1086;&#1076;&#1083;&#1080;&#1074;&#1099;&#1081;, &#1085;&#1086; &#1076;&#1072;&#1105;&#1090; &#1089;&#1086;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1085;&#1086; &#1085;&#1080; &#1089; &#1095;&#1077;&#1084; &#1085;&#1077; &#1089;&#1088;&#1072;&#1074;&#1085;&#1080;&#1084;&#1086;&#1077; &#1091;&#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1089;&#1090;&#1074;&#1080;&#1077; &#1080; &#1095;&#1091;&#1074;&#1089;&#1090;&#1074;&#1086; &#1075;&#1086;&#1088;&#1076;&#1086;&#1089;&#1090;&#1080;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1087;&#1086;&#1083;&#1091;&#1095;&#1072;&#1077;&#1090;&#1089;&#1103; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1095;&#1090;&#1086;-&#1090;&#1086; &#1087;&#1086;&#1083;&#1077;&#1079;&#1085;&#1086;&#1077; &#1085;&#1072; &#1085;&#1105;&#1084;.&lt;/p&gt;&lt;h2&gt;&#1047;&#1072;&#1076;&#1072;&#1095;&#1072;&lt;/h2&gt;&lt;p&gt;&#1054;&#1095;&#1077;&#1085;&#1100; &#1084;&#1085;&#1086;&#1075;&#1080;&#1077;, &#1076;&#1072;&#1078;&#1077; &#1085;&#1077;&#1079;&#1072;&#1074;&#1080;&#1089;&#1080;&#1084;&#1086; &#1086;&#1090; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1099;, &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1083;&#1080;&#1089;&#1100; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1086;&#1081; &#1090;&#1077;&#1088;&#1084;&#1080;&#1085;&#1072;&#1083;&#1072; &lt;b&gt;ping&lt;/b&gt;. &#1054;&#1085;&#1072; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1103;&#1077;&#1090; &#1073;&#1099;&#1089;&#1090;&#1088;&#1086; &#1080; &#1085;&#1072;&#1075;&#1083;&#1103;&#1076;&#1085;&#1086; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1080;&#1090;&#1100;, &#1077;&#1089;&#1090;&#1100; &#1083;&#1080; &#1089;&#1074;&#1103;&#1079;&#1100; &#1089; &#1090;&#1077;&#1084; &#1080;&#1083;&#1080; &#1080;&#1085;&#1099;&#1084; &#1091;&#1079;&#1083;&#1086;&#1084;. &#1055;&#1077;&#1088;&#1077;&#1076;&#1086; &#1084;&#1085;&#1086;&#1081; &#1074;&#1089;&#1090;&#1072;&#1083;&#1072; &#1079;&#1072;&#1076;&#1072;&#1095;&#1072;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1103;&#1083; &#1085;&#1072;&#1083;&#1080;&#1095;&#1080;&#1077; &#1089;&#1074;&#1103;&#1079;&#1080; &#1089; &#1091;&#1079;&#1083;&#1086;&#1084; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;, &#1072; &#1085;&#1077; &#1095;&#1077;&#1083;&#1086;&#1074;&#1077;&#1082; &#1089; &#1075;&#1083;&#1072;&#1079;&#1072;&#1084;&#1080;. &#1053;&#1091;&#1078;&#1085;&#1086; &#1073;&#1099;&#1083;&#1086; &#1073;&#1099;&#1089;&#1090;&#1088;&#1086; &#1080; &#1076;&#1105;&#1096;&#1077;&#1074;&#1086; &#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1090;&#1100; &#1086;&#1076;&#1085;&#1086;&#1079;&#1085;&#1072;&#1095;&#1085;&#1099;&#1081; &#1086;&#1090;&#1074;&#1077;&#1090; &#1074; &#1074;&#1080;&#1076;&#1077; &#1082;&#1086;&#1076;&#1072; &#1079;&#1072;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1080;&#1103;. &#1063;&#1090;&#1086; &#1078;&#1077;, &#1086;&#1090;&#1082;&#1088;&#1099;&#1074;&#1072;&#1077;&#1084;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;man ping&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img alt="Simply Yes No" height="337" src="http://lonelyelk.ru/images/uploads/0000/0045/simplyyesno.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1061;&#1086;&#1076; &#1088;&#1077;&#1096;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&#1051;&#1080;&#1085;&#1091;&#1082;&#1089;&#1086;&#1074;&#1099;&#1081; &#1087;&#1080;&#1085;&#1075; &#1087;&#1088;&#1086;&#1076;&#1086;&#1083;&#1078;&#1072;&#1077;&#1090;&#1089;&#1103; &#1073;&#1077;&#1089;&#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086;, &#1087;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1085;&#1091;&#1078;&#1085;&#1086; &#1086;&#1075;&#1088;&#1072;&#1085;&#1080;&#1095;&#1080;&#1090;&#1100; &#1095;&#1080;&#1089;&#1083;&#1086; &#1087;&#1072;&#1082;&#1077;&#1090;&#1086;&#1074;. &#1054;&#1087;&#1094;&#1080;&#1103; &lt;i&gt;-&#1089;&lt;/i&gt;.&lt;/li&gt;&lt;li&gt;&#1052;&#1086;&#1078;&#1085;&#1086; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1087;&#1072;&#1082;&#1077;&#1090; &#1084;&#1077;&#1085;&#1100;&#1096;&#1077; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1086;&#1087;&#1094;&#1080;&#1080; &lt;i&gt;-s&lt;/i&gt;.&lt;/li&gt;&lt;li&gt;&#1052;&#1086;&#1078;&#1085;&#1086; &#1091;&#1084;&#1077;&#1085;&#1100;&#1096;&#1080;&#1090;&#1100; &#1080;&#1085;&#1090;&#1077;&#1088;&#1074;&#1072;&#1083; &#1084;&#1077;&#1078;&#1076;&#1091; &#1087;&#1086;&#1089;&#1099;&#1083;&#1072;&#1077;&#1084;&#1099;&#1084;&#1080; &#1087;&#1072;&#1082;&#1077;&#1090;&#1072;&#1084;&#1080; (&#1085;&#1086; &#1085;&#1077; &#1084;&#1077;&#1085;&#1100;&#1096;&#1077; 0.2 &#1089;&#1077;&#1082;&#1091;&#1085;&#1076;, &#1077;&#1089;&#1083;&#1080; &#1087;&#1080;&#1085;&#1075;&#1091;&#1077;&#1090; &#1085;&#1077; &#1089;&#1091;&#1087;&#1077;&#1088;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1100;) &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1086;&#1087;&#1094;&#1080;&#1080; &lt;i&gt;-i&lt;/i&gt;.&lt;/li&gt;&lt;li&gt;&#1048;&#1083;&#1080; &#1078;&#1077; &#1080;&#1085;&#1090;&#1077;&#1088;&#1074;&#1072;&#1083; &#1084;&#1086;&#1078;&#1085;&#1086; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1072;&#1076;&#1072;&#1087;&#1090;&#1080;&#1074;&#1085;&#1099;&#1084;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1086;&#1085; &#1089;&#1072;&#1084; &#1091;&#1089;&#1082;&#1086;&#1088;&#1103;&#1083;&#1089;&#1103;, &#1077;&#1089;&#1083;&#1080; &#1086;&#1090;&#1074;&#1077;&#1090; &#1087;&#1088;&#1080;&#1096;&#1105;&#1083; &#1073;&#1099;&#1089;&#1090;&#1088;&#1086; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &lt;i&gt;-A&lt;/i&gt;.&lt;/li&gt;&lt;li&gt;&#1084;&#1086;&#1078;&#1085;&#1086; &#1085;&#1077; &#1074;&#1099;&#1074;&#1086;&#1076;&#1080;&#1090;&#1100; &#1085;&#1077;&#1085;&#1091;&#1078;&#1085;&#1091;&#1102; &#1085;&#1072;&#1096;&#1077;&#1084;&#1091; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1091; &#1080;&#1085;&#1092;&#1086;&#1088;&#1084;&#1072;&#1094;&#1080;&#1102; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &lt;i&gt;-q&lt;/i&gt; &#1080; &#1087;&#1077;&#1088;&#1077;&#1085;&#1072;&#1087;&#1088;&#1072;&#1074;&#1080;&#1090;&#1100; &#1089;&#1090;&#1072;&#1085;&#1076;&#1072;&#1088;&#1090;&#1085;&#1099;&#1081; &#1074;&#1099;&#1074;&#1086;&#1076; &#1086;&#1096;&#1080;&#1073;&#1086;&#1082; &#1074; &#1085;&#1080;&#1082;&#1091;&#1076;&#1072;.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/ol&gt;&lt;p&gt;&#1063;&#1090;&#1086; &#1084;&#1099; &#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1083;&#1080;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$ ping -A -s16 -c3 -q ya.ru 2&amp;gt;/dev/null
PING ya.ru (93.158.134.3) 16(44) bytes of data.

--- ya.ru ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 400ms
rtt min/avg/max/mdev = 1.923/2.075/2.339/0.187 ms, ipg/ewma 200.281/1.973 ms&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1055;&#1086;&#1082;&#1072; &#1074;&#1089;&#1105; &#1077;&#1097;&#1105; &#1084;&#1085;&#1086;&#1075;&#1086;&#1074;&#1072;&#1090;&#1086; &#1095;&#1080;&#1090;&#1072;&#1090;&#1100;. &#1061;&#1086;&#1088;&#1086;&#1096;&#1086; &#1073;&#1099; &#1074;&#1099;&#1090;&#1072;&#1097;&#1080;&#1090;&#1100; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1095;&#1080;&#1089;&#1083;&#1086; &#1087;&#1086;&#1083;&#1091;&#1095;&#1077;&#1085;&#1085;&#1099;&#1093; &#1087;&#1072;&#1082;&#1077;&#1090;&#1086;&#1074;. &#1040; &#1086;&#1085;&#1086; &#1091; &#1085;&#1072;&#1089; &#1082;&#1072;&#1082; &#1088;&#1072;&#1079; &#1087;&#1086;&#1089;&#1083;&#1077; &#1087;&#1077;&#1088;&#1074;&#1086;&#1081; &#1079;&#1072;&#1087;&#1103;&#1090;&#1086;&#1081; &#1074; &#1089;&#1090;&#1088;&#1086;&#1095;&#1082;&#1077; &#1088;&#1103;&#1076;&#1086;&#1084; &#1089;&#1086; &#1089;&#1083;&#1086;&#1074;&#1086;&#1084; &#171;received&#187;.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$ ping -A -s16 -c3 -q ya.ru 2&amp;gt;/dev/null | grep received
3 packets transmitted, 3 received, 0% packet loss, time 401ms
$ ping -A -s16 -c3 -q ya.ru 2&amp;gt;/dev/null | grep received | awk -F&amp;#39;, &amp;#39; &amp;#39;{print $2}&amp;#39;
3 received
$ ping -A -s16 -c3 -q ya.ru 2&amp;gt;/dev/null | grep received | awk -F&amp;#39;, &amp;#39; &amp;#39;{print $2}&amp;#39; | awk &amp;#39;{print $1}&amp;#39;
3&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1055;&#1086;&#1095;&#1090;&#1080; &#1074;&#1089;&#1105; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1077;&#1090; &#1073;&#1099;&#1089;&#1090;&#1088;&#1086;, &#1082;&#1088;&#1086;&#1084;&#1077; &#1074;&#1099;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1085;&#1099;&#1093; &#1084;&#1072;&#1096;&#1080;&#1085; &#1080; &#1085;&#1077;&#1089;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1102;&#1097;&#1080;&#1093; &#1072;&#1076;&#1088;&#1077;&#1089;&#1086;&#1074; (&#1085;&#1077; &#1080;&#1084;&#1105;&#1085;). &#1042; &#1086;&#1090;&#1083;&#1080;&#1095;&#1080;&#1077; &#1086;&#1090; &#1086;&#1096;&#1080;&#1073;&#1082;&#1080; DNS &#1087;&#1080;&#1085;&#1075; &#1090;&#1088;&#1077;&#1073;&#1091;&#1077;&#1090; &#1091;&#1073;&#1077;&#1076;&#1080;&#1090;&#1100;&#1089;&#1103;, &#1095;&#1090;&#1086; &#1074;&#1089;&#1105; &#1076;&#1077;&#1081;&#1089;&#1090;&#1074;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086; &#1085;&#1077;&#1076;&#1086;&#1089;&#1090;&#1091;&#1087;&#1085;&#1086;. &#1053;&#1086; &#1084;&#1085;&#1077; &#1085;&#1091;&#1078;&#1085;&#1086; &#1073;&#1099;&#1089;&#1090;&#1088;&#1086; &#1080; &#1086;&#1076;&#1085;&#1086;&#1079;&#1085;&#1072;&#1095;&#1085;&#1086;. &#1055;&#1086;&#1074;&#1077;&#1079;&#1083;&#1086;, &#1095;&#1090;&#1086; &#1087;&#1083;&#1086;&#1093;&#1086;&#1077; &#1089;&#1086;&#1077;&#1076;&#1080;&#1085;&#1077;&#1085;&#1080;&#1077; &#1076;&#1083;&#1103; &#1084;&#1086;&#1077;&#1081; &#1079;&#1072;&#1076;&#1072;&#1095;&#1080; &#1088;&#1072;&#1074;&#1085;&#1086;&#1089;&#1080;&#1083;&#1100;&#1085;&#1086; &#1086;&#1090;&#1089;&#1091;&#1090;&#1089;&#1090;&#1074;&#1080;&#1102; &#1089;&#1086;&#1077;&#1076;&#1080;&#1085;&#1077;&#1085;&#1080;&#1103;. &#1053;&#1072; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100; &#1087;&#1088;&#1080;&#1093;&#1086;&#1076;&#1080;&#1090; &lt;b&gt;timeout&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$ timeout 1 ping -A -s16 -c3 -q ya.ru 2&amp;gt;/dev/null&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1085;&#1091;&#1078;&#1085;&#1086; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1074;&#1072;&#1090;&#1100; &#1092;&#1077;&#1081;&#1083; &#1076;&#1072;&#1083;&#1100;&#1096;&#1077; &#1080; &#1089;&#1074;&#1077;&#1088;&#1103;&#1090;&#1100;, &#1089;&#1086;&#1073;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086;, &#1095;&#1080;&#1089;&#1083;&#1086; &#1087;&#1080;&#1085;&#1075;&#1086;&#1074;. &#1055;&#1086;&#1083;&#1091;&#1095;&#1072;&#1077;&#1084; &#1085;&#1072;&#1096; &#1082;&#1088;&#1072;&#1089;&#1080;&#1074;&#1077;&#1085;&#1100;&#1082;&#1080;&#1081; &#1073;&#1099;&#1089;&#1090;&#1088;&#1099;&#1081; &lt;b&gt;fastping.sh&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash

cnt=3
to=1
rcvd=$(set -o pipefail; timeout $to ping -A -s16 -c$cnt -q $1 2&amp;gt; /dev/null | grep received | awk -F&amp;#39;, &amp;#39; &amp;#39;{print $2}&amp;#39; | awk &amp;#39;{print $1}&amp;#39;)
if [[ $? != 0 || $cnt != $rcvd ]]; then
	exit 1
fi&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;&#1044;&#1086;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;man ping&lt;/li&gt;&lt;li&gt;&#1055;&#1086;&#1083;&#1085;&#1072;&#1103; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103; &lt;a href="https://gist.github.com/lonelyelk/64768e88c2fd02992aade0838f4e235f"&gt;fastping.sh&lt;/a&gt;, &#1074; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1081; &#1084;&#1086;&#1078;&#1085;&#1086; &#1079;&#1072;&#1076;&#1072;&#1090;&#1100; &#1095;&#1080;&#1089;&#1083;&#1086; &#1087;&#1072;&#1082;&#1077;&#1090;&#1086;&#1074; &#1080; &#1090;&#1072;&#1081;&#1084;&#1072;&#1091;&#1090;, &#1085;&#1086; &#1086;&#1085;&#1080; &#1080;&#1084;&#1077;&#1102;&#1090; &#1076;&#1077;&#1092;&#1086;&#1083;&#1090;&#1085;&#1099;&#1077; &#1079;&#1085;&#1072;&#1095;&#1077;&#1085;&#1080;&#1103;.&lt;/li&gt;&lt;li&gt;&#1055;&#1080;&#1085;&#1075; &#1085;&#1072; &#1089;&#1090;&#1077;&#1088;&#1086;&#1080;&#1076;&#1072;&#1093; &#8212; &lt;a href="http://fping.sourceforge.net/"&gt;fping&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/49</id>
    <published>2016-03-16T23:25:13+00:00</published>
    <updated>2016-03-16T23:25:13+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/49"/>
    <title>&#1050;&#1072;&#1082; &#1103; &#1074;&#1089;&#1090;&#1088;&#1072;&#1080;&#1074;&#1072;&#1083; reCAPTCHA v2 &#1074; &#1089;&#1074;&#1086;&#1081; &#1072;&#1085;&#1090;&#1080;&#1082;&#1074;&#1072;&#1088;&#1085;&#1099;&#1081; &#1073;&#1083;&#1086;&#1078;&#1077;&#1082;</title>
    <content type="html">&lt;h2&gt;&#1055;&#1088;&#1077;&#1076;&#1087;&#1086;&#1089;&#1099;&#1083;&#1082;&#1080;&lt;/h2&gt;&lt;p&gt;&#1052;&#1099; &#1078;&#1080;&#1074;&#1105;&#1084; &#1074; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1086;&#1077; &#1074;&#1088;&#1077;&#1084;&#1103;. &#1050;&#1086;&#1075;&#1076;&#1072; &#1103; &#1091;&#1074;&#1083;&#1077;&#1082;&#1072;&#1083;&#1089;&#1103; &#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1086; &#1089;&#1077;&#1088;&#1100;&#1105;&#1079;&#1085;&#1086; &#1088;&#1091;&#1073;&#1080; &#1086;&#1085; &#1088;&#1101;&#1081;&#1083;&#1079;, &#1083;&#1077;&#1090; &#1096;&#1077;&#1089;&#1090;&#1100;-&#1089;&#1077;&#1084;&#1100; &#1085;&#1072;&#1079;&#1072;&#1076;, &#1073;&#1099;&#1083;&#1072; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103; &#1088;&#1091;&#1073;&#1080; 1.8.7 &#1080; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103; &#1088;&#1077;&#1083;&#1100;&#1089;&#1086;&#1074; 2.3. &#1042;&#1089;&#1077; &#1085;&#1077;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1087;&#1077;&#1088;&#1077;&#1093;&#1086;&#1076;&#1080;&#1083;&#1080; &#1085;&#1072; &#1088;&#1091;&#1073;&#1080; 1.9.1 &#1080; &#1088;&#1101;&#1081;&#1083;&#1079; 3.0. &#1057;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103;, &#1087;&#1103;&#1090;&#1100; &#1083;&#1077;&#1090; &#1089;&#1087;&#1091;&#1089;&#1090;&#1103;, &#1089;&#1090;&#1072;&#1073;&#1080;&#1083;&#1100;&#1085;&#1072;&#1103; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103; &#1088;&#1091;&#1073;&#1080;&amp;nbsp;&#8212; 2.2.3, &#1072; &#1087;&#1088;&#1086; &#1088;&#1077;&#1083;&#1100;&#1089;&#1099; &#1091;&#1078;&#1077; &#1072;&#1075;&#1080;&#1090;&#1080;&#1088;&#1091;&#1102;&#1090; &#1087;&#1077;&#1088;&#1077;&#1093;&#1086;&#1076;&#1080;&#1090;&#1100; &#1085;&#1072; 5.0, &#1093;&#1086;&#1090;&#1100; &#1080; &#1073;&#1077;&#1090;&#1072;. &#1050;&#1086;&#1075;&#1076;&#1072; &#1078;&#1077; &#1103; &#1085;&#1072;&#1095;&#1072;&#1083; &#1089;&#1074;&#1086;&#1081; &#1087;&#1077;&#1088;&#1074;&#1099;&#1081; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090; &#1085;&#1072; &#1085;&#1086;&#1076;&#1077; &#8212; &#1090;&#1088;&#1080; &#1075;&#1086;&#1076;&#1072; &#1085;&#1072;&#1079;&#1072;&#1076;, &#8212; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103; node.js &#1073;&#1099;&#1083;&#1072; &#1095;&#1090;&#1086;-&#1090;&#1086; &#1090;&#1080;&#1087;&#1072; 0.22. &#1040; &#1089;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103; &#1091;&#1078;&#1077; 5.8!&lt;/p&gt;&lt;p&gt;&#1040; &#1085;&#1077;&#1076;&#1072;&#1074;&#1085;&#1086; &#1080;&#1084;&#1077;&#1083; &#1088;&#1072;&#1079;&#1075;&#1086;&#1074;&#1086;&#1088; &#1089; &#1095;&#1080;&#1090;&#1072;&#1090;&#1077;&#1083;&#1077;&#1084; &#1085;&#1072; &#1090;&#1077;&#1084;&#1091; &#1090;&#1086;&#1075;&#1086;, &#1095;&#1090;&#1086; &#1089;&#1090;&#1088;&#1077;&#1084;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086; &#1074;&#1086;&#1079;&#1088;&#1086;&#1089;&#1096;&#1072;&#1103; &#1087;&#1086;&#1087;&#1091;&#1083;&#1103;&#1088;&#1085;&#1086;&#1089;&#1090;&#1100; &#1076;&#1078;&#1072;&#1074;&#1072;&#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1072; &#1089;&#1086;&#1079;&#1076;&#1072;&#1105;&#1090; &#1089;&#1080;&#1090;&#1091;&#1072;&#1094;&#1080;&#1102;, &#1087;&#1088;&#1080; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1081;, &#1091;&#1093;&#1086;&#1076;&#1103; &#1074; &#1086;&#1090;&#1087;&#1091;&#1089;&#1082;, &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1089;&#1090;&#1099; &#1088;&#1080;&#1089;&#1082;&#1091;&#1102;&#1090; &#1074;&#1077;&#1088;&#1085;&#1091;&#1090;&#1100;&#1089;&#1103; &#1089; &#1091;&#1089;&#1090;&#1072;&#1088;&#1077;&#1074;&#1096;&#1080;&#1084;&#1080; &#1085;&#1072;&#1074;&#1099;&#1082;&#1072;&#1084;&#1080;, &#1087;&#1086;&#1090;&#1086;&#1084;&#1091; &#1095;&#1090;&#1086; &#1079;&#1072; &#1076;&#1074;&#1077; &#1085;&#1077;&#1076;&#1077;&#1083;&#1080; &#1087;&#1086;&#1103;&#1074;&#1080;&#1083;&#1080;&#1089;&#1100; &#1090;&#1088;&#1080; &#1085;&#1086;&#1074;&#1099;&#1093; &#1087;&#1088;&#1077;&#1082;&#1088;&#1072;&#1089;&#1085;&#1099;&#1081; &#1092;&#1088;&#1077;&#1081;&#1084;&#1074;&#1086;&#1088;&#1082;&#1072;, &#1072; &#1076;&#1074;&#1072; &#1085;&#1077; &#1084;&#1077;&#1085;&#1077;&#1077; &#1087;&#1088;&#1077;&#1082;&#1088;&#1072;&#1089;&#1085;&#1099;&#1093;&amp;nbsp;&#8212; &#1091;&#1084;&#1077;&#1088;&#1083;&#1080;.&lt;/p&gt;&lt;h2&gt;&#1040;&#1085;&#1090;&#1080;&#1082;&#1074;&#1072;&#1088;&#1080;&#1072;&#1090;&lt;/h2&gt;&lt;p&gt;&#1044;&#1086; &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1077;&#1075;&#1086; &#1087;&#1077;&#1088;&#1077;&#1088;&#1099;&#1074;&#1072;, &#1088;&#1072;&#1089;&#1089;&#1082;&#1072;&#1079; &#1086; &#1085;&#1072;&#1095;&#1080;&#1085;&#1082;&#1077; &#1084;&#1086;&#1077;&#1075;&#1086; &#1073;&#1083;&#1086;&#1075;&#1072; &#1084;&#1086;&#1075; &#1073;&#1099; &#1083;&#1077;&#1075;&#1082;&#1086; &#1079;&#1072;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1100; &#1087;&#1072;&#1088;&#1086;&#1095;&#1082;&#1091; &#1074; &#1084;&#1077;&#1088;&#1091; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1099;&#1093; &#1089;&#1090;&#1072;&#1090;&#1077;&#1081;, &#1072; &#1089;&#1077;&#1081;&#1095;&#1072;&#1089; &#1101;&#1090;&#1086; &#1087;&#1088;&#1077;&#1076;&#1089;&#1090;&#1072;&#1074;&#1083;&#1103;&#1077;&#1090; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1076;&#1083;&#1103; &#1072;&#1088;&#1093;&#1077;&#1086;&#1083;&#1086;&#1075;&#1086;&#1074;. &#1063;&#1090;&#1086; &#1082;&#1072;&#1089;&#1072;&#1077;&#1090;&#1089;&#1103; &#1076;&#1074;&#1080;&#1078;&#1082;&#1086;&#1074; &#1076;&#1083;&#1103; &#1073;&#1083;&#1086;&#1075;&#1072; &#1074;&#1086;&#1086;&#1073;&#1097;&#1077;, &#1090;&#1086; &#1087;&#1088;&#1086; &#1082;&#1086;&#1075;&#1076;&#1072;-&#1090;&#1086; &#1087;&#1086;&#1087;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1081; &#1046;&#1046; &#1074;&#1089;&#1077; &#1091;&#1078;&#1077; &#1079;&#1072;&#1073;&#1099;&#1083;&#1080;. &#1057;&#1090;&#1088;&#1077;&#1084;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086; &#1085;&#1072;&#1073;&#1080;&#1088;&#1072;&#1077;&#1090; &#1084;&#1086;&#1076;&#1091; &#1074;&#1077;&#1089;&#1090;&#1080; &#1082;&#1072;&#1085;&#1072;&#1083; &#1074; &#1058;&#1077;&#1083;&#1077;&#1075;&#1088;&#1072;&#1084;&#1077;. &#1040; &#1090;&#1086;&#1074;&#1072;&#1088;&#1080;&#1097; &#1084;&#1086;&#1081;&amp;nbsp;&#8212; &#1048;&#1083;&#1100;&#1103;&amp;nbsp;&#8212; &#1074; &#1082;&#1086;&#1075;&#1076;&#1072;-&#1090;&#1086; &#1076;&#1072;&#1074;&#1085;&#1086; &#1074; &#1082;&#1072;&#1095;&#1077;&#1089;&#1090;&#1074;&#1077; &#1087;&#1083;&#1072;&#1090;&#1092;&#1086;&#1088;&#1084;&#1099; &#1076;&#1083;&#1103; &#1073;&#1083;&#1086;&#1075;&#1072; &#1089;&#1076;&#1077;&#1083;&#1072;&#1083; &#1089;&#1072;&#1084;&#1099;&#1081; &#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1100;&#1085;&#1099;&#1081;, &#1082;&#1072;&#1082; &#1084;&#1085;&#1077; &#1089;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103; &#1082;&#1072;&#1078;&#1077;&#1090;&#1089;&#1103;, &#1074;&#1099;&#1073;&#1086;&#1088;&amp;nbsp;&#8212; &#1075;&#1077;&#1085;&#1077;&#1088;&#1072;&#1090;&#1086;&#1088; &#1089;&#1090;&#1072;&#1090;&#1080;&#1095;&#1077;&#1089;&#1082;&#1086;&#1075;&#1086; &#1089;&#1072;&#1081;&#1090;&#1072;.&lt;/p&gt;&lt;p&gt;&#1063;&#1090;&#1086; &#1077;&#1097;&#1105;? &#1058;&#1077;&#1093;&#1085;&#1086;&#1083;&#1086;&#1075;&#1080;&#1103; &#1086;&#1091;&#1087;&#1077;&#1085;&#1072;&#1081;&#1076;&#1080;, &#1085;&#1072; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1081; &#1091; &#1084;&#1077;&#1085;&#1103; &#1073;&#1099;&#1083;&#1080; &#1087;&#1088;&#1080;&#1082;&#1088;&#1091;&#1095;&#1077;&#1085;&#1099; &#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;&#1080;, &#1091;&#1084;&#1077;&#1088;&#1083;&#1072;. &#1056;&#1077;&#1082;&#1072;&#1087;&#1095;&#1072;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1091;&#1102; &#1103; &#1087;&#1088;&#1080;&#1082;&#1088;&#1091;&#1095;&#1080;&#1074;&#1072;&#1083; &#1074; &#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;&#1080; &#1048;&#1088;&#1077;, &#1073;&#1099;&#1083;&#1072; &#1082;&#1091;&#1087;&#1083;&#1077;&#1085;&#1072; &#1043;&#1091;&#1075;&#1083;&#1086;&#1084; &#1080; &#1077;&#1097;&#1105; &#1087;&#1086;&#1082;&#1072; &#1078;&#1080;&#1074;&#1072;, &#1085;&#1086; &#1091;&#1078;&#1077; &#1074;&#1099;&#1087;&#1091;&#1089;&#1090;&#1080;&#1083;&#1080; &lt;a href="https://www.google.com/recaptcha/intro/index.html"&gt;&#1074;&#1090;&#1086;&#1088;&#1091;&#1102; &#1074;&#1077;&#1088;&#1089;&#1080;&#1102;&lt;/a&gt;, &#1080; &#1103; &#1073;&#1086;&#1102;&#1089;&#1100;, &#1082;&#1072;&#1082; &#1073;&#1099; &#1086;&#1085;&#1080; &#1090;&#1072;&#1082;&#1080; &#1085;&#1077; &#1079;&#1072;&#1082;&#1088;&#1099;&#1083;&#1080; &#1087;&#1077;&#1088;&#1074;&#1091;&#1102;, &#1082;&#1072;&#1082; &lt;a href="http://www.slate.com/articles/technology/map_of_the_week/2013/03/google_reader_joins_graveyard_of_dead_google_products.html"&gt;&#1043;&#1091;&#1075;&#1083; &#1101;&#1090;&#1086; &#1091;&#1084;&#1077;&#1077;&#1090; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100;&lt;/a&gt;. &#1053;&#1086; &#1076;&#1072;&#1078;&#1077; &#1090;&#1086;&#1075;&#1076;&#1072; &#1076;&#1078;&#1077;&#1084;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1103; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1083;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1074;&#1089;&#1090;&#1088;&#1086;&#1080;&#1090;&#1100; &#1082;&#1072;&#1087;&#1095;&#1091;, &#1074;&#1086;&#1083;&#1096;&#1077;&#1073;&#1085;&#1099;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084; &#1080;&#1089;&#1095;&#1077;&#1079; &#1080;&#1079; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;, &#1080; &#1084;&#1085;&#1077; &#1087;&#1088;&#1080;&#1096;&#1083;&#1086;&#1089;&#1100; &#1090;&#1072;&#1089;&#1082;&#1072;&#1090;&#1100; &#1077;&#1075;&#1086; &#1089; &#1089;&#1086;&#1073;&#1086;&#1081; &#1074; &#1087;&#1072;&#1087;&#1086;&#1095;&#1082;&#1077; &lt;i&gt;vendor&lt;/i&gt;. &#1055;&#1088;&#1086; &#1074;&#1105;&#1088;&#1089;&#1090;&#1082;&#1091; &#1103; &#1076;&#1072;&#1078;&#1077; &#1085;&#1077; &#1075;&#1086;&#1074;&#1086;&#1088;&#1102;.&lt;/p&gt;&lt;p&gt;&#1042; &#1086;&#1073;&#1097;&#1077;&#1084;, &#1076;&#1083;&#1103; &#1090;&#1086;&#1075;&#1086;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1074;&#1079;&#1103;&#1090;&#1100; &#1080; &#1087;&#1077;&#1088;&#1077;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090; &#1089; &#1085;&#1091;&#1083;&#1103;, &#1084;&#1085;&#1086;&#1075;&#1086; &#1091;&#1084;&#1072; &#1085;&#1077; &#1085;&#1091;&#1078;&#1085;&#1086;. &#1053;&#1086; &#1089;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103; &#1084;&#1085;&#1077; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1086; &#1087;&#1086;&#1082;&#1086;&#1087;&#1072;&#1090;&#1100;&#1089;&#1103; &#1074; &#1089;&#1090;&#1072;&#1088;&#1100;&#1077; &#1080; &#1087;&#1086;&#1089;&#1084;&#1086;&#1090;&#1088;&#1077;&#1090;&#1100;, &#1095;&#1090;&#1086; &#1077;&#1097;&#1105; &#1080;&#1079; &#1085;&#1077;&#1075;&#1086; &#1084;&#1086;&#1078;&#1085;&#1086; &#1074;&#1099;&#1078;&#1072;&#1090;&#1100;. &#1055;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091;, &#1077;&#1089;&#1083;&#1080; &#1074;&#1099; &#1083;&#1102;&#1073;&#1080;&#1090;&#1077; &#1089;&#1074;&#1086;&#1080; &#1089;&#1090;&#1072;&#1088;&#1099;&#1077; &#1087;&#1086;&#1076;&#1077;&#1083;&#1082;&#1080; &#1090;&#1072;&#1082;, &#1082;&#1072;&#1082; &#1083;&#1102;&#1073;&#1083;&#1102; &#1080;&#1093; &#1103;, &#1090;&#1086; &#1086;&#1095;&#1077;&#1085;&#1100; &#1074;&#1072;&#1078;&#1085;&#1086; &#1086;&#1074;&#1083;&#1072;&#1076;&#1077;&#1090;&#1100; &#1085;&#1072;&#1074;&#1099;&#1082;&#1086;&#1084; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085;&#1080;&#1103; &#1086;&#1073;&#1077;&#1079;&#1100;&#1103;&#1085;&#1100;&#1080;&#1093; &#1079;&#1072;&#1087;&#1083;&#1072;&#1090;&#1086;&#1082; (monkey patch).&lt;/p&gt;&lt;p&gt;&lt;img alt="DIY" height="337" src="http://lonelyelk.ru/images/uploads/0000/0043/diy.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;reCAPTCHA v2&lt;/h2&gt;&lt;p&gt;&#1050;&#1086;&#1075;&#1076;&#1072; &#1103; &#1088;&#1077;&#1096;&#1080;&#1083; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1085;&#1086;&#1074;&#1091;&#1102; &#1082;&#1072;&#1087;&#1095;&#1091;, &#1103; &#1076;&#1072;&#1078;&#1077; &#1085;&#1077; &#1089;&#1090;&#1072;&#1083; &#1080;&#1089;&#1082;&#1072;&#1090;&#1100; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;. &#1057; &#1074;&#1077;&#1088;&#1086;&#1103;&#1090;&#1085;&#1086;&#1089;&#1090;&#1100;&#1102; 80% &#1086;&#1085;&#1080; &#1085;&#1077; &#1079;&#1072;&#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1102;&#1090; &#1085;&#1072; &#1084;&#1086;&#1077;&#1081; &#1089;&#1090;&#1072;&#1088;&#1080;&#1085;&#1085;&#1086;&#1081; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1077;, &#1080; &#1089; &#1074;&#1077;&#1088;&#1086;&#1103;&#1090;&#1085;&#1086;&#1089;&#1090;&#1100;&#1102; 30% &#1087;&#1077;&#1088;&#1077;&#1089;&#1090;&#1072;&#1085;&#1091;&#1090; &#1087;&#1086;&#1076;&#1076;&#1077;&#1088;&#1078;&#1080;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103; &#1086;&#1095;&#1077;&#1085;&#1100; &#1089;&#1082;&#1086;&#1088;&#1086;. &#1055;&#1088;&#1086;&#1089;&#1090;&#1086; &#1095;&#1080;&#1090;&#1072;&#1077;&#1084; &lt;a href="https://developers.google.com/recaptcha/intro"&gt;&#1076;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1102;&lt;/a&gt;, &#1074;&#1089;&#1090;&#1088;&#1072;&#1080;&#1074;&#1072;&#1077;&#1084; &#1082;&#1072;&#1087;&#1095;&#1091; &#1074; &#1092;&#1086;&#1088;&#1084;&#1091; &#1086;&#1090;&#1087;&#1088;&#1072;&#1074;&#1082;&#1080; &#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;&#1103;, &#1072; &#1085;&#1072; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1077; &#1087;&#1088;&#1103;&#1084;&#1086; &#1074; &#1084;&#1077;&#1090;&#1086;&#1076;&#1077; &#1089;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1103; &#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;&#1103; &#1087;&#1080;&#1096;&#1077;&#1084;, &#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;url = URI.parse(&amp;#39;https://www.google.com/recaptcha/api/siteverify&amp;#39;)
req = Net::HTTP::Post.new(url.path)
req.set_form_data &amp;#39;secret&amp;#39; =&amp;gt; &amp;#39;SECRET_KEY&amp;#39;,
                  &amp;#39;response&amp;#39; =&amp;gt; params[&amp;#39;g-recaptcha-response&amp;#39;],
                  &amp;#39;remoteip&amp;#39; =&amp;gt; request.remote_ip
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
res = JSON.parse(https.start { |p| p.request req }.body)
if res[&amp;#39;success&amp;#39;] ...&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1048; &#1076;&#1072;&#1083;&#1077;&#1077; &#1089; &#1086;&#1090;&#1074;&#1077;&#1090;&#1086;&#1084; &#1084;&#1086;&#1078;&#1085;&#1086; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1074;&#1089;&#1105;, &#1095;&#1090;&#1086; &#1091;&#1075;&#1086;&#1076;&#1085;&#1086;. &#1042; &#1090;&#1086;&#1085;&#1082;&#1086;&#1089;&#1090;&#1080; &#1091;&#1078;&#1077; &#1085;&#1077; &#1074;&#1076;&#1072;&#1102;&#1089;&#1100;, &#1087;&#1086;&#1090;&#1086;&#1084;&#1091; &#1095;&#1090;&#1086;, &#1082;&#1072;&#1082; &#1084;&#1086;&#1078;&#1077;&#1090; &#1091;&#1074;&#1080;&#1076;&#1077;&#1090;&#1100; &#1076;&#1086;&#1088;&#1086;&#1075;&#1086;&#1081; &#1095;&#1080;&#1090;&#1072;&#1090;&#1077;&#1083;&#1100;, &#1076;&#1072;&#1078;&#1077; &#1093;&#1101;&#1096;&#1080; &#1091; &#1084;&#1077;&#1085;&#1103; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085;&#1099; &#1089; &#1088;&#1072;&#1082;&#1077;&#1090;&#1072;&#1084;&#1080;, &#1072; &#1085;&#1077; &#1087;&#1086;-&#1089;&#1086;&#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1086;&#1084;&#1091; &#1089; &#1076;&#1074;&#1086;&#1077;&#1090;&#1086;&#1095;&#1080;&#1103;&#1084;&#1080;.&lt;/p&gt;&lt;p&gt;&#1044;&#1072;, &#1101;&#1090;&#1086; &#1087;&#1088;&#1086;&#1090;&#1080;&#1074;&#1086;&#1088;&#1077;&#1095;&#1080;&#1090; &#1087;&#1072;&#1090;&#1090;&#1077;&#1088;&#1085;&#1091; MVC, &#1076;&#1072;, &#1101;&#1090;&#1086; &#1087;&#1088;&#1086;&#1090;&#1080;&#1074;&#1086;&#1088;&#1077;&#1095;&#1080;&#1090; &#1054;&#1054;&#1055;. &#1053;&#1086; &#1087;&#1086;&#1089;&#1084;&#1086;&#1090;&#1088;&#1080;&#1090;&#1077; &#1085;&#1072; &#1089;&#1072;&#1084;&#1091; &#1082;&#1072;&#1087;&#1095;&#1091;: &#1086;&#1085;&#1072; &#1085;&#1077; &#1091;&#1095;&#1080;&#1090;&#1099;&#1074;&#1072;&#1077;&#1090; &#1087;&#1086;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103; &#1092;&#1086;&#1088;&#1084;&#1099; &#1085;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1077;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1086;&#1090;&#1082;&#1088;&#1099;&#1074;&#1072;&#1077;&#1090; &#1089;&#1074;&#1086;&#1105; &#1086;&#1082;&#1085;&#1086;. &#1040; &#1090;&#1072;&#1082;&#1078;&#1077; &lt;a href="https://groups.google.com/forum/#!topic/recaptcha/Ui0VgCzMziM"&gt;&#1085;&#1077; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1077;&#1090; &#1079;&#1072;&#1076;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1072;&#1103; &#1092;&#1080;&#1095;&#1072; &lt;i&gt;data-tabindex&lt;/i&gt;&lt;/a&gt;. &#1055;&#1086;&#1083;&#1085;&#1086; &#1093;&#1086;&#1088;&#1086;&#1096;&#1080;&#1093; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082; &#1080; &#1087;&#1086;&#1076;&#1077;&#1083;&#1086;&#1082; &#1091;&#1074;&#1103;&#1076;&#1072;&#1102;&#1090; &#1090;&#1072;&#1082; &#1080; &#1085;&#1077; &#1080;&#1089;&#1087;&#1088;&#1072;&#1074;&#1080;&#1074; &#1089;&#1074;&#1086;&#1080;&#1093; &#1086;&#1096;&#1080;&#1073;&#1086;&#1082;. &#1058;&#1072;&#1082;&#1086;&#1074;&#1072; &#1088;&#1077;&#1072;&#1083;&#1100;&#1085;&#1086;&#1089;&#1090;&#1100; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1089;&#1090;&#1072; &#1089;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103;. &#1050;&#1088;&#1072;&#1089;&#1080;&#1074;&#1072;&#1103; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1072; &#1076;&#1083;&#1103; &#1074;&#1089;&#1090;&#1088;&#1072;&#1080;&#1074;&#1072;&#1085;&#1080;&#1103; &#1074; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090; &#1085;&#1072; &#1088;&#1077;&#1083;&#1100;&#1089;&#1072;&#1093; &#1085;&#1077; &#1089;&#1076;&#1077;&#1083;&#1072;&#1077;&#1090; &#1101;&#1090;&#1091; &#1082;&#1072;&#1087;&#1095;&#1091; &#1083;&#1091;&#1095;&#1096;&#1077;, &#1085;&#1086; &#1080;&#1089;&#1087;&#1088;&#1072;&#1074;&#1083;&#1103;&#1090;&#1100; &#1086;&#1087;&#1080;&#1089;&#1072;&#1085;&#1085;&#1099;&#1077; &#1074;&#1099;&#1096;&#1077; &#1086;&#1096;&#1080;&#1073;&#1082;&#1080; &#1084;&#1086;&#1078;&#1085;&#1086; &#1090;&#1086;&#1078;&#1077; &#1086;&#1073;&#1077;&#1079;&#1100;&#1103;&#1085;&#1100;&#1080;&#1084;&#1080; &#1079;&#1072;&#1087;&#1083;&#1072;&#1090;&#1082;&#1072;&#1084;&#1080;.&lt;/p&gt;&lt;p&gt;&#1042; &#1086;&#1073;&#1097;&#1077;&#1084;, &#1077;&#1089;&#1090;&#1100;, &#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086;, &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1105;&#1085;&#1085;&#1099;&#1081; &#1082;&#1072;&#1081;&#1092; &#1074; &#1090;&#1086;&#1084;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1074;&#1089;&#1105; &#1084;&#1072;&#1082;&#1089;&#1080;&#1084;&#1072;&#1083;&#1100;&#1085;&#1086; &#1087;&#1086; &#1085;&#1072;&#1091;&#1082;&#1077; &#1080; &#1073;&#1083;&#1080;&#1079;&#1082;&#1086; &#1082; &#1080;&#1076;&#1077;&#1072;&#1083;&#1091;, &#1085;&#1086; &#1085;&#1077; &#1084;&#1077;&#1085;&#1077;&#1077; &#1087;&#1088;&#1080;&#1103;&#1090;&#1085;&#1086; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103; &#1089;&#1084;&#1077;&#1082;&#1072;&#1083;&#1082;&#1086;&#1081; &#1080; &#1089;&#1086;&#1073;&#1088;&#1072;&#1090;&#1100; &#1095;&#1090;&#1086;-&#1085;&#1080;&#1073;&#1091;&#1076;&#1100; &#1080;&#1079; &#1075;&#1088;&#1103;&#1079;&#1080; &#1080; &#1087;&#1072;&#1083;&#1086;&#1082;. &#1041;&#1077;&#1079;&#1091;&#1089;&#1083;&#1086;&#1074;&#1085;&#1086;, &#1077;&#1089;&#1090;&#1100; &#1077;&#1097;&#1105; &#1080; &#1086;&#1095;&#1077;&#1085;&#1100; &#1087;&#1088;&#1080;&#1103;&#1090;&#1085;&#1086;&#1077; &#1095;&#1091;&#1074;&#1089;&#1090;&#1074;&#1086; &#1086;&#1089;&#1074;&#1086;&#1073;&#1086;&#1078;&#1076;&#1077;&#1085;&#1080;&#1103; &#1074; &#1090;&#1086;&#1084;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1088;&#1072;&#1079;&#1088;&#1077;&#1096;&#1080;&#1090;&#1100; &#1089;&#1077;&#1073;&#1077; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1095;&#1090;&#1086;-&#1090;&#1086; &#1085;&#1077; &#1080;&#1076;&#1077;&#1072;&#1083;&#1100;&#1085;&#1086;.&lt;/p&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/48</id>
    <published>2016-03-10T23:41:16+00:00</published>
    <updated>2016-03-10T23:43:33+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/48"/>
    <title>&#1069;&#1079;&#1086;&#1090;&#1077;&#1088;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080;&#1081; &#1076;&#1078;&#1072;&#1074;&#1072;&#1089;&#1082;&#1088;&#1080;&#1087;&#1090;</title>
    <content type="html">&lt;p&gt;&#1050;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086;, &#1101;&#1090;&#1086; &#1091;&#1078;&#1077; &#1085;&#1077; &#1085;&#1086;&#1074;&#1072;&#1103; &#1080;&#1089;&#1090;&#1086;&#1088;&#1080;&#1103;, &#1085;&#1086; &#1084;&#1077;&#1085;&#1103; &#1085;&#1072;&#1089;&#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1074;&#1087;&#1077;&#1095;&#1072;&#1090;&#1083;&#1080;&#1083;&#1086;, &#1095;&#1090;&#1086; &#1103; &#1088;&#1077;&#1096;&#1080;&#1083; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1074;&#1085;&#1077;&#1086;&#1095;&#1077;&#1088;&#1077;&#1076;&#1085;&#1091;&#1102; &#1089;&#1090;&#1072;&#1090;&#1100;&#1102;. &#1058;&#1077;&#1084; &#1073;&#1086;&#1083;&#1077;&#1077;, &#1095;&#1090;&#1086; &#1080; &lt;a href="http://blog.checkpoint.com/2016/02/02/ebay-platform-exposed-to-severe-vulnerability/"&gt;&#1088;&#1077;&#1073;&#1103;&#1090;&#1072; &#1080;&#1079; &#1080;&#1073;&#1101;&#1103; &#1090;&#1086;&#1078;&#1077; &#1087;&#1088;&#1086;&#1087;&#1091;&#1089;&#1090;&#1080;&#1083;&#1080; &#1080;&#1079;&#1074;&#1077;&#1089;&#1090;&#1080;&#1077;&lt;/a&gt; &#1086; &#1090;&#1086;&#1084;, &#1095;&#1090;&#1086; &#1084;&#1086;&#1078;&#1085;&#1086; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1074;&#1072;&#1083;&#1080;&#1076;&#1085;&#1099;&#1081; &#1076;&#1078;&#1072;&#1074;&#1072;&#1089;&#1082;&#1088;&#1080;&#1087;&#1090;, &#1085;&#1077; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1103; &#1073;&#1091;&#1082;&#1074; &#1080; &#1094;&#1080;&#1092;&#1088;. &#1055;&#1086;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1091; &#1089;&#1090;&#1072;&#1090;&#1100;&#1103; &#1074;&#1085;&#1077;&#1091;&#1088;&#1086;&#1095;&#1085;&#1072;&#1103;, &#1090;&#1086; &#1080; &#1080;&#1083;&#1083;&#1102;&#1089;&#1090;&#1088;&#1072;&#1094;&#1080;&#1080; &#1089;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103; &#1085;&#1077; &#1073;&#1091;&#1076;&#1077;&#1090;. &#1050; &#1090;&#1086;&#1084;&#1091; &#1078;&#1077; &#1092;&#1080;&#1075; &#1087;&#1088;&#1086;&#1080;&#1083;&#1083;&#1102;&#1089;&#1090;&#1088;&#1080;&#1088;&#1091;&#1077;&#1096;&#1100; &#1101;&#1090;&#1080; &#1101;&#1079;&#1086;&#1090;&#1077;&#1088;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080;&#1077; &#1103;&#1079;&#1099;&#1082;&#1080; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103;.&lt;/p&gt;&lt;h2&gt;&#1063;&#1090;&#1086; &#1089;&#1083;&#1091;&#1095;&#1080;&#1083;&#1086;&#1089;&#1100;?&lt;/h2&gt;&lt;p&gt;&#1053;&#1072;&#1095;&#1072;&#1083;&#1086;&#1089;&#1100; &#1074;&#1089;&#1105;, &#1103; &#1090;&#1072;&#1082; &#1087;&#1086;&#1085;&#1080;&#1084;&#1072;&#1102;, &#1077;&#1097;&#1105; &#1074; 2009 &#1075;&#1086;&#1076;&#1091; &#1089; &lt;a href="https://web.archive.org/web/20110813230556/http://sla.ckers.org/forum/read.php?2,15812,page=14"&gt;&#1086;&#1073;&#1089;&#1091;&#1078;&#1076;&#1077;&#1085;&#1080;&#1081;&lt;/a&gt; &#1085;&#1072; &#1092;&#1086;&#1088;&#1091;&#1084;&#1072;&#1093; sla.ckers.org &#1087;&#1086;&#1090;&#1077;&#1085;&#1094;&#1080;&#1072;&#1083;&#1100;&#1085;&#1099;&#1093; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1077;&#1081;  &#1084;&#1077;&#1078;&#1089;&#1072;&#1081;&#1090;&#1086;&#1074;&#1086;&#1075;&#1086; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1080;&#1085;&#1075;&#1072;. &#1053;&#1086; &#1090;&#1072;&#1084; &#1077;&#1097;&#1105; &#1073;&#1099;&#1083; &#1076;&#1088;&#1091;&#1075;&#1086;&#1081; &#1089;&#1080;&#1085;&#1090;&#1072;&#1082;&#1089;&#1080;&#1089;. &#1042;&#1087;&#1077;&#1095;&#1072;&#1090;&#1083;&#1080;&#1074;&#1096;&#1080;&#1081; &#1078;&#1077; &#1084;&#1077;&#1085;&#1103; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085;&#1080;&#1103; &#1076;&#1078;&#1072;&#1074;&#1072;&#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1072; &lt;a href="http://patriciopalladino.com/blog/2012/08/09/non-alphanumeric-javascript.html"&gt;&#1086;&#1073;&#1085;&#1072;&#1088;&#1091;&#1078;&#1080;&#1074;&#1072;&#1077;&#1090;&#1089;&#1103;&lt;/a&gt; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1074; 2012 &#1075;&#1086;&#1076;&#1091;. &#1041;&#1099;&#1083;&#1080; &#1080; &#1088;&#1072;&#1085;&#1100;&#1096;&#1077; &#1076;&#1088;&#1091;&#1075;&#1080;&#1077; &#1079;&#1072;&#1093;&#1086;&#1076;&#1099;. &#1053;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &lt;a href="http://utf-8.jp/public/aaencode.html"&gt;&#1076;&#1078;&#1072;&#1074;&#1072;&#1089;&#1082;&#1088;&#1080;&#1087;&#1090; &#1080;&#1079; &#1103;&#1087;&#1086;&#1085;&#1089;&#1082;&#1080;&#1093; &#1089;&#1084;&#1072;&#1081;&#1083;&#1080;&#1082;&#1086;&#1074;&lt;/a&gt;. &#1071; &#1078;&#1077; &#1091;&#1079;&#1085;&#1072;&#1083; &#1086;&#1073; &#1101;&#1090;&#1086;&#1084; &#1086;&#1090; &#1090;&#1086;&#1074;&#1072;&#1088;&#1080;&#1097;&#1072;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1087;&#1088;&#1080;&#1089;&#1083;&#1072;&#1083; &#1084;&#1085;&#1077; &lt;a href="http://thedailywtf.com/articles/bidding-on-security"&gt;&#1089;&#1089;&#1099;&#1083;&#1082;&#1091; &#1085;&#1072; the daily wtf&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&#1055;&#1086;&#1079;&#1074;&#1086;&#1083;&#1102; &#1089;&#1077;&#1073;&#1077; &#1085;&#1077;&#1084;&#1085;&#1086;&#1075;&#1086; &#1087;&#1077;&#1088;&#1077;&#1089;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100;, &#1072; &#1076;&#1086;&#1088;&#1086;&#1075;&#1086;&#1084;&#1091; &#1095;&#1080;&#1090;&#1072;&#1090;&#1077;&#1083;&#1102; &#1087;&#1088;&#1077;&#1076;&#1083;&#1072;&#1075;&#1072;&#1102; &#1087;&#1088;&#1103;&#1084;&#1086; &#1086;&#1090;&#1082;&#1088;&#1099;&#1090;&#1100; &#1082;&#1086;&#1085;&#1089;&#1086;&#1083;&#1100; &#1080; &#1087;&#1086;&#1087;&#1088;&#1086;&#1073;&#1086;&#1074;&#1072;&#1090;&#1100;. &#1042;&#1089;&#1103; &#1101;&#1090;&#1072; &#1096;&#1090;&#1091;&#1082;&#1072; &#1086;&#1089;&#1085;&#1086;&#1074;&#1072;&#1085;&#1072; &#1085;&#1072; &#1082;&#1086;&#1085;&#1074;&#1077;&#1088;&#1090;&#1072;&#1094;&#1080;&#1080; &#1090;&#1080;&#1087;&#1086;&#1074; &#1074; &#1076;&#1078;&#1072;&#1074;&#1072;&#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1077; &#1087;&#1088;&#1080; &#1089;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1080; &#1080;&#1083;&#1080; &#1087;&#1088;&#1080;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1080; &#1082; &#1073;&#1091;&#1083;&#1077;&#1074;&#1099;&#1084; &#1079;&#1085;&#1072;&#1095;&#1077;&#1085;&#1080;&#1103;&#1084;. &#1055;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1085;&#1072; &#1076;&#1078;&#1072;&#1074;&#1072;&#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1077; &#1084;&#1086;&#1078;&#1085;&#1086; &#1074;&#1089;&#1077;&#1075;&#1086; &#1083;&#1080;&#1096;&#1100; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &lt;b&gt;&#1074;&#1086;&#1089;&#1100;&#1084;&#1080;&lt;/b&gt; &#1089;&#1080;&#1084;&#1074;&#1086;&#1083;&#1086;&#1074;: &lt;i&gt;[, ], (, ), {, }, ! &#1080; +&lt;/i&gt;. &#1042;&#1086;&#1090;, &#1095;&#1090;&#1086; &#1074;&#1099;&#1076;&#1072;&#1105;&#1090; &#1084;&#1085;&#1077; &#1082;&#1086;&#1085;&#1089;&#1086;&#1083;&#1100; &#1074; &#1086;&#1090;&#1074;&#1077;&#1090; &#1085;&#1072; &#1074;&#1074;&#1086;&#1076;:&lt;/p&gt;&lt;pre&gt;&lt;code class='javascript'&gt;&amp;gt; +[]
0
&amp;gt; !+[]
true
&amp;gt; !!+[]
false
&amp;gt; +![]
0
&amp;gt; +!![]
1
&amp;gt; +!![]+!![]
2
&amp;gt; +!![]+!![]+!![]
3&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1048; &#1074;&#1086;&#1090; &#1091; &#1085;&#1072;&#1089; &#1091;&#1078;&#1077; &#1077;&#1089;&#1090;&#1100; &#1095;&#1080;&#1089;&#1083;&#1072; &#1080; &#1073;&#1091;&#1083;&#1077;&#1074;&#1099; &#1082;&#1086;&#1085;&#1089;&#1090;&#1072;&#1085;&#1090;&#1099;. &#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1085;&#1072;&#1084; &#1085;&#1091;&#1078;&#1085;&#1099; &#1073;&#1091;&#1082;&#1074;&#1099;:&lt;/p&gt;&lt;pre&gt;&lt;code class='javascript'&gt;&amp;gt; !![]
true
&amp;gt; !![]+[]
&amp;quot;true&amp;quot;
&amp;gt; ![]
false
&amp;gt; ![]+[]
&amp;quot;false&amp;quot;
&amp;gt; +!![]+!![]
2
&amp;gt; +!![]+!![]+[]
&amp;quot;2&amp;quot;
&amp;gt; ({})
Object {}
&amp;gt; []+{}
&amp;quot;[object Object]&amp;quot;
&amp;gt; ({}[+[]])
undefined
&amp;gt; ({}[+[]])+[]
&amp;quot;undefined&amp;quot;
&amp;gt; +{}
NaN
&amp;gt; +{}+[]
&amp;quot;NaN&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1044;&#1072;&#1083;&#1077;&#1077; &#1074;&#1089;&#1077; &#1089;&#1090;&#1088;&#1086;&#1082;&#1086;&#1074;&#1099;&#1077; &#1079;&#1085;&#1072;&#1095;&#1077;&#1085;&#1080;&#1103; &#1084;&#1086;&#1078;&#1085;&#1086; &#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1090;&#1100;, &#1082;&#1086;&#1084;&#1073;&#1080;&#1085;&#1080;&#1088;&#1091;&#1103; &#1074;&#1099;&#1096;&#1077;&#1080;&#1079;&#1083;&#1086;&#1078;&#1077;&#1085;&#1085;&#1086;&#1077;, &#1085;&#1086; &#1103; &#1073;&#1091;&#1076;&#1091; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1089;&#1090;&#1088;&#1086;&#1082;&#1080; &#1074; &#1074;&#1080;&#1076;&#1077; &#1089;&#1090;&#1088;&#1086;&#1082;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1086;&#1073;&#1083;&#1077;&#1075;&#1095;&#1080;&#1090;&#1100; (&#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1099;&#1084;) &#1087;&#1088;&#1086;&#1095;&#1090;&#1077;&#1085;&#1080;&#1077; &#1082;&#1086;&#1076;&#1072;. &#1048;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1103; &#1091;&#1078;&#1077; &#1080;&#1084;&#1077;&#1102;&#1097;&#1080;&#1077;&#1089;&#1103; &#1073;&#1091;&#1082;&#1074;&#1099; &#1080; &#1094;&#1080;&#1092;&#1088;&#1099;, &#1084;&#1086;&#1078;&#1085;&#1086; &#1077;&#1097;&#1105; &#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1090;&#1100;:&lt;/p&gt;&lt;pre&gt;&lt;code class='javascript'&gt;&amp;gt; +&amp;quot;1e1000&amp;quot;
Infinity
&amp;gt; +&amp;quot;1e1000&amp;quot;+[]
&amp;quot;Infinity&amp;quot;
&amp;gt; +&amp;quot;1e100&amp;quot;
1e+100
&amp;gt; +&amp;quot;1e100&amp;quot;+[]
&amp;quot;1e+100&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1042;&#1089;&#1077; &#1073;&#1091;&#1082;&#1074;&#1099; &lt;i&gt;(a, b, c, d, e, f, i, j, l, n, o, r, s, t, u, I, O, [, ], &amp;lt;&#1087;&#1088;&#1086;&#1073;&#1077;&#1083;&amp;gt;, +)&lt;/i&gt; &#1084;&#1086;&#1078;&#1085;&#1086; &#1076;&#1086;&#1089;&#1090;&#1072;&#1074;&#1072;&#1090;&#1100; &#1080;&#1079; &#1089;&#1090;&#1088;&#1086;&#1082;, &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1082;&#1074;&#1072;&#1076;&#1088;&#1072;&#1090;&#1085;&#1099;&#1093; &#1089;&#1082;&#1086;&#1073;&#1086;&#1082; &#1080; &#1095;&#1080;&#1089;&#1077;&#1083;. &#1053;&#1086; &#1084;&#1099; &#1091;&#1078;&#1077; &#1076;&#1072;&#1074;&#1085;&#1086; &#1084;&#1086;&#1078;&#1077;&#1084; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; eval &#8212; &#1080;&#1089;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1100; &#1087;&#1088;&#1086;&#1080;&#1079;&#1074;&#1086;&#1083;&#1100;&#1085;&#1099;&#1081; &#1082;&#1086;&#1076; &#1080;&#1079; &#1089;&#1090;&#1088;&#1086;&#1082;&#1080;:&lt;/p&gt;&lt;pre&gt;&lt;code class='javascript'&gt;&amp;gt; (![]+[])[3]
&amp;quot;s&amp;quot;
&amp;gt; (![]+[])[3]+([]+{})[1]
&amp;quot;so&amp;quot;
...
&amp;gt; [][&amp;#39;sort&amp;#39;][&amp;#39;constructor&amp;#39;]
function Function() { [native code] }
&amp;gt; [][&amp;#39;sort&amp;#39;][&amp;#39;constructor&amp;#39;](&amp;#39;return alert&amp;#39;)()
function alert() { [native code] }
&amp;gt; [][&amp;#39;sort&amp;#39;][&amp;#39;constructor&amp;#39;](&amp;#39;return alert&amp;#39;)()(1)
/* &#1076;&#1086;&#1083;&#1078;&#1077;&#1085; &#1074;&#1099;&#1089;&#1082;&#1086;&#1095;&#1080;&#1090;&#1100; &#1072;&#1083;&#1077;&#1088;&#1090; */&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1044;&#1077;&#1083;&#1086; &#1086;&#1089;&#1090;&#1072;&#1105;&#1090;&#1089;&#1103; &#1079;&#1072; &#1084;&#1072;&#1083;&#1099;&#1084; &#8212; &#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1090;&#1100; &#1074;&#1089;&#1077; &#1086;&#1089;&#1090;&#1072;&#1083;&#1100;&#1085;&#1099;&#1077; &#1089;&#1080;&#1084;&#1074;&#1086;&#1083;&#1099;, &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1093; &#1084;&#1086;&#1078;&#1085;&#1086; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1091;. &#1063;&#1090;&#1086;&#1073;&#1099; &#1091;&#1078;&#1077; &#1089;&#1086;&#1074;&#1089;&#1077;&#1084; &#1085;&#1077; &#1095;&#1091;&#1074;&#1089;&#1090;&#1074;&#1086;&#1074;&#1072;&#1090;&#1100; &#1089;&#1090;&#1077;&#1089;&#1085;&#1077;&#1085;&#1080;&#1103;. &#1048; &#1090;&#1091;&#1090; &#1085;&#1072;&#1084; &#1085;&#1072; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100; &#1076;&#1086;&#1083;&#1078;&#1085;&#1072; &#1087;&#1088;&#1080;&#1081;&#1090;&#1080; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1103; &lt;b&gt;unescape&lt;/b&gt;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1072;&#1103; &#1080;&#1079; &#1079;&#1085;&#1072;&#1082;&#1072; &#171;%&#187; &#1080; &#1072;&#1089;&#1082;&#1080;-&#1082;&#1086;&#1076;&#1072; &#1076;&#1077;&#1083;&#1072;&#1077;&#1090; &#1089;&#1080;&#1084;&#1074;&#1086;&#1083;. &#1053;&#1086; &#1091; &#1085;&#1072;&#1089; &#1087;&#1086;&#1082;&#1072; &#1085;&#1077;&#1090; &#1076;&#1083;&#1103; &#1101;&#1090;&#1086;&#1075;&#1086; &#1089;&#1080;&#1084;&#1074;&#1086;&#1083;&#1086;&#1074; &#171;%&#187; &#1080; &#171;p&#187;. &#1043;&#1076;&#1077; &#1078;&#1077; &#1080;&#1093; &#1074;&#1079;&#1103;&#1090;&#1100;?&lt;/p&gt;&lt;pre&gt;&lt;code class='javascript'&gt;&amp;gt; [][&amp;#39;sort&amp;#39;][&amp;#39;constructor&amp;#39;](&amp;#39;return location&amp;#39;)()
Location {hash: &amp;quot;&amp;quot;, search: &amp;quot;&amp;quot;, pathname: &amp;quot;/blog/posts/48&amp;quot;, port: &amp;quot;&amp;quot;, hostname: &amp;quot;lonelyelk.ru&amp;quot;&#8230;}
&amp;gt; [][&amp;#39;sort&amp;#39;][&amp;#39;constructor&amp;#39;](&amp;#39;return location&amp;#39;)()+[]
&amp;quot;http://lonelyelk.ru/blog/posts/48&amp;quot;
&amp;gt; ([][&amp;#39;sort&amp;#39;][&amp;#39;constructor&amp;#39;](&amp;#39;return location&amp;#39;)()+[])[3]
&amp;quot;p&amp;quot;
&amp;gt; ({}+[])[0]
&amp;quot;[&amp;quot;
&amp;gt; [][&amp;#39;sort&amp;#39;][&amp;#39;constructor&amp;#39;](&amp;#39;return escape&amp;#39;)()(&amp;#39;[&amp;#39;)
&amp;quot;%5D&amp;quot;
&amp;gt; [][&amp;#39;sort&amp;#39;][&amp;#39;constructor&amp;#39;](&amp;#39;return escape&amp;#39;)()(&amp;#39;[&amp;#39;)[0]
&amp;quot;%&amp;quot;
&amp;gt; [][&amp;#39;sort&amp;#39;][&amp;#39;constructor&amp;#39;](&amp;#39;return unescape&amp;#39;)()(&amp;#39;%&amp;#39;+&amp;#39;7a&amp;#39;)
&amp;quot;z&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1053;&#1077; &#1079;&#1085;&#1072;&#1102;, &#1082;&#1072;&#1082; &#1090;&#1099;, &#1076;&#1086;&#1088;&#1086;&#1075;&#1086;&#1081; &#1095;&#1080;&#1090;&#1072;&#1090;&#1077;&#1083;&#1100;, &#1072; &#1103; &#1085;&#1072;&#1093;&#1086;&#1078;&#1091; &#1090;&#1072;&#1082;&#1086;&#1077; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1076;&#1078;&#1072;&#1074;&#1072;&#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1072; &#1089;&#1086;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1085;&#1086; &#1074;&#1086;&#1083;&#1096;&#1077;&#1073;&#1085;&#1099;&#1084;. &#1053;&#1072;&#1089;&#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1074;&#1086;&#1083;&#1096;&#1077;&#1073;&#1085;&#1099;&#1084;, &#1095;&#1090;&#1086; &#1076;&#1072;&#1078;&#1077; &#1085;&#1077;&#1089;&#1084;&#1086;&#1090;&#1088;&#1103; &#1085;&#1072; &#1091;&#1078;&#1077; &#1085;&#1077; &#1087;&#1077;&#1088;&#1074;&#1091;&#1102; &#1089;&#1074;&#1077;&#1078;&#1077;&#1089;&#1090;&#1100; &#1090;&#1077;&#1084;&#1099;, &#1084;&#1085;&#1077; &#1086;&#1095;&#1077;&#1085;&#1100; &#1079;&#1072;&#1093;&#1086;&#1090;&#1077;&#1083;&#1086;&#1089;&#1100; &#1086;&#1073; &#1101;&#1090;&#1086;&#1084; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100;, &#1076;&#1072; &#1077;&#1097;&#1105; &#1080; &#1074; &#1085;&#1077;&#1091;&#1088;&#1086;&#1095;&#1085;&#1086;&#1077; &#1074;&#1088;&#1077;&#1084;&#1103;. &#1042;&#1089;&#1077; &#1084;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103; &#1076;&#1086;&#1089;&#1090;&#1091;&#1087;&#1085;&#1099; &#1087;&#1086; &#1089;&#1089;&#1099;&#1083;&#1082;&#1072;&#1084; &#1074;&#1099;&#1096;&#1077;.&lt;/p&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/47</id>
    <published>2016-03-02T23:16:19+00:00</published>
    <updated>2016-03-02T23:19:18+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/47"/>
    <title>&#1051;&#1086;&#1089;&#1100;</title>
    <content type="html">&lt;p&gt;&#1057;&#1077;&#1081;&#1095;&#1072;&#1089; &#1084;&#1077;&#1085;&#1103; &#1091;&#1078;&#1077; &#1087;&#1086;&#1095;&#1090;&#1080; &#1085;&#1077; &#1089;&#1087;&#1088;&#1072;&#1096;&#1080;&#1074;&#1072;&#1102;&#1090;: &#171;&#1055;&#1086;&#1095;&#1077;&#1084;&#1091; &#1083;&#1086;&#1089;&#1100;?&#187; &#1054;&#1090;&#1095;&#1072;&#1089;&#1090;&#1080; &#1087;&#1086;&#1090;&#1086;&#1084;&#1091;, &#1095;&#1090;&#1086; &#1103; &#1085;&#1077; &#1086;&#1095;&#1077;&#1085;&#1100; &#1087;&#1088;&#1086;&#1076;&#1074;&#1080;&#1075;&#1072;&#1102; &#1101;&#1090;&#1086;&#1075;&#1086; &#1087;&#1077;&#1088;&#1089;&#1086;&#1085;&#1072;&#1078;&#1072;, &#1072; &#1086;&#1090;&#1095;&#1072;&#1089;&#1090;&#1080; &#1087;&#1086;&#1090;&#1086;&#1084;&#1091;, &#1095;&#1090;&#1086; &#1083;&#1102;&#1076;&#1080; &#1076;&#1091;&#1084;&#1072;&#1102;&#1090;, &#1095;&#1090;&#1086; &#1084;&#1085;&#1077; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1085;&#1088;&#1072;&#1074;&#1103;&#1090;&#1089;&#1103; &#1083;&#1086;&#1089;&#1080;, &#1080;&#1083;&#1080; &#1103; &#1080;&#1093; &#1082;&#1086;&#1083;&#1083;&#1077;&#1082;&#1094;&#1080;&#1086;&#1085;&#1080;&#1088;&#1091;&#1102;. &#1042;&#1090;&#1086;&#1088;&#1086;&#1077; &#1087;&#1088;&#1080;&#1074;&#1086;&#1076;&#1080;&#1090;, &#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1082; &#1090;&#1086;&#1084;&#1091;, &#1095;&#1090;&#1086; &#1084;&#1085;&#1077; &#1076;&#1072;&#1088;&#1103;&#1090; &#1088;&#1072;&#1079;&#1085;&#1099;&#1093; &#1080;&#1075;&#1088;&#1091;&#1096;&#1077;&#1095;&#1085;&#1099;&#1093; &#1083;&#1086;&#1089;&#1077;&#1081;. &#1069;&#1090;&#1086; &#1079;&#1072;&#1073;&#1072;&#1074;&#1085;&#1099;&#1081; &#1088;&#1077;&#1079;&#1091;&#1083;&#1100;&#1090;&#1072;&#1090;, &#1087;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1103; &#1089;&#1095;&#1080;&#1090;&#1072;&#1102;, &#1095;&#1090;&#1086; &#1088;&#1077;&#1087;&#1091;&#1090;&#1072;&#1094;&#1080;&#1102; &#1084;&#1077;&#1089;&#1090;&#1085;&#1086;&#1075;&#1086; &#1089;&#1091;&#1084;&#1072;&#1089;&#1096;&#1077;&#1076;&#1096;&#1077;&#1075;&#1086; &#1085;&#1091;&#1078;&#1085;&#1086; &#1087;&#1086;&#1076;&#1076;&#1077;&#1088;&#1078;&#1080;&#1074;&#1072;&#1090;&#1100;. &#1050;&#1072;&#1082; &#1089;&#1083;&#1077;&#1076;&#1089;&#1090;&#1074;&#1080;&#1077; &#1103; &#1085;&#1072;&#1095;&#1072;&#1083; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1083;&#1086;&#1089;&#1077;&#1081; &#1074; &#1087;&#1086;&#1074;&#1089;&#1077;&#1076;&#1085;&#1077;&#1074;&#1085;&#1086;&#1081; &#1088;&#1072;&#1073;&#1086;&#1090;&#1077;.&lt;/p&gt;&lt;h2&gt;&#1058;&#1077;&#1088;&#1084;&#1080;&#1085;&#1072;&#1083;&lt;/h2&gt;&lt;p&gt;&#1055;&#1077;&#1088;&#1074;&#1099;&#1084; &#1076;&#1077;&#1083;&#1086;&#1084; &#1085;&#1091;&#1078;&#1085;&#1086;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1083;&#1086;&#1089;&#1100; &#1087;&#1088;&#1080;&#1074;&#1077;&#1090;&#1089;&#1090;&#1074;&#1086;&#1074;&#1072;&#1083; &#1084;&#1077;&#1085;&#1103; &#1087;&#1088;&#1080; &#1082;&#1072;&#1078;&#1076;&#1086;&#1084; &#1086;&#1090;&#1082;&#1088;&#1099;&#1090;&#1080;&#1080; &#1090;&#1077;&#1088;&#1084;&#1080;&#1085;&#1072;&#1083;&#1072; &#1080;&#1083;&#1080; &#1085;&#1086;&#1074;&#1086;&#1081; &#1077;&#1075;&#1086; &#1074;&#1082;&#1083;&#1072;&#1076;&#1082;&#1080;. &#1055;&#1088;&#1080;&#1084;&#1077;&#1088;&#1085;&#1086; &#1090;&#1072;&#1082;:&lt;/p&gt;&lt;p&gt;&lt;img alt="&#1083;&#1086;&#1089;&#1100; &#1074; &#1090;&#1077;&#1088;&#1084;&#1080;&#1085;&#1072;&#1083;&#1077;" height="337" src="http://lonelyelk.ru/images/uploads/0000/0037/gifanimations.jpg" width="600" /&gt;&lt;/p&gt;&lt;p&gt;&#1055;&#1088;&#1080; &#1101;&#1090;&#1086;&#1084; &#1093;&#1086;&#1090;&#1077;&#1083;&#1086;&#1089;&#1100; &#1073;&#1099;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1091; &#1085;&#1077;&#1075;&#1086; &#1073;&#1099;&#1083;&#1086; &#1088;&#1072;&#1079;&#1085;&#1086;&#1077; &#1089;&#1083;&#1091;&#1095;&#1072;&#1081;&#1085;&#1086;&#1077; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1077; &#1083;&#1080;&#1094;&#1072;. &#1044;&#1083;&#1103; &#1101;&#1090;&#1086;&#1075;&#1086; &#1085;&#1091;&#1078;&#1085;&#1086; &#1074; &lt;b&gt;~/.bash_profile&lt;/b&gt; (&#1080;&#1083;&#1080; &#1082;&#1072;&#1082;&#1086;&#1081; &#1091; &#1074;&#1072;&#1089; &#1092;&#1072;&#1081;&#1083; &#1076;&#1083;&#1103; &#1089;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1103; &#1086;&#1082;&#1088;&#1091;&#1078;&#1077;&#1085;&#1080;&#1103;) &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1089;&#1083;&#1077;&#1076;&#1091;&#1102;&#1097;&#1077;&#1077;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;eye=(o O @ . - \* \~ &#176;)
let left=${RANDOM}%${#eye[*]}
let right=${RANDOM}%${#eye[*]}

cat &amp;lt;&amp;lt; EOF

 _  _        _  _  _
| || | ____ | || || |
\    |/    \|      /
 \____ ${eye[$left]}  ${eye[$right]} ______/
      |    |________
      |             }=
      | __  ____  _ |
      ||  ||    || ||
      ||  ||    || ||
      &amp;quot;&amp;quot;  &amp;quot;&amp;quot;    &amp;quot;&amp;quot; &amp;quot;&amp;quot;

EOF&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1041;&#1072;&#1079;&#1086;&#1074;&#1072;&#1103; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072; &#1089; &#1084;&#1072;&#1089;&#1089;&#1080;&#1074;&#1072;&#1084;&#1080;. &#1042;&#1089;&#1090;&#1088;&#1086;&#1077;&#1085;&#1085;&#1072;&#1103; &#1074; &#1073;&#1072;&#1096; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1103; &#1089;&#1083;&#1091;&#1095;&#1072;&#1081;&#1085;&#1086;&#1075;&#1086; &#1095;&#1080;&#1089;&#1083;&#1072;. &#1054;&#1073;&#1103;&#1079;&#1072;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086; &#1087;&#1088;&#1077;&#1076;&#1074;&#1072;&#1088;&#1103;&#1090;&#1100; &#1082;&#1086;&#1089;&#1086;&#1081; &#1095;&#1077;&#1088;&#1090;&#1086;&#1081; &#171;*&#187; &#1080; &#171;~&#187;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1086;&#1085;&#1080; &#1085;&#1077; &#1089;&#1090;&#1072;&#1083;&#1080; &#1089;&#1087;&#1080;&#1089;&#1082;&#1086;&#1084; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074; &#1080; &#1076;&#1086;&#1084;&#1072;&#1096;&#1085;&#1077;&#1081; &#1076;&#1080;&#1088;&#1077;&#1082;&#1090;&#1086;&#1088;&#1080;&#1077;&#1081;. &#1055;&#1086;-&#1084;&#1086;&#1077;&#1084;&#1091; &#8212; &#1082;&#1088;&#1072;&#1089;&#1086;&#1090;&#1072;!&lt;/p&gt;&lt;h2&gt;Spec runner&lt;/h2&gt;&lt;p&gt;&#1048;, &#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086; &#1078;&#1077;, &#1076;&#1083;&#1103; &#1083;&#1102;&#1073;&#1080;&#1090;&#1077;&#1083;&#1077;&#1081; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1080; &#1095;&#1077;&#1088;&#1077;&#1079; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1085;&#1091;&#1078;&#1077;&#1085; &#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1100;&#1085;&#1099;&#1081; &#1088;&#1077;&#1087;&#1086;&#1088;&#1090;&#1077;&#1088;:&lt;/p&gt;&lt;p&gt;&lt;div style="width:100%;background-color:#000"&gt;&lt;img alt="elk-spec" height="90" src="http://lonelyelk.ru/images/uploads/0000/0039/elk-spec.gif" width="200" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&#1047;&#1076;&#1077;&#1089;&#1100; &#1085;&#1091;&#1078;&#1085;&#1086; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103; &#1101;&#1089;&#1082;&#1077;&#1081;&#1087; &#1082;&#1086;&#1076;&#1072;&#1084;&#1080; &#1076;&#1083;&#1103; &#1091;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103; &#1087;&#1086;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1077;&#1084; &#1082;&#1072;&#1088;&#1077;&#1090;&#1082;&#1080;, &#1090;&#1086; &#1077;&#1089;&#1090;&#1100; &#1082;&#1091;&#1088;&#1089;&#1086;&#1088;&#1072;. &#1052;&#1072;&#1083;&#1086; &#1082;&#1090;&#1086; &#1087;&#1086;&#1084;&#1085;&#1080;&#1090;, &#1085;&#1086; &#1082;&#1091;&#1088;&#1089;&#1086;&#1088; &#1084;&#1086;&#1078;&#1085;&#1086; &#1076;&#1074;&#1080;&#1075;&#1072;&#1090;&#1100; &#1074;&#1086; &#1074;&#1089;&#1077; &#1089;&#1090;&#1086;&#1088;&#1086;&#1085;&#1099; &#1085;&#1072; &#1083;&#1102;&#1073;&#1086;&#1077; &#1082;&#1086;&#1083;&#1080;&#1095;&#1077;&#1089;&#1090;&#1074;&#1086; &#1087;&#1086;&#1079;&#1080;&#1094;&#1080;&#1081;. &#1044;&#1072;&#1085;&#1085;&#1099;&#1081; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088; &#1103; &#1089;&#1086;&#1073;&#1088;&#1072;&#1083; &#1076;&#1083;&#1103; &#1088;&#1072;&#1085;&#1085;&#1077;&#1088;&#1072; &#1090;&#1077;&#1089;&#1090;&#1086;&#1074; &#1085;&#1072; &#1078;&#1072;&#1089;&#1084;&#1080;&#1085;&#1077;. &#1044;&#1072;, &#1076;&#1072;, &#1103; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1072;&#1090;&#1099;&#1074;&#1072;&#1102; &#1074; &#1090;&#1086;&#1084; &#1095;&#1080;&#1089;&#1083;&#1077; &#1085;&#1072; &lt;a href="https://nodejs.org/en/"&gt;node.js&lt;/a&gt; &#1080; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1091;&#1102; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &lt;a href="http://jasmine.github.io/"&gt;jasmine&lt;/a&gt;. &#1050;&#1083;&#1102;&#1095;&#1077;&#1074;&#1072;&#1103; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1103; &#1076;&#1083;&#1103; &#1088;&#1080;&#1089;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1083;&#1086;&#1089;&#1103; &#1074;&#1086;&#1090;:&lt;/p&gt;&lt;pre&gt;&lt;code class='javascript'&gt;function printElk() {
  if (specCount &amp;gt; 1) {
    print(&amp;#39;\x1b[5A&amp;#39;);
  }
  if (specCount % 2 === 0) {
    print(Array(specCount + 1).join(&amp;#39; &amp;#39;) + &amp;#39;     ^^&amp;#39; + eyes() + &amp;#39;^^\n&amp;#39;);
    print(Array(specCount + 1).join(&amp;#39; &amp;#39;) + &amp;#39;  _____ U\n&amp;#39;);
    print(specTrail + &amp;#39;~(  _  /\n&amp;#39;);
    print(Array(specCount + 1).join(&amp;#39; &amp;#39;) + &amp;#39;  || ||\n&amp;#39;);
    print(Array(specCount + 1).join(&amp;#39; &amp;#39;) + &amp;#39;  ^^ ^^\n&amp;#39;);
  } else {
    print(Array(specCount + 1).join(&amp;#39; &amp;#39;) + &amp;#39;      ^^&amp;#39; + eyes() + &amp;#39;^^\n&amp;#39;);
    print(Array(specCount + 1).join(&amp;#39; &amp;#39;) + &amp;#39;  _____ U\n&amp;#39;);
    print(specTrail + &amp;#39;`(  _  /\n&amp;#39;);
    print(Array(specCount + 1).join(&amp;#39; &amp;#39;) + &amp;#39;  // \\\\\n&amp;#39;);
    print(Array(specCount + 1).join(&amp;#39; &amp;#39;) + &amp;#39; ^^   ^^\n&amp;#39;);
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1047;&#1076;&#1077;&#1089;&#1100; &lt;i&gt;specTrail&lt;/i&gt; &#1080; &lt;i&gt;eyes&lt;/i&gt; &#1089;&#1083;&#1077;&#1076;&#1103;&#1090; &#1079;&#1072; &#1080;&#1089;&#1090;&#1086;&#1088;&#1080;&#1077;&#1081; &#1074;&#1086;&#1087;&#1088;&#1086;&#1089;&#1072;, &#1072; &#1074;&#1089;&#1103; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1103; &#1074;&#1084;&#1077;&#1089;&#1090;&#1086; &#1090;&#1086;&#1075;&#1086;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1082;&#1072;&#1082; &#1088;&#1072;&#1085;&#1100;&#1096;&#1077;, &#1089;&#1090;&#1072;&#1074;&#1080;&#1090;&#1100; &#1090;&#1086;&#1095;&#1082;&#1091; &#1080;&#1083;&#1080; &lt;b style="color:#e00"&gt;F&lt;/b&gt;, &#1087;&#1086;&#1076;&#1085;&#1080;&#1084;&#1072;&#1077;&#1090;&#1089;&#1103; &#1085;&#1072; &#1087;&#1103;&#1090;&#1100; &#1089;&#1090;&#1088;&#1086;&#1095;&#1077;&#1082; &#1074;&#1074;&#1077;&#1088;&#1093; &#1080; &#1087;&#1077;&#1088;&#1077;&#1087;&#1080;&#1089;&#1099;&#1074;&#1072;&#1077;&#1090; &#1080;&#1093; &#1087;&#1086;&#1083;&#1085;&#1086;&#1089;&#1090;&#1100;&#1102;.&lt;/p&gt;&lt;h2&gt;&#1041;&#1086;&#1085;&#1091;&#1089;&lt;/h2&gt;&lt;p&gt;&#1069;&#1090;&#1086; &#1085;&#1077; &#1087;&#1088;&#1086; &#1083;&#1086;&#1089;&#1103;, &#1085;&#1086; &#1090;&#1077;&#1084; &#1085;&#1077; &#1084;&#1077;&#1085;&#1077;&#1077;. &#1042;&#1086;&#1086;&#1073;&#1097;&#1077;, &#1103; &#1089;&#1095;&#1080;&#1090;&#1072;&#1102;, &#1095;&#1090;&#1086; &#1074;&#1089;&#1077;&#1075;&#1076;&#1072; &#1083;&#1091;&#1095;&#1096;&#1077; &#1087;&#1086;&#1090;&#1088;&#1072;&#1090;&#1080;&#1090;&#1100; &#1085;&#1077;&#1084;&#1085;&#1086;&#1075;&#1086; &#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1080;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1074;&#1089;&#1105; &#1091;&#1076;&#1086;&#1073;&#1085;&#1086; &#1080; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1086;. &#1052;&#1077;&#1083;&#1086;&#1095;&#1080; &#1088;&#1077;&#1096;&#1072;&#1102;&#1090;!&lt;/p&gt;&lt;p&gt;&#1069;&#1090;&#1091; &#1074;&#1077;&#1097;&#1100; &#1087;&#1088;&#1080;&#1076;&#1091;&#1084;&#1072;&#1083; &#1085;&#1077; &#1103;. &#1057;&#1082;&#1086;&#1088;&#1077;&#1077; &#1074;&#1089;&#1077;&#1075;&#1086;, &#1076;&#1086; &#1084;&#1077;&#1085;&#1103; &#1077;&#1105; &#1087;&#1088;&#1080;&#1076;&#1091;&#1084;&#1072;&#1083;&#1080; &#1085;&#1077;&#1086;&#1076;&#1085;&#1086;&#1082;&#1088;&#1072;&#1090;&#1085;&#1086;, &#1080; &#1103; &#1085;&#1077; &#1084;&#1086;&#1075;&#1091; &#1085;&#1072;&#1081;&#1090;&#1080; &#1087;&#1077;&#1088;&#1074;&#1086;&#1080;&#1089;&#1090;&#1086;&#1095;&#1085;&#1080;&#1082;. &#1058;&#1077;&#1084; &#1085;&#1077; &#1084;&#1077;&#1085;&#1077;&#1077;, &#1089;&#1095;&#1080;&#1090;&#1072;&#1102;, &#1095;&#1090;&#1086; &#1101;&#1090;&#1086; &#1086;&#1095;&#1077;&#1085;&#1100; &#1087;&#1086;&#1083;&#1077;&#1079;&#1085;&#1072;&#1103; &#1074;&#1077;&#1097;&#1100;, &#1080; &#1085;&#1091;&#1078;&#1085;&#1086; &#1077;&#1081; &#1087;&#1086;&#1076;&#1077;&#1083;&#1080;&#1090;&#1100;&#1089;&#1103;. &#1056;&#1077;&#1095;&#1100; &#1080;&#1076;&#1105;&#1090; &#1086; &#1090;&#1086;&#1084;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1087;&#1086;&#1082;&#1072;&#1079;&#1099;&#1074;&#1072;&#1090;&#1100; &#1089;&#1090;&#1072;&#1090;&#1091;&#1089; &#1079;&#1072;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1080;&#1103; &#1087;&#1088;&#1077;&#1076;&#1099;&#1076;&#1091;&#1097;&#1077;&#1081; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1099; &#1074; &#1089;&#1090;&#1088;&#1086;&#1082;&#1077; &#1079;&#1072;&#1087;&#1088;&#1086;&#1089;&#1072; &#1073;&#1072;&#1096;&#1072;.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;export PS1=&amp;quot;\[\e]0;\u@\h: \W\a\`if [ \$? = 0 ];then echo \[\e[32m\]^_^\[\e[0m\];else echo \[\e[31m\]o_O\[\e[0m\];fi\`[\u@\h: \w][\$(rvm-prompt v)][\$(nvm_version)]\$(parse_git_branch)\$ &amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1069;&#1090;&#1086; &#1084;&#1086;&#1103; &#1089;&#1090;&#1088;&#1086;&#1082;&#1072; &#1079;&#1072;&#1087;&#1088;&#1086;&#1089;&#1072;. &#1042; &#1077;&#1105; &#1085;&#1072;&#1095;&#1072;&#1083;&#1077; &#1084;&#1099; &#1074;&#1080;&#1076;&#1080;&#1084; &#1080;&#1083;&#1080; &#1079;&#1077;&#1083;&#1105;&#1085;&#1099;&#1081; &#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1099;&#1081; &#1089;&#1084;&#1072;&#1081;&#1083;&#1080;&#1082;, &#1080;&#1083;&#1080; &#1082;&#1088;&#1072;&#1089;&#1085;&#1099;&#1081; &#1091;&#1076;&#1080;&#1074;&#1083;&#1105;&#1085;&#1085;&#1099;&#1081;. &#1041;&#1083;&#1072;&#1075;&#1086;&#1076;&#1072;&#1088;&#1103; &#1074;&#1086;&#1090; &#1101;&#1090;&#1086;&#1081; &#1095;&#1072;&#1089;&#1090;&#1080;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;\`if [ \$? = 0 ];then echo \[\e[32m\]^_^\[\e[0m\];else echo \[\e[31m\]o_O\[\e[0m\];fi\`&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1050;&#1086;&#1075;&#1076;&#1072; &#1089;&#1076;&#1077;&#1083;&#1072;&#1083; &#1089;&#1077;&#1073;&#1077; &#1080; &#1087;&#1088;&#1080;&#1074;&#1099;&#1082;, &#1090;&#1086; &#1090;&#1077;&#1087;&#1077;&#1088;&#1100; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1085;&#1077; &#1087;&#1086;&#1085;&#1080;&#1084;&#1072;&#1102;, &#1082;&#1072;&#1082; &#1076;&#1088;&#1091;&#1075;&#1080;&#1077; &#1073;&#1077;&#1079; &#1101;&#1090;&#1086;&#1075;&#1086; &#1086;&#1073;&#1093;&#1086;&#1076;&#1103;&#1090;&#1089;&#1103;.&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.tldp.org/LDP/abs/html/randomvar.html"&gt;$RANDOM&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="https://gist.github.com/lonelyelk/9bdb5b3361c8c003f80f"&gt;elk_reporter.js&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x361.html"&gt;&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1082;&#1091;&#1088;&#1089;&#1086;&#1088;&#1086;&#1084; &#1074; &#1073;&#1072;&#1096;&#1077;&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/46</id>
    <published>2016-02-17T23:59:01+00:00</published>
    <updated>2016-02-17T23:59:01+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/46"/>
    <title>&#1057;&#1084;&#1077;&#1085;&#1072; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1077;&#1082; /etc/hosts &#1074; &#1086;&#1076;&#1085;&#1086; &#1082;&#1072;&#1089;&#1072;&#1085;&#1080;&#1077;</title>
    <content type="html">&lt;h2&gt;&#1047;&#1072;&#1095;&#1077;&#1084;?&lt;/h2&gt;&lt;p&gt;&#1042; &#1082;&#1072;&#1082;&#1086;&#1081;-&#1090;&#1086; &#1084;&#1086;&#1084;&#1077;&#1085;&#1090; &#1103; &#1089;&#1090;&#1072;&#1083; &#1085;&#1086;&#1089;&#1080;&#1090;&#1100; &#1085;&#1072; &#1088;&#1072;&#1073;&#1086;&#1090;&#1091; &#1085;&#1086;&#1091;&#1090;&#1073;&#1091;&#1082; &#1080; &#1086;&#1090;&#1082;&#1072;&#1079;&#1072;&#1083;&#1089;&#1103; &#1086;&#1090; &#1076;&#1074;&#1091;&#1093; &#1082;&#1086;&#1084;&#1087;&#1100;&#1102;&#1090;&#1077;&#1088;&#1086;&#1074;: &#1076;&#1086;&#1084;&#1072;&#1096;&#1085;&#1077;&#1075;&#1086; &#1080; &#1088;&#1072;&#1073;&#1086;&#1095;&#1077;&#1075;&#1086;. &#1042; &#1088;&#1077;&#1076;&#1082;&#1080;&#1093; &#1089;&#1083;&#1091;&#1095;&#1072;&#1103;&#1093; &#1087;&#1088;&#1080;&#1093;&#1086;&#1076;&#1080;&#1090;&#1089;&#1103; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1085;&#1077;&#1073;&#1086;&#1083;&#1100;&#1096;&#1080;&#1077; &#1076;&#1077;&#1081;&#1089;&#1090;&#1074;&#1080;&#1103; &#1087;&#1086; &#1088;&#1072;&#1073;&#1086;&#1090;&#1077;, &#1085;&#1072;&#1093;&#1086;&#1076;&#1103;&#1089;&#1100; &#1076;&#1086;&#1084;&#1072;. &#1044;&#1083;&#1103; &#1090;&#1086;&#1075;&#1086;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1076;&#1086;&#1073;&#1088;&#1072;&#1090;&#1100;&#1089;&#1103; &#1076;&#1086; &#1085;&#1091;&#1078;&#1085;&#1099;&#1093; &#1084;&#1072;&#1096;&#1080;&#1085; &#1074;&#1085;&#1091;&#1090;&#1088;&#1080; &#1088;&#1072;&#1073;&#1086;&#1095;&#1077;&#1081; &#1089;&#1077;&#1090;&#1080;, &#1103; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1102; ssh-&#1090;&#1086;&#1085;&#1085;&#1077;&#1083;&#1100; &#1089; &#1087;&#1088;&#1086;&#1073;&#1088;&#1072;&#1089;&#1099;&#1074;&#1072;&#1085;&#1080;&#1077;&#1084; &#1087;&#1086;&#1088;&#1090;&#1086;&#1074;. &#1053;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1077;&#1089;&#1090;&#1100; &#1076;&#1074;&#1072; &#1089;&#1077;&#1088;&#1074;&#1080;&#1089;&#1072;: &lt;i&gt;server1:8080&lt;/i&gt; &#1080; &lt;i&gt;server2:5000&lt;/i&gt;. &#1050;&#1086;&#1075;&#1076;&#1072; &#1073;&#1099;&#1083;&#1086; &#1076;&#1074;&#1072; &#1082;&#1086;&#1084;&#1087;&#1100;&#1102;&#1090;&#1077;&#1088;&#1072;, &#1090;&#1086; &#1073;&#1099;&#1083;&#1086; &#1074;&#1089;&#1105; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086;. &#1056;&#1072;&#1073;&#1086;&#1095;&#1080;&#1081; &#1082;&#1086;&#1084;&#1087;&#1100;&#1102;&#1090;&#1077;&#1088; &#1085;&#1072;&#1093;&#1086;&#1076;&#1080;&#1083;&#1089;&#1103; &#1074;&#1085;&#1091;&#1090;&#1088;&#1080; &#1089;&#1077;&#1090;&#1080; &#1080; &#1074;&#1080;&#1076;&#1077;&#1083; &#1086;&#1073;&#1072; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1072; &#1089; &#1080;&#1093; &#1089;&#1077;&#1088;&#1074;&#1080;&#1089;&#1072;&#1084;&#1080; &#1087;&#1086; &#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1100;&#1085;&#1099;&#1084; &#1072;&#1076;&#1088;&#1077;&#1089;&#1072;&#1084;, &#1072; &#1076;&#1086;&#1084;&#1072;&#1096;&#1085;&#1080;&#1081; &#1072;&#1076;&#1088;&#1077;&#1089;&#1086;&#1074;&#1072;&#1083; &#1086;&#1073;&#1072; &#1080;&#1084;&#1077;&#1085;&#1080; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1086;&#1074; &#1085;&#1072; &lt;i&gt;localhost&lt;/i&gt;, &#1075;&#1076;&#1077; &#1089;&#1077;&#1088;&#1074;&#1080;&#1089;&#1099; &#1086;&#1082;&#1072;&#1079;&#1099;&#1074;&#1072;&#1083;&#1080;&#1089;&#1100; &#1085;&#1072; &#1090;&#1077;&#1093; &#1078;&#1077; &#1087;&#1086;&#1088;&#1090;&#1072;&#1093; &#1087;&#1086;&#1089;&#1083;&#1077; &#1087;&#1086;&#1076;&#1085;&#1103;&#1090;&#1080;&#1103; &#1090;&#1086;&#1085;&#1085;&#1077;&#1083;&#1103;. &#1053;&#1086; &#1089; &#1085;&#1086;&#1091;&#1090;&#1073;&#1091;&#1082;&#1086;&#1084; &#1085;&#1091;&#1078;&#1085;&#1086; &#1073;&#1099;&#1083;&#1086; &#1082;&#1072;&#1082;-&#1090;&#1086; &#1087;&#1077;&#1088;&#1077;&#1082;&#1083;&#1102;&#1095;&#1072;&#1090;&#1100;&#1089;&#1103;.&lt;/p&gt;&lt;p&gt;&#1044;&#1083;&#1103; &#1089;&#1084;&#1077;&#1085;&#1099; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1077;&#1082; &#1103; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1083; &#1089;&#1072;&#1084;&#1099;&#1081; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086;&#1081;, &#1082;&#1072;&#1082; &#1084;&#1085;&#1077; &#1082;&#1072;&#1078;&#1077;&#1090;&#1089;&#1103;, &#1089;&#1087;&#1086;&#1089;&#1086;&#1073;: &#1088;&#1077;&#1076;&#1072;&#1082;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1083; &#1092;&#1072;&#1081;&#1083; &lt;b&gt;/etc/hosts&lt;/b&gt;. &#1059; &#1084;&#1077;&#1085;&#1103; &#1073;&#1099;&#1083;&#1086; &#1076;&#1074;&#1072; &#1085;&#1072;&#1073;&#1086;&#1088;&#1072; &#1089;&#1090;&#1088;&#1086;&#1095;&#1077;&#1082;: &#1076;&#1083;&#1103; &#1076;&#1086;&#1084;&#1072; &#1080; &#1076;&#1083;&#1103; &#1086;&#1092;&#1080;&#1089;&#1072;. &#1054;&#1076;&#1080;&#1085; &#1074;&#1089;&#1077;&#1075;&#1076;&#1072; &#1079;&#1072;&#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;. &#1060;&#1072;&#1081;&#1083; &#1086;&#1090;&#1082;&#1088;&#1099;&#1074;&#1072;&#1083;&#1089;&#1103; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &lt;b&gt;sudo vi&lt;/b&gt;, &#1080; &#1074;&#1085;&#1091;&#1090;&#1088;&#1080; &#1084;&#1086;&#1078;&#1085;&#1086; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1079;&#1072;&#1084;&#1077;&#1085;&#1091;, &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1103; &#1085;&#1086;&#1084;&#1077;&#1088;&#1072; &#1089;&#1090;&#1088;&#1086;&#1082;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1074;&#1080;&#1076;&#1085;&#1099;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;:2,7s/^#/
:9,13s/^/#/&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1055;&#1077;&#1088;&#1074;&#1072;&#1103; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1072; &#1086;&#1079;&#1085;&#1072;&#1095;&#1072;&#1077;&#1090; &#171;&#1089;&#1086; &#1074;&#1090;&#1086;&#1088;&#1086;&#1081; &#1087;&#1086; &#1089;&#1077;&#1076;&#1100;&#1084;&#1091;&#1102; &#1089;&#1090;&#1088;&#1086;&#1095;&#1082;&#1091; &#1091;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100; &#8222;#&#8220; &#1074; &#1085;&#1072;&#1095;&#1072;&#1083;&#1077; &#1089;&#1090;&#1088;&#1086;&#1082;&#1080;&#187;, &#1072; &#1074;&#1090;&#1086;&#1088;&#1072;&#1103;&amp;nbsp;&#8212; &#171;&#1089; &#1076;&#1077;&#1074;&#1103;&#1090;&#1086;&#1081; &#1087;&#1086; &#1090;&#1088;&#1080;&#1085;&#1072;&#1076;&#1094;&#1072;&#1090;&#1091;&#1102; &#1089;&#1090;&#1088;&#1086;&#1095;&#1082;&#1091; &#1087;&#1086;&#1089;&#1090;&#1072;&#1074;&#1080;&#1090;&#1100; &#8222;#&#8220; &#1074; &#1085;&#1072;&#1095;&#1072;&#1083;&#1077; &#1089;&#1090;&#1088;&#1086;&#1095;&#1082;&#1080;&#187;. &#1053;&#1086; &#1082;&#1086;&#1075;&#1076;&#1072; &#1076;&#1077;&#1083;&#1072;&#1077;&#1096;&#1100; &#1086;&#1076;&#1085;&#1086; &#1080; &#1090;&#1086; &#1078;&#1077; &#1084;&#1085;&#1086;&#1075;&#1086; &#1088;&#1072;&#1079;, &#1074;&#1089;&#1077;&#1075;&#1076;&#1072; &#1093;&#1086;&#1095;&#1077;&#1090;&#1089;&#1103; &#1101;&#1090;&#1086; &#1072;&#1074;&#1090;&#1086;&#1084;&#1072;&#1090;&#1080;&#1079;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100;.&lt;/p&gt;&lt;p&gt;&lt;img alt="Changesettings" height="337" src="http://lonelyelk.ru/images/uploads/0000/0035/changesettings.jpg?1455752573" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1050;&#1072;&#1082;?&lt;/h2&gt;&lt;p&gt;&#1044;&#1083;&#1103; &#1085;&#1072;&#1095;&#1072;&#1083;&#1072; &#1084;&#1085;&#1077; &#1093;&#1086;&#1090;&#1077;&#1083;&#1086;&#1089;&#1100; &#1080;&#1079;&#1073;&#1072;&#1074;&#1080;&#1090;&#1100;&#1089;&#1103; &#1086;&#1090; &#1085;&#1086;&#1084;&#1077;&#1088;&#1086;&#1074; &#1089;&#1090;&#1088;&#1086;&#1082; (&#1084;&#1072;&#1083;&#1086; &#1083;&#1080;, &#1082;&#1072;&#1082;&#1080;&#1077; &#1076;&#1086;&#1073;&#1072;&#1074;&#1103;&#1090;&#1089;&#1103; &#1080;&#1083;&#1080; &#1080;&#1089;&#1095;&#1077;&#1079;&#1085;&#1091;&#1090; &#1089;&#1090;&#1088;&#1086;&#1082;&#1080;). &#1055;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1103; &#1088;&#1077;&#1096;&#1080;&#1083; &#1074;&#1099;&#1076;&#1077;&#1083;&#1103;&#1090;&#1100; &#1079;&#1086;&#1085;&#1099; &#1092;&#1072;&#1081;&#1083;&#1072; &#1076;&#1083;&#1103; &#1086;&#1092;&#1080;&#1089;&#1072; &#1080; &#1076;&#1086;&#1084;&#1072; &#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;&#1103;&#1084;&#1080; &#171;#officestart&#187;, &#171;#officeend&#187; &#1080;, &#1089;&#1086;&#1086;&#1090;&#1074;&#1077;&#1090;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086;, &#171;#homestart&#187; &#1080; &#171;#homeend&#187;. &#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1080;&#1085;&#1090;&#1077;&#1088;&#1074;&#1072;&#1083; &#1076;&#1083;&#1103; &#1079;&#1072;&#1084;&#1077;&#1085;&#1099; &#1084;&#1086;&#1078;&#1085;&#1086; &#1073;&#1099;&#1083;&#1086; &#1074;&#1099;&#1076;&#1077;&#1083;&#1103;&#1090;&#1100; &#1095;&#1077;&#1088;&#1077;&#1079; &#1085;&#1080;&#1093;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;:%s/#officestart\zs\_.\+\ze#officeend/smth_smth_smth/g
:%s/#homestart\zs\_.\+\ze#homeend/smth_smth_smth/g&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1042; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1072;&#1093; &lt;b&gt;\zs&lt;/b&gt; &#1080; &lt;b&gt;\ze&lt;/b&gt; &#1086;&#1079;&#1085;&#1072;&#1095;&#1072;&#1102;&#1090; &#1085;&#1072;&#1095;&#1072;&#1083;&#1086; &#1080; &#1082;&#1086;&#1085;&#1077;&#1094; &#1087;&#1072;&#1090;&#1090;&#1077;&#1088;&#1085;&#1072;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1084;&#1099; &#1093;&#1086;&#1090;&#1080;&#1084; &#1079;&#1072;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1086;&#1081; &lt;b&gt;s&lt;/b&gt; &#1074; &#1080;&#1085;&#1090;&#1077;&#1088;&#1074;&#1072;&#1083;&#1077; &lt;b&gt;%&lt;/b&gt;, &#1090;&#1086; &#1077;&#1089;&#1090;&#1100; &#1074;&#1086; &#1074;&#1089;&#1105;&#1084; &#1092;&#1072;&#1081;&#1083;&#1077;. &#1058;&#1086; &#1077;&#1089;&#1090;&#1100; &#1084;&#1099; &#1084;&#1077;&#1085;&#1103;&#1077;&#1084; &#1085;&#1077; &#1074;&#1089;&#1105;, &#1095;&#1090;&#1086; &#1085;&#1072;&#1096;&#1083;&#1080;, &#1072; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1095;&#1072;&#1089;&#1090;&#1100;. &#1040; &#1089;&#1072;&#1084; &#1087;&#1072;&#1090;&#1090;&#1077;&#1088;&#1085; &#8212; &#1101;&#1090;&#1086; &lt;b&gt;\_.\+&lt;/b&gt;, &#1095;&#1090;&#1086; &#1086;&#1079;&#1085;&#1072;&#1095;&#1072;&#1077;&#1090; &#171;&#1086;&#1076;&#1080;&#1085; &#1080;&#1083;&#1080; &#1073;&#1086;&#1083;&#1077;&#1077; &#1083;&#1102;&#1073;&#1099;&#1093; &#1089;&#1080;&#1084;&#1074;&#1086;&#1083;&#1086;&#1074;, &#1074;&#1082;&#1083;&#1102;&#1095;&#1072;&#1103; &#1082;&#1086;&#1085;&#1077;&#1094; &#1089;&#1090;&#1088;&#1086;&#1082;&#1080;&#187;. &#1041;&#1091;&#1082;&#1074;&#1072; &lt;b&gt;g&lt;/b&gt; &#1074; &#1082;&#1086;&#1085;&#1094;&#1077; &#1086;&#1079;&#1085;&#1072;&#1095;&#1072;&#1077;&#1090;, &#1095;&#1090;&#1086; &#1084;&#1086;&#1078;&#1077;&#1090; &#1073;&#1099;&#1090;&#1100; &#1085;&#1077;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1086; &#1090;&#1072;&#1082;&#1080;&#1093; &#1073;&#1083;&#1086;&#1082;&#1086;&#1074;, &#1095;&#1090;&#1086; &#1085;&#1077;&#1086;&#1073;&#1103;&#1079;&#1072;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;.&lt;/p&gt;&lt;p&gt;&#1053;&#1072; &#1095;&#1090;&#1086; &#1078;&#1077; &#1084;&#1099; &#1073;&#1091;&#1076;&#1077;&#1084; &#1079;&#1072;&#1084;&#1077;&#1085;&#1103;&#1090;&#1100; &#1085;&#1072;&#1081;&#1076;&#1077;&#1085;&#1085;&#1099;&#1081; &#1087;&#1072;&#1090;&#1090;&#1077;&#1088;&#1085; &#1084;&#1077;&#1078;&#1076;&#1091; &#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;&#1103;&#1084;&#1080;? &#1042;&#1086;-&#1087;&#1077;&#1088;&#1074;&#1099;&#1093;, &#1085;&#1072;&#1084; &#1089;&#1086;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1085;&#1086; &#1090;&#1086;&#1095;&#1085;&#1086; &#1087;&#1086;&#1085;&#1072;&#1076;&#1086;&#1073;&#1080;&#1090;&#1089;&#1103; &#1079;&#1072;&#1084;&#1077;&#1085;&#1072; &#1074;&#1085;&#1091;&#1090;&#1088;&#1080; &#1079;&#1072;&#1084;&#1077;&#1085;&#1099;. &#1040; &#1074;&#1086;-&#1074;&#1090;&#1086;&#1088;&#1099;&#1093;, &#1085;&#1072;&#1084; &#1085;&#1077; &#1087;&#1086;&#1084;&#1086;&#1078;&#1077;&#1090; &#1089;&#1080;&#1084;&#1074;&#1086;&#1083; &lt;b&gt;^&lt;/b&gt; &#1076;&#1083;&#1103; &#1086;&#1073;&#1086;&#1079;&#1085;&#1072;&#1095;&#1077;&#1085;&#1080;&#1103; &#1085;&#1072;&#1095;&#1072;&#1083;&#1072; &#1089;&#1090;&#1088;&#1086;&#1095;&#1077;&#1082;, &#1090;.&#1082;. &#1091; &#1085;&#1072;&#1081;&#1076;&#1077;&#1085;&#1085;&#1086;&#1075;&#1086; &#1087;&#1072;&#1090;&#1090;&#1077;&#1088;&#1085;&#1072; &#1074;&#1089;&#1077;&#1075;&#1086; &#1086;&#1076;&#1085;&#1086; &#1085;&#1072;&#1095;&#1072;&#1083;&#1086; &#1087;&#1077;&#1088;&#1077;&#1076; &#1074;&#1089;&#1077;&#1084;&#1080; &#1089;&#1090;&#1088;&#1086;&#1095;&#1082;&#1072;&#1084;&#1080;. &#1055;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1084;&#1099; &#1073;&#1091;&#1076;&#1077;&#1084; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1079;&#1085;&#1072;&#1085;&#1080;&#1077; &#1089;&#1090;&#1088;&#1091;&#1082;&#1090;&#1091;&#1088;&#1099; &#1092;&#1072;&#1081;&#1083;&#1072; &lt;b&gt;/etc/hosts&lt;/b&gt;: &#1074; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; IPv4 &#1082;&#1072;&#1078;&#1076;&#1072;&#1103; &#1085;&#1077;&#1079;&#1072;&#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1072;&#1103; &#1088;&#1072;&#1073;&#1086;&#1095;&#1072;&#1103; &#1089;&#1090;&#1088;&#1086;&#1095;&#1082;&#1072; &#1085;&#1072;&#1095;&#1080;&#1085;&#1072;&#1077;&#1090;&#1089;&#1103; &#1089; &#1094;&#1080;&#1092;&#1088;&#1099;, &#1072; &#1079;&#1072;&#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1072;&#1103;, &#1082;&#1072;&#1082; &#1080; &#1087;&#1086;&#1083;&#1086;&#1078;&#1077;&#1085;&#1086;, &#1089; &#171;#&#187;. &#1044;&#1083;&#1103; &#1076;&#1086;&#1084;&#1072; &#1087;&#1086;&#1083;&#1091;&#1095;&#1072;&#1077;&#1084; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1099;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;:%s/#officestart\zs\_.\+\ze#officeend/\=substitute(submatch(0), &amp;#39;\n\(\d\)&amp;#39;, &amp;#39;\n#\1&amp;#39;, &amp;#39;g&amp;#39;)/g
:%s/#homestart\zs\_.\+\ze#homeend/\=substitute(submatch(0), &amp;#39;\n#\(\d\)&amp;#39;, &amp;#39;\n\1&amp;#39;, &amp;#39;g&amp;#39;)/g&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1048;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &lt;b&gt;\=&lt;/b&gt; &#1079;&#1072;&#1089;&#1090;&#1072;&#1074;&#1083;&#1103;&#1077;&#1090; &#1088;&#1077;&#1076;&#1072;&#1082;&#1090;&#1086;&#1088; &#1074;&#1099;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1100; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1077;, &#1090;&#1086; &#1077;&#1089;&#1090;&#1100; &#1074;&#1099;&#1079;&#1074;&#1072;&#1090;&#1100; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1102; &lt;i&gt;substitute&lt;/i&gt; &#1074; &#1090;&#1072;&#1082;&#1086;&#1084; &#1074;&#1080;&#1076;&#1077;. &#1058;&#1091;&#1090;, &#1074;&#1088;&#1086;&#1076;&#1077; &#1073;&#1099;, &#1076;&#1086;&#1083;&#1078;&#1085;&#1086; &#1073;&#1099;&#1090;&#1100; &#1087;&#1086;&#1085;&#1103;&#1090;&#1085;&#1086;, &#1095;&#1090;&#1086; &#1084;&#1099; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1105;&#1084; &#1074; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1102; &#1085;&#1072;&#1081;&#1076;&#1077;&#1085;&#1085;&#1099;&#1081; &#1087;&#1072;&#1090;&#1090;&#1077;&#1088;&#1085;, &#1088;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1086;&#1077; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1077; &#1089; &#1086;&#1076;&#1085;&#1086;&#1081; &#1075;&#1088;&#1091;&#1087;&#1087;&#1086;&#1081; &#1080; &#1085;&#1072; &#1095;&#1090;&#1086; &#1077;&#1075;&#1086; &#1087;&#1086;&#1084;&#1077;&#1085;&#1103;&#1090;&#1100; &#1074; &#1090;&#1086;&#1084; &#1087;&#1072;&#1090;&#1090;&#1077;&#1088;&#1085;&#1077;.&lt;/p&gt;&lt;h2&gt;&#1054;&#1090; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076; &#1082; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1091;&lt;/h2&gt;&lt;p&gt;&#1054;&#1089;&#1090;&#1072;&#1083;&#1086;&#1089;&#1100; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1080;&#1079; &#1101;&#1090;&#1086;&#1075;&#1086; &#1091;&#1076;&#1086;&#1073;&#1085;&#1091;&#1102; &#1096;&#1090;&#1091;&#1095;&#1082;&#1091;. &#1051;&#1080;&#1095;&#1085;&#1086; &#1103; &#1086;&#1092;&#1086;&#1088;&#1084;&#1080;&#1083; &#1101;&#1090;&#1086; &#1089;&#1083;&#1077;&#1076;&#1091;&#1102;&#1097;&#1080;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084;. &#1042; &#1092;&#1072;&#1081;&#1083;&#1077; &lt;b&gt;~/.bash_profile&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;alias imhome=&amp;quot;sudo vim -u NONE -f -s $HOME/.vim/homehosts /etc/hosts&amp;quot;
alias imwork=&amp;quot;sudo vim -u NONE -f -s $HOME/.vim/officehosts /etc/hosts&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1057;&#1086;&#1086;&#1090;&#1074;&#1077;&#1090;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086;, &#1092;&#1072;&#1081;&#1083;&#1099; &lt;b&gt;~/.vim/homehosts&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;:%s/#officestart\zs\_.\+\ze#officeend/\=substitute(submatch(0), &amp;#39;\n\(\d\)&amp;#39;, &amp;#39;\n#\1&amp;#39;, &amp;#39;g&amp;#39;)/g
:%s/#homestart\zs\_.\+\ze#homeend/\=substitute(submatch(0), &amp;#39;\n#\(\d\)&amp;#39;, &amp;#39;\n\1&amp;#39;, &amp;#39;g&amp;#39;)/g
:wq&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;b&gt;~/.vim/officehosts&lt;/b&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;:%s/#officestart\zs\_.\+\ze#officeend/\=substitute(submatch(0), &amp;#39;\n#\(\d\)&amp;#39;, &amp;#39;\n\1&amp;#39;, &amp;#39;g&amp;#39;)/g
:%s/#homestart\zs\_.\+\ze#homeend/\=substitute(submatch(0), &amp;#39;\n\(\d\)&amp;#39;, &amp;#39;\n#\1&amp;#39;, &amp;#39;g&amp;#39;)/g
:wq&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1072;&#1082;&#1080;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084;, &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1099; &lt;b&gt;imhome&lt;/b&gt; &#1080; &lt;b&gt;imwork&lt;/b&gt; &#1089;&#1087;&#1088;&#1072;&#1096;&#1080;&#1074;&#1072;&#1102;&#1090; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100; &#1080; &#1084;&#1077;&#1085;&#1103;&#1102;&#1090; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;. &#1069;&#1090;&#1086; &#1080;&#1083;&#1083;&#1102;&#1089;&#1090;&#1088;&#1080;&#1088;&#1091;&#1077;&#1090;, &#1087;&#1086;&#1095;&#1077;&#1084;&#1091; &#1073;&#1099;&#1083; &#1074;&#1099;&#1073;&#1088;&#1072;&#1085; &#1088;&#1077;&#1076;&#1072;&#1082;&#1090;&#1086;&#1088; &lt;i&gt;vim&lt;/i&gt; &#1074; &#1082;&#1072;&#1095;&#1077;&#1089;&#1090;&#1074;&#1077; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;. &#1051;&#1102;&#1073;&#1099;&#1077; &lt;b&gt;sed&lt;/b&gt; &#1080; &lt;b&gt;awk&lt;/b&gt; &#1073;&#1091;&#1076;&#1091;&#1090; &#1087;&#1086;&#1090;&#1086;&#1084; &#1090;&#1088;&#1077;&#1073;&#1086;&#1074;&#1072;&#1090;&#1100; &lt;b&gt;sudo tee&lt;/b&gt; &#1076;&#1083;&#1103; &#1090;&#1086;&#1075;&#1086;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1079;&#1072;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1092;&#1072;&#1081;&#1083; &#1089; &#1085;&#1091;&#1078;&#1085;&#1099;&#1084;&#1080; &#1087;&#1088;&#1072;&#1074;&#1072;&#1084;&#1080;. &#1040; &#1079;&#1076;&#1077;&#1089;&#1100; &#1084;&#1099; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1077;&#1084; &#1074;&#1089;&#1077;&#1075;&#1086; &#1086;&#1076;&#1085;&#1091; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1091;.&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://vim.wikia.com/wiki/Search_and_replace"&gt;&#1055;&#1086;&#1080;&#1089;&#1082; &#1080; &#1079;&#1072;&#1084;&#1077;&#1085;&#1072; &#1074; vim&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://vim.wikia.com/wiki/VimTip755"&gt;&#1048;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1081; &#1087;&#1088;&#1080; &#1087;&#1086;&#1080;&#1089;&#1082;&#1077; &#1080; &#1079;&#1072;&#1084;&#1077;&#1085;&#1077; &#1074; vim&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/45</id>
    <published>2016-02-03T22:42:02+00:00</published>
    <updated>2016-02-03T22:42:02+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/45"/>
    <title>&#1042;&#1086;&#1090; &#1101;&#1090;&#1086; &#1103; &#1085;&#1072;&#1079;&#1099;&#1074;&#1072;&#1102; &#171;&#1087;&#1077;&#1088;&#1077;&#1088;&#1099;&#1074;&#187;!</title>
    <content type="html">&lt;h2&gt;&#1063;&#1090;&#1086; &#1073;&#1099;&#1083;&#1086;&lt;/h2&gt;&lt;p&gt;&#1055;&#1088;&#1080;&#1074;&#1077;&#1090;&#1089;&#1090;&#1074;&#1091;&#1102; &#1090;&#1077;&#1073;&#1103;, &#1076;&#1086;&#1088;&#1086;&#1075;&#1086;&#1081; &#1095;&#1080;&#1090;&#1072;&#1090;&#1077;&#1083;&#1100;! &#1050;&#1072;&#1082;&#1080;&#1084;-&#1090;&#1086; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084; &#1090;&#1099; &#1086;&#1089;&#1090;&#1072;&#1083;&#1089;&#1103; &#1087;&#1086;&#1076;&#1087;&#1080;&#1089;&#1072;&#1085; &#1085;&#1072; &#1101;&#1090;&#1086;&#1090; &#1073;&#1083;&#1086;&#1075; &#1080;&#1083;&#1080; &#1079;&#1072;&#1096;&#1105;&#1083; &#1085;&#1072; &#1085;&#1077;&#1075;&#1086; &#1087;&#1086; &#1085;&#1077;&#1103;&#1089;&#1085;&#1086;&#1081; &#1087;&#1088;&#1080;&#1095;&#1080;&#1085;&#1077;&amp;nbsp;&#8212; &#1101;&#1090;&#1086; &#1093;&#1086;&#1088;&#1086;&#1096;&#1086;! &#1042; &#1101;&#1090;&#1086;&#1084; &#1075;&#1086;&#1076;&#1091; &#1103; &#1088;&#1077;&#1096;&#1080;&#1083; &#1074;&#1086;&#1079;&#1086;&#1073;&#1085;&#1086;&#1074;&#1080;&#1090;&#1100; &#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077; &#1101;&#1090;&#1086;&#1075;&#1086; &#1089;&#1072;&#1084;&#1086;&#1075;&#1086; &#1073;&#1083;&#1086;&#1075;&#1072;. &#1055;&#1086;&#1089;&#1084;&#1086;&#1090;&#1088;&#1080;&#1084;, &#1095;&#1090;&#1086; &#1080;&#1079; &#1101;&#1090;&#1086;&#1075;&#1086; &#1074;&#1099;&#1081;&#1076;&#1077;&#1090;.&lt;/p&gt;&lt;p&gt;&#1041;&#1099;&#1083;&#1086; &#1089;&#1090;&#1088;&#1072;&#1085;&#1085;&#1086; &#1082;&#1086;&#1087;&#1072;&#1090;&#1100;&#1089;&#1103; &#1074;&#1086; &#1074;&#1085;&#1091;&#1090;&#1088;&#1077;&#1085;&#1085;&#1086;&#1089;&#1090;&#1103;&#1093; &#1101;&#1090;&#1086;&#1075;&#1086; &#1089;&#1072;&#1081;&#1090;&#1072; &#1089;&#1085;&#1086;&#1074;&#1072;. &#1042;&#1089;&#1077; &#1090;&#1077;&#1093;&#1085;&#1086;&#1083;&#1086;&#1075;&#1080;&#1080; &#1091;&#1089;&#1090;&#1072;&#1088;&#1077;&#1083;&#1080;, &#1074;&#1077;&#1088;&#1089;&#1080;&#1080; &#1085;&#1077; &#1087;&#1086;&#1076;&#1076;&#1077;&#1088;&#1078;&#1080;&#1074;&#1072;&#1102;&#1090;&#1089;&#1103; &#1080; &#1090;&#1086;&#1084;&#1091; &#1087;&#1086;&#1076;&#1086;&#1073;&#1085;&#1086;&#1077;. &#1055;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1080;&#1081; &lt;a href="http://lonelyelk.ru/posts/11#48263"&gt;&#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;&#1081;&lt;/a&gt; &#1086;&#1089;&#1090;&#1072;&#1074;&#1080;&#1083; &#1084;&#1085;&#1077; &#1095;&#1080;&#1090;&#1072;&#1090;&#1077;&#1083;&#1100; &#1074; 2014 &#1075;&#1086;&#1076;&#1091; &#1085;&#1072; &#1089;&#1090;&#1072;&#1090;&#1100;&#1102; 2009 &#1075;&#1086;&#1076;&#1072; &#1087;&#1088;&#1086; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1086;&#1091;&#1087;&#1077;&#1085;&#1072;&#1081;&#1076;&#1080;, &#1072;&#1074;&#1090;&#1086;&#1088;&#1080;&#1079;&#1086;&#1074;&#1072;&#1074;&#1096;&#1080;&#1089;&#1100; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1086;&#1091;&#1087;&#1077;&#1085;&#1072;&#1081;&#1076;&#1080;, &#1086; &#1090;&#1086;&#1084;, &#1095;&#1090;&#1086; &#1090;&#1077;&#1093;&#1085;&#1086;&#1083;&#1086;&#1075;&#1080;&#1103; &#1086;&#1091;&#1087;&#1077;&#1085;&#1072;&#1081;&#1076;&#1080; &#1084;&#1077;&#1088;&#1090;&#1074;&#1072;. &#1055;&#1088;&#1080;&#1096;&#1083;&#1086;&#1089;&#1100; &#1087;&#1088;&#1080;&#1082;&#1088;&#1091;&#1090;&#1080;&#1090;&#1100; &#1085;&#1072; &#1077;&#1105; &#1084;&#1077;&#1089;&#1090;&#1086; &#1085;&#1086;&#1074;&#1091;&#1102; &#1088;&#1077;&#1082;&#1072;&#1087;&#1095;&#1091; &#1086;&#1090; &#1043;&#1091;&#1075;&#1083;&#1072;. &#1053;&#1072;&#1087;&#1080;&#1096;&#1091; &#1082;&#1072;&#1082;-&#1085;&#1080;&#1073;&#1091;&#1076;&#1100; &#1086;&#1073; &#1101;&#1090;&#1086;&#1084;. &#1055;&#1086;&#1095;&#1091;&#1074;&#1089;&#1090;&#1074;&#1086;&#1074;&#1072;&#1083; &#1089;&#1077;&#1073;&#1103;, &#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086;, &#1072;&#1088;&#1093;&#1077;&#1086;&#1083;&#1086;&#1075;&#1086;&#1084;.&lt;/p&gt;&lt;p&gt;&#1042;&#1088;&#1077;&#1084;&#1103;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1103; &#1085;&#1072;&#1095;&#1072;&#1083; &#1074;&#1077;&#1089;&#1090;&#1080; &#1101;&#1090;&#1086;&#1090; &#1073;&#1083;&#1086;&#1075;, &#1073;&#1099;&#1083;&#1086; &#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1077;&#1084; &#1091;&#1074;&#1083;&#1077;&#1095;&#1077;&#1085;&#1080;&#1103; &#1088;&#1091;&#1073;&#1080; &#1086;&#1085; &#1088;&#1101;&#1081;&#1083;&#1079;. &#1041;&#1099;&#1083;&#1086; &#1089;&#1076;&#1077;&#1083;&#1072;&#1085;&#1086; &#1084;&#1085;&#1086;&#1075;&#1086; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1086;&#1074;. &#1055;&#1086;&#1090;&#1086;&#1084; &#1074;&#1083;&#1102;&#1073;&#1083;&#1105;&#1085;&#1085;&#1086;&#1089;&#1090;&#1100; &#1087;&#1088;&#1086;&#1096;&#1083;&#1072;, &#1072; &#1089; &#1085;&#1077;&#1081; &#1087;&#1088;&#1086;&#1096;&#1083;&#1086; &#1086; &#1073;&#1086;&#1083;&#1100;&#1096;&#1086;&#1077; &#1082;&#1086;&#1083;&#1080;&#1095;&#1077;&#1089;&#1090;&#1074;&#1086; &#1085;&#1086;&#1074;&#1086;&#1075;&#1086; &#1080; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1086;&#1075;&#1086;, &#1086; &#1095;&#1105;&#1084; &#1073;&#1099; &#1103; &#1084;&#1086;&#1075; &#1079;&#1076;&#1077;&#1089;&#1100; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100;. &#1071; &#1089;&#1090;&#1072;&#1083; &#1085;&#1077;&#1084;&#1085;&#1086;&#1075;&#1086; &#1079;&#1072;&#1083;&#1077;&#1079;&#1072;&#1090;&#1100; &#1074; &#1076;&#1088;&#1091;&#1075;&#1080;&#1077; &#1086;&#1073;&#1083;&#1072;&#1089;&#1090;&#1080;, &#1085;&#1086; &#1086;&#1073;&#1097;&#1077;&#1081; &#1082;&#1086;&#1085;&#1094;&#1077;&#1087;&#1094;&#1080;&#1080; &#1090;&#1072;&#1082; &#1080; &#1085;&#1077; &#1085;&#1072;&#1093;&#1086;&#1076;&#1080;&#1083;&#1086;&#1089;&#1100;. &#1044;&#1072;&#1078;&#1077; &#1087;&#1088;&#1077;&#1082;&#1088;&#1072;&#1089;&#1085;&#1099;&#1077; &#1080;&#1083;&#1083;&#1102;&#1089;&#1090;&#1088;&#1072;&#1094;&#1080;&#1080; &#1085;&#1077; &#1089;&#1087;&#1072;&#1089;&#1083;&#1080; &#1086;&#1090; &#1085;&#1072;&#1089;&#1090;&#1091;&#1087;&#1080;&#1074;&#1096;&#1077;&#1075;&#1086; &#1079;&#1072;&#1090;&#1080;&#1096;&#1100;&#1103;.&lt;/p&gt;&lt;p&gt;&lt;img alt="Wakeup" height="337" src="http://lonelyelk.ru/images/uploads/0000/0033/wakeup.jpg?1454539198" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1063;&#1090;&#1086; &#1073;&#1091;&#1076;&#1077;&#1090;&lt;/h2&gt;&lt;p&gt;&#1057;&#1077;&#1081;&#1095;&#1072;&#1089; &#1103; &#1085;&#1077; &#1084;&#1086;&#1075;&#1091; &#1089;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100;, &#1095;&#1090;&#1086; &#1103;&#1074;&#1083;&#1103;&#1102;&#1089;&#1100; &#1091;&#1074;&#1083;&#1077;&#1095;&#1105;&#1085;&#1085;&#1099;&#1084; &#1092;&#1072;&#1085;&#1072;&#1090;&#1086;&#1084; &#1082;&#1072;&#1082;&#1086;&#1075;&#1086;-&#1083;&#1080;&#1073;&#1086; &#1103;&#1079;&#1099;&#1082;&#1072;, &#1092;&#1088;&#1077;&#1081;&#1084;&#1074;&#1086;&#1088;&#1082;&#1072; &#1080;&#1083;&#1080; &#1090;&#1077;&#1093;&#1085;&#1086;&#1083;&#1086;&#1075;&#1080;&#1080;, &#1082;&#1072;&#1082; &#1085;&#1077; &#1084;&#1086;&#1075;&#1091; &#1089;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100;, &#1095;&#1090;&#1086; &#1103;&#1074;&#1083;&#1103;&#1102;&#1089;&#1100; &#1087;&#1088;&#1086;&#1092;&#1077;&#1089;&#1089;&#1080;&#1086;&#1085;&#1072;&#1083;&#1086;&#1084; &#1074; &#1086;&#1085;&#1099;&#1093;. &#1063;&#1090;&#1086; &#1084;&#1085;&#1077; &#1085;&#1088;&#1072;&#1074;&#1080;&#1090;&#1089;&#1103; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100;&amp;nbsp;&#8212; &#1101;&#1090;&#1086; &#1080;&#1079;&#1091;&#1095;&#1072;&#1090;&#1100; &#1085;&#1086;&#1074;&#1099;&#1077; &#1074;&#1077;&#1097;&#1080; &#1080; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1080;&#1079; &#1085;&#1080;&#1093; &#1087;&#1088;&#1080;&#1082;&#1083;&#1072;&#1076;&#1085;&#1099;&#1077; &#1087;&#1088;&#1086;&#1076;&#1091;&#1082;&#1090;&#1099;. &#1055;&#1088;&#1080;&#1082;&#1083;&#1072;&#1076;&#1085;&#1099;&#1077; &#1086;&#1085;&#1080;, &#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086;, &#1085;&#1077; &#1076;&#1083;&#1103; &#1074;&#1089;&#1077;&#1093;, &#1072; &#1074; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1086;&#1084; &#1087;&#1086; &#1083;&#1080;&#1085;&#1080;&#1080; &#1084;&#1086;&#1077;&#1081; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099;. &#1053;&#1086; &#1080;&#1084;&#1077;&#1085;&#1085;&#1086; &#1086; &#1087;&#1088;&#1086;&#1089;&#1090;&#1099;&#1093;, &#1087;&#1088;&#1080;&#1082;&#1083;&#1072;&#1076;&#1085;&#1099;&#1093; &#1080;&amp;nbsp;&#8212; &#1089;&#1072;&#1084;&#1086;&#1077; &#1075;&#1083;&#1072;&#1074;&#1085;&#1086;&#1077;&amp;nbsp;&#8212; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1099;&#1093; &#1084;&#1085;&#1077; &#1074;&#1077;&#1097;&#1072;&#1093; &#1080;&#1079; &#1089;&#1086;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1085;&#1086; &#1088;&#1072;&#1079;&#1085;&#1099;&#1093; &#1086;&#1073;&#1083;&#1072;&#1089;&#1090;&#1077;&#1081; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1103; &#1080; &#1073;&#1091;&#1076;&#1091; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100;. &#1044;&#1091;&#1084;&#1072;&#1102;, &#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1090;&#1089;&#1103; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1087;&#1086; &#1086;&#1076;&#1085;&#1086;&#1081; &#1085;&#1077;&#1073;&#1086;&#1083;&#1100;&#1096;&#1086;&#1081; &#1089;&#1090;&#1072;&#1090;&#1100;&#1077; &#1088;&#1072;&#1079; &#1074; &#1076;&#1074;&#1077; &#1085;&#1077;&#1076;&#1077;&#1083;&#1080;.&lt;/p&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/44</id>
    <published>2011-05-18T22:54:29+00:00</published>
    <updated>2011-05-18T22:57:17+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/44"/>
    <title>&#1048;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1088;&#1091;&#1073;&#1080; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084; &#1074; &#1082;&#1072;&#1095;&#1077;&#1089;&#1090;&#1074;&#1077; &#1092;&#1080;&#1083;&#1100;&#1090;&#1088;&#1086;&#1074; &#1076;&#1083;&#1103; &#1087;&#1086;&#1080;&#1089;&#1082;&#1072;</title>
    <content type="html">&lt;h2&gt;&#1055;&#1088;&#1077;&#1076;&#1099;&#1089;&#1090;&#1086;&#1088;&#1080;&#1103;&lt;/h2&gt;&lt;p&gt;&#1053;&#1077; &#1076;&#1072;&#1083;&#1077;&#1077; &#1082;&#1072;&#1082; &#1087;&#1088;&#1086;&#1096;&#1083;&#1086;&#1081; &#1086;&#1089;&#1077;&#1085;&#1100;&#1102; &#1103; &#1087;&#1080;&#1089;&#1072;&#1083; &#1086; &#1090;&#1086;&#1084;, &lt;a hreh="http://lonelyelk.ru/posts/41"&gt;&#1082;&#1072;&#1082; &#1080;&#1079;&#1085;&#1091;&#1090;&#1088;&#1080; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1072; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1080;&#1090;&#1100;, &#1079;&#1072;&#1087;&#1091;&#1097;&#1077;&#1085; &#1083;&#1080; &#1086;&#1085;&lt;/a&gt;, &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1103; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1084;&#1077;&#1085;&#1090; &lt;i&gt;grep&lt;/i&gt;. &#1042; &#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;&#1103;&#1093; &#1084;&#1085;&#1077; &#1087;&#1086;&#1089;&#1086;&#1074;&#1077;&#1090;&#1086;&#1074;&#1072;&#1083;&#1080; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &lt;i&gt;pidof&lt;/i&gt;, &#1085;&#1086; &#1084;&#1085;&#1077; &#1085;&#1077; &#1091;&#1076;&#1072;&#1083;&#1086;&#1089;&#1100; &#1079;&#1072;&#1089;&#1090;&#1072;&#1074;&#1080;&#1090;&#1100; &#1077;&#1075;&#1086; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1090;&#1100; &#1076;&#1083;&#1103; &#1088;&#1091;&#1073;&#1080;, &#1090;.&#1082;. &#1087;&#1086;&#1080;&#1089;&#1082; &#1087;&#1088;&#1086;&#1080;&#1089;&#1093;&#1086;&#1076;&#1080;&#1090; &#1087;&#1086; &#1080;&#1084;&#1077;&#1085;&#1080; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1077;&#1084;&#1086;&#1075;&#1086; &#1092;&#1072;&#1081;&#1083;&#1072;, &#1072; &#1074; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1088;&#1091;&#1073;&#1080;-&#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1072; &#1101;&#1090;&#1086; &#1074;&#1089;&#1077;&#1075;&#1076;&#1072; &lt;i&gt;ruby&lt;/i&gt;. &#1053;&#1086; &#1084;&#1085;&#1077; &#1089;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086; &#1091;&#1076;&#1072;&#1083;&#1086;&#1089;&#1100; &#1089;&#1086;&#1082;&#1088;&#1072;&#1090;&#1080;&#1090;&#1100; &#1087;&#1086;&#1083;&#1091;&#1095;&#1077;&#1085;&#1080;&#1077; &#1089;&#1087;&#1080;&#1089;&#1082;&#1072; &#1079;&#1072;&#1087;&#1091;&#1097;&#1077;&#1085;&#1085;&#1099;&#1093; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1086;&#1074; &#1089; &#1090;&#1072;&#1082;&#1080;&#1084; &#1078;&#1077; &#1080;&#1084;&#1077;&#1085;&#1077;&#1084;. &#1042;&#1084;&#1077;&#1089;&#1090;&#1086;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;`ps ax | grep #{File.basename(__FILE__)} | grep -v grep`.split(&amp;quot;\n&amp;quot;).map{ |l| l.strip.split(/\s+/)[0].to_i }.reject{ |pid| pid == Process.pid }&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1083;&#1086;&#1089;&#1100;&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;`pgrep -f #{File.basename(__FILE__)}`.chomp.split(/\s+/).reject{ |pid| pid.to_i == Process.pid }&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1044;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1086; &#1095;&#1072;&#1089;&#1090;&#1086; &#1084;&#1085;&#1077; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086; &#1086;&#1090;&#1092;&#1080;&#1083;&#1100;&#1090;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1074;&#1099;&#1074;&#1086;&#1076; &#1080;&#1083;&#1080; &#1089;&#1086;&#1076;&#1077;&#1088;&#1078;&#1080;&#1084;&#1086;&#1077; &#1092;&#1072;&#1081;&#1083;&#1072; &#1093;&#1080;&#1090;&#1088;&#1077;&#1077;, &#1095;&#1077;&#1084; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1087;&#1086;&#1080;&#1089;&#1082; &#1087;&#1086; &#1088;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1086;&#1084;&#1091; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1102;. &#1055;&#1086;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1091; &#1084;&#1085;&#1077; &#1086;&#1095;&#1077;&#1085;&#1100; &#1085;&#1088;&#1072;&#1074;&#1080;&#1090;&#1089;&#1103; &#1088;&#1091;&#1073;&#1080;, &#1080;, &#1082;&#1072;&#1082; &#1085;&#1077;&#1086;&#1076;&#1085;&#1086;&#1082;&#1088;&#1072;&#1090;&#1085;&#1086; &#1087;&#1080;&#1089;&#1072;&#1083;&#1086;&#1089;&#1100; &#1074; &#1101;&#1090;&#1086;&#1084; &#1073;&#1083;&#1086;&#1075;&#1077;, &#1103; &#1087;&#1099;&#1090;&#1072;&#1102;&#1089;&#1100; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1077;&#1075;&#1086; &#1074;&#1077;&#1079;&#1076;&#1077;, &#1075;&#1076;&#1077; &#1084;&#1086;&#1078;&#1085;&#1086;, &#1090;&#1086; &#1087;&#1086;&#1095;&#1077;&#1084;&#1091; &#1073;&#1099; &#1089;&#1085;&#1086;&#1074;&#1072; &#1090;&#1072;&#1082; &#1085;&#1077; &#1087;&#1086;&#1089;&#1090;&#1091;&#1087;&#1080;&#1090;&#1100;?&lt;/p&gt;&lt;p&gt;&lt;img alt="ascannerdarkly" height="337" src="http://lonelyelk.ru/images/uploads/0000/0029/ascannerdarkly.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1050;&#1086;&#1084;&#1072;&#1085;&#1076;&#1085;&#1072;&#1103; &#1089;&#1090;&#1088;&#1086;&#1082;&#1072; &#1088;&#1091;&#1073;&#1080;&lt;/h2&gt;&lt;p&gt;&#1056;&#1091;&#1073;&#1080; &#1080;&#1084;&#1077;&#1077;&#1090; &#1091;&#1084;&#1077;&#1088;&#1077;&#1085;&#1085;&#1086;&#1077; &#1082;&#1086;&#1083;&#1080;&#1095;&#1077;&#1089;&#1090;&#1074;&#1086; &#1082;&#1083;&#1102;&#1095;&#1077;&#1081; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1085;&#1086;&#1081; &#1089;&#1090;&#1088;&#1086;&#1082;&#1080;. &#1050;&#1088;&#1072;&#1090;&#1082;&#1086; &#1086;&#1085;&#1080; &#1086;&#1087;&#1080;&#1089;&#1072;&#1085;&#1099; &#1074; &#1074;&#1099;&#1074;&#1086;&#1076;&#1077;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;ruby --help&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1053;&#1072;&#1089; &#1074; &#1073;&#1086;&#1083;&#1100;&#1096;&#1077;&#1081; &#1089;&#1090;&#1077;&#1087;&#1077;&#1085;&#1080; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1091;&#1102;&#1090; &#1082;&#1083;&#1102;&#1095;&#1080; &lt;b&gt;-n&lt;/b&gt; &#1080; &lt;b&gt;-p&lt;/b&gt;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1089;&#1086;&#1079;&#1076;&#1072;&#1102;&#1090; &#1094;&#1080;&#1082;&#1083; &#1074;&#1086;&#1082;&#1088;&#1091;&#1075; &#1095;&#1090;&#1077;&#1085;&#1080;&#1103; &#1080;&#1079; &#1087;&#1072;&#1081;&#1087;&#1072;. &#1057;&#1089;&#1099;&#1083;&#1082;&#1072; &#1085;&#1072; &#1087;&#1086;&#1076;&#1088;&#1086;&#1073;&#1085;&#1086;&#1089;&#1090;&#1080;&amp;nbsp;&amp;#151; &#1074; &#1082;&#1086;&#1085;&#1094;&#1077; &#1089;&#1090;&#1072;&#1090;&#1100;&#1080;.&lt;/p&gt;&lt;p&gt;&#1053;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1084;&#1099; &#1093;&#1086;&#1090;&#1080;&#1084; &#1087;&#1086;&#1089;&#1095;&#1080;&#1090;&#1072;&#1090;&#1100;, &#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1086; &#1074;&#1089;&#1077;&#1075;&#1086; &#1074;&#1080;&#1088;&#1090;&#1091;&#1072;&#1083;&#1100;&#1085;&#1086;&#1081; &#1087;&#1072;&#1084;&#1103;&#1090;&#1080; &#1079;&#1072;&#1085;&#1080;&#1084;&#1072;&#1102;&#1090; &#1074;&#1089;&#1077; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1099; &#1073;&#1088;&#1072;&#1091;&#1079;&#1077;&#1088;&#1072; &#1075;&#1091;&#1075;&#1083;-&#1093;&#1088;&#1086;&#1084;. &#1042; &#1082;&#1072;&#1095;&#1077;&#1089;&#1090;&#1074;&#1077; &#1080;&#1089;&#1090;&#1086;&#1095;&#1085;&#1080;&#1082;&#1072; &#1080;&#1085;&#1092;&#1086;&#1088;&#1084;&#1072;&#1094;&#1080;&#1080; &#1073;&#1091;&#1076;&#1077;&#1084; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1074;&#1099;&#1074;&#1086;&#1076; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1099;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;ps axo &amp;quot;%p %z %c&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1042; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1081; &#1089;&#1086;&#1073;&#1088;&#1072;&#1085;&#1099; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1099;&#1077; &#1076;&#1072;&#1085;&#1085;&#1099;&#1077; (&#1079;&#1072;&#1085;&#1080;&#1084;&#1072;&#1077;&#1084;&#1072;&#1103; &#1074;&#1080;&#1088;&#1090;&#1091;&#1072;&#1083;&#1100;&#1085;&#1072;&#1103; &#1087;&#1072;&#1084;&#1103;&#1090;&#1100; &#1080; &#1080;&#1084;&#1103; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1072; &#1073;&#1077;&#1079; &#1072;&#1088;&#1075;&#1091;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074;) &#1080; &#1087;&#1080;&#1076; (&#1085;&#1091; &#1072; &#1074;&#1076;&#1088;&#1091;&#1075;?). &#1040; &#1090;&#1077;&#1087;&#1077;&#1088;&#1100; &#1101;&#1090;&#1086;&#1090; &#1074;&#1099;&#1074;&#1086;&#1076; &#1086;&#1090;&#1087;&#1088;&#1072;&#1074;&#1080;&#1084; &#1085;&#1077; &#1075;&#1088;&#1077;&#1087;&#1091;, &#1072; &#1085;&#1072;&#1096;&#1077;&#1084;&#1091; &#1088;&#1086;&#1076;&#1085;&#1086;&#1084;&#1091; &#1088;&#1091;&#1073;&#1080;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;ps axo &amp;quot;%p %z %c&amp;quot; | ruby -nae &amp;#39;num ||= 0; num += $F[1].to_i if $F[2] =~ /chrome/; END{puts &amp;quot;total chrome virtual memory size #{num} Kbytes&amp;quot;}&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1063;&#1090;&#1086; &#1101;&#1090;&#1086; &#1086;&#1079;&#1085;&#1072;&#1095;&#1072;&#1077;&#1090;? &#1050;&#1083;&#1102;&#1095; &lt;b&gt;n&lt;/b&gt; &#1086;&#1079;&#1085;&#1072;&#1095;&#1072;&#1077;&#1090;, &#1095;&#1090;&#1086; &#1074;&#1086;&#1082;&#1088;&#1091;&#1075; &#1085;&#1072;&#1096;&#1077;&#1075;&#1086; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1072; &#1077;&#1089;&#1090;&#1100; &#1094;&#1080;&#1082;&#1083; &#1074;&#1080;&#1076;&#1072;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;while gets(); ... end&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1050;&#1083;&#1102;&#1095; &lt;b&gt;a&lt;/b&gt; &#1086;&#1079;&#1085;&#1072;&#1095;&#1072;&#1077;&#1090;, &#1095;&#1090;&#1086; &#1074;&#1084;&#1077;&#1089;&#1090;&#1086; &#1087;&#1077;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1086;&#1081; &lt;b&gt;$_&lt;/b&gt;, &#1082;&#1091;&#1076;&#1072; &#1072;&#1074;&#1090;&#1086;&#1084;&#1072;&#1090;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080; &#1087;&#1086;&#1087;&#1072;&#1076;&#1072;&#1077;&#1090; &#1088;&#1077;&#1079;&#1091;&#1083;&#1100;&#1090;&#1072;&#1090; &lt;i&gt;gets&lt;/i&gt;, &#1084;&#1099; &#1084;&#1086;&#1078;&#1077;&#1084; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &lt;b&gt;$F&lt;/b&gt;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1077;&#1089;&#1090;&#1100; &#1089;&#1091;&#1090;&#1100; &lt;b&gt;$_.split&lt;/b&gt;. &#1040; &lt;i&gt;END&lt;/i&gt; &#1089;&#1086;&#1076;&#1077;&#1088;&#1078;&#1080;&#1090; &#1073;&#1083;&#1086;&#1082;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1074;&#1099;&#1087;&#1086;&#1083;&#1085;&#1103;&#1077;&#1090;&#1089;&#1103; &#1087;&#1086;&#1089;&#1083;&#1077; &#1094;&#1080;&#1082;&#1083;&#1072;.&lt;/p&gt;&lt;p&gt;&#1058;&#1091; &#1078;&#1077; &#1084;&#1072;&#1075;&#1080;&#1102; &#1084;&#1086;&#1078;&#1085;&#1086; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1080; &#1074;&#1085;&#1091;&#1090;&#1088;&#1080; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1077;&#1084;&#1099;&#1093; &#1088;&#1091;&#1073;&#1080;-&#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1086;&#1074;. &#1053;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1077;&#1089;&#1083;&#1080; &#1084;&#1099; &#1093;&#1086;&#1090;&#1080;&#1084; &#1085;&#1072;&#1081;&#1090;&#1080; &#1082;&#1072;&#1082;&#1086;&#1077;-&#1090;&#1086; &#1089;&#1083;&#1086;&#1074;&#1086; &#1074;&#1085;&#1091;&#1090;&#1088;&#1080; &#1092;&#1072;&#1081;&#1083;&#1072;, &#1074;&#1099;&#1076;&#1077;&#1083;&#1080;&#1090;&#1100; &#1077;&#1075;&#1086; &#1094;&#1074;&#1077;&#1090;&#1086;&#1084; &#1080; &#1074;&#1099;&#1074;&#1077;&#1089;&#1090;&#1080; &#1089;&#1090;&#1088;&#1086;&#1082;&#1091; &#1089; &#1085;&#1086;&#1084;&#1077;&#1088;&#1086;&#1084;, &#1075;&#1076;&#1077; &#1101;&#1090;&#1086; &#1089;&#1083;&#1086;&#1074;&#1086; &#1085;&#1072;&#1096;&#1083;&#1086;&#1089;&#1100;, &#1090;&#1086; &#1085;&#1072;&#1096; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090; &#1073;&#1091;&#1076;&#1077;&#1090; &#1074;&#1099;&#1075;&#1083;&#1103;&#1076;&#1077;&#1090;&#1100; &#1074;&#1086;&#1090; &#1090;&#1072;&#1082; (&#1092;&#1072;&#1081;&#1083; &lt;b&gt;look_for&lt;/b&gt;):&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;#!/usr/bin/ruby -n

BEGIN {
  unless ARGV.size == 2
    puts &amp;quot;Usage: ./look_for &amp;lt;word&amp;gt; &amp;lt;path/to/file&amp;gt;&amp;quot;
    exit
  end
  str = ARGV.shift
}

next unless $_ =~ /#{str}/

printf &amp;quot;%6s%s&amp;quot;, $., $_.gsub($&amp;amp;, &amp;quot;\e[31m#{$&amp;amp;}\e[0m&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1077;&#1087;&#1077;&#1088;&#1100;, &#1077;&#1089;&#1083;&#1080; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1101;&#1090;&#1086;&#1090; &#1092;&#1072;&#1081;&#1083; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1077;&#1084;&#1099;&#1084; &#1080; &#1079;&#1072;&#1087;&#1091;&#1089;&#1090;&#1080;&#1090;&#1100; &#1077;&#1075;&#1086;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;./look_for word /in/some/file&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1086; &#1084;&#1086;&#1078;&#1085;&#1086; &#1091;&#1074;&#1080;&#1076;&#1077;&#1090;&#1100; &#1085;&#1077;&#1079;&#1077;&#1084;&#1085;&#1091;&#1102; &#1082;&#1088;&#1072;&#1089;&#1086;&#1090;&#1091;. &#1050;&#1089;&#1090;&#1072;&#1090;&#1080;, &#1086;&#1073;&#1088;&#1072;&#1090;&#1080;&#1090;&#1077; &#1074;&#1085;&#1080;&#1084;&#1072;&#1085;&#1080;&#1077; &#1085;&#1072; &lt;i&gt;shift&lt;/i&gt;. &#1041;&#1077;&#1079; &#1085;&#1077;&#1075;&#1086; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1072; &#1085;&#1077; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1077;&#1090;, &#1090;.&#1082;. &lt;i&gt;gets&lt;/i&gt;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1090;&#1091;&#1090; &#1079;&#1072; &#1082;&#1072;&#1076;&#1088;&#1086;&#1084; &#1087;&#1088;&#1072;&#1074;&#1080;&#1090; &#1073;&#1072;&#1083;, &#1087;&#1099;&#1090;&#1072;&#1077;&#1090;&#1089;&#1103; &#1074;&#1086;&#1089;&#1087;&#1088;&#1080;&#1085;&#1080;&#1084;&#1072;&#1090;&#1100; &#1074;&#1089;&#1077; &#1072;&#1088;&#1075;&#1091;&#1084;&#1077;&#1085;&#1090;&#1099; &#1082;&#1072;&#1082; &#1087;&#1091;&#1090;&#1080; &#1082; &#1092;&#1072;&#1081;&#1083;&#1072;&#1084;, &#1080;&#1079; &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1093; &#1085;&#1077;&#1087;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1086; &#1085;&#1091;&#1078;&#1085;&#1086; &#1095;&#1090;&#1086;-&#1085;&#1080;&#1073;&#1091;&#1076;&#1100; &#1087;&#1088;&#1086;&#1095;&#1080;&#1090;&#1072;&#1090;&#1100;.&lt;/p&gt;&lt;p&gt;&#1055;&#1088;&#1086;&#1095;&#1080;&#1077; &#1087;&#1088;&#1077;&#1082;&#1088;&#1072;&#1089;&#1085;&#1099;&#1077; &#1087;&#1088;&#1080;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1086;&#1074; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1085;&#1086;&#1081; &#1089;&#1090;&#1088;&#1086;&#1082;&#1080; &#1088;&#1091;&#1073;&#1080; &#1103; &#1087;&#1088;&#1077;&#1076;&#1083;&#1072;&#1075;&#1072;&#1102; &#1087;&#1099;&#1090;&#1083;&#1080;&#1074;&#1086;&#1084;&#1091; &#1095;&#1080;&#1090;&#1072;&#1090;&#1077;&#1083;&#1102; &#1087;&#1086;&#1076;&#1089;&#1084;&#1086;&#1090;&#1088;&#1077;&#1090;&#1100; &#1074; &#1089;&#1089;&#1099;&#1083;&#1082;&#1072;&#1093; &#1085;&#1080;&#1078;&#1077; &#1080;&#1083;&#1080; &#1085;&#1072;&#1081;&#1090;&#1080; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;.&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="https://github.com/lonelyelk/lonelyelk_code/tree/master/oneliners"&gt;&#1055;&#1086;&#1083;&#1085;&#1099;&#1081; &#1082;&#1086;&#1076; &#1089;&#1090;&#1072;&#1090;&#1100;&#1080; &#1085;&#1072; &#1075;&#1080;&#1090;&#1093;&#1072;&#1073;&#1077;&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://cheat.errtheblog.com/s/ruby/"&gt;&#1057;&#1087;&#1088;&#1072;&#1074;&#1086;&#1095;&#1085;&#1080;&#1082; &#1087;&#1086; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1072;&#1084; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1085;&#1086;&#1081; &#1089;&#1090;&#1088;&#1086;&#1082;&#1080;&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://ruby.activeventure.com/manual/man-1.4/options.html"&gt;&#1058;&#1086; &#1078;&#1077;, &#1095;&#1090;&#1086; &#1080; &#1074;&#1099;&#1096;&#1077;, &#1085;&#1086; &#1087;&#1086;&#1076;&#1088;&#1086;&#1073;&#1085;&#1077;&#1077;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://reference.jumpingmonkey.org/programming_languages/ruby/ruby-one-liners.html"&gt;&#1052;&#1085;&#1086;&#1078;&#1077;&#1089;&#1090;&#1074;&#1086; &#1087;&#1088;&#1077;&#1082;&#1088;&#1072;&#1089;&#1085;&#1099;&#1093; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088;&#1086;&#1074;&lt;/a&gt; (&#1089;&#1086; &#1089;&#1089;&#1099;&#1083;&#1082;&#1086;&#1081; &#1085;&#1072; &#1080;&#1089;&#1090;&#1086;&#1095;&#1085;&#1080;&#1082;).&lt;/li&gt;&lt;/ol&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/43</id>
    <published>2011-03-23T18:58:26+00:00</published>
    <updated>2011-03-23T18:58:26+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/43"/>
    <title>&#1056;&#1077;&#1082;&#1091;&#1088;&#1089;&#1080;&#1103; &#1074; &#1088;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1103;&#1093;</title>
    <content type="html">&lt;h2&gt;&#1055;&#1088;&#1086;&#1083;&#1086;&#1075;&lt;/h2&gt;&lt;p&gt;&#1063;&#1090;&#1086;-&#1090;&#1086; &#1073;&#1086;&#1083;&#1100;&#1096;&#1080;&#1077; &#1087;&#1077;&#1088;&#1077;&#1088;&#1099;&#1074;&#1099; &#1074; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085;&#1080;&#1080; &#1089;&#1090;&#1072;&#1090;&#1077;&#1081; &#1074;&#1093;&#1086;&#1076;&#1103;&#1090; &#1074; &#1087;&#1088;&#1080;&#1074;&#1099;&#1095;&#1082;&#1091;. &#1057;&#1087;&#1086;&#1089;&#1086;&#1073;&#1085;&#1086;&#1089;&#1090;&#1100; &#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1093; &#1082;&#1086;&#1083;&#1083;&#1077;&#1075; &#1087;&#1086; &#1094;&#1077;&#1093;&#1091; &#1088;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1086; &#1074;&#1099;&#1076;&#1072;&#1074;&#1072;&#1090;&#1100; &#1095;&#1090;&#1086;-&#1085;&#1080;&#1073;&#1091;&#1076;&#1100; &#1087;&#1086;&#1083;&#1077;&#1079;&#1085;&#1086;&#1077; &#1080; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1086;&#1077; &#1074;&#1099;&#1079;&#1099;&#1074;&#1072;&#1077;&#1090; &#1091;&#1074;&#1072;&#1078;&#1077;&#1085;&#1080;&#1077;.&lt;/p&gt;&lt;p&gt;&lt;img alt="worm" height="90" src="http://lonelyelk.ru/images/uploads/0000/0023/worm.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1042;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1057; &#1090;&#1077;&#1093; &#1089;&#1072;&#1084;&#1099;&#1093; &#1087;&#1086;&#1088;, &#1082;&#1072;&#1082; &#1103; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1091;&#1079;&#1085;&#1072;&#1083; &#1087;&#1088;&#1086; &#1088;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1077; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1103;, &#1103; &#1089;&#1083;&#1099;&#1096;&#1072;&#1083; &#1086;&#1073; &#1080;&#1093; &#1085;&#1077;&#1089;&#1086;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1089;&#1090;&#1074;&#1077; &#1080; &#1084;&#1086;&#1088;&#1072;&#1083;&#1100;&#1085;&#1086;&#1084; &#1091;&#1089;&#1090;&#1072;&#1088;&#1077;&#1074;&#1072;&#1085;&#1080;&#1080;. &#1056;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1077; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1103; &#1087;&#1088;&#1086;&#1076;&#1086;&#1083;&#1078;&#1072;&#1083;&#1080; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103;, &#1072; &#1085;&#1077;&#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1099;&#1077; &#1090;&#1077;&#1086;&#1088;&#1077;&#1090;&#1080;&#1082;&#1080;&amp;nbsp;&amp;#151; &#1089;&#1077;&#1090;&#1086;&#1074;&#1072;&#1090;&#1100;. &#1054;&#1089;&#1085;&#1086;&#1074;&#1085;&#1086;&#1081; &#1087;&#1088;&#1077;&#1090;&#1077;&#1085;&#1079;&#1080;&#1077;&#1081; &#1073;&#1099;&#1083;&#1086; &#1090;&#1086;, &#1095;&#1090;&#1086; &#1088;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1077; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1103; &#1085;&#1077; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1103;&#1102;&#1090; &#1080;&#1089;&#1089;&#1083;&#1077;&#1076;&#1086;&#1074;&#1072;&#1090;&#1100; &#1074;&#1083;&#1086;&#1078;&#1077;&#1085;&#1085;&#1086;&#1089;&#1090;&#1080; &#1087;&#1072;&#1090;&#1090;&#1077;&#1088;&#1085;&#1086;&#1074; &#1074; &#1074;&#1080;&#1076;&#1091; &#1089;&#1074;&#1086;&#1077;&#1081; &#1083;&#1080;&#1085;&#1077;&#1081;&#1085;&#1086;&#1089;&#1090;&#1080;. &#1044;&#1077;&#1081;&#1089;&#1090;&#1074;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;, &#1089;&#1086;&#1075;&#1083;&#1072;&#1096;&#1072;&#1083;&#1089;&#1103; &#1103;, &#1085;&#1077;&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1080;&#1090;&#1100; &#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1100;&#1085;&#1086;&#1089;&#1090;&#1100; &#1086;&#1090;&#1082;&#1088;&#1099;&#1090;&#1080;&#1103; &#1080; &#1079;&#1072;&#1082;&#1088;&#1099;&#1090;&#1080;&#1103; &#1090;&#1077;&#1075;&#1086;&#1074; &#1080;&#1083;&#1080; &#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1090;&#1100; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1077; &#1074; &#1089;&#1072;&#1084;&#1099;&#1093; &#1074;&#1085;&#1091;&#1090;&#1088;&#1077;&#1085;&#1085;&#1080;&#1093; &#1089;&#1082;&#1086;&#1073;&#1082;&#1072;&#1093;.&lt;/p&gt;&lt;p&gt;&#1054;&#1076;&#1085;&#1072;&#1082;&#1086;, &#1082;&#1072;&#1082; &#1086;&#1082;&#1072;&#1079;&#1072;&#1083;&#1086;&#1089;&#1100;, &#1095;&#1077;&#1083;&#1086;&#1074;&#1077;&#1095;&#1077;&#1089;&#1090;&#1074;&#1086; &#1096;&#1072;&#1075;&#1085;&#1091;&#1083;&#1086; &#1076;&#1072;&#1083;&#1077;&#1082;&#1086; &#1074;&#1087;&#1077;&#1088;&#1105;&#1076; &#1074; &#1074;&#1086;&#1087;&#1088;&#1086;&#1089;&#1077; &#1089;&#1086;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1089;&#1090;&#1074;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1088;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1081;. &#1054;&#1073; &#1086;&#1076;&#1085;&#1086;&#1084; &#1080;&#1079; &#1085;&#1086;&#1074;&#1096;&#1077;&#1089;&#1090;&#1074; &#1093;&#1086;&#1095;&#1091; &#1089;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103; &#1088;&#1072;&#1089;&#1089;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100;.&lt;/p&gt;&lt;p&gt;&lt;img alt="mole_worm" height="337" src="http://lonelyelk.ru/images/uploads/0000/0025/mole_worm.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1048;&#1084;&#1077;&#1085;&#1086;&#1074;&#1072;&#1085;&#1085;&#1099;&#1077; &#1075;&#1088;&#1091;&#1087;&#1087;&#1099;&lt;/h2&gt;&lt;p&gt;&#1042; &#1088;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1103;&#1093; &#1088;&#1091;&#1073;&#1080; 1.9 &#1087;&#1086;&#1103;&#1074;&#1080;&#1083;&#1080;&#1089;&#1100; &#1080;&#1084;&#1077;&#1085;&#1086;&#1074;&#1072;&#1085;&#1085;&#1099;&#1077; &#1075;&#1088;&#1091;&#1087;&#1087;&#1099;. &#1042;&#1086;&#1090;, &#1082;&#1072;&#1082; &#1074;&#1099;&#1075;&#1083;&#1103;&#1076;&#1080;&#1090; &#1080;&#1093; &#1101;&#1083;&#1077;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1085;&#1086;&#1077; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;if /\A(?&amp;lt;first&amp;gt;[a-zA-Z]+)\s+(?&amp;lt;last&amp;gt;[a-zA-Z]+)\Z/ =~ &amp;quot;Vassily Poopkine&amp;quot;
  puts [first, last].inspect
end

if md = /\A(?&amp;lt;first&amp;gt;[a-zA-Z]+)\s+(?&amp;lt;last&amp;gt;[a-zA-Z]+)\Z/.match(&amp;quot;Vassily Poopkine&amp;quot;)
  puts [md[:first], md[:last]].inspect
end&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1086; &#1077;&#1089;&#1090;&#1100; &#1084;&#1099; &#1085;&#1077; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1074;&#1099;&#1076;&#1077;&#1083;&#1103;&#1077;&#1084; &#1075;&#1088;&#1091;&#1087;&#1087;&#1091; &#1089;&#1082;&#1086;&#1073;&#1082;&#1072;&#1084;&#1080;, &#1082;&#1072;&#1082; &#1086;&#1073;&#1099;&#1095;&#1085;&#1086;, &#1085;&#1072;&#1079;&#1085;&#1072;&#1095;&#1072;&#1103; &#1077;&#1081; &#1090;&#1077;&#1084; &#1089;&#1072;&#1084;&#1099;&#1084; &#1087;&#1086;&#1088;&#1103;&#1076;&#1082;&#1086;&#1074;&#1099;&#1081; &#1085;&#1086;&#1084;&#1077;&#1088; (&#1087;&#1086; &#1085;&#1086;&#1084;&#1077;&#1088;&#1091; &#1086;&#1090;&#1082;&#1088;&#1099;&#1074;&#1072;&#1102;&#1097;&#1077;&#1081; &#1089;&#1082;&#1086;&#1073;&#1082;&#1080;), &#1085;&#1086; &#1080; &#1076;&#1072;&#1105;&#1084; &#1080;&#1084;&#1103;. &#1048; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1077;&#1075;&#1086; &#1084;&#1086;&#1078;&#1085;&#1086; &#1085;&#1077; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1074; &#1083;&#1086;&#1082;&#1072;&#1083;&#1100;&#1085;&#1099;&#1093; &#1087;&#1077;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1099;&#1093; &#1080; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1077; &lt;i&gt;MatchData&lt;/i&gt;, &#1085;&#1086; &#1080; &#1074; &#1089;&#1072;&#1084;&#1086;&#1084; &#1088;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1086;&#1084; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1080;.&lt;/p&gt;&lt;p&gt;&#1041;&#1086;&#1083;&#1077;&#1077; &#1090;&#1086;&#1075;&#1086;, &#1086;&#1073;&#1088;&#1072;&#1097;&#1077;&#1085;&#1080;&#1077; &#1082; &#1086;&#1073;&#1098;&#1103;&#1074;&#1083;&#1077;&#1085;&#1085;&#1099;&#1084; &#1075;&#1088;&#1091;&#1087;&#1087;&#1072;&#1084; &#1074;&#1085;&#1091;&#1090;&#1088;&#1080; &#1084;&#1086;&#1078;&#1077;&#1090; &#1073;&#1099;&#1090;&#1100; &#1088;&#1077;&#1082;&#1091;&#1088;&#1089;&#1080;&#1074;&#1085;&#1099;&#1084;. &#1052;&#1085;&#1077; &#1089;&#1088;&#1072;&#1079;&#1091; &#1078;&#1077; &#1079;&#1072;&#1093;&#1086;&#1090;&#1077;&#1083;&#1086;&#1089;&#1100; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1076;&#1072;&#1074;&#1085;&#1080;&#1096;&#1085;&#1102;&#1102; &#1084;&#1086;&#1102; &#1079;&#1072;&#1076;&#1091;&#1084;&#1082;&#1091; &#1086; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1080;, &#1088;&#1072;&#1089;&#1082;&#1088;&#1099;&#1074;&#1072;&#1102;&#1097;&#1077;&#1081; &#1074;&#1083;&#1086;&#1078;&#1077;&#1085;&#1085;&#1099;&#1077; &#1089;&#1082;&#1086;&#1073;&#1082;&#1080;. &#1042;&#1086;&#1090; &#1090;&#1072;&#1082;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;str = &amp;quot;1 + 2 * (3 - 4 / {5 + 6} + [7 - 8 * (9 + 10 * 11) + 12 * {13 - 14}] + 15) + 16 * (17 + 18)&amp;quot;

re = %r{
        (?&amp;lt;fill&amp;gt;[0-9+\-*/\s]+){0}
        (?&amp;lt;expression&amp;gt;\g&amp;lt;fill&amp;gt;*\g&amp;lt;brackets&amp;gt;\g&amp;lt;fill&amp;gt;*|\g&amp;lt;fill&amp;gt;){0}
        (?&amp;lt;braces&amp;gt;\{\g&amp;lt;expression&amp;gt;+\}){0}
        (?&amp;lt;squarebrackets&amp;gt;\[\g&amp;lt;expression&amp;gt;+\]){0}
        (?&amp;lt;parentheses&amp;gt;\(\g&amp;lt;expression&amp;gt;+\)){0}
        (?&amp;lt;brackets&amp;gt;\g&amp;lt;braces&amp;gt;|\g&amp;lt;squarebrackets&amp;gt;|\g&amp;lt;parentheses&amp;gt;)
}x

def calculator(str)
  if str =~ /\A[0-9+\-*\/\s]+\Z/
    eval str
  else
    raise &amp;quot;Invalid expression: #{str}&amp;quot;
  end
end

f =-&amp;gt; s do
  if $~[:expression] == $~[:fill]
    calculator($~[:fill])
  else
    calculator($~[:brackets][1..-2].gsub(re, &amp;amp;f))
  end
end

puts calculator(str.gsub(re, &amp;amp;f))
puts eval(str.gsub(/(?&amp;lt;left&amp;gt;\{|\[)|\}|\]/) { |s| $~[:left] ? &amp;quot;(&amp;quot; : &amp;quot;)&amp;quot; })&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1048;&#1090;&#1072;&#1082;, &#1074; &#1088;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1086;&#1084; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1080; &#1087;&#1088;&#1080;&#1089;&#1091;&#1090;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090; 6 &#1080;&#1084;&#1077;&#1085;&#1086;&#1074;&#1072;&#1085;&#1085;&#1099;&#1093; &#1075;&#1088;&#1091;&#1087;&#1087;: &lt;b&gt;fill&lt;/b&gt; (&#1079;&#1072;&#1087;&#1086;&#1083;&#1085;&#1077;&#1085;&#1080;&#1103; &#1087;&#1088;&#1086;&#1089;&#1090;&#1088;&#1072;&#1085;&#1089;&#1090;&#1074;&#1072; &#1084;&#1077;&#1078;&#1076;&#1091; &#1089;&#1082;&#1086;&#1073;&#1082;&#1072;&#1084;&#1080;), &lt;b&gt;expression&lt;/b&gt; (&#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1077;, &#1089;&#1086;&#1076;&#1077;&#1088;&#1078;&#1072;&#1097;&#1077;&#1077; &#1086;&#1076;&#1085;&#1080; &#1080;&#1083;&#1080; &#1085;&#1080; &#1086;&#1076;&#1085;&#1080;&#1093; &#1085;&#1077;&#1088;&#1072;&#1089;&#1082;&#1088;&#1099;&#1090;&#1099;&#1093; &#1089;&#1082;&#1086;&#1073;&#1086;&#1082;), &lt;b&gt;braces&lt;/b&gt; (&#1092;&#1080;&#1075;&#1091;&#1088;&#1085;&#1099;&#1077; &#1089;&#1082;&#1086;&#1073;&#1082;&#1080;), &lt;b&gt;squarebrackets&lt;/b&gt; (&#1082;&#1074;&#1072;&#1076;&#1088;&#1072;&#1090;&#1085;&#1099;&#1077; &#1089;&#1082;&#1086;&#1073;&#1082;&#1080;), &lt;b&gt;parentheses&lt;/b&gt; (&#1082;&#1088;&#1091;&#1075;&#1083;&#1099;&#1077; &#1089;&#1082;&#1086;&#1073;&#1082;&#1080;), &lt;b&gt;brackets&lt;/b&gt; (&#1083;&#1102;&#1073;&#1099;&#1077; &#1089;&#1082;&#1086;&#1073;&#1082;&#1080;). &#1050;&#1072;&#1082; &#1074;&#1080;&#1076;&#1080;&#1090;&#1077;, &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1077; &#1086;&#1087;&#1080;&#1089;&#1099;&#1074;&#1072;&#1077;&#1090;&#1089;&#1103; &#1095;&#1077;&#1088;&#1077;&#1079; &#1089;&#1082;&#1086;&#1073;&#1082;&#1080;, &#1072; &#1089;&#1082;&#1086;&#1073;&#1082;&#1080;&amp;nbsp;&amp;#151; &#1095;&#1077;&#1088;&#1077;&#1079; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1077;.&lt;/p&gt;&lt;p&gt;&#1044;&#1083;&#1103; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1082;&#1080; &#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1100;&#1085;&#1086;&#1089;&#1090;&#1080; &#1088;&#1072;&#1089;&#1095;&#1105;&#1090;&#1072;, &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1084; &#1086;&#1073;&#1099;&#1095;&#1085;&#1099;&#1081; eval, &#1079;&#1072;&#1084;&#1077;&#1085;&#1080;&#1074; &#1074;&#1089;&#1077; &#1089;&#1082;&#1086;&#1073;&#1082;&#1080; &#1085;&#1072; &#1082;&#1088;&#1091;&#1075;&#1083;&#1099;&#1077;.&lt;/p&gt;&lt;p&gt;&lt;img alt="mole" height="267" src="http://lonelyelk.ru/images/uploads/0000/0027/mole.jpg" width="600" /&gt;&lt;/p&gt;&lt;p&gt;&#1057;&#1076;&#1077;&#1083;&#1072;&#1074; &#1101;&#1090;&#1086;&#1090; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1103; &#1073;&#1099;&#1083; &#1076;&#1086;&#1074;&#1086;&#1083;&#1077;&#1085;, &#1082;&#1072;&#1082; &#1089;&#1090;&#1072;&#1076;&#1086; &#1089;&#1083;&#1086;&#1085;&#1086;&#1074;, &#1085;&#1086; &#1087;&#1086;&#1090;&#1086;&#1084; &#1088;&#1077;&#1096;&#1080;&#1083; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1080;&#1090;&#1100;, &#1072; &#1095;&#1090;&#1086; &#1073;&#1091;&#1076;&#1077;&#1090;, &#1077;&#1089;&#1083;&#1080; &#1089;&#1082;&#1086;&#1073;&#1082;&#1080; &#1088;&#1072;&#1089;&#1089;&#1090;&#1072;&#1074;&#1083;&#1077;&#1085;&#1099; &#1085;&#1077;&#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1100;&#1085;&#1086;?&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;str = &amp;quot;1 + 2 * (3 - 4 / {5 + 6} + [7 - 8 * (9 + 10 * 11) + 12 * {13 - 14]} + 15) + 16 * (17 + 18)&amp;quot;

re = %r{
        (?&amp;lt;fill&amp;gt;[0-9+\-*/\s]+){0}
        (?&amp;lt;expression&amp;gt;\g&amp;lt;fill&amp;gt;*\g&amp;lt;brackets&amp;gt;\g&amp;lt;fill&amp;gt;*|\g&amp;lt;fill&amp;gt;){0}
        (?&amp;lt;braces&amp;gt;\{\g&amp;lt;expression&amp;gt;+\}){0}
        (?&amp;lt;squarebrackets&amp;gt;\[\g&amp;lt;expression&amp;gt;+\]){0}
        (?&amp;lt;parentheses&amp;gt;\(\g&amp;lt;expression&amp;gt;+\)){0}
        (?&amp;lt;brackets&amp;gt;\g&amp;lt;braces&amp;gt;|\g&amp;lt;squarebrackets&amp;gt;|\g&amp;lt;parentheses&amp;gt;)
}x

str =~ re&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1048; &#1103; &#1085;&#1077; &#1089;&#1084;&#1086;&#1075; &#1076;&#1086;&#1078;&#1076;&#1072;&#1090;&#1100;&#1089;&#1103; &#1079;&#1072;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1080;&#1103; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099; &#1086;&#1087;&#1077;&#1088;&#1072;&#1090;&#1086;&#1088;&#1072; &lt;b&gt;=~&lt;/b&gt; &#1076;&#1083;&#1103; &#1090;&#1072;&#1082;&#1086;&#1075;&#1086; &#1076;&#1083;&#1080;&#1085;&#1085;&#1086;&#1075;&#1086; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1103;. &#1069;&#1090;&#1086;, &#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086;, &#1085;&#1077;&#1087;&#1088;&#1080;&#1103;&#1090;&#1085;&#1086;. &#1042; &#1087;&#1088;&#1080;&#1095;&#1080;&#1085;&#1099; &#1103; &#1074;&#1085;&#1080;&#1082;&#1072;&#1083; &#1085;&#1077; &#1086;&#1089;&#1086;&#1073;&#1086;, &#1085;&#1086; &#1087;&#1086;&#1093;&#1086;&#1078;&#1077;, &#1101;&#1090;&#1086; &#1089;&#1074;&#1103;&#1079;&#1072;&#1085;&#1086; &#1089; &#1087;&#1086;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077;&#1084; &#1085;&#1077;&#1076;&#1077;&#1090;&#1077;&#1088;&#1084;&#1080;&#1085;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1086;&#1081; &#1084;&#1072;&#1096;&#1080;&#1085;&#1099; &#1058;&#1100;&#1102;&#1088;&#1080;&#1085;&#1075;&#1072;. &#1055;&#1086; &#1082;&#1088;&#1072;&#1081;&#1085;&#1077;&#1081; &#1084;&#1077;&#1088;&#1077; &#1074;&#1086;&#1090; &lt;a href="http://redmine.ruby-lang.org/issues/3679"&gt;&#1086;&#1090;&#1074;&#1077;&#1090; &#1085;&#1072; &#1087;&#1086;&#1093;&#1086;&#1078;&#1091;&#1102; &#1087;&#1088;&#1086;&#1073;&#1083;&#1077;&#1084;&#1091;&lt;/a&gt;. &#1044;&#1083;&#1103; &#1085;&#1072;&#1089; &#1101;&#1090;&#1086; &#1074;&#1089;&#1077;&#1075;&#1086; &#1083;&#1080;&#1096;&#1100; &#1086;&#1079;&#1085;&#1072;&#1095;&#1072;&#1077;&#1090;, &#1095;&#1090;&#1086; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1103;&#1090;&#1100; &#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1100;&#1085;&#1086;&#1089;&#1090;&#1100; &#1088;&#1072;&#1089;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080; &#1089;&#1082;&#1086;&#1073;&#1086;&#1082; &#1085;&#1091;&#1078;&#1085;&#1086; &#1086;&#1090;&#1076;&#1077;&#1083;&#1100;&#1085;&#1086; &#1080; &#1076;&#1088;&#1091;&#1075;&#1080;&#1084; &#1089;&#1087;&#1086;&#1089;&#1086;&#1073;&#1086;&#1084;. &#1063;&#1077;&#1084; &#1103; &#1087;&#1088;&#1077;&#1076;&#1083;&#1072;&#1075;&#1072;&#1102; &#1079;&#1072;&#1085;&#1103;&#1090;&#1100;&#1089;&#1103; &#1087;&#1099;&#1090;&#1083;&#1080;&#1074;&#1086;&#1084;&#1091; &#1095;&#1080;&#1090;&#1072;&#1090;&#1077;&#1083;&#1102; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;.&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="https://github.com/lonelyelk/lonelyelk_code/tree/master/recursive_regexp"&gt;&#1048;&#1089;&#1093;&#1086;&#1076;&#1085;&#1099;&#1081; &#1082;&#1086;&#1076; &#1089;&#1090;&#1072;&#1090;&#1100;&#1080;&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.igvita.com/2011/02/03/new-ruby-19-features-tips-tricks/"&gt;&#1053;&#1086;&#1074;&#1099;&#1081; &#1089;&#1080;&#1085;&#1090;&#1072;&#1082;&#1089;&#1080;&#1089; &#1080; &#1087;&#1088;&#1086;&#1095;&#1080;&#1077; &#1074;&#1082;&#1091;&#1089;&#1085;&#1103;&#1096;&#1082;&#1080; &#1074; &#1088;&#1091;&#1073;&#1080; 1.9&lt;/a&gt;. &#1044;&#1083;&#1103; &#1090;&#1077;&#1093;, &#1082;&#1090;&#1086; &#1079;&#1072;&#1084;&#1077;&#1090;&#1080;&#1083; &lt;b&gt;=-&amp;gt;&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://jimneath.org/2010/01/04/cryptic-ruby-global-variables-and-their-meanings.html"&gt;&#1043;&#1083;&#1086;&#1073;&#1072;&#1083;&#1100;&#1085;&#1099;&#1077; &#1087;&#1077;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1099;&#1077; &#1089; &#1085;&#1077;&#1087;&#1086;&#1085;&#1103;&#1090;&#1085;&#1099;&#1084;&#1080; &#1080;&#1084;&#1077;&#1085;&#1072;&#1084;&#1080;&lt;/a&gt;. &#1044;&#1083;&#1103; &#1090;&#1077;&#1093;, &#1082;&#1090;&#1086; &#1079;&#1072;&#1084;&#1077;&#1090;&#1080;&#1083; &lt;b&gt;$~&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.regular-expressions.info/ruby.html"&gt;&#1045;&#1097;&#1105; &#1085;&#1077;&#1084;&#1085;&#1086;&#1075;&#1086; &#1073;&#1072;&#1079;&#1086;&#1074;&#1099;&#1093; &#1087;&#1088;&#1080;&#1105;&#1084;&#1086;&#1074; &#1074; &#1088;&#1077;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1074;&#1099;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1103;&#1093; &#1088;&#1091;&#1073;&#1080;&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/42</id>
    <published>2010-11-05T10:18:11+00:00</published>
    <updated>2010-11-05T10:18:11+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/42"/>
    <title>&#1056;&#1086;&#1090;&#1072;&#1094;&#1080;&#1103; &#1083;&#1086;&#1075;&#1086;&#1074; &#1088;&#1077;&#1083;&#1100;&#1089;&#1086;&#1074;&#1086;&#1075;&#1086; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103;</title>
    <content type="html">&lt;p&gt;&lt;img alt="hay roller" height="337" src="http://lonelyelk.ru/images/uploads/0000/0021/hay_roller.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1042;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1069;&#1090;&#1086; &#1091;&#1078;&#1077; &#1076;&#1072;&#1074;&#1085;&#1086; &#1080;&#1079;&#1074;&#1077;&#1089;&#1090;&#1085;&#1072;&#1103; &#1090;&#1077;&#1084;&#1072;, &#1080; &#1103; &#1085;&#1077; &#1087;&#1088;&#1077;&#1090;&#1077;&#1085;&#1076;&#1091;&#1102; &#1085;&#1072; &#1086;&#1090;&#1082;&#1088;&#1099;&#1090;&#1080;&#1077; &#1040;&#1084;&#1077;&#1088;&#1080;&#1082;&#1080;, &#1085;&#1086; &#1076;&#1083;&#1103; &#1089;&#1077;&#1073;&#1103; &#1079;&#1072;&#1092;&#1080;&#1082;&#1089;&#1080;&#1088;&#1091;&#1102; &#1101;&#1090;&#1086; &#1079;&#1085;&#1072;&#1085;&#1080;&#1077;.&lt;/p&gt;&lt;p&gt;&#1044;&#1072;&#1078;&#1077; &#1077;&#1089;&#1083;&#1080; &#1074;&#1099; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090;&#1077; &#1082;&#1072;&#1087;&#1080;&#1089;&#1090;&#1088;&#1072;&#1085;&#1086; &#1076;&#1083;&#1103; &#1074;&#1099;&#1082;&#1083;&#1072;&#1076;&#1099;&#1074;&#1072;&#1085;&#1080;&#1103; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1072; &#1074; &#1089;&#1077;&#1090;&#1100;, &#1083;&#1086;&#1075;&#1080; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103; &#1093;&#1088;&#1072;&#1085;&#1103;&#1090;&#1089;&#1103; &#1074; &#1086;&#1076;&#1085;&#1086;&#1084; &#1080; &#1090;&#1086;&#1084; &#1078;&#1077; &#1084;&#1077;&#1089;&#1090;&#1077; (&#1087;&#1072;&#1087;&#1082;&#1072; &lt;i&gt;shared/log&lt;/i&gt; &#1080; &#1088;&#1072;&#1079;&#1088;&#1072;&#1089;&#1090;&#1072;&#1102;&#1090;&#1089;&#1103; &#1076;&#1086; &#1086;&#1075;&#1088;&#1086;&#1084;&#1085;&#1099;&#1093; &#1088;&#1072;&#1079;&#1084;&#1077;&#1088;&#1086;&#1074;. &#1052;&#1086;&#1078;&#1085;&#1086;, &#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086;, &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1090;&#1100; &#1087;&#1086;&#1089;&#1083;&#1077; &#1082;&#1072;&#1078;&#1076;&#1086;&#1075;&#1086; &#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1072; &#1082;&#1086;&#1084;&#1084;&#1072;&#1085;&#1076;&#1091;: &lt;/p&gt;&lt;pre&gt;&lt;code&gt;rake log:clear&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1053;&#1086; &#1077;&#1089;&#1090;&#1100; &#1073;&#1086;&#1083;&#1077;&#1077; &#1094;&#1080;&#1074;&#1080;&#1083;&#1080;&#1079;&#1086;&#1074;&#1072;&#1085;&#1085;&#1099;&#1077; &#1084;&#1077;&#1090;&#1086;&#1076;&#1099;. &#1058;&#1077;&#1084; &#1073;&#1086;&#1083;&#1077;&#1077;, &#1087;&#1086;&#1089;&#1083;&#1077; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1105;&#1085;&#1085;&#1086;&#1075;&#1086; &#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1080; &#1082;&#1086;&#1076; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1072; &#1085;&#1072;&#1095;&#1080;&#1085;&#1072;&#1077;&#1090; &#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1103;&#1090;&#1100;&#1089;&#1103; &#1074;&#1089;&#1105; &#1088;&#1077;&#1078;&#1077; &#1080; &#1088;&#1077;&#1078;&#1077;.&lt;/p&gt;&lt;h2&gt;&#1057; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1099;&lt;/h2&gt;&lt;p&gt;&#1057;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090; &#1087;&#1088;&#1077;&#1082;&#1088;&#1072;&#1089;&#1085;&#1099;&#1081; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1085;&#1099;&#1081; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1084;&#1077;&#1085;&#1090;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1085;&#1072;&#1079;&#1074;&#1072;&#1077;&#1090;&#1089;&#1103; &lt;b&gt;logrotate&lt;/b&gt;. &#1057; &#1077;&#1075;&#1086; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1072;&#1088;&#1093;&#1080;&#1074;&#1080;&#1088;&#1091;&#1102;&#1090;&#1089;&#1103; &#1083;&#1086;&#1075;&#1080; &#1072;&#1087;&#1072;&#1095;&#1072;, &#1073;&#1072;&#1079; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093; &#1080; &#1076;&#1072;&#1078;&#1077; &#1084;&#1077;&#1085;&#1077;&#1076;&#1078;&#1077;&#1088;&#1072; &#1087;&#1072;&#1082;&#1077;&#1090;&#1086;&#1074;.&lt;/p&gt;&lt;p&gt;&#1063;&#1090;&#1086;&#1073;&#1099; &#1086;&#1088;&#1075;&#1072;&#1085;&#1080;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1101;&#1090;&#1086; &#1091;&#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1089;&#1090;&#1074;&#1080;&#1077; &#1076;&#1083;&#1103; &#1089;&#1074;&#1086;&#1077;&#1075;&#1086; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1072; &#1085;&#1091;&#1078;&#1085;&#1086; &#1089;&#1086;&#1079;&#1076;&#1072;&#1090;&#1100; &#1092;&#1072;&#1081;&#1083; &lt;b&gt;/etc/logrotate.d/my_project&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;/path/to/my_project/shared/log/*.log {
  weekly
  missingok
  rotate 10
  nomail
  compress
  delaycompress
  sharedscripts
  postrotate
    touch /path/to/my_project/current/tmp/restart.txt
  endscript
}&lt;/code&gt;&lt;/pre&gt;&lt;ol&gt;&lt;lh&gt;&#1047;&#1076;&#1077;&#1089;&#1100; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085;&#1086;:&lt;/lh&gt;&lt;li&gt;&lt;i&gt;weekly&lt;/i&gt;&amp;nbsp;&amp;#151; &#1088;&#1072;&#1079;&#1073;&#1080;&#1074;&#1072;&#1090;&#1100; &#1083;&#1086;&#1075; &#1077;&#1078;&#1077;&#1085;&#1077;&#1076;&#1077;&#1083;&#1100;&#1085;&#1086;;&lt;/li&gt;&lt;li&gt;&lt;i&gt;missingok&lt;/i&gt;&amp;nbsp;&amp;#151; &#1085;&#1077; &#1074;&#1099;&#1093;&#1086;&#1076;&#1080;&#1090;&#1100; &#1089; &#1086;&#1096;&#1080;&#1073;&#1082;&#1086;&#1081;, &#1077;&#1089;&#1083;&#1080; &#1092;&#1072;&#1081;&#1083;&#1072; &#1085;&#1077;&#1090;;&lt;/li&gt;&lt;li&gt;&lt;i&gt;rotate 10&lt;/i&gt;&amp;nbsp;&amp;#151; &#1093;&#1088;&#1072;&#1085;&#1080;&#1090;&#1100; 10 &#1087;&#1088;&#1077;&#1076;&#1099;&#1076;&#1091;&#1097;&#1080;&#1093; &#1090;&#1086;&#1084;&#1086;&#1074;;&lt;/li&gt;&lt;li&gt;&lt;i&gt;nomail&lt;/i&gt;&amp;nbsp;&amp;#151; &#1085;&#1077; &#1074;&#1099;&#1089;&#1099;&#1083;&#1072;&#1090;&#1100; &#1091;&#1076;&#1072;&#1083;&#1103;&#1077;&#1084;&#1099;&#1077; &#1090;&#1086;&#1084;&#1072; &#1085;&#1072; &#1101;&#1083;&#1077;&#1082;&#1090;&#1088;&#1086;&#1085;&#1085;&#1091;&#1102; &#1087;&#1086;&#1095;&#1090;&#1091;;&lt;/li&gt;&lt;li&gt;&lt;i&gt;compress&lt;/i&gt;&amp;nbsp;&amp;#151; &#1072;&#1088;&#1093;&#1080;&#1074;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100;;&lt;/li&gt;&lt;li&gt;&lt;i&gt;delaycompress&lt;/i&gt;&amp;nbsp;&amp;#151; &#1072;&#1088;&#1093;&#1080;&#1074;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1085;&#1077; &#1089;&#1088;&#1072;&#1079;&#1091;, &#1090;.&#1082;. &#1087;&#1086;&#1089;&#1083;&#1077; &#1087;&#1077;&#1088;&#1077;&#1080;&#1084;&#1077;&#1085;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1092;&#1072;&#1081;&#1083;&#1072; &#1080; &#1076;&#1086; &#1087;&#1077;&#1088;&#1077;&#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072; &#1087;&#1101;&#1089;&#1089;&#1077;&#1085;&#1076;&#1078;&#1077;&#1088;&#1072; &#1083;&#1086;&#1075;&#1080; &#1087;&#1080;&#1096;&#1091;&#1090;&#1089;&#1103; &#1074; &#1090;&#1086;&#1090; &#1078;&#1077; &#1087;&#1077;&#1088;&#1077;&#1080;&#1084;&#1077;&#1085;&#1086;&#1074;&#1072;&#1085;&#1085;&#1099;&#1081; &#1092;&#1072;&#1081;&#1083;;&lt;/li&gt;&lt;li&gt;&lt;i&gt;sharedscripts&lt;/i&gt;&amp;nbsp;&amp;#151; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1090;&#1100; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090; &#1086;&#1076;&#1080;&#1085; &#1088;&#1072;&#1079; &#1076;&#1083;&#1103; &#1074;&#1089;&#1077;&#1093; &#1083;&#1086;&#1075;&#1086;&#1074; &#1087;&#1086; &#1084;&#1072;&#1089;&#1082;&#1077;;&lt;/li&gt;&lt;li&gt;&lt;i&gt;postrotate...endscript&lt;/i&gt;&amp;nbsp;&amp;#151; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1085;&#1091;&#1078;&#1085;&#1086; &#1079;&#1072;&#1087;&#1091;&#1089;&#1090;&#1080;&#1090;&#1100; &#1087;&#1086;&#1089;&#1083;&#1077; &#1088;&#1086;&#1090;&#1072;&#1094;&#1080;&#1080;: &#1074; &#1076;&#1072;&#1085;&#1085;&#1086;&#1084; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1087;&#1077;&#1088;&#1077;&#1079;&#1072;&#1087;&#1091;&#1089;&#1090;&#1080;&#1090;&#1100; &#1087;&#1101;&#1089;&#1089;&#1077;&#1085;&#1076;&#1078;&#1077;&#1088;.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/ol&gt;&lt;p&gt;&#1060;&#1072;&#1081;&#1083;&#1086;&#1084; &#1076;&#1086;&#1083;&#1078;&#1077;&#1085; &#1074;&#1083;&#1072;&#1076;&#1077;&#1090;&#1100; &lt;i&gt;root:root&lt;/i&gt;. &#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1084;&#1086;&#1078;&#1085;&#1086; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1080;&#1090;&#1100; &#1080; &#1079;&#1072;&#1087;&#1091;&#1089;&#1090;&#1080;&#1090;&#1100; &#1087;&#1088;&#1080;&#1085;&#1091;&#1076;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;, &#1091;&#1073;&#1077;&#1076;&#1080;&#1074;&#1096;&#1080;&#1089;&#1100;, &#1095;&#1090;&#1086; &#1085;&#1072;&#1096; &#1092;&#1072;&#1081;&#1083; &#1074;&#1082;&#1083;&#1102;&#1095;&#1072;&#1077;&#1090;&#1089;&#1103; &#1074; &#1086;&#1073;&#1097;&#1080;&#1081; &#1089;&#1087;&#1080;&#1089;&#1086;&#1082;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;sudo logrotate -dv /etc/logrotate.conf
sudo logrotate -fv /etc/logrotate.conf&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;&#1057; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1088;&#1091;&#1073;&#1080;&lt;/h2&gt;&lt;p&gt;&#1042; &#1088;&#1091;&#1073;&#1080; &#1077;&#1089;&#1090;&#1100; &#1074;&#1089;&#1090;&#1088;&#1086;&#1077;&#1085;&#1085;&#1099;&#1081; &#1084;&#1077;&#1090;&#1086;&#1076; &#1088;&#1086;&#1090;&#1072;&#1094;&#1080;&#1080; &#1083;&#1086;&#1075;&#1086;&#1074;. &#1044;&#1086;&#1089;&#1090;&#1072;&#1090;&#1086;&#1095;&#1085;&#1086; &#1074; &#1092;&#1072;&#1081;&#1077; &lt;b&gt;config/environment.rb&lt;/b&gt; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1074;&#1085;&#1091;&#1090;&#1088;&#1080; &#1073;&#1083;&#1086;&#1082;&#1072; &lt;i&gt;Rails::Initializer.run&lt;/i&gt; &#1086;&#1076;&#1080;&#1085; &#1080;&#1079; &#1074;&#1072;&#1088;&#1080;&#1072;&#1085;&#1090;&#1086;&#1074;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;config.logger = Logger.new(config.log_path, &amp;quot;weekly&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1080;&#1083;&#1080;&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;config.logger = Logger.new(config.log_path, 10, 1.megabyte)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1055;&#1077;&#1088;&#1074;&#1099;&#1081; &#1074;&#1072;&#1088;&#1080;&#1072;&#1085;&#1090; &#1086;&#1089;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1083;&#1103;&#1077;&#1090; &#1088;&#1086;&#1090;&#1072;&#1094;&#1080;&#1102; &#1088;&#1072;&#1079; &#1074; &#1085;&#1077;&#1076;&#1077;&#1083;&#1102;, &#1072; &#1074;&#1090;&#1086;&#1088;&#1086;&#1081;&amp;nbsp;&amp;#151; &#1087;&#1086; &#1076;&#1086;&#1089;&#1090;&#1080;&#1078;&#1077;&#1085;&#1080;&#1080; &#1092;&#1072;&#1081;&#1083;&#1086;&#1084; &#1088;&#1072;&#1079;&#1084;&#1077;&#1088;&#1072; &#1074; 1 &#1084;&#1077;&#1075;&#1072;&#1073;&#1072;&#1081;&#1090; &#1080; &#1093;&#1088;&#1072;&#1085;&#1080;&#1090; 10 &#1089;&#1090;&#1072;&#1088;&#1099;&#1093; &#1090;&#1086;&#1084;&#1086;&#1074;. &#1058;&#1086;&#1083;&#1100;&#1082;&#1086; &#1074; &#1076;&#1072;&#1085;&#1085;&#1086;&#1084; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1072;&#1088;&#1093;&#1080;&#1074;&#1072;&#1094;&#1080;&#1102;, &#1077;&#1089;&#1083;&#1080; &#1086;&#1085;&#1072; &#1085;&#1091;&#1078;&#1085;&#1072;, &#1087;&#1088;&#1080;&#1076;&#1105;&#1090;&#1089;&#1103; &#1086;&#1088;&#1075;&#1072;&#1085;&#1080;&#1079;&#1086;&#1074;&#1099;&#1074;&#1072;&#1090;&#1100; &#1086;&#1090;&#1076;&#1077;&#1083;&#1100;&#1085;&#1086;.&lt;/p&gt;&lt;h2&gt;&#1041;&#1099;&#1083;&#1086; &#1073;&#1099; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1086;&lt;/h2&gt;&lt;p&gt;&#1044;&#1083;&#1103; &#1083;&#1086;&#1075;&#1088;&#1086;&#1090;&#1077;&#1081;&#1090; &#1084;&#1086;&#1078;&#1085;&#1086; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1090;&#1072;&#1082;&#1091;&#1102; &#1084;&#1072;&#1089;&#1082;&#1091;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1072;&#1103; &#1073;&#1099; &#1074;&#1082;&#1083;&#1102;&#1095;&#1072;&#1083;&#1072; &#1074; &#1089;&#1077;&#1073;&#1103; &#1074;&#1089;&#1077; &#1083;&#1086;&#1075;&#1080; &#1074;&#1089;&#1077;&#1093; &#1088;&#1077;&#1083;&#1100;&#1089;&#1086;&#1074;&#1099;&#1093; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1086;&#1074;. &#1053;&#1086; &#1084;&#1085;&#1077; &#1085;&#1077;&#1080;&#1079;&#1074;&#1077;&#1089;&#1090;&#1077;&#1085; &#1089;&#1087;&#1086;&#1089;&#1086;&#1073; &#1087;&#1086;&#1090;&#1086;&#1084; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1090;&#1072;&#1082;&#1086;&#1081; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1073;&#1099; &#1087;&#1077;&#1088;&#1077;&#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1083; &#1080;&#1084;&#1077;&#1085;&#1085;&#1086; &#1090;&#1077; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1099;, &#1076;&#1083;&#1103; &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1093; &#1073;&#1099;&#1083;&#1072; &#1089;&#1076;&#1077;&#1083;&#1072;&#1085;&#1072; &#1088;&#1086;&#1090;&#1072;&#1094;&#1080;&#1103;. &#1053;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1077;&#1089;&#1083;&#1080; &#1083;&#1086;&#1075;&#1088;&#1086;&#1090;&#1101;&#1081;&#1090; &#1085;&#1077; &#1085;&#1072;&#1096;&#1105;&#1083; &#1085;&#1091;&#1078;&#1085;&#1086;&#1075;&#1086; &#1092;&#1072;&#1081;&#1083;&#1072;, &#1090;&#1086; &#1080; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090; &#1085;&#1077; &#1079;&#1072;&#1087;&#1091;&#1089;&#1090;&#1080;&#1090;. &#1040; &#1077;&#1089;&#1083;&#1080; &#1084;&#1099; &#1091;&#1082;&#1072;&#1079;&#1099;&#1074;&#1072;&#1077;&#1084; &#1087;&#1091;&#1090;&#1100; &#1090;&#1080;&#1087;&#1072; &lt;i&gt;/path/to/**/shared/*.log&lt;/i&gt;, &#1090;&#1086; &#1080; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090; &#1076;&#1086;&#1083;&#1078;&#1077;&#1085; &#1087;&#1077;&#1088;&#1077;&#1073;&#1080;&#1088;&#1072;&#1090;&#1100; &#1074;&#1089;&#1077; &#1101;&#1090;&#1080; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1099; &#1080; &#1089;&#1086;&#1079;&#1076;&#1072;&#1074;&#1072;&#1090;&#1100; &#1080;&#1083;&#1080; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1084;&#1077;&#1085;&#1103;&#1090;&#1100; &#1076;&#1072;&#1090;&#1091; &#1088;&#1077;&#1076;&#1072;&#1082;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074; &lt;i&gt;restart.txt&lt;/i&gt;. &#1048;&#1083;&#1080; &#1084;&#1086;&#1078;&#1085;&#1086; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1087;&#1077;&#1088;&#1077;&#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1090;&#1100; &#1072;&#1087;&#1072;&#1095;.&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://linuxcommand.org/man_pages/logrotate8.html"&gt;&#1044;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1103; logrotate&lt;/a&gt; (&lt;a href="http://www.opennet.ru/man.shtml?topic=logrotate&amp;category=8&amp;russian=0"&gt;&#1087;&#1086;-&#1088;&#1091;&#1089;&#1089;&#1082;&#1080;&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://maintainablesoftware.com/articles/rails_logging_tips"&gt;&#1063;&#1090;&#1086; &#1077;&#1097;&#1105; &#1084;&#1086;&#1078;&#1085;&#1086; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1089; &#1083;&#1086;&#1075;&#1072;&#1084;&#1080; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103; &#1085;&#1072; &#1088;&#1077;&#1083;&#1100;&#1089;&#1072;&#1093;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/41</id>
    <published>2010-10-20T16:20:11+00:00</published>
    <updated>2010-10-20T16:20:11+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/41"/>
    <title>&#1054;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1077;&#1085;&#1080;&#1077;, &#1079;&#1072;&#1087;&#1091;&#1097;&#1077;&#1085; &#1083;&#1080; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;</title>
    <content type="html">&lt;h2&gt;&#1055;&#1088;&#1086;&#1083;&#1086;&#1075;&lt;/h2&gt;&lt;p&gt;&#1054;&#1075;&#1086;! &#1059;&#1078;&#1077; &#1090;&#1088;&#1080; &#1084;&#1077;&#1089;&#1103;&#1094;&#1072; &#1103; &#1085;&#1080;&#1095;&#1077;&#1075;&#1086; &#1085;&#1077; &#1087;&#1080;&#1089;&#1072;&#1083; &#1074; &#1101;&#1090;&#1086;&#1090; &#1073;&#1083;&#1086;&#1075;! &#1051;&#1077;&#1090;&#1086; &#1074;&#1099;&#1076;&#1072;&#1083;&#1086;&#1089;&#1100; &#1078;&#1072;&#1088;&#1082;&#1086;&#1077; &#1085;&#1077; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1085;&#1072; &#1087;&#1086;&#1075;&#1086;&#1076;&#1091;. &#1055;&#1086;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1091; &#1083;&#1077;&#1090;&#1086;&#1084; &#1087;&#1086;&#1075;&#1086;&#1076;&#1072; &#1083;&#1091;&#1095;&#1096;&#1077;, &#1072; &#1089;&#1074;&#1077;&#1090;&#1086;&#1074;&#1086;&#1081; &#1076;&#1077;&#1085;&#1100; &#1076;&#1083;&#1080;&#1085;&#1085;&#1077;&#1077;, &#1073;&#1099;&#1083;&#1086; &#1084;&#1085;&#1086;&#1075;&#1086; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099;. &#1055;&#1088;&#1080;&#1095;&#1105;&#1084; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099; &#1089;&#1074;&#1103;&#1079;&#1072;&#1085;&#1085;&#1086;&#1081; &#1089; &#1087;&#1086;&#1076;&#1076;&#1077;&#1088;&#1078;&#1082;&#1086;&#1081; &#1090;&#1086;&#1075;&#1086;, &#1095;&#1090;&#1086; &#1091;&#1078;&#1077; &#1080; &#1090;&#1072;&#1082; &#1085;&#1086;&#1088;&#1084;&#1072;&#1083;&#1100;&#1085;&#1086; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1086;&#1085;&#1080;&#1088;&#1086;&#1074;&#1072;&#1083;&#1086; &#1074; &#1087;&#1088;&#1086;&#1096;&#1083;&#1086;&#1084; &#1089;&#1077;&#1079;&#1086;&#1085;&#1077;. &#1053;&#1080;&#1095;&#1077;&#1075;&#1086; &#1089;&#1077;&#1088;&#1100;&#1105;&#1079;&#1085;&#1086; &#1085;&#1086;&#1074;&#1086;&#1075;&#1086; &#1085;&#1077; &#1087;&#1080;&#1089;&#1072;&#1083;&#1086;&#1089;&#1100; &#1072;&#1082;&#1090;&#1080;&#1074;&#1085;&#1086;, &#1072; &#1079;&#1085;&#1072;&#1095;&#1080;&#1090; &#1080; &#1079;&#1072;&#1093;&#1074;&#1072;&#1090;&#1099;&#1074;&#1072;&#1102;&#1097;&#1080;&#1093; &#1089;&#1102;&#1078;&#1077;&#1090;&#1086;&#1074; &#1076;&#1083;&#1103; &#1089;&#1090;&#1072;&#1090;&#1077;&#1081; &#1085;&#1077; &#1085;&#1072;&#1093;&#1086;&#1076;&#1080;&#1083;&#1086;&#1089;&#1100;.&lt;/p&gt;&lt;p&gt;&#1053;&#1086; &#1090;&#1077;&#1087;&#1077;&#1088;&#1100; &#1091; &#1084;&#1077;&#1085;&#1103; &#1087;&#1086;&#1103;&#1074;&#1080;&#1083;&#1072;&#1089;&#1100; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1100; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1082;&#1086;&#1077;-&#1095;&#1090;&#1086; &#1085;&#1086;&#1074;&#1086;&#1077;. &#1055;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1077;&#1089;&#1090;&#1100;, &#1095;&#1090;&#1086; &#1088;&#1072;&#1089;&#1089;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100;.&lt;/p&gt;&lt;p&gt;&lt;img alt="to feed or not to feed" height="337" src="http://lonelyelk.ru/images/uploads/0000/0019/tofeedornottofeed.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1042;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1045;&#1089;&#1083;&#1080; &#1074;&#1099; &#1083;&#1102;&#1073;&#1080;&#1090;&#1077; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1099;-&#1076;&#1077;&#1084;&#1086;&#1085;&#1099;, &#1082;&#1072;&#1082; &#1083;&#1102;&#1073;&#1083;&#1102; &#1080;&#1093; &#1103;, &#1090;&#1086;, &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;, &#1087;&#1077;&#1088;&#1077;&#1076; &#1074;&#1072;&#1084;&#1080; &#1091;&#1078;&#1077; &#1074;&#1086;&#1079;&#1085;&#1080;&#1082;&#1072;&#1083;&#1072; &#1079;&#1072;&#1076;&#1072;&#1095;&#1072; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1080;&#1090;&#1100;, &#1079;&#1072;&#1087;&#1091;&#1097;&#1077;&#1085; &#1083;&#1080; &#1091;&#1078;&#1077; &#1090;&#1072;&#1082;&#1086;&#1081; &#1076;&#1077;&#1084;&#1086;&#1085;, &#1087;&#1077;&#1088;&#1077;&#1076; &#1090;&#1077;&#1084; &#1082;&#1072;&#1082; &#1089;&#1086;&#1079;&#1076;&#1072;&#1074;&#1072;&#1090;&#1100; &#1076;&#1086;&#1095;&#1077;&#1088;&#1085;&#1080;&#1081; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;. &#1054;&#1073; &#1101;&#1090;&#1086;&#1084; &#1080; &#1073;&#1091;&#1076;&#1077;&#1090; &#1089;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103;&#1096;&#1085;&#1103;&#1103; &#1089;&#1090;&#1072;&#1090;&#1100;&#1103;.&lt;/p&gt;&lt;h2&gt;&#1041;&#1072;&#1096; &#1074; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&lt;/h2&gt;&lt;p&gt;&#1055;&#1088;&#1077;&#1076;&#1087;&#1086;&#1083;&#1086;&#1078;&#1080;&#1084;, &#1095;&#1090;&#1086; &#1091; &#1085;&#1072;&#1089; &#1077;&#1089;&#1090;&#1100; &#1087;&#1088;&#1086;&#1089;&#1090;&#1077;&#1081;&#1096;&#1080;&#1081; &#1076;&#1077;&#1084;&#1086;&#1085;. &#1061;&#1086;&#1088;&#1086;&#1096;&#1086; &#1073;&#1099; &#1080;&#1084;&#1103; &#1091; &#1085;&#1077;&#1075;&#1086; &#1073;&#1099;&#1083;&#1086; &#1091;&#1085;&#1080;&#1082;&#1072;&#1083;&#1100;&#1085;&#1086;&#1077;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1084;&#1086;&#1078;&#1085;&#1086; &#1077;&#1075;&#1086; &#1087;&#1086;&#1090;&#1086;&#1084; &#1073;&#1099;&#1083;&#1086; &#1086;&#1090;&#1099;&#1089;&#1082;&#1072;&#1090;&#1100;. &#1060;&#1072;&#1081;&#1083; &lt;b&gt;uniq_name_simple_daemon&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;#!/usr/bin/env ruby

pid = fork do
  begin
    running = true
    Signal.trap(&amp;quot;TERM&amp;quot;) do
      running = false
    end
    while running
      sleep 0.01
    end
  rescue Exception =&amp;gt; e
    puts e.to_s
    puts e.backtrace.join &amp;quot;\n&amp;quot;
  ensure
    exit!
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1052;&#1099; &#1074;&#1089;&#1077;&#1075;&#1076;&#1072; &#1084;&#1086;&#1078;&#1077;&#1084; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1090;&#1100; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1076;&#1088;&#1091;&#1075;&#1086;&#1075;&#1086; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1072;, &#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088; &#1085;&#1072; &#1073;&#1072;&#1096;&#1077; (&lt;b&gt;simple_daemon_runner.sh&lt;/b&gt;):&lt;/p&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash

if ps ax | grep uniq_name_simple_daemon | grep -vq grep
then
  echo &amp;quot;uniq_name_simple_daemon is already running&amp;quot;
else
  echo &amp;quot;starting uniq_name_simple_daemon&amp;quot;
  ./uniq_name_simple_daemon
fi&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1053;&#1072; &#1087;&#1086;&#1076;&#1086;&#1073;&#1085;&#1086;&#1081; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1077; &#1073;&#1091;&#1076;&#1091;&#1090; &#1073;&#1072;&#1079;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103; &#1074;&#1089;&#1077; &#1085;&#1072;&#1096;&#1080; &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1091;&#1102;&#1097;&#1080;&#1077; &#1084;&#1077;&#1090;&#1086;&#1076;&#1099;. &#1058;&#1091;&#1090;, &#1077;&#1089;&#1083;&#1080; &#1082;&#1090;&#1086; &#1085;&#1077; &#1087;&#1086;&#1085;&#1103;&#1083;, &#1084;&#1099; &#1092;&#1080;&#1083;&#1100;&#1090;&#1088;&#1091;&#1077;&#1084; &#1074;&#1099;&#1074;&#1086;&#1076; &lt;i&gt;ps ax&lt;/i&gt; &#1089;&#1085;&#1072;&#1095;&#1072;&#1083;&#1072; &#1080;&#1097;&#1072; &#1090;&#1072;&#1084; &#1080;&#1084;&#1103; &#1085;&#1072;&#1096;&#1077;&#1075;&#1086; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1072;, &#1072; &#1079;&#1072;&#1090;&#1077;&#1084; &#1080;&#1089;&#1082;&#1083;&#1102;&#1095;&#1072;&#1103; &#1080;&#1079; &#1089;&#1087;&#1080;&#1089;&#1082;&#1072; &#1089;&#1072;&#1084; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089; &#1087;&#1086;&#1080;&#1089;&#1082;&#1072; (&#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1091; &lt;i&gt;grep&lt;/i&gt;). &#1050;&#1083;&#1102;&#1095; &lt;i&gt;q&lt;/i&gt; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1103;&#1077;&#1090; &#1085;&#1072;&#1084; &#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1090;&#1100; &#1082;&#1086;&#1076; &#1074;&#1099;&#1093;&#1086;&#1076;&#1072;, &#1085;&#1077; &#1074;&#1099;&#1074;&#1086;&#1076;&#1103; &#1085;&#1080;&#1095;&#1077;&#1075;&#1086; &#1085;&#1072; &#1101;&#1082;&#1088;&#1072;&#1085;. &#1058;&#1086; &#1077;&#1089;&#1090;&#1100; &#1077;&#1089;&#1083;&#1080; &#1089;&#1090;&#1088;&#1086;&#1095;&#1082;&#1072; &#1085;&#1072;&#1081;&#1076;&#1077;&#1085;&#1072;, &#1090;&#1086; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1077;&#1084; &#1087;&#1077;&#1088;&#1074;&#1099;&#1081; &#1073;&#1083;&#1086;&#1082;, &#1077;&#1089;&#1083;&#1080; &#1085;&#1077;&#1090;, &#1090;&#1086; &#1074;&#1090;&#1086;&#1088;&#1086;&#1081;.&lt;/p&gt;&lt;p&gt;&#1052;&#1086;&#1078;&#1085;&#1086; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1090;&#1072;&#1082;&#1086;&#1081; &#1078;&#1077; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090; &#1076;&#1083;&#1103; &#1086;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1072; (&lt;b&gt;simple_daemon_stopper.sh&lt;/b&gt;):&lt;/p&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash

pid=$(ps ax | grep uniq_name_simple_daemon | grep -v grep | awk &amp;#39;{ print $1; }&amp;#39;)

if [[ -n $pid ]]
then
  echo &amp;quot;stopping uniq_name_simple_daemon&amp;quot;
  kill -TERM $pid
else
  echo &amp;quot;nothing to stop&amp;quot;
fi&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1050;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086; &#1078;&#1077;, &#1087;&#1088;&#1080; &#1090;&#1072;&#1082;&#1086;&#1084; &#1088;&#1072;&#1089;&#1082;&#1083;&#1072;&#1076;&#1077; &#1074;&#1089;&#1077;&#1075;&#1076;&#1072; &#1077;&#1089;&#1090;&#1100; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1100; &#1079;&#1072;&#1087;&#1091;&#1089;&#1090;&#1080;&#1090;&#1100; &#1085;&#1072;&#1096;&#1077;&#1075;&#1086; &#1076;&#1077;&#1084;&#1086;&#1085;&#1072; &#1073;&#1077;&#1079; &#1087;&#1086;&#1084;&#1086;&#1097;&#1080; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1086;&#1074;. &#1048; &#1090;&#1086;&#1075;&#1076;&#1072; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1082;&#1072; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100;&#1089;&#1103; &#1085;&#1077; &#1073;&#1091;&#1076;&#1077;&#1090;. &#1042; &#1090;&#1072;&#1082;&#1086;&#1084; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1087;&#1086;&#1083;&#1077;&#1079;&#1085;&#1086; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1103;&#1090;&#1100;, &#1079;&#1072;&#1087;&#1091;&#1097;&#1077;&#1085; &#1083;&#1080; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089; &#1091;&#1078;&#1077; &#1074;&#1085;&#1091;&#1090;&#1088;&#1080; &#1089;&#1072;&#1084;&#1086;&#1075;&#1086; &#1088;&#1091;&#1073;&#1080;, &#1087;&#1077;&#1088;&#1077;&#1076; &#1090;&#1077;&#1084;, &#1082;&#1072;&#1082; &#1086;&#1090;&#1087;&#1086;&#1095;&#1082;&#1086;&#1074;&#1072;&#1090;&#1100; &#1076;&#1086;&#1095;&#1077;&#1088;&#1085;&#1080;&#1081; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;.&lt;/p&gt;&lt;h2&gt;&#1057;&#1072;&#1084; &#1089;&#1077;&#1073;&#1077; &#1093;&#1086;&#1079;&#1103;&#1080;&#1085;&lt;/h2&gt;&lt;p&gt;&#1042; &#1076;&#1072;&#1085;&#1085;&#1086;&#1084; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1079;&#1072;&#1076;&#1072;&#1095;&#1072; &#1089;&#1074;&#1086;&#1076;&#1080;&#1090;&#1089;&#1103; &#1082; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1082;&#1077; &#1085;&#1072;&#1083;&#1080;&#1095;&#1080;&#1103; &#1074; &#1087;&#1072;&#1084;&#1103;&#1090;&#1080; &#1077;&#1097;&#1105; &#1086;&#1076;&#1085;&#1086;&#1075;&#1086; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1072; &#1089; &#1090;&#1072;&#1082;&#1080;&#1084; &#1078;&#1077; &#1080;&#1084;&#1077;&#1085;&#1077;&#1084; &#1082;&#1088;&#1086;&#1084;&#1077; &#1090;&#1077;&#1082;&#1091;&#1097;&#1077;&#1075;&#1086;. &#1058;&#1072;&#1082; &#1078;&#1077; &#1085;&#1091;&#1078;&#1085;&#1086; &#1091;&#1084;&#1077;&#1090;&#1100; &#1086;&#1089;&#1090;&#1072;&#1085;&#1072;&#1074;&#1083;&#1080;&#1074;&#1072;&#1090;&#1100; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1090;&#1086;&#1075;&#1086; &#1078;&#1077; &#1092;&#1072;&#1081;&#1083;&#1072;. &#1042;&#1086;&#1090;, &#1082;&#1072;&#1082;&#1086;&#1077; &#1088;&#1077;&#1096;&#1077;&#1085;&#1080;&#1077; &#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1083;&#1086;&#1089;&#1100; &#1091; &#1084;&#1077;&#1085;&#1103; (&lt;b&gt;uniq_name_auto_daemon&lt;/b&gt;):&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;#!/usr/bin/env ruby

ps_ax = `ps ax | grep #{File.basename(__FILE__)} | grep -v grep`.split(&amp;quot;\n&amp;quot;).map{ |l| l.strip.split(/\s+/) }.reject{ |l| l[0].to_i == Process.pid }

if ps_ax.any?
  case ARGV[0]
    when /stop/i
      ps_ax.each do |l|
        system &amp;quot;kill -TERM #{l[0]}&amp;quot;
      end
    when /kill/i
      ps_ax.each do |l|
        system &amp;quot;kill -KILL #{l[0]}&amp;quot;
      end
    else
      puts &amp;quot;#{File.basename(__FILE__)} is already running. If you want to stop it, run &amp;#39;./#{File.basename(__FILE__)} stop|kill&amp;#39;&amp;quot;
  end
else
  pid = fork do
    begin
      running = true
      Signal.trap(&amp;quot;TERM&amp;quot;) do
        running = false
      end
      while running
        sleep 0.01
      end
    rescue Exception =&amp;gt; e
      puts e.to_s
      puts e.backtrace.join &amp;quot;\n&amp;quot;
    ensure
      exit!
    end
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1042;&#1086;-&#1087;&#1077;&#1088;&#1074;&#1099;&#1093;, &#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1089;&#1103; &#1086;&#1076;&#1085;&#1080;&#1084; &#1092;&#1072;&#1081;&#1083;&#1086;&#1084;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1085;&#1080;&#1082;&#1072;&#1082; &#1080;&#1085;&#1072;&#1095;&#1077; &#1085;&#1077; &#1079;&#1072;&#1087;&#1091;&#1089;&#1090;&#1080;&#1090;&#1100;. &#1042;&#1086;-&#1074;&#1090;&#1086;&#1088;&#1099;&#1093;, &#1085;&#1080;&#1075;&#1076;&#1077; &#1085;&#1077; &#1085;&#1091;&#1078;&#1085;&#1086; &#1093;&#1072;&#1088;&#1076;&#1082;&#1086;&#1076;&#1080;&#1090;&#1100; &#1077;&#1075;&#1086; &#1080;&#1084;&#1103;. &#1055;&#1086;-&#1084;&#1086;&#1077;&#1084;&#1091;, &#1086;&#1095;&#1077;&#1085;&#1100; &#1091;&#1076;&#1086;&#1073;&#1085;&#1086;.&lt;/p&gt;&lt;h2&gt;&#1054;&#1092;&#1092;&#1090;&#1086;&#1087;&#1080;&#1082;&lt;/h2&gt;&lt;p&gt;&#1057; &#1086;&#1076;&#1085;&#1086;&#1081; &#1089;&#1090;&#1086;&#1088;&#1086;&#1085;&#1099;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1103; &#1087;&#1080;&#1096;&#1091; &#1090;&#1077;&#1082;&#1089;&#1090;, &#1090;&#1086; &#1084;&#1085;&#1077; &#1091;&#1076;&#1086;&#1073;&#1085;&#1077;&#1077; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1074;&#1089;&#1077; &#1090;&#1077;&#1088;&#1084;&#1080;&#1085;&#1099; &#1087;&#1086;-&#1088;&#1091;&#1089;&#1089;&#1082;&#1080; &#1080; &#1089;&#1082;&#1083;&#1086;&#1085;&#1103;&#1090;&#1100; &#1080;&#1093;: &amp;laquo;&#1076;&#1077;&#1084;&#1086;&#1085;&#1099;&amp;raquo;, &amp;laquo;&#1088;&#1091;&#1073;&#1080;&amp;raquo;, &amp;laquo;&#1073;&#1072;&#1096;&amp;raquo;, &#1085;&#1086; &#1089; &#1076;&#1088;&#1091;&#1075;&#1086;&#1081; &#1089;&#1090;&#1086;&#1088;&#1086;&#1085;&#1099; &#1101;&#1090;&#1086; &#1085;&#1077; &#1087;&#1086;&#1084;&#1086;&#1078;&#1077;&#1090; &#1090;&#1086;&#1084;&#1091;, &#1082;&#1090;&#1086; &#1073;&#1091;&#1076;&#1077;&#1090; &#1080;&#1089;&#1082;&#1072;&#1090;&#1100; &#1088;&#1077;&#1096;&#1077;&#1085;&#1080;&#1077; &#1087;&#1086;&#1093;&#1086;&#1078;&#1077;&#1081; &#1079;&#1072;&#1076;&#1072;&#1095;&#1080;.&lt;/p&gt;&lt;p&gt;&#1042;&#1085;&#1091;&#1090;&#1088;&#1080; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088;&#1086;&#1074; &#1082;&#1086;&#1076;&#1072;&amp;nbsp;&amp;#151; &#1085;&#1072;&#1086;&#1073;&#1086;&#1088;&#1086;&#1090;, &#1091;&#1076;&#1086;&#1073;&#1085;&#1077;&#1077; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;&#1080; &#1080; &#1090;&#1077;&#1082;&#1089;&#1090;&#1099; &#1087;&#1086;-&#1072;&#1085;&#1075;&#1083;&#1080;&#1081;&#1089;&#1082;&#1080;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1085;&#1077; &#1087;&#1077;&#1088;&#1077;&#1082;&#1083;&#1102;&#1095;&#1072;&#1090;&#1100; &#1088;&#1072;&#1089;&#1082;&#1083;&#1072;&#1076;&#1082;&#1091;, &#1085;&#1086; &#1082;&#1072;&#1082;-&#1090;&#1086; &#1101;&#1090;&#1086; &#1085;&#1077; &#1086;&#1095;&#1077;&#1085;&#1100; &#1089;&#1086;&#1086;&#1090;&#1074;&#1077;&#1090;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090; &#1088;&#1091;&#1089;&#1089;&#1082;&#1086;&#1103;&#1079;&#1099;&#1095;&#1085;&#1086;&#1084; &#1073;&#1083;&#1086;&#1075;&#1091;.&lt;/p&gt;&lt;p&gt;&#1063;&#1090;&#1086; &#1078;&#1077; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100;? :)&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;p&gt;&lt;a href="http://github.com/lonelyelk/lonelyelk_code/tree/master/run_detect/"&gt;&#1055;&#1086;&#1083;&#1085;&#1099;&#1081; &#1082;&#1086;&#1076; &#1089;&#1090;&#1072;&#1090;&#1100;&#1080; &#1085;&#1072; &#1075;&#1080;&#1090;&#1093;&#1072;&#1073;&#1077;.&lt;/a&gt;&lt;/p&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/40</id>
    <published>2010-07-21T11:28:18+00:00</published>
    <updated>2010-07-21T11:28:18+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/40"/>
    <title>&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; LEGO NXT Mindstorms &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1090;&#1077;&#1083;&#1077;&#1092;&#1086;&#1085;&#1072; HTC Desire &#1085;&#1072; Android</title>
    <content type="html">&lt;p&gt;&lt;img alt="summer in the city" height="337" src="http://lonelyelk.ru/images/uploads/0000/0017/summerinthecity.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1042;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1051;&#1077;&#1090;&#1086; &#1074; &#1101;&#1090;&#1086;&#1084; &#1075;&#1086;&#1076;&#1091; &#1074;&#1099;&#1076;&#1072;&#1083;&#1086;&#1089;&#1100; &#1078;&#1072;&#1088;&#1082;&#1086;&#1077;, &#1085;&#1086; &#1087;&#1086;&#1082;&#1072; &#1085;&#1080; &#1086; &#1082;&#1072;&#1082;&#1080;&#1093; &#1086;&#1090;&#1087;&#1091;&#1089;&#1082;&#1072;&#1093; &#1088;&#1077;&#1095;&#1080; &#1085;&#1077; &#1080;&#1076;&#1105;&#1090;. &#1055;&#1086;&#1082;&#1072; &#1089;&#1086;&#1083;&#1085;&#1077;&#1095;&#1085;&#1086;, &#1090;&#1077;&#1087;&#1083;&#1086; &#1080; &#1089;&#1091;&#1093;&#1086;&amp;nbsp;&amp;#151; &#1089;&#1072;&#1084;&#1086;&#1077; &#1074;&#1088;&#1077;&#1084;&#1103; &#1089;&#1085;&#1080;&#1084;&#1072;&#1090;&#1100; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1099; &#1091;&#1083;&#1080;&#1094; (&#1080;&#1083;&#1080; &#1043;&#1088;&#1072;&#1076;&#1086;&#1043;&#1083;&#1103;&#1076;&#1098;, &#1082;&#1072;&#1082; &#1103; &#1101;&#1090;&#1086; &#1085;&#1072;&#1079;&#1099;&#1074;&#1072;&#1102;). &#1054;&#1076;&#1085;&#1072;&#1082;&#1086;, &#1085;&#1077; &#1089;&#1084;&#1086;&#1090;&#1088;&#1103; &#1085;&#1072; &#1093;&#1086;&#1088;&#1086;&#1096;&#1091;&#1102; &#1087;&#1083;&#1086;&#1090;&#1085;&#1086;&#1089;&#1090;&#1100; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099;, &#1085;&#1080;&#1095;&#1077;&#1075;&#1086; &#1087;&#1088;&#1080;&#1085;&#1094;&#1080;&#1087;&#1080;&#1072;&#1083;&#1100;&#1085;&#1086; &#1085;&#1086;&#1074;&#1086;&#1075;&#1086;, &#1086; &#1095;&#1105;&#1084; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1086; &#1073;&#1099;&#1083;&#1086; &#1073;&#1099; &#1088;&#1072;&#1089;&#1089;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100;, &#1085;&#1077; &#1087;&#1088;&#1086;&#1080;&#1079;&#1086;&#1096;&#1083;&#1086;. &#1055;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1103; &#1087;&#1086;&#1082;&#1072;&#1078;&#1091; &#1082;&#1086;&#1085;&#1094;&#1077;&#1087;&#1090;, &#1085;&#1072;&#1076; &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1084; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1102; &#1091;&#1078;&#1077; &#1082;&#1072;&#1082;&#1086;&#1077;-&#1090;&#1086; &#1074;&#1088;&#1077;&#1084;&#1103;, &#1080; &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1083;&#1077;&#1078;&#1080;&#1090; &#1074; &#1089;&#1090;&#1086;&#1088;&#1086;&#1085;&#1077; &#1086;&#1090; &#1084;&#1086;&#1080;&#1093; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1099;&#1093; &#1103;&#1079;&#1099;&#1082;&#1086;&#1074; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103;.&lt;/p&gt;&lt;h2&gt;&#1044;&#1080;&#1089;&#1090;&#1072;&#1085;&#1094;&#1080;&#1086;&#1085;&#1085;&#1086;&#1077; &#1091;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1048;&#1090;&#1072;&#1082;, &#1091; &#1084;&#1077;&#1085;&#1103; &#1091;&#1078;&#1077; &#1076;&#1072;&#1074;&#1085;&#1086; &#1077;&#1089;&#1090;&#1100; &#1082;&#1086;&#1085;&#1089;&#1090;&#1088;&#1091;&#1082;&#1090;&#1086;&#1088; LEGO Mindstorms, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1086; &#1073;&#1086;&#1076;&#1088;&#1086; &#1074;&#1079;&#1072;&#1080;&#1084;&#1086;&#1076;&#1077;&#1081;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090; &#1095;&#1077;&#1088;&#1077;&#1079; bluetooth &#1089; &#1082;&#1086;&#1084;&#1087;&#1100;&#1102;&#1090;&#1077;&#1088;&#1086;&#1084; &#1080;&#1083;&#1080; &#1089; &#1090;&#1072;&#1082;&#1080;&#1084; &#1078;&#1077; &#1082;&#1086;&#1085;&#1089;&#1090;&#1088;&#1091;&#1082;&#1090;&#1086;&#1088;&#1086;&#1084;.&lt;/p&gt;&lt;p&gt;&#1040; &#1074; &#1072;&#1087;&#1088;&#1077;&#1083;&#1077; &#1103; &#1086;&#1073;&#1085;&#1086;&#1074;&#1080;&#1083; &#1090;&#1077;&#1083;&#1077;&#1092;&#1086;&#1085; &#1085;&#1072; HTC Desire &#1087;&#1086;&#1076; &#1091;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077;&#1084; &#1086;&#1087;&#1077;&#1088;&#1072;&#1094;&#1080;&#1086;&#1085;&#1085;&#1086;&#1081; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1099; &#1040;&#1085;&#1076;&#1088;&#1086;&#1080;&#1076;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1072;&#1103; &#1091;&#1078;&#1077; &#1076;&#1072;&#1074;&#1085;&#1086; &#1087;&#1088;&#1080;&#1074;&#1083;&#1077;&#1082;&#1083;&#1072; &#1084;&#1086;&#1105; &#1074;&#1085;&#1080;&#1084;&#1072;&#1085;&#1080;&#1077;, &#1085;&#1086; &#1074;&#1089;&#1105; &#1088;&#1091;&#1082;&#1080; &#1085;&#1077; &#1076;&#1086;&#1093;&#1086;&#1076;&#1080;&#1083;&#1080;.&lt;/p&gt;&lt;p&gt;&#1042; &#1080;&#1090;&#1086;&#1075;&#1077; &#1087;&#1086;&#1103;&#1074;&#1080;&#1083;&#1080;&#1089;&#1100; &#1087;&#1086;&#1074;&#1086;&#1076;, &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1100; &#1080; &#1078;&#1077;&#1083;&#1072;&#1085;&#1080;&#1077; &amp;laquo;&#1087;&#1086;&#1097;&#1091;&#1087;&#1072;&#1090;&#1100;&amp;raquo; &#1040;&#1085;&#1076;&#1088;&#1086;&#1080;&#1076;. &#1048; &#1074;&#1086;&#1090;, &#1095;&#1090;&#1086; &#1080;&#1079; &#1101;&#1090;&#1086;&#1075;&#1086; &#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1083;&#1086;&#1089;&#1100;:&lt;/p&gt;&lt;p&gt;&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/VIkqhJL9DoQ&amp;amp;hl=en_US&amp;amp;fs=1?rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/VIkqhJL9DoQ&amp;amp;hl=en_US&amp;amp;fs=1?rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;h2&gt;&#1057;&#1077;&#1082;&#1088;&#1077;&#1090;&#1099;?&lt;/h2&gt;&lt;p&gt;&#1044;&#1083;&#1103; &#1090;&#1077;&#1093;, &#1082;&#1090;&#1086; &#1089;&#1086;&#1073;&#1077;&#1088;&#1105;&#1090;&#1089;&#1103; &#1079;&#1072;&#1085;&#1080;&#1084;&#1072;&#1090;&#1100;&#1089;&#1103; &#1095;&#1077;&#1084;-&#1090;&#1086; &#1087;&#1086;&#1076;&#1086;&#1073;&#1085;&#1099;&#1084;, &#1084;&#1086;&#1075;&#1091; &#1087;&#1086;&#1076;&#1077;&#1083;&#1080;&#1090;&#1100;&#1089;&#1103; &#1085;&#1077;&#1073;&#1086;&#1083;&#1100;&#1096;&#1080;&#1084; &#1089;&#1077;&#1082;&#1088;&#1077;&#1090;&#1086;&#1084;. &#1057;&#1090;&#1072;&#1085;&#1076;&#1072;&#1088;&#1090;&#1085;&#1099;&#1081; &#1084;&#1077;&#1090;&#1086;&#1076; &#1087;&#1086;&#1083;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103; &lt;i&gt;BluetoothSocket&lt;/i&gt;, &#1088;&#1077;&#1082;&#1086;&#1084;&#1077;&#1085;&#1076;&#1086;&#1074;&#1072;&#1085;&#1085;&#1099;&#1081; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1086;&#1081; &#1043;&#1091;&#1075;&#1083;&#1072;, &#1085;&#1077; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1077;&#1090;, &#1072; &#1085;&#1091;&#1078;&#1077;&#1085; &#1085;&#1077;&#1073;&#1086;&#1083;&#1100;&#1096;&#1086;&#1081; &#1093;&#1072;&#1082;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;/* &#1053;&#1077; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1077;&#1090;:
 * socket = device.createRfcommSocketToServiceRecord(MY_UUID)
 */

Method m = device.getClass().getMethod(&amp;quot;createRfcommSocket&amp;quot;,
            new Class[] { int.class });
socket = (BluetoothSocket)m.invoke(device, Integer.valueOf(1));&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1042;&#1086;&#1090; &#1080; &#1074;&#1089;&#1105;, &#1095;&#1090;&#1086; &#1103; &#1084;&#1086;&#1075;&#1091; &#1088;&#1072;&#1089;&#1089;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100; :) &#1045;&#1089;&#1083;&#1080; &#1103; &#1077;&#1097;&#1105; &#1073;&#1091;&#1076;&#1091; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1087;&#1088;&#1086; &#1040;&#1085;&#1076;&#1088;&#1086;&#1080;&#1076;, &#1090;&#1086; &#1087;&#1088;&#1080;&#1076;&#1105;&#1090;&#1089;&#1103; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1087;&#1086;&#1076;&#1089;&#1074;&#1077;&#1090;&#1082;&#1091; &#1082;&#1086;&#1076;&#1072; &#1076;&#1083;&#1103; &#1085;&#1077;&#1075;&#1086;.&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;p&gt;&lt;a href="http://developer.android.com/guide/topics/wireless/bluetooth.html"&gt;&#1056;&#1091;&#1082;&#1086;&#1074;&#1086;&#1076;&#1089;&#1090;&#1074;&#1086; &#1076;&#1083;&#1103; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1095;&#1080;&#1082;&#1086;&#1074; &#1087;&#1086;&#1076; &#1040;&#1085;&#1076;&#1088;&#1086;&#1080;&#1076; &#1085;&#1072; &#1090;&#1077;&#1084;&#1091; bluetooth&lt;/a&gt;&lt;/p&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/39</id>
    <published>2010-06-17T11:36:28+00:00</published>
    <updated>2010-06-17T11:36:28+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/39"/>
    <title>&#1045;&#1097;&#1105; &#1076;&#1074;&#1072; &#1089;&#1094;&#1077;&#1085;&#1072;&#1088;&#1080;&#1103; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099; &#1089; git: git stash &#1080; git bisect</title>
    <content type="html">&lt;p&gt;&lt;img alt="library" height="337" src="http://lonelyelk.ru/images/uploads/0000/0015/library.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1042;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1052;&#1086;&#1103; &lt;a href="http://git-scm.com/"&gt;&#1083;&#1102;&#1073;&#1080;&#1084;&#1072;&#1103; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1072; &#1082;&#1086;&#1085;&#1090;&#1088;&#1086;&#1083;&#1103; &#1074;&#1077;&#1088;&#1089;&#1080;&#1081;&lt;/a&gt; &#1080;&#1084;&#1077;&#1077;&#1090; &#1086;&#1075;&#1088;&#1086;&#1084;&#1085;&#1086;&#1077; &#1082;&#1086;&#1083;&#1080;&#1095;&#1077;&#1089;&#1090;&#1074;&#1086; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074;. &#1050;&#1072;&#1082;-&#1090;&#1086; &#1088;&#1072;&#1079; &#1103; &#1091;&#1095;&#1072;&#1089;&#1090;&#1074;&#1086;&#1074;&#1072;&#1083; &#1074; &#1086;&#1087;&#1088;&#1086;&#1089;&#1077;, &#1087;&#1086;&#1089;&#1083;&#1077; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1075;&#1086; &#1074;&#1099;&#1103;&#1089;&#1085;&#1080;&#1083;&#1086;&#1089;&#1100;, &#1095;&#1090;&#1086; &#1076;&#1072;&#1078;&#1077; &#1080;&#1079; &#1089;&#1072;&#1084;&#1099;&#1093; &#1087;&#1086;&#1087;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; &#1103; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1102; &#1086;&#1090; &#1089;&#1080;&#1083;&#1099; 10%.&lt;/p&gt;&lt;p&gt;&#1053;&#1086; &#1080;&#1085;&#1086;&#1075;&#1076;&#1072; &#1074;&#1086;&#1079;&#1085;&#1080;&#1082;&#1072;&#1102;&#1090; &#1089;&#1080;&#1090;&#1091;&#1072;&#1094;&#1080;&#1080;, &#1077;&#1076;&#1080;&#1085;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086; &#1087;&#1088;&#1086;&#1076;&#1091;&#1082;&#1090;&#1080;&#1074;&#1085;&#1099;&#1084; &#1074;&#1099;&#1093;&#1086;&#1076;&#1086;&#1084; &#1080;&#1079; &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1093; &#1073;&#1099;&#1074;&#1072;&#1077;&#1090; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1077; &#1080; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1085;&#1086;&#1074;&#1086;&#1075;&#1086; &#1076;&#1083;&#1103; &#1089;&#1077;&#1073;&#1103; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;. &#1054; &#1076;&#1074;&#1091;&#1093; &#1090;&#1072;&#1082;&#1080;&#1093; &#1089;&#1083;&#1091;&#1095;&#1072;&#1103;&#1093; &#1103; &#1089;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103; &#1080; &#1088;&#1072;&#1089;&#1089;&#1082;&#1072;&#1078;&#1091;.&lt;/p&gt;&lt;h2&gt;&#1042;&#1085;&#1077;&#1079;&#1072;&#1087;&#1085;&#1099;&#1077; &#1087;&#1088;&#1086;&#1089;&#1100;&#1073;&#1099;: git stash&lt;/h2&gt;&lt;p&gt;&#1041;&#1099;&#1074;&#1072;&#1077;&#1090; &#1090;&#1072;&#1082;, &#1095;&#1090;&#1086; &#1087;&#1086;&#1082;&#1072; &#1103; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1102; &#1085;&#1072;&#1076; &#1085;&#1086;&#1074;&#1086;&#1074;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1103;&#1084;&#1080; &#1074; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1091;, &#1090;&#1077;&#1082;&#1091;&#1097;&#1072;&#1103; &#1089;&#1090;&#1072;&#1073;&#1080;&#1083;&#1100;&#1085;&#1072;&#1103; &#1077;&#1105; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103; &#1072;&#1082;&#1090;&#1080;&#1074;&#1085;&#1086; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090;&#1089;&#1103;. &#1055;&#1088;&#1080; &#1072;&#1082;&#1090;&#1080;&#1074;&#1085;&#1086;&#1084; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1080;, &#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086; &#1078;&#1077;, &#1084;&#1086;&#1075;&#1091;&#1090; &#1074;&#1086;&#1079;&#1085;&#1080;&#1082;&#1085;&#1091;&#1090;&#1100; &#1086;&#1096;&#1080;&#1073;&#1082;&#1080; &#1080;&#1083;&#1080; &#1087;&#1086;&#1078;&#1077;&#1083;&#1072;&#1085;&#1080;&#1103; &#1095;&#1090;&#1086;-&#1090;&#1086; &#1080;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100;. &#1041;&#1099;&#1074;&#1072;&#1077;&#1090; &#1090;&#1072;&#1082;, &#1095;&#1090;&#1086; &#1087;&#1088;&#1080; &#1101;&#1090;&#1086;&#1084; &#1103; &#1085;&#1072;&#1093;&#1086;&#1078;&#1091;&#1089;&#1100; &#1074; &#1089;&#1077;&#1088;&#1077;&#1076;&#1080;&#1085;&#1077; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1082;&#1072;&#1082;&#1086;&#1075;&#1086;-&#1090;&#1086; &#1085;&#1086;&#1074;&#1096;&#1077;&#1089;&#1090;&#1074;&#1072;, &#1080; &#1074;&#1089;&#1105; &#1085;&#1072;&#1089;&#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1089;&#1099;&#1088;&#1086;, &#1095;&#1090;&#1086; &#1103; &#1076;&#1072;&#1078;&#1077; &#1085;&#1077; &#1084;&#1086;&#1075;&#1091; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1082;&#1086;&#1084;&#1084;&#1080;&#1090;.&lt;/p&gt;&lt;p&gt;&#1048;&#1090;&#1072;&#1082;, &#1103; &#1085;&#1072;&#1093;&#1086;&#1078;&#1091;&#1089;&#1100; &#1074; &#1089;&#1077;&#1088;&#1077;&#1076;&#1080;&#1085;&#1077; &#1087;&#1088;&#1072;&#1074;&#1086;&#1082; &#1085;&#1072; &#1074;&#1077;&#1090;&#1082;&#1077; &lt;i&gt;extremely_experimental&lt;/i&gt;, &#1072; &#1084;&#1085;&#1077; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086; &#1074;&#1085;&#1077;&#1089;&#1090;&#1080; &#1087;&#1088;&#1072;&#1074;&#1082;&#1080; &#1074; &#1074;&#1077;&#1090;&#1082;&#1091; &lt;i&gt;master&lt;/i&gt;. &#1042;&#1086;&#1090;, &#1082;&#1072;&#1082; &#1101;&#1090;&#1086; &#1076;&#1077;&#1083;&#1072;&#1077;&#1090;&#1089;&#1103;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git stash save
git checkout master&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1055;&#1086;&#1089;&#1083;&#1077; &#1087;&#1077;&#1088;&#1074;&#1086;&#1081; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1099; &#1074;&#1089;&#1105; &#1085;&#1072;&#1096;&#1080; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1085;&#1077;&#1083;&#1100;&#1079;&#1103; &#1073;&#1099;&#1083;&#1086; &#1079;&#1072;&#1082;&#1086;&#1084;&#1084;&#1080;&#1090;&#1080;&#1090;&#1100;, &#1089;&#1086;&#1093;&#1088;&#1072;&#1085;&#1077;&#1085;&#1099; &#1080; &#1090;&#1077;&#1082;&#1091;&#1097;&#1072;&#1103; &#1074;&#1077;&#1090;&#1082;&#1072; &#1087;&#1088;&#1080;&#1074;&#1077;&#1076;&#1077;&#1085;&#1072; &#1074; &#1089;&#1086;&#1089;&#1090;&#1086;&#1103;&#1085;&#1080;&#1077; &#1076;&#1086; &#1087;&#1088;&#1072;&#1074;&#1086;&#1082;. &#1055;&#1086;&#1089;&#1083;&#1077; &#1101;&#1090;&#1086;&#1075;&#1086; &#1084;&#1099; &#1084;&#1086;&#1078;&#1077;&#1084; &#1089;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100; &#1074;&#1077;&#1090;&#1082;&#1091; &#1080; &#1074;&#1085;&#1077;&#1089;&#1090;&#1080; &#1085;&#1072;&#1096;&#1080; &#1087;&#1088;&#1072;&#1074;&#1082;&#1080;. &#1055;&#1086;&#1089;&#1083;&#1077; &#1090;&#1086;&#1075;&#1086;, &#1082;&#1072;&#1082; &#1086;&#1096;&#1080;&#1073;&#1082;&#1080; &#1080;&#1089;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1099;, &#1085;&#1086;&#1074;&#1086;&#1074;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1103; &#1089;&#1076;&#1077;&#1083;&#1072;&#1085;&#1099; &#1080; &#1090;&#1077;&#1089;&#1090;&#1099; &#1087;&#1088;&#1086;&#1093;&#1086;&#1076;&#1103;&#1090;, &#1084;&#1099; &#1084;&#1086;&#1078;&#1077;&#1084; &#1074;&#1077;&#1088;&#1085;&#1091;&#1090;&#1100;&#1089;&#1103; &#1086;&#1073;&#1088;&#1072;&#1090;&#1085;&#1086; &#1082; &#1085;&#1072;&#1096;&#1080;&#1084; &#1087;&#1088;&#1072;&#1074;&#1082;&#1072;&#1084;.&lt;/p&gt;&lt;p&gt;&#1053;&#1086; &#1089;&#1082;&#1086;&#1088;&#1077;&#1077; &#1074;&#1089;&#1077;&#1075;&#1086; &#1074;&#1089;&#1077; &#1080;&#1083;&#1080; &#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1080;&#1079; &#1089;&#1076;&#1077;&#1083;&#1072;&#1085;&#1085;&#1099;&#1093; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1081; &#1087;&#1086;&#1085;&#1072;&#1076;&#1086;&#1073;&#1103;&#1090;&#1089;&#1103; &#1085;&#1072;&#1084; &#1074; &#1085;&#1072;&#1096;&#1077;&#1081; &#1101;&#1082;&#1089;&#1087;&#1077;&#1088;&#1080;&#1084;&#1077;&#1085;&#1090;&#1072;&#1083;&#1100;&#1085;&#1086;&#1081; &#1074;&#1077;&#1090;&#1082;&#1077;. &#1055;&#1086;&#1089;&#1083;&#1077; &#1087;&#1077;&#1088;&#1077;&#1093;&#1086;&#1076;&#1072; &#1085;&#1072; &#1085;&#1077;&#1105;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git checkout extremely_experimental&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1045;&#1089;&#1083;&#1080; &#1085;&#1072;&#1084; &#1085;&#1091;&#1078;&#1085;&#1099; &#1074;&#1089;&#1077; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103;, &#1090;&#1086;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git merge master&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1045;&#1089;&#1083;&#1080; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077;, &#1090;&#1086;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git cherry-pick ...&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1055;&#1086;&#1089;&#1083;&#1077; &#1101;&#1090;&#1086;&#1075;&#1086; &#1074;&#1077;&#1088;&#1085;&#1105;&#1084; &#1085;&#1072;&#1096;&#1080; &#1087;&#1088;&#1072;&#1074;&#1082;&#1080;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git stash pop&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1045;&#1089;&#1083;&#1080; &#1074;&#1086;&#1079;&#1085;&#1080;&#1082;&#1083;&#1080; &#1082;&#1086;&#1085;&#1092;&#1083;&#1080;&#1082;&#1090;&#1099;, &#1090;&#1086; &#1087;&#1088;&#1072;&#1074;&#1080;&#1084; &#1080;&#1093; &#1080; &#1076;&#1077;&#1083;&#1072;&#1077;&#1084;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git stash drop
git reset --mixed&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1055;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1077;&#1077; &#1085;&#1091;&#1078;&#1085;&#1086; &#1076;&#1083;&#1103; &#1090;&#1086;&#1075;&#1086;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1074;&#1099;&#1085;&#1077;&#1089;&#1090;&#1080; &#1085;&#1072;&#1096;&#1080; &#1087;&#1088;&#1072;&#1074;&#1082;&#1080; &#1080;&#1079; &#1080;&#1085;&#1076;&#1077;&#1082;&#1089;&#1072;, &#1090;.&#1082;. &#1087;&#1088;&#1080; &#1082;&#1086;&#1085;&#1092;&#1083;&#1080;&#1082;&#1090;&#1077; &#1086;&#1085;&#1080; &#1085;&#1077; &#1074;&#1099;&#1093;&#1086;&#1076;&#1103;&#1090; &#1086;&#1090;&#1090;&#1091;&#1076;&#1072; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;.&lt;/p&gt;&lt;p&gt;&#1050;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086; &#1078;&#1077; &#1090;&#1072;&#1082;&#1080;&#1093; &#1085;&#1077;&#1079;&#1072;&#1074;&#1077;&#1088;&#1096;&#1105;&#1085;&#1085;&#1099;&#1093; &#1087;&#1088;&#1072;&#1074;&#1086;&#1082; &#1084;&#1086;&#1078;&#1077;&#1090; &#1073;&#1099;&#1090;&#1100; &#1085;&#1077;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1086;, &#1085;&#1086; &#1101;&#1090;&#1086; &#1103; &#1086;&#1089;&#1090;&#1072;&#1074;&#1083;&#1102; &#1085;&#1072; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1077; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1077; &#1087;&#1099;&#1090;&#1083;&#1080;&#1074;&#1086;&#1084;&#1091; &#1095;&#1080;&#1090;&#1072;&#1090;&#1077;&#1083;&#1102;.&lt;/p&gt;&lt;h2&gt;&#1053;&#1077;&#1080;&#1079;&#1074;&#1077;&#1089;&#1090;&#1085;&#1086;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1089;&#1083;&#1086;&#1084;&#1072;&#1083;&#1086;&#1089;&#1100;: git bisect&lt;/h2&gt;&lt;p&gt;&#1041;&#1099;&#1074;&#1072;&#1077;&#1090; &#1090;&#1072;&#1082;, &#1095;&#1090;&#1086; &#1074;&#1076;&#1088;&#1091;&#1075; &#1086;&#1073;&#1085;&#1072;&#1088;&#1091;&#1078;&#1080;&#1074;&#1072;&#1077;&#1090;&#1089;&#1103; &#1086;&#1096;&#1080;&#1073;&#1082;&#1072;, &#1087;&#1088;&#1086; &#1082;&#1086;&#1090;&#1086;&#1088;&#1091;&#1102; &#1090;&#1086;&#1095;&#1085;&#1086; &#1080;&#1079;&#1074;&#1077;&#1089;&#1090;&#1085;&#1086;, &#1095;&#1090;&#1086; &#1076;&#1072;&#1074;&#1085;&#1099;&#1084; &#1076;&#1072;&#1074;&#1085;&#1086; &#1077;&#1105; &#1085;&#1077; &#1073;&#1099;&#1083;&#1086;. &#1058;&#1072;&#1082; &#1073;&#1099;&#1074;&#1072;&#1077;&#1090; &#1074; &#1073;&#1086;&#1083;&#1100;&#1096;&#1080;&#1093; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1072;&#1093;, &#1074; &#1085;&#1077;&#1087;&#1086;&#1082;&#1088;&#1099;&#1090;&#1099;&#1093; &#1090;&#1077;&#1089;&#1090;&#1072;&#1084;&#1080; &#1086;&#1073;&#1083;&#1072;&#1089;&#1090;&#1103;&#1093;. &#1041;&#1099;&#1074;&#1072;&#1077;&#1090; &#1090;&#1072;&#1082;, &#1095;&#1090;&#1086; &#1086;&#1073;&#1085;&#1072;&#1088;&#1091;&#1078;&#1080;&#1090;&#1100;, &#1074; &#1095;&#1105;&#1084; &#1078;&#1077; &#1076;&#1077;&#1083;&#1086;, &#1073;&#1099;&#1089;&#1090;&#1088;&#1086; &#1085;&#1077; &#1091;&#1076;&#1072;&#1105;&#1090;&#1089;&#1103;.&lt;/p&gt;&lt;p&gt;&#1061;&#1086;&#1088;&#1086;&#1096;&#1072;&#1103; &#1085;&#1086;&#1074;&#1086;&#1089;&#1090;&#1100; &#1074; &#1090;&#1086;&#1084;, &#1095;&#1090;&#1086; &#1101;&#1090;&#1086; &#1080; &#1085;&#1077; &#1086;&#1073;&#1103;&#1079;&#1072;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;. &#1053;&#1091;&#1078;&#1085;&#1086; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1085;&#1072;&#1095;&#1072;&#1090;&#1100; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git bisect start
git bisect bad&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1072;&#1082; &#1084;&#1099; &#1086;&#1073;&#1086;&#1079;&#1085;&#1072;&#1095;&#1080;&#1083;&#1080;, &#1095;&#1090;&#1086; &#1090;&#1077;&#1082;&#1091;&#1097;&#1080;&#1081; &#1082;&#1086;&#1084;&#1084;&#1080;&#1090; &#1089;&#1086;&#1076;&#1077;&#1088;&#1078;&#1080;&#1090; &#1086;&#1096;&#1080;&#1073;&#1082;&#1091;. &#1055;&#1086;&#1089;&#1083;&#1077; &#1101;&#1090;&#1086;&#1075;&#1086;, &#1083;&#1080;&#1073;&#1086; &#1084;&#1099; &#1079;&#1085;&#1072;&#1077;&#1084;, &#1082;&#1072;&#1082; &#1085;&#1072;&#1079;&#1099;&#1074;&#1072;&#1077;&#1090;&#1089;&#1103; &#1082;&#1086;&#1084;&#1084;&#1080;&#1090;, &#1074; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1084; &#1086;&#1096;&#1080;&#1073;&#1082;&#1080; &#1077;&#1097;&#1105; &#1085;&#1077; &#1073;&#1099;&#1083;&#1086;, &#1080;&#1083;&#1080; &#1085;&#1072;&#1093;&#1086;&#1076;&#1080;&#1084; &#1077;&#1075;&#1086;.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git bisect good v2.3.1&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1080;&#1083;&#1080;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git checkout ...
git bisect good&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1055;&#1086;&#1089;&#1083;&#1077; &#1101;&#1090;&#1086;&#1075;&#1086; &#1079;&#1072; &#1085;&#1072;&#1089; &#1074;&#1089;&#1105; &#1073;&#1091;&#1076;&#1077;&#1090; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &lt;i&gt;git&lt;/i&gt;. &#1054;&#1085; &#1073;&#1091;&#1076;&#1077;&#1090; &#1087;&#1077;&#1088;&#1077;&#1084;&#1077;&#1097;&#1072;&#1090;&#1100; &#1085;&#1072;&#1089; &#1087;&#1086; &#1080;&#1089;&#1090;&#1086;&#1088;&#1080;&#1080;, &#1072; &#1084;&#1099; &#1073;&#1091;&#1076;&#1077;&#1084; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1103;&#1090;&#1100;, &#1077;&#1089;&#1090;&#1100; &#1101;&#1090;&#1072; &#1086;&#1096;&#1080;&#1073;&#1082;&#1072; &#1080;&#1083;&#1080; &#1085;&#1077;&#1090;, &#1080; &#1089;&#1086;&#1086;&#1073;&#1097;&#1072;&#1090;&#1100; &#1086;&#1073; &#1101;&#1090;&#1086;&#1084;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git bisect good&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1080;&#1083;&#1080;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git bisect bad&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1042; &#1082;&#1086;&#1085;&#1094;&#1077; &#1082;&#1086;&#1085;&#1094;&#1086;&#1074; &#1085;&#1072;&#1084; &#1089;&#1086;&#1086;&#1073;&#1097;&#1072;&#1090;, &#1082;&#1072;&#1082;&#1086;&#1081; &#1080;&#1084;&#1077;&#1085;&#1085;&#1086; &#1082;&#1086;&#1084;&#1084;&#1080;&#1090; &#1074;&#1089;&#1105; &#1087;&#1086;&#1083;&#1086;&#1084;&#1072;&#1083;. &#1053;&#1072;&#1079;&#1074;&#1072;&#1085;&#1080;&#1077; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072; &#1087;&#1086;&#1076;&#1089;&#1082;&#1072;&#1079;&#1099;&#1074;&#1072;&#1077;&#1090; &#1085;&#1072;&#1084;, &#1095;&#1090;&#1086; &#1085;&#1072; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1085;&#1072;&#1084; &#1074;&#1089;&#1077;&#1075;&#1076;&#1072; &#1087;&#1088;&#1077;&#1076;&#1086;&#1089;&#1090;&#1072;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1082;&#1086;&#1084;&#1084;&#1080;&#1090;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1085;&#1072;&#1093;&#1086;&#1076;&#1080;&#1090;&#1089;&#1103; &#1087;&#1086;&#1089;&#1077;&#1088;&#1077;&#1076;&#1080;&#1085;&#1077; &#1084;&#1077;&#1078;&#1076;&#1091; &#1087;&#1083;&#1086;&#1093;&#1080;&#1084; &#1080; &#1093;&#1086;&#1088;&#1086;&#1096;&#1080;&#1084;. &#1058;&#1072;&#1082;&#1080;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084;, &#1084;&#1099; &#1087;&#1088;&#1086;&#1089;&#1084;&#1072;&#1090;&#1088;&#1080;&#1074;&#1072;&#1077;&#1084; &#1085;&#1077; &#1074;&#1089;&#1077; &lt;i&gt;N&lt;/i&gt; &#1082;&#1086;&#1084;&#1084;&#1080;&#1090;&#1086;&#1074; &#1074; &#1080;&#1089;&#1090;&#1086;&#1088;&#1080;&#1080; &#1086;&#1096;&#1080;&#1073;&#1082;&#1080;, &#1072; &#1074;&#1089;&#1077;&#1075;&#1086; &#1083;&#1080;&#1096;&#1100; &lt;i&gt;log&lt;sub&gt;2&lt;/sub&gt;N&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;&#1055;&#1086;&#1089;&#1083;&#1077; &#1090;&#1086;&#1075;&#1086;, &#1082;&#1072;&#1082; &#1084;&#1099; &#1074;&#1099;&#1103;&#1089;&#1085;&#1080;&#1083;&#1080;, &#1074; &#1095;&#1105;&#1084; &#1087;&#1088;&#1080;&#1095;&#1080;&#1085;&#1072;, &#1091;&#1073;&#1088;&#1072;&#1090;&#1100; &#1089;&#1083;&#1077;&#1076;&#1099;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1086;&#1089;&#1090;&#1072;&#1074;&#1080;&#1083; &#1087;&#1086;&#1089;&#1083;&#1077; &#1089;&#1077;&#1073;&#1103; &lt;i&gt;git bisect&lt;/i&gt; &#1084;&#1086;&#1078;&#1085;&#1086; &#1090;&#1072;&#1082;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git bisect reset&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1040; &#1082;&#1072;&#1082;&#1080;&#1084;&#1080; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1084;&#1080; &lt;i&gt;git&lt;/i&gt; &#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090;&#1077;&#1089;&#1100; &#1074;&#1099;?&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.kernel.org/pub/software/scm/git/docs/v1.7.0.6/git.html"&gt;&#1044;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1103; &#1087;&#1086; git&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-stash.html"&gt;git stash&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-bisect.html"&gt;git bisect&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/38</id>
    <published>2010-06-01T23:40:47+00:00</published>
    <updated>2010-06-01T23:40:47+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/38"/>
    <title>&#1056;&#1072;&#1073;&#1086;&#1090;&#1072; &#1085;&#1072;&#1076; &#1086;&#1096;&#1080;&#1073;&#1082;&#1072;&#1084;&#1080;</title>
    <content type="html">&lt;p&gt;&lt;img alt="Mistakes" height="337" src="http://lonelyelk.ru/images/uploads/0000/0013/mistakes.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1042;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1054;&#1089;&#1085;&#1086;&#1074;&#1085;&#1086;&#1081; &#1094;&#1077;&#1083;&#1100;&#1102; &#1101;&#1090;&#1086;&#1075;&#1086; &#1073;&#1083;&#1086;&#1075;&#1072; &#1103;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1089;&#1073;&#1086;&#1088; &#1074; &#1086;&#1076;&#1085;&#1086;&#1084; &#1091;&#1076;&#1086;&#1073;&#1085;&#1086;&#1084; &#1084;&#1077;&#1089;&#1090;&#1077; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1099;&#1093; &#1084;&#1085;&#1077; &#1087;&#1086; &#1088;&#1072;&#1073;&#1086;&#1090;&#1077; &#1079;&#1085;&#1072;&#1085;&#1080;&#1081; &#1080; &#1092;&#1080;&#1096;&#1077;&#1082;. &#1054;&#1076;&#1085;&#1072;&#1082;&#1086;, &#1080;&#1084;&#1077;&#1085;&#1085;&#1086; &#1087;&#1086;&#1090;&#1086;&#1084;&#1091; &#1095;&#1090;&#1086; &#1101;&#1090;&#1086; &#1072;&#1082;&#1090;&#1080;&#1074;&#1085;&#1086; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1084;&#1099;&#1077; &#1074; &#1088;&#1072;&#1073;&#1086;&#1090;&#1077; &#1088;&#1077;&#1096;&#1077;&#1085;&#1080;&#1103;, &#1089;&#1086; &#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1077;&#1084; &#1087;&#1086;&#1103;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1073;&#1086;&#1083;&#1077;&#1077; &#1087;&#1088;&#1086;&#1076;&#1091;&#1082;&#1090;&#1080;&#1074;&#1085;&#1099;&#1081; &#1080;&#1083;&#1080; &#1073;&#1086;&#1083;&#1077;&#1077; &#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1100;&#1085;&#1099;&#1081; &#1089;&#1087;&#1086;&#1089;&#1086;&#1073; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1090;&#1086;, &#1086; &#1095;&#1105;&#1084; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085;&#1086; &#1087;&#1086;&#1095;&#1090;&#1080; &#1074; &#1082;&#1072;&#1078;&#1076;&#1086;&#1081; &#1089;&#1090;&#1072;&#1090;&#1100;&#1077;.&lt;/p&gt;&lt;p&gt;&#1048;&#1085;&#1086;&#1075;&#1076;&#1072; &#1103; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1086;&#1096;&#1080;&#1073;&#1072;&#1102;&#1089;&#1100;. &#1058;&#1088;&#1091;&#1076;&#1085;&#1086; &#1087;&#1088;&#1077;&#1076;&#1089;&#1090;&#1072;&#1074;&#1080;&#1090;&#1100; &#1095;&#1090;&#1086;-&#1090;&#1086; &#1073;&#1086;&#1083;&#1077;&#1077; &#1087;&#1086;&#1083;&#1077;&#1079;&#1085;&#1086;&#1077; &#1076;&#1083;&#1103; &#1086;&#1087;&#1099;&#1090;&#1072;, &#1085;&#1077;&#1078;&#1077;&#1083;&#1080; &#1085;&#1072;&#1073;&#1080;&#1074;&#1072;&#1085;&#1080;&#1077; &#1096;&#1080;&#1096;&#1077;&#1082;. &#1041;&#1091;&#1076;&#1077;&#1090; &#1093;&#1086;&#1088;&#1086;&#1096;&#1086;, &#1077;&#1089;&#1083;&#1080; &#1087;&#1088;&#1086;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077; &#1088;&#1072;&#1073;&#1086;&#1090; &#1085;&#1072;&#1076; &#1086;&#1096;&#1080;&#1073;&#1082;&#1072;&#1084;&#1080; &#1089;&#1090;&#1072;&#1085;&#1077;&#1090; &#1076;&#1086;&#1073;&#1088;&#1086;&#1081; &#1090;&#1088;&#1072;&#1076;&#1080;&#1094;&#1080;&#1077;&#1081;. &#1048;&#1090;&#1072;&#1082;, &#1074; &#1101;&#1090;&#1086;&#1084; &#1075;&#1086;&#1076;&#1091;.&lt;/p&gt;&lt;h2&gt;git hooks&lt;/h2&gt;&lt;p&gt;&#1053;&#1077;&#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1082;&#1086;&#1074; &lt;a href="http://lonelyelk.ru/posts/37"&gt;&#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1072; &#1076;&#1083;&#1103; &#1091;&#1076;&#1072;&#1083;&#1077;&#1085;&#1080;&#1103; &#1087;&#1088;&#1086;&#1073;&#1077;&#1083;&#1086;&#1074; &#1074; &#1082;&#1086;&#1085;&#1094;&#1072;&#1093; &#1089;&#1090;&#1088;&#1086;&#1082;&lt;/a&gt; &#1085;&#1072;&#1096;&#1105;&#1083; &#1076;&#1074;&#1072;:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&#1057;&#1082;&#1088;&#1080;&#1087;&#1090; &#1073;&#1077;&#1079; &#1085;&#1091;&#1078;&#1076;&#1099; &#1076;&#1105;&#1088;&#1075;&#1072;&#1077;&#1090; &#1085;&#1080; &#1074; &#1095;&#1105;&#1084; &#1085;&#1077; &#1087;&#1086;&#1074;&#1080;&#1085;&#1085;&#1099;&#1077; &#1092;&#1072;&#1081;&#1083;&#1099;, &#1087;&#1086;&#1090;&#1086;&#1084;&#1091; &#1095;&#1090;&#1086; &lt;b&gt;\s&lt;/b&gt; &#1089;&#1086;&#1086;&#1090;&#1074;&#1077;&#1090;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090; &#1080; &#1089;&#1080;&#1084;&#1074;&#1086;&#1083;&#1091; &#1082;&#1086;&#1085;&#1094;&#1072; &#1089;&#1090;&#1088;&#1086;&#1082;&#1080;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1090;&#1072;&#1084; &#1074;&#1089;&#1077;&#1075;&#1076;&#1072; &#1077;&#1089;&#1090;&#1100;.&lt;/li&gt;&lt;li&gt;&#1057;&#1082;&#1088;&#1080;&#1087;&#1090; &#1085;&#1077; &#1089;&#1086;&#1076;&#1077;&#1088;&#1078;&#1080;&#1090; &#1088;&#1077;&#1096;&#1077;&#1085;&#1080;&#1103; &#1076;&#1083;&#1103; &#1074;&#1099;&#1073;&#1086;&#1088;&#1072; &#1074;&#1089;&#1077;&#1093; &#1090;&#1077;&#1082;&#1089;&#1090;&#1086;&#1074;&#1099;&#1093; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1072;.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/ol&gt;&lt;p&gt;&#1042;&#1086;&#1090; &#1093;&#1086;&#1088;&#1086;&#1096;&#1080;&#1081; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;#!/usr/bin/env ruby
`git grep -I --name-only -e &amp;quot;&amp;quot;`.split(&amp;quot;\n&amp;quot;).each do |p|
  lines = File.readlines(p).map(&amp;amp;:chomp)
  if lines.inject(false) { |memo, l| l.gsub!(/\s+$/, &amp;quot;&amp;quot;) || memo }
    File.open(p, &amp;quot;w&amp;quot;) do |f|
      f.puts lines.join(&amp;quot;\n&amp;quot;)
    end
    puts &amp;quot;Removed trailing spaced from &amp;#39;#{p}&amp;#39;&amp;quot;
    system &amp;quot;git add #{p}&amp;quot;
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1072;&#1082; &#1078;&#1077; &#1087;&#1086; &#1089;&#1086;&#1074;&#1077;&#1090;&#1091; &#1044;&#1084;&#1080;&#1090;&#1088;&#1080;&#1103; &#1074; &#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;&#1103;&#1093; &#1076;&#1086;&#1073;&#1072;&#1074;&#1080;&#1083; &lt;a href="http://github.com/lonelyelk/workspace/blob/master/git-hooks/post-commit"&gt;&#1089;&#1082;&#1088;&#1080;&#1087;&#1090; &#1076;&#1083;&#1103; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1082;&#1080; &#1089;&#1095;&#1072;&#1089;&#1090;&#1083;&#1080;&#1074;&#1086;&#1075;&#1086; &#1082;&#1086;&#1084;&#1084;&#1080;&#1090;&#1072;&lt;/a&gt;.&lt;/p&gt;&lt;h2&gt;&#1056;&#1072;&#1073;&#1086;&#1090;&#1072; &#1089; &#1074;&#1077;&#1088;&#1089;&#1080;&#1077;&#1081; &#1074; (ai)rake&lt;/h2&gt;&lt;p&gt;&#1057;&#1086;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1085;&#1086; &#1086;&#1095;&#1077;&#1074;&#1080;&#1076;&#1085;&#1072;&#1103; &#1086;&#1096;&#1080;&#1073;&#1082;&#1072; &#1074; &lt;a href="http://lonelyelk.ru/posts/36"&gt;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;&#1077; &#1087;&#1088;&#1086; &#1088;&#1072;&#1073;&#1086;&#1090;&#1091; &#1089; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103;&#1084;&#1080; air-&#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103; &#1074; rake&lt;/a&gt;. &#1050;&#1086;&#1075;&#1076;&#1072; &#1091;&#1074;&#1077;&#1083;&#1080;&#1095;&#1080;&#1074;&#1072;&#1077;&#1090;&#1089;&#1103; &#1073;&#1086;&#1083;&#1077;&#1077; &#1089;&#1090;&#1072;&#1088;&#1096;&#1072;&#1103; &#1095;&#1072;&#1089;&#1090;&#1100; &#1074;&#1077;&#1088;&#1089;&#1080;&#1080;, &#1090;&#1086; &#1074;&#1089;&#1077; &#1084;&#1083;&#1072;&#1076;&#1096;&#1080;&#1077; &#1076;&#1086;&#1083;&#1078;&#1085;&#1099; &#1086;&#1073;&#1085;&#1091;&#1083;&#1103;&#1090;&#1100;&#1089;&#1103;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;namespace :version do

  [:major, :minor, :patch].each_with_index do |subv, index|
    desc &amp;quot;Bump #{subv} in version&amp;quot;
    task :&amp;quot;bump_#{subv}&amp;quot; do

      unless `git status` =~ /nothing to commit/
        raise &amp;quot;There are uncommitted changes. Failed to proceed.&amp;quot;
      end

      appxml = YAML.load_file(&amp;#39;airake.yml&amp;#39;)[&amp;quot;appxml_path&amp;quot;]
      str = File.read(appxml)

      msg = nil
      new_version = nil

      if str.gsub! /&amp;lt;version&amp;gt;(.*)&amp;lt;\/version&amp;gt;/ do |matched|
          old_version = $1
          major, minor, patch = old_version.split(&amp;quot;.&amp;quot;).map(&amp;amp;:to_i)
          eval(&amp;quot;#{subv} += 1&amp;quot;)
          new_version = [major, minor, patch].fill(0, index+1).join(&amp;quot;.&amp;quot;)
          msg = &amp;quot;Version bump #{old_version} =&amp;gt; #{new_version}&amp;quot;
          puts msg
          &amp;quot;&amp;lt;version&amp;gt;#{new_version}&amp;lt;/version&amp;gt;&amp;quot;
        end.nil?
        raise &amp;quot;Cannot detect current version.\nMake sure appxml file contains &amp;lt;version&amp;gt;X.X.X&amp;lt;/version&amp;gt; tag.&amp;quot;
      else
        File.open(appxml, &amp;quot;w&amp;quot;) do |f|
          f.write str
        end

        puts `git commit -am &amp;quot;#{msg}&amp;quot;`
        puts `git tag v#{new_version}`
      end
    end
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &lt;i&gt;rake version:bump_minor&lt;/i&gt; &#1076;&#1077;&#1083;&#1072;&#1077;&#1090; &#1080;&#1079; 0.1.6 &#1085;&#1077; 0.2.6, &#1072; 0.2.0, &#1082;&#1072;&#1082; &#1080; &#1076;&#1086;&#1083;&#1078;&#1085;&#1086; &#1073;&#1099;&#1090;&#1100;.&lt;/p&gt;&lt;h2&gt;&#1052;&#1080;&#1084;&#1086;&#1093;&#1086;&#1076;&#1086;&#1084;&lt;/h2&gt;&lt;p&gt;&#1058;&#1077;&#1084; &#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1077;&#1084; &#1103; &#1089;&#1084;&#1077;&#1085;&#1080;&#1083; &#1090;&#1072;&#1088;&#1080;&#1092;&#1085;&#1099;&#1081; &#1087;&#1083;&#1072;&#1085; &#1091; &#1089;&#1074;&#1086;&#1077;&#1075;&#1086; &#1087;&#1088;&#1086;&#1074;&#1072;&#1081;&#1076;&#1077;&#1088;&#1072; &#1085;&#1072; &lt;a href="http://mediatemple.net/webhosting/ve/"&gt;(ve)&lt;/a&gt;. &#1048; &#1085;&#1077;&#1079;&#1072;&#1084;&#1077;&#1090;&#1085;&#1086; &#1087;&#1077;&#1088;&#1077;&#1085;&#1105;&#1089; &#1089;&#1072;&#1081;&#1090;. &#1055;&#1086;&#1089;&#1084;&#1086;&#1090;&#1088;&#1080;&#1084;, &#1082;&#1072;&#1082; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1077;&#1090; &#1085;&#1072; &#1089;&#1086;&#1073;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086;&#1084; &#1086;&#1087;&#1099;&#1090;&#1077;. &#1056;&#1072;&#1073;&#1086;&#1090;&#1072; &#1087;&#1086; ssh, &#1082;&#1072;&#1082; &#1073;&#1099;&#1083;&#1072;, &#1090;&#1072;&#1082; &#1080; &#1086;&#1089;&#1090;&#1072;&#1083;&#1072;&#1089;&#1100; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1099;&#1084; &#1089;&#1087;&#1086;&#1089;&#1086;&#1073;&#1086;&#1084; &#1072;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103;, &#1072; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086;&#1089;&#1090;&#1100; &#1083;&#1072;&#1079;&#1080;&#1090;&#1100; &#1074; plesk &#1087;&#1088;&#1086;&#1087;&#1072;&#1083;&#1072;, &#1087;&#1086;&#1090;&#1086;&#1084;&#1091; &#1095;&#1090;&#1086; &#1077;&#1075;&#1086; &#1090;&#1077;&#1087;&#1077;&#1088;&#1100; &#1085;&#1077;&#1090; :)&lt;/p&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/37</id>
    <published>2010-05-26T21:42:02+00:00</published>
    <updated>2010-05-26T21:42:02+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/37"/>
    <title>&#1048;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; git hooks &#1085;&#1072; &#1088;&#1091;&#1073;&#1080; &#1074; &#1082;&#1086;&#1088;&#1099;&#1089;&#1090;&#1085;&#1099;&#1093; &#1094;&#1077;&#1083;&#1103;&#1093;</title>
    <content type="html">&lt;p&gt;&lt;img alt="Organizers" height="337" src="http://lonelyelk.ru/images/uploads/0000/0011/organizers.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1042;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1050;&#1072;&#1082;-&#1090;&#1086; &#1088;&#1072;&#1079; &#1084;&#1085;&#1077; &#1087;&#1086;&#1087;&#1072;&#1083;&#1089;&#1103; &#1086;&#1095;&#1077;&#1085;&#1100; &#1079;&#1083;&#1086;&#1081; git-&#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1081;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1086;&#1090;&#1082;&#1072;&#1079;&#1099;&#1074;&#1072;&#1083;&#1089;&#1103; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1090;&#1100;, &#1077;&#1089;&#1083;&#1080; &#1103; &#1086;&#1089;&#1090;&#1072;&#1074;&#1083;&#1103;&#1083; &#1087;&#1088;&#1086;&#1073;&#1077;&#1083;&#1099; &#1074; &#1082;&#1086;&#1085;&#1094;&#1077; &#1089;&#1090;&#1088;&#1086;&#1082;. &#1045;&#1089;&#1090;&#1100; &#1090;&#1072;&#1082;&#1072;&#1103; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103;, &#1095;&#1090;&#1086; git &#1079;&#1072;&#1090;&#1086;&#1095;&#1077;&#1085; &#1087;&#1086;&#1076; &#1086;&#1090;&#1087;&#1088;&#1072;&#1074;&#1082;&#1091; &#1087;&#1072;&#1090;&#1095;&#1077;&#1081; &#1087;&#1086; &#1087;&#1086;&#1095;&#1090;&#1077;, &#1080; &#1095;&#1090;&#1086; &#1087;&#1088;&#1086;&#1073;&#1077;&#1083;&#1099; &#1074; &#1082;&#1086;&#1085;&#1094;&#1072;&#1093; &#1089;&#1090;&#1088;&#1086;&#1082; &#1084;&#1086;&#1075;&#1091;&#1090; &#1085;&#1072;&#1074;&#1088;&#1077;&#1076;&#1080;&#1090;&#1100; &#1074; &#1090;&#1072;&#1082;&#1086;&#1084; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1077;.&lt;/p&gt;&lt;p&gt;&#1058;&#1086;&#1075;&#1076;&#1072; &#1103; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1086;&#1090;&#1082;&#1083;&#1102;&#1095;&#1080;&#1083; &#1101;&#1090;&#1091; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1082;&#1091;, &#1072; &#1085;&#1077;&#1076;&#1072;&#1074;&#1085;&#1086; &#1087;&#1086;&#1076;&#1091;&#1084;&#1072;&#1083;, &#1087;&#1086;&#1095;&#1077;&#1084;&#1091; &#1073;&#1099; &#1084;&#1085;&#1077; &#1085;&#1077; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1101;&#1090;&#1080; &#1084;&#1086;&#1097;&#1085;&#1086;&#1089;&#1090;&#1080; &#1074; &#1084;&#1080;&#1088;&#1085;&#1099;&#1093; &#1094;&#1077;&#1083;&#1103;&#1093;.&lt;/p&gt;&lt;h2&gt;git hooks&lt;/h2&gt;&lt;p&gt;&#1044;&#1083;&#1103; &#1084;&#1085;&#1086;&#1078;&#1077;&#1089;&#1090;&#1074;&#1072; &#1088;&#1072;&#1079;&#1083;&#1080;&#1095;&#1085;&#1099;&#1093; &#1094;&#1077;&#1083;&#1077;&#1081; &#1091; git &#1077;&#1089;&#1090;&#1100; &#1093;&#1091;&#1082;&#1080;. (&#1050;&#1072;&#1082; &#1073;&#1099; &#1080;&#1093; &#1087;&#1077;&#1088;&#1077;&#1074;&#1077;&#1089;&#1090;&#1080; &#1085;&#1086;&#1088;&#1084;&#1072;&#1083;&#1100;&#1085;&#1086;?) &#1054;&#1085;&#1080; &#1085;&#1072;&#1093;&#1086;&#1076;&#1103;&#1090;&#1089;&#1103; &#1074; &#1082;&#1072;&#1078;&#1076;&#1086;&#1084; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1080; &#1074; &#1087;&#1072;&#1087;&#1082;&#1077;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;.git/hooks&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1048; &#1080;&#1084;&#1077;&#1102;&#1090; &#1075;&#1086;&#1074;&#1086;&#1088;&#1103;&#1097;&#1080;&#1077; &#1085;&#1072;&#1079;&#1074;&#1072;&#1085;&#1080;&#1103;. &#1048;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1102;&#1090;&#1089;&#1103; &#1086;&#1085;&#1080; &#1076;&#1083;&#1103; &#1089;&#1086;&#1073;&#1083;&#1102;&#1076;&#1077;&#1085;&#1080;&#1103; &#1092;&#1086;&#1088;&#1084;&#1072;&#1090;&#1086;&#1074; &#1080; &#1089;&#1086;&#1075;&#1083;&#1072;&#1096;&#1077;&#1085;&#1080;&#1081;, &#1076;&#1083;&#1103; &#1086;&#1087;&#1086;&#1074;&#1077;&#1097;&#1077;&#1085;&#1080;&#1081;, &#1076;&#1083;&#1103; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1082;&#1080; &#1080; &#1090;.&#1087;. &#1055;&#1086;&#1095;&#1077;&#1084;&#1091; &#1073;&#1099; &#1085;&#1077; &#1074;&#1086;&#1079;&#1083;&#1086;&#1078;&#1080;&#1090;&#1100; &#1085;&#1072; &#1085;&#1080;&#1093; &#1082;&#1086;&#1088;&#1088;&#1077;&#1082;&#1090;&#1086;&#1088;&#1089;&#1082;&#1080;&#1077; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1080;?&lt;/p&gt;&lt;h2&gt;&#1048;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; pre-commit &#1076;&#1083;&#1103; &#1091;&#1076;&#1072;&#1083;&#1077;&#1085;&#1080;&#1103; &#1087;&#1088;&#1086;&#1073;&#1077;&#1083;&#1086;&#1074; &#1085;&#1072; &#1082;&#1086;&#1085;&#1094;&#1072;&#1093; &#1089;&#1090;&#1088;&#1086;&#1082;&lt;/h2&gt;&lt;p&gt;&#1055;&#1086;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1091; &#1103;, &#1086;&#1087;&#1103;&#1090;&#1100; &#1078;&#1077;, &#1092;&#1072;&#1085;&#1072;&#1090; &#1088;&#1091;&#1073;&#1080;, &#1090;&#1086; &#1080; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1099;&amp;nbsp;&amp;#151; &#1073;&#1083;&#1072;&#1075;&#1086; &#1077;&#1089;&#1090;&#1100; &#1090;&#1072;&#1082;&#1072;&#1103; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1100;&amp;nbsp;&amp;#151; &#1085;&#1072;&#1087;&#1080;&#1096;&#1091; &#1085;&#1072; &#1088;&#1091;&#1073;&#1080;. &#1057;&#1086;&#1079;&#1076;&#1072;&#1105;&#1084; &#1092;&#1072;&#1081;&#1083;&#1080;&#1082; &lt;b&gt;.git/hooks/pre-commit&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;#!/usr/bin/env ruby

Dir.glob(&amp;quot;*.{txt,rb}&amp;quot;).each do |p|
  lines = File.readlines(p)
  if lines.inject(false) { |memo, line| line.gsub!(/\s+$/, &amp;quot;&amp;quot;) || memo }
    File.open(p, &amp;quot;w&amp;quot;) do |f|
      f.puts lines.join(&amp;quot;\n&amp;quot;)
    end
    system &amp;quot;git add #{p}&amp;quot;
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1050;&#1072;&#1082; &#1074;&#1080;&#1076;&#1085;&#1086;, &#1101;&#1090;&#1086;&#1090; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090; &#1080;&#1097;&#1077;&#1090; &#1092;&#1072;&#1081;&#1083;&#1099; &lt;i&gt;*.txt&lt;/i&gt; &#1080; &lt;i&gt;*.rb&lt;/i&gt; &#1074; &#1082;&#1086;&#1088;&#1085;&#1077;&#1074;&#1086;&#1084; &#1082;&#1072;&#1090;&#1072;&#1083;&#1086;&#1075;&#1077; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1103;, &#1080; &#1077;&#1089;&#1083;&#1080; &#1074; &#1085;&#1080;&#1093; &#1077;&#1089;&#1090;&#1100; &#1087;&#1088;&#1086;&#1073;&#1077;&#1083;&#1099; &#1074; &#1082;&#1086;&#1085;&#1094;&#1077; &#1089;&#1090;&#1088;&#1086;&#1082;, &#1087;&#1077;&#1088;&#1077;&#1079;&#1072;&#1087;&#1080;&#1089;&#1099;&#1074;&#1072;&#1077;&#1090; &#1080;&#1093; &#1080; &#1076;&#1086;&#1073;&#1072;&#1074;&#1083;&#1103;&#1077;&#1090; &#1074; &#1080;&#1085;&#1076;&#1077;&#1082;&#1089; &#1076;&#1083;&#1103; &#1082;&#1086;&#1084;&#1084;&#1080;&#1090;&#1072;.&lt;/p&gt;&lt;p&gt;&#1053;&#1077; &#1079;&#1072;&#1073;&#1099;&#1090;&#1100; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1077;&#1075;&#1086; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1077;&#1084;&#1099;&#1084;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;chmod +x .git/hooks/pre-commit&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1091; &#1085;&#1072;&#1089; &#1074; &#1088;&#1072;&#1089;&#1087;&#1086;&#1088;&#1103;&#1078;&#1077;&#1085;&#1080;&#1080; &#1072;&#1074;&#1090;&#1086;&#1084;&#1072;&#1090;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080;&#1081; &#1087;&#1086;&#1084;&#1086;&#1097;&#1085;&#1080;&#1082;-&#1088;&#1077;&#1076;&#1072;&#1082;&#1090;&#1086;&#1088;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1091;&#1076;&#1072;&#1083;&#1103;&#1077;&#1090; &#1087;&#1088;&#1086;&#1073;&#1077;&#1083;&#1099; &#1074; &#1082;&#1086;&#1085;&#1094;&#1077; &#1089;&#1090;&#1088;&#1086;&#1082;.&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;p&gt;&lt;a href="http://www.kernel.org/pub/software/scm/git/docs/githooks.html"&gt;&#1044;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1103; &#1087;&#1086; git hooks&lt;/a&gt;&lt;/p&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/36</id>
    <published>2010-04-28T15:21:03+00:00</published>
    <updated>2010-04-28T15:21:03+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/36"/>
    <title>&#1048;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; Airake &#1087;&#1086;&#1076; Kubuntu</title>
    <content type="html">&lt;p&gt;&lt;img alt="simple things" height="337" src="http://lonelyelk.ru/images/uploads/0000/0009/simple_things.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1042;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1059;&#1078;&#1077; &#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1077; &#1074;&#1088;&#1077;&#1084;&#1103; &#1085;&#1072;&#1079;&#1072;&#1076; &#1086;&#1073;&#1085;&#1072;&#1088;&#1091;&#1078;&#1080;&#1083; &#1075;&#1077;&#1085;&#1080;&#1072;&#1083;&#1100;&#1085;&#1099;&#1081; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1084;&#1077;&#1085;&#1090;. &#1055;&#1088;&#1072;&#1074;&#1076;&#1072; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1085;&#1077;&#1076;&#1072;&#1074;&#1085;&#1086; &#1086;&#1087;&#1088;&#1086;&#1073;&#1086;&#1074;&#1072;&#1083; &#1077;&#1075;&#1086; &#1085;&#1072; &#1089;&#1074;&#1086;&#1080;&#1093; &#1088;&#1072;&#1073;&#1086;&#1095;&#1080;&#1093; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1072;&#1093; &#1080; &#1079;&#1072;&#1092;&#1072;&#1085;&#1072;&#1090;&#1077;&#1083; &#1077;&#1097;&#1105; &#1073;&#1086;&#1083;&#1100;&#1096;&#1077;. &#1055;&#1086;&#1076;&#1075;&#1086;&#1090;&#1086;&#1074;&#1082;&#1072; &#1082; &#1076;&#1086;&#1082;&#1083;&#1072;&#1076;&#1091; &#1085;&#1072; &#1089;&#1077;&#1082;&#1094;&#1080;&#1080; &#1071;&#1085;&#1076;&#1077;&#1082;&#1089;&#1072; &#1087;&#1088;&#1086; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1099; &#1085;&#1072; &#1056;&#1048;&#1060;&#1077; &#1085;&#1077; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1080;&#1083;&#1072; &#1084;&#1085;&#1077; &#1087;&#1086;&#1076;&#1077;&#1083;&#1080;&#1090;&#1100;&#1089;&#1103; &#1101;&#1090;&#1080;&#1084; &#1088;&#1072;&#1085;&#1077;&#1077;. &#1048;&#1089;&#1087;&#1088;&#1072;&#1074;&#1083;&#1103;&#1102; &#1086;&#1096;&#1080;&#1073;&#1082;&#1091;.&lt;/p&gt;&lt;p&gt;&#1071; &#1083;&#1102;&#1073;&#1083;&#1102; &#1088;&#1091;&#1073;&#1080;. &#1048;, &#1077;&#1089;&#1090;&#1077;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086;, &lt;i&gt;rake&lt;/i&gt;, &#1082;&#1072;&#1082; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1084;&#1077;&#1085;&#1090;, &#1087;&#1088;&#1086;&#1076;&#1086;&#1083;&#1078;&#1072;&#1102;&#1097;&#1080;&#1081; &#1089;&#1083;&#1072;&#1074;&#1085;&#1099;&#1077; &#1090;&#1088;&#1072;&#1076;&#1080;&#1094;&#1080;&#1080; make &#1074; &#1088;&#1091;&#1073;&#1080; &#1080; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1088;&#1091;&#1073;&#1080;. &#1058;&#1072;&#1082; &#1078;&#1077; &#1103; &#1087;&#1080;&#1090;&#1072;&#1102; &#1085;&#1077;&#1078;&#1085;&#1099;&#1077; &#1095;&#1091;&#1074;&#1089;&#1090;&#1074;&#1072; &#1082; &lt;i&gt;ActionScript&lt;/i&gt;. &#1052;&#1085;&#1077; &#1085;&#1088;&#1072;&#1074;&#1080;&#1090;&#1089;&#1103; &lt;i&gt;AIR&lt;/i&gt;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1103;&#1077;&#1090; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1076;&#1077;&#1081;&#1089;&#1090;&#1074;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086; &#1082;&#1088;&#1086;&#1089;&#1089;-&#1087;&#1083;&#1072;&#1090;&#1092;&#1086;&#1088;&#1084;&#1077;&#1085;&#1085;&#1099;&#1077; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103; &#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1086; &#1073;&#1099;&#1089;&#1090;&#1088;&#1086;. &#1058;&#1072;&#1082; &#1078;&#1077; &#1103; &#1085;&#1077;&#1087;&#1083;&#1086;&#1093;&#1086; &#1086;&#1090;&#1085;&#1086;&#1096;&#1091;&#1089;&#1100; &#1082; &lt;i&gt;TDD&lt;/i&gt;, &#1082;&#1072;&#1082; &#1082; &#1086;&#1076;&#1085;&#1086;&#1084;&#1091; &#1080;&#1079; &#1089;&#1087;&#1086;&#1089;&#1086;&#1073;&#1086;&#1074; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1080;.&lt;/p&gt;&lt;p&gt;&#1050;&#1072;&#1082;&#1086;&#1074;&#1072; &#1078;&#1077; &#1073;&#1099;&#1083;&#1072; &#1084;&#1086;&#1103; &#1088;&#1072;&#1076;&#1086;&#1089;&#1090;&#1100; &#1085;&#1072;&#1081;&#1090;&#1080; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1084;&#1077;&#1085;&#1090;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1074;&#1089;&#1105; &#1101;&#1090;&#1086; &#1086;&#1073;&#1098;&#1077;&#1076;&#1080;&#1085;&#1103;&#1077;&#1090;! &#1061;&#1086;&#1090;&#1103; &#1077;&#1084;&#1091; &#1091;&#1078;&#1077; &#1087;&#1072;&#1088;&#1072; &#1083;&#1077;&#1090;, &#1086;&#1085; &#1087;&#1086;-&#1087;&#1088;&#1077;&#1078;&#1085;&#1077;&#1084;&#1091; &#1087;&#1088;&#1077;&#1082;&#1088;&#1072;&#1089;&#1077;&#1085;.&lt;/p&gt;&lt;h2&gt;&#1059;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1072; &#1089;&#1086;&#1089;&#1090;&#1072;&#1074;&#1083;&#1103;&#1102;&#1097;&#1080;&#1093;&lt;/h2&gt;&lt;p&gt;&#1055;&#1088;&#1077;&#1076;&#1087;&#1086;&#1083;&#1072;&#1075;&#1072;&#1102;, &#1095;&#1090;&#1086; &lt;i&gt;ruby&lt;/i&gt;, &lt;i&gt;rubygems&lt;/i&gt; &#1080; &lt;i&gt;rake&lt;/i&gt; &#1091;&#1078;&#1077; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1099; &#1091; &#1090;&#1077;&#1093;, &#1082;&#1090;&#1086; &#1095;&#1080;&#1090;&#1072;&#1077;&#1090; &#1101;&#1090;&#1086;&#1090; &#1073;&#1083;&#1086;&#1075;.&lt;/p&gt;&lt;p&gt;&#1044;&#1072;&#1083;&#1077;&#1077;, &#1082;&#1072;&#1095;&#1072;&#1077;&#1084; &#1080; &#1088;&#1072;&#1079;&#1072;&#1088;&#1093;&#1080;&#1074;&#1080;&#1088;&#1091;&#1077;&#1084; &#1082;&#1091;&#1076;&#1072;-&#1085;&#1080;&#1073;&#1091;&#1076;&#1100; &lt;a href="http://www.adobe.com/cfusion/entitlement/index.cfm?e=airsdk"&gt;Adobe AIR SDK&lt;/a&gt; &#1080; &lt;a href="http://www.adobe.com/cfusion/entitlement/index.cfm?e=flex4sdk"&gt;Adobe Flex SDK&lt;/a&gt; (&#1080;&#1083;&#1080; &lt;a href="http://www.adobe.com/ru/products/flex/flexdownloads/index.html#sdk"&gt;&#1087;&#1088;&#1077;&#1076;&#1099;&#1076;&#1091;&#1097;&#1072;&#1103; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103;&lt;/a&gt;, &#1077;&#1089;&#1083;&#1080; &#1074;&#1099; &#1082;&#1086;&#1085;&#1089;&#1077;&#1088;&#1074;&#1072;&#1090;&#1086;&#1088;), &#1072; &#1090;&#1072;&#1082; &#1078;&#1077; &#1091;&#1089;&#1090;&#1072;&#1085;&#1072;&#1074;&#1083;&#1080;&#1074;&#1072;&#1077;&#1084; &lt;a href="http://get.adobe.com/ru/air/"&gt;Adobe AIR Runtime&lt;/a&gt;. &#1063;&#1090;&#1086;&#1073;&#1099; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080;&#1090;&#1100; &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1080;&#1081;, &#1087;&#1086;&#1089;&#1083;&#1077; &#1079;&#1072;&#1075;&#1088;&#1091;&#1079;&#1082;&#1080; bin-&#1092;&#1072;&#1081;&#1083;&#1072; &#1085;&#1091;&#1078;&#1085;&#1086;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;chmod +x AdobeAIRInstaller.bin
sudo ./AdobeAIRInstaller.bin&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1076;&#1086;&#1073;&#1072;&#1074;&#1080;&#1084; &#1074; &lt;i&gt;PATH&lt;/i&gt; &#1087;&#1091;&#1090;&#1080; &#1082; &#1080;&#1089;&#1087;&#1086;&#1083;&#1085;&#1103;&#1077;&#1084;&#1099;&#1084; &#1092;&#1072;&#1081;&#1083;&#1072;&#1084; &#1079;&#1072;&#1075;&#1088;&#1091;&#1078;&#1077;&#1085;&#1085;&#1099;&#1093; SDK. &#1042; &lt;i&gt;.bashrc&lt;/i&gt; &#1076;&#1086;&#1073;&#1072;&#1074;&#1083;&#1103;&#1077;&#1084;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;export PATH=&amp;quot;/path/to/air_sdk/bin:$PATH&amp;quot;
export PATH=&amp;quot;/path/to/flex_sdk_4/bin:$PATH&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1072;&#1082; &#1078;&#1077; &#1087;&#1086;&#1090;&#1088;&#1077;&#1073;&#1091;&#1077;&#1090;&#1089;&#1103; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080;&#1090;&#1100; &lt;i&gt;java&lt;/i&gt; &#1076;&#1083;&#1103; &#1090;&#1086;&#1075;&#1086;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1085;&#1072; &#1085;&#1077;&#1081; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1083; &#1082;&#1086;&#1084;&#1087;&#1080;&#1083;&#1103;&#1090;&#1086;&#1088;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;sudo apt-get install sun-java6-jre&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1055;&#1086;&#1089;&#1083;&#1077; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080;, &#1085;&#1077;&#1079;&#1072;&#1074;&#1080;&#1089;&#1080;&#1084;&#1086; &#1086;&#1090; &#1090;&#1086;&#1075;&#1086;, &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090;&#1077; &#1074;&#1099; &lt;i&gt;Flex3&lt;/i&gt; &#1080;&#1083;&#1080; &lt;i&gt;Flex4&lt;/i&gt;, &#1085;&#1091;&#1078;&#1085;&#1086; &#1087;&#1077;&#1088;&#1077;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1089;&#1086;&#1076;&#1077;&#1088;&#1078;&#1080;&#1084;&#1086;&#1077; &lt;i&gt;AIR SDK&lt;/i&gt; &#1087;&#1086;&#1074;&#1077;&#1088;&#1093; &lt;i&gt;Flex SDK&lt;/i&gt;. &#1052;&#1085;&#1077; &#1085;&#1077; &#1089;&#1086;&#1074;&#1089;&#1077;&#1084; &#1087;&#1086;&#1085;&#1103;&#1090;&#1077;&#1085; &#1089;&#1072;&#1082;&#1088;&#1072;&#1083;&#1100;&#1085;&#1099;&#1081; &#1089;&#1084;&#1099;&#1089;&#1083; &#1101;&#1090;&#1080;&#1093; &#1076;&#1077;&#1081;&#1089;&#1090;&#1074;&#1080;&#1081;, &#1085;&#1086; &#1080;&#1085;&#1072;&#1095;&#1077; &#1085;&#1080;&#1095;&#1077;&#1075;&#1086; &#1085;&#1077; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1077;&#1090;.&lt;/p&gt;&lt;h2&gt;&#1055;&#1088;&#1080;&#1074;&#1123;&#1090;&#1098;, &#1052;i&#1088;&#1098;!&lt;/h2&gt;&lt;p&gt;&#1057;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1077; &#1087;&#1091;&#1089;&#1090;&#1086;&#1075;&#1086; air-&#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103; &#1090;&#1077;&#1087;&#1077;&#1088;&#1100; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;airake airake_hello_world&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1063;&#1090;&#1086;&#1073;&#1099; &#1079;&#1072;&#1087;&#1091;&#1089;&#1090;&#1080;&#1090;&#1100; &#1077;&#1075;&#1086;, &#1086;&#1076;&#1085;&#1072;&#1082;&#1086;, &#1089;&#1083;&#1077;&#1076;&#1091;&#1077;&#1090; &#1080;&#1089;&#1087;&#1088;&#1072;&#1074;&#1080;&#1090;&#1100; &#1074; &lt;i&gt;src/AirakeHelloWorld-app.xml&lt;/i&gt; &#1080; &lt;i&gt;test/Test-app.xml&lt;/i&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;...
xmlns=&amp;quot;http://ns.adobe.com/air/application/1.5&amp;quot;
...&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1045;&#1089;&#1083;&#1080; &#1074;&#1099; &#1088;&#1077;&#1096;&#1080;&#1083;&#1080; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &lt;i&gt;Flex4&lt;/i&gt;, &#1090;&#1086; &#1074;&#1072;&#1084; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086; &#1086;&#1090;&#1088;&#1077;&#1076;&#1072;&#1082;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1089;&#1075;&#1077;&#1085;&#1077;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1086;&#1077; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1077;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1079;&#1072;&#1087;&#1091;&#1089;&#1090;&#1080;&#1090;&#1100; &#1077;&#1075;&#1086;. &#1069;&#1090;&#1086; &#1089;&#1074;&#1103;&#1079;&#1072;&#1085;&#1086; &#1089; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103;&#1084;&#1080; &#1074; &#1089;&#1090;&#1080;&#1083;&#1103;&#1093;. &#1055;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1087;&#1088;&#1086;&#1097;&#1077; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1091;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100; &#1074;&#1089;&#1105; &#1089;&#1086;&#1076;&#1077;&#1088;&#1078;&#1080;&#1084;&#1086;&#1077; &#1090;&#1101;&#1075;&#1072; WindowedApplication &#1074; &#1092;&#1072;&#1081;&#1083;&#1077; &lt;i&gt;src/AirakeHelloWorld.mxml&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;&#1055;&#1088;&#1086; &lt;a href="http://lonelyelk.ru/posts/15"&gt;&#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &lt;i&gt;TDD&lt;/i&gt; &#1074; &lt;i&gt;ActionScript&lt;/i&gt;&lt;/a&gt; &#1103; &#1091;&#1078;&#1077; &#1087;&#1080;&#1089;&#1072;&#1083;, &#1087;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1087;&#1086;&#1076;&#1088;&#1086;&#1073;&#1085;&#1086; &#1086;&#1089;&#1090;&#1072;&#1085;&#1072;&#1074;&#1083;&#1080;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103; &#1085;&#1077; &#1073;&#1091;&#1076;&#1091;. &#1044;&#1083;&#1103; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088;&#1072; &#1074; &#1082;&#1086;&#1076; &#1085;&#1072; &lt;i&gt;github&lt;/i&gt; &#1074;&#1082;&#1083;&#1102;&#1095;&#1105;&#1085; &#1090;&#1088;&#1080;&#1074;&#1080;&#1072;&#1083;&#1100;&#1085;&#1099;&#1081; &#1090;&#1077;&#1089;&#1090;. &#1047;&#1072;&#1087;&#1091;&#1089;&#1082; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1087;&#1088;&#1086;&#1080;&#1089;&#1093;&#1086;&#1076;&#1080;&#1090; &#1087;&#1088;&#1080;&#1074;&#1099;&#1095;&#1085;&#1099;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;rake test&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1044;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1103;, &#1077;&#1089;&#1083;&#1080; &#1074;&#1099; &#1087;&#1080;&#1096;&#1077;&#1090;&#1077; &#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1100;&#1085;&#1099;&#1077; &#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;&#1080; &lt;i&gt;ASDoc&lt;/i&gt;, &#1090;&#1086;&#1078;&#1077; &#1079;&#1072;&#1087;&#1091;&#1089;&#1082;&#1072;&#1077;&#1090;&#1089;&#1103; &#1087;&#1088;&#1080;&#1074;&#1099;&#1095;&#1085;&#1099;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;rake docs&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1072;&#1082; &#1078;&#1077; &#1076;&#1077;&#1083;&#1072;&#1077;&#1090;&#1089;&#1103; &#1074;&#1089;&#1105; &#1086;&#1089;&#1090;&#1072;&#1083;&#1100;&#1085;&#1086;&#1077;: &#1079;&#1072;&#1087;&#1091;&#1089;&#1082; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103; &#1074; &#1086;&#1090;&#1083;&#1072;&#1076;&#1086;&#1095;&#1085;&#1086;&#1084; &#1088;&#1077;&#1078;&#1080;&#1084;&#1077;, &#1075;&#1077;&#1085;&#1077;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1089;&#1077;&#1088;&#1090;&#1080;&#1092;&#1080;&#1082;&#1072;&#1090;&#1072;, &#1091;&#1087;&#1072;&#1082;&#1086;&#1074;&#1082;&#1072; &#1088;&#1077;&#1083;&#1080;&#1079;&#1072; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103;. &#1044;&#1083;&#1103; &#1090;&#1086;&#1075;&#1086;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1101;&#1090;&#1086; &#1074;&#1089;&#1105; &#1091;&#1079;&#1085;&#1072;&#1090;&#1100;, &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1081;&#1090;&#1077;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;rake -T&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;&#1048;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; rake&lt;/h2&gt;&lt;p&gt;&#1050;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086;, &#1074;&#1089;&#1103; &#1087;&#1088;&#1077;&#1083;&#1077;&#1089;&#1090;&#1100; &lt;i&gt;rake&lt;/i&gt; &#1085;&#1077; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1074; &#1087;&#1088;&#1080;&#1074;&#1099;&#1095;&#1085;&#1099;&#1093; &#1080; &#1082;&#1086;&#1088;&#1086;&#1090;&#1082;&#1080;&#1093; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1072;&#1093; &#1076;&#1083;&#1103; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1080;, &#1085;&#1086; &#1080; &#1074; &#1090;&#1086;&#1084;, &#1095;&#1090;&#1086; &#1084;&#1086;&#1078;&#1085;&#1086; &#1089;&#1086;&#1079;&#1076;&#1072;&#1074;&#1072;&#1090;&#1100; &#1089;&#1074;&#1086;&#1080; &#1089;&#1094;&#1077;&#1085;&#1072;&#1088;&#1080;&#1080;. &#1053;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1074;&#1086;&#1090; &#1082;&#1072;&#1082; &#1084;&#1086;&#1075;&#1083;&#1072; &#1073;&#1099; &#1074;&#1099;&#1075;&#1083;&#1103;&#1076;&#1077;&#1090;&#1100; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072; &#1089; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103;&#1084;&#1080; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103;. &#1044;&#1086;&#1073;&#1072;&#1074;&#1080;&#1084; &#1074; &#1092;&#1072;&#1081;&#1083; &lt;i&gt;raketasks/version.rake&lt;/i&gt; &#1089;&#1083;&#1077;&#1076;&#1091;&#1102;&#1097;&#1080;&#1081; &#1082;&#1086;&#1076;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;require &amp;#39;yaml&amp;#39;

desc &amp;quot;Print out current version&amp;quot;
task :version do
  if md = File.read(YAML.load_file(&amp;#39;airake.yml&amp;#39;)[&amp;quot;appxml_path&amp;quot;]).match(/&amp;lt;version&amp;gt;(.*)&amp;lt;\/version&amp;gt;/)
    puts &amp;quot;Current version is #{md[1]}&amp;quot;
  else
    raise &amp;quot;Cannot detect current version.\nMake sure appxml file contains &amp;lt;version&amp;gt;X.X.X&amp;lt;/version&amp;gt; tag.&amp;quot;
  end
end

namespace :version do

  [:major, :minor, :patch].each do |subv|
    desc &amp;quot;Bump #{subv} in version&amp;quot;
    task :&amp;quot;bump_#{subv}&amp;quot; do

      unless `git status` =~ /nothing to commit/
        raise &amp;quot;There are uncommitted changes. Failed to proceed.&amp;quot;
      end 

      appxml = YAML.load_file(&amp;#39;airake.yml&amp;#39;)[&amp;quot;appxml_path&amp;quot;]
      str = File.read(appxml)

      msg = nil
      new_version = nil

      if str.gsub! /&amp;lt;version&amp;gt;(.*)&amp;lt;\/version&amp;gt;/ do |matched|
        old_version = $1
        major, minor, patch = old_version.split(&amp;quot;.&amp;quot;).map(&amp;amp;:to_i)
        eval(&amp;quot;#{subv} += 1&amp;quot;)
        new_version = [major, minor, patch].join(&amp;quot;.&amp;quot;)
        msg = &amp;quot;Version bump #{old_version} =&amp;gt; #{new_version}&amp;quot;
        puts msg
        &amp;quot;&amp;lt;version&amp;gt;#{new_version}&amp;lt;\/version&amp;gt;&amp;quot;
      end.nil?
        raise &amp;quot;Cannot detect current version.\nMake sure appxml file contains &amp;lt;version&amp;gt;X.X.X&amp;lt;/version&amp;gt; tag.&amp;quot;
      else
        File.open(appxml, &amp;quot;w&amp;quot;) do |f|
          f.write str
        end

        puts `git commit -am &amp;quot;#{msg}&amp;quot;`
        puts `git tag v#{new_version}`
      end
    end
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1040; &#1074; &lt;i&gt;Rakefile&lt;/i&gt; &#1089;&#1086;&#1086;&#1090;&#1074;&#1077;&#1090;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;# Custom rake tasks
Dir.glob(&amp;quot;raketasks/*.rake&amp;quot;).each { |rf| load rf }&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1084;&#1099; &#1084;&#1086;&#1078;&#1077;&#1084; &#1087;&#1088;&#1080;&#1074;&#1099;&#1095;&#1085;&#1099;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1090;&#1100; &#1089; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103;&#1084;&#1080; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103; (&#1072; &#1074;&#1077;&#1088;&#1089;&#1080;&#1080; &#1101;&#1090;&#1080; &#1087;&#1086;&#1090;&#1086;&#1084; &#1073;&#1091;&#1076;&#1091;&#1090; &#1088;&#1072;&#1089;&#1087;&#1086;&#1079;&#1085;&#1072;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1097;&#1080;&#1082;&#1086;&#1084; &#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1080;&#1081;):&lt;/p&gt;&lt;pre&gt;&lt;code&gt;rake version
rake version:bump_major
rake version:bump_minor
rake version:bump_patch&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1048; &#1101;&#1090;&#1086; &#1085;&#1077; &#1087;&#1088;&#1077;&#1076;&#1077;&#1083;!&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://github.com/lonelyelk/lonelyelk_code/tree/master/airake_hello_world/"&gt;&#1055;&#1086;&#1083;&#1085;&#1099;&#1081; &#1082;&#1086;&#1076; &#1089;&#1090;&#1072;&#1090;&#1100;&#1080; &#1085;&#1072; github&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://airake.rubyforge.org/"&gt;&#1048;&#1085;&#1089;&#1090;&#1088;&#1091;&#1082;&#1094;&#1080;&#1103; &#1087;&#1086; &#1088;&#1072;&#1073;&#1086;&#1090;&#1077; &#1089; airake&lt;/a&gt;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1072;&#1103; &#1074;&#1086; &#1084;&#1085;&#1086;&#1075;&#1086;&#1084; &#1087;&#1086;&#1074;&#1090;&#1086;&#1088;&#1077;&#1085;&#1072; &#1074; &#1101;&#1090;&#1086;&#1081; &#1089;&#1090;&#1072;&#1090;&#1100;&#1077; &#1089; &#1076;&#1086;&#1073;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077;&#1084; &#1084;&#1072;&#1085;&#1080;&#1087;&#1091;&#1083;&#1103;&#1094;&#1080;&#1081;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1074;&#1089;&#1105; &#1079;&#1072;&#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1083;&#1086;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://opensource.adobe.com/wiki/display/flexunit/FlexUnit"&gt;&#1044;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1103; &#1087;&#1086; FlexUnit&lt;/a&gt;. &#1053;&#1077; &#1091;&#1074;&#1077;&#1088;&#1077;&#1085;, &#1095;&#1090;&#1086; &#1074; &#1087;&#1086;&#1089;&#1090;&#1072;&#1074;&#1082;&#1077; airake &#1080;&#1076;&#1105;&#1090; &#1089;&#1072;&#1084;&#1072;&#1103; &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1103;&#1103; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103;, &#1085;&#1086; &#1085;&#1080;&#1095;&#1077;&#1075;&#1086; &#1085;&#1077; &#1084;&#1077;&#1096;&#1072;&#1077;&#1090; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; rake task &#1076;&#1083;&#1103; &#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103; &#1074;&#1077;&#1088;&#1089;&#1080;&#1080; FlexUnit :)&lt;/li&gt;&lt;li&gt;&lt;a href="http://rake.rubyforge.org/"&gt;&#1044;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1103; &#1087;&#1086; rake&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/35</id>
    <published>2010-04-07T12:59:47+00:00</published>
    <updated>2010-04-07T12:59:47+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/35"/>
    <title>&#1053;&#1077;&#1084;&#1085;&#1086;&#1075;&#1086; &#1086; $SAFE</title>
    <content type="html">&lt;p&gt;&lt;img alt="secure code" height="337" src="http://lonelyelk.ru/images/uploads/0000/0007/se_ure_code.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1042;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1057;&#1086;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1085;&#1086; &#1085;&#1077; &#1087;&#1086; &#1088;&#1072;&#1073;&#1086;&#1090;&#1077; &#1079;&#1072;&#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1086;&#1074;&#1072;&#1083;&#1089;&#1103; &#1087;&#1077;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1086;&#1081; &lt;b&gt;$SAFE&lt;/b&gt; &#1080; &#1077;&#1105; &#1088;&#1086;&#1083;&#1100;&#1102; &#1074; &#1078;&#1080;&#1079;&#1085;&#1080; &#1089;&#1086;&#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1086;&#1075;&#1086; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1095;&#1080;&#1082;&#1072;. &#1054;&#1082;&#1072;&#1079;&#1072;&#1083;&#1086;&#1089;&#1100;, &#1095;&#1090;&#1086; &#1074;&#1089;&#1105; &#1085;&#1091;&#1078;&#1085;&#1086; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1103;&#1090;&#1100; &#1089;&#1072;&#1084;&#1086;&#1084;&#1091;.&lt;/p&gt;&lt;h2&gt;&#1053;&#1077;&#1078;&#1085;&#1072;&#1103; &#1073;&#1077;&#1079;&#1086;&#1087;&#1072;&#1089;&#1085;&#1086;&#1089;&#1090;&#1100;&lt;/h2&gt;&lt;p&gt;&#1044;&#1083;&#1103; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1077;&#1081; &#1085;&#1072; &#1088;&#1072;&#1079;&#1085;&#1099;&#1093; &#1091;&#1088;&#1086;&#1074;&#1085;&#1103;&#1093; &#1073;&#1077;&#1079;&#1086;&#1087;&#1072;&#1089;&#1085;&#1086;&#1089;&#1090;&#1080; &#1089;&#1086;&#1073;&#1088;&#1072;&#1083; &#1085;&#1077;&#1073;&#1086;&#1083;&#1100;&#1096;&#1091;&#1102; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1082;&#1091;. &#1054;&#1085;&#1072; &#1087;&#1088;&#1086;&#1089;&#1080;&#1090; &#1074;&#1074;&#1077;&#1089;&#1090;&#1080; &#1080;&#1084;&#1103; &#1092;&#1072;&#1081;&#1083;&#1072;, &#1076;&#1077;&#1083;&#1072;&#1103; &#1089;&#1090;&#1088;&#1086;&#1082;&#1086;&#1074;&#1091;&#1102; &#1087;&#1077;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1091;&#1102; &#1085;&#1077;&#1073;&#1077;&#1079;&#1086;&#1087;&#1072;&#1089;&#1085;&#1086;&#1081;, &#1080; &#1087;&#1099;&#1090;&#1072;&#1077;&#1090;&#1089;&#1103; &#1095;&#1090;&#1086;-&#1090;&#1086; &#1089; &#1101;&#1090;&#1080;&#1084; &#1074;&#1089;&#1077;&#1084; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100;.&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;print &amp;quot;child: &amp;quot;
child = gets.chomp
puts &amp;quot;child tainted: #{child.tainted?}&amp;quot;
(0..4).to_a.each do |i|
  puts &amp;quot;SAFE: #{i}&amp;quot;
  $a = &amp;quot;safe&amp;quot;
  th = Thread.new do
    $SAFE = i
    child_copy = child.dup
    Thread.current[:out] = &amp;quot;&amp;quot;

    begin
      load child_copy
      Thread.current[:out] += &amp;quot;1. Child loaded\n&amp;quot;
    rescue SecurityError =&amp;gt; e
      Thread.current[:out] += &amp;quot;1. Security error: #{e.to_s}\n&amp;quot;
      begin
        child_copy.untaint
        load child_copy
        Thread.current[:out] += &amp;quot;2. Child untainted and loaded\n&amp;quot;
      rescue SecurityError =&amp;gt; e
        Thread.current[:out] += &amp;quot;2. Security error: #{e.to_s}\n&amp;quot;
        begin
         Thread.current[:out] += &amp;quot;3. Read from file &amp;#39;#{child_copy}&amp;#39;: &amp;#39;#{File.read(child_copy)}&amp;#39;\n&amp;quot;
        rescue SecurityError =&amp;gt; e
          Thread.current[:out] += &amp;quot;3. Security error: #{e.to_s}\n&amp;quot;
          begin
           Thread.current[:out] += &amp;quot;4. Read from untainted file: &amp;#39;#{File.read(&amp;quot;child.rb&amp;quot;)}&amp;#39;\n&amp;quot;
          rescue SecurityError =&amp;gt; e
            Thread.current[:out] += &amp;quot;4. Security error: #{e.to_s}\n&amp;quot;
          end
        end
      end
    end

    begin
      $a = &amp;quot;modified&amp;quot;
      Thread.current[:out] +=  &amp;quot;5. Global variable modified: $a = &amp;#39;#{$a}&amp;#39;\n&amp;quot;
    rescue SecurityError =&amp;gt; e
      Thread.current[:out] += &amp;quot;5. Security error: #{e.to_s}\n&amp;quot;
    end

    begin
      Dir.mkdir &amp;quot;test&amp;quot;
      Thread.current[:out] += &amp;quot;6. Created directory &amp;#39;test&amp;#39;: #{File.exist?(&amp;quot;test&amp;quot;)}\n&amp;quot;
      Dir.rmdir &amp;quot;test&amp;quot;
    rescue SecurityError =&amp;gt; e
      Thread.current[:out] += &amp;quot;6. Security error: #{e.to_s}\n&amp;quot;
    end

    begin
      Thread.current[:out] +=  &amp;quot;7. Dir glob: #{Dir.glob(File.join(&amp;quot;..&amp;quot;, &amp;quot;*&amp;quot;)).inspect}\n&amp;quot;
    rescue SecurityError =&amp;gt; e
      Thread.current[:out] += &amp;quot;7. Security error: #{e.to_s}\n&amp;quot;
    end

    begin
      Thread.current[:out] +=  &amp;quot;8. System ls output: &amp;#39;#{`ls`.chomp}&amp;#39;&amp;quot;
    rescue SecurityError =&amp;gt; e
      Thread.current[:out] += &amp;quot;8. Security error: #{e.to_s}\n&amp;quot;
    end
  end
  th.join
  puts &amp;quot;Global variable: $a = &amp;#39;#{$a}&amp;#39;&amp;quot;
  puts th[:out] if th[:out]
end&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1050;&#1086;&#1085;&#1089;&#1090;&#1088;&#1091;&#1082;&#1094;&#1080;&#1103; &#1089;&#1086; &lt;i&gt;Thread.current[:out]&lt;/i&gt; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090;&#1089;&#1103; &#1087;&#1086;&#1090;&#1086;&#1084;&#1091;, &#1095;&#1090;&#1086; &#1076;&#1083;&#1103; &lt;i&gt;$SAFE &gt;= 4&lt;/i&gt; &#1085;&#1077;&#1083;&#1100;&#1079;&#1103; &#1085;&#1080;&#1095;&#1077;&#1075;&#1086; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1085;&#1080; &#1074; &#1082;&#1072;&#1082;&#1080;&#1077; &#1091;&#1089;&#1090;&#1088;&#1086;&#1081;&#1089;&#1090;&#1074;&#1072; &#1074;&#1099;&#1074;&#1086;&#1076;&#1072;.&lt;/p&gt;&lt;p&gt;&#1042;&#1088;&#1086;&#1076;&#1077; &#1073;&#1099; &#1074;&#1089;&#1105; &#1083;&#1086;&#1075;&#1080;&#1095;&#1085;&#1086;. &#1055;&#1077;&#1088;&#1074;&#1099;&#1081; &#1091;&#1088;&#1086;&#1074;&#1077;&#1085;&#1100; &#1075;&#1086;&#1076;&#1080;&#1090;&#1089;&#1103; &#1076;&#1083;&#1103; &#1091;&#1084;&#1077;&#1088;&#1077;&#1085;&#1085;&#1086;&#1075;&#1086; &#1082;&#1072;&#1088;&#1072;&#1085;&#1090;&#1080;&#1085;&#1072; &#1074;&#1085;&#1077;&#1096;&#1085;&#1080;&#1093; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093;. &#1055;&#1088;&#1080; &#1078;&#1077;&#1083;&#1072;&#1085;&#1080;&#1080; &#1080;&#1093; &#1084;&#1086;&#1078;&#1085;&#1086; &#1080; &#1088;&#1072;&#1089;&#1082;&#1086;&#1083;&#1076;&#1086;&#1074;&#1072;&#1090;&#1100;. &#1042;&#1090;&#1086;&#1088;&#1086;&#1081; &#1091;&#1088;&#1086;&#1074;&#1077;&#1085;&#1100; &#1079;&#1072;&#1087;&#1088;&#1077;&#1097;&#1072;&#1077;&#1090; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103; &#1074; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074;&#1086;&#1081; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1077;. &#1058;&#1088;&#1077;&#1090;&#1080;&#1081; &#1091;&#1088;&#1086;&#1074;&#1077;&#1085;&#1100; &#1087;&#1086;&#1093;&#1086;&#1078; &#1085;&#1072; &#1086;&#1089;&#1072;&#1076;&#1091; &#1089; &#1087;&#1086;&#1089;&#1090;&#1086;&#1103;&#1085;&#1085;&#1099;&#1084; &#1087;&#1086;&#1076;&#1086;&#1079;&#1088;&#1077;&#1085;&#1080;&#1077;&#1084; &#1085;&#1072; &#1096;&#1087;&#1080;&#1086;&#1085;&#1072;&#1078;. &#1042;&#1089;&#1077; &#1089;&#1086;&#1079;&#1076;&#1072;&#1085;&#1085;&#1099;&#1077; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1099; &#1089;&#1095;&#1080;&#1090;&#1072;&#1102;&#1090;&#1089;&#1103; &#1085;&#1077;&#1073;&#1077;&#1079;&#1086;&#1087;&#1072;&#1089;&#1085;&#1099;&#1084;&#1080;. &#1040; &#1095;&#1077;&#1090;&#1074;&#1105;&#1088;&#1090;&#1099;&#1081; &#1091;&#1088;&#1086;&#1074;&#1077;&#1085;&#1100;&amp;nbsp;&amp;#151; &#1101;&#1090;&#1086; &#1089;&#1072;&#1084;&#1086;&#1077; &#1073;&#1083;&#1080;&#1079;&#1082;&#1086;&#1077; &#1082; &#1087;&#1077;&#1089;&#1086;&#1095;&#1085;&#1080;&#1094;&#1077; (sandbox) &#1074; &#1088;&#1091;&#1073;&#1080;, &#1095;&#1090;&#1086; &#1095;&#1090;&#1086; &#1077;&#1089;&#1090;&#1100;.&lt;/p&gt;&lt;p&gt;&#1050;&#1089;&#1090;&#1072;&#1090;&#1080;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1077;&#1097;&#1105; github &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1083; &#1082;&#1072;&#1082; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1081; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;, &#1089;&#1087;&#1077;&#1094;&#1080;&#1092;&#1080;&#1082;&#1072;&#1094;&#1080;&#1103; gemspec &#1074;&#1099;&#1087;&#1086;&#1083;&#1085;&#1103;&#1083;&#1072;&#1089;&#1100; &#1090;&#1072;&#1084; &#1087;&#1086;&#1076; &lt;i&gt;$SAFE = 3&lt;/i&gt;. &#1044;&#1083;&#1103; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1095;&#1080;&#1082;&#1086;&#1074; &#1101;&#1090;&#1086; &#1074;&#1099;&#1083;&#1080;&#1074;&#1072;&#1083;&#1086;&#1089;&#1100; &#1074; &#1090;&#1086;, &#1095;&#1090;&#1086; &#1085;&#1091;&#1078;&#1085;&#1086; &#1073;&#1099;&#1083;&#1086; &#1087;&#1077;&#1088;&#1077;&#1095;&#1080;&#1089;&#1083;&#1103;&#1090;&#1100; &#1074;&#1089;&#1077; &#1092;&#1072;&#1081;&#1083;&#1099; &#1089;&#1074;&#1086;&#1077;&#1081; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1080; &#1074;&#1088;&#1091;&#1095;&#1085;&#1091;&#1102; &#1074;&#1084;&#1077;&#1089;&#1090;&#1086; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1082;&#1072;&#1082;&#1086;&#1075;&#1086;-&#1085;&#1080;&#1073;&#1091;&#1076;&#1100; &#1083;&#1080;&#1089;&#1090;&#1080;&#1085;&#1075;&#1072;.&lt;/p&gt;&lt;h2&gt;&#1057;&#1091;&#1088;&#1086;&#1074;&#1099;&#1081; &#1075;&#1072;&#1081;&#1076;&#1083;&#1072;&#1081;&#1085;&lt;/h2&gt;&lt;p&gt;&#1050;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086; &#1078;&#1077;, &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &lt;b&gt;$SAFE&lt;/b&gt; &#1085;&#1077; &#1091;&#1073;&#1077;&#1088;&#1077;&#1078;&#1105;&#1090; &#1086;&#1090; &#1076;&#1077;&#1081;&#1089;&#1090;&#1074;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086; &#1085;&#1072;&#1089;&#1090;&#1086;&#1081;&#1095;&#1080;&#1074;&#1086;&#1081; &#1072;&#1090;&#1072;&#1082;&#1080; &#1080;&#1083;&#1080; &#1073;&#1083;&#1086;&#1082;&#1080;&#1088;&#1091;&#1102;&#1097;&#1077;&#1075;&#1086; &#1082;&#1086;&#1076;&#1072;. &#1053;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;Thread.new do
  $SAFE = 2
  class String
    def ==(other_string)
      true
    end
  end
end.join
puts &amp;quot;string modified: #{&amp;#39;a&amp;#39; == &amp;#39;b&amp;#39;}&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1048; &#1101;&#1090;&#1086; &#1085;&#1072; &#1074;&#1090;&#1086;&#1088;&#1086;&#1084; &#1091;&#1088;&#1086;&#1074;&#1085;&#1077;! &#1040; &#1085;&#1072; &#1090;&#1088;&#1077;&#1090;&#1100;&#1077;&#1084; &#1086;&#1090;&#1082;&#1088;&#1099;&#1090;&#1100; &#1082;&#1083;&#1072;&#1089;&#1089; &#1090;&#1086;&#1078;&#1077; &#1084;&#1086;&#1078;&#1085;&#1086;, &#1085;&#1086; &#1074;&#1099;&#1079;&#1086;&#1074; &#1087;&#1077;&#1088;&#1077;&#1075;&#1088;&#1091;&#1078;&#1077;&#1085;&#1085;&#1086;&#1075;&#1086; &#1086;&#1087;&#1077;&#1088;&#1072;&#1090;&#1086;&#1088;&#1072; &#1073;&#1091;&#1076;&#1077;&#1090; &#1074;&#1099;&#1079;&#1099;&#1074;&#1072;&#1090;&#1100; &lt;i&gt;SecurityError&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;&#1053;&#1072; &#1089;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103;&#1096;&#1085;&#1080;&#1081; &#1084;&#1086;&#1084;&#1077;&#1085;&#1090; &#1101;&#1090;&#1091; &#1082;&#1086;&#1085;&#1094;&#1077;&#1087;&#1094;&#1080;&#1102; &#1073;&#1077;&#1079;&#1086;&#1087;&#1072;&#1089;&#1085;&#1086;&#1089;&#1090;&#1080; &#1084;&#1086;&#1078;&#1085;&#1086; &#1089;&#1095;&#1080;&#1090;&#1072;&#1090;&#1100; &#1089;&#1099;&#1088;&#1086;&#1081;. &#1040;&#1082;&#1090;&#1091;&#1072;&#1083;&#1100;&#1085;&#1086;&#1077; &#1087;&#1086;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077; &#1088;&#1091;&#1073;&#1080; 1.8 &#1089;&#1083;&#1077;&#1075;&#1082;&#1072; &#1086;&#1090;&#1082;&#1083;&#1086;&#1085;&#1103;&#1077;&#1090;&#1089;&#1103; &#1086;&#1090; &#1086;&#1087;&#1080;&#1089;&#1072;&#1085;&#1080;&#1081;, &#1095;&#1090;&#1086; &#1103; &#1085;&#1072;&#1096;&#1105;&#1083;. &#1055;&#1086;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077; &#1074; 1.9 &#1080;&#1079;&#1084;&#1077;&#1085;&#1080;&#1083;&#1086;&#1089;&#1100;, &#1085;&#1086; &#1087;&#1086;&#1076;&#1088;&#1086;&#1073;&#1085;&#1086; &#1085;&#1080;&#1075;&#1076;&#1077; &#1085;&#1077; &#1086;&#1087;&#1080;&#1089;&#1072;&#1085;&#1086; (&#1103; &#1085;&#1077; &#1085;&#1072;&#1096;&#1105;&#1083;).&lt;/p&gt;&lt;p&gt;&#1069;&#1090;&#1086; &#1085;&#1077; &#1079;&#1085;&#1072;&#1095;&#1080;&#1090;, &#1095;&#1090;&#1086; &#1101;&#1090;&#1086;&#1081; &#1087;&#1077;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1086;&#1081; &#1085;&#1077;&#1090; &#1087;&#1088;&#1080;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103; &#1074; &#1078;&#1080;&#1079;&#1085;&#1080; &#1087;&#1088;&#1086;&#1075;&#1088;&#1077;&#1089;&#1089;&#1080;&#1074;&#1085;&#1086;&#1075;&#1086; &#1095;&#1077;&#1083;&#1086;&#1074;&#1077;&#1095;&#1077;&#1089;&#1090;&#1074;&#1072;. &#1040;&#1076;&#1077;&#1082;&#1074;&#1072;&#1090;&#1085;&#1086;&#1077; &#1090;&#1077;&#1082;&#1091;&#1097;&#1077;&#1084;&#1091; &#1089;&#1086;&#1089;&#1090;&#1086;&#1103;&#1085;&#1080;&#1102; &#1087;&#1088;&#1080;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1077;&amp;nbsp;&amp;#151; &#1101;&#1090;&#1086; &#1075;&#1072;&#1081;&#1076;&#1083;&#1072;&#1081;&#1085; &#1087;&#1088;&#1080; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1077;. &#1056;&#1091;&#1082;&#1086;&#1074;&#1086;&#1076;&#1089;&#1090;&#1074;&#1086; &#1076;&#1083;&#1103; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1089;&#1090;&#1086;&#1074;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1077; &#1089;&#1072;&#1084;&#1086; &#1089;&#1083;&#1077;&#1076;&#1080;&#1090; &#1079;&#1072; &#1089;&#1074;&#1086;&#1080;&#1084; &#1080;&#1089;&#1087;&#1086;&#1083;&#1085;&#1077;&#1085;&#1080;&#1077;&#1084;. &#1046;&#1077;&#1089;&#1090;&#1082;&#1086;&#1074;&#1072;&#1090;&#1086;, &#1085;&#1086; &#1079;&#1072;&#1090;&#1086; &#1076;&#1077;&#1081;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086;. :)&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://github.com/lonelyelk/lonelyelk_code/tree/master/safe/"&gt;&#1050;&#1086;&#1076; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088;&#1086;&#1074; &#1074; &#1089;&#1090;&#1072;&#1090;&#1100;&#1077; &#1085;&#1072; github&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&#1057;&#1090;&#1072;&#1088;&#1072;&#1103;, &#1085;&#1086; &lt;a href="http://ruby-doc.org/docs/ProgrammingRuby/html/taint.html"&gt;&#1089;&#1072;&#1084;&#1072;&#1103; &#1087;&#1086;&#1076;&#1088;&#1086;&#1073;&#1085;&#1072;&#1103; &#1076;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1103; &#1087;&#1086; $SAFE&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&#1055;&#1088;&#1086;&#1089;&#1090;&#1086; &#1076;&#1086;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;: &lt;a href="http://www.tutorialspoint.com/ruby/ruby_quick_guide.htm"&gt;&#1096;&#1087;&#1072;&#1088;&#1075;&#1072;&#1083;&#1082;&#1072; &#1087;&#1086; &#1088;&#1091;&#1073;&#1080;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/34</id>
    <published>2010-03-24T19:07:37+00:00</published>
    <updated>2010-03-24T19:07:37+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/34"/>
    <title>&#1055;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089; &#1087;&#1088;&#1080;&#1105;&#1084;&#1072; &#1087;&#1088;&#1072;&#1074;&#1086;&#1082; &#1074; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1077; &#1089; &#1086;&#1090;&#1082;&#1088;&#1099;&#1090;&#1099;&#1084;&#1080; &#1080;&#1089;&#1093;&#1086;&#1076;&#1085;&#1080;&#1082;&#1072;&#1084;&#1080;</title>
    <content type="html">&lt;p&gt;&lt;img alt="opensource" height="337" src="http://lonelyelk.ru/images/uploads/0000/0005/opensource.jpg" width="600" /&gt;&lt;/p&gt;&lt;h2&gt;&#1042;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1044;&#1083;&#1103; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099; &#1074; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1077; &#1089; &#1086;&#1090;&#1082;&#1088;&#1099;&#1090;&#1099;&#1084;&#1080; &#1080;&#1089;&#1093;&#1086;&#1076;&#1085;&#1080;&#1082;&#1072;&#1084;&#1080; &#1074;&#1077;&#1089;&#1100;&#1084;&#1072; &#1091;&#1076;&#1086;&#1073;&#1085;&#1072; &#1088;&#1072;&#1089;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1105;&#1085;&#1085;&#1072;&#1103; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1072; &#1082;&#1086;&#1085;&#1090;&#1088;&#1086;&#1083;&#1103; &#1074;&#1077;&#1088;&#1089;&#1080;&#1081;. &#1071; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1102; &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt;. &#1055;&#1086;&#1085;&#1103;&#1090;&#1085;&#1086;, &#1095;&#1090;&#1086; &#1077;&#1089;&#1090;&#1100; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089; &#1089; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077;&#1084; &#1087;&#1072;&#1090;&#1095;&#1072;, &#1074;&#1099;&#1089;&#1099;&#1083;&#1072;&#1077;&#1084;&#1086;&#1075;&#1086; &#1087;&#1086; &#1087;&#1086;&#1095;&#1090;&#1077;, &#1085;&#1086; &#1101;&#1090;&#1086;&#1090; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089; &#1085;&#1077; &#1103;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1101;&#1082;&#1089;&#1082;&#1083;&#1102;&#1079;&#1080;&#1074;&#1085;&#1099;&#1084; &#1076;&#1083;&#1103; &#1088;&#1072;&#1089;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1105;&#1085;&#1085;&#1086;&#1081; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1099; &#1082;&#1086;&#1085;&#1090;&#1088;&#1086;&#1083;&#1103; &#1074;&#1077;&#1088;&#1089;&#1080;&#1081;. &#1055;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1103; &#1086;&#1087;&#1080;&#1096;&#1091; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089; &#1089; &#1090;&#1072;&#1082; &#1085;&#1072;&#1079;&#1099;&#1074;&#1072;&#1077;&#1084;&#1099;&#1084; pull request.&lt;/p&gt;&lt;h2&gt;&#1055;&#1086;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1072; &#1079;&#1072;&#1076;&#1072;&#1095;&#1080;&lt;/h2&gt;&lt;p&gt;&#1055;&#1080;&#1096;&#1077;&#1090; &#1084;&#1085;&#1077; &#1085;&#1077;&#1082;&#1090;&#1086; Tallak Tveide, &#1089;&#1086;&#1086;&#1073;&#1097;&#1072;&#1103;, &#1095;&#1090;&#1086; &#1086;&#1085; &#1089;&#1076;&#1077;&#1083;&#1072;&#1083; &#1082;&#1086;&#1087;&#1080;&#1102; &#1084;&#1086;&#1077;&#1075;&#1086; &#1087;&#1088;&#1086;&#1077;&#1082;&#1090;&#1072; &lt;a href="http://github.com/tallakt/gphoto4ruby"&gt;&#1091; &#1089;&#1077;&#1073;&#1103; &#1085;&#1072; github&lt;/a&gt; &#1080; &#1074;&#1085;&#1105;&#1089; &#1085;&#1077;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1086; &#1087;&#1088;&#1072;&#1074;&#1086;&#1082;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1077;&#1084;&#1091; &#1073;&#1099;&#1083;&#1080; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1099;, &#1080; &#1086;&#1090; &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1093; &#1076;&#1088;&#1091;&#1075;&#1080;&#1077; &#1088;&#1077;&#1073;&#1103;&#1090;&#1072;, &#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1102;&#1097;&#1080;&#1077;&#1089;&#1103; &lt;a href="http://github.com/lonelyelk/gphoto4ruby"&gt;&#1101;&#1090;&#1086;&#1081; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1086;&#1081;&lt;/a&gt; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1074;&#1099;&#1080;&#1075;&#1088;&#1072;&#1102;&#1090;. &#1042;&#1077;&#1090;&#1082;&#1072;, &#1074; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1081; &#1085;&#1072;&#1093;&#1086;&#1076;&#1103;&#1090;&#1089;&#1103; &#1085;&#1091;&#1078;&#1085;&#1099;&#1077; &#1084;&#1085;&#1077; &#1087;&#1088;&#1072;&#1074;&#1082;&#1080;, &#1085;&#1072;&#1079;&#1099;&#1074;&#1072;&#1077;&#1090;&#1089;&#1103; eos_40D_bugs. &#1069;&#1090;&#1086; &#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1086; &#1082;&#1089;&#1090;&#1072;&#1090;&#1080;, &#1095;&#1090;&#1086; &#1085;&#1072;&#1096;&#1105;&#1083;&#1089;&#1103; &#1095;&#1077;&#1083;&#1086;&#1074;&#1077;&#1082; &#1089; &#1050;&#1101;&#1085;&#1086;&#1085;&#1086;&#1084;, &#1087;&#1086;&#1090;&#1086;&#1084;&#1091; &#1095;&#1090;&#1086; &#1103; &#1080;&#1089;&#1087;&#1099;&#1090;&#1099;&#1074;&#1072;&#1102; &#1074;&#1089;&#1105; &#1085;&#1072; &#1053;&#1080;&#1082;&#1086;&#1085;&#1072;&#1093; :)&lt;/p&gt;&lt;p&gt;&#1050;&#1072;&#1082;&#1086;&#1074;&#1099; &#1078;&#1077; &#1084;&#1086;&#1080; &#1076;&#1077;&#1081;&#1089;&#1090;&#1074;&#1080;&#1103;?&lt;/p&gt;&lt;h2&gt;&#1056;&#1077;&#1096;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1047;&#1072;&#1093;&#1086;&#1076;&#1080;&#1084; &#1074; &#1085;&#1072;&#1096; &#1083;&#1086;&#1082;&#1072;&#1083;&#1100;&#1085;&#1099;&#1081; &#1088;&#1072;&#1073;&#1086;&#1095;&#1080;&#1081; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1081; &#1080; &#1076;&#1086;&#1073;&#1072;&#1074;&#1083;&#1103;&#1077;&#1084; &#1085;&#1086;&#1074;&#1099;&#1081; &#1080;&#1089;&#1090;&#1086;&#1095;&#1085;&#1080;&#1082; &#1087;&#1088;&#1072;&#1074;&#1086;&#1082;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git remote add tallakt git://github.com/tallakt/gphoto4ruby&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1088;&#1072;&#1089;&#1089;&#1084;&#1086;&#1090;&#1088;&#1080;&#1084; &#1087;&#1088;&#1072;&#1074;&#1082;&#1080;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git fetch tallakt eos_40D_bugs:develop&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1069;&#1090;&#1072; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1072; &#1079;&#1072;&#1073;&#1077;&#1088;&#1105;&#1090; &#1080;&#1079; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1103; tallakt &#1089; &#1074;&#1077;&#1090;&#1082;&#1080; eos_40D_bugs &#1080;&#1089;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103; &#1080; &#1089;&#1086;&#1079;&#1076;&#1072;&#1089;&#1090; &#1083;&#1086;&#1082;&#1072;&#1083;&#1100;&#1085;&#1091;&#1102; &#1074;&#1077;&#1088;&#1089;&#1080;&#1102; &#1074; &#1083;&#1086;&#1082;&#1072;&#1083;&#1100;&#1085;&#1086;&#1081; &#1074;&#1077;&#1090;&#1082;&#1077; develop. &#1063;&#1090;&#1086;&#1073;&#1099; &#1091;&#1074;&#1080;&#1076;&#1077;&#1090;&#1100; &#1080;&#1089;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git diff develop&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1063;&#1090;&#1086; &#1074;&#1099;&#1076;&#1072;&#1089;&#1090; &#1085;&#1072;&#1084; &#1080;&#1089;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103; &#1086;&#1090;&#1085;&#1086;&#1089;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086; &#1090;&#1077;&#1082;&#1091;&#1097;&#1077;&#1081; &#1074;&#1077;&#1090;&#1082;&#1080;.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git checkout develop&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1063;&#1090;&#1086;&#1073;&#1099; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1090;&#1100; &#1089; &#1087;&#1088;&#1072;&#1074;&#1082;&#1072;&#1084;&#1080; &#1080; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1090;&#1086;, &#1095;&#1090;&#1086; &#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1083;&#1086;&#1089;&#1100;.&lt;/p&gt;&lt;p&gt;&#1045;&#1089;&#1083;&#1080; &#1103; &#1087;&#1086;&#1082;&#1072; &#1085;&#1077; &#1075;&#1086;&#1090;&#1086;&#1074; &#1089;&#1083;&#1080;&#1074;&#1072;&#1090;&#1100; &#1080;&#1089;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103; &#1089; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1086;&#1081; &#1074;&#1077;&#1090;&#1082;&#1086;&#1081; master, &#1085;&#1086; &#1093;&#1086;&#1095;&#1091; &#1077;&#1097;&#1105; &#1087;&#1086;&#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1090;&#1100; &#1089; &#1101;&#1090;&#1080;&#1084; &#1080;&#1079; &#1088;&#1072;&#1079;&#1085;&#1099;&#1093; &#1084;&#1077;&#1089;&#1090;, &#1090;&#1086; &#1084;&#1085;&#1077; &#1085;&#1091;&#1078;&#1085;&#1086; &#1089;&#1086;&#1079;&#1076;&#1072;&#1090;&#1100; &#1074;&#1077;&#1090;&#1082;&#1091; develop &#1074; &#1084;&#1086;&#1105;&#1084; &#1094;&#1077;&#1085;&#1090;&#1088;&#1072;&#1083;&#1100;&#1085;&#1086;&#1084; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1080; &#1085;&#1072; github, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1086;&#1090;&#1085;&#1086;&#1089;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086; &#1083;&#1086;&#1082;&#1072;&#1083;&#1100;&#1085;&#1086;&#1081; &#1082;&#1086;&#1087;&#1080;&#1080; &#1091; &#1084;&#1077;&#1085;&#1103; &#1086;&#1073;&#1099;&#1095;&#1085;&#1086; &#1085;&#1072;&#1079;&#1099;&#1074;&#1072;&#1077;&#1090;&#1089;&#1103; origin.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git push origin develop&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1069;&#1090;&#1086; &#1089;&#1086;&#1079;&#1076;&#1072;&#1089;&#1090; &#1074;&#1077;&#1090;&#1082;&#1091; develop &#1085;&#1072; &#1091;&#1076;&#1072;&#1083;&#1105;&#1085;&#1085;&#1086;&#1084; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1080;, &#1089; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1081; &#1103; &#1087;&#1086;&#1090;&#1086;&#1084; &#1089;&#1084;&#1086;&#1075;&#1091; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1090;&#1100; &#1080;&#1079; &#1076;&#1088;&#1091;&#1075;&#1086;&#1075;&#1086; &#1083;&#1086;&#1082;&#1072;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1103;, &#1074;&#1099;&#1087;&#1086;&#1083;&#1085;&#1080;&#1074;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git pull origin develop&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1055;&#1086;&#1089;&#1083;&#1077; &#1090;&#1086;&#1075;&#1086;, &#1082;&#1072;&#1082; &#1103; &#1076;&#1086;&#1074;&#1086;&#1083;&#1077;&#1085; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103;&#1084;&#1080; &#1080; &#1093;&#1086;&#1095;&#1091; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1086;&#1092;&#1080;&#1094;&#1080;&#1072;&#1083;&#1100;&#1085;&#1099;&#1081; &#1088;&#1077;&#1083;&#1080;&#1079;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git merge master
git branch -d develop
git push origin master
git push origin :develop&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1055;&#1077;&#1088;&#1074;&#1072;&#1103; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1072;, &#1087;&#1088;&#1077;&#1076;&#1087;&#1086;&#1083;&#1072;&#1075;&#1072;&#1103;, &#1095;&#1090;&#1086; &#1090;&#1077;&#1082;&#1091;&#1097;&#1072;&#1103; &#1074;&#1077;&#1090;&#1082;&#1072;&amp;nbsp;&amp;#151; develop, &#1089;&#1083;&#1080;&#1074;&#1072;&#1077;&#1090; &#1077;&#1105; &#1074; master. &#1042;&#1090;&#1086;&#1088;&#1072;&#1103; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1072; &#1091;&#1076;&#1072;&#1083;&#1103;&#1077;&#1090; &#1083;&#1086;&#1082;&#1072;&#1083;&#1100;&#1085;&#1091;&#1102; &#1074;&#1077;&#1090;&#1082;&#1091; develop. &#1058;&#1088;&#1077;&#1090;&#1100;&#1103; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1072; &#1086;&#1090;&#1087;&#1088;&#1072;&#1074;&#1083;&#1103;&#1077;&#1090; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103; &#1074; &#1074;&#1077;&#1090;&#1082;&#1091; master &#1085;&#1072; &#1094;&#1077;&#1085;&#1090;&#1088;&#1072;&#1083;&#1100;&#1085;&#1086;&#1084; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1080;. &#1063;&#1077;&#1090;&#1074;&#1105;&#1088;&#1090;&#1072;&#1103; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1072; &#1091;&#1076;&#1072;&#1083;&#1103;&#1077;&#1090; &#1074;&#1077;&#1090;&#1082;&#1091; develop &#1085;&#1072; &#1094;&#1077;&#1085;&#1090;&#1088;&#1072;&#1083;&#1100;&#1085;&#1086;&#1084; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1080;.&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://help.github.com/"&gt;&#1053;&#1077;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1086; &#1096;&#1087;&#1072;&#1088;&#1075;&#1072;&#1083;&#1086;&#1082; &#1086;&#1090; github&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.kernel.org/pub/software/scm/git/docs/"&gt;&#1044;&#1077;&#1083;&#1100;&#1085;&#1072;&#1103; &#1076;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1103; &#1087;&#1086; git&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/ol&gt;&lt;h2&gt;&#1055;&#1086;&#1089;&#1083;&#1077;&#1089;&#1083;&#1086;&#1074;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1050;&#1072;&#1082; &#1074;&#1099; &#1079;&#1072;&#1084;&#1077;&#1090;&#1080;&#1083;&#1080;, &#1074; &#1101;&#1090;&#1086;&#1084; &#1075;&#1086;&#1076;&#1091; &#1084;&#1086;&#1080; &#1089;&#1090;&#1072;&#1090;&#1100;&#1080; &#1089;&#1086;&#1087;&#1088;&#1086;&#1074;&#1086;&#1078;&#1076;&#1072;&#1102;&#1090;&#1089;&#1103; &#1087;&#1088;&#1077;&#1082;&#1088;&#1072;&#1089;&#1085;&#1077;&#1081;&#1096;&#1080;&#1084;&#1080; &#1090;&#1077;&#1084;&#1072;&#1090;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080;&#1084;&#1080; &#1082;&#1072;&#1088;&#1090;&#1080;&#1085;&#1082;&#1072;&#1084;&#1080; &#1072;&#1074;&#1090;&#1086;&#1088;&#1089;&#1090;&#1074;&#1072; &lt;a href="http://irtroit.com/"&gt;&#1048;&#1088;&#1080;&#1085;&#1099; &#1058;&#1088;&#1086;&#1080;&#1094;&#1082;&#1086;&#1081;&lt;/a&gt;&amp;nbsp;&amp;#151; &#1084;&#1086;&#1077;&#1081; &#1087;&#1088;&#1077;&#1082;&#1088;&#1072;&#1089;&#1085;&#1086;&#1081; &#1089;&#1091;&#1087;&#1088;&#1091;&#1075;&#1080;. &#1045;&#1105; &#1087;&#1077;&#1088;&#1091; &#1090;&#1072;&#1082;&#1078;&#1077; &#1087;&#1088;&#1080;&#1085;&#1072;&#1076;&#1083;&#1077;&#1078;&#1080;&#1090; &#1076;&#1080;&#1079;&#1072;&#1081;&#1085; &#1089;&#1072;&#1081;&#1090;&#1072; &#1080; &#1083;&#1086;&#1075;&#1086;&#1090;&#1080;&#1087;&#1072;.&lt;/p&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/33</id>
    <published>2010-02-26T10:47:47+00:00</published>
    <updated>2010-02-26T10:47:47+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/33"/>
    <title>&#1042;&#1077;&#1088;&#1085;&#1091;&#1083;&#1089;&#1103;</title>
    <content type="html">&lt;p&gt;&lt;img alt="back from holidays" height="337" src="http://lonelyelk.ru/images/uploads/0000/0003/backfromholidays.jpg" width="600" /&gt;&lt;/p&gt;&lt;p&gt;&#1044;&#1072;&#1074;&#1085;&#1077;&#1085;&#1100;&#1082;&#1086; &#1103; &#1085;&#1077; &#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1103;&#1083; &#1101;&#1090;&#1086;&#1090; &#1073;&#1083;&#1086;&#1075; :)&lt;/p&gt;&lt;p&gt;&#1042;&#1089;&#1105; &#1076;&#1077;&#1083;&#1086; &#1074; &#1090;&#1086;&#1084;, &#1095;&#1090;&#1086; &#1075;&#1076;&#1077;-&#1090;&#1086; &#1090;&#1072;&#1084; &#1073;&#1099;&#1083; &#1053;&#1086;&#1074;&#1099;&#1081; &#1043;&#1086;&#1076;, &#1074; &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1103; &#1090;&#1086;&#1088;&#1078;&#1077;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086; &#1087;&#1086;&#1089;&#1077;&#1090;&#1080;&#1083; &#1088;&#1086;&#1076;&#1080;&#1090;&#1077;&#1083;&#1077;&#1081;. &#1044;&#1086; &#1080; &#1087;&#1086;&#1089;&#1083;&#1077; &#1053;&#1086;&#1074;&#1086;&#1075;&#1086; &#1043;&#1086;&#1076;&#1072; &#1073;&#1099;&#1083;&#1072; &#1089;&#1076;&#1072;&#1095;&#1072; &lt;a href="http://clubs.ya.ru/company/replies.xml?item_no=22915&amp;ncrnd=1404"&gt;&#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084; &#1057;&#1072;&#1085;&#1082;&#1090;-&#1055;&#1077;&#1090;&#1077;&#1088;&#1073;&#1091;&#1088;&#1075;&#1072;&lt;/a&gt; &#1080; &#1077;&#1097;&#1105; &#1086;&#1076;&#1085;&#1086;&#1075;&#1086; &#1087;&#1086;&#1082;&#1072; &#1085;&#1077; &#1089;&#1082;&#1072;&#1078;&#1091; &#1082;&#1072;&#1082;&#1086;&#1075;&#1086; &#1075;&#1086;&#1088;&#1086;&#1076;&#1072;.&lt;/p&gt;&lt;p&gt;&#1050;&#1086;&#1075;&#1076;&#1072; &#1089;&#1098;&#1105;&#1084;&#1082;&#1080; 2009 &#1075;&#1086;&#1076;&#1072; &#1073;&#1099;&#1083;&#1080; &#1089;&#1076;&#1072;&#1085;&#1099;, &#1074;&#1099;&#1103;&#1089;&#1085;&#1080;&#1083;&#1086;&#1089;&#1100;, &#1095;&#1090;&#1086; &#1087;&#1086;&#1083;&#1085;&#1099;&#1084; &#1093;&#1086;&#1076;&#1086;&#1084; &#1080;&#1076;&#1105;&#1090; &#1079;&#1080;&#1084;&#1072;. &#1040; &#1091; &#1085;&#1072;&#1089; &#1085;&#1077; &#1090;&#1072;&#1082; &#1084;&#1085;&#1086;&#1075;&#1086; &#1075;&#1086;&#1088;&#1086;&#1076;&#1086;&#1074;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1084;&#1086;&#1078;&#1085;&#1086; &#1082;&#1088;&#1072;&#1089;&#1080;&#1074;&#1086; &#1089;&#1085;&#1080;&#1084;&#1072;&#1090;&#1100; &#1079;&#1080;&#1084;&#1086;&#1081;. &#1058;&#1086;&#1075;&#1076;&#1072; &#1084;&#1099; &#1086;&#1090;&#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1080;&#1089;&#1100; &#1074;&#1089;&#1077;&#1084; &#1089;&#1086;&#1089;&#1090;&#1072;&#1074;&#1086;&#1084; &#1074; &#1090;&#1105;&#1087;&#1083;&#1099;&#1077; &#1082;&#1088;&#1072;&#1103;, &#1074; &#1084;&#1077;&#1089;&#1103;&#1095;&#1085;&#1099;&#1081; &#1086;&#1090;&#1087;&#1091;&#1089;&#1082;.&lt;/p&gt;&lt;p&gt;&#1058;&#1077;&#1087;&#1077;&#1088;&#1100;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1103; &#1089;&#1085;&#1086;&#1074;&#1072; &#1074; &#1052;&#1086;&#1089;&#1082;&#1074;&#1077;, &#1101;&#1090;&#1086;&#1090; &#1073;&#1083;&#1086;&#1075; &#1074;&#1077;&#1088;&#1085;&#1105;&#1090;&#1089;&#1103; &#1082; &#1089;&#1074;&#1086;&#1077;&#1084;&#1091; &#1086;&#1073;&#1099;&#1095;&#1085;&#1086;&#1084;&#1091; &#1088;&#1077;&#1078;&#1080;&#1084;&#1091;. &#1057;&#1087;&#1072;&#1089;&#1080;&#1073;&#1086; &#1074;&#1089;&#1077;&#1084;, &#1082;&#1090;&#1086; &#1073;&#1099;&#1083; &#1089;&#1086; &#1084;&#1085;&#1086;&#1081; &#1074; &#1087;&#1088;&#1086;&#1096;&#1083;&#1086;&#1084; &#1075;&#1086;&#1076;&#1091;. &#1069;&#1090;&#1086;&#1090; &#1075;&#1086;&#1076; &#1086;&#1073;&#1077;&#1097;&#1072;&#1077;&#1090; &#1073;&#1099;&#1090;&#1100; &#1086;&#1095;&#1077;&#1085;&#1100; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1099;&#1084;.&lt;/p&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/32</id>
    <published>2009-12-15T13:46:17+00:00</published>
    <updated>2009-12-15T15:34:16+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/32"/>
    <title>&#1054;&#1076;&#1085;&#1086;&#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1086;&#1077; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1076;&#1074;&#1091;&#1093; &#1074;&#1077;&#1088;&#1089;&#1080;&#1081; &#1088;&#1091;&#1073;&#1080; &#1085;&#1072; &#1086;&#1076;&#1085;&#1086;&#1081; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1077;</title>
    <content type="html">&lt;h2&gt;&#1042;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1050;&#1072;&#1082; &#1084;&#1086;&#1083;&#1086;&#1076;&#1086;&#1081; &#1103;&#1079;&#1099;&#1082; &#1089; &#1085;&#1077;&#1091;&#1090;&#1074;&#1077;&#1088;&#1078;&#1076;&#1105;&#1085;&#1085;&#1086;&#1081; &#1089;&#1087;&#1077;&#1094;&#1080;&#1092;&#1080;&#1082;&#1072;&#1094;&#1080;&#1077;&#1081;, &#1088;&#1091;&#1073;&#1080; &#1087;&#1077;&#1088;&#1077;&#1078;&#1080;&#1074;&#1072;&#1077;&#1090; &#1087;&#1086;&#1076;&#1088;&#1086;&#1089;&#1090;&#1082;&#1086;&#1074;&#1091;&#1102; &#1073;&#1086;&#1083;&#1077;&#1079;&#1085;&#1100;, &#1095;&#1077;&#1088;&#1077;&#1079; &#1082;&#1086;&#1090;&#1086;&#1088;&#1091;&#1102; &#1073;&#1086;&#1083;&#1100;&#1096;&#1080;&#1085;&#1089;&#1090;&#1074;&#1086; &#1080;&#1079;&#1074;&#1077;&#1089;&#1090;&#1085;&#1099;&#1093; &#1103;&#1079;&#1099;&#1082;&#1086;&#1074; &#1091;&#1078;&#1077; &#1087;&#1088;&#1086;&#1096;&#1083;&#1080;. &#1045;&#1089;&#1090;&#1100; &#1085;&#1086;&#1074;&#1072;&#1103; &#1073;&#1086;&#1083;&#1077;&#1077; &#1073;&#1099;&#1089;&#1090;&#1088;&#1072;&#1103; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103;, &#1085;&#1072; &#1082;&#1086;&#1090;&#1086;&#1088;&#1091;&#1102; &#1091;&#1078;&#1077; &#1089;&#1090;&#1086;&#1080;&#1090; &#1087;&#1077;&#1088;&#1077;&#1093;&#1086;&#1076;&#1080;&#1090;&#1100;, &#1085;&#1086; &#1091;&#1078;&#1077; &#1084;&#1085;&#1086;&#1075;&#1086; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085;&#1086; &#1085;&#1072; &#1087;&#1088;&#1077;&#1076;&#1099;&#1076;&#1091;&#1097;&#1077;&#1081;, &#1080; &#1090;&#1072;&#1082; &#1073;&#1086;&#1103;&#1079;&#1085;&#1086; &#1074;&#1089;&#1105; &#1083;&#1086;&#1084;&#1072;&#1090;&#1100;...&lt;/p&gt;&lt;p&gt;&#1055;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086; &#1085;&#1072;&#1081;&#1090;&#1080; &#1091;&#1076;&#1086;&#1073;&#1085;&#1099;&#1081; &#1076;&#1083;&#1103; &#1089;&#1077;&#1073;&#1103; &#1089;&#1087;&#1086;&#1089;&#1086;&#1073; (&#1072; &#1083;&#1091;&#1095;&#1096;&#1077; &#1085;&#1077;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1086;) &#1095;&#1090;&#1086;&#1073;&#1099; &#1085;&#1072;&#1095;&#1072;&#1090;&#1100; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1088;&#1091;&#1073;&#1080; 1.9.&lt;/p&gt;&lt;h2&gt;&#1055;&#1086;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1072; &#1079;&#1072;&#1076;&#1072;&#1095;&#1080;&lt;/h2&gt;&lt;p&gt;&#1057;&#1077;&#1081;&#1095;&#1072;&#1089; &#1087;&#1088;&#1072;&#1082;&#1090;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080; &#1087;&#1072;&#1085;&#1072;&#1094;&#1077;&#1077;&#1081; &#1076;&#1083;&#1103; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1073;&#1086;&#1083;&#1077;&#1077; &#1086;&#1076;&#1085;&#1086;&#1081; &#1074;&#1077;&#1088;&#1089;&#1080;&#1080; &#1088;&#1091;&#1073;&#1080; &#1103;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &lt;a href="http://rvm.beginrescueend.com/"&gt;rvm&lt;/a&gt;. &#1054;&#1095;&#1077;&#1085;&#1100; &#1091;&#1076;&#1086;&#1073;&#1085;&#1086; &#1074; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1080;, &#1087;&#1086;&#1083;&#1085;&#1086;&#1089;&#1090;&#1100;&#1102; &#1087;&#1088;&#1086;&#1079;&#1088;&#1072;&#1095;&#1085;&#1086;, &#1080; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1103;&#1077;&#1090; &#1080;&#1084;&#1077;&#1090;&#1100; &#1088;&#1072;&#1079;&#1085;&#1099;&#1077; &#1074;&#1077;&#1088;&#1089;&#1080;&#1080; &#1088;&#1091;&#1073;&#1080; &#1074; &#1088;&#1072;&#1079;&#1085;&#1099;&#1093; &#1086;&#1082;&#1085;&#1072;&#1093; &#1090;&#1077;&#1088;&#1084;&#1080;&#1085;&#1072;&#1083;&#1072;.&lt;/p&gt;&lt;p&gt;&#1053;&#1086; &#1085;&#1077;&#1076;&#1072;&#1074;&#1085;&#1086; &#1084;&#1085;&#1077; &#1087;&#1086;&#1085;&#1072;&#1076;&#1086;&#1073;&#1080;&#1083;&#1086;&#1089;&#1100; &#1089;&#1082;&#1086;&#1084;&#1087;&#1080;&#1083;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; wxRuby &#1087;&#1086;&#1076; &#1089;&#1074;&#1086;&#1102; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1091; (kubuntu 9.10 amd64), &#1080; rvm &#1085;&#1077; &#1089;&#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1072;&#1089;&#1100; &#1089; &#1101;&#1090;&#1086;&#1081; &#1079;&#1072;&#1076;&#1072;&#1095;&#1077;&#1081;. &#1055;&#1086; &#1082;&#1072;&#1082;&#1086;&#1081;-&#1090;&#1086; &#1087;&#1088;&#1080;&#1095;&#1080;&#1085;&#1077; &#1074; &#1084;&#1086;&#1084;&#1077;&#1085;&#1090; &#1082;&#1086;&#1084;&#1087;&#1080;&#1083;&#1083;&#1103;&#1094;&#1080;&#1080; &#1073;&#1099;&#1083;&#1080; &#1085;&#1077;&#1076;&#1086;&#1089;&#1090;&#1091;&#1087;&#1085;&#1099; &#1079;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1082;&#1080; &#1088;&#1091;&#1073;&#1080;. &#1055;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1103; &#1088;&#1077;&#1096;&#1080;&#1083; &#1087;&#1086;&#1089;&#1090;&#1072;&#1074;&#1080;&#1090;&#1100; &#1076;&#1074;&#1077; &#1074;&#1077;&#1088;&#1089;&#1080;&#1080; &#1088;&#1091;&#1073;&#1080; &#1073;&#1086;&#1083;&#1077;&#1077; &#1103;&#1074;&#1085;&#1086;: &#1086;&#1076;&#1085;&#1072; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1085;&#1072;&#1103; (1.8.7) &#1080; &#1086;&#1076;&#1085;&#1072; &#1074; &#1087;&#1072;&#1087;&#1082;&#1077; /opt (1.9.1). &#1055;&#1088;&#1080;&#1095;&#1077;&#1084; &#1074;&#1089;&#1077; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1099;, &#1089;&#1074;&#1103;&#1079;&#1072;&#1085;&#1085;&#1099;&#1077; &#1089; &#1088;&#1091;&#1073;&#1080; 1.9 &#1073;&#1091;&#1076;&#1091;&#1090; &#1074;&#1099;&#1079;&#1099;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103; &#1089; &#1089;&#1091;&#1092;&#1092;&#1080;&#1082;&#1089;&#1086;&#1084;: &lt;i&gt;ruby1.9&lt;/i&gt;, &lt;i&gt;irb1.9&lt;/i&gt;, &lt;i&gt;gem1.9&lt;/i&gt;, &lt;i&gt;rake1.9&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;&#1042;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;, &#1087;&#1086;&#1076;&#1086;&#1073;&#1085;&#1099;&#1093; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1082;&#1094;&#1080;&#1081; &#1091;&#1078;&#1077; &#1087;&#1086;&#1083;&#1085;&#1086;, &#1085;&#1086; &#1084;&#1085;&#1077; &#1073;&#1091;&#1076;&#1077;&#1090; &#1091;&#1076;&#1086;&#1073;&#1085;&#1077;&#1077;, &#1077;&#1089;&#1083;&#1080; &#1103; &#1090;&#1086;&#1095;&#1085;&#1086; &#1073;&#1091;&#1076;&#1091; &#1079;&#1085;&#1072;&#1090;&#1100;, &#1075;&#1076;&#1077; &#1085;&#1072;&#1093;&#1086;&#1076;&#1080;&#1090;&#1089;&#1103; &#1086;&#1076;&#1085;&#1072; &#1080;&#1079; &#1085;&#1080;&#1093; :) &#1055;&#1088;&#1080; &#1074;&#1089;&#1105;&#1084; &#1101;&#1090;&#1086;&#1084;, &#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086;, rvm &#1087;&#1088;&#1086;&#1076;&#1086;&#1083;&#1078;&#1072;&#1077;&#1090; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1090;&#1100;. &#1052;&#1099; &#1085;&#1080;&#1082;&#1072;&#1082; &#1077;&#1084;&#1091; &#1085;&#1077; &#1087;&#1086;&#1084;&#1077;&#1096;&#1072;&#1077;&#1084;.&lt;/p&gt;&lt;h2&gt;&#1056;&#1077;&#1096;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1057;&#1085;&#1072;&#1095;&#1072;&#1083;&#1072; &#1085;&#1091;&#1078;&#1085;&#1086; &#1087;&#1086;&#1089;&#1090;&#1072;&#1074;&#1080;&#1090;&#1100; &#1085;&#1086;&#1074;&#1099;&#1081; readline. &#1041;&#1077;&#1079; &#1085;&#1077;&#1075;&#1086;, &#1082;&#1086;&#1075;&#1076;&#1072; &#1084;&#1099; &#1073;&#1091;&#1076;&#1077;&#1084; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &lt;i&gt;irb1.9&lt;/i&gt;, &#1084;&#1099; &#1085;&#1077; &#1089;&#1084;&#1086;&#1078;&#1077;&#1084; &#1085;&#1072;&#1089;&#1083;&#1072;&#1078;&#1076;&#1072;&#1090;&#1100;&#1089;&#1103; &#1076;&#1086;&#1089;&#1090;&#1091;&#1087;&#1086;&#1084; &#1082; &#1080;&#1089;&#1090;&#1086;&#1088;&#1080;&#1080; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1089;&#1090;&#1088;&#1077;&#1083;&#1086;&#1082; &#1074;&#1074;&#1077;&#1088;&#1093;-&#1074;&#1085;&#1080;&#1079; &#1080; &#1087;&#1077;&#1088;&#1077;&#1084;&#1077;&#1097;&#1072;&#1090;&#1100;&#1089;&#1103; &#1087;&#1086; &#1074;&#1074;&#1077;&#1076;&#1077;&#1085;&#1085;&#1086;&#1084;&#1091; &#1090;&#1077;&#1082;&#1089;&#1090;&#1091; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1089;&#1090;&#1088;&#1077;&#1083;&#1086;&#1082; &#1074; &#1089;&#1090;&#1086;&#1088;&#1086;&#1085;&#1099;.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;sudo apt-get install libreadline5-dev&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1093;&#1086;&#1088;&#1086;&#1096;&#1086; &#1073;&#1099; &#1074;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1087;&#1091;&#1090;&#1080; &#1074; &#1085;&#1072;&#1096;&#1077; &#1086;&#1082;&#1088;&#1091;&#1078;&#1077;&#1085;&#1080;&#1077;. &#1042; &#1082;&#1086;&#1085;&#1094;&#1077; &lt;b&gt;~/.bashrc&lt;/b&gt; &#1076;&#1086;&#1073;&#1072;&#1074;&#1080;&#1084;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;export PATH=$PATH:/opt/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/lib&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1089;&#1083;&#1077;&#1076;&#1091;&#1077;&#1090; &#1089;&#1082;&#1072;&#1095;&#1072;&#1090;&#1100; &#1080; &#1088;&#1072;&#1079;&#1072;&#1088;&#1093;&#1080;&#1074;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1102;&#1102; &#1074;&#1077;&#1088;&#1089;&#1080;&#1102; &#1088;&#1091;&#1073;&#1080;. &#1047;&#1072;&#1081;&#1076;&#1103; &#1074; &#1087;&#1072;&#1087;&#1082;&#1091; &#1089;&#1082;&#1086;&#1084;&#1087;&#1080;&#1083;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1080; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080;&#1090;&#1100;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;./configure --prefix=/opt --enable-shared --program-suffix=1.9
make
sudo make install&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1091; &#1085;&#1072;&#1089; &#1077;&#1089;&#1090;&#1100; &#1076;&#1074;&#1077; &#1086;&#1090;&#1076;&#1077;&#1083;&#1100;&#1085;&#1099;&#1093; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080; &#1088;&#1091;&#1073;&#1080; &#1080; &#1089;&#1086;&#1087;&#1091;&#1090;&#1089;&#1090;&#1074;&#1091;&#1102;&#1097;&#1080;&#1093; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074;. &#1045;&#1076;&#1080;&#1085;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086;&#1077;, &#1095;&#1090;&#1086; &#1086;&#1073;&#1077; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1102;&#1090; &#1086;&#1073;&#1097;&#1080;&#1077; &#1082;&#1086;&#1085;&#1092;&#1080;&#1075;&#1091;&#1088;&#1072;&#1094;&#1080;&#1086;&#1085;&#1085;&#1099;&#1077; &#1092;&#1072;&#1081;&#1083;&#1099;: ~/.gemrc, ~/.irbrc &#1080; &#1090;.&#1087;., &#1095;&#1090;&#1086; &#1074;&#1087;&#1086;&#1083;&#1085;&#1077; &#1091;&#1076;&#1086;&#1073;&#1085;&#1086;. &#1058;&#1072;&#1082;&#1078;&#1077; &#1076;&#1083;&#1103; &#1086;&#1073;&#1077;&#1080;&#1093; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084; &#1086;&#1073;&#1097;&#1077;&#1081; &#1076;&#1080;&#1088;&#1077;&#1082;&#1090;&#1086;&#1088;&#1080;&#1077;&#1081; &#1076;&#1078;&#1077;&#1084;&#1086;&#1074; &#1073;&#1091;&#1076;&#1077;&#1090; ~/.gem, &#1082;&#1091;&#1076;&#1072; &#1073;&#1091;&#1076;&#1091;&#1090; &#1091;&#1089;&#1090;&#1072;&#1085;&#1072;&#1074;&#1083;&#1080;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1080;, &#1079;&#1072;&#1087;&#1091;&#1089;&#1090;&#1080; &#1084;&#1099; &#1080;&#1093; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1091; &#1073;&#1077;&#1079; &lt;i&gt;sudo&lt;/i&gt; (&#1074; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1089; &lt;i&gt;sudo&lt;/i&gt;, &#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086; &#1078;&#1077;, &#1076;&#1080;&#1088;&#1077;&#1082;&#1090;&#1086;&#1088;&#1080;&#1080; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080; &#1088;&#1072;&#1079;&#1083;&#1080;&#1095;&#1072;&#1102;&#1090;&#1089;&#1103;).&lt;/p&gt;&lt;p&gt;&#1058;&#1072;&#1082; &#1078;&#1077; &#1103; &#1085;&#1077; &#1085;&#1072;&#1096;&#1105;&#1083; &#1073;&#1099;&#1089;&#1090;&#1088;&#1086;&#1075;&#1086; &#1089;&#1087;&#1086;&#1089;&#1086;&#1073;&#1072; &#1076;&#1086;&#1073;&#1072;&#1074;&#1080;&#1090;&#1100; &lt;i&gt;/opt/bin&lt;/i&gt; &#1074; &#1087;&#1077;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1091;&#1102; &lt;b&gt;PATH&lt;/b&gt; &#1076;&#1083;&#1103; &lt;i&gt;sudo&lt;/i&gt;. &#1055;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1074; &#1090;&#1072;&#1082;&#1080;&#1093; &#1089;&#1083;&#1091;&#1095;&#1072;&#1103;&#1093; &#1087;&#1086;&#1082;&#1072; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1102; &#1087;&#1086;&#1083;&#1085;&#1099;&#1081; &#1087;&#1091;&#1090;&#1100;. &#1053;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1087;&#1077;&#1088;&#1074;&#1072;&#1103; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1072;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1091;&#1102; &#1089;&#1083;&#1077;&#1076;&#1091;&#1077;&#1090; &#1074;&#1099;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1100;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;sudo /opt/bin/gem1.9 update --system&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1055;&#1086;&#1090;&#1086;&#1084;&#1091; &#1095;&#1090;&#1086; &#1074; &#1087;&#1072;&#1082;&#1077;&#1090;&#1077; &#1089; &#1088;&#1091;&#1073;&#1080; &#1080;&#1076;&#1105;&#1090; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103; 1.3.1, &#1072; &#1085;&#1072;&#1089;&#1090;&#1086;&#1103;&#1097;&#1080;&#1077; &#1087;&#1072;&#1094;&#1072;&#1085;&#1099; &#1091;&#1078;&#1077; &#1074;&#1086; &#1074;&#1089;&#1102; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1102;&#1090; 1.3.5.&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.google.ru/search?hl=ru&amp;rlz=1C1GGLS_ruRU291RU316&amp;newwindow=1&amp;q=install+multiple+ruby+versions"&gt;&#1042;&#1089;&#1105; &#1086;&#1073; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1077; &#1085;&#1077;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1080;&#1093; &#1074;&#1077;&#1088;&#1089;&#1080;&#1081; &#1088;&#1091;&#1073;&#1080; &#1085;&#1072; &#1086;&#1076;&#1085;&#1086;&#1081; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1077;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ruby19orbust.com/"&gt;&#1055;&#1088;&#1086;&#1077;&#1082;&#1090; &amp;laquo;&#1048;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1081; &#1088;&#1091;&#1073;&#1080; 1.9 &#1080;&#1083;&#1080; &#1074;&#1072;&#1083;&#1080;!&amp;raquo;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/31</id>
    <published>2009-12-09T16:43:17+00:00</published>
    <updated>2009-12-09T16:43:17+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/31"/>
    <title>&#1047;&#1072;&#1073;&#1086;&#1090;&#1072; &#1086; &#1085;&#1077;&#1073;&#1083;&#1086;&#1082;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1080; &#1087;&#1086;&#1090;&#1086;&#1082;&#1086;&#1074; &#1074; &#1088;&#1091;&#1073;&#1080;</title>
    <content type="html">&lt;h2&gt;&#1042;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1057;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103; &#1073;&#1091;&#1076;&#1077;&#1090; &#1073;&#1083;&#1080;&#1094;-&#1084;&#1086;&#1083;&#1085;&#1080;&#1103;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1081; &#1084;&#1077;&#1089;&#1090;&#1086;, &#1089;&#1082;&#1086;&#1088;&#1077;&#1077; &#1074; &#1090;&#1074;&#1080;&#1090;&#1090;&#1077;&#1088;&#1077;. &#1054;&#1076;&#1085;&#1072;&#1082;&#1086;, &#1084;&#1085;&#1077; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086; &#1088;&#1072;&#1079;&#1074;&#1077;&#1103;&#1090;&#1100; &#1090;&#1091;&#1095;&#1080;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1103; &#1089;&#1072;&#1084; &#1078;&#1077; &#1080; &#1085;&#1072;&#1075;&#1085;&#1072;&#1083;. :)&lt;/p&gt;&lt;h2&gt;&#1055;&#1086;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1072; &#1079;&#1072;&#1076;&#1072;&#1095;&#1080;&lt;/h2&gt;&lt;p&gt;&#1053;&#1077; &#1090;&#1072;&#1082; &#1076;&#1072;&#1074;&#1085;&#1086; &#1103; &#1087;&#1080;&#1089;&#1072;&#1083; &#1086; &#1090;&#1086;&#1084;, &#1095;&#1090;&#1086; &#1087;&#1088;&#1080; &#1089;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1080; &#1088;&#1091;&#1073;&#1080;-&#1086;&#1073;&#1086;&#1083;&#1086;&#1095;&#1082;&#1080; &#1074;&#1086;&#1082;&#1088;&#1091;&#1075; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1080; &#1085;&#1072; &#1089;&#1080;, &#1083;&#1077;&#1075;&#1082;&#1086; &#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1090;&#1100; &lt;a href="http://lonelyelk.ru/posts/27"&gt;&#1082;&#1086;&#1076;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1073;&#1083;&#1086;&#1082;&#1080;&#1088;&#1091;&#1077;&#1090; &#1074;&#1089;&#1077; &#1087;&#1086;&#1090;&#1086;&#1082;&#1080; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103;&lt;/a&gt;. &#1052;&#1086;&#1078;&#1085;&#1086; &#1083;&#1080; &#1089; &#1101;&#1090;&#1080;&#1084; &#1095;&#1090;&#1086;-&#1090;&#1086; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100;?&lt;/p&gt;&lt;h2&gt;&#1056;&#1077;&#1096;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1045;&#1089;&#1083;&#1080; &#1084;&#1099; &#1080;&#1084;&#1077;&#1077;&#1084; &#1095;&#1091;&#1090;&#1100; &#1073;&#1086;&#1083;&#1100;&#1096;&#1077; &#1082;&#1086;&#1085;&#1090;&#1088;&#1086;&#1083;&#1103; &#1085;&#1072;&#1076; &#1091;&#1095;&#1072;&#1089;&#1090;&#1082;&#1072;&#1084;&#1080; &#1082;&#1086;&#1076;&#1072; &#1085;&#1072; &#1089;&#1080;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1074;&#1099;&#1087;&#1086;&#1083;&#1085;&#1103;&#1102;&#1090;&#1089;&#1103; &#1076;&#1086;&#1083;&#1075;&#1086; (&#1086;&#1073;&#1099;&#1095;&#1085;&#1086; &#1074; &#1094;&#1080;&#1082;&#1083;&#1077;), &#1090;&#1086; &#1084;&#1086;&#1078;&#1085;&#1086; &#1076;&#1086;&#1073;&#1072;&#1074;&#1080;&#1090;&#1100; &#1089;&#1087;&#1072;&#1089;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1099;&#1081; &#1082;&#1086;&#1076; &#1074; &#1090;&#1077;&#1083;&#1086; &#1094;&#1080;&#1082;&#1083;&#1072;:&lt;/p&gt;&lt;pre&gt;&lt;code class='cpp'&gt;if (!rb_thread_alone()) rb_thread_schedule();&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1069;&#1090;&#1086; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1080;&#1090; &#1082;&#1072;&#1078;&#1076;&#1099;&#1081; &#1088;&#1072;&#1079; &#1087;&#1088;&#1080; &#1086;&#1095;&#1077;&#1088;&#1077;&#1076;&#1085;&#1086;&#1084; &#1074;&#1080;&#1090;&#1082;&#1077; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1074;&#1072;&#1090;&#1100; &#1091;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1089;&#1086;&#1089;&#1077;&#1076;&#1085;&#1080;&#1084; &#1087;&#1086;&#1090;&#1086;&#1082;&#1072;&#1084;, &#1077;&#1089;&#1083;&#1080; &#1086;&#1085;&#1080; &#1077;&#1089;&#1090;&#1100;, &#1080; &#1089;&#1076;&#1077;&#1083;&#1072;&#1077;&#1090; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1077; &#1073;&#1086;&#1083;&#1077;&#1077; &#1086;&#1090;&#1079;&#1099;&#1074;&#1095;&#1080;&#1074;&#1099;&#1084;.&lt;/p&gt;&lt;p&gt;&#1058;&#1086; &#1077;&#1089;&#1090;&#1100;, &#1077;&#1089;&#1083;&#1080; &#1084;&#1099; &#1089;&#1076;&#1077;&#1083;&#1072;&#1077;&#1084; &#1090;&#1086;&#1095;&#1085;&#1091;&#1102; &#1082;&#1086;&#1087;&#1080;&#1102; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1080; &#1080;&#1079; &#1090;&#1086;&#1081; &#1089;&#1090;&#1072;&#1090;&#1100;&#1080; &#1080; &#1076;&#1086;&#1073;&#1072;&#1074;&#1080;&#1084; &#1085;&#1072;&#1096; &#1089;&#1087;&#1072;&#1089;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1099;&#1081; &#1082;&#1086;&#1076; &#1074;&#1085;&#1091;&#1090;&#1088;&#1100; &lt;i&gt;for&lt;/i&gt;, &#1090;&#1086; &#1074; &#1074;&#1099;&#1074;&#1086;&#1076;&#1077; &#1090;&#1072;&#1082;&#1086;&#1081; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1099;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;# coding: utf-8
require &amp;quot;block_thread.so&amp;quot;

t1 = Thread.new do
  10.times { |i| puts i; sleep 0.1 }
end

t2 = Thread.new do
  puts &amp;quot;&#1041;&#1083;&#1086;&#1082;&#1080;&#1088;&#1091;&#1077;&#1084;&amp;quot;
  BlockThread.cycle
  puts &amp;quot;&#1056;&#1072;&#1079;&#1073;&#1083;&#1086;&#1082;&#1080;&#1088;&#1091;&#1077;&#1084;&amp;quot;
end

t3 = Thread.new do
  puts &amp;quot;&#1057;&#1090;&#1072;&#1088;&#1072;&#1077;&#1084;&#1089;&#1103; &#1085;&#1077; &#1073;&#1083;&#1086;&#1082;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100;&amp;quot;
  BlockThread.cycle_with_schedule
  puts &amp;quot;&#1047;&#1072;&#1082;&#1086;&#1085;&#1095;&#1080;&#1083;&#1080; &#1089;&#1090;&#1072;&#1088;&#1072;&#1090;&#1100;&#1089;&#1103;&amp;quot;
end
t1.join
t2.join
t3.join&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1041;&#1091;&#1076;&#1077;&#1090; &#1082;&#1072;&#1088;&#1090;&#1080;&#1085;&#1072; &#1075;&#1086;&#1088;&#1072;&#1079;&#1076;&#1086; &#1087;&#1088;&#1080;&#1103;&#1090;&#1085;&#1077;&#1077;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&#1041;&#1083;&#1086;&#1082;&#1080;&#1088;&#1091;&#1077;&#1084;
0
&#1057;&#1090;&#1072;&#1088;&#1072;&#1077;&#1084;&#1089;&#1103; &#1085;&#1077; &#1073;&#1083;&#1086;&#1082;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100;
&#1056;&#1072;&#1079;&#1073;&#1083;&#1086;&#1082;&#1080;&#1088;&#1091;&#1077;&#1084;
1
2
3
4
5
&#1047;&#1072;&#1082;&#1086;&#1085;&#1095;&#1080;&#1083;&#1080; &#1089;&#1090;&#1072;&#1088;&#1072;&#1090;&#1100;&#1089;&#1103;
6
7
8
9&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1047;&#1072;&#1084;&#1077;&#1090;&#1100;&#1090;&#1077;, &#1082;&#1089;&#1090;&#1072;&#1090;&#1080;, &#1095;&#1090;&#1086; &#1076;&#1074;&#1072; &#1083;&#1080;&#1096;&#1085;&#1080;&#1093; &#1074;&#1099;&#1074;&#1086;&#1076;&#1072; &#1084;&#1077;&#1078;&#1076;&#1091; &amp;laquo;&#1041;&#1083;&#1086;&#1082;&#1080;&#1088;&#1091;&#1077;&#1084;&amp;raquo; &#1080; &amp;laquo;&#1056;&#1072;&#1079;&#1073;&#1083;&#1086;&#1082;&#1080;&#1088;&#1091;&#1077;&#1084;&amp;raquo; &#1073;&#1083;&#1072;&#1075;&#1086;&#1076;&#1072;&#1088;&#1103; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1095;&#1077; &#1091;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103; &#1089;&#1086;&#1089;&#1077;&#1076;&#1085;&#1080;&#1084;&#1087;&#1086;&#1090;&#1086;&#1082;&#1072;&#1084; &#1084;&#1077;&#1078;&#1076;&#1091; &lt;i&gt;cycle&lt;/i&gt; &#1080; &lt;i&gt;puts&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;&#1055;&#1086;&#1085;&#1103;&#1090;&#1085;&#1086;, &#1095;&#1090;&#1086; &#1089;&#1086;&#1089;&#1077;&#1076;&#1085;&#1080;&#1077; &#1087;&#1086;&#1090;&#1086;&#1082;&#1080; &#1090;&#1086;&#1088;&#1084;&#1086;&#1079;&#1103;&#1090;&#1089;&#1103;. &#1053;&#1086; &#1090;&#1077;&#1087;&#1077;&#1088;&#1100; &#1085;&#1077; &#1085;&#1072; &#1074;&#1089;&#1105; &#1074;&#1088;&#1077;&#1084;&#1103;, &#1072; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1085;&#1072; &#1080;&#1089;&#1087;&#1086;&#1083;&#1085;&#1077;&#1085;&#1080;&#1077; &#1086;&#1076;&#1085;&#1086;&#1075;&#1086; &#1074;&#1080;&#1090;&#1082;&#1072; &#1094;&#1080;&#1082;&#1083;&#1072;.&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;p&gt;&lt;a href="http://github.com/lonelyelk/lonelyelk_code/tree/master/threads/"&gt;&#1055;&#1086;&#1083;&#1085;&#1099;&#1081; &#1082;&#1086;&#1076; &#1089;&#1090;&#1072;&#1090;&#1100;&#1080; &#1085;&#1072; github&lt;/a&gt;&lt;/p&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/30</id>
    <published>2009-11-18T23:16:00+00:00</published>
    <updated>2009-11-18T23:16:00+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/30"/>
    <title>&#1057;&#1073;&#1086;&#1088;&#1082;&#1072; &#1088;&#1091;&#1073;&#1080;-&#1073;&#1080;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1080; &#1074; &#1079;&#1072;&#1076;&#1072;&#1085;&#1085;&#1086;&#1081; &#1089;&#1088;&#1077;&#1076;&#1077;</title>
    <content type="html">&lt;h2&gt;&#1055;&#1086;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1072; &#1079;&#1072;&#1076;&#1072;&#1095;&#1080;&lt;/h2&gt;&lt;p&gt;&#1050;&#1072;&#1082; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1095;&#1080;&#1082;&#1091; &lt;a href="http://github.com/lonelyelk/gphoto4ruby"&gt;gphoto4ruby&lt;/a&gt; &#1084;&#1085;&#1077; &#1087;&#1088;&#1080;&#1093;&#1086;&#1076;&#1080;&#1090;&#1089;&#1103; &#1089;&#1090;&#1072;&#1083;&#1082;&#1080;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103; &#1089; &#1086;&#1089;&#1086;&#1073;&#1099;&#1084;&#1080; &#1079;&#1072;&#1076;&#1072;&#1095;&#1072;&#1084;&#1080;. &#1057;&#1074;&#1103;&#1079;&#1072;&#1085;&#1086; &#1101;&#1090;&#1086; &#1089; &#1090;&#1077;&#1084;, &#1095;&#1090;&#1086; &#1101;&#1090;&#1086;&#1090; gem &#1103;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1086;&#1073;&#1086;&#1083;&#1086;&#1095;&#1082;&#1086;&#1081; &#1087;&#1086;&#1074;&#1077;&#1088;&#1093; &#1077;&#1097;&#1105; &#1086;&#1076;&#1085;&#1086;&#1081; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1080;. &#1048; &#1082;&#1072;&#1082; &#1091; &#1074;&#1089;&#1103;&#1082;&#1086;&#1081; &#1073;&#1086;&#1083;&#1077;&#1077;-&#1084;&#1077;&#1085;&#1077;&#1077; &#1088;&#1072;&#1079;&#1074;&#1080;&#1090;&#1086;&#1081; &#1089;&#1090;&#1086;&#1088;&#1086;&#1085;&#1085;&#1077;&#1081; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1080;, &#1091; libgphoto2 &#1077;&#1089;&#1090;&#1100; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103;, &#1088;&#1072;&#1089;&#1087;&#1088;&#1086;&#1089;&#1090;&#1088;&#1072;&#1085;&#1103;&#1077;&#1084;&#1072;&#1103; &#1095;&#1077;&#1088;&#1077;&#1079; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1085;&#1099;&#1077; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1080; &#1080; &#1087;&#1086;&#1088;&#1090;&#1099; &#1080; &#1077;&#1089;&#1090;&#1100;, &#1090;&#1072;&#1082; &#1089;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100;, &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1080;&#1081; &#1087;&#1080;&#1089;&#1082; &#1084;&#1086;&#1076;&#1099; (bleeding edge).&lt;/p&gt;&lt;ol&gt;&lt;lh&gt;&#1054;&#1090;&#1089;&#1102;&#1076;&#1072; &#1074;&#1099;&#1090;&#1077;&#1082;&#1072;&#1077;&#1090; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086;&#1089;&#1090;&#1100;:&lt;/lh&gt;&lt;li&gt;&#1048;&#1084;&#1077;&#1090;&#1100; &#1088;&#1072;&#1079;&#1085;&#1099;&#1077; &#1074;&#1077;&#1088;&#1089;&#1080;&#1080; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1080; &#1085;&#1077; &#1082;&#1086;&#1085;&#1092;&#1083;&#1080;&#1082;&#1090;&#1091;&#1102;&#1097;&#1080;&#1077; &#1084;&#1077;&#1078;&#1076;&#1091; &#1089;&#1086;&#1073;&#1086;&#1081;, &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1085;&#1099;&#1077; &#1085;&#1077; &#1086;&#1076;&#1085;&#1086;&#1081; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1077;,&lt;/li&gt;&lt;li&gt;&#1050;&#1086;&#1084;&#1087;&#1080;&#1083;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1089;&#1074;&#1086;&#1102; &#1088;&#1091;&#1073;&#1080;-&#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1091; &#1087;&#1086;&#1076; &#1083;&#1102;&#1073;&#1091;&#1102; &#1080;&#1079; &#1074;&#1077;&#1088;&#1089;&#1080;&#1081;.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/ol&gt;&lt;h2&gt;&#1059;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1072; &#1076;&#1074;&#1091;&#1093; gphoto2 :)&lt;/h2&gt;&lt;p&gt;&#1055;&#1088;&#1086;&#1076;&#1077;&#1083;&#1072;&#1102; &#1074;&#1077;&#1089;&#1100; &#1087;&#1091;&#1090;&#1100; &#1089; &#1089;&#1072;&#1084;&#1086;&#1075;&#1086; &#1085;&#1072;&#1095;&#1072;&#1083;&#1072;. &#1044;&#1083;&#1103; &#1087;&#1091;&#1097;&#1077;&#1081; &#1094;&#1077;&#1083;&#1086;&#1089;&#1090;&#1085;&#1086;&#1089;&#1090;&#1080;. &#1044;&#1083;&#1103; &#1085;&#1072;&#1095;&#1072;&#1083;&#1072; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1072; &#1080;&#1079; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1085;&#1086;&#1075;&#1086; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1103;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;sudo apt-get install libgphoto2-2-dev gphoto2
gphoto2 --version&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1084;&#1086;&#1078;&#1085;&#1086; &#1089;&#1082;&#1072;&#1095;&#1072;&#1090;&#1100; &#1085;&#1091;&#1078;&#1085;&#1091;&#1102; &#1074;&#1077;&#1088;&#1089;&#1080;&#1102; &#1080; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080;&#1090;&#1100; &#1077;&#1105; &#1086;&#1090;&#1076;&#1077;&#1083;&#1100;&#1085;&#1086;. &#1055;&#1086;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1091; &#1103; &#1074; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1086;&#1084; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1102; &#1076;&#1074;&#1077; &#1074;&#1077;&#1088;&#1089;&#1080;&#1080;, &#1090;&#1086; &#1074;&#1077;&#1088;&#1089;&#1080;&#1102; &#1080;&#1079; &#1080;&#1089;&#1093;&#1086;&#1076;&#1085;&#1080;&#1082;&#1086;&#1074; &#1085;&#1091;&#1078;&#1085;&#1086; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080;&#1090;&#1100; &#1074; &lt;i&gt;/opt&lt;/i&gt;. &#1055;&#1088;&#1077;&#1076;&#1087;&#1086;&#1083;&#1086;&#1078;&#1080;&#1084;, &#1095;&#1090;&#1086; &#1080;&#1089;&#1093;&#1086;&#1076;&#1085;&#1080;&#1082;&#1080; libgphoto2 &#1080; gphoto2 &#1089;&#1082;&#1072;&#1095;&#1072;&#1085;&#1099;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;tar zxvf libgphoto2-x.x.x.tar.gz
cd libgphoto2-x.x.x.tar.gz
./configure --prefix=/opt
make
sudo make install
tar zxvf gphoto2-x.x.x.tar.gz
cd gphoto2-x.x.x.tar.gz
./configure --prefix=/opt --with-libgphoto2=/opt
make
sudo make install
/opt/bin/gphoto2 --version&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1084;&#1099; &#1080;&#1084;&#1077;&#1077;&#1084; &#1076;&#1074;&#1077; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1080; &#1080; &#1076;&#1074;&#1077; &#1091;&#1090;&#1080;&#1083;&#1080;&#1090;&#1099; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1085;&#1086;&#1081; &#1089;&#1090;&#1088;&#1086;&#1082;&#1080;, &#1087;&#1086;&#1089;&#1090;&#1072;&#1074;&#1083;&#1077;&#1085;&#1085;&#1099;&#1077; &#1088;&#1072;&#1079;&#1076;&#1077;&#1083;&#1100;&#1085;&#1086; &#1080; &#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1100;&#1085;&#1086; &#1079;&#1072;&#1083;&#1080;&#1085;&#1082;&#1086;&#1074;&#1072;&#1085;&#1085;&#1099;&#1077;. &#1050;&#1072;&#1078;&#1076;&#1072;&#1103; &#1091;&#1090;&#1080;&#1083;&#1080;&#1090;&#1072; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1085;&#1086;&#1081; &#1089;&#1090;&#1088;&#1086;&#1082;&#1080; &#1079;&#1085;&#1072;&#1077;&#1090;, &#1075;&#1076;&#1077; &#1080;&#1089;&#1082;&#1072;&#1090;&#1100; &#1089;&#1074;&#1086;&#1102; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1091;. &#1053;&#1072;&#1076;&#1086;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1101;&#1090;&#1086; &#1078;&#1077; &#1091;&#1084;&#1077;&#1083; &#1080; gem&lt;/p&gt;&lt;h2&gt;&#1050;&#1086;&#1084;&#1087;&#1080;&#1083;&#1103;&#1094;&#1080;&#1103; &#1076;&#1078;&#1077;&#1084;&#1072;&lt;/h2&gt;&lt;p&gt;&#1045;&#1089;&#1083;&#1080; &#1089;&#1082;&#1072;&#1095;&#1072;&#1090;&#1100; &#1080;&#1089;&#1093;&#1086;&#1076;&#1085;&#1080;&#1082; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1080;, &#1090;&#1086; &#1084;&#1086;&#1078;&#1085;&#1086; &#1087;&#1088;&#1086;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1088;&#1091;&#1082;&#1072;&#1084;&#1080; &#1090;&#1086;, &#1095;&#1090;&#1086; &#1076;&#1077;&#1083;&#1072;&#1077;&#1090; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1072; &lt;b&gt;gem install&lt;/b&gt;. &#1044;&#1083;&#1103; &#1089;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1103; &lt;i&gt;Makefile&lt;/i&gt; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090;&#1089;&#1103; &#1091;&#1090;&#1080;&#1083;&#1080;&#1090;&#1072; &lt;b&gt;mkmf&lt;/b&gt;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1072;&#1103; &#1074;&#1093;&#1086;&#1076;&#1080;&#1090; &#1074; &lt;b&gt;ruby-dev&lt;/b&gt; &#1080; &#1089; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1081; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1077;&#1090; &#1092;&#1072;&#1081;&#1083; &lt;i&gt;extconf.rb&lt;/i&gt;. &#1042; &#1084;&#1086;&#1105;&#1084; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1089;&#1090;&#1100; &#1076;&#1077;&#1081;&#1089;&#1090;&#1074;&#1080;&#1081; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1097;&#1080;&#1082;&#1072; &#1090;&#1072;&#1082;&#1072;&#1103;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;cd ext
ruby extconf.rb
make&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1074; &#1087;&#1072;&#1087;&#1082;&#1077; ext &#1084;&#1099; &#1080;&#1084;&#1077;&#1077;&#1084; &#1089;&#1082;&#1086;&#1084;&#1087;&#1080;&#1083;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1091;&#1102; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1091; (*.so &#1080;&#1083;&#1080; *.bundle &#1074; &#1079;&#1072;&#1074;&#1080;&#1089;&#1080;&#1084;&#1086;&#1089;&#1090;&#1080; &#1086;&#1090; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1099;). &#1059;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1097;&#1080;&#1082; &#1087;&#1086;&#1090;&#1086;&#1084; &#1082;&#1086;&#1087;&#1080;&#1088;&#1091;&#1077;&#1090; &#1077;&#1105; &#1074; &#1087;&#1072;&#1087;&#1082;&#1091; lib, &#1085;&#1086; &#1084;&#1099; &#1087;&#1086;&#1082;&#1072; &#1086;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080;&#1084;&#1089;&#1103;. &#1052;&#1099; &#1084;&#1086;&#1078;&#1077;&#1084; &#1087;&#1086;&#1089;&#1084;&#1086;&#1090;&#1088;&#1077;&#1090;&#1100;, &#1082;&#1072;&#1082;&#1080;&#1077; &#1076;&#1088;&#1091;&#1075;&#1080;&#1077; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1080; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090; &#1101;&#1090;&#1072;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;ldd gphoto4ruby.so&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1055;&#1086; &#1074;&#1099;&#1074;&#1086;&#1076;&#1091; &#1101;&#1090;&#1086;&#1081; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1099; &#1074;&#1080;&#1076;&#1085;&#1086;, &#1095;&#1090;&#1086; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090;&#1089;&#1103; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1072; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1085;&#1072;&#1103; &#1080;&#1079; &#1094;&#1077;&#1085;&#1090;&#1088;&#1072;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1103;. &#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1087;&#1086;&#1087;&#1088;&#1086;&#1073;&#1091;&#1077;&#1084; &#1089;&#1082;&#1086;&#1084;&#1087;&#1080;&#1083;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1087;&#1086;&#1076; &#1074;&#1077;&#1088;&#1089;&#1080;&#1102; &amp;laquo;&#1087;&#1086; &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1077;&#1081; &#1084;&#1086;&#1076;&#1077;&amp;raquo;. &#1055;&#1086;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1091; &#1103; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1083; &#1074; extconf.rb&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;dir_config(&amp;quot;gphoto2&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1058;&#1086; &#1101;&#1090;&#1086; &#1086;&#1079;&#1085;&#1072;&#1095;&#1072;&#1077;&#1090;, &#1095;&#1090;&#1086; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1102; &#1073;&#1091;&#1076;&#1077;&#1090; &#1076;&#1086;&#1089;&#1090;&#1091;&#1087;&#1077;&#1085; &#1094;&#1077;&#1083;&#1099;&#1081; &#1088;&#1103;&#1076; &#1086;&#1087;&#1094;&#1080;&#1081;, &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1103;&#1102;&#1097;&#1080;&#1093; &#1089;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100; &#1082;&#1086;&#1084;&#1087;&#1080;&#1083;&#1103;&#1090;&#1086;&#1088;&#1091;, &#1075;&#1076;&#1077; &#1080;&#1089;&#1082;&#1072;&#1090;&#1100; libgphoto2. &#1055;&#1086;&#1087;&#1088;&#1086;&#1073;&#1091;&#1077;&#1084;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;ruby extconf.rb --with-gphoto2-dir=/opt
make
ldd gphoto4ruby.so&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1053;&#1086; &#1095;&#1090;&#1086; &#1101;&#1090;&#1086;? &#1042;&#1099;&#1074;&#1086;&#1076; &#1087;&#1086;&#1082;&#1072;&#1079;&#1099;&#1074;&#1072;&#1077;&#1090; &#1085;&#1072;&#1084;, &#1095;&#1090;&#1086; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1072; &#1087;&#1088;&#1080;&#1074;&#1103;&#1079;&#1072;&#1083;&#1072;&#1089;&#1100; &#1086;&#1087;&#1103;&#1090;&#1100; &#1082; &#1090;&#1086;&#1084;&#1091;, &#1095;&#1090;&#1086; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1086; &#1080;&#1079; &#1088;&#1077;&#1087;&#1086;&#1079;&#1080;&#1090;&#1086;&#1088;&#1080;&#1077;&#1074;, &#1072; &#1085;&#1077; &#1090;&#1086;&#1084;&#1091;, &#1095;&#1090;&#1086; &#1074; /opt. &#1058;&#1086; &#1077;&#1089;&#1090;&#1100; &#1082;&#1086;&#1084;&#1087;&#1080;&#1083;&#1103;&#1090;&#1086;&#1088;, &#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086;, &#1085;&#1072;&#1093;&#1086;&#1076;&#1080;&#1090; &#1085;&#1091;&#1078;&#1085;&#1099;&#1077; &#1077;&#1084;&#1091; &#1079;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1082;&#1080; (*.h), &#1085;&#1086; &#1085;&#1080;&#1095;&#1077;&#1075;&#1086; &#1074; &#1085;&#1080;&#1093; &#1085;&#1077; &#1075;&#1086;&#1074;&#1086;&#1088;&#1080;&#1090; &#1086; &#1090;&#1086;&#1084;, &#1075;&#1076;&#1077; &#1080;&#1089;&#1082;&#1072;&#1090;&#1100; &#1089;&#1086;&#1086;&#1090;&#1074;&#1077;&#1090;&#1089;&#1090;&#1074;&#1091;&#1102;&#1097;&#1080;&#1077; &#1080;&#1084; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1080;. &#1054;&#1073; &#1101;&#1090;&#1086;&#1084; &#1077;&#1084;&#1091; &#1076;&#1086;&#1083;&#1078;&#1085;&#1099; &#1089;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100; &#1084;&#1099;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;ruby extconf.rb --with-gphoto2-dir=/opt --with-dldflags=&amp;quot;-Wl,-rpath,/opt/lib&amp;quot;
make
ldd gphoto4ruby.so&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1042;&#1091;&#1072;&#1083;&#1103;!&lt;/p&gt;&lt;p&gt;&#1058;&#1077;&#1087;&#1077;&#1088;&#1100;, &#1089;&#1086;&#1073;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086;, &#1075;&#1083;&#1072;&#1074;&#1085;&#1086;&#1077;. &#1050;&#1072;&#1082; &#1101;&#1090;&#1086; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1087;&#1088;&#1080; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1077; &#1076;&#1078;&#1077;&#1084;&#1072;. &#1063;&#1090;&#1086;&#1073;&#1099; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1090;&#1100; &#1082;&#1083;&#1102;&#1095;&#1080; &#1076;&#1083;&#1103; extconf &#1085;&#1091;&#1078;&#1085;&#1086; &#1079;&#1072;&#1076;&#1072;&#1090;&#1100; &#1080;&#1093; &#1087;&#1086;&#1089;&#1083;&#1077; &#1076;&#1086;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &amp;laquo;--&amp;raquo;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;sudo gem i gphoto4ruby -- --with-gphoto2-dir=/opt --with-dldflags=&amp;quot;-Wl,-rpath,/opt/lib&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1042;&#1086;&#1090; &#1090;&#1072;&#1082;&#1086;&#1081; &#1101;&#1082;&#1089;&#1082;&#1091;&#1088;&#1089; &#1074; &#1078;&#1080;&#1079;&#1085;&#1100; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1095;&#1080;&#1082;&#1086;&#1074; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;. &#1050;&#1072;&#1082; &#1101;&#1090;&#1086; &#1079;&#1074;&#1091;&#1095;&#1072;&#1083;&#1086; &#1074; &#1096;&#1082;&#1086;&#1083;&#1100;&#1085;&#1099;&#1077; &#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1072;: &amp;laquo;&#1057;&#1087;&#1101;&#1090;&#1089;&#1099;&#1072;&#1083;&#1085;&#1086; &#1076;&#1083;&#1072; &#1076;&#1078;&#1101;&#1084;&#1072;&amp;raquo;.&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;p&gt;&lt;a href="http://www.rubycentral.com/pickaxe/ext_ruby.html"&gt;&#1056;&#1091;&#1082;&#1086;&#1074;&#1086;&#1076;&#1089;&#1090;&#1074;&#1086; &#1087;&#1086; &#1088;&#1072;&#1089;&#1096;&#1080;&#1088;&#1077;&#1085;&#1080;&#1102; &#1088;&#1091;&#1073;&#1080; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; C (&#1089;&#1084;. &#1075;&#1083;&#1072;&#1074;&#1091; &#1087;&#1088;&#1086; extconf.rb)&lt;/a&gt;&lt;/p&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/29</id>
    <published>2009-11-11T20:46:05+00:00</published>
    <updated>2009-11-11T20:46:05+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/29"/>
    <title>&#1057;&#1088;&#1072;&#1074;&#1085;&#1077;&#1085;&#1080;&#1103; &#1080; &#1085;&#1077;&#1088;&#1072;&#1074;&#1077;&#1085;&#1089;&#1090;&#1074;&#1072; &#1074; &#1088;&#1091;&#1073;&#1080;</title>
    <content type="html">&lt;h2&gt;&#1055;&#1086;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1072; &#1079;&#1072;&#1076;&#1072;&#1095;&#1080;&lt;/h2&gt;&lt;p&gt;&#1057;&#1086;&#1073;&#1088;&#1072;&#1090;&#1100; &#1074; &#1086;&#1076;&#1085;&#1086;&#1084; &#1084;&#1077;&#1089;&#1090;&#1077; &#1074;&#1072;&#1078;&#1085;&#1099;&#1077;, &#1085;&#1072; &#1084;&#1086;&#1081; &#1074;&#1079;&#1075;&#1083;&#1103;&#1076;, &#1086;&#1089;&#1086;&#1073;&#1077;&#1085;&#1085;&#1086;&#1089;&#1090;&#1080; &#1089;&#1088;&#1072;&#1074;&#1085;&#1077;&#1085;&#1080;&#1081; &#1080; &#1085;&#1077;&#1088;&#1072;&#1074;&#1077;&#1085;&#1089;&#1090;&#1074; &#1074; &#1088;&#1091;&#1073;&#1080;.&lt;/p&gt;&lt;h2&gt;&#1054;&#1089;&#1085;&#1086;&#1074;&#1072; &#1085;&#1077;&#1088;&#1072;&#1074;&#1077;&#1085;&#1089;&#1090;&#1074; &#1074; &#1088;&#1091;&#1073;&#1080;&lt;/h2&gt;&lt;p&gt;&#1054;&#1089;&#1085;&#1086;&#1074;&#1085;&#1099;&#1084; &#1084;&#1077;&#1090;&#1086;&#1076;&#1086;&#1084; &#1089;&#1088;&#1072;&#1074;&#1085;&#1077;&#1085;&#1080;&#1103; &#1103;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &lt;b&gt;&amp;lt;=&amp;gt;&lt;/b&gt;. &#1054;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1080;&#1074; &#1077;&#1075;&#1086;, &#1084;&#1099; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1103;&#1077;&#1084; &#1074;&#1089;&#1077; &#1086;&#1089;&#1090;&#1072;&#1083;&#1100;&#1085;&#1099;&#1077; &#1086;&#1087;&#1077;&#1088;&#1072;&#1094;&#1080;&#1080;, &#1074;&#1082;&#1083;&#1102;&#1095;&#1080;&#1074; &#1084;&#1086;&#1076;&#1091;&#1083;&#1100; &lt;i&gt;Comparable&lt;/i&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;class MyComp
  attr :value
  include Comparable
  def initialize(val)
    @value = val
  end

  def &amp;lt;=&amp;gt;(other)
    @value &amp;lt;=&amp;gt; other.value
  end
end

v1 = MyComp.new(1)
v2 = MyComp.new(2)

puts v1 &amp;lt; v2  # &amp;gt; true
puts v1 &amp;lt;= v2 # &amp;gt; true
puts v1 &amp;gt; v2  # &amp;gt; false
puts v1 &amp;gt;= v2 # &amp;gt; false
puts v1 == v2 # &amp;gt; false&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1057;&#1072;&#1084; &#1084;&#1077;&#1090;&#1086;&#1076; &#1084;&#1086;&#1078;&#1085;&#1086; &#1073;&#1099;&#1083;&#1086; &#1073;&#1099; &#1086;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1082;&#1072;&#1082; &amp;laquo;&#1074;&#1086;&#1079;&#1074;&#1088;&#1072;&#1097;&#1072;&#1077;&#1090; -1, 0 &#1080;&#1083;&#1080; 1 &#1074; &#1079;&#1072;&#1074;&#1080;&#1089;&#1080;&#1084;&#1086;&#1089;&#1090;&#1080; &#1086;&#1090; &#1090;&#1086;&#1075;&#1086;, &#1084;&#1077;&#1085;&#1100;&#1096;&#1077; &#1088;&#1072;&#1074;&#1077;&#1085; &#1080;&#1083;&#1080; &#1073;&#1086;&#1083;&#1100;&#1096;&#1077; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;, &#1095;&#1077;&#1081; &#1084;&#1077;&#1090;&#1086;&#1076; &#1074;&#1099;&#1079;&#1099;&#1074;&#1072;&#1077;&#1090;&#1089;&#1103; &#1074; &#1089;&#1088;&#1072;&#1074;&#1085;&#1077;&#1085;&#1080;&#1080; &#1089; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1086;&#1084; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1085;&#1085;&#1099;&#1084; &#1074; &#1082;&#1072;&#1095;&#1077;&#1089;&#1090;&#1074;&#1077; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1072;&amp;raquo;. &#1053;&#1086; &#1085;&#1072; &#1089;&#1072;&#1084;&#1086;&#1084; &#1076;&#1077;&#1083;&#1077;, &#1089;&#1082;&#1086;&#1088;&#1077;&#1077;, &#1085;&#1072;&#1086;&#1073;&#1086;&#1088;&#1086;&#1090; &#1087;&#1086;&#1085;&#1103;&#1090;&#1080;&#1103; &amp;laquo;&#1073;&#1086;&#1083;&#1100;&#1096;&#1077;&amp;raquo;, &amp;laquo;&#1084;&#1077;&#1085;&#1100;&#1096;&#1077;&amp;raquo; &#1080; &amp;laquo;&#1088;&#1072;&#1074;&#1077;&#1085;&amp;raquo; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1103;&#1102;&#1090;&#1089;&#1103; &#1080;&#1089;&#1093;&#1086;&#1076;&#1103; &#1080;&#1079; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099; &lt;b&gt;&amp;lt;=&amp;gt;&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;&#1044;&#1072;&#1083;&#1077;&#1077; &#1074;&#1089;&#1105; &#1087;&#1086;&#1085;&#1103;&#1090;&#1085;&#1086; &#1080; &#1073;&#1086;&#1083;&#1077;&#1077; &#1083;&#1080; &#1084;&#1077;&#1085;&#1077;&#1077; &#1086;&#1095;&#1077;&#1074;&#1080;&#1076;&#1085;&#1086; &#1076;&#1083;&#1103; &#1095;&#1080;&#1089;&#1077;&#1083;, &#1084;&#1072;&#1089;&#1089;&#1080;&#1074;&#1086;&#1074; &#1080; &#1089;&#1090;&#1088;&#1086;&#1082;. &#1053;&#1086; &#1077;&#1089;&#1090;&#1100; &#1080; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1072;&#1103; &#1086;&#1089;&#1086;&#1073;&#1077;&#1085;&#1085;&#1086;&#1089;&#1090;&#1100;.&lt;/p&gt;&lt;h2&gt;&#1057;&#1088;&#1072;&#1074;&#1085;&#1077;&#1085;&#1080;&#1077; &#1084;&#1086;&#1076;&#1091;&#1083;&#1077;&#1081; &#1080; &#1082;&#1083;&#1072;&#1089;&#1089;&#1086;&#1074;&lt;/h2&gt;&lt;p&gt;&#1057;&#1088;&#1072;&#1074;&#1085;&#1077;&#1085;&#1080;&#1077; &#1076;&#1083;&#1103; &#1084;&#1086;&#1076;&#1091;&#1083;&#1077;&#1081; &#1080; &#1082;&#1083;&#1072;&#1089;&#1089;&#1086;&#1074; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1077;&#1085;&#1086; &#1090;&#1072;&#1082;&#1080;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084;, &#1095;&#1090;&#1086; &#1074; &#1088;&#1077;&#1079;&#1091;&#1083;&#1100;&#1090;&#1072;&#1090;&#1077; &#1084;&#1099; &#1079;&#1085;&#1072;&#1077;&#1084; &#1085;&#1072;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1085;&#1072;&#1089;&#1083;&#1077;&#1076;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1080;&#1083;&#1080; &#1074;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1080;&#1077; &#1086;&#1076;&#1085;&#1086;&#1075;&#1086; &#1084;&#1086;&#1076;&#1091;&#1083;&#1103; &#1076;&#1088;&#1091;&#1075;&#1080;&#1084;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;module T1
end
module T2
  include T1
end
T3 = T1

class C1
end
class C2 &amp;lt; C1
end
C3 = C1

puts &amp;quot;T1 &amp;lt;=&amp;gt; T2: #{(T1 &amp;lt;=&amp;gt; T2).inspect}&amp;quot; # &amp;gt; 1
puts &amp;quot;T1 &amp;lt;=&amp;gt; T3: #{(T1 &amp;lt;=&amp;gt; T3).inspect}&amp;quot; # &amp;gt; 0
puts &amp;quot;C1 &amp;lt;=&amp;gt; C2: #{(C1 &amp;lt;=&amp;gt; C2).inspect}&amp;quot; # &amp;gt; 1
puts &amp;quot;C1 &amp;lt;=&amp;gt; C3: #{(C1 &amp;lt;=&amp;gt; C3).inspect}&amp;quot; # &amp;gt; 0
puts &amp;quot;C1 &amp;lt;=&amp;gt; T1: #{(C1 &amp;lt;=&amp;gt; T1).inspect}&amp;quot; # &amp;gt; nil
puts &amp;quot;T1 &amp;lt;=&amp;gt; C1: #{(T1 &amp;lt;=&amp;gt; C1).inspect}&amp;quot; # &amp;gt; nil

C3.send(:include, T1)

puts &amp;quot;&#1087;&#1086;&#1089;&#1083;&#1077; &#1074;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1080;&#1103;&amp;quot;
puts &amp;quot;C1 &amp;lt;=&amp;gt; T1: #{(C1 &amp;lt;=&amp;gt; T1).inspect}&amp;quot; # &amp;gt; -1
puts &amp;quot;T1 &amp;lt;=&amp;gt; C1: #{(T1 &amp;lt;=&amp;gt; C1).inspect}&amp;quot; # &amp;gt; 1&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1053;&#1072;&#1089;&#1083;&#1077;&#1076;&#1085;&#1080;&#1082; &#1080;&#1083;&#1080; &#1084;&#1086;&#1076;&#1091;&#1083;&#1100;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1074;&#1082;&#1083;&#1102;&#1095;&#1072;&#1077;&#1090; &#1076;&#1088;&#1091;&#1075;&#1086;&#1081; &#1084;&#1086;&#1076;&#1091;&#1083;&#1100;, &#1084;&#1077;&#1085;&#1100;&#1096;&#1077;, &#1095;&#1077;&#1084; &#1088;&#1086;&#1076;&#1080;&#1090;&#1077;&#1083;&#1100; &#1080;&#1083;&#1080; &#1074;&#1082;&#1083;&#1102;&#1095;&#1072;&#1077;&#1084;&#1099;&#1081; &#1084;&#1086;&#1076;&#1091;&#1083;&#1100;. &#1069;&#1090;&#1086; &#1074;&#1080;&#1076;&#1085;&#1086; &#1076;&#1072;&#1078;&#1077; &#1080;&#1079; &#1089;&#1080;&#1085;&#1090;&#1072;&#1082;&#1089;&#1080;&#1089;&#1072; &#1085;&#1072;&#1089;&#1083;&#1077;&#1076;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103;.&lt;/p&gt;&lt;h2&gt;&#1056;&#1072;&#1074;&#1077;&#1085;&#1089;&#1090;&#1074;&#1086;&lt;/h2&gt;&lt;p&gt;&#1057;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090; &#1090;&#1088;&#1080; &#1084;&#1077;&#1090;&#1086;&#1076;&#1072; &#1088;&#1072;&#1074;&#1077;&#1085;&#1089;&#1090;&#1074;&#1072;: &lt;b&gt;==&lt;/b&gt;, &lt;b&gt;eql?&lt;/b&gt;, &lt;b&gt;equal?&lt;/b&gt;. &#1055;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1080;&#1081; &#1080;&#1079; &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1093; &#1085;&#1080;&#1082;&#1086;&#1075;&#1076;&#1072; &#1085;&#1077; &#1089;&#1083;&#1077;&#1076;&#1091;&#1077;&#1090; &#1087;&#1077;&#1088;&#1077;&#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1103;&#1090;&#1100;, &#1090;.&#1082;. &#1086;&#1085; &#1086;&#1090;&#1074;&#1077;&#1095;&#1072;&#1077;&#1090; &#1079;&#1072; &#1080;&#1076;&#1077;&#1085;&#1090;&#1080;&#1095;&#1085;&#1086;&#1089;&#1090;&#1100;. &#1055;&#1077;&#1088;&#1074;&#1099;&#1077; &#1078;&#1077; &#1076;&#1074;&#1072; &#1086;&#1073;&#1099;&#1095;&#1085;&#1086; &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1102;&#1090; &#1086;&#1076;&#1080;&#1085;&#1072;&#1082;&#1086;&#1074;&#1086;. &#1050;&#1072;&#1085;&#1086;&#1085;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080;&#1081; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088; &#1088;&#1072;&#1079;&#1083;&#1080;&#1095;&#1080;&#1103; &#1080;&#1079; &#1076;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1080;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;3 == 3.0   # &amp;gt; true
3.eql? 3.0 # &amp;gt; false&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1063;&#1090;&#1086; &#1083;&#1080;&#1096;&#1100; &#1089;&#1074;&#1080;&#1076;&#1077;&#1090;&#1077;&#1083;&#1100;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090; &#1086; &#1090;&#1086;&#1084;, &#1095;&#1090;&#1086; &lt;b&gt;==&lt;/b&gt; &#1087;&#1088;&#1086;&#1074;&#1086;&#1076;&#1080;&#1090; &#1082;&#1086;&#1085;&#1074;&#1077;&#1088;&#1090;&#1072;&#1094;&#1080;&#1102; &#1095;&#1080;&#1089;&#1077;&#1083; &#1087;&#1077;&#1088;&#1077;&#1076; &#1089;&#1088;&#1072;&#1074;&#1085;&#1077;&#1085;&#1080;&#1077;&#1084;. &#1054;&#1073;&#1099;&#1095;&#1085;&#1086; &lt;b&gt;==&lt;/b&gt; &#1089;&#1086;&#1086;&#1090;&#1074;&#1077;&#1090;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090; &#1089;&#1083;&#1091;&#1095;&#1072;&#1102;, &#1082;&#1086;&#1075;&#1076;&#1072; &lt;b&gt;&amp;lt;=&amp;gt;&lt;/b&gt; &#1074;&#1086;&#1079;&#1074;&#1088;&#1072;&#1097;&#1072;&#1077;&#1090; 0.&lt;/p&gt;&lt;h2&gt;&#1057;&#1088;&#1072;&#1074;&#1085;&#1077;&#1085;&#1080;&#1077; case...when&lt;/h2&gt;&lt;p&gt;&#1042;&#1089;&#1077; &#1084;&#1099; &#1079;&#1085;&#1072;&#1077;&#1084;, &#1095;&#1090;&#1086; &#1074; &lt;b&gt;case...when&lt;/b&gt; &#1086;&#1087;&#1077;&#1088;&#1072;&#1090;&#1086;&#1088; &#1089;&#1088;&#1072;&#1074;&#1085;&#1077;&#1085;&#1080;&#1103;&amp;nbsp;&amp;#151; &#1101;&#1090;&#1086; &lt;b&gt;===&lt;/b&gt;. &#1042; &#1073;&#1086;&#1083;&#1100;&#1096;&#1080;&#1085;&#1089;&#1090;&#1074;&#1077; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077;&#1074; &#1086;&#1085; &#1101;&#1082;&#1074;&#1080;&#1074;&#1072;&#1083;&#1077;&#1085;&#1090;&#1077;&#1085; &#1088;&#1072;&#1074;&#1077;&#1085;&#1089;&#1090;&#1074;&#1091; &#1080;&#1079; &#1087;&#1088;&#1077;&#1076;&#1099;&#1076;&#1091;&#1097;&#1077;&#1075;&#1086; &#1087;&#1072;&#1088;&#1072;&#1075;&#1088;&#1072;&#1092;&#1072;. &#1053;&#1086; &#1077;&#1089;&#1083;&#1080; &#1088;&#1072;&#1074;&#1077;&#1085;&#1089;&#1090;&#1074;&#1086; &#1089;&#1080;&#1084;&#1084;&#1077;&#1090;&#1088;&#1080;&#1095;&#1085;&#1086;&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;(a.==(b)) == (b.==(a))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1048; &#1077;&#1089;&#1083;&#1080; &#1101;&#1090;&#1086; &#1085;&#1077; &#1090;&#1072;&#1082;, &#1090;&#1086; &#1101;&#1090;&#1086; &#1084;&#1086;&#1078;&#1085;&#1086; &#1089;&#1095;&#1080;&#1090;&#1072;&#1090;&#1100; &#1086;&#1096;&#1080;&#1073;&#1082;&#1086;&#1081;. &#1058;&#1086; &lt;b&gt;===&lt;/b&gt; &#1074;&#1086;&#1074;&#1089;&#1077; &#1085;&#1077; &#1086;&#1073;&#1103;&#1079;&#1072;&#1085;&#1086; &#1090;&#1072;&#1082;&#1086;&#1074;&#1099;&#1084; &#1073;&#1099;&#1090;&#1100;. &#1053;&#1091;&#1078;&#1085;&#1086; &#1087;&#1086;&#1084;&#1085;&#1080;&#1090;&#1100;, &#1095;&#1090;&#1086; &#1074; &#1082;&#1086;&#1085;&#1089;&#1090;&#1088;&#1091;&#1082;&#1094;&#1080;&#1080; &lt;b&gt;case...when&lt;/b&gt; &#1074;&#1099;&#1079;&#1099;&#1074;&#1072;&#1077;&#1090;&#1089;&#1103; &#1084;&#1077;&#1090;&#1086;&#1076; &#1089;&#1088;&#1072;&#1074;&#1085;&#1077;&#1085;&#1080;&#1103; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1072;, &#1089;&#1090;&#1086;&#1103;&#1097;&#1077;&#1075;&#1086; &#1087;&#1086;&#1089;&#1083;&#1077; &lt;b&gt;when&lt;/b&gt;, &#1072; &#1074; &#1082;&#1072;&#1095;&#1077;&#1089;&#1090;&#1074;&#1077; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1072; &#1077;&#1084;&#1091; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1105;&#1090;&#1089;&#1103; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;, &#1089;&#1090;&#1086;&#1103;&#1097;&#1080;&#1081; &#1087;&#1086;&#1089;&#1083;&#1077; &lt;b&gt;case&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;puts String === &amp;quot;&#1089;&#1090;&#1088;&#1086;&#1082;&#1072;&amp;quot; # &amp;gt; true
puts &amp;quot;&#1089;&#1090;&#1088;&#1086;&#1082;&#1072;&amp;quot; === String # &amp;gt; false
puts /&#1086;&#1082;/ === &amp;quot;&#1089;&#1090;&#1088;&#1086;&#1082;&#1072;&amp;quot;   # &amp;gt; true
puts &amp;quot;&#1089;&#1090;&#1088;&#1086;&#1082;&#1072;&amp;quot; === /&#1086;&#1082;/   # &amp;gt; false
puts (1..10) === 5       # &amp;gt; true
puts 5 === (1..10)       # &amp;gt; false&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://github.com/lonelyelk/lonelyelk_code/tree/master/compare/"&gt;&#1055;&#1086;&#1083;&#1085;&#1099;&#1081; &#1082;&#1086;&#1076; &#1089;&#1090;&#1072;&#1090;&#1100;&#1080; &#1085;&#1072; github&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.rubybestpractices.com/posts/rklemme/018-Complete_Class.html"&gt;&#1063;&#1090;&#1086; &#1085;&#1091;&#1078;&#1085;&#1086; &#1087;&#1086;&#1084;&#1085;&#1080;&#1090;&#1100;, &#1089;&#1086;&#1079;&#1076;&#1072;&#1074;&#1072;&#1103; &#1089;&#1074;&#1086;&#1081; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090; &#1088;&#1091;&#1073;&#1080;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
  <entry>
    <id>tag:lonelyelk.ru,2008:Post/28</id>
    <published>2009-10-28T13:03:53+00:00</published>
    <updated>2009-10-28T13:03:53+00:00</updated>
    <link type="text/html" rel="alternate" href="http://lonelyelk.ru/posts/28"/>
    <title>&#1059;&#1076;&#1072;&#1083;&#1105;&#1085;&#1085;&#1099;&#1077; &#1074;&#1099;&#1079;&#1086;&#1074;&#1099; &#1095;&#1077;&#1088;&#1077;&#1079; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1091; &#1088;&#1072;&#1089;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1105;&#1085;&#1085;&#1099;&#1093; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1086;&#1074; &#1074; &#1088;&#1091;&#1073;&#1080; (dRuby)</title>
    <content type="html">&lt;h2&gt;&#1042;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;&lt;p&gt;&#1053;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1077; &#1074;&#1088;&#1077;&#1084;&#1103; &#1085;&#1072;&#1079;&#1072;&#1076; &#1103; &#1087;&#1080;&#1089;&#1072;&#1083; &#1086; &lt;a href="http://lonelyelk.ru/posts/16"&gt;&#1089;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1080; &#1087;&#1086;&#1076;&#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1086;&#1074; &#1085;&#1072; &#1088;&#1091;&#1073;&#1080;&lt;/a&gt;. &#1042; &#1095;&#1080;&#1089;&#1083;&#1077; &#1087;&#1088;&#1086;&#1095;&#1077;&#1075;&#1086; &#1086;&#1076;&#1080;&#1085; &#1080;&#1079; &#1074;&#1086;&#1087;&#1088;&#1086;&#1089;&#1086;&#1074; &#1073;&#1099;&#1083; &#1086;&#1073; &#1086;&#1073;&#1097;&#1077;&#1085;&#1080;&#1080; &#1084;&#1077;&#1078;&#1076;&#1091; &#1089;&#1086;&#1073;&#1086;&#1081; &#1076;&#1077;&#1084;&#1086;&#1085;&#1072; &#1080; &#1088;&#1086;&#1076;&#1080;&#1090;&#1077;&#1083;&#1100;&#1089;&#1082;&#1086;&#1075;&#1086; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1072;. &#1054;&#1073; &#1086;&#1076;&#1085;&#1086;&#1084; &#1080;&#1079; &#1084;&#1077;&#1090;&#1086;&#1076;&#1086;&#1074; &#1087;&#1086;&#1081;&#1076;&#1105;&#1090; &#1088;&#1077;&#1095;&#1100; &#1089;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103;&lt;/p&gt;&lt;h2&gt;&#1055;&#1086;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1072; &#1079;&#1072;&#1076;&#1072;&#1095;&#1080;&lt;/h2&gt;&lt;p&gt;&#1053;&#1077; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1089;&#1090;&#1099; &#1079;&#1085;&#1072;&#1102;&#1090;, &#1095;&#1090;&#1086; &#1074;&#1072;&#1078;&#1085;&#1072; &#1094;&#1077;&#1083;&#1100; &#1082;&#1086;&#1084;&#1084;&#1091;&#1085;&#1080;&#1082;&#1072;&#1094;&#1080;&#1080;. :) &#1045;&#1089;&#1083;&#1080; &#1094;&#1077;&#1083;&#1100; &#1086;&#1073;&#1097;&#1077;&#1085;&#1080;&#1103; &#1084;&#1077;&#1078;&#1076;&#1091; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1099;&#1084; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1086;&#1084; &#1080; &#1076;&#1077;&#1084;&#1086;&#1085;&#1086;&#1084; &#1074; &#1090;&#1086;&#1084;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1074;&#1099;&#1079;&#1099;&#1074;&#1072;&#1090;&#1100; &#1084;&#1077;&#1090;&#1086;&#1076;&#1099; &#1085;&#1072; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1072;&#1093; &#1076;&#1088;&#1091;&#1075; &#1076;&#1088;&#1091;&#1075;&#1072;, &#1076;&#1086; &#1076;&#1072;&#1074;&#1072;&#1081;&#1090;&#1077; &#1085;&#1072; &#1101;&#1090;&#1086;&#1084; &#1080; &#1089;&#1086;&#1089;&#1088;&#1077;&#1076;&#1086;&#1090;&#1086;&#1095;&#1080;&#1084;&#1089;&#1103;.&lt;/p&gt;&lt;h2&gt;&#1056;&#1077;&#1096;&#1077;&#1085;&#1080;&#1077;: DRb&lt;/h2&gt;&lt;p&gt;&#1044;&#1083;&#1103; &#1091;&#1076;&#1072;&#1083;&#1105;&#1085;&#1085;&#1086;&#1075;&#1086; &#1086;&#1073;&#1088;&#1072;&#1097;&#1077;&#1085;&#1080;&#1103; &#1089; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1072;&#1084;&#1080; &#1089;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090; &#1089;&#1090;&#1072;&#1085;&#1076;&#1072;&#1088;&#1090;&#1085;&#1072;&#1103; &#1088;&#1091;&#1073;&#1080;-&#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1072; &lt;b&gt;dRuby&lt;/b&gt;, &#1074; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1081; &#1085;&#1072;&#1093;&#1086;&#1076;&#1080;&#1090;&#1089;&#1103; &#1084;&#1086;&#1076;&#1091;&#1083;&#1100; &lt;b&gt;DRb&lt;/b&gt;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1084;&#1099; &#1080; &#1073;&#1091;&#1076;&#1077;&#1084; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100;. &#1053;&#1080;&#1095;&#1077;&#1075;&#1086; &#1091;&#1089;&#1090;&#1072;&#1085;&#1072;&#1074;&#1083;&#1080;&#1074;&#1072;&#1090;&#1100; &#1085;&#1077; &#1085;&#1091;&#1078;&#1085;&#1086;. &#1057;&#1086;&#1075;&#1083;&#1072;&#1089;&#1085;&#1086; &#1076;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1080;, &#1089;&#1086;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1085;&#1086; &#1087;&#1088;&#1086;&#1079;&#1088;&#1072;&#1095;&#1085;&#1099;&#1084; &#1086;&#1073;&#1088;&#1072;&#1079;&#1086;&#1084; &#1084;&#1086;&#1078;&#1085;&#1086; &#1074;&#1099;&#1079;&#1074;&#1072;&#1090;&#1100; &#1084;&#1077;&#1090;&#1086;&#1076;&#1099; &#1085;&#1072; &#1091;&#1076;&#1072;&#1083;&#1105;&#1085;&#1085;&#1086;&#1084; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1077; &#1076;&#1072;&#1078;&#1077; &#1085;&#1072; &#1076;&#1088;&#1091;&#1075;&#1086;&#1081; &#1084;&#1072;&#1096;&#1080;&#1085;&#1077;. &#1054;&#1073;&#1098;&#1077;&#1082;&#1090;&#1099; &#1080; &#1089;&#1089;&#1099;&#1083;&#1082;&#1080; &#1085;&#1072; &#1085;&#1080;&#1093; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1102;&#1090;&#1089;&#1103; &#1074; &#1092;&#1086;&#1088;&#1084;&#1072;&#1090;&#1077; &lt;b&gt;Marshal&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;&#1053;&#1091;, &#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1086; &#1090;&#1077;&#1086;&#1088;&#1080;&#1080;! &#1055;&#1077;&#1088;&#1077;&#1081;&#1076;&#1105;&#1084; &#1082; &#1087;&#1088;&#1072;&#1082;&#1090;&#1080;&#1082;&#1077;. &#1044;&#1083;&#1103; &#1101;&#1084;&#1091;&#1083;&#1103;&#1094;&#1080;&#1080; &#1087;&#1072;&#1088;&#1072;&#1083;&#1083;&#1077;&#1083;&#1100;&#1085;&#1099;&#1093; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1086;&#1074; (&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1085;&#1072; &#1088;&#1072;&#1079;&#1085;&#1099;&#1093; &#1084;&#1072;&#1096;&#1080;&#1085;&#1072;&#1093; (!)) &#1084;&#1099; &#1073;&#1091;&#1076;&#1077;&#1084; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1076;&#1074;&#1072; &#1086;&#1082;&#1085;&#1072; &#1090;&#1077;&#1088;&#1084;&#1080;&#1085;&#1072;&#1083;&#1072;. &#1042; &#1086;&#1076;&#1085;&#1086;&#1084; &#1079;&#1072;&#1087;&#1091;&#1089;&#1090;&#1080;&#1084; &lt;b&gt;server.rb&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;# coding: utf-8
$KCODE = &amp;quot;utf-8&amp;quot; if RUBY_VERSION &amp;lt; &amp;quot;1.9.0&amp;quot;
require &amp;quot;drb/drb&amp;quot;

class RemoteObject
  def remote_method_with_param(param)
    puts &amp;quot;&#1074;&#1099;&#1079;&#1074;&#1072;&#1085; &#1084;&#1077;&#1090;&#1086;&#1076; &#1085;&#1072; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1077; &#1089; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1086;&#1084; #{param.inspect}&amp;quot;
    case param.class.to_s
    when &amp;quot;String&amp;quot;
      puts &amp;quot;&#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1090;&#1080;&#1087;&#1072; &#1089;&#1090;&#1088;&#1086;&#1082;&#1072;&amp;quot;
      param.reverse!
    when &amp;quot;Array&amp;quot;
      puts &amp;quot;&#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1090;&#1080;&#1087;&#1072; &#1084;&#1072;&#1089;&#1089;&#1080;&#1074;&amp;quot;
      param.shift
    else
      puts &amp;quot;&#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1086;&#1089;&#1090;&#1072;&#1074;&#1096;&#1077;&#1075;&#1086;&#1089;&#1103; &#1090;&#1080;&#1087;&#1072;&amp;quot;
      param.do_smth
    end
  end
end

$SAFE = 1 # &#1047;&#1072;&#1087;&#1088;&#1077;&#1090;&#1080;&#1090;&#1100; eval() &#1080; eval-&#1086;&#1087;&#1086;&#1076;&#1086;&#1073;&#1085;&#1099;&#1077; &#1074;&#1099;&#1079;&#1086;&#1074;&#1099;

DRb.start_service(&amp;quot;druby://localhost:45678&amp;quot;, RemoteObject.new)
DRb.thread.join&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1047;&#1076;&#1077;&#1089;&#1100; &#1084;&#1099; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1084; &#1073;&#1072;&#1085;&#1072;&#1083;&#1100;&#1085;&#1099;&#1081; &lt;b&gt;Thread#join&lt;/b&gt;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1087;&#1088;&#1080; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086;&#1089;&#1090;&#1080; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1087;&#1088;&#1077;&#1088;&#1074;&#1072;&#1090;&#1100; &#1074;&#1099;&#1087;&#1086;&#1083;&#1085;&#1077;&#1085;&#1080;&#1077;. &#1053;&#1086; &#1090;&#1077;, &#1082;&#1090;&#1086; &#1095;&#1080;&#1090;&#1072;&#1083; &#1087;&#1088;&#1077;&#1076;&#1099;&#1076;&#1091;&#1097;&#1091;&#1102; &#1089;&#1090;&#1072;&#1090;&#1100;&#1102;, &#1079;&#1085;&#1072;&#1102;&#1090;, &#1095;&#1090;&#1086; &#1074; &#1101;&#1090;&#1086; &#1074;&#1088;&#1077;&#1084;&#1103; &#1084;&#1086;&#1078;&#1085;&#1086; &#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1095;&#1090;&#1086; &#1091;&#1075;&#1086;&#1076;&#1085;&#1086; &#1080; &#1089;&#1083;&#1077;&#1076;&#1080;&#1090;&#1100; &#1079;&#1072; &#1087;&#1086;&#1090;&#1086;&#1082;&#1086;&#1084; dRuby &#1086;&#1090;&#1076;&#1077;&#1083;&#1100;&#1085;&#1086;.&lt;/p&gt;&lt;p&gt;&#1042; &#1076;&#1088;&#1091;&#1075;&#1086;&#1084; &#1090;&#1077;&#1088;&#1084;&#1080;&#1085;&#1072;&#1083;&#1077; &#1079;&#1072;&#1087;&#1091;&#1089;&#1090;&#1080;&#1084; &#1082;&#1083;&#1080;&#1077;&#1085;&#1090;&#1089;&#1082;&#1080;&#1081; &#1082;&#1086;&#1076; &lt;b&gt;client.rb&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;# coding: utf-8
$KCODE = &amp;quot;utf-8&amp;quot; if RUBY_VERSION &amp;lt; &amp;quot;1.9.0&amp;quot;
require &amp;quot;drb/drb&amp;quot;

class MyString
  def initialize(str)
    @string = str
  end

  def do_smth
    @string.reverse!
  end

  def inspect
    &amp;quot;&amp;lt;#{@string}&amp;gt;&amp;quot;
  end
end

rem_o = DRbObject.new_with_uri(&amp;quot;druby://localhost:45678&amp;quot;)

[&amp;quot;&#1089;&#1090;&#1088;&#1086;&#1082;&#1072;&amp;quot;, [&amp;quot;&#1082;&#1086;&#1090;&#1080;&#1082;&amp;quot;, &amp;quot;&#1087;&#1105;&#1089;&#1080;&#1082;&amp;quot;, &amp;quot;&#1089;&#1083;&#1086;&#1085;&#1080;&#1082;&amp;quot;], MyString.new(&amp;quot;&#1089;&#1091;&#1087;&#1077;&#1088;&#1089;&#1090;&#1088;&#1086;&#1082;&#1072;&amp;quot;)].each do |obj|
  puts &amp;quot;&#1042;&#1099;&#1079;&#1086;&#1074; &#1084;&#1077;&#1090;&#1086;&#1076;&#1072; &#1074;&#1077;&#1088;&#1085;&#1091;&#1083;: #{rem_o.remote_method_with_param(obj).inspect}&amp;quot;
  puts &amp;quot;&#1055;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1087;&#1086;&#1089;&#1083;&#1077; &#1074;&#1099;&#1079;&#1086;&#1074;&#1072;: #{obj.inspect}&amp;quot;
end&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1042;&#1099;&#1074;&#1086;&#1076; &#1074; &#1090;&#1077;&#1088;&#1084;&#1080;&#1085;&#1072;&#1083;&#1099; &#1073;&#1091;&#1076;&#1077;&#1090; &#1089;&#1083;&#1077;&#1076;&#1091;&#1102;&#1097;&#1080;&#1081; (&#1103; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1102; &#1074;&#1099;&#1074;&#1086;&#1076; &#1076;&#1083;&#1103; &#1074;&#1077;&#1088;&#1089;&#1080;&#1080; &#1088;&#1091;&#1073;&#1080; 1.9.1, &#1087;&#1086;&#1090;&#1086;&#1084;&#1091; &#1095;&#1090;&#1086; &#1086;&#1085; &#1085;&#1086;&#1088;&#1084;&#1072;&#1083;&#1100;&#1085;&#1086; &#1087;&#1077;&#1088;&#1077;&#1074;&#1086;&#1088;&#1072;&#1095;&#1080;&#1074;&#1072;&#1077;&#1090; &#1082;&#1080;&#1088;&#1080;&#1083;&#1083;&#1080;&#1095;&#1077;&#1089;&#1082;&#1091;&#1102; &#1089;&#1090;&#1088;&#1086;&#1082;&#1091; &#1073;&#1077;&#1079; &#1082;&#1086;&#1083;&#1076;&#1086;&#1074;&#1089;&#1090;&#1074;&#1072;) &#1076;&#1083;&#1103; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1072;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&#1074;&#1099;&#1079;&#1074;&#1072;&#1085; &#1084;&#1077;&#1090;&#1086;&#1076; &#1085;&#1072; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1077; &#1089; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1086;&#1084; &amp;quot;&#1089;&#1090;&#1088;&#1086;&#1082;&#1072;&amp;quot;
&#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1090;&#1080;&#1087;&#1072; &#1089;&#1090;&#1088;&#1086;&#1082;&#1072;
&#1074;&#1099;&#1079;&#1074;&#1072;&#1085; &#1084;&#1077;&#1090;&#1086;&#1076; &#1085;&#1072; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1077; &#1089; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1086;&#1084; [&amp;quot;&#1082;&#1086;&#1090;&#1080;&#1082;&amp;quot;, &amp;quot;&#1087;&#1105;&#1089;&#1080;&#1082;&amp;quot;, &amp;quot;&#1089;&#1083;&#1086;&#1085;&#1080;&#1082;&amp;quot;]
&#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1090;&#1080;&#1087;&#1072; &#1084;&#1072;&#1089;&#1089;&#1080;&#1074;
&#1074;&#1099;&#1079;&#1074;&#1072;&#1085; &#1084;&#1077;&#1090;&#1086;&#1076; &#1085;&#1072; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1077; &#1089; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1086;&#1084; #&amp;lt;DRb::DRbUnknown:0x00000001248910 @name=&amp;quot;MyString&amp;quot;, @buf=&amp;quot;\x04\bo:\rMyString\x06:\f@stringI\&amp;quot;\e\xD1\x81\xD1\x83\xD0\xBF\xD0\xB5\xD1\x80\xD1\x81\xD1\x82\xD1\x80\xD0\xBE\xD0\xBA\xD0\xB0\x06:\rencoding\&amp;quot;\nUTF-8&amp;quot;&amp;gt;
&#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1086;&#1089;&#1090;&#1072;&#1074;&#1096;&#1077;&#1075;&#1086;&#1089;&#1103; &#1090;&#1080;&#1087;&#1072;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1050;&#1083;&#1080;&#1077;&#1085;&#1090; &#1078;&#1077; &#1091;&#1087;&#1072;&#1076;&#1105;&#1090; &#1089; &#1086;&#1096;&#1080;&#1073;&#1082;&#1086;&#1081;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&#1042;&#1099;&#1079;&#1086;&#1074; &#1084;&#1077;&#1090;&#1086;&#1076;&#1072; &#1074;&#1077;&#1088;&#1085;&#1091;&#1083;: &amp;quot;&#1072;&#1082;&#1086;&#1088;&#1090;&#1089;&amp;quot;
&#1055;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1087;&#1086;&#1089;&#1083;&#1077; &#1074;&#1099;&#1079;&#1086;&#1074;&#1072;: &amp;quot;&#1089;&#1090;&#1088;&#1086;&#1082;&#1072;&amp;quot;
&#1042;&#1099;&#1079;&#1086;&#1074; &#1084;&#1077;&#1090;&#1086;&#1076;&#1072; &#1074;&#1077;&#1088;&#1085;&#1091;&#1083;: &amp;quot;&#1082;&#1086;&#1090;&#1080;&#1082;&amp;quot;
&#1055;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1087;&#1086;&#1089;&#1083;&#1077; &#1074;&#1099;&#1079;&#1086;&#1074;&#1072;: [&amp;quot;&#1082;&#1086;&#1090;&#1080;&#1082;&amp;quot;, &amp;quot;&#1087;&#1105;&#1089;&#1080;&#1082;&amp;quot;, &amp;quot;&#1089;&#1083;&#1086;&#1085;&#1080;&#1082;&amp;quot;]
(druby://localhost:45678) server.rb:17:in `remote_method_with_param&amp;#39;: undefined method `do_smth&amp;#39; for #&amp;lt;DRb::DRbUnknown:0x00000001248910&amp;gt; (NoMethodError)
     .....&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1063;&#1090;&#1086;, &#1073;&#1077;&#1079;&#1091;&#1089;&#1083;&#1086;&#1074;&#1085;&#1086;, &#1087;&#1088;&#1077;&#1082;&#1088;&#1072;&#1089;&#1085;&#1086;. &#1055;&#1088;&#1077;&#1082;&#1088;&#1072;&#1089;&#1085;&#1086;, &#1095;&#1090;&#1086; &#1091;&#1087;&#1072;&#1083; &#1085;&#1077; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;. :) &#1055;&#1086;&#1085;&#1103;&#1090;&#1085;&#1086;, &#1095;&#1090;&#1086; &#1086;&#1085; &#1085;&#1077; &#1079;&#1085;&#1072;&#1077;&#1090; &#1085;&#1080;&#1095;&#1077;&#1075;&#1086; &#1087;&#1088;&#1086; &#1101;&#1090;&#1086;&#1090; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090; &#1080; &#1085;&#1077; &#1079;&#1085;&#1072;&#1077;&#1090;, &#1082;&#1072;&#1082; &#1089; &#1085;&#1080;&#1084; &#1086;&#1073;&#1088;&#1072;&#1097;&#1072;&#1090;&#1100;&#1089;&#1103;.&lt;/p&gt;&lt;p&gt;&#1050;&#1072;&#1082; &#1074;&#1080;&#1076;&#1085;&#1086; &#1080;&#1079; &#1074;&#1099;&#1074;&#1086;&#1076;&#1072;, &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1099; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1102;&#1090;&#1089;&#1103; &#1074; &#1074;&#1080;&#1076;&#1077; &#1082;&#1086;&#1087;&#1080;&#1081;. &#1053;&#1072;&#1096;&#1080;&#1084; &#1078;&#1077; &#1090;&#1088;&#1077;&#1090;&#1100;&#1080;&#1084;, &#1089;&#1072;&#1084;&#1086;&#1076;&#1077;&#1083;&#1100;&#1085;&#1099;&#1084; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1086;&#1084;, &#1084;&#1099; &#1084;&#1086;&#1078;&#1077;&#1084; &#1080;&#1089;&#1089;&#1083;&#1077;&#1076;&#1086;&#1074;&#1072;&#1090;&#1100; &#1076;&#1074;&#1077; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1080;: &#1090;&#1072;&#1082;&#1080; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1074;&#1072;&#1090;&#1100; &#1082;&#1086;&#1087;&#1080;&#1102; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1072; &#1080;&#1083;&#1080; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1074;&#1072;&#1090;&#1100; &#1083;&#1080;&#1096;&#1100; &#1089;&#1089;&#1099;&#1083;&#1082;&#1091; &#1085;&#1072; &#1085;&#1077;&#1075;&#1086;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1074;&#1099;&#1079;&#1086;&#1074;&#1099; &#1074;&#1099;&#1087;&#1086;&#1083;&#1085;&#1103;&#1083;&#1080;&#1089;&#1100; &#1085;&#1072; &#1082;&#1083;&#1080;&#1077;&#1085;&#1090;&#1089;&#1082;&#1086;&#1081; &#1082;&#1086;&#1087;&#1080;&#1080;. &#1044;&#1083;&#1103; &#1087;&#1077;&#1088;&#1074;&#1086;&#1081; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1080; &#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1086;&#1095;&#1085;&#1086; &#1074;&#1099;&#1085;&#1077;&#1089;&#1090;&#1080; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1077;&#1085;&#1080;&#1077; &#1082;&#1083;&#1072;&#1089;&#1089;&#1072; &#1074; &#1086;&#1073;&#1097;&#1077;&#1076;&#1086;&#1089;&#1090;&#1091;&#1087;&#1085;&#1086;&#1077; &#1076;&#1083;&#1103; &#1082;&#1083;&#1080;&#1077;&#1085;&#1090;&#1072; &#1080; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1072; &#1084;&#1077;&#1089;&#1090;&#1086;&amp;nbsp;&amp;#151; &lt;b&gt;common.rb&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;# coding: utf-8
$KCODE = &amp;quot;utf-8&amp;quot; if RUBY_VERSION &amp;lt; &amp;quot;1.9.0&amp;quot;
require &amp;quot;drb/drb&amp;quot;

REM_URI = &amp;quot;druby://localhost:45678&amp;quot;

class MyStringCopied
  def initialize(str)
    @string = str
  end

  def do_smth
    @string.reverse!
    self
  end

  def inspect
    &amp;quot;&amp;lt;&amp;lt;#{@string}&amp;gt;&amp;gt;&amp;quot;
  end
end

class MyStringSingle
  include DRb::DRbUndumped # &#1101;&#1090;&#1086; &#1082;&#1083;&#1102;&#1095; :)
  def initialize(str)
    @string = str
  end

  def do_smth
    @string.reverse!
    self
  end

  def inspect
    &amp;quot;&amp;lt;#{@string}&amp;gt;&amp;quot;
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1044;&#1086;&#1073;&#1072;&#1074;&#1080;&#1084; &lt;i&gt;require &amp;quot;common.rb&amp;quot;&lt;/i&gt; &#1074; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1085;&#1099;&#1081; &#1082;&#1086;&#1076;, &#1072; &#1082;&#1083;&#1080;&#1077;&#1085;&#1090;&#1089;&#1082;&#1080;&#1081; &#1087;&#1088;&#1077;&#1086;&#1073;&#1088;&#1072;&#1079;&#1080;&#1090;&#1089;&#1103; &#1076;&#1086; &#1090;&#1072;&#1082;&#1086;&#1075;&#1086;:&lt;/p&gt;&lt;pre&gt;&lt;code class='ruby'&gt;# coding: utf-8
require &amp;quot;common&amp;quot;

rem_o = DRbObject.new_with_uri(REM_URI)

DRb.start_service # &#1069;&#1090;&#1086; &#1085;&#1091;&#1078;&#1085;&#1086; &#1076;&#1083;&#1103; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1072;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1085;&#1077; &#1082;&#1086;&#1087;&#1080;&#1088;&#1091;&#1077;&#1090;&#1089;&#1103; &#1087;&#1088;&#1080; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1095;&#1077;

[&amp;quot;&#1089;&#1090;&#1088;&#1086;&#1082;&#1072;&amp;quot;,
  [&amp;quot;&#1082;&#1086;&#1090;&#1080;&#1082;&amp;quot;, &amp;quot;&#1087;&#1105;&#1089;&#1080;&#1082;&amp;quot;, &amp;quot;&#1089;&#1083;&#1086;&#1085;&#1080;&#1082;&amp;quot;],
  MyStringCopied.new(&amp;quot;&#1089;&#1091;&#1087;&#1077;&#1088;&#1089;&#1090;&#1088;&#1086;&#1082;&#1072;&amp;quot;),
  MyStringSingle.new(&amp;quot;&#1089;&#1091;&#1087;&#1077;&#1088;&#1089;&#1090;&#1088;&#1086;&#1082;&#1072; &#1073;&#1077;&#1079; &#1082;&#1086;&#1087;&#1080;&#1081;&amp;quot;)].each do |obj|
  puts &amp;quot;&#1042;&#1099;&#1079;&#1086;&#1074; &#1084;&#1077;&#1090;&#1086;&#1076;&#1072; &#1074;&#1077;&#1088;&#1085;&#1091;&#1083;: #{rem_o.remote_method_with_param(obj).inspect}&amp;quot;
  puts &amp;quot;&#1055;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1087;&#1086;&#1089;&#1083;&#1077; &#1074;&#1099;&#1079;&#1086;&#1074;&#1072;: #{obj.inspect}&amp;quot;
end&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1050;&#1072;&#1082; &#1074;&#1080;&#1076;&#1085;&#1086;, &#1084;&#1099; &#1089;&#1088;&#1072;&#1079;&#1091; &#1087;&#1086;&#1079;&#1072;&#1073;&#1086;&#1090;&#1080;&#1083;&#1080;&#1089;&#1100; &#1080; &#1086; &#1074;&#1090;&#1086;&#1088;&#1086;&#1081; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1080;, &#1089;&#1086;&#1079;&#1076;&#1072;&#1074; &#1076;&#1083;&#1103; &#1085;&#1077;&#1105; &#1077;&#1097;&#1105; &#1086;&#1076;&#1080;&#1085; &#1082;&#1083;&#1072;&#1089;&#1089;. &#1057;&#1077;&#1082;&#1088;&#1077;&#1090; &#1079;&#1072;&#1082;&#1083;&#1102;&#1095;&#1072;&#1077;&#1090;&#1089;&#1103; &#1074;&#1086; &#1074;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1080;&#1080; &#1084;&#1086;&#1076;&#1091;&#1083;&#1103; &lt;b&gt;DRb::DRbUndumped&lt;/b&gt; &#1080; &#1089;&#1090;&#1072;&#1088;&#1090;&#1077; &#1077;&#1097;&#1105; &#1086;&#1076;&#1085;&#1086;&#1075;&#1086; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1085;&#1086;&#1075;&#1086; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1072; &#1085;&#1072; &#1082;&#1083;&#1080;&#1077;&#1085;&#1090;&#1077; (&#1076;&#1083;&#1103; &#1074;&#1099;&#1079;&#1086;&#1074;&#1086;&#1074; &#1084;&#1077;&#1090;&#1086;&#1076;&#1086;&#1074; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1086;&#1074; &#1082;&#1083;&#1080;&#1077;&#1085;&#1090;&#1072; &#1091;&#1076;&#1072;&#1083;&#1105;&#1085;&#1085;&#1086;) &#1050;&#1083;&#1080;&#1077;&#1085;&#1090;&#1089;&#1082;&#1080;&#1081; &#1074;&#1099;&#1074;&#1086;&#1076; &#1090;&#1077;&#1087;&#1077;&#1088;&#1100; &#1074;&#1099;&#1075;&#1083;&#1103;&#1076;&#1080;&#1090; &#1090;&#1072;&#1082;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&#1042;&#1099;&#1079;&#1086;&#1074; &#1084;&#1077;&#1090;&#1086;&#1076;&#1072; &#1074;&#1077;&#1088;&#1085;&#1091;&#1083;: &amp;quot;&#1072;&#1082;&#1086;&#1088;&#1090;&#1089;&amp;quot;
&#1055;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1087;&#1086;&#1089;&#1083;&#1077; &#1074;&#1099;&#1079;&#1086;&#1074;&#1072;: &amp;quot;&#1089;&#1090;&#1088;&#1086;&#1082;&#1072;&amp;quot;
&#1042;&#1099;&#1079;&#1086;&#1074; &#1084;&#1077;&#1090;&#1086;&#1076;&#1072; &#1074;&#1077;&#1088;&#1085;&#1091;&#1083;: &amp;quot;&#1082;&#1086;&#1090;&#1080;&#1082;&amp;quot;
&#1055;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1087;&#1086;&#1089;&#1083;&#1077; &#1074;&#1099;&#1079;&#1086;&#1074;&#1072;: [&amp;quot;&#1082;&#1086;&#1090;&#1080;&#1082;&amp;quot;, &amp;quot;&#1087;&#1105;&#1089;&#1080;&#1082;&amp;quot;, &amp;quot;&#1089;&#1083;&#1086;&#1085;&#1080;&#1082;&amp;quot;]
&#1042;&#1099;&#1079;&#1086;&#1074; &#1084;&#1077;&#1090;&#1086;&#1076;&#1072; &#1074;&#1077;&#1088;&#1085;&#1091;&#1083;: &amp;lt;&amp;lt;&#1072;&#1082;&#1086;&#1088;&#1090;&#1089;&#1088;&#1077;&#1087;&#1091;&#1089;&amp;gt;&amp;gt;
&#1055;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1087;&#1086;&#1089;&#1083;&#1077; &#1074;&#1099;&#1079;&#1086;&#1074;&#1072;: &amp;lt;&amp;lt;&#1089;&#1091;&#1087;&#1077;&#1088;&#1089;&#1090;&#1088;&#1086;&#1082;&#1072;&amp;gt;&amp;gt;
&#1042;&#1099;&#1079;&#1086;&#1074; &#1084;&#1077;&#1090;&#1086;&#1076;&#1072; &#1074;&#1077;&#1088;&#1085;&#1091;&#1083;: #&amp;lt;DRb::DRbObject:0x000000012588c8 @uri=&amp;quot;druby://127.0.1.1:43998&amp;quot;, @ref=9631244&amp;gt;
&#1055;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1087;&#1086;&#1089;&#1083;&#1077; &#1074;&#1099;&#1079;&#1086;&#1074;&#1072;: &amp;lt;&#1081;&#1080;&#1087;&#1086;&#1082; &#1079;&#1077;&#1073; &#1072;&#1082;&#1086;&#1088;&#1090;&#1089;&#1088;&#1077;&#1087;&#1091;&#1089;&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#1045;&#1089;&#1083;&#1080; &#1085;&#1077;&#1084;&#1085;&#1086;&#1078;&#1082;&#1086; &#1087;&#1086;&#1095;&#1080;&#1090;&#1072;&#1090;&#1100;, &#1080; &#1088;&#1072;&#1079;&#1086;&#1073;&#1088;&#1072;&#1090;&#1100;&#1089;&#1103;, &#1082;&#1072;&#1082;&#1080;&#1077; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1099; &#1084;&#1086;&#1078;&#1085;&#1086; &#1080; &#1085;&#1091;&#1078;&#1085;&#1086; &amp;laquo;&#1084;&#1072;&#1088;&#1096;&#1072;&#1083;&#1080;&#1079;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100;&amp;raquo;, &#1072; &#1082;&#1072;&#1082;&#1080;&#1077; &#1085;&#1077;&#1083;&#1100;&#1079;&#1103; &#1080;&#1083;&#1080; &#1085;&#1077; &#1085;&#1091;&#1078;&#1085;&#1086;, &#1090;&#1086; &#1087;&#1086;&#1083;&#1091;&#1095;&#1072;&#1077;&#1090;&#1089;&#1103; &#1074;&#1087;&#1086;&#1083;&#1085;&#1077; &#1089;&#1077;&#1073;&#1077; &#1087;&#1088;&#1077;&#1082;&#1088;&#1072;&#1089;&#1085;&#1099;&#1081; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1084;&#1077;&#1085;&#1090;. &#1050;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081;, &#1087;&#1086;&#1074;&#1090;&#1086;&#1088;&#1102;&#1089;&#1100;, &#1074;&#1093;&#1086;&#1076;&#1080;&#1090; &#1074; &#1089;&#1090;&#1072;&#1085;&#1076;&#1072;&#1088;&#1090;&#1085;&#1091;&#1102; &#1073;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1091; &#1080; &#1085;&#1077; &#1090;&#1088;&#1077;&#1073;&#1091;&#1077;&#1090; &#1085;&#1080;&#1082;&#1072;&#1082;&#1080;&#1093; &#1074;&#1085;&#1077;&#1096;&#1085;&#1080;&#1093; &#1079;&#1072;&#1074;&#1080;&#1089;&#1080;&#1084;&#1086;&#1089;&#1090;&#1077;&#1081;.&lt;/p&gt;&lt;h2&gt;&#1052;&#1072;&#1090;&#1077;&#1088;&#1080;&#1072;&#1083;&#1099; &#1076;&#1083;&#1103; &#1089;&#1072;&#1084;&#1086;&#1089;&#1090;&#1086;&#1103;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079;&#1091;&#1095;&#1077;&#1085;&#1080;&#1103;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://github.com/lonelyelk/lonelyelk_code/tree/master/drb/"&gt;&#1055;&#1086;&#1083;&#1085;&#1099;&#1081; &#1082;&#1086;&#1076; &#1089;&#1090;&#1072;&#1090;&#1100;&#1080; &#1085;&#1072; github&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html"&gt;&#1044;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1103; &#1087;&#1086; DRb (rdoc)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ruby-doc.org/core/classes/Marshal.html"&gt;&#1044;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1072;&#1094;&#1080;&#1103; &#1087;&#1086; Marshal&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content>
    <author>
      <name>Sergey Kruk</name>
      <email>sergey.kruk@gmail.com</email>
    </author>
  </entry>
</feed>
