лично я не знаю по памяти ни одного сайта с доками по руби/рельсам и не испытываю по этому поводу никаких проблем
нужные мне доки или railstutorial с ответом всегда где-то там на 1-3 позиции
ага, знаю. 4 года пользовался. выше в комментариях показано, насколько это удобно.
глупый программист сам дурак, задумал сотворить какую-то ересь, не предусмотренную ни одной из пятидесяти функций стандартной библиотеки по работе с массивами. «фиксится»… ну да, пофиксим это и всё станет хорошо. в топике fractal of bad design как раз об этом и пишется, о костыле на костыле, каждый из которых ещё и сделан по-разному.
и ещё хорошо вам живётся, если всегда достаточно лишь выбрать данные из базы.
Принятие функционального подхода при работе с данными будет огромным левелапом к вашим программистским скилам, вопрос только в поддержке этого хозяйства в используемом вами языке программирования — в наличии синтаксиса лямбд с замыканиями и хорошой стандартной библиотекой.
Такое ощущение, что статья написана для менеджеров, которые, почитав разноцветные рекламные буклетики, будут выбирать платформу, на которой вести разработку.
Весь текст умещается в четыре утверждения:
.NET работает намного быстрее динамических языков. (с этим не поспоришь)
ASP.NET MVC намного продуктивнее WebForms. (и какое это имеет отношение к языкам unix стека?)
От Azure держитесь подальше. (солидный довод в пользу дотнета)
Microsoft раздаёт трёхление лицензии на свои продукты. (десятки тысяч $ за mssql сервер это серьёзно, особенно с учётом бесплатности аналогов)
Как насчёт доводов непосредственно для разработчиков? Что-нибудь такое:
У нас есть NuGet!
TeamFoundation это удобно!
IIS делает стектрейсы в эвентлоги!
С AppDomain не надо стопать сервисы!
RDP — сделай всё мышкой!
Вот так не очень хорошо поступать, стоит сразу привыкать делать правильно, тем более никакой сложности это не вносит. А именно, с oauth секрет кеями вести себя так же, как и с креденшелами к базам данным — выносить в отдельный конфиг, чтобы оно не светилось в репозитории.
Пару-тройку лет назад ещё большим доводом в пользу php была огромная проблема с хостингами для ruby/python.
А вот сейчас, если не считать хостеров с сервисом 'всё за пять копеек', то этой неприятности уже нет.
Частично соглашусь, увлёкшись метапрограммированием можно страшного наворотить :)
А вот обилие вариантов делания одного и того же на самом деле огромнейший плюс, позволяющий писать DSL'и и в конкретных ситуациях получать очень компактный выразительный код.
Взять тот же RSpec или что-то подобное Person.where { (name =~ 'Ernie%') & (salary < 50000) | (salary > 100000) }
Ну так и писали бы сразу нормальный рабочий пример вместо кода, где инъекции нет.
В местах, намеренно предназначенных для вставки голого sql, конечно же ничего само не будет экранироваться.
А в дефолтных ситуациях с User.where(:username => params[:username]) или с выражениями на синтаксисе metawhere/squeel отстрелить себе ногу не выйдет.
А чем вас прямой редирект с текущей страницы на OAuth точку доступа не устроил? Даже если весь сайт на аяксе построен, то ничего страшного в разовой перезагрузке страницы для авторизации не будет.
Допускаю присваивание внутри if при двух условиях:
1. переменная используется исключительно внутри блока if
2. присваивание происходит в начале условия, а не где-то в середине
if (($var = foo()) == ...)
Во всех остальных случаях согласен, это абсолютное зло.
Раньше ruby не могли использовать в embedded systems (как это по русски будет?) из-за требования к наличию ISO стандарта у встраиваемого языка программирования. Так толи только в Японии, толи во всём мире — не знаю точно.
Ещё под это дело Матц(а может и не только он) пишет отдельный интерпретатор. Когда закончит, можно будет купить новенький холодильник и запустить на нём рельсы -)
Простите за сарказм.
Я лишь искренне не понимаю, зачем вы так бездарно расходуете свой талант.
Ваша программа открывает такие возможности, а вы хотите раздавать её, тем более бесплатно, всяким бездельнкам? Заработайте сами с её помощью миллионы, и после этого, если есть желание помогать другим, спонсируйте детские дома, школы, университеты, больницы, обустройте прилегающий к вашему дому район — вариантов так много…
нужные мне доки или railstutorial с ответом всегда где-то там на 1-3 позиции
глупый программист сам дурак, задумал сотворить какую-то ересь, не предусмотренную ни одной из пятидесяти функций стандартной библиотеки по работе с массивами. «фиксится»… ну да, пофиксим это и всё станет хорошо. в топике fractal of bad design как раз об этом и пишется, о костыле на костыле, каждый из которых ещё и сделан по-разному.
и ещё хорошо вам живётся, если всегда достаточно лишь выбрать данные из базы.
data.select { |k,v| !k.starts_with? '_' }
> Вывод: задача не имеет смысла.
Вы просто офигеть как не правы. Различные преобразования над коллециями данных — одна из краеугольных задач программирования, встречающая абсолютно везде, и особенно интенсивно в вебе.
Подходов к работе с коллекциями принято два:
1. Императивный. То как обычно делается в си-подобных языках — циклами. Получается многострочно, со внешними переменными для хранения результата/состояний и не очень легкочитабельно, особенно в ситуациях со сложными многоэтапными преобразованиями. Рефакторить такой код часто достаточно сложно.
2. Функциональный. Когда ты, грубо говоря, говоришь: «Эй, коллекция, сделай-ка мне такую-то операцию над собой и верни после этого результат, и вот на тебе лямбду, которая для каждого твоего элемента вернёт значение для операции». Наиболее часто используемые действия в таком подходе — map, inject и select.
Во втором подходе так же очень естественно получаются цепочки вызовов (method chaining — то, как делается к примеру в jQuery).
При поддержке языка и стандартной библиотекой второй подход так же позволяет применять ленивые вычисления(lazy evaluation). Иногда это критично.
Код выходит намного более компактным, понятным и чистым. Хотя порой и более медленным по сравнению с императивным подходом(что почти никогда не будет веским доводом — «premature optimization is the root of all evil» © Knuth, Donald)
И этот подход становится(или даже уже стал) мейнстримом. В ruby всё только так и делается, в javascript — библиотеки jQuery и underscore, в c# — linq, в java планируют добавить лямбды, в C++ 0x11 они уже появились, в пхп 5.4 тоже.
Принятие функционального подхода при работе с данными будет огромным левелапом к вашим программистским скилам, вопрос только в поддержке этого хозяйства в используемом вами языке программирования — в наличии синтаксиса лямбд с замыканиями и хорошой стандартной библиотекой.
Весь текст умещается в четыре утверждения:
.NET работает намного быстрее динамических языков. (с этим не поспоришь)
ASP.NET MVC намного продуктивнее WebForms. (и какое это имеет отношение к языкам unix стека?)
От Azure держитесь подальше. (солидный довод в пользу дотнета)
Microsoft раздаёт трёхление лицензии на свои продукты. (десятки тысяч $ за mssql сервер это серьёзно, особенно с учётом бесплатности аналогов)
Как насчёт доводов непосредственно для разработчиков? Что-нибудь такое:
У нас есть NuGet!
TeamFoundation это удобно!
IIS делает стектрейсы в эвентлоги!
С AppDomain не надо стопать сервисы!
RDP — сделай всё мышкой!
config/initializers/devise.rb:
~/mysite/oauth.yml:
config.omniauth :vkontakte, 'APP_ID', 'APP_SECRET'
А вот сейчас, если не считать хостеров с сервисом 'всё за пять копеек', то этой неприятности уже нет.
А вот обилие вариантов делания одного и того же на самом деле огромнейший плюс, позволяющий писать DSL'и и в конкретных ситуациях получать очень компактный выразительный код.
Взять тот же RSpec или что-то подобное Person.where { (name =~ 'Ernie%') & (salary < 50000) | (salary > 100000) }
В местах, намеренно предназначенных для вставки голого sql, конечно же ничего само не будет экранироваться.
А в дефолтных ситуациях с User.where(:username => params[:username]) или с выражениями на синтаксисе metawhere/squeel отстрелить себе ногу не выйдет.
pry(main)> User.find_by_nickname(«test'\»")
User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`nickname` = 'test\'\"' LIMIT 1
1. переменная используется исключительно внутри блока if
2. присваивание происходит в начале условия, а не где-то в середине
if (($var = foo()) == ...)
Во всех остальных случаях согласен, это абсолютное зло.
Ещё под это дело Матц(а может и не только он) пишет отдельный интерпретатор. Когда закончит, можно будет купить новенький холодильник и запустить на нём рельсы -)
github.com/meskyanichi/backup
Я лишь искренне не понимаю, зачем вы так бездарно расходуете свой талант.
Ваша программа открывает такие возможности, а вы хотите раздавать её, тем более бесплатно, всяким бездельнкам? Заработайте сами с её помощью миллионы, и после этого, если есть желание помогать другим, спонсируйте детские дома, школы, университеты, больницы, обустройте прилегающий к вашему дому район — вариантов так много…