Arduino рдФрд░ рд╡реАрдбрд┐рдпреЛ? рдЖрд╕рд╛рди


рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдПрдХ рдХрдордЬреЛрд░ Arduino рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдЦреБрдж рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИред
рдФрд░ рдЕрдЧрд░ рдЖрдк рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рджреВрд╕рд░реА рддрд░рдл рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?

... рдФрд░ рд╕рдордп рдореЗрдВ рд╢реВрдЯрд┐рдВрдЧ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрдврд╝рд╛рдПрдВред

рд╣реЗрд╣, рдХрдИ рд▓реЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рд▓рд┐рдП рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рдЪреБрдХреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рдЯрд╛рдЗрдорд▓реИрдкреНрд╕ (рдзреАрдореА рдЧрддрд┐ рд╡рд╛рд▓реА рдПрдХрд▓-рдлреНрд░реЗрдо рд╢реВрдЯрд┐рдВрдЧ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдпрд╣ рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╢реВрдЯрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рд╢реВрдЯрд┐рдВрдЧ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рд╡реАрдбрд┐рдпреЛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ, рд╢реБрд░реВ рдореЗрдВ рдореИрдВрдиреЗ рдзреАрдореА рдЧрддрд┐ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛рдИ рдереАред рдореИрдВ рд╕рд┐рд░реНрдл рдЕрдкрдиреЗ arduins рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдлрд╝реЛрдЯреЛ рднреА рд╢рд╛рдорд┐рд▓ рдереЗред рдЦреИрд░, рдлрд┐рд░ рдмрдВрдж рдФрд░ рдЪрд╛рд▓реВред рдпрджрд┐ рдореЗрд░рд╛ рдкрд╛рдардХ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд╣ рдХреЗрд╡рд▓ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ (рдХреНрд░реЛрдо рд╕реЗ рдиреАрдЪреЗ рдЬрд╛рдПрдВ)ред

рдореЗрд░реА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдХреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
  • Arduino рдореЗрдЧрд╛ рдмреЛрд░реНрдб
  • рдХреИрдорд░реЗ рдХрд╛ рдЬреЗрдкреАрдИрдЬреА рдореЙрдбреНрдпреВрд▓;
  • рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдФрд░ MongoDB рдбреЗрдЯрд╛рдмреЗрд╕;
  • HTML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдореЗрдЬрдмрд╛рдиреА рдХреЗ рд▓рд┐рдП WEB рд╕рд░реНрд╡рд░;


рдЬрдм arduina рдЕрдкрдирд╛ рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред
рдкреИрд░рд╛рдореАрдЯрд░ рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ - рдПрдХ рд░рд┐рдХреЙрд░реНрдб рднрдВрдбрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рджреЛ рдФрд░ рдмрд╛рд░ рднреЗрдЬреЗ рдЧрдП рдереЗ - рджреЛ рдФрд░ рд░рд┐рдХреЙрд░реНрдб рд╕рд╣реЗрдЬреЗ рдЧрдП рдереЗред

рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛рдо рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо (рдмрд╛рдж рдореЗрдВ рдордзреНрдпрд╕реНрде рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╕реНрдерд┐рд░ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, WEB рд╕рд░реНрд╡рд░ рд╕реНрд╡рдпрдВ рдХреЗрд╡рд▓ рд╕реНрдереИрддрд┐рдХ рд╕рд╛рдордЧреНрд░реА рджреЗрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╕рднреА рдЧреНрд░рд╛рд╣рдХ рд▓реЛрдХрдкреНрд░рд┐рдп MQTT рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рдорд╛рди рдордзреНрдпрд╕реНрде рдХреЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реВрдЪрдирд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред MQTT рд╕реЗ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдордзреНрдпрд╕реНрде рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рддрдереНрдп рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕реНрдХреАрдо рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдЕрдкрдиреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдИ:

рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рддрд╛ рд╣реИ:
var client = new MgtClient("localhost", "login", "password", onDebugLog);

рдХрд╛рд░реНрдп рддрд░реНрдХ:
  1. рдиреЗрдЯрд╡рд░реНрдХ рдкрддрд╛ рдЬрд┐рд╕ рдкрд░ рдордзреНрдпрд╕реНрде рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЖрдк рдХреЗрд╡рд▓ рдЖрдИрдкреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "127.0.0.1";
  2. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧрд┐рди;
  3. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб
  4. рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП;


рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ:
function onDebugLog(aStr) {
  //          
  console.log((new Date()).getTimeString() + ' ' + aStr + '\n'); 
}


рдЕрднреА рддрдХ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реБрдИ? рдЖрдЧреЗ рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред

рднрдВрдбрд╛рд░рдг рдЕрдиреБрд░реЛрдз рд╕рдВрд░рдЪрдирд╛:
var request = {
  name: " 1", //   
  placeId: 1, //                         
  beginTime: 1458108472000, //      1  1970 
  endTime: 1458194872000, //      1  1970  ( )
  limit: 10000 //   ,    (   )
};


рдЕрднреА рддрдХ рдЙрд▓рдЭрди рдореЗрдВ рдирд╣реАрдВ?

рдлрд┐рд░ рдпрд╣рд╛рдВ рдЕрдиреБрд░реЛрдз рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рд╣реИ:
var result = {
  times: [], //      (    1  1970 )
  values: [], //    
  position: 20, //         (   )
  status: "progress", //    ("progress", "abort", "done", "fail")
  progress: 91 //   ( )   
};


рд╣рд╛рдБ, рдХреНрдпрд╛ рдпрд╣ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ?

"рд╕реНрдерд┐рддрд┐" рдлрд╝реАрд▓реНрдб рдХреА рд╕реНрдерд┐рддрд┐:
  • "рд╣реЛ рдЧрдпрд╛" - рд╡рд╣ рд╕рдм рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рдЬреЛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдпрд╛ рддреЛ рдкреВрд░реЗ рд╕рдордп рд╕реАрдорд╛ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╛ рдХрд╛рдо рдХрд┐рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╕реАрдорд╛);
  • "рдкреНрд░рдЧрддрд┐" - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдВрддрд┐рдо рдЯреБрдХрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ, рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрднреА рддрдХ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИ;
  • "рдПрдмреЙрд░реНрдЯ" - рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдмрд╛рдзрд┐рдд рд╣реЛ рдЧрдпрд╛ рдерд╛ (рдХрд╛рдо рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреА рдХреБрд▓ рдорд╛рддреНрд░рд╛ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз), рдЖрдк рд▓рд╛рдкрддрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдПрдХ рдирдпрд╛ рдЕрдиреБрд░реЛрдз рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ;
  • "рд╡рд┐рдлрд▓" - рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ (рд╢рд╛рдпрдж рдЖрдЙрдЯрд▓реЗрдЯ рдореЗрдВ рдХреЛрдИ рдХрд░рдВрдЯ рдирд╣реАрдВ рд╣реИ?)


рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рд╣реИ? рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдирд╣реАрдВред

рдЕрдиреБрд░реЛрдзрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
  • рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╣реИ, рддреЛ рд╕рдВрдЦреНрдпрд╛рдПрдБ рдорд╛рдиреЛрдВ рдХреА рд╕рд░рдгреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреАред
  • рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рддреЛ рдорд╛рдиреЛрдВ рдХреА рд╕рд░рдгреА рдореЗрдВ рддрд╛рд░ рд╣реЛрдВрдЧреЗред
  • рдпрджрд┐ рдмреВрд▓рд┐рдпрди рд╣реИ, рддреЛ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд╕рд░рдгреА "рд╕рд╣реА" рдпрд╛ "рдЧрд▓рдд" рд╣реЛрдЧрд╛ред
  • рдпрджрд┐ рдпрд╣ рджреНрд╡рд┐рдЖрдзрд╛рд░реА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЬреЗрдкреАрдИрдЬреА рдЫрд╡рд┐) рд╣реИ, рддреЛ рдмрд╛рдЗрдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдореВрд▓реНрдпреЛрдВ рдХреА рд╕рд░рдгреА рдореЗрдВ рд╣реЛрдЧреАред
  • рдпрджрд┐ рдпрд╣ рдПрдХ рдШрдЯрдирд╛ рд╣реИ, рддреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рд╕реЗ рдЧрдард┐рдд рд░рд┐рдЯрд░реНрди рдРрд░реЗред

рдПрдХрд▓ рдИрд╡реЗрдВрдЯ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
var event = [
  "  ", //   
  "", //   1
  27.5, //   1
  "", //   2
  true, //   2
  ...
  "", //   
  1458108472000 // !!!       ,
                //        .
];

рдЕрд░реНрдерд╛рддреН, рдкреНрд░рддреНрдпреЗрдХ рдИрд╡реЗрдВрдЯ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдПрдХ рдордирдорд╛рдирд╛ рд╕реЗрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рдордЧреНрд░ рдЪрд┐рддреНрд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рд╕рдореВрд╣рди рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдЙрдлрд╝, рд╕рдмрд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рд╣рд┐рд╕реНрд╕рд╛ рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдФрд░ рдЗрд╕рд▓рд┐рдП рдЦреБрдж рднреЗрдЬрдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рджрд┐рдЦрддрд╛ рд╣реИ:
// aRequest -  
// onReadArchive -     /
client.readArchive(aRequest, onReadArchive);                                                           


рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд▓рдЯрд╛ рдХрд╛рд░реНрдп рдХрд░реЗрдВ:
// aResult -  
onReadArchive(aResult) {
  // TODO       

  //   "false",     (    )
  //   "true",      (    ) 
  return false; 
}


рдЕрдВрдд рдореЗрдВ, рд╣рдо рд╕реНрд╡рдпрдВ рд╡реАрдбрд┐рдпреЛ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЖрдПред

рд╡реАрдбрд┐рдпреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ Whammy рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдпрд╣рд╛рдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдгред

рд╡реАрдбрд┐рдпреЛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди:

<script src="whammy.js"></script>
<canvas id="canvas" style="display:none"></canvas>
<video id="player" controls autoplay loop></video>

function createVideo() {
  var canvas = document.getElementById("canvas");
  var context = canvas.getContext("2d");
  canvas.width = '640'; //     
  canvas.height = '480'; //     
  var framerate = 10; //     
  var quality = 0.8; //    

  var video = new Whammy.Video(framerate, quality); //       WebM
 
  for (var i = 0; i < images.length; i++) { //    
    var image = images[i];
    context.globalAlpha = 1;
    context.drawImage(image, 0, 0, 640, 480); //     
    video.add(context); //   
  }

  var output = video.compile(); //    
  var url = URL.createObjectURL(output); //    

  document.getElementById('player').src = url; //    
}


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдк рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╡реЗрдмрдкреА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдпрджреНрдпрдкрд┐ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдорд┐рд▓рд╛, рдпрд╣ рдЗрддрдиреА рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реБрдЖ (рдФрд░ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдлреНрд░реЗрдо рдереЗ) рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреНрд░реЛрдо рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ, рдпрд╣ рдмрд╛рдд рдХрд╛рдо рдХрд░реЗрдЧреАред

рдпрд╣рд╛рдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ред

рдкреВрд░реНрдг рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдмрд┐рдирд╛, рдореИрдВ рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдЕрдиреБрдЪреНрдЫреЗрдж 1
рдЕрдиреБрдЪреНрдЫреЗрдж 2

рдЦреИрд░, рдпрд╣ рд╕рдм, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред

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


All Articles