рдУрдкрди STF рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ Android рдбрд┐рд╡рд╛рдЗрд╕ рдлрд╝рд╛рд░реНрдо рдмрдирд╛рдирд╛

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

рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдореЛрдмрд╛рдЗрд▓ рдХреНрд▓рд╛рдЙрдб рдлрд╝рд╛рд░реНрдо :

рд╕реИрдорд╕рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕: рд░рд┐рдореЛрдЯ рдЯреЗрд╕реНрдЯ рд▓реИрдм
рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм
BrowserStack
рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдлрд╛рд░реНрдо
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗрдВрджреНрд░
рд╕реЙрд╕ рд▓реИрдм

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

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

Ubuntu 18.04 рдкрд░ рд╕реНрдерд╛рдкрдирд╛:


рдЕрджреНрдпрддрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

sudo apt-get update 

OpenSTF (Node.js, NPM, GraphicsMagick, ZeroMQ, Protocol Buffers, yasm, pkg-config, adb) рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред

 sudo apt-get install nodejs npm graphicsmagick libzmq3-dev protobuf-compiler libprotobuf-dev yasm pkg-config android-tools-adb 

рдбреЗрдмрд┐рдЯ рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ RethinkDB (apt рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Ubuntu 18.04 рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ):

 wget https://github.com/srh/rethinkdb/releases/download/v2.3.6.srh.1/rethinkdb_2.3.6.srh.1.0bionic_amd64.deb sudo dpkg -i rethinkdb_2.3.6.srh.1.0bionic_amd64.deb 

OpenSTF рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 npm install -g stf 

рдпрджрд┐ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ рдХрд┐ npm / usr / local / lib рдпрд╛ usr / local / bin рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ:

 sudo chown -R $USER /usr/local/lib sudo chown -R $USER /usr/local/bin 

рдФрд░ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ

 npm install -g stf 

MacOS X рдкрд░ рд╕реНрдерд╛рдкрдирд╛:


рд╣реЛрдордмреНрд░реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 

рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:

 brew install node rethinkdb graphicsmagick zeromq protobuf yasm pkg-config homebrew/cask/android-platform-tools 

рдпрджрд┐ рдкреНрд░реЛрдЯреЙрдлрд╝ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ:

 Error: An unexpected error occurred during the `brew link` step The formula built, but is not symlinked into /usr/local Permission denied @ dir_s_mkdir - /usr/local/Frameworks Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks 

рдлрд┐рд░ рдЖрдкрдХреЛ / usr / рд▓реЛрдХрд▓ / рдлреНрд░реЗрдорд╡рд░реНрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 sudo mkdir /usr/local/Frameworks sudo chown $USER /usr/local/Frameworks 

OpenSTF рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 npm install -g stf 

Windows рд╕реНрдерд╛рдкрдирд╛:


Cygwin рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред

рд▓рд╛рдВрдЪ


OpenSTF рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ RethinkDB рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред

 rethinkdb 

рдЗрд╕рдХреЗ рдмрд╛рдж рд╣реА рдУрдкрдирд╕реНрдЯрд╛рдл рдЪрд▓рд╛рдПрдВ

 stf local --public-ip <ip- > 

рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рдбрд┐рд╡рд╛рдЗрд╕:


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, OpenSTF рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдФрд░ рдорд╢реАрди рдХреЛ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рд░рд┐рдмреВрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдЙрдмрдВрдЯреВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ:

рдпрджрд┐ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдУрдкрдирд╕реНрдЯрд╛рдл рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрджреЗрд╢ рдУрдкрдирд╕реНрдЯрд╛рдл рд▓реЙрдЧ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ:

 Unhandled rejection Error: Illegal value for Message.Field .DeviceIntroductionMessage.status of type enum: undefined (not a valid enum value) 

рдФрд░ adb devices рдХрдорд╛рдВрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреА рд╣реИ:

 List of devices attached ??????? no permissions (verify udev rules); see [http://developer.android.com/tools/device.html] 

рдЖрдкрдХреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рднрд╛рдЧреЛ

 lsusb 

рдФрд░ рдРрд╕рд╛ рдЙрдкрдХрд░рдг рдЦреЛрдЬреЗрдВ рдЬреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рди рдХрд░ рд╕рдХреЗред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

 Bus 001 Device 010: ID 2e04:c026 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub 

USB рдбрд┐рд╡рд╛рдЗрд╕ ID рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ - рдирд┐рд░реНрдорд╛рддрд╛ ID (ID рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ ':', 2e04, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ) рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдореЙрдбрд▓ ID (c026)ред

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЙрди рдХрдорд╛рдВрдбреНрд╕ рдХреЛ рдЪрд▓рд╛рдПрдВ рдЬрд╣рд╛рдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкрд╛рдИ рдЧрдИ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЖрдИрдбреА рдХреЗ рдЕрдиреБрд╕рд╛рд░ ATTR {idVendor} рдФрд░ ATTR {idProduct} рдкреИрд░рд╛рдореАрдЯрд░ рднрд░реЗ рдЧрдП рд╣реИрдВ:

 echo 'ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="2e04", ATTR{idProduct}=="c026", MODE="0666"' | sudo tee /etc/udev/rules.d/99-android.rules sudo udevadm control --reload-rules sudo udevadm trigger --verbose --action=add --subsystem-match=usb 

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

рдЦреЗрдд рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рд▓рдЧрд╛рддрд╛рд░ рдЪрд╛рд░реНрдЬ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдмреИрдЯрд░реА рдЬреАрд╡рди 2-3 рд╕рд╛рд▓ рддрдХ рд╕реАрдорд┐рдд рд░рд╣реЗрдЧреА, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдмреИрдЯрд░реА рд╣рдЯрд╛рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдЗрд╕реЗ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЦрд░реАрджрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЙрдкрдХрд░рдгреЛрдВ рдкрд░, рдЖрдк рдЙрд╕ рдореЛрдб рдХреЛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╕реНрдХреНрд░реАрди рд▓рдЧрд╛рддрд╛рд░ рдЪрд╛рд░реНрдЬ рдХрд░рдиреЗ рдкрд░ рд╣реЛрддреА рд╣реИ (рдмрд╕ рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ 30 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рд╕реНрдХреНрд░реАрди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧ рдЫреЛрдбрд╝ рджреЗрдВ), рдХреНрдпреЛрдВрдХрд┐ OpenSTF рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдЪрд╛рд▓реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдЗрд╕рд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЬреАрд╡рди рдмрдврд╝ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдХрд╣рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдУрдкрдирд╕реНрдЯрд╛рдл рдХреЛ рд╡реАрдкреАрдПрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдмрд╛рд╣рд░ рд╕реЗ рд╕реБрд▓рдн рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдирд╣реАрдВ рд╣реИред

рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ


OpenSTF рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:



OpenSTF рдореЗрдВ Google Play рдРрдк рд▓реЙрдиреНрдЪ рдХрд░рдирд╛



рдУрдкрдирдПрд╕рдЯреАрдПрдл рдореЗрдВ рдЬреБрдбрд╝реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА



OpenSTF рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛



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

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


All Articles