У канваса есть еще атрибуты - высота и ширина. По этим атрибутам и идет рисование и их нужно установить для корректного пересчета координат рисования в клики.
const rect = $canvas.getBoundingClientRect(); // после этого вставить 2 строки
$($canvas).attr('width', rect.width);
$($canvas).attr('height', rect.height);
//...
Вопрос решен. Оказывается у того же JSON5 есть свой собственный парсер на гитхабе. Этого я не знал. Он в принципе полностью решает мои затруднения. Всем спасибо)
Вздулась батарея больше там нечему вздуваться.
Нужно разобрать и ее хотябы убрать.
В идеале заменить .
А то либо сломает что-нибудь еще если будет лаьше вздуваться либо полыхнет .
---
Если сам опыта не имеешь лучше сам не лезь, отнеси в сервис лучше чтоб мастер при тебе все операции сделал на месте, чтобы не напарили на чтото лишенее или ненужное , там реально максимум на час работы.
И перед тем как кудато нести внимательно читай отзывы о данном мастере - очень много мошенников к сожалению сейчас.
Напрасно.
Текст ошибки предельно ясен — не определена переменная. Она у вас определяется только если есть $_GET['hash']. Очевидно, в вашем запросе его нет.
Судя по количеству предупреждений на скриншоте и тексту этого вопроса, нужно всё выбросить и сесть обратно за учебник.
Две сотки даже штангенциркулем не получится измерить. Нутромеры микрометрические существуют, конечно, но проще наверное будет найти щупы с нужной точностью.
В принципе оптически контролировать идея неплохая, особенно если сделать стенд с работой на просвет. Матовая подложка, свет снизу, сверху шаблон с эталонными отверстиями, объектив для макросъемки, а потом снятую уже фотку на компе прогнать через opencv, или что-то самописное, измерить ширину просветов в эталоне и в образце в пикселях, и сравнить на какой процент они отличаются.
Но нужно будет этой камерой очень близко снимать, и делать много снимков - по краям будут большие искажения.
Обычно поднимают балансировщик и делают так что сначала все ходят на 1.1.1.1.
Потом делают перевод новых сессий в новое место в пропорции 20:80.
И так далее пока все сессии не переползут.
В случае с рейдом тебе не надо вручную копировать данные данные.
Компьютер это сделает за тебя.
При сдыхании диска - у тебя остануться все данные на рабочем диске.
Данные сами не скопируются скорее всего тебе нужно будетэтот диск в рейд ввести как новый тогда - он сам их синхронизирует.
---
Аппаратные рейды есть всякие - и с аккумулятором и без.
С аккумулятором стоят в разы дороже, чем без аккумулятора.
---
Даже программный рейд если есть важные данные вещь очень удобная и полезная.
---
И нужно помнить - рейд - это только для оперативного резевирования.
Он позволяет продолжить работу при аппаратном сбое одного диска.
А для резервного копирования должен быть бекап - нормальные резервные копии рейд не заменяет.
У вас упал диск. В случае ручного бэкапа, вам нужно руками восстановить данные. На это уйдет какое-то время.
В случае рейда, у вас все просто работает, и вы можете поменять сбойнувший диск на другой в свободное время, когда никто не пользуется компьютером. И займет это гораздо меньше времени, и делается в то время, когда вам удобнее, а не все останавливается и надо ковыряться прямо сразу.
Как я понимаю, этот .catch должен перехватить реджект главного
промиса, но эта часть в принципе не выполняется и выходит
ошибка UnhandledPromiseRejection