SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
перевод 
Переводим без 
интернета 
Ваня Москалёв, 
отдел машинного перевода
Мобильный интернет 
Mobile! 
60 % 
Процент мобильных пользователей 
интернета в мире в 2013 году
Web of Apps 
• Приложения стали практически 
неразделимы от веба, стали 
"представлением" веб-сущности на 
устройстве. 
• Разработчики подчас строят бизнес- 
логику вокруг получения данных от веб- 
сервиса.
Где нужен офлайн? 
• В путешествиях. Например, перевод 
больше всего нужен там, где обычно 
недоступен интернет. 
• При плохом подключении (метро). 
• Для экономии трафика.
Я.Перевод 
• 16 марта 2011 – бета-версия онлайн- 
сервиса Яндекс.Перевод. 
• В декабре 2012 – первое мобильное 
приложение – для iPhone, спустя полгода 
Android, спустя год Windows Phone. 
• Весна-лето 2014 – версия 2.0 для iOS с 
офлайн-переводом.
Архитектура и 
реализация
Как устроен Перевод 
Синхронный 
перевод 
Определение 
языка 
Озвучка 
Машинный 
Предиктор словарь
Используемые веб- 
сервисы 
Translate Detect 
Predictor Text-To- 
Клиентская 
логика 
Speech 
Dictionary 
Прочее
Что нужно было 
сделать 
• Сжать/урезать переводные модели и 
измерить качество. 
• Портировать серверный код на 
устройство. 
• Зарефакторить приложение.
Что было 
• Система, спроектированная в краткие 
сроки для работы в онлайн-режиме. 
• Довольно высокая связность. 
• Накопившиеся поправки для логики 
работы приложения.
Как рефакторили 
• Четко определили и описали 
проблемную область. 
• Понизили связность системы (помогла 
абстракция над сервисами). 
• Определили, описали и реализовали 
юзкейсы, обложили их тестами.
Проблемная область 
YTR Domain 
LanguagePair 
Translation 
Prediction 
Dictionary 
Errors 
Business 
Logic 
<I> DAL
Больше абстракций! 
Translate S. Presentation 
Business 
Logic 
Logic 
Predictor S. 
Dictionary S.
Больше абстракций! 
Business 
Logic 
Presentation 
Logic 
Web 
<I> 
Offline 
Web 
Offline 
Web 
Offline 
<I> 
<I>
Проектирование 
логики 
• Нужно было объединить и описать в 
спецификациях все юзкейсы. 
• Был объявлен базовый класс, 
представляющий составной запрос 
(гибрид Strategy и Command). 
• Написаны тесты на конкретные 
реализации этого класса.
Юзкейсы 
• Fail-over: переход к офлайн-модели, если 
веб-сервис недоступен. 
• Логика синхронного перевода. 
• "Сборка" ответов разных сервисов в 
составной ответ.
Загрузчик 
• Один из самых важных и сложных 
компонентов – загрузчик. 
• Две реализации: для iOS 6 и iOS 7, 
фоновая загрузка на iOS 7. 
• Оказался многофакторным 
компонентом.
Выводы 
• Построенная вокруг концепции 
абстрактных сервисов архитектура 
оказалась самым подходящим решением. 
• Нельзя недооценивать сложность 
сопутствующих задач (загрузчик).
Грабли
Грабли: NSURLSession 
• Сетевые задачи, созданные в фоне, 
всегда создаются с флагом 
discretionary 
• Такие задачи тормозят и перестают 
работать если у устройства осталось 
мало заряда. На это жалуются 
пользователи ;)
Грабли: 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-задачи
Грабли: NSURLSession 
• NSURLSession не умеет возобновлять 
загрузки из Content Delivery Network. 
• Под капотом – If-Modified-Since и ETag. 
• Если CDN отдает ETag, то возобновление 
загрузок сломается (каждый сервер 
отдает свой ETag).
Грабли: mmap 
• Переводные модели состоят из 
нескольких файлов, каждый из которых 
отображается в память. 
• Для перевода в одном направлении 
нужно ~270 МБ виртуального адресного 
пространства.
Грабли: 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, если она занята другими 
процессами или недоступна одним чанком.
Грабли: mmap 
• На iPhone 4 / 4S система выделяет около 
700 МБ пространства на девайс. 
• Оптимизация: пришлось пожертовать 
скоростью отклика при переключении 
между направлениями.
Грабли: донести фичу 
до пользователей 
Пользователи сами не 
вникнут в сложный 
функционал. Нужно 
как можно больше 
учить и объяснять.
Важно: фидбек внутри 
приложения 
Некоторые 
пользователи любят 
жаловаться. 
Встроенная форма 
фидбека поможет 
быстрее разбираться 
с багами.
С чем мы столкнулись 
• NSURLSession не дружит с CDN. 
• NSURLSession оптимизируется системой. 
• Ограничения виртуальной памяти. 
• Про фичи нужно не только рассказывать, 
их нужно показывать. 
• In-App фидбек – очень удачное решение.
Открытые вопросы 
(обсудим вместе?) 
• Как грамотно собирать статистику по 
User Experience в гибридном 
приложении? 
• Как лучше всего осуществлять переход 
между онлайн и офлайн-режимом? 
Ручной и автоматический подходы.
Спасибо за внимание!
Ваня Москалёв 
iOS-разработчик, 
отдел машинного перевода 
! 
ivanmoskalev@yandex-team.ru 
@ivanmoskalev

Mais conteúdo relacionado

Destaque (15)

Consultas con sentencias insert, update y campos calculados en sql server
Consultas con sentencias insert, update y campos calculados en sql serverConsultas con sentencias insert, update y campos calculados en sql server
Consultas con sentencias insert, update y campos calculados en sql server
 
NR 13
NR 13NR 13
NR 13
 
curso utpl
curso utplcurso utpl
curso utpl
 
NR 16
NR 16NR 16
NR 16
 
PARNA Serra do Divisor: FAUC + PEP2010-2011
PARNA Serra do Divisor: FAUC + PEP2010-2011PARNA Serra do Divisor: FAUC + PEP2010-2011
PARNA Serra do Divisor: FAUC + PEP2010-2011
 
Loslipidos999
Loslipidos999Loslipidos999
Loslipidos999
 
NRR 01
NRR 01NRR 01
NRR 01
 
5 Sencillos Pasos Para La Influenza
5 Sencillos Pasos Para La Influenza5 Sencillos Pasos Para La Influenza
5 Sencillos Pasos Para La Influenza
 
EDUCAÇÃO DIGITAL
EDUCAÇÃO DIGITALEDUCAÇÃO DIGITAL
EDUCAÇÃO DIGITAL
 
MCPI at Edge Hill
MCPI at Edge HillMCPI at Edge Hill
MCPI at Edge Hill
 
Botones De AccióN
Botones De AccióNBotones De AccióN
Botones De AccióN
 
Os desafios do país e das nações sintepe gravatá 19 12 2014
Os desafios do país e das nações  sintepe gravatá 19 12 2014Os desafios do país e das nações  sintepe gravatá 19 12 2014
Os desafios do país e das nações sintepe gravatá 19 12 2014
 
Tutorial hot potatoes the masher
Tutorial hot potatoes the masherTutorial hot potatoes the masher
Tutorial hot potatoes the masher
 
NR 17 Anexo 02
NR 17 Anexo 02NR 17 Anexo 02
NR 17 Anexo 02
 
Construcción bomba de agua
Construcción bomba de aguaConstrucción bomba de agua
Construcción bomba de agua
 

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

Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложений
Media Gorod
 
Что такое Java? Кто такой Java разработчик?
Что такое Java? Кто такой Java разработчик?Что такое Java? Кто такой Java разработчик?
Что такое Java? Кто такой Java разработчик?
GetITAbroad
 
Как делать глобальный проект
Как делать глобальный проектКак делать глобальный проект
Как делать глобальный проект
isdeforum
 
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...
Ontico
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
Stanfy
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
Serghei Urban
 
Видеозвонки и шаринг экрана в мобильном приложении
Видеозвонки и шаринг экрана в мобильном приложенииВидеозвонки и шаринг экрана в мобильном приложении
Видеозвонки и шаринг экрана в мобильном приложении
Voximplant
 
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Ontico
 

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

Sivko
SivkoSivko
Sivko
 
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  МоскалёвПереводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван Москалёв
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложений
 
Что такое Java? Кто такой Java разработчик?
Что такое Java? Кто такой Java разработчик?Что такое Java? Кто такой Java разработчик?
Что такое Java? Кто такой Java разработчик?
 
Diplom 1
Diplom 1Diplom 1
Diplom 1
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
 
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps DevelopmentMobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
 
Локализация - как делать глобальный проект?
Локализация - как делать глобальный проект?Локализация - как делать глобальный проект?
Локализация - как делать глобальный проект?
 
Как делать глобальный проект
Как делать глобальный проектКак делать глобальный проект
Как делать глобальный проект
 
Interbase xe7 - универсальная субд для windows linux mac ios android
Interbase xe7 - универсальная субд для windows linux mac ios androidInterbase xe7 - универсальная субд для windows linux mac ios android
Interbase xe7 - универсальная субд для windows linux mac ios android
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET Core
 
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
Appery.io Ukraine_2016
Appery.io Ukraine_2016Appery.io Ukraine_2016
Appery.io Ukraine_2016
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
 
Видеозвонки и шаринг экрана в мобильном приложении
Видеозвонки и шаринг экрана в мобильном приложенииВидеозвонки и шаринг экрана в мобильном приложении
Видеозвонки и шаринг экрана в мобильном приложении
 
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
 
Google appengine for_starupweekend2010
Google appengine for_starupweekend2010Google appengine for_starupweekend2010
Google appengine for_starupweekend2010
 

Mais de Yandex

Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Yandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Yandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Yandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Yandex
 

Mais de Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

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

  • 1.
  • 2. перевод Переводим без интернета Ваня Москалёв, отдел машинного перевода
  • 3. Мобильный интернет Mobile! 60 % Процент мобильных пользователей интернета в мире в 2013 году
  • 4. Web of Apps • Приложения стали практически неразделимы от веба, стали "представлением" веб-сущности на устройстве. • Разработчики подчас строят бизнес- логику вокруг получения данных от веб- сервиса.
  • 5. Где нужен офлайн? • В путешествиях. Например, перевод больше всего нужен там, где обычно недоступен интернет. • При плохом подключении (метро). • Для экономии трафика.
  • 6. Я.Перевод • 16 марта 2011 – бета-версия онлайн- сервиса Яндекс.Перевод. • В декабре 2012 – первое мобильное приложение – для iPhone, спустя полгода Android, спустя год Windows Phone. • Весна-лето 2014 – версия 2.0 для iOS с офлайн-переводом.
  • 8. Как устроен Перевод Синхронный перевод Определение языка Озвучка Машинный Предиктор словарь
  • 9. Используемые веб- сервисы Translate Detect Predictor Text-To- Клиентская логика Speech Dictionary Прочее
  • 10. Что нужно было сделать • Сжать/урезать переводные модели и измерить качество. • Портировать серверный код на устройство. • Зарефакторить приложение.
  • 11. Что было • Система, спроектированная в краткие сроки для работы в онлайн-режиме. • Довольно высокая связность. • Накопившиеся поправки для логики работы приложения.
  • 12. Как рефакторили • Четко определили и описали проблемную область. • Понизили связность системы (помогла абстракция над сервисами). • Определили, описали и реализовали юзкейсы, обложили их тестами.
  • 13. Проблемная область YTR Domain LanguagePair Translation Prediction Dictionary Errors Business Logic <I> DAL
  • 14. Больше абстракций! Translate S. Presentation Business Logic Logic Predictor S. Dictionary S.
  • 15. Больше абстракций! Business Logic Presentation Logic Web <I> Offline Web Offline Web Offline <I> <I>
  • 16. Проектирование логики • Нужно было объединить и описать в спецификациях все юзкейсы. • Был объявлен базовый класс, представляющий составной запрос (гибрид Strategy и Command). • Написаны тесты на конкретные реализации этого класса.
  • 17. Юзкейсы • Fail-over: переход к офлайн-модели, если веб-сервис недоступен. • Логика синхронного перевода. • "Сборка" ответов разных сервисов в составной ответ.
  • 18. Загрузчик • Один из самых важных и сложных компонентов – загрузчик. • Две реализации: для iOS 6 и iOS 7, фоновая загрузка на iOS 7. • Оказался многофакторным компонентом.
  • 19. Выводы • Построенная вокруг концепции абстрактных сервисов архитектура оказалась самым подходящим решением. • Нельзя недооценивать сложность сопутствующих задач (загрузчик).
  • 21. Грабли: NSURLSession • Сетевые задачи, созданные в фоне, всегда создаются с флагом discretionary • Такие задачи тормозят и перестают работать если у устройства осталось мало заряда. На это жалуются пользователи ;)
  • 22. Грабли: 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-задачи
  • 23. Грабли: NSURLSession • NSURLSession не умеет возобновлять загрузки из Content Delivery Network. • Под капотом – If-Modified-Since и ETag. • Если CDN отдает ETag, то возобновление загрузок сломается (каждый сервер отдает свой ETag).
  • 24. Грабли: mmap • Переводные модели состоят из нескольких файлов, каждый из которых отображается в память. • Для перевода в одном направлении нужно ~270 МБ виртуального адресного пространства.
  • 25. Грабли: 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, если она занята другими процессами или недоступна одним чанком.
  • 26. Грабли: mmap • На iPhone 4 / 4S система выделяет около 700 МБ пространства на девайс. • Оптимизация: пришлось пожертовать скоростью отклика при переключении между направлениями.
  • 27. Грабли: донести фичу до пользователей Пользователи сами не вникнут в сложный функционал. Нужно как можно больше учить и объяснять.
  • 28. Важно: фидбек внутри приложения Некоторые пользователи любят жаловаться. Встроенная форма фидбека поможет быстрее разбираться с багами.
  • 29. С чем мы столкнулись • NSURLSession не дружит с CDN. • NSURLSession оптимизируется системой. • Ограничения виртуальной памяти. • Про фичи нужно не только рассказывать, их нужно показывать. • In-App фидбек – очень удачное решение.
  • 30. Открытые вопросы (обсудим вместе?) • Как грамотно собирать статистику по User Experience в гибридном приложении? • Как лучше всего осуществлять переход между онлайн и офлайн-режимом? Ручной и автоматический подходы.
  • 32. Ваня Москалёв iOS-разработчик, отдел машинного перевода ! ivanmoskalev@yandex-team.ru @ivanmoskalev