Задать вопрос
  • Работа с изображениям, как создать своё на C++?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В наше время уже почти никто не пишет такие библиотеки. Все вроде написано. Проблемы с писательством библиотек такие. Если ты кодишь на сях под Windows то ты полюбому захочешь как-то их отображать и тебе в библиотеку придется вводить сущности мира WinGDI например.

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

    По названиям нейросетей я ничего не скажу я их не знаю в именах. Поищи их названия в Python-библиотеках.
    Они на слуху. А потом он них - найдешь оригинальное название на сях.

    Посмотри еще в ImageMagic https://imagemagick.org/script/magick++.php может пригодится
    Ответ написан
    Комментировать
  • Как сделать преобразование фурье для изображения по xy?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Что надо делать.?
    Не понимаю, с чего начать.

    Вообще если у тебя так много непоняток - то начни не с изображений а с 1-мерного графика.
    Курс валют например. Или ход температуры за сезон. Разберешся - дальше пойдешь.
    А если ты сейчас даже какую-то фигню закодишь
    - то как ты проверишь что правильное преобразование сделал?

    Начни с контракта. Что приходит тебе на вход? Вот это вот
    double[] x, double[]y

    С моей точки зрения - тут должна быть картинка. Image. На следующем уровне ты ее разбиваешь
    на цветовые слои. Красный зеленый ит.д. Потом эти слои разбиваешь на фреймы (8х8 пикс как в jpg).
    Потом их нормируешь от цвета пиксела до вещественного значения. И вот уже когда ты получишь
    матрицу вещественных значений - тогда и можно приступать к Фурье. Усек? У тебя хедер
    функции должен иметь такие параметры чтобы тебе было все кристально ясно что за аргументы и как.

    А так конешно у тебя каша в голове.

    Да. И по контракту Фурье преобразования ты получаешь комплесную
    вещественную матрицу на выходе. Тоесть две матрицы. Размер их не обязательно должен быть 8х8.
    Он может быть любым. Но обычно нижние коэффициенты матрицы (левый верхний угол - самые
    ценные для Фурье формулы).

    И дальше - делаешь все в обратном направлении. От Фурье к картинке. Получиться картинка - молодец.
    Значит правильно сделал.
    Ответ написан
    5 комментариев
  • Кушает ли память логирование?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Java медленно потребляет память даже в состоянии покоя. Видимо системные треды что-то аллоцируют. Я как-то создавал пустое main приложение которое стоит на паузе и на графике JVisualVM я наблюдал медленный рост Eden space. Попробуй тоже такой эксперимент.

    Вообще тебя это не должно беспокоить. Это нормальный цикл работы управляемой памяти. Главное что в тот
    момент когда срабатывает System.gc память быстро очищается без переноса объектов в Survival.

    Сам процесс логгирования тоже можно писать оптимально или не оптимально. Покажи исходники и хабр посмотрит что там можно улучшить. Здесь разные логгеры log4j, log4-2 могут использовать разные механики для оптимизации.
    Ответ написан
    1 комментарий
  • Можно ли соединить два дом.телефона чтобы звонить и разговаривать с друг другом?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Да я собирал такую схему несколько раз. Достаточно батарейки и нескольких старых телефонов с дисковым набирателем. В более простом варианте даже телефон не нужен. Достаточно двух трубок. Последовательно в контур соединяется две трубки (микрофон + ухо) и так-же последовательно батарейка.
    Ответ написан
    2 комментария
  • Как узнать версии пакетов у Ubuntu в официальном релизе на определённую дату?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я думаю что организация не заинтересована трекать минорные версии пакетов. В этом нет смысла. Они хранят последний снапшот и предлагают его к обновлению. Если у вас какие-то проблемы с пакетом gcc то нужно писать в поддержку.

    Что еще можно поискать. Архивы снапшотов по дистрибутивам (Jelly, Focal, e.t.c.)
    archive.ubuntu.com/ubuntu/dists/?C=M;O=D

    Например у меня Ubuntu Focal Fossa которая лежит здесь archive.ubuntu.com/ubuntu/dists/focal-updates
    Попробуйте переключиться на старый релиз. Может там gcc будет для вас подходящим.

    Текущий статус пакета можно глянуть через apt info:

    $ sudo apt info gcc-9
    Package: gcc-9
    Version: 9.4.0-1ubuntu1~20.04.1
    Priority: optional
    Build-Essential: yes
    Section: devel
    Origin: Ubuntu
    Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
    Original-Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
    Bugs: https://bugs.launchpad.net/ubuntu/+filebug
    Installed-Size: 30.6 MB
    Provides: c-compiler
    Depends: cpp-9 (= 9.4.0-1ubuntu1~20.04.1), gcc-9-base (= 9.4.0-1ubuntu1~20.04.1), libcc1-0 (>= 9.4.0-1ubuntu1~20.04.1), binutils (>= 2.34), libgcc-9-dev (= 9.4.0-1ubuntu1~20.04.1), libc6 (>= 2.15), libgcc-s1 (>= 3.0), libgmp10 (>= 2:5.0.1~), libisl22 (>= 0.15), libmpc3, libmpfr6 (>= 3.1.3), libstdc++6 (>= 5), zlib1g (>= 1:1.1.4)
    .............


    Когда запускаете apt update - обычно спул показывает больше ссылок по все репозитариям. Провертье.
    Ответ написан
    Комментировать
  • Какие сервера поднимаются на виртуалках, а какие физически?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Заказчик сам выбирает обычно. Исходя из денег. VPS или bare-metal. Насколько амбиций хватит.
    В последнее время все тяготеют к Kubernetes. Он как-то динамичнее утилизирует доступные железки.
    Если VPS подняли. Поставили ОС. Поставили софт .... и побежали твои денежки к облаку.
    А с кубером так. Захотел бигдату посчитать. Написал джоб. Запустил в кубере. Джоб отработал 1 час.
    И ты заплатил ровно за 1 час. Дисковые хранилища там почти бесплатны. По цене грязи.
    Ну з IOPS в пике можно заплатить. Но в целом пока джобы не работают ты ничего не платишь.

    Вот. Еще лямбды (AWS) и clound-functions (другие облаки) тоже потребляют по 1 центу за вызов.
    И при этом ее хостинг тебя не волнует. Она поднимется на любой виртуалке где есть ресурсы.

    Поэтому не bare-metal -> VPS. А все еще запутанее хитрее. Железо. Виртуализация. Потом что там...
    контейнеризация... Потом FAAS. Функции. Вот поэтому вопрос звучит не какие сервера поднмиаются
    а какой бизнес-функционал лучше летает на каком уровне этой лестницы.
    Ответ написан
    Комментировать
  • Как проверить regex Range?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Регулярка такое не умеет. Проверка Range - это арифметическая задача. А регулярка
    проверяет соовтествие шаблона символов.
    Ответ написан
    Комментировать
  • Как это исправить?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Подозрительное место. Ты кастишь user.password из неизвестного типа в String.
    На каком основании? Почему не из binhex или из base64?
    String(user.password)
    Нужно доказать что вот эта конверсия правильная. Ну и типы данных надо потрассировать.
    что покажет
    typeof user.password
    typeof password
    Ответ написан
  • Как пошагово работает сортировка .sort()?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Поскольку вопрос тегирован алгоритмами - человек пытается ИХ изучать а не контракт array.sort.

    В науке и технике... в качестве алгоритма сортировки любят использовать сортировку Хоара.
    Она-же Quick Sort. Еще в переводной литературе ее называют Быстрая сортировка делением.

    Еще я где-то читал (не помню где! блин) что ядро Linux иногда использует для своих нужд HeapSort.
    Или сортировку Пирамидой. Или пирамидальную. Достаточно быстрая и не требующая дополнительной памяти
    вообще. По месту сортирует.

    Более полное демо по алгоритмам с визуализацией здесь

    https://www.youtube.com/watch?v=kPRA0W1kECg

    Какую под капотом реализует JavaScript sort - чорт его знает. Но возможно одна из самых быстрых.
    Ответ написан
    4 комментария
  • Сложно ли создать тг бота на c++?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мне кажется что проблема не в телеграм библиотеках а как всегда в классических вопросах С++.
    Контроль над памятью например. И если взять за формулу что ТГ-бот - это типичное реактивное
    приложение то преимуществ С++ здесь вобщем-то нет. Нету задач которые бы загрузили CPU.

    А если задачу развивать в части интеграции например с MQ/документными БД (Mongo) или с
    веб-апи криптовалют то окажется что С++ в такой интеграции стоит еще в 2 раза дороже
    и во времени разработки и в поддержке. А конечному пользователю вообще плевать на чем
    бакенд бота написан.

    И окажется в сухом остатке что наговнячить бота на Node или на Python будет дешевле. И поддерживать
    код тоже дешевле. Вносить изменения - легче и быстрее. Для бизнеса - вообще скорость внесения
    изменений в продукт - это метрика №1. Кто вышел с маркетинг акцией в срок - тот заработал денег.

    Если-бы я был бизнесом и хотел бы свой ТГ-бот то я-бы не вкладывался в С++ (хотя я уважаю этот язык).
    Я-бы нанял команду Ноде-Жс и все было бы норм.
    Ответ написан
    Комментировать
  • Наиболее безопасный мессенджер?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Почти все современные мессенджеры, как только набирают аудиторию подписчиков становятся объектом охоты со стороны государств и спецслужб. Далее - вопрос времени когда уже тов. майор будет читать твою переписку с любовницей или транзакции в крипте.

    Поэтому мне кажется что самый безопасный - самый никому не известный и ненужный. А еще лучше напиши сам себе мессенджер на SSL сокетах.
    Ответ написан
  • Как организовать в электронном виде ознакомление сотрудников с приказами?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут цель не совсем ясна. Ознакомить чтоб сотрудник был просто ознакомлен? Или чтоб в суд пойти?

    Все современные корпорации - тоталитарны. Как мини-армия. У всех есть требование ко всем сотрудникам
    - читать почту раз в сутки. И через сутки ответить. В данном случае CEO пишет всем письмо на корпоративный
    емейл. Типа "ознакомиться с приказом". По факту ознакомления - уведомить в чят своего лайн-менеджера.
    Пока не подтвертили - не получаете аванса и отпусков до разбирательства причин неознакомления.
    И побегут ознакамливаться аж со свистом. Вприпрыжку побегут.

    Поэтому забудьте вы все эти подписи. В них нет смысла в рамках соврмеменной корпорации.

    А если вы предпрениматель или само-занятый или просто гражданский безработный - то вам должно быть положить
    буй на эти все циркуляры. И тогда уж только участковые с приставом могут прийти домой и звонить вам
    в дверь до посинения с бумажкой. Только так.
    Ответ написан
  • Как в Reactor запускать параллельные запросы?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    В том виде как ты написал - это классическое задание на мультипточность.
    Убери Mono. Используй Thread, Runnable, start, join

    Реактор здесь не нужен или его использование не мотивировано.
    Ответ написан
    1 комментарий
  • Мой код слишком громоздкий?

    mayton2019
    @mayton2019
    Bigdata Engineer
    1. pinic3..pinic6 можно не вычислять а вставить прямо в printf выражение.
    2. Обычно во всех пользовательских вводах делают больше проверок. Например проверяют что введено
    неотрицательное число сосикок. Казалось-бы пустяк. Но если подумать что это торговый автомат и дело
    касается денег - то такие баги вовсе не пустяк.
    Ответ написан
    1 комментарий
  • Почему начинает лагать программа запущенная в несколько копий?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Напоминает игру "Сапер".

    Возможно в WinForms не эффективно реализован поиск компонентов по имени
    Controls.Find("checkBox" + i, true)
    Да и вообще 256 элементов - для рантайма тяжело. Наверное они слишком громоздкие
    и интеллектуальные чтоб делать из них сетку объектов. Тоесть это не те WindowsGDI объекты.
    Это дотнетовские объексты со своей обвязкой. С очередями сообщений и прочее.

    Попробуй создать Graphics и на нем нарисовать сетку чек-боксиков. Как сапере.
    И мышко-клик обрабатывай. Я думаю это решит проблему.
    Ответ написан
    4 комментария
  • Хорошая ли стратегия разбивать монолит джанго на микросервисы джанго?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Смотри. Уже прошло время когда все пилили монолиты на микросервисы. Щас пошло переосмысление.
    Объективно есть 2 причины пилить. Первое - организационная. Команда по какой-то причине не хочет
    или не может поддерживать приложение. Или там что-то с бизнесом. Слияние. Поглощение. Передача
    проекта другой команде в поддержку. Тогда берут и ставят задачу раздела отвественностей.
    Конвей про это писал еще.

    И второе - это баланс нагрузки и децентрализация. Про failover тут еще даже речи нет. Это
    тяжелая тема и распилить монолит так чтобы его части были отказоустойчивы очень трудно. Более
    того в случае синхронных взаимодействий между частями микросервисов может быть даже падение
    перформанса
    . Да. Теоретики которые там пишут восторженные отзывы - совершенно игнорируют
    накладные на RPC. И не упоминают что в монолите цена RPC была равна нулю. Иногда RPC заменяют
    на MQ - но это новая архитектура и это надо полностью переделывать бизнес.

    И что делать с базой данных? Это тот еще вопрос. Я почти готов спорить что вы базу пилить не будете.
    И что в результате будет? Иммитация микро-сервисов? Где слабая связность?

    Тоесть если у вас нет таких кричащих ситуаций что оргазниация требует или нужно баланс
    нагрузки как-то разнести - то тебе вообще-вообще нет смысла ходить ни в какие микросервисы.

    Но имеет смысл сделать модуляризацию монолита. Например что там...
    application
    - sales
    - hiring
    - userprofiles

    Тоже очень полезно для управления сложностью. И пускай себе будет монолит зато будет сильный
    контроль за изменениями.
    Ответ написан
    6 комментариев
  • Что за шифр или комбинация шифров?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Дружище так нельзя делать. Криптоанализ предполагает что ты знаешь что ищешь.
    Из какого приложения ты это скопировал? Что ожидается? Хешированный пароль?
    Магнитная ссылка? И мы должны знать контекст. А может ты взял задачу на cryptohack
    и пришел сюда за подсказкой? Так нельзя! Иди в тот форум и там спрашивай.

    У них условие даже есть что участники не обсуждали задачи на стороне.
    Ответ написан
    Комментировать
  • Какую структуру таблиц выбрать для описания некоторой сущности, у представителей которой часть атрибутов совпадает, а часть - различна?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Путей много. Можно завести 2 таблички. Одна для новых машин. Другая - для подержанных. Со
    своими наборами пропертей. Тогда и индексы строить удобно.
    И с точки зрения типизации этот подход верный. Если язык разработки (Python/PHP) различает
    типы машин - то для каждого типа нужна отдельная табличка. Это в духе ORM.
    Недостаток - надо делать union all двух таблиц если мы хотим делать поиск по общим пропертям.

    Можно завести 1 табличку с полем типа JSON и свалить туда все проперти которые могут быть
    опциональны для новых машин и для Б/У. Это делает схему более компактной. И поиск по основным
    полям работает универсально. Для кастомных полей надо искать описание в MySQL языков работающих
    с JSON (JSonPath) для того чтоб выбирать и фильтровать и индексировать их.

    Можно поступить как в BigData. Свалить все проперти что есть в одну большую таблицу. Будет в ней
    допустим 500 колонок. И большая часть из них - пустая. Заполняется null. Такая модель тоже работоспособна.
    Но для человека наблюдающего глазами таблицу будет неудобно с ней работать. Особенно когда нужное
    тебе поле находится где-то на 400х колонках и надо скроллить грид мышкой вправо чтоб хотя-бы прочитать
    глазами значения. И эволюция такой схемы проходит тяжелее. Т.к. alter table обычно блокирует таблицу
    от транзакций DML и нужен регламент что добавлять новую колонку.
    Ответ написан
    Комментировать
  • Эффективны ли roadmapы в обучении?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если отбросить англоицизмы, то на нормальном языке роадмап - это план обучения.
    Планы обычно пишут преподаватели.

    Нам здесь в хабре трудно оценить их эффективность. Это - примерно тоже самое
    что оценивать программу обучения ВУЗа.

    С моей субъективной точки зрения план - хороший. Если-бы я решил что он плохой
    то мне надо было-бы срочно предложить свой собственный план. У меня такого нет.

    А учитывая что ты плаваешь в понимании нужности Django и сокетов - то ты тем более
    не в состоянии даже критиковать этот план. Поэтому бери его. Учи. И скажи спасибо
    что хотя-бы такое есть.
    Ответ написан
    Комментировать
  • Можно ревью супергрязного(наверное) кода на с#?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я тоже добрый сегодня.

    Общее впечатление что код - пенопласт. В нем очень много строк но очень мало бизнес логики.

    1) Во первых непонятно где фокусироваться. Смотреть формочки - не интересно они состоят в
    основном из шумящих событий которые радуют глаз но делают очень мало действий. Это как смотреть
    байткод LLVM или Java.

    2) Вот такой комментарий я-бы не писал. Он звучит как капитан-очевидность. И ежу понятно что это Main.

    /// <summary>
            /// Главная точка входа для приложения.
            /// </summary>
            [STAThread]
            static void Main()


    Если твой преподаватель требует - то пускай будет. Но я-бы убрал.

    3) Вот такие название как Classes, надо убрать. Они считаются дурным тоном. У тебя-же есть понимание
    что внутри? Вот прояви фантазию и дай какое-то бизнесовое название. У тебя в названии вообще висит
    газо-анализатор. Используй это.

    4) Вот здесь имеет смысл вводить поясняющую переменную. Это основы рефакторинга
    о которых писал Кериевски.

    Mixtures[mixture].measurementResults[cycle] = gasType == "mixture" ? concentration : Mixtures[mixture].measurementResults[cycle] - concentration;
            }//сохранение текущего результата в конкретный цикл конкретной смеси


    И комментарий должен стоять над кодом а не внизу.

    5) Я не знаю зачем в 21 веке так сложно конкатенировать строку. Это не Си и не Java1.1.

    table.GetControlFromPosition(i, table.RowCount - 1).Text = String.Concat("СКО", ":", Mixtures[i].sko.ToString());


    Вот я специально посмотрел в learn портал https://learn.microsoft.com/en-us/dotnet/csharp/ho... и там пишут что вполне можно брать операцию плюс или стринговую интерполяцию.

    Вобщем старайтесь писать меньше слов. Это - хорошая точка приложения сил для развития как разработчика.
    Ответ написан