AvaloniaUI рдХрд╕реНрдЯрдо рдореИрд╕реЗрдЬрдмреЙрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ

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



рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдХреМрди рд╣реИ?


рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕рднреА рд╡рд░реНрддрдорд╛рди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ, рдпрд╣ wpf рдХреЗ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдХрд░реАрдм рд╣реИ: рд╕рдорд╛рди xaml, рд╕рдорд╛рди рдмрдВрдзрдиред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ wpf рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднреА рд╣реИред

Avaloniya рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рднреА рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдпрд╣ рдЕрдкрдиреЗ рдореВрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ: Win32, MonoMac, X11 ...

рдЕрджреНрдпрддрди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреНрдпрд╛ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛
  1. 13 рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджреЗрд╢ рдЖрдЗрдХрди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред
  2. Cntrl + C рдХреБрдВрдЬреА рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрджреЗрд╢ рдмреЙрдбреА рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред
  3. рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рд╡рд┐рдВрдбреЛ рдХрд╛ рдЖрдХрд╛рд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВред
  4. рдПрдХ рд╕рд░рд▓реАрдХреГрдд рд╢реИрд▓реА рдкреНрд░рдгрд╛рд▓реА рдЬреЛ рдХрд┐рд╕реА рдХреЛ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рдирдП рд▓реЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рд╕рдорд░реНрдерди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
  5. TextBlock рдХреЛ TextBox рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдкрд░, рдЕрдм рд╡рд┐рдВрдбреЛ рдХреЗ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  6. рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдбреЙрдХреНрдпреБрдореЗрдВрдЯреЗрд╢рди gitlab рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреИрдХреЗрдЬ рдХреЛ рдЦреБрдж рдирдЧреЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЪрд▓реЛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ


рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЕрдЧрд░ рддреБрд▓рдирд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдбрдмреНрд▓реНрдпреВрдкреАрдПрдл рд╕реЗ рдХреА рдЬрд╛рдПрдЧреАред

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

<Button Command = "{Binding RunTheThing}" CommandParameter = "Hello World"> Do the thing! </ Button> 

  public void RunTheThing (string parameter) { // Code for executing the command here. } 

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

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

рдкреНрд░рддрд┐рдорд╛ рд╕реЗ рдмрд╛рдВрдзрдирд╛


рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рд▓рдЧрднрдЧ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдереА, рд╡рд╣ рдереА рдХрд┐ рдореИрдВ рдЕрдкрдиреА рдЦрд┐рдбрд╝рдХреА рдкрд░ рдЪрд┐рддреНрд░ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВрдВред

рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдХреЗ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЖрдЗрдХрди рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреВрд░реЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреИрдХ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
  <ItemGroup> ... <AvaloniaResource Include = "Assets \ *" /> </ ItemGroup> 

рдЕрдм рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЪрдпрдирд┐рдд рдЫрд╡рд┐ рдХреЛ рдЫрд╡рд┐ рдЯреИрдЧ рдореЗрдВ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  <Image Source = "/ Assets / error.ico" /> 


рд▓реЗрдХрд┐рди рдЬрдм рд╡реАрдПрдо рд╕реНрд░реЛрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдмрд┐рдЯрдореИрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

  <Image Source = "{Binding ImagePath}" /> 

  public Bitmap ImagePath {get; private set; } 


рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдЕрдм рд╣рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╕реЗ рдЕрдкрдиреА рдЫрд╡рд┐ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рд▓реЛрдХреЗрдЯрд░ рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

  ImagePath = new Bitmap (AvaloniaLocator.Current.GetService <IAssetLoader> () .Open (new Uri ($ "avares: // ASSEMBLYNAME / relative / project / path / {ImageName} .ico"))); 

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрд░реА рдХрд╛ рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп рдПрдореНрдмреЗрдбреЗрдб рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдЙрдкрд╕рд░реНрдЧ resm: // рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП - avares: // ред

рдбреНрд░рд╛рдЗрдВрдЧ


рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдФрд░ wpf рдореЗрдВ рдЖрдВрдХрдбрд╝реЗ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреБрдг рднрд┐рдиреНрди рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, svg рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ ms xaml рдореЗрдВ inskape рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЗрдВ рддреБрд░рдВрдд рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрд╛ред

рдордирдорд╛рдирд╛ рдЖрдХрд╛рд░

  <PathGeometry Figures = "M30 53 C15.641 53 4 41.359 4 27S15.641 1 30 1s26 11.641 26 26c0 7.135-2.874 13.599-7.528 18.297" FillRule = "NonZero" /> 

рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ

  <GeometryDrawing Brush = "# FF50C8EF" Geometry = "M30 53 C15.641 53 4 41.359 4 27S15.641 1 30 1s26 11.641 26 26c0 7.135-2.874 13.599-7.528 18.297" /> 

рдПрдХ рдкрдВрдХреНрддрд┐

  <Line X1 = "25" Y1 = "37" X2 = "25" Y2 = "39" StrokeThickness = "2" Stroke = "# FFFFFFFF" StrokeMiterLimit = "10" StrokeStartLineCap = "Round" StrokeEndLineCap = "Round" /> 

рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ

  <Line StartPoint = "25.37" EndPoint = "25,39" StrokeThickness = "2" Stroke = "# FFFFFFFF" StrokeStartLineCap = "Round" StrokeEndLineCap = "Round" /> 

рд╢реИрд▓рд┐рдпрд╛рдБ


рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпреЗ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдорд┐рд╢реНрд░рдг рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рд╢реИрд▓реА рд╣реИрдВред

рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рд╕реНрдЯрд╛рдЗрд▓ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рднреА xaml рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рд┐рдорд╕реНрдЦрд▓рди рд╕рдВрд╕рд╛рдзрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

  <ItemGroup> <AvaloniaResource Include = "** \ *. Xaml"> <SubType> Designer </ SubType> </ AvaloniaResource> ..... </ ItemGroup> 

рджреВрд╕рд░реЗ, рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдпреВрд░реА рдФрд░ рд▓реЛрдХреЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЫрд╡рд┐ рд╕рдВрд╕рд╛рдзрдиред

  YourControl.Styles.Add (new StyleInclude (new Uri ("avares: //ASSEMBLYNAME/relative/project/path.xaml")) {Source = new Uri ("avares: // ASSEMBLYNAME / relative / project / path.xaml ")}); 

рдЕрдЪреНрдЫреА рдЫреЛрдЯреА рдЪреАрдЬреЗрдВред


рдЯреЗрдХреНрд╕реНрдЯрдмреЙрдХреНрд╕ рдореЗрдВ рд╡реЙрдЯрд░рдорд╛рд░реНрдХ рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реИ

рдпрд╣ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреИрдХреЗрдЬреЛрдВ рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯрдмреЙрдХреНрд╕ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЯреЗрдХреНрд╕реНрдЯрдмреНрд▓реЙрдХ рдХреЛ рдмрд╛рдбрд╝ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ wpf рдХреЗ рд▓рд┐рдП рдХрдИ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  <TextBox Watermark = "Street address" /> 

рд╕рд╛рде рд╣реА, рд╕рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдЕрджреНрдпрддрди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PropertyChanged рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ


рдореИрдВ рдЗрд╕ рджрд┐рд▓рдЪрд╕реНрдк рдврд╛рдВрдЪреЗ рдХреЛ рдЖрдЬрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж Artyom Gorchakov рдФрд░ рдирд┐рдХрд┐рддрд╛ рддреНрд╕реБрдХрд╛рдиреЛрд╡ ред

рдФрд░ рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рд┐рдорд╕реНрдЦрд▓рди рдореЗрдВ рдЬрд┐рдЯрд░ рдореЗрдВ рдПрдХ рдЖрд░рд╛рдорджрд╛рдпрдХ рдФрд░ рдЕрджреНрднреБрдд рд╕рдорд░реНрдерди рд╣реИред

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


All Articles