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 на релси? • Уеб фреймуърк • Солидна основа за

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

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

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

    вашите уеб приложения • Написан на Ruby • Ще ви направи по-щастливи програмисти • Ще ви направи по-добри програмисти 11 август 12, събота
  5. Целта ми днес • Да ви покажа купчина готини неща

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

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

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

    • Само контурите на айсберга • Да запаля любопитството ви • Да ви засърбят ръцете • Поне половината от вас да пробват Ruby и/или Rails този уикенд от нетърпение 11 август 12, събота
  9. Ruby накратко • Скриптов (интерпретируем) език, подобно на PHP, Python,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • Пускате irb и започвате да си играете с Ruby • Всеки скриптов език може и трябва да има такава REPL-конзола • Е, почти всеки... 11 август 12, събота
  50. Библиотеки • Библиотеките в Ruby се наричат gems • Ползват

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

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

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

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

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

    за всеки Ruby програмист по света • gem install my_cool_gem на конзола и сте в играта 11 август 12, събота
  56. Community • Ruby има много силно и развито community •

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Matz’ Ruby Implementation • JRuby • IronRuby • Rubinius • MacRuby • MagLev — http://maglev.github.com • MRuby • Ruby in Google Chrome? 11 август 12, събота
  73. Защо Ruby? • Само върха на айсберга — още много

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

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

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

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

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

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

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

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

    уеб приложения • Наследява всички ползи от Ruby и добавя още • Много сериозна основа за всякакви приложения — от малки, до много големи 11 август 12, събота
  82. Rails • Production-ready • Сигурността е на почит • Пълен

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

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

    с добри практики • Авангарден • Модел, който много други уеб фреймуърци копират (например CakePHP) 11 август 12, събота
  85. История • Първоначален автор е David Heinemeier Hansson • Първите

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

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

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

    commit-и във VCS-а на Rails са от 2004-та година • Изваден от негов проект (Basecamp) • Силно асоцииран с 37signals • Въпреки това, open-source и свободен 11 август 12, събота
  89. Компонентен • Rails е Ruby gem • Близо 11 милиона

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

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

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

    сваляния • Няколко самостоятелни компонента • Заменяеми с алтернативи • Един gem-лепило, спояващ компонентите 11 август 12, събота
  93. Компоненти • activerecord — интерфейс към базата • actionmailer —

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

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

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

    пощальон • actionpack — маршрутизатор на стероиди • activesupport — всякакви благинки • railties — лепилото Основните: 11 август 12, събота
  97. MVC • Model-View-Controller архитектура • Бизнес логика в моделите •

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

    Презентационна логика (HTML) във файловете-изгледи • Навръзваща логика в контролерите 11 август 12, събота
  99. ORM • Object-relational mapping • Естествено продължение на MVC •

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

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

    Не пишете SQL директно • Това прави за вас ActiveRecord (или друг ORM) • На теория сте database-agnostic 11 август 12, събота
  102. ActiveRecord • ORM, който идва по подразбиране с Rails •

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    изгледа projects/show.html • @project е достъпно в изгледа 11 август 12, събота
  123. Контролери • show “визуализира” ресурса по конвенция • edit показва

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

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

    форма за редактиране на ресурса • Достъпни само по HTTP GET • update е достъпно само през HTTP POST и се грижи за “обновяване” на ресурса 11 август 12, събота
  126. Контролери • В случай на успех, прави HTTP 302 към

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

    show • Горното решава “Please confirm page reload” проблема • При валидационна грешка, рендерира формата отново 11 август 12, събота
  128. Application Server • Вашето приложение се “стартира” веднъж • Вашият

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

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

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

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

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

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

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

    Кешира дефиниции на класове, модули и т.н. • При промяна на кода — рестарт • А как разработвам, тогава!? 11 август 12, събота
  136. Environments • Ясно разделение на обкръженията • Три обкръжения по

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

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

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

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

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

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

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

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

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

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

    Рестарт за нова версия на кода • Без backtrace при изключения • Други малки разлики 11 август 12, събота
  147. Asset Pipeline • Зряло решение на сериозен проблем • “Пакетира”

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    на JS • Вкарва нови и готини неща • “Вграден” в asset pipeline-а • http://coffeescript.org/ 11 август 12, събота
  169. Маршрутизатор • Централизирано знание • Двупосочна връзка между HTTP и

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    за вашите модели и класове • Контролер-тестове • Тестове на вашите изгледи • Интеграционни тестове • Самият Rails е много добре тестван • Култура на тестване 11 август 12, събота
  189. Тестове • Заменяеми тестови фреймуърци • Test::Unit, RSpec, MiniTest —

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

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

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

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

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

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

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

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

    ви направи по- добри и по-щастливи програмисти • Как да убедя фирмата, в която работя, да обърне внимание на Rails? • Най-лесно: с готов резултат/проект • По-лесна поддръжка (документация, community, други разработчици) 11 август 12, събота
  198. Изцапайте си ръцете! • Rails Installer http://railsinstaller.org/ (за Windows и

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

    Mac OS) • За *NIX дистрибуции не е с два клика, но пак е лесно • Ако имате нужда от помощ, питайте смело! 11 август 12, събота
  200. Ресурси за Ruby • Онлайн — без инсталация • RubyMonk

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

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

    — http://rubymonk.com/ • TryRuby — http://tryruby.org/levels/1/ challenges/0 • Тонове из интернет 11 август 12, събота
  203. Ресурси за Rails • Oще на http://rubyonrails.org/documentation • Screencasts —

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

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

    http://rubyonrails.org/screencasts • Например RailsCasts • AsciiCasts — текстов вариант на горното 11 август 12, събота
  206. Учене от примери • Немалко Rails проекти с отворен код

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

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

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