Moira рдХреЛрдб 2019 рдХреЗ Google рд╕рдорд░ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддрд╛ рд╣реИ

рдЗрд╕ рд╡рд░реНрд╖ рдкрдВрджреНрд░рд╣рд╡реАрдВ Google рд╕рдорд░ рдСрдлрд╝ рдХреЛрдб рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ 206 рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрд╕рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВрдЧреЗред рдпрд╣ рд╡рд░реНрд╖ рдореЛрдЗрд░рд╛ рд╕рд╣рд┐рдд 27 рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╣рдорд╛рд░реА рдкрд╕рдВрджреАрджрд╛ рдЖрдХрд╕реНрдорд┐рдХ рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдЬреЛ рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИред



рдореИрдВ Moira рдХреЛ GSoC рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╢рд╛рдорд┐рд▓ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЕрдм рдореИрдВ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдпрд╣ рдЫреЛрдЯрд╛ рдХрджрдо рдФрд░ рдореЛрдЗрд░рд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝реА рдЫрд▓рд╛рдВрдЧ рдХреИрд╕реЗ рд╣реБрдИред


Google рд╕рдорд░ рдСрдлрд╝ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж


рд╣рд░ рд╕рд╛рд▓, рдЬреАрдПрд╕рдУрд╕реА рдореЗрдВ рджреБрдирд┐рдпрд╛ рднрд░ рдХреЗ рд▓рдЧрднрдЧ рдПрдХ рд╣рдЬрд╛рд░ рдЫрд╛рддреНрд░ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓, 1,072 рдЫрд╛рддреНрд░ рдереЗ, рд╡реЗ 59 рджреЗрд╢реЛрдВ рд╕реЗ рдереЗ рдФрд░ 212 рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ред Google рдЫрд╛рддреНрд░реЛрдВ рдХреА рднрд╛рдЧреАрджрд╛рд░реА рдХреЛ рдкреНрд░рд╛рдпреЛрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЫрд╛рддреНрд░рд╡реГрддреНрддрд┐ рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдХреНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдХрдИ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдФрджреНрдпреЛрдЧрд┐рдХ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдиреБрднрд╡ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдореЗрдВ рдПрдХ рд╢рд╛рдВрдд рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдореМрдХрд╛ рд╣реИред


рдЗрд╕ рд╡рд░реНрд╖ рдЬреАрдПрд╕рдУрд╕реА рдореЗрдВ рдХреМрди рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рднрд╛рдЧ рд▓реЗ рд░рд╣реА рд╣реИрдВ ? рдмрдбрд╝реЗ рд╕рдВрдЧрдардиреЛрдВ (рдЕрдкрд╛рдЪреЗ, рд▓рд┐рдирдХреНрд╕, рд╡рд┐рдХрд┐рдореАрдбрд┐рдпрд╛) рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рдмрдбрд╝реЗ рд╕рдореВрд╣реЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


  • рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо (рдбреЗрдмрд┐рдпрди, рдлреЗрдбреЛрд░рд╛, рдлреНрд░реАрдмреАрдПрд╕рдбреА)
  • рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ (рд╣рд╛рд╕реНрдХреЗрд▓, рдкрд╛рдпрдерди, рд╕реНрд╡рд┐рдлреНрдЯ)
  • рдкреБрд╕реНрддрдХрд╛рд▓рдп (рдмреВрд╕реНрдЯ C ++, OpenCV, TensorFlow)
  • рд╕рдВрдХрд▓рдХ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдгрд╛рд▓реА (GCC, LLVM, рд╡реЗрдмрдкреИрдХ)
  • рд╕реНрд░реЛрдд рдХреЛрдб рдЙрдкрдХрд░рдг (Git, рдЬреЗрдирдХреАрдВрд╕, рдирд┐рдпреЛрд╡рд┐рдо)
  • DevOps рдЯреВрд▓ (рдХрдкрд┐рдЯрди, рд▓рд┐рдВрдХрд░рдб, рдореЛрдЗрд░рд╛)
  • рдбреЗрдЯрд╛рдмреЗрд╕ (MariaDB, PostgreSQL)


рдЕрдм рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдБ рдХрд┐ рдореЛрдЗрд░рд╛ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдИ рджреАред


рддреИрдпрд╛рд░ рд╣реЛрдирд╛ рдФрд░ рдПрдХ рдЖрд╡реЗрджрди рдЬрдорд╛ рдХрд░рдирд╛


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


рдпрд╣ рд╕рдм рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рдмрд┐рдирд╛ рд╢реБрд░реВ рд╣реБрдЖред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рдЬреАрдПрд╕рдУрд╕реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреЗрдЬ рдХреЛ рднрд░рд╛, рдореЛрдЗрд░рд╛ рдФрд░ рдЙрд╕рдХреА рддрд╛рдХрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреАред


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



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


рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рд▓рдбрд╝рдирд╛


рддрдм рддреАрди рд╕рдкреНрддрд╛рд╣ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдереА, рдЦреБрд╢реА рдХреЗ рдкрддреНрд░ рд╕реЗ рдереЛрдбрд╝реА рд╕реА рдЦреБрд╢реА ...



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



рдЧрд┐рддреБрдм рдкрд░ "рдкрд╣рд▓реЗ рдЕрдЪреНрдЫреЗ рдореБрджреНрджреЗ" рд╣реЙрдЯ рдХреЗрдХ рдХреА рддрд░рд╣ рдЙрдбрд╝ рдЧрдПред рдореБрдЭреЗ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдирд╛ рдерд╛ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдирд╣реАрдВ рдерд╛: рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдореБрджрд╛рдп рдХреЗ рдирдП рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рдЕрдзреНрдпрдпрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдмрдВрдбрд▓ рд▓реЗрдХрд░ рдЖрдирд╛ред



рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдЗрд╕рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рдФрд░ рдЗрд╕реЗ рд▓реЗрдХрд░ рдЦреБрд╢ рд╣реИрдВред


рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛


рдЕрдЧрд▓реЗ рд╕реЛрдорд╡рд╛рд░, 25 рдорд╛рд░реНрдЪ рдХреЛ, Google рд╕рдорд░ рдСрдлрд╝ рдХреЛрдб рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЫрд╛рддреНрд░реЛрдВ рд╕реЗ рдЖрд╡реЗрджрди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧреАред Moira, Haskell, TensorFlow рдпрд╛ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рджреЛ рд╕реМ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЧреНрд░реАрд╖реНрдордХрд╛рд▓реАрди рднрд╛рдЧреАрджрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЗ рдкрд╛рд╕ рджреЛ рд╕рдкреНрддрд╛рд╣ рдХрд╛ рд╕рдордп рд╣реЛрдЧрд╛ред рд╣рдорд╕реЗ рдЬреБрдбрд╝реЗрдВ рдФрд░ рдЪрд▓реЛ рдЗрд╕ рдЧрд░реНрдореА рдореЗрдВ рд╕реНрд░реЛрдд рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рдпреЛрдЧрджрд╛рди рджреЗрдВред


рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:



рдФрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП Habr├й рдФрд░ рд╣рдорд╛рд░реЗ рдЪреИрдирд▓ рдкрд░ рдХрдВрдЯреВрд░ рдмреНрд▓реЙрдЧ рдХреА рд╕рджрд╕реНрдпрддрд╛ рднреА рд▓реЗрдВред рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рд╣рдо GSoC рдореЗрдВ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

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


All Articles