PDA

Просмотр полной версии : Руби с рельсами. Мелочи и вкусности


Afa
29.09.2009, 01:36
руби (ruby) эт такой язык, да.
а рельсы (rails) эт такой фрэймворк на таком языке. На ём сайты рисуют.
Да, чтоб не пугать сразу - рельсы, они не только для вебизмов предназначены. Унутря у них неонка есть, вумные люди новичков пужать любят аббревиатурой, ага. Не буду нарушать традицию - неонку зовут ORM. Ну и - удобная система встроенных задач, возможность почти на лету менять структуру базы данных - позволяют делать числодробилковые бэкэндовые прикладухи в достаточно удобном окружении.
Так, с введением фсё, выведение позжа.

Виктор
29.09.2009, 06:11
ORM упомянул, а REST фафсем вабыл, да-а-а?

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

Позже один товарищ -- питонофил, рассказал, что есть питон на рельсах. Всё хочу поглядеть.

Afa
29.09.2009, 12:35
А куда спешить т? до рестовских контроллеров сугубо посля мвц дойти можно, не раньше.
а, ну и да. про питон.
Считаю - язык, использующий фрагменты оформления - отступы - в качестве синтаксиса - должен лежать на помойке рядышком с остальными брэйнфак языками, занимая место прям перед sendmail.cf. Прям перед - только потому, шо конфиг шлимыла так написан по ламерству автора, а питон явно с диверсионными целями писали.

manuscriptum
29.09.2009, 14:27
ORM упомянул, а REST фафсем вабыл, да-а-а?

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

Позже один товарищ -- питонофил, рассказал, что есть питон на рельсах. Всё хочу поглядеть.


Питон на рельсах (как бы на рельсах) есть и зовут его Django.
И на данный момент он кстати наиболее живо развивается.
И работает он быстрее рельсов.
Конечно он отличается от рельсов существенно, и по простоте разработки ничуть рельсам не уступает.
На джанге кстати, сделан один из нагруженных проектов яндекса
kuda.yandex.ru

Руби меня впечатляет - очень гибкий дизайн языка, приятно работать, но есть одно но. Руби - богатый на синонимы язык (это его принцип наименьшего удивления) и это хорошо для одиночки, но плохо для командной разработки, ибо у каждого свои тараканы в голове и свой вкус и читать чужой код скажем так слегка непривычно. Кроме того, одни и те же конструкции-синонимы работают с разной скоростью (а разница местами ощутимая). Таким образом с точки зрения оптимизации, требуется выбрать ту конструкцию языка Руби, которая работает быстрее. Это одним махом уничтожает прелесть разнообразия синонимичных конструкций. Все равно придется из десятка способов построения того же цикла выбрать только один (самый быстрый) и стараться использовать его, если важна скорость исполнения.
У питона подход диаметрально противоположный к руби. Всегда должен быть лучший способ сделать что-то. По этой причине синонимов среди языковых конструкций значительно меньше. Однако благодаря этому на свет появляется довольно неплохо оптимизированный байт-код. А поскольку этот байт-код еще и сохраняется в отдельном файле, то со второго запуска скрипт работает уже без траты времени на компиляцию. Руби активно работает над тем, чтобы сделать так же, но и питон не стоит на месте. У питона есть psyco который делает его еще быстрее, местами соизмеримым со скоростью ява-машины.
Сложный синтаксис Руби требует больше времени на поддержку, поиск багов, ресурсов на пред-компиляцию скрипта в байт-код.

Так что при всей красоте Руби, и его рельсов, решения на питоне и джанго в частности выглядят в долгосрочной перспективе чуток поинтересней ;)

Afa
29.09.2009, 15:46
гг
Я таки кинусь кодом. хотя и рано.
book.pages.count == "select count(*) from pages where pages.book_id = #{book.id}"
book.pages.length - всегда равно количеству элементов в коллекции book.pages, которая вытягивается из базы выражением "select from pages where pages.book_id = #{book.id}"
book.pages.size равнозначно предыдущему - если в модели book нет pages_count. если есть - количество страниц берется оттуда.
Вот и все синонимы.
В принципе - вот такие тонкости я и хочу в теме показывать.

ps
И да. Не надо рассказывать о сложностях ковырянья в чужом коде человеку, ежедневно читающему-правящему чужой код. Команда маленькая, всего пять программистов, ага. И сотня коммитов в день - простите - попроектно статистику не скажу, svn.

Виктор
29.09.2009, 17:43
А куда спешить т? до рестовских контроллеров сугубо посля мвц дойти можно, не раньше.
а, ну и да. про питон.
Считаю - язык, использующий фрагменты оформления - отступы - в качестве синтаксиса - должен лежать на помойке рядышком с остальными брэйнфак языками, занимая место прям перед sendmail.cf. Прям перед - только потому, шо конфиг шлимыла так написан по ламерству автора, а питон явно с диверсионными целями писали.
Как сказать. Язык обязывает явно оформлять блоки. Я регулярно матюгаюсь на народ, который блоки отступами не оформляет, а тут зашито в синтаксис языка.

Afa
29.09.2009, 19:19
Реальная ситуация.
У меня таб = 2 пробела. Мне так удобно. У знакомого - 4 пробела. Исходник со смешанными( табы/спэйсы ) отступами приполз ко мне. После сохранения - модуль подох. Долго искали ошибку, ага.

Отступы - это оформление. И исходник перееханный оформлятором - сделается красивым. Пробелы/табы - включались в код в брэйнфак языках - там им и место.

Afa
29.09.2009, 21:10
Таки да.
Продолжим с выведения. Из ruby.
руб очень забавный язык. В нем - всё объект. Даже отсутствие объекта - объект, который честно ответит на вопрос nil.nil? => true. Это - стоит помнить. Да, про дефолтно привычные булевы операции... 0 => true. "" => true. В булевых операциях эквивалент false лишь nil и false. Это сложно понять. Надо просто запомнить.
Дока на руби, как ни удивительно - http://www.ruby-doc.org/ основная коллекция. Для простоты - http://www.ruby-doc.org/docs/ProgrammingRuby/
Со вниманием продолжим дальше, угум

Виктор
30.09.2009, 07:26
У меня таб = 2 пробела. Мне так удобно. У знакомого - 4 пробела. Исходник со смешанными( табы/спэйсы ) отступами приполз ко мне. После сохранения - модуль подох. Долго искали ошибку, ага.
Аргумент принят :).

Виктор
30.09.2009, 07:38
Кстати, Afa, может сможешь подсказать. Какие есть готовые cms'ки, написанные на руби. Хочется что-нить вроде wordpress'а.

Afa
30.09.2009, 12:47
проще всего глянуть на typo. а так - зависит от того, что нужно - для вики одно, для блога другое, тупо файлами поуправлять третье. серебряной пули не существует. для себя взял привычку ядро рисовать сам а функционал лениво собирать плугинами и гемами - быстрее получается

Виктор
01.10.2009, 07:54
Ещё вопрос. Afa, а как из руби грамотно/правильно работать с коммуникационным портом. С модемом там, или ещё каким железом на нём висящем?

Afa
01.10.2009, 12:36
гм
http://ruby-serialport.rubyforge.org/
оно?

Виктор
02.10.2009, 08:14
Пасиб, думаю сойдёт. Допаяю железяку, опробую библиотечку в деле. Если хорошо потянет, можно будет руби уже в практических задачках применять.

p.s. что мне понравилось в руби, так это соглашение об именах. Если идентификатор заканчивается на ? -- то он возвращает булевское значение.

типа

person = new Person("Vasya", "Pupkin")
. . . . .
if (person.has_money?) . . .

Если ! то меняет состояние объекта. Правда это, как я заметил, не строгое правило, шо, на мой взгляд, не есть гут.