Разработка ждёт балета – Telegram
Разработка ждёт балета
1.65K subscribers
506 photos
4 videos
15 files
1.53K links
What I cannot create, I do not understand.

DM: @alexey_mileev
PeerLab: https://news.1rj.ru/str/+e2ND1tAa0lU2ZTli
Download Telegram
Статья-инструкция к решению задач на dynamic programming и memoization. Интересно, посмотрите.

#algorithm #dynamicprogramming #memoization
http://blog.refdash.com/dynamic-programming-tutorial-example/
Пачка хаков при работе с числами на уровне битов (сдвиги, включить-выключить битик и всё такое прочее). Статья классная, жалко только, что расписано всё в отрыве от применения. А ведь запекание состояния компонента (какого-нибудь View, например), которому нужна куча bool-флагов, в одно чиселко в определённых случаях может резко упростить и сократить код.

#hack #bit
http://www.catonmat.net/blog/low-level-bit-hacks-you-absolutely-must-know/
Так, а если кто-то тут по битовым операциям хочет угореть, то @kenrube прислал ссылку на ещё более обширный сборник.

#hack #bit
http://graphics.stanford.edu/~seander/bithacks.html
Мы тут недавно вспомнили, что Google обещали выложить исходники Architecture Components, но как-то всё это дело прошло мимо нас и мы их не видели. Так вот, они всё-таки есть, может и вам пригодится.
- Lifecycle, LifecycleOwner, LifecycleObserver и прочее разное: https://android.googlesource.com/platform/frameworks/support/+/master/lifecycle/common/src/main/java/android/arch/lifecycle
- ViewModel, LiveData и т.п.: https://android.googlesource.com/platform/frameworks/support/+/master/lifecycle/extensions/src/main/java/android/arch/lifecycle
- Paging: https://android.googlesource.com/platform/frameworks/support/+/master/paging/common/src/main/java/android/arch/paging
- Room: https://android.googlesource.com/platform/frameworks/support/+/master/room/common/src/main/java/android/arch/persistence/room

#source #architecture #components
Доклад про новое в Android Support Library.
- RecyclerView Selection Library - штука, помогающая реализовать selection над списком. Умеет в selection жесты как в Google Photos, что очень даже неплохо. Хотя, это и не очень-то новость, вроде бы про неё я уже давно что-то слышал
- ListAdapter - какая-то странная поделка, упрощающая использование DiffUtil в меняющихся списках, но, судя по коду, который показали, она не то чтобы сильно сокращает код, который придётся написать + ограничивает ваш Adapter на один List, а этого не всегда достаточно
- androidx.webkit - позволяет использовать WebView, обновляемый через Play Store, на старых API
- CustomTab переезжает в androidx.browser + появляется возможность воткнуться в контекстное меню вашей CustomTab и добавить своё действие
- HeifWriter - позволяет эффективно записать YUV byte buffers, Surface и Bitmap в файл, но пока только на API 28+. Обещают добавить backport
- Material components:
* Обновили TextInputLayout - теперь он с рамкой и вроде бы умеет добавлять кнопку “Очистить”
* Button теперь можно по-разному закруглять и добавлять в них иконки
* BottomAppBar - по сути тот же AppBar, только снизу

#supportlib #view #material #talk
https://youtu.be/jdKUm8tGogw
Очень насыщенный доклад про рисование текста. Пока что из всех Google I/O докладов мне встретилось два настолько насыщенных доклада - этот и про Android rendering pipeline, о нём я писал выше.
Сразу порекомендую посмотреть это видео всем, кому приходится много использовать Span, особенно внутри RecyclerView.
Ну и основные highlights:
- Text stack в Android разбит на две части - Java и Native (сразу обратим внимание, что Android контролирует только три верхних уровня - всю Java часть и верхний уровень из Native - Minikin).
* Верхний уровень в Java части - это TextView и EditText, затем идут Layout, Paint и Canvas
* Native часть куда более насыщенная, пройдёмся сверху вниз: Minikin - библиотека для text measurement, line breaking и hyphenation (перенос слов), ICU - работа с Unicode, HarfBuzz - text shaping, FreeType - генерирует bitmaps для всех gliffs, Skia - основной графический движок системы
- Начиная с Android L у нас есть System Wide Word Layout LRU Cache - кэширует до 5000 слов, чтобы переиспользовать результаты обсчётов, когда это же слово снова нужно будет отрисовать
- В Android P ускорили использование simple break strategy вместе с normal или full hyphenation frequency - в детали углубляться не буду, подробности можно найти в видео
- Если с сервака, например, нам приходит строчка, в которой намешано несколько языков, и мы знаем, где какой язык используется, то для правильного переноса слов/строк текста нужно использовать LocaleSpan
- Span делятся на Paragraph spans (применяются на параграф, очевидно) и Character spans (применяются посимвольно, тоже очевидно). В свою очередь Character spans делятся на Appearance affecting (после применения нужно сделать redraw) и Metric affecting (после применения нужно сделать и remeasure, и redraw). Про написание своих Span в докладе тоже есть кусок, поэтому посмотрите, если нужно
- У нас есть три класса: SpannedString (нельзя mutable text, нельзя mutable markup), SpannableString (нельзя mutable text, можно mutable markup) и SpannableStringBuilder (можно mutable text, можно mutable markup). В докладе показали сравнение производительности SpannableString и SpannableStringBuilder (они по-разному устроены внутри: один на массиве, второй на деревьях), результаты следующие: до 250 Span они ведут себя одинаково, дальше SpannableStringBuilder выигрывает. Ну, вы поняли, что использовать :)
- Ещё я увидел интересную фишку с <annotaion/> тэгом внутри strings.xml. Допустим, у вас есть какая-то строка, переведённая на несколько языков. Вам нужно применить какой-то Span на определённое слово в этой строке. Но в одном языке это слово стоит в одном месте, а в другом языке - в другом. Вот ровно эту проблему решает <annotation/> тэг. Если такая задача перед вами стоит - сходите посмотрите.
- Если нужно отрисовать какой-то очень длинный текст, не нужно его целиком запихивать в TextView. Разбейте на параграфы и используйте RecyclerView.
- Ну и новая фишка в Android P - Magnifier. Это такая экранная лупа, которая поможет с выделением текста. Для TextView и EditText она будет работать из коробки, но и к своим custom View её можно прикрутить.
За сим откланиваюсь.

#text #span #textview #talk
https://youtu.be/x-FcOX6ErdI
Новость, которая будет интересна всем Google Developer Experts (GDE) и тем, кто планирует получить этот статус. Каждый GDE теперь может получить бесплатную лицензию на все продукты JetBrains.

#gde #google #intellij #jetbrains
https://www.jetbrains.com/shop/eform/devrecognition
Неплохая статья в блоге Karumi с некоторыми советами/фишками по Kotlin. Многое из того, что там есть, довольно очевидно и баян. Но есть и очень приятные вещи типа .exhaustive для when. Советую посмотреть.

#kotlin #tips
http://blog.karumi.com/kotlin-android-development-6-months-into-it/
@istima прислал ссылку на статью с перечислением Google приложений и сайтов, которые уже адаптировали обновленные Material Design гайдлайны. Посмотрите, если интересно.

#google #material #guidelines
https://9to5google.com/2018/05/22/full-list-google-apps-material-theme-design-2/
Слушайте, а доклады на какие темы вам бы больше хотелось видеть на конференциях? Даже если вы на них совсем не ходите, какие темы вызывают наибольший интерес? Давайте проведём мини-опрос.
Я не нашёл бота, который позволил бы делать множественный выбор и умел бы работать с таким кол-вом вариантов, но давайте хотя бы через Google форму. Там всего один вопрос, займёт меньше минуты :)
Через недельку подведём итоги.

#survey #conference
https://goo.gl/forms/Nfuwk8BNVZUwROV53
Разработка ждёт балета pinned «Слушайте, а доклады на какие темы вам бы больше хотелось видеть на конференциях? Даже если вы на них совсем не ходите, какие темы вызывают наибольший интерес? Давайте проведём мини-опрос. Я не нашёл бота, который позволил бы делать множественный выбор и умел…»
Как и обещал, подводим итоги опроса про интересующие вас темы. Спасибо всем, кто уделил минутку! Напомню, что можно было выбирать от 1 до 16 вариантов интересующих тем. Кстати, как меня потом пнул @pro100svitlo, я совсем забыл включить вариант про Б - Безопасность.

Итак, получилось вот что:
* Всего ответов: 127
* Минимально выбирали тем: 1
* Максимально выбирали тем: 16 (т.е. все)
* В среднем выбирали по 6.7 вариантов
* По медиане - выбирали 6

Теперь топ-5 тем:
* 11% - Архитектура - разные паттерны или примеры проектирования определённых слоёв приложения
* 11% - Внутренности View в Android, написание своих View и ViewGroup
* 10% - Интересное из области performance в Android
* 9% - Material Design с точки зрения разработчика - может какие-то интересные выработанные подходы
* 8% - Какие-то непосредственные кишки Android - интересная но не всегда практичная инфа

Полная табличка с результатами есть по ссылке.

#survey #results #conference
https://docs.google.com/spreadsheets/d/1u6v7EY1i9Rgmw8f_WIfAy7F9rPxw8T73wIyMgZfxkFU/edit?usp=sharing
Внезапно (не то чтобы очень, но всё же) Google убрали раздел Tablet с android-dot-com. Пациент и раньше был скорее мёртв, чем жив, так что я радуюсь. А за новость скажем спасибо @istima.

#tablet #chromeos #google
https://techcrunch.com/2018/06/01/google-quits-selling-tablets/
Google Photos Library API:
* Возможность показывать юзерам фото из их Photos библиотеки. И Smart Filters позволяют фильтровать по: тегам (распознанное в Cloud Vision API), датам и интервалам дат
* Возможность загружать фото в Photos юзера
* Инфраструктура для шэринга фото - шэринг через ссылку на shared album

#talk #google #photos
https://youtu.be/KIFfibtzaEo
Сразу две статьи из серии, в которой планируется рассказать об уроках, вынесенных из разработки cooperative multitasking библиотеки поверх Kotlin coroutines. Всё это слабо затрагивает Android-разработку, но любителям Kotlin и корутин должно зайти.
В первой статье речь в основном пойдёт о разнице между вертикальной и горизонтальной обработкой.
Во второй же статье - про оптимизацию suspending functions на примере реализации очереди.

#kotlin #coroutine
https://blog.pronghorn.tech/cooperative-multitasking-with-kotlin-coroutines/
http://blog.pronghorn.tech/optimizing-suspending-functions-in-kotlin/
Если тебе ну вот прямо ни разу не интересен серверный мир, можешь смело пропускать пост. В противном случае - привет. Доклад от создателя Node.js Ryan Dahl, в котором он рассказал, о чём в Node он сожалеет и что нас ожидает в его новой поделке: Deno.
Увы-и-ахи:
* Node не остался на Promise
* Безопасность - в Node тебе доступно всё, что можно
* Система сборки - Node привязан к GYP, на ней же сидел Chrome, когда Node начинался. Только вот Chrome переехал на GN, а GYP из Node уже не выпилить
* package.json
* node_modules
* require(“module”) должен содержать расширение файла
* index.js
Что же такое Deno? Ryan назвал его “A secure TypeScript runtime on V8”. Пока это дело в разработке и пользоваться им не стоит, но мы привыкли ждать :)
В чём основные цели Deno?
* Использовать V8 secure sandbox, не давать произвольным native функциям залезать в V8. Внутри это устроено так: бежит Deno Process (к слову, написан на Go), у которого есть все permissions. Внутри него бежит V8, у которого этих самых permissions примерно нихрена. И связывается всё это по простой send-receive схеме поверх Protobuf.
* Упростить систему модулей
- Дружное нет переиспользованию текущей Node modules экосистемы
- import statements должны содержать расширение файла (и довольно похожи на Go)
- Импорты по URL подтягиваются только первый раз и кэшируются
- Vendoring возможен через указание non-default cache directory
* Только один исполняемый файл на выходе (кажется, чуваку очень понравился Go)
* TypeScript компилятор встроен в исполняемый файл (Ryan очень тепло отзывался о TypeScript и назвал Dart total failure)
* “Die as soon as it gets an error”
* Поддержка top-level await
* Быть browser-compatible там, где это возможно

#talk #nodejs #deno
https://youtu.be/M3BM9TB-8yA
@duglasher в очередной раз нам с вами кое-чего подкинул. На этот раз доклад Владимира Иванова про миграцию с RxJava на Kotlin Coroutines. Доклад на примере простого Github клиента показывает следующее:
* Проблемы RxJava
- Создаётся много overhead
- Сложный stacktrace, который ещё и не указывает на то, откуда всё изначально вызывалось
- Необходимость обучать новых разрабов, которые с RxJava не работали
* По Kotlin Coroutines:
- Легче читать, т.к. код асинхронный, но пишется как синхронный
- Обработка ошибок средствами языка
- Stacktrace всё ещё не очень, хоть и не такой длинный
Теперь немного про остальное в докладе:
* Deferred - оно как Future, только другое:
- Non-blocking
- cancellable
* Что есть suspension?
- Если обычно при вызове блокирующего метода текущий поток останавливается, то при вызове suspending function поток продолжает выполняться, а корутина уходит на выполнение к своему context.
- То есть suspension означает, что мы не блокируем, а только приостанавливаем поток, что в свою очередь означает возможность продолжить выполнение с того же места, но накладывает ограничение - suspension может случиться только в определённых местах (там, где можно вызвать fun с suspend модификатором)
* Показано, как мигрировать тесты
* И немного про работу с Kotlin Channels

#talk #rxjava #kotlin #coroutine
https://youtu.be/dQSLfj8EoVU
Помните Temple Run? Была когда-то такая игрушка. Вот в статье по ссылке описан reverse engineering этого дела. Статья не самая подробная, но даже если опыта в таких вещах нет, я бы советовал прочитать.

#unity #reverse #cybersec
https://www.rotlogix.com/blog/2018/6/10/reverse-engineering-android-unity-games-part-one
Просто интересная находка: статья от Romain Guy из ранних времён Android про некоторые оптимизации рисования background’ов.

#view #performance
http://www.curious-creature.com/2009/03/04/speed-up-your-android-ui/