dd

Рубрика: Разработка

  • Шёл четвёртый день стационара

    Сегодня я решил, что мне очень интересно начать делать моды для майнкрафта, тем более что идея зрела очень давно
    Не смог найти хороший мод, который бы просто мне показывал текущие координаты в верхнем левом углу. Видимо, никому не надо такое, но мне надо прям очень
    Поэтому вооружившись ютубом, полез смотреть гайды как делать моды и вот спустя 2 часа я вывел себе координаты на экран
    Задача оказалась тривиальной — api для моддинга майнкрафта довольно простой и понятный, по крайней мере для тех мелочей, которые мне нужны
    Под капотом какой-то магией запускается клиент майнкрафта и грузятся моды. Я если честно вообще ума не приложу как это всё работает. Люди, которые занимаются разработкой игры и лоадеров модов — гении, не меньше
    Залил на гитхаб, зарелизил и залил ещё на curseforge.com, посмотрим, одобрят ли.

  • CI-пайплайн ловит плохой код

    Несмотря на все эти тупые мелочи я получил что хотел — пайплайн теперь ляжет, если твой код хреново отформатирован или там есть забытые артефакты в виде неиспользуемых импортов и так далее. Крайне удобно, особенно учитывая, что в скором времени над проектом буду работать не я один. Будет за что чморить на ревью 😀

  • Code Style

    Стало скучно, решил на рабочем проекте запилить нормальный код-стайл с интеграцией в ci/cd
    Самым ходовым вариантом является PHPCSFixer и честно говоря я немножко задолбался мирить их со штормом
    Шторм в 98% процентов случаев соглашается с фиксером, но в остальные 2 процента просто забивает и делает по-своему }:[
    В доке шторма прям уверяют, что фиксер хорошо интегрится и работает наравне, реагируя на всякие горячие клавиши форматирования кода и прочее. Хорошо, я верю (нет).
    Перед коммитом выставлены галки на форматирование и чистку кода, но в итоге коммит улетает в гитлаб и через пару минут я вижу сломанный пайплайн, потому что оказывается ничего из этого не произошло
    Ну ничего, с танцами и бубном донастраиваю форматирование шторма, чтобы оно подходило под фиксер, вроде пока работает, посмотрим как дальше будет
    Завёл даже пост на реддите с вопросом мол чё за херня, это я дурак или лыжи не едут?

  • Курс по чистой архитектуре в стационаре

    Благодаря военкомату сейчас чилю в стационаре, подтверждаю болезни (хз что там подтверждать, мед карта толще, чем моя рука)
    И вот спустя почти год я наконец-то нашёл время посмотреть данный замечательный курс
    Там есть всё на что пускают слюни зумеры (@artemmarenkoff) — чистая архитектура, DDD, CQRS
    Если серьёзно, то видео очень хороши. Крайне дотошно объясняются различные подходы к построению приложения с данными принципами и разъясняется какой из подходов будет самым оптимальным.
    Там 18 видео, за раз посмотреть будет тяжко (у меня время к счастью позволяет), но каждый день по видосу — самое то. Дозированно и полезно.

  • NotSet вместо null для частичных обновлений

    Сегодня столкнулся с одной тривиальной задачей. Настолько тривиальной, что не смог сразу придумать решение, хотя раньше уже сталкивался с ней, но обошёлся костылями.
    Задача заключается в следующем: фронту надо менять данные в базе по одному полю за раз (например, настройки). Можно сделать эндпоинт на каждое поле и получить огромную головную боль, пытаясь написать на всё валидаторы и обвязку. А можно написать один эндпоинт, который принимает айди модели и любые данные для обновления.
    В DTO с данными для обновления помечаем каждое поле как nullable и при сохранении обновляем только те данные, которые !== null, то есть, которые реально пришли с фронта.
    Готово! Но только до тех пор, пока в настройках не появится необязательное поле, которое само по себе может принимать значение null.
    В этом случае уже не получится к типу поля просто прибавить ещё один null, иначе получится что-то странное вроде ?bool|null, не являющееся валидным php.
    Я из такой ситуации вышел самым простым способом, добавив пустой класс NotSet и дополнив все типы полей этим типом. То есть, private ?int $value стал private int|null|NotSet $value.
    В итоге при обновлении данных использовать нужно только те поля, которые дают false в ответ на $value instanceof NotSet. Таким образом мы точно знаем, что фронту нужно записать именно это значение, даже если это null.
    Ещё один момент, при запихивании данных из приходящего json`а в `DTO, необходимо писать следующее — array_key_exists($data, ‘key’) ? $data[‘key’] : new NotSet(), так как $data[‘key’] ?? new NotSet() не даст нужного результата. Не очень красиво, но тут функциональность преобладает над красотой.
    А вот были бы у нас дженерики, тогда можно было бы просто забахать private Optional<?int> $value и жизнь была бы прекрасна, но увы 🙁

  • Новый коворкинг

    Сегодня заехал в новый коворк в квартале от дома
    Сижу теперь и в окружении одни программисты, очень круто
    Атмосфера совсем другая, аж работать легче стало
    Один чел не гнушается на обеде в доту поигрывать, у других сервак для майнкрафта поднят — в общем, работа кипит😃

  • Мама, я в телевизоре

    мама, я в телевизоре!!!

  • Шутка про мышь

    Кто-нибудь знает, как начать нажимать только левую кнопку?)

  • Ещё один велосипед

    Если и колотить велосипеды, то только такие, чтобы все ахнули 😃