рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдХреНрдпреВрдЯреА рд╕рд┐рдЧреНрдирд▓ / рд╕реНрд▓реЙрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВрдиреЗ Qt (C ++) рд╕реЗ рдПрдВрдбреНрд░реЙрдЗрдб (рдЬрд╛рд╡рд╛) рддрдХ рдПрдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛, рдХрд╛рдо рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдореБрдЭреЗ рдЕрдХреНрд╕рд░ рдЧрддрд┐рд╢реАрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдкрд░реЗрд╢рд╛рдиреА рдпрд╣ рдереА рдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ Qt рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╕рдорд╛рди рд╣реИ рдФрд░ рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рднреА рдпрд╣реА рд╕реБрд╡рд┐рдзрд╛ рд╣реИред рдФрд░ рд╕реНрд▓реЙрдЯ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛ рдЬрд╛ рд╕рдХрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрд▓рд╛рдЗрдбрд░ (QSlider in Qt рдпрд╛ SeekBar in Android) рдХреЛ рд╕рдВрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдПрдХ рдФрд░ рд╕реНрд▓рд╛рдЗрдбрд░ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ рдЬреЛ рдкрд╣рд▓реЗ рдПрдХ рдХреЗ рдмрд╛рдж рдЖрдЬреНрдЮрд╛рдХрд╛рд░реА рд░реВрдк рд╕реЗ рдЖрдЧреЗ рдмрдврд╝реЗрдЧрд╛ред Qt рдореЗрдВ, рдПрдХ рд╕рдорд╛рди рдСрдкрд░реЗрд╢рди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:


рдЙрджрд╛рд╣рд░рдг 1

//   QSlider *primary = new QSlider(this); QSlider *secondary = new QSlider(this); //   ,  // ... //      connect(primary, SIGNAL(valueChanged(int)), secondary, SLOT(setValue(int))); 


рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХ рд╕реНрд▓рд╛рдЗрдбрд░ рдХреЗ рд╕реЗрдЯ рд╡реИрд▓реНрдпреВ рдЪреЗрдВрдЬреЗрдб () рдХрд╛ рдХрдиреЗрдХреНрд╢рди рдорд╛рдзреНрдпрдорд┐рдХ рд╕реНрд▓рд╛рдЗрдбрд░ рдХреЗ рд╕реЗрдЯрд╡реИрд▓реНрдпреВ () рд╕реНрд▓реЙрдЯ рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИред Android рдкрд░ рдПрдХ рд╣реА рдмрд╛рдд:

рдЙрджрд╛рд╣рд░рдг 2

 //   SeekBar firstBar = (SeekBar)findViewById(R.id.firstSeekBar); SeekBar secondBar = (SeekBar)findViewById(R.id.secondSeekBar); //  // ... //      firstBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override // ........ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { secondBar.setProgress(progress); } }); 


рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ рдПрдХ рд╣реА рдЪреАрдЬ рдорд┐рд▓рддреА рд╣реИ, рдЕрд░реНрдерд╛рддреН , рд╣рдо рдлрд░реНрд╕реНрдЯрдмрд╛рд░ рдФрд░ рд╕реЗрдХрдВрдбрдмрд╛рд░ рдХреЗ рдЖрдВрджреЛрд▓рди рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ ред
рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдлрд░реНрд╕реНрдЯрдмрд╛рд░ рдХреЗ рдмрд╛рдЙрд▓реНрд╕ рдореЗрдВ OnSeekBarChangeListener рдЯрд╛рдЗрдк рдХрд╛ рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдореВрд╡ рдХреА рдШрдЯрдирд╛ рдкрд░, рд╢реВрдиреНрдп рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд░ рдпрд╣ рдЕрдЪрд╛рдирдХ рдиреЙрди-рдЬреАрд░реЛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдРрд╕рд╛ рд╣реЛрдЧрд╛, рддреЛ рдЗрд╕рдХреЗ рдСрдирдкреНрд░реЛрдиреНрдЧрдЪреЗрдВрдЬреНрдб () рдореЗрдердб рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рджреВрд╕рд░реЗ рдирдВрдмрд░ рдкрд░ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдФрд░ рджреВрд╕рд░реЗ рд╕реНрд▓рд╛рдЗрдбрд░ рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░реЗрдВред
рд╕рдм рдХреБрдЫ рдмреЗрд╣рдж рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рд╣рдж рддрдХ рдмреЛрдЭрд┐рд▓ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпреВрдЯреА рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдордУрд╕реА (рдореЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдХреЗ рдЧрддрд┐рд╢реАрд▓ рд▓рд┐рдВрдХрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реА ++ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред рдЖрдкрдХреЛ рд▓реИрдХреЛрдирд┐рдЬрд╝реНрдо рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкреВрд░реНрд╡-рдЙрддреНрдкрдиреНрди рдХреЛрдб рдореЗрдВ рдкрд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрджрд┐ рдЖрдк рд╕рд░рд▓рддрдо рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрддреНрдпрдВрдд рджреБрд░реНрд▓рдн рд╣реИред
рд▓реЗрдХрд┐рди Android рдкрд░ рд╡рд╛рдкрд╕ред рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреАрдЖрдИ рдХреЗ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреА рд╕реБрд╡рд┐рдзрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрд╕реЗрдВрд╕рдзрд╛рд░рд┐рдпреЛрдВ рдХрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдПрдХ рдмрдбрд╝рд╛ рд╕рд░рдгреА рдХреЛрдб рд╣реИ рдЬреЛ рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ? Googling, рдореБрдЭреЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕рдВрдХреЗрддреЛрдВ рдФрд░ рд╕реНрд▓реЙрдЯреНрд╕ рдХреЗ рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд┐рд▓реЗ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдпреЛрдЧреНрдп, рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ, рдХреНрдпреВрдЯреА рдЬрдВрдмреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ, рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреНрдпреВрдЯреА рдХрд╛ рдПрдХ рдЧрд▓рдд рд░реВрдк рд╕реЗ рднреВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЗ рдореБрдЭреЗ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╕реВрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг, рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореВрд▓ рдХреЗ рд╕рд╛рде рдмреЗрдореЗрд▓ рд╣реИ, рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рд╕реА ++ рдФрд░ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рддрдХрдиреАрдХ рдЗрддрдиреА рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИред
рдирддреАрдЬрддрди, рдЕрдкрдиреЗ рджрдо рдкрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ред

рдХрд╛рд░реНрдп


Android API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Qt C ++ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдХреНрдпрд╛ рд╣реБрдЖ?

рдХрдИ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмрд╛рдж, рдЬрд╛рд╡рд╛ рдХрдиреЗрдХреНрдЯрд░ рдХреНрд▓рд╛рд╕ рдХреЛ 600 рд╕реЗ рдХрдо рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдХрдИ рд╕реНрдерд┐рд░ рддрд░реАрдХреЗ рдФрд░ рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рдорд╛рдирдЪрд┐рддреНрд░ (рдореИрдк) рд╣реИ, рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реИред рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЪрд╛рд░ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╣реИ:

  1. рдмреВрд▓рд┐рдпрди рдХрдиреЗрдХреНрдЯ (рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрд╖рдХ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рд┐рдЧреНрдирд▓, рдСрдмреНрдЬреЗрдХреНрдЯ рд░рд┐рд╕реАрд╡рд░, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрд▓реЙрдЯ, рдХрдиреЗрдХреНрд╢рди рдЯрд╛рдЗрдк)
  2. рд╢реВрдиреНрдп рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ (рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрд╖рдХ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рд┐рдЧреНрдирд▓, рдСрдмреНрдЬреЗрдХреНрдЯ рд░рд┐рд╕реАрд╡рд░, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрд▓реЙрдЯ)
  3. рд╢реВрдиреНрдп рдЙрддреНрд╕рд░реНрдЬрди (рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрд╖рдХ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рд┐рдЧреНрдирд▓рдирд╛рдо, рдСрдмреНрдЬреЗрдХреНрдЯ ... рдкрд░рдо)
  4. рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрд╖рдХ ()


рдзрд╛рд╡рдХреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХрдиреЗрдХреНрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

рдЙрджрд╛рд╣рд░рдг 3

 //     Android API    private static class SeekBarChangeListener implements SeekBar.OnSeekBarChangeListener { private Object mSender = null; public SeekBarChangeListener(Object sender) { mSender = sender; } @Override // ........ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { Connector.emit(mSender, "progressChanged", progress); } } //   SeekBar firstBar = (SeekBar)findViewById(R.id.firstSeekBar); SeekBar secondBar = (SeekBar)findViewById(R.id.secondSeekBar); //  // ... //  firsBar   firstBar.setOnSeekBarChangeListener(new SeekBarChangeListener(firstBar)); //      Connector.connect(firstBar, "SIGNAL(progressChanged(int))" , secondBar, "SLOT(setProgress(int))"); 

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрдиреЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд▓рд╛рдЗрдЬрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдмреЛрдЭрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╕рднреА рдЕрдиреНрдп рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреАрдЖрдИ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рддрд░рд╣, рд╕реАрд╕рдмреЗрд░ рд╡рд░реНрдЧ рдХреЛ рд▓рд┐рд╕рдирд░ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рддреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд░реИрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдпрд╛ Android рдкрд░ Qt рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдХреЗ рдХрдиреЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
  1. Lysener рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
  2. рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
  3. рд▓рд┐рд╕рдирд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реЗрдЯрд░ рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ


рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг, рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдкрдврд╝реЗрдВред
(рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдП)

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


All Articles