Your SlideShare is downloading. ×
0
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван Москалёв

255

Published on

Рассказ о том, как удалось портировать сервис машинного перевода на мобильное устройство, какие сопутствующие задачи пришлось решить и какие грабли поджидали на пути. Обсудим также, насколько …

Рассказ о том, как удалось портировать сервис машинного перевода на мобильное устройство, какие сопутствующие задачи пришлось решить и какие грабли поджидали на пути. Обсудим также, насколько современные мобильные приложения зависимы от наличия сети и как проектировать архитектуру так, чтобы в будущем не набить шишек при добавлении офлайн-режима.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
255
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. перевод Переводим без интернета Ваня Москалёв, отдел машинного перевода
  • 2. Мобильный интернет Mobile! 60 % Процент мобильных пользователей интернета в мире в 2013 году
  • 3. Web of Apps • Приложения стали практически неразделимы от веба, стали "представлением" веб-сущности на устройстве. • Разработчики подчас строят бизнес- логику вокруг получения данных от веб- сервиса.
  • 4. Где нужен офлайн? • В путешествиях. Например, перевод больше всего нужен там, где обычно недоступен интернет. • При плохом подключении (метро). • Для экономии трафика.
  • 5. Я.Перевод • 16 марта 2011 – бета-версия онлайн- сервиса Яндекс.Перевод. • В декабре 2012 – первое мобильное приложение – для iPhone, спустя полгода Android, спустя год Windows Phone. • Весна-лето 2014 – версия 2.0 для iOS с офлайн-переводом.
  • 6. Архитектура и реализация
  • 7. Как устроен Перевод Синхронный перевод Определение языка Озвучка Машинный Предиктор словарь
  • 8. Используемые веб- сервисы Translate Detect Predictor Text-To- Клиентская логика Speech Dictionary Прочее
  • 9. Что нужно было сделать • Сжать/урезать переводные модели и измерить качество. • Портировать серверный код на устройство. • Зарефакторить приложение.
  • 10. Что было • Система, спроектированная в краткие сроки для работы в онлайн-режиме. • Довольно высокая связность. • Накопившиеся поправки для логики работы приложения.
  • 11. Как рефакторили • Четко определили и описали проблемную область. • Понизили связность системы (помогла абстракция над сервисами). • Определили, описали и реализовали юзкейсы, обложили их тестами.
  • 12. Проблемная область YTR Domain LanguagePair Translation Prediction Dictionary Errors Business Logic <I> DAL
  • 13. Больше абстракций! Translate S. Presentation Business Logic Logic Predictor S. Dictionary S.
  • 14. Больше абстракций! Business Logic Presentation Logic Web <I> Offline Web Offline Web Offline <I> <I>
  • 15. Проектирование логики • Нужно было объединить и описать в спецификациях все юзкейсы. • Был объявлен базовый класс, представляющий составной запрос (гибрид Strategy и Command). • Написаны тесты на конкретные реализации этого класса.
  • 16. Юзкейсы • Fail-over: переход к офлайн-модели, если веб-сервис недоступен. • Логика синхронного перевода. • "Сборка" ответов разных сервисов в составной ответ.
  • 17. Загрузчик • Один из самых важных и сложных компонентов – загрузчик. • Две реализации: для iOS 6 и iOS 7, фоновая загрузка на iOS 7. • Оказался многофакторным компонентом.
  • 18. Выводы • Построенная вокруг концепции абстрактных сервисов архитектура оказалась самым подходящим решением. • Нельзя недооценивать сложность сопутствующих задач (загрузчик).
  • 19. Грабли
  • 20. Грабли: NSURLSession • Сетевые задачи, созданные в фоне, всегда создаются с флагом discretionary • Такие задачи тормозят и перестают работать если у устройства осталось мало заряда. На это жалуются пользователи ;)
  • 21. Грабли: NSURLSession NSDictionary *userInfo = @{ @"background" : @(self.context.isBackground) }; ! // Сериализуем в JSON NSData *data = [NSJSONSerialization dataWithJSONObject:userInfo options:0 error:nil]; NSString *description = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; ! // Прописываем в taskDescription sessionTask.taskDescription = description; Можно хранить метаданные в -[NSURLSessionTask taskDescription] и при входе в приложение пересоздавать discretionary-задачи
  • 22. Грабли: NSURLSession • NSURLSession не умеет возобновлять загрузки из Content Delivery Network. • Под капотом – If-Modified-Since и ETag. • Если CDN отдает ETag, то возобновление загрузок сломается (каждый сервер отдает свой ETag).
  • 23. Грабли: mmap • Переводные модели состоят из нескольких файлов, каждый из которых отображается в память. • Для перевода в одном направлении нужно ~270 МБ виртуального адресного пространства.
  • 24. Грабли: mmap File = fopen(path.c_str(), "rb"); fseek(File, 0, SEEK_END); Size = static_cast<size_t>(ftell(File)); fseek(File, 0, SEEK_SET); Data = mmap(0, Size, PROT_READ, MAP_SHARED, fileno(File), 0); Объем виртуального адресного пространства на iOS ограничен, mmap может вернуть MAP_FAILED, если она занята другими процессами или недоступна одним чанком.
  • 25. Грабли: mmap • На iPhone 4 / 4S система выделяет около 700 МБ пространства на девайс. • Оптимизация: пришлось пожертовать скоростью отклика при переключении между направлениями.
  • 26. Грабли: донести фичу до пользователей Пользователи сами не вникнут в сложный функционал. Нужно как можно больше учить и объяснять.
  • 27. Важно: фидбек внутри приложения Некоторые пользователи любят жаловаться. Встроенная форма фидбека поможет быстрее разбираться с багами.
  • 28. С чем мы столкнулись • NSURLSession не дружит с CDN. • NSURLSession оптимизируется системой. • Ограничения виртуальной памяти. • Про фичи нужно не только рассказывать, их нужно показывать. • In-App фидбек – очень удачное решение.
  • 29. Открытые вопросы (обсудим вместе?) • Как грамотно собирать статистику по User Experience в гибридном приложении? • Как лучше всего осуществлять переход между онлайн и офлайн-режимом? Ручной и автоматический подходы.
  • 30. Спасибо за внимание!
  • 31. Ваня Москалёв iOS-разработчик, отдел машинного перевода ! ivanmoskalev@yandex-team.ru @ivanmoskalev

×