SlideShare ist ein Scribd-Unternehmen logo
1 von 86
Защо Ruby и Rails ?




Радослав Станков
Ruby on Rails семинар – Варненски свободен университет 2010
Кой съм аз?

@rstankov




http://rstankov.com
http://blog.rstankov.com
http://github.com/rstankov
Ruby

Ruby е интерактивен,
обектно-ориентиран език за
програмиране.
Неготово мото е:
“Optimized for programmer happiness”
Ruby on Rails

   Ruby on Rails е framework
   за уеб приложения.
   Неготово мото е:
   “Web development doesn’t hurt”
Ruby

 Създаден от японеца Юкихиро
 Мацумото „Мац“.
 Първата публична версия излиза
 през 1995.
 Версия 2.0 се очакава да излезе за
 Коледа / не се казва коя /
private $_products = null;
public function getProducts($categoryId){
  if ($this->_products === null){
    $this->_products = Product::where(array(
      'category_id' => $categoryId
    ));
  }
  return $this->products;
}
def products(category_id)
  @products ||= Product.where({ :category_id => category_id })
end
def products(category_id)
  @products ||= Product.where({ :category_id => category_id })
end
def products(category_id)
  @products ||= Product.where({ :category_id => category_id })
end
def products(category_id)
  @products ||= Product.where({ :category_id => category_id })
end
def products(category_id)
  @products ||= Product.where({ :category_id => category_id })
end
def products(category_id)
  @products ||= Product.where({ :category_id => category_id })
end
def products(category_id)
  @products ||= Product.where( :category_id => category_id )
end
def products(category_id)
  @products ||= Product.where :category_id => category_id
end
5.times { puts "Ruby is cool!" }

5.times do
  puts "Ruby is cool!"
end
File.open("some_file.txt") do |file|
  file << "content"
end
[1,2,3,4].each { |value| puts value }

# => [1, 2, 3, 4]

[1,2,3,4].map { |value| value * value }

# => [1, 4, 9, 16]

[1,2,3,4].reduce { |a, b| a + b }

# => 10
def operate(value)
  yield value
end

value = operate(5) { |v| v + 4 }
puts value # 9
class Person
  attr_accessor :fist_name, :last_name

  def initialize(first_name, last_name)
    @first_name = first_name
    @last_name = last_name
  end

  def full_name
    "#{first_name} + #{last_name}"
  end
end

me = Person.new("Radoslav", "Stankov")
puts me.full_name # Radoslav Stankov
class Person
  attr_accessor :fist_name, :last_name

  def initialize(first_name, last_name)
    @first_name = first_name
    @last_name = last_name
  end

  def full_name
    first_name + " " + last_name
  end
end

me = Person.new("Radoslav", "Stankov")
puts me.full_name # Radoslav Stankov
class Person
  attr_accessor :fist_name, :last_name

  def initialize(first_name, last_name)
    @first_name = first_name
    @last_name = last_name
  end

  def full_name
    first_name + " " + last_name
  end
end

me = Person.new("Radoslav", "Stankov")
puts me.full_name # Radoslav Stankov
class Person
  attr_accessor :fist_name, :last_name

  def initialize(first_name, last_name)
    @first_name = first_name
    @last_name = last_name
  end

  def full_name
    first_name + " " + last_name
  end
end

me = Person.new("Radoslav", "Stankov")
puts me.full_name # Radoslav Stankov
class Person
  attr_accessor :fist_name, :last_name

  def initialize(first_name, last_name)
    @first_name = first_name
    @last_name = last_name
  end

  def full_name
    first_name + " " + last_name
  end
end

me = Person.new("Radoslav", "Stankov")
puts me.full_name # Radoslav Stankov
class Person
  def +(other_person)
    # ...
  end
end

person1 + person2
class Array
  def first
    self[0]
  end

  def second
    self[1]
  end
end

array = [1, 2, 3, 4]
array.first   # 1
array.second # 2
class Numeric
  def plus(x)
    self + x
  end
end

y = 5.plus(6)
Time.now - 2.days == 2.days.ago

1.month.ago + 45.days - 1.year
Ruby
•   димично определяне на типа данните
•   модули
•   отворени класове
•   блокове
•   анонимни функции
•   всяка операция връща резултат
•   всичко е изпълним код
•   изчистен синтаксис
•   мета програмиране
•   промяна на обектите по време на изпълнение
•   вградени регулярни изрази
Ruby on Rails
          Разработен от David
     Heinemeier Hansson от 37
     Signals.
     Първата публична версия е
     излиза през юли 2004.
     Текущата стабилна версия
     е 3.0.3
37signals




  Милиони клиенти ... по-малко от 37 служителя
MVC Архитектура
Начин на работа
Model
class Task < ActiveRecord::Base
  belongs_to :user

  has_many :comments

  validates_presence_of :user, :text
  validates_inclusion_of :status, :in => ["opened", "completed"]

  attr_readonly :user_id

  def editable?
    status == "opened"
  end
end
Model
class Task < ActiveRecord::Base
  belongs_to :user

  has_many :comments

  validates_presence_of :user, :text
  validates_inclusion_of :status, :in => ["opened", "completed"]

  attr_readonly :user_id

  def editable?
    status == "opened"
  end
end
Model
class Task < ActiveRecord::Base
  belongs_to :user

  has_many :comments

  validates_presence_of :user, :text
  validates_inclusion_of :status, :in => ["opened", "completed"]

  attr_readonly :user_id

  def editable?
    status == "opened"
  end
end
Model
class Task < ActiveRecord::Base
  belongs_to :user

  has_many :comments

  validates_presence_of :user, :text
  validates_inclusion_of :status, :in => ["opened", "completed"]

  attr_readonly :user_id

  def editable?
    status == "opened"
  end
end
Model
class Task < ActiveRecord::Base
  belongs_to :user

  has_many :comments

  validates_presence_of :user, :text
  validates_inclusion_of :status, :in => ["opened", "completed"]

  attr_readonly :user_id

  def editable?
    status == "opened"
  end
end
Controller
class TasksController < ApplicationController
  def index
    @tasks = Tasks.where(:status => "opened")
  end

  def show
    @task = Task.find(params[:id])
  end

  def create
    @task = current_user.tasks.build(params[:task])

    if @task.save
      redirect_to tasks_path
    else
      render :partial => "new"
    end
  end
end
Controller
class TasksController < ApplicationController
  def index
    @tasks = Tasks.where(:status => "opened")
  end

  def show
    @task = Task.find(params[:id])
  end

  def create
    @task = current_user.tasks.build(params[:task])

    if @task.save
      redirect_to tasks_path
    else
      render :partial => "new"
    end
  end
end
Controller
class TasksController < ApplicationController
  def index
    @tasks = Tasks.where(:status => "opened")
  end

  def show
    @task = Task.find(params[:id])
  end

  def create
    @task = current_user.tasks.build(params[:task])

    if @task.save
      redirect_to tasks_path
    else
      render :partial => "new"
    end
  end
end
Controller
class TasksController < ApplicationController
  def index
    @tasks = Tasks.where(:status => "opened")
  end

  def show
    @task = Task.find(params[:id])
  end

  def create
    @task = current_user.tasks.build(params[:task])

    if @task.save
      redirect_to tasks_path
    else
      render :partial => "new"
    end
  end
end
View
<%= form_for task do |form| %>
  <%= render 'shared/error_messages', :target => form.object %>
  <p>
    <%= form.label :text %>
    <%= form.text_area :text %>
  </p>
  <p>
    <%= form.label :status %>
    <%= form.select :status, Task.statuses %>
  </p>
  <div class="buttons">
    <%= form.submit %> |
    <% link_to "Cancel", task_path %>
  </div>
<% end %>
Test Driven Development
Test Driven Development
1   Добавя се тест
    ... за несъществуващ код
Test Driven Development
1   Добавя се тест
    ... за несъществуващ код




                               2   Пише се код
                                   ... колкото само тестът да мине
Test Driven Development
    1     Добавя се тест
          ... за несъществуващ код




                                          2   Пише се код
                                              ... колкото само тестът да мине




3       Правят се подобрения
        ... подобрява се качеството на кода
Test Driven Development
    1     Добавя се тест
          ... за несъществуващ код




                                          2   Пише се код
                                              ... колкото само тестът да мине




3       Правят се подобрения
        ... подобрява се качеството на кода
describe Task do
  it { should belong_to(:user) }
  it { should have_many(:notes) }

 it { should validate_presence_of(:user) }
 it { should validate_presence_of(:text) }

 describe "#editable?" do
   it "returns true if task status is 'opened'" do
     Task.new(:status => "opened").should be_editable
   end

    it "returns false if task status is 'rejected'" do
      Task.new(:status => "rejected").should_not be_editable
    end

    it "returns false if task status is 'completed" do
      Task.new(:status => "completed").should_not be_editable
    end
  end
end
Тесване на Controller
describe TasksController do
  describe "GET 'show'" do
    before { Task.should_recive(:find).with("1").and_return task }
    before { get :show, :id => "1" }

    it { should assign_to(:task).with(task) }
    it { should render_temlate("show") }
  end
end
Тестване на View
describe "tasks/show.html.erb" do
  before do
    assign :task, mock_model(Task, {
       :id   => 1,
       :text => "task text"
    })

    render
  end

  it "renders task text" do
    rendered.should contain("task text")
  end

  it "renders link for editing task" do
    rendered.should have_selector('a[href="/tasks/1/edit"]')
  end
end
Благодаря за вниманието



@rstankov

Weitere ähnliche Inhalte

Was ist angesagt?

Symfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologySymfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologyDaniel Knell
 
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2KZepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2KThomas Fuchs
 
Min-Maxing Software Costs - Laracon EU 2015
Min-Maxing Software Costs - Laracon EU 2015Min-Maxing Software Costs - Laracon EU 2015
Min-Maxing Software Costs - Laracon EU 2015Konstantin Kudryashov
 
jQuery from the very beginning
jQuery from the very beginningjQuery from the very beginning
jQuery from the very beginningAnis Ahmad
 
Node.js in action
Node.js in actionNode.js in action
Node.js in actionSimon Su
 
Workshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScriptWorkshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScriptVisual Engineering
 
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Domenic Denicola
 
Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Venturing Into The Wild: A .NET Developer's Experience As A Ruby DeveloperVenturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Venturing Into The Wild: A .NET Developer's Experience As A Ruby DeveloperJon Kruger
 
Decoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICDecoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICKonstantin Kudryashov
 
5 Tips for Better JavaScript
5 Tips for Better JavaScript5 Tips for Better JavaScript
5 Tips for Better JavaScriptTodd Anglin
 
Testable, Object-Oriented JavaScript
Testable, Object-Oriented JavaScriptTestable, Object-Oriented JavaScript
Testable, Object-Oriented JavaScriptJon Kruger
 
Crafting beautiful software
Crafting beautiful softwareCrafting beautiful software
Crafting beautiful softwareJorn Oomen
 
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you need
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you needDutch PHP Conference - PHPSpec 2 - The only Design Tool you need
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you needKacper Gunia
 
06 jQuery #burningkeyboards
06 jQuery  #burningkeyboards06 jQuery  #burningkeyboards
06 jQuery #burningkeyboardsDenis Ristic
 
Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5Leonardo Proietti
 
05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboardsDenis Ristic
 
¿Cómo de sexy puede hacer Backbone mi código?
¿Cómo de sexy puede hacer Backbone mi código?¿Cómo de sexy puede hacer Backbone mi código?
¿Cómo de sexy puede hacer Backbone mi código?jaespinmora
 

Was ist angesagt? (20)

Symfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologySymfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technology
 
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2KZepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
 
Min-Maxing Software Costs - Laracon EU 2015
Min-Maxing Software Costs - Laracon EU 2015Min-Maxing Software Costs - Laracon EU 2015
Min-Maxing Software Costs - Laracon EU 2015
 
jQuery from the very beginning
jQuery from the very beginningjQuery from the very beginning
jQuery from the very beginning
 
Node.js in action
Node.js in actionNode.js in action
Node.js in action
 
Workshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScriptWorkshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScript
 
Min-Maxing Software Costs
Min-Maxing Software CostsMin-Maxing Software Costs
Min-Maxing Software Costs
 
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
 
Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Venturing Into The Wild: A .NET Developer's Experience As A Ruby DeveloperVenturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
 
Decoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICDecoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DIC
 
Dollar symbol
Dollar symbolDollar symbol
Dollar symbol
 
5 Tips for Better JavaScript
5 Tips for Better JavaScript5 Tips for Better JavaScript
5 Tips for Better JavaScript
 
Testable, Object-Oriented JavaScript
Testable, Object-Oriented JavaScriptTestable, Object-Oriented JavaScript
Testable, Object-Oriented JavaScript
 
Crafting beautiful software
Crafting beautiful softwareCrafting beautiful software
Crafting beautiful software
 
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you need
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you needDutch PHP Conference - PHPSpec 2 - The only Design Tool you need
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you need
 
Frontin like-a-backer
Frontin like-a-backerFrontin like-a-backer
Frontin like-a-backer
 
06 jQuery #burningkeyboards
06 jQuery  #burningkeyboards06 jQuery  #burningkeyboards
06 jQuery #burningkeyboards
 
Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5
 
05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards
 
¿Cómo de sexy puede hacer Backbone mi código?
¿Cómo de sexy puede hacer Backbone mi código?¿Cómo de sexy puede hacer Backbone mi código?
¿Cómo de sexy puede hacer Backbone mi código?
 

Ähnlich wie Why ruby

Ruby/Rails
Ruby/RailsRuby/Rails
Ruby/Railsrstankov
 
Ruby on Rails ステップアップ講座 - 大場寧子
Ruby on Rails ステップアップ講座 - 大場寧子Ruby on Rails ステップアップ講座 - 大場寧子
Ruby on Rails ステップアップ講座 - 大場寧子Yasuko Ohba
 
Metaprogramovanie #1
Metaprogramovanie #1Metaprogramovanie #1
Metaprogramovanie #1Jano Suchal
 
CoffeeScript - A Rubyist's Love Affair
CoffeeScript - A Rubyist's Love AffairCoffeeScript - A Rubyist's Love Affair
CoffeeScript - A Rubyist's Love AffairMark
 
Desarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosDesarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosEdgar Suarez
 
Postobjektové programovanie v Ruby
Postobjektové programovanie v RubyPostobjektové programovanie v Ruby
Postobjektové programovanie v RubyJano Suchal
 
Ruby on Rails at PROMPT ISEL '11
Ruby on Rails at PROMPT ISEL '11Ruby on Rails at PROMPT ISEL '11
Ruby on Rails at PROMPT ISEL '11Pedro Cunha
 
Ruby on Rails testing with Rspec
Ruby on Rails testing with RspecRuby on Rails testing with Rspec
Ruby on Rails testing with RspecBunlong Van
 
How To Test Everything
How To Test EverythingHow To Test Everything
How To Test Everythingnoelrap
 
Rails2 Pr
Rails2 PrRails2 Pr
Rails2 Prxibbar
 
Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子Yasuko Ohba
 
Blocks by Lachs Cox
Blocks by Lachs CoxBlocks by Lachs Cox
Blocks by Lachs Coxlachie
 
Intro to Ruby - Twin Cities Code Camp 7
Intro to Ruby - Twin Cities Code Camp 7Intro to Ruby - Twin Cities Code Camp 7
Intro to Ruby - Twin Cities Code Camp 7Brian Hogan
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overviewYehuda Katz
 
More to RoC weibo
More to RoC weiboMore to RoC weibo
More to RoC weiboshaokun
 
Simple restfull app_s
Simple restfull app_sSimple restfull app_s
Simple restfull app_snetwix
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiRan Mizrahi
 

Ähnlich wie Why ruby (20)

Ruby/Rails
Ruby/RailsRuby/Rails
Ruby/Rails
 
Ruby on Rails ステップアップ講座 - 大場寧子
Ruby on Rails ステップアップ講座 - 大場寧子Ruby on Rails ステップアップ講座 - 大場寧子
Ruby on Rails ステップアップ講座 - 大場寧子
 
Metaprogramovanie #1
Metaprogramovanie #1Metaprogramovanie #1
Metaprogramovanie #1
 
CoffeeScript - A Rubyist's Love Affair
CoffeeScript - A Rubyist's Love AffairCoffeeScript - A Rubyist's Love Affair
CoffeeScript - A Rubyist's Love Affair
 
SOLID Ruby, SOLID Rails
SOLID Ruby, SOLID RailsSOLID Ruby, SOLID Rails
SOLID Ruby, SOLID Rails
 
Desarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosDesarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutos
 
Postobjektové programovanie v Ruby
Postobjektové programovanie v RubyPostobjektové programovanie v Ruby
Postobjektové programovanie v Ruby
 
Ruby on Rails at PROMPT ISEL '11
Ruby on Rails at PROMPT ISEL '11Ruby on Rails at PROMPT ISEL '11
Ruby on Rails at PROMPT ISEL '11
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
Ruby on Rails testing with Rspec
Ruby on Rails testing with RspecRuby on Rails testing with Rspec
Ruby on Rails testing with Rspec
 
How To Test Everything
How To Test EverythingHow To Test Everything
How To Test Everything
 
Rails2 Pr
Rails2 PrRails2 Pr
Rails2 Pr
 
Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子
 
An introduction to Ruby
An introduction to RubyAn introduction to Ruby
An introduction to Ruby
 
Blocks by Lachs Cox
Blocks by Lachs CoxBlocks by Lachs Cox
Blocks by Lachs Cox
 
Intro to Ruby - Twin Cities Code Camp 7
Intro to Ruby - Twin Cities Code Camp 7Intro to Ruby - Twin Cities Code Camp 7
Intro to Ruby - Twin Cities Code Camp 7
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
 
More to RoC weibo
More to RoC weiboMore to RoC weibo
More to RoC weibo
 
Simple restfull app_s
Simple restfull app_sSimple restfull app_s
Simple restfull app_s
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran Mizrahi
 

Kürzlich hochgeladen

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 

Kürzlich hochgeladen (20)

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 

Why ruby

  • 1. Защо Ruby и Rails ? Радослав Станков Ruby on Rails семинар – Варненски свободен университет 2010
  • 3.
  • 4.
  • 5.
  • 6. Ruby Ruby е интерактивен, обектно-ориентиран език за програмиране. Неготово мото е: “Optimized for programmer happiness”
  • 7. Ruby on Rails Ruby on Rails е framework за уеб приложения. Неготово мото е: “Web development doesn’t hurt”
  • 8. Ruby Създаден от японеца Юкихиро Мацумото „Мац“. Първата публична версия излиза през 1995. Версия 2.0 се очакава да излезе за Коледа / не се казва коя /
  • 9.
  • 10. private $_products = null; public function getProducts($categoryId){ if ($this->_products === null){ $this->_products = Product::where(array( 'category_id' => $categoryId )); } return $this->products; }
  • 11. def products(category_id) @products ||= Product.where({ :category_id => category_id }) end
  • 12. def products(category_id) @products ||= Product.where({ :category_id => category_id }) end
  • 13. def products(category_id) @products ||= Product.where({ :category_id => category_id }) end
  • 14. def products(category_id) @products ||= Product.where({ :category_id => category_id }) end
  • 15. def products(category_id) @products ||= Product.where({ :category_id => category_id }) end
  • 16. def products(category_id) @products ||= Product.where({ :category_id => category_id }) end
  • 17. def products(category_id) @products ||= Product.where( :category_id => category_id ) end
  • 18. def products(category_id) @products ||= Product.where :category_id => category_id end
  • 19. 5.times { puts "Ruby is cool!" } 5.times do puts "Ruby is cool!" end
  • 20. File.open("some_file.txt") do |file| file << "content" end
  • 21. [1,2,3,4].each { |value| puts value } # => [1, 2, 3, 4] [1,2,3,4].map { |value| value * value } # => [1, 4, 9, 16] [1,2,3,4].reduce { |a, b| a + b } # => 10
  • 22. def operate(value) yield value end value = operate(5) { |v| v + 4 } puts value # 9
  • 23. class Person attr_accessor :fist_name, :last_name def initialize(first_name, last_name) @first_name = first_name @last_name = last_name end def full_name "#{first_name} + #{last_name}" end end me = Person.new("Radoslav", "Stankov") puts me.full_name # Radoslav Stankov
  • 24. class Person attr_accessor :fist_name, :last_name def initialize(first_name, last_name) @first_name = first_name @last_name = last_name end def full_name first_name + " " + last_name end end me = Person.new("Radoslav", "Stankov") puts me.full_name # Radoslav Stankov
  • 25. class Person attr_accessor :fist_name, :last_name def initialize(first_name, last_name) @first_name = first_name @last_name = last_name end def full_name first_name + " " + last_name end end me = Person.new("Radoslav", "Stankov") puts me.full_name # Radoslav Stankov
  • 26. class Person attr_accessor :fist_name, :last_name def initialize(first_name, last_name) @first_name = first_name @last_name = last_name end def full_name first_name + " " + last_name end end me = Person.new("Radoslav", "Stankov") puts me.full_name # Radoslav Stankov
  • 27. class Person attr_accessor :fist_name, :last_name def initialize(first_name, last_name) @first_name = first_name @last_name = last_name end def full_name first_name + " " + last_name end end me = Person.new("Radoslav", "Stankov") puts me.full_name # Radoslav Stankov
  • 28. class Person def +(other_person) # ... end end person1 + person2
  • 29. class Array def first self[0] end def second self[1] end end array = [1, 2, 3, 4] array.first # 1 array.second # 2
  • 30. class Numeric def plus(x) self + x end end y = 5.plus(6)
  • 31. Time.now - 2.days == 2.days.ago 1.month.ago + 45.days - 1.year
  • 32. Ruby • димично определяне на типа данните • модули • отворени класове • блокове • анонимни функции • всяка операция връща резултат • всичко е изпълним код • изчистен синтаксис • мета програмиране • промяна на обектите по време на изпълнение • вградени регулярни изрази
  • 33.
  • 34.
  • 35.
  • 36. Ruby on Rails Разработен от David Heinemeier Hansson от 37 Signals. Първата публична версия е излиза през юли 2004. Текущата стабилна версия е 3.0.3
  • 37.
  • 38.
  • 39.
  • 40. 37signals Милиони клиенти ... по-малко от 37 служителя
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67. Model class Task < ActiveRecord::Base belongs_to :user has_many :comments validates_presence_of :user, :text validates_inclusion_of :status, :in => ["opened", "completed"] attr_readonly :user_id def editable? status == "opened" end end
  • 68. Model class Task < ActiveRecord::Base belongs_to :user has_many :comments validates_presence_of :user, :text validates_inclusion_of :status, :in => ["opened", "completed"] attr_readonly :user_id def editable? status == "opened" end end
  • 69. Model class Task < ActiveRecord::Base belongs_to :user has_many :comments validates_presence_of :user, :text validates_inclusion_of :status, :in => ["opened", "completed"] attr_readonly :user_id def editable? status == "opened" end end
  • 70. Model class Task < ActiveRecord::Base belongs_to :user has_many :comments validates_presence_of :user, :text validates_inclusion_of :status, :in => ["opened", "completed"] attr_readonly :user_id def editable? status == "opened" end end
  • 71. Model class Task < ActiveRecord::Base belongs_to :user has_many :comments validates_presence_of :user, :text validates_inclusion_of :status, :in => ["opened", "completed"] attr_readonly :user_id def editable? status == "opened" end end
  • 72. Controller class TasksController < ApplicationController def index @tasks = Tasks.where(:status => "opened") end def show @task = Task.find(params[:id]) end def create @task = current_user.tasks.build(params[:task]) if @task.save redirect_to tasks_path else render :partial => "new" end end end
  • 73. Controller class TasksController < ApplicationController def index @tasks = Tasks.where(:status => "opened") end def show @task = Task.find(params[:id]) end def create @task = current_user.tasks.build(params[:task]) if @task.save redirect_to tasks_path else render :partial => "new" end end end
  • 74. Controller class TasksController < ApplicationController def index @tasks = Tasks.where(:status => "opened") end def show @task = Task.find(params[:id]) end def create @task = current_user.tasks.build(params[:task]) if @task.save redirect_to tasks_path else render :partial => "new" end end end
  • 75. Controller class TasksController < ApplicationController def index @tasks = Tasks.where(:status => "opened") end def show @task = Task.find(params[:id]) end def create @task = current_user.tasks.build(params[:task]) if @task.save redirect_to tasks_path else render :partial => "new" end end end
  • 76. View <%= form_for task do |form| %> <%= render 'shared/error_messages', :target => form.object %> <p> <%= form.label :text %> <%= form.text_area :text %> </p> <p> <%= form.label :status %> <%= form.select :status, Task.statuses %> </p> <div class="buttons"> <%= form.submit %> | <% link_to "Cancel", task_path %> </div> <% end %>
  • 78. Test Driven Development 1 Добавя се тест ... за несъществуващ код
  • 79. Test Driven Development 1 Добавя се тест ... за несъществуващ код 2 Пише се код ... колкото само тестът да мине
  • 80. Test Driven Development 1 Добавя се тест ... за несъществуващ код 2 Пише се код ... колкото само тестът да мине 3 Правят се подобрения ... подобрява се качеството на кода
  • 81. Test Driven Development 1 Добавя се тест ... за несъществуващ код 2 Пише се код ... колкото само тестът да мине 3 Правят се подобрения ... подобрява се качеството на кода
  • 82. describe Task do it { should belong_to(:user) } it { should have_many(:notes) } it { should validate_presence_of(:user) } it { should validate_presence_of(:text) } describe "#editable?" do it "returns true if task status is 'opened'" do Task.new(:status => "opened").should be_editable end it "returns false if task status is 'rejected'" do Task.new(:status => "rejected").should_not be_editable end it "returns false if task status is 'completed" do Task.new(:status => "completed").should_not be_editable end end end
  • 83. Тесване на Controller describe TasksController do describe "GET 'show'" do before { Task.should_recive(:find).with("1").and_return task } before { get :show, :id => "1" } it { should assign_to(:task).with(task) } it { should render_temlate("show") } end end
  • 84. Тестване на View describe "tasks/show.html.erb" do before do assign :task, mock_model(Task, { :id => 1, :text => "task text" }) render end it "renders task text" do rendered.should contain("task text") end it "renders link for editing task" do rendered.should have_selector('a[href="/tasks/1/edit"]') end end
  • 85.

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. Ruby &amp;#x435; &amp;#x438;&amp;#x43D;&amp;#x442;&amp;#x435;&amp;#x440;&amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x442;&amp;#x438;&amp;#x440;&amp;#x443;&amp;#x435;&amp;#x43C;, &amp;#x438;&amp;#x43D;&amp;#x442;&amp;#x435;&amp;#x440;&amp;#x430;&amp;#x43A;&amp;#x442;&amp;#x438;&amp;#x432;&amp;#x435;&amp;#x43D;, &amp;#x43E;&amp;#x431;&amp;#x435;&amp;#x43A;&amp;#x442;&amp;#x43D;&amp;#x43E;-&amp;#x43E;&amp;#x440;&amp;#x438;&amp;#x435;&amp;#x43D;&amp;#x442;&amp;#x438;&amp;#x440;&amp;#x430;&amp;#x43D; &amp;#x435;&amp;#x437;&amp;#x438;&amp;#x43A; &amp;#x437;&amp;#x430; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x433;&amp;#x440;&amp;#x430;&amp;#x43C;&amp;#x438;&amp;#x440;&amp;#x430;&amp;#x43D;&amp;#x435;. &amp;#x422;&amp;#x43E;&amp;#x439; &amp;#x43A;&amp;#x43E;&amp;#x43C;&amp;#x431;&amp;#x438;&amp;#x43D;&amp;#x438;&amp;#x440;&amp;#x430; &amp;#x447;&amp;#x435;&amp;#x440;&amp;#x442;&amp;#x438; &amp;#x43E;&amp;#x442; &amp;#x43C;&amp;#x43D;&amp;#x43E;&amp;#x433;&amp;#x43E; &amp;#x434;&amp;#x440;&amp;#x443;&amp;#x433;&amp;#x438; &amp;#x435;&amp;#x437;&amp;#x438;&amp;#x446;&amp;#x438;, &amp;#x441;&amp;#x440;&amp;#x435;&amp;#x434; &amp;#x43A;&amp;#x43E;&amp;#x438;&amp;#x442;&amp;#x43E; Smalltalk, Perl, Lisp &amp;#x438; Python.\n\n
  7. &amp;#x422;&amp;#x43E;&amp;#x439; &amp;#x435; framework &amp;#x437;&amp;#x430; &amp;#x443;&amp;#x435;&amp;#x431; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F;. &amp;#x427;&amp;#x438;&amp;#x44F;&amp;#x442;&amp;#x43E; &amp;#x446;&amp;#x435;&amp;#x43B; &amp;#x435; &amp;#x434;&amp;#x430; &amp;#x443;&amp;#x43B;&amp;#x435;&amp;#x441;&amp;#x43D;&amp;#x438; &amp;#x438; &amp;#x443;&amp;#x441;&amp;#x43A;&amp;#x43E;&amp;#x440;&amp;#x438; &amp;#x43D;&amp;#x430;&amp;#x447;&amp;#x438;&amp;#x43D;&amp;#x430; &amp;#x43D;&amp;#x430; &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x432;&amp;#x430;&amp;#x43D;&amp;#x435; &amp;#x43D;&amp;#x430; &amp;#x443;&amp;#x435;&amp;#x431; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F;.\n\n
  8. &amp;#x422;&amp;#x43E;&amp;#x439; &amp;#x435; &amp;#x441;&amp;#x44A;&amp;#x437;&amp;#x434;&amp;#x430;&amp;#x434;&amp;#x435;&amp;#x43D; &amp;#x43E;&amp;#x442; &amp;#x44F;&amp;#x43F;&amp;#x43E;&amp;#x43D;&amp;#x435;&amp;#x446;&amp;#x430; &amp;#x42E;&amp;#x43A;&amp;#x438;&amp;#x445;&amp;#x438;&amp;#x440;&amp;#x43E; &amp;#x41C;&amp;#x430;&amp;#x446;&amp;#x443;&amp;#x43C;&amp;#x43E;&amp;#x442;&amp;#x43E; &amp;#x201E;&amp;#x41C;&amp;#x430;&amp;#x446;&amp;#x201C;. &amp;#x41A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x437; 1995 &amp;#x438;&amp;#x437;&amp;#x43B;&amp;#x438;&amp;#x437;&amp;#x430; &amp;#x43F;&amp;#x44A;&amp;#x440;&amp;#x432;&amp;#x430;&amp;#x442;&amp;#x430; &amp;#x432;&amp;#x435;&amp;#x440;&amp;#x441;&amp;#x438;&amp;#x44F; &amp;#x43D;&amp;#x430; &amp;#x435;&amp;#x437;&amp;#x438;&amp;#x43A;&amp;#x430;. &amp;#xA0;&amp;#x41C;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x442;&amp;#x43E; &amp;#x43D;&amp;#x430; &amp;#x435;&amp;#x437;&amp;#x438;&amp;#x43A;&amp;#x430; &amp;#x435; &amp;#xA0;&amp;#x201E;&amp;#x41E;&amp;#x43F;&amp;#x442;&amp;#x438;&amp;#x43C;&amp;#x438;&amp;#x437;&amp;#x438;&amp;#x440;&amp;#x430;&amp;#x43D; &amp;#x437;&amp;#x430; &amp;#x449;&amp;#x430;&amp;#x441;&amp;#x442;&amp;#x438;&amp;#x435;&amp;#x442;&amp;#x43E; &amp;#x43D;&amp;#x430; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x433;&amp;#x440;&amp;#x430;&amp;#x43C;&amp;#x438;&amp;#x441;&amp;#x442;&amp;#x430;&amp;#x201D;\n\n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. &amp;#x421;&amp;#x442;&amp;#x440;&amp;#x435;&amp;#x43C;&amp;#x435;&amp;#x436;&amp;#x44A;&amp;#x442; &amp;#x43D;&amp;#x430; Ruby &amp;#x435; &amp;#x434;&amp;#x430; &amp;#x441;&amp;#x43B;&amp;#x435;&amp;#x434;&amp;#x432;&amp;#x430; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43D;&amp;#x446;&amp;#x438;&amp;#x43F;&amp;#x430; &amp;#x43D;&amp;#x430; &amp;#x43D;&amp;#x430;&amp;#x439;-&amp;#x43C;&amp;#x430;&amp;#x43B;&amp;#x43A;&amp;#x430; &amp;#x438;&amp;#x437;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x430;&amp;#x434;&amp;#x430;. &amp;#x422;&amp;#x43E;&amp;#x432;&amp;#x430; &amp;#x43E;&amp;#x437;&amp;#x43D;&amp;#x430;&amp;#x447;&amp;#x430;&amp;#x432;&amp;#x430;, &amp;#x447;&amp;#x435; &amp;#x43F;&amp;#x43E;&amp;#x432;&amp;#x435;&amp;#x434;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435;&amp;#x442;&amp;#x43E; &amp;#x43D;&amp;#x430; &amp;#x435;&amp;#x437;&amp;#x438;&amp;#x43A;&amp;#x430; &amp;#x442;&amp;#x440;&amp;#x44F;&amp;#x431;&amp;#x432;&amp;#x430; &amp;#x434;&amp;#x430; &amp;#x435; &amp;#x438;&amp;#x43D;&amp;#x442;&amp;#x443;&amp;#x438;&amp;#x442;&amp;#x438;&amp;#x432;&amp;#x43D;&amp;#x43E; &amp;#x438; &amp;#x442;&amp;#x43E;&amp;#x439; &amp;#x434;&amp;#x430; &amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x438; &amp;#x442;&amp;#x430;&amp;#x43A;&amp;#x430;, &amp;#x43A;&amp;#x430;&amp;#x43A;&amp;#x442;&amp;#x43E; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x433;&amp;#x440;&amp;#x430;&amp;#x43C;&amp;#x438;&amp;#x441;&amp;#x442;&amp;#x44A;&amp;#x442; &amp;#x431;&amp;#x438; &amp;#x43E;&amp;#x447;&amp;#x430;&amp;#x43A;&amp;#x432;&amp;#x430;&amp;#x43B;.\nRuby &amp;#x435; &amp;#x43E;&amp;#x431;&amp;#x435;&amp;#x43A;&amp;#x442;&amp;#x43D;&amp;#x43E;-&amp;#x43E;&amp;#x440;&amp;#x438;&amp;#x435;&amp;#x43D;&amp;#x442;&amp;#x438;&amp;#x440;&amp;#x430;&amp;#x43D;: &amp;#x432;&amp;#x441;&amp;#x435;&amp;#x43A;&amp;#x438; &amp;#x442;&amp;#x438;&amp;#x43F; &amp;#x434;&amp;#x430;&amp;#x43D;&amp;#x43D;&amp;#x438; &amp;#x435; &amp;#x43E;&amp;#x431;&amp;#x435;&amp;#x43A;&amp;#x442;, &amp;#x432;&amp;#x43A;&amp;#x43B;&amp;#x44E;&amp;#x447;&amp;#x438;&amp;#x442;&amp;#x435;&amp;#x43B;&amp;#x43D;&amp;#x43E; &amp;#x43A;&amp;#x43B;&amp;#x430;&amp;#x441;&amp;#x43E;&amp;#x432;&amp;#x435;, &amp;#x447;&amp;#x438;&amp;#x441;&amp;#x43B;&amp;#x430;, &amp;#x431;&amp;#x443;&amp;#x43B;&amp;#x435;&amp;#x432;&amp;#x438; &amp;#x441;&amp;#x442;&amp;#x43E;&amp;#x439;&amp;#x43D;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x438;, &amp;#x43A;&amp;#x43E;&amp;#x438;&amp;#x442;&amp;#x43E; &amp;#x432; &amp;#x43C;&amp;#x43D;&amp;#x43E;&amp;#x433;&amp;#x43E; &amp;#x434;&amp;#x440;&amp;#x443;&amp;#x433;&amp;#x438; &amp;#x435;&amp;#x437;&amp;#x438;&amp;#x446;&amp;#x438; &amp;#x43E;&amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x44F;&amp;#x442; &amp;#x43A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43C;&amp;#x438;&amp;#x442;&amp;#x438;&amp;#x432;&amp;#x438;, &amp;#x430; &amp;#x43D;&amp;#x435; &amp;#x43A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x440;&amp;#x435;&amp;#x430;&amp;#x43B;&amp;#x43D;&amp;#x438; &amp;#x43E;&amp;#x431;&amp;#x435;&amp;#x43A;&amp;#x442;&amp;#x438;.\n\n&amp;#x41D;&amp;#x44F;&amp;#x43A;&amp;#x43E;&amp;#x438; &amp;#x43E;&amp;#x442; &amp;#x43D;&amp;#x430;&amp;#x439;-&amp;#x432;&amp;#x430;&amp;#x436;&amp;#x43D;&amp;#x438;&amp;#x442;&amp;#x435; &amp;#x445;&amp;#x430;&amp;#x440;&amp;#x430;&amp;#x43A;&amp;#x442;&amp;#x435;&amp;#x440;&amp;#x438;&amp;#x441;&amp;#x442;&amp;#x438;&amp;#x43A;&amp;#x438; &amp;#x43D;&amp;#x430; &amp;#x435;&amp;#x437;&amp;#x438;&amp;#x43A;&amp;#x430; &amp;#x441;&amp;#x430;: \n&amp;#x434;&amp;#x438;&amp;#x43C;&amp;#x438;&amp;#x447;&amp;#x43D;&amp;#x43E; &amp;#x43E;&amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x44F;&amp;#x43D;&amp;#x435; &amp;#x43D;&amp;#x430; &amp;#x442;&amp;#x438;&amp;#x43F;&amp;#x430; &amp;#x434;&amp;#x430;&amp;#x43D;&amp;#x43D;&amp;#x438;&amp;#x442;&amp;#x435;\n&amp;#x43C;&amp;#x43E;&amp;#x434;&amp;#x443;&amp;#x43B;&amp;#x438; - &amp;#x201C;&amp;#x432;&amp;#x44A;&amp;#x437;&amp;#x43C;&amp;#x43E;&amp;#x436;&amp;#x43D;&amp;#x43E;&amp;#x441;&amp;#x442; &amp;#x435;&amp;#x434;&amp;#x438;&amp;#x43D; &amp;#x43C;&amp;#x43E;&amp;#x434;&amp;#x443;&amp;#x43B; &amp;#x434;&amp;#x430; &amp;#x441;&amp;#x435; &amp;#x432;&amp;#x433;&amp;#x440;&amp;#x430;&amp;#x436;&amp;#x434;&amp;#x430; &amp;#x432; &amp;#x43C;&amp;#x43D;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x43E; &amp;#x43A;&amp;#x43B;&amp;#x430;&amp;#x441;&amp;#x43E;&amp;#x432;&amp;#x435;, &amp;#x43A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x442;&amp;#x430;&amp;#x43A;&amp;#x430; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x438;&amp;#x433;&amp;#x430; &amp;#x43C;&amp;#x43D;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x435;&amp;#x43D;&amp;#x43E; &amp;#x43D;&amp;#x430;&amp;#x441;&amp;#x43B;&amp;#x435;&amp;#x434;&amp;#x44F;&amp;#x432;&amp;#x430;&amp;#x43D;&amp;#x435;&amp;#x201D;\n&amp;#x43E;&amp;#x442;&amp;#x432;&amp;#x43E;&amp;#x440;&amp;#x435;&amp;#x43D;&amp;#x438; &amp;#x43A;&amp;#x43B;&amp;#x430;&amp;#x441;&amp;#x43E;&amp;#x432;&amp;#x435; - &amp;#x201C;&amp;#x43A;&amp;#x44A;&amp;#x43C; &amp;#x432;&amp;#x441;&amp;#x435;&amp;#x43A;&amp;#x438; &amp;#x43A;&amp;#x43B;&amp;#x430;&amp;#x441; &amp;#x43C;&amp;#x43E;&amp;#x433;&amp;#x430;&amp;#x442; &amp;#x434;&amp;#x430; &amp;#x441;&amp;#x435; &amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x430;&amp;#x432;&amp;#x44F;&amp;#x442; &amp;#x43D;&amp;#x43E;&amp;#x432;&amp;#x438; &amp;#x430;&amp;#x442;&amp;#x440;&amp;#x438;&amp;#x431;&amp;#x443;&amp;#x442;&amp;#x438; &amp;#x438; &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434;&amp;#x438; &amp;#x43F;&amp;#x43E; &amp;#x432;&amp;#x440;&amp;#x435;&amp;#x43C;&amp;#x435; &amp;#x43D;&amp;#x430; &amp;#x438;&amp;#x437;&amp;#x43F;&amp;#x44A;&amp;#x43B;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x43D;&amp;#x430; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x433;&amp;#x440;&amp;#x430;&amp;#x43C;&amp;#x430;&amp;#x442;&amp;#x430;&amp;#x201D;\n&amp;#x431;&amp;#x43B;&amp;#x43E;&amp;#x43A;&amp;#x43E;&amp;#x432;&amp;#x435;\n&amp;#x430;&amp;#x43D;&amp;#x43E;&amp;#x43D;&amp;#x438;&amp;#x43C;&amp;#x43D;&amp;#x438; &amp;#x444;&amp;#x443;&amp;#x43D;&amp;#x43A;&amp;#x446;&amp;#x438;&amp;#x438;\n&amp;#x432;&amp;#x441;&amp;#x44F;&amp;#x43A;&amp;#x430; &amp;#x43E;&amp;#x43F;&amp;#x435;&amp;#x440;&amp;#x430;&amp;#x446;&amp;#x438;&amp;#x44F; &amp;#x432;&amp;#x440;&amp;#x44A;&amp;#x449;&amp;#x430; &amp;#x440;&amp;#x435;&amp;#x437;&amp;#x443;&amp;#x43B;&amp;#x442;&amp;#x430;&amp;#x442;\n&amp;#x432;&amp;#x441;&amp;#x438;&amp;#x447;&amp;#x43A;&amp;#x43E; &amp;#x435; &amp;#x438;&amp;#x437;&amp;#x43F;&amp;#x44A;&amp;#x43B;&amp;#x43D;&amp;#x438;&amp;#x43C; &amp;#x43A;&amp;#x43E;&amp;#x434; - &amp;#x201C;&amp;#x432;&amp;#x43A;&amp;#x43B;&amp;#x44E;&amp;#x447;&amp;#x438;&amp;#x442;&amp;#x435;&amp;#x43B;&amp;#x43D;&amp;#x43E; &amp;#x438; &amp;#x442;&amp;#x435;&amp;#x43B;&amp;#x430;&amp;#x442;&amp;#x430; &amp;#x43D;&amp;#x430; &amp;#x43A;&amp;#x43B;&amp;#x430;&amp;#x441;&amp;#x43E;&amp;#x432;&amp;#x435;&amp;#x442;&amp;#x435; &amp;#x432; &amp;#x43A;&amp;#x43E;&amp;#x439;&amp;#x442;&amp;#x43E; &amp;#x43C;&amp;#x43E;&amp;#x436;&amp;#x435; &amp;#x438;&amp;#x43C;&amp;#x430; &amp;#x446;&amp;#x438;&amp;#x43A;&amp;#x43B;&amp;#x438;, &amp;#x443;&amp;#x441;&amp;#x43B;&amp;#x43E;&amp;#x432;&amp;#x43D;&amp;#x438; &amp;#x43E;&amp;#x43F;&amp;#x435;&amp;#x440;&amp;#x430;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x438; &amp;#x438; &amp;#x434;&amp;#x440;&amp;#x443;&amp;#x433;&amp;#x438;&amp;#x201D;\n&amp;#x438;&amp;#x437;&amp;#x447;&amp;#x438;&amp;#x441;&amp;#x442;&amp;#x435;&amp;#x43D; &amp;#x441;&amp;#x438;&amp;#x43D;&amp;#x442;&amp;#x430;&amp;#x43A;&amp;#x441;&amp;#x438;&amp;#x441; - &amp;#x201C;&amp;#x43D;&amp;#x435; &amp;#x435; &amp;#x437;&amp;#x430;&amp;#x434;&amp;#x44A;&amp;#x43B;&amp;#x436;&amp;#x438;&amp;#x442;&amp;#x435;&amp;#x43B;&amp;#x43D;&amp;#x43E;, &amp;#x434;&amp;#x430; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x430;&amp;#x432;&amp;#x44F;&amp;#x442; &amp;#x441;&amp;#x43A;&amp;#x43E;&amp;#x431;&amp;#x438;, &amp;#x442;&amp;#x43E;&amp;#x447;&amp;#x43A;&amp;#x430; &amp;#x438; &amp;#x437;&amp;#x430;&amp;#x43F;&amp;#x435;&amp;#x442;&amp;#x430;&amp;#x44F; &amp;#x438; &amp;#x434;&amp;#x440;&amp;#x443;&amp;#x433;&amp;#x438;&amp;#x201D;\n&amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x430; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x433;&amp;#x440;&amp;#x430;&amp;#x43C;&amp;#x438;&amp;#x440;&amp;#x430;&amp;#x43D;&amp;#x435;\n&amp;#xA0;\n\n
  33. \n
  34. \n
  35. &amp;#x420;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x435;&amp;#x43D; &amp;#x43E;&amp;#x442; David Heinemeier Hansson &amp;#x43E;&amp;#x442; 37 Signals. &amp;#x41A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x435; Rails &amp;#x435; &amp;#x431;&amp;#x438;&amp;#x43B; &amp;#x438;&amp;#x437;&amp;#x432;&amp;#x43B;&amp;#x435;&amp;#x447;&amp;#x435;&amp;#x43D; &amp;#x43E;&amp;#x442; &amp;#x442;&amp;#x44F;&amp;#x445;&amp;#x43D;&amp;#x43E;&amp;#x442;&amp;#x43E; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435; Basecamp. &amp;#x412; &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x430;&amp;#x43A;&amp;#x430;&amp;#x442;&amp;#x430; &amp;#x43D;&amp;#x430; Rails &amp;#x441;&amp;#x430; &amp;#x443;&amp;#x447;&amp;#x430;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x430;&amp;#x43B;&amp;#x438; &amp;#x43D;&amp;#x430;&amp;#x434; 1500 &amp;#x447;&amp;#x43E;&amp;#x432;&amp;#x435;&amp;#x43A;&amp;#x430; &amp;#x43A;&amp;#x44A;&amp;#x43C; &amp;#x43C;&amp;#x43E;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x442;&amp;#x430;.\n\n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. Rails &amp;#x438;&amp;#x437;&amp;#x43F;&amp;#x43E;&amp;#x43B;&amp;#x437;&amp;#x432;&amp;#x430; Model-View-Controller &amp;#x430;&amp;#x440;&amp;#x445;&amp;#x438;&amp;#x442;&amp;#x435;&amp;#x43A;&amp;#x442;&amp;#x443;&amp;#x440;&amp;#x430;. &amp;#x427;&amp;#x438;&amp;#x44F;&amp;#x442;&amp;#x43E; &amp;#x43E;&amp;#x441;&amp;#x43D;&amp;#x43E;&amp;#x432;&amp;#x43D;&amp;#x430; &amp;#x446;&amp;#x435;&amp;#x43B; &amp;#x435; &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x44F;&amp;#x43D;&amp;#x435;&amp;#x442;&amp;#x43E; &amp;#x43D;&amp;#x430; &amp;#x431;&amp;#x438;&amp;#x437;&amp;#x43D;&amp;#x435;&amp;#x441; &amp;#x43B;&amp;#x43E;&amp;#x433;&amp;#x438;&amp;#x43A;&amp;#x430;&amp;#x442;&amp;#x430; &amp;#x43E;&amp;#x442; &amp;#x43F;&amp;#x43E;&amp;#x442;&amp;#x440;&amp;#x435;&amp;#x431;&amp;#x438;&amp;#x442;&amp;#x435;&amp;#x43B;&amp;#x441;&amp;#x43A;&amp;#x438;&amp;#x44F; &amp;#x438;&amp;#x43D;&amp;#x442;&amp;#x435;&amp;#x440;&amp;#x444;&amp;#x435;&amp;#x439;&amp;#x441;. &amp;#x41F;&amp;#x43E; &amp;#x442;&amp;#x43E;&amp;#x437;&amp;#x438; &amp;#x43D;&amp;#x430;&amp;#x447;&amp;#x438;&amp;#x43D; &amp;#x43A;&amp;#x43E;&amp;#x434;&amp;#x430; &amp;#x435; &amp;#x43F;&amp;#x43E;-&amp;#x43B;&amp;#x435;&amp;#x441;&amp;#x435;&amp;#x43D; &amp;#x437;&amp;#x430; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x430;&amp;#x43D;&amp;#x435;, &amp;#x43F;&amp;#x43E;&amp;#x434;&amp;#x434;&amp;#x440;&amp;#x44A;&amp;#x436;&amp;#x43A;&amp;#x430; &amp;#x438; &amp;#x431;&amp;#x44A;&amp;#x434;&amp;#x435;&amp;#x449;&amp;#x430; &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x43A;&amp;#x430;.\nModel - &amp;#x201C;&amp;#x43E;&amp;#x431;&amp;#x435;&amp;#x434;&amp;#x438;&amp;#x43D;&amp;#x44F;&amp;#x432;&amp;#x430; &amp;#x431;&amp;#x438;&amp;#x437;&amp;#x43D;&amp;#x435;&amp;#x441; &amp;#x43B;&amp;#x43E;&amp;#x433;&amp;#x438;&amp;#x43A;&amp;#x430;&amp;#x442;&amp;#x430; &amp;#x438; &amp;#x438;&amp;#x43D;&amp;#x444;&amp;#x440;&amp;#x430;&amp;#x441;&amp;#x442;&amp;#x440;&amp;#x443;&amp;#x43A;&amp;#x442;&amp;#x443;&amp;#x440;&amp;#x430;&amp;#x442;&amp;#x430; &amp;#x43D;&amp;#x430; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435;&amp;#x442;&amp;#x43E;. &amp;#x41A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x43D;&amp;#x430;&amp;#x439;-&amp;#x447;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E; &amp;#x441;&amp;#x435; &amp;#x438;&amp;#x437;&amp;#x43F;&amp;#x43E;&amp;#x43B;&amp;#x437;&amp;#x432;&amp;#x430;&amp;#x442; ActiveRecord &amp;#x43E;&amp;#x431;&amp;#x435;&amp;#x43A;&amp;#x442;&amp;#x438;, &amp;#x447;&amp;#x440;&amp;#x435;&amp;#x437; &amp;#x43A;&amp;#x43E;&amp;#x438;&amp;#x442;&amp;#x43E; &amp;#x441;&amp;#x435; &amp;#x432;&amp;#x437;&amp;#x430;&amp;#x438;&amp;#x43C;&amp;#x43E;&amp;#x434;&amp;#x435;&amp;#x439;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x430; &amp;#x441; &amp;#x431;&amp;#x430;&amp;#x437;&amp;#x430;&amp;#x442;&amp;#x430; &amp;#x43E;&amp;#x442; &amp;#x434;&amp;#x430;&amp;#x43D;&amp;#x43D;&amp;#x438;. &amp;#x412; Rails &amp;#xA0;&amp;#x43F;&amp;#x43E;&amp;#x447;&amp;#x442;&amp;#x438; &amp;#x43D;&amp;#x438;&amp;#x43A;&amp;#x43E;&amp;#x433;&amp;#x430; &amp;#x43D;&amp;#x435; &amp;#x441;&amp;#x435; &amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x438; &amp;#x434;&amp;#x438;&amp;#x440;&amp;#x435;&amp;#x43A;&amp;#x442;&amp;#x43D;&amp;#x43E; &amp;#x441; &amp;#x431;&amp;#x430;&amp;#x437;&amp;#x430;&amp;#x442;&amp;#x430; &amp;#x43E;&amp;#x442; &amp;#x434;&amp;#x430;&amp;#x43D;&amp;#x438; &amp;#x438; &amp;#x441; sql &amp;#x43A;&amp;#x43E;&amp;#x434;, &amp;#x430; &amp;#x441;&amp;#x435; &amp;#x43C;&amp;#x438;&amp;#x43D;&amp;#x430;&amp;#x432;&amp;#x430; &amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x437; ActiveRecord &amp;#x43C;&amp;#x43E;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x438;&amp;#x442;&amp;#x435;&amp;#x201D;\nView - &amp;#x201C;&amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x434;&amp;#x441;&amp;#x442;&amp;#x430;&amp;#x432;&amp;#x43B;&amp;#x44F;&amp;#x432;&amp;#x430; &amp;#x43F;&amp;#x43E;&amp;#x442;&amp;#x440;&amp;#x435;&amp;#x431;&amp;#x438;&amp;#x442;&amp;#x435;&amp;#x43B;&amp;#x441;&amp;#x43A;&amp;#x438;&amp;#x44F; &amp;#x438;&amp;#x43D;&amp;#x442;&amp;#x435;&amp;#x440;&amp;#x444;&amp;#x435;&amp;#x439;&amp;#x441;. &amp;#x422;&amp;#x43E;&amp;#x432;&amp;#x430; &amp;#x43D;&amp;#x430;&amp;#x439;-&amp;#x447;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E; &amp;#x435; HTML &amp;#x43A;&amp;#x43E;&amp;#x434;&amp;#x430;&amp;#x201D;.\nController - &amp;#x201C;&amp;#x441;&amp;#x432;&amp;#x44A;&amp;#x440;&amp;#x437;&amp;#x432;&amp;#x430; &amp;#x43C;&amp;#x43E;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x438;&amp;#x442;&amp;#x435; &amp;#x438; &amp;#x438;&amp;#x437;&amp;#x433;&amp;#x43B;&amp;#x435;&amp;#x434;&amp;#x438;&amp;#x442;&amp;#x435; &amp;#x438; &amp;#x432;&amp;#x440;&amp;#x44A;&amp;#x449;&amp;#x430; &amp;#x440;&amp;#x435;&amp;#x437;&amp;#x443;&amp;#x43B;&amp;#x442;&amp;#x430;&amp;#x442; &amp;#x43D;&amp;#x430; &amp;#x43F;&amp;#x43E;&amp;#x442;&amp;#x440;&amp;#x435;&amp;#x431;&amp;#x438;&amp;#x442;&amp;#x435;&amp;#x43B;&amp;#x44F;&amp;#x201D;.\n&amp;#xA0;\n\n
  45. &amp;#x41A;&amp;#x430;&amp;#x43A; &amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x438; &amp;#x435;&amp;#x434;&amp;#x43D;&amp;#x43E; Rails &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435;? \n&amp;#x41F;&amp;#x440;&amp;#x438; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x441;&amp;#x442;&amp;#x438;&amp;#x433;&amp;#x430;&amp;#x43D;&amp;#x435; &amp;#x43D;&amp;#x430; &amp;#x437;&amp;#x430;&amp;#x43F;&amp;#x438;&amp;#x442;&amp;#x432;&amp;#x430;&amp;#x43D;&amp;#x435; &amp;#x43E;&amp;#x442; browser-&amp;#x430;. &amp;#xA0;&amp;#x41F;&amp;#x44A;&amp;#x440;&amp;#x432;&amp;#x43E; &amp;#x441;&amp;#x435; &amp;#x43C;&amp;#x438;&amp;#x43D;&amp;#x430;&amp;#x432;&amp;#x430; &amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x437; Routing &amp;#x441;&amp;#x438;&amp;#x441;&amp;#x442;&amp;#x435;&amp;#x43C;&amp;#x430;&amp;#x442;&amp;#x430;, &amp;#x43A;&amp;#x43E;&amp;#x44F;&amp;#x442;&amp;#x43E; &amp;#x43E;&amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x44F;, &amp;#x43A;&amp;#x43E;&amp;#x439; &amp;#x43A;&amp;#x43E;&amp;#x43D;&amp;#x442;&amp;#x440;&amp;#x43E;&amp;#x43B;&amp;#x435;&amp;#x440; &amp;#x435; &amp;#x43E;&amp;#x442;&amp;#x433;&amp;#x43E;&amp;#x432;&amp;#x43E;&amp;#x440;&amp;#x435;&amp;#x43D; &amp;#x437;&amp;#x430; &amp;#x43E;&amp;#x431;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x43A;&amp;#x430;&amp;#x442;&amp;#x430; &amp;#x43D;&amp;#x430; &amp;#x437;&amp;#x430;&amp;#x43F;&amp;#x438;&amp;#x442;&amp;#x432;&amp;#x430;&amp;#x43D;&amp;#x435;&amp;#x442;&amp;#x43E;. &amp;#x421;&amp;#x43B;&amp;#x435;&amp;#x434; &amp;#x442;&amp;#x43E;&amp;#x432;&amp;#x430; &amp;#x441;&amp;#x44A;&amp;#x43E;&amp;#x442;&amp;#x432;&amp;#x435;&amp;#x442;&amp;#x43D;&amp;#x438;&amp;#x44F; &amp;#x43A;&amp;#x43E;&amp;#x43D;&amp;#x442;&amp;#x440;&amp;#x43E;&amp;#x43B;&amp;#x435;&amp;#x440; &amp;#x432;&amp;#x437;&amp;#x430;&amp;#x438;&amp;#x43C;&amp;#x43E;&amp;#x434;&amp;#x435;&amp;#x439;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x430; &amp;#x441; &amp;#x431;&amp;#x438;&amp;#x437;&amp;#x43D;&amp;#x435;&amp;#x441; &amp;#x43C;&amp;#x43E;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x438;&amp;#x442;&amp;#x435;.\n&amp;#x41A;&amp;#x43E;&amp;#x438;&amp;#x442;&amp;#x43E; &amp;#x441;&amp;#x430; &amp;#x43D;&amp;#x430;&amp;#x439;-&amp;#x447;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E; &amp;#x441;&amp;#x430; ActiveRecord &amp;#x43E;&amp;#x431;&amp;#x435;&amp;#x43A;&amp;#x442;&amp;#x438;, &amp;#x43A;&amp;#x43E;&amp;#x438;&amp;#x442;&amp;#x43E; &amp;#x441;&amp;#x438; &amp;#x432;&amp;#x437;&amp;#x430;&amp;#x438;&amp;#x43C;&amp;#x43E;&amp;#x434;&amp;#x435;&amp;#x439;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x430;&amp;#x442; &amp;#x441; &amp;#x431;&amp;#x430;&amp;#x437;&amp;#x430;&amp;#x442;&amp;#x430; &amp;#x43E;&amp;#x442; &amp;#x434;&amp;#x430;&amp;#x43D;&amp;#x43D;&amp;#x438;. \n&amp;#x421;&amp;#x43B;&amp;#x435;&amp;#x434; &amp;#x442;&amp;#x43E;&amp;#x432;&amp;#x430; &amp;#x43A;&amp;#x43E;&amp;#x43D;&amp;#x442;&amp;#x440;&amp;#x43E;&amp;#x43B;&amp;#x435;&amp;#x440;&amp;#x430; &amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x434;&amp;#x430;&amp;#x432;&amp;#x430; &amp;#x43C;&amp;#x43E;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x438;&amp;#x442;&amp;#x435; &amp;#x43D;&amp;#x430; View Layer-a, &amp;#x43A;&amp;#x43E;&amp;#x439;&amp;#x442;&amp;#x43E; &amp;#x433;&amp;#x435;&amp;#x43D;&amp;#x435;&amp;#x440;&amp;#x438;&amp;#x440;&amp;#x430; &amp;#x438; &amp;#x438;&amp;#x437;&amp;#x43F;&amp;#x440;&amp;#x430;&amp;#x449;&amp;#x430; &amp;#x43E;&amp;#x442;&amp;#x433;&amp;#x43E;&amp;#x432;&amp;#x43E;&amp;#x440; &amp;#x43D;&amp;#x430; &amp;#x431;&amp;#x440;&amp;#x430;&amp;#x443;&amp;#x437;&amp;#x44A;&amp;#x440;&amp;#x430;. &amp;#x41A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x442;&amp;#x43E;&amp;#x437;&amp;#x438; &amp;#x43E;&amp;#x442;&amp;#x433;&amp;#x43E;&amp;#x432;&amp;#x43E;&amp;#x440; &amp;#x43C;&amp;#x43E;&amp;#x436;&amp;#x435; &amp;#x434;&amp;#x430; &amp;#x435; html, xml, json, JavaScript &amp;#x438;&amp;#x43B;&amp;#x438; &amp;#x434;&amp;#x440;&amp;#x443;&amp;#x433; &amp;#x43A;&amp;#x43E;&amp;#x434;.\n\n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. Taskar e &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x435;&amp;#x43D; &amp;#x447;&amp;#x440;&amp;#x435;&amp;#x437; &amp;#xA0;&amp;#x422;est Driven Development &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434;&amp;#x43E;&amp;#x43B;&amp;#x43E;&amp;#x433;&amp;#x438;&amp;#x44F;&amp;#x442;&amp;#x430;, &amp;#x447;&amp;#x438;&amp;#x44F;&amp;#x442;&amp;#x43E; &amp;#x43E;&amp;#x441;&amp;#x43D;&amp;#x43E;&amp;#x432;&amp;#x43D;&amp;#x430; &amp;#x438;&amp;#x434;&amp;#x435;&amp;#x44F; &amp;#x435; &amp;#x434;&amp;#x430; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x438;&amp;#x448;&amp;#x435; &amp;#x43A;&amp;#x43E;&amp;#x434; &amp;#x432; 3 &amp;#x441;&amp;#x442;&amp;#x44A;&amp;#x43F;&amp;#x43A;&amp;#x438;:\n&amp;#x41F;&amp;#x44A;&amp;#x440;&amp;#x432;&amp;#x43E; &amp;#x441;&amp;#x435; &amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x430;&amp;#x432;&amp;#x44F; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;, &amp;#x437;&amp;#x430; &amp;#x432;&amp;#x441;&amp;#x435; &amp;#x43E;&amp;#x449;&amp;#x435; &amp;#x43D;&amp;#x435; &amp;#x441;&amp;#x44A;&amp;#x449;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x443;&amp;#x432;&amp;#x430;&amp;#x449; &amp;#x43A;&amp;#x43E;&amp;#x434;. &amp;#x41A;&amp;#x43E;&amp;#x439;&amp;#x442;&amp;#x43E; &amp;#x442;&amp;#x440;&amp;#x44F;&amp;#x431;&amp;#x432;&amp;#x430; &amp;#x434;&amp;#x430; &amp;#x441;&amp;#x435; &amp;#x43C;&amp;#x430;&amp;#x440;&amp;#x43A;&amp;#x438;&amp;#x440;&amp;#x430; &amp;#x43A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x43D;&amp;#x435; &amp;#x443;&amp;#x441;&amp;#x43F;&amp;#x435;&amp;#x448;&amp;#x435;&amp;#x43D;\n&amp;#x421;&amp;#x43B;&amp;#x435;&amp;#x434; &amp;#x442;&amp;#x43E;&amp;#x432;&amp;#x430; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x438;&amp;#x448;&amp;#x435; &amp;#x432;&amp;#x44A;&amp;#x437;&amp;#x43C;&amp;#x43E;&amp;#x436;&amp;#x43D;&amp;#x43E; &amp;#x43D;&amp;#x430;&amp;#x439;-&amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x438;&amp;#x44F; &amp;#x43A;&amp;#x43E;&amp;#x434;, &amp;#x441; &amp;#x43A;&amp;#x43E;&amp;#x439;&amp;#x442;&amp;#x43E; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x430; &amp;#x43C;&amp;#x438;&amp;#x43D;&amp;#x430;&amp;#x432;&amp;#x430; &amp;#x443;&amp;#x441;&amp;#x43F;&amp;#x435;&amp;#x448;&amp;#x43D;&amp;#x43E;.\n&amp;#x41D;&amp;#x430;&amp;#x43A;&amp;#x440;&amp;#x430;&amp;#x44F; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x440;&amp;#x430;&amp;#x432;&amp;#x44F;&amp;#x442; &amp;#x43F;&amp;#x43E;&amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x440;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F; &amp;#x43F;&amp;#x43E; &amp;#x43A;&amp;#x43E;&amp;#x434;&amp;#x430;, &amp;#x438;&amp;#x437;&amp;#x447;&amp;#x438;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x430;&amp;#x442; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x43E;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F;, &amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x430;&amp;#x432;&amp;#x44F;&amp;#x442; &amp;#x441;&amp;#x435; &amp;#x43D;&amp;#x43E;&amp;#x432;&amp;#x438; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E;&amp;#x432;&amp;#x435; &amp;#x438; &amp;#x434;&amp;#x440;&amp;#x443;&amp;#x433;&amp;#x438;.\n\n&amp;#x41A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x442;&amp;#x435;&amp;#x437;&amp;#x438; 3 &amp;#x441;&amp;#x442;&amp;#x44A;&amp;#x43F;&amp;#x43A;&amp;#x438; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x43E;&amp;#x432;&amp;#x442;&amp;#x430;&amp;#x440;&amp;#x44F;&amp;#x442; &amp;#x43D;&amp;#x435;&amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x43A;&amp;#x44A;&amp;#x441;&amp;#x43D;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x432; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x446;&amp;#x435;&amp;#x441;&amp;#x430; &amp;#x43D;&amp;#x430; &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x43A;&amp;#x430;. &amp;#x41A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x446;&amp;#x44F;&amp;#x43B;&amp;#x43E; &amp;#x442;&amp;#x43E;&amp;#x437;&amp;#x438; &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434; &amp;#x43D;&amp;#x430; &amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x430; &amp;#x433;&amp;#x430;&amp;#x440;&amp;#x430;&amp;#x43D;&amp;#x442;&amp;#x438;&amp;#x440;&amp;#x430; &amp;#x447;&amp;#x435; 100% &amp;#x43E;&amp;#x442; &amp;#x43A;&amp;#x43E;&amp;#x434;&amp;#x430; &amp;#x449;&amp;#x435; &amp;#x435; &amp;#x43F;&amp;#x43E;&amp;#x43A;&amp;#x440;&amp;#x438;&amp;#x442; &amp;#x441; &amp;#x430;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x43C;&amp;#x430;&amp;#x442;&amp;#x438;&amp;#x447;&amp;#x43D;&amp;#x438; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E;&amp;#x432;&amp;#x435;. &amp;#x41A;&amp;#x43E;&amp;#x435;&amp;#x442;&amp;#x43E; &amp;#x433;&amp;#x43E; &amp;#x43F;&amp;#x440;&amp;#x430;&amp;#x432;&amp;#x438; &amp;#x43B;&amp;#x435;&amp;#x441;&amp;#x435;&amp;#x43D; &amp;#x437;&amp;#x430; &amp;#x43F;&amp;#x43E;&amp;#x434;&amp;#x434;&amp;#x440;&amp;#x44A;&amp;#x436;&amp;#x43A;&amp;#x430; &amp;#x438; &amp;#x441; &amp;#x43F;&amp;#x43E;--&amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x44A;&amp;#x440; &amp;#x434;&amp;#x438;&amp;#x437;&amp;#x430;&amp;#x439;&amp;#x43D;. &amp;#xA0;&amp;#x422;&amp;#x43E;&amp;#x432;&amp;#x430; &amp;#x43E;&amp;#x449;&amp;#x435; &amp;#x441;&amp;#x435; &amp;#x43D;&amp;#x430;&amp;#x440;&amp;#x438;&amp;#x447;&amp;#x430; Red-Green-Blue &amp;#x43D;&amp;#x430;&amp;#x447;&amp;#x438;&amp;#x43D; &amp;#x43D;&amp;#x430; &amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x430;.\n&amp;#xA0;\n\n
  75. Taskar e &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x435;&amp;#x43D; &amp;#x447;&amp;#x440;&amp;#x435;&amp;#x437; &amp;#xA0;&amp;#x422;est Driven Development &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434;&amp;#x43E;&amp;#x43B;&amp;#x43E;&amp;#x433;&amp;#x438;&amp;#x44F;&amp;#x442;&amp;#x430;, &amp;#x447;&amp;#x438;&amp;#x44F;&amp;#x442;&amp;#x43E; &amp;#x43E;&amp;#x441;&amp;#x43D;&amp;#x43E;&amp;#x432;&amp;#x43D;&amp;#x430; &amp;#x438;&amp;#x434;&amp;#x435;&amp;#x44F; &amp;#x435; &amp;#x434;&amp;#x430; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x438;&amp;#x448;&amp;#x435; &amp;#x43A;&amp;#x43E;&amp;#x434; &amp;#x432; 3 &amp;#x441;&amp;#x442;&amp;#x44A;&amp;#x43F;&amp;#x43A;&amp;#x438;:\n&amp;#x41F;&amp;#x44A;&amp;#x440;&amp;#x432;&amp;#x43E; &amp;#x441;&amp;#x435; &amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x430;&amp;#x432;&amp;#x44F; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;, &amp;#x437;&amp;#x430; &amp;#x432;&amp;#x441;&amp;#x435; &amp;#x43E;&amp;#x449;&amp;#x435; &amp;#x43D;&amp;#x435; &amp;#x441;&amp;#x44A;&amp;#x449;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x443;&amp;#x432;&amp;#x430;&amp;#x449; &amp;#x43A;&amp;#x43E;&amp;#x434;. &amp;#x41A;&amp;#x43E;&amp;#x439;&amp;#x442;&amp;#x43E; &amp;#x442;&amp;#x440;&amp;#x44F;&amp;#x431;&amp;#x432;&amp;#x430; &amp;#x434;&amp;#x430; &amp;#x441;&amp;#x435; &amp;#x43C;&amp;#x430;&amp;#x440;&amp;#x43A;&amp;#x438;&amp;#x440;&amp;#x430; &amp;#x43A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x43D;&amp;#x435; &amp;#x443;&amp;#x441;&amp;#x43F;&amp;#x435;&amp;#x448;&amp;#x435;&amp;#x43D;\n&amp;#x421;&amp;#x43B;&amp;#x435;&amp;#x434; &amp;#x442;&amp;#x43E;&amp;#x432;&amp;#x430; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x438;&amp;#x448;&amp;#x435; &amp;#x432;&amp;#x44A;&amp;#x437;&amp;#x43C;&amp;#x43E;&amp;#x436;&amp;#x43D;&amp;#x43E; &amp;#x43D;&amp;#x430;&amp;#x439;-&amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x438;&amp;#x44F; &amp;#x43A;&amp;#x43E;&amp;#x434;, &amp;#x441; &amp;#x43A;&amp;#x43E;&amp;#x439;&amp;#x442;&amp;#x43E; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x430; &amp;#x43C;&amp;#x438;&amp;#x43D;&amp;#x430;&amp;#x432;&amp;#x430; &amp;#x443;&amp;#x441;&amp;#x43F;&amp;#x435;&amp;#x448;&amp;#x43D;&amp;#x43E;.\n&amp;#x41D;&amp;#x430;&amp;#x43A;&amp;#x440;&amp;#x430;&amp;#x44F; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x440;&amp;#x430;&amp;#x432;&amp;#x44F;&amp;#x442; &amp;#x43F;&amp;#x43E;&amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x440;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F; &amp;#x43F;&amp;#x43E; &amp;#x43A;&amp;#x43E;&amp;#x434;&amp;#x430;, &amp;#x438;&amp;#x437;&amp;#x447;&amp;#x438;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x430;&amp;#x442; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x43E;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F;, &amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x430;&amp;#x432;&amp;#x44F;&amp;#x442; &amp;#x441;&amp;#x435; &amp;#x43D;&amp;#x43E;&amp;#x432;&amp;#x438; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E;&amp;#x432;&amp;#x435; &amp;#x438; &amp;#x434;&amp;#x440;&amp;#x443;&amp;#x433;&amp;#x438;.\n\n&amp;#x41A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x442;&amp;#x435;&amp;#x437;&amp;#x438; 3 &amp;#x441;&amp;#x442;&amp;#x44A;&amp;#x43F;&amp;#x43A;&amp;#x438; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x43E;&amp;#x432;&amp;#x442;&amp;#x430;&amp;#x440;&amp;#x44F;&amp;#x442; &amp;#x43D;&amp;#x435;&amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x43A;&amp;#x44A;&amp;#x441;&amp;#x43D;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x432; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x446;&amp;#x435;&amp;#x441;&amp;#x430; &amp;#x43D;&amp;#x430; &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x43A;&amp;#x430;. &amp;#x41A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x446;&amp;#x44F;&amp;#x43B;&amp;#x43E; &amp;#x442;&amp;#x43E;&amp;#x437;&amp;#x438; &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434; &amp;#x43D;&amp;#x430; &amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x430; &amp;#x433;&amp;#x430;&amp;#x440;&amp;#x430;&amp;#x43D;&amp;#x442;&amp;#x438;&amp;#x440;&amp;#x430; &amp;#x447;&amp;#x435; 100% &amp;#x43E;&amp;#x442; &amp;#x43A;&amp;#x43E;&amp;#x434;&amp;#x430; &amp;#x449;&amp;#x435; &amp;#x435; &amp;#x43F;&amp;#x43E;&amp;#x43A;&amp;#x440;&amp;#x438;&amp;#x442; &amp;#x441; &amp;#x430;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x43C;&amp;#x430;&amp;#x442;&amp;#x438;&amp;#x447;&amp;#x43D;&amp;#x438; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E;&amp;#x432;&amp;#x435;. &amp;#x41A;&amp;#x43E;&amp;#x435;&amp;#x442;&amp;#x43E; &amp;#x433;&amp;#x43E; &amp;#x43F;&amp;#x440;&amp;#x430;&amp;#x432;&amp;#x438; &amp;#x43B;&amp;#x435;&amp;#x441;&amp;#x435;&amp;#x43D; &amp;#x437;&amp;#x430; &amp;#x43F;&amp;#x43E;&amp;#x434;&amp;#x434;&amp;#x440;&amp;#x44A;&amp;#x436;&amp;#x43A;&amp;#x430; &amp;#x438; &amp;#x441; &amp;#x43F;&amp;#x43E;--&amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x44A;&amp;#x440; &amp;#x434;&amp;#x438;&amp;#x437;&amp;#x430;&amp;#x439;&amp;#x43D;. &amp;#xA0;&amp;#x422;&amp;#x43E;&amp;#x432;&amp;#x430; &amp;#x43E;&amp;#x449;&amp;#x435; &amp;#x441;&amp;#x435; &amp;#x43D;&amp;#x430;&amp;#x440;&amp;#x438;&amp;#x447;&amp;#x430; Red-Green-Blue &amp;#x43D;&amp;#x430;&amp;#x447;&amp;#x438;&amp;#x43D; &amp;#x43D;&amp;#x430; &amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x430;.\n&amp;#xA0;\n\n
  76. Taskar e &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x435;&amp;#x43D; &amp;#x447;&amp;#x440;&amp;#x435;&amp;#x437; &amp;#xA0;&amp;#x422;est Driven Development &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434;&amp;#x43E;&amp;#x43B;&amp;#x43E;&amp;#x433;&amp;#x438;&amp;#x44F;&amp;#x442;&amp;#x430;, &amp;#x447;&amp;#x438;&amp;#x44F;&amp;#x442;&amp;#x43E; &amp;#x43E;&amp;#x441;&amp;#x43D;&amp;#x43E;&amp;#x432;&amp;#x43D;&amp;#x430; &amp;#x438;&amp;#x434;&amp;#x435;&amp;#x44F; &amp;#x435; &amp;#x434;&amp;#x430; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x438;&amp;#x448;&amp;#x435; &amp;#x43A;&amp;#x43E;&amp;#x434; &amp;#x432; 3 &amp;#x441;&amp;#x442;&amp;#x44A;&amp;#x43F;&amp;#x43A;&amp;#x438;:\n&amp;#x41F;&amp;#x44A;&amp;#x440;&amp;#x432;&amp;#x43E; &amp;#x441;&amp;#x435; &amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x430;&amp;#x432;&amp;#x44F; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;, &amp;#x437;&amp;#x430; &amp;#x432;&amp;#x441;&amp;#x435; &amp;#x43E;&amp;#x449;&amp;#x435; &amp;#x43D;&amp;#x435; &amp;#x441;&amp;#x44A;&amp;#x449;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x443;&amp;#x432;&amp;#x430;&amp;#x449; &amp;#x43A;&amp;#x43E;&amp;#x434;. &amp;#x41A;&amp;#x43E;&amp;#x439;&amp;#x442;&amp;#x43E; &amp;#x442;&amp;#x440;&amp;#x44F;&amp;#x431;&amp;#x432;&amp;#x430; &amp;#x434;&amp;#x430; &amp;#x441;&amp;#x435; &amp;#x43C;&amp;#x430;&amp;#x440;&amp;#x43A;&amp;#x438;&amp;#x440;&amp;#x430; &amp;#x43A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x43D;&amp;#x435; &amp;#x443;&amp;#x441;&amp;#x43F;&amp;#x435;&amp;#x448;&amp;#x435;&amp;#x43D;\n&amp;#x421;&amp;#x43B;&amp;#x435;&amp;#x434; &amp;#x442;&amp;#x43E;&amp;#x432;&amp;#x430; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x438;&amp;#x448;&amp;#x435; &amp;#x432;&amp;#x44A;&amp;#x437;&amp;#x43C;&amp;#x43E;&amp;#x436;&amp;#x43D;&amp;#x43E; &amp;#x43D;&amp;#x430;&amp;#x439;-&amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x438;&amp;#x44F; &amp;#x43A;&amp;#x43E;&amp;#x434;, &amp;#x441; &amp;#x43A;&amp;#x43E;&amp;#x439;&amp;#x442;&amp;#x43E; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x430; &amp;#x43C;&amp;#x438;&amp;#x43D;&amp;#x430;&amp;#x432;&amp;#x430; &amp;#x443;&amp;#x441;&amp;#x43F;&amp;#x435;&amp;#x448;&amp;#x43D;&amp;#x43E;.\n&amp;#x41D;&amp;#x430;&amp;#x43A;&amp;#x440;&amp;#x430;&amp;#x44F; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x440;&amp;#x430;&amp;#x432;&amp;#x44F;&amp;#x442; &amp;#x43F;&amp;#x43E;&amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x440;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F; &amp;#x43F;&amp;#x43E; &amp;#x43A;&amp;#x43E;&amp;#x434;&amp;#x430;, &amp;#x438;&amp;#x437;&amp;#x447;&amp;#x438;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x430;&amp;#x442; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x43E;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F;, &amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x430;&amp;#x432;&amp;#x44F;&amp;#x442; &amp;#x441;&amp;#x435; &amp;#x43D;&amp;#x43E;&amp;#x432;&amp;#x438; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E;&amp;#x432;&amp;#x435; &amp;#x438; &amp;#x434;&amp;#x440;&amp;#x443;&amp;#x433;&amp;#x438;.\n\n&amp;#x41A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x442;&amp;#x435;&amp;#x437;&amp;#x438; 3 &amp;#x441;&amp;#x442;&amp;#x44A;&amp;#x43F;&amp;#x43A;&amp;#x438; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x43E;&amp;#x432;&amp;#x442;&amp;#x430;&amp;#x440;&amp;#x44F;&amp;#x442; &amp;#x43D;&amp;#x435;&amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x43A;&amp;#x44A;&amp;#x441;&amp;#x43D;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x432; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x446;&amp;#x435;&amp;#x441;&amp;#x430; &amp;#x43D;&amp;#x430; &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x43A;&amp;#x430;. &amp;#x41A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x446;&amp;#x44F;&amp;#x43B;&amp;#x43E; &amp;#x442;&amp;#x43E;&amp;#x437;&amp;#x438; &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434; &amp;#x43D;&amp;#x430; &amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x430; &amp;#x433;&amp;#x430;&amp;#x440;&amp;#x430;&amp;#x43D;&amp;#x442;&amp;#x438;&amp;#x440;&amp;#x430; &amp;#x447;&amp;#x435; 100% &amp;#x43E;&amp;#x442; &amp;#x43A;&amp;#x43E;&amp;#x434;&amp;#x430; &amp;#x449;&amp;#x435; &amp;#x435; &amp;#x43F;&amp;#x43E;&amp;#x43A;&amp;#x440;&amp;#x438;&amp;#x442; &amp;#x441; &amp;#x430;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x43C;&amp;#x430;&amp;#x442;&amp;#x438;&amp;#x447;&amp;#x43D;&amp;#x438; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E;&amp;#x432;&amp;#x435;. &amp;#x41A;&amp;#x43E;&amp;#x435;&amp;#x442;&amp;#x43E; &amp;#x433;&amp;#x43E; &amp;#x43F;&amp;#x440;&amp;#x430;&amp;#x432;&amp;#x438; &amp;#x43B;&amp;#x435;&amp;#x441;&amp;#x435;&amp;#x43D; &amp;#x437;&amp;#x430; &amp;#x43F;&amp;#x43E;&amp;#x434;&amp;#x434;&amp;#x440;&amp;#x44A;&amp;#x436;&amp;#x43A;&amp;#x430; &amp;#x438; &amp;#x441; &amp;#x43F;&amp;#x43E;--&amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x44A;&amp;#x440; &amp;#x434;&amp;#x438;&amp;#x437;&amp;#x430;&amp;#x439;&amp;#x43D;. &amp;#xA0;&amp;#x422;&amp;#x43E;&amp;#x432;&amp;#x430; &amp;#x43E;&amp;#x449;&amp;#x435; &amp;#x441;&amp;#x435; &amp;#x43D;&amp;#x430;&amp;#x440;&amp;#x438;&amp;#x447;&amp;#x430; Red-Green-Blue &amp;#x43D;&amp;#x430;&amp;#x447;&amp;#x438;&amp;#x43D; &amp;#x43D;&amp;#x430; &amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x430;.\n&amp;#xA0;\n\n
  77. Taskar e &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x435;&amp;#x43D; &amp;#x447;&amp;#x440;&amp;#x435;&amp;#x437; &amp;#xA0;&amp;#x422;est Driven Development &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434;&amp;#x43E;&amp;#x43B;&amp;#x43E;&amp;#x433;&amp;#x438;&amp;#x44F;&amp;#x442;&amp;#x430;, &amp;#x447;&amp;#x438;&amp;#x44F;&amp;#x442;&amp;#x43E; &amp;#x43E;&amp;#x441;&amp;#x43D;&amp;#x43E;&amp;#x432;&amp;#x43D;&amp;#x430; &amp;#x438;&amp;#x434;&amp;#x435;&amp;#x44F; &amp;#x435; &amp;#x434;&amp;#x430; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x438;&amp;#x448;&amp;#x435; &amp;#x43A;&amp;#x43E;&amp;#x434; &amp;#x432; 3 &amp;#x441;&amp;#x442;&amp;#x44A;&amp;#x43F;&amp;#x43A;&amp;#x438;:\n&amp;#x41F;&amp;#x44A;&amp;#x440;&amp;#x432;&amp;#x43E; &amp;#x441;&amp;#x435; &amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x430;&amp;#x432;&amp;#x44F; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;, &amp;#x437;&amp;#x430; &amp;#x432;&amp;#x441;&amp;#x435; &amp;#x43E;&amp;#x449;&amp;#x435; &amp;#x43D;&amp;#x435; &amp;#x441;&amp;#x44A;&amp;#x449;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x443;&amp;#x432;&amp;#x430;&amp;#x449; &amp;#x43A;&amp;#x43E;&amp;#x434;. &amp;#x41A;&amp;#x43E;&amp;#x439;&amp;#x442;&amp;#x43E; &amp;#x442;&amp;#x440;&amp;#x44F;&amp;#x431;&amp;#x432;&amp;#x430; &amp;#x434;&amp;#x430; &amp;#x441;&amp;#x435; &amp;#x43C;&amp;#x430;&amp;#x440;&amp;#x43A;&amp;#x438;&amp;#x440;&amp;#x430; &amp;#x43A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x43D;&amp;#x435; &amp;#x443;&amp;#x441;&amp;#x43F;&amp;#x435;&amp;#x448;&amp;#x435;&amp;#x43D;\n&amp;#x421;&amp;#x43B;&amp;#x435;&amp;#x434; &amp;#x442;&amp;#x43E;&amp;#x432;&amp;#x430; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x438;&amp;#x448;&amp;#x435; &amp;#x432;&amp;#x44A;&amp;#x437;&amp;#x43C;&amp;#x43E;&amp;#x436;&amp;#x43D;&amp;#x43E; &amp;#x43D;&amp;#x430;&amp;#x439;-&amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x438;&amp;#x44F; &amp;#x43A;&amp;#x43E;&amp;#x434;, &amp;#x441; &amp;#x43A;&amp;#x43E;&amp;#x439;&amp;#x442;&amp;#x43E; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x430; &amp;#x43C;&amp;#x438;&amp;#x43D;&amp;#x430;&amp;#x432;&amp;#x430; &amp;#x443;&amp;#x441;&amp;#x43F;&amp;#x435;&amp;#x448;&amp;#x43D;&amp;#x43E;.\n&amp;#x41D;&amp;#x430;&amp;#x43A;&amp;#x440;&amp;#x430;&amp;#x44F; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x440;&amp;#x430;&amp;#x432;&amp;#x44F;&amp;#x442; &amp;#x43F;&amp;#x43E;&amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x440;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F; &amp;#x43F;&amp;#x43E; &amp;#x43A;&amp;#x43E;&amp;#x434;&amp;#x430;, &amp;#x438;&amp;#x437;&amp;#x447;&amp;#x438;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x430;&amp;#x442; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x43E;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F;, &amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x430;&amp;#x432;&amp;#x44F;&amp;#x442; &amp;#x441;&amp;#x435; &amp;#x43D;&amp;#x43E;&amp;#x432;&amp;#x438; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E;&amp;#x432;&amp;#x435; &amp;#x438; &amp;#x434;&amp;#x440;&amp;#x443;&amp;#x433;&amp;#x438;.\n\n&amp;#x41A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x442;&amp;#x435;&amp;#x437;&amp;#x438; 3 &amp;#x441;&amp;#x442;&amp;#x44A;&amp;#x43F;&amp;#x43A;&amp;#x438; &amp;#x441;&amp;#x435; &amp;#x43F;&amp;#x43E;&amp;#x432;&amp;#x442;&amp;#x430;&amp;#x440;&amp;#x44F;&amp;#x442; &amp;#x43D;&amp;#x435;&amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x43A;&amp;#x44A;&amp;#x441;&amp;#x43D;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x432; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x446;&amp;#x435;&amp;#x441;&amp;#x430; &amp;#x43D;&amp;#x430; &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x43A;&amp;#x430;. &amp;#x41A;&amp;#x430;&amp;#x442;&amp;#x43E; &amp;#x446;&amp;#x44F;&amp;#x43B;&amp;#x43E; &amp;#x442;&amp;#x43E;&amp;#x437;&amp;#x438; &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434; &amp;#x43D;&amp;#x430; &amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x430; &amp;#x433;&amp;#x430;&amp;#x440;&amp;#x430;&amp;#x43D;&amp;#x442;&amp;#x438;&amp;#x440;&amp;#x430; &amp;#x447;&amp;#x435; 100% &amp;#x43E;&amp;#x442; &amp;#x43A;&amp;#x43E;&amp;#x434;&amp;#x430; &amp;#x449;&amp;#x435; &amp;#x435; &amp;#x43F;&amp;#x43E;&amp;#x43A;&amp;#x440;&amp;#x438;&amp;#x442; &amp;#x441; &amp;#x430;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x43C;&amp;#x430;&amp;#x442;&amp;#x438;&amp;#x447;&amp;#x43D;&amp;#x438; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E;&amp;#x432;&amp;#x435;. &amp;#x41A;&amp;#x43E;&amp;#x435;&amp;#x442;&amp;#x43E; &amp;#x433;&amp;#x43E; &amp;#x43F;&amp;#x440;&amp;#x430;&amp;#x432;&amp;#x438; &amp;#x43B;&amp;#x435;&amp;#x441;&amp;#x435;&amp;#x43D; &amp;#x437;&amp;#x430; &amp;#x43F;&amp;#x43E;&amp;#x434;&amp;#x434;&amp;#x440;&amp;#x44A;&amp;#x436;&amp;#x43A;&amp;#x430; &amp;#x438; &amp;#x441; &amp;#x43F;&amp;#x43E;--&amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x44A;&amp;#x440; &amp;#x434;&amp;#x438;&amp;#x437;&amp;#x430;&amp;#x439;&amp;#x43D;. &amp;#xA0;&amp;#x422;&amp;#x43E;&amp;#x432;&amp;#x430; &amp;#x43E;&amp;#x449;&amp;#x435; &amp;#x441;&amp;#x435; &amp;#x43D;&amp;#x430;&amp;#x440;&amp;#x438;&amp;#x447;&amp;#x430; Red-Green-Blue &amp;#x43D;&amp;#x430;&amp;#x447;&amp;#x438;&amp;#x43D; &amp;#x43D;&amp;#x430; &amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x430;.\n&amp;#xA0;\n\n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n