Критика разработки, свободное общение :-)

akinak

Проверенные
Сообщения
55
Реакции
142
Баллы
8,140
Наткнулся на такую вот подпись

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

  • Изменение таблиц движка плагинами. Потом вылезают всякие баги при обновлении движка. Есть join-запросы, делайте свои таблицы, расширяйте ими модели - нет, блядь, хотим таблицы движка изменять и гадить в них. Делает каждый второй плагин, который что-то добавляет.
  • ГЛОБАЛИНГ. Запрещенный в ООП прием. Но некоторые умники умудряются передавать через глобалки ссылки на объекты и использовать в других классах. На самом деле, можно обойтись и без этого, если писать с умом. Замечено у: waindigo, brivium.
  • Настраиваемый роутинг. Это удобно, конечно, но давно настраивается через фильтры роутинга при желании. Не нужно забивать сразу по четыре префикса под свой говноплагин. Замечено у: Dark (Taigachat).
  • Запись в БД через sql-запросы. Для этого существуют датаврайтеры, особенно если вы пишете в таблицы движка, а не в свои. В свои как угодно, в движок - только датаврайтерами, чтобы потом не возникали косяки. Замечено у: brivium.
  • Хардкод значений в функциях. Замечено у: разработчики XenForo. Серьезно, до сих пор нет способа добавить протоколы для ссылок, потому что регулярка, которой они проверяются, зашита в функцию и ее не переназначить через плагины никак, только если заменить функцию проверки целиком.
  • Копирайты на видном месте. УХ КАК ЭТО БЕСИТ БЛЯТЬ! Засуньте свои ссылочки себе в задницу и поищите другие способы набрать PR своей параше. Замечено у: любой плагин вообще, куда ни глянь.
  • Пихание графики в директорию к дефолтному стилю. Потом всё отваливается при обновлении движка, если стираешь старые файлы. Надо файлы - создай отдельную директорию под свое барахло. Замечено у: Advanced forum statistics.

С половиной пунктов не согласен.

Тема чтобы обсудить собственно.

Итак, sql запросы vs датаврайтер
копирайты vs эксплойты
добавление колонок vs добавления таблиц
 
Итак, sql запросы vs датаврайтер
Второе и точка. После первого тут потом задают вопросы на форуме "как автоматизировать перестройку кеша тем, а то что-то у меня без нее после вставки данных порядок сообщений не тот". Если есть удобный способ, который учитывает все возможные условия - для чего пытаться обойти его? Да, написать пару стандартных функций php возможно и проще, но что-то не уверен если смотреть на нативную реализацию PDO в php.
копирайты vs эксплойты
Вообще необходимость копирайта на усмотрение разработчика. Но я могу понять копирайт движка, а вот копирайт мода - не совсем. Добавили 1-2 строчки к стандартному функционалу - а копирайт на все 3. К тому же авторы некоторых модов своим копирайтом умудряются разве что не его точную версию раскрыть, что вот уж точно может стать настоящим эксплойтом с ключами под половичком у двери. А насчет второго - если злонамеренность откроется, такие разработчики могут себе сразу новое альтер-эго делать. Сообщество никакое оправдание злому умыслу не примет.
добавление колонок vs добавления таблиц
Опять же - только второе. Таблицы посторонние я и сам смогу удалить, особенно если префикс другой, а вот с колонками не все так просто - и если ленивый разработчик не озаботится написанием нормального метода для удаления - в таблице этот хлам и останется. Еще и конфликты потом вызовет потенциально.

А вообще в тему можно и самого Arisu позвать, подпись-то его :sneaky:
 
  • Мне нравится
Реакции: Hope
Ок, я приведу примеры, когда все не однозначно :-)

Пример 1.
Нам нужно расширить таблицу сообщений, добавив какой-то призак или флаг.
Можно добавить колонку, можно добавить таблицу с 2-мя колонкам (post_id и само значение). В случае колонки расширяем дата-врайтер и пишем 1-м запросом. В случае таблицы - 2 запроса на инсерт при добавлении поста и джойн при получении поста. Джойн ради 1-й колонки, да.

Пример 2.
Нам нужно добавить признак и менять его сразу для множества сообщений.
В случае датаврайтера мы получаем запросы на апдейт в цикле, в случае прямых запросов - 1 запрос.
 
akinak, ну давайте тогда все таблицы движка объединим в одну большую такую таблицу xenforo - ни будет ни джойнов, ни многотабличных селектов/апдейтов, все будет делаться в пределах одной таблицы. Лезть в таблицы движка - как минимум некорректно с точки зрения принципов расширяемости. Обновление в котором авторы удумали поменять таблицу (учитывая активную разработку движка - вполне реально) - и ваш мод без своего предварительного удаления не дает обновить форум. Разумно? Нет. Бояться делать джойны также неразумно - мало того что движок все кеширует, так еще и в мускуле кеширование есть, которое учтет частый джойн и по сути будет держать все нужные данные в кеше.
 
akinak, ну давайте тогда все таблицы движка объединим в одну большую такую таблицу xenforo - ни будет ни джойнов, ни многотабличных селектов/апдейтов, все будет делаться в пределах одной таблицы. Лезть в таблицы движка - как минимум некорректно с точки зрения принципов расширяемости. Обновление в котором авторы удумали поменять таблицу (учитывая активную разработку движка - вполне реально) - и ваш мод без своего предварительного удаления не дает обновить форум. Разумно? Нет. Бояться делать джойны также неразумно - мало того что движок все кеширует, так еще и в мускуле кеширование есть, которое учтет частый джойн и по сути будет держать все нужные данные в кеше.

Я пытаюсь сказать, что не нужно бросаться в крайности. Особенно когда чего-то не понимаешь.
А чем добавление колонки в таблицу помешает движку обновится?
 
akinak, условно добавили колонку overridden - в новом обновлении авторы тоже удумали такую колонку добавить. При выполнении скрипта обновления - крик мускуля о том, что колонка-то такая уже есть. И хорошо если предварительная проверка будет на наличие колонки и ее дроп в случае необходимости, а то зависнет обновление посередине - и в итоге ни туда, ни сюда.
 
Exile, ага, а как бы повел себя движок, если бы была доп. таблица с такой колонкой, которая бы джойнилась? Мы бы не получили ошибку неоднозначности колонки, нет?
Про тот аддон я знаю, там еще в аннинстале ничего не было.
 
Да и вообще это не крайность, а реальность. Тут где-то тема была, где пользователи числом установленных дополнений хвастаются. 20-30-40 дополнений с авторами, у которых свой особый взгляд на таблицы движка, таблицы аддонов, прямую запись в базу - и будет у вас не XenForo, а 1С Битрикс в отношении производительности. Не говоря уже о том, что если автор не осилил индексы в добавленной таблице, а решил пойти по простому пути добавления колонок в стандартные таблицы - остальной код заставляет задуматься еще больше.
Exile, ага, а как бы повел себя движок, если бы была доп. таблица с такой колонкой, которая бы джойнилась? Мы бы не получили ошибку неоднозначности колонки, нет?
Какой колонки? Которой нет? Удалять базовые колонки (user_id и т.д.), к которым в моде можно привязаться авторы точно не будут из-за обратной совместимости. Так о какой неоднозначности идет речь? Таблицы движка названы с префиксом xf_* - аддоны должны использовать свои префиксы, например dark_* (тайгачат) и т.п. Или может еще обсудить допустимость использования префикса xf_* для своих аддонов?
Про тот аддон я знаю, там еще в аннинстале ничего не было.
Что за аддон?
 
Да и вообще это не крайность, а реальность. Тут где-то тема была, где пользователи числом установленных дополнений хвастаются. 20-30-40 дополнений с авторами, у которых свой особый взгляд на таблицы движка, таблицы аддонов, прямую запись в базу - и будет у вас не XenForo, а 1С Битрикс в отношении производительности. Не говоря уже о том, что если автор не осилил индексы в добавленной таблице, а решил пойти по простому пути добавления колонок в стандартные таблицы - остальной код заставляет задуматься еще больше.

Какой колонки? Которой нет? Удалять базовые колонки (user_id и т.д.), к которым в моде можно привязаться авторы точно не будут из-за обратной совместимости. Так о какой неоднозначности идет речь? Таблицы движка названы с префиксом xf_* - аддоны должны использовать свои префиксы, например dark_* (тайгачат) и т.п. Или может еще обсудить допустимость использования префикса xf_* для своих аддонов?

Что за аддон?

Вопрос был вот в чем
Вариант один, добавляем колонку overridden в xf_post
Вариант второй, добавляем таблицу akinak_extend_xf_post где 2 колонки - overridden и post_id
В следующей версии движка разработчики сами добавляют колонку overridden в таблицу xf_post
Что мы получим при запроси типа
SELECT xf_post.*, akinak_extend_xf_post.overridden FROM xf_post JOIN akinak_extend_xf_post ON (akinak_extend_xf_post.post_id = xf_post.post_id)
 
akinak, два поля overridden мы получим и соответствующую ошибку, но на момент моего получения этих двух полей - мой форум будет уже обновлен, а значит со спокойной совестью я отключу и удалю ваш аддон. А вопрос был именно в отношении сохранения обратной совместимости при обновлении.
 
akinak, два поля overridden мы получим и соответствующую ошибку, но на момент моего получения этих двух полей - мой форум будет уже обновлен, а значит со спокойной совестью я отключу и удалю ваш аддон. А вопрос был именно в отношении сохранения обратной совместимости при обновлении.
Да, хорошо что Вы это понимаете, все так и будет.
Но изначально вопрос был не в обновлении движка, а о том, как писать аддоны (ну совсем изначально, в 1-м сообщении темы).
И ошибка в данном случае - не в добавлении колонки вместо таблицы, а в выборе имени колонки без префикса.

Добавлю еще мысль.
Когда человек начинает что-то изучать, он сперва делает как умеет. Потом он узнает про то, как делают другие (например читает книжку про ооп). И начинает всем доказывать, что единственный верный способ - это по книжке. А потом оказывается, что нет единственно верных способов и все зависит от конкретных условий. Вот о чем я пытаюсь сказать.
 
в выборе имени колонки без префикса.
А вот это хороший вариант, да. Вот только каких-то строгих стандартов написания модов у XF нет, а поэтому зачастую приходится наблюдать то, о чем дискуссия выше развернулась. У некоторых так вообще методы удаления не написаны - лишь бы хук с копирайтом своим поскорее активировать.
Когда человек начинает что-то изучать, он сперва делает как умеет. Потом он узнает про то, как делают другие (например читает книжку про ооп). И начинает всем доказывать, что единственный верный способ - это по книжке. А потом оказывается, что нет единственно верных способов и все зависит от конкретных условий.
Немного оффтопа - в свободное время занимаюсь развитием одного проекта (opensource) у которого в основе лежал phpbb2. Сейчас сделаны попытки начать движение к свету, то есть к Zend Framework 2. И вот вы знаете - после привычки все писать так, как удобно мне - поначалу действительно было непривычно. Но сейчас внезапно пришло озарение - что если делать все изначально модульно, то никаких проблем у конечных пользователей продукта с его обновлениями, а значит вашей возможностью добавлять что-то новое - не будет. Пользователи это оценят как минимум. Не надо делать выбор единственно верного способа - он уже есть. И главное все остальное, написанное так, как было удобно вам (как разработчику) - переделать так, чтобы удобно стало пользователю в его дальнейшей работе с продуктом. Вы как разработчик в первую очередь должны думать не о том, как удобно вам, а о том, как надо делать. И XenForo не хватает именно четко определенных стандартов что можно делать, а что нет.

Ну и так, о птичках. Имею доступ к исходному коду рутрекера - вполне себе такой хайлоад, да? Имена пользователей хранятся именно в отдельной таблице с 2 колонками, вот прям как вы выше написали. Хотя есть и в другой, общей таблице. Просто потому, что с точки зрения производительности базы, проще подключить маленькую таблицу, а не большую. И таких примеров там сотни - некоторые назовут излишним дублированием, а я назову избирательным подходом к использованию данных только тогда, когда они нужны. Синхронизация не через дополнительные запросы - а через триггеры. Они в мускуле не знаю сколько лет есть, работают в разы быстрее чем любой скрипт, а используют их единицы. Но в основу положена именно расширяемость и масштабируемость. Лишний джойн - да, сначала кажется что минус - но если посмотреть под другим углом и предположить другие условия - вполне себе плюс.
 
  • Мне нравится
Реакции: Hope
Добавлю ремарку - использование тригеров и храним процедур в субд как раз избавляет от использования датаврайтера.
Но это я на потом припас правда.
 
akinak, поскольку вы один из немногих разработчиков на XF, который свои плагины продает через офф. форум, хотелось бы задать вопрос. Меня он на самом деле давно волнует, потому что я вижу в официальном менеджере ресурсов просто потрясные вещи, когда за простые вещи просят просто немыслимые в сравнении со стоимостью самого движка суммы. Ну так вопрос - на что вы опираетесь, назначая цену на свои дополнения?

- плагин, реализованный на бесплатном jquery-скрипте, который дает возможность реализовать фильтр по id блоков на странице. Посмотрев видео-демонстрацию, практически уверен, что реализовано именно на нем, потому что разделы без подфорумов которые после фильтрации остались выводятся в виде страшных полосок. Это все можно поправить по событию после завершения, ну да суть не в этом. Цена 7 долларов. Вопрос - за что? За добавление переменной в шаблон,в которой можно указать id нужных нод для фильтра (стиль для них)?

- плагин для вывода нод из одного раздела в других разделах. Как понимаю реализовано перезаписью метода на генерацию списка разделов под вывод. Добавляете к массиву на вывод id разделов, указанных в админке. Цена 5 долларов.

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

Другие ваши аддоны, заметьте, не упомянул - там нет сомнений в обоснованности цены. Ну так еще раз повторю вопрос - чем вызвана такая стоимость аддонов? Ориентация на "средние по больнице" цены? Нет, ну правда, я не понимаю почему очень большое число достаточно простых плагинов - платные. Это не про вас речь, просто привел пример таких простых с моей точки зрения вещей. Это про весь движок и его коммьюнити разработчиков в целом. За иной плагин просят больше, чем сами разработчики за весь форум со всеми платными аддонами. Как по-вашему, это адекватно?

Ну и еще вопрос на который можете в принципе не отвечать, но все же - много людей на официальном форуме аддоны покупают? Или 1-2 продажи? Не было идей про то, что если цену установить в районе 2-3 долларов, число продаж перебьет эту небольшую стоимость и ради поддержки действительно может многие аддон купят?
 
Все очень просто.
На ксене очень маленький рынок, поэтому добавляя плагин за 7 баксов я рассчитываю на 4-6 продаж, не более.
А любой, самый маленький плагин - это время. Ну да, добавить админку, написать код, протестить и собрать в кучу. Потом залить, налепить скриншотов, возможно кто-то что-то попросит изменить или баг какой, короче говоря меньше 5 часов не выйдет, даже на совсем маленький.
Если изменить цену, то теоретически купят больше, надо будет проверить.
 
За иной плагин просят больше, чем сами разработчики за весь форум со всеми платными аддонами. Как по-вашему, это адекватно?
Думаю что каждый разработчик сам устанавливает цену плагину, а покупателю выбирать покупать по этой цене или нет.
Если изменить цену, то теоретически купят больше, надо будет проверить.
Наш преподаватель по экономике объяснял это так: "Я делаю стулья себестоимостью 20 гривен, везу продавать их на базар по цене 25 гривен. И смотрю, а ко мне бежит народ народ и всем нужны мои стулья. Тогда я продаю их не по 25, а по 28. На следующий день привожу новые стулья, а они уже никому не нужны тогда я продаю их по 22 гривны".
akinak, условно добавили колонку overridden - в новом обновлении авторы тоже удумали такую колонку добавить
Не буду спорить как правильно, так у каждого своя правда и он на своем мнении останется , скажу одно чтобы такого не было можно в названии колонки добавлять какую то соль и тогда совпадений точно не будет
а вот копирайт мода - не совсем. Добавили 1-2 строчки к стандартному функционалу - а копирайт на все 3.
От зайдет человек на сайт увидит нужный ему функционал и по ссылке копирайте сразу узнает где взять. + если будет нужно доработка он обратится к разработчику за что разработчик получит дополнительные деньги.
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу