fa
Feedback

فریب کلاهبرداران را نخورید! تل‌متریو این کانال‌ها را شناسایی و برچسب‌گذاری می‌کند 👉 برای مشاهده برچسب، اشتراک تهیه کنید

По-явански

По-явански

رفتن به کانال در Telegram

Пишу про Java-технологии, Kotlin и Android-разработку. Редко но метко. Кодревью: http://javanese.online/%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80_%D0%BA%D0%BE%D0%B4%D0%B0/ Поболтать IRL: @coffeeCodeEverywhere Автор: @Harmonizr Менеджер по рекламе: /dev/null

نمایش بیشتر
827
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-17 روز
+530 روز
آرشیو پست ها
IllegalStateException: cannot make a new request because the previous response is still open: please call response.close() За
IllegalStateException: cannot make a new request because the previous response is still open: please call response.close() Занятный крэш меня сегодня посетил. Типовое обновление токена. Нетрудно понять, где именно баг, но как именно вы бы его чинили?

Вопрос, который мне не задали на конференции: является ли SVG path-data Тьюринг-полным языком?
Anonymous voting

За три минуты и с первой попытки побеждает @italankin! Прикрепляю фикс.
За три минуты и с первой попытки побеждает @italankin! Прикрепляю фикс.

Немного баготворительности. В каком сценарии сеттер сработает неверно?
Немного баготворительности. В каком сценарии сеттер сработает неверно?

Курс по ФП на Java Знаю, что «восьмёрке» уже восемь лет, но этот курс мне скинули буквально месяц назад. Функциональная композиция, стримы-коллекторы, CompletableFuture и прочие монадки в задачах и примерах. https://stepik.org/course/91497/syllabus

Опять про андроид. И снова сохранение состояния Есть паттерн такой — назовём его custom composite view: наследуем любой подходящий layout, инфлейтим внутрь него <merge> и переиспользуем целиком. Описан в этой статье и много где ещё. Но, как говорится, есть один нюанс. Если на экране более одного такого компонента, айдишки внутри начинают дублироваться. В итоге при сохранении состояния побеждает тот, кто сохранялся последним, щедро раздавая всем компонентам своё состояние при восстановлении. Для вьюшек с пользовательским вводом, таких как текстовые поля, слайдеры, чузеры и вот это всё, проблема прям критичная. Нужно переопределить dispatch(Save|Restore)InstanceState, которые отвечают за сохранение-восстановление всего поддерева. Далее — вариации: а) можно вызвать dispatch(Freeze|Thaw)SelfOnly(container), как это делает ресайклер, и в on(Save|Restore)InstanceState сделать всю нужную работу. Придётся унаследовать SavedState, к сожалению; б) а можно взять какой-нибудь ParcelableSparseArray и передать его в super.dispatchSaveInstanceState и положить его в container под своим id, изолировав таким образом состояние всего компонента в отдельное пространство айдишек.

Платформа для донатов Очередная #идея, которую я (да ладно, будем честны, подслушал и) дарю любому банку/финтеху. Организация или отдельно взятый волонтёр открывает специальный счёт для донатов. Для счёта генерируется специальная общедоступная страничка — там эквайринг и история операций, к которой автоматом прикрепляются электронные чеки. Всё, любой благотворительный проект может вылезти из пещерного века, выбросить камень, плуг, соху, десять карт разных банков и систем (потому что эквайринг) и гигабайт фоток чеков на телефоне.

Adapter Delegates Почему я не использую «классические» адаптерДелегаты? Смотрим невооружённым глазом:
val adapter = ListDelegationAdapter<List<Animal>>(
    catAdapterDelegate(...),
А если приподнять завесу «няшного» Kotlin DSL, то вообще увидим ЭТО:
public boolean isForViewType(List<Animal> items, int position) {
    return items.get(position) instanceof Cat;
}
Напрашивается следующий вывод: • можно забыть нужный делегат (крэш в рантайме), • а можно забыть удалить лишний (недостижимый код), • нельзя использовать несколько делегатов для одного типа данных. Первые два пункта — классика: в Retrofit можно переехать с RxJava на suspend и забыть убрать CallAdapter.Factory, а в Gson есть «изкоробочные» адаптеры для, скажем, AtomicIntegerArray, которые психически здоровому человеку не нужны, а больному — вредны. Третий пункт — ваще критикал: я хочу пару разных делегатов-заголовков, оба с типом CharSequence но разными шрифтами, отступами, размерами. Или в вертикальном списке имею горизонтальные списки всякого разного, которые сплошь instanceof List. Короче, я создал, хоть и столько лет спустя. Под капотом там просто сдвоенный List из элементов и их делегатов. В комплекте валяется ItemDecoration, который могёт… а, не буду пересказывать скриншот, он в конце readme. Лучи добра всем трудящимся!

Итак, $company хочет вас схантить
Anonymous voting

Gson 2.9.0 Пару месяцев назад тихой сапой вышло обновление объекта обожания всех рефлектологов и ансейфоведов. Моё внимание привлекли эти два изменения: • Support EnumMap deserialization (#2071) • Add GsonBuilder.disableJdkUnsafe() (#1904) Вот и отлично! Не прошло и десяти л… а, нет, прошло :) Того гляди, скоро и EnumSet начнёт поддерживать. https://github.com/google/gson/blob/master/CHANGELOG.md

Пять стадий написания LayoutManager 1. 😨 Быть такого не может, чтобы ранее такую штуку никто не делал! 2. 😡 Нет, ну почему никто не запилил?! 3. 🤬 Может, как-нибудь попроще, без менеджера? 4. 😢 *гуглинг в гитхабе* 5. 😌 Ладно-ладно, пойду писать. Итого: Flow (раскладывает в строчку, переносит на новую при необходимости) с возможностью ограничить количество строк и показать специальную вьюшку «ещё 100500». https://github.com/Miha-x64/FlowLayoutManager/

Пять стадий написания LayoutManager 1. 😨 Быть такого не может, чтобы ранее такую штуку никто не делал! 2. 😡 Нет, ну почему
Пять стадий написания LayoutManager 1. 😨 Быть такого не может, чтобы ранее такую штуку никто не делал! 2. 😡 Нет, ну почему никто не запилил?! 3. 🤬 Может, как-нибудь попроще, без менеджера? 4. 😢 *гуглинг в гитхабе* 5. 😌 Ладно-ладно, пойду писать. Итого: Flow (раскладывает в строчку, переносит на новую при необходимости) с возможностью ограничить количество строк и показать специальную вьюшку «ещё 100500». https://github.com/Miha-x64/FlowLayoutManager/

Концентрированная мудрость Ежедневно я пишу код, коплю опыт и делаю выводы. Каждые десять лет у меня выкристаллизовывается ровно одно идеальное, чётко сформулированное и неопровержимое утверждение. Впервые я делюсь своим арсеналом, накопленным за всю сознательную жизнь. • Глобальные переменные — сила. Легко дебажить, сразу видно всё состояние приложения, как на ладони. Нет необходимости передавать какие-либо параметры в функции. • Полиморфизм — мракобесие: разобраться в нём — это как выбрать себе подходящий гендер из 50 вариантов. • Вариативные дженерики нужны только для написания диссертаций на эту тему. • В рестухе коды состояния излишни. Всегда отвечай 200 Ок, ошибку же можно вернуть в теле ответа. • Главное топливо для работы — кофе. На завтрак, обед и ужин. • Решение абсолютно любой проблемы можно копипастить со стека. Люли там неглупые, сообщество активное, а значит, и код 100% рабочий и качественный. • Самая важная языковая фича — деструктор. Особенно в джаве! Правильно написанный конструктор в руках умелого прогера превращается в мощный деструктор.

Repost from EasyCodeRu
Весь путь андроид разработки с 2015 по сегодняшний день за 4 часа: в гостях Миша @Harmonizr https://www.youtube.com/watch?v=LG_C-igSTP8

Поболтали с Оганнесом за жизнь.

Давно я на собесы не ходил… Во вторник пойду, наконец!

О, у меня ж ревью на днях вышло. Немного про ProGuard rules, чучуть про анимации, капельку про навигацию, ну и всякое по мелочи.