SlideShare a Scribd company logo
Защо Ruby и Rails ?




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

@rstankov




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

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

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

 Създаден от японеца Юкихиро
 Мацумото „Мац“.
 Първата публична версия излиза
 през 1995.
 Версия 2.0 се очакава да излезе за
 Коледа / не се казва коя /
Why ruby
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
•   димично определяне на типа данните
•   модули
•   отворени класове
•   блокове
•   анонимни функции
•   всяка операция връща резултат
•   всичко е изпълним код
•   изчистен синтаксис
•   мета програмиране
•   промяна на обектите по време на изпълнение
•   вградени регулярни изрази
Why ruby
Why ruby
Why ruby
Ruby on Rails
          Разработен от David
     Heinemeier Hansson от 37
     Signals.
     Първата публична версия е
     излиза през юли 2004.
     Текущата стабилна версия
     е 3.0.3
Why ruby
Why ruby
Why ruby
37signals




  Милиони клиенти ... по-малко от 37 служителя
Why ruby
Why ruby
Why ruby
Why ruby
Why ruby
MVC Архитектура
Начин на работа
Why ruby
Why ruby
Why ruby
Why ruby
Why ruby
Why ruby
Why ruby
Why ruby
Why ruby
Why ruby
Why ruby
Why ruby
Why ruby
Why ruby
Why ruby
Why ruby
Why ruby
Why ruby
Why ruby
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
Why ruby
Благодаря за вниманието



@rstankov
Ad

More Related Content

What's hot (19)

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
Thomas 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 2015
Konstantin Kudryashov
 
jQuery from the very beginning
jQuery from the very beginningjQuery from the very beginning
jQuery from the very beginning
Anis Ahmad
 
Node.js in action
Node.js in actionNode.js in action
Node.js in action
Simon Su
 
Workshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScriptWorkshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScript
Visual Engineering
 
Min-Maxing Software Costs
Min-Maxing Software CostsMin-Maxing Software Costs
Min-Maxing Software Costs
Konstantin Kudryashov
 
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 Developer
Jon 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 DIC
Konstantin Kudryashov
 
Dollar symbol
Dollar symbolDollar symbol
Dollar symbol
Aaron Huang
 
5 Tips for Better JavaScript
5 Tips for Better JavaScript5 Tips for Better JavaScript
5 Tips for Better JavaScript
Todd Anglin
 
Testable, Object-Oriented JavaScript
Testable, Object-Oriented JavaScriptTestable, Object-Oriented JavaScript
Testable, Object-Oriented JavaScript
Jon Kruger
 
Crafting beautiful software
Crafting beautiful softwareCrafting beautiful software
Crafting beautiful software
Jorn 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 need
Kacper Gunia
 
Frontin like-a-backer
Frontin like-a-backerFrontin like-a-backer
Frontin like-a-backer
Frank de Jonge
 
06 jQuery #burningkeyboards
06 jQuery  #burningkeyboards06 jQuery  #burningkeyboards
06 jQuery #burningkeyboards
Denis 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.5
Leonardo Proietti
 
05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards
Denis 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
 
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
Thomas 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 2015
Konstantin Kudryashov
 
jQuery from the very beginning
jQuery from the very beginningjQuery from the very beginning
jQuery from the very beginning
Anis Ahmad
 
Node.js in action
Node.js in actionNode.js in action
Node.js in action
Simon Su
 
Workshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScriptWorkshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScript
Visual 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 Developer
Jon 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 DIC
Konstantin Kudryashov
 
5 Tips for Better JavaScript
5 Tips for Better JavaScript5 Tips for Better JavaScript
5 Tips for Better JavaScript
Todd Anglin
 
Testable, Object-Oriented JavaScript
Testable, Object-Oriented JavaScriptTestable, Object-Oriented JavaScript
Testable, Object-Oriented JavaScript
Jon Kruger
 
Crafting beautiful software
Crafting beautiful softwareCrafting beautiful software
Crafting beautiful software
Jorn 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 need
Kacper Gunia
 
06 jQuery #burningkeyboards
06 jQuery  #burningkeyboards06 jQuery  #burningkeyboards
06 jQuery #burningkeyboards
Denis 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.5
Leonardo Proietti
 
05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards
Denis 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
 

Similar to Why ruby (20)

Ruby/Rails
Ruby/RailsRuby/Rails
Ruby/Rails
rstankov
 
Ruby on Rails ステップアップ講座 - 大場寧子
Ruby on Rails ステップアップ講座 - 大場寧子Ruby on Rails ステップアップ講座 - 大場寧子
Ruby on Rails ステップアップ講座 - 大場寧子
Yasuko Ohba
 
Metaprogramovanie #1
Metaprogramovanie #1Metaprogramovanie #1
Metaprogramovanie #1
Jano Suchal
 
CoffeeScript - A Rubyist's Love Affair
CoffeeScript - A Rubyist's Love AffairCoffeeScript - A Rubyist's Love Affair
CoffeeScript - A Rubyist's Love Affair
Mark
 
SOLID Ruby, SOLID Rails
SOLID Ruby, SOLID RailsSOLID Ruby, SOLID Rails
SOLID Ruby, SOLID Rails
Jens-Christian Fischer
 
Story for a Ruby on Rails Single Engineer
Story for a Ruby on Rails Single EngineerStory for a Ruby on Rails Single Engineer
Story for a Ruby on Rails Single Engineer
TylerJohnson988371
 
Desarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosDesarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutos
Edgar Suarez
 
Postobjektové programovanie v Ruby
Postobjektové programovanie v RubyPostobjektové programovanie v Ruby
Postobjektové programovanie v Ruby
Jano 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 '11
Pedro Cunha
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
bryanbibat
 
Ruby on Rails testing with Rspec
Ruby on Rails testing with RspecRuby on Rails testing with Rspec
Ruby on Rails testing with Rspec
Bunlong Van
 
How To Test Everything
How To Test EverythingHow To Test Everything
How To Test Everything
noelrap
 
Rails2 Pr
Rails2 PrRails2 Pr
Rails2 Pr
xibbar
 
Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子
Yasuko Ohba
 
An introduction to Ruby
An introduction to RubyAn introduction to Ruby
An introduction to Ruby
Wes Oldenbeuving
 
Blocks by Lachs Cox
Blocks by Lachs CoxBlocks by Lachs Cox
Blocks by Lachs Cox
lachie
 
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
Brian Hogan
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
Yehuda Katz
 
More to RoC weibo
More to RoC weiboMore to RoC weibo
More to RoC weibo
shaokun
 
Simple restfull app_s
Simple restfull app_sSimple restfull app_s
Simple restfull app_s
netwix
 
Ruby/Rails
Ruby/RailsRuby/Rails
Ruby/Rails
rstankov
 
Ruby on Rails ステップアップ講座 - 大場寧子
Ruby on Rails ステップアップ講座 - 大場寧子Ruby on Rails ステップアップ講座 - 大場寧子
Ruby on Rails ステップアップ講座 - 大場寧子
Yasuko Ohba
 
Metaprogramovanie #1
Metaprogramovanie #1Metaprogramovanie #1
Metaprogramovanie #1
Jano Suchal
 
CoffeeScript - A Rubyist's Love Affair
CoffeeScript - A Rubyist's Love AffairCoffeeScript - A Rubyist's Love Affair
CoffeeScript - A Rubyist's Love Affair
Mark
 
Story for a Ruby on Rails Single Engineer
Story for a Ruby on Rails Single EngineerStory for a Ruby on Rails Single Engineer
Story for a Ruby on Rails Single Engineer
TylerJohnson988371
 
Desarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosDesarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutos
Edgar Suarez
 
Postobjektové programovanie v Ruby
Postobjektové programovanie v RubyPostobjektové programovanie v Ruby
Postobjektové programovanie v Ruby
Jano 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 '11
Pedro Cunha
 
Ruby on Rails testing with Rspec
Ruby on Rails testing with RspecRuby on Rails testing with Rspec
Ruby on Rails testing with Rspec
Bunlong Van
 
How To Test Everything
How To Test EverythingHow To Test Everything
How To Test Everything
noelrap
 
Rails2 Pr
Rails2 PrRails2 Pr
Rails2 Pr
xibbar
 
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 Cox
lachie
 
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
Brian Hogan
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
Yehuda Katz
 
More to RoC weibo
More to RoC weiboMore to RoC weibo
More to RoC weibo
shaokun
 
Simple restfull app_s
Simple restfull app_sSimple restfull app_s
Simple restfull app_s
netwix
 
Ad

Recently uploaded (20)

Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Ad

Why ruby

  • 1. Защо Ruby и Rails ? Радослав Станков Ruby on Rails семинар – Варненски свободен университет 2010
  • 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 се очакава да излезе за Коледа / не се казва коя /
  • 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 • димично определяне на типа данните • модули • отворени класове • блокове • анонимни функции • всяка операция връща резултат • всичко е изпълним код • изчистен синтаксис • мета програмиране • промяна на обектите по време на изпълнение • вградени регулярни изрази
  • 36. Ruby on Rails Разработен от David Heinemeier Hansson от 37 Signals. Първата публична версия е излиза през юли 2004. Текущата стабилна версия е 3.0.3
  • 40. 37signals Милиони клиенти ... по-малко от 37 служителя
  • 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

Editor's Notes

  • #2: \n
  • #3: \n
  • #4: \n
  • #5: \n
  • #6: \n
  • #7: 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
  • #8: &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
  • #9: &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
  • #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: \n
  • #33: &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
  • #34: \n
  • #35: \n
  • #36: &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
  • #37: \n
  • #38: \n
  • #39: \n
  • #40: \n
  • #41: \n
  • #42: \n
  • #43: \n
  • #44: \n
  • #45: 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
  • #46: &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
  • #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: \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: 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
  • #79: \n
  • #80: \n
  • #81: \n
  • #82: \n
  • #83: \n