Альтернатива Docker Desktop, которая работает быстрее
Как сэкономить ресурсы процессора и памяти? Представляем быстрый, сверхлегкий, мощный и простой инструмент, с которым нормально работается на ноутбуке, открываются Chrome и любое другое приложение.
K8s: топология подов
Как равномерно распределять поды по кластеру для эффективного использования его ресурсов и высокой доступности? Изучим мультиузловое/-зональное/-региональное распределение подов в его топологии.
Создание CLI в Rust для исполнения гитарных аккордов
Пошаговое руководство по созданию инструмента командной строки Rust, который выводит схему аккордов на гитарном грифе.
C++: практическое руководство по priority_queue
На примерах покажем, как создаeтся приоритизированная очередь, применяются пользовательские типы, обходятся ограничения. Рассмотрим реальный сценарий.
Производительность в Jetpack Compose: стабильность и неизменяемость
Jetpack Compose - мощный набор инструментов для создания современных мобильных приложений. Рассмотрим особенности его работы с пропускаемыми и перезапускаемыми функциями, а также фактор стабильности и его роль в рекомпозиции.
Топ-6 инструментов и фреймворков для искусственного интеллекта
Инженеру искусственного интеллекта требуется множество навыков. Один из них - знание инструментов и фреймворков, используемых в области ИИ. Предлагаем ознакомиться с самыми популярными и значимыми из них.
Шаблон «запрос-ответ» в RabbitMQ: подход на основе EventListener в Node.js
Поиск нестандартных инженерных решений - всегда захватывающий процесс. Предлагаем ознакомиться с одним из таких решений, позволивших модифицировать стандартную реализацию шаблона "запроса-ответ" так, чтобы она соответствовала конкретному случаю использования.
Вся правда об использовании навигационной библиотеки Jetpack в модульных проектах
Jetpack - популярный инструмент современного разработчика. Но так ли удобна эта библиотека для модульных проектов?
10 конструкций для написания Bash-скриптов
Эти конструкции (10 основных и 5 дополнительных) должен освоить каждый инженер. Они помогут вам писать более элегантные, эффективные и удобные в обслуживании скрипты, предназначенные для решения реальных инженерных задач.
Стековая и кучная память в Kotlin
Хотите максимально эффективно управлять памятью в Kotlin? Тогда выясните, чем различаются стековая и кучная память. Разобраться в этом непростом вопросе помогут простые аналогии и примеры кода.
Java: оператор try-with-resources
Изучим синтаксис try-with-resources, его преимущества по сравнению с традиционными блоками try-finally и нюансы управления ресурсами. Приведем практические примеры.
Основы Android-разработки в Revolut
Хотите заглянуть за кулисы онлайн-банка Revolut? Сотрудники компании рассказали о том, как устроены ее команды и рабочие процессы.
7 малоизвестных, но полезных библиотек Python
Эти библиотеки отлично справятся с вашими повседневными задачами. Они помогут оживить вывод консоли, сгенерировать фиктивные данные, выполнить стилизацию в духе ASCII-арта, упростить работу с датами и изображениями, облегчить обработку NLP, спланировать время выполнения функций.
Как создать CSV-файл с помощью C++
На примерах разберем разные подходы, дадим рекомендации по повышению производительности. Рассмотрим реальный сценарий и типичные ошибки.
Использование LLM в реальном мире
Как настроить большую языковую модель? Как составить промпт, чтобы получить приемлемый результат от ИИ? Как минимизировать количество токенов для снижения затрат? Предлагаем отправиться в увлекательное путешествие в мир ИИ и найти ответы на все эти вопросы.
Не заблудитесь при работе с кластерами Kafka — возьмите компас
Представляем инструмент мониторинга кластеров KafkaCompass. Рассмотрим функционал этого приложения - со слов его разработчиков.
Как преобразовать сгенерированные ИИ изображения в полигональные сетки
Поделимся практическим опытом создания полигональных сеток из сгенерированных ИИ изображений с помощью современных методов машинного обучения.
Руководство по устранению неполадок в Kubernetes
Изучим передовые практики, инструменты, команды, методы отладки, рекомендации с примерами. Рассмотрим продвинутые методы: инструментирование трассировок, удаленную отладку.
В чем разница между ListView и RecyclerView?
Как Android-разработчик, вы наверняка стоите перед выбором: RecyclerView или ListView? Настало время выяснить, когда стоит использовать каждый из этих виджетов. Правильный выбор позволит вам обеспечить идеальный пользовательский опыт.
Продвинутые концепции Kafka для старшего инженера-программиста
Рассмотрим важный функционал: репликацию, избыточность данных, гарантии доставки, разбиение на разделы, управление смещениями, операции контроллера, эволюцию схем. Изучим расширенное применение Kafka, политики сжатия и хранения сообщений, сценарии Kafka Streams, безопасность и соответствие требованиям, мониторинг и наблюдаемость.
25 основных вопросов для собеседования с Android-разработчиком. Часть 2
Техническое собеседование - важная часть найма разработчика Android-приложения. Продолжаем рассматривать частые вопросы на собеседованиях по Android-разработке.
Стратегии Async/Await и MainActor
Разберемся, где и как обновлять основной поток. Изучим код SIL, генерируемый разными механизмами, их эффективность, размер кода и связанные с этим последствия. Какой подход проще, эффективнее, где меньше кода и побочных эффектов?
Тестирование уровня данных в Android Room с помощью Rxjava, LiveData и сопрограмм Kotlin
В чем смысл начинать тестирование с уровня данных?
Выбор архитектуры, будь то MVVM, MVP, MVC или MV, по минимуму затрагивает уровень данных. Во время архитектурных миграций...
Как тестировать приложения Gofr?
Разработка через тестирование. Как применяется этот подход? Напишем тесты для уровня хранения и обработчика.
Pandas: взгляд изнутри
Рассмотрим структуру данных Pandas: массивы, блоки, BlockManager. Познакомимся с понятием консолидированного датафрейма.
Приложение React Native с поддержкой Apple Watch и виджетов
Хотите достичь новых горизонтов в разработке на React Native? Сегодня поговорим о том, как интегрировать приложение Apple watchOS с приложением на React Native, а также создадим виджет, который можно установить в циферблате часов в качестве дополнительной функции.
Повторное использование UI в Android - 5 главных ошибок
За последние пару месяцев у меня была возможность пересмотреть кое-какие реальные интерфейсы Groupon с целью вывести качество таких интерфейсов на новый уровень. Мы начали...
Принципы SOLID на Go
Изучим эффективное применение пяти принципов сквозь призму системы платежей. Проиллюстрируем примерами хорошего и плохого кода.
Автоматическое масштабирование CI с помощью Kraken CI
Kraken CI — это современная локальная система CI/CD с открытым исходным кодом, которая обладает высокой масштабируемостью и ориентирована на тестирование. Kraken CI имеет лицензию Apache 2.0....
Краткое руководство по строкам и регулярным выражениям в R
Учимся управлять строками максимально эффективно - осваиваем наиболее актуальные функции, а также метасимволы для регулярных выражений.
Как последовательно писать аналитические SQL-запросы за 8 шагов
Сразу никогда не бывает очевидно, как перейти от простого SQL-запроса к сложному, особенно если запрос содержит сложные вычисления. Одна из «опасностей» SQL заключается в том, что можно создать исполнимый запрос, но вернуть неверные данные. Например, легко увеличить значение вычисляемого поля, объединив его с несколькими строками. Автор материала показывает, как строить SQL последовательно, чтобы сократить количество ошибок.
Тренды в сфере графического дизайна в 2024 году
Подробно рассмотрим ожидаемые в 2024 году тренды в сфере графического дизайна, а также тенденции, которые будут набирать популярность в предстоящем году.
Новости об Android
Обновления для Android 11
Мы все еще находимся на стадии предварительного обзора для разработчиков Android 11.
Developer Preview 4
Превью-релиз был выпущен пару недель назад. О Developer Preview 4...
Быстрое перенаправление в приложение с AutoVerify
Сайты с множественной переадресацией и поддержкой диплинков
Представьте, что у вас есть сайт, к примеру, https://www.yoursite.com. Когда пользователь кликает по ссылке http://www.yoursite.com, где нет s...
Как создать локальное средство генерации кода с open source моделями и библиотекой Guidance от...
Научимся писать подсказки для генерации кода. «Вручную» воссоздадим строку документации для большой языковой модели в VSCode.
Расшифровка собеседования разработчика в Cisco 2024: Java, Spring Boot, Hibernate
Разберем полную запись технической части для продвинутых. Все это актуальные вопросы и ответы для желающих работать в Cisco Systems.
Оптимизация кода задачи на миллиард строк — ускоряем запуск в 87 раз
Поэтапно увеличим производительность реализации парсера для огромного файла. Устраним копии и баги, воспользуемся профилировщиком, хеш-картой линейного зондирования, микрооптимизациями, распараллелим код.
Angular и Wiz: вместе лучше
В Google решили объединить Angular и Wiz. Как ожидается, это приведет к улучшению обоих веб-фреймворков: Angular извлечет выгоду из производительности Wiz, а Wiz будет полезен опыт Angular-разработчиков. Рассказываем подробности.
Netlas — полноценный инструмент интернет-разведки
Ищете эффективные средства управление рисками информационной безопасности? С Netlas - инструментом интернет-разведки - потребуется всего несколько минут, чтобы создать область видимости любого целевого объекта и досконально исследовать ее.
5 реальных способов достичь сбалансированности трудовой жизни
Вы руководитель инженерного отдела, желающий достичь баланса между работой и отдыхом? Следуйте этим 5 практическим советам, основанным не на стереотипах, а на реальном опыте. Они помогут привести команду к успеху без ущерба для здоровья.
C++: практическое руководство по инициализированию вектора размером
Изучим способы инициализации - от простых до самых сложных вроде пользовательских типов и многомерных структур. Разберем их нюансы и типичные ошибки, проиллюстрируем примерами и поможем выбрать оптимальный способ.
Программирование на Java. Глубокое погружение в ключевой функционал Java 21
Разберем новый LTS-выпуск: детализацию, проверку типов, решаемые с помощью записей проблемы, запечатанные классы/интерфейсы и подробнее - сопоставление с образцом. Чем обусловлены актуальность и популярность, каковы факторы значимости Java?
5 навыков работы в Python на прокачку
Изучим основные концепции и приемы программирования на Python. В каждой теме - от обработки исключений до виртуальных сред для изолирования проектов - рассмотрим практические рекомендации по написанию чистого, эффективного кода.
Как работает внедрение зависимостей в Angular
Предлагаем изучить механику внедрения зависимостей в Angular. Узнайте, как определить зависимость, как ее импортировать и как Angular разрешает конфликты зависимостей.
Совместное использование кода в приложениях React и React Native
Хотите существенно сократить свои усилия и улучшить пользовательский опыт? Воспользуйтесь руководством по совместному использованию в веб- и мобильных приложениях общих элементов кода и дизайна в качестве зависимостей.
Встроенная поддержка контейнеров для .NET 7 — контейнеризация приложений .NET без Dockerfile
Рассмотрим стандартный подход Dockerfile для приложений .NET 6 и функционал нового SDK-пакета с настройками и параметрами для целей локальной разработки. Сделаем рабочий процесс GitHub Action для создания приложения, сборки образа Docker и отправки на DockerHub.
SQL в браузере — веб-оболочка DuckDB для анализа локальных данных
Как анализировать данные намного проще и полнофункциональнее, чем в Excel? Сделаем локальный файл доступным для SQL-операций с DuckDB, преобразуем в реальную таблицу, доберемся до файлов на GitHub и S3.
Android 14: обновления в области конфиденциальности и безопасности
Узнайте о новых функциях Android 14, чтобы обновить свои приложения в соответствии с ними. Это поможет обеспечить безопасность приложений и соблюдение конфиденциальности пользователей.
Как автоанализ кода с помощью ИИ повышает безопасность приложений
Инженеры по безопасности приложений напоминают канатоходцев. Им постоянно приходится балансировать: быть универсальными специалистами по всему спектру приложений и экспертами по ряду флагманских приложений. Узнайте о том, как ИИ способен помочь в этой непростой ситуации.
Развертывание Cloud Functions в GCP с помощью Terraform
Как это: создавать инфраструктуру и управлять ей через конфигурационные файлы? Напишем и запустим простую Cloud Function, подробно разберем конфигурационные файлы среды развертывания со всеми объявлениями и определениями и узнаем, как применять изменения к реальной инфраструктуре.
Как перевести код R в Python с помощью ChatGPT
Научимся переводить код с языка программирования R на Python и наоборот. Для этой цели воспользуемся возможностями ChatGPT и на примерах рассмотрим принцип действия.
Вопросы на собеседованиях для опытных профессионалов Java в 2024 году
Рассмотрим применение интерфейсов в разных целях и сценариях. Поопределяем временную сложность, изучим практическое назначение агрегации, композиции и наследования, утечку кода и другие проблемы Java.
Освоение различных видов линий в Jetpack Compose с помощью PathEffect
Устали от однообразных линий в Jetpack Compose? Вы не одиноки! Сегодня поговорим о том, как создавать различные стили линий и фигур в рамках Jetpack Compose и использовать их на практике.
Освоение широковещательных приемников в Android
Широковещательные приемники - важный компонент разработки Android. Чтобы использовать их потенциал правильно, узнайте об их основных функциях и областях применения.
Поддержка новых форм-факторов с помощью новой библиотеки Jetpack WindowManager
WindowManager — это недавнее дополнение к Android Jetpack, которое призвано помочь разработчикам приложений поддерживать новые форм-факторы устройств и обеспечить общее API для различных функций Window Manager...
Почему гейм-дизайнеру нужно программирование
Программисту не обязательно быть гейм-дизайнером, но каждый гейм-дизайнер должен быть программистом. Узнайте о том, почему навык написания кода жизненно важен в разработке игр и как им овладеть.
Как участие в открытых проектах помогает найти работу?
Мечтаете о карьере разработчика ПО, но не знаете, как выгодно выделиться на фоне конкурентов? Узнайте о преимуществах участия в таких мероприятиях, как Hacktoberfest, и внесении вклада в такие открытые проекты, как Taipy, Composio, CopilotKit и ToolJet.
10 советов по созданию чистого кода для мобильной разработки на Kotlin в 2024 году
Умением писать чистый код должен обладать каждый программист. Разберем 10 полезных рекомендаций по созданию четкого и понятного кода, который легко сопровождать и отлаживать.
Взгляд в будущее: перспективы развития и влияния ИИ на изобразительное искусство и повседневную жизнь
Сначала погрузимся в историю изобразительного искусства, а потом вернемся в современную эпоху, которую автор статьи называет Ренессансом искусственного интеллекта. Откроем горизонты будущего и спрогнозируем основные тенденции развития ИИ в искусстве и его влияние на повседневную жизнь.
Модульные тесты на Golang: от стандартного Testing до Testify
Напишем тесты для проверки работы функций. Посмотрим, как совершенствуются тестовые сценарии с Testify.
Реализация подсказок с помощью Modifier в Jetpack Compose
Занимаетесь проектированием интуитивно понятных интерфейсов? Тогда вам не обойтись без подсказок, особенно необходимых при обновлении приложения. Предлагаем упрощенную версию реализации подсказок с использованием Modifier — компонента библиотеки Jetpack Compose.
Реализация цифрового конверта в iOS
Добро пожаловать в увлекательный мир криптографии! Познакомимся с технологией гибридного шифрования и научимся безопасно передавать конфиденциальные данные через REST API в Swift.
История путешествий вместе с Plotly Express
Составим интерактивную карту путешествий с Python, pandas и Plotly Express. Процесс настолько же увлекательный, как и сами путешествия!
Класс данных в Kotlin
Что такое «класс данных» и чем он отличается от обычного класса? Какие проблемы решаются в Kotlin с помощью классов данных? Рассмотрим классы данных и разберемся, почему их используют вместо обычных классов.
Зачем нужен AutoGPT
AutoGPT - очередное пополнение в семействе алгоритмов GPT (Generative Pre-trained Transformers), позволяющих на основе алгоритмов ИИ создавать текст, изображения и видео. А что же еще может делать AutoGPT?
Как Nginx справляется с тысячами конкурентных запросов
Изучим безблокировочную архитектуру Nginx. Из каких компонентов она состоит и почему этот событийный подход быстрее?
Топ-10 типичных ошибок при реализации паттерна MVVM в Android
Вы наверняка совершали эти ошибки при реализации паттерна Model-View-ViewModel в Android. Предлагаем на практических примерах разобраться в их причинах и рассмотреть способы их исправления. Это позволит значительно повысить сопровождаемость, тестируемость и общее качество Android-приложений.
Загрузочные представления в SwiftUI
Загрузочные представления являются одним из типичных компонентов приложения, и в этой статье вы научитесь грамотно их создавать и использовать с возможностью кастомизации.
Удаление последнего символа строки на C++: методы и их применение
Сравним эффективность pop_back(), resize(), erase() и substr(), разберем их нюансы, проиллюстрируем примерами. Рассмотрим реальный сценарий и типичные ошибки, поможем выбрать оптимальный метод
Ознакомление с Work Manager в Android
Work Manager - это компонент Android Jetpack, который помогает выполнять задачи как можно быстрее и в наиболее подходящее время. Ознакомьтесь с его базовыми и продвинутыми возможностями, а также лучшими практиками использования.
Подробно о технологии «Издатель-подписчик» Redis
Подробно изучим эту модель и даже доберемся до уровня блоков памяти. Раскроем делали реализации и нюансы, сценарии применения.
10 рекомендаций, которые повысят производительность разработки на Flutter в 2023 году
Flutter предлагает множество функций и инструментов, которые могут значительно повысить производительность при разработке мобильных приложений. Предлагаем подробное руководство по использованию этих возможностей.
Какую архитектуру выбрать — с единой или множеством Activity?
Обе архитектуры - как с единой, так и со множеством Activity - находят свое место в Android-разработке. Изучаем плюсы и минусы каждого подхода, а также их случаи использования.
Как вернуть контроль над состоянием данных с RemoteResult
Построим на основе Result универсальный способ обозначать состояния ресурса, чтобы из представлений SwiftUI реагировать на его изменения. Рассмотрим реальное применение этого перечисления и адаптируем его для архитектуры TCA.
Как создать пользовательскую поисковую панель SwiftUI с LazyVStack
Решаем практическую задачу по созданию инструмента для выбора кода страны - реализуем пользовательскую поисковую панель LazyVStack, содержащую данные с разделами и их индексами.
5 крутых приемов, которые улучшат работу на R
R — отличный язык, который используется для обработки данных и работы с ними. Рассмотрим пять крутых приемов работы на R, которые просто необходимо знать....
Создание анимированной пузырьковой диаграммы Ханса Рослинга на языке R
Статистические выкладки выглядят привлекательней при добавлении анимации. Сегодня мы убедимся в этом, воссоздав пузырьковую диаграмму Рослинга средствами языка R.
Как создать компонент Toast в SwiftUI
Расскажем, как, не напрягаясь, создать интересный компонент Toast в SwiftUI. Присоединяйтесь - скучно не будет!
Вопросы для собеседования iOS — Swift. Часть 1
Рассмотрим самый важный и частый вопрос - шаблон делегирования. А также проверки времени выполнения, соответствие NSObject классу Swift, протоколы.
Что такое закрепление сертификата в Android
Закрепление или выбор сертификата - важный шаг при разработке приложений. Рассмотрим, какие бывают сертификаты, в чем заключаются особенности и как их лучше использовать.
Разветвление на различные очереди SQS с помощью фильтрации сообщений SNS
SNS и SQS — сервисы AWS, которые часто находят применение в событийно-управляемой архитектуре. Сочетание этих сервисов дает возможность отправлять сообщения по разным каналам. Часто...
Реализация gRPC и PostgreSQL на GO
Пошагово создадим масштабируемое серверное приложение: подключим модульные тесты, контейнеризируем приложение и задействуем Envoy как прокси-службу взаимодействия. В итоге спроектируем, выполним оценку, запустим и протестируем его.
Реактивное программирование с Combine
Увидим фреймворк в действии, шаг за шагом пройдя процесс настройки конвейера связываемых в цепочку операторов обработки значений, выдаваемых издателями для подписчиков. Подробно разберем пример и попробуем реализовать в проекте.
Изучаем Rust. Потоковая передача tar-архива
Сделаем подробную реализацию асинхронного потока с нетривиальным конечным автоматом, проверим в консоли создание tar-архива, полностью распознаваемого в API среды выполнения Docker. Выполним идеальную интеграцию результата в процесс загрузки файлов.
Эволюция кортежей в C#
Углубимся в изучение кортежей в C#. Посмотрим, как они совершенствовались от версии к версии и обрастали новыми эффективными возможностями.
Мой первый опыт работы с языком Gleam
Gleam - надежный инструмент в мире функционального программирования. Проведем объективное исследование возможностей этого языка и выделим его сильные стороны.
Важные вопросы для собеседования по корутинам для опытных разработчиков Android
Рассмотрим преимущества корутин, создание и запуск, отличия от потоков, управление областью, приостанавливающие функции, обработка исключений, контекст и диспетчеры. Пошагово разберем выполнение фоновых задач, лучшие практики отмены корутин.
Модульное тестирование для долговечного кода
Как вместо постоянной отладки сфокусироваться на создании функционала? Написать тесты! Дадим рекомендации по написанию эффективных модульных тестов.
Модульное тестирование с помощью JUnit в Android
Тестирование — неотъемлемая часть полноценной разработки программного обеспечения. Сегодня рассмотрим фреймворк JUnit, а также функции и правила, которые помогут провести тесты Android-продукта на достойном уровне.
Новичкам на заметку: реализация шаблона Singleton в Ruby
Обучающее руководство по шаблону проектирования Singleton в Ruby: дадим определение, рассмотрим примеры, расскажем о преимуществах и недостатках.
C++: подробное руководство по разыменованию указателя
Разберем нюансы и ошибки разыменования. Проиллюстрируем примерами и реальным сценарием. Сравним эффективность прямого доступа к массиву и разыменования указателя.
Плохого кода не существует!
Немного размышлений на тему плохого кода, приправленных перчинкой юмора.
15 бизнес-идей агентов на основе ИИ в 2025 году
Агенты на базе ИИ открывают невероятные возможности перед предпринимателями. Они помогают достичь успехов в самых различных бизнес-сферах - будь то автоматизация поддержки клиентов, оптимизация продаж или разработка инновационных SaaS-решений. Не упустите и вы свой шанс извлечь выгоду с помощью ИИ в 2025 году!
Рекомендации по Go: выделение памяти с new
Разберем нюансы функции new на примерах. Для каких целей и типов она используется, как ею упрощается инициализация?
Байт-код JVM: манипулирование и инструментация
Манипулирование байт-кодом JVM и его инструментация - техники, позволяющие максимально оптимизировать Java-приложения и входящие в арсенал каждого продвинутого разработчика. Узнайте о широких возможностях этих техник, сложностях их применения и лучших практиках.
Как использовать управляемые Gradle устройства с собственными девайсами
Реализуем абстракцию Device с устройствами и эмуляторами. Используем собственную ферму устройств для удаленного запуска тестов и распараллеливания выполнения на нескольких устройствах.
Я бросил изучать Python и стал лучшим разработчиком
Хотите попасть в 1 % лучших Python-разработчиков? Возможно, вам нужно просто перестать стремиться объять необъятное и сосредоточиться на главном? А может, вместо поиска последних трендов в области Python, стоит перейти к решению реальных задач?
17 полезных скриптов автоматизации на Python. Часть 1
Эти скрипты значительно повысят вашу продуктивность и производительность. Они оптимизируют решение многих повседневных задач, включая сбор изображений, анализ качества кода, создание искусственных данных, мониторинг системных ресурсов, обработку email-рассылок, резюмирование статей, корректуру текстов.
Внедрение зависимостей для создания элегантных горизонтальных архитектур
Как не попасть в ловушку вертикальных архитектур? Рассмотрим преимущества горизонтальной структуры с внедрением зависимостей и построим такую.
12 проверенных способов оформления продакшн-кода на Python
Возьмите на заметку 12 способов оформления продакшн-кода, повышающих его удобочитаемость и производительность. Они выручат вас во многих случаях, включая распаковку кортежа, списковое выражение, объединение строк, создание цепочки методов, индексирование вложенных словарей.
Наш первый миллиард строк в DuckDB
Как одной машиной заменяется целый кластер? Расскажем об особенностях DuckDB, решаемых задачах и приобретенном с ее помощью опыте в реальном проекте обработки 450 Гб.
Зачем усложнять разработку с AWS Lambda?
Время подискутировать! Автор рассматривает наметившуюся тенденцию усложнять бессерверную разработку с помощью AWS Lambda и высказывается за сохранение простоты и модульности данного сервиса.
Python — идеальный инструмент для любой проблемы
Размышления о моей первой программе на Python.
Размышления это всегда помогающее (а иногда и развлекающее) занятие. Из ностальгических соображений, конечно, если можно испытывать ностальгию по...
Забудьте про сохранение изображений на Android в JPEG/PNG: HEIF и AVIF сэкономят до 50...
Хотите, чтобы ваше Android-приложение стало легче, быстрее и современнее? Откажитесь от старых форматов JPEG/PNG и переходите на HEIF и AVIF, чтобы сохранять те же изображения, только размером в 2 раза меньше и без потери качества. Они обеспечат вам молниеносную загрузку изображений и разгрузку памяти на 50 %.
Kotlin: изолированные классы и интерфейс
Хотите писать Kotlin-код, который компилятор проверяет за вас? Все дело в грамотном использовании изолированных классов и интерфейсов. Узнайте, как выбирать между ними для создания идеальной — гибкой, удобочитаемой и типобезопасной — архитектуры.








































































































