• Как исправить выведенные ошибки C2109 и C2676?

    @Akela_wolf
    Extreme Programmer
    У вас gosvos имеет тип Gosvo[], а вы пытаетесь использовать его как тип Gosvo* (разыменовывать указатель)
    gosvos[j].name - по идее должно быть так. И сравнение gosvos[j] > gosvos[j+1] тоже не должно работать.
    Ответ написан
    2 комментария
  • Кто может занимать порт?

    @Akela_wolf
    Extreme Programmer
    netstat -nlp что вам что про этот порт показывает?
    Ответ написан
    Комментировать
  • Есть софт, который сможет объединить текстовые файлы?

    @Akela_wolf
    Extreme Programmer
    Если Linux - то find + cat
    Если Window - то Cygwin + find + cat
    Ответ написан
    Комментировать
  • Компьютер с какими характеристиками нужен для нормальной работы докер десктоп в винде?

    @Akela_wolf
    Extreme Programmer
    Зависит от того сколько планируется запускать контейнеров и каких
    Но из общих соображений - больше ядер процессора (8 ядер/16 потоков), больше оперативки (16 и более гигабайт)
    Ответ написан
    Комментировать
  • Как загружается контент без AJAX и WebSocket?

    @Akela_wolf
    Extreme Programmer
    Рестораны лежат в запросе layout, обычный XHR
    Ответ написан
    1 комментарий
  • Может ли Service иметь репозитории других классов?

    @Akela_wolf
    Extreme Programmer
    Технически вам никто не мешает так делать

    Архитектурно - нужно смотреть по конкретному проекту.
    Ответ написан
    1 комментарий
  • Можно ли без рекурсии перебрать такой массив?

    @Akela_wolf
    Extreme Programmer
    Без проблем. Любую рекурсию можно представить в форме цикла.
    Ответ написан
    Комментировать
  • Как добавить в пустой столбец таблицы сумму из другой таблицы по заданному условию?

    @Akela_wolf
    Extreme Programmer
    Автоматически обновлять таблицу - это нужен триггер.

    Можно сделать представление (VIEW) и тогда, при запросе данных из этого представления, каждый раз будет автоматически подсчитываться нужная вам сумма.

    create table tbl (
            сol1 int,
      	col2 int
    );
    
    insert into tbl (col1, col2) values (1, 12), (1, 32), (2, 10), (2, 5), (3, 6), (3, 10);
    
    CREATE VIEW tbl_sum AS SELECT tbl.*, SUM(tbl.col2) OVER (PARTITION BY tbl.col1) AS col3 FROM tbl;
    
    SELECT * FROM tbl_sum;


    https://sqlize.online/sql/mysql80/5b3c3e5b21a1083d...
    Ответ написан
    Комментировать
  • Какие формулы для решения подобных задач?

    @Akela_wolf
    Extreme Programmer
    Ну смотрите. У нас есть объем теста. Расход теста на блинчик прямо пропорционален площади оного блинчика. А количество блинчиков из одного и того же объема теста обратно пропорционально расходу теста на один блинчик. А площадь блинчика зависит от диаметра сковородки... Вроде дальше уже подсказывать некуда :)
    Ответ написан
    4 комментария
  • Нумерация в отсортированный sql запрос?

    @Akela_wolf
    Extreme Programmer
    Нужно указать сортировку в оконной функции. А ORDER BY запроса тогда можно делать по полю num.

    SELECT u.id, u.avatar_path, u.rating, ROW_NUMBER() OVER (ORDER BY u.rating DESC) AS num
    FROM users AS u
    ORDER BY num ASC;
    Ответ написан
    1 комментарий
  • Как инвертировать фоторезистор?

    @Akela_wolf
    Extreme Programmer
    620c693630231738484978.png

    D1 - фоторезистор (не нашел в редакторе более подходящего обозначения)
    Номиналы условные, не обращайте на них внимания.

    Суть в том, что чем сильнее открывается транзистор - тем больше падение напряжения на резисторе в коллекторе и наоборот. Если транзистор полностью закрыт - на выходе 5 вольт. Если полностью открыт - около нуля (напряжение насыщения транзистора).
    Ответ написан
    4 комментария
  • Можно ли изучать c++ и python параллельно?

    @Akela_wolf
    Extreme Programmer
    Учить разные языки программирования имеет смысл, поскольку каждый язык - это набор каких-то концепций. В свое время я использовал императивные языки (на работе - Java, в хобби-проектах - от C++ до PHP). И на этом этапе мне очень много дало знакомство с функциональными языками: Scala, Haskell. Я начал понимать много полезных концепций, таких как неизменяемость (immutable). А затем использовал их на основной работе (в частности по всему Java-коду щедрой рукой были рассыпаны модификаторы final). Так что не рассматривайте языки независимо друг от друга - этот для учебных задач, это для ИИ, этот для веба. Берите от каждого языка что-то хорошее и формируйте ваш собственный стиль программирования (пригодный, по сути, для любого языка).

    Еще добавлю про такую тему как ИИ. В этой области начинать имеет смысл не с языка программирования, а с математики, которая лежит в основе всех разработок по этой теме.
    Ответ написан
    Комментировать
  • Как написать юнит тест для программы, которая использует input()?

    @Akela_wolf
    Extreme Programmer
    Юнит-тестирование это про разделение функций на минимально возможные кусочки, чтобы их было возможно протестировать минимально возможным тестом. А для этого каждая функция должна делать что-то одно. У вас же функция занимается следующими вещами:
    1. Ведет диалог с пользователем
    2. Проверяет корректность введенных данных по своим правилам
    3. Обращается к внешнему сервису (причем какой-то апи-ключ прямо в коде - ужас-ужас. А если этот код выкладывать в гитхаб?)
    4. Выводит полученный от внешнего сервиса результат на экран

    Разделим это на 4 функции и увидим следующее:
    1. Функция ввода номера пользователем. Входных параметров нет, выходные - номер. Тестировать не имеет особого смысла.
    2. Функция валидации. Входной параметр - номер, выходной - один из кодов (enum): все хорошо, некорректный регион, некорректный номер. Функция чистая (то есть результат её работы зависит только от аргумента, побочных эффектов нет), тестами накрывается легко и просто.
    3. Функция запроса данных у стороннего сервиса. Входной параметр - номер, выходной - какие-то данные. Тестировать сложно т.к. есть внешний сервис. И может быть не особо нужно, т.к. юнит-тест тут не напишешь. Функция как-то сложной логики не имеет, а внешний сервис нам неподконтролен. В частности, он в любой момент может начать отвечать 404 или каким-нибудь бредом. Поэтому тестировать эту функцию мы можем только имитируя поведение внешнего сервиса каким-то нашим моком (использовать тот же WireMock, например)
    4. Функция вывода результата на экран. Входной параметр - данные, выходных нет. Аналогично функции ввода номера тестировать отдельно не имеет смысла.

    Таким образом, вся бизнес-логика программы сосредоточена в функции валидации и внешнем сервисе. Внешний сервис, как я уже сказал, нам неподконтролен. Функцию валидации мы можем накрыть юнит-тестом. Остальное - если хочется, то можно накрыть end-to-end тестом, либо не покрывать вообще.
    Ответ написан
    Комментировать
  • Как исправить "subquery returns more than 1 row" в "after update" триггере?

    @Akela_wolf
    Extreme Programmer
    А что вы пытаетесь тут сделать? Вот конкретно этот подзапрос (SELECT id FROM test1) он для чего? Вы выбираете все записи из таблицы test1, что, как бы, очень подозрительно. А если там будет миллион записей?

    У вас в триггере есть переменные NEW и OLD, указывающие на обновленную запись в таблице test1 - вот и используйте их, чтобы определить какие записи в таблице test2 вам нужно обновить.
    Ответ написан
    2 комментария
  • Почему выдает ошибку 1442?

    @Akela_wolf
    Extreme Programmer
    Сделайте триггер BEFORE INSERT и задайте значение полям объекта NEW (как это и предполагается таким триггером by design)
    Ответ написан
    Комментировать
  • SQL запрос, как осуществить выборку данных одним махом?

    @Akela_wolf
    Extreme Programmer
    SELECT p.* FROM peoples p --выбираем людей, для которых
    WHERE NOT EXISTS ( --не существует
      SELECT 1 FROM cars c --машины
      WHERE c.peoples_id = p.id --принадлежаший этому человеку
      AND c.desc IN ('Mercedes', 'BMW') --и которая мерседес или бмв
    )


    Заменив NOT EXISTS на EXISTS можно получить обратный список - тех у кого есть мерс или бмв.
    В случае поиска людей у которых НЕТ - полный аналог приведенного в ответе Rsa97 варианта с LEFT JOIN. Но в случае поиска людей у которых ЕСТЬ - вариант с LEFT JOIN может давать дублирующиеся строки, вариант с EXISTS всегда возвращает не более одной строки для каждого человека.
    Ответ написан
    Комментировать
  • Как избежать преждевременной оптимизации? Или как не зная что будет потом в проекте, обрабатывать исключения?

    @Akela_wolf
    Extreme Programmer
    Для вашей ситуации придумали интерфейсы.

    Вот смотрите, есть логика вывода (Котлин, надеюсь понятно что этот код делает):
    interface Report {
      fun getAverageTime(): BigDecimal
    }
    
    fun printReport(report: Report) {
      println("Average time: ${report.getAverageTime()}") 
    }

    Мы получаем данные из отчета. И нас в этом месте мало волнует как именно эти данные рассчитаны и как обрабатывается 0. Это логика отчета. Мало того, у нас может быть несколько разных реализаций интерфейса Report, каждая из которых обрабатывает этот случай каким-то собственным образом, вплоть до того что кидает исключение и, в результате, возникает ошибка (обработка такого исключения за рамками этого примера).

    Теперь у нас возникает необходимость добавить еще один параметр в отчет:
    interface Report {
      fun getAverageTime(): BigDecimal
      fun getCountWithZeroTime(): Int
    }
    
    fun printReport(report: Report) {
      println("Average time: ${report.getAverageTime()}") 
      println("Participants have zero-time: ${report.getCountWithZeroTime()}")
    }


    И никакой преждевременной оптимизации, только структурированный код.
    Ответ написан
    Комментировать
  • Как лучше вынести логику в общий класс?

    @Akela_wolf
    Extreme Programmer
    1. Сначала нужно обдумать что вы с этого будете иметь. Вы сможете переиспользовать эту логику? Вы сможете покрыть логику тестами? Иначе говоря, сформулировать цель такого рефакторинга.
    2. Собственно цель и определит какую логику вы будете выделять. Если задача переиспользовать - значит есть какой-то второй сценарий использования. Смотрите на него, выделяете общие с первым элементы. Выделяете различающиеся элементы - думаете как правильно оформить общие и различные элементы в коде (наследование, композиция, декораторы и т.п. приемы). Собственно на этом этапе у вас появляется план рефакторинга. Если же цель - облегчить тестирование, то начинаете с обдумывания теста. И рассматриваете тест как второй сценарий использования.
    3. Затем остается этот план рефакторинга претворить в жизнь.
    Ответ написан
    Комментировать
  • Как распаковать архив zip, закаченный в репозиторий на Github?

    @Akela_wolf
    Extreme Programmer
    Скачать и распаковать.

    Если же речь о том, чтобы распаковать этот ZIP прямо в репозитории, чтобы содержимое архива было доступно как содержимое репозитория - то никак, github такой функции не предоставляет.
    Ответ написан
    7 комментариев
  • Как суммировать столбцы?

    @Akela_wolf
    Extreme Programmer
    SELECT SUM(confirmed_ones) AS confirmed_ones, SUM(rejected_ones) AS rejected_ones FROM (
      SELECT ... /*тут ваш запрос из вопроса */
    )
    Ответ написан
    Комментировать