Странно, сколько пользуюсь такой же связкой с десятком сайтов ни разу не натыкался на такую «коллизию». Статья без логов подобной «ошибки» выглядит пустоватой (логи nginx / php-fpm могли бы пролить свет на эту ситуёвину или хотя-бы помогли понять на какой стадии запрос «умирал» и с каким стактрейсом).
Вполне неплохо, но почему сервис не поддерживает самый популярный способ рассылки в соц.медия — через RSS? Это же куда удобней, при правильной настройке, чем руками тыкать каждую страницу…
Это только если у вас исключительно PHP код. Здесь же:
Композер умеет исполнять калбэки при create-project / прочих командах, проблемы в этом нет.
С использованием библиотек вы в проекте сами решаете как всё это делать, здесь же этим может заниматься фреймворк (если вас устраивает то, как он это делает), и изворачиваться распаковкой фреймворка во-внеvendor либо разработкой компонентов внутри vendor/cleverstyle/framework/components/modules выглядит как-то совсем по-идиотски
Причем здесь это? Разве компоненты относятся жестко к ядру? Это же уровень приложений, как не крути. Отсюда, функционал «ядра» (выше вам давали ссылки на то, что такое классический kernel) действительно должен быть неизменным и хранится глубоко в недрах vendor'а со своими тестами. А стандарт автозагрузки PSR позволит вам хранить ваши компоненты практически где угодно, при условии инициации загрузчика composer'a и следования стандарту автозагрузки.
CleverStyle Framework же скорее Ubuntu/Fedora, если вы понимаете о чём я.
А вы понимаете о чем вы? Вы сравниваете операционную систему на ядре linux с интерпритируемым приложением на скриптовом языке… При том, что вы не используете возможности того самого языка и разработок к нему, которые признали 99% всех крупных игроков, аргументируя это надуманными предлогами. Еще раз, посмотрите на symfony, yii2, laravel и их архитектуру, может быть все же заблуждается не все комьюнити, а вы?
Если кратко — то мешало то, как реализован HybridAuth. Мне пришлось бы всё равно делать копию если не всего HybridAuth, то его части как минимум. А набор простых патчей поддерживать проще. Ну и версия 3.х, надеюсь, когда-то выйдет в релиз, там с этим всё гораздо лучше.
Тут вы несколько лукавите. Я думаю что хватило бы наследования 3х классов через extend и перезаписи в каждом по 1-2 методов.
Конечно, способы были, тот же Composer. Но было принято решение в пользу автономности.
И тут вы опять лукавите. Автономность? Ну храните себе vendor прям в проекте на github(хотя и это не хороший тон, но не хуже текущего уж точно) или линкуйте на свои форки (их куда проще будет обновлять даже в таком виде), в чем беда то?
core это системная папка, вы туда никогда не лезете, она используется ядром
Вот как раз для это и есть, мать его за ногу, композер. Оформили свое ядро как отдельный пакет, опубликовали на packagist, в разворачиваемом (корневом) проекте подключили через require и вышло вполне себе элегантно, да и сборка и развертывание через create-project & update упростились…
Самый простой и понятный для стороннего разработчика способ — просто composer require abc в корне проекта. Система подхватит vendor/autoload.php если он существует, то есть никакой магии здесь нет.
Ну… тогда можно сказать что абсолютно все разработки на php поддерживают композер. Речь как раз таки шла о вашем движке и о тех сторонних приложениях/библиотеках, которые он использует и об удобности контроля их версий…
TinyMCE поставляется патченный, это единственный в своем роде полноценный WYSIWYG редактор (PR upstream), который работает внутри Shadow DOM + интеграция с фреймворком; стоковая версия никак не подходила, если вам Shadow DOM не нужна — можете через Bower/NPM подключать стоковую
Не работал плотно с TinyMCE и «shadow dom», но имею опыт работы с Ckeditor — для меня не составило никакой проблемы форкнуть его без изменений, поверх наложив свои конфиги и плагины…
HybridAuth так же патченный, поскольку стабильная версия много взаимодействует с суперглобальными переменными, в то время как фреймворк умеет не умирать и работать в режиме высокопроизводительного HTTP сервера, что требует Request/Response прослойки в HybridAuth, изменения в библиотеке документированы
Опять же, что мешало вам наследовать реализацию HybridAuth, в которой содержался злополучный exit/die или throw new Exception() и в своей прослойке переработать/изменить эти методы?
в thirdparty лежит патченная версия PhpMailer (там конструктор был лишним) и некоторые другие сторонние компоненты, необходимые для автономной установки
Ну что ж вы, там далеко не только PhpMailer, там есть еще ряд занятных библиотек. Опять же, разве не было иного способа, кроме как тащить все это путем копирования в проект?
К чему я все это — такой «разброс» содержимого «сторонних» библиотек по всему проекту по началу вводит в недоумение, а в конце-концов будет очень сильно сбивать с толку того, кто будет работать с вашей системой, а для вас это выльется в сотни человека-часов потраченных на то, что composer и прослойка extend-а делает автоматически… Обратите внимание, большинство проектов пытаются следовать хоть какому-то, но унифицированному стилю — 3'rd party — значит vendor, расширение/патчинг — значит extend, автозагрузка — psr0/4 и так далее, а у вас все получается в куче, которая к сожалению понятна лишь вам и, пожалуй, богу, что на корню убивает желание взять и работать с вашей системой, без процедуры самобичевания и поиска нужного по тоннам вложенных папок…
Пожалуй у этого автора код не полностью плачевен, по сравнению с публикациями за последний месяц в тег php. Но может вам все же стоит задуматься над PSR, composer'ом (в описании у вас указана его поддержка, но какими путями я так и не понял), избавиться от излишних Singleton'ов и попробовать следовать принятым паттернам проектирования?
Мне честно не ясно, почему у вас «сторонние» приложения раскиданы по всему проекту: раз, два, три — как же вы будете следить за их версиями, обновлениями, безопасностью? Это же дико как не удобно, мне никак не понять смысл использования велосипеда и билдера — это же какой-то дикий ад…
И да, ваша реализация стандарта «одиночки» это пожалуй самая дикая и бессмысленно навороченная реализация, которую я видел…
Давайте попробуем вразумить автора этого «кода» и наставить его на путь истинный, если конечно это возможно…
1. Обратите внимание на рекомендации по стилю форматирования кода — PSR. В вашем случае, вопросы вызывают именования переменных и функций через-раз в under_scope и camelCase. В PSR описано что когда и как нужно применять. Обратите внимание на global, но судя по документации битрикса от этого не избавиться никак…
2. Я не нашел пожалуй ни единого оправдания для использования такого лапше-кода:
Структурно он выглядит очень дико и иррационально. По пунктам:
Много излишней вложенности. Мне честно не ясно что делает код в preg_replace и с чем, это видимо не известно и самому автору, пожалуй остался только бог… но многие if-ы можно запросто обрезать или вложить в 1 контейнер
Почему функция возвращает 2 разных по типу результата? В одном случае это bool — return false; а во втором это будет return; что даст null
Почему используется не строгая типизация в условиях if? (== вместо необходимого ===)? Модуль — ваш, обертка к модулю — ваша. Поясните, откуда взялось это: $aResult['allow'] == 1? Почему ваш же модуль не генерирует bool, а если и генерирует bool почему вы сравниваете его с неявной типизацией == с Integer ?
На этом я пожалуй остановлюсь, у меня нет желания изучать сам модуль и какие аргументы и каким образом он передает в onBeforeЧетатам() этого хука форм, но даже эта реализация говорит о том, что в коде самого модуля происходит что то ужасное.
П.с. — друзьям и всем, кому интересен «битрикс» и его «инновации» в мир веб-программирования (сарказм): вот так истинные «джедаи» генерируют ошибки:
$APPLICATION->ThrowException($err_str);
а вы там все используете свои try-catch блоки для обработки и throw new для генерации…
Держите пациента, выше кто то обсуждал психологию и психиатрию. Не толкуйте то, что не изучали заученными фразами — далеко даже не половина была богословами.
Что-то мне подсказывает, что этот закон будет реализовываться так же, как и остальные в данной сфере. Не думаю, что депутаты и прочее «высшее звено» резко перестанет ходить с самими новыми версиями планшетиков и телефонов от всеми любимой американской фирмы с китайским производством и резко пересядет на российские, опять же собранные в Китае )
А вот для тех, кому действительно важны вычислительные мощности, надежность и безопасность оборудования, а не система «чужой-свой» на откаты, могут начаться не очень приятные времена с гос.закупками (к примеру, сфера науки, образования… )
Может вам стоит задуматься над качеством кода? Нет, я все понимаю, что сделано из хороших убеждений, но то в каком оно виде предоставлено это полный атас. Зачем изобретать велосипед и писать непонятную приблуду в виде «telegram-site-helper-install.php», в котором основной код приложения захардкожен в строки и обернут в base64. Вы серьезно думаете, что это будет удобно дорабатывать? А что со стилем кода, неужели вы до сих пор используете php 4 и эта версия вам не позволяет ввести классы, пространства имен, описать взаимодействия интерфейсами? Может стоит организовать код в виде composer пакета, разделив front и back end части?
И да, напоследок (и такого в коде не мало):
Согласен с вами — если идиот лепит на мех.мод бак с гибридным коннектором, то это скорей всего номинант «премии Дарвина», чем доказательство опасности «электронных сигарет».
Годно, но можно пойти дальше. Взять стандартную модель, которую мы наследуем — Illuminate\Database\Eloquent\Model и расширить (extend'нуть) ее ровно на аналогичный метод универсально для всех моделей. Но как говорит комментатор выше — это уже сделано в новой версии.
Я думаю это не имеет значения, т.к. в системе могло быть что угодно, хоть набор скриптов на perl'e. Дело в том, что эта настройка затрагивает только nginx и генерацию letsencrypt. В битриксе вы не делаете абсолютно ничего.
П.с. — для интереса, пройдите поиском по своему тексту на слова «битрикс» — их там ровно 0 не считая заголовок.
Прочитал статью до конца, думаю вполне годный материал для новичков(хоть подобные материалы уже и есть на хабре). Но назрел 1 вопрос по релевантности заголовка статьи к ее содержимому — "а где и причем тут битрикс?".
Кажется в этот раз они его всё-таки протащат, но думаю это вряд-ли вызовет какие-либо глобальные проблемы у сферы, закон скорей всего для «точечного» применения для борьбы с неугодными и угождения копирастам.
Выглядит так, будто вы пытаетесь сдать реферат в институте, а у вас его не принимают и вы пытаетесь добавить «больше воды». Возможно вы невнимательно прочли мой вопрос, а возможно некомпетентны в нем, постараюсь разъяснить. Вы описываете «скриншотами» некий технический комплекс, который по средствам взаимодействия с его API позволяет получить ту или иную релеватную выдачу в зависимости от запроса и данных, введенных пользователем. Так вот, технический интерес представляет как раз таки работа вашего технического комплекса и его организация, но никак не алгоритм взаимодействия с его API по средствам JSON (это пожалуй известно даже новичкам, а детальная информация уже есть на сайте сервиса). Под «работой технического сервиса» понимается набор приложений (баз данных, поискового движка, программного кода который все это связывает) и то как они организованы, чего здесь нет и статья вряд ли может находится в техн. разделе этого ресурса.
Вся принципиальная разница лишь в том, что вы не описываете этот самый процесс (нет никаких технических аспектов, ни алгоритмов, ни ПО, ни программного кода), а просто рекламируете свой сервис. Единственный хаб для данного, кхм, поста — это «Я пиарюсь».
Вот хоть убейте, но каким образом этот рекламный пост относится к разделу разработки? Вы серьезно считаете, что ~1к тексто-символов, размытые 4мя скриншотами и 1 логотипом можно считать за техническую статью?!
Почему эта «пиарщина» не в блоге компании?! Почему не в «я пиарюсь» (кармы нахватает?)?
Каким боком это относится к Data mining? Вы описываете технические аспекты реализации или просто пришли вбросить 4 ссылки на ваш сервис?
П.с. — вы не на мегамозг пишите, будьте добры, либо оформляйте статьи так, как соответствует техническим материалам, или пишите в соответствующие разделы/хабы.
Композер умеет исполнять калбэки при create-project / прочих командах, проблемы в этом нет.
Причем здесь это? Разве компоненты относятся жестко к ядру? Это же уровень приложений, как не крути. Отсюда, функционал «ядра» (выше вам давали ссылки на то, что такое классический kernel) действительно должен быть неизменным и хранится глубоко в недрах vendor'а со своими тестами. А стандарт автозагрузки PSR позволит вам хранить ваши компоненты практически где угодно, при условии инициации загрузчика composer'a и следования стандарту автозагрузки.
А вы понимаете о чем вы? Вы сравниваете операционную систему на ядре linux с интерпритируемым приложением на скриптовом языке… При том, что вы не используете возможности того самого языка и разработок к нему, которые признали 99% всех крупных игроков, аргументируя это надуманными предлогами. Еще раз, посмотрите на symfony, yii2, laravel и их архитектуру, может быть все же заблуждается не все комьюнити, а вы?
Тут вы несколько лукавите. Я думаю что хватило бы наследования 3х классов через extend и перезаписи в каждом по 1-2 методов.
И тут вы опять лукавите. Автономность? Ну храните себе vendor прям в проекте на github(хотя и это не хороший тон, но не хуже текущего уж точно) или линкуйте на свои форки (их куда проще будет обновлять даже в таком виде), в чем беда то?
Вот как раз для это и есть, мать его за ногу, композер. Оформили свое ядро как отдельный пакет, опубликовали на packagist, в разворачиваемом (корневом) проекте подключили через require и вышло вполне себе элегантно, да и сборка и развертывание через create-project & update упростились…
Ну… тогда можно сказать что абсолютно все разработки на php поддерживают композер. Речь как раз таки шла о вашем движке и о тех сторонних приложениях/библиотеках, которые он использует и об удобности контроля их версий…
Не работал плотно с TinyMCE и «shadow dom», но имею опыт работы с Ckeditor — для меня не составило никакой проблемы форкнуть его без изменений, поверх наложив свои конфиги и плагины…
Опять же, что мешало вам наследовать реализацию HybridAuth, в которой содержался злополучный exit/die или throw new Exception() и в своей прослойке переработать/изменить эти методы?
Ну что ж вы, там далеко не только PhpMailer, там есть еще ряд занятных библиотек. Опять же, разве не было иного способа, кроме как тащить все это путем копирования в проект?
К чему я все это — такой «разброс» содержимого «сторонних» библиотек по всему проекту по началу вводит в недоумение, а в конце-концов будет очень сильно сбивать с толку того, кто будет работать с вашей системой, а для вас это выльется в сотни человека-часов потраченных на то, что composer и прослойка extend-а делает автоматически… Обратите внимание, большинство проектов пытаются следовать хоть какому-то, но унифицированному стилю — 3'rd party — значит vendor, расширение/патчинг — значит extend, автозагрузка — psr0/4 и так далее, а у вас все получается в куче, которая к сожалению понятна лишь вам и, пожалуй, богу, что на корню убивает желание взять и работать с вашей системой, без процедуры самобичевания и поиска нужного по тоннам вложенных папок…
Мне честно не ясно, почему у вас «сторонние» приложения раскиданы по всему проекту: раз, два, три — как же вы будете следить за их версиями, обновлениями, безопасностью? Это же дико как не удобно, мне никак не понять смысл использования велосипеда и билдера — это же какой-то дикий ад…
И да, ваша реализация стандарта «одиночки» это пожалуй самая дикая и бессмысленно навороченная реализация, которую я видел…
1. Обратите внимание на рекомендации по стилю форматирования кода — PSR. В вашем случае, вопросы вызывают именования переменных и функций через-раз в under_scope и camelCase. В PSR описано что когда и как нужно применять. Обратите внимание на global, но судя по документации битрикса от этого не избавиться никак…
2. Я не нашел пожалуй ни единого оправдания для использования такого лапше-кода:
Может стоило оформить это как-то так:
3. К этому участку кода претензий не меньше:
Структурно он выглядит очень дико и иррационально. По пунктам:
На этом я пожалуй остановлюсь, у меня нет желания изучать сам модуль и какие аргументы и каким образом он передает в onBeforeЧетатам() этого хука форм, но даже эта реализация говорит о том, что в коде самого модуля происходит что то ужасное.
П.с. — друзьям и всем, кому интересен «битрикс» и его «инновации» в мир веб-программирования (сарказм): вот так истинные «джедаи» генерируют ошибки:
а вы там все используете свои try-catch блоки для обработки и throw new для генерации…
без копипастыболее информативноА вот для тех, кому действительно важны вычислительные мощности, надежность и безопасность оборудования, а не система «чужой-свой» на откаты, могут начаться не очень приятные времена с гос.закупками (к примеру, сфера науки, образования… )
И да, напоследок (и такого в коде не мало):
П.с. — для интереса, пройдите поиском по своему тексту на слова «битрикс» — их там ровно 0 не считая заголовок.
Почему эта «пиарщина» не в блоге компании?! Почему не в «я пиарюсь» (кармы нахватает?)?
Каким боком это относится к Data mining? Вы описываете технические аспекты реализации или просто пришли вбросить 4 ссылки на ваш сервис?
П.с. — вы не на мегамозг пишите, будьте добры, либо оформляйте статьи так, как соответствует техническим материалам, или пишите в соответствующие разделы/хабы.