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

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

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

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

9d3a04d8252ce89d5edbb0268af7ad8e?s=128

Dimitar Dimitrov

July 06, 2013
Tweet

More Decks by Dimitar Dimitrov

Other Decks in Programming

Transcript

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

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

  4. John Doe http://ddimitrov.name @mitio в Twitter Лайв ООД Пиша основно

    уеб с Ruby on Rails и освирквам заслужили депутати
  5. Учене

  6. Ruby

  7. Ruby on Rails

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

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

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

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

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

  14. Защо Clojure?

  15. Защо Groovy и Grails?

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

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

    тъпи.” — Митьо Питона
  18. Slides with pics or it isn’t true

  19. Ruby

  20. Идвам от PHP бекграунд и бях зле! (PHP-то беше отдавна.

    Все още съм зле. Да си го кажем.)
  21. Уеб и PHP

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

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

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

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

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

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

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

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

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

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

  32. Ruby

  33. Ruby накратко

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  51. Duck Typing

  52. Duck Typing

  53. Moneky-patching

  54. Moneky-patching

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    на метода each().
  87. Малко синтаксис

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

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

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

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

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

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

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

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

    бъдат променени
  96. Community

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

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

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

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

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

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

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

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

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

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

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

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

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

  110. Ruby on Rails

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

  112. None
  113. Ruby on Rails

  114. Ruby на релси?

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

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

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

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

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

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

    вашите уеб приложения • Написан на Ruby (наследява всички ползи и добавя още) • Много сериозна основа за всякакви приложения — от малки, до много големи • Ще ви направи по-щастливи програмисти • Ще ви направи по-добри програмисти
  121. Rails

  122. Rails • Production-ready

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

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

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

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

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

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

  129. GitHub

  130. SoundCloud

  131. Shopify

  132. Songkick

  133. Groupon

  134. Basecamp

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

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

  137. MVC

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

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

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

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

    Презентационна логика (HTML) във файловете-изгледи • Навръзваща логика в контролерите
  142. ORM

  143. ORM • Object-relational mapping

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

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

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

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

    Не пишете SQL директно • Това прави за вас ActiveRecord (или друг ORM) • На теория сте database-agnostic
  148. ActiveRecord

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  164. Валидации

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

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

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

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

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

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

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

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

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

  174. Транзакции • Това е от мотиките • Задължително е да

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

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

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

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

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

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

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

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

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

    подразбиране • Development • Test • Production • Може да добавите ваши
  184. Кой разработва на production сървъри?

  185. Deployment

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

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

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

  190. Миграции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  205. Asset Pipeline

  206. Asset Pipeline

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

  208. Asset Pipeline • Зряло решение на сериозен проблем • “Пакетира”

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

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

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

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

  213. Asset Pipeline • Лесен cache invalidation — при промяна съдържанието

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

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

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

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

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

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

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

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

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

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

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

    файлове = по-бързо • Кеширани файлове = по-бързо • Употреба на CDN = по-бързо • Без главоболие от ваша страна • Бонус — pre-processor-и на CSS и JavaScript!
  225. SASS

  226. SASS SCSS

  227. SASS SCSS CSS

  228. CoffeeScript JavaScript CoffeeScript

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Миграции • Основите на шаблона MVC • Convention over configuration • Че ми трябват тестове :) • Транзакции около всичко, що пише в базата! • PostgreSQL > MySQL
  245. Ако ви стана интересно...

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

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

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

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

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

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

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

    — http://rubymonk.com/ • TryRuby — http://tryruby.org/levels/1/ challenges/0 • Тонове из интернет
  254. Ресурси за Rails

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

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

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

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

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

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

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

    http://rubyonrails.org/screencasts • Например RailsCasts • AsciiCasts — текстов вариант на горното
  262. Учене от примери

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

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

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

    в GitHub • Например https://github.com/skanev/evans • Това е кодът зад http://fmi.ruby.bg
  266. “На <конференция> срещнах хора, които ме запалиха по <технология>” —

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

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

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

  270. None