Серия «Мемуары говнокодеров»

7

Пока все не разошлись

Серия Мемуары говнокодеров

Хочу сохранить сохранённое, хотя бы сами посты (https://pikabu.ru/saved-stories)
А ума нет. И лапки. ЧатГПТ сделал скрипт для браузера

Просто страницы закачивает. Умеет ли JS из браузера сам создать папки?
Чтобы было не плоско: Общее_XYZ.html, Общее_MN.html
А так: Общее[XYZ.html, MN.html] - по папкам разложить.

Перекладываешь жысоны? Пссст, парень, смотри сюда!

Серия Мемуары говнокодеров

Не знаю, как я раньше жил без этих плагинов IDEA...

Да нормально жил, но утомлялся точно больше 😑 Не скажу даже вот так сразу, какой из них полезней.

👉 Пожалуй, всё же - генератор POJO из JSON (RoboPOJOGenerator). Копипастишь прямо из документации - 🪄ВЖУХ! И ни фига! Сначала надо засунуть в insomnia (ну или postman, или http клиент в идее - кому что привычней) и проверить, что json не кривой. Зато потом - магия срабатывает в полный рост. Все эти тысячи полей, вложенных структур - уже не надо сидеть, уныло создавая и перенося руками. Чуть подправить там да сям разные мелочи в конце.

👉 Обратный генератор POJO в JSON пригождается реже, но когда пригождается - очень удобен. Он может набить json случайными данными с нужными типами. Дальше можно сразу сунуть готовый json в запрос, или скинуть на обсуждение.

Теперь это в прошлом -

копирование полей по одному из документации в DTO и сочинение примеров запросов.

Слава роботам!
https://t.me/panykey/110

Показать полностью 2
4

Пейте, дети, молоко! Пользуйтесь стандартной библиотекой И будьте бдительны!

Серия Мемуары говнокодеров

Забавную ситуацию вспомнил: как-то на ревью коллега стал меня убеждать в необходимости своих правок. Обосновывал тем, что "из теста вернули с комментарием — очень долго работает запрос, не можем дождаться ответа и обрубаем". Поэтому он решил изменить способ итерации, чтобы всё ускорилось 🚀

Краткая суть: был метод, возвращавший некие данные за период (12 месяцев с отмоткой назад, endDate = 12 месяцев назад, нижняя граница). Внутри себя - он итерировался по этим месяцам, дергал другой метод для получения помесячных наборов, и агрегировал их. Конструкция была такая:

LocalDate startDate = LocalDate.of(2022, 11, 1);

LocalDate endDate = startDate.minusMonths(12);

for (LocalDate date = endDate; date.isBefore(startDate); date = date.minusMonths(1))

Подобный метод-агрегатор был не один, и на ревью первого из них я коллеге посоветовал генерировать набор дат вызовом библиотечного АПИ datesUntil с шагом в месяц, и дальше сгенерированный набор использовать. Это дело благополучно забылось, даты продолжали создаваться внутри for и кочевали с копипастой, дожив до обсуждаемого момента 🤷🏻‍♂️

Я сильно засомневался, что в совершенно ненагруженном вызове, при итерации по 12 элементам — иной способ итерации даст какую-то заметную разницу. Сделал иллюстративные наброски в JShell (полноценные бенчмарки лень было, да и ни к чему) для сравнения разных способов с исходным. Типа таких:

Пейте, дети, молоко! Пользуйтесь стандартной библиотекой  И будьте бдительны!

(копипастабельный текст тут)

Внимательный читатель уже видит суть проблемы. 🕵🏻‍♂️ Самый внимательный - уверен, увидел уже на третьем абзаце!

Результаты, ожидаемо, отличались крайне незначительно:

Dates list for - i => 692

Dates in-place generated for each => 704

Dates list for - each => 708

Dates array for - i => 708

Dates list forEach => 712

Dates list while + iterator => 1060

Разумного объяснения не было 🤯 Стали закрадываться мысли - а не хлопнуть ли нам взяться ли нам за JMeter, профайлер, снять граф... Углубиться, так сказать, до дна.

Не пришлось - взглянул повнимательней и заметил разницу: date = date.minusMonths(1) vs date.plusMonths(1). Вот оно! 🥳 Банальный бесконечный цикл с отмоткой назад от нижней границы периода.

Будь я бдительней - раньше бы заметил, что при копипасте цикла между методами - поменялось назначение границ периода, а итерация осталась старой. В одном методе работало ожидаемо, в другом - 💥.

Используй коллега библиотечный вызов - получал бы единообразно нужный период. И места для ошибки меньше, и проверять проще. И протестировано всё авторами. И оптимизацию бесплатную могут завезти.

Молоко, говорят - просто полезно для здоровья. Его даже за вредность дают. Но не всем 🐱

Показать полностью 1
6

Достать “Enum с параметром” по значению параметра в джаве

Серия Мемуары говнокодеров

Частенько встречаются перечисления, дополнительно хранящие некие значения.

Чтобы в дальнейшем можно было, например, при сериализации в json это самое значение подставлять автоматом. Тогда возникает обычно и обратная задача – десериализовать (распарсить) значение обратно в Enum.

Вот мне и надоело копипастить туда-сюда все эти методы (сериализации/десериализации) между классами Enum. Их прям очень много таких оказалось на нынешнем проекте. Решил сделать один раз утилитный метод и в проекте им пользоваться. Благо, время позволило.

В принципе, подобный метод есть в недрах Apache Commons EnumUtils, но он работает только со строковым параметром String enumName, плюс выкидывает стандартное исключение. А обычно надо выкинуть некое кастомное, принятое на проекте. Так и родился свой костылёчек, как оно зачастую и бывает.

Получить класс Enum по значению

Импорты копировать не буду, полагаю, IDE предложит их подставить по выбору, если автоматически не сможет этого сделать. Сам утилитный метод примитивен:

Разве что – в реальных условиях он выбрасывает не IllegalArgumentException, а кастомное исключение.

ValuedEnum – это интерфейс, который реализуют все Enum со значением. Вот он:

Сделан sealed, чтобы при имплементации (методом копипасты с опорой на "так сойдёт") – был дополнительный “маячок”, заставляющий обратить внимание – это именно Enum со значением.

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

Результаты тестов привожу:

Всяческого разумного порицания жду нетерпеливо, неразумного - со смирением :)

Показать полностью 3
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества