• Почему некоторые программисты на GO работают с бд на голом SQL без ORM?

    vabka
    @vabka
    Токсичный шарпист
    Не гошник, но расскажу в целом.
    1. На 1 уровень абстракции меньше. При работе с ORM нужно думать одновременно и об особенностях твоей ORM-ки и об особенностях базы.
    2. На сыром SQL некоторые вещи сделать проще, чем с ORM-ками.
    3. Лучше сырой SQL, чем тупая ORM-ка.
    4. Некоторые ORM-ки могут негативно влиять на производительность.

    Если тебе приходится при работе с ORM писать куски SQL-я (например для WHERE), передавать названия колонок в параметрах, и при этом ты не можешь использовать специфику твоей базы не опускаясь до уровня сырого SQL, то это плохая ORM.

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

    Нормальные ормки я пока видел только:
    1. В C# из-за Linq
    2. В Rust из-за макросов.
    Ответ написан
    8 комментариев
  • Как отловить изменение конкретного поля в HL-блоке?

    OnBeforeUpdate
    запоминаете значения поля в статическую переменную

    OnAfterUpdate
    сравниваете с текущим значением. если отличаются выполняем свою логику
    Ответ написан
    Комментировать
  • Как добавить всплывающее окно на сайт 1с битрикс?

    godsplane
    @godsplane
    1. Заходим на https://freelance.habr.com/
    2. Ищем исполнителя
    3. Оплачиваем заказ
    4. Получаем результат
    Ответ написан
    Комментировать
  • Как скрыть конректую страницу от индексации в Bitrix через добавление метатега?

    opium
    @opium
    Просто люблю качественно работать
    А не проще в роботс это прописать одной строкой, чем код портить
    Ответ написан
    2 комментария
  • Хорошая ли стратегия разбивать монолит джанго на микросервисы джанго?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Смотри. Уже прошло время когда все пилили монолиты на микросервисы. Щас пошло переосмысление.
    Объективно есть 2 причины пилить. Первое - организационная. Команда по какой-то причине не хочет
    или не может поддерживать приложение. Или там что-то с бизнесом. Слияние. Поглощение. Передача
    проекта другой команде в поддержку. Тогда берут и ставят задачу раздела отвественностей.
    Конвей про это писал еще.

    И второе - это баланс нагрузки и децентрализация. Про failover тут еще даже речи нет. Это
    тяжелая тема и распилить монолит так чтобы его части были отказоустойчивы очень трудно. Более
    того в случае синхронных взаимодействий между частями микросервисов может быть даже падение
    перформанса
    . Да. Теоретики которые там пишут восторженные отзывы - совершенно игнорируют
    накладные на RPC. И не упоминают что в монолите цена RPC была равна нулю. Иногда RPC заменяют
    на MQ - но это новая архитектура и это надо полностью переделывать бизнес.

    И что делать с базой данных? Это тот еще вопрос. Я почти готов спорить что вы базу пилить не будете.
    И что в результате будет? Иммитация микро-сервисов? Где слабая связность?

    Тоесть если у вас нет таких кричащих ситуаций что оргазниация требует или нужно баланс
    нагрузки как-то разнести - то тебе вообще-вообще нет смысла ходить ни в какие микросервисы.

    Но имеет смысл сделать модуляризацию монолита. Например что там...
    application
    - sales
    - hiring
    - userprofiles

    Тоже очень полезно для управления сложностью. И пускай себе будет монолит зато будет сильный
    контроль за изменениями.
    Ответ написан
    6 комментариев
  • В каком месте компонента sale.order.ajax заполняется письмо?

    @PetrPo
    В редактировании почтового шаблона в режиме "визуальный редактор" справа есть панель с компонентами, вместо #ORDER_LIST# можно вставить
    Магазин -> Персональный раздел -> Подробная информация о заказе для почты
    bitrix:sale.personal.order.detail.mail

    Можно подключить свой шаблон компонента, размещать надо в шаблоне сайта .default
    /bitrix/templates/.default/components/bitrix/
    или
    /local/templates/.default/components/bitrix/
    Ответ написан
    Комментировать
  • Автоматический кроп фото на сайте?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Фотошоп + экшн в 4 кнопки. Слить всю папку локально и натравить на нее экшн в батч режиме. Средствами серверного ПО имхо это малореально.
    Ответ написан
    9 комментариев
  • Что лучше Phpstorm vs VS code?

    sim3x
    @sim3x
    Phpstorm
    Ответ написан
    Комментировать
  • ООП в php - не понимаю объекты, неправильно передаю ссылки?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Здесь неправильно не то что всё, а даже больше.
    Потому что ёще до того как вы взялись писать этот "класс", не выучив даже базовый ООП синтаксис, код вашей "функции" уже был очень плохой.

    Я сейчас напишу минимально приемлемый вариант, но повторять его не надо. Потому что всё равно непонятно будет.
    Надо забыть временно про классы и учить базовый синтаксис РНР. Просто потому что сначала надо выучить базовые понятия - работу с БД, обработку ошибок, разделение ответственности:
    - работа с переменными в запросе ведётся через параметризованные запросы
    - код класса не должно тошнить прямо на экран сообщениями об ошибках
    - метод getArray не должен возвращать объект класса mysqli_result. он должен возвращать массив
    - код, который будет в дальнейшем работать с результатом вызова метода getArray, не должен ничего знать про базу данных

    Про сам же код ООП надо хотя бы один раз посмотреть его в учебнике, а не писать на основе чистой фантазии.
    class CProducts
    {
        private $link;
        public function __construct(mysqli $link) {
            $thi->link = $link;
        }
        public function getArray($lim) {
            $query = "SELECT * FROM products ORDER BY DATE_CREATE DESC LIMIT ?";
            $stmt = $this->link->prepare($query);
            $stmt->bind_param("s", $lim);
            $stmt->exeсute();
            $result = $stmt->get_result();
            return $result->fetch_all(MYSQLI_ASSOC);
        }
    }
     
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $db = new mysqli($host, $user, $pass, $dbname);
    $db->set_charset('utf8mb4');
    $db->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);
      
    $product = new CProducts($db);
    $result = $product->getArray(3);
    Ответ написан
    Комментировать
  • Как сделать микроразметку на сайте?

    1) Пройти курсы битрикса и сделать самому
    2) Нанять исполнителя за денежку
    Ответ написан
    Комментировать
  • Как отслеживать событие подписки на отсутствующий товар в 1С-Битрикс?

    @PetrPo
    $eventManager = \Bitrix\Main\EventManager::getInstance();
    $eventManager->addEventHandler('catalog', '\Bitrix\Catalog\Subscribe::onAfterAdd', ['СatalogEvents', 'onAfterAddSubscribe']);

    Создаешь шаблон письма, в событии его отправляешь
    Ответ написан
    9 комментариев
  • Как в Битриксе отправить уведомление на емайл о добавлении элемента через сайт в инфоблок?

    alexyarik
    @alexyarik
    Битрикс разработчик
    В файле init.php пишите свой обработчик, пример ниже
    https://dev.1c-bitrix.ru/learning/course/index.php...
    <?// регистрируем обработчик уведомления
    AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("MessageAdd", "OnAfterIBlockElementAddHandler"));
    
    class MessageAdd
    {
        // создаем обработчик события "OnAfterIBlockElementAddHandler"
        function OnAfterIBlockElementAddHandler(&$arFields)
        {
            if($arFields["ID"]>0) 
    		{	
               If($arFields['IBLOCK_ID'] == 4) 
    		   { 
    
    									$arSend = array(
    					'TEXT' => $arFields['NAME'].' - товар '.$preview_picture.''.$detail_picture.''.$section.' , ID товара ='.$arFields["ID"]);
    					$arrSite = 's1';
    									CEvent::Send('ART_DTEX_IMPORT',$arrSite,$arSend);
    			}
    	    } 
        }
    }
    Ответ написан
    3 комментария
  • За что отвечает подключение mysql в .settings.php bitrix?

    no_one_safe
    @no_one_safe
    Bitrix очень старая cms. Часть функционала устарела, но не удаляется по соображениям обратной совместимости. Старый функционал берет подключение из dbconn.php, новый уже из .settings.php
    Но часто старый код взаимодействует с новым. Поэтому подключение указывается в 2х местах. Лет через 10 будет наверное в дном месте, когда все перепишут :)
    Ответ написан
    2 комментария
  • Как быстро проверить, является ли некоторое огромное число (от 100 знаков) квадратом целого числа?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Можно попробовать вычислить корень быстрым алгоритмом. Но там сложно. Гуглите Karatsuba square root. Есть открытые реализации. Есть еще какой-то адский метод через быстрое преобразование Фурье, попробуйте погуглить и его.

    Более простой в реализации, но менее быстрый метод вычисления корня - бинарный поиск. Храните l, r, l^2, r^2 и lr. По этим числам можно вычислить m=(l+r)/2, m^2, m*l, m*r без длинных умножений, а только складывая длинные числа и деля на 2. Вам надо поддерживать, чтобы l^2 <= n <= r^2. Изначально можно сделать l=1, r=10^51 (или больше - половина длины входного числа + немного, чтобы точно квадрат был больше n), потом делить отрезок пополам и отбрасывать ненужную половину.

    Еще есть вероятностный метод через символ Лежандра/Якоби. Это будет самым быстрым методом.

    Это как смотреть на последнюю цифру. Квадраты могут давать там 0, 1, 4, 9, 6, 5. Но нет ни одного квадрата, который оканчивался бы на 2. Т.е. если число заканчивается на 2, то можно сразу говорить, что это не квадрат. Это мы взяли остаток от деления на 10 (последняя цифра) и посмотрели, какие из них хорошие. Вот символ Лежандра - это такая проверка для модуля по любому простому числу (а не 10).

    Если брать некоторое простое число p, то n может быть квадратом, только если символ Лежандра (n/p) - равен 1 или 0 (По научному: n - должно быть квадратичным вычетом).

    Если брать небольшие (<64-битные) простые числа, то можно за линию считать n%p и потом вычислять символ Лежандра (n%p/p) по алгоритму через символ Якоби за O(log(p)^2). Когда подсчитали символ Лежандра и если он -1, то n - точно не корень.

    Тут проблема в том, что это необходимый, но недостаточный критерий - если для какого-то p вы получили -1 - то это точно не квадрат. Но возможно можно подобрать такое число, что все ваши тесты дадут 1, а оно не квадрат. Поэтому надо брать много простых чисел. Скажем, 20. Желательно еще числа брать достаточно большими. Но их не надо искать каждый раз, можно захардкодить. Грубая прикидка говорит, что вероятность ошибки такого алгоритма 2^(-количество простых чисел).

    Т.е. берете много простых чисел. Считаете для каждого n%p выполняя деление большого числа на короткое (один проход по массиву цифр). Потом считаете символ Лежандра. Если получили где-то -1 - то точно не квадрат. Иначе - скорее всего квадрат.

    Можно совместить вероятностный тест и вычисление корня. Сначала проверьте парочку простых чисел на символ Лежандра для отсечения точно не квадратов. Еще проверку последней цифры можно сделать, это очень дешево. Если не отсеклись, то считайте корень. Так будет всегда работать правильно но будет быстрее работать в некоторых случаях.
    Ответ написан
    Комментировать
  • Поможет ли сертификат 1c-битрикс при собеседовании на работу?

    babarun
    @babarun Куратор тега 1С-Битрикс
    Безумный план моих идей в руках больных людей
    Когда идёт подбор сотрудников на проект, то как правило в день просматриваю до 20 анкет присланных от hr и что бы выделиться из общей массы наличие сертификатов всегда полезно, однако это лишь привлекает внимание и если на встрече оказывается что эти сертификаты не подкреплены реальными знаниями, то я обычно злюсь пуще прежнего.
    Ответ написан
    1 комментарий
  • Django или 1С-Битрикс?

    @anton99zel Куратор тега 1С-Битрикс
    29а класс средней школы №7
    Вот стоит ли вообще туда совать свой нос? Как поступить?

    Ох, уж эти разработчики...
    Любят навязывать клиенту не то, что нужно клиенту, закрывая его потребности и задачи, включая возможное масштабирование в будущем, а руководствуясь лишь уровнем знаний в отдельно взятом направлении.
    Если Вы не знаете Битрикс, то за месяц не сделаете проект full. Возможно сделать какой-либо информационный сайт, да и то на уровне инфоблоков и компонентов, а CRM с хорошей админкой как минимум потребует знаний api, а в Битрикс api не очень хорошо документировано.
    Более того, что бы вы не выбрали, наговнокодить можно везде и тогда сайт накроется будь это Битрикс или что-то другое.
    Помимо самого Битрикса, необходимо иметь знания по настройке серверов, оптимизации mysql, nginx. Но это практически везде нужно и к вопросу не относится.
    Отсюда ответ на ваш вопрос:
    Если текущие задачи и будущие удовлетворяют ваши потребности, а вернее потребности клиента, при использовании PostgreSQL + Django + Redis - то нужно использовать его.
    Стоит понимать, что Bitrix Framework это PHP платформа для разработки веб-приложений, и если не обращать внимания на тех, кто просто не умеет его готовить (потому что надо не использовать шаблонное мышление), то это отличная платформа для создания разного рода проектов, будь то интернет-магазин, crm, инфосайт с интеграцией с платежными средствами, доставками, интеграцией 1С и маркетплейсами. Однако, Битрикс больше заточен под Интернет-магазины, и как бы его не ругали (обычно ругают те, кто с Битриксом никак не работает, от силы пару раз видел код 10 лет назад и не сделал ни одного проекта на нем...), для среднего и малого бизнеса альтернатив нет. Те, кто скажут Вордпресс или Опенкарт - ребята, не смешите, на Битриксе без танцев с бубном будут работать доставки, 1с и оплаты, а также ряж выгрузок в маркетплейсы, пока вы ищите модули для опенкарт....или что там у вас... Кеширование, технология композитный сайт и CDN вкупе с хорошо написанным кодом и настроенным сервером - дают достаточно быстрый результат.
    Если Клиенту нужен Битрикс, то стоит найти другого специалиста для решения его бизнес задач, а не навешивать ему Django, только потому что вы его знаете.
    простую crm систему

    А не изобретаете ли вы велосипед?
    1С Предприятие с прикрученной Веб мордой чем не CRM?
    Ответ написан
    1 комментарий
  • Битрикс, торговые предложения на JS?

    babarun
    @babarun Куратор тега 1С-Битрикс
    Безумный план моих идей в руках больных людей
    Как вы в своих шаблонах управляете торговыми предложениями на js без битриксового функционала?
    А зачем без него? Какой смысл вы вкладываете во фразу "на js без битриксового функционала" - в смысле без штатных компонентов catalog* ?

    А вот как для них сделать переключатель, не могу понять.
    Посмотреть как это сделано в стандартном магазине и сделать аналогично
    Ответ написан
    Комментировать
  • Как найти метод с медленным запросом к БД и как сократить время выполнения?

    smilingcheater
    @smilingcheater
    У вас эти картинки реально на файловой есть? Выглядит так, будто картинки нет, вместо неё возвращается 404, которая отдаётся битриксом. Я бы предложил открыть в браузере 404, включить битриксовую отладку (панель эрмитажа, развернуть, кнопка "Отладка") и в выведенной отладочной информации искать виновника.

    На вашем скрине в статистике время выполнения запросов порядка 0.25-0.35 сек, но время выполнения всей страницы доходит до 4-5 сек. Выглядит так, будто какой-то тяжёлый компонент на 404 работает с выключенным кешированием.

    А ещё лучше - настроить, чтобы картинки отдавал NGINX, и 404 на картинки тоже он.
    Ответ написан
    1 комментарий
  • Сколько времени занимает разработка?

    DevMan
    @DevMan
    примерные сроки: от нескольких недель до никогда.
    Ответ написан
    Комментировать