рдЕрдкрдиреЗ рдЗрдЪреНрдЫрд┐рдд рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЯреНрд╡рд┐рдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдПрдХ рдмрд╛рд░ рдореИрдВ рдмрд╣реБрдд рдмреЛрд░ рд╣реЛ рдЧрдпрд╛ рдерд╛ред рдЗрддрдирд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ "рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░" рдХреЗ рд╕рднреА рд╡рд┐рд╡рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред



рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбрд┐рдмреНрдмреЗ рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛: Arduino рд╕рдВрдЧрдд рдмреЛрд░реНрдб, рдЯреАрдкреА-рд▓рд┐рдВрдХ mr3020 рд░реВрдЯрд░, рдЬреАрдкреАрдПрд╕ рдореЙрдбреНрдпреВрд▓, рдЬрд╛рдЗрд░реЛрд╕реНрдХреЛрдк / рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░, рдФрд░ рдЕрдиреНрдп рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдХрд╡рд╛рд╕ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ред

рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдкрд╛рдардХреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЬреАрдкреАрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЬрд╛рдЗрд░реЛрд╕реНрдХреЛрдк рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рдереЗ
ред
рдФрд░ рдпрд╣рд╛рдБ рдЯреНрд╡рд┐рдЯрд░ред рд╕рдмреНрдЬрд╝реА рдХреЗ рдкреНрд░рддрд┐ рдореЗрд░рд╛ рд░рд╡реИрдпрд╛ рдЙрджрд╛рд╕реАрдирддрд╛ рдФрд░ рдирдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХреЗ рдХрдЧрд╛рд░ рдкрд░ рд╣реИред рдЦреИрд░, рддрд╕реНрд╡реАрд░реЛрдВ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХреЗ рдмрд┐рдирд╛ рдХреЗрд╡рд▓ 140 рдЕрдХреНрд╖рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрддрд╛рдирд╛ рдХрд┐рддрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ? рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд░рд╣рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордЭрджрд╛рд░ рдЦрд┐рд▓реМрдирд╛ рдФрд░ рдирд╛рд╢реНрддреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕рдиреЗ рдХреНрдпрд╛ рдЦрд╛рдпрд╛, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред рдпрд╣ рдореЗрд░реА рдирд┐рдЬреА рд░рд╛рдп рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреЗ рд╕рд╛рде рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреА рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ рд╕реЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рд▓реЗрдЦ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВред
рдЗрди рд╕рднреА рд╡рд┐рдЪрд╛рд░реЛрдВ рдиреЗ рдореБрдЭреЗ рдПрдХ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЪрд╛рд░ рджрд┐рдпрд╛ рдЬреЛ рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВ рд╢реМрдЪрд╛рд▓рдп рдХрд╛ рджреМрд░рд╛ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рд╡рд╣ рдЯреНрд╡реАрдЯ рдХрд░реЗрдЧрд╛! рдЦреИрд░, рдпрд╣ рддреЛ рд╕рднреА рдХреЛ рдкрддрд╛ рдерд╛ред рдФрд░ рди рдХреЗрд╡рд▓ рдпрд╛рддреНрд░рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдмрд▓реНрдХрд┐ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВрдиреЗ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдорд╛рдкрджрдВрдб рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╢реМрдЪрд╛рд▓рдп рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рд╕рдВрдХреЗрдд рдПрдХ рдмрдВрдж рджрд░рд╡рд╛рдЬрд╛ рдФрд░ рдПрдХ рдкреНрд░рдХрд╛рд╢ рд╣реИред рд╣рд╛рде рдореЗрдВ рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧреЗрдЯ рд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реЗрдВрд╕рд░ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд╢ рд╕рдВрд╢реНрд▓реЗрд╖рдХ рддрддреНрд╡ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред



рдорд▓реНрдЯреАрдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЬрдм рд░реЛрд╢рдиреА рдмрджрд▓рддреА рд╣реИ, рддреЛ рдЙрд╕рдореЗрдВ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдВрддрд░ рдкреИрджрд╛ рд╣реЛрддрд╛ рд╣реИред рдЕрдзрд┐рдХрддрдо рд░реЛрд╢рдиреА рдореЗрдВ, "рд╡реЛрд▓реНрдЯреЗрдЬ рдореАрдЯрд░" рдиреЗ рд▓рдЧрднрдЧ 0.330 рд╡реЛрд▓реНрдЯ рджрд┐рдЦрд╛рдпрд╛ред рд╣рдо "рдЖрд░реНрдбрд┐рдиреЛ" рд╕реЗ рдЪрд┐рдкрдХреЗ рд░рд╣рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рджрд░рд╡рд╛рдЬреЗ рдХреА рд╕реНрдерд┐рддрд┐ (рдЦреБрд▓реЗ / рдмрдВрдж) рдХреЛ рдХреЗрд╡рд▓ рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рд╡реИрд╕реЗ, рдпрд╣ рд╕рдмрд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рдирд┐рдХрд▓рд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдмрдЯрди рдирд╣реАрдВ рдорд┐рд▓рд╛ред



рдпрд╣рд╛рдБ "Arduino" рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ:

#include <SoftwareSerial.h> //   SoftwareSerial mySerial(2, 3); // RX, TX     rs323 int cnt = 0; //   void setup() { mySerial.begin(115200); //   mySerial.println("Halo world"); } void loop() { int lightValue = analogRead(A0); //      int doorValue = analogRead(A1); //    boolean light = false; boolean door = false; if(lightValue > 60) light = true; //    60 -   .    if(doorValue > 500) door = true; //       0,   1023. //   ,  ...   if(light && door) cnt++; //    -   else { if(cnt>0) { //    mySerial.print("<"); mySerial.print(cnt); //      mySerial.println(">"); } cnt = 0; //   } delay(1000); } 


рджреВрд╕рд░реА рдЪреАрдЬрд╝ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП рд╡реЛ рд╣реИ рдПрдХ рд░рд╛рдЙрдЯрд░ред рдореИрдВрдиреЗ tp-link mr3020 рд▓рд┐рдпрд╛ред рдЖрдкрдХреЛ рдЙрд╕ рдкрд░ OpenWRT рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ php рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╣ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕рд╣рд┐рдд рдХрдИ рдмрд╛рд░ рд╡рд░реНрдгрд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдХреЗрд╡рд▓ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ: рдпрд╣рд╛рдВ рд╣рдо рдкреЛрд░реНрдЯ рдХреЛ рд╕реБрдирддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ

 <?php //     $child_pid = pcntl_fork(); if ($child_pid) { exit(); } posix_setsid(); //      include("post.php"); $filename = "/dev/ttyATH0"; // serial-  $handle = fopen($filename, "r"); //  while (!feof($handle)) { $sym = fread($handle, 1); //       if($sym=='>') { $f=false; echo "<<$cnt>>\n"; flush(); act($cnt); $cnt=''; } elseif($sym=='<') $f=true; elseif($f) $cnt .= $sym; } fclose($handle); function act($time) { if($time<40) {echo "dunno\n";} if(40<=$time && $time<150) { postMyPost("i was pee");} if(150<=$time && $time<300) { postMyPost("i was poo");} if(300<=$time && $time<900) { postMyPost("i take shower");} } ?> 


рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ:

рддреАрд╕рд░рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЯреНрд╡реАрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ, dev.twitter.com рдкрд░ рдЬрд╛рдПрдВ, рдХрд░реНрд╕рд░ рдХреЛ рдЕрдкрдиреЗ рд╣рд▓реНрдХреЗ рдЪреЗрд╣рд░реЗ рдХреЗ рдКрдкрд░реА рджрд╛рдПрдБ рднрд╛рдЧ рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдВ, рдореЗрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред Create New Application рд╕реЗ рдЬреНрдпрд╛рджрд╛, рд╣рдо рд╕рднреА рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрддреЗ рд╣реИрдВред рдлрд┐рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ: рдкрдврд╝реЗрдВ рдФрд░ рд▓рд┐рдЦреЗрдВред рдлрд┐рд░ рд╡рд┐рд╡рд░рдг рдореЗрдВ, рдореЗрд░реА рдкрд╣реБрдВрдЪ рдЯреЛрдХрди рдмрдирд╛рдПрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЙрдкрднреЛрдХреНрддрд╛ рдХреБрдВрдЬреА, рдЙрдкрднреЛрдХреНрддрд╛ рд░рд╣рд╕реНрдп, рдкрд╣реБрдВрдЪ рдЯреЛрдХрди рдФрд░ рдкреНрд░рд╡реЗрд╢ рдЯреЛрдХрди рд░рд╣рд╕реНрдп рдпрд╛рдж рд░рдЦреЗрдВ, рд╣рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред PHP рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ: github.com/abraham/twitteroauth/archive/master.zip
Config.php рдореЗрдВ рд╣рдо рдкрд╣рд▓реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 define('CONSUMER_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxx'); define('CONSUMER_SECRET', 'yyyyyyyyyyyyyyyyyyyyyyyyyy'); define('OAUTH_TOKEN', 'qwertyqwertyqwertyqwertyqwertyqwerty'); define('OAUTH_SECRET', 'sashagreysashagreysashagreysashagrey'); define('OAUTH_CALLBACK', 'http://example.com/twitteroauth/callback.php'); 


рдареАрдХ рд╣реИ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реА рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП (рдкреЛрд╕реНрдЯред рдПрдлрдкреА):

 <?PHP require_once('lib/twitteroauth/twitteroauth.php'); require_once('lib/config.php'); function postMyPost($status) { $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET,OAUTH_TOKEN,OAUTH_SECRET); $connection->format = 'xml'; $connection->post('statuses/update', array('status'=>$status)); } ?> 


рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛:



рдЗрдХрдЯреНрдареЗ рдЖрдЗрдЯрдо:



рдХрдиреЗрдХреНрд╢рди:



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
SSH рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд╛рдЙрдЯрд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБ:
 root@OpenWrt:~# php-cgi /www/twitter/run.php X-Powered-By: PHP/5.4.11 Content-type: text/html root@OpenWrt:~# 

рдпрд╣ рдкреГрд╖реНрдарднреВрдорд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрдВрд╕реЛрд▓ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рдо рдХрд░реЗрдЧреАред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдИрдбреА рдХреЛ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрд╕реЗ рдорд╛рд░рдирд╛ рд╣реЛрдЧрд╛:
 root@OpenWrt:~# ps | grep run.php 1665 root 10436 S php-cgi /www/twitter/run.php 1670 root 1492 S grep run.php root@OpenWrt:~# kill 1665 


рдЖрдк рдпрд╣рд╛рдВ рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: twitter.com/kruz_ivan

рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ:
1) рдХреИрдорд░реЗ рдХреЛ рд╕реНрдХреНрд░реВ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдк рд╕реНрд╡рдпрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдПрдХ рдлреЛрдЯреЛ рднреА рджреЗрдЦ рд╕рдХреЗрдВред
2) рдЧрдВрдз рд╕рдВрдЪрд░рдг рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдкрд╣рд▓реЗ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реВрдВрдЧрд╛ред
3) рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рд╕рдорд╛рди рдЙрдкрдХрд░рдг рдмрдирд╛рдирд╛ рдЬреЛ рдЖрдкрдХреЛ рдЯреНрд╡реАрдЯ рдХрд░реЗрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реЗрдлреНрд░рд┐рдЬрд░реЗрдЯрд░ рдЦреЛрд▓реЗрдВ рдпрд╛ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдарддреЗ рд╣реИрдВ рддреЛ рдПрдХ рддрд╕реНрд╡реАрд░ рдХреЛ рдЗрдВрд╕реНрдЯрд╛рдЧреНрд░рд╛рдо рдХрд░реЗрдВред

Source: https://habr.com/ru/post/In181852/


All Articles