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

Ruby на релси за уеб програмисти

Ruby на релси за уеб програмисти

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

Презентацията цели да очертае контурите на айсберга Ruby on Rails, приплъзвайки се по повърхността на Ruby и споменавайки основните ключови компоненти, които биха привлекли един уеб програмист към Rails.

Целева аудитория на презентацията са основно хора с опит и интерес в програмирането за уеб, имащи нулеви или базови познания в езика за програмиране Ruby.

Dimitar Dimitrov

August 11, 2012
Tweet

More Decks by Dimitar Dimitrov

Other Decks in Programming

Transcript

  1. Ruby на релси за уеб
    програмисти
    Димитър Димитров,
    VarnaConf 2012
    11 август 12, събота

    View Slide

  2. Здравейте!
    И добре дошли на VarnaConf 2012!
    11 август 12, събота

    View Slide

  3. Димитър Димитров
    http://ddimitrov.name
    @mitio в Twitter
    Лайв ООД
    11 август 12, събота

    View Slide

  4. За какво ще ви
    говоря днес
    11 август 12, събота

    View Slide

  5. Ruby
    11 август 12, събота

    View Slide

  6. Ruby on Rails
    11 август 12, събота

    View Slide

  7. Стефан
    11 август 12, събота

    View Slide

  8. Ruby на релси?
    11 август 12, събота

    View Slide

  9. Ruby на релси?
    • Уеб фреймуърк
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. Ruby на релси?
    • Уеб фреймуърк
    • Солидна основа за вашите уеб приложения
    • Написан на Ruby
    • Ще ви направи по-щастливи програмисти
    • Ще ви направи по-добри програмисти
    11 август 12, събота

    View Slide

  14. Целта ми днес
    11 август 12, събота

    View Slide

  15. Целта ми днес
    • Да ви покажа купчина готини неща
    11 август 12, събота

    View Slide

  16. Целта ми днес
    • Да ви покажа купчина готини неща
    • Само контурите на айсберга
    11 август 12, събота

    View Slide

  17. Целта ми днес
    • Да ви покажа купчина готини неща
    • Само контурите на айсберга
    • Да запаля любопитството ви
    11 август 12, събота

    View Slide

  18. Целта ми днес
    • Да ви покажа купчина готини неща
    • Само контурите на айсберга
    • Да запаля любопитството ви
    • Да ви засърбят ръцете
    11 август 12, събота

    View Slide

  19. Целта ми днес
    • Да ви покажа купчина готини неща
    • Само контурите на айсберга
    • Да запаля любопитството ви
    • Да ви засърбят ръцете
    • Поне половината от вас да пробват Ruby
    и/или Rails този уикенд от нетърпение
    11 август 12, събота

    View Slide

  20. Ruby
    11 август 12, събота

    View Slide

  21. Ruby накратко
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  27. История и вдъхновение
    11 август 12, събота

    View Slide

  28. История и вдъхновение
    • Появява се за пръв път през 1995 г.
    11 август 12, събота

    View Slide

  29. История и вдъхновение
    • Появява се за пръв път през 1995 г.
    • Вдъхновен основно от Smalltalk, Perl и
    донякъде от Eiffel и Lisp
    11 август 12, събота

    View Slide

  30. История и вдъхновение
    • Появява се за пръв път през 1995 г.
    • Вдъхновен основно от Smalltalk, Perl и
    донякъде от Eiffel и Lisp
    • Matz цели език, правещ програмистите
    щастливи
    11 август 12, събота

    View Slide

  31. История и вдъхновение
    • Появява се за пръв път през 1995 г.
    • Вдъхновен основно от Smalltalk, Perl и
    донякъде от Eiffel и Lisp
    • Matz цели език, правещ програмистите
    щастливи
    • Доброжелателен диктатор
    11 август 12, събота

    View Slide

  32. Характерни черти
    11 август 12, събота

    View Slide

  33. Характерни черти
    • Много динамичен
    11 август 12, събота

    View Slide

  34. Характерни черти
    • Много динамичен
    • Много консистентен
    11 август 12, събота

    View Slide

  35. Характерни черти
    • Много динамичен
    • Много консистентен
    • Много малко синтактичен шум
    11 август 12, събота

    View Slide

  36. Характерни черти
    • Много динамичен
    • Много консистентен
    • Много малко синтактичен шум
    • Изцяло обектно-ориентиран
    11 август 12, събота

    View Slide

  37. Характерни черти
    • Много динамичен
    • Много консистентен
    • Много малко синтактичен шум
    • Изцяло обектно-ориентиран
    • Функционални елементи
    11 август 12, събота

    View Slide

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

    View Slide

  39. Динамичен
    11 август 12, събота

    View Slide

  40. Динамичен
    • Променливите ви не са обвързани с тип
    (duck typing)
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

  43. Duck Typing
    11 август 12, събота

    View Slide

  44. Duck Typing
    11 август 12, събота

    View Slide

  45. Moneky-patching
    11 август 12, събота

    View Slide

  46. Moneky-patching
    11 август 12, събота

    View Slide

  47. Метапрограмиране
    11 август 12, събота

    View Slide

  48. Консистентен
    11 август 12, събота

    View Slide

  49. Консистентен
    • Има конвенции и те се спазват
    11 август 12, събота

    View Slide

  50. Консистентен
    • Има конвенции и те се спазват
    • Имена на класове винаги с главна буква,
    CamelCase
    11 август 12, събота

    View Slide

  51. Консистентен
    • Има конвенции и те се спазват
    • Имена на класове винаги с главна буква,
    CamelCase
    • Имена на константи в
    SCREAMING_CAMEL_CASE
    11 август 12, събота

    View Slide

  52. Консистентен
    • Има конвенции и те се спазват
    • Имена на класове винаги с главна буква,
    CamelCase
    • Имена на константи в
    SCREAMING_CAMEL_CASE
    • Имена на методи и променливи в
    underscore_snake_case
    11 август 12, събота

    View Slide

  53. Консистентен
    • Има конвенции и те се спазват
    • Имена на класове винаги с главна буква,
    CamelCase
    • Имена на константи в
    SCREAMING_CAMEL_CASE
    • Имена на методи и променливи в
    underscore_snake_case
    • Имената са смислени и аргументите на
    методите са консистенти
    11 август 12, събота

    View Slide

  54. Консистентен
    11 август 12, събота

    View Slide

  55. Консистентен
    • Принципът на най-малката изненада
    11 август 12, събота

    View Slide

  56. Консистентен
    • Принципът на най-малката изненада
    • За разлика от други езици...
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  61. Малък синтактичен шум
    11 август 12, събота

    View Slide

  62. Малък синтактичен шум
    • Без долари пред променливите
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  67. Обектно-ориентиран
    11 август 12, събота

    View Slide

  68. Обектно-ориентиран
    • Всичко е обект
    11 август 12, събота

    View Slide

  69. Обектно-ориентиран
    • Всичко е обект
    • Включително примитивните типове като
    true, false, nil, числа и прочее
    11 август 12, събота

    View Slide

  70. Обектно-ориентиран
    • Всичко е обект
    • Включително примитивните типове като
    true, false, nil, числа и прочее
    • Включително класовете
    11 август 12, събота

    View Slide

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

    View Slide

  72. Wait, what?
    11 август 12, събота

    View Slide

  73. 11 август 12, събота

    View Slide

  74. Всичко е обект
    11 август 12, събота

    View Slide

  75. Функционални елементи
    11 август 12, събота

    View Slide

  76. Функционални елементи
    • Работа с колекции е на много централно
    място в езика
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  81. Блокове
    11 август 12, събота

    View Slide

  82. Блокове
    • Интересна и оригинална концепция
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

  85. Блокове
    Блокът по-горе е асоцииран само с това
    конкретно извикване на метода each().
    11 август 12, събота

    View Slide

  86. Символи
    За целите на тази презентация,
    гледайте на тях като на низове
    11 август 12, събота

    View Slide

  87. Малко синтаксис
    11 август 12, събота

    View Slide

  88. Малко синтаксис
    • Ruby е написан на Ruby
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  93. Запазени думи
    11 август 12, събота

    View Slide

  94. Запазени думи
    • Това са всички
    11 август 12, събота

    View Slide

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

    View Slide

  96. Интерактивна конзола
    11 август 12, събота

    View Slide

  97. Интерактивна конзола
    • irb (interactive ruby)
    11 август 12, събота

    View Slide

  98. Интерактивна конзола
    • irb (interactive ruby)
    • REPL (read-eval-print loop)
    11 август 12, събота

    View Slide

  99. Интерактивна конзола
    • irb (interactive ruby)
    • REPL (read-eval-print loop)
    • Пускате irb и започвате да си играете с
    Ruby
    11 август 12, събота

    View Slide

  100. Интерактивна конзола
    • irb (interactive ruby)
    • REPL (read-eval-print loop)
    • Пускате irb и започвате да си играете с
    Ruby
    • Всеки скриптов език може и трябва да има
    такава REPL-конзола
    11 август 12, събота

    View Slide

  101. Интерактивна конзола
    • irb (interactive ruby)
    • REPL (read-eval-print loop)
    • Пускате irb и започвате да си играете с
    Ruby
    • Всеки скриптов език може и трябва да има
    такава REPL-конзола
    • Е, почти всеки...
    11 август 12, събота

    View Slide

  102. Интерактивна конзола
    • irb (interactive ruby)
    • REPL (read-eval-print loop)
    • Пускате irb и започвате да си играете с
    Ruby
    • Всеки скриптов език може и трябва да има
    такава REPL-конзола
    • Е, почти всеки...
    11 август 12, събота

    View Slide

  103. Библиотеки
    11 август 12, събота

    View Slide

  104. Библиотеки
    • Библиотеките в Ruby се наричат gems
    11 август 12, събота

    View Slide

  105. Библиотеки
    • Библиотеките в Ruby се наричат gems
    • Ползват се за споделяне на
    функционалност между различни
    приложения
    11 август 12, събота

    View Slide

  106. Библиотеки
    • Библиотеките в Ruby се наричат gems
    • Ползват се за споделяне на
    функционалност между различни
    приложения
    • Системата е прилична и работи добре
    11 август 12, събота

    View Slide

  107. Библиотеки
    • Библиотеките в Ruby се наричат gems
    • Ползват се за споделяне на
    функционалност между различни
    приложения
    • Системата е прилична и работи добре
    • Можете да напишете и публикувате ваш
    gem много лесно
    11 август 12, събота

    View Slide

  108. 11 август 12, събота

    View Slide

  109. RubyGems
    11 август 12, събота

    View Slide

  110. RubyGems
    • Де-факто стандартно място, където се
    публикуват gems
    11 август 12, събота

    View Slide

  111. RubyGems
    • Де-факто стандартно място, където се
    публикуват gems
    • Безплатно е
    11 август 12, събота

    View Slide

  112. RubyGems
    • Де-факто стандартно място, където се
    публикуват gems
    • Безплатно е
    • Правите си акаунт, публикувате си gem-а
    там и вече всеки може да го ползва
    11 август 12, събота

    View Slide

  113. RubyGems
    Над 42 хиляди open-source gem-а
    11 август 12, събота

    View Slide

  114. RubyGems
    Близо 800 милиона изтегляния
    11 август 12, събота

    View Slide

  115. RubyGems
    Високо качество
    11 август 12, събота

    View Slide

  116. RubyGems
    11 август 12, събота

    View Slide

  117. RubyGems
    • Публикувайки gem-а си в RubyGems го
    правите достъпен за всеки Ruby програмист
    по света
    11 август 12, събота

    View Slide

  118. RubyGems
    • Публикувайки gem-а си в RubyGems го
    правите достъпен за всеки Ruby програмист
    по света
    • gem install my_cool_gem на конзола
    и сте в играта
    11 август 12, събота

    View Slide

  119. Community
    11 август 12, събота

    View Slide

  120. Community
    • Ruby има много силно и развито community
    11 август 12, събота

    View Slide

  121. Community
    • Ruby има много силно и развито community
    • Личи си от количеството и качеството на
    наличните библиотеки
    11 август 12, събота

    View Slide

  122. Community
    • Ruby има много силно и развито community
    • Личи си от количеството и качеството на
    наличните библиотеки
    • Повечето от тях са ползваеми в production
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

  125. Версии на Ruby
    11 август 12, събота

    View Slide

  126. Версии на Ruby
    • В момента най-новата версия на Ruby е
    1.9.3 — не ползвайте друго
    11 август 12, събота

    View Slide

  127. Версии на Ruby
    • В момента най-новата версия на Ruby е
    1.9.3 — не ползвайте друго
    • Все още може да срещнете споменавания
    на 1.8.7 някъде
    11 август 12, събота

    View Slide

  128. Версии на Ruby
    • В момента най-новата версия на Ruby е
    1.9.3 — не ползвайте друго
    • Все още може да срещнете споменавания
    на 1.8.7 някъде
    • 1.9 не е 100% backward-compatible с 1.8
    11 август 12, събота

    View Slide

  129. Версии на Ruby
    • В момента най-новата версия на Ruby е
    1.9.3 — не ползвайте друго
    • Все още може да срещнете споменавания
    на 1.8.7 някъде
    • 1.9 не е 100% backward-compatible с 1.8
    • Почти всички библиотеки са мигрирани и
    работят на Ruby 1.9
    11 август 12, събота

    View Slide

  130. Версии на Ruby
    • В момента най-новата версия на Ruby е
    1.9.3 — не ползвайте друго
    • Все още може да срещнете споменавания
    на 1.8.7 някъде
    • 1.9 не е 100% backward-compatible с 1.8
    • Почти всички библиотеки са мигрирани и
    работят на Ruby 1.9
    • Направете разлика с Python
    11 август 12, събота

    View Slide

  131. Интерпретатори
    11 август 12, събота

    View Slide

  132. Интерпретатори
    • Повече от един
    11 август 12, събота

    View Slide

  133. Интерпретатори
    • Повече от един
    • MRI (още CRuby) = Matz’ Ruby Implementation
    11 август 12, събота

    View Slide

  134. Интерпретатори
    • Повече от един
    • MRI (още CRuby) = Matz’ Ruby Implementation
    • JRuby
    11 август 12, събота

    View Slide

  135. Интерпретатори
    • Повече от един
    • MRI (още CRuby) = Matz’ Ruby Implementation
    • JRuby
    • IronRuby
    11 август 12, събота

    View Slide

  136. Интерпретатори
    • Повече от един
    • MRI (още CRuby) = Matz’ Ruby Implementation
    • JRuby
    • IronRuby
    • Rubinius
    11 август 12, събота

    View Slide

  137. Интерпретатори
    • Повече от един
    • MRI (още CRuby) = Matz’ Ruby Implementation
    • JRuby
    • IronRuby
    • Rubinius
    • MacRuby
    11 август 12, събота

    View Slide

  138. Интерпретатори
    • Повече от един
    • MRI (още CRuby) = Matz’ Ruby Implementation
    • JRuby
    • IronRuby
    • Rubinius
    • MacRuby
    • MagLev — http://maglev.github.com
    11 август 12, събота

    View Slide

  139. Интерпретатори
    • Повече от един
    • MRI (още CRuby) = Matz’ Ruby Implementation
    • JRuby
    • IronRuby
    • Rubinius
    • MacRuby
    • MagLev — http://maglev.github.com
    • MRuby
    11 август 12, събота

    View Slide

  140. Интерпретатори
    • Повече от един
    • MRI (още CRuby) = Matz’ Ruby Implementation
    • JRuby
    • IronRuby
    • Rubinius
    • MacRuby
    • MagLev — http://maglev.github.com
    • MRuby
    • Ruby in Google Chrome?
    11 август 12, събота

    View Slide

  141. Защо Ruby?
    11 август 12, събота

    View Slide

  142. Защо Ruby?
    11 август 12, събота

    View Slide

  143. Защо Ruby?
    • Само върха на айсберга — още много
    надолу в заешката дупка
    11 август 12, събота

    View Slide

  144. Защо Ruby?
    • Само върха на айсберга — още много
    надолу в заешката дупка
    • Удоволствие за писане
    11 август 12, събота

    View Slide

  145. Защо Ruby?
    • Само върха на айсберга — още много
    надолу в заешката дупка
    • Удоволствие за писане
    • Ще ви научи на много нови неща
    11 август 12, събота

    View Slide

  146. Защо Ruby?
    • Само върха на айсберга — още много
    надолу в заешката дупка
    • Удоволствие за писане
    • Ще ви научи на много нови неща
    • Много библиотеки, които да ползвате
    11 август 12, събота

    View Slide

  147. Защо Ruby?
    • Само върха на айсберга — още много
    надолу в заешката дупка
    • Удоволствие за писане
    • Ще ви научи на много нови неща
    • Много библиотеки, които да ползвате
    • Много код, от който да се учите
    11 август 12, събота

    View Slide

  148. Защо Ruby?
    • Само върха на айсберга — още много
    надолу в заешката дупка
    • Удоволствие за писане
    • Ще ви научи на много нови неща
    • Много библиотеки, които да ползвате
    • Много код, от който да се учите
    • Защо не?
    11 август 12, събота

    View Slide

  149. Ruby on Rails
    11 август 12, събота

    View Slide

  150. Rails
    11 август 12, събота

    View Slide

  151. Rails
    • Ruby on Rails, накратко Rails
    11 август 12, събота

    View Slide

  152. Rails
    • Ruby on Rails, накратко Rails
    • Фреймуърк за уеб приложения
    11 август 12, събота

    View Slide

  153. Rails
    • Ruby on Rails, накратко Rails
    • Фреймуърк за уеб приложения
    • Наследява всички ползи от Ruby и добавя
    още
    11 август 12, събота

    View Slide

  154. Rails
    • Ruby on Rails, накратко Rails
    • Фреймуърк за уеб приложения
    • Наследява всички ползи от Ruby и добавя
    още
    • Много сериозна основа за всякакви
    приложения — от малки, до много големи
    11 август 12, събота

    View Slide

  155. Rails
    11 август 12, събота

    View Slide

  156. Rails
    • Production-ready
    11 август 12, събота

    View Slide

  157. Rails
    • Production-ready
    • Сигурността е на почит
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  161. Production-ready
    Или, кой ползва Rails?
    11 август 12, събота

    View Slide

  162. Twitter
    В младите си години
    11 август 12, събота

    View Slide

  163. GitHub
    11 август 12, събота

    View Slide

  164. SoundCloud
    11 август 12, събота

    View Slide

  165. Shopify
    11 август 12, събота

    View Slide

  166. Songkick
    11 август 12, събота

    View Slide

  167. Groupon
    11 август 12, събота

    View Slide

  168. Basecamp
    11 август 12, събота

    View Slide

  169. Много други...
    11 август 12, събота

    View Slide

  170. История
    11 август 12, събота

    View Slide

  171. История
    • Първоначален автор е David Heinemeier
    Hansson
    11 август 12, събота

    View Slide

  172. История
    • Първоначален автор е David Heinemeier
    Hansson
    • Първите commit-и във VCS-а на Rails са от
    2004-та година
    11 август 12, събота

    View Slide

  173. История
    • Първоначален автор е David Heinemeier
    Hansson
    • Първите commit-и във VCS-а на Rails са от
    2004-та година
    • Изваден от негов проект (Basecamp)
    11 август 12, събота

    View Slide

  174. История
    • Първоначален автор е David Heinemeier
    Hansson
    • Първите commit-и във VCS-а на Rails са от
    2004-та година
    • Изваден от негов проект (Basecamp)
    • Силно асоцииран с 37signals
    11 август 12, събота

    View Slide

  175. История
    • Първоначален автор е David Heinemeier
    Hansson
    • Първите commit-и във VCS-а на Rails са от
    2004-та година
    • Изваден от негов проект (Basecamp)
    • Силно асоцииран с 37signals
    • Въпреки това, open-source и свободен
    11 август 12, събота

    View Slide

  176. DHH?
    11 август 12, събота

    View Slide

  177. DHH
    Източник: http://www.flickr.com/photos/gotomi/3335331857/
    11 август 12, събота

    View Slide

  178. DHH
    Източник: http://www.concept47.com/austin_web_developer_blog/developers/is-rails-a-ghetto-
    developments-in-the-ror-space/
    11 август 12, събота

    View Slide

  179. Елементи на Rails
    11 август 12, събота

    View Slide

  180. Компонентен
    11 август 12, събота

    View Slide

  181. Компонентен
    • Rails е Ruby gem
    11 август 12, събота

    View Slide

  182. Компонентен
    • Rails е Ruby gem
    • Близо 11 милиона сваляния
    11 август 12, събота

    View Slide

  183. Компонентен
    • Rails е Ruby gem
    • Близо 11 милиона сваляния
    • Няколко самостоятелни компонента
    11 август 12, събота

    View Slide

  184. Компонентен
    • Rails е Ruby gem
    • Близо 11 милиона сваляния
    • Няколко самостоятелни компонента
    • Заменяеми с алтернативи
    11 август 12, събота

    View Slide

  185. Компонентен
    • Rails е Ruby gem
    • Близо 11 милиона сваляния
    • Няколко самостоятелни компонента
    • Заменяеми с алтернативи
    • Един gem-лепило, спояващ компонентите
    11 август 12, събота

    View Slide

  186. Компоненти
    Основните:
    11 август 12, събота

    View Slide

  187. Компоненти
    • activerecord — интерфейс към базата
    Основните:
    11 август 12, събота

    View Slide

  188. Компоненти
    • activerecord — интерфейс към базата
    • actionmailer — пощальон
    Основните:
    11 август 12, събота

    View Slide

  189. Компоненти
    • activerecord — интерфейс към базата
    • actionmailer — пощальон
    • actionpack — маршрутизатор на стероиди
    Основните:
    11 август 12, събота

    View Slide

  190. Компоненти
    • activerecord — интерфейс към базата
    • actionmailer — пощальон
    • actionpack — маршрутизатор на стероиди
    • activesupport — всякакви благинки
    Основните:
    11 август 12, събота

    View Slide

  191. Компоненти
    • activerecord — интерфейс към базата
    • actionmailer — пощальон
    • actionpack — маршрутизатор на стероиди
    • activesupport — всякакви благинки
    • railties — лепилото
    Основните:
    11 август 12, събота

    View Slide

  192. Концепции и
    принципи
    11 август 12, събота

    View Slide

  193. MVC
    11 август 12, събота

    View Slide

  194. MVC
    11 август 12, събота

    View Slide

  195. MVC
    • Model-View-Controller архитектура
    11 август 12, събота

    View Slide

  196. MVC
    • Model-View-Controller архитектура
    • Бизнес логика в моделите
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

  199. ORM
    11 август 12, събота

    View Slide

  200. ORM
    11 август 12, събота

    View Slide

  201. ORM
    • Object-relational mapping
    11 август 12, събота

    View Slide

  202. ORM
    • Object-relational mapping
    • Естествено продължение на MVC
    11 август 12, събота

    View Slide

  203. ORM
    • Object-relational mapping
    • Естествено продължение на MVC
    • Не пишете SQL директно
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

  206. ActiveRecord
    11 август 12, събота

    View Slide

  207. ActiveRecord
    • ORM, който идва по подразбиране с Rails
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  212. ActiveRecord
    11 август 12, събота

    View Slide

  213. ActiveRecord
    11 август 12, събота

    View Slide

  214. ActiveRecord
    11 август 12, събота

    View Slide

  215. ActiveRecord
    11 август 12, събота

    View Slide

  216. ActiveRecord
    11 август 12, събота

    View Slide

  217. ActiveRecord
    11 август 12, събота

    View Slide

  218. ActiveRecord
    11 август 12, събота

    View Slide

  219. ActiveRecord
    11 август 12, събота

    View Slide

  220. ActiveRecord
    11 август 12, събота

    View Slide

  221. ActiveRecord
    11 август 12, събота

    View Slide

  222. ActiveRecord
    11 август 12, събота

    View Slide

  223. ActiveRecord
    11 август 12, събота

    View Slide

  224. ActiveRecord
    11 август 12, събота

    View Slide

  225. Асоциации в AR
    11 август 12, събота

    View Slide

  226. Асоциации в AR
    11 август 12, събота

    View Slide

  227. Асоциации в AR
    11 август 12, събота

    View Slide

  228. Асоциации в AR
    11 август 12, събота

    View Slide

  229. Асоциации в AR
    11 август 12, събота

    View Slide

  230. Асоциации в AR
    11 август 12, събота

    View Slide

  231. Асоциации в AR
    11 август 12, събота

    View Slide

  232. Асоциации в AR
    11 август 12, събота

    View Slide

  233. Асоциации в AR
    11 август 12, събота

    View Slide

  234. Асоциации в AR
    11 август 12, събота

    View Slide

  235. Асоциации в AR
    11 август 12, събота

    View Slide

  236. Асоциации в AR
    11 август 12, събота

    View Slide

  237. Асоциации в AR
    11 август 12, събота

    View Slide

  238. Валидации
    11 август 12, събота

    View Slide

  239. Валидации
    • Валидация на данните, постъпващи към
    вашите модели
    11 август 12, събота

    View Slide

  240. Валидации
    • Валидация на данните, постъпващи към
    вашите модели
    • Задължителни полета
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  246. Валидации
    11 август 12, събота

    View Slide

  247. Валидации
    11 август 12, събота

    View Slide

  248. Валидации
    11 август 12, събота

    View Slide

  249. Валидации
    11 август 12, събота

    View Slide

  250. ActiveRecord
    11 август 12, събота

    View Slide

  251. ActiveRecord
    • Много богато API
    11 август 12, събота

    View Slide

  252. ActiveRecord
    • Много богато API
    • CRUD
    11 август 12, събота

    View Slide

  253. ActiveRecord
    • Много богато API
    • CRUD
    • Асоциации (has_one, has_many,
    belongs_to, has_and_belongs_to_many)
    11 август 12, събота

    View Slide

  254. ActiveRecord
    • Много богато API
    • CRUD
    • Асоциации (has_one, has_many,
    belongs_to, has_and_belongs_to_many)
    • Валидации
    11 август 12, събота

    View Slide

  255. ActiveRecord
    • Много богато API
    • CRUD
    • Асоциации (has_one, has_many,
    belongs_to, has_and_belongs_to_many)
    • Валидации
    • Security през whitelist/blacklist на полета
    (attr_accessible/attr_protected)
    11 август 12, събота

    View Slide

  256. ActiveRecord
    • Много богато API
    • CRUD
    • Асоциации (has_one, has_many,
    belongs_to, has_and_belongs_to_many)
    • Валидации
    • Security през whitelist/blacklist на полета
    (attr_accessible/attr_protected)
    • Ruby!
    11 август 12, събота

    View Slide

  257. NoSQL
    11 август 12, събота

    View Slide

  258. NoSQL
    • Можете да ползвате и NoSQL бази данни
    11 август 12, събота

    View Slide

  259. NoSQL
    • Можете да ползвате и NoSQL бази данни
    • MongoDB се поддържа през Mongoid
    11 август 12, събота

    View Slide

  260. NoSQL
    • Можете да ползвате и NoSQL бази данни
    • MongoDB се поддържа през Mongoid
    • API-то му е подобно на ActiveRecord
    11 август 12, събота

    View Slide

  261. NoSQL
    • Можете да ползвате и NoSQL бази данни
    • MongoDB се поддържа през Mongoid
    • API-то му е подобно на ActiveRecord
    • Също поддържа валидации и асоциации
    11 август 12, събота

    View Slide

  262. NoSQL
    • Можете да ползвате и NoSQL бази данни
    • MongoDB се поддържа през Mongoid
    • API-то му е подобно на ActiveRecord
    • Също поддържа валидации и асоциации
    • Валидациите всъщност идват от
    ActiveModel
    11 август 12, събота

    View Slide

  263. Контролери
    11 август 12, събота

    View Slide

  264. Контролери
    11 август 12, събота

    View Slide

  265. Контролери
    • Свързващото звено между модели и
    изгледи
    11 август 12, събота

    View Slide

  266. Контролери
    • Свързващото звено между модели и
    изгледи
    • Без прекалено много код вътре
    11 август 12, събота

    View Slide

  267. Контролери
    • Свързващото звено между модели и
    изгледи
    • Без прекалено много код вътре
    • Имат достъп до HTTP request-а
    11 август 12, събота

    View Slide

  268. Контролери
    • Свързващото звено между модели и
    изгледи
    • Без прекалено много код вътре
    • Имат достъп до HTTP request-а
    • Указват кои изгледи да се рендерират или
    какъв HTTP код да се върне
    11 август 12, събота

    View Slide

  269. Контролери
    11 август 12, събота

    View Slide

  270. Контролери
    • params съдържа параметри от HTTP заявката
    11 август 12, събота

    View Slide

  271. Контролери
    • params съдържа параметри от HTTP заявката
    • Рендерира изгледа projects/show.html
    11 август 12, събота

    View Slide

  272. Контролери
    • params съдържа параметри от HTTP заявката
    • Рендерира изгледа projects/show.html
    • @project е достъпно в изгледа
    11 август 12, събота

    View Slide

  273. Контролери
    11 август 12, събота

    View Slide

  274. Контролери
    11 август 12, събота

    View Slide

  275. Контролери
    11 август 12, събота

    View Slide

  276. Контролери
    • show “визуализира” ресурса по конвенция
    11 август 12, събота

    View Slide

  277. Контролери
    • show “визуализира” ресурса по конвенция
    • edit показва форма за редактиране на ресурса
    11 август 12, събота

    View Slide

  278. Контролери
    • show “визуализира” ресурса по конвенция
    • edit показва форма за редактиране на ресурса
    • Достъпни само по HTTP GET
    11 август 12, събота

    View Slide

  279. Контролери
    • show “визуализира” ресурса по конвенция
    • edit показва форма за редактиране на ресурса
    • Достъпни само по HTTP GET
    • update е достъпно само през HTTP POST и се
    грижи за “обновяване” на ресурса
    11 август 12, събота

    View Slide

  280. Контролери
    11 август 12, събота

    View Slide

  281. Контролери
    11 август 12, събота

    View Slide

  282. Контролери
    • В случай на успех, прави HTTP 302 към show
    11 август 12, събота

    View Slide

  283. Контролери
    • В случай на успех, прави HTTP 302 към show
    • Горното решава “Please confirm page reload”
    проблема
    11 август 12, събота

    View Slide

  284. Контролери
    • В случай на успех, прави HTTP 302 към show
    • Горното решава “Please confirm page reload”
    проблема
    • При валидационна грешка, рендерира формата
    отново
    11 август 12, събота

    View Slide

  285. Application Server
    11 август 12, събота

    View Slide

  286. Application Server
    11 август 12, събота

    View Slide

  287. Application Server
    • Вашето приложение се “стартира” веднъж
    11 август 12, събота

    View Slide

  288. Application Server
    • Вашето приложение се “стартира” веднъж
    • Вашият и кодът на Rails се прочитат веднъж
    11 август 12, събота

    View Slide

  289. Application Server
    • Вашето приложение се “стартира” веднъж
    • Вашият и кодът на Rails се прочитат веднъж
    • Един request = един процес (или нишка)
    11 август 12, събота

    View Slide

  290. Application Server
    • Вашето приложение се “стартира” веднъж
    • Вашият и кодът на Rails се прочитат веднъж
    • Един request = един процес (или нишка)
    • Multi-process или multi-threaded архитектура
    11 август 12, събота

    View Slide

  291. Application Server
    • Вашето приложение се “стартира” веднъж
    • Вашият и кодът на Rails се прочитат веднъж
    • Един request = един процес (или нишка)
    • Multi-process или multi-threaded архитектура
    • 200+ MB RAM на процес
    11 август 12, събота

    View Slide

  292. Application Server
    • Вашето приложение се “стартира” веднъж
    • Вашият и кодът на Rails се прочитат веднъж
    • Един request = един процес (или нишка)
    • Multi-process или multi-threaded архитектура
    • 200+ MB RAM на процес
    • Веднъж заредено, вашето приложение
    отговаря бързо
    11 август 12, събота

    View Slide

  293. Application Server
    11 август 12, събота

    View Slide

  294. Application Server
    • Старт в рамките на четвърт минута
    11 август 12, събота

    View Slide

  295. Application Server
    • Старт в рамките на четвърт минута
    • Кешира дефиниции на класове, модули и т.н.
    11 август 12, събота

    View Slide

  296. Application Server
    • Старт в рамките на четвърт минута
    • Кешира дефиниции на класове, модули и т.н.
    • При промяна на кода — рестарт
    11 август 12, събота

    View Slide

  297. Application Server
    • Старт в рамките на четвърт минута
    • Кешира дефиниции на класове, модули и т.н.
    • При промяна на кода — рестарт
    • А как разработвам, тогава!?
    11 август 12, събота

    View Slide

  298. Environments
    11 август 12, събота

    View Slide

  299. Environments
    11 август 12, събота

    View Slide

  300. Environments
    • Ясно разделение на обкръженията
    11 август 12, събота

    View Slide

  301. Environments
    • Ясно разделение на обкръженията
    • Три обкръжения по подразбиране
    11 август 12, събота

    View Slide

  302. Environments
    • Ясно разделение на обкръженията
    • Три обкръжения по подразбиране
    • Development
    11 август 12, събота

    View Slide

  303. Environments
    • Ясно разделение на обкръженията
    • Три обкръжения по подразбиране
    • Development
    • Test
    11 август 12, събота

    View Slide

  304. Environments
    • Ясно разделение на обкръженията
    • Три обкръжения по подразбиране
    • Development
    • Test
    • Production
    11 август 12, събота

    View Slide

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

    View Slide

  306. Development
    11 август 12, събота

    View Slide

  307. Development
    • Ползва се по подразбиране при
    разработка
    11 август 12, събота

    View Slide

  308. Development
    • Ползва се по подразбиране при
    разработка
    • Автоматично презарежда само кода на
    вашето приложение при нужда
    11 август 12, събота

    View Slide

  309. Development
    • Ползва се по подразбиране при
    разработка
    • Автоматично презарежда само кода на
    вашето приложение при нужда
    • Не кешира дефиниции на класове и
    модули
    11 август 12, събота

    View Slide

  310. Development
    • Ползва се по подразбиране при
    разработка
    • Автоматично презарежда само кода на
    вашето приложение при нужда
    • Не кешира дефиниции на класове и
    модули
    • Виждате backtrace при изключения
    11 август 12, събота

    View Slide

  311. Development
    • Ползва се по подразбиране при
    разработка
    • Автоматично презарежда само кода на
    вашето приложение при нужда
    • Не кешира дефиниции на класове и
    модули
    • Виждате backtrace при изключения
    • Има и някои други малки разлики
    11 август 12, събота

    View Slide

  312. Production
    11 август 12, събота

    View Slide

  313. Production
    • На “production” сървъра
    11 август 12, събота

    View Slide

  314. Production
    • На “production” сървъра
    • Кешира много неща
    11 август 12, събота

    View Slide

  315. Production
    • На “production” сървъра
    • Кешира много неща
    • Рестарт за нова версия на кода
    11 август 12, събота

    View Slide

  316. Production
    • На “production” сървъра
    • Кешира много неща
    • Рестарт за нова версия на кода
    • Без backtrace при изключения
    11 август 12, събота

    View Slide

  317. Production
    • На “production” сървъра
    • Кешира много неща
    • Рестарт за нова версия на кода
    • Без backtrace при изключения
    • Други малки разлики
    11 август 12, събота

    View Slide

  318. Asset Pipeline
    11 август 12, събота

    View Slide

  319. Asset Pipeline
    11 август 12, събота

    View Slide

  320. Asset Pipeline
    • Зряло решение на сериозен проблем
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  325. Asset Pipeline
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  331. Asset Pipeline
    11 август 12, събота

    View Slide

  332. Asset Pipeline
    Вашият код
    11 август 12, събота

    View Slide

  333. Asset Pipeline
    Вашият код
    Development
    11 август 12, събота

    View Slide

  334. Asset Pipeline
    Вашият код
    Development
    Production
    11 август 12, събота

    View Slide

  335. Asset Pipeline
    11 август 12, събота

    View Slide

  336. Asset Pipeline
    • По-малко HTTP заявки = по-бързо
    11 август 12, събота

    View Slide

  337. Asset Pipeline
    • По-малко HTTP заявки = по-бързо
    • По-малки файлове = по-бързо
    11 август 12, събота

    View Slide

  338. Asset Pipeline
    • По-малко HTTP заявки = по-бързо
    • По-малки файлове = по-бързо
    • Кеширани файлове = по-бързо
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  342. SASS
    11 август 12, събота

    View Slide

  343. SASS
    SCSS
    11 август 12, събота

    View Slide

  344. SASS
    SCSS CSS
    11 август 12, събота

    View Slide

  345. SASS
    11 август 12, събота

    View Slide

  346. SASS
    • Влагане на селектори за по-DRY CSS
    11 август 12, събота

    View Slide

  347. SASS
    • Влагане на селектори за по-DRY CSS
    • Променливи
    11 август 12, събота

    View Slide

  348. SASS
    • Влагане на селектори за по-DRY CSS
    • Променливи
    • Нещо близко до функции
    11 август 12, събота

    View Slide

  349. SASS
    • Влагане на селектори за по-DRY CSS
    • Променливи
    • Нещо близко до функции
    • Аритметика с пиксели
    11 август 12, събота

    View Slide

  350. SASS
    • Влагане на селектори за по-DRY CSS
    • Променливи
    • Нещо близко до функции
    • Аритметика с пиксели
    • Аритметика с цветове (lighten/darken)
    11 август 12, събота

    View Slide

  351. SASS
    • Влагане на селектори за по-DRY CSS
    • Променливи
    • Нещо близко до функции
    • Аритметика с пиксели
    • Аритметика с цветове (lighten/darken)
    • “Вграден” в asset pipeline-а
    11 август 12, събота

    View Slide

  352. SASS
    • Влагане на селектори за по-DRY CSS
    • Променливи
    • Нещо близко до функции
    • Аритметика с пиксели
    • Аритметика с цветове (lighten/darken)
    • “Вграден” в asset pipeline-а
    • http://sass-lang.com/
    11 август 12, събота

    View Slide

  353. CoffeeScript
    JavaScript
    CoffeeScript
    11 август 12, събота

    View Slide

  354. CoffeeScript
    11 август 12, събота

    View Slide

  355. CoffeeScript
    11 август 12, събота

    View Slide

  356. CoffeeScript
    • JavaScript с по-приятен синтаксис
    11 август 12, събота

    View Slide

  357. CoffeeScript
    • JavaScript с по-приятен синтаксис
    • Покрива доста проблеми на JS
    11 август 12, събота

    View Slide

  358. CoffeeScript
    • JavaScript с по-приятен синтаксис
    • Покрива доста проблеми на JS
    • Вкарва нови и готини неща
    11 август 12, събота

    View Slide

  359. CoffeeScript
    • JavaScript с по-приятен синтаксис
    • Покрива доста проблеми на JS
    • Вкарва нови и готини неща
    • “Вграден” в asset pipeline-а
    11 август 12, събота

    View Slide

  360. CoffeeScript
    • JavaScript с по-приятен синтаксис
    • Покрива доста проблеми на JS
    • Вкарва нови и готини неща
    • “Вграден” в asset pipeline-а
    • http://coffeescript.org/
    11 август 12, събота

    View Slide

  361. Маршрутизатор
    11 август 12, събота

    View Slide

  362. Маршрутизатор
    11 август 12, събота

    View Slide

  363. Маршрутизатор
    • Централизирано знание
    11 август 12, събота

    View Slide

  364. Маршрутизатор
    • Централизирано знание
    • Двупосочна връзка между HTTP и методи
    във вашите контролери
    11 август 12, събота

    View Slide

  365. Маршрутизатор
    • Централизирано знание
    • Двупосочна връзка между HTTP и методи
    във вашите контролери
    • Какви URL-и обслужва вашето приложение
    11 август 12, събота

    View Slide

  366. Маршрутизатор
    • Централизирано знание
    • Двупосочна връзка между HTTP и методи
    във вашите контролери
    • Какви URL-и обслужва вашето приложение
    • Коя част от кода обслужва даден URL
    11 август 12, събота

    View Slide

  367. Маршрутизатор
    • Централизирано знание
    • Двупосочна връзка между HTTP и методи
    във вашите контролери
    • Какви URL-и обслужва вашето приложение
    • Коя част от кода обслужва даден URL
    • И обратната посока — какъв е URL-ът,
    обслужван от даден код
    11 август 12, събота

    View Slide

  368. Маршрутизатор
    • Централизирано знание
    • Двупосочна връзка между HTTP и методи
    във вашите контролери
    • Какви URL-и обслужва вашето приложение
    • Коя част от кода обслужва даден URL
    • И обратната посока — какъв е URL-ът,
    обслужван от даден код
    • RESTful маршрути и ресурси
    11 август 12, събота

    View Slide

  369. Маршрутизатор
    11 август 12, събота

    View Slide

  370. Маршрутизатор
    11 август 12, събота

    View Slide

  371. Маршрутизатор
    11 август 12, събота

    View Slide

  372. Маршрутизатор
    11 август 12, събота

    View Slide

  373. Маршрутизатор
    Вашият код Генериран URL
    11 август 12, събота

    View Slide

  374. Миграции
    11 август 12, събота

    View Slide

  375. Миграции
    11 август 12, събота

    View Slide

  376. Миграции
    • Структурата на базата ви е в кода
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  382. Миграции и deployment
    11 август 12, събота

    View Slide

  383. Миграции и deployment
    • Имат up() и down() методи
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  388. Миграции
    11 август 12, събота

    View Slide

  389. Миграции
    11 август 12, събота

    View Slide

  390. Миграции
    11 август 12, събота

    View Slide

  391. Миграции
    11 август 12, събота

    View Slide

  392. Миграции
    11 август 12, събота

    View Slide

  393. Тестове
    11 август 12, събота

    View Slide

  394. Тестове
    11 август 12, събота

    View Slide

  395. Тестове
    • Готова структура за писане на тестове
    11 август 12, събота

    View Slide

  396. Тестове
    • Готова структура за писане на тестове
    • Unit-тестове за вашите модели и класове
    11 август 12, събота

    View Slide

  397. Тестове
    • Готова структура за писане на тестове
    • Unit-тестове за вашите модели и класове
    • Контролер-тестове
    11 август 12, събота

    View Slide

  398. Тестове
    • Готова структура за писане на тестове
    • Unit-тестове за вашите модели и класове
    • Контролер-тестове
    • Тестове на вашите изгледи
    11 август 12, събота

    View Slide

  399. Тестове
    • Готова структура за писане на тестове
    • Unit-тестове за вашите модели и класове
    • Контролер-тестове
    • Тестове на вашите изгледи
    • Интеграционни тестове
    11 август 12, събота

    View Slide

  400. Тестове
    • Готова структура за писане на тестове
    • Unit-тестове за вашите модели и класове
    • Контролер-тестове
    • Тестове на вашите изгледи
    • Интеграционни тестове
    • Самият Rails е много добре тестван
    11 август 12, събота

    View Slide

  401. Тестове
    • Готова структура за писане на тестове
    • Unit-тестове за вашите модели и класове
    • Контролер-тестове
    • Тестове на вашите изгледи
    • Интеграционни тестове
    • Самият Rails е много добре тестван
    • Култура на тестване
    11 август 12, събота

    View Slide

  402. Тестове
    11 август 12, събота

    View Slide

  403. Тестове
    • Заменяеми тестови фреймуърци
    11 август 12, събота

    View Slide

  404. Тестове
    • Заменяеми тестови фреймуърци
    • Test::Unit, RSpec, MiniTest — изборът е ваш
    11 август 12, събота

    View Slide

  405. Тестове
    • Заменяеми тестови фреймуърци
    • Test::Unit, RSpec, MiniTest — изборът е ваш
    • Важното е да пишете тестове
    11 август 12, събота

    View Slide

  406. Други аспекти
    11 август 12, събота

    View Slide

  407. Други аспекти
    • Култура на добри практики и качествен код
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  413. 11 август 12, събота

    View Slide

  414. Върхът на айсберга...
    11 август 12, събота

    View Slide

  415. Защо да го уча?
    11 август 12, събота

    View Slide

  416. Защо да го уча?
    • Аналогично на Ruby — ще ви направи по-
    добри и по-щастливи програмисти
    11 август 12, събота

    View Slide

  417. Защо да го уча?
    • Аналогично на Ruby — ще ви направи по-
    добри и по-щастливи програмисти
    • Как да убедя фирмата, в която работя, да
    обърне внимание на Rails?
    11 август 12, събота

    View Slide

  418. Защо да го уча?
    • Аналогично на Ruby — ще ви направи по-
    добри и по-щастливи програмисти
    • Как да убедя фирмата, в която работя, да
    обърне внимание на Rails?
    • Най-лесно: с готов резултат/проект
    11 август 12, събота

    View Slide

  419. Защо да го уча?
    • Аналогично на Ruby — ще ви направи по-
    добри и по-щастливи програмисти
    • Как да убедя фирмата, в която работя, да
    обърне внимание на Rails?
    • Най-лесно: с готов резултат/проект
    • По-лесна поддръжка (документация,
    community, други разработчици)
    11 август 12, събота

    View Slide

  420. Ако ви стана
    интересно...
    11 август 12, събота

    View Slide

  421. 11 август 12, събота

    View Slide

  422. Изцапайте си ръцете!
    11 август 12, събота

    View Slide

  423. Изцапайте си ръцете!
    • Rails Installer http://railsinstaller.org/
    (за Windows и Mac OS)
    11 август 12, събота

    View Slide

  424. Изцапайте си ръцете!
    • Rails Installer http://railsinstaller.org/
    (за Windows и Mac OS)
    • За *NIX дистрибуции не е с два
    клика, но пак е лесно
    11 август 12, събота

    View Slide

  425. Изцапайте си ръцете!
    • Rails Installer http://railsinstaller.org/
    (за Windows и Mac OS)
    • За *NIX дистрибуции не е с два
    клика, но пак е лесно
    • Ако имате нужда от помощ, питайте
    смело!
    11 август 12, събота

    View Slide

  426. Ресурси за Ruby
    11 август 12, събота

    View Slide

  427. http://pragprog.com/book/ruby3/programming-ruby-1-9
    11 август 12, събота

    View Slide

  428. Ресурси за Ruby
    11 август 12, събота

    View Slide

  429. Ресурси за Ruby
    • Онлайн — без инсталация
    11 август 12, събота

    View Slide

  430. Ресурси за Ruby
    • Онлайн — без инсталация
    • RubyMonk — http://rubymonk.com/
    11 август 12, събота

    View Slide

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

    View Slide

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

    View Slide

  433. Или...
    11 август 12, събота

    View Slide

  434. Посетете нашите курсове във ФМИ
    http://fmi.ruby.bg/
    11 август 12, събота

    View Slide

  435. Ресурси за Rails
    11 август 12, събота

    View Slide

  436. http://pragprog.com/book/rails4/agile-web-development-with-rails
    11 август 12, събота

    View Slide

  437. http://guides.rubyonrails.org/
    11 август 12, събота

    View Slide

  438. Ресурси за Rails
    11 август 12, събота

    View Slide

  439. Ресурси за Rails
    • Oще на http://rubyonrails.org/documentation
    11 август 12, събота

    View Slide

  440. Ресурси за Rails
    • Oще на http://rubyonrails.org/documentation
    • Screencasts — http://rubyonrails.org/screencasts
    11 август 12, събота

    View Slide

  441. Ресурси за Rails
    • Oще на http://rubyonrails.org/documentation
    • Screencasts — http://rubyonrails.org/screencasts
    • Например RailsCasts
    11 август 12, събота

    View Slide

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

    View Slide

  443. Учене от примери
    11 август 12, събота

    View Slide

  444. Учене от примери
    • Немалко Rails проекти с отворен код в
    GitHub
    11 август 12, събота

    View Slide

  445. Учене от примери
    • Немалко Rails проекти с отворен код в
    GitHub
    • Например https://github.com/skanev/evans
    11 август 12, събота

    View Slide

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

    View Slide

  447. Учене от примери
    • Немалко Rails проекти с отворен код в
    GitHub
    • Например https://github.com/skanev/evans
    • Това е кодът зад http://fmi.ruby.bg
    • Ще се радваме да ви насочим!
    11 август 12, събота

    View Slide

  448. 11 август 12, събота

    View Slide

  449. Въпроси?
    Димитър Димитров
    http://ddimitrov.name
    @mitio
    11 август 12, събота

    View Slide