Как стать автором
Обновить
26
0
Павел Осипов @PavelOsipov

Разработчик iOS/C++

Отправить сообщение

Блеск и нищета key-value базы данных LMDB в приложениях для iOS

Время на прочтение36 мин
Количество просмотров17K

image


Осенью 2019 года в iOS команде Облака Mail.ru произошло долгожданное событие. Основной базой данных для персистентного хранения состояния приложения стала весьма экзотическая для мобильного мира Lightning Memory-Mapped Database (LMDB). Под катом вашему вниманию предлагается её подробный обзор в четырех частях. Сначала поговорим о причинах столь нетривиального и трудного выбора. Затем перейдем к рассмотрению трёх китов в основе архитектуры LMDB: отображённые в память файлы, B+-дерево, copy-on-write подход для реализации транзакционности и мультиверсионности. Наконец, на сладкое — практическая часть. В ней рассмотрим, как поверх низкоуровневого key-value API спроектировать и реализовать схему базы с несколькими таблицами, включая индексную.​

Читать дальше →
Всего голосов 55: ↑55 и ↓0+55
Комментарии48

Использование паттерна SchedulableObject для выделения бизнес-логики в отдельный поток

Время на прочтение12 мин
Количество просмотров14K


Интерфейс мобильного приложения — это лицо продукта. Чем более отзывчив интерфейс, тем больше радости приносит продукт. Однако удовлетворённость от использования приложения зависит прежде всего от объёма его функций. По мере увеличения количества и сложности задач они требуют всё больше и больше времени. Если архитектура приложения предполагает, что все они выполняются в главном потоке, то задачи бизнес-логики начинают конкурировать за время с задачами отрисовки интерфейса. При таком подходе рано или поздно обязательно находится сценарий, исполнение которого приводит к залипанию приложения. Для борьбы с этой напастью существует три принципиально разных подхода:

  1. Оптимизация алгоритмов и структур данных, вовлечённых в исполнение проблемного сценария.
  2. Вынос проблемного сценария из главного потока.
  3. Вынос из главного потока всех функций приложения, за исключением собственно рендеринга пользовательского интерфейса.

Паттерн SchedulableObject позволяет аккуратно реализовать третий сценарий. Под катом рассматриваются его части с примерами реализации на Swift, а также преимущества и недостатки по сравнению с первыми двумя подходами.
Читать дальше →
Всего голосов 27: ↑26 и ↓1+25
Комментарии2

«Сверхзвуковая» загрузка фотографий в Облако с помощью собственного NSInputStream

Время на прочтение10 мин
Количество просмотров16K


Максимально быстрая загрузка фотографий и видео с устройства на сервер была нашим основным приоритетом при разработке мобильного приложения Облако Mail.Ru для iOS. Кроме того, с самой первой версии приложения мы предоставили пользователям возможность включить автоматическую загрузку на сервер всего содержимого системной галереи. Это очень удобно для тех, кто волнуется о возможной потере телефона, однако, как вы понимаете, увеличивает объем передаваемых данных в разы.

Итак, мы поставили перед собой задачу сделать загрузку фото и видео из мобильного приложения Облака Mail.Ru не просто хорошей, а близкой к идеальной. Результатом стала наша библиотека POSInputStreamLibrary, которая реализует потоковую загрузку в сеть фото и видео из системной галереи iOS. Благодаря ее тесной интеграции с фреймворками ALAssetLibrary и CFNetwork загрузка в приложении происходит очень быстро и не требует ни байта свободного места на устройстве. О реализации собственного наследника класса NSInputStream из iOS Developer Library я расскажу в этом посте.
Читать дальше →
Всего голосов 67: ↑56 и ↓11+45
Комментарии16

Портируем Qt Quick Components на S60 5th edition

Время на прочтение7 мин
Количество просмотров9.1K


Приступая к реализации клиента Футубры для Symbian, я не сомневался в выборе Qt Quick в качестве фреймворка для реализации пользовательского интерфейса приложения. Благодаря его реактивному биндингу данных становится возможным реализовывать слой представления, используя передовые архитектурные паттерны проектирования, в частности — Model-View-ViewModel. Однако Qt Quick в «голом» виде располагает очень скудным набором базовых элементов, из которых предлагается собирать более сложные: кнопки, поля ввода и прочее. Памятуя, какая уйма времени ушла на их реализацию при создании пользовательского интерфейса на прошлом проекте, я сразу отказался от идеи делать их собственноручно и обратил свой взор на библиотеку Qt Quick Components. Под катом находится описание того, как мне удалось расширить границы её применимости и «завести» для платформы S60 5th edition.
Читать дальше →
Всего голосов 27: ↑27 и ↓0+27
Комментарии13

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность