#полезное
🤓 Как самому зашифровать SharedPreferences
Вы наверняка знаете, что решение от Google в виде EncryptedSharedPreferences уже давно Deprecated, а какой-то адекватной замены им так и не появилось. И что делать, если безопасники отказываются принимать оговорку, что префы может читать только само приложение, если на устройстве нет рута?
Остается только написать свое решение и, на самом деле, сделать это не сильно сложно. Для этого нам понадобится AndroidKeystore и Tink — open-source решение от Google для работы с криптографией, которое очень удобно в использовании.
Алгоритм получается следующий:
1. В AndroidKeystore создаем новый ключ, если его еще нет
2. В Tink генерируем KeysetHandle
3. На основе этих данных создаем encryptedKeyset средствами Tink и сохраняем его в SharedPreferences
4. Затем из keysetHandle достаем примитив AEAD, с помощью которого уже будем шифровать данные
5. PROFIT
В этой реализации главное учесть два момента:
🟠 Обязательно удалять ключ из AndroidKeystore при очистке префов
🟠 Разработать стратегию на случай, если encryptedKeyset в префах или ключа в Keystore не оказалось, иначе вы не сможете расшифровать ваши данные!
👉 Новости 👉 База вопросов
Вы наверняка знаете, что решение от Google в виде EncryptedSharedPreferences уже давно Deprecated, а какой-то адекватной замены им так и не появилось. И что делать, если безопасники отказываются принимать оговорку, что префы может читать только само приложение, если на устройстве нет рута?
Остается только написать свое решение и, на самом деле, сделать это не сильно сложно. Для этого нам понадобится AndroidKeystore и Tink — open-source решение от Google для работы с криптографией, которое очень удобно в использовании.
Алгоритм получается следующий:
1. В AndroidKeystore создаем новый ключ, если его еще нет
2. В Tink генерируем KeysetHandle
3. На основе этих данных создаем encryptedKeyset средствами Tink и сохраняем его в SharedPreferences
4. Затем из keysetHandle достаем примитив AEAD, с помощью которого уже будем шифровать данные
5. PROFIT
В этой реализации главное учесть два момента:
Please open Telegram to view this post
VIEW IN TELEGRAM
Техническое собеседование. Осень 2024. Просил 300-350к. Опыт в резюме 5 лет. Было много вопросов, которые основаны на реальных кейсах.
Вопросы:
- Что такое «зомби-процессы» и как они соотносятся с потоками (threads)?
- В чём разница между Flow и LiveData, как ту же логику организовать?
- Как работают методы bind и unbind y Android-сервисов?
- Какие проблемы могут возникнуть при перехвате Intent через BroadcastReceiver?
Все вопросы можно посмотреть на нашей платформе
#собес
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤1👍1
Forwarded from IT crew | Антон Гуляев 🤖
Исследование рынка вакансий IT 📈
Я проверил рынок на 4 резюме: 1-я неделя открытые резюме, 2-я неделя 100 откликов.
В A/B тестировании я проверял максимальный возраст, университет, опыт работы и пол.
Важные инсайды для резюме:
1️⃣Аутсорсы с высшим IT образованием конвертят в 2 раза больше (8 vs 4 приглашений)
2️⃣Возраст 40+ - все еще в строю, особенно, если сильное резюме на 3 года опыта (7 приглашений)
3️⃣Вышка, продуктовая разработка 4 года и Москва - конверсия 8,6%
Я проведу еще более масштабное исследование, где станет понятно - какой он, идеальный кандидат для любой специальности. Пока новый A/B тест насчитывает 26 резюме 🗿
👉 Перешли этот пост друзьям, а также реагируй и пиши в комментариях, если готов взять виртуальную симку и дать самому масштабному исследованию рынка жизнь.
Подпишись, чтобы не пропустить 🚀
IT Crew | Антон Гуляев
Я проверил рынок на 4 резюме: 1-я неделя открытые резюме, 2-я неделя 100 откликов.
В A/B тестировании я проверял максимальный возраст, университет, опыт работы и пол.
Важные инсайды для резюме:
2️⃣Возраст 40+ - все еще в строю, особенно, если сильное резюме на 3 года опыта (7 приглашений)
3️⃣Вышка, продуктовая разработка 4 года и Москва - конверсия 8,6%
Я проведу еще более масштабное исследование, где станет понятно - какой он, идеальный кандидат для любой специальности. Пока новый A/B тест насчитывает 26 резюме 🗿
Нужна твоя помощь. Аккаунт в tg, аккаунт известной площадке по поиску работы.
👉 Перешли этот пост друзьям, а также реагируй и пиши в комментариях, если готов взять виртуальную симку и дать самому масштабному исследованию рынка жизнь.
Подпишись, чтобы не пропустить 🚀
IT Crew | Антон Гуляев
👍3🔥3❤2
#Собес #android
🤔 Как работают дженерики в Kotlin «под капотом»?
Kotlin-дженерики реализованы через стирание типов (type erasure) на JVM, аналогично Java: информация о конкретном параметре типа недоступна в рантайме. Компилятор проверяет типы во время компиляции, а затем генерирует код без параметризации. Для сохранения информации о типе используют реифицированные (
👉 Новости 👉 База вопросов
Kotlin-дженерики реализованы через стирание типов (type erasure) на JVM, аналогично Java: информация о конкретном параметре типа недоступна в рантайме. Компилятор проверяет типы во время компиляции, а затем генерирует код без параметризации. Для сохранения информации о типе используют реифицированные (
reified) параметры в inline -функциях.Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
🥄 Creating an Engaging Progress Button in Jetpack Compose
Гайд по реализации вот такой кнопки с прогрессом на Jetpack Compose.
Исходный код → ProgressButton
Читать
👉 Новости 👉 База вопросов
Гайд по реализации вот такой кнопки с прогрессом на Jetpack Compose.
Исходный код → ProgressButton
Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#Собес #git
🤔 Что такое команды git reset -mixed и git merge - abort?
👉 Новости 👉 База вопросов
git reset --mixed : отменяет изменения, которые были добавлены в индекс, но сохраняет изменения в рабочем каталоге.git merge --abort : отменяет слияние, которое в данный момент находится в процессе, и возвращает репозиторий в состояние до начала слияния.Please open Telegram to view this post
VIEW IN TELEGRAM
YeaHub
YeaHub — тренажер собеседований по IT
5000+ вопросов для подготовки к интервью. Фильтры, квизы, статистика!
❤1
#полезное
😬 Шаблон приложения Kotlin Multiplatform
Базовый шаблон приложения Kotlin Multiplatform для Android и iOS. Он включает общую бизнес-логику и обработку данных, а также реализацию общего пользовательского интерфейса с использованием Compose Multiplatform
Гитхаб
👉 Новости 👉 База вопросов
Базовый шаблон приложения Kotlin Multiplatform для Android и iOS. Он включает общую бизнес-логику и обработку данных, а также реализацию общего пользовательского интерфейса с использованием Compose Multiplatform
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#полезное
😎 Koin — это лёгкий и прагматичный фреймворк для внедрения зависимостей (Dependency Injection) на языке Kotlin!
Он поддерживает как Kotlin Multiplatform, так и Android. Koin предоставляет удобный DSL для настройки зависимостей, минимизирует избыточность кода и интегрируется с различными экосистемами, включая Jetpack Compose и Ktor.
Гитхаб
👉 Новости 👉 База вопросов
Он поддерживает как Kotlin Multiplatform, так и Android. Koin предоставляет удобный DSL для настройки зависимостей, минимизирует избыточность кода и интегрируется с различными экосистемами, включая Jetpack Compose и Ktor.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
🤓 Currencies — приложение для Android, которое предоставляет простой и удобный конвертер валют. Программа поддерживает несколько провайдеров обменных курсов, таких как Европейский Центральный Банк, OpenExchangeRates и другие, а также предлагает функции калькулятора и исторические курсы
Приложение написано на Kotlin с использованием Material Design и поддерживает светлую и тёмную темы интерфейса
Гитхаб
👉 Новости 👉 База вопросов
Приложение написано на Kotlin с использованием Material Design и поддерживает светлую и тёмную темы интерфейса
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
#Собес #git
🤔 Как вы находите коммит, который что-то нарушил после операции слияния?
💬 Кратко:
Для поиска коммита, который нарушил код после слияния, можно использовать команду git bisect . Этот инструмент помогает найти коммит, который вызывает проблему, путем бинарного поиска.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
💬 Кратко:
Для поиска коммита, который нарушил код после слияния, можно использовать команду git bisect . Этот инструмент помогает найти коммит, который вызывает проблему, путем бинарного поиска.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
#полезное
🤣 Compose Hot Reload — инструмент от JetBrains для мгновенного обновления UI в Compose Multiplatform без перезапуска приложения.
Позволяет видеть изменения в интерфейсе сразу после правки кода, ускоряя разработку. Работает с Kotlin/JVM и поддерживает автоматическую перезагрузку через Gradle-задачи. Для полного функционала требует JetBrains Runtime.
Гитхаб
👉 Новости 👉 База вопросов
Позволяет видеть изменения в интерфейсе сразу после правки кода, ускоряя разработку. Работает с Kotlin/JVM и поддерживает автоматическую перезагрузку через Gradle-задачи. Для полного функционала требует JetBrains Runtime.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤2
Скрининг. ЗП: 250-400k. Опыт: 3 года. Июнь 2024. Собеседование в себя включало постоянное рассуждение, проектирование и построение гипотез для теории и практические вопросы для лайвкодинга.
Вопросы:
- Что такое Structured Concurrency и как его нарушить?
- Чем отличается StateFlow от SharedFlow?
- Как suspendCancellableCoroutine помогает работать с колбэками?
- Как работает return в лямбде внутри inline-функции?
Все вопросы можно посмотреть на нашей платформе
#собес #коллеции
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
#Собес #git
🤔 Что такое команда git cherry-pick?
💬 Кратко:
Команда
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
💬 Кратко:
Команда
git cherry-pick позволяет выбрать и применить отдельный коммит из другой ветки в вашу текущую ветку, минуя другие изменения, которые были сделаны в той же ветке. Это полезно, когда вам нужно перенести только один коммит, а не весь набор изменений.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
#полезное
👋 EitherNet — это библиотека для Kotlin, предназначенная для обработки API-ответов в приложениях!
🟠 Она предоставляет типизированный подход к обработке результатов сетевых запросов, используя sealed-классы для представления успешных и неудачных ответов. Это упрощает работу с ошибками, исключая необходимость использования исключений для обработки ошибок. Например, можно различать типы ошибок, такие как сетевые сбои, HTTP-ошибки или специфические API-ошибки, что делает код более безопасным и понятным.
🟠 Библиотека интегрируется с Retrofit, позволяя разработчикам легко подключить её к существующим API-запросам. Она поддерживает аннотации, такие как @.DecodeErrorBody, для автоматической обработки тела ошибок HTTP-ответов. Это делает работу с API более удобной и предсказуемой, улучшая качество обработки ошибок и делая код проще для чтения и поддержки.
Github
👉 Новости 👉 База вопросов
Github
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
🤯 telephoto — это инструмент для Android-разработчиков, позволяющий упростить работу с мультимедиа, предоставляя компоненты, такие как масштабируемые изображения с поддержкой жестов панорамирования и масштабирования!
Основные функции включают ZoomableImage — замену стандартного Image() с поддержкой работы с большими изображениями благодаря автоматической субдискретизации, и модификатор Modifier.zoomable(), который можно использовать для создания жестов с другими элементами интерфейса.
Github
👉 Новости 👉 База вопросов
Основные функции включают ZoomableImage — замену стандартного Image() с поддержкой работы с большими изображениями благодаря автоматической субдискретизации, и модификатор Modifier.zoomable(), который можно использовать для создания жестов с другими элементами интерфейса.
Github
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
#полезное
😱 Kotlin Coding Challenges — тренажёр для прокачки алгоритмического мышления
Если вы учите Kotlin и хотите не просто писать код, а развивать алгоритмическое мышление, этот репозиторий — отличная площадка для тренировок. Здесь собраны задачи разного уровня: от простых, вроде реверса строки, до экспертных.
Каждая задача — это готовый модуль с описанием, тестами и шаблоном для решения. Можно сразу запускать проверку в IntelliJ IDEA и сравнивать своё решение с эталонным. При этом авторы приводят несколько вариантов решения с анализом сложности через Big O.
GitHub
👉 Новости 👉 База вопросов
Если вы учите Kotlin и хотите не просто писать код, а развивать алгоритмическое мышление, этот репозиторий — отличная площадка для тренировок. Здесь собраны задачи разного уровня: от простых, вроде реверса строки, до экспертных.
Каждая задача — это готовый модуль с описанием, тестами и шаблоном для решения. Можно сразу запускать проверку в IntelliJ IDEA и сравнивать своё решение с эталонным. При этом авторы приводят несколько вариантов решения с анализом сложности через Big O.
GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
#Собес #git
🤔 Как вы можете ввести слияние на стадии конфликта?
💬 Кратко:
При возникновении конфликта в Git нужно вручную разрешить расхождения в файлах, а затем завершить слияние с помощью команды
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
💬 Кратко:
При возникновении конфликта в Git нужно вручную разрешить расхождения в файлах, а затем завершить слияние с помощью команды
git merge -- continue .📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
#полезное
🏕 KorGE — это фреймворк для разработки кроссплатформенных 2D-игр на языке Kotlin!
Он поддерживает работу на платформах JVM, JavaScript, Android и iOS, а также предлагает удобный API для работы с графикой, звуком, анимацией и физикой. KorGE интегрируется с Gradle, что упрощает сборку и развертывание проектов.
Гитхаб
👉 Новости 👉 База вопросов
Он поддерживает работу на платформах JVM, JavaScript, Android и iOS, а также предлагает удобный API для работы с графикой, звуком, анимацией и физикой. KorGE интегрируется с Gradle, что упрощает сборку и развертывание проектов.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
🥄 Libaums — библиотека для работы с USB-накопителями на Android
Это открытая библиотека, которая решает проблему доступа к USB-накопителям на устройствах, где система не поддерживает их автоматическое монтирование. Она даёт доступ к флешкам, внешним дискам и кардридерам через USB Host API. Инструмент поддерживает FAT32 и SCSI-команды, но при этом остаётся легковесной и не требует root-прав.
Интересные моменты:
🟠 Работает как с Java, так и с Kotlin
🟠 Позволяет читать/записывать файлы напрямую, минуя системные ограничения
🟠 Есть модули для интеграции через HTTP-сервер или Storage Access Framework
Гитхаб
👉 Новости 👉 База вопросов
Это открытая библиотека, которая решает проблему доступа к USB-накопителям на устройствах, где система не поддерживает их автоматическое монтирование. Она даёт доступ к флешкам, внешним дискам и кардридерам через USB Host API. Инструмент поддерживает FAT32 и SCSI-команды, но при этом остаётся легковесной и не требует root-прав.
Интересные моменты:
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤1
#полезное
🛞 Inure — необычный файловый менеджер для Android с открытым исходным кодом. Этот проект выделяется полностью кастомным интерфейсом, поддержкой Material You и встроенным терминалом.
Приложение разрабатывается одним человеком, но уже попало в подборки лучших open-source решений для Android. Оно работает как на рутированных устройствах, так и через Shizuku, предлагая продвинутый анализ установленных приложений.
Гитхаб
👉 Новости 👉 База вопросов
Приложение разрабатывается одним человеком, но уже попало в подборки лучших open-source решений для Android. Оно работает как на рутированных устройствах, так и через Shizuku, предлагая продвинутый анализ установленных приложений.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Собес #git
🤔 Как восстановить удалённую ветку?
💬 Кратко:
Если ветка была удалена локально, её можно восстановить, используя команду
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
💬 Кратко:
Если ветка была удалена локально, её можно восстановить, используя команду
git reflog . Если ветка была удалена удалённо, можно восстановить еёс помощью git push origin ‹ branch_name›.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2