Старое описание и черновики документации
2007-11-03 00:00NeuralSite - это экспериментальный продукт, представляющий собой "коробочный" контент-сайт. На нем предполагается поднять несколько контент-сайтов, в том числе сайт Dream Bot и Eagle Nest.
Главная цель продукта - отладить и описать некоторые технологии организации контент-сайтов, в первую очередь рубрикацию, кеширование, автоматическое конвертирование и разметку текста.
- Что надо сделать в контент-сервере
- Краткое описание контент сервера
- Список задействованных в контент сервере продуктов
- Функциональная спецификация
Описание продукта NeuralSite :
Это, в перспективе, коробочное решение, ориентированное на быстрое создание контент-сайтов. Продукт включает в себя ng.app.rubricator и ng.app.convertor, построен с использованием библиотеки контент-типов ng.content.article.
Что надо сделать в контент-сервере
Что нужно сделать с контент-сайтом:
- Создание объекта Rubricator подразумевает обязательный выбор именованных утилит, как альтернативу может быть стоило бы оставить возможность отказа от выбора, так, что бы испоьзовались все утилиты с данным интерфейсом;
- Тоже про newsrefbackreference;
- Рубрикатор - надо как и в случае каталога, адаптировать объекты к единому интерфейсу;
- Сделать нормальный логгинг и диагностику;
- (сделано) Надо прикрутить к рубрикатору настройку нормальных новостей;
- -(seminar: накопитель ссылок на объекты) В скине на главной странице довольно левым способом собирается колонка новостей;
- (seminar) RemoteContainer - надо придумать как устанавливать соответствие вкладывваемых контенттипов майм-типам исходных файлов;
- (seminar) RemoteContainer - надо придумать как сделать ограничение запрашиваемых файлов регулярными выражениями по имени и (или) майм-типу. Возможно, стоит добавить ограничение по глубине рекурсии или объему;
- Надо что-то сделать с длительной транзакцией обновления - видимо, выполнять ее фоновым потоком и фиксить транзакцию регулярно. Возможно, вписывать текущее состояние транзакции в коннектор (пример: сайт видео);
- (сделано) Зачистить кеш от возможности вложения левых объектов (фактически переписать под нормальную схему вложенности);
- (сделано) Переделать схему наследования в конверторах (так чбы IConvertorREST (IConvertor) );
- Сделать адаптер вместо повсеместной адаптации к PropertySheet;
- В конструктор MapperAttributeItem добавить принудительную дачу ID;
- (сделано) В абстракте статей не сохраняется логотип и ваще, надо пересмотреть абстракт и логотип в сторону соответствия KS;
- (сделан пробный вариант) Не отдизайнены виды для объекта-ссылки в рубрикаторе;
- (сделано) Сделать для RemoteObject кнопку "обновить сейчас", тоже для RemoteContainer;
- Сделать специальный поисковый интерфейс и адаптеры под него (иначе поиск фактически не работает);
- (сделано) Поиск должен давать возможность отдельно искать по полю имя (в смысл __name__) и ключевые слова, в качестве источника ключевых слов пока можно использовать DC, и то и другое будет использоваться в вики (т.е добавляем разметку <слово>, [reference:<слово>]);
- (сделано) Пересмотреть список интерфейсов под большее соответствие Нашим Новым Идеям;
- Использовать IAnyTitle в прокрутке
- (сделано) Настроить права по всем видам, что бы в принципе все управлялось корректно: четыре роли, аноним, юзер, редактор, манагер и по ним раскидать виды и адаптеры.
- Разобраться как делать форму отправки писем (с подпиской).
- -(через меню URL'ов, seminar) Сделать строку ссылок внизу
- -(seminar) Сделать более вразумительную строку баннеров (можно с кодированием объекта на семинаре);
- (сделали) Сделать так, что бы объекты не появлялись вне разрешенных мест.
- (сделано) Починить составление оглавления
- Приделать к smartimage вид по умолчанию
- (сделано) Приделать к експешенам вывод трассы
- (сделано) Сделать для ексепшенов нормальную кнопку "перейти на главную страницу"
- -(seminar) Сделать специальный объект для Main (должен иметь список URL и прочей мелкой настроечной фигни для сайта);
- (сделано) Посмотреть права на контейнеры;
- -(seminar) Сделать адаптер "найти контейнер" отрабатывает на любом файле
- -(seminar) Создать адаптер "IAnyTitle"
- Сделать возможность выбирать "главный" объект в RemoteContainer (он будет работать как body)
- -(seminar) Сделать адаптер к INextPrev, основанный на стеке траверса.
- inbody и REmoteContent нуждаются в доработке. Самое неприятное - там нужен некоторого сорта рекурсивный спуск, что бы получить нужный материал. Одной приблудой под названием ob/@@body там не обойтись - нужен полноценный вид, учитывающий разные варианты развития событий. В том числе и тот, что единственный объект не является контентом вообще.
- (сделано) Установить специальные индексы для keyword и name и починить сразу ISearchAdapter
- Написать адаптеры возвращающие разные списки материалов
- Придумать как переключать вид редактора при переключении страницы
- Придумть как сделать заполнение (начальное) добавленного объекта
- Разобраться с xmllib
- Разобраться с ftp
- Подумать как втащить к себе pd.cfg и надо ли оно мне
- Подумать над пейджингом
- Подумать и реализовать кеширование пейджинга
- Попробовать самому собрать форму.
- Попробовать самому же собрать реестр.
Грубые ошибки:
- При нажатии на кнопку update и не до конца введенных данных коннектора возникают некрасивые исключения.
2, Починили ... Кнопка hidden не работает, фактически.
- Форма добавления ведет на полный список, что очень неудобно.
- Облом обращения по remotefs приводит к "Системной Ошибке", надо выводить что-то более дружелюбное.
- Починили ... Сделать поиск ключевых слов регистронезависимым.
- Починили ... Права на FuzzyTraverser
- Принудительно навесить на ResultSet интерфейс IResultSet, что бы нормально вызывать адаптеры.
- Починили ... Сделать в вики страницы, которые отображаются если нет прав на добавление.
РЫ1:
7,8 - в принципе, уже сделано. Надо к ремотеконнектру прикрутить интерфейс выбора маймтипа и т.п.
Краткое описание контент сервера
$Id: contentserver-description.txt 12503 2007-10-27 13:53:50Z cray $
Краткое описание продукта "Простой Контент-Сервер":
Введение:
Продукт "Простой Контент-Сервер" (далее - контент-сервер) написан для Zope3 и может использовать postgresql для решения некоторых задач. Контент-сервер устанавливается при помощи простой процедуры инсталляции и сразу же готов к работе: имеет готовый (хотя и простой) скин и позволяет осуществлять управление контентом.
Продукт ориентирован на использования в веб-проектах с относительно небольшой нагрузкой, ориентированных, в первую очередь, на предоставление контента. Таким проектом может быть веб-сайт крупной или средней компании, интранет-сайт группы разработки или сайт информационно-справочной службы, сопровождающей, например, интернет-магазин или другой интерактивный интернет-сервис.
Типовой (тестовый) проект:
Сервер документации для сообществ Zope3 и Open-Source разработчиков, корпоративный сайт компании "Ключевые решения", альтернативная реализация сайта Zope3.Ru, информационно-справочный сервер по нейросетевым проектам.
Список возможностей:
Простая установка "в один клик" (см. installtool);
Автоматическое преобразование форматов публикуемых документов для отображения на сайте (cachedconvertor);
Организация вики-подобных служб;
Наличие готового презентационного и административного скина (предполагается, что презентационный скин допускает легкую настройку);
Автоматический рубрикатор, позволяющий легко классифицировать поступающие материалы по нескольким категориям (rubricator);
Наличие готового "строительного материала" - библиотеки контент-объектов, позволяющих размещать материалы на сайте.
- Формы обратной связи
- легко настраиваются редакторами сайта, что бы получить отзыв по его материалам;
Наличие RSS-лент;
Возможность прозрачного использования материалов из внешних хранилищ, в том числе SVN, HTTP, FTP (remotefs);
Поиск по материалам сайта;
Ссылки между материалами сайта.
Список смежных продуктов:
Смежные продукты не входят в основную поставку контент-сайта, но могут быть использованы вместе с ним при необходимости.
Интернет-магазин (не написан вообще);
Служба рассылки новостей (готова, но нет подписки);
Видео-сервер (готов);
Регистрация на сайте и поддержка профилей (относительно готова);
Чатсервер (относительно готово);
Баннерная служба (относительно готово);
Комментирования статей (готово, требует использования postgresql);
Ведение форумов и блогов (относительно готово, требует использования postgresql).
Заключение:
Основное достоинство нашего контент-сервера - это быстрая установка и использование ряда уникальных интеллектуальных технологий, снижающих ресурсоемкость сервера и обеспечивающих автоматизацию поддержки актуальности контента сайта.
Список задействованных в контент сервере продуктов
$Id: contentserver-productlist.txt 12503 2007-10-27 13:53:50Z cray $
Список продуктов используемых в контент сервере :
Список дан по состоянию на сегодня, для сервера neural.ru.
cachedconvertor
- contentobject
- статья, раздел, удаленная статья;
- interfaceswitcher
- переключатель режимов отображения статьи;
smarttools --
- neuralsite
- собственно настройки сайта;
- neuralskin
- нейро-скин;
- reference
- референс инжайн;
- remotefs
- таскалка объектов remotefs;
- rubricator
- рубрикатор (собственно);
- zcmljunction
- сводный адаптер;
Функциональная спецификация
Функциональная спецификация контент-сервера :
Карта сайта:
Главная страница :
Содержит две колонки с новостями и прочей фигней.
- О компании (текстовые документы);
Может содержать "формы обратной связи";
- Описание проекта (текстовые документы);
- Новости (текстовые документы);
- Рубрики (рубрикатор);
- Статьи (текстовые документы и удаленные документы);
- Зеркала (удаленные разделы);
Специальные страницы:
Поиск, может быть вызвана в любом месте ищет в подразделах сайта;
Объекты:
Подвал (-) "Root/" :
Содержит настроечные скрипты и прочую лабуду. В спорте обладает интерфейсом IRootSite, который пустой (П.1) .
Также содержит реестр.
Корень сайта (-) "Root/Main/" :
Собственно начала сайта. Выделяется в связи со упрощенными ограничениями на вхождение объектов и неоходимостью размещения страницы специального дизайна. (П.1)
В случае сайта спорт содержит специальные настроечные параметры, которые дублируют функции реестра.
Реестр (-) "Root/++etc++site/registry" :
Содержит параметры сайта. Есть прототип в спорте, который себя хорошо зарекомендовал, но в контент-сайте это должен быть некий расширенный объект, примерно с такой функциональностью:
- Нужно иметь возможность хранить все параметры на диске,
- Параметры в перзистент-реестре перекрывают параметры на диске,
- Список параметров может "легко и непринужденно" искуственно изменятся (например, как расширяемая форма с параметрами),
- Существует специальное АПИ обращения к реестру (IRegistry.getParam()), включающее в себя указание дефолтного значения для отсутствующего параметра.
- Условно, можно считать все параметры реестра текстовыми.
- Нужна возможность наследовать реестры друг от друга.
Поисковый каталог (+) "Root/++etc++site/catalog" :
Обычная приблуда для поиска и индексации. Нужно разобраться с интерфейсами поиска(П.2).
Сейчас используется SearchAbstract и пара других, служебных интерфейсов, которые позволяют сгенерировать нужные для нескольких служб индексы. В общем, можно считать что серьезного поиска сейчас нет.
Стандартные баннеры (-) "Root/++etc++site/banner" :
Специальный объект для вывода строки баннеров на сайте, это не баннеры баннерной службы, а именно стандартный слот баннеров. Как вариант -- можно сделать пару интерфейсов типа код, изображение, ссылки -- которые навесить на подходящий объект.
Лексикон (?) "Root/++etc++site/lexicon.txt" :
Специальный объект, посредством которого можно выбрать слова для случайного отображения в поиске.
В настоящее время просто текстовый объект, можно сделать спец.продукт (П.3), который, например, будет черпать слова из каталога.
Разделы сайта (+) "Root/Main/*", About, Mirror, News, Article, Rubricator.
Сейчас используется Neural/Division, со спец. дизайном, интерфейсом и т.п.
News используется демонстрационный и эту ситуацию надо быстро изменить. Ну, например завтра.
В mirror создаются контейнеры, содержимое которых может потом копироваться в другие папки.
Примечания:
- Подвал и корень сайта могут строится из обычных объектов и выделяться только через InterfaceSwitcher.
- Можно делать на zcml-junction, особенно пока речь идет о простом поиске. Есть какой-то недоделанный проект с определениями форм поиска в рамках спорта - типа объявляешь интерфейс и все остальное делается само.
- Надо посмотреть как для него реализованы виды/адаптеры и т.п.


