Накратко за ползите от ученето на нови неща и на какво точно конкретно са ме научили Ruby като език за програмиране и Ruby on Rails като уеб фреймуърк. Няколко примера как съм приложил наученото в един legacy PHP проект.
трафик в България • Клонинг на Flickr • Написан на PHP • Отдавна не е наша собственост и, съответно, отдавна не е трети по трафик :) • Работеше прилично бързо
трафик в България • Клонинг на Flickr • Написан на PHP • Отдавна не е наша собственост и, съответно, отдавна не е трети по трафик :) • Работеше прилично бързо • Беше приличен проект (въпреки PHP-то)
Perl и други • Отворен код • Набрал доста голяма популярност вече (особено в Силиконовата долина) • Изцяло обектно-ориентиран • Авторът му е Юкихиро Matz Мацумото
typing) • Можете да променяте почти всичко, което ви идва наготово с езика и стандартната му библиотека (monkey- patching) • Можете да инспектирате или създавате “код” в движение, докато програмата ви работи (метапрограмиране)
други езици... • Забравете за haystack и needle • Забравете реда на аргументите на in_array(), str_replace() и strpos() • А може би трябваше да кажа StrPos()?
други езици... • Забравете за haystack и needle • Забравете реда на аргументите на in_array(), str_replace() и strpos() • А може би трябваше да кажа StrPos()? • Силен контраст с PHP в това отношение
къдрави скоби на традиционните места • Може да изпускате кръглите скоби при дефиниране и извикване на методи • Литерални (синтактични) конструктори за често употребявани типове данни като речници и списъци
къдрави скоби на традиционните места • Може да изпускате кръглите скоби при дефиниране и извикване на методи • Литерални (синтактични) конструктори за често употребявани типове данни като речници и списъци • Синтаксис, който подтиква към писане на код, четим като обикновен текст
true, false, nil, числа и прочее • Включително класовете • Класовете са инстанции на класа Class, а класът Class е наследник на модул; статичните методи са всъщност инстанционни методи на тази инстанция
място в езика • Лесно може да направите ваш клас, който да се държи (да квака) като колекция • map/collect, filter/reject, select/ find_all работят над всички колекции
място в езика • Лесно може да направите ваш клас, който да се държи (да квака) като колекция • map/collect, filter/reject, select/ find_all работят над всички колекции • Функции, приемащи като аргументи други функции
място в езика • Лесно може да направите ваш клас, който да се държи (да квака) като колекция • map/collect, filter/reject, select/ find_all работят над всички колекции • Функции, приемащи като аргументи други функции • Анонимни функции и блокове
и преувеличено, това твърдение е част от философията на езика • Минимално количество синтаксис, повече методи в класове и модули • Всичко, което не е ключова дума, може да бъде променено от вас
и преувеличено, това твърдение е част от философията на езика • Минимално количество синтаксис, повече методи в класове и модули • Всичко, което не е ключова дума, може да бъде променено от вас • Много малко неща са ключови думи
Личи си от количеството и качеството на наличните библиотеки • Повечето от тях са ползваеми в production • Следва нови тенденции и добри практики • Бързо адаптира нови технологии и версии на езика
Колко е хубаво, когато има конвенции • Силата на DSL-ите • Що е то наистина динамичен език • Chaining, блокове, функционални закачки... • Какво е да пишеш на език, който те прави щастлив
вашите уеб приложения • Написан на Ruby (наследява всички ползи и добавя още) • Много сериозна основа за всякакви приложения — от малки, до много големи
вашите уеб приложения • Написан на Ruby (наследява всички ползи и добавя още) • Много сериозна основа за всякакви приложения — от малки, до много големи • Ще ви направи по-щастливи програмисти
вашите уеб приложения • Написан на Ruby (наследява всички ползи и добавя още) • Много сериозна основа за всякакви приложения — от малки, до много големи • Ще ви направи по-щастливи програмисти • Ще ви направи по-добри програмисти
Поддържа PostgreSQL, MySQL, Sqlite3 • Може да го подкарате и с MSSQL, Oracle и други бази • При нужда, може да напишете и ваш адаптер • Query интерфейс, поддържащ CRUD операции
Задължителни полета • Полета, които трябва да са само числа • Числа в определен интервал • Низове с определена дължина • Низове, отговарящи на определен формат
Задължителни полета • Полета, които трябва да са само числа • Числа в определен интервал • Низове с определена дължина • Низове, отговарящи на определен формат • Ваши валидатори
се ползват при писане в базата, особено ако трябва да пуснете няколко заявки • Централизиран ORM дава лесна възможност за добавяне на транзакции • Ако знаех това през 2007-ма...
Създаване и премахване на таблици • Добавяне/премахване на колони, индекси и прочее • Всичко е във вашия код • Улеснява колаборацията • Улеснява deployment-а на вашето приложение
Тоест, могат да бъдат “обръщани” • Качвате новата версия на базата заедно с новата версия на кода • Ако нещо се обърка, down() ви спасява • Произволен Ruby-код в миграциите
вашите asset-и (CSS, JavaScript, картинки и прочее) • Комбинира JavaScript файловете ви в един и го minify-ва и gzip-ва • Същото прави и за CSS • Имената на резултатните файлове съдържат хеш от съдържанието на файла
на файла се сменя хеша и следователно името му • Кеширате во веки веков • Поддръжка на CDN • Ползвате помощни функции, за да вкарвате линкове към вашите статични файлове
на файла се сменя хеша и следователно името му • Кеширате во веки веков • Поддръжка на CDN • Ползвате помощни функции, за да вкарвате линкове към вашите статични файлове • Горното важи за и за HTML, и за CSS
файлове = по-бързо • Кеширани файлове = по-бързо • Употреба на CDN = по-бързо • Без главоболие от ваша страна • Бонус — pre-processor-и на CSS и JavaScript!
• Convention over configuration • The Rails Way™ • VCS — Git • Управление на зависимости от външни библиотеки — Bundler • Инфраструктура за пращане на мейли, с подобна на MVC-архитектура
Миграции • Основите на шаблона MVC • Convention over configuration • Че ми трябват тестове :) • Транзакции около всичко, що пише в базата! • PostgreSQL > MySQL