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

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

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

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

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

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

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

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

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

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

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

10 Январь 2023

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

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

21 Декабрь 2022

Оптимизация сервера CentOs и станции Ubuntu — увеличение swap, ускорение ssh соденияния, ускорение запуска mc

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

Увеличение 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, Администрирование, Полезности | Комментарии (0)

12 Декабрь 2022

Ускоряем PHPStorm в Ubuntu — External file changes sync might be slow + оптимизируем RSync

Если Вы при работе с 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, Администрирование, Полезности | Комментарии (0)

8 Декабрь 2022

placeholder.com — генерация шаблонных превью изображений нужного размера

Однозначно в закладки!

Очень удобный сервис генерации шаблонных изображений нужного размера, так же можно порулить самим текстом, его цветом и фоном.
Раньше часто пользовался, тут понадобилось — совсем вылетело из головы… пришлось заново искать.
Поэтому решил запостить сюда.

формат можно задать любой
.GIF, .JPG, .JPEG, .PNG

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

8 Ноябрь 2022

Изучение технической документации Symphony на английском

Очень часто в программировании профи отсылают к документации именно на английском языке, как к первоисточнику.
Я не очень сильно в английском (школа + институт был немецкий) поэтому частенько ленюсь напрягать извилины и читаю на русском.

Сегодня словил яркий пример почему всё таки английский — благо есть более опытный коллега, направил в нужное русло.

Итак ссылки и скриншоты в студию
Русская дока
https://symfony.ru/doc/current/security/impersonating_user.html
Английская дока
https://symfony.com/doc/current/security/impersonating_user.html

Вот этого фрагмента в русской доке попросту нет!
В решении поставленной по проекту задачи именно передача параметров в заголовке стала главным техническим решением.

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

29 Август 2022

PHPStorm увеличение значения максимально потребляемой памяти

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, Лайфхак, Размышления | Комментарии (0)

1 Август 2022

Activation Code PHPStorm 2022 — активация кодом (взлом vmoptions netfilter в Ubuntu)

Сначала, попробовал воспользоваться триальным месяцем для вновь созданного аккаунта — но почему-то триальные лицензий на таких аккаунтах не находились 🙁
пробовал в режиме инкогнито а так же с Tora, с аккаунтов yandex и gmail — эффект нулевой

Далее решил уже приобрести платный ключ и каждый год продлять (на 3й год сумма существенно снижается) — НО к сожалению из-за санкций к России оплатить заказ никак не получилось — даже после смены страны в настройке акканута оплата картой VISA Российских банков не проходила — PayPal у меня нет, а других вариантов оплаты на сайте не было…

Пришлось гуглить тему взлома 🙁

php storm activation key

Идём сюда https://jetbra.in/s
выбираем «живой» сервер, заходим — там качаем архив и кликаем по иконке PHPStorm (ключ активации скопируется в буфер обмена)

Далее я некоторое время помучался, т.к. у меня Ubuntu и по инструкции не «взлетало» (пользователям Windows думаю будет попроще)

Правил вручную phpstorm64.vmoptions — ожидаемого результата не было 🙁 при вводе ключа в PHPStorm получал «key is invalid»

При запуске скрипта scripts/install.sh получал

В итоге помогло решение скопировать содержимое архива прямо в пользовательскую директорию /home/alex/
Далее запуск /home/alex/scripts/install.sh отработал корректно — ввёл скопированный ключ и получил активацию на 1 год.

Чуть подробнее о моих изысканиях:
Читать полностью »

рубрики: PHP, взлом и безопасность, Полезности, Программирование | 2 комментария

13 Июль 2022

Ошибка gulp-imagemin: Couldn’t load default plugin «gifsicle»

На 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/

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

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 | Комментарии (0)