Защита дополнений в деталях

Приветствую. Эта заметка будет полезна скорее для уже состоявшихся авторов компонентов, но возможно начинающим тоже будет полезно изучить механизм и позволит стать будущими авторами дополнений, если ещё в раздумьях.
Не так давно некоторые дополнения на modstore.pro обзавелись защитой. Дополнения можно по прежнему устанавливать из репозитория, но если попробовать скопировать архив с пакетом на другой сайт, то установить ничего не получится. И это было сделано не спроста, так как наглости некоторых людей нет предела, пришлось предпринять меры.
Следом авторам платных дополнений разослали инструкцию о том, каким образом встроить подобную защиту в собственные дополнения. Стоит отметить, что с первого раза сделать по инструкции (несмотря на простоту) не получилось в силу особенностей применяемого варианта сборки пакета. Пришлось разбираться досконально и выяснять, как и что в MODX работает, чтобы сделать это “правильно” и надежно.
Прежде чем продолжить, стоит ознакомиться с специальным методом сборки пакетов – «Сборка transport-пакета без установки MODX». Инструкция написана в далеком 2015 году, однако описанный метод работает до сих пор. Отличие в том, что подход не требует установки MODX для сборки пакета, т.е. сборку запустить можно откуда угодно, имея только исходники пакета и xPDO.
Детали внутри.
Немного теории о защите
Для начала разберемся, как работает механизм защиты.
В репозитории пакетов, в нашем случае modstore.pro, когда добавляется платный компонент и туда загружается собранный архив с конкретной версией, для пакета и загруженной версии создается некий пароль. Этот пароль доступен через API. Чтобы получить пароль, в запросе передаётся email, ключ для доступа к пакетам репозитория, название пакета и версия. С помощью этого пароля при последующей сборке пакет зашифруется. После сборки зашифрованный пакет опять загружается в репозиторий, при этом просто заменяется архив, без поднятия версии. Когда пользователь будет устанавливать пакет, в момент установки этот пароль будет заново запрашиваться и содержимое элементов пакета расшифруется. Если же устанавливать такой пакет без подключения к провайдеру или без наличия оплаты для ключа, расшифровка будет невозможна.
Теперь разберемся, что же сделать, чтобы зашифровать пакет, однако перед этим разберемся, как работают пакеты в MODX в момент установки.
Как устроены пакеты MODX
Хоть с виду это кажется высшей математикой, но пакеты в MODX устроены примитивно. Главный исполняемый файл пакета – это `manifest.php`. В этом файле хранится мета-информация (список изменений, лицензия, зависимости) и массив отдельных транспортных объектов (vehicles) с инструкциями по установке и ссылками на файлы с содержимым этих объектов.
В коде MODX описано 3 типа таких объектов и каждый отличается характером поведения в момент установки и владеет дополнительными возможностями.
xPDOObjectVehicle
Стандартный и часто используемый тип. Этот тип описывает объекты MODX, которые будут созданы в системе. С помощью xPDOObjectVehicle в пакет упаковываются категории, снипеты, чанки, ресурсы и другие объекты MODX, которые наследуют класс xPDOObject.xPDOFileVehicle
Этот тип используется реже. Тип сильно проще xPDOObjectVehicle и указывает, что файл из пакета будет помещен в указанный каталог в MODX в момент установки.xPDOScriptVehicle
Редко востребован, но иногда полезен. Похож на xPDOFileVehicle, но вместо копирования файла исполняет файл, как PHP скрипт.Элементы массива `manifest-vehicles` выполняются в той последовательности, в которой перечислены в этом массиве. Это крайне важно для понимания механизма внедрения защиты и мы к этому вернемся чуть позже.
Скрипт сборки
Скрипт сборки, пожалуй, неизведанная область, даже для уже состоявшихся авторов дополнений (особенно тех, кто слепо копирует modExtra и подобные решения). Сразу оговорюсь, что считаю такие инструменты полезными и экономящими время, но только если эти инструменты использовать вдумчиво и предварительно разобравшись в том, что они делают.Скрипт сборки выполняет простую задачу – собирает необходимые элементы, упаковывает каждый в транспортный объект, записывает содержимое элементов в файлы, описывает в файле-манифесте порядок установки и архивирует в итоговый пакет.
Вот простой сборщик пакета, который при установке копирует файл robots.txt из пакета в корень сайта.
...
// создаем объект пакета
// передаем в конструктор объект xPDO
// название и версию пакета
// и путь, куда будет сохранен архив с собранным пакетом
$package = new xPDOTransport($xpdo, 'robots-1.0.0-pl', __DIR__ . '/../_pkg/');
// добавляем в пакет транспортный объект (vehicle) типа Файл
// в массиве с параметрами описываем путь, где лежит исходный файл
// и путь, куда файл должен быть перемещен из пакета в момент установки
$package->put(new xPDOFileVehicle, [
'vehicle_class' => xPDOFileVehicle::class,
'object' => [
'source' => __DIR__ . '/robots.txt',
'target' => "return MODX_BASE_PATH;"
]
]);
// упаковываем пакет в архив
$package->pack()В коде опущены инициализации переменных и подключения классов, но логика умещается в десяток строк. Разобраться не сложно.
Шифровальщик
Теперь вернемся к нашей непосредственной задаче – шифрованию. Для целей шифрования элементов пакета вместе с инструкцией представляется специальный класс – EncryptedVehicle. Сразу скажу, что класс Василия, и авторство я присваивать не собираюсь.
Класс наследует базовый класс транспортного объекта xPDOObjectVehicle и переопределяет методы `put`, `install` и `uninstall`, добавляя функции по шифрованию и расшифровке содержимого элементов. Как ключ для шифровки/дешифровки используется пароль, выдаваемый modstore.pro через специальное API.
Этот класс – это по сути четвертый тип транспортного объекта, который может использоваться для описания элементов в пакете. Таким образом, если хотим зашифровать содержимое, то при добавлении элемента в пакет используем этот класс. Вот пример:
$package->put($object, [
'vehicle_class' => EncryptedVehicle::class,
...
]);Будьте внимательны, зашифровать можно только объекты MODX, потому что `EncryptedVehicle` наследует `xPDOObjectVehicle`, файлы и скрипты, добавленные через классы `xPDOFileVehicle` и `xPDOScriptVehicle` останутся без шифрования.
Получение пароля для шифровальщика
Отдельно стоит описать получение пароля для шифровальщика со стороны modstore.pro. Дело в том, что в инструкции описывается способ, который использует код из MODX, что в моем случае не подходит, так как пакет собирается только с использованием xPDO, без установки и использования кода MODX.
Чтобы получить пароль, требуется на адрес `modstore.pro/extras/package/encode`; отправить запрос POST с информацией о пакете и токенами авторизации. Опытным путем был получен минимальный список параметров, которые требуется отправлять в репозиторий для получения пакета:
$this->params = [
'api_key' => '1h54gdtrr354',
'username' => 'ivan@klimchuk.com',
'http_host' => 'alroniks.com',
'package' => 'foobar',
'version' => '1.0.0-pl',
'vehicle_version' => '2.0.0'
];В ответ на запрос придет ответ с ошибкой, если информация не верная, или с паролем. Запросы отправляются и приходят в ответ в формате XML, так что стоит так же позаботиться о конвертации этого формата. В случае, когда используется код MODX, это уже реализовано.
Когда пароль получен, требуется в скрипте сборки, перед первым использованием класса-шифровальщика, добавить константу `PKG_ENCODE_KEY`, которой присвоить полученный пароль. Эта константа будет использоваться в дальнейшем при шифровании элементов пакета.
define('PKG_ENCODE_KEY', $keyRequester->getKey());Ссылка на полные примеры кода с подробными пояснениями в конце заметки.
Порядок действий
При наличии пароля зашифровать пакет легко, стоит просто указать в поле vehicle_class класс EncryptedVehicle. А вот правильная работа зашифрованного пакета при установке или обновлении зависит от соблюдения порядка выполнения действий в пакете. Как я уже говорил, действия в пакете выполняются в том порядке, в котором описаны в манифесте.
При попытке установить транспортный объект, MODX по имени класса типа объекта найдет у себя описание этого типа, создаст объект и выполнит метод `install` этого объекта. В случае трех встроенных типов проблем не возникнет, так как эти типы описаны в виде классов в xPDO. А вот в случае EncryptedVehicle получим ошибку, что такого класса нет. Чтобы это исправить, перед установкой элементов из пакета нужно этот класс добавить в MODX и загрузить.
В начале добавим файл с нашим классом в пакет через тип xPDOFileVehicle, а при установке файл будет скопирован в каталог нашего дополнения:
$package->put(new xPDOFileVehicle, [
'vehicle_class' => 'xPDOFileVehicle',
'object' => [
'source' => 'encryptedvehicle.class.php',
'target' => "return MODX_CORE_PATH . 'components/ourcomponent/';"
]
]);Для MODX 2 версии важно, чтобы имя файла было в нижнем регистре и постфиксом class, иначе класс не будет найден загрузчиком классов MODX.
Затем при установке нужно класс из файла загрузить в MODX, иначе в системе будет болтаться бесполезный файл. Загрузку класса будем делать через скрипт на PHP:
$transport->xpdo->loadClass('transport.xPDOObjectVehicle', XPDO_CORE_PATH, true, true);
$transport->xpdo->loadClass('EncryptedVehicle', MODX_CORE_PATH . 'components/' . strtolower($transport->name) . '/', true, true);А сам скрипт загрузим в пакет через тип xPDOScriptVehicle:
$package->put(new xPDOScriptVehicle, [
'vehicle_class' => 'xPDOScriptVehicle',
'object' => [
'source' => 'resolve.encryption.php'
]
]);За ними в пакет будут загружаться остальные элементы с уже зашифрованным содержимым. Вот тут и понадобится соблюдение порядка в манифесте и возможности дополнительных типов транспортных объектов. Файловый и скриптовый типы не шифруются, и выполнятся первыми, значит на момент установки зашифрованного объекта класса EncryptedVehicle, необходимый PHP класс уже будет загружен в MODX и доступен для использования.
Этот порядок требуется соблюдать в скрипте сборки, чтобы обеспечить правильную работу установщика. В каком порядке добавлять остальные элементы решайте самостоятельно.
Подводя итог
Подведем итог теории и кратко по шагам опишем действия, которые требуется выполнить, чтобы “защитить” свой пакет от посягательств.
- Добавить код получения пароля из modstore.pro в файл со скриптом сборки пакета. Используйте мой вариант, либо смотрите в оригинальной инструкции, где используется код из MODX.
- Скопировать файл с классом EncryptedVehicle к себе в пакет куда угодно в папку _build.
- В скрипте сборки в начале, после создания транспортного пакета, добавить транспортный объект типа xPDOFileVehicle с классом-шифровальщиком.
- Следом добавить транспортный объект типа xPDOScriptVehicle со скриптом, который этот класс зарегистрирует.
- Добавить собственные элементы, которые нужны в пакете и собрать пакет.
Что делать с modExtra
В первую очередь разобраться, как устроен скрипт сборки в этом компоненте. Код написан в виде класса, где функции логически и наглядно распределены по методам. Единственное различие, что для создания пакета используется функция `createPackage`, а для добавления транспортного объекта в пакет используется функция `putVehicle`. Найдите места, где эти функции используются и добавьте по примерам собственные объекты в пакет.Для облегчения понимания механизма работы я приготовил пример простого и в меру бесполезного компонента FooBar (при установке создает одну системную настройку), где приведены файлы с подробными комментариями и пример распакованного архива компонента.
Надеюсь материал полезен.

Комментарии: 180
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
По поводу защиты не стал заморачиваться. Ничто не мешает скупому, неблагодарному, бессовестному, беспринципному и наглому разработчику вместо пакета скопировать исходники с сайта-донора. Мы же помним, как такие разработчики собирали пакеты платных дополнений Василия с Гитхаба. Да, чуть сложнее. Но это вряд ли их остановит.
Но почему-бы не усложнить немного жизнь непорядочным разработчикам сайтов, которые зарабатывают на твоём труде?
Я полгода собираю статистику по использованию своих дополнений.
На данный момент, в списке 2102 случая использования моих 3 пакетов без покупки в modstore.pro. Это те, которые использовались хотя-бы 1 раз за последний месяц (30 дней).
Когда видишь такие числа, а потом читаешь в телеграмчике, какие ребята умные-красивые и как грамотно взяли деньги с заказчика, и установили ему пакет из своей коллекции — хочется немного щёлкнуть им по носу.
Своровать можно что угодно, вопрос только в том, стоят ли эти усилия стоимости дополнения.
У меня заказывают сайт, я должен продемонстрировать возможности функционала, к примеру самые-самые — mSearch2, Office. Я ставлю древний работающий пакет только для того, чтобы продемонстрировать работу (я не продаю его). Если заказчика всё устраивает, в дальнейшем этот пакет покупается на уже боевом хостинге.
Я не буду сломя голову бросаться и покупать за свой счёт нужные компоненты только для демонстрации по причинам:
Заказчики бывают недобросовестные. Сайт сделал, а денег нет, потом. Это потом обычно заканчивается удалением сайта.
Заказчику, как оказалось, не нужен предлагаемый функционал, а нужно что-то другое. да, конечно же покупку можно вернуть.
Тут вопрос не в построении отношений с с заказчиком.
Да, есть же тестовый период. Но тестового суточного периода — мало, ведь заказчик может посмотреть ссылку и через сутки и через неделю. А каждый день разворачивать новый сайт, простите, это время.
Очень много таких моментов. Прошу понять правильно. Это не халява. Я не считаю, что 1999 руб. за аддон это много, тем более с моими скидками в магазине. Это необходимость не тратить лишнего. Да, можно купить, отправить на другой домен в дальнейшем, но это потеря техподдержки на месяц-два.
Мы с Леонидом разговаривали, он обещал рассмотреть вопрос о продлении тестового периода.
А было бы удобно сделать тестовый сайт, показать заказчику, если он пока не может смотреть, сделать снепшот и выключить до лучших времен. Если не используется долше неделе (обсуждаемо), удалять как обычный тестовый. Можно даже за симолическую плату.
Ну и купить лично для себя нужные дополнения, чтобы показывать их заказчикам на своём сайте круглый год — это неподъёмная сумма для разработчика? Смешно.
Ну а разработчик дополнения при чём? Делаешь сброс ключа и используешь в следующем проекте.
Я отслеживаю статистику по используемым дополнениям за последние 30 дней. Выглядит это примерно так:
Как только дополнение покупается для домена — он из этого списка пропадает. Если не покупается, то так и висит, пока используется.
2001 пункт в этом списке прямо сейчас. Как видно по первой проверке, это реально работающие дополнения, а не «просто посмотреть».
Если ты имеешь в виду показать заказчикам чужой сайт, это сложно. Я не могу показать админку, в которой видны продажи, магазин магазину рознь — все хотят посмотреть «примерно свой контент». То есть, «как там или как тут» — не выйдет.
И теряю техподдержку по времени.
А если в разработке минимум 2 сайта?
Это при том, что вход в админку открыт на minishop2.com, а Office и mSearch2 работают прямо на самом modstore.pro
Еще раз — не нужно свои проблемы и риски перекладывать на разработчика дополнений.
Нужно потестить mSync. Узнать — подходит ли он вообще или нет. Взять не откуда, только на Modhost. Но там 1 день для тестов. Придется заморачиваться с бекапами, т.к. пока свяжешься с заказчиком, с его 1С-ником и т.д.
PS для меня не было очевидно, что можно использовать несколько ключей для одного и того же поставщика, пока Василий не ткнул в это :)
Пруф
А если продается техподдержка, а не лицензия, то почему нельзя использовать дополнение без техподдержки. В чём непорядочность разработчиков-неплатильщиков в юридическом смысле? Нигде же не сказано про обязательность техподдержки. И получается, что ты усложняешь жизнь разработчикам, которые формально ничего не нарушили. Они за техподдержку не платили — они её не получают.
Это вопрос скорее к ребятам из MODSTORE. Я как автор платных дополнений заинтересован в четких правилах, повышающих мои права и продажи.
В обход магазина? Ну так и устанавливайте как хотите, это не моя проблема.
П.С. Только что ради эксперимента поставил Office на локалку. Потратил 2 минуты.
Покупка даёт право на ТП в течение года. Нужно продлить — покупаешь еще раз со скидкой 10%, всё это давно прописано.
Ну я прям несказанно за тебя рад. Теперь напиши инструкцию по обходу — и я начну использовать ionCube, всем будет только веселее, правда?
Ты вообще что-ль нормально разучился разговаривать? Ничего мне не нужно уточнять, успокойся.
Ты уж определись, кто тут разучился нормально разговаривать.
Сделать привязку регистрацию только по телефону, а то есть у нас кадр который по 10 аккаунтов имеет и кидает клиентов, и ему как то побоку комментарии и карма.
После закрытия исходников дополнений, продажи выросли в 2 раза — и мой код из них перестали копировать в другие дополнения. Это позволило оставить всего 3 платных дополнения из 14 (!). Остальные или переехали другим авторам (3 штуки), или стали вовсе бесплатными (8 штук) с открытыми исходниками.
А после добавления защиты, продажи выросли еще в 1.5 раза, что позволило не поднимать на них цену. На всякий случай — mSearch2 продаётся за 1990 рублей с 2013 года. То есть, уже 5 лет по одной цене, не смотря на скачки курса валют и прочие санкции.
Если защита усложнит жизнь халявщикам — я буду только рад. Главное, что она не усложнила жизнь добросовестным покупателям, они просто не заметили разницы.
А удобство планирую улучшить, но только в новой версии.
Осталось начать продавать сам MODx.
Но все, что ни делается — все к лучшему. Умрет MODx — родятся новые.
Но причем тут я? Речь идет про MODx
Изначально MODx создавался для халявщиков.
Изучение MODx все начинают со сдирания шаблона с любого понравившегося сайта, а потом выясняется что и сам MODx абсолютно свободный, любой человек может делать с ним все, что захочет, читаем про GNU GPL2.
Василий уже прочитал, поэтому он продает не пакеты, а техподдержку.
Как можно привязать пакеты и техподдержку к конкретному сайту я не понимаю. Технически это реализовать невозможно, т.к. любой сайт имеет возможность сменить как местоположение, установить пакет, а потом вернуться обратно, так и домен, перекидывается туда-обратно за пару часов. Логики тоже нет, если мне разжевали как установить пакет на одном сайте, то на другом сайте это уже легко повторить, никто не будет 2 раза одни и те же вопросы задавать.
P.s. я тоже пишу статьи только для самопиара или ты думаешь тут все святые и за просто так делятся знаниями?
Не нравится MODX, уходите на OctoberCMS, удивитесь ценам на платные аддоны.
Продает не услуги по установке, настройке, раскрутке итд, а просто пакеты MODX Revo и miniShop2.
Один из 400 сравнительно честных способов отъема денег у населения.
Ты мой семейный бюджет видишь? Сколько я зарабатываю на дополнениях, сколько на хостинге и сколько в других местах? Какие у меня договора, с кем и на что?
Перестань уже позориться.
Вот эти рассказы про «я не продаю» — мне не интересны, у меня есть статистика и я вижу, что люди используют мои дополнения в коммерческих проектах, зарабатывая деньги. Почему меня должны заботить их интересы, скажите пожалуйста?
Почему никого не заботят мои интересы? Неужели непонятно, что когда автора эта ситуация окончательно достанет — он просто плюнет, и перестанет продавать и поддерживать свои дополнения. Кому-то станет лучше от этого?
Есть полно бесплатных дополнений, но почему-то всем нравится использовать именно платные. Может потому, что они лучше качеством? А почему? Да потому что платные. Ну сложите уже 2 + 2.
Почему Микрософт и 1с стали первыми? Только из-за умелого управления бесплатностью своих программ.
Они же прекрасно видели что их продукты воруют, но ничего не делали. Намного важнее захватить большую долю рынка, чем постоянно гоняться за копейками, которые всегда так и останутся копейками, если за ними гоняться. Ну сложите уже 2 + 2.
И проказник Stan Ezersky воруя сегодня, делает хорошую работу по продвижению платных продуктов завтра. Большинство созданных им сайтов сдохнет, но те, кто выживут, потом купят техподдержку у вас, а не в октоберсмс.
И несмотря на то, что я начал писать дополнения еще 7 лет назад, обязательно каждый раз найдётся какой-нибудь непрошеный аноним, который будет давать мне советы, как нужно правильно.
Ведь он гораздо лучше меня всё знает: у него больше опыта, он видит статистику магазина и хостинга, знает ситуацию по развитию MODX изнутри — куда мне до него?
Спасибо, чувак, приму к сведению!
Продолжайте дальнейшую борьбу с новичками, пусть их будет меньше.
И пусть будет больше «бизнесменов» типа Стана, им не составит труда выдрать платные пакеты, а цена их услуг возрастет.
Ещё
Что я откуда выдираю, хотелось бы конкретных примеров? Иначе, уж простите, это называется пи*дабольство и чесание языком.
UPD:
У меня более вопросов нет. Спасибо!
Заказчики, мой дорогой человек, люди разные и подход ко всем неоднозначный. Есть те, которым сразу купил много пакетов «про запас и на будущее» и не ломаешь голову, а есть капризные, которым нужна демонстрация своего контента. И к сожалению, последних больше.
Хорошо хоть добрые люди из сообщества расскажут, а то так бы и помер дураком.
Звучит это так «Признаюсь я украл машину, но я на ней таксую это так хобби я просто катаюсь на ней»
И еще забавно, что вы считаете себя при этом добросовестным и честнее тех, кто зарабатывает на этом, а на самом деле одно и то же вы на халяву пользуйтесь чужим трудом: )
За хобби люди часто платят огромные деньги например хорошая резиновая лодка стоит тысяч 100
Вот сейчас, например, я решил попробовать сделать нечто коммерческое, опять же для себя, но не знаю смогу ли закончить сам и что в итоге получится и когда это получится. И мне конечно же сейчас совсем не интересно тратить деньги, но я согласен «занести» их, если что-то реально удастся заработать. Уж поверьте на слово я благодарный человек.
Просто когда ты не мегаджедайский кодер, но очень хочется что-то попробовать самому сделать, то очень сложно понять получится или нет, а закупаться каждый раз для каждой идеи — не разумно.
Меня не правильно поняли. Я клонил к тому, что есть коммерческие юзеры, а есть комюнити-пионеры. Не нужно прям бесплатно, я уважаю труд и готов платить, но мне кажется, что нужно разделять людей, которые учатся и осваиваются (делают себе сайты, блоги, портфолио) и тех у кого разработка на потоке.
Что-то типа двух версий что ли, как продают софт или свои услуги сервисы. Для личного использования — дешевле, для коммерческого — дороже. Ну просто фигня какая-то вот студия допустим пилит магазин и им ничего не стоит 5000р. потратить, когда им магаз за 200000р. заказали, или ты сам себе решил блог сделать и тебе хочется поиск, галерею и ещё каких-то примочек.
Поставьте себя на место автора дополнения или книги и посмотрите на ситуацию с другой стороны, а не мерьте все на себя.
Ты конечно можешь сказать что у разработчика не убудет от того, что кто-то украдет «для хобби», но вот тебе другая сторона медали: разработчик делает дополнение и рассчитывает выручить с него допустим 50к за 3 месяца, но тут набегают 10-20 таких как ты и просто ломают все продажи, в итоге разработчик разочаровывается в магазине и таком способе заработка и больше не выкладывает свои наработки — а значит сообщество начинает умирать.
Если ты считаешь что для того чтобы выложить дополнение достаточно просто свои наработки у клиента забрать — ты очень ошибаешься, для того чтобы выложить компонент иногда требуется потратить времени на оформление больше, чем писать этот компонент. Я лично если предполагаю что дополнение не окупит даже труды на оформление — не выкладываю его, а таких дополнений уже скопилась стопка и немного сверху.
Да и будем честны, платные в основном только дополнения для магазинов, ты делаешь магазины ради хобби? Очень сомневаюсь. А для обучения (разбора кода и кишков) есть множество других сложных бесплатных дополнений, к примеру minishop2 или migx (сам частенько в них заглядываю)
Я использую Платные mSearch (ито фильтр мне не нужен) и ms2Gallery, mSocial, Office купил все, магазина у меня нет. Есть у меня и купленные дополнения, которые я даже не использовал, т.к. показалось, что функционал мой, а оказалось немного не тот.
Ещё раз, я согласен платить, но сначала хочется компонент установить на СВОЙ сайт, настроить, попользоваться, понять, что он реально нужен и действительно решает мою задачу и что мне будет действительно жаль его удалять, и тогда совсем не жалко будет его купить.
Я понимаю, что я тут утопию нарисовал, но я думаю, что так было бы good.
Кстати, студии и так покупают дешевле — в modstore действует прогрессивная система скидок.
Просто ты за живое задел тут многих)
А флудить начали именно потому, что нет ясности. Вот и возник спор.
Пока писал, пришла идея, что таким способом можно распространять платные дополнения даже через официальный репозиторий. Не решенным остается только вопрос с одобрением таких пакетов со стороны MODX LLC.
Кстати, пока писал, пришла идея :) — наверно можно использовать динамический ключ для таких пакетов, чтобы не лазить в репо? При сборке пакета по заданным условиям его формировать, а при распаковке проверять. Теоретически возможно.
Вань, ты прикалываешься что-ли? Да нахрена его взламывать, лазить по файлам, искать где шифруется, если можно просто скопировать код? В этом случае на каком уровне твой плинтус? У меня 2 минуты заняло поставить Office на локалку — скачать с сайта (без архивирования!), выполнить ряд манипуляций (не буду говорить какие) и поставить ещё один зависимый пакет (а может не один).
И я про тоже. Только без внешних источников.
П.С. Кстати, а пользователь не знает, есть запрос на внешний источник или нет. Может и искать нет смысла.
Они точно не будут лазить и искать алгоритмы.
А алгоритмы можно придумать разные — удалить файл, или испортить исходник класса, и ещё много чего можно придумать. Т.е. и не подумаешь, что проблема в ключе. Баг какой-то. Даже если разработчик пишет тебе в техподдержку для сайта, для которого куплен компонент, просишь его выслать код класса и всё становиться ясно. Тут уж как фантазия работает.
Если привык воровать — он и будет воровать.
Шлоков правильно сказал — надо определиться что мы продаём.
Многие покупают пакеты, ни разу не обратившись в тех. поддержку — это что? Значит она ему не нужна. И в первую очередь он покупает компонент, не тех. поддержку. Моё мнение.
Что такое тех. поддержка? По моему мнению — это при изменений версий пакета, надо пройти по всем сайтам, где он установлен, с целью проверки работоспособности этого компонента. Это и будет называться тех. поддержкой, разве нет?
Даже скопированный пакет ему дает мало профита. Должны быть обновления, а для этого нужен ключ.
Есть конечно проекты, которые не обновляются, но это уже их проблемы. Потом волосы на животе рвут из-за накопленного тех. долга.
Простой пример. У меня купили дополнение месяц назад, все было тихо, я уехал в отпуск с семьей и тут срочно приходит вопрос в тех поддержку с требованием исправить? Как быть? У меня возможности нет, причина — вполне уважительная (каждый имеет право на отдых), но у человека тоже проблема, проект горит. И таких нюансов много на самом деле и они не раз обсуждались. Но как правило, все как-то решается в индивидуальном порядке. Если автор не отвечает, пишите в тех поддержку самого modstore, чтобы они разобрались с автором. Это на сегодня самый действенный вариант.
Но сам сценарий ещё стоит продумать — унесу в бэклог.
Уже сейчас в на странице автора выводится количество отвеченных/неотвеченных вопросов в ТП. По ним вы и можете выбирать себе автора, с которым хотите работать. Однако, это очень нераспространенный сценарий — дополнение, обычно, выбирают не из симпатий к автору, а из-за его функций :)
Есть идея выводить скорость реакции автора на тикеты — когда-нибудь это реализуем.
Справедливости ради. В данный момент из тысяч тикетов открыто — 5. 3 из них поступили вчера-сегодня. Я считаю, что наши авторы, в большинстве своём, достаточно дисциплинированы.
Пример.
— Нашёл баг, не работает….
— Да, есть баг, исправлю.
Проходит 3 месяца… тишина.
Однако, в большинстве случаев клиенты в течение этих 3 месяцев интересуются, почему им не ответили или пишут нам. Иначе, вероятнее всего, сами смогли решить проблему.
Есть смысл сделать возможность установки тикету статус «решенный» при каждом комментировании, после которого тикет стане только для чтения. И автоматически проставлять этот статус через N-ное количество времени у тикетов, на которые автор дополнения дал ответ, а клиент статус не поставил.
Если вы купили дополнение, это не означает, что автор как послушная собачка обязан теперь в течение года выполнять все ваши прихоти, нет. Это означает, что он должен помогать и отвечать на вопросы, но не переписывать своё дополнение под ваши хотелки.
Если вас это не устраивает — пишите администрации об обнулении покупки и возврате денег, как в App Store и Google Store. Там, кстати, вообще никакой поддержки от авторов в принципе нет.
Речь как раз о том случае, когда автор согласился с тем, что баг есть, утвердительно написал, что решит в ближайшее время, но это время всё никак не наступает.
Или когда разработчик не отвечает совсем в течение определенного времени, причём сроки никакие я не выдумывал, это должно составляться на основе статистики о среднем времени ответа на сообщения, по моему мнению.
А про прихоти и собак речи и не было, не знаю, зачем Вы это добавили.
Я может что-то не понимаю, но по-моему в этой ситуации выигрывают оба. Автор получает обратную связь, баг-репорт, практически, о работе своего расширения, что позволяет ему улучшить своё расширение, получить отзывы от реальных проектов, как кто использует его продукт, узнать какие функции интересны людям, чтобы сделать и продукт более функциональным, и привлечь большую аудиторию. А мотивирует его то, что отвечать за свои слова надо вовремя всего лишь статистикой: «Неотвеченные тикеты: 2/150».
И от этого в выигрыше все: довольные покупатели, которые получили корректно работающее то, что хотели, и автор расширения, возможно получив новый опыт, улучшив, исправив свой продукт, сообщество MODX в целом от новой возможности, которую можно внедрить на свой сайт.
Моё тоже с ошибками удаляется, правда защита там была вшита ещё до этой статьи)
Один из клиентов заметил.
Помогает принудительное удаление пакета.
Я, правда, не считаю это серьёзной проблемой и пока ещё не начал искать решение.
Решил просто — вынес его уровнем выше в папке modstore.
Но почему тогда проблема пиратства начинает волновать, когда дело касается Вашего труда. Никто не вспоминает об этом, когда качает с торрентов музыку, фильмы или софт… А ведь на эту музыку, фильмы и софт было потрачено много сил и труда.
Давайте будем честными с самими собой, если хочешь, чтобы не воровали у тебя, не воруй сам. И может когда-нибудь, через несколько десятков лет менталитет русского человека поменяется и мир станет лучше.
Лично за себя скажу: я стараюсь платить за все чем пользуюсь, не всегда получается, но я стараюсь.
Посидел, посчитал, сколько я на дополнения за последние годы потратил, оказалось не так уж и много, всего несколько десятков тысяч. Окупились ли они — думаю да! Но иногда напрягает, что на небольшой сайт небольшой стоимости приходится тратить 5-10 тыс на дополнения.
Решение проблемы, на мой взгляд, простое, не хотите чтобы воровали, сделайте дополнения дешевле, люди охотней будут покупать.Объем продаж вырастет в разы. А если хотите сидеть и плакать, за что со мной так, то и покупать не будут и воровство не прекратится. Маркетинг блин. Василий, ты же наверно владеешь информацией по продажам, замечал что рост продаж увеличивается, когда всякие акции проводятся.
Ладно я вроде все сказал, что хотел. Спасибо за внимание
Не смотря на все кризисы, рост валюты, бензин — как стоил 1990 руб, так и стоит.
Я предлагаю учитывать реальность, зная в какой стране мы живём и что население этой огромной страны, не привыкло платить, а хочет получить все нахаляву, не считая, что чужой труд чего-то стоит.
Думаю каждый из Вас сталкивался с таким типом заказчиков, который хочет получить по максимуму за минимальное количество денег.
Вижу единственный способ уменьшить количество воровства, только уменьшение стоимости компонентов. Это позволит увеличить количество продаж. А соответственно и прибыль.
Не стоит делить шкуру не убитого оленя, считая сколько бы я мог заработать, если бы мой компонент стоил… тысяч. Нужно понимать, что больше всего есть заказчиков которым предлагаешь купить фотографии, шрифты, компоненты и тогда ли всегда реагируют одинаково широко выпученными глазами, Удивляюсь что за это нужно платить деньги. И когда на компоненты и на прочую утварь для их сайта нужно выложить дополнительно 10 — 15.000 для них это немыслимая сумма. Каждый раз одно и тоже пытаешься объяснить людям, что это действительно стоит своих денег. В общем дискутировать на эту тему можно бесконечно но факт остается фактом, Мы живём в стране халявщиков, которые привыкли к тому, что они мало зарабатывают и соответственно ищут способы как и где получить на халяву или за минимальные деньги. Ну когда сумма этих завтра будет не столь велика, люди более охотно будут покупать компоненты, и как следствие воровства этих компонентов станет бессмысленным занятием. А разработчики смогут повысить количество продаж своих компонентов компенсирует низкую стоимость.
Это нивкоем случае не призыв к действию, Это размышления вслух.
Не считаю что заявления типа: Я так долго работал над этим компонентом, потратил много сил и времени выпил тонну кофе, не спал 100 ночей, не имеют никакого отношения к реальности.
Реальность заключается в том, что стоимость компонента равна той сумме, Которую зание могут дать покупателей. Если кого-то это не устраивает, тогда флаг в руки, нужно искать себе стабильную работу на которой будут платить столько сколько вы хотите.
Рассмотрим простой пример допустим буханка хлеба стоит в магазине 50 руб. возьми и увеличить стоимость этой буханки в два раза, что будет? Выручка увеличится? Нет произойдёт совсем обратное.
Все почему-то сидят и ждут заказчиков с огромными бюджетами, но на самом деле средний бюджет сайта MODX начинается от 20.000 руб. Сама система MODX предполагает низкую стоимость сайта, поэтому её и выбирают в качестве основы. Заказчики на пол 500.000 и выше никогда не будут делать сайт или интернет-магазин на MODX.
Если вы со мной не согласны, то предлагаю провести маленький эксперимент, возьмите один из своих компонентов и начните продавать в 2-3 раза дешевле, через пару месяцев возьмите калькулятор и посчитайте сколько Вы смогли продать, на какую сумму и сравните с предыдущим периодом.
Всё уже проверено: после внедрения защиты продажи моих дополнений увеличились в 2 раза. При этом по сети гуляют старые версии без защиты, которых на данный момент отслежено 2661 установки.
1 мая их было 2102, то есть прибавилось 500 штук за 2 месяца. Кто не хочет платить, тот не будет платить никогда, какую цену не поставь.
Я полностью за то чтобы люди за свой титанический труд по разработке компонентов для MODX получали соответствующее вознаграждение, но Вопрос состоит в том, что люди не готовы покупать Дорогие компоненты, так как их стоимость неоправданно для небольших сайтов. Так почему же не рассмотреть вариант продажи компонентов без техподдержки, как предлагал Иван, а при желании можно продавать её отдельно. Это позволит снизить затраты разработчиков на тех поддержку и покупателей на компоненты. Я думаю что экономика в первую очередь строится на цифрах но без Экспериментов вы никогда не узнаете сколько вы могли бы заработать при той или иной ценовой стратегии.
Вы никогда не задумывались о том, почему практически весь софт в данный момент продается по подписке? А на самом деле все предельно просто, покупать программный продукт стоимостью в несколько тыс. € одноразовым платежом крайне накладно но если платить за него две — пять тыс. руб. в месяц то это уже не так накладно. При таком раскладе все остается в выигрыше, пользователь пользуется самой последней версии продукта, разработчик имеет постоянный приток денег за свои продукты.
Из всего вышесказанного я понимаю что на самом деле никакой проблемы с пиратством нет, и всех вполне устраивает сложившаяся ситуация.
Я просто хотел предложить альтернативный способ решения этой проблемы. На 100 % проблему не решить однозначно, но можно значительно снизить Количество нелегального использования компонентов.
С другой страны говорить о том что их использование нелегально, также неверно, так как никто не продает лицензии на компоненты, продается технической поддержки. Соответственно люди которые ими пользуются бесплатно, ничего не нарушают.
А по поводу покупки компонента за 500 рублей и платы за софт 2000 — 5000 руб. в месяц, могу прокомментировать только так:
Покупка софта и оплаты различных сервисов необходимых жизни и для работы, это ответственность человека который пользуется этими программами сервисами. И кстати у меня каждый месяц выходит кругленькая сумма на оплату необходимых подписок.
А оплата компонента для MODX, это в первую очередь ответственность заказчика, так как он принимает решение об оплате этих компонентов. Разработчик же несёт ответственность в меньшей степени, если конечно его мотивация была не прикарманить деньги на компоненты.
Ещё я вижу огромную вину Василия, за то что он сделал такие великолепные дополнения, которым можно использовать практически на любом сайте, а не только в Е-коммерс
Вот я тебе даю факты: за полгода работы защиты в 3х моих дополнениях, их продажи поднялись в 2 раза.
За последние 2 месяца было 500 новых установок старых версий этих дополнений без защиты.
Ты действительно веришь, что если снизить цену и убрать защиту, то продажи вырастут еще в 2 раза, а бесплатно ставить их вообще перестанут?
Ну и самое главное: мне не нужно повышать продажи, мне бы с текущим объёмом техподдержки справиться. Когда перестану справляться — цены вырастут, чтобы урегулировать спрос.
Максимальная скидка при покупке компонента 50 %, то есть ты все равно будешь зарабатывать меньше, когда одни те же люди у тебя часто покупают компоненты. Вот и попробуй продать один компонент за пол стоимости в течение пары месяцев, без технической поддержки, потом посмотри на результаты. Если Количество покупок и прибыль не увеличится, Тогда можно с уверенностью сказать что это не работает.
От тебя это потребует минимальных вложений. Зато по результатам этого эксперимента можно будет принимать какие-то дальнейшие решения.
А ты оплатишь стоимость ненужных доработок, правильно понимаю?
Время разработчика — оно же бесплатное. Я уж молчу про возможные глюки в работе магазина и жалобах пользователей.
Я не имею никакого отношения к вашему бизнесу, рассуждаю только лишь на собственном опыте.
Принимать решение придётся вам самим, но как и в любом бизнесе любое нововведение, Это всего лишь инвестиции в развитие своего бизнеса. А для развития бизнеса необходимо проводить тестирование различных бизнес моделей. Может получиться что эта бизнес модель не сработает.
Перед запуском можно провести опрос пользователей, аудитория на сайте достаточно большая, поэтому этот опрос может быть показателен. Если интерес у потребителя будет большой, то думаю затраты на внесение изменений будут окуплены.
Если же все считают, что ничего у менять не нужно, то предлагаю на этом эту дискуссию закончить.
Повторюсь, я всего лишь высказываю свои мысли о том, как повысить продажи и уменьшить Количество нелегального использования компонентов.
С условием что обновы будут приходить в течении года, нет техподдержки и никаких накопительных скидок за эту покупку.
Хочешь дальше обновы и/или тех.поддержку? Плати фуллпрайс.
pdoTools — скачан 36 715 раз, столько сайтов его используют, и не зря, это великолепный компонент. Сколько на нем Василий заработал — 0
ms2Gallery — скачан (куплен) 2 770 раз, сколько Василий заработал, считать не будем, это не этично.
По моему мнению ms2Gallery — это второй по необходимости компонент на сайте, думаю со мной многие согласятся.
Но как видим статистика говорит о том, что ms2Gallery скачали (купили) в 13 с лишним раз меньше чем pdoTools. О чем нам это говорит? Это говорит нам о том, что цена на него завышена.
Василий, я думаю компонент давно себя окупил. Раз ты его давно не обновлял, кроме внедрения защиты, то он прекрасно работает и не требует доработок.
Попробуй продавать его за 749 руб. или 499 руб. через пару месяцев посмотришь на результаты.
Но в любом случае решать что и как продавать будет только разработчик.
pdoTools — зависимость для ms2Gallery, miniShop2, Tickets, mSearch2 и еще кучи дополнений. Без него они просто не будут работать, так что он ставится всегда вместе с ними.
Ни одно из дополнений, использующих pdoTools, не может быть популярнее чем он. На всякий случай — бесплатные дополнения тоже приносят деньги.
Дискуссия, видимо никому не интересна, начинается переход на личности, предлагаю её завершить. Я высказал свое частное мнение, при нём и останусь.
Навязывать свое мнение и обижать кого-то в мои задачи не входило.
Всем хорошего дня.
А то, что эксперт в теме не разбирается и не понимает, что pdoTools — это библиотека, написанная в ходе разработки miniShop2, который заказали за деньги и всё вместе было оплачено — ему неважно. Он видит цифры и сравнивает тёплое с круглым.
Спасибо за советы.
Мне как потребителю — это действительно не важно. Я прекрасно понимаю, что те компоненты, которые есть в Modstore, платные или бесплатные, по большей части, были разработаны под конкретного заказчика, а уже потом выложены в магазин, чтобы добро не пропадало зря. Из этого «добра», есть действительно великолепные компоненты, которые упрощают жизнь таким «лохам», как я. pdoTools — прекрасный продукт. Я в принципе готов за него платить «небольшие» деньги.
Любой компонент в магазине — всего лишь товар, который нужно продать, а как продавать и за сколько — это дело продавца (Разработчика). Я всего лишь предложил еще одну бизнес-модель.
Вообще-то разговор был начат с обсуждения пиратства, как распространенного явления:
Хотел внести свою лепту в решение данной проблемы.
Вот я, например, воспринимаю советы от Марка Хамстры — создателя и владельца modmore.com, нашего конкурента. Вот он может сказать что-то интересное о продажах дополнений для MODX в Европе, например.
Эта защита для дополнений, кстати говоря — основана на его защите, которую он придумал.
А ты же «просто аналитик» и «видишь цифры». При этом цифры ты видишь те, которые мы выводим на фасад магазина, цифр изнутри у тебя нет.
Ну и о каких советах можно говорить с посторонним человеком? Если мы с Виталей и Леонидом решим, что настало время провести апгрейд магазина и добавить туда новый функционал, они выделят средства, я найду время — вот тогда что-то новое появится.
Только так это работает, а не от советов и критики.
Никто, кстати, никого не критиковал, я помоем только хвалил твою работу. Вы проделали колоссальную работу, за что Вам честь и хвала и деньги от нас, «мерзких» земных тварей.
Высказывать свое мнение может любой, а прислушиваться или нет к чужому мнение, это дело личное для каждого человека. Какой тут может быть скрытый контекст? Предлагаю все-таки закончить обмен мнениями на позитивной ноте. Никто никому ничего не навязывает, не пытается влезть в чужой бизнес в своих «грязных» ботинках и не знаю что еще.
Я же терпеливо тебе объясняю, почему твои советы не имеют вообще никакой ценности.
Даже я, прикинь, могу высказывать своё мнение о твоих советах. Что и делаю, в свойственной мне дружелюбной манере.
Но речь совсем не об этом, это Ваши дела, мне они не интересны. Хотелось бы, чтобы Вы признали тот факт, что у самих рыльце в пушку.
И не разрешаем использовать купленное дополнение на разных сайтах. Именно потому при покупке необходимо указать домен, для которого оно покупается.
Забавно вышло.
Ловко ты жопой вилять начал, Юра.
И на что тогда ты намекал цитатой из моей заметки про борьбу с провайдером?
А еще заодно докажи вот это своё утверждение (мне очень интересно, где ты такое нашёл):
Если же это всё голословно, и ничего подтверждать ты не собираешься — я тебя отключу, за враньё.
Отключать / не отключать — твое право.
Потом обвинил лично меня в использование торрентов для нехорошего, магазин и всех авторов в нарушении соглашения MODX — а теперь тебе стало вдруг некогда?
И это при том, что сам же копируешь дополнения на свои сайты в обход магазина.
Отлично выступил, молодец!
Конкретно в этом этом случае, ты скопировал пакеты в обход магазина и установил вручную, потому что магазин запрещает так делать.
Будешь дальше тут о рассказывать про «начни с себя»?
К тому же, если будешь покупать дополнения на каждый проект, то в итоге будет скидка 50% на каждый компонент (максимальная, если не ошибаюсь). В итоге выходит не так уж и много.
П.С. Интересно, когда-нибудь русский народ перестанет впитывать западную пропаганду, что русские пьют больше всех, воруют больше всех, злее всех и вообще во всём виноваты?
Мы с Вами живем в прекрасной стране, где к сожалению очень любят халяву издавна такое повелось, Читайте классиков.
С чем это связано, да скорее всего с низким уровнем жизни. Как там на чужбине? Да тоже воруют, спору нет, но мы не о них говорим, а о нас.
В России очень сложно заработать денег, по той простой причине что наши люди пока не привыкли платить, поэтому все стараются выйти на зарубежный рынок. Люди там на порядок дисциплинированнее в плане оплаты, и уровень жизни выше.
А весь этот диалог начался с того, как в этой реальности ввести бизнес. Никакой политики не подразумевалось. Просто констатация фактов из жизненного опыта.
Халява… Может вспомним крупнейший трекер PirateBay. Это тоже русские хакеры? Или
их рождественские распродажи, где люди получают увечья за заветную вещь? Много ещё чего можно припомнить.
Наша беда в том, что такие как Вы пишете уже не задумываясь, про русских. Вот когда Вы поверите, что мы не хуже и не лучше, может быть разные, но не хуже, тогда и дело у нас пойдет.
Завидую. Наверно много где пришлось пожить и поработать. У меня опыта поменьше. Только знаю, что есть вещи, которые стоит перенять, а есть те, до которых им ещё далеко.
А по поводу дополнений хочется привести слова профессора Преображенского:
П.С. Да, ещё хорошего вечера. )
Только я ни как не пойму при чем тут вообще запад? Мы обсуждаем, те реалии, которые есть в нашей стране. Хуже они или лучше, чем на «Западе» или на Востоке, не важно. Это ни как не влияет на тот факт, что они есть.
Зачем при обсуждении желаний разработчиков вставлять эту русофобскую хрень? Отвечать не нужно.
Здесь же звучит надежда, что когда-нибудь уровень жизни людей нашей любимой и могучей родины, станет достаточным, для того, чтобы «Халявщики» наконец смогли покупать платные компоненты.
Где тут русофобия??? Я за мир и дружбу во всем мире
Касательно темы. Знаете кто придумал защиту приложений MODX? А зачем? От русских халявщиков?
Сергей, как правильно заметил Иван Климчук, дискуссия ни о чем. Все уже давным давно сказано, а мы занимаемся хер… ей. Давайте прекращать
У меня много знакомых и друзей по всему миру. Нигде нет такой пропаганды, кроме как в России. Видимо, «национальная гордость»…
Если ты и твои друзья не видят другой «такой» пропаганды, это говорит о том, что она выше качеством и лучше работает.
Взять хоть Рэмбо, убивающего русских во Вьетнаме и Афганистане — это же не пропаганда, а просто художественное кино, да?
Тем более вопрос касается если не всех, то многих.