Осенью 2019 года в iOS команде Облака Mail.ru произошло долгожданное событие. Основной базой данных для персистентного хранения состояния приложения стала весьма экзотическая для мобильного мира Lightning Memory-Mapped Database (LMDB). Под катом вашему вниманию предлагается её подробный обзор в четырех частях. Сначала поговорим о причинах столь нетривиального и трудного выбора. Затем перейдем к рассмотрению трёх китов в основе архитектуры LMDB: отображённые в память файлы, B+-дерево, copy-on-write подход для реализации транзакционности и мультиверсионности. Наконец, на сладкое — практическая часть. В ней рассмотрим, как поверх низкоуровневого key-value API спроектировать и реализовать схему базы с несколькими таблицами, включая индексную.
Павел Осипов @PavelOsipov
Разработчик iOS/C++
Использование паттерна SchedulableObject для выделения бизнес-логики в отдельный поток
12 min
13KИнтерфейс мобильного приложения — это лицо продукта. Чем более отзывчив интерфейс, тем больше радости приносит продукт. Однако удовлетворённость от использования приложения зависит прежде всего от объёма его функций. По мере увеличения количества и сложности задач они требуют всё больше и больше времени. Если архитектура приложения предполагает, что все они выполняются в главном потоке, то задачи бизнес-логики начинают конкурировать за время с задачами отрисовки интерфейса. При таком подходе рано или поздно обязательно находится сценарий, исполнение которого приводит к залипанию приложения. Для борьбы с этой напастью существует три принципиально разных подхода:
- Оптимизация алгоритмов и структур данных, вовлечённых в исполнение проблемного сценария.
- Вынос проблемного сценария из главного потока.
- Вынос из главного потока всех функций приложения, за исключением собственно рендеринга пользовательского интерфейса.
Паттерн SchedulableObject позволяет аккуратно реализовать третий сценарий. Под катом рассматриваются его части с примерами реализации на Swift, а также преимущества и недостатки по сравнению с первыми двумя подходами.
+25
«Сверхзвуковая» загрузка фотографий в Облако с помощью собственного NSInputStream
10 min
16KМаксимально быстрая загрузка фотографий и видео с устройства на сервер была нашим основным приоритетом при разработке мобильного приложения Облако Mail.Ru для iOS. Кроме того, с самой первой версии приложения мы предоставили пользователям возможность включить автоматическую загрузку на сервер всего содержимого системной галереи. Это очень удобно для тех, кто волнуется о возможной потере телефона, однако, как вы понимаете, увеличивает объем передаваемых данных в разы.
Итак, мы поставили перед собой задачу сделать загрузку фото и видео из мобильного приложения Облака Mail.Ru не просто хорошей, а близкой к идеальной. Результатом стала наша библиотека POSInputStreamLibrary, которая реализует потоковую загрузку в сеть фото и видео из системной галереи iOS. Благодаря ее тесной интеграции с фреймворками ALAssetLibrary и CFNetwork загрузка в приложении происходит очень быстро и не требует ни байта свободного места на устройстве. О реализации собственного наследника класса NSInputStream из iOS Developer Library я расскажу в этом посте.
+45
Портируем Qt Quick Components на S60 5th edition
7 min
9.1KПриступая к реализации клиента Футубры для Symbian, я не сомневался в выборе Qt Quick в качестве фреймворка для реализации пользовательского интерфейса приложения. Благодаря его реактивному биндингу данных становится возможным реализовывать слой представления, используя передовые архитектурные паттерны проектирования, в частности — Model-View-ViewModel. Однако Qt Quick в «голом» виде располагает очень скудным набором базовых элементов, из которых предлагается собирать более сложные: кнопки, поля ввода и прочее. Памятуя, какая уйма времени ушла на их реализацию при создании пользовательского интерфейса на прошлом проекте, я сразу отказался от идеи делать их собственноручно и обратил свой взор на библиотеку Qt Quick Components. Под катом находится описание того, как мне удалось расширить границы её применимости и «завести» для платформы S60 5th edition.
+27
Information
- Rating
- Does not participate
- Location
- Москва, Москва и Московская обл., Россия
- Date of birth
- Registered
- Activity