Javanese Online
Open in Telegram
Статьи и новости, наблюдения и советы. Кодревью: http://javanese.online/%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80_%D0%BA%D0%BE%D0%B4%D0%B0/ Обсуждение в @javanese_questions Материалы пишет @Harmonizr
Show more723
Subscribers
No data24 hours
+37 days
+530 days
Posts Archive
Спасибо @egroden за внимательность!
Регистрация не через приложение для iOS — тут: https://cocoaheads-spb.timepad.ru/event/1113307/
15 ноября пройдет петербургская встреча CocoaHeads на площадке от Revolut.
В программе:
– Sign In with Apple (client + server)
Пётр Третьяков, Redmadrobot
– Рефакторинг в условиях быстрорастущего стартапа
Георгий Фесенко, Revolut
– Эволюция антипаттернов в Java и Kotlin
Михаил Горюнов, Яндекс
Афтерпати, викторина и тёплая атмосфера практически в сердце Петербурга.
https://apps.apple.com/ru/app/cocoaheads-russia/id1257534277
«Скажите этому чуваку, что у него эхо!»
Казалось, всё должно пройти хорошо: саундчек был, настройки шумоподавления и громкости мы выбрали. Я открыл Impress на обоих экранах: один стримил, на втором видел следующий слайд. На телефоне открыл YouTube, чтобы поглядывать в чат, в Telegram держал связь с организаторами.
Оказывается, чат в YouTube не работает на телефоне. Он остаётся белым полотном, и по нему не угадать, пустой он или сломался.
Вот такой получился полезный опыт тестирования в проде.
Приношу всем извинения за эхо и паузы в попытке всё исправить.
10 ноября(воскресенье) приглашаем всех желающих на бесплатный онлайн-доклад практикующего Android-разработчика Михаила Горюнова (github.com/Miha-x64, twitter.com/Miha_x64, @javanese_online)
💬Тема доклада: «Эволюция антипаттернов в Java и Kotlin».
Приходите послушать и прокачать свой skill.💪🏼 Будет интересно и полезно!
———————————————
❗️Save the date! 10 ноября в 19 по мск❗️
———————————————
Трансляция состоится в ⏰19:00 по московскому времени на нашем Youtube-канале https://www.youtube.com/c/SkillBranch.
Присоединяйся!🏃🏻♂️💨
Основы?.программирования?.на?.Kotlin!!
Мне прислали проект на ревью и попросили пояснить, правильно ли реализованы MVP и маппинг.
Отвечаю: нет, хороший маппер — выпиленный маппер, то же касается и хорошего презентера.
Так что я просто разобрал встреченные в проекте ошибки.
Напомню, любой желающий может прислать свой код на ревью. Если пример окажется интересным и нетипичным, я постараюсь его разобрать.
Боль мапперов
Почему мапперы придумали — понятно: чтобы трансформировать данные из одного формата в другой, нужно представить их в каком-то виде. Работать непосредственно с потоком токенов или синтаксическим деревом и привязываться к формату сериализации никому не хочется, а особенно неприятно, если формат динамически типизирован (JSON, XML), а язык программирования — статически. Поэтому универсальной формой данных стали DTO и всевозможные их сочетания.
Однако, код преобразования одних DTO в другие выглядит невыразительно, в нём легко ошибиться, а парсинг в промежуточные структуры избыточен.
Что делать с этим императивным наследием махрового энтерпрайза? Жду ваши варианты в @javanese_questions
Товарищ написал статейку о минусах MVP. Очень легко читается, должно быть понятно и знакомо каждому андроидщику.
sidenote:
JSON ужасно неэффективен, т. к. там постоянно повторяются имена полей объектов.
JSON особенно неэффективен в Java, т. к. там UTF-16.
Ещё JSON категорически неэффективен в XML (привет, SharedPreferences), т. к. каждая кавычка превращается в
".Java hidden costs revisited
Этот перевод я сделал раньше, чем канал в телеграме. Так что вот он ещё раз, исправленный и дополненный.
Форкнул и поправил план роста и развития для андроидщиков. Содержит как спорные и необязательные темы вроде Firebase, так и необходимые: языки, Java Core, Android SDK.
Любопытный блог, автор которого критикует Elegant Objects Егора Бугаенко и излагает своё видение ООП, которое называет Pragmatic Objects.
The core principles of software design
No DI containers, please
Написал несколько инспекций для IntelliJ IDEA / Android Studio:
* атомик можно заменить на
volatile, если используются только методы get и set
* возвращаемое значение Enum.values() стоит кешировать
Kotlin:
* property delegation
* не надо называть сущности ключевыми словами из Java
* от инлайн-функции больше вреда, чем пользы, если внутри неё объявлены неинлайновые анонимные функции
* функция не может быть заинлайнена в данной ситуации
Android XML:
* использование аттрибута темы <include layout="вот здесь">
Страница плагинаЯ встречал два разных определения понятия Dependency Injection.
1. Пафосное название для передачи зависимостей.
new SomeServerApplication(
new HttpServer("https", "example.com", 443),
new DbConnectionPool(new JdbcConnection(...)),
new HtmlResponseWriter(Charsets.UTF_8)
)
2. Передача зависимостей с помощью стороннего, «магического» (т. е. внеязыкового) механизма.
@Inject SomeServerApplication(params)Некоторые споры и сломанные копья упираются не в разногласия между спорящими, а в разницу между определениями.
Хакатон. Разные люди, разные привычки и предпочтения.
Кому-то понятна только Java с XML, т. е. нельзя просто так взять и выбрать Anko или Splitties View DSL для всего приложения.
Но желание не писать легаси-код лично у меня побеждает, спонтанно получается вёрстка в коде.
При этом сахар пишется на коленке и по мере необходимости — и получается очень простой и в небольших количествах.
Категорически согласен с этим господином: код должен в первую очередь кричать о том, что он делает, а не из каких компонентов состоит.
https://youtu.be/YZstpc2939s?t=1564
Немного тезисов.
Для рантайма, где дженерики стёрты и всё указатель, такие идиомы, как кодогенерация, макросы и рефлекшен неуместны.
ProGuard не узнает, какие конвертеры в Gson используются, а какие будут только занимать место.
Тонкий клиент или CRUD-приложение — частный случай дата-байндинга.
Видео с #AppsConf2019: https://www.youtube.com/watch?v=Yx2VjW5G2GA
Библиотека: Lychee, чат: @kotlin_lychee
Давно я ревью не делал.
Здесь выполненное тестовое задание: валидатор банковских карт.
Вывод из этого всего напрашивается один — упрощайте.
