es
Feedback
Разработка ждёт балета

Разработка ждёт балета

Ir al canal en Telegram

What I cannot create, I do not understand. DM: @alexey_mileev PeerLab: https://t.me/+e2ND1tAa0lU2ZTli

Mostrar más
1 619
Suscriptores
Sin datos24 horas
Sin datos7 días
Sin datos30 días
Archivo de publicaciones
@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

Если тебе ну вот прямо ни разу не интересен серверный мир, можешь смело пропускать пост. В противном случае - привет. Доклад от создателя 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

Сразу две статьи из серии, в которой планируется рассказать об уроках, вынесенных из разработки 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/

Оказалось, что пропажа tablets раздела с android-dot-com - всего лишь баг, который не заметили сразу. За поправку спасибо @Scorpikk. Но я по-прежнему настаиваю, что пациент скорее мёртв :) #tablet #google https://www.engadget.com/2018/06/02/google-killed-android-tablet-section

Google Photos Library API: * Возможность показывать юзерам фото из их Photos библиотеки. И Smart Filters позволяют фильтровать по: тегам (распознанное в Cloud Vision API), датам и интервалам дат * Возможность загружать фото в Photos юзера * Инфраструктура для шэринга фото - шэринг через ссылку на shared album #talk #google #photos https://youtu.be/KIFfibtzaEo

Внезапно (не то чтобы очень, но всё же) Google убрали раздел Tablet с android-dot-com. Пациент и раньше был скорее мёртв, чем жив, так что я радуюсь. А за новость скажем спасибо @istima. #tablet #chromeos #google https://techcrunch.com/2018/06/01/google-quits-selling-tablets/

Как и обещал, подводим итоги опроса про интересующие вас темы. Спасибо всем, кто уделил минутку! Напомню, что можно было выбирать от 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 форму. Там всего один вопрос, займёт меньше минуты :) Через недельку подведём итоги. #survey #conference https://goo.gl/forms/Nfuwk8BNVZUwROV53

@istima прислал ссылку на статью с перечислением Google приложений и сайтов, которые уже адаптировали обновленные Material Design гайдлайны. Посмотрите, если интересно. #google #material #guidelines https://9to5google.com/2018/05/22/full-list-google-apps-material-theme-design-2/

Неплохая статья в блоге Karumi с некоторыми советами/фишками по Kotlin. Многое из того, что там есть, довольно очевидно и баян. Но есть и очень приятные вещи типа .exhaustive для when. Советую посмотреть. #kotlin #tips http://blog.karumi.com/kotlin-android-development-6-months-into-it/

Новость, которая будет интересна всем Google Developer Experts (GDE) и тем, кто планирует получить этот статус. Каждый GDE теперь может получить бесплатную лицензию на все продукты JetBrains. #gde #google #intellij #jetbrains https://www.jetbrains.com/shop/eform/devrecognition

Очень насыщенный доклад про рисование текста. Пока что из всех 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

Доклад про новое в 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 обещали выложить исходники 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

Статья про разницу между разными подходами к IO: blocking, non-blocking, multiplexed и async. #io #multiplexed #async https://www.rubberducking.com/2018/05/the-various-kinds-of-io-blocking-non.html

Так, а если кто-то тут по битовым операциям хочет угореть, то @kenrube прислал ссылку на ещё более обширный сборник. #hack #bit http://graphics.stanford.edu/~seander/bithacks.html

Пачка хаков при работе с числами на уровне битов (сдвиги, включить-выключить битик и всё такое прочее). Статья классная, жалко только, что расписано всё в отрыве от применения. А ведь запекание состояния компонента (какого-нибудь View, например), которому нужна куча bool-флагов, в одно чиселко в определённых случаях может резко упростить и сократить код. #hack #bit http://www.catonmat.net/blog/low-level-bit-hacks-you-absolutely-must-know/

Статья-инструкция к решению задач на dynamic programming и memoization. Интересно, посмотрите. #algorithm #dynamicprogramming #memoization http://blog.refdash.com/dynamic-programming-tutorial-example/

Нашёл шпаргалку (уверен, не я один постоянно это забываю) про `FontMetrics`. И да, как всегда Android Framework во всей красе
Нашёл шпаргалку (уверен, не я один постоянно это забываю) про `FontMetrics`. И да, как всегда Android Framework во всей красе - baseline считай сам :) #cheatsheet #font #text

Доклад, в котором по шагам проходится, как работают штуки типа ProGuard и R8, как к ним пишутся keep-правила и что делать, когда после включения minifyEnabled true всё сломалось. В целом, не советую тратить время, если всё это уже знаешь. #proguard #r8 #minification https://youtu.be/x9T5EYE-QWQ