Обзор системной архитектуры социальной сети Campus.ru

    Представляю Вашему вниманию обзор высокоуровневой системной архитектуры социальной сети www.campus.ru, разработки компании ООО «Креатив Медиа». На мой взгляд, данный материал интересен тем, что позволяет оценить применимость рассмотренных подходов и технологий в разработке интернет-ресурсов. По крайней мере, когда наша компания начинала проект «Кампус», мне очень не хватало подобной информации.

    Социальная сеть Campus.ru помогает школьникам и студентам в построении их будущей карьеры путем проведения специальных конкурсов от крупных компаний-работодателей, организации прохождения производственных практик и обучающих семинаров, а также посредством необходимого функционала для общения, обмена информации и удовлетворения других учебных нужды – например, составления учебного расписания. Функционал Campus.ru преимущественно пересекается с функционалом привычных для нас социальных сетей: зарегистрированные пользователи могут общаться, собираться в сообщества, писать в блоги, размещать фотографии и т.д. Однако, поскольку данная социальная сеть изначально ориентировалась на школьников и студентов, некоторые вещи были реализованы специально с учетом потребностей учащихся, например, «Учебный портфель» – папка для хранения материалов, или «Планер» – сервис для составления учебного расписания.

    Обзор системной архитектуры начнем с информации о том, что Campus.ru реализован на платформе Java. Судя по общей статистике, выбор платформы Java в качестве инструмента реализации медийного Web-ресурса является достаточно нестандартным решением, однако я выбрал именно эту платформу исходя из следующих соображений:

    • Мой предыдущий опыт разработки высоконагруженных, отказоустойчивых, горизонтально масштабируемых приложений на Java был успешен.
    • Java-сообществом накоплена огромная кодовая база качественных библиотек и фреймворков с открытым исходным кодом, практически на все случаи жизни.
    • При формировании проектной команды «с нуля» найти на рынке труда нескольких подходящих Java-разработчиков, обладающих необходимым уровнем квалификации, опытом командной работы и знаниями в области понимания архитектуры программного обеспечения (ОПП, Design Patterns) проще, чем, например, для работы с Ruby (т.к. этот язык, по опыту коллег, еще не достаточно широко распространен), или c PHP (по собственному опыту, слишком много низкоквалифицированных кадров, на отсев которых уходят без преувеличения месяцы).

    Предполагая язвительные комментарии, касающиеся производительности Java-приложений, замечу, что, принимая решение в пользу Java, я ясно осознавал, что JVM – не самый быстрый и экономичный интерпретатор. Однако, во-первых, JVM 6.0 действительно достаточно производителен для нужд Web-приложения, а во-вторых, труд программистов сейчас дороже стоимости железа, поэтому подолгу изобретать дорогие «велосипеды», которые позволяют выиграть 5%-10% производительности, для стартапа было бы неразумно. Я придерживаюсь принципа «лучше быстро работать с минимумом кода и красивой архитектурой, чем сэкономить 10% железа и увязнуть в отладке».

    Основным фреймворком проекта стал Tapestry 5. Выбор в пользу Tapestry 5 был сделан по ряду причин, основными из которых являются:
    • Tapestry позволяет полностью разделить верстку и презентационную логику. Нет необходимости добавлять в HTML специальные теги, не интерпретируемые браузером, как в JSP. Это особенно важно, т.к. Web-проект в большинстве случаев подразумевает сложную верстку, которая, как правило, выполняется и поддерживается отдельным специалистом. Кстати, в плане оптимизации верстки мы старались соблюдать best practice.
    • Содержит ряд архитектурных решений, нацеленных на высокопроизводительную работу, например, таких как Page Pool.
    • Адекватная и стройная архитектура фреймворка, позволяющая сосредоточиться на бизнес-логике приложения, а не на его конфигурации и интегрировании компонентов друг с другом, благодаря широкому использованию аннотаций и соглашений о наименовании, а также встроенному IoC.
    Поскольку ранее опыта работы с Tapestry 5 ни у кого из нас не было, в первую очередь был написан тестовый прототип приложения и выполнено его нагрузочное тестирование утилитой JMeter. Тестирование показало быстрое время отклика, стабильную утилизацию аппаратной платформы и отсутствие блокировок, после чего решение об использовании Tapestry 5 было окончательно утверждено.

    Исходя из сказанного выше, внутренняя архитектура Web-приложения Campus.ru продиктована правилами разработки приложений под фреймворк Tapestry 5.
    Кроме Tapestry, наше Web-приложение использует следующие библиотеки:
    DOJO 1.0 – JavaScript framework с AJAX
    Выбор DOJO в качестве основного JavaScript-фреймворка был продиктован наличием в нем большого количества готовых элементов управления, в том числе виджетов, а также тем, что DOJO позволяет выполнять все стилевое преобразование компонентов на стороне клиента. При этом при первом обращении к ресурсу загружается и кэшируются в браузере все необходимые CSS- и Java-cкрипты, а затем с сервера грузятся только HTML-страницы с разметкой минимального объема. Это значительно сокращает трафик и нагрузку на сервер.
    Кроме того, что немаловажно, у команды уже был опыт работы с DOJO Из трудностей – интеграционную часть DOJO-Tapestry пришлось изобретать самостоятельно; в перспективе планируем оформить ее в виде open source-проекта и выложить в открытый доступ.
    SwfUpload 2 – JavaScript компонент для загрузки файлов на сервер.
    Hibernate 3 – ORM Framework. Tapestry 5 прозрачно интегрируется с Hibernate. Для маппинга сущностей пользуемся аннотациями.
    Hibernate Search 3 – движок полнотекстового поиска на базе Lucene. Позволяет индексировать содержимое сущностей Hibernate, удобно конфигурируется аннотациями в сущностях. Может работать в кластере.
    Spring Security 2.0 – система аутентификации и авторизации, прозрачно интегрируется с Tapestry 5, конфигурируется аннотациями. Имеет широкие возможности, но подходящего нам механизма ACL для наложения персональных прав доступа пользователя к объектам предметной области не нашлось, пришлось придумывать свой. Планируем в перспективе выложить в виде open source проекта.
    Quartz 1.6 – планировщик для выполнения фоновых и асинхронных операций. Длительные операции, такие как рассылка почты, обработка файла на сервере, и пр. мы стараемся реализовать в виде асинхронно выполняющегося действия, чтобы не блокировать интерфейс пользователя на долгое время.
    При удачном стечении обстоятельств количество пользователей (т.е. количество запросов) социальной сети и объем связанных с пользователями данных растет лавинообразно. В связи с этим очень важно было обеспечить горизотальное масштабирование системы, а также достаточный уровень ее отказоустойчивости. Эти цели были достигнуты как за счет наличия избыточных аппаратных серверов для критических узлов системы, так и за счет использования специального программного обеспечения на уровне ОС: haproxy, hartbeat и пр. Так что аварий и болезней роста мы почти не боимся

    Кстати, о программном обеспечении. В своей инфраструктуре Кампус использует:
    Nginx 0.6 – балансировщик нагрузки (HTTP-запросов) и HTTP-сервер для отдачи статического контента (JavaScript, CSS, иконки и пр.). Балансировка HTTP-запросов на сервера приложений Tomcat настроена таким образом, чтобы в течение одной сессии все запросы от одного пользователя попадали бы на один экземпляр сервера Tomcat. Такая настройка балансировки нагрузки называется sticky session. Это сделано для того чтобы не реплицировать сессии пользователей между серверами Tomcat. Плюс – экономия ресурсов и линейное горизонтальное масштабирование. Минус – в случае отказа сервера, пользователю придется перелогиниться на ресурсе.
    JDK 6 – набор средств разработки и виртуальная java-машина (JVM), на базе которой работает сервер J2EE-приложений.
    Tomcat 6 – сервер J2EE-приложений (J2EE контейнер для Web-приложений). Под его управлением работает приложение Campus.ru. Мы не объединяли сервера Tomcat в кластер из соображений сохранения возможностей линейного горизонтального масштабирования на этом уровне.
    PostgreSQL 8.3 – версионная СУБД. Выбирали между MySQL и PostgreSQL. Остановились на Postgres, проанализировав различные обзоры, блоги специалистов и наличие утилит для кластеризации СУБД.
    PgPool-II 3.4 – балансировщик нагрузки и репликатор данных, используется для объединения в кластер двух серверов PostgreSQL. Запросы на изменение данных одновременно направляются на оба сервера БД, а запросы на чтение – на один из серверов по очереди. Таким образом, нагрузка распределяется между двумя машинами.
    PgBouncer 1.3 – легковесная система управления пулами соединений для PostgreSQL. Одновременная обработка запросов пользователей большим количеством серверов приложений требует поддержки большого количества соединений с БД. PgBouncer тратит на поддержание каждого соединения около 2 Кб памяти, и существенно снимает нагрузку с СУБД PostgreSQL. Таким образом, JDBC-пулы на серверах Tomcat настроены на соединение с PgBouncer, а не с PgPool. Дополнительным плюсом является то, что в случае кратковременной недоступности БД (например, при быстром перезапуске) PgBouncer будет продолжать попытки осуществить соединение с БД, и если это получится до наступления установленного тайм-аута, то сервера приложений даже не узнают о том, что БД была временно недоступна.
    ActiveMQ 5.2 – JMS-сервер. Используется для асинхронного обмена JMS-сообщениями в системе полнотекстового поиска Hibernate Search, сконфигурированной в режиме JMS Master/Slave configuration (подробности здесь). Также используется для обмена информацией с подсистемой асинхронного выполнения задач на базе фреймворка Quartz.
    • Sendmail – всем известный почтовый сервер. Используем для рассылок.
    Zabbix 1.6 – система мониторинга системной инфраструктуры. Осуществляет мониторинг состояния JVM, Tomcat по протоколу JMX через интерфейсы MBeans. Бесплатно мониторит до 30 хостов.
    Smssend – пакет для FreeBSD, позволяющий отправлять SMS. Используем для отправки SMS-сообщений системному администратору о проблемах на ресурсе.
    Chandler Server – Open source Web-приложение, представляющее собой календарный сервер, общающийся с внешним миром по открытому протоколу CalDav. Чтобы не изобретать велосипед, мы используем данный сервер в нашем сервисе «Планер» для хранения расписаний событий пользователей и сообществ.
    Amazone S3 – используется для надежного хранения файлов пользователей. Кроме того, использование данного сервиса помогает снять нагрузку с серверов приложений, т.к. файлы скачиваются пользователями напрямую с серверов Амазона. Метаданные файлов при этом хранятся в БД «Кампуса».
    Для работы с Амазоном есть клиентское Java API. Сервис платный, но для организации не дорогой. Если решите организовывать что-то подобное своими силами, рекомендую MogileFS, к ней тоже есть Java API.
    • Fotki.com – фото-хостинг наших партнеров, обеспечивающий хранение и конвертирование фотографий, загружаемых пользователями в фотоальбомы. Загрузка фотографий в браузер опять же происходит напрямую с серверов фотохостинга, что снимает нагрузку с серверов приложений Campus.ru. Если бы пришлось конвертировать фото самим, я бы, наверное, смотрел в сторону ImageMagick, Java API также прилагается.

    Все вместе это работает следующим образом:
    1) Запрос пользователя попадает на сервер балансировщика нагрузки. Nginx проверяет, есть ли в запросе заголовок, содержащий информацию о привязке пользователя к одному из серверов Tomcat. Если нет, то такой заголовок добавляется, и запрос перенаправляется на соответствующий сервер Tomcat. Первично сервер выбирается по принципу round-robin. Этот механизм обеспечивает sticky session.
    2) На сервере Tomcat генерируется динамический контент для HTML-страницы, по сути – только данные, с минимальной стилевой разметкой. Если для генерации страницы требуются данные из БД, приложение Campus.ru берет соединение из JDBC-пула данного сервера. Соединения в JDBC-пуле осуществляются с PgBouncer, который, в свою очередь, устанавливает соединение с PgPool, а PgPool – с PostgreSQL. Поскольку процесс установки соединений в JDBC-пуле происходит сразу при старте сервера Tomcat, то во время работы приложения получение соединения из пула работает очень быстро.
    3) Если запрос пользователя меняет участвующую в полнотексовом поиске информацию, то приложение отправляет JMS-сообщение поисковому серверу Master Node, отвечающему за синхронизацию полнотекстовых индексов на каждом из узлов кластера.
    4) Контент HTML-страницы возвращается в браузер пользователя. После этого браузер пользователя начинает загружать статический контент (JavaScript, CSS, изображения) с сервера Nginx, если этот контент еще не закэширован браузером, а также фотографии и аватары с внешних серверов фотохостинга.
    5) Браузер пользователя применяет CSS- и JavaScript-преобразования к загруженному DOM-дереву и в итоге отрисовывает пользователю готовую страницу.

    Данная схема позволяет, во-первых, снизить нагрузку на сервер приложений и минимизировать трафик, а, во-вторых, ускорить общую загрузку страницы за счет преодоления ограничения браузера, позволяющего загружать данные только по четырем потокам одновременно с одного ресурса. Обратной стороной медали является побочный эффект, наблюдаемый на старых браузерах типа IE 6, которые не успевают применить все динамические стилевые преобразования к странице до момента ее отображения, из-за чего пользователь может наблюдать, как кривая страничка у него на глазах превращается в красивую. Кроме того, первоначальная загрузка всех CSS- и Java-скриптов на медленных каналах может потребовать некоторого времени.
    Кстати, тут вспомнилась проблема с обновлением закэшированного статического контента (CSS, JS) в браузере пользователя. Для ее решения мы добавляем в URL статического ресурса номер его версии. Если в скрипты вносятся изменения, меняется номер их версии в URL, и браузер выкачивает с сервера обновленные файлы.

    Чтобы сказанное выше легче уложилось в голове, на рисунке изображена высокоуровневая диаграмма развертывания Web-приложения Campus.ru. Чтобы не усложнять диаграмму, некоторые связи между компонентами не изображены.

    Диаграмма развертывания Campus.ru
    Figure 1. Диаграмма развертывания Campus.ru

    Опыт показывает, что JVM эффективно работает с объемами памяти до 2 Гб, с учетом рекомендации, говорящей, что на каждый экземпляр JVM на сервере должно приходиться, по меньшей мере, два ядра процессора. Из этих соображений, на каждом аппаратном сервере были развернуты по 4 экземпляра серверов приложений Tomcat. В каждом контейнере Tomcat были развернуты Web-приложения Campus и Chandler. Нагручное тестирование показало, что при произведенных настройках GC, данная конфигурация позволяет практически линейно утилизировать аппаратные ресурсы при росте нагрузки и выдавать при этом приемлемый результат по времени отклика.

    На всех аппаратных серверах приложения работают под управлением ОС FreeBSD 7.1. Выбор в пользу FreeBSD, а не Linux, был сделан потому, что при прочих равных, все Линуксы имеют свои особенности, и системным администраторам было бы сложнее передавать знания друг другу. У нас в компании все проекты пока работают на FreeBSD, поэтому он стал нечто вроде корпоративного стандарта. Из минусов FreeBSD в Java-проекте – Sun не выпускает JDK для FreeBSD, а порты под FreeBSD запаздывают относительно обновлений Sun. Также в портах JDK есть не все отладочные утилиты.

    Отказоустойчивость на серверах-балансировщиках нагрузки реализована посредством утилиты HAProxy.

    Аппаратные сервера «Кампуса» имеют следующую конфигурацию:
    1) Сервера для балансировки нагрузки и отдачи статического контента:
    CPU Intel Xeon Dual Core 2.67GHz\ RAM DDR 2 8Gb \ HDD 4xSAS 73gb 15000 rpm
    2) Сервера для развертывания Web-приложения:
    CPU 2xIntel Xeon Quad Core 2.66GHz\ RAM DDR 2 16Gb \ HDD 4xSATA 300gb 15000 rpm
    Главный принцип при выборе сервера для Web-приложения – чем больше ядер/процессоров и оперативной памяти – тем лучше.
    3) Сервера для БД:
    CPU 2xIntel Xeon Quad Core 2.66 GHz\ RAM DDR 2 16Gb \ HDD 8xSAS 147gb 15000 rpm
    Главный принцип при выборе сервера для БД с расчетом на работу с большими объемами данных – чем больше дисков и чем они быстрее, тем лучше. Обязательно наличие аппаратного RAID. Затем по приоритетам идет оперативная память, за ними – процессоры.

    Сервера хостятся в дата-центре крупного московского интернет-провайдера за аппаратным файрволом от Cisco.

    В заключение хочется сказать, что, несморя на большие объемы проделанной работы, нам еще есть что совершенствовать. Например, в связи с выходом IE 8 мы наметили болезненный переход на DOJO 1.3. Также мы планируем сделать верстку сайта более легкой (убрав тени, полупрозрачность и лишние округлости) в связи с тем, что учащиеся в регионах по факту имеют в школах/вузах канал в 128Кбит/сек и IЕ 6. В самых ближайших планах реализовать кэширование данных на базе проверенного распределенного кэша Memcached. Также у нас на сегодняшний день не решен вопрос шардинга данных, если вдруг объем данных начнет угрожающе расти. Поэтому в перспективе мы намерены исследовать Hibernate Shards, PL\Proxy и другие средства. Если у кого-то есть практический опыт и желание им поделиться – буду очень рад.

    В следующей статье, если поддержите, я планирую рассказать об управлении проектом «Кампус» и о нашей команде

    Спасибо за внимание!
    Технический директор ООО «Креатив Медиа»
    Сергей Седов
    Опубликовано с разрешения Генерального директора компании ООО «Креатив Медиа» Ивана Соколова
    Creative Media
    0,00
    Компания
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 133

      +11
      Уважаемый Сергей, ваш технологический стриптиз был очень познавателен. Спасибо.

      Вопрос — а что Вы рассматривали в качестве альтернативы Tapestry, если рассматривали?
        +2
        Рассматривал JBoss Seam (по результатам какого-то обзорного тестирования он оказался очень «тяжелым»), и wicket — год назад начитался про него на англоязычных форумах гадостей, что дескать очень сырой. Сейчас, возможно, с ним стоит поэкспериментировать.
          0
          Ясно. Всегда был уверен, что Tapestry — для портальных тяжелых решений, но после вашего отчета попробую на него посмотреть еще раз.

          Hibernate Shards сейчас еще сырой, было бы интересно прочесть ваше мнение по поводу его применимости.

          Буду ждать новостей от вас по этой теме на Хабре.
            +1
            Tapestry, на самом деле, гораздо легче классических портальных решений на базе JSR-168. Здесь на Хабре и статья отличная на тему Tapestry была.

            Да, с шардингом будем ближе к делу обмозговывать что к чему, возможно как-нибудь PL\Proxy красиво обойдемся.

            Спасибо за +1 :)
              0
              Не за что. Думаю, там не только я один постарался :)
              0
              Цель разработчкика Tapestry 5 — очень сильно оптимизировать его по скорости. Хотя он уже достаточно быстр. Т.е. предназначение — массовые веб проекты.

              К примеру, там вместо рекурсивного обхода дерева компонент реализован обход оптимизированного автомата состояний, что дает дает существенный выигрыш. Смотрите его блог — Speeding up Tapestry 5.1
              0
              Что мне не понравилось в современном Wicket'е:

              • не оптимизирован для экономии памяти — это принципиальная позиция разработчиков. Например баг в экономном StatelessForm не фиксился на протяжении многих месяцев, потому что это «не приоритетно» — см. StatelessForm — problem with parameters after validation fails
              • не интуитивен для веб разработчиков


              С другой стороны, для относительно небольшой аудитории (приблизительное использование HttpSession на пользователя 10-200 килобайт) и сайта со сложной динамической структурой, Wicket очень хорош.
                0
                Сложной динамической структурой страниц.
            0
            А использовать Jetty вместо томката не пробовали?
              0
              У нас Jetty используется на локальных машинах разработчиков (Run-Jetty-Run) для разработки. На production Jetty ставить не пробовали, но, если что, то уверен, что проблем с ним не будет.
                0
                jetty вполне хорошо держит нагрузки — его используют Google AppEngine и LinkedIn. Отличная статья, кстати…
                  +1
                  Спасибо огромное за информацию, если с Tomcat вдруг будут проблемы — будем знать на что соскочить :)
                  По большому счету, мы еще оптимизацией не занимались, но когда руки дойдут, будем рассматривать переход на Jetty как один из путей оптимизации.
                  0
                  Просто мне кажется, что это могло бы положительно сказаться на производительности.
                    0
                    А есть какие-нибудь свежие и объективные сравнительные тесты производительности сервлетного контейнера в Tomcat и Jetty?
                      0
                      Есть только тесты по 6 томкату и 6 джетти — там раздача статического контента, джетти в 1,5 — 2 раза хуже. А вот по динамике тестов я не находил.
                        0
                        А можно ссылки или описание эксперимента? Я встречал сравнения, где они наравне, кроме некоторых случаев, когда Jetty быстрее.
                          0
                          Надо гуглить по «Jetty vs Tomcat benchmark».
                +2
                Очень познавательно, даже если с джавой знаком вскользь. Спасибо за статью.
                Скажите, а на какие конкретно нагрузки вы сейчас рассчитываете?
                  +1
                  Поскольку естественная нагрузка сейчас небольшая, мы проверяли наш сайт на синтетических нагрузочных тестах, эмулирующих работу пользователей по различным сценариям. Получилось, что мы стабильно выдерживаем в среднем 320 разнородных запросов в секунду. Это при том условии, что тонким тюнингом кода приложения, БД и ОС мы еще не занимались, и кэширования пока вообще никакого не прикрутили.
                    +5
                    320 запросов в секунду, это та нагрузка которую держит приложение на описанном Вами парке?
                      0
                      Да, но тут нужно понимать, что при этом «узким местом» являются сервера приложений, загруженные примерно на 80%, сервера балансировки нагрузки и СУБД практически отдыхали, их загрузка была 5-10%
                      При дальнейшем увеличении нагрузки на серверах приложений сильно возрастали накладные расходы на сборку мусора, и потихоньку начинали копиться очереди запросов. Так что еще есть что тюнинговать, но пока это для нас не первоприоритетная задача, так как таких нагрузок у нас еще нет, а реальный профиль нагрузки скорее всего будет существенно отличаться от нашего синтетического. Ждем реальную статистику.
                        0
                        Ну то что для балансеров и для базы(если запросы нормальные) это вообще не нагрузка оно и так понятно, но вот, что при таком количестве запросов кластер tomcat'ов выдавал такие показатели более чем странно. Опять же синтетический тест скорей всего будет показывать результаты получше, чем боевая нагрузка (из практики).
                        По поводу sticky session, у вас используется, потому что вы храните информацию залогиненого пользователя в сессии томката? Если так то я бы отказался от этого, потому что как показывает практика хранение объектов в сессии ведет к неспособности приложения жить под нагрузкой.
                          0
                          А на какие в среднем нагрузки стоит ориентироваться на один аппаратный сервер, чтобы это считалось «нормальным»? Профилировщиками пока приложение не ковыряли, возможно какие-то блокировки в коде все же присутствуют, будем над этим работать. Благо запас еще огромный.
                          По синтетическому тесту — не соглашусь, у нас он более жестокий, нежели пользователи. Практически все сценарии — на обновление данных, хотя в реальности люди гораздо больше читают и качают, чем пишут и загружают.
                          У нас в сессии лежит минимум данных, в основном аутентификационная информация. В подавляющем большинстве случаев у нас используется активационный контекст Tapestry, позволяющий хранить состояние в URL.
                        0
                        А сколько front-end серверов было, когда вы получили 320 запросов?
                        Сколько по вашем оценкам это одновременных пользователей?
                          0
                          Два.
                          Сложно жесткий синтетический тест перевести в реальных пользователей, так вот навскидку даже и не скажу. Со временем соберем статистику запросов, усредним и тогда подсчитаем :)
                      0
                      Кстати, большое спасибо за оценку!
                      0
                      Интересно было бы узнать про технико-экономическое обоснование такой архитектуры
                        0
                        Есть обоснование, но оно больше технико-, нежели экономическое: была поставлена задача разработать движок для социальной сети таким образом, чтобы система была отказоустойчивая, горизонтально масштабируемая, и обслуживание системы могло бы производиться без остановки сервиса. Кроме того, изначально хотели запустить массированную маркетинговую компанию, так что сразу после запуска ожидался вал народу. Соответственно, сразу готовились к хорошим нагрузкам. Изначально можно было бы, конечно, двумя серверами обойтись, а потом размасштабироваться, но руководство поддержало решение «сразу делать хорошо и надолго». Так и сделали.
                          0
                          Спасибо за статью. Побольше бы таких.

                          Руководство это заказчики? Просто обычно «сразу делать хорошо и надолго» от инвесторов редко услышишь.
                            0
                            Всегда пожалуйста!
                            Да, нам действительно повезло с инвесторами :)
                        0
                        ох, я, как большой нелюбитель явы — по новому на нее посмотрел и, кажись, начинаю менять свое мнение, спасибо Вам!
                          +1
                          по крайней мере — попробуйте. Java сейчас и, скажем, пять лет назад — две совсем большие разницы. Всегда пожалуйста!
                          +2
                          поддерживаю предпредыдущего оратора: во сколько встал проект? хотя бы порядок
                          ну или хотя бы планируемый срок окупаемости?
                            +2
                            Порядок — шесть нулей (руб). Подробности, к сожалению, разглашать не имею права.
                              0
                              а планируемый срок окупаемости?
                              можете разгласить, когда вы планируете получить прибыль?
                                0
                                К сожалению, ни по срокам, ни по способам монетизации комментариев давать не имею полномочий. Единственное что могу сказать — они есть, они вполне конкретные и активная работа с партнерами в этом направлении уже начата.
                            +1
                            Сразу вопрос — чем вы круче Скриблера, с которым уже ознакомилась аудитория Хабра?
                              0
                              Я, к сожалению, мало знаю про Скриблер, поэтому сравнивать вот так сходу не могу, но, насколько я знаю, мы «играем на разных полях». По функционалу везде примерно одно и то же.
                                0
                                не могу согласиться, просмотрите подробнее.
                                  0
                                  С чем не согласны?
                                  На что обратить внимание при осмотре?
                                    +7
                                    Для начала скажу о том, что я один из программистов Скрибблера, ну и, соотвественно,  просматриваю, как развиваются события у других проектов с нашей же тематикой.

                                    Начнем с простого:
                                    1. Расписания на кампусе выглядят в виде добавления событий, что неправильно.
                                    Scribbler: редактирование расписаний вынесено в отдельную сущность сайта.

                                    2. Загружать можно файлы объемом не более 30Мб, а что делать если вдруг нужно выложить видео-лекцию?
                                    Scribbler: рабочий стол.

                                    3. Wiki-учебник ведет на какой то сайт letopisi.ru, вот этого я не понимаю, зачем, лучше было бы убрать этот пункт, до тех пор пока не запрогали что то внутри проекта.
                                    Scribbler: коллективная работа с документами есть, что будет потом не могу сказать, но будет круто.

                                    4. На сайте есть что нибудь повесомей кампусов (сообществ)?
                                    Scribbler: Основная еденица — группа, сообщеста — круг людей по интересам.

                                    5. Как мне отследить активность друзей?
                                    Scribbler: Лента активности

                                    6. Какова миссия проекта campus.ru, создавать кампусы?Scribbler: помочь студенту в учебе, в плане учебы

                                    7. Работа — это джоб сервис или ссылки на сайты с работой?
                                    Scribbler: будет джоб сервис.

                                    В общем архитектура сайта, наверно,  и отличная, но я не понимаю, какова цель проекта.

                                    Был такой проект studbox.ru, но он почему-то теперь закрыт, решал больше задач, чем в данный момент campus.ru, надеюсь, со временем функционал пополнится.

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

                                    по поводу Dojo, благодаря тому, что в нем дофигища всего готово, он тяжелый, потому стоило бы взглянуть в сторону mootools или jquery, и самим дописать, то, что нужно.

                                    Я не хочу говорить, что кампус плохой, просто смотрю на факты, это просто мое личное мнение.

                                    З.Ы. И зачем такой большой прелоадер?!
                                      +2
                                      И оба проекта не смогли отправить мне е-мейл на подтверждение :)
                                        0
                                        вот те раз )
                                        мыло в личку.
                                          0
                                          Может в спам попало?
                                            0
                                            Нет :)
                                            0
                                            на какое мыло?
                                              0
                                              для кампуса было campus@devg.ru
                                                0
                                                Судя по логам — на вашем сервере (mail.zoneedit.com[216.75.30.240] ) не совсем корректно настроен DNS.
                                                На другие почтовые сервера все доходит без проблем.
                                                И раз уж от скриблеров тоже ничего не пришло — думается мне, что действительно что то с DNS на вашем сервере.
                                                  0
                                                  zoneedit — сервер-редиректор.
                                                  Странно, он обычные письма ходят нормально. Да и от проектов разных тоже. Но если удобно — можете переписать ящик на devgru@mail.ru
                                                    0
                                                    Ящик изменил, письмо с активацией повторно выслал, по логам — оно дошло. Насчет DNS еще раз проверю на нашем сервере.
                                            0
                                            странного мнения вы про Dojo — какое дело проекту, что в нем много чего, если это _НЕ_ загружается если явно не используется (через dojo.require)? Что будет, если завтра будете расширяться и того, что дает мутулс обычному сайту, мало для мощного веб-приложения? ;) а в Dojo есть все необходимое и чуточку из области почти фантастики и вкусностей :)
                                              0
                                              Мои ответы с пометкой «Campus:»

                                              1. Расписания на кампусе выглядят в виде добавления событий, что неправильно.
                                              Scribbler: редактирование расписаний вынесено в отдельную сущность сайта.
                                              Campus: планируем доделать, у Вас действительно интерфейс для забивания расписания удобнее

                                              2. Загружать можно файлы объемом не более 30Мб, а что делать если вдруг нужно выложить видео-лекцию?
                                              Scribbler: рабочий стол.
                                              Campus: Нужно будет просто нам об этом сказать, пока никто не жаловался. Ограничение выставлено искусственно.

                                              3. Wiki-учебник ведет на какой то сайт letopisi.ru, вот этого я не понимаю, зачем, лучше было бы убрать этот пункт, до тех пор пока не запрогали что то внутри проекта.
                                              Scribbler: коллективная работа с документами есть, что будет потом не могу сказать, но будет круто.
                                              Campus: А зачем изобретать велосипед? letopisi.ru — тоже наш проект, а Wiki — удобная и привычная всем среда для коллективного творчества. А я могу рассказать, что мы, когда дойдут руки, наверное интегрируемся с Google Apps, но востребованность этой фичи пока минимальная. Мы обычно планируем функционал исходя из этого критерия.

                                              4. На сайте есть что нибудь повесомей кампусов (сообществ)?
                                              Scribbler: Основная еденица — группа, сообщеста — круг людей по интересам.
                                              Campus: Весомее?? Не понял вопрос. А что у Вас тяжелее — группа или сообщество? У нас есть учебные заведения, например.

                                              5. Как мне отследить активность друзей?
                                              Scribbler: Лента активности
                                              Campus: Тоже. «Что нового»

                                              6. Какова миссия проекта campus.ru, создавать кампусы?
                                              Scribbler: помочь студенту в учебе, в плане учебы
                                              Campus: помощь в построении карьеры, начиная со школьной скамьи. Я же говорил, что мы на разных полях играем.

                                              7. Работа — это джоб сервис или ссылки на сайты с работой?
                                              Scribbler: будет джоб сервис.
                                              Campus: можно сказать что пока ссылки с на партнерский сайт. Тоже когда-нибудь доведем до ума, если будет потребность.

                                              В общем архитектура сайта, наверно, и отличная, но я не понимаю, какова цель проекта.
                                              Campus: Спасибо, см. п.6

                                              Был такой проект studbox.ru, но он почему-то теперь закрыт, решал больше задач, чем в данный момент campus.ru, надеюсь, со временем функционал пополнится.
                                              Campus: конечно! но действуем мы не по принципу чтобы сделать максимальное кол-во фич, а по принципу — делаем то, что требуется для достижения бизнес-задачи в данный момент времени (agile)

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

                                              по поводу Dojo, благодаря тому, что в нем дофигища всего готово, он тяжелый, потому стоило бы взглянуть в сторону mootools или jquery, и самим дописать, то, что нужно.
                                              Campus: Тут у Вас какая-то подмена понятий получается. DOJO — фреймворк, jQuery и mootools — библиотеки. Почитайте обзоры. А самим дописывать, см. пословицу время=деньги.

                                              Я не хочу говорить, что кампус плохой, просто смотрю на факты, это просто мое личное мнение.
                                              Campus: Спасибо за Ваше мнение! Конечно, никому не надо говорить, что он плохой, живите в позитивной парадигме с менталитетом достаточности! ;)

                                              З.Ы. И зачем такой большой прелоадер?!
                                              Campus: Так получилось :)

                                      0
                                      Кто-нибудь из собравшихся Java-программистов может пособить в транспортировке Web Optimizer
                                      habrahabr.ru/blogs/web_optimizator/
                                      на какой-нибудь Java-фреймворк? Или придется писать сишный модуль к nginx?
                                        0
                                        т.е. Web Optimizer для java-приложений?..
                                        многие фреймворки (например, GWT) делают многое из этого сами.

                                        для остальных подойдёт просто servlet filter, который нужно будет подключить в web.xml оптимизируемого приложения

                                        но не думаю, что для Java-приложений подобная оптимизация будет действительно эффективной — как правило они либо «правильные» с самого начала (пишут опытные люди), либо сильно «испорчены» тяжеловесными фреймворками вроде Seam.

                                        Опять же, если перед Tomcat'ом поставить Apache/AJP13, то часть apache-оптимизаций может сработать сразу
                                          0
                                          спасибо за развернутый ответ. Но некоторые вещи (например, CSS Sprites) там явно не проработаны. Советуете обратиться к разработчикам напрямую с предложением «портировать» технологию?
                                            0
                                            Если речь идёт о фреймворке типа tapestry то CSS sprites к джаве никак не привязан — там можно как угодно писать css и раскидывать картинки, так что никакой java-специфики, как я понимаю, там нет.
                                        +2
                                        Было бы просто замечательно, если форма регистрации работала в Опере.
                                          0
                                          Я тоже, кстати не понял закос на MS Internet Explorer 7 и Mozilla Firefox 3. Куда Опера делась?
                                            +1
                                            Согласен. Фраза «Рекомендуем использовать браузеры MS Internet Explorer 7 или Mozilla Firefox 3» отпугивает бывалых Опероводов и новомодных Хромоводов.
                                              0
                                              И Сафариводов с ними же…
                                                +1
                                                Да, виноваты. Мы сейчас работаем над немного облегченной версткой сайта, она в итоге будет работать и с Оперой, и с Хромом. Выкатим к началу мая :)
                                            0
                                            Так как все-таки правильно: Creative Media или Cretive Media?
                                              +5
                                              Евгений Ваганович! Не признал вас в гриме!
                                                0
                                                Creative Media, а вообще — ООО «Креатив Медиа» :)
                                                  +3
                                                  тогда несколько странно, что ваш блог называется «Блог компании Cretive Media».
                                                0
                                                А вот просто интересно, в свете открытия Google AppEngine 4 Java с какими усилиями можно этот проектик пульнуть на google-вский клауд?
                                                  0
                                                  Навскидку больших проблем с этим не вижу, но код Hibernate скорее всего придется переделывать под JPA. А вообще, Tapestry 5 там работает tapestry.ganshane.com/
                                                  +3
                                                  дизайн ужасно захламлен
                                                    0
                                                    Дизайн отличный. По сравнению с тем же incampus.ru, этот — просто божественный.
                                                      0
                                                      Спасибо! :) Хотя, если честно, с объемом мы немного переборщили…
                                                      0
                                                      Буду признателен, если дадите конструктивную критическую оценку и рекомендации. Собственно, затем я сюда и пришел :)
                                                        0
                                                        форма регистрации:
                                                        показалась длинной
                                                        мой адблок блокировал аяксовый запрос, suggest названия вуза вроде
                                                        проверка свободности логина должна быть при его вводе, а не где-то в заднице

                                                        рабочий стол:
                                                        слишком много блоков на «рабочем столе», какая-та глупая тень у них и слишком большие промежутки между ними
                                                        слишком большие заголовки
                                                        зачем нужно было делать пункты меню «мои ....» жирным?
                                                        анимированная реклама — ппц
                                                        юзерпики по умолчанию не понравились
                                                        в верхнем меню есть галочки, но меню не выпадают
                                                        «Профиль заполнен на», непонятная тень у чисел с процентами

                                                        не нашел хелпа
                                                          0
                                                          Спасибо за мнение, порадую дизайнера :)
                                                            0
                                                            пожалуйста, если понадобится еще помощь, пишите в асечку
                                                      0
                                                      Campus тяжелый. Грузится с тормозами, это Вам не контакт. Но вещь прикольная :)
                                                        0
                                                        А у меня загрузился примерно в два раза быстрее чем вк.
                                                          0
                                                          Да, верстку сейчас доводим до ума, из-за теней и округлостей в CSS много expressions и браузер заметно подтормаживает. С дизайном немного перестарались :)
                                                          +2
                                                          У вас домен через 17 дней заканчивается…
                                                            0
                                                            Спасибо! :) Там у нас должно автопродление стоять.
                                                            0
                                                            а выдержит ли конкуренции?
                                                              0
                                                              Конечно! Все продумано, пока не поздно — занимайте красивые ники ;)
                                                                +2
                                                                Статья интересная и полезная — за неё спасибо, но меня всегда удивляли проекты, которые, не успев ничего мне предложить — уже требуют регистрацию. Я защёл на главную страницу вашего кампуса и вижу надписи «Общайся с друзьями, не покидая сайт, Твои фото-, видео-, и аудиогалереи.» и конечно же дико заинтересовался т.к. нигде в интернете этого больше не встречал!!! Конечно же, только у вас можно фотки выложить и, не покидая сайт, кому-то написать…
                                                                Покажите мне хоть что-то для начала, заинтересуйте меня, заинтригуйте хотя бы и тогда я, возможно, зарегистрируюсь и даже, возможно, вернусь на ваш ресурс… а так — я его просто закрыл.
                                                                  +1
                                                                  Во-во…
                                                                  # Обменивайся
                                                                  учебными материалами
                                                                  # Не пропускай
                                                                  события! Учебные
                                                                  или личные.
                                                                  # Общайся с друзьями,
                                                                  не покидая сайт.
                                                                  # Ищи работу
                                                                  по специальности.
                                                                  # Твои фото-, видео-,
                                                                  и аудиогалереи.

                                                                  Было-бы разумно сделать ссылками на какие-нибудь демки хотябы… А так только раздражает что пытаешься по ним тыкать а они не реагируют(
                                                                  0
                                                                  На почту уже минут 15 ничего не приходит. Это нормально?
                                                                    0
                                                                    Может в спам попало?
                                                                      0
                                                                      такая бага и у меня была. Просто попробовал зайти под логином, который в регистрации указал — пустило. Не очень стабильно работает рассылка почты. у меня была проблема — не приходили оповещения об обновлениях в кампусах. потом начали приходить. теперь опять не приходят
                                                                    +4
                                                                    Извините, позвольте, пожалуйста, мне использовать пароли длиннее 16 символов и состоящие из любых символов, а не только латинских букв и цифр.
                                                                    Допустим: gr*(6Rjhoi*&$%@_hto3&$%a.
                                                                    Да, я параноик.
                                                                      –3
                                                                      Кстати, это жутчайшее ограничение ИМХО вызвано тем, что Ваш пароль там используется не только для сравнения с тем, что Вы вводите при логине, но и ещё для чего-то, что не понимает нелатинских букв и цифр. Ну и хранятся пароли у них очевидно в открытом виде, а не в хеше.

                                                                      А ещё жутко вымораживает ограничение длины логина странными минимумами и максимумами, основанными по всей видимости на том, что у авторов ник не слишком длинный и не слишком короткий.
                                                                        0
                                                                        Пароли у нас хранятся хешами, а ограничения такие, связаны с тем, что пароль действительно используеться для других целей — он передается календарному серверу при регистрации, где так же хранится в хеше.
                                                                        Ограничение логина так же из-за сервисов, где он используется (фотохостинг, файловый хостинг, календарный сервер и т.д).
                                                                      0
                                                                      На какую планируемую нагрузку и какое количество серверов вы расчитываете, если не секрет?
                                                                        0
                                                                        Мы можем горизонтально масштабироваться без остановки сервиса по мере необходимости.
                                                                          0
                                                                          Я немного не про это. Перефразирую: сколько по вашему мнению вы сможете раздать с этих трех серверов (по одному на морду, app и базку), и во что в первую очередь упретесь?

                                                                          >Мы можем горизонтально масштабироваться без остановки сервиса по мере необходимости.
                                                                          Вы пробовали? ;)
                                                                            0
                                                                            На вскидку — 160 запросов/сек. Подробнее см. выше. В первую очередь упремся в сервер приложений.
                                                                            Пробовали, конечно.
                                                                        +1
                                                                        Без яваскрипта регистрация показывает только крутящийся до бесконечности круг. Не нра ((
                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                            +2
                                                                            огромный прелоадер угнетает )
                                                                              0
                                                                              да, согласен
                                                                              0
                                                                              спасибо. очень интересно.
                                                                                0
                                                                                Замечательная компания — «Кретив Медиа»
                                                                                PS Название блога.
                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                    0
                                                                                    У нас клиент (приложение) спрашивает сиквенс у pgpool'а.
                                                                                    т.е. у нас нет, к примеру, запросов, выполняемых на сервере, которые меняют сиквенс.
                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                        0
                                                                                        Нет, не происходит.
                                                                                    0
                                                                                    На странице Пользовательское соглашение нижняя ссылка © CreativeMedia, 2008 ведет на кампус, а не на сайт компании
                                                                                      0
                                                                                      Очень интересный обзор архитектуры.

                                                                                      Не могли бы вы объяснить откуда эти данные, и как вы это проверяли?

                                                                                      Опыт показывает, что JVM эффективно работает с объемами памяти до 2 Гб, с учетом рекомендации, говорящей, что на каждый экземпляр JVM на сервере должно приходиться, по меньшей мере, два ядра процессора.

                                                                                        0
                                                                                        Это рекомендации по развертыванию компании BEA для серверов Weblogic. Они действительно имеют место быть, проверено высоконагрузочными проектами, успешно сделанными для Вымпелкома. Хотя, на практике все, конечно, индивидуально, и подходит это не для всех приложений, но для большинства web, с которыми я встречался — да. Если увеличивать, например, объем памяти, то начинались сложности со сборщиком мусора. Поскольку для серверов Tomcat подобных рекомендаций я не нашел, то применил те, что знал для weblogic :)
                                                                                        0
                                                                                        Я правильно понимаю, что у пользователей без джаваскрипта сайт работать не будет?
                                                                                          0
                                                                                          Да, не будет :( graceful degradation у нас по ряду причин не поддержан
                                                                                          0
                                                                                          критинская регистрация, сходу не получилось зарегаться (то логин больше 5 символов, а чё блин не 20? то проверка на уникальность логина после всех(!) шагов), больше на этот сайт ни ногой. Увольте придурков, которые как бы занимались «юзабилити»
                                                                                            0
                                                                                            Ффф.

                                                                                            Как уже говорилось выше — 279к 1!!! файл css — это жестоко :(
                                                                                            Общий вес стартовой страницы почти 1мб — это чересчур для того, что на ней есть. Оно конечно закешируется, но все же…

                                                                                            У меня пропадет желание регистрироваться в ожидании стартовой страницы.

                                                                                            Вынесите загрузку javascript и css в другое место.

                                                                                            P.S. вот так и появляются легенды о тормозах Java веб-приложений.
                                                                                              +1
                                                                                              Прелоадер, мне кажеться, мог бы весьма меньше быть.
                                                                                                0
                                                                                                Клёва, клёва — tapestry 5 — гуд :) А что у вас со Spring Security, что вам там не подошло с ACL на доменах? Тут делаю целый стек с Tapestry5, в том числе буду использовать JSecurity (Ki) заместо Spring Security. Думаю через Hibernate Event'ы делать перехват операций и проверять права к объектам. А у вас как сделано?
                                                                                                  0
                                                                                                  Если в двух словах, то нам не хватило возможности прозрачно определять права конкретного пользователя для работы с конкретным объектом предметной области. Т.е. описывать не только возможность доступа к объекту (ресурсу), но еще и типы операций, которые с этим объектом можно делать. Все это хотелось реализовать без «сквозной» логики в программном коде. Об этом скоро напишем отдельную статью. У нас это сделано на уровне Tapestry IoC, через аннотации.
                                                                                                  0
                                                                                                  Сергей, еще вопрос: если я правильно понял, то у Вас по сути большая часть Java EE (Jms, Tomcat, JPA на Hibernate), но без самого j2ee :)

                                                                                                  Насколько обоснованно было бы использовать Java EE в Вашем случае, как считаете?
                                                                                                    0
                                                                                                    Вопрос как-то странно звучит :) Что значит «использовать Java EE» в Вашем понимании? )
                                                                                                      0
                                                                                                      Я предполагаю, что есть как минимум «Ынтырпрайз» бины и есть контейнер для них (JBoss, WebSphere), в который входит составной частью контейнер сервлетов. EJB-контейнер обеспечивает различные сервисы, в том числе и JPA, и JMS, и JAAS.

                                                                                                      У вас есть Tomcat, который контейнер сервлетов, есть JMS и Hibernate. В тексте я заметил, что вы упоминали авторизацию (которая всяко имеет отношение к JAAS). Хотел узнать, не складываются ли эти вещи в Java EE :)

                                                                                                      Сильно не пинайте, я недавно в Java EE, вот и стараюсь разобраться :)
                                                                                                        0
                                                                                                        Я не автор статьи, извините :)
                                                                                                          0
                                                                                                          Поэтому я и задавал вопрос Сергею :)
                                                                                                            0
                                                                                                            Я просто прокомментировал что он странно звучит :)
                                                                                                              0
                                                                                                              Я совершенно без претензий к Вам :)
                                                                                                      +1
                                                                                                      Да, можно и так сказать. Я бы сказал, что мы используем некоторые элементы стека JEE, но эти элементы достаточно легковесны (Сервлетный контейнер, а не полноценный J2EE-сервер. Легковесный ActiveMQ, с простыми JMS-клиентами на стороне приложения, а не MDB. Hibernate, а не полноценную реализацию EJB). Главным оправданием использования является то, что все подходы к построению архитектуры системы мы смогли реализовать с помощью готовых, надежных и бесплатных решений, велосипед изобретать не пришлось, сэкономили массу времени.

                                                                                                      Использовать «классический» стек JEE (JSF+EJB) мы изначально не стали, из соображений плохого разделения верстки и презентационной логики, отсутствия IoC, да и, что греха таить, из соображений производительности. Tapestry 5 — ощутимо быстрее и менее ресурсоемка чем JSF. См. производительность Tapestry vs Seam.
                                                                                                        0
                                                                                                        Понятно, спасибо за пояснения.
                                                                                                        0
                                                                                                        JavaEE — это всего лишь спецификации. Кстати, их гораздо больше, чем JMS, JPA и JSP. Сервер JavaEE — это сервер, который реализует эти спецификации. Например если взять Apache Geronimo, то внутри вы увидите тот же Tomcat в качестве веб-контейнера. Плюс кучу всего в довесок. Реально из этой кучи нужны два-три сервиса, все остальное будет жрать память и тратить время при загрузке. Поэтому проще взять отдельно веб-контейнер, отдельно JMS, кинуть в classpath Хибернейт, JDBC-драйвер для постгреса, Спринг и прочие нужности, и запустить.

                                                                                                        П.С. Spring Security не имеет отношения к JAAS. Spring Serurity может использовать JAAS.
                                                                                                        0
                                                                                                        Сергей, спасибо большое за статью.

                                                                                                          0
                                                                                                          На странице «Активация аккаунта» заголовок «Восстановление пароля» :)
                                                                                                            0
                                                                                                            Спасибо, поправили :)
                                                                                                            0
                                                                                                            Спасибо всем огромное за участие и за то, что поделились своими мыслями. По поводу замечаний — мы практически все про себя знаем, и все эти недостатки для нас не новость, мы работаем над их исправлениями. Все раздражители скоро устраним. Задача статьи, конечно, была не показать совершенство текущей реализации, а показать тот базовый фундамент (архитектуру), который мы заложили на светлое будущее.

                                                                                                            P.S. Давайте делиться мыслями, дружить, осознавая, что мы не конкуренты — воздуха и интернета на всех хватит! :)
                                                                                                              0
                                                                                                              >> руководство поддержало решение «сразу делать хорошо и надолго»

                                                                                                              Думаю, что с таким подходом будущее окажется действительно светлым
                                                                                                              0
                                                                                                              Большое спасибо за статью. Перезалейте, пожалуйста картинки — не отображаются.
                                                                                                                0
                                                                                                                Диаграмку бы кликабельной, что бы в читаемом состоянии посмотреть
                                                                                                                  0
                                                                                                                  Не могли бы вы поделиться опытом использования XWiki, кажется вы рассматривали на первом этапе в качестве Вики движка для проекта. Чем эта история закончилась?
                                                                                                                    0
                                                                                                                    насколько я понял, у вас 64х битные фри стоят, как на них жава себя ведет?
                                                                                                                    как-то пытался сетапить вовзу на 64х битную фрю, намучался, в итоге падучее оказалось, в интернетах пишут, что жава на фре плоха, а на 64х битной фре — еще хуже
                                                                                                                      0
                                                                                                                      последние комментраии от автора в были опубликованы в сентябре '09.
                                                                                                                      сейчас — октябрь '11

                                                                                                                      проект — «все»?

                                                                                                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                                                      Самое читаемое