По-явански
رفتن به کانال در 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 روز
آرشیو پست ها
827
Друзья, привет!
Android Academy SPb запускает онлайн-курс Android Advanced. И наша первая тема — Views & Graphics!
Меня зовут Михаил Горюнов @Harmonizr, я Android-разработчик-фрилансер. И 22 октября я подробно расскажу, как в Android работают View. На примерах покажу, как писать свои и вьюхи и ViewGroup, Drawable и ItemDecoration. Также поговорим про работу Canvas, Paint и Shaders.
Лекция будет полезна как начинающим, так и опытным разработчикам. Не пропустите! 😉
Регистрация
827
Менеджер зависимостей для Android
Меня вдохновляет Graviton Browser — браузер JVM-приложений. В качестве адреса ему можно передать
groupid:artifactId — гравитон скачает последнюю версию вместе со всем деревом зависимостей и запустит Main Class.
Подобное можно провернуть для андродиа, но немного в другой форме:
— на телефон устанавливается приложение-менеджер. Графического интерфейса у него нет;
— берётся любое приложение, из него выпиливаются библиотеки, вместо них нужно взять одну маленькую — коннектор к менеджеру зависимостей;
— в метадату манифеста вписываются зависимости, чтобы менеджер пакетов их увидел;
— на старте приложение связывается с менеджером пакетов и получает от него необходимые dex'ы.
Это решает сразу несколько проблем:
— раздутый размер APK. Все библиотеки теперь находятся снаружи, популярные библиотеки не дублируются в каждом приложении;
— фиксы библиотек можно доставлять без пересборки и перезаливки (как, впрочем, и баги);
— менеджер пакетов учитывает версию Android и может подхватывать нужные пакеты в зависимости от этого. Например, брать Гришкин liteX для SDK21+ или, наоборот, подключать бэкпорт CompletableFuture, Streams, java.time, если платформа старая.
Есть, конечно, и минусы:
— не все соблюдают semVer, можно по неосторожности доставить ломающие изменения;
— правила Маркета не позволяют подгружать код не из Маркета;
— возможны просадки времени старта.
Есть вам нравится эта #идея и вы решите поучаствовать в реализации, стучите в личку — помогу чем смогу.827
ReadWriteLock простыми словами
ReadWriteLock — как кастрюля:
* можно варить только один суп в один момент времени;
* нельзя подъедать суп, пока он варится (ой!);
* когда суп готов, его можно есть несколькими ложками.827
Дайте два!
void bulk(Iterable<? extends T> ts)
void bulk(Stream<? extends T> ts)
Так как StreamEx реализует и Stream, и Iterable, для выражения bulk(streamEx) javac не сможет выбрать нужную перегрузку: оба варианта одинаково хороши.
Какое решение вы бы выбрали?827
Сегодня вышел ProGuard 7, с чем и поздравляю разработчиков десктопных приложений. Кстати, проект наконец-то перебрался в гитхаб.
827
Многие знают jlink — инструмент, который собирает уменьшенную JVM, чтобы её удобно было поставлять пользователям (актуально для десктопных приложений). Но jlink нормально работает только с модульными проектами, а на jigsaw все забили. Оказывается, есть аналогичная штука для немодульных проектов.
827
Итератор стоит между элементами.
next() перепрыгивает через элемент и возвращает его:
| 0 1 2 .next() => 0 0 | 1 2 .next() => 1 0 1 | 2 .previous() => 1 (sic!) 0 | 1 2
ResultSet и Cursor стоят на строках и переходят с одной строки на другую:
[] 0 1 2 .next() или first() [0] 1 2 .next() 0 [1] 2 .previous() [0] 1 2
827
«“Велосипед” — это просто вредная риторическая уловка, чтобы оправдать свою лень или самоутвердиться в споре»
Часто встречаю пару заблуждений, которые в утрированной и доведённой до абсурда формулировке звучат так:
• нельзя использовать малоизвестные инструменты. У библиотеки должны быть десятки тысяч звёзд на гитхабе и выделенная какой-нибудь корпорацией команда для поддержки;
• нельзя делать свои инструменты, когда в мире уже есть хоть что-нибудь отдалённо похожее.
Статья @fillpackart развеивает эти заблуждения.
827
В ходе споров с коллегой в твиттере я написал пару интересностей:
коллбэчная и блокирующая многопоточка, два в одном,
делаем два параллельных запроса и склеиваем результаты средствами java.util.concurrent.
827
Полная версия моего доклада про антипаттерны. Таймкод для тех, кто видел предыдущие версии, есть в описании.
827
Итак, что же это было.
Понять можно, если посмотреть на строчку
""&'<>": это код для замены «опасных» для XML символов на соответствующие сущности (entities).827
Кстати, о компактном размещении данных в памяти. Есть идеи, что делает этот чудесный код, который я нарочно скомпилировал и декомпилировал?
