Получи случайную криптовалюту за регистрацию!

Javanese Online

Логотип телеграм канала @javanese_online — Javanese Online J
Логотип телеграм канала @javanese_online — Javanese Online
Адрес канала: @javanese_online
Категории: Технологии
Язык: Русский
Страна: Россия
Количество подписчиков: 674
Описание канала:

Статьи и новости, наблюдения и советы.
Кодревью: http://javanese.online/разбор_кода/
Обсуждение в @javanese_questions
Материалы пишет @Harmonizr

Рейтинги и Отзывы

4.50

2 отзыва

Оценить канал javanese_online и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

1

4 звезд

1

3 звезд

0

2 звезд

0

1 звезд

0


Последние сообщения

2021-12-09 11:02:59 Кстати, у всем известного нам @Harmonizr вышел апдейт его IDE плагина, который в текущей версии обладает крайне важной и нужной функцией, а именно чистит ваши SVG от всякого лишнего мусора.

Установить плагин можно по ссылке - https://plugins.jetbrains.com/plugin/12690-mike-s-idea-extensions/versions/stable/148933
235 views08:02
Открыть/Комментировать
2021-11-30 16:59:07 Всем привет! Мы вместе с Алексеем Гладковым (YouTube-канал Mobile Developer) проводим онлайн-дискуссию про то, как выбрать идеальный SDK для Android-приложений и существует ли он, какие SDK — must-have для Android, а когда лучше обойтись без интеграции внешних…
557 views13:59
Открыть/Комментировать
2021-11-26 18:53:31 Всем привет!
Мы вместе с Алексеем Гладковым (YouTube-канал Mobile Developer) проводим онлайн-дискуссию про то, как выбрать идеальный SDK для Android-приложений и существует ли он, какие SDK — must-have для Android, а когда лучше обойтись без интеграции внешних библиотек.

В ходе беседы соберём мнения тех, кто широко использует SDK для себя, кто разрабатывает их для других и кто предпочитает использовать только свои решения.

30 ноября в 17:00, регистрация здесь: https://qonversion.io/sdk-meetup
Приходите!
654 views15:53
Открыть/Комментировать
2021-11-14 20:21:26 Вот поэтому под Android так больно разрабатывать. И по той же причине я не рекомендую Android в качестве первой платформы. http://javanese.online/%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8/%D1%84%D1%83%D0%BD%D0%B4%D0%B0%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BB%D1%8…
665 views17:21
Открыть/Комментировать
2021-11-03 02:35:16 Решают ли DI-фреймворки больше проблем, чем создают?

В моём канале с мемами много шуток про то, что в спорах между Dagger 2 и Koin на самом деле побеждают фабрики. Так вот, это не шутки. Я считаю что DI-фреймворки в android – это подражание спрингерам, дань моде, следствие хронического ООП-клинкода головного мозга и просто переоценённое излишество. Жёсткий наброс вкинут, погнали подкреплять его аргументами.

Что вообще решают DI-фреймворки?
DI фреймворки в основном решают очень простую проблему – как написать код, который собирает объект из зависимостей. Это очень простой код, который легко написать и потом читать и дебажить. Есть ли в этом вообще проблема? Ну да, кажется, что это "бойлерплейт". Слишком скучно и неинтересно. Но когда скучный код был проблемой? Проблемой обычно бывает как раз "интересный" код. Его надо прочесть, понять, переспать с ним, вдуматься, ошибиться в нём пару раз. Со скучными фабриками проблемы нет. Я готов их писать каждый день.

Что если вы не такой устойчивый к рутине?
Ладно, допустим, рутина написания фабрик для вас – это проблема. Настолько большая, что вы не представляете, что можете отказаться от DI-фреймворка и начать писать всё руками. Но вы пробовали? В Kotlin, благодаря интерфейс- и проперти-делегатам неплохо получается писать код фабрик кратко. И при этом вам и вашим джунам не придётся учить доменный язык Koin или язык аннотаций Dagger. Серьёзно, я помню джуновскую дрожь в коленках от словосочетания Inherited subcomponent multibindings в документации Dagger. Я честно говоря до сих пор не понимаю, какие задачи стоят перед теми кто в такое упарывается. Да и в простых случаях помню как смотрел как баран на новые ворота и пытался понять, а какой магией зависимости прилетают ко мне в конструктор? Почему иногда я вешаю @Inject надо конструктором и всё работает, а иногда мне выплёвывают портянку красного кода где ни слова о том, что мне просто нужно поставить ещё одну такую же аннотацию и всё снова будет работать? Ух, аж передёрнуло от волны флешбеков. Koin я начал изучать на более сознательном этапе карьеры, но всё равно надо было посидеть поразбираться, чем их модули и компоненты отличаются от Dagger и Ninject. А так был бы только Kotlin, только хардкор прагматичный подход.

Какие проблемы не решают DI-фреймворки?
При этом мы расплачиваемся более высоким порогом входа только за решение тривиальной задачи "собери из спичек домик". На более сложные, смежные с DI вопросы типа навигации иили передачи данных из одного скоупа в другой, восстановления графа зависимостей, жизненного цикла зависимостей, кооперативного очищения скоупов зачастую во фреймворке готового ответа нет или ответы в лучшем случае medium rare. Эти проблемы приходится решать самому, и тут есть 100500 решений и в каждом проекте будет немного по-другому. А это задача сложная, из тех что на подумать. Хорошо если у вас в команде будет условный Владимир Тагаков, который всё вам настроит и будет бить по рукам за неправильное использование и срезание углов. Но в современной разработке мы часто слишком мало думаем, у нас нет возможности лечь в гамак как Рич Хикки и думать о наилучшем способе показать пользователю промку с акцией на чёрную пятницу. Сложная проблема + сложный инструмент + ограниченные ресурсы = неоптимальные решения, которые стрельнут через пару лет, треснув под грузом нового кода как плохо залитый фундамент.
736 views23:35
Открыть/Комментировать
2021-10-22 12:36:39 Чёт все новости — про Компоуз, Хилт или компайл-тайм рефлекшен в Котлине.

30 октября в 10:00 Мск будет бесплатная онлайн-конфа. В кубернетесах я ничего не понимаю, а вот про Loom, Graal Native Image и Java 17 послушаю с интересом.
645 viewsedited  09:36
Открыть/Комментировать
2021-10-21 17:47:34 Дано: проект с Gson и смешанным кодом на Java и Kotlin.
Задача: пилить фичи, добавлять эндпоинты.
Хотелки:
1. Не иметь геттеров. Из существующего джавового кода они выглядят многословно.
2. Поля должны быть финальными. Не хочу нежданчиков в виде случайных присваиваний.
3. Нужны фоллбэки. Если опциональное поле не приходит, пусть у него будет удобное значение — emptyList() или "".

Вариант описывать данные на котлине с @JvmField я отмёл: многословно. За что боролись, об то и навернулись. Вместе с @SerializedName может и в строчку не уместиться.

Остаётся джава, поля объявил в таком виде:
@SerializedName("user_name") public final String userName = "";

Проблема первая: для такой конструкции у поля генерируется ConstantValue и инлайнится в места использования. В итоге Gson успешно переписывает финальные поля, но их уже никто не читает. Случай описан выше. Выход — таки унести присвоения в конструктор, как в B и C.

Проблема вторая: опциональное поле может прийти null. Тогда я хочу оставить фоллбэк.
Есть GsonBuilder#serializeNulls(), но мне нужно наоборот: не десериализовать нуллы. Настройки такой нет, конский ReflectiveTypeAdapterFactory копипастить ради одного ифа не хочется.

В итоге написал JsonReader, который эти нуллы пропускает.
647 viewsedited  14:47
Открыть/Комментировать
2021-10-21 17:35:53
Фишка в том, что я в детстве невнимательно читал JLS.
Поле считается константным, если оно финальное и инициализировано константным выражением в месте объявления. Про static здесь ни слова.

В итоге класс А после декомпиляции выглядит так, как показано на картинке.
B и C (E, F) этому правилу не подчиняются, поэтому все поля честно используются.
D тоже «нормальный» — котлин решил не повторять «странностей» джавы, потому что сейчас уже ясно, что такая конструкция может использоваться для десериализации.
498 viewsedited  14:35
Открыть/Комментировать
2021-10-21 10:48:01
Какие классы ведут себя эквивалентно, а какие принципиально отличаются?

Только не надо говорить, что у них имена разные и у Kotlin-версий есть метадата, речь про практическую разницу ;)
452 views07:48
Открыть/Комментировать
2021-10-07 14:13:18 Раскопал занятный баг внутри GradientDrawable () в андроиде.
Костыль прилагается.
652 views11:13
Открыть/Комментировать