recoder: (Default)
recoder ([personal profile] recoder) wrote2011-09-26 01:33 am
Entry tags:

Прошу помощи веб-девелоперского зала

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

Дано: линуксовая система с жадным до памяти софтом с C++ API.

Надо: прикрутить сверху Web UI поверх Apache, чтобы всё красиво конфигурить, смотреть всякие результаты: таблично и графически, плюс сваять своё подобие портальной системки чтоб уметь строить страницы с наборами своих виджетов.

Вот и думаю - как бы всё это задизайнить правильно и с перспективой? Собственно вопрос архитектуры распадается на два связанных вопроса: 1) на чём писать клиентскую сторону? и 2) на чём писать серверную сторону?

Клиент. Есть большой соблазн взять какой-нибудь ExtJS или Dojo (или SproutCore, или dhtmlx, или SmartClient, или на базе jQueryUI что-то своё) и построить в браузере монолитное веб-приложение со всеми рюшечками. Заманчиво конечно замахнуться на такое ультра-современное решение ибо и HTML5 на пороге, веб-приложения проникают везде и повсюду, да и демки все выглядят захватывающе. Отдельный плюс - серверная компонента сокращается до тоненькой прослойки над C++ API, которую можно написать на чём угодно, хоть на C++ сделать модуль к Апачу. Однако мне кажется что риск слишком велик. Написание приложений на JS - дело относительно молодое, подходы не устоялись, API всё ещё гуляют, плюс зоопарк браузеров просто вразнос пошёл. Опять же - непонятно, где искать JS-программистов соответствующего уровня? (Да даже оценивать JS-программистов - уже задача нетривиальная!) И сколько займёт процесс изучения конкретного выбранного JS-фреймворка, даже если у него такая неплохая документация как у Sencha? В общем, технологически - амбициозно, а вот организационно - всё же рисковано.

Сервер. Здоровая альтернатива - делать всё более-менее традиционно: MVC-фреймворк на сервере, те же jQueryUI или Dojo для оживляжа страниц, и JSON/XML для транспорта. Подводных камней видится гораздо меньше, но проще всё равно не становится. Всё равно надо думать - для начала о серверной платформе. Попробуем решить задачу перебором...

Мне так кажется, что на один бокс сажать Java с другими прожорливыми компонентами - нерационально. Прожорливость + непредсказуемость GC = проблемы. Так что отпадают многочисленные Java-фреймворки (Spring, Stripes, Play, и др.), химерный GWT и JVM-based Scala (Lift) и Groovy (Grails). При всей моей трогательной любви к Perl реальных перспектив у него не вижу ни с Perl5 ни с Perl6 несмотря на Ренессанс, да и TIMTOWTDI в командной разработке не будет помогать. Так что отпадают Catalyst, Mojo, Dancer. PHP сразу нет, потому что дикая эклектика и вообще плохо пахнет. ASP - нет, потому что среда линуксовая и Microsoft сюда тянуть себе дороже.

Насчёт написания веб-компонента на C++ пока не могу даже определиться - сумасшествие это или реальный вариант. Гугление вроде бы выдаёт некоторую информацию, но стоит ли бросаться в этот омут? Наверное всё же - нет.

Итого что у нас остаётся: модный Ruby и кошерный Python. То есть Rails и что-то из Django, Pyramid, TurboGears. Rails я на зуб пробовал - мне понравилось. И общая архитектура, и инструментарий для тестирования, и динамичность сообщества разработчиков. Однако несколько смущает сам Ruby: во-первых, непонятно где искать рубистов, а во-вторых опять же может выйти TIMTOWTDI. Питоновые фреймворки руками не щупал, но верю что там тоже всё должно быть примерно аналогично (и даже более однозначно из-за the python way). Есть правда озабоченность моментом Python 2.x против Python3K... А точнее пока непонятно как сравнивать.

Так что судя по всему, придётся выбирать между Rails, Pyramid и TurboGears. Методом тыка и прототипирования.

Коллеги, веб-девелоперы - скажите своё слово, поделитесь советом, а?

coding

[identity profile] osidorkin.livejournal.com 2011-09-26 06:46 am (UTC)(link)
Я бы делал минимальную функциональность на HTML, а потом прикручивал бы красоту на js - во избежание.
Делать web-компонент на C++ я бы не стал - неудобно да и опасно. Максимум - сделать себе удобное API поверх существующего, а обрабатывал бы запросы и генерировал HTML на чем-то другом.

[identity profile] mpak666.livejournal.com 2011-09-26 08:14 am (UTC)(link)
ExtJS хорош, если не накручивать сильно дофига всего на странице сразу, то очень даже и если использовать "правильные" браузеры как FF или Chrome. Всё четко, можно разбить на компоненты, интегрировать JQuery если нужно, можно работать прямо в MVC (модели-store есть, события есть).

Если брать ExtJS то на сервере будет вообще простая обработка запроса, работа с базой и возврат json, xml данныех, тут может и Rails лишним быть, я бы посоветовал взять может, что потоньше Sinatra или Padrino, хотя бы попробовать, тесты всё тоже есть и очень просто разобраться, минимум магии. Если уж начнёт расти, то можно думать и о Rails.

(Anonymous) 2011-09-28 10:17 pm (UTC)(link)
Потдержу товарища. ExtJs отличный выбор для приложений позволяюших подгрузить дополнительные 500К при первоначальной загрузке. Серверная часть становится не принципиальной, т.к. основная задача будет сводится к пересылке XML/JSON данных на клиент. По сути, сервер станет лишь а-ка web-service'ом принимаюшим параметры, запрашиваюшим данные с БД и передаюшим их назад.
На данный момент их модуляризация и компонентизация на высоте, так же как help и online demos. У меня заняло всего неделю разобраться со всем и я остался доволен.
На протяжении двух лет пользуемся, особых проблем не было, скорость разработки выросла в 5-6 раз.

[identity profile] c-a-s-u-s.livejournal.com 2011-09-26 10:09 am (UTC)(link)
>Клиент.
Если критична скорость ввода информации оператором(касир в банке), то лучше отказаться от клиента в барузере. Если не критична, например у телефонные опросы через колцентр, то ExtJS вполне справляется.
Могу порекомендовать контору где работал, они не первый год делают UI на ExtJS.

[identity profile] c-a-s-u-s.livejournal.com 2011-09-26 05:54 pm (UTC)(link)
имхо за несколько дней доки можно усвоить, но в процессе организации разработки я не участвовал. Думаю проще всего поначалу нанять на разработку UI когонить со стороны - смотреть на те формы, что создают они и делать по образцу остальные, получиться обучение без отрыва от разработки.

Мое ламерское имхо

[identity profile] larubin.livejournal.com 2011-09-26 12:46 pm (UTC)(link)
Я бы на питоне делал

Re: Мое ламерское имхо

[identity profile] larubin.livejournal.com 2011-09-26 05:16 pm (UTC)(link)
Ну я ж написал - ламерское имхо :) Я продакшн серверов кроме того, что с тобой вместе на перле, не пейсал ;) Да и тот весьма не продакшн.

Аргумент - вроде как перл влёгкую связывается с С++

Ну и на слуху он, лучше собаководы советуют....
(deleted comment)

Re: Мое ламерское имхо

[identity profile] avnik.livejournal.com 2011-10-01 07:52 pm (UTC)(link)
Если плюсы -- то boost::python

PS И питон легче джавы, и руби.

[identity profile] as-pushkin-by.livejournal.com 2011-09-26 09:40 pm (UTC)(link)
Пиши на том, что лучше знаешь. Я бы на Perl писал. :)

[identity profile] as-pushkin-by.livejournal.com 2011-09-26 09:55 pm (UTC)(link)
У нас в команде около 100 Perl разработчиков. Вывод делай сам. :)

[identity profile] dolbanavt.livejournal.com 2011-09-29 07:27 pm (UTC)(link)
Да, хороших перлоидов трудно найти. Приходится подтягивать уровень коллег. Коллеги писали перловые CGI и очень много страшных CGI, а я решил взять Mojolicious под новый проект (первый для меня в этой компании) и угадал. было много скепсиса (много на каталисте писал), но буквально за пару недель написал инфраструктуру для внутренних нужд компании и освоил фреймворк.

[identity profile] avnik.livejournal.com 2011-10-01 07:55 pm (UTC)(link)
Если питон -- то однозначно пирамида. Оно бьыстрое, и там весьма грамотные люди у руля.

[identity profile] avnik.livejournal.com 2011-10-01 08:18 pm (UTC)(link)
Ну оно относительно свежее, и активно девелопится.
Туда активно мигрируют с пилонса, и вроде бы на нем же собираются делать TG3.
Плюсы -- оно storage agnostic (используй хоть SQL, хоть zodb, хоть файловую систему), оно в общем template agnostic (там в комплекте chameleon и mako, и отдельными модулями идут jinja2 (django-style) и genshi).
Умеет routing и traversal (и даже оба сразу)
Умеет конфигурить-собирать приложение тремя способами (двумя с половиной на самом деле -- zope style требует отдельного pyramid_zcml потому что слишком много zope.* пакетов тащит)
Ну и там под капотом zope.interfaces и это есть хорошо и правильно.

Минусы -- оно "молодое", поэтому такой большой свалки компонентов как у джанги пока просто не наросло.

[identity profile] avnik.livejournal.com 2011-10-06 09:04 pm (UTC)(link)
Мне web2py показался очень вещью в себе.
Сложилось ощущение, что он делался для какого-то внутреннего применения в энтерпрайзе, а потом его почему-то выложили в паблик.

Там очень много внешних библиотек тупо втянуто во внутрь, оно не использует стандартные средства развертывания (virtualenv/buildout), ORM там собственный, готовых компонент нет совсем.

[identity profile] avnik.livejournal.com 2011-10-06 09:14 pm (UTC)(link)
Чтоб быть совсем честным и точным я имел ввиду "3rd party готовые компоненты".

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

Магия она как раз в zope (ну и некий ее кусок унаследовался пирамидой) -- это context based view lookup.

[identity profile] medvepol.livejournal.com 2011-11-27 06:18 am (UTC)(link)
И что ты решил в итоге?