• Как реализовать модульный тест метода содержащего создание экземпляра SoapClient?

    @Akela_wolf
    Extreme Programmer
    Немного непонятно что именно вы хотите тестировать в данном методе.

    Это типичный humble object, который юнит-тестами покрывать не требуется. Суть в том, чтобы сделать такие сложнотестируемые места настолько простыми, насколько это в принципе возможно и свести вероятность ошибки в них к минимальной.

    Этот код может (и желательно чтобы был) быть проверен интеграционным или приемочным тестом, он за рамками юнит-тестирования.
    Ответ написан
    8 комментариев
  • Зачем нужен корневой сертификат?

    @Akela_wolf
    Extreme Programmer
    Ну вот представьте: мошенник Вася выпустил корневой самоподписанный сертификат. А затем подписал им цепочку до фишингового сайта mmoney.com
    Пользователь Петя зашел на сайт, получил всю цепочку сертификатов, включая корневой сертификат; цепочка, разумеется, валидна. И ввел данные своей кредитки, будучи уверен что имеет дело с нормальным сайтом.

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

    @Akela_wolf
    Extreme Programmer
    А первый вариант чем кроме размера таблицы не устраивает?
    А размер - ну такое дело. Если данные нужны - их нужно хранить. Индексы по данной таблице позволят иметь приличную скорость выборки (по крайней мере пока там не сотни миллионов записей об этом можно не думать).

    Я бы пошел по первому варианту, ибо преждевременная оптимизация - зло. Когда будет реальная проблема с этой таблицей - тогда и думать как её решать.
    Ответ написан
  • Spring boot + Kotlin. Где найти учебный материал?

    @Akela_wolf
    Extreme Programmer
    А зачем вам учебный материал по спрингу на котлине?

    Весь учебный материал по спрингу актуален для котлина. Переложить Java на Kotlin - даже не просто, а очень просто (даже IntelliJ IDEA умеет автоматически конвертировать Java в Kotlin). Поэтому берите Java и не мучайтесь (все равно при использовании котлина и спринга джаву знать необходимо т.к. постоянно будете натыкаться на джавовские библиотеки)
    Ответ написан
    Комментировать
  • Что поменять в конфиге MySQL?

    @Akela_wolf
    Extreme Programmer
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED;
    
    IF NOT EXISTS ;
    
    CREATE TABLE IF NOT EXISTS `axle_trees` (


    Вот этот вот IF NOT EXISTS находящийся между запросами - он точно импортируется без всяких проблем?

    Что-то мне кажется что нет и не в настройках MySQL дело вовсе.
    Ответ написан
    Комментировать
  • Какой ЯП нужно выучить для разработки игр вроде Clash of Clans/Lords Mobile на ПК, смартфоны и т.д.?

    @Akela_wolf
    Extreme Programmer
    Без движков - это очень трудоемко. Любая современная игра имеет в основании ту или иную библиотеку, которая берет на себя типовые задачи: вывод графики, вывод звука, обработка ввода и т.д.

    Сделать это можно на любом языке - от C++ до Javascript, под любой популярный язык найдется библиотека для разработки игр (и вероятнее всего не одна).

    Unity - вполне вариант. Насколько знаю, позволяет делать игры как для десктопа, так и для мобильных платформ.
    Если хочется чего-то менее монструозного (ближе к "настоящему" программированию, а не "конструктору") - то я бы рекомендовал посмотреть Kotlin. Это официальный язык для разработки под андроид и он же прекрасно будет работать на десктопе. Лично я "щупал" связку Kotlin + libGDX, меня вполне устроило.
    Ответ написан
    1 комментарий
  • Что такое модульность приложения?

    @Akela_wolf
    Extreme Programmer
    Я вам рекомендую книгу "Чистая архитектура", в ней "дядюшка Боб" очень хорошо рассказывает о том что такое модули, как разделять программу на модули. Для взгляда "сверху" наверное больше ничего и не надо.

    Но команда тоже должна понимать, принимать и следовать принципам архитектуры. То есть нельзя просто разбить программу на модули и надеяться что дальше все будет хорошо. Если эти модули будут написаны "грязно", то сопровождение программы все равно превратится в боль, даже при наличии хорошей архитектуры (хотя и в меньшую боль чем при плохой архитектуре). Поэтому модульность - необходимое, но не достаточное условие сопровождаемости программы в длительной перспективе.
    Ответ написан
    Комментировать
  • Возможно ли смонтировать физический диск с ОС в Virtualbox, чтобы запускать с него ОС?

    @Akela_wolf
    Extreme Programmer
    Я так делал с Gentoo. Правда это была не Virtual Box, а VmWare Player, но суть та же.

    Сделал небольшой виртуальный диск с которого грузилась виртуалка (на нем загрузочная запись и /boot), а физический диск (раздел на нем) примонтировал как root. В итоге получилось именно то что вы хотите: линукс загружался в виртуалке, но все действия отражались на разделе реального диска.

    Правда я настраивал эту конфигурацию сразу и у меня не было задачи загружаться с реального диска, так что тут могут быть подводные камни (ну первое что приходит в голову - /boot для виртуалки и для "реальной" ОС будет разный). Но в целом, как я думаю, должно работать.
    Ответ написан
    Комментировать
  • Сервлеты, меняется язык только со второго нажатия по ссылке, почему?

    @Akela_wolf
    Extreme Programmer
    Ну так вы полностью правы. Как работает Cookie.
    1. Сервер отсылает заголовок Set-Cookie браузеру
    2. Вместе с заголовком сервер отсылает страницу.
    3. Получив заголовок Set-Cookie браузер сохраняет "печеньку" у себя.
    4. При следующем запросе страницы с этого сайта браузер к запросу присоединяет заголовок Cookie, в котором передает сохраненные "печеньки".
    5. В ответе сервер снова может прислать Set-Cookie, тогда будет добавлена или обновлена имеющаяся "печенька".

    Таким образом, в вашем случае достаточно не переходить по ссылке еще раз, а нажать F5 - язык переключится.

    Вообще, для решения вашей проблемы я бы брал язык из URL и только если его там нет - из "печеньки". Тогда переход на страницу с нужным языком переключал бы его сразу (так как значение в URL имеет приоритет) и сохранял в cookie для последующих запросов.
    Ответ написан
    Комментировать
  • Подскажете совместимую видеокарту с ASUS P8H67 по нынешним временам?

    @Akela_wolf
    Extreme Programmer
    Любая PCI-е. Все версии протокола PCI-e совместимы между собой. Количество линий и версия PCI-e не важны, работать будет "по минимальному". Если возьмете карту PCI-e 3.0 x8 - она будет работать в режиме PCI-e 2.0 x8 (так как версию ограничивает материнская плата, а количество линий - видеокарта. Оставшиеся 8 линий просто не будут использоваться)
    Ответ написан
    Комментировать
  • Как расшифровать код?

    @Akela_wolf
    Extreme Programmer
    Это, видимо, не зашифрованный, а скомпилированный файл (.class), он же байт-код. Просто так его прочитать не получится.

    Можно попробовать декомпилятор (например jad). Но декомпилятор не восстановит исходных код полностью. И в сложном классе разобраться все равно будет проблематично. А если исходный код написан еще и не на Java, а на другом JVM-языке (Scala, Kotlin, Groovy и т.д.), то это добавит еще головной боли.
    Ответ написан
    1 комментарий
  • Почему толстые контроллеры – это плохо?

    @Akela_wolf
    Extreme Programmer
    Если строго следовать принципам SOLID, а именно SRP (принцип единственной ответственности), то задачей контроллера является презентовать какую-то часть приложения в виде HTTP endpoint (в частном случае REST).

    Собственно логика не должна находиться в контроллере, потому что способы обращения к этой логике (через HTTP, Service Bus, Telegram, Discord, периодический вызов по крону и т.д.) ортогональны собственно бизнес-логике.

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

    @Akela_wolf
    Extreme Programmer
    Прочитать Git Book

    Конкретно в вашем случае: git reset --hard
    ВНИМАНИЕ! Эта команда уничтожит все изменения в незакоммиченных файлах.
    Ответ написан
    Комментировать
  • Как исправить: интерфейс отправляет, но не принимает пакеты?

    @Akela_wolf Автор вопроса
    Extreme Programmer
    Проблему решил удивительным шаманством.

    Была загружена Windows c SSD
    Выполнил netsh int ipv4 uninstall
    Перезагрузил
    Выполнил netsh int ipv4 install
    Перезагрузил
    Заработало.
    Перезагрузил Windows c HDD (через UEFI) - тоже работает.

    Совершенно не понимаю как и почему эти две копии винды влияют друг на друга.
    Ответ написан
    1 комментарий
  • Как правильно поступить в данной ситуации наследования от GenericInterface?

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

    @Akela_wolf
    Extreme Programmer
    Потому что компьютер делает то что вы ему сказали, а не то что вы от него хотите :)

    Пусть account = 100
    тогда, если x=10
    account = 100 + 10 = 110

    затем, если x = -5
    account = 110 - (-5) = ?
    Ответ написан
    Комментировать
  • Какие стоит создавать интерфейсы?

    @Akela_wolf
    Extreme Programmer
    А если бы, допустим, в у нас был отдельный интерфейс IMove, то мы смогли бы реализовать его в каком угодно модуле/компоненте, например в условном File, ведь мы можем переместить файл. Так же и с ISleep, мало ли что может уснуть, начиная от операционной системы или потока выполнения, заканчивая персонажем в тамагочи.


    Неверно. IMove (точнее будет назвать Movable) имеет смысл в контексте какой-то предметной области. И перемещение файла, перемещение спрайта, перемещение трехмерного объекта, перемещение руки робота - все это разные перемещения. Соответственно и интерфейсы будут разные (расположенные в разных модулях, даже если будут называться одинаково), например:
    filesystem.Movable
    graphics.2d.Movable
    graphics.3d.Movable
    servo.Movable


    Поэтому ответ - нет, не нужно придумывать что-то общее у разнородных предметов и явлений. Только если это что-то общее позволяет вам как-то лучше моделировать предметную область.

    Вообще главный принцип тут такой: интерфейс должен иметь смысл, описывать некоторую единицу функциональности именно с точки зрения предметной области. Скажем, если в вашей предметной области операция move имеет смысл без операций eat и sleep - её можно выделить в отдельный интерфейс (а можно и не выделять, это зависит от других факторов). Если же операции eat и sleep всегда должны ходить парой и каждый потребитель этого интерфейса нуждается в обеих операциях - они должны быть в одном интерфейсе.
    Ответ написан
    4 комментария