Рельсы сошли с рельс: Почему я переписываю Archaeopteryx на CoffeeScript

Original author: Giles Bowkett
  • Translation
Вы бывали на вечеринках, где друзья с работы и друзья из колледжа не разговаривают?

Я запостил видео на Tumblr, которое бы никогда не запостил на Facebook:


Это гитарист, отжигающий под «Bangarang» Skrillex'а.

От переводчика:
Оригинальный текст был размещён в личном блоге автора и не был рассчитан на последующий перевод. Он написан в очень свободном стиле, который я постарался воссоздать, включая легкую ненормативную лексику. В результате перевод вышел довольно художественным, так что педантам весьма советую почитать оригинальную статью на английском.
Хотя автор иногда отходит от основной темы и немного пиарится, я всё же посчитал данную статью уместной для Хабра.

И да, статья действительно о Рельсах, несмотря на затянувшееся вступление :)

Я не запостил это видео на Фейсбук, потому что на Фейсбуке у меня есть друзья из универа (которые, судя по Spotify, слушают Skrillex), а также друзья по рейв-сцене ещё с тех пор, когда я жил в Сан-Франциско. Я на самом деле не знаю их мнения на счет Skrillex, но могу предположить, что они были бы не в восторге, ведь некоторые из них — настоящие техно-пуристы да и вообще музыкальные хипстеры, не переносящие попсу, знавшие дабстеп за годы до Skrillex. На самом деле, я слышал некоторые очень ранние пред-дапстепные записи в Лондоне в 2000-м и я наверняка был не единственным из этой группы друзей, слушавшим такое — а значит, как минимум некоторые из нас знали про дабстеп за десять лет до Skrillex.

Мои старые друзья-хипстеры по рейв-сцене наверняка бы плевались на это видео по той же причине, почему моим музыкально-наивным друзьям по универу оно бы понравилось: Skrillex добился просто феноменального успеха за счет стиля, который по сути является сводной таблицей, вытягивающей колонки из таблиц рока и рейва. Запостить что-то подобное на Фейсбуке как бы означает столкнуть лбами две разные группы, несмотря на их диаметрально противоположные вкусы и несмотря на то, что со всеми ними я не виделся годами. Пустая трата времени.

Это напомнило мне старую цитату от Why the Lucky Stiff:

Когда ты ничего не создаёшь, тебя определяют твои вкусы, а не твои способности. Твои вкусы лишь сужают круг общения и отталкивают людей. Так что создавай.

Я вспомнил об этом, потому что видел отличные презентации на LA RubyConf, единственным минусом которых было огромное количество ехидных подколов в сторону практически всех языков, кроме Ruby. По-моему единственным исключением был Smalltalk, который, как обычно, получил стандартную порцию уважения от рубистов, говорящих про Smalltalk. Раньше мне тоже нравился Smalltalk, но я не люблю идолопоклонничество. Однажды я купил старый Mac Mini у одного рубиста из Лос-Анджелеса, который коллекционировал столько старой компьютерной дряни, что был похож на техно-историка. Одним из экспонатов его коллекции было скучное и унылое руководство по IBM Smalltalk — один из самых безвкусных корпоративных документов, который я видел в своей жизни; к тому же, хороший контр-аргумент крикам рубистов из культа под названием «Smalltalk был самой классной штукой на свете».

Пару лет назад Рельсы были настолько же офигенны, насколько Skrillex — сегодня. Но на дворе 2012 и на Hacker News появился такой пост:

Что мне стоит выучить глубже, Node.JS/Express.JS или Ruby on Rails?

По многим вакансиям требуется знание Рельс, но вроде бы Нода планирует откусить приличный кусок пирога веб разработки в ближайшем будущем.


Другими словами, стоит ли мне учить доминирующую технологию, которая упростит поиск работы, или же мне довериться на новом офигеньчике?

Мы все знаем, что является противоположностью нового офигеньчика.


Действительно, в той теме на Hacker News есть такой ответ:
Рельсы — вчерашний день. Это разжиревший мета-фреймворк, для понимания которого требуется огромное количество периферических знаний.

Само собой, вам стоит фильтровать всё, что вы читаете на Hacker News (если вы вообще воспринимаете это всерьёз), но что вообще означает для Рельс стать «вчерашним днём»? Если смотреть на Рельсы, как на фреймворк, то это утверждение — бессмыслица, но стоит взглянуть на Рельсы, как на модный прикол, как всё становится на свои места. Рельсы были на пике моды пару лет назад, но эти дни уже в прошлом.

Люди приуменьшают влияние моды на разработку, но на самом деле не всё так просто. Как говорил Alan Kay (создатель Smalltalk): "Пока есть вещи, развивающиеся быстрее образования, у нас всегда будет поп-культура".

Рельсы — старые и тупые, а Node.js — новый офигеньчик. Но люди ненавидят Node.js из-за чрезмерного «шума». Лично для меня это выглядит забавным, потому что основной шум вокруг Node.js исходит от людей, которые ненавидят Ноду за этот шум.

Меня не удивляют рассказы о том, насколько Нода дерзкая. Когда Рельсы были в таком возрасте, они были не менее дерзкими. На RailsConf 2007 было огромное количество отличных технических докладов, но кроме того там же собралась критическая масса самовлюбленных придурков. Тогда, насколько мог, я старался игнорировать эту самовлюбленность, а теперь советую поступить так же с Нодой. И вот почему.

У напыщенных и дерзких Рельс было три основных пункта, которыми они тролили старичков из мира Java: паттерны проектирования, долгое время запуска JVM и слишком церемониальны подход к написанию кода, который не соответствовал требованиям разработки простых современных веб-приложений. Сегодня же время запуска Рельс настолько долгое, что коммьюнити пришлось написать Spork — специальных gem, который оставляет окружение Рельс живым между выполнением тестов. Иначе использовать TDD с Рельсами было бы сложно. Выполнение тестов в Рельсах может занимать столько времени, что к моменту завершения вы вполне можете забыть, что вообще вы сейчас пишете, а порой — и собственное имя. Когда коммьюнити Рельс было в возрасте сегодняшней Ноды, они подшучивали над паттернами проектирования. Но посмотрите на реализацию ActiveRecord::Base, который переопределяет «inherited» и вы поймете, что это

class User < ActiveRecord::Base; end
на самом деле означает
User = ActiveRecord::Base.new
или, другими словами,
User = Struct.new(:username)

Мы вынуждены использовать странные и запутанные механизмы, чтобы прикрепить модули ClassMethods и InstanceMethods к ActiveRecord::Base, потому что если мы попробуем отнаследоваться от него, мы не получим наследника в чистом виде. На самом деле мы получим новый класс, который создается при помощи ActiveRecord::Base. Как видно, ActiveRecord::Base на самом деле является скрытой фабрикой ActiveRecordClassFactory.

Что же касается слишком церемониального кода, дайте-ка я расскажу вам про свои яйца. У меня на самом деле есть rake-таск для почёсывания яиц. Кто-то однажды сказал мне, что настоящий программист должен непременно написать код для почёсывания своей промежности, а я серьёзно подхожу к таким вопросам. Мой код использует последовательный порт для управления Arduino. У Arduino есть серво-привод, к которому прикреплена чесалка. Весь этот механизм расположен на полочке у меня под столом, на уровне пояса.

Мне в буквальном смысле приходится писать «bundle exec» каждый раз, когда я хочу почесать себе яйца. А я не в восторге от необходимости писать «bundle exec» каждый раз, чтобы почесать свои яйца. Я назвал задачу «balls», чтобы я мог писать «rake balls», ведь она скребёт мне яйца («because it rakes my balls» — прим. пер.), а Bundler обосрал весь мой красивый синтаксис. Вы думаете, я жалуюсь? Вы думаете, я стараюсь обратить ваше внимание на то, что требовать от меня писать «bundle exec» каждый раз, когда я хочу почесать собственные яйца — означает проявлять невероятное призрение ко мне, как к юзеру? В конце концов, я ведь использую rake именно потому, что пишу на языке, который призван облегчить работу программиста! Но конечно же нет, я не стану говорить ничего такого, ведь это будет не конструктивно, да и делу не поможет, так что я просто печатаю «bundle exec rake balls», чтобы почесать себе яйца в гробовой тишине.

Необходимость печатать «bundle exec» каждый раз, когда я хочу почесать себе яйца — это олицетворение чрезмерно церемониального кода, на который плевались Рельсы в период с 2005 по 2007 год. Коммьюнити Рельс превратилось во всё то, что само высмеивало. Несмотря на это, они смогло фундаментально изменить веб-разработку в лучшую сторону. И не только в Руби, но и практически во всех других языках. Когда Рельсы только появились, они запустили волну клонов, которые расцветали в других языках практически ежедневно. По мере взросления Рельс, другие платформы тоже взрослели. Сегодня мы не видим новых клонов Рельс, которые появляются в каждый вторник, как это было в 2006-м. Зато мы видим, как коммьюнити Рельс создает генераторы кода, конвенции прежде конфигураций и аккуратненькие раутеры каждый раз, когда оно покидает свою зону комфорта. Например, CoffeeScript получил свою дозу вдохновения и от Руби, и от Рельс, ставя девелоперское счастье наивысшим приоритетом.

Именно поэтому я думаю, что прислушиваться к шумихе вокруг Ноды — глупо. Это не стоит потраченных нервных клеток. Шумиха приводит к пустым спорам сторонников и противников. Это бессмысленно, просто забейте. По мере развития, Нода будет меняться, впитывая всю критику. Так же, как и Рельсы в своё время. А пока что вокруг идёт много интересной работы. Люди создают замечательные вещи, а браузеры развиваются такими темпами, что к моменту, когда Нода немного подрастет, принципы веб-разработки существенно изменятся.


То же самое происходило и с Рельсами. Именно потому писать под Рельсы было так весело, пока Рельсы были на коне. И именно потому сегодняшние Рельсы — это мощный и полезный инструмент. Но всего лишь инструмент.

Тем не менее, возвращаясь к той цитате от Why the Lucky Stiff, бессмысленно ненавидеть Рельсы за то, что сейчас они не такие модные, как раньше. Конечно, можно смотреть на Рельсы, как на динозавра, вышедшего из моды, но намного конструктивнее смотреть на них, как на полезный инструмент для создания разных штук. Но и тут нас тоже ждёт пара проблем. Давайте забудем про аргумент «Рельсы — вчерашний день», но вернёмся к этому комментарию на Hacker News:

Рельсы —… это разжиревший мета-фреймворк, для понимания которого требуется огромное количество периферических знаний.

Первое, что мне это напоминает — бессмысленный вброс, сравнивающий Рельсы с «ношением трусов на голове». Я не могу согласиться с этой точкой зрения, потому что большинство этой критики применимо только к тому, как официальная документация советует вам использовать Рельсы, а не к тому, как серьёзные, известные, отборные Rails-разработчики используют их (за исключеним, разумеется, самого DHH). Я думаю, что аргумент про «огромное количество периферических знаний» попал в яблочко. И главное среди этих периферических знаний — это понимание разницы между тем, чему вас учит официальная документация Рельс и тем, как на самом деле поступают разработчики.

Например, я не могу себе представить, чтобы кто-то кроме DHH и, возможно, пары других разработчиков Рельс на самом деле использовал рельсовые тесты так, как рекоммендуют сами Рельсы. Я не думаю, что кто-то кроме DHH и, возможно, пары других разработчиков Рельс вообще воспринимает всерьёз официальный подход Рельс к тестированию. Рельсовые модульные тесты на самом деле не модульные, рельсовые интеграционные тесты на самом деле не интеграционные, а рельсовые функциональные тесты — нифига не функциональные. Большинство разработчиков просто создаёт директорию «spec», ставит RSpec и выкидывает к чертям всё остальное. Так что приводить такие аргументы в споре против Рельс — пустая трата времени.

В аргументе «Рельсы — старые и тупые» часть про «старые» можно проигнорировать. «Старый офигеньчик» означает «классика». Но «тупые» — это то, на что стоит обратить внимание, потому что в Рельсах действительно хватает тупой фигни. Укадайте-ка, что случится, если забыть поставить «source :rubygems» первой строчкой в свой Gemfile?

Ваш Gemfile не содержит ни одного источника. Вы можете добавить источник при помощи строки типа 'source :rubygems'

Вы чё, бля, издеваетесь?!

Вот как выглядела бы подсказка Гугла «возможно, вы имели в виду», если бы её разработала команда Бандлера:

Перевод: Возможно, вы имели в виду «бритни спирс». Тогда пожалуйста, введи свой поисковый запрос правильно, грёбанный тупица.

Bundler делает управление зависимостями очень простым по сравнению с тем, как было раньше, но из-за того, что 'source :rubygems' не включен по умолчанию (хотя Бандлер знает, что он должен быть включен), Бандлер терпит полную неудачу в применении конвенции прежде конфигурации. И я не имею в виду «могло бы быть лучше», я имею в виду «тебе кол, незачёт, остаёшься на второй год». Это всё равно, что «малость провтыкать с одеждой», придя на работу в одних трусах, надетых на голову, да ещё и в грязных.

Bundler — не единственная проблема. С появлением Rails 3, Рельсы сошли с рельс.


Перевод: Rails 3 позволяет создавать новые приложения проще:…

Эта ссылка иронична, она ведёт на гигантскую страницу со списком вещей, которые нужно сделать, прежде чем можно начать писать своё приложение.


Перевод: Когда я начинал учить рельсы, примерно версии 0.6, у меня был один исполняемый файл, который устанавивал руби + рельсы. Я печатал одну команду и начинал кодить.

Зацените эту дискуссию:

Перевод:
@topfunky: Rails 3 обещали возможность «собрать свои маленькие рельсы» только с тем, что тебе надо. Кто-нибудь на самом деле этим занимается?
@jashkenas: @topfunky я не думаю. ИМХО, последствия от мерджа Merb'а — это пока что самое печальное, что произошло с Рельсами.
@j3: @jashkenas а можно поподробнее? /cc @topfunky
@jashkenas: @j3 Весь прогресс заглох на два года, третьи Рельсы во многом *до сих пор* тормознее вторых, Bundler — это кошмар, Node.js победил.

Остальное можете почитать здесь, если хотите. Я просто приведу пару отрывков.


Перевод: @tomdale Окей. Для приложений с нуля, я бы наверное выбрал Ноду. Если бы Рельсы действительно развивались последние 3 года, возможно, всё сложилось бы иначе.


Перевод:
@jashkenas: @tomdale Согласен по всем пунктам. В принципе, я просто расстроен, что третьи Рельсы не выглядят качественно лучше вторых. Те же фичи, другой API.
@josevalim: @jashkenas @tomdale если оценивать Rails 3 только с позиции разработчика приложений, то да. но третьи рельсы всегда были направлены на коммьюнити разработчиков плагинов.

Если перефразировать Хосе, Rails 1 и Rails 2 предназначались разработчикам приложений. Rails 3 предназначены для создателей плагинов и программистов, которые поддерживают существующие приложения. Это всё здорово, но создавать фреймворк приложений, игнорируя разработчиков приложений как основную целевую аудиторию — это как раз одна из вещей, которую Рельсы высмеивали в Джаве в 2006-м. Хосе — один из основных разработчиков Рельс и он написал потрясающую книгу, описывающую невероятную силу нового модульного API третьих Рельс, но порой твиты звучат громче книг.


Перевод: «Node.js – это будущее серверных приложений» @wardcunningham #nodepdx

Уорд Каннингем – это нехилый такой аргументик.

Мой ответ тому парню с Hacker News, который спрашивал, стоит ли ему учить Ноду или Рельсы — такой же, какой бы он получил от Jeremy Ashkenas (автор CoffeeScript — прим. пер.): учи Ноду. (На самом деле, я не могу говорить за Джереми, так что скорее учи и то, и другое, но больше внимания удели Ноде). Порой весело быть тусовщиком, а музыка за соседней дверью сейчас веселее. На сегодняшний день важнее учить Node.js, CoffeeScript и Backbone, потому что работа, которая кипит в этих сообществах, меняет парадигмы. Текущая же работа с Рельсами заключается в причёсывании парадигм, которые Рельсы меняли в своё время — правда, третьи Рельсы добавили столько же острых углов, сколько и убрали.

Кстати, про острые углы. Браузер превращается в операционную систему. Если у вас новая версия Хрома, вы уже можете поиграть с браузерной драм-машиной, а так же с фильтрами, компрессорами и синтезаторами. Конечно, на данный момент это может закончиться вылетом браузера, но скоро всё будет офигенно. Также, весьма вероятно, что веб-приложения станут выглядеть устаревшими по сравнению с мобильными приложениями, а Ноде будет проще получить от этого выгоду, чем Рельсам.

Когда вы учите что-то новое, вам хочется, чтобы это было весело. Рельсы до сих пор полезны, но больше не заводят. Хотя у них полно офигенных штук, воздух так же наполнен всякими «какого хрена? чем они вообще думали?!». Разгребать это говнище — удовольствие не из приятных. Если вы хотите работать с тем, что будет приносить удовольствие, попробуйте Clojure, Scala или Node.js. Clojure и Scala работают на основе Java, воспоминания о которой до сих пор не дают мне спокойно спать ночами, а Node.js подразумевает язык, писать на котором мне весело, несмотря на его частые глупости. CoffeeScript далеко не идеален, но писать на нём приятно, потому что он снижает WAT-фактор JavaScript'а до приемлемого уровня фонового шума.

Rails – это уже не будущее, а прошлое.

http://www.youtube.com/watch?v=WM1RChZk1EU

Я думаю, что сейчас проще найти хорошую работу с Node.js, чем хорошую работу с Rails. Но лично мне интереснее работать над собственными проектами, на которых я точно так же получаю удовольствие от Ноды. Так что я готовлю серию видео, в которых создание музыки будет использоваться для обучения Node, CoffeeScript, Backbone, Socket.io и, что самое главное, jasmine-node – порту джаваскриптовой BDD-библиотеки Jasmine на Node.js. Используя jasmine-node, вы можете выполнять ваши спеки на сервере в большинстве случаев (или вообще всегда — подробности расскажу в этих видео), причём выигрыш — просто офигенный.

Мне никогда не нравилось выполнять спеки в браузере. Моментально выполнять их в коммандной строке — огромное наслаждение, ведь можно подпихнуть их в continuous integration, да в принципе куда угодно, используя юниксовые коды возврата. Серьёзно, в 2012-м году уже не осталось отмазок, чтобы не писать свой джаваскрипт в стиле TDD/BDD.

Возвращаясь к теме джаваскриптовой драм-машины, я написал библиотеку на Руби, которая называется Archaeopteryx. Это комбинация MIDI-интерфейса, драм-машины и вероятностного импровизатора брейкбита. Я начал переписывать его на CoffeeScript. Новая версия называется Clyde и её код стал намного чище.



А ещё я приготовил парочку действительно весёлых хаков.



Я выбрал название Клайд отчасти потому, что мне задавали слишком много вопросов о том, как правильно произносить Archaeopteryx (Археоптерикс), но в основном — в честь легендарного барабанщика Клайда Стаблфилда — не просто крутого барабанщика, а самого крутого барабанщика, про которого пел Джеймс Браун — который, кстати, будет ДОКЛАДЧИКОМ на Madison RubyConf в этом году. Это та же конференция, на которой я распсиховался в прошлом году после фразы о том, что тестировать JavaScript — не обязательно. Я даже не могу передать, насколько я взволнован.

Справедливости ради, Ari Russo написал потрясающую MIDI-библиотеку на Ruby под названием Unimidi, которая выглядит намного лучше всего, что я сам когда-либо писал, но для этого проекта я остановлюсь на JavaScript. Частично — потому, что мне кажется более выгодным инвестировать своё время в этот язык, а не в Руби (особенно потому, что я буду повторять те же вещи, которые уже делал в Руби), а частично — потому что я верю в его технологическое превосходство.

Кстати, дело не только в том, что Клайд проще произносить. Многие люди жаловались, что Археоптерикс тяжело читать. Несмотря на то, что Клайд находится в активной разработке, его исходники уже намного проще читаются. Во-первых, мне пришлось натырить много низкоуровневых MIDI-интерфейсов для Археоптерикса из отличной книги за авторством Topher Cyll под названием Practical Ruby Projects (Практические Проекты на Ruby). (Позже Ben Bleything переписал их, создав более чистую интерфейсную библиотеку под названием MIDIator). С другой стороны, чтобы добавить поддержку MIDI в Клайд, мне достаточно было установить отличную Node.js-библиотеку и написать немного простейшего кода. Целые куски кода Археоптерикса посвящены имплементации джаваскриптовых эквивалентов setTimeout() и копированию lambda в L, чтобы объектам можно было свободно назначать методы. Типа того, как мы передаем функции в JavaScript.

Грубо говоря, JavaScript лучше подходит для проектов такого типа, потому что Археоптерикс использует кучу хаков только для того, чтобы Ruby начал работать, как JavaScript. И хотя JavaScript сам по себе довольно вырвиглазный, CoffeScript настолько красив, что порой заставляет Ruby выглядеть неуклюжим.


Перевод:
@gilesboatboy: каждый раз, когда я вижу do |foo|, во мне просыпается маленький задрот, желающий убивать. как это назвать? задротогнев? ведь «do» — совершенно лишние буковки :-p
@judsonlester: если бы в Руби были настоящие макросы, тогда в этих буковках небыло бы необходимости.
@topfunky: где мой CoffeeScript для Ruby?! пускай компилятор использует отступы, которые все и так пишут, вместо бесполезных do-end.

Ребятам, которые игрались с Клайдом, также понравилась простая интеграция с Garageband, а значит любой пользователь Мака сможет легко и просто поднять у себя Клайд, в то время, как попытки установить Археоптерикс на свой комп ставили в тупик многих. Опенсорсный проект, который работает только на машине автора — бесполезен.

Мне нравится идея моих видео, потому что они будут обучать передовым технологиям при помощи весёлых и интересных примеров. Они на самом деле могут стать лучшим, самым увлекательным способом научиться современной разработке на JavaScript. По-моему важно, чтобы обучение разработке софта было весёлым, потому что я хочу вдохновлять людей на поиски собственных хакерских решений, ведь лучше всего мы запоминаем то, на чём концентрируемся. Этой идеей пронизаны наши хакерские языки: когда мы изучаем новую технологию, мы говорим, что «играемся с ней». Завтра после обеда я бесплатно опубликую моё первое видео, так что можете заглянуть сюда в пятницу (вот оно — прим. пер.).

Так как этот блогпост — в какой-то степени реклама этих видео, а в рекламе прежде всего важна правда, я должен признаться, что на самом деле у меня нет rake-таска для почёсывания яиц. И всё же, у меня сложилось впечатление, что мне нужно печатать «bundle exec» при каждом почёсывании яиц, хотя этой херни можно было бы избежать при помощи минимальных знаний о путях и переменных окружения Unix. (Ещё немного нытья про Бандлер: если написать «bundle && foo», вы никогда не попадете в foo; похоже, что Бандлер вообще не поддерживает коды возврата).

Возвращаясь к глобальной проблеме, Рельсы однозначно сошли с рельс. Чистый и модульный API — это важная цель, но не такая важная, как скорость разработки, современный набор фич (почему Рельсы до сих пор не поддерживают HTML5 так, как в своё время поддерживали Ajax?) и, прежде всего, счастье программиста. Интеграция Merb'а была огромным и трудозатратным отходом от цели, принесшая лишь небольшую выгоду, а DHH, написавший целых две книги о том, почему стоит отказываться от добавления новых фич, должен был срубить эти начинания на корню. Я, всё же, продолжу использовать Рельсы, потому что они до сих пор остаются замечательным фреймворком, но по-моему будет абсолютно справедливо утверждать, что Rails 3 стали шагом назад относительно Rails 2, а Бандлер, каким бы полезным он ни был, всё ещё очень далёк от идеала. Они говорят, что дошли до версии 1.0, но я не думаю, что кто-то воспринимает это всерьёз.

Апдейт: Yehuda Katz, один из разработчиков Бандлера и Рельс, прислал мне вот этот полезный кусок кода:

~/Code/ember.js ‹ruby-1.9.3›  ‹master*› $ bundle && echo "fuck you giles"
Using rake (0.9.2.2) 
Using confparser (0.0.2.1) 
Using multi_json (1.0.4) 
Using execjs (1.2.13) 
Using libxml-ruby (2.2.2) 
Using faster_xml_simple (0.5.0) 
Using httpclient (2.2.4) 
Using json (1.6.5) 
Using nokogiri (1.5.0) 
Using net-github-upload (0.0.8) 
Using github-upload (0.0.2) 
Using rack (1.4.1) 
Using thor (0.14.6) 
Using rake-pipeline (0.6.0) from https://github.com/livingsocial/rake-pipeline.git (at master) 
Using rake-pipeline-web-filters (0.6.0) from https://github.com/wycats/rake-pipeline-web-filters.git (at master) 
Using sproutcore (0.0.1) from https://github.com/wycats/abbot-from-scratch.git (at master) 
Using uglifier (1.0.4) 
Using bundler (1.1.rc.7) 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
fuck you giles
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 94

    +3
    Skrillex – не группа, а один человек. Проверяйте информацию.
      +1
      Спасибо, поправил.
        +10
        Вообще, спасибо за перевод. Местами смеялся в голос, а над некоторыми вещами задумался.
      +3
      Гилс знатно вбросил говна, эту статью бурно обсуждали на HN и дофига где еще. Впрочем, в чем-то он, наверное, прав. Как минимум порог вхождения в рельсы сильно повысился за последние годы.
        +1
        Я это видел уже столько раз, что кажется могу вывести закон который в точности предскажет время, через которое отличный проект превращается в разжиревшего неповоротливого монстра, которого поедает более современный и быстрый конкурент.

        (5 year — ( 1 year * team_of_developers ) — (0,1 day * community_size)) /
        [if huge_corporation_involved true then 2 else 1]

        Netscape — IE — Firefox — Crome — ?

        Joomla — Drupal — Wordpress

        ACDsee — Faststone — Bridge — ACDsee pro
        • UFO just landed and posted this here
            0
            Ахахахах. Я тоже!
              0
              Да, видимо это была моя личная, субъективная эволюция, а закончилось все тем, что все они стали монстрами )

              • UFO just landed and posted this here
                  –1
                  поставьте в конец e2 от Ильи Бирмана. :)
            –1
            Bowkett испытывает горячую приязнь к кофескрипту, однако я её не разделяю: CoffeeScript даёт резкое увеличение быстроты написания кода, зато опечатки в нём гораздо трудноуловимее. В обычном джаваскрипте я не могу облажаться, перепутав размер отступа; а если я потеряю фигурную скобку, то интерпретатор поймает меня за руку, зато не станет ничего за меня некорректно додумывать.

            Вот насчёт будущего Node.js (которое выглядит получезарнее, чем будущее рельсов) он прав, кажется.
              +4
              Просто CoffeeScript — это не панацея. Он исправляет проблемы JS, добавляя пачку собственных проблем. Зато теперь у каждого есть выбор, с какими из проблем ему проще мириться :)
              Большинство проблем CoffeeScript возникают из-за отсутствие нормальных редакторов (хотя бы на уровне JS), но в этом плане со временем ситуация может улучшиться.
                –2
                А какие у JavaScript проблемы?
                  +5
                    –4
                    Видел я это видео, ничего нового нового не узнал. Для тех кто-то более или менее знаком с языком такие вещи не кажутся сюрпризами.

                    А сравнивать CoffeeScript и JavaScript по этому видео вообще не корректно, потому что +[] и там и там транзитивно нулю.
                      –3
                      В тихоря минусонуть карму герои, обосновать хватит знаний?
                        +1
                        >В тихоря минусонуть...

                        Сделать 3 ошибки в двух словах — за что же вы так ненавидите русский язык-то…
                        +2
                        Я не минусовал, но я скажу. Я не пишу на джаваскрипте, но могу (как правило) его читать и понимать. Я пишу на джаве. И вот я считаю, что то, что описано в этом видео _не_должно_быть_так_как_оно_есть_.
                        Это именно то, о чем сказал LaggyLuke — каждый сам решает, с чем ему приятнее мириться. Вы решили, что с этими багофичами вам мириться приятнее. Я пишу на джаве, и такие штуки меня убивают.
                          +1
                          Это не «багофича», а неявное приведение типа из объектного к элементарному.
                          А происходит это из-за неявного вызова метода valueOf().
                          Такую ситуацию можно самому смоделировать:

                          var object = {
                          	a: 1,
                          	b: 2,
                          	valueOf: function () {
                          		return this.a + this.b;
                          	}
                          };
                          
                          alert(+object) //3
                          


                          Обо всем этом написано в спецификации, просто большинство людей считают что ее можно читать, мол язык простой и так все понятно, а что не понятно списывают на глюки языка.
                            0
                            не читать*
                              +2
                              Слишком уж неявное, с точки зрения общей логики js часто ведет себя странно. Конечно, все можно объяснить если покурить спецификацию, но поведение то неожиданное.
                                +2
                                Это говорит только о том, что язык не простой :)
                              0
                              Для тех, кто более-менее знаком с $ANY_LANGUAGE, ни одна из вещей, которые преподносятся как «проблемы», не кажется сюрпризом. И что? От этого проблемы не перестают быть проблемами.
                          +3
                          По поводу редакторов для CoffeeScript, в корне не согласен.
                          Во всех продуктах jetBrains c недавних пор реализована полная поддержка, точно такая же как и для JavaScript. Причем полностью совместима с API Node.
                        +8
                        Уф, кто-то таки написал эту статью. Наконец-то явно это все высказано.

                        «Коммьюнити Рельс превратилось во всё то, что само высмеивало.»

                        «Эта ссылка иронична, она ведёт на гигантскую страницу со списком вещей, которые нужно сделать, прежде чем можно начать писать своё приложение.»

                        И еще, конечно, говнеца в Rails сообщество добавил «синдром Раяна Бэйтса», когда народ тупо лепит в проект gems, не думая, нужен ли вообще gem для решения этой задачи, нужен ли именно этот новый gem из railscasts, а просто потому что «ну вышло в Railscasts — теперь модно это, юзаем»
                          –2
                          Да… Печально, ято с каждым релизом все больше всякого говна вкидывают в рельсы. Для новичков нифига не весело…
                        • UFO just landed and posted this here
                          • UFO just landed and posted this here
                              +3
                              Блин, а писать bundle exec это такая проблема? Ну если так автору трудно… есть решение
                                0
                                ещё можно добавить вот это:
                                [ -d './bin' ] && export PATH=`pwd`/bin:$PATH
                                в .rvmrc в проекте и совсем забыть.
                                  0
                                  конечно, если вы запустили «bundle install --binstubs»
                                  0
                                  Тут вопрос в том, почему это решение не реализовано в самом Bundler'е и не включено по умолчанию?
                                  Неужели есть люди, которые предпочитают каждый раз явно писать «bundle exec»?
                                    +1
                                    Ну можно форкнуть бандлер и реализовать то что нужно, это же опен сорс. А некоторым bundle exec вообще не требуется каждый раз писать, если они используют rvm с гемсетами.
                                  0
                                  Очень оригинальная статья. Ни в коей мере не согласен, что рельсы — мертвы. Это абсолютный бред. Но программистам следует внимательнее присмотреться на NodeJS, потому что некоторые задачи он сейчас решает лучше всего. Например, обработка WebSocket на NodeJS через socket.io работает очень здорово.
                                  За фреймворками типа Backbone или GWT безусловно будет будущее интернет-разработки. Для конечного пользователя оно приятнее, но сейчас оно затратнее для бизнеса. Разрабатывать на них сейчас дольше и сложнее (это я говорю, как человек, которые написал на Backbone.js достаточно сложное приложение).

                                  Я думаю, что появится какой-то фреймворк, который свяжет серверную и клиентскую сторону при помощи подхода, применяемого в Backbone. Возможно, что он будет как раз частью Ruby on Rails, а возможно он будет написан на NodeJS. Может быть это будет просто следующий этап развития Backbone или другого аналогичного фреймворка. Поживем — увидим.
                                    +1
                                    Я думаю, когда появится фреймворк, как минимум, предоставляющий единые модели для клиентской и серверной стороны (или хотя бы авто-генерацию для начала). А то сейчас уж очень неудобно получается c клиентскими js-фреймворками bd -> server-side model -> client-side model.
                                      –1
                                      А CouchDB?
                                        –1
                                        Что конкретно вы имеете в виду? Доступ к данным напрямую из клиентской части?
                                          –1
                                          Практически да.
                                            0
                                            Ну так такое API выстраивается и над любой БД, будь она SQL или NoSQL или еще какое. Но все равно останутся задачи, которые перенести на клиентскую сторону нельзя. Самый первый и важный пример – валидация данных. И такого еще очень много – предварительная генерация отчетов, данных и т.д. и т.п.
                                              –1
                                              Ну для валидации на клиент-сайде в рельсах есть такой гем А насчет нельзя перенести совсем… Может быть в будущем будут чаще использоваться штуки типа WebStorage с периодической синхронизацией с серверной БД, кто знает…
                                                –2
                                                вебсервисы(soap, rest...) и их алгоритмы вам в помощь. Для тонких клиентов в том числе на js без «клиентской серверной прокладки» наверное идеально. В том числе нет и проблем с валидацией серверной+клиентской.
                                          0
                                          nowjs?
                                            0
                                            Уже было (dwr для java, например). Хотелось бы более прозрачного решения.
                                          0
                                            –2
                                            Рельсы не мертвы, они просто становятся большим, неповоротливым УГ с немалым порогом вхождения и кучей «нюансов»

                                            Я тут недавно портировал 1.x проект на 3.x ветку и офигел как все быстро и просто. А добавили… Да ничего особо прям нужного не добавили…
                                            +1
                                            Собственно время запуска меня и оттолкнуло от изучение рейлс. Думал это я такой слабак и не могу понять всех этих соглашений. Однако видимо не я один…

                                            Уже пол года успешно учу ноду и вполне нравится. Есть удобные вещи из мира руби, но нет неповоротливости. Лично для меня.
                                              0
                                              rvm install 1.9.3 --patch falcon
                                                –3
                                                Стоить отметить, так же, что разрабатываю я на Windows
                                                  +1
                                                  не знаю что на виндоус. Я собрал образ для virtualbox/vagrant и раздаю его ребятам, которые начинают программить. Для меня там все есть. Под виндой сам использую эту коробку, на маке все итак нормально работает.

                                                  С одним в этой статье я согласен — порог вхождения в рельсу сильно повысился. НО, это не делает рельсу технологией прошлого. И пока нода/экспресс не будут давать такого же разнообразия джемов и удобства создания вебприложений, как рельса, за нодой останется ниша вебсокетов и апи.
                                                    +1
                                                    В каком мире вы живете? Не забывайте про python с кучей пакетов, джангу ничем не уступающие ruby/rails, и реалйтайм на питоне — twisted, tornado(tornadio) а так-же есть в плане реальтайма сильные языки — Erlang и реализация сокетов на нем очень хороша — github.com/yrashk/socket.io-erlang а еще есть и отличный фреймворк для Erlang github.com/evanmiller/ChicagoBoss. Ты решаешь что же лучше нода или рельсы когда рельса еще ничем не доказала что она лучше питона или чего-то другого.
                                                      +3
                                                      Я не забываю про питон, и про джангу и про твистед (кстати, на руби есть эвентмашина). И про эрланг я слышал. В свое время я перешел с джанги на рельсы. С тех пор не думал переходить обратно.
                                                      Вы поймите, если бы был «лучший» фреймворк, остальные бы просто умерли. А так — есть питон, есть руби, есть еще много языков, которые можно использовать для веба. У каких-то из них есть удобная инфраструктура. Есть еще набор фич, которые реализуются этой самой инфраструктурой.
                                                      Например, насколько я знаю, в джаге нет рельсового asset pipeline. Это единичный пример, наверняка он решается какими-нибудь скриптами/сторонними танцами с бубном, но в коробке его нет.

                                                      В большинстве случаев сейчас рельса больше подходит для создания среднестатистических приложений для веба. Если вы говорите про каттин эдж, то стек для такого приложения будет сборной солянкой. Если появится решение, которое сможет с удобством реализовать все это в «одном месте» — получит интерес сообщества. Нода пока таким решением не является.

                                                      Что будет через некоторое время — я не знаю. Знаю, что для меня сейчас рельса удобнее ноды в большинстве случаев. Поэтому я использую рельсу.
                                                        0
                                                        В джанго есть куча реализаций работы со статическими файлами например вплоть до использования картинок из директории и создания из них спрайтов и стилей, или склеивание всех скриптов или стилей, предварительно их скомпилив из coffeescript или less итд итп еще они умеют положить все в облако на амазоне например итд. Много всяких решений. Но зачем их в коробку пихать? Каждый использует то которое ему нравится. В коробке есть staticfiles который просто собирает статику из всех использованных пакетов, сжимает её если надо а больше от него ничего и не требуется.

                                                        > В большинстве случаев сейчас рельса больше подходит для создания среднестатистических приложений для веба.
                                                        Например? и почему? И еще почему питон так не умеет по вашему?
                                                          –1
                                                          Тут довольно доходчиво написали о таком барахле как asset pipeline — реализовать можно по-разному и нафига это в коробку пихать я не понимаю.
                                                            0
                                                            Точно такими же словами можно сказать про встроенную админку в джанго.
                                                              0
                                                              В Django тоже есть много лишнего я же не говорю что Django идеален. Я бы вообще выдернул GIS обратно в отдельное приложение. Мало кто его реально использует а занимает места он много. Но кичиться тем что есть в руби из коробки на фоне коммента по ссылке в комменте моем выше это как-то смешно.
                                                                0
                                                                Я просто не понял претензии конкретно к к assets pipeline. Хорошо что они есть из коробки, их много кто использует. Но если Вам они не нужны — нет ничего проще их отключить:
                                                                rails new myapp --skip-sprockets
                                                                  0
                                                                  Админка в джанге вообще по умолчанию отключена при генерировании нового проекта и ее даже отключать не нужно))
                                                                    0
                                                                    Но если много кто пользуется то конечно хорошо что есть. Но вы посмотрите что мы обсуждали с тем товарищем для начала. Не то что assets pipeline плохи а то что товарищ говорил что в джанге такого нет из коробки, на что я ему сказал что решений у нас много и в коробку пихать не имеет смысла.
                                                                      0
                                                                      Ну возможно он считает, что такая вещь должна быть из коробки (и я с этим согласен, как и с наличием sass, coffeescript, вот жалко DHH haml не любит). Закругляюсь, непонятно о чем спор :-)
                                                                    0
                                                              0
                                                              >Например? и почему? И еще почему питон так не умеет по вашему?
                                                              сравниваю с нодой. Про питон вообще ничего не говорю.
                                                              Вы бы стали писать приложение на ноде вместо джанги? Я именно об этом. Я НЕ СРАВНИВАЮ ПИТОН И РУБИ. Идите ругайтесь в другой топик
                                                          +1
                                                          >Я собрал образ для virtualbox/vagrant и раздаю его ребятам, которые начинают программить.

                                                          А можете поделиться? Тоже есть люди котроые только начинают изучать Ruby / Rails и готовый образ был бы кстати.
                                                          +1
                                                          в этом и дело кстати, сам замучался и поставил в вмваре убунту — в виртуалке рельсы летают
                                                      +2
                                                      RoR это модно и стильно :) А т.к. дабстеп я слушал до Skrillex, то продолжу использовать python.
                                                        0
                                                        Интересно где находиться php во всей этой кутерьме модно/немодно
                                                          +6
                                                          Когда начинается спор о Django/Rails/NodeJS, php уже никто и не вспоминает =) Нет его.
                                                            0
                                                            спрятался за водопадом :-)
                                                              0
                                                              Слава богу я далек от этих споров… Пишу себе на старом добром пхп. Использую только те фичи которые мне действительно нужны. Надо мне минифай js и css сделать — нет проблем, скачал yui compressor, пару строк на баше и все. Надо ОРМ — скачал поставил. Ничего не надо — создал голый файл и пиши что дуще угодно. Не люблю когда фреймворки и технологии начинают диктовать и навязывать что и как делать
                                                                +2
                                                                Никто не мешает писать http-сервера на голом Ruby, или с использованием Rack :)
                                                            +2
                                                            На мой взгляд, у каждого успешного инструмента есть две фазы:
                                                            1) Когда пачками добавляются новые фичи, и это всем весело… именно эту фазу педалирует автор статьи.
                                                            2) Когда инструмент используется для зарабатывания денег на коммерческих проектах. На этой фазе мало кому весело от появления новых фич, изменений в API и прочем. В этой фазе превалирует девиз «новые фичи — для новых проектов», а для существующих проектов должны быть очень весомые аргументы, чтобы затевать апгрейд. К примеру, в крупном проекте менять Jammit на Asset Pipeline и переписывать весь JavaScript на CoffeeScript практически никто не будет, т.к. во-первых это не несёт существенного профита, а во-вторых ни фига не весело…

                                                            В итоге кол-во существующих крупных проектов со временем достигает критического размера и те, кто раньше активно вводил новые фичи, становятся противниками дальнейших изменений. Грубо говоря, элитарная часть сообщества успокаивается, порог допуска к принятию решений повышается, а процедура введения новых фич максимально бюрократизируется. Это относится к любому ЯП, фреймворку и т.д.

                                                            P.S. Студентам, конечно, интереснее и полезнее возиться с проектами, у которых есть шашечки… Что не отменяет изучение и проверенных временем инструментов. Практикующим программистам сложнее находить время и желание для освоения каждого нового инструмента, поэтому и возникают разрывы и пропасти на последовательности принятия инноваций.
                                                              +1
                                                              Появилось зверское желание купить електруху и научиться играть Skrillex)))
                                                                0
                                                                Меня всегда умиляют сравнения фреймворка и языка.
                                                                  +1
                                                                  Ну вроде сравнивали node.js и Rails…

                                                                  Причем сравнение, конечно не совсем корректное — я бы не сказал что node.js хоть как-то революционно упрощает веб-разработку, как это сделал Rails в свое время, скорее он хорошо решает некий класс задач.

                                                                  Но епрш, так стало мутнее это все конфигурить и настраивать…
                                                                  +1
                                                                  Не особо знаком с рельсами, и не увлекаюсь нодом, но параллель с яйцами была проведена просто блестяще.
                                                                    +1
                                                                    Статья интересная с точки зрения провокационности и скандальности.
                                                                    Не имеет смысла сравнивать Ноду и Рельсы, потому что никогда ими не взаимозаменить друг друга.
                                                                    Попробуйте написать интернетный магазин и Ноде и исплюётесь.
                                                                    Рельсы — мамонт, который не нужен.
                                                                    Это моё мнение.
                                                                    Нода не заменит.
                                                                    Нужно что-то другое, но нормальное.
                                                                    Явовский стиль — вообще треш.
                                                                      –2
                                                                      Воообще, чудо-фреймворки не нужны для написания сайтов.
                                                                      Нужно двигаться к простоте.
                                                                      Чистый руби, rack и поехали.
                                                                      Никакой эзотерики.
                                                                        +1
                                                                        Ну уж нет, ActiveRecord и ERB много чего дают
                                                                          –1
                                                                          ERB — это не фреймворк, он простой и нужный.
                                                                          Active Record считаю ненужным, потому что уже есть NoSQL решения.
                                                                          Раньше, мб в девяностых, там, и двухтысячных был очень нужен.
                                                                          Сейчас весь мир к простоте идёт.
                                                                          Это моё мнение.
                                                                      0
                                                                        0
                                                                        ололо рельсы стали слишком сложными ололо буду писать на голых ноджс испытывать сырые баги на себе самом. ололо строчка source :rubygems мешает(а как без нее — вдруг надо её исключить и юзать другой сорс) и это мой главный аргумент.
                                                                        а с do end вообще атас. они нужны когда хочется в декларативном стиле вызывать с блоком, юзать можно {}. удивлен что он не обругал class и def ведь можно было бы их называть %% и &&
                                                                        в итоге имеем бугурт диванного кукаретика который не пробывал(точнее попробывал но сил не хватило) рельсы в Rails way стиле и за весь спор он так и не оспорил тот факт что рельсы самый удобный фреймворк для прототипирования и для разработки и ему не нужны транскомпайлеры(кофе) чтобы писать на нем и не плеваться.

                                                                        модульность rails 3 лучше чем отсутствие модульности вообще. сейчас это сложный для новичка механизм но рельсы уже переросли этап когда надо удивлять 5и минутными блогами.

                                                                        впрочим, тесты медленные — тут он прав.
                                                                          0
                                                                          > IBM Smalltalk — один из самых безвкусных корпоративных документов, который я видел в своей жизни; к тому же, хороший контр-аргумент крикам рубистов из культа под названием «Smalltalk был самой классной штукой на свете».

                                                                          Документация из IBM — как недостаток языка? Парень явно шарит. (Впрочем, Smalltalk действительно не был самой классной штукой на свете, как и любой другой отдельно взятый язык)

                                                                          > По многим вакансиям требуется знание Рельс, но вроде бы Нода планирует откусить приличный кусок пирога веб разработки в ближайшем будущем.

                                                                          Человек думает что учить основываясь на лёгкости поиска работы, за еду, видимо. Зачем ему писать об этом статьи?

                                                                          Это и постоянная реклама какого-то муз. ансамбля остановила меня от чтения дальше второго видео.
                                                                            +2
                                                                            Пацаны, я придумал клёвое вебдванольное название: rubyroid (рубероид).
                                                                            Понятия не имею, что это такое, но им можно было бы назвать какой-нибудь модный вебдванольный блог о руби.
                                                                              +1
                                                                              О руби в андроиде :)

                                                                              А вообще рубероид — старый гидроизоляционный материал, на крыши часто кладут, чёрные или серые рулоны такие, горят с чёрным вонючим дымом.
                                                                              0
                                                                              Давно таких статей не было.
                                                                              На половине фраз — можно громко смеяться.
                                                                              На вторую — забить.
                                                                              НО посыл пойман. Думаем.

                                                                              зы. Открыл для себя Skrillex ))
                                                                                0
                                                                                Может кто-нибудь в двух словах объяснить, почему Рельсы больше не рулят и не педалят? Я статью честно прочитал, написано прикольно, но разумного зерна так и не увидел. Как были простыми и понятными, так и остались. И стартуют они адекватно быстро. И писать на них приятно. Зачем мне на ноду то перепрыгивать, почему работодателям я вскоре стану не нужен?
                                                                                  0
                                                                                  Да фигня там всякая
                                                                                  0
                                                                                  Когда-то у него брали интервью как у успешного рубиста :) habrahabr.ru/post/95197/
                                                                                    0
                                                                                    ага, я транслатил. а у тебя куда серия вся пропала кстати? ) Он болтун, глянул на его бложек gilesbowkett.blogspot.com/2010/03/programmers-what-to-do-if-you-get-fired.html
                                                                                      0
                                                                                      Да, собсно, никуда — допереводил и выложил на rubflow (http://rubyflow.ru/items/1051)… Просто здесь не выкладывал, думаю поезд уже прошел :)
                                                                                        0
                                                                                        Опа, там ссылки не рабочие уже… Лучше тут смотреть rezvanov.info/tags/7
                                                                                    +2
                                                                                    Кстати, не сразу понял последний кусок кода, который ему Иегуда Катц прислал… Теперь я точно знаю, что команда bundle возращает корректные коды возврата :D
                                                                                      –1
                                                                                      чувствую butheart за два любимых языка(
                                                                                        0
                                                                                        *butthurt )
                                                                                        +1
                                                                                        Giles Bowkett истеричка)))
                                                                                        А насчет Node — для веба то оно может еще приемлемо, но если нужно что-то посерьезнее, то тут уже Erlang рулит.

                                                                                        Only users with full accounts can post comments. Log in, please.