Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Защо да учим (Ruby и Rails)

Защо да учим (Ruby и Rails)

Накратко за ползите от ученето на нови неща и на какво точно конкретно са ме научили Ruby като език за програмиране и Ruby on Rails като уеб фреймуърк. Няколко примера как съм приложил наученото в един legacy PHP проект.

Dimitar Dimitrov

July 06, 2013
Tweet

More Decks by Dimitar Dimitrov

Other Decks in Programming

Transcript

  1. View Slide

  2. Защо да учим
    (Ruby и Rails)
    Димитър Димитров,
    PlovdivConf 2013
    plovdivconf.com

    View Slide

  3. Здравейте!

    View Slide

  4. John Doe
    http://ddimitrov.name
    @mitio в Twitter
    Лайв ООД
    Пиша основно уеб с Ruby on Rails
    и освирквам заслужили депутати

    View Slide

  5. Учене

    View Slide

  6. Ruby

    View Slide

  7. Ruby on Rails

    View Slide

  8. Защо да учим?

    View Slide

  9. Ще бъда кратък...

    View Slide

  10. Имам 1337 слайда с
    аргументи защо

    View Slide

  11. View Slide

  12. Защо Rust? Защо Ruby?

    View Slide

  13. Защо Rust? Защо Ruby?

    View Slide

  14. Защо Clojure?

    View Slide

  15. Защо Groovy и Grails?

    View Slide

  16. Защо <език>?
    Защо <технология>?

    View Slide

  17. “Раждаме се тъпи.
    Целта е да умрем една
    идея по-малко тъпи.”
    — Митьо Питона

    View Slide

  18. Slides with pics or it
    isn’t true

    View Slide

  19. Ruby

    View Slide

  20. Идвам от PHP
    бекграунд и бях зле!
    (PHP-то беше отдавна.
    Все още съм зле. Да си го кажем.)

    View Slide

  21. Уеб и PHP

    View Slide

  22. Световно известни
    PHP проекти

    View Slide

  23. Световно известни
    PHP проекти
    • album.bg

    View Slide

  24. Световно известни
    PHP проекти
    • album.bg
    • Беше трети по трафик в България

    View Slide

  25. Световно известни
    PHP проекти
    • album.bg
    • Беше трети по трафик в България
    • Клонинг на Flickr

    View Slide

  26. Световно известни
    PHP проекти
    • album.bg
    • Беше трети по трафик в България
    • Клонинг на Flickr
    • Написан на PHP

    View Slide

  27. Световно известни
    PHP проекти
    • album.bg
    • Беше трети по трафик в България
    • Клонинг на Flickr
    • Написан на PHP
    • Отдавна не е наша собственост и,
    съответно, отдавна не е трети по трафик :)

    View Slide

  28. Световно известни
    PHP проекти
    • album.bg
    • Беше трети по трафик в България
    • Клонинг на Flickr
    • Написан на PHP
    • Отдавна не е наша собственост и,
    съответно, отдавна не е трети по трафик :)
    • Работеше прилично бързо

    View Slide

  29. Световно известни
    PHP проекти
    • album.bg
    • Беше трети по трафик в България
    • Клонинг на Flickr
    • Написан на PHP
    • Отдавна не е наша собственост и,
    съответно, отдавна не е трети по трафик :)
    • Работеше прилично бързо
    • Беше приличен проект (въпреки PHP-то)

    View Slide

  30. Окей е да пишете на
    PHP
    (Ако не си затваряте очите за останалия свят)

    View Slide

  31. “Ruby промени изцяло
    начина ми на мислене.”
    — Петко Мъдрия

    View Slide

  32. Ruby

    View Slide

  33. Ruby накратко

    View Slide

  34. Ruby накратко
    • Скриптов (интерпретируем) език,
    подобно на PHP, Python, Perl и други

    View Slide

  35. Ruby накратко
    • Скриптов (интерпретируем) език,
    подобно на PHP, Python, Perl и други
    • Отворен код

    View Slide

  36. Ruby накратко
    • Скриптов (интерпретируем) език,
    подобно на PHP, Python, Perl и други
    • Отворен код
    • Набрал доста голяма популярност вече
    (особено в Силиконовата долина)

    View Slide

  37. Ruby накратко
    • Скриптов (интерпретируем) език,
    подобно на PHP, Python, Perl и други
    • Отворен код
    • Набрал доста голяма популярност вече
    (особено в Силиконовата долина)
    • Изцяло обектно-ориентиран

    View Slide

  38. Ruby накратко
    • Скриптов (интерпретируем) език,
    подобно на PHP, Python, Perl и други
    • Отворен код
    • Набрал доста голяма популярност вече
    (особено в Силиконовата долина)
    • Изцяло обектно-ориентиран
    • Авторът му е Юкихиро Matz Мацумото

    View Slide

  39. Характерни черти

    View Slide

  40. Характерни черти
    • Много динамичен

    View Slide

  41. Характерни черти
    • Много динамичен
    • Много консистентен

    View Slide

  42. Характерни черти
    • Много динамичен
    • Много консистентен
    • Много малко синтактичен шум

    View Slide

  43. Характерни черти
    • Много динамичен
    • Много консистентен
    • Много малко синтактичен шум
    • Изцяло обектно-ориентиран

    View Slide

  44. Характерни черти
    • Много динамичен
    • Много консистентен
    • Много малко синтактичен шум
    • Изцяло обектно-ориентиран
    • Функционални елементи

    View Slide

  45. Характерни черти
    • Много динамичен
    • Много консистентен
    • Много малко синтактичен шум
    • Изцяло обектно-ориентиран
    • Функционални елементи
    • Минимално количество “вграден”
    синтаксис

    View Slide

  46. Динамичен

    View Slide

  47. Динамичен
    • Променливите ви не са обвързани с тип
    (duck typing)

    View Slide

  48. Динамичен
    • Променливите ви не са обвързани с тип
    (duck typing)
    • Можете да променяте почти всичко,
    което ви идва наготово с езика и
    стандартната му библиотека (monkey-
    patching)

    View Slide

  49. Динамичен
    • Променливите ви не са обвързани с тип
    (duck typing)
    • Можете да променяте почти всичко,
    което ви идва наготово с езика и
    стандартната му библиотека (monkey-
    patching)
    • Можете да инспектирате или създавате
    “код” в движение, докато програмата ви
    работи (метапрограмиране)

    View Slide

  50. Синтаксис

    View Slide

  51. Duck Typing

    View Slide

  52. Duck Typing

    View Slide

  53. Moneky-patching

    View Slide

  54. Moneky-patching

    View Slide

  55. Метапрограмиране

    View Slide

  56. Консистентен

    View Slide

  57. Консистентен
    • Принципът на най-малката изненада

    View Slide

  58. Консистентен
    • Принципът на най-малката изненада
    • За разлика от други езици...

    View Slide

  59. Консистентен
    • Принципът на най-малката изненада
    • За разлика от други езици...
    • Забравете за haystack и needle

    View Slide

  60. Консистентен
    • Принципът на най-малката изненада
    • За разлика от други езици...
    • Забравете за haystack и needle
    • Забравете реда на аргументите на in_array(),
    str_replace() и strpos()

    View Slide

  61. Консистентен
    • Принципът на най-малката изненада
    • За разлика от други езици...
    • Забравете за haystack и needle
    • Забравете реда на аргументите на in_array(),
    str_replace() и strpos()
    • А може би трябваше да кажа StrPos()?

    View Slide

  62. Консистентен
    • Принципът на най-малката изненада
    • За разлика от други езици...
    • Забравете за haystack и needle
    • Забравете реда на аргументите на in_array(),
    str_replace() и strpos()
    • А може би трябваше да кажа StrPos()?
    • Силен контраст с PHP в това отношение

    View Slide

  63. Малък синтактичен шум

    View Slide

  64. Малък синтактичен шум
    • Без долари пред променливите

    View Slide

  65. Малък синтактичен шум
    • Без долари пред променливите
    • Без къдрави скоби на традиционните места

    View Slide

  66. Малък синтактичен шум
    • Без долари пред променливите
    • Без къдрави скоби на традиционните места
    • Може да изпускате кръглите скоби при
    дефиниране и извикване на методи

    View Slide

  67. Малък синтактичен шум
    • Без долари пред променливите
    • Без къдрави скоби на традиционните места
    • Може да изпускате кръглите скоби при
    дефиниране и извикване на методи
    • Литерални (синтактични) конструктори за
    често употребявани типове данни като
    речници и списъци

    View Slide

  68. Малък синтактичен шум
    • Без долари пред променливите
    • Без къдрави скоби на традиционните места
    • Може да изпускате кръглите скоби при
    дефиниране и извикване на методи
    • Литерални (синтактични) конструктори за
    често употребявани типове данни като
    речници и списъци
    • Синтаксис, който подтиква към писане на
    код, четим като обикновен текст

    View Slide

  69. Обектно-ориентиран

    View Slide

  70. Обектно-ориентиран
    • Всичко е обект

    View Slide

  71. Обектно-ориентиран
    • Всичко е обект
    • Включително примитивните типове като
    true, false, nil, числа и прочее

    View Slide

  72. Обектно-ориентиран
    • Всичко е обект
    • Включително примитивните типове като
    true, false, nil, числа и прочее
    • Включително класовете

    View Slide

  73. Обектно-ориентиран
    • Всичко е обект
    • Включително примитивните типове като
    true, false, nil, числа и прочее
    • Включително класовете
    • Класовете са инстанции на класа Class, а
    класът Class е наследник на модул;
    статичните методи са всъщност
    инстанционни методи на тази инстанция

    View Slide

  74. Wait, what?

    View Slide

  75. Всичко е обект

    View Slide

  76. Функционални елементи

    View Slide

  77. Функционални елементи
    • Работа с колекции е на много централно
    място в езика

    View Slide

  78. Функционални елементи
    • Работа с колекции е на много централно
    място в езика
    • Лесно може да направите ваш клас, който да
    се държи (да квака) като колекция

    View Slide

  79. Функционални елементи
    • Работа с колекции е на много централно
    място в езика
    • Лесно може да направите ваш клас, който да
    се държи (да квака) като колекция
    • map/collect, filter/reject, select/
    find_all работят над всички колекции

    View Slide

  80. Функционални елементи
    • Работа с колекции е на много централно
    място в езика
    • Лесно може да направите ваш клас, който да
    се държи (да квака) като колекция
    • map/collect, filter/reject, select/
    find_all работят над всички колекции
    • Функции, приемащи като аргументи други
    функции

    View Slide

  81. Функционални елементи
    • Работа с колекции е на много централно
    място в езика
    • Лесно може да направите ваш клас, който да
    се държи (да квака) като колекция
    • map/collect, filter/reject, select/
    find_all работят над всички колекции
    • Функции, приемащи като аргументи други
    функции
    • Анонимни функции и блокове

    View Slide

  82. Блокове

    View Slide

  83. Блокове
    • Интересна и оригинална концепция

    View Slide

  84. Блокове
    • Интересна и оригинална концепция
    • Навсякъде в езика, ползват се изключително
    много

    View Slide

  85. Блокове
    • Интересна и оригинална концепция
    • Навсякъде в езика, ползват се изключително
    много
    • Наподобяват анонимна функция/closure,
    “закачена” към метода, който извиквате

    View Slide

  86. Блокове
    Блокът по-горе е асоцииран само с това
    конкретно извикване на метода each().

    View Slide

  87. Малко синтаксис

    View Slide

  88. Малко синтаксис
    • Ruby е написан на Ruby

    View Slide

  89. Малко синтаксис
    • Ruby е написан на Ruby
    • Макар и преувеличено, това твърдение е част
    от философията на езика

    View Slide

  90. Малко синтаксис
    • Ruby е написан на Ruby
    • Макар и преувеличено, това твърдение е част
    от философията на езика
    • Минимално количество синтаксис, повече
    методи в класове и модули

    View Slide

  91. Малко синтаксис
    • Ruby е написан на Ruby
    • Макар и преувеличено, това твърдение е част
    от философията на езика
    • Минимално количество синтаксис, повече
    методи в класове и модули
    • Всичко, което не е ключова дума, може да
    бъде променено от вас

    View Slide

  92. Малко синтаксис
    • Ruby е написан на Ruby
    • Макар и преувеличено, това твърдение е част
    от философията на езика
    • Минимално количество синтаксис, повече
    методи в класове и модули
    • Всичко, което не е ключова дума, може да
    бъде променено от вас
    • Много малко неща са ключови думи

    View Slide

  93. Запазени думи

    View Slide

  94. Запазени думи
    • Това са всички

    View Slide

  95. Запазени думи
    • Това са всички
    • Не могат да бъдат променени

    View Slide

  96. Community

    View Slide

  97. Community
    • Ruby има много силно и развито community

    View Slide

  98. Community
    • Ruby има много силно и развито community
    • Личи си от количеството и качеството на
    наличните библиотеки

    View Slide

  99. Community
    • Ruby има много силно и развито community
    • Личи си от количеството и качеството на
    наличните библиотеки
    • Повечето от тях са ползваеми в production

    View Slide

  100. Community
    • Ruby има много силно и развито community
    • Личи си от количеството и качеството на
    наличните библиотеки
    • Повечето от тях са ползваеми в production
    • Следва нови тенденции и добри практики

    View Slide

  101. Community
    • Ruby има много силно и развито community
    • Личи си от количеството и качеството на
    наличните библиотеки
    • Повечето от тях са ползваеми в production
    • Следва нови тенденции и добри практики
    • Бързо адаптира нови технологии и версии
    на езика

    View Slide

  102. Какво научих от Ruby?

    View Slide

  103. Какво научих от Ruby?
    • Основни ползи от ООП

    View Slide

  104. Какво научих от Ruby?
    • Основни ползи от ООП
    • Колко е хубаво, когато има конвенции

    View Slide

  105. Какво научих от Ruby?
    • Основни ползи от ООП
    • Колко е хубаво, когато има конвенции
    • Силата на DSL-ите

    View Slide

  106. Какво научих от Ruby?
    • Основни ползи от ООП
    • Колко е хубаво, когато има конвенции
    • Силата на DSL-ите
    • Що е то наистина динамичен език

    View Slide

  107. Какво научих от Ruby?
    • Основни ползи от ООП
    • Колко е хубаво, когато има конвенции
    • Силата на DSL-ите
    • Що е то наистина динамичен език
    • Chaining, блокове, функционални закачки...

    View Slide

  108. Какво научих от Ruby?
    • Основни ползи от ООП
    • Колко е хубаво, когато има конвенции
    • Силата на DSL-ите
    • Що е то наистина динамичен език
    • Chaining, блокове, функционални закачки...
    • Какво е да пишеш на език, който
    те прави щастлив

    View Slide

  109. Нямате интерес към
    Ruby?

    View Slide

  110. Ruby on Rails

    View Slide

  111. Друг пример за
    PHP проект
    Самата дефиниция на legacy...

    View Slide

  112. View Slide

  113. Ruby on Rails

    View Slide

  114. Ruby на релси?

    View Slide

  115. Ruby на релси?
    • Уеб фреймуърк

    View Slide

  116. Ruby на релси?
    • Уеб фреймуърк
    • Солидна основа за вашите уеб приложения

    View Slide

  117. Ruby на релси?
    • Уеб фреймуърк
    • Солидна основа за вашите уеб приложения
    • Написан на Ruby (наследява всички ползи и
    добавя още)

    View Slide

  118. Ruby на релси?
    • Уеб фреймуърк
    • Солидна основа за вашите уеб приложения
    • Написан на Ruby (наследява всички ползи и
    добавя още)
    • Много сериозна основа за всякакви
    приложения — от малки, до много големи

    View Slide

  119. Ruby на релси?
    • Уеб фреймуърк
    • Солидна основа за вашите уеб приложения
    • Написан на Ruby (наследява всички ползи и
    добавя още)
    • Много сериозна основа за всякакви
    приложения — от малки, до много големи
    • Ще ви направи по-щастливи програмисти

    View Slide

  120. Ruby на релси?
    • Уеб фреймуърк
    • Солидна основа за вашите уеб приложения
    • Написан на Ruby (наследява всички ползи и
    добавя още)
    • Много сериозна основа за всякакви
    приложения — от малки, до много големи
    • Ще ви направи по-щастливи програмисти
    • Ще ви направи по-добри програмисти

    View Slide

  121. Rails

    View Slide

  122. Rails
    • Production-ready

    View Slide

  123. Rails
    • Production-ready
    • Сигурността е на почит

    View Slide

  124. Rails
    • Production-ready
    • Сигурността е на почит
    • Пълен с добри практики

    View Slide

  125. Rails
    • Production-ready
    • Сигурността е на почит
    • Пълен с добри практики
    • Авангарден

    View Slide

  126. Rails
    • Production-ready
    • Сигурността е на почит
    • Пълен с добри практики
    • Авангарден
    • Модел, който много други уеб
    фреймуърци копират (например CakePHP)

    View Slide

  127. Production-ready
    Или, кой ползва Rails?

    View Slide

  128. Twitter
    В младите си години

    View Slide

  129. GitHub

    View Slide

  130. SoundCloud

    View Slide

  131. Shopify

    View Slide

  132. Songkick

    View Slide

  133. Groupon

    View Slide

  134. Basecamp

    View Slide

  135. + един билюк стартъпи

    View Slide

  136. Концепции и
    принципи

    View Slide

  137. MVC

    View Slide

  138. MVC
    • Model-View-Controller архитектура

    View Slide

  139. MVC
    • Model-View-Controller архитектура
    • Бизнес логика в моделите

    View Slide

  140. MVC
    • Model-View-Controller архитектура
    • Бизнес логика в моделите
    • Презентационна логика (HTML) във
    файловете-изгледи

    View Slide

  141. MVC
    • Model-View-Controller архитектура
    • Бизнес логика в моделите
    • Презентационна логика (HTML) във
    файловете-изгледи
    • Навръзваща логика в контролерите

    View Slide

  142. ORM

    View Slide

  143. ORM
    • Object-relational mapping

    View Slide

  144. ORM
    • Object-relational mapping
    • Естествено продължение на MVC

    View Slide

  145. ORM
    • Object-relational mapping
    • Естествено продължение на MVC
    • Не пишете SQL директно

    View Slide

  146. ORM
    • Object-relational mapping
    • Естествено продължение на MVC
    • Не пишете SQL директно
    • Това прави за вас ActiveRecord (или друг
    ORM)

    View Slide

  147. ORM
    • Object-relational mapping
    • Естествено продължение на MVC
    • Не пишете SQL директно
    • Това прави за вас ActiveRecord (или друг
    ORM)
    • На теория сте database-agnostic

    View Slide

  148. ActiveRecord

    View Slide

  149. ActiveRecord
    • ORM, който идва по подразбиране с Rails

    View Slide

  150. ActiveRecord
    • ORM, който идва по подразбиране с Rails
    • Поддържа PostgreSQL, MySQL, Sqlite3

    View Slide

  151. ActiveRecord
    • ORM, който идва по подразбиране с Rails
    • Поддържа PostgreSQL, MySQL, Sqlite3
    • Може да го подкарате и с MSSQL, Oracle и
    други бази

    View Slide

  152. ActiveRecord
    • ORM, който идва по подразбиране с Rails
    • Поддържа PostgreSQL, MySQL, Sqlite3
    • Може да го подкарате и с MSSQL, Oracle и
    други бази
    • При нужда, може да напишете и ваш
    адаптер

    View Slide

  153. ActiveRecord
    • ORM, който идва по подразбиране с Rails
    • Поддържа PostgreSQL, MySQL, Sqlite3
    • Може да го подкарате и с MSSQL, Oracle и
    други бази
    • При нужда, може да напишете и ваш
    адаптер
    • Query интерфейс, поддържащ CRUD
    операции

    View Slide

  154. ActiveRecord

    View Slide

  155. Асоциации в AR

    View Slide

  156. Асоциации в AR

    View Slide

  157. Асоциации в AR

    View Slide

  158. Асоциации в AR

    View Slide

  159. Асоциации в AR

    View Slide

  160. Асоциации в AR

    View Slide

  161. Асоциации в AR

    View Slide

  162. Асоциации в AR

    View Slide

  163. Асоциации в AR

    View Slide

  164. Валидации

    View Slide

  165. Валидации
    • Валидация на данните, постъпващи към
    вашите модели

    View Slide

  166. Валидации
    • Валидация на данните, постъпващи към
    вашите модели
    • Задължителни полета

    View Slide

  167. Валидации
    • Валидация на данните, постъпващи към
    вашите модели
    • Задължителни полета
    • Полета, които трябва да са само числа

    View Slide

  168. Валидации
    • Валидация на данните, постъпващи към
    вашите модели
    • Задължителни полета
    • Полета, които трябва да са само числа
    • Числа в определен интервал

    View Slide

  169. Валидации
    • Валидация на данните, постъпващи към
    вашите модели
    • Задължителни полета
    • Полета, които трябва да са само числа
    • Числа в определен интервал
    • Низове с определена дължина

    View Slide

  170. Валидации
    • Валидация на данните, постъпващи към
    вашите модели
    • Задължителни полета
    • Полета, които трябва да са само числа
    • Числа в определен интервал
    • Низове с определена дължина
    • Низове, отговарящи на определен формат

    View Slide

  171. Валидации
    • Валидация на данните, постъпващи към
    вашите модели
    • Задължителни полета
    • Полета, които трябва да са само числа
    • Числа в определен интервал
    • Низове с определена дължина
    • Низове, отговарящи на определен формат
    • Ваши валидатори

    View Slide

  172. Транзакции

    View Slide

  173. Транзакции
    • Това е от мотиките

    View Slide

  174. Транзакции
    • Това е от мотиките
    • Задължително е да се ползват при писане
    в базата, особено ако трябва да пуснете
    няколко заявки

    View Slide

  175. Транзакции
    • Това е от мотиките
    • Задължително е да се ползват при писане
    в базата, особено ако трябва да пуснете
    няколко заявки
    • Централизиран ORM дава лесна
    възможност за добавяне на транзакции

    View Slide

  176. Транзакции
    • Това е от мотиките
    • Задължително е да се ползват при писане
    в базата, особено ако трябва да пуснете
    няколко заявки
    • Централизиран ORM дава лесна
    възможност за добавяне на транзакции
    • Ако знаех това през 2007-ма...

    View Slide

  177. Environments

    View Slide

  178. Environments
    • Ясно разделение на обкръженията

    View Slide

  179. Environments
    • Ясно разделение на обкръженията
    • Три обкръжения по подразбиране

    View Slide

  180. Environments
    • Ясно разделение на обкръженията
    • Три обкръжения по подразбиране
    • Development

    View Slide

  181. Environments
    • Ясно разделение на обкръженията
    • Три обкръжения по подразбиране
    • Development
    • Test

    View Slide

  182. Environments
    • Ясно разделение на обкръженията
    • Три обкръжения по подразбиране
    • Development
    • Test
    • Production

    View Slide

  183. Environments
    • Ясно разделение на обкръженията
    • Три обкръжения по подразбиране
    • Development
    • Test
    • Production
    • Може да добавите ваши

    View Slide

  184. Кой разработва на
    production сървъри?

    View Slide

  185. Deployment

    View Slide

  186. Кой деплойва
    с мишка + FTP client?

    View Slide

  187. А промените в базата?

    View Slide

  188. View Slide

  189. Миграции
    (Относно промените в базата)

    View Slide

  190. Миграции

    View Slide

  191. Миграции
    • Структурата на базата ви е в кода

    View Slide

  192. Миграции
    • Структурата на базата ви е в кода
    • Създаване и премахване на таблици

    View Slide

  193. Миграции
    • Структурата на базата ви е в кода
    • Създаване и премахване на таблици
    • Добавяне/премахване на колони, индекси
    и прочее

    View Slide

  194. Миграции
    • Структурата на базата ви е в кода
    • Създаване и премахване на таблици
    • Добавяне/премахване на колони, индекси
    и прочее
    • Всичко е във вашия код

    View Slide

  195. Миграции
    • Структурата на базата ви е в кода
    • Създаване и премахване на таблици
    • Добавяне/премахване на колони, индекси
    и прочее
    • Всичко е във вашия код
    • Улеснява колаборацията

    View Slide

  196. Миграции
    • Структурата на базата ви е в кода
    • Създаване и премахване на таблици
    • Добавяне/премахване на колони, индекси
    и прочее
    • Всичко е във вашия код
    • Улеснява колаборацията
    • Улеснява deployment-а на вашето
    приложение

    View Slide

  197. Миграции и deployment

    View Slide

  198. Миграции и deployment
    • Имат up() и down() методи

    View Slide

  199. Миграции и deployment
    • Имат up() и down() методи
    • Тоест, могат да бъдат “обръщани”

    View Slide

  200. Миграции и deployment
    • Имат up() и down() методи
    • Тоест, могат да бъдат “обръщани”
    • Качвате новата версия на базата заедно с
    новата версия на кода

    View Slide

  201. Миграции и deployment
    • Имат up() и down() методи
    • Тоест, могат да бъдат “обръщани”
    • Качвате новата версия на базата заедно с
    новата версия на кода
    • Ако нещо се обърка, down() ви спасява

    View Slide

  202. Миграции и deployment
    • Имат up() и down() методи
    • Тоест, могат да бъдат “обръщани”
    • Качвате новата версия на базата заедно с
    новата версия на кода
    • Ако нещо се обърка, down() ви спасява
    • Произволен Ruby-код в миграциите

    View Slide

  203. Миграции

    View Slide

  204. Автоматични миграции
    по време на deploy

    View Slide

  205. Asset Pipeline

    View Slide

  206. Asset Pipeline

    View Slide

  207. Asset Pipeline
    • Зряло решение на сериозен проблем

    View Slide

  208. Asset Pipeline
    • Зряло решение на сериозен проблем
    • “Пакетира” вашите asset-и (CSS, JavaScript,
    картинки и прочее)

    View Slide

  209. Asset Pipeline
    • Зряло решение на сериозен проблем
    • “Пакетира” вашите asset-и (CSS, JavaScript,
    картинки и прочее)
    • Комбинира JavaScript файловете ви в един
    и го minify-ва и gzip-ва

    View Slide

  210. Asset Pipeline
    • Зряло решение на сериозен проблем
    • “Пакетира” вашите asset-и (CSS, JavaScript,
    картинки и прочее)
    • Комбинира JavaScript файловете ви в един
    и го minify-ва и gzip-ва
    • Същото прави и за CSS

    View Slide

  211. Asset Pipeline
    • Зряло решение на сериозен проблем
    • “Пакетира” вашите asset-и (CSS, JavaScript,
    картинки и прочее)
    • Комбинира JavaScript файловете ви в един
    и го minify-ва и gzip-ва
    • Същото прави и за CSS
    • Имената на резултатните файлове
    съдържат хеш от съдържанието на файла

    View Slide

  212. Asset Pipeline

    View Slide

  213. Asset Pipeline
    • Лесен cache invalidation — при промяна
    съдържанието на файла се сменя хеша и
    следователно името му

    View Slide

  214. Asset Pipeline
    • Лесен cache invalidation — при промяна
    съдържанието на файла се сменя хеша и
    следователно името му
    • Кеширате во веки веков

    View Slide

  215. Asset Pipeline
    • Лесен cache invalidation — при промяна
    съдържанието на файла се сменя хеша и
    следователно името му
    • Кеширате во веки веков
    • Поддръжка на CDN

    View Slide

  216. Asset Pipeline
    • Лесен cache invalidation — при промяна
    съдържанието на файла се сменя хеша и
    следователно името му
    • Кеширате во веки веков
    • Поддръжка на CDN
    • Ползвате помощни функции, за да вкарвате
    линкове към вашите статични файлове

    View Slide

  217. Asset Pipeline
    • Лесен cache invalidation — при промяна
    съдържанието на файла се сменя хеша и
    следователно името му
    • Кеширате во веки веков
    • Поддръжка на CDN
    • Ползвате помощни функции, за да вкарвате
    линкове към вашите статични файлове
    • Горното важи за и за HTML, и за CSS

    View Slide

  218. Asset Pipeline

    View Slide

  219. Asset Pipeline
    • По-малко HTTP заявки = по-бързо

    View Slide

  220. Asset Pipeline
    • По-малко HTTP заявки = по-бързо
    • По-малки файлове = по-бързо

    View Slide

  221. Asset Pipeline
    • По-малко HTTP заявки = по-бързо
    • По-малки файлове = по-бързо
    • Кеширани файлове = по-бързо

    View Slide

  222. Asset Pipeline
    • По-малко HTTP заявки = по-бързо
    • По-малки файлове = по-бързо
    • Кеширани файлове = по-бързо
    • Употреба на CDN = по-бързо

    View Slide

  223. Asset Pipeline
    • По-малко HTTP заявки = по-бързо
    • По-малки файлове = по-бързо
    • Кеширани файлове = по-бързо
    • Употреба на CDN = по-бързо
    • Без главоболие от ваша страна

    View Slide

  224. Asset Pipeline
    • По-малко HTTP заявки = по-бързо
    • По-малки файлове = по-бързо
    • Кеширани файлове = по-бързо
    • Употреба на CDN = по-бързо
    • Без главоболие от ваша страна
    • Бонус — pre-processor-и на CSS и
    JavaScript!

    View Slide

  225. SASS

    View Slide

  226. SASS
    SCSS

    View Slide

  227. SASS
    SCSS CSS

    View Slide

  228. CoffeeScript
    JavaScript
    CoffeeScript

    View Slide

  229. Други аспекти

    View Slide

  230. Други аспекти
    • Култура на добри практики и качествен код

    View Slide

  231. Други аспекти
    • Култура на добри практики и качествен код
    • Convention over configuration

    View Slide

  232. Други аспекти
    • Култура на добри практики и качествен код
    • Convention over configuration
    • The Rails Way™

    View Slide

  233. Други аспекти
    • Култура на добри практики и качествен код
    • Convention over configuration
    • The Rails Way™
    • VCS — Git

    View Slide

  234. Други аспекти
    • Култура на добри практики и качествен код
    • Convention over configuration
    • The Rails Way™
    • VCS — Git
    • Управление на зависимости от външни
    библиотеки — Bundler

    View Slide

  235. Други аспекти
    • Култура на добри практики и качествен код
    • Convention over configuration
    • The Rails Way™
    • VCS — Git
    • Управление на зависимости от външни
    библиотеки — Bundler
    • Инфраструктура за пращане на мейли, с
    подобна на MVC-архитектура

    View Slide

  236. View Slide

  237. Какво научих от Rails?

    View Slide

  238. Какво научих от Rails?
    • Обкръжения (environments) и deployment

    View Slide

  239. Какво научих от Rails?
    • Обкръжения (environments) и deployment
    • Миграции

    View Slide

  240. Какво научих от Rails?
    • Обкръжения (environments) и deployment
    • Миграции
    • Основите на шаблона MVC

    View Slide

  241. Какво научих от Rails?
    • Обкръжения (environments) и deployment
    • Миграции
    • Основите на шаблона MVC
    • Convention over configuration

    View Slide

  242. Какво научих от Rails?
    • Обкръжения (environments) и deployment
    • Миграции
    • Основите на шаблона MVC
    • Convention over configuration
    • Че ми трябват тестове :)

    View Slide

  243. Какво научих от Rails?
    • Обкръжения (environments) и deployment
    • Миграции
    • Основите на шаблона MVC
    • Convention over configuration
    • Че ми трябват тестове :)
    • Транзакции около всичко, що пише в
    базата!

    View Slide

  244. Какво научих от Rails?
    • Обкръжения (environments) и deployment
    • Миграции
    • Основите на шаблона MVC
    • Convention over configuration
    • Че ми трябват тестове :)
    • Транзакции около всичко, що пише в
    базата!
    • PostgreSQL > MySQL

    View Slide

  245. Ако ви стана
    интересно...

    View Slide

  246. View Slide

  247. Ресурси за Ruby

    View Slide

  248. http://pragprog.com/book/ruby3/programming-ruby-1-9

    View Slide

  249. Ресурси за Ruby

    View Slide

  250. Ресурси за Ruby
    • Онлайн — без инсталация

    View Slide

  251. Ресурси за Ruby
    • Онлайн — без инсталация
    • RubyMonk — http://rubymonk.com/

    View Slide

  252. Ресурси за Ruby
    • Онлайн — без инсталация
    • RubyMonk — http://rubymonk.com/
    • TryRuby — http://tryruby.org/levels/1/
    challenges/0

    View Slide

  253. Ресурси за Ruby
    • Онлайн — без инсталация
    • RubyMonk — http://rubymonk.com/
    • TryRuby — http://tryruby.org/levels/1/
    challenges/0
    • Тонове из интернет

    View Slide

  254. Ресурси за Rails

    View Slide

  255. http://pragprog.com/book/rails4/agile-web-development-with-rails

    View Slide

  256. http://guides.rubyonrails.org/

    View Slide

  257. Ресурси за Rails

    View Slide

  258. Ресурси за Rails
    • Oще на http://rubyonrails.org/documentation

    View Slide

  259. Ресурси за Rails
    • Oще на http://rubyonrails.org/documentation
    • Screencasts — http://rubyonrails.org/screencasts

    View Slide

  260. Ресурси за Rails
    • Oще на http://rubyonrails.org/documentation
    • Screencasts — http://rubyonrails.org/screencasts
    • Например RailsCasts

    View Slide

  261. Ресурси за Rails
    • Oще на http://rubyonrails.org/documentation
    • Screencasts — http://rubyonrails.org/screencasts
    • Например RailsCasts
    • AsciiCasts — текстов вариант на горното

    View Slide

  262. Учене от примери

    View Slide

  263. Учене от примери
    • Немалко Rails проекти с отворен код в
    GitHub

    View Slide

  264. Учене от примери
    • Немалко Rails проекти с отворен код в
    GitHub
    • Например https://github.com/skanev/evans

    View Slide

  265. Учене от примери
    • Немалко Rails проекти с отворен код в
    GitHub
    • Например https://github.com/skanev/evans
    • Това е кодът зад http://fmi.ruby.bg

    View Slide

  266. “На <конференция>
    срещнах хора, които ме
    запалиха по <технология>”
    — Вие

    View Slide

  267. “<Технология> промени
    изцяло начина ми на
    мислене.”
    — Вие
    PlovdivConf 2014, anyone?

    View Slide

  268. Не спирайте да
    експериментирате
    и да учите

    View Slide

  269. Благодаря
    John Doe
    http://ddimitrov.name
    @mitio

    View Slide

  270. View Slide