WYSIWYG

Aug. 15th, 2008 11:46 am
vitus_wagner: my photo 2005 (white), Тропический шлем
Интересно, кто-нибудь из читающих меня имеет опыт использвоания разных WYSIWYG редактров для web-форм?
Сейчас вот думаю, на что ориентироваться при дальнейшей разработке stilllife - на
TinyMCE или FCKeditor.

Вроде оба проекта достаточно объемны, чтобы прочитать весь код и переделать по-своему, мне было бы лень и некогда. С другой стороны, оба проекта достаточно активно развиваются, и есть надежда, что проблемы с browser compatibilty будут не моими проблемами.

У TinyMCE есть то преимущество, что в комплект входит BBCode plugin, а значит, возможно, переключение между режимами bbcode/html/wysiwyg удастся реализовать без написания собственных html<=>bbcode конвертеров (впрочем, это у меня уже написано).

TinyMCE еще, на мой взгляд, несколько лучше документирован. Но FCKeditor вроде несколько комактней.

А проблемы при взаимодействии с server-side input sanitizing у обоих общие - любят они inline styles, ох любят.
vitus_wagner: my photo 2005 (white), Тропический шлем
Тут в процессе одной из предыдущих дискуссий я пришел к выводу что использование в stilllife server-сайд конвертера HTML в BBCode и обратно было ошибкой. Между сервером и клиентом коммуникация должна производиться только в HTML. В обе стороны.
А вот представление текста поста/комментария в том виде, в каком юзеру удобно его редактировать, и преобразование из этого вида в HTML - исключительно client-side задача. Web 2.0 у нас в конце концов, или не 2.0?

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

Конечно, для того, чтобы этот код сделать удобным для использования в stilllife его придется слегка причесать.
Но вообще решение, похоже, надо внедрять. Заодно удастся избавиться от самого нестандартного и подозрительного с точки зрения безопасности перлового модуля, на данный момент используемого в stilllife - HTML::BBReverse.

Правда, как показала практика, оно умеет преобразовывать только в одну сторону. Кнопка back to html работает исключительно путем восстановления прикопанного HTML-текста.
vitus_wagner: my photo 2005 (white), Тропический шлем
Последнее время сетевые вандалы активно эксплуатируют дырку в ЖЖ, позволяющую постить html с опцией style. А через значения стилей сделать слой, который закроет весь пост и всю дискуссию.

Но вот что обидно - совсем лишать пользователя возможности использовать стили не хочется.

Как вы думаете, какой минимальный набор ключевых слов следует фильтровать в CSS-выражениях, чтобы не получалось таких эффектов, когда у законного пользователя возникают проблемы с удалением комментария?

Хватит ли отрезания position: relative или нужно резать выходящие за пределы разумного значения width и height?
vitus_wagner: my photo 2005 (white), Тропический шлем
Смотрю я на ЖЖ-посты с несколькими катами (<lj-cut> которые) и думаю: А может сделать в stilllife фичу, которая будет открывать кат без перезагрузки страницы, причем только один...
vitus_wagner: my photo 2005 (white), Тропический шлем
Задрало автоматическое выделение URL-ок в ЖЖ, которое постоянно от URL-ки хвос отрывает. Будь то статья из wikipedia со скобками в названии, будь-то статья из какого-нибудь Таймс или ComputerWorld с запятыми в URL, будь то параметры поиска в Google на русском языке.

Написать, что-ли правильный регексп для выделения урлок для StillLife, Глядишь кто-нибудь из ЖЖ-шных программистов прочитает и позаимствует.
vitus_wagner: my photo 2005 (white), Тропический шлем
Интересно, сколько CPU и памяти потребуется сайту на DJANGO или Ruby on Rails для получения вот таких результатов:
бенчмарка )
Гонялось это ab через loopback интерфей (где ж я вам 200Мбит/с канал в интернет возьму.

на вот таком процессоре )
Параллельно крутилось еще много чего, начиная с X-ов и mldonkey. На протяжении всего теста load average выше полутора не поднимался.

Запрашиваемая страничка - список последних 50 сообщений из форума в 200 сообщений. ВПрочем, если бы там было 200000 сообщений, на скорость отдачи данной странички это б не повлияло.

Upd Поставил siege. Запустил вот так:
siege -i -b -t1M -f urls.txt -c 25

Где urls.txt сформирован комадной
find stilllife -name "*.html" ! -path "*/template/*" |sed s!^!http://vitus.wagner.pp.ru/! > urls.txt
Получилось Вот что )
vitus_wagner: my photo 2005 (white), Тропический шлем
Я уже писал о назревшем рефакторинге в Stilllife. С тех пор у меня не было особенно времени заниматься кодом, но вот мысли всякие приходят. Я кажется, начал
понимать какая часть уже написанного кода является универсальным web-application framework, а какая специфична для решаемой задачи. Опять же принцип Сайт это документ сформулровал.

Соответственно, становится понятным соотношение StillLife с MVC-паттерном.

1. Модель - ни разу не реляционная. Скорее более generic OO. Что неприятно. Но очевидно что свойство "однородные объекты могут иметь разный набор атрибутов" востребовано. Отношения между объектами в ER-модель тоже ни разу не укладываются.

2. Функциональность view существенно ограничена по сравнению с текущим MVC. Все что не описывается средствами html+css (вроде формата представления дат) уходит в описание модели.

3. Контроллер - фиксированный. Собственно, модель "сайт это документ" основана на том, что операции, которые людям нужно выполнять над объектами их сайтов в большинстве полностью описываются некоторым замкнутым набором действий вроде команд текстового редактора или набора функций электронной таблицы. Соответственно, набор операций допустимых над конкретным объектом специфицируется в модели.

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

Список стандартных контроллеров уже более-менее понятен - объект можно создать (с использованием шаблона-формы), редактировать (им же) переместить (вот тут интереснее) и удалить.

Ах да, совсем забыл. Желающие изучить вопрос возможности установки StillLife на каком-нибудь хостинге могут взять и попробовать запустить на нем вот этот скрипт. Он проверит наличие необходимых модулей и кое-что расскажет про них и про систему. В принципе, на нескольких хостингах, на которых его уже запускали, все модули, имеющие компилируемую часть обычно есть (POSIX, Storable, Math::BigInt, Digest::SHA1). Остальное, в принципе, без проблем ставиться даже на хостинг, куда есть только ftp-доступ.
vitus_wagner: my photo 2005 (white), Тропический шлем
Тут Алексей Печников замучал меня вопросами, почему для StillLife выбрана именно такая архитектура.

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

Первым пристрелочным выстрелом в эту сторону был Communiware. Это был очевидный перелет. Концепция "информационного супа" предложенная для Коммунивера Андреем Акопянцем настолько велика и могуча, что освоить её в совершенстве могут только отдельные гении вроде [livejournal.com profile] ailev. Ну и ресурсов тоже кушает будь здоров.

Это не то, что нужно отдельному юзеру.

Поэтому StillLife в значительной мере Communware наоборот. Если в Communiware в базе хранились не только данные, но и программы их представления (шаблоны), то в StillLife базы данных нет вообще, если не считать пары DBM-ок, используемых для аутентификации пользователей.

Если язык шаблонов Communiware был весьма мощным декларативным языком с условными конструкциями, обработкой список и т.д., то в StillLife шаблоны представляют собой обычный html всего лишь с некоторыми предопределенными именами классов.

В общем, классическая попытка взять цель в вилку.

Понятно, что получится недолет. Даже сейчас видны целые классы сайтов, реализация которых на базе концепции StillLife принципиально невозможна, например Internet-магазины. Web-форум - это предел интерактивности, которого можно добиться на базе такой концепции. Именно поэтому разработка StillLife начата именно с форумного движка. Дальнейшее - блоги и средства управления контентом традиционного сайта - будет проще.

Основное, что лежит в основе - антитеза концепции, выдвинутой [livejournal.com profile] ailev лет 6-7 назад "Сайт - это программа".
Как раз эта концепция, которая в общем-то в то время носилась в воздухе, приводит к тому, что вокруг WWW кормится армия криворуких кодеров. Раз сайт это программа (при этом каждый сайт - отдельная, уникальная программа), каждому сайту нужен программист. Хороших программистов на все сайты не напасешься, значит большая часть сайтов, в том числе и интересных содержательно, будут написано плохими программистами, а следовательно будут плохими, неудобными для пользователя программами.

Соответственно, выдвигается альтернативная концепция - "сайт это документ". В том смысле, в каком это слово понимает Стив Джобс.
Есть программы, их немного, они написаны хорошими программистами. Но с помощью каждой из таких программ можно создать миллионы содержательно разных документов. И для того, чтобы создать документ - программист не нужен. Нужен юзер, который знает что он хочет сказать, и худо-бедно, методом тыка, освоил программу, с помощью которой он может это сказать.

Примерно в этом направлении сейчас двигаются Google, SixApart и другие подобные крупные сервисы.
Но они - злобные проприетарщики. Хотя сейчас очевидно, что создать хорошее web-приложение без использование OpenSource технологий практически невозможно, они ухитрились обойти GPL посредством исполнения программ только у себя на сайте. Раз пользователь не получает исполняемой копии программы, он не вправе требовать и доступа к исходным текстам, даже если 90% кода - GPL.

Кроме того, решения применяемые LJ, Google и другими крупными сервисныи компаниями в WWW требуют соответствующей аппаратной базы. Именно этим объясняется незначительный успех клонов ЖЖ, базирующихся на его коде. Вербицкий может взять исходники ЖЖ, которые Фитцпатрик честно открыл, но у него нету и не может быть денег для создания датацентра, аналогичного калифорнийскому датацентру ЖЖ. Поэтому Vendor Lock In в классическом виде.

Для полноценной реализации концепции "сайт - это документ", требуется программа обработки этого документа, способная выполняться на любом, доступном пользователю компьютере - будь то shared hosting, будь то домашний компьютер с широкополосным подключением к интернету. Лучше конечно, иметь несколько разных программ, адаптированных к разным средам выполнения, но работающих с одинаковым форматом документа. Именно работающих с одинаковым форматом документа. Поэтому столь распространенные нынче в веб-строительстве РСУБД не годятся. Можно создать схему БД, которая будет работать в mySQL, PostgreSQL и Oracle, но с перетаскиванием её будут некоторые проблемы - потребуются специальные срества импорта/экспорта. Да и работать она будет неэффективно, так как она будет вынуждена на каждом сервере не использовать именно те возможности, которыми он наиболее силён - из-за отсутствия этих возможностей в других серверах, совместимость с которыми поддерживается.
vitus_wagner: my photo 2005 (white), Тропический шлем
Вот сижу и думаю - затеять большой рефакторинг Stilllife, переписав нынешний процедурный код на объектный, или убояться эффекта второй системы и довести до релиза (в смысле всю недоделанную функциональность доделать) в существующей архитектуре.

По идее, там примерно половина хелпер-процедур весьма логично уходит в три класса
1. Расширение HTML::TreeBuilder, чтобы умело при открытии файл лочить, а потом сохранять под тем же именем и разлочивать (или не сохранять и разлочивать)
2. Расширение HTML::Element из которого будут строиться деревья расширенного TreeBuilder-а, чтобы умело выполнять некоторые типичные для Stilllife преобразования деревьев.

В этих двух случаях явно объектность просится, поскольку в основе лежит стандартный CPAN-овский модуль, уже имеющий объектную архитектуру. Без наследования получается странная смесь объектного кода (когда мы обращаемся к родным методам) с процедурным.

3. Объект конфигурации форума. Сейчас это просто никуда не blessed hash. А стоило бы ему несколько методов приделать, да и объект CGI туда инкапсулировать, а то сейчас они во все функции парой передаются.

Но стоит за спиной призрак Брукса, размахивая огромной бритвой, явно отобранной у призрака Оккама.
vitus_wagner: my photo 2005 (white), Тропический шлем
Я все-таки его написал. В смысле, web-форум, на статических html. Смотреть можно на http://vitus.wagner.pp.ru/stilllife.
Комментировать там же. OpenId там работает. Я не уверен в кросс-браузерной совместимости JS-кода, который открывает прямо на странице форму комментария. Если он у вас не сработает, то кнопка "Высказаться" из списка тем работает без клиент-сайд скрипта.

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

[livejournal.com profile] taris_marh уже поучаствовал в разработке, сделав существенную часть работы по скрытию на client-side элементов управления для операций, недоступных текущему пользователю.

В соответствии с принципом release often, release early, движок выкатывается на всеобщее обозрение в незаконченном виде.
Из доступной простым пользователям функциональости не работают пока операции удаления и редактирования сообщения. Ну и всякие мелкие огрехи могут быть. В процессе доводки и отладки возможны internal server error при выполнении вообще всех операций. Но обычно такое состояние длится не более нескольких минут.

Вообще задача оказалась существенно сложнее, чем я думал. Пришлось фактически изобретать свой собственнфый framework. Пока что server-side код - около 2000 строк, не считая стандартных модулей с CPAN.
vitus_wagner: my photo 2005 (white), Тропический шлем
Тут попробовал поставить YaBB2 и мне очень не понравилось. В инструкции по инсталляции рекомендуется на много какие файлы и каталоги ставить права 777 или 666, данные предлагается хранить в каталоге со скриптами etc.

Большая часть прочих форумных движков которые я видел, вообще написаны на PHP. Наличие интерпретатора внутри апача меня не устраивает. Апач от этого пухнет, а сервер дохнет. В смысле, нагрузку не держит.

Соответственно, ничего подходящего вообще не нашлось. А ведь функциональность форума вообще говоря минимальная.
Древовидного комментирования почти нигде нет, иерархия с ограниченным числом уровней etc. Если грамотно сформулировать техзадание, пишется за три вечера.

Вот и попробую эту функциональность сформулировать )

Profile

vitus_wagner: my photo 2005 (white), Тропический шлем
vitus_wagner

February 2012

S M T W T F S
    12 3 4
5 6 7 89 10 11
12 1314 1516 17 18
19 20 21 22232425
26272829   

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Style:
[personal profile] branchandroot
Resources:
Holiday

Expand Cut Tags

No cut tags
Page generated Feb. 23rd, 2012 10:56 am
Powered by Dreamwidth Studios