рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдХрд╣рд╛рдиреА рдЗрд╕ рддрдереНрдп рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдХрд┐ рдЖрдзреЗ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдПрдХ рдпрд╛рдорд╛рд╣рд╛ рдП-рдПрд╕ 501 рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдЦрд░реАрджрд╛ рдерд╛ред

рд╢рд╛рдорд┐рд▓ рдПрдХ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдерд╛ рдЬреЛ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдФрд░ рдпрд╛рдорд╛рд╣рд╛ рд╕реАрдбреА рдкреНрд▓реЗрдпрд░ рджреЛрдиреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдЬреЛ рдХрд┐ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдореЗрд░реЗ рдкрд╛рд╕ рдирд╣реАрдВ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрдЯрди рдмрд╕ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗред рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрдВрд╕реЛрд▓ рд╕реНрд╡рдпрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рдерд╛, рдФрд░ рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рд╢реЗрд▓реНрдл рдкрд░ рд░рд╣рддрд╛ рдерд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХрд╛ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдкреНрд░реЗрддрд╡рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЛрдлреЗ рдкрд░ рдЭреВрда рдмреЛрд▓рдирд╛ рдФрд░ рдПрдХ рдлрд┐рд▓реНрдо рджреЗрдЦрдирд╛, рд╣рд╛рде рдХреЗ рдПрдХ рддреНрд╡рд░рд┐рдд рдЖрдВрджреЛрд▓рди рдХреЗ рд╕рд╛рде рдЙрд▓рдЯрдирд╛, рдЗрд╕реЗ рд░реЛрдХрдирд╛ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред рдмреЗрд╢рдХ, рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдиреЗ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдкрд░ рдПрдордкреАрд╕реА-рдПрдЪрд╕реА, рдлреЛрдмрд╛рд░ 2000 рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рддреЗрдЬ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЖрдВрдЦреЗрдВ рдбрд░рддреА рд╣реИрдВ, рдФрд░ рд╣рд╛рде рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреА рдкрд╕рдВрдж рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рдерд╛ред Arduino - рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЙрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╢рд╛рдирджрд╛рд░ рдореМрдХрд╛ рд╣реИред рдмрдЯрди рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП, Node.js, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реВрдВ, рдФрд░ рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЖрдЗрдП рдЬрд╛рдиреЗ ...
рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди
рдореМрдЬреВрджрд╛ рдПрдирд╛рд▓реЙрдЧреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рдлреНрд▓рд┐рд░реНрдХ ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рднреМрддрд┐рдХ рдХреАрдмреЛрд░реНрдб рдкрд░ рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЗрдиреНрдлреНрд░рд╛рд░реЗрдб рд░рд┐рд╕реАрд╡рд░ рдХреА рдХреАрдордд 100 zlotys () $ 28) рд╣реИред рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдЬрд┐рддрдирд╛ рдореБрдЭреЗ рдорд┐рд▓рд╛ рдЙрд╕рд╕реЗ рджреЛрдЧреБрдирд╛ рдорд╣рдВрдЧрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдФрд░ рднреА рдмреЗрд╣рддрд░ (рд╡рд┐рд╖рдпрдЧрдд) рдирд┐рдХрд▓рд╛ред
рдЦрд░реАрдж рднрд╛рдЧреЛрдВ





рдореБрдЭреЗ рдЬрд░реВрд░рдд рдереА:
- рджрд░рдЕрд╕рд▓, рдЦреБрдж Arduino Uno рдмреЛрд░реНрдбред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рдореВрд▓ рдмреЛрд░реНрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреЛрд▓рд┐рд╢ рдХреНрд▓реЛрди рд╣реИред рд╡рд┐рд╡рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ - рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореВрд▓ рдХреЗ рд╕рдорд╛рди рд╣реИред (27.90 z┼В)
- рдЕрд╡рд░рдХреНрдд рд░рд┐рд╕реАрд╡рд░ VS1838B HX1838 (рд╡реЛрд▓реНрдЯреЗрдЬ: 3.3-5 рд╡реА, рдЖрд╡реГрддреНрддрд┐: 38 kHz, рдХреЛрдг: 90 ┬░) (1.30 z┼В)
- рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмреЛрд░реНрдб + рддрд╛рд░ (13.90 z┼В)
- рд╕рдм рдХреБрдЫ рдорд┐рд▓рд╛рдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рд▓реА рдмреЛрд░реНрдб (2.10 z┼В)
- рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рдмреЛрд░реНрдб рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯрд░реНрд╕ (2,51 z┼В)
рдХреБрд▓: 47,71 z┼В (47 $ 14)
рд╕реЙрдлреНрдЯрд╡реЗрдпрд░
рдкреНрд░рд╕рд╡ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╕рдордп, рдореИрдВрдиреЗ рдПрдХ "рдбреНрд░рд╛рдЗрд╡рд░" рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдЕрд░рдбреВрдЗрдиреЛ рд╕реЗ рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдкрд░ рджрдмрд╛рдП рдЧрдП рдмрдЯрди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рд╡рд┐рдЪрд╛рд░ рд╕рдм рдХреБрдЫ рдФрд░ рд╕рдм рдХреБрдЫ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдерд╛ред рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдмрдЯрди рдХреЛ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
{ "key": "space" }
- рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдордирдорд╛рдирд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдирд╛:
{ "exec": ["c:\\Program Files (x86)\\foobar2000\\foobar2000.exe", "/play"] }
{ "if": { "running": "mpc-hc.exe" }, "then": [ ... ], "else": [ ... ] }
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрдирд╛ рд╣реИрдВрдбрд▓рд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реА рдПрдкреАрдЖрдИ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд▓реВрдк рдореЗрдВ рд╕рдм рдХреБрдЫ рдврд╣рдирд╛ рд╕рдВрднрд╡ рдерд╛ рдЬреЛ рдХреНрд░рдо рдореЗрдВ рд╕рднреА рд╣реИрдВрдбрд▓рд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред
const runHandlers = require('./handlers') module.exports = async function run(actions) { if (!Array.isArray(actions)) { actions = [actions] } for (const act of actions) { await runHandlers(act) } }
рдПрдХ рд╣рдЬрд╛рд░ рдкреНрд░рд▓реЗрдЦрди рд╢рдмреНрджреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рдкрд░реАрдХреНрд╖рдг рдЖрдкрдХреЛ рд╕рдм рдХреБрдЫ рдмрддрд╛рддреЗ рд╣реИрдВ:
run when "exec" action тИЪ executes the specified file without args (as array) (4ms) тИЪ executes the specified file without args (as string) (1ms) тИЪ executes the specified file with args тИЪ rejects if "exec" has wrong type (5ms) when "key" action тИЪ sends the specified key press if passed string (1ms) тИЪ sends the specified key combination if passed array тИЪ rejects if "key" has wrong type (1ms) when "if" action тИЪ rejects if no "then" (1ms) тИЪ rejects if operator is not supported when operator if "running" тИЪ runs "then" actions if the condition is true (1ms) тИЪ runs "else" actions if the condition is false тИЪ does not run anything if the condition is false and no "else" statement (1ms) when multiple actions тИЪ executes all actions (1ms) when multiple actions are mixed into one тИЪ runs only first one alphabetically
рдпрд╣ рдкреЛрд╖рд┐рдд рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИред
рд▓реЛрд╣рд╛
рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рдХреБрдЫ рднреА рдирдпрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рдореБрдЭрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╣реЛ рдЪреБрдХрд╛ рд╣реИред рдореИрдВрдиреЗ рдмрд╕ рдЖрд░реНрдЯрд┐рдХрд▓ рд╕реЗ рд░реЗрдбреАрдореЗрдб рдЖрд░реЗрдЦ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рдХреИрд╕реЗ рдЕрд░реБрдбрд┐рдиреЛ рдкрд░ рдПрдХ рдЖрдИрдЖрд░ рд░рд┐рдореЛрдЯ рдФрд░ рд░рд┐рд╕реАрд╡рд░ рд╕реЗрдЯ рдЕрдк рдХрд░реЗрдВ ред
рдпрд╣ рдпреЛрдЬрдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ:


рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
рдореИрдВрдиреЗ рд▓реЗрдЦ рд╕реЗ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ IRremote Arduino Library рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЗ рд╕рд╛рде рдмрдЯрди рдХреЛрдб рдмрджрд▓ рджрд┐рдП:
void loop() { if (irrecv.decode(&results)) { if (results.value == 0xFFFFFFFF) { results.value = key_value; } switch (results.value) { case 0x9E6140BF: Serial.println("play"); break; case 0x9E61AA55: Serial.println("pause"); break; case 0x5EA1A857: Serial.println("cd"); break; default: Serial.println(results.value, HEX); break; } key_value = results.value; irrecv.resume(); } }

рдЬреИрд╕реЗ рд╣реА рджрдмрд╛рдП рдЧрдП рдмрдЯрди рдХреЗ рдирд╛рдо Arduino IDE рдореЗрдВ рдкреЛрд░реНрдЯ рдореЙрдирд┐рдЯрд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдП, рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдХ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
рдкрд░рд┐рдгрд╛рдо рд╕реАрд░рд┐рдпрд▓рдкреЛрд░реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдПрдХ рдЖрд╡рд░рдг рдерд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреЛрд░реНрдЯ рд╕реЗ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо:
const SerialPort = require('serialport') module.exports = class SerialPortReader { constructor(port) { const serialPort = new SerialPort(port) this.lineStream = serialPort.pipe(new SerialPort.parsers.Readline()) } start(handler) { this.lineStream.on('readable', () => { const data = this.lineStream.read().trim() handler(data) }) } }
рдмрд╛рдж рдореЗрдВ, рд╣реИрдВрдбрд▓рд░ рдХреЛ "рдбрд┐рдмрдВрд╕" рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдХреНрдпреЛрдВрдХрд┐ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХреЛ рддреЗрдЬреА рд╕реЗ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдХреЗрдд рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдмрдЯрди рдкрд░ рдПрдХ рдЫреЛрдЯреЗ рдкреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде, рдХрдИ рдмрд╛рд░ рдмрдВрдж рд╣реЛрдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рднреА рдмрдЯрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕реЗ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╣рдЯрд╛рдирд╛ рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЙрд▓реНрдпреВрдо рдХреЗ рд▓рд┐рдПред
рдЕрдВрддрд┐рдо рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
const debounce = require('debounce') const settings = require('./lib/settings') const run = require('./lib/run') const SerialPortReader = require('./lib/SerialPortReader') const simpleHandle = async button => { const actions = settings.mappings[button] if (!actions) { console.warn(`Action not found for remote control button "${button}"`) return } try { await run(actions) } catch (e) { console.error(e.message) process.exit(1) } } const debouncedHandle = debounce(simpleHandle, settings.debounceDelay, true) const callHandleFn = button => { return (settings.noDebounce.includes(button) ? simpleHandle : debouncedHandle)(button) } const reader = new SerialPortReader(settings.serialPort) reader.start(callHandleFn)
рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдмреЛрд░реНрдб рдмрдирд╛рдирд╛
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдПрдХ рдмреЛрд░реНрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рд╛ред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдкрд╣рд▓рд╛ рдЕрдиреБрднрд╡ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕реБрдИ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрдпреБрдХреНрдд рдЯрд╛рдВрдХрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд▓реЛрд╣рд╛ рдирд╣реАрдВ рд╣реИ - рдПрдХ рддрдВрдЧ рддрд╛рд░ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдкреБрд░рд╛рдирд╛ рд╕реЛрд╡рд┐рдпрдд рдмрдбрд╝рд╛ред
рдЖрдзреЗ рдореЗрдВ рджреБ: рдЦ рдХреЗ рд╕рд╛рде, рдореИрдВ "рдкреИрд░" рдХреЛ рдорд┐рд▓рд╛рдк рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ (8 рдкрд┐рдиреЛрдВ рдХреЗ рджреЛ рдмрдбрд╝реЗ рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдореЗрдВ, рдХреЗрд╡рд▓ 2 рдкрд┐рди рдмрдЪ рдЧрдП)ред рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЖрд╕рд╛рди рдерд╛ред

(рдХреБрдЯрд┐рд▓ред рдЕрд░реБрдбрд┐рдиреЛ рдХреНрд▓реЛрди рдХреЗ рдХрд╛рд░рдг рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдШреЛрдВрд╕рд▓реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЕрд╕рдорд╛рди рд╣реИрдВред)

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


рдирддреАрдЬрддрди:ред $ 14 рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ред рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрднрд╡ рдФрд░ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдХреА рдЦреБрд╢реА рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЕрдореВрд▓реНрдп рд╣реИрдВ! :-)
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдбреЗрдореЛ:
рдЧреАрдереВрдм рдореЗрдВ рд╕реВрддреНрд░ ред
рдкреБрдирд╢реНрдЪ рдзрдиреНрдпрд╡рд╛рдж ramanchik 'u рдкрд░рд╛рдорд░реНрд╢ рдХреЗ рд▓рд┐рдП :)