• Что выбрать для создания мобильного приложения веб-программисту - React Native или Flutter?

    @Akela_wolf
    Extreme Programmer
    Google, скорее всего, в будущем убьет Flutter в пользу Jetpack Compose. Учитывая поддержку со стороны JetBrains в виде Compose Multiplatform - это может стать новым мейнстримом.

    Поэтому я бы советовал посмотреть в эту сторону.

    Ну а из двух предложенных альтернатив, по той же самой причине - React Native.
    Ответ написан
    5 комментариев
  • Вопрос по железу для Unreal Engine 4/5, Blender + игрушки?

    @Akela_wolf
    Extreme Programmer
    E5-2650 - это древний как говно мамонта камень с 8 ядрами (16 потоков) на частоте 2-2,8 ГГц и архитектурой Sandy Bridge. Для сравнения: в те времена топовым настольным процессором был Core i7 2700, с 4 ядрами (8 потоков) на частоте 3,5-3,9 ГГц.

    Специфика игр в том, что они редко умеют хорошо утилизировать более 8 потоков. А даже если смогут нагрузить этот Зион в 16 потоков - то он опустит частоту до 2 ГГц, да и производительность на такт у него не так чтобы очень хороша (все-таки микроархитектура достаточно старая). Поэтому я считаю что этот проц для игр подходит слабо. Его назначение - держать много "легких" потоков. Виртуалки, докеры и т.п. типичная серверная нагрузка.
    Ответ написан
    Комментировать
  • Какая лучшая практика тестировать api?

    @Akela_wolf
    Extreme Programmer
    Этот - никак. Как минимум нужно избавиться от захардкоденого домена и вынести его в конфиг. Дальше возможны варианты:
    1. Wiremock - создает локальный сервер и отвечает на запросы к нему. То есть, "прикидывается" внешним сервисом для вашей программы.
    2. Юнит-тесты. Но для них нужно изолировать обращения к внешнему сервису и "закрыть" их интерфейсом, вместо которого будет подставляться тестовая реализация внешнего сервиса.
    Ответ написан
    Комментировать
  • Как изменить содержимое сайта не заходя в код?

    @Akela_wolf
    Extreme Programmer
    Это реализуется на любом языке программирования. Товары, новости и пр. сохраняются в БД. Код сайта читает данные из БД и отображает их пользователю. Другой код (админка) предоставляет инструменты редакторам/администраторам/менеджерам для добавления/редактирования/удаления данных в БД.
    Ответ написан
    5 комментариев
  • Как правильно импортировать сторонние классы?

    @Akela_wolf
    Extreme Programmer
    Откройте для себя системы сборки, такие как Maven и Gradle (рекомендую последний). Они позаботятся обо всех зависимостях и правильном размещении их в classpath. Работа над любым более-менее сложным проектом на Java без подобных систем - это одна сплошная непрекращающаяся боль.
    Ответ написан
    4 комментария
  • Для чего нужен Witcher Script?

    @Akela_wolf
    Extreme Programmer
    CD Project Red по каким-то параметрам не устроили имеющиеся скриптовые языки, такие как Lua, поэтому они придумали свой собственный язык под свою задачу. И, разумеется, использовать его ни для какой другой задачи не получится.
    Ответ написан
    Комментировать
  • Как защититься от таких инъекций или как они называются?

    @Akela_wolf
    Extreme Programmer
    Это называется XSS. Защищаются от нее путем фильтрации вводимого пользователем содержимого. Самое простое - экранировать HTML-теги, чтобы они выводились пользователю как текст, а не как HTML-код. Более сложный вариант - оставлять только безопасные теги, которые пользователь может использовать для оформления комментария (полужирный шрифт, курсив, подчеркивание, цвет шрифта и т.д.). Для этого есть готовые библиотеки, если будете писать самостоятельно - велик шанс что упустите какой-нибудь corner case и оставить "дырку" в сайте.
    Ответ написан
  • Что такое артефакты в Gitlab?

    @Akela_wolf
    Extreme Programmer
    Нет. Артефакт - это общее название любого файла, полученного в результате сборки. Это может быть собственно результат сборки (jar или exe), отчет о тестах, сгенерированные данные и т.д. Иначе говоря, артефакт - это нечто материальное, то что не исчезает после окончания пайплайна (в отличие от временных файлов, которые удаляются по окончании процесса)
    Ответ написан
    2 комментария
  • Зачем нужны интерфейсы для слоев DAO и Service в Java?

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

    Если реализация отделена от основного кода, то становится легко подменить её в тестах, например, подсунуть in memory реализацию, вместо БД. См. fake object (не путать с mock). Это еще один важный плюс интерфейсов.

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

    @Akela_wolf
    Extreme Programmer
    Берете любую систему виртуализации, например VirtualBox, создаете виртуалки, устанавливаете ОС, назначаете IP-адреса - готово.
    Ответ написан
    2 комментария
  • Можно ли преобразовать 3d модель растения в файл png на прозрачном фоне?

    @Akela_wolf
    Extreme Programmer
    Разумеется, это называется "рендеринг".

    Открываете 3D-модель в соответствующей программе (зависит от того в каком формате модель. Из бесплатного есть Blender, из платного - гугл в помощь). Настраиваете ракурс, камеру, освещение и т.п., указываете параметры рендеринга, запускаете процесс - получаете картинку. В зависимости от сложности и навороченности модели может потребоваться мощная видеокарта.
    Ответ написан
    5 комментариев
  • Можно ли стать Java Senior разработчиком, если учится полгода-год по 2-3 часа в день?

    @Akela_wolf
    Extreme Programmer
    Одна из моих любимых поговорок: "10000 часов до мастерства".

    Если практиковаться 2 часа в день, 300 дней в год - это 600 часов в год. Соответственно, ~16-17 лет в таком темпе.

    Но, как говорит китайская пословица, путь в тысячу ли начинается с первого шага. В 14 лет 2-3 часа в день на программирование - это неплохой старт. До окончания школы может получиться "набрать" порядка 2500 часов. При должном усердии - это неплохой задел для дальнейшего изучения программирования.

    Еще один совет - английский тоже учите наравне с Java. Программисту в современном мире без него никуда.
    Ответ написан
    3 комментария
  • Что делать, если при попытке создать переменную в Java выводит ошибку?

    @Akela_wolf
    Extreme Programmer
    Это не ошибка, а предупреждение.

    Ошибки IDE как правило подчеркивает красным, предупреждения - желтым (по крайней мере в IDEA это так, скриншот похож на IDEA, но я не уверен).

    Собственно текст предупреждения и говорит о том что переменная нигде не используется.

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

    Предупреждение исчезнет когда вы допишете фрагмент.
    Ответ написан
    1 комментарий
  • Как скрыть много элементов?

    @Akela_wolf
    Extreme Programmer
    Не может быть у одинакового id у двух и более элементов (на он собственно и id)

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

    @Akela_wolf
    Extreme Programmer
    Это уже статистика. Берете выборку для каждой монеты, считаете "хи-квадрат", получаете с заданным уровнем достоверности ответ: случайно это она так падает или есть отклонение от равномерного распределения. Если отклонение есть - то смотрите в какую сторону перекос вам дает выборка. Собственно на эту сторону и нужно делать ставки, удваивая каждый раз при проигрыше.

    Например: с вероятность 60% орел, 40% решка. Ставлю рубль на орла. Проиграл. Ставлю 2 рубля. Проиграл. Ставлю 4 рубля. Проиграл. Ставлю 8 рублей. Выиграл. Итого прибыль 1 рубль. Так как вероятность выпадения орла больше, то в конечном итоге игрок больше выиграет чем проиграет.
    Ответ написан
    1 комментарий
  • Как убедить докер создавать каталоги с правильными правами?

    @Akela_wolf
    Extreme Programmer
    1. Использовать volume
    2. Либо убедиться что каталог существует: mkdir -p <directory> && docker ...
    3. Либо назначить нужного владельца каталога:
    mkdir -p <directory> && chown 1000:1000 <directory> && docker ...

    Если это запускается не рутом - в п.3 потребуется использовать sudo.
    Ответ написан
    1 комментарий
  • Как добавить изображение в ветку images?

    @Akela_wolf
    Extreme Programmer
    Также как и обычный файл.

    Создаете ветку (git checkout -b <branch_name>)
    Добавляете файлы (git add)
    Делаете коммит (git commit)
    Ответ написан
  • Что писать в резюме чтобы были шансы куда-то попасть без опыта?

    @Akela_wolf
    Extreme Programmer
    Я не рекрутер, но попробую дать совет.

    Попробуй фриланс. Заказчикам на фрилансе обычно пофигу на резюме.

    Поработаешь фрилансером с полгода-год - сможешь добавить соответствующую строчку об опыте работы в резюме.

    Альтернативный вариант - участвуй в open source проекте. И тогда тоже сможешь написать соответствующую строчку в резюме, в разделе "опыт работы". Появится строчка - появятся шансы проскочить через HR и добраться до технических вопросов на собеседовании.
    Ответ написан
  • Разница в стримах коллекций и массива?

    @Akela_wolf
    Extreme Programmer
    Потому что в Java массивы и коллекции - это совершенно разные вещи (хоть и похожие по своему назначению). Массив, находится максимально близко к сишному массиву (разве что на джаве встроена проверка выхода за пределы, а в остальном - практически также). Соответственно, массив не может иметь своих методов, т.к. не является объектом (аналогично примитивным типам данных, по сути массив - это примитивный тип данных в Java). Коллекция же, наоборот, суть объект. Что и обуславливает разницу между ними. Эту разницу можно было бы сгладить на уровне языка, но во времена разработки Java не было понимания как удобнее сделать. А затем - бремя обратной совместимости пришлось нести через годы (аналогичная история приключилась с type erasure). Причем это настолько фундаментальная разница, существующая на уровне JVM, поэтому даже современные языки, например Kotlin, не в состоянии уйти от этой нее (так в Kotlin, класс Array не реализует интерфейс Iterable именно по этой причине).
    Ответ написан
    Комментировать