?

Log in

No account? Create an account
Эффект второй системы - Журнал Витуса.
[Друзья] [Свежие записи] [Dreamwidth] [Фото] [Тексты] [Друзья Ирины] [Матерные писатели] [Сообщества] [3 круг]
April 4th, 2008
11:29 pm
[User Picture]

[Link]

Previous Entry Share Next Entry
Эффект второй системы
Вот сижу и думаю - затеять большой рефакторинг Stilllife, переписав нынешний процедурный код на объектный, или убояться эффекта второй системы и довести до релиза (в смысле всю недоделанную функциональность доделать) в существующей архитектуре.

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

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

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

Но стоит за спиной призрак Брукса, размахивая огромной бритвой, явно отобранной у призрака Оккама.

Tags:

(40 comments | Leave a comment)

Comments
 
[User Picture]
From:arilou
Date:April 4th, 2008 07:43 pm (UTC)
(Link)
Несовсем понял, что за "эффект второй системы"?
А может, дать это кому-нибудь посмотреть и что-нибуть отматерить там? :)
[User Picture]
From:vitus_wagner
Date:April 4th, 2008 08:01 pm (UTC)
(Link)
Несовсем понял, что за "эффект второй системы"?

Ну, Брукса читать надо. У меня он был настольной книгой уже лет семь назад, как раз тогда, когда ты в Коммунивер работать пришел. Правда, ты не техдиректором работаешь, так что тебе тайное знание для менеджеров проектов менее актуально. Но "Мифический человеко-месяц" - это классика.

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

А может, дать это кому-нибудь посмотреть и что-нибуть отматерить там? :)
Да кто ж вам не дает? Урлку на viewcvs я опубликовал даже раньше, чем урлку тестового форума. Я как раз удивляюсь, почему ни по клиент-сайд скриптам ни по перловому коду никто осмысленной ругани до сих пор не запостил.
[User Picture]
From:besm6
Date:April 4th, 2008 08:26 pm (UTC)
(Link)
В параллель.
[User Picture]
From:vitus_wagner
Date:April 5th, 2008 08:10 am (UTC)
(Link)
Что ж мне как той обезьяне раздвоиться что-ли. Одна половина пойдет к умным - функциональность дописывать, вторая - к красивым - код рефакторить.
[User Picture]
From:efault
Date:April 4th, 2008 10:19 pm (UTC)
(Link)
Голосую за "убояться и довести до релиза". Брукс дело написал.
From:dmzlj
Date:April 5th, 2008 03:38 am (UTC)
(Link)
Еще в прошлый раз хотел спросить - "а зачем". Т.е. этот форум написан ради искусства, или из практических (каких?) соображений.

И второе - если один топик это один файл, но не будет ли проблем при топиках большого размера - т.е. тупо не слишком ли здоровые файлы получатся?
[User Picture]
From:vitus_wagner
Date:April 5th, 2008 08:19 am (UTC)
(Link)
Форум написан ради того, чтобы мне его было не стремно ставить на машины, которые я администрирую. После анализа ряда широко распространенных решений и вывода "Я этого ставить не буду, я его боюсь".

И второе - если один топик это один файл, но не будет ли проблем при топиках большого размера

Вообще-то запроектировано (но пока не реализовано) разбиение топиков на страницы.
From:ext_92322
Date:April 5th, 2008 06:03 am (UTC)
(Link)
Интересно, сброс буфера на диск кто нам гарантирует? Или так: в чем смысл писать абсолютно ненадежную систему, которая даже не пытается достоверно сохранять данные на диск, проверять их целостность и выполнять прочие необходимые для распределенной системы _обязательные_ действия? Тем более, если запускать распределенную систему на "домашнем" железе (и железо так себе у многих, и упсы не у всех есть, да и вероятность сбоя ФС или "зависания" существенная). Получается, на всех узлах будут по-разному битые данные и в сумме все это станет цифровым мусором.
[User Picture]
From:vitus_wagner
Date:April 5th, 2008 08:18 am (UTC)
(Link)
Вы про что-то не про то. Какие все узлы? Речь идет о конкретном web-приложении, локализованном на одном сайте. Далее, поскольку данные хранятся не в общей базе данных, а в отдельных html-файлах, при любом сбое КАК МАКСИМУМ пострадают только те файлы, которые в данный момент обрабатывались. И то с высокой вероятностью всего лишь случится откат последней операции. Да, roll forward-а у меня нет, но в конце концов это не OLTP, потеря транзакции к потере денег не приведет. Засунуть в функцию savetree перед выполнением
rename модифицированная-копия исходный-файл вызов fsync, конечно можно. Но пока вроде не нужно.

И вообще на домашнем железе у меня сейчас
uptime
12:11:00 up 110 days, 18:38, 4 users, load average: 0.28, 0.15, 0.05

[User Picture]
From:awind
Date:April 5th, 2008 08:13 pm (UTC)
(Link)
а операции "найти все сообщения пользователя" и "найти все сообщения новее чем" будут реализованы?
[User Picture]
From:vitus_wagner
Date:April 5th, 2008 08:30 pm (UTC)
(Link)
Если ты реализуешь и пришлешь патчик, я подумаю над тем, стоит ли это включать.
Очень сильно подумаю, поскольку операция сильно затратная.

Сейчас есть страничка "Свежие сообщения", куда при постинге помещается копия сообщения. Для большинства практических целей этого достаточно.
[User Picture]
From:elte_igel
Date:April 6th, 2008 10:04 am (UTC)

Обоснование и аргументация stilllife

(Link)
.. оставляют ощущение недосказанности.

Правильно ли понимать, что основной задачей still life является отказ от употребления отдельной, реляционной или не очень, базы данных, для хранения пользовательского ввода? Цель, по-видимому, упростить выгрузку уже "введенного" содержимого до уровня, когда любой простейший http-сервер без скриптинга сможет этим заниматься?

Таким образом, вся обработка и форматирование ввода осуществляется, все-таки, server-side скриптами, но именно на этапе записи информации, после которого получается конечный и готовый для просмотра браузером продукт в виде html-файлов? Т.е. имеет место пре-генерация, но все-таки на основе шаблонов? Или как?

Интересуюсь не только из любопытства, сам недавно изобретал "как-бы" Web-движок, с (около)нуля на перле, правда, основная цель была, во-первых, как можно больше упростить html-код на выходе, без javascript и модных фич, а во-вторых, вместо распростаненного ООП-подхода к генерации web-страниц попробовать максимально приблизить схему к pipeline-подстановке "плоского" набора переменных в "плоский" же, без избытка вложенных и динамических конструкций, шаблон.
[User Picture]
From:vitus_wagner
Date:April 6th, 2008 02:25 pm (UTC)

Re: Обоснование и аргументация stilllife

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

Тогда я обратил внимание на то что на один запрос по модификации страницы приходится примерно 10000 запросов по отдаче страницы пользователю.

Отсюда основная идея - все храним в статических HTML, которые и отдаем пользователю. В результате server-side скрипты работают только тогда, когда работа действительно требуется. В форумном движке тут будет, наверное не 1:10000, а 1:1000, но начал с форума я специально, поскольку это наиболее интерактивная и (и сложная для реализации методом статической генерации часть). Если получилась она (а уже можно признать, что получилась), то все остальное получится тем более.

Подход к шаблонам у меня тоже несколько необычный. Здесь я исходил в частности из того, какими знаниями обладает типичный web-дизайнер. Учить всякие PHP и языки шаблонов ему сложно. А вот HTML он знает, что такое класс HTML-элемента ему понятно. Более того, многие из дизайнеров имеют дело с client-side скриптингом, поэтому что такое DOM они тоже более-менее понимают. Поэтому обработка шаблонов сделана в терминах DOM, а места для подстановки информации выделяются классами с определенными именами.

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

Задачи упростить html-код на выходе я не ставлю. Скорее наоборот, я ставлю задачу, что движок должен одинаково хорошо работать как с простым HTML, так и с развесистым.
[User Picture]
From:os80
Date:April 6th, 2008 04:15 pm (UTC)

По поводу Stillife

(Link)
Браузер - IE7.
Нахожусь на странице "последние изменения". Ещё не авторизован на форуме, но уже вожёл в ЖЖ. Выбираю запись, на которую хочу ответить, нажимаю кнопочку "Высказаться".
Появляется формочка. Ввожу пользователя, (os80) и сайт (LiveJournal.com). Набираю сообщение, тему не проставляю, и вообще больше ничего не меняю, нажимаю опять "Высказаться".
Ожидается: сейчас меня авторизует LiveJournal.com и сообщение добавится.
Получаю: меня выкидывает в такую же формочку, но уже полноэкранную, и LiveJournal.com меняется на "Этот сайт". Меняю опять на LiveJournal, нажимаю "высказаться" и получаю "Internet Explorer не может отобразить эту страницу" (в строке адреса стоит http://vitus.wagner.pp.ru/cgi-bin/forum/stilllife/coding/templates/struct.html).
Это баг или меня "зобанили"? Или я "блондинка"?
[User Picture]
From:vitus_wagner
Date:April 6th, 2008 05:36 pm (UTC)

Re: По поводу Stillife

(Link)
Скорее всего - баг. В принципе, URL достаточно правильная. Именно так и должна выглядеть URL, на которую сабмитится форма reply. Как бы получить более подробную информацию. Чтобы хотя бы узнать, с какого такого перепуга эксплорер не показывает страницу сайта с текстом ошибки. Вроде я все шаблоны страниц ошибок делал такими, чтоб эксплорер их отображал.
Internal server error-ов в логе, во всяком случае, c 16:37 вчерашнего дня нет.
[User Picture]
From:a_konst
Date:April 11th, 2008 11:11 am (UTC)
(Link)
Че-то у меня не получается там зарегистрироваться.
Internal server error.
[User Picture]
From:vitus_wagner
Date:April 11th, 2008 11:18 am (UTC)
(Link)
Зарегистрироваться - это в смысле залогиниться с помощью openid?
То был ма-а-аленький рефакторинг. Далеко не тот большой, который описан в посте. Поправил.
My Website Powered by LiveJournal.com