Pull to refresh
26
0
Павел Осипов @PavelOsipov

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

Send message

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

Reading time36 min
Views16K

image


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

Читать дальше →
Total votes 55: ↑55 and ↓0+55
Comments48

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

Reading time12 min
Views13K


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

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

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

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

Reading time10 min
Views16K


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

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

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

Reading time7 min
Views9.1K


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

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity