Производство фотообоев в Новосибирске. Интернет магазин фотообоев. Изготовление - один день! Каталог 10 000 изображений!
12 Март 2023

BITRIX — убираем атрибуты type в теге script и лишние закрывающие слешы

При проверке на валидность страницы сайта на CMS Битрикс валидатор ругается на присутствие type в теге script (устаревший атрибут)

Warning: The type attribute is unnecessary for JavaScript resources.

а так же на лишний закрывающий тег в одиночных тегах (тоже устаревшая запись)

Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.

решение — вешаем обработчик на OnEndBufferContent и вырезаем из сформированного буфера

PS
в регулярке почему то конструкция [link|metainput] не «взлетела», разбираться пока не стал — если кто подскажет почему, подкорректирую.

рубрики: Bitrix, Полезности | Комментарии (0)

8 Март 2023

Виртуалка VMWare с CentOs не получает IP адрес — Connection ‘ens33’ is not available on device ens33 because device is strictly unmanaged

Хост машина с Ubuntu 22.04 на ней VMWare Player
после зависона VMWare Player из за переполнения винта — guest CentOs ни в какую не видит сетевой интерфейс
#ifconfig
показывает только lo
#ip a
слава богу видит ens33 но с пометкой unmanaged

нарыл в сети утилитку по настройке — nmtui
вроде всё автоматом поставил, пытаюсь активировать — получаю ошибку

Could not activate connection: Connection ‘ens33’ is not available on device ens33 because device is strictly unmanaged

2 часа мучений и спасительные 3 команды
nmcli n off
nmcli n on
nmcli

вуаля — всё работает!
ребут — всё работат!

вот такая херня на ровном месте

рубрики: VM, Администрирование, Полезности | Комментарии (0)

26 Февраль 2023

Особенности настройки GitLab CI CD для работы с Bitrix

Чтобы не «париться» с настройкой прав для пользователя gitlab_runner на сервере с bitrix env очень удобно чтобы раннер работал под юзером bitrix в его домашней папке изначально.

Решение

источник

рубрики: Bitrix | Комментарии (0)

21 Февраль 2023

mysql-bin забивает диск

Сегодня пришло сообщение о недоступности сайта клиента.
Начал разбираться — всё свободное место забито /var/lib/mysql, а точнее файлами mysql-bin.001 … и т.д.
Оказалось включена репликация, причём о slave сервере никто не в курсе, и судя по логам синхронизации не было уже несколько лет, а лимит хранения не был настроен.
Решение — отключаем синхронизацию
Удаляю файл /etc/mysql/conf/bx_replica.cnf (у вас возможно просто удалить строки настройки из основного конф.файла) — содержание bx_replica.cnf

Далее в mysql (по идее достаточно только RESET MASTER, но я все выполнил на всякий пожарный)
mysql> STOP SLAVE;
mysql> RESET SLAVE ALL;
mysql> PURGE MASTER LOGS BEFORE ‘2023-02-21 00:00:00’; (тут текущую дату поставьте)
mysql> RESET MASTER;

после чего рестартим сервис
# service mysqld restart

проверяем — файлов не должно остаться
если остались — вроде как можно убить вручную и рестартануть сервис, но у меня убились командами мускула

так же для пущей уверенности можно произвести какую нить операцию в БД в админке сайта и убедиться что bin файл не появился

рубрики: MYSQL | Комментарии (0)

20 Февраль 2023

VMware не запускается на Ubuntu 22.04 LTS — ошибка Unable To Install All Modules

При попытке запустить VMware предлагает установить модули vmnet vmmon, соглашаюсь — получаю ошибку «Unable To Install All Modules» с отсылкой в логи, где нех.я непонятно почему не работает

Спасло такое решение с отсылкой сюда

Т.к. информация носит для меня супер ценный характер, перекину себе для сохранности

рубрики: VM, Полезности | Комментарии (0)

16 Февраль 2023

Linux как освободить порт 3000

Частенько при повторном запуске ноды проект запускается на порте отличном от 3000 (вывалилась по ошибке или ещё что).
Это подбешивает если честно, т.к. все ссылки заточены на 3000

вот такой командой можно освободить порт
fuser -k -n tcp 3000

а так создать альяс, чтоб в следующий раз с ком.строки вызывать kill3000
alias kill3000=»fuser -k -n tcp 3000″

рубрики: NIX, Лайфхак | Комментарии (0)

3 Февраль 2023

Битрикс портал — правка ошибки MySQL query error! Got a packet bigger than ‘max_allowed_packet’ bytes

Кейс от клиента:

При авторизации на портале Битрикс 24 (коробка) ошибка
MySQL query error! Got a packet bigger than ‘max_allowed_packet’ bytes
(весь текст не буду выкладывать — смысл понятен)

Если решать в лоб и быстро, то поможет

/etc/my.cnf
max_allowed_packet = 32M
service mysqld restart

решил разобраться, в чём собственно дело

видно, что на update в таблицу b_option идёт очень большое «тело»

нашел эту запись, посмотрел содержимое — массив с НЕУНИКАЛЬНЫМИ записями

небольшим скритом фиксим это дело прямо в php консоли

из 90к записей остаётся 147

далее в исходниках Битрика нашел интересное место в файле

www/bitrix/modules/socialnetwork/lib/item/workgroup.php

получили массив, добавили значение (но не посмотрели, вдруг оно уже присутствует) — фактически получаем постоянно раздуваемый массив

пришлось кастомизировать исходник Битрикса (а что делать?) — в Битрикс тоже отписал о этом «косяке»

сам фикс

По идее такие огрехи при Code Review другим программистом должны «вылавливаться».

рубрики: Bitrix | Комментарии (0)

11 Январь 2023

VUE как отменить ввод в input radio

Кейс — есть радио инпут, нам нужно спросить у юзера реально ли он хочет переключить значение? если нет — не переключаем
В моём случае радио инпут реализован в виде отдельного компонента.

Первое — v-model = item.value заменяем на биндинг значения :value = item.value и событие смены @change = changeValue(item, $event)) с передачей в него значения и непосредственно события $event

далее в методе changeValue(item, event) я сохраняю текущее и новое значения (конечно предварительно добавляем currentItem и eventItem в data)
this.currentItem = item (в this.currentItem ссылка на item)
this.eventItem = event (в this.eventItem ссылка на event)

и уже по результатам выбора пользователем в модальном окне либо изменяю значение
this.currentItem.value = this.eventItem

либо оставляю тоже самое
this.currentItem.value = JSON.parse(JSON.stringify(this.currentItem.value))

ВНИМАНИЕ!
тут небольшой лайфхак в виде переприсвоения самому себе такого же значения, но с обновлением ссылки!
this.currentItem.value = JSON.parse(JSON.stringify(this.currentItem.value))
иначе Vue не понимает, что у свойства изменилось значение и компонент радио инпута нужно отрендерить заново

рубрики: VUE JS | Комментарии (0)

11 Январь 2023

Тест кейсы, разделение сущностей и типизация

В текущем проекте уже на шаге сдачи заказчику обнаружили баг, который можно было исключить при правильном проектировании сущностей (по сути таблиц хранения данных).

Для наглядности сразу покажу скриншотик

Т.е. у подгружаемого документа может быть тип «скан документа» (редактируемый pdf,собираемый из jpg) либо готовый документ с отделённой подписью.
На этапе проектирования под оба варианта заложили одну таблицу … и теперь при переключении режима приходится стирать (через окно предупреждения) уже введённые файлы другого режима, что пользователю неудобно.

Этот недочёт при проектировании «цепляет» за собой проблемку с типизацией данных — из-за фактической разности в структуре сущностей автоматически «ловим» проблемы с типизацией при передаче данных на фронт.
(в моём проекте я ещё хуже «замутил» — в одно и тоже свойство запихал две абсолютно разные сущности (типа на фронте уже по полям объекта раскидаю что есть что) — так вообще делать нельзя !!!
Вообще нужно стараться придерживаться принципов максимального типизирования — на фронте в JS юзать Typescrypt, на бэке все передаваемые свойства распихивать по классам, ассоциативные массивы — ЗЛО, все ассоциативные массивы переделать на DTO (Data Transfer Object), … и так далее.

Всю логику максимально утаскиваем на бэк, фронт должен быть интуитивно понятен, без каких либо «наворотов» особенно по преобразованию входящих данных — всё это должно быть на бэке.

Ну и закончить хотел вопросом тест кейсов — при программировании в голове нужно держать все возможные варианты алгоритма. При эксплуатации вылезет всё — поэтому чтобы не переделывать, нужно стараться предусмотреть сразу всё.

В общем решил для себя составить базовый список основных кейсов при тестировании, куда отдельными строками нужно ввести:

* недоввод данных — пользователь открыл интерфейс ввода, ничего не ввёл или ввёл но потом нажал в браузере «назад» или просто закрыл без сохранения
* открытие страницы (редактирование или просмотр — где в параметрах страницы какие либо переменные) напрямую через ввод адреса в браузере
* фильтрация переменных в адресе — ввод в URL некорректных данных, разного диапазона (см.предыдущий пункт)

рубрики: Размышления | Комментарии (0)

10 Январь 2023

JavaScript — проверка на число и разделитель разрядов для чисел

рубрики: Javascript | Комментарии (0)