merb 1.0

24 views
Skip to first unread message

Oleg Andreev

unread,
Nov 8, 2008, 7:49:16 AM11/8/08
to RubyOnRails to russian
ПЫЩ ПЫЩ.

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

Итак, FYI:

0. Активрекорд работает нормально,
мербовые форм-хелперы для него тоже
есть.

1. С нуля начинать апп на рельсе - это
бред. Во-первых, подкрутить что-то в
сорцах гораздо легче (и чище) можно в
мербе. Во-вторых, мне ни разу не
пришлось что-то подручивать в сорцах
мерба. Пишешь модуль, переопределяешь
то, что нужно, и кидашь в контроллер
(или еще куда-нить). Никакой магии,
никаких меганакрученных DSL и
нагенерированных методов типа
person_profile_url. В-четвертых, мерб сам по
себе быстрее рельсы раза в 2,5 (я недавно
бенчмарки выкладывал, см. github/oleganza).

2. Нормальной, приятной документации по
мербу я не нашел. Учился по сорцам и
тому, как писал Миша Клишин. Это было
просто, но кому-то может показаться
тяжелым. Я лично сам люблю читать доки
прямо в сорцах чтобы понимать как оно
там внутри работает (на всякий случай),
и другим советую. Но факт в том, что
другого хорошо способа узнать API нет
(вернее, есть сгенерированные доки на
сайте, но там верстка уродская).

3. Идиотов в мерб-кор меньше, чем в рельс-
кор. Всякие пряники типа returning или
"давайте переизобретем memoize вместо
тупого @var ||=" в мербе вообще запрещены.
Язык уважают и не городят надстройки
без серьезного повода. Сорс-код merb-core
весит мало, читается легко.

4. Бекенд инициализируется быстрее.
Имеется встроенная кластеризация и
демонизация. Причем, рабочие процессы
запускаются через fork, внутри которого
лишь делается bind на порт. Так что
запустить 8 мербов по времени занимает
столько же, что и 1.

5. Идиомы все те же, что и в рельсовых
контроллерах, за исключением
нескольких мелочей:
- экшн должен вернуть то, что уйдет
клиенту
- ерб: блоковые хелперы для форм (типа
form_for) должны начинаться с "равно" <%=
helper() do %> и оканчиваться симметрично: <%
end =%> ("равно" в конце)
- before_filter -> before
- ApplicationController -> Application
- PeopleController -> People
- Вместо respond_to{ один формат, другой
формат }
1) provides :xml, :json
2) provides_only :html
3) display(@object [, опции для to_xml/to_json/...])
- роутер очень похож, но опять-таки
немного синтаксически отличается.
Плюс, там моя рельсовая фишка с
префиксной оптимизацией лукапа
реализована с самого начала: роутер
очень быстрый без патчей и страшных
регулярных выражений.

6. Никаких plugins нет, есть бандлинг гемов.
Более того, есть скрипты (thor),
устанавливающие все-все необходимые
аппу гемы в папку ./gems, что позволяет
разворачивать апп на почти пустом
сервере, не затрачивая время на
системный gem install. Последние несколько
1.0RC* релизов чуваки фиксили как раз
такого рода административные фичи.

7. Скелет аппа можно сгенерировать в
трех видах: полном, компактном и ультра-
компактном (все в одном файле).
Любителям кэмпинга должно понравится.
Наверное.

В общем, Мерб - это hacker's choice. В том плане,
что если вы делаете что-то реально
outstanding и надолго, а не "очередной сайт
для ООО Ромашка", то вам, возможно,
захочется иметь Свой Тул, который
будет быстрым, который можно
затачивать и подтачивать и не бояться,
что погрязнете в тонне чужого
говнокода чтобы исправить досадный
очень редкий баг.

Ну, и лично для меня в рельсе нет чего-
то такого, чего уже сейчас нет в мербе.
Даже такой рудимент, как fastcgi, есть
(привет, julik :-)

PS. Да, Макс, я понимаю, что
экономический кризис, и что
большинство задач прекрасно делаются
на Рельсе, что есть rails_mod, и что есть
куча говнокоде.. рейлс-программистов,
которых не хочется переучивать на
мерб. У меня же так случается, что любых
программистов нужно учить писать как
следует, независимо от используемых
библиотек.

PPS. Цель этого письма, на самом деле, -
попытаться обратить взоры людей к
тому, что нужно писать просто. И любить
язык. В рельсе, ровно как и в 90%
рельсовых аппов, народ изобретает
слишком сложные штуки с руби-магией,
вместо использования компактных и
всем понятных решений. Типа
наследования, модулей, include/extend, super,
Class.new(){} и т.п. Мерб более-менее уважает
язык, у него стоит поучиться писать на
руби вообще (не только вебаппы).



Alexander Simonov

unread,
Nov 8, 2008, 8:03:23 AM11/8/08
to ror...@googlegroups.com
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Ухты... Замечтательно... :)

8 нояб. 2008, в 14:49, Oleg Andreev написал(а):
--~--~---------~--~----~------------~-------~--~----~
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ

Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror...@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-un...@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru
-~----------~----~----~----~------~----~------~--~---


Alexander Simonov
asim...@gmail.com



-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.9 (Darwin)

iEYEARECAAYFAkkVjJYACgkQkr9AYoS+FlVIcwCfS2qkycXQnExE/eYjkENJMNMd
UskAnjxBuzfOE9XbcKR4rRx9UBmQKyES
=jmWk
-----END PGP SIGNATURE-----
PGP.sig

Max Lapshin

unread,
Nov 8, 2008, 8:29:10 AM11/8/08
to ror...@googlegroups.com
Если тебе настолько повезло, что у тебя есть тонна свободного времени и нет задач, требующих чужих плагинов и нормальной диагностики ошибки, то мерб был лучшим выбором и во времена 0.3

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

Oleg Andreev

unread,
Nov 8, 2008, 8:44:52 AM11/8/08
to ror...@googlegroups.com
Ты опять впадаешь в крайности :-) Во
временя 0.3 все было очень далеко от
юзабельного состояния. Нужно было
именно что иметь кучу времени для
ремонта всякой ерунды.
Что касается плагинов, то они тоже
разные бывают, и многие нужно
допиливать. Ты это сам знаешь, наверное.

Впрочем, аргументация у тебя как два с
половиной года назад у кучи людей.
Вместо "merb" можно подставить "rails" и
ничего не изменится. И делали же люди
бизнес-приложения тогда.


Yaroslav Markin

unread,
Nov 8, 2008, 9:07:47 AM11/8/08
to ror...@googlegroups.com
Отмечусь в треде, тк задолбало.

Мне вот нравится Синатра, например. Еще не нравится RSpec и нравится shoulda и штуки вроде rr/matchy/context. Это совершенно не повод называть всех кто не пользуется моими любимыми тулами дурачьем, и сравнивать яблоки с апельсинами.

Сравнивать Merb с Rails вообще некорретно, у проектов совершенно разные приоритеты.

Аргументация "hackers framework" и "rails is a pre-fab house" очень сильно задолбала. Engine Yard нужно отрабатывать очередные $15m венчура, привлекая внимание к своим тулам, поэтому видимо вся команда из кожи вон лезет, поливая грязью Ruby и Rails, которые, на секундочку, EY кормят. Rubinius примерно на том же месте где и был, зато Ruby и в целом рельсовый деплоймент сделали чуточку лучше два студента из Нидерландов. У них нету милионного венчура, зато есть голова на плечах, ага.

В общем вся это грязь про

  С нуля начинать апп на рельсе - это 
  бред.
  Идиотов в мерб-кор меньше, 
  hacker's choice
  куча говнокоде.. рейлс-программистов,

надоела очень сильно, используйте что вам больше нравится, делитесь результатами. И не сравнивайте проект, приоритет которого -- производительность, с проектом, приоритет когорого -- красивый код и удовольствие от работы. Вне зависимости от красоты кода в первом и производительности второго.

2008/11/8 Oleg Andreev <oleg...@gmail.com>



--
Yaroslav Markin

Max Lapshin

unread,
Nov 8, 2008, 9:11:20 AM11/8/08
to ror...@googlegroups.com
Олег, Ярослав прав. Твой агрессивный пафос по поводу мерба и откровенные понты с пренебрежением в сторону рельс совершенно неуместны. Если хочешь про что-то хорошее рассказать, рассказывай про то, чем оно хорошо, а не чем плохо другое.

Oleg Andreev

unread,
Nov 8, 2008, 9:44:06 AM11/8/08
to ror...@googlegroups.com

On 08.11.2008, at 17:11, Max Lapshin wrote:

> Олег, Ярослав прав.

Я знаю, что он прав :-)

> Если хочешь про что-то хорошее
> рассказать, рассказывай про то, чем
> оно хорошо, а не чем плохо другое.

Каждый видит то, что хочет видеть. Если
хочешь моего личного мнения, то меня
забавляет как люди не поймут что you're not
your wallet. Почему забавный обсир рельсы
воспринимается людьми как обсир их
мировоззрений?

Что действительно важно мне, это не
красота кода или название библиотеки,
а наличие здравого смысла. В любом
программном коде здравого смысла
гораздо больше, чем в поступках людей.
Потому что когда пишут программный
код, люди напрягаются и упорядочивают
свои мысли. А когда они живут и
общаются между собой, все происходит
как попало.
Мне нет никакого кайфа всерьез
доказывать красивость/эффективность
кода за пределами очень конкретно
поставленной задачи. Я бы хотел, чтобы
все умные ребята, подписавшиеся на
этот мыллист, больше фокусировались на
своих идеях и способностях, а не на
инструментарии, созданным непонятно
кем. Будь то браузеры, языки
программирования или какие-то гнусные
библиотеки.

Курт Воннегут в Timequake:
"Если бы я тратил свое время на
создание существ, -- сказал Траут, -- я
бы никогда не смог привлечь
внимание к действительно важным
вещам:
непреодолимым силам природы,
изобретениям, приносящим людям
страдания,
нелепым идеалам и правительствам,
которые заставляют настоящих мужчин и
женщин чувствовать себя как последнее
дерьмо".

Если уж для кого-то фреймворк - идеал и
учитель, не стоит себя ассоциировать с
чужими идеалами.

http://xkcd.com/386/


Превед.





labria

unread,
Nov 8, 2008, 3:03:31 PM11/8/08
to RubyOnRails to russian
Ага. Мерб крут!
Я тут сделал sudo gem update merb, и потом старательно делал gem
uninstall merb-* новой версии, ибо проект написаный на 0.9.3 даже не
подумал запускаться =)

Max Lapshin

unread,
Nov 8, 2008, 3:19:10 PM11/8/08
to ror...@googlegroups.com


2008/11/8 labria <lab...@gmail.com>

Ага. Мерб крут!
Я тут сделал sudo gem update merb, и потом старательно делал gem
uninstall merb-* новой версии, ибо проект написаный на 0.9.3 даже не
подумал запускаться =)

Причем без каких-либо диагностических ошибок

Yaroslav Markin

unread,
Nov 8, 2008, 3:35:45 PM11/8/08
to ror...@googlegroups.com
2008/11/8 Max Lapshin <max.l...@gmail.com>



Причем без каких-либо диагностических ошибок


Hackers' framework, фигли. Как вы яхту назовете.


--
Yaroslav Markin

Oleg Andreev

unread,
Nov 8, 2008, 3:50:20 PM11/8/08
to ror...@googlegroups.com

On 08.11.2008, at 23:19, Max Lapshin wrote:

> Причем без каких-либо
> диагностических ошибок

Все еще хуже. С 0.9.13 на 1.0 переход
выглядел так:

1. Сервер запустился без проблем
2. rake молча выключался не говоря ничего.
Даже с -b
3. merb -i заорал, что нужен какой-то webrat.

После установки webrat все закрутилось
как и положено.

Anton Ageev

unread,
Nov 8, 2008, 4:38:25 PM11/8/08
to ror...@googlegroups.com
2008/11/8 Oleg Andreev <oleg...@gmail.com>:
> ПЫЩ ПЫЩ.

Спасибо, Олег. Было познавательно почитать.

--
WBR, Anton

cheef

unread,
Nov 8, 2008, 8:07:55 PM11/8/08
to RubyOnRails to russian
Весьма интересно, а можно подробнее вот этот момент?

Oleg Andreev

unread,
Nov 8, 2008, 8:21:08 PM11/8/08
to ror...@googlegroups.com

http://merbunity.com/tutorials/18

См. также ключевые слова merb, freeze, bundle в
гугле.

oleg dashevskii

unread,
Nov 9, 2008, 12:32:50 AM11/9/08
to ror...@googlegroups.com
Любо-дорого смотреть, как тут мило дружат против мерба :)

Будто в рельсах при переходе от 1.x к 2.x ничего не поломалось :)
От мерба от 0.9.3 до 1.0 -- приличное расстояние.

9 ноября 2008 г. 2:35 пользователь Yaroslav Markin <yaro...@markin.net> написал:



--
Олег.

Danil Pismenny

unread,
Nov 9, 2008, 4:42:40 AM11/9/08
to RubyOnRails to russian
Спасибо, достаточно информативно.

Max Lapshin

unread,
Nov 9, 2008, 5:39:12 AM11/9/08
to ror...@googlegroups.com


2008/11/9 oleg dashevskii <olegdas...@gmail.com>

Любо-дорого смотреть, как тут мило дружат против мерба :)

Будто в рельсах при переходе от 1.x к 2.x ничего не поломалось :)
От мерба от 0.9.3 до 1.0 -- приличное расстояние.

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

Проблема именно в подходе: для меня рельсы — инструмент наиболее эффективно заработать денег и сделать кому-то
продукт, а мерб — средство интересно провести время в чтении и правке исходников. Да, он гораздо приятнее написан,
да, будет очень хорошо, когда он полностью заменит Rails, или рельсы будут переделаны в его стиле. Но пока  до
этого очень далеко, как и в случае с рубиниусом.

labria

unread,
Nov 9, 2008, 7:41:39 AM11/9/08
to RubyOnRails to russian
И еще: у меня все еще стоял гем версии 0.9.3, но практика показала что
в отличие от рельсы, мерб более старой версии запустить нельзя.
Теоретически должно работать merb _0.9.3_, но оно не...

On Nov 9, 12:39 pm, "Max Lapshin" <max.laps...@gmail.com> wrote:
> 2008/11/9 oleg dashevskii <olegdashevs...@gmail.com>
>
> > Любо-дорого смотреть, как тут мило дружат против мерба :)
>
> > Будто в рельсах при переходе от 1.x к 2.x ничего не поломалось :)
> > От мерба от 0.9.3 до 1.0 -- приличное расстояние.
>
> Вопрос в том, что ошибки как правило были достаточно информативные и понять,
> чего чинить просто.
> В случае с мербом, он просто вываливается, причем ошибка как правило
> вылетает из совершенно другого места, нежели
> действительно точка ошибки. Это если вообще вываливается хоть какой-то текст
> вместо просто молчаливого exit.
>
> Проблема именно в подходе: для меня рельсы -- инструмент наиболее эффективно
> заработать денег и сделать кому-то
> продукт, а мерб -- средство интересно провести время в чтении и правке

anahoret

unread,
Nov 9, 2008, 10:34:48 AM11/9/08
to RubyOnRails to russian

On Nov 9, 7:32 am, "oleg dashevskii" <olegdashevs...@gmail.com> wrote:
> Любо-дорого смотреть, как тут мило дружат против мерба :)

Да никто не дружит против :) Просто Олег Андреев написал в
провокативной форме для привлечения внимания, вот многие так и
среагировали. Кстати, несмотря на то что Олег позже призывает не
ассоциировать себя с фреймворками, сам называет использующих RoR
говнокодерами :) Отсюда и тон ответов.

Олег, спасибо! Мне, да и всем плотно не знакомым с merb, было полезно
и интересно почитать о нем.

Oleg Andreev

unread,
Nov 9, 2008, 11:08:14 AM11/9/08
to ror...@googlegroups.com

On 09.11.2008, at 18:34, anahoret wrote:

> Кстати, несмотря на то что Олег позже
> призывает не
> ассоциировать себя с фреймворками,
> сам называет использующих RoR
> говнокодерами :)

Ключевое слово - "позже". Кто хочет -
игнорирует шутки, кто хочет - цепляется
за них.

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



Pavel

unread,
Nov 9, 2008, 3:24:31 PM11/9/08
to ror...@googlegroups.com
Класс, спасибо!

8 ноября 2008 г. 14:49 пользователь Oleg Andreev <oleg...@gmail.com> написал:

fl00r

unread,
Nov 10, 2008, 4:36:48 AM11/10/08
to RubyOnRails to russian
Что ж, конкуренция с Джанго, вот Мёрбом, пхп фреймворками пойдет
только на пользу рельсам

Oleg Andreev, спасибо за отзыв)

On 8 нояб, 15:49, Oleg Andreev <olega...@gmail.com> wrote:

Oleg Andreev

unread,
Nov 10, 2008, 7:01:04 AM11/10/08
to ror...@googlegroups.com

On 10.11.2008, at 12:36, fl00r wrote:

> Что ж, конкуренция с Джанго, вот
> Мёрбом, пхп фреймворками пойдет
> только на пользу рельсам

Какая нафик конкуренция? Это
заполнение экосистемы разнообразием
организмов. Свидетельство
жизнеспособности системы и
разнообразия предлагаемых
возможностей.

Медведь не конкурирует с лисой, а лань -
с крокодилом. Либо кто-то кого-то
съедает, либо каждый занят своим делом.
Конкурируют лисы между собой на одной
поляне. Или же кооперируются (зависит
от обстоятельств и их
интеллектуального развития).

oleg dashevskii

unread,
Nov 10, 2008, 3:47:32 PM11/10/08
to ror...@googlegroups.com
У меня он так не вываливался не разу. А вот рельсы с очень информативным сообщением "stack level too deep" - очень даже (и до сих пор не починили это).

По поводу готовности для production - если брать в качестве критерия максимум результата за минимум времени, то рельсы лучше подходят, да.

9 ноября 2008 г. 16:39 пользователь Max Lapshin <max.l...@gmail.com> написал:



--
Олег.

Antono Vasiljev

unread,
Nov 10, 2008, 7:48:17 PM11/10/08
to ror...@googlegroups.com
On Sat, 2008-11-08 at 15:49 +0300, Oleg Andreev wrote:
> ПЫЩ ПЫЩ.

Забыл упомянуть что в мербе правильно подошли к авторизации - сразу
загнали всех в правильные рамки.

А вообще начинаю новые проекты писать на мербе (и camping ;)
Для начала блог перепишу :)

--
Antono Vasiljev <vasi...@gmail.com>
antono.info

Sergey "Sam" Gershun

unread,
Nov 11, 2008, 12:01:27 PM11/11/08
to RubyOnRails to russian
> В любом
> программном коде здравого смысла
> гораздо больше, чем в поступках людей.
> Потому что когда пишут программный
> код, люди напрягаются и упорядочивают
> свои мысли. А когда они живут и
> общаются между собой, все происходит
> как попало.


Эта фраза весть антагонизм объясняет )
для тебя в коде есть смысл. а для меня например - в коде смысла нет,
он есть в задаче которую этот код решает.

Oleg Andreev

unread,
Nov 11, 2008, 12:42:29 PM11/11/08
to ror...@googlegroups.com

On 11.11.2008, at 20:01, Sergey Sam Gershun wrote:

> для тебя в коде есть смысл. а для меня
> например - в коде смысла нет,
> он есть в задаче которую этот код
> решает.


Если читать между строк, то выяснится,
что я это и имел в виду :-)

Sergey "Sam" Gershun

unread,
Nov 11, 2008, 1:31:53 PM11/11/08
to RubyOnRails to russian
ну так с точки зрения задачи - мерб, рейлз, херейлз - разница не стоит
таких эмоций

oleg dashevskii

unread,
Nov 11, 2008, 2:44:25 PM11/11/08
to ror...@googlegroups.com
Ну вот, Matz likes Merb.

12 ноября 2008 г. 0:31 пользователь Sergey Sam Gershun <mai...@gmail.com> написал:



--
Олег.

fl00r

unread,
Nov 20, 2008, 7:00:26 AM11/20/08
to RubyOnRails to russian
кстати, на сколько я понимаю проект http://aroundme.ru/ написан на
мербе - проект еще только развивается, нагрузки не очень большие, но
все равно - результат прекрасный!

> Antono Vasiljev <vasilj...@gmail.com>
> antono.info

Oleg Andreev

unread,
Nov 20, 2008, 7:12:29 AM11/20/08
to ror...@googlegroups.com

On 20.11.2008, at 15:00, fl00r wrote:

> кстати, на сколько я понимаю проект
> http://aroundme.ru/ написан на
> мербе - проект еще только развивается,
> нагрузки не очень большие, но
> все равно - результат прекрасный!

ээ. Результат зависит не от мерба, а от
автора.

Адекватным примером "мерб круче
рельсы" (или наоборот) может служить
лишь история о том, как какой-нибудь
сайт год работал на одной либе, а потом
перешел на другую, и все испытали
оргазм. Но таких историй нет, потому
что никому не приходит в голову
переписывать один и тот же код просто
под другой движок. Проще либо
переписать бизнес-модель вместе со
всем тулчейном, либо спокойно
допиливать существующую платформу.


Max Lapshin

unread,
Nov 20, 2008, 7:18:28 AM11/20/08
to ror...@googlegroups.com


2008/11/20 Oleg Andreev <oleg...@gmail.com>


On 20.11.2008, at 15:00, fl00r wrote:

> кстати, на сколько я понимаю проект
> http://aroundme.ru/ написан на
> мербе - проект еще только развивается,
> нагрузки не очень большие, но
> все равно - результат прекрасный!



Олег абсолютно прав. То, что aroundme развивается — заслуга скорее не мерба, а
Мити Крассовского, который успешно смог довести его до нынешнего состояния.

julik

unread,
Nov 20, 2008, 12:22:53 PM11/20/08
to ror...@googlegroups.com

On Nov 8, 2008, at 1:49 PM, Oleg Andreev wrote:

> В рельсе, ровно как и в 90%
> рельсовых аппов, народ изобретает
> слишком сложные штуки с руби-магией,
> вместо использования компактных и
> всем понятных решений.


Я на все согласная если не надо будет
переписывать options_from_collection_for_select.

julik

unread,
Nov 20, 2008, 12:24:23 PM11/20/08
to ror...@googlegroups.com

On Nov 8, 2008, at 3:44 PM, Oleg Andreev wrote:

> "Если бы я тратил свое время на
> создание существ, -- сказал Траут, -- я
> бы никогда не смог привлечь
> внимание к действительно важным
> вещам:
> непреодолимым силам природы,
> изобретениям, приносящим людям
> страдания,
> нелепым идеалам и правительствам,
> которые заставляют настоящих мужчин
> и
> женщин чувствовать себя как последнее
> дерьмо".

UCK AR

julik

unread,
Nov 20, 2008, 12:26:05 PM11/20/08
to ror...@googlegroups.com

On Nov 11, 2008, at 7:31 PM, Sergey Sam Gershun wrote:

> ну так с точки зрения задачи - мерб,
> рейлз, херейлз - разница не стоит
> таких эмоций

Борхес и Wee верните, вот тогда
поговорим. А так это одни и те же __
только с разных сторон и с разным
количеством предварительных строк
require.
Reply all
Reply to author
Forward
0 new messages