Lazyload Битрикс (ленивая загрузка картинок)

Для ускорения загрузки сайта, часто применяется laziload картинок, то есть загружаются только те картинки, которые попадают в область видимости.
В битриксе можно настроить так:

BX.ready(function() {
	setTimeout(function() {
		BX.LazyLoad.showImages(true);
		window.addEventListener("scroll", BX.LazyLoad.onScroll);
	}, 0);
});
<img id="product_image_<?=$arItem['ID']?>"										  class=""										    src="<?=SITE_TEMPLATE_PATH?>/images/loader.gif"											data-src="<?=$img['src']?>"										    alt="<?=$a_alt;?>" title="<?=$a_title;?>"								/>										<script>BX.LazyLoad.registerImage("product_image_<?=$arItem['ID']?>");</script>

Битрикс доработка модуля яндекс маркет

В маркетплейса Битркиса есть модуль https://marketplace.1c-bitrix.ru/solutions/yandex.market/ который подготавливает прайс-лист для Маркета и Беру.
Задача: наличие товара задается в дополнительном св-ве, а не используется стандартный функционал Битрикса, нужно испольуя это свойство корректно заполнить прайс

Для этого в настройках модуля, в сопоставлении полей полю available сопоставляем наше свойство. При отсутсвии товара, в свойстве передается значение Под заказ
В init.php добавляем следующий обработчик:

use Bitrix\Main;
use Yandex\Market;

$eventManager = Main\EventManager::getInstance();

$eventManager->addEventHandler('yandex.market', 'onExportOfferExtendData', function(Main\Event $event) {

    /** @var $tagValueList Market\Result\XmlValue[] */
    $tagValueList = $event->getParameter('TAG_VALUE_LIST');

    foreach ($tagValueList as $elementId => $tagValue)
    {
        $available = $tagValue->getTagAttribute('offer', 'available');
        if($available == 'Под заказ'){
            $tagValue->setTagAttribute('offer', 'available', 0);
        }
    }

});

Битрикс24 отключение уведомлений в коробке

Задача: не слать уведомления при добавлении контакта и когда пользователь перестает быть ответственным за контакт.

Реализуется через обработчик, размещается в init.php

// уведомления
 AddEventHandler("im", "OnBeforeMessageNotifyAdd", "___OnBeforeMessageNotifyAdd");

function ___OnBeforeMessageNotifyAdd($arFields){
  
    if($arFields['TO_USER_ID'] == 284 && 
   (
      substr_count($arFields['MESSAGE'], 'Вы назначены ответственным за контакт') > 0 || 
      substr_count($arFields['MESSAGE'], "Вы перестали быть ответственным за контакт") > 0
   )
){
    return false; 
    }  
}

Битрикс24 (коробка) отметка прочитанные уведомления

Часто в уведомления падают куча сообщений, от скриптов, ботов, бизнес-процессов. Терять их не хочется, но и читать каждое нет времени. «Прочитать» их можно следующим образом:

CModule::IncludeModule("im");

$im = new CIMNotify($userId);
$notRead = $im->GetUnreadNotify();
$ids = array_keys($notRead['notify']);
if($ids){
    foreach ($ids as $value) {
        $im->MarkNotifyRead($value);
    }
}

Opencv python поиск лиц на фото

import cv2
image_path = "1.jpg"
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
image = cv2.imread(image_path)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(
    gray,
    scaleFactor= 1.1,
    minNeighbors= 5,
    minSize=(10, 10)
)
faces_detected = "Лиц обнаружено: " + format(len(faces))
print(faces_detected)
# Рисуем квадраты вокруг лиц
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (255, 255, 0), 2)
# viewImage(image,faces_detected)

cv2.imshow("Original image", image)
cv2.waitKey(0)

Битрикс: скачать и распаковать многотомный архив бекапа в Windows

Так как у меня установлен wget, то и скачивать буду им. Для этого нужно создать файл с перечнем всех частей, например url.txt с содержимым:

https://blablabla.ru/bitrix/backup/blablabla_20191127_191708_nosql_9cb4a562.tar.gz
https://blablabla.ru/bitrix/backup/blablabla_20191127_191708_nosql_9cb4a562.tar.gz.1
https://blablabla.ru/bitrix/backup/blablabla_20191127_191708_nosql_9cb4a562.tar.gz.2
...
...
...
...
https://blablabla.ru/bitrix/backup/blablabla_20191127_191708_nosql_9cb4a562.tar.gz.25

Далее запускаем wget:

wget -P D:\ -i D:\url.txt

-P — в какую папку сохранять

-i — файл с перечнем архивов

Объединяем файлы в один, выполнив в cmd:

type blablabla_20191127_191708_nosql_9cb4a562.tar.gz* >> arch.tar.gz

И затем, я использовал 7-zip архиватор, для разархивирования, получившегося архива

Битрикс24(коробка) уведомления только с упоминанием

Упоминания о комментариях в задачах, только если есть упоминание пользователя

AddEventHandler("im", "OnBeforeMessageNotifyAdd", "___OnBeforeMessageNotifyAdd");

function ___OnBeforeMessageNotifyAdd($arFields)
{
    if($arFields['NOTIFY_MODULE'] == 'tasks' && $arFields['NOTIFY_EVENT'] == 'comment'){

        $rsUser = CUser::GetByID($arFields['TO_USER_ID']);
        $arUser = $rsUser->Fetch();
        $name = $arUser['NAME'].' '.$arUser['LAST_NAME'];

        if(substr_count($arFields['PUSH_MESSAGE'], $name) == 0){
            return false;
        }
    }
    
}
$arFields['NOTIFY_MODULE'] == 'tasks' - уведомления из задач
$arFields['NOTIFY_EVENT'] == 'comment' - комментарии

Установка бесплатного ssl сертификата Let’s Encrypt на сервер Ubuntu (Apache)

Добавим репозиторий:

sudo add-apt-repository ppa:certbot/certbot

Обновим пакеты:

sudo apt-get update

Установим cerbot:

sudo apt-get install python-certbot-apache

Создадим сертификат для домена:

sudo certbot —apache -d example.com

example.com — ваш домен

Добавим автоматическое переиздание сертификата:

sudo certbot renew —dry-run