Дайджест недели
Наш большой и мощный 2-ух недельный дайджест 💪. За прошедшие две недели было несколько интересных новостей:
1. Apple разрешила использовать сторонние способы оплаты в Южной Корее с комиссией в 26% 😁
2. Google выплатит разработчикам около 90 миллионов долларов по иску монополизации рынка и взимании несправедливой платы в размере 30% за app-purchases и in-app purchases, сделанные через Play Store.
Android 🤖
• Modularising Trendyol Android App for Build Efficiency
• We need to go deeper: диплинки и кодогенерация
• A Solution for Combining Kotlin Suspend Function + Retrofit
• 14 задач по Kotlin lists, которые заставят вас подумать
• 8 anti-patterns in Android codebase and why I hate them
• 5 Useful Kotlin Extensions for Android Developers
• Stop passing Context into ViewModels
• Customizing AnimatedContent in Jetpack Compose
• Compose End to End тестирование. Основы
• Setup your CI/CD Pipeline with Fastlane and Github actions for Android apps
• Performance Considerations for Memory Leaks: An Android Cookbook
• Compose sample app: UI state with Flow, offline first
• Side Effects in Jetpack Compose
• The God-level Kotlin Function
• How OkCredit Android App boosted Network Performance by 30%
• Advance Architecture for Android Project
• Control In-app update in Android
• A better way to pass Data from Api to Composable - Jetpack Compose
• MVI Pattern in Android
• Best Android App Templates and Themes of 2022
• 7 Jetpack Compose Projects to Become a Better Android DeveloperーPart- 3
• Load Fragments in Jetpack Compose: Beyond What Google Taught
• Kotlin DataFrame Preview
• Screen response time. A critical metric for user experience
• How to learn Kotlin with IntelliJ IDEA and Android Studio integrated courses
iOS 🍏
• Исследование российских команд iOS разработки, 2022
• Переход на SwiftUI: внедряем TabView взамен UITabBarController
• Generics in Swift explained with code examples
• ARKit 6. Что нового?
• Decoding Dynamic JSON with Swift Codable
• Implement SwiftUI Navigation With NavigationStack and NavigationSplitView
• Understanding VIPER Architecture
• 7 Useful iOS Libraries You Should Use in Your Next ProjectーPart- 4
• A Complete Guide to iOS App Auto Deployment with CI-CD
• Диспетчеризация в Swift: погружение в теорию и практику
• Приключение на 5 минут: как мы переводили все зависимости на SPM
• Creating Cool UI: iOS Shape Morphing
• Async/await в Swift 5.5: асинхронность «здорового человека»
• Removing Dependencies: One Weird Trick for Increasing Happiness,
• Existential any in Swift explained with code examples
• Multi-platform image resizing
• VIP design pattern (or Clean Swift)
• The power of task view modifier in SwiftUI
• AsyncSequence & AsyncStream Tutorial for iOS
• Async Composable Architecture: The Problem
• Typed Payloads in SwiftUI using NSUserActivity
• Testing Throwing Methods In Swift Actors
Кроссплатформа / Разработка 💻
• Build a Flutter app with Very Good CLI and Supabase
• Getting Started With Staggered Animations in Flutter
• Dart Code v3.44
• Flutter для автомобиля. А почему бы и нет?
• Announcing the Dart Custom Lint package
• Dynamic theme color with Material 3 (You) in Flutter
• Deep Linking in React Native
• Flutter battery app made with Klutter
• How to write Flutter code efficiently
• Flutter 3: What are enums and what is new about it
• Как мы перешли на регулярные релизы мобильного приложения. Часть I
• Improving shared architecture for a Kotlin Multiplatform, Jetpack Compose and SwiftUI app
← Previous | Next →
Предложить материал: @artemiygreg
Митапы и конференции: @meetup_today
Библиотеки и инструменты: @mobile_dev_tools
Подписаться: @mobile_native
Чат: @mobile_native_chat
Наш большой и мощный 2-ух недельный дайджест 💪. За прошедшие две недели было несколько интересных новостей:
1. Apple разрешила использовать сторонние способы оплаты в Южной Корее с комиссией в 26% 😁
2. Google выплатит разработчикам около 90 миллионов долларов по иску монополизации рынка и взимании несправедливой платы в размере 30% за app-purchases и in-app purchases, сделанные через Play Store.
Android 🤖
• Modularising Trendyol Android App for Build Efficiency
• We need to go deeper: диплинки и кодогенерация
• A Solution for Combining Kotlin Suspend Function + Retrofit
• 14 задач по Kotlin lists, которые заставят вас подумать
• 8 anti-patterns in Android codebase and why I hate them
• 5 Useful Kotlin Extensions for Android Developers
• Stop passing Context into ViewModels
• Customizing AnimatedContent in Jetpack Compose
• Compose End to End тестирование. Основы
• Setup your CI/CD Pipeline with Fastlane and Github actions for Android apps
• Performance Considerations for Memory Leaks: An Android Cookbook
• Compose sample app: UI state with Flow, offline first
• Side Effects in Jetpack Compose
• The God-level Kotlin Function
• How OkCredit Android App boosted Network Performance by 30%
• Advance Architecture for Android Project
• Control In-app update in Android
• A better way to pass Data from Api to Composable - Jetpack Compose
• MVI Pattern in Android
• Best Android App Templates and Themes of 2022
• 7 Jetpack Compose Projects to Become a Better Android DeveloperーPart- 3
• Load Fragments in Jetpack Compose: Beyond What Google Taught
• Kotlin DataFrame Preview
• Screen response time. A critical metric for user experience
• How to learn Kotlin with IntelliJ IDEA and Android Studio integrated courses
iOS 🍏
• Исследование российских команд iOS разработки, 2022
• Переход на SwiftUI: внедряем TabView взамен UITabBarController
• Generics in Swift explained with code examples
• ARKit 6. Что нового?
• Decoding Dynamic JSON with Swift Codable
• Implement SwiftUI Navigation With NavigationStack and NavigationSplitView
• Understanding VIPER Architecture
• 7 Useful iOS Libraries You Should Use in Your Next ProjectーPart- 4
• A Complete Guide to iOS App Auto Deployment with CI-CD
• Диспетчеризация в Swift: погружение в теорию и практику
• Приключение на 5 минут: как мы переводили все зависимости на SPM
• Creating Cool UI: iOS Shape Morphing
• Async/await в Swift 5.5: асинхронность «здорового человека»
• Removing Dependencies: One Weird Trick for Increasing Happiness,
• Existential any in Swift explained with code examples
• Multi-platform image resizing
• VIP design pattern (or Clean Swift)
• The power of task view modifier in SwiftUI
• AsyncSequence & AsyncStream Tutorial for iOS
• Async Composable Architecture: The Problem
• Typed Payloads in SwiftUI using NSUserActivity
• Testing Throwing Methods In Swift Actors
Кроссплатформа / Разработка 💻
• Build a Flutter app with Very Good CLI and Supabase
• Getting Started With Staggered Animations in Flutter
• Dart Code v3.44
• Flutter для автомобиля. А почему бы и нет?
• Announcing the Dart Custom Lint package
• Dynamic theme color with Material 3 (You) in Flutter
• Deep Linking in React Native
• Flutter battery app made with Klutter
• How to write Flutter code efficiently
• Flutter 3: What are enums and what is new about it
• Как мы перешли на регулярные релизы мобильного приложения. Часть I
• Improving shared architecture for a Kotlin Multiplatform, Jetpack Compose and SwiftUI app
← Previous | Next →
Предложить материал: @artemiygreg
Митапы и конференции: @meetup_today
Библиотеки и инструменты: @mobile_dev_tools
Подписаться: @mobile_native
Чат: @mobile_native_chat
👍4❤🔥3🔥1
Android In-app update
Круто же, когда приложение может само обновляться и мы, как разработчики может управлять этим процессом. Если вдруг вы не работали с in-app update, вот несколько статей, которые помогут понять основной принцип работы.
В первой статье показан сам принцип работы с in-app update, разные типы обновления с учетом логики приоритетов обновления, а во второй статье пример того, как можно запилить доп. логику для force обновления через firebase remote config.
Полезые ссылки
👉 In-app update
👉 Control In-app update in Android
👉 The easiest way to implement Firebase RemoteConfig in Android
👉 In-app updates docs
Круто же, когда приложение может само обновляться и мы, как разработчики может управлять этим процессом. Если вдруг вы не работали с in-app update, вот несколько статей, которые помогут понять основной принцип работы.
В первой статье показан сам принцип работы с in-app update, разные типы обновления с учетом логики приоритетов обновления, а во второй статье пример того, как можно запилить доп. логику для force обновления через firebase remote config.
Полезые ссылки
👉 In-app update
👉 Control In-app update in Android
👉 The easiest way to implement Firebase RemoteConfig in Android
👉 In-app updates docs
👍24
Navigation in Multi Modular App using DeepLinks
Досаточно удобный и мне кажется масштабируемый подход к навигации в многомодульном проекте через диплинки.
Вообще, диплинки для навигации внутри приложения – тема. Правда для удобства и масштабируемости требуют хорошей архитектуры, т.к. кейсы могут быть довольно разные.
Код из статьи тут: NavigationWithMultiModuleApp
Читать (En)
Досаточно удобный и мне кажется масштабируемый подход к навигации в многомодульном проекте через диплинки.
Вообще, диплинки для навигации внутри приложения – тема. Правда для удобства и масштабируемости требуют хорошей архитектуры, т.к. кейсы могут быть довольно разные.
Код из статьи тут: NavigationWithMultiModuleApp
Читать (En)
👍9🔥1
A Perception of Exception in Kotlin Coroutines
Еще одна статья про исключения в корутинах. Рассматриваются основные вопросы: исключения и отмена в контексте корутин, как прокидываются исключения по иерархии и как обрабатывать исключения.
Читать (En)
Еще одна статья про исключения в корутинах. Рассматриваются основные вопросы: исключения и отмена в контексте корутин, как прокидываются исключения по иерархии и как обрабатывать исключения.
Читать (En)
👍6🔥1👏1
Switching between SwiftUI’s HStack and VStack
Несколько вариантов реализации собственного
Читать (En)
Несколько вариантов реализации собственного
DynamicStack на SwiftUI, который будет автоматически переключаться между HStack и VStack в зависимости от ориентации (portrait, landscape).Читать (En)
👍5
How to make Android Studio look Awesome!
В какой-то момент статья затералясь в избранном и я забыл ее опубликовать. Надо исправить это дело 😉
Если вы, как и я, первым делом после установки студии идете меняеть в ней тему на какую-нибудь Dracula или на свою кастомную – статья вам однозначно зайдет 😎
Кроме тем, в статье так же есть несколько прикольных плагинов типа Atom Material Icons или тот же Rainbow Brackets.
Читать (En)
В какой-то момент статья затералясь в избранном и я забыл ее опубликовать. Надо исправить это дело 😉
Если вы, как и я, первым делом после установки студии идете меняеть в ней тему на какую-нибудь Dracula или на свою кастомную – статья вам однозначно зайдет 😎
Кроме тем, в статье так же есть несколько прикольных плагинов типа Atom Material Icons или тот же Rainbow Brackets.
Читать (En)
👍16👎6
How to Show Library Dependency Tree in Android Studio?
Инструкция по тому, как посмотреть дерево зависимостей, и связи между различными библиотеками.
Иногда бывает очень полезно, хотябы посмотреть и понимать, какие зависимости тянут за собой подключаемые библиотеки.
Читать (En)
Инструкция по тому, как посмотреть дерево зависимостей, и связи между различными библиотеками.
Иногда бывает очень полезно, хотябы посмотреть и понимать, какие зависимости тянут за собой подключаемые библиотеки.
Читать (En)
👍8🔥3
Исследование российских команд Android разработки, 2022
А вот стартанули ежегодный опрос и по Android направлению. Вопросы и темы, аналогичные iOS опросу.
👉 Как Android разработчики получают новые знания
👉 Какие команды Android разработки самые сильные
👉 Сколько человек решило уехать, а сколько – остается в России
👉 Какие книги больше всего рекомендуют прочесть
👉 Сколько мобильщиков работает удаленно, а сколько – в офисе
Результаты опросов в публичном доступе будут +/- через месяц (середина августа). Если вдруг пропустили, опрос по iOS тут.
Пройти опрос →
А вот стартанули ежегодный опрос и по Android направлению. Вопросы и темы, аналогичные iOS опросу.
👉 Как Android разработчики получают новые знания
👉 Какие команды Android разработки самые сильные
👉 Сколько человек решило уехать, а сколько – остается в России
👉 Какие книги больше всего рекомендуют прочесть
👉 Сколько мобильщиков работает удаленно, а сколько – в офисе
Результаты опросов в публичном доступе будут +/- через месяц (середина августа). Если вдруг пропустили, опрос по iOS тут.
Пройти опрос →
survey.alchemer.eu
Исследование российских команд Android разработки, 2022
Исследование российских команд Android разработки, 2022
.
.
👍6👎3
Дайджест недели
Twitter хочет обязать Илона Маска через суд выполнить свои обязательства, то бишь купить Twitter 🤷♂️. Первое заседание должно состоятся завтра (19 июля).
Уже видели, что в Android Studio Electric Eel должна появиться фича, которая позволит просматривать логи из Crashlytics непосредственно в IDE? Выглядит прикольно и должно быть супер удобно 🔥
На этой недели будет проходить несколько онлайн/офлайн ивентов по мобилкам раз (Санкт-Петербург), два (Санкт-Петербург) и три (Ереван).
Android 🤖
• Android In-app update
• Navigation in Multi Modular App using DeepLinks
• A Perception of Exception in Kotlin Coroutines
• Podlodka Android Crew!
• How to make Android Studio look Awesome!
• How to Show Library Dependency Tree in Android Studio?
• Исследование российских команд Android разработки, 2022
• Ускорение сборок flavors и buildTypes малой кровью и кастомным BuildConfig
• (Not so) Gentle introduction to Polymorphic Serialization in Kotlin
• Parallel processing with state management in Lazy Column -Jetpack Compose
• ViewPager in Jetpack Compose with dot indicators (within minutes)
• 2 Ways to Request Permissions in Jetpack Compose
• Fixing Problems of Jetpack Compose Navigation
• Nested Auto Scroll For Section Based Lists With Jetpack Compose
• Performance best practices for Jetpack Compose (GoogleIO 2022 recap)
• 5 Awesome Custom Button Designs made with Jetpack Compose
• Custom Views Library for your Android Project
• Redundant DTO-Domain Mapping in Kotlin Flow
• The Quick Developer’s Guide to Migrating Apps to Android 12
iOS 🍏
• Switching between SwiftUI’s HStack and VStack
• A First Look at SwiftUI NavigationStack, NavigationPath, and “navigationDestination”
• How iOS 16 makes your app launch faster
• Getting UIKit's UICalendarView from iOS 16 fully functioning in a SwiftUI app
• How to add opt-in compiler argument in build.gradle?
• Errors Validation In Swift!
• SwiftUI 4 — Add Scroll Background
• Create custom TextField Styles in SwiftUI
• New in SwiftUI 4 : Range Area Chart
• SwiftUI Preview’s useful features that can improve your productivity 20x times
• When should I use a class vs a struct?
• Architectures comparing for SwiftUI
• Code generation using Swift Package Plugins
• The Facade Design Pattern In Swift
Кроссплатформа / Разработка 💻
• Explore Barcode Scanner In Flutter
• IndexedStack In Flutter
• Implementing Voice Searching In Flutter
• Equatable In Flutter
• My Experience After Using Kotlin Multiplatform in Production Apps for a Year
• Flutter Clean Architecture with Rorty App
• Building our first Kotlin Multiplatform Mobile project
← Previous | Next →
Предложить материал: @artemiygreg
Митапы и конференции: @meetup_today
Библиотеки и инструменты: @mobile_dev_tools
Подписаться: @mobile_native
Чат: @mobile_native_chat
Twitter хочет обязать Илона Маска через суд выполнить свои обязательства, то бишь купить Twitter 🤷♂️. Первое заседание должно состоятся завтра (19 июля).
Уже видели, что в Android Studio Electric Eel должна появиться фича, которая позволит просматривать логи из Crashlytics непосредственно в IDE? Выглядит прикольно и должно быть супер удобно 🔥
На этой недели будет проходить несколько онлайн/офлайн ивентов по мобилкам раз (Санкт-Петербург), два (Санкт-Петербург) и три (Ереван).
Android 🤖
• Android In-app update
• Navigation in Multi Modular App using DeepLinks
• A Perception of Exception in Kotlin Coroutines
• Podlodka Android Crew!
• How to make Android Studio look Awesome!
• How to Show Library Dependency Tree in Android Studio?
• Исследование российских команд Android разработки, 2022
• Ускорение сборок flavors и buildTypes малой кровью и кастомным BuildConfig
• (Not so) Gentle introduction to Polymorphic Serialization in Kotlin
• Parallel processing with state management in Lazy Column -Jetpack Compose
• ViewPager in Jetpack Compose with dot indicators (within minutes)
• 2 Ways to Request Permissions in Jetpack Compose
• Fixing Problems of Jetpack Compose Navigation
• Nested Auto Scroll For Section Based Lists With Jetpack Compose
• Performance best practices for Jetpack Compose (GoogleIO 2022 recap)
• 5 Awesome Custom Button Designs made with Jetpack Compose
• Custom Views Library for your Android Project
• Redundant DTO-Domain Mapping in Kotlin Flow
• The Quick Developer’s Guide to Migrating Apps to Android 12
iOS 🍏
• Switching between SwiftUI’s HStack and VStack
• A First Look at SwiftUI NavigationStack, NavigationPath, and “navigationDestination”
• How iOS 16 makes your app launch faster
• Getting UIKit's UICalendarView from iOS 16 fully functioning in a SwiftUI app
• How to add opt-in compiler argument in build.gradle?
• Errors Validation In Swift!
• SwiftUI 4 — Add Scroll Background
• Create custom TextField Styles in SwiftUI
• New in SwiftUI 4 : Range Area Chart
• SwiftUI Preview’s useful features that can improve your productivity 20x times
• When should I use a class vs a struct?
• Architectures comparing for SwiftUI
• Code generation using Swift Package Plugins
• The Facade Design Pattern In Swift
Кроссплатформа / Разработка 💻
• Explore Barcode Scanner In Flutter
• IndexedStack In Flutter
• Implementing Voice Searching In Flutter
• Equatable In Flutter
• My Experience After Using Kotlin Multiplatform in Production Apps for a Year
• Flutter Clean Architecture with Rorty App
• Building our first Kotlin Multiplatform Mobile project
← Previous | Next →
Предложить материал: @artemiygreg
Митапы и конференции: @meetup_today
Библиотеки и инструменты: @mobile_dev_tools
Подписаться: @mobile_native
Чат: @mobile_native_chat
👍6🔥5
Kotlin Coroutines Tutorial for Android : Advanced
Еще один туториал по корутинам.
👉 Что такое Coroutines
👉 Coroutine Builders
👉 Blocking Builder
👉 CoroutineScope
👉 Canceling a Job
👉 CoroutineDispatchers
👉 Handling Exceptions
И всё это с примерами кода.
Читать (En)
Еще один туториал по корутинам.
👉 Что такое Coroutines
👉 Coroutine Builders
👉 Blocking Builder
👉 CoroutineScope
👉 Canceling a Job
👉 CoroutineDispatchers
👉 Handling Exceptions
И всё это с примерами кода.
Читать (En)
🔥15👍5👏1
Stop Using RecyclerView.Adapter
Короткая статья про то, почему нужно использовать ListAdapter вместо
Для тех, кто не юзал ListAdapter – это по сути тот же самый
Читать (En)
Короткая статья про то, почему нужно использовать ListAdapter вместо
RecyclerView.Adapter.Для тех, кто не юзал ListAdapter – это по сути тот же самый
RecyclerView.Adapter, только с уже имеющимися плюшками в виде DiffUtil. В конструкторе требует DiffCallback, имеет готовые методы submitList(…), ну и считает диффы на бэкграунд потоке через AsyncListDiffer.Читать (En)
👍33🤯9🔥3🤔1
Google разрешит использовать сторонние методы оплаты в приложениях
Google снижает комиссию на 3% (с 15% до 12%) для тех, кто переходит на сторонний биллинг. Только всё это будет работать для неигровых приложений и только для пользователей из Европейской экономической зоны (ЕЭЗ) на основании новых правил.
Читать (Ru)
Google снижает комиссию на 3% (с 15% до 12%) для тех, кто переходит на сторонний биллинг. Только всё это будет работать для неигровых приложений и только для пользователей из Европейской экономической зоны (ЕЭЗ) на основании новых правил.
Читать (Ru)
👍14💩5
30+ SwiftUI Open-Source Projects With Guided Tutorials
Годная подборка, с open-source проектами (более 30) по SwiftUI. Различные графики, анимации, пикерки, вьюверы, виджеты, готовые проекты и прочее. В избранное ✅
Читать (En)
Годная подборка, с open-source проектами (более 30) по SwiftUI. Различные графики, анимации, пикерки, вьюверы, виджеты, готовые проекты и прочее. В избранное ✅
Читать (En)
🔥7👍2
Android Touch System
Серия статей про работу с touch ивентами.
👉 Part 1: Touch Functions and the View Hierarchy
👉 Part 2: Common Touch Event Scenarios
👉 Part 3: MotionEvent Listeners
👉 Part 4: Gesture-Handling Modifiers in Jetpack Compose
👉 Part 5: How Gestures Work in Jetpack Compose
Серия статей про работу с touch ивентами.
👉 Part 1: Touch Functions and the View Hierarchy
👉 Part 2: Common Touch Event Scenarios
👉 Part 3: MotionEvent Listeners
👉 Part 4: Gesture-Handling Modifiers in Jetpack Compose
👉 Part 5: How Gestures Work in Jetpack Compose
👍17
The “Real” Clean Architecture in Android: S.O.L.I.D.
Очередная, уже наверное миллионная по счету статья на тему чистой архитектуры. В целом ничего нового (SOLID, интерфейсы, интеракторы, тестирование, зависимости и т.д.), но вдруг что-то подчерпнете из статьи.
Читать (En)
Очередная, уже наверное миллионная по счету статья на тему чистой архитектуры. В целом ничего нового (SOLID, интерфейсы, интеракторы, тестирование, зависимости и т.д.), но вдруг что-то подчерпнете из статьи.
Читать (En)
👍19🤮9❤1🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
Как мы ускоряли сборку Android-приложения из двух миллионов строк кода
Сказ от Яндекса о том, как они ускоряли сборку Android-приложения на примере Яндекс Браузера, с помощью различных настроек гредла и AGP.
Читать (Ru)
Сказ от Яндекса о том, как они ускоряли сборку Android-приложения на примере Яндекс Браузера, с помощью различных настроек гредла и AGP.
Читать (Ru)
👍20💩3
How to Make Unit Tests for ViewModel Easier to Write and Maintain
Статья про то, как организовать Unit тесты для ViewModel, чтобы упростить их поддержку и написание новых тестов.
Читать (En)
Статья про то, как организовать Unit тесты для ViewModel, чтобы упростить их поддержку и написание новых тестов.
Читать (En)
👍16
Getting started with iOS Application Modularization
Гайд для начинающиих по разделению проекта на модули через
Читать (En)
Гайд для начинающиих по разделению проекта на модули через
Cocoa Touch Frameworks.Читать (En)
👍4
Адаптация Jetpack Compose в hh.ru
Ребята с HH рассказывают про свой опыт внедрения Compose, с какими трудностями можно столкнуться и с чего начать внедрнять Compose в достаточно крупный многомодульный проект с дизайн-системой.
Как я и говорил выше, вполне логично, что история внедрения начинается с простого экрана "О приложении".
Читать (Ru)
Ребята с HH рассказывают про свой опыт внедрения Compose, с какими трудностями можно столкнуться и с чего начать внедрнять Compose в достаточно крупный многомодульный проект с дизайн-системой.
Как я и говорил выше, вполне логично, что история внедрения начинается с простого экрана "О приложении".
Читать (Ru)
👍15💩4
Exploring Google’s Now in Android Open-Source Project
Несколько статей с разбором исходников нового гугловского приложения Now in Android
👉 Exploring Google’s Now in Android Open-Source Project
👉 Exploring Now in Android: Gradle Convention Plugins
Если что, исходники можно посмотреть тут: Now in Android
Несколько статей с разбором исходников нового гугловского приложения Now in Android
👉 Exploring Google’s Now in Android Open-Source Project
👉 Exploring Now in Android: Gradle Convention Plugins
Если что, исходники можно посмотреть тут: Now in Android
👍6
Brushing up on Compose Text coloring
Пример градиентного текста на Compose через Brush API. Ну и так же, в статье есть примеры с
Читать (En)
Пример градиентного текста на Compose через Brush API. Ну и так же, в статье есть примеры с
ShaderBrush.Читать (En)
👍6