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

Т.е. у подгружаемого документа может быть тип «скан документа» (редактируемый pdf,собираемый из jpg) либо готовый документ с отделённой подписью.
На этапе проектирования под оба варианта заложили одну таблицу … и теперь при переключении режима приходится стирать (через окно предупреждения) уже введённые файлы другого режима, что пользователю неудобно.
Этот недочёт при проектировании «цепляет» за собой проблемку с типизацией данных — из-за фактической разности в структуре сущностей автоматически «ловим» проблемы с типизацией при передаче данных на фронт.
(в моём проекте я ещё хуже «замутил» — в одно и тоже свойство запихал две абсолютно разные сущности (типа на фронте уже по полям объекта раскидаю что есть что) — так вообще делать нельзя !!!
Вообще нужно стараться придерживаться принципов максимального типизирования — на фронте в JS юзать Typescrypt, на бэке все передаваемые свойства распихивать по классам, ассоциативные массивы — ЗЛО, все ассоциативные массивы переделать на DTO (Data Transfer Object), … и так далее.
Всю логику максимально утаскиваем на бэк, фронт должен быть интуитивно понятен, без каких либо «наворотов» особенно по преобразованию входящих данных — всё это должно быть на бэке.
Ну и закончить хотел вопросом тест кейсов — при программировании в голове нужно держать все возможные варианты алгоритма. При эксплуатации вылезет всё — поэтому чтобы не переделывать, нужно стараться предусмотреть сразу всё.
В общем решил для себя составить базовый список основных кейсов при тестировании, куда отдельными строками нужно ввести:
* недоввод данных — пользователь открыл интерфейс ввода, ничего не ввёл или ввёл но потом нажал в браузере «назад» или просто закрыл без сохранения
* открытие страницы (редактирование или просмотр — где в параметрах страницы какие либо переменные) напрямую через ввод адреса в браузере
* фильтрация переменных в адресе — ввод в URL некорректных данных, разного диапазона (см.предыдущий пункт)
рубрики: Размышления |
21
Декабрь
2022
Заметка себе в закладки, чтобы не забыть — ну и может кому пригодиться.
Увеличение swap
Последнее время начал жестско подвисать локльная станция с ОС Ubuntu — подозрения пали на своп (и не зря).
смотрим что сейчас
#free -h
#top
или в системном мониторе
Отключаем и удаляем этот файл подкачки следующими командами:
#sudo swapoff -a
#sudo rm -f /swapfile
На диске должно быть достаточно места, чтобы туда поместился файл подкачки того размера, который вы задали.
Для создания файла подкачки размером 8G (измените значение по вашему желанию) выполните команду:
#sudo fallocate -l 8G /swapfile
Затем выполните команды:
#sudo chmod 600 /swapfile
#sudo mkswap /swapfile
#sudo swapon /swapfile
Ребутимся — проверяем
https://zalinux.ru/?p=2432
Ускорение ssh соединения
#vi /etc/ssh/sshd_config
Находим строку:
#UseDNS yes
И приводим ее к следующему виду:
UseDNS no
https://www.dmosk.ru/miniinstruktions.php?mini=ssh-slow
Ускорение запуска mc
#hostname
centos.local
После этого добавляем в /etc/hosts:
127.0.0.1 centos.local
Теперь MC запускается мгновенно.
https://serveradmin.ru/ochen-dolgo-zapuskaetsya-mc/
рубрики: NIX, Администрирование, Полезности |
12
Декабрь
2022
Если Вы при работе с PHPStorm (я работаю в Ubuntu) получили предупреждение
External file changes sync might be slow
The current inotify(7) watch limit is too low. More details.
(Если Вы используете синхронизацию файлов с помощью rsync — Вам так же следует изменить данные параметры ядра)
Вам необходимо увеличить параметр ядра
fs.inotify.max_user_watches
Максимальное количество файлов и директорий, за которыми может наблюдать один объект inotify.
посмотреть текущее значение можно выполнив с консоли
sysctl -a | grep fs.inotify.max_user_watches
у меня текущее значение было 65536
Далее согласно документации добавляем в /etc/sysctl.conf строчку
fs.inotify.max_user_watches = 524288 (в статье ниже тут рекомендую поставить 16777216 но я пока остановился на 524288 — думаю phpstorm-у будет достаточно)
и выполняем в консоли
sudo sysctl -p —system
Вуаля!
Согласно статье Cкоростная синхронизация миллиарда файлов
нужно ещё один параметр «подкрутить»
max_queued_events — максимальное число событий в очереди; default = 16384;
Офф.документация
https://youtrack.jetbrains.com/articles/IDEA-A-2/Inotify-Watches-Limit-Linux
рубрики: NIX, PHPStorm, Администрирование, Полезности |
8
Декабрь
2022
Однозначно в закладки!
Очень удобный сервис генерации шаблонных изображений нужного размера, так же можно порулить самим текстом, его цветом и фоном.
Раньше часто пользовался, тут понадобилось — совсем вылетело из головы… пришлось заново искать.
Поэтому решил запостить сюда.
формат можно задать любой
.GIF, .JPG, .JPEG, .PNG
|
<a href="https://placeholder.com"><img src="https://via.placeholder.com/300x150/FFFF00/000000.png?Text=WebsiteBuilders.com"></a> |
)
рубрики: Вёрстка |
8
Ноябрь
2022
Очень часто в программировании профи отсылают к документации именно на английском языке, как к первоисточнику.
Я не очень сильно в английском (школа + институт был немецкий) поэтому частенько ленюсь напрягать извилины и читаю на русском.
Сегодня словил яркий пример почему всё таки английский — благо есть более опытный коллега, направил в нужное русло.
Итак ссылки и скриншоты в студию
Русская дока
https://symfony.ru/doc/current/security/impersonating_user.html
Английская дока
https://symfony.com/doc/current/security/impersonating_user.html
Вот этого фрагмента в русской доке попросту нет!
В решении поставленной по проекту задачи именно передача параметров в заголовке стала главным техническим решением.

рубрики: Полезности, Программирование, Размышления |
29
Август
2022
PHPStorm в последнее время начал подтормаживать и зависать, сейчас на моменте зависания подловил сообщение
«The IDE is running low on memory and this might affect performance. Please consider increasing available heap…»
Тут всё ясно — маловато выделено оперативки, нужно увеличивать.
Тут инфа от вендора https://www.jetbrains.com/help/phpstorm/increasing-memory-heap.html
В 2х словах — идём в Help | Change Memory Settings.
Увеличиваем лимит, рестартим систему.
Я поднял с 1 до 4х гигов, пока полёт нормальный.
рубрики: PHP, Лайфхак, Размышления |
1
Август
2022
Сначала, попробовал воспользоваться триальным месяцем для вновь созданного аккаунта — но почему-то триальные лицензий на таких аккаунтах не находились 🙁
пробовал в режиме инкогнито а так же с Tora, с аккаунтов yandex и gmail — эффект нулевой
Далее решил уже приобрести платный ключ и каждый год продлять (на 3й год сумма существенно снижается) — НО к сожалению из-за санкций к России оплатить заказ никак не получилось — даже после смены страны в настройке акканута оплата картой VISA Российских банков не проходила — PayPal у меня нет, а других вариантов оплаты на сайте не было…
Пришлось гуглить тему взлома 🙁

Идём сюда https://jetbra.in/s
выбираем «живой» сервер, заходим — там качаем архив и кликаем по иконке PHPStorm (ключ активации скопируется в буфер обмена)
Далее я некоторое время помучался, т.к. у меня Ubuntu и по инструкции не «взлетало» (пользователям Windows думаю будет попроще)
Правил вручную phpstorm64.vmoptions — ожидаемого результата не было 🙁 при вводе ключа в PHPStorm получал «key is invalid»
При запуске скрипта scripts/install.sh получал
|
ja-netfilter.jar not found ./install.sh: 19: exit: Illegal number: -1 |
В итоге помогло решение скопировать содержимое архива прямо в пользовательскую директорию /home/alex/
Далее запуск /home/alex/scripts/install.sh отработал корректно — ввёл скопированный ключ и получил активацию на 1 год.
Чуть подробнее о моих изысканиях:
Читать полностью »
рубрики: PHP, взлом и безопасность, Полезности, Программирование |
13
Июль
2022
На Ubuntu при сборке фронта gulp при минимизации изображений ругается
gulp-imagemin: Couldn’t load default plugin «gifsicle»
TypeError in plugin «gulp-imagemin»
Message:
fn is not a function
Details:
Ошибка: gulp-imagemin couldn’t load default plugin gifsicle
Решение: поочередный запуск команд в терминале ubuntu (внутри корневой директории проекта)
sudo apt-get install dh-autoreconf
sudo npm install -g gifsicle
npm install —force
Источник
https://zencod.ru/gists/error-gulp-imagemin-couldnt-load-default-plugin-gifsicle/
рубрики: Полезности, Программирование |
13
Июль
2022
Проблема — обработчик FilmVersionSave слушающий событие OnIBlockElementUpdate задваивает результат.
Хотел поискать что ещё «повешано» на этот метод, не нашел подходящего API
Только такое
$eventManager = \Bitrix\Main\EventManager::getInstance();
$handlers = $eventManager->findEventHandlers(«iblock», «OnBeforeIBlockElementUpdate»);
тут нужно знать с какого модуля и какое событие, а мне наоборот — все события которые повесили на обработчик …
Решение — табличка b_module_to_module в которой всё доступно и «по полочкам»
select * from b_module_to_module where TO_MODULE_ID=’fk’ AND TO_METHOD=’FilmVersionSave’;

Вот и всё — виновник OnBeforeIBlockElementUpdate найден!
рубрики: Bitrix |