Задать вопрос
  • Как правильно смоделировать сущность User по принципам Clean Architecture?

    @galliard
    К сожалению чистота архитиктуры часто ограничена неидеальностью реального мира. В общеп подхода к решению проблемы тут 2, и о них ты уже сам догадался:
    1. null, или в твоем случае Optional. Тут зависит от языка и фреймворка, который ты используешь.
    2. UUID. Value object UserId делать не обязательно, достаточно просто строки.

    Ну а дальше выбирай, что тебе милее.
    Ответ написан
    1 комментарий
  • Как решить проблему с принтером HP LaserJet P1102?

    @Longa
    С официального сайта скачай драйвер (за 100МБ+) распакуй *.rar, найди там папку UTIL , в ней SIUtility.exe запусти её (х86/x64) и отключи этой утилитой режим smart utility и на компе и на принтере, по очереди, после запусти уже инсталлятор либо в поиске сам добавь вручную. Принтер должен установиться, правильно. Появится и usb001 порт и всё будет уже без ошибок.
    Ответ написан
    1 комментарий
  • Как решить проблему с принтером HP LaserJet P1102?

    ipswitch
    @ipswitch
    IT-инженер
    Ставим драйвер.
    Качаем вот здесь утилиту SmartInstall Control
    https://ftp.hp.com/pub/softlib/software12/COL53550...

    Она позволяет отключить режим "флешка с драйверами", поставив режим "только принтер".

    https://support.hp.com/ru-ru/drivers/selfservice/s...
    Ответ написан
    Комментировать
  • Как в Vue сделать поочередное удаление класса у элементов списка?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Непонятно, чем мотивировано неиспользование v-for. Если использовать, будет гораздо проще добиться того, что вы хотите, например:

    .hidden {
      opacity: 0;
    }

    data: () => ({
      items: [
        { text: '...', hidden: true },
        { text: '...', hidden: true },
        ...
      ],
    }),
    mounted() {
      this.items.forEach((n, i) => {
        setTimeout(() => n.hidden = false, 300 * (i + 1));
      });
    },

    <li v-for="{ text, hidden } in items" :class="{ hidden }">
      <a href="">{{ text }}</a>
    </li>

    UPD. В комментариях было высказано мнение, что

    20 таймеров это плохо

    Не вопрос:

    mounted() {
      (function next(data, i) {
        if (i < data.length) {
          data[i].hidden = false;
          setTimeout(next, 300, data, i + 1);
        }
      })(this.items, 0);
    },

    или

    async function asyncDelayedForEach(data, callback, delay) {
      for (let i = 0; i < data.length;) {
        await callback.call(data, data[i], i, data);
        if (++i < data.length) {
          await new Promise(r => setTimeout(r, delay));
        }
      }
    }

    mounted() {
      asyncDelayedForEach(this.items, n => n.hidden = false, 300);
    },
    Ответ написан
    8 комментариев
  • Python Как обрезать изображения?

    @D3Nd3R
    Дополню ответ Aleksey Solovyev.
    1. Переводим в чб.
    2. На бинарном изображении (вместо cv2.Canny необходимо применить cv2.threshold, так как цвет рамки - белый то подобрать порог будет нетрудно) необходимо найти внешний контур (cv2.findContours с параметром RETR_EXTERNAL) и затем останется сохранить часть изображения, которая лежит внутри контура.
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/core/core.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <algorithm>
    
    int main(int argc, char *argv[])
    {
    	cv::Mat img,gr,th;
    	img = cv::imread("1.jpg");
    	cv::cvtColor(img, gr, cv::COLOR_BGR2GRAY);
    	
    	cv::threshold(gr, th, 240.0, 255, cv::THRESH_BINARY);
    
    	std::vector<std::vector<cv::Point> > contours;
    	cv::findContours(th, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE);
    
    	auto max_vector_comp = [](std::vector<cv::Point> &lhs,
    		std::vector<cv::Point> &rhs)
    	{
    		return lhs.size() < rhs.size();
    	};
    	//поиск самого длинного контура
    	auto maxVector = std::max_element(contours.begin(), contours.end(),
    		max_vector_comp);
    	//находим описывающий прямоугольник
    	cv::Rect roi = cv::boundingRect(*maxVector);
    
    	cv::Mat croppedImg;
    	croppedImg = img(roi);
    	cv::imshow("inImg", img);
    	cv::imshow("croppedImg", croppedImg);
    	cv::waitKey();
    	return 0;
    }
    Ответ написан
    3 комментария