Вы считаете, что пользователи Windows платят за все, что в него входит? С прикорбием сообщаю, что 95% пользователей не знают и 10% того, что есть в системе, не говоря уже о возможностях MS Office. Сколько в месяц систем вы сможете создать и установить, если будете "переделывать" часть кода под конкретного клиента, и сколько уже готовых CMS Вы сможете продать, при условии, что и в том, и в том варианте поток клиентов будет непрерывным?Автор оригинала: Popoff
Каждый, вообще-то, платит деньги за то, чтобы угодили именно ему. Массовость в моем случае - не означает ширпотреб низкого качества. Я делаю то, что делаю и так, как делаю не для того, чтобы сделать быстро и для всех, а для того, чтобы сделать качественно и быстро для того клиента, с которым я работаю в данный момент. То, что мой подход более массов - это один из возможных плюсов. Но вопрос о том, какой подход лучше для массовой разработки - это открытый вопрос, мы не можем ничего говорить. В моем подходе минусов не меньше, чем в подходе ONK, просто эти минусы разные. И плюсы тоже разные.
Да конечно, были сомнения по этому поводу?А отредактировать я не могу? А вдруг с ошибкой ввел?
У меня нет кэширования, я просто подготавливаю данные для использования их в последствии наиболее оптимальным образом. И ещё я не теряю никакой функциональности, откуда взялось такое предубеждение. Ваш способ кэширования я вообще считаю мало эффективным (для правильно написанного приложения), у меня непосредственно время генерирования выводимой страницы занимает менее 20% времени работы скрипта, без кэширования опкода 70% времени это внутренние накладные расходы компилятора ПХП кода, и ваш способ кэширования только увеличит эти расходы. Дальше 10% времени тратится на обязательные операции движка системы, которые в любом случае должны быть выполнены. Таким образом на самой сложной для генерирования странице предложенным способом можно выиграть не более 20% производительности без кэширования опкода и не более 66% с кэшированием опкода.Кеширование как раз и имеет своей целью избавить сервер от необходимости постоянно делать ту работу, которую можно сделать один раз. Почему в случае с сообщениями в Вашем случае Вы считаете, что расходование ресурсов сервера не разумно, а в случае с кешированием вообще - предлагаете купить новый сервер? Вы не считаете, что то, что происходит у Вас - это и есть кеширование? Вы не считаете, что кешировать Вашим способом не выгодно, потому что автоматически теряется функциональность?
Не понимаю, откуда берутся подобные выводы? С чего вы взяли, что ваша система более гибкая, чем моя? Неужели Вы изучили мой подход лучше, чем я сам?Я не против того, что если функциональность не требуется, то можно сделать и так. Но при Вашем подходе система не является расширяемой. Любая новая фича - и действительно окажется, что минимум половину кода проще переписать с нуля. Но этот код не будет нужно переписывать с нуля, если его изначально просто написать по-другому. Это "по-другому" не требует каких-то особых затрат времени и энергии. О TDD можно говорить, что там требуются дополнительные затраты времени на создание тестов, но даже там ясно, что эти затраты потом с лихвой окупаются. В моем же случае даже этих начальных затрат нет.
Правильно.Вы храните только в таком виде как будете показывать и не храните исходный вариант сообщения. Я Вас правильно понял?
Мы просто по разному мыслим, надо смотреть глубже, а не считать копейки. К тому же я привёл своё видение реальной эффективности вашей системы кэширования (с учётом того, что она не оригинальна, это относится ко всем попыткам сделать кэширование на уровне одного лишь ПХП кода).Даже очень дешевый компьютер стоит в бесконечность раз больше бесплатного скрипта для кеширования. Если бы кеширование вносило хоть какую-нибудь сложность, я бы понял такие растраты. Но кеширование не вносит никаких сложностей. Чем оправдана покупка нового сервера?
Нет технологии, есть подход, и не надо преждевременно делать ошибочных выводов. Сложное, или скорее многофункциональное ядро должно наоборот упрощать разработку модулей по сравнение с более примитивным. Я специально порылся в исходниках Вашего портала, чтобы развеять свои сомнения. И их больше нет, то что я увидел назвать более сложным и функциональным ядром чем то что есть у меня нельзя, скорее наоборот. Весь абзац следует списать на то, что у Вас сложилось неправильное общее впечатление.Ядро системы, разработанной при помощи такой технологии, содержит в себе минимальный набор самых необходимых классов (или функций). Отсутствие сложного ядра упрощает применение этой технологии. Модули, разработанные с использованием этой технологии, выполняют ту и только ту функциональность, которая была оговорена с клиентом. Отсутствие лишней функциональности может упростить сопровождение. К недостаткам можно отнести то, что программные модули, разработанные с использованием этой технологии сложнее расширять, для добавления новых возможностей может потребоваться переписывать некоторую фунциональность с нуля, в системах, разработанных по этой технологии снижается уровень повторного использования существующего кода.
Вы слишком плохо обо мне думаете.Я предлагаю заканчивать наш разговор, потому что сейчас мы с Вами, кажется, занимаемся банальным спором о том, чья технология лучше. Вы будете отстаивать свою технологию не только потому, что у нее есть объективные плюсы, но и потому, что Вы ее уже используете и для Вас переход на новую технологию связан с известными неудобствами.
Мне очень нравится эта идея, более того, у меня есть необходимость в этом. Вопрос из этой серии висит надо мной уже больше года, и я всё никак не могу приступить к его решению.Для того, чтобы продолжить продуктивный разговор, следует написать достаточно полную документацию по используемым нами технологиями начиная от общей организации системы и вплоть до правил составления программных имен. Особое внимание, вероятно, следует уделить вопросу плюсов и минусов наших технологий. Некоторые из них мы уже рассмотрели в этом топике.
Тогда, Вы, наверное, делаете прямое (при сохранении) и обратное (при редактировании) преобразование?Правильно.Вы храните только в таком виде как будете показывать и не храните исходный вариант сообщения. Я Вас правильно понял?
Я сделал такой вывод по двум соображениям: 1) с точки зрения программиста - я не переписываю код с нуля (разве что только при рефракторинге я могу позволить себе такое удовольствие) и 2) с точки зрения пользователя - клиент получает дополнительные возможности, оставшивеся по наследству из старых версий. Я не против того, что эти возможности могут не потребоваться, но всегда приятно получить больше, чем просил. Тем более за ту же сумму; если я захочу отдельную оплату, то эта всегда будет отдельный модуль.С чего Вы взяли, что Ваша система более гибкая, чем моя?
Если честно, я затруднился найти такой способ (1.3.х). Я всегда думал, что знаком с mod_rewrite, но собственных мыслей не имею, да и сама эта возможность мне кажется странной для этого модуля - его назначение в преобразовании УРЛ и мне не свосем ясно, какое отношение кеширование имеет к преобразованию УРЛ. Если это не новая фича для 2.х, то можно в двух словах, в какие абзацы глянуть?Если бы я занимался проблемой кэширования, я бы обратил пристальное внимание на возможности связки mod_rewrite + ПХП. Даже при поверхностном анализе возможностей предоставляемых mod_rewrite можно найти способ реализации высокоэффективного кэширования, при котором кэшированные страницы будут отдаваться пользователю непосредственно Апач-ем без участия ПХП.
Чтобы понять, о чем мы пишем, нужно мыслить так, как мы мыслим. К тому же мы пишем слишком много - чтобы разобраться, нужно не только слишком много читать, но и слишком долго вникать. Поэтому, мне кажется, наш разговор и проходит в почти гробовой тишинеОчень жаль, что никто более не хочет участвовать в обсуждении и делиться своими мыслями по этой теме
Моя первая попытка была примерно года два назад. Я хочу описать, но поскольку особой необходимости именно в этой документации обычно не возникает, то вот руки до нее и не доходят. Может, из этого топика склепаю че-нить.Вопрос из этой серии висит надо мной уже больше года, и я всё никак не могу приступить к его решению.
Я почему-то вспомнил фразу Толстого: "делать ничего - гораздо хуже, чем ничего не делать" О Вашем вопросы Вы можете почитать на моем сайте. Вот Вам ссылка:возможен ли запуск не скольких модулей одновременно ?
У Вас просто недостаточно проработанное в мелочах ядро системы, оно не предоставляет вам необходимую функциональность, решающую вашу проблему. Я тоже храню фразы многоязыкового интерфейса в СУБД, ещё я там храню десятки шаблонов, сотни конфигурационных переменных и вообще всё, с чем работаю. При этом у меня нет никаких проблем с излишком SQL запросов. Потому что модуль знает всё что ему может понадобиться и запрашивает это у системы перед запуском. Часть информации о наиболее важных потребностях модуля хранится в соответствующей таблице системы (я уже писал о инструментах управления модулями которые у меня есть), менее важная и более часто изменяемая часть этой информации хранится непосредственно в модуле и запрашивается перед его исполнением (например набор фраз многоязыкового интерфейса).Тормоз номер один в моей системе - это система многоязычности. Все сообщения хранятся в базе и для каждого выводимого сообщения производится запрос. С другими способами организации многоязычности я познакомился до того, как выбрал этот и при повторном выборе я выбрал бы этот же способ, а не какой-нибудь другой, поэтому выбор способа здесь пока не обсуждается. Взять, например, сообщение в этом форуме. Тут надписи: "Активист" (ввод пользователя у меня тоже может быть многоязычным), "на форуме с", "ноября", "город", название города, "URL сообщения" и т.п. (пусть всего их будет, к примеру, 10) - для каждой надписи выполняется как минимум один запрос. Возьмем страничку, на которой показывается десять сообщений. И как мне быть, чтобы количество запросов не выросло до 100? Красивая фраза "не загружать то, что уже загружено" мало что дает - это можно сделать, вопрос лишь в том, будет ли от этого проще, и нужно ли это?
Да, именно так. Но обратное преобразование не всегда требуется, если браузер пользователя поддерживает визуальное редактирование, сообщение можно отдавать в виде html кода.Тогда, Вы, наверное, делаете прямое (при сохранении) и обратное (при редактировании) преобразование?
Мы все достаточно часто ошибаемся, всё от того, что нам лень читать документацию.Если честно, я затруднился найти такой способ (1.3.х). Я всегда думал, что знаком с mod_rewrite, но собственных мыслей не имею, да и сама эта возможность мне кажется странной для этого модуля - его назначение в преобразовании УРЛ и мне не свосем ясно, какое отношение кеширование имеет к преобразованию УРЛ. Если это не новая фича для 2.х, то можно в двух словах, в какие абзацы глянуть?
В любом случае, думаю мне такой способ не совсем подойдет - я все же люблю контролировать все на уровне РНР, но было бы интересно узнать о подобном применении mod_rewrite.
Да, конечно. Зайду в «админцент->управление многоязыковым интерфейсом» там есть кнопка добавить поддержку нового языка. Если на неё нажать, то появится форма, предлагающая ввести идентификатор языка и его название на нём самом, а также на всех уже поддерживаемых языках. Там же есть все необходимые инструменты для поиска и редактирования фраз. С вводимым пользователями содержимым всё сложнее.Например, реализовывали ли Вы когда-нибудь многоязычные приложения? Что Вы будете делать (конкретно: таблицы добавлять, поля дообавлять, скрипты модифицировать и т.п.), если в систему нужно добавить новый язык? Как осуществляется перевод динамического и статического содержимого?
Посмотрю, будет ли достаточно поменять шаблоны.Вы сдали работу и примерно через год эксплуатации клиент захотел, чтобы Вы добавили вап-версию разработанного Вами сайта. Ваши действия?
Думать… Вы сомневались? Или мне расписать здесь, как легко у меня добавляются новые конфигурационные переменные и редактируются шаблоны?В Вашем форуме нет настройки для выключения, к примеру, смайлов в заданном топике. Что Вы будете делать, чтобы добавить такую настройку?
Хотя я и не делал ничего подобного, но по более мелким проектам скажу, что подобные нюансы обычно всплывают при составлении ТЗ, если нет, то клиент платит ещё.Вы разработали какой-нибудь сложный программный комплекс, например, систему учета движения товара на предприятии (на РНР). Сначала клиент говорил, что для каждого типа изделия нужно указывать производителя. Когда проект завершен, выясняется, что нужно указывать не одного, а нескольких производителей. Ваши действия?
Если у некой сущности есть множественная характеристика, для её хранения в любом случае будет предусмотрена отдельная таблица. Соответственно нет причин отказываться от автоматизации процессов генерирования форм отображения в интерфейсах отображения. Как раз в последнем проекте у основной сущности было много подобных характеристик.Как вариант - Вам сказали, что для изделий можно назначаь такие-то, такие-то и такие-то цены (например, для ювелирных изделий может быть оптовая, розничная, оптовая за грамм, розничная за грамм, с учетом угара металла или без него и т.п. - видов изначально довольно много), которые находятся в известных жестко заданных отношениях. Через некоторое время Вас просят добавить новый вид цены. Ваши действия?
Я не понял вторую часть вопроса. По первой части, если кратко, я не возьмусь за такой проект. Подобные вещи я предпочитаю выяснять до, а не после. У меня есть возможность предложить клиенту разные варианты хостинга с гарантированными для меня параметрами, попытку сэкономить 10 баксов я не оценю.Вы закончили проект, сдали его клиенту и тут выясняется, что клиент хочет воспользоваться дешевым хостингом (жадный попался, ничего не поделаешь), на котором блокируются любые гет-запросы, в которых есть последовательность "port". Все скрипты для управления аккаунтами пользователей включают в себя слово "passport". Ваша задача - переименовать "passport" в, к примеру, "pa". Что Вы будете делать?
Я решаю эту задачу. (Решил пару лет назад.)Да, кстати, я так и не понял, как Вы решаете такую задачу: в форум нужно добавить ограничение активности пользователя. Что Вы делаете?
Об этом я написал ранее вполне понятно и полно, пока добавить мне нечего, а цитировать самого себя я не люблю.И еще один теоретический вопрос, какие у Вас критерии "обратной совместимости"? К примеру, у Вас есть две новые версии одного и того же скрипта. Как Вы определите, что один из них - обладает свойством обратной совместимости, а другой - не обладает?
Я соглашусь с тем, что интерфейс моей системы привилегий не слишком удобен в использовании (имена привилегий прописываются в виде строк, а не выбираются галочками), но гибче, чем у меня, я пока что ничего не видел.
Клиент получает раздутый унаследованный код, разобраться в котором не находит время и желание даже сам разботчик.клиент получает дополнительные возможности, оставшивеся по наследству из старых версий. Я не против того, что эти возможности могут не потребоваться, но всегда приятно получить больше, чем просил.
В моем случае для экономии ресурсов используется один универсальный способ - кеширование.У Вас просто недостаточно проработанное в мелочах ядро системы, оно не предоставляет вам необходимую функциональность, решающую вашу проблему. Я тоже храню фразы многоязыкового интерфейса в СУБД, ещё я там храню десятки шаблонов, сотни конфигурационных переменных и вообще всё, с чем работаю. При этом у меня нет никаких проблем с излишком SQL запросов. Потому что модуль знает всё что ему может понадобиться и запрашивает это у системы перед запуском. Часть информации о наиболее важных потребностях модуля хранится в соответствующей таблице системы (я уже писал о инструментах управления модулями которые у меня есть), менее важная и более часто изменяемая часть этой информации хранится непосредственно в модуле и запрашивается перед его исполнением (например набор фраз многоязыкового интерфейса).
А у Вас не существует конструкций, которые нельзя перевести назад? Например, у меня будет весьма затруднительно перевести назад цитирование. В службе статей таких непереводимых назад фич - пруд пруди: автоматическое содержание, фотогалерея, опросы... А вообще, мне кажется странным, когда я вводил одно, а при редактировании вижу совсем другое.Но обратное преобразование не всегда требуется, если браузер пользователя поддерживает визуальное редактирование, сообщение можно отдавать в виде html кода.
Я понял, о каком способе Вы говорите. Вы действительно считаете, что этот способ лежит на поверхности и для того, чтобы узнать о существовании этого способа, достаточно просто прочитать документацию? Я был знаком с RewriteCond и раньше, но о подобном способе никогда не задумывался.Мы все достаточно часто ошибаемся, всё от того, что нам лень читать документацию.
У Вас конфигурационные переменные могут зависеть от темы форума? (форум -> темы -> топики -> сообщения)Думать… Вы сомневались? Или мне расписать здесь, как легко у меня добавляются новые конфигурационные переменные и редактируются шаблоны?В Вашем форуме нет настройки для выключения, к примеру, смайлов в заданном топике. Что Вы будете делать, чтобы добавить такую настройку?
Вопрос, на самом деле, был немножко в другом. Суть в том, что это изменение, как мне кажется, невозможно внести, не изменяя структуру базы данных. Как Вы следите за обновлением структуры базы данных?Хотя я и не делал ничего подобного, но по более мелким проектам скажу, что подобные нюансы обычно всплывают при составлении ТЗ, если нет, то клиент платит ещё.Вы разработали какой-нибудь сложный программный комплекс, например, систему учета движения товара на предприятии (на РНР). Сначала клиент говорил, что для каждого типа изделия нужно указывать производителя. Когда проект завершен, выясняется, что нужно указывать не одного, а нескольких производителей. Ваши действия?
Нет.Я решаю эту задачу. (Решил пару лет назад.)Да, кстати, я так и не понял, как Вы решаете такую задачу: в форум нужно добавить ограничение активности пользователя. Что Вы делаете?
Если Вам тяжело процетировать себя, то это сделаю я:Об этом я написал ранее вполне понятно и полно, пока добавить мне нечего, а цитировать самого себя я не люблю.И еще один теоретический вопрос, какие у Вас критерии "обратной совместимости"? К примеру, у Вас есть две новые версии одного и того же скрипта. Как Вы определите, что один из них - обладает свойством обратной совместимости, а другой - не обладает?
Я также добавлю свою цитату по поводу обратной совместимости:Автор оригинала: ONK
Это модуль поддерживающий простой способ обновления старой версии на более новую версию. При этом новая версия, добавляя новую функциональность, и исправляю выявленные ошибки, не приводит к какой либо потере работоспособности и сохраняет все настройки старой версии, т.е. имеет полную обратную совместимость.
Я задал свой вопрос, потому что в Вашем определении обратной совместимости не ясно, какой способ обновления Вы считаете простым и как Вы определяете сохранность всех настроек старой версии? Возможно также, у Вас есть какие-нибудь простые критерии непотери работоспособности, отличные от автоматических тестов?Автор оригинала: Popoff
у них - старая версия скрипта (скрипт не содержит в себе никаких настроек, только функции/классы), у нас - новая версия скрипта, они берут у нас новую версию скрипта, копируют поверх старой и у них все работает как и раньше, но добавлена новая функциональность и удалены глюки. Это?
Если пользователь решил создать таблицу шириной в 100к пикселей, или что ни будь другое, не разрешенное настройками фильтра html кода, то в зависимости от настроек фильтра html код этой таблицы будет либо отображен после обработки htmlspecialchars(), или просто удалён. Данные, находившиеся таблице, останутся в документе без каких либо потерь.Сообщения Вы храните в каком-то промежуточном состоянии. Нехранение исходного сообщение приводит к известному минусу - может потребоваться обратное преобразования которое, в зависимости от остального подхода, может оказаться не всегда тривиальным или возможным. Я понимаю, что сообщения форума, особенно старые сообщения, редактируются очень и очень редко. Но я все же склоняюсь к мысли о том, что исходная копия лишней не будет.
,PHP:и др. конструкциями нет. При желании, весь html код может быть преобразован в текст, форматированный расширенным набором специальных маркеров. Считаю, что хранение лишних данных (таких как исходные копии) не оправдано. [quote]Переводы и шаблоны Вы загружаете перед запуском модуля. Такой подход тоже не лишен минусов - нужно как-то заранее узнавать, что потребуется; точно узнать нельзя - может загрузиться что-нибудь лишнее, а что-нибудь - недогрузиться и тогда его придется подгружать потом.[/QUOTE] Мне ещё не удалось создать ни одного модуля, который бы не знал какой набор шаблонов, конфигурационных переменных или переменных интерфейса ему нужен для работы. [quote] Поздравляю! Вы объясняете как настоящий преподаватель. Так, чтобы ничего не было понятно. (с) Ю.В.[/QUOTE] Я объясняю так, как хотел бы, чтобы объясняли мне, не давая оснований заподозрить в излишней ограниченности мышления. © мой Вы же поняли, значит я сделал всё правильно. Когда я наткнулся на то, что RewriteCond предоставляет возможность проверки существования реального файла, я сразу подумал, что если когда-либо буду заниматься проблемой кэширования, эта функциональность mod_rewrite будет наиболее достойным для приоритетного изучения. Сейчас я уже на 90% представляю, как это можно было бы централизовано реализовать в моей системе для модулей отдающих статический контент (изменяемый только при модификации исходных данных). Будет свободное время, займусь этим вопросом. [quote] У меня. Я рассматриваю активность пользователя как исходное данное. Чтобы добавить ограничение по активности, в моем случае нужно внести изменение в одном месте - непосредственно перед добавлением сообщения.[/QUOTE] Активность пользователей я рассматриваю как их право. Если пользователь злоупотребляет своим правом его можно ограничить, как по минимальному интервалу времени, так и по максимальному количеству за сутки. На сколько я понял, Вы слишком узко представляемее себе процесс установки/обновление универсального модулей. Из-за этого у Вас возникаем много лишних вопросов. Этот процесс может не ограничиваться только лишь копированием файлов, он может вообще выглядеть по другому. Например, это может быть запуск инсталляционного скрипта, или активизация в админцентре процесса установки/обновления модуля. Если допустить, что инсталлятор может проделать некую подготовительную работу, например, преобразовать таблицу в базе данных, добавить новые конфигурационные переменные и др., то все ваши вопросы снимаются и всё становится на свои места. Перечисленные вами «признаки отсутствия обратной совместимости» не имеют никакого отношения к обратной совместимости.
Если честно, я с трудом представляю себе, как в обратную сторону преобразовать подобного вида галерею (внутри все рисунки - это один тег) или автоматическое содержание. Особенно с учетом того, что галерея и содержание зависит от шаблона, а наборов шаблонов может быть много разных и шаблоны могут изменяться дизайнером по идее без уведомления программиста.Преобразование специальных маркеров у меня полностью поддерживается в оба направления, так что никаких проблем
Тем не менее, это огород. ПОка что не вижу никаких преимуществ такого способа перед кешированием.Мне ещё не удалось создать ни одного модуля, который бы не знал какой набор шаблонов, конфигурационных переменных или переменных интерфейса ему нужен для работы.
Это очень хорошо. Это означает, что теперь Вы можете их сформулировать в своем виденииПеречисленные вами «признаки отсутствия обратной совместимости» не имеют никакого отношения к обратной совместимости.
На самом деле у меня нет никаких вопросов. Все свои вопросы я давным-давно решил и радуюсь. Просто иногда у меня закладываются подозрения, что решение подобных вопросов при Вашем подходе - сложнее, чем при моем. Именно поэтому я их и задаю, чтобы иметь возможность сравнить. Не чтобы узнать (как их решить просто, именно просто, а не как-нибудь еще, при моем подходе, я и так знаю), а чтобы сравнить и изменить свой подход, если окажется, что Ваш подход действительно лучше.Из-за этого у Вас возникаем много лишних вопросов.